From ce241abe6014ee2ab32bf093337ac9a6a82327f2 Mon Sep 17 00:00:00 2001 From: okxlin Date: Mon, 4 Sep 2023 01:46:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0nvpress=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8(=E6=84=9F=E8=B0=A2=E7=BD=91=E5=8F=8B?= =?UTF-8?q?=E5=8C=85=E5=AD=90=E5=8F=94=E7=9A=84=E6=8A=95=E7=A8=BF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/nvpress/3.5.0/.env.sample | 3 ++ apps/nvpress/3.5.0/data.yml | 17 ++++++++++ apps/nvpress/3.5.0/docker-compose.yml | 20 ++++++++++++ apps/nvpress/README.md | 43 +++++++++++++++++++++++++ apps/nvpress/data.yml | 20 ++++++++++++ apps/nvpress/latest/.env.sample | 3 ++ apps/nvpress/latest/data.yml | 17 ++++++++++ apps/nvpress/latest/docker-compose.yml | 20 ++++++++++++ apps/nvpress/logo.png | Bin 0 -> 13043 bytes 9 files changed, 143 insertions(+) create mode 100644 apps/nvpress/3.5.0/.env.sample create mode 100644 apps/nvpress/3.5.0/data.yml create mode 100644 apps/nvpress/3.5.0/docker-compose.yml create mode 100644 apps/nvpress/README.md create mode 100644 apps/nvpress/data.yml create mode 100644 apps/nvpress/latest/.env.sample create mode 100644 apps/nvpress/latest/data.yml create mode 100644 apps/nvpress/latest/docker-compose.yml create mode 100644 apps/nvpress/logo.png diff --git a/apps/nvpress/3.5.0/.env.sample b/apps/nvpress/3.5.0/.env.sample new file mode 100644 index 00000000..813bef31 --- /dev/null +++ b/apps/nvpress/3.5.0/.env.sample @@ -0,0 +1,3 @@ +CONTAINER_NAME="nvpress" +PANEL_APP_PORT_HTTP="40148" +DATA_PATH="./data" diff --git a/apps/nvpress/3.5.0/data.yml b/apps/nvpress/3.5.0/data.yml new file mode 100644 index 00000000..151899ed --- /dev/null +++ b/apps/nvpress/3.5.0/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: 40148 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: DATA_PATH + labelEn: Data folder path + labelZh: 数据文件夹路径 + required: true + type: text diff --git a/apps/nvpress/3.5.0/docker-compose.yml b/apps/nvpress/3.5.0/docker-compose.yml new file mode 100644 index 00000000..ad2cc081 --- /dev/null +++ b/apps/nvpress/3.5.0/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' +services: + nvpress: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8081" + volumes: + - "${DATA_PATH}/nv-content:/usr/src/app/nv-content" + - "${DATA_PATH}/nv-themes:/usr/src/app/nv-themes" + - "${DATA_PATH}/nv-plugins:/usr/src/app/nv-plugins" + image: pandastd/nvpress:3.5.0 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/nvpress/README.md b/apps/nvpress/README.md new file mode 100644 index 00000000..8a696c71 --- /dev/null +++ b/apps/nvpress/README.md @@ -0,0 +1,43 @@ +# 什么是nvPress + +## nvPress是一个完全由 Javascript 驱动的内容管理程序 + +## 虽然nvPress是免费开放使用的,但源代码并不开放。本项目不包含nvPress的源代码,仅收集使用过程中遇到的错误、BUG + +- 功能包括:用户管理、媒体管理、文章管理、主题、插件等。 + +- 可用于:个人博客、作品集、网站内容展示。 + +- 可通过主题、插件来实现功能的二次扩展 + +## 持久化存储 + +|宿主机文件夹路径|注释| +|--|--| +|data/nv-content|数据和上传的媒体| +|data/nv-plugins|插件文件夹| +|data/nv-themes|主题文件夹| + +## 主题插件下载 + +- [https://dsm.panda-studio.cn:5001/sharing/La3x75Hcf](https://dsm.panda-studio.cn:5001/sharing/La3x75Hcf) + +## 它如何运行 + +### 为了方便部署并且减少环境安装和影响,nvPress运行在Docker环境中,安装后直接运行。Docker提供amd64和arm64两种平台可用。 + +### 也提供以下版用于本地运行和二次开发: + +- Windows-amd64 +- Linux-amd64 +- Mac-amd64 + +## 提示 + +> 虽然有多个版本可供选择,但仍然建议普通用户在服务器上使用Docker版 + +## 群组讨论 + +👉 QQ讨论群:611246443(官方唯一群,仅200人,不定期清理非活跃用户) + +👉 QQ讨论群:790411996(网友自建群,开发者本人也在里面哦) \ No newline at end of file diff --git a/apps/nvpress/data.yml b/apps/nvpress/data.yml new file mode 100644 index 00000000..4c300190 --- /dev/null +++ b/apps/nvpress/data.yml @@ -0,0 +1,20 @@ +name: nvPress +tags: + - 工具 +title: 一个完全由 Javascript 驱动的内容管理程序 +type: 工具 +description: 一个完全由 Javascript 驱动的内容管理程序 +additionalProperties: + key: nvpress + name: nvPress + tags: + - Tool + shortDescZh: 一个完全由 Javascript 驱动的内容管理程序 + shortDescEn: A content management program driven entirely by Javascript + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://docs.panda-studio.cn:8282/docs/post-19/page-100 + github: https://docs.panda-studio.cn:8282/docs/post-19/page-100 + document: https://docs.panda-studio.cn:8282/docs/post-19/page-100 diff --git a/apps/nvpress/latest/.env.sample b/apps/nvpress/latest/.env.sample new file mode 100644 index 00000000..813bef31 --- /dev/null +++ b/apps/nvpress/latest/.env.sample @@ -0,0 +1,3 @@ +CONTAINER_NAME="nvpress" +PANEL_APP_PORT_HTTP="40148" +DATA_PATH="./data" diff --git a/apps/nvpress/latest/data.yml b/apps/nvpress/latest/data.yml new file mode 100644 index 00000000..151899ed --- /dev/null +++ b/apps/nvpress/latest/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: 40148 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: DATA_PATH + labelEn: Data folder path + labelZh: 数据文件夹路径 + required: true + type: text diff --git a/apps/nvpress/latest/docker-compose.yml b/apps/nvpress/latest/docker-compose.yml new file mode 100644 index 00000000..22f5afcc --- /dev/null +++ b/apps/nvpress/latest/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' +services: + nvpress: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8081" + volumes: + - "${DATA_PATH}/nv-content:/usr/src/app/nv-content" + - "${DATA_PATH}/nv-themes:/usr/src/app/nv-themes" + - "${DATA_PATH}/nv-plugins:/usr/src/app/nv-plugins" + image: pandastd/nvpress:latest + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/nvpress/logo.png b/apps/nvpress/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..982f2bbee14711335e4d71cd60093c3ce90302e2 GIT binary patch literal 13043 zcmVNsItnE@3ne)VC_e~6a|$X%2}5TKDMJY> zNC+i6AZeruC_y58#|9}&4_%uCFku2NRv~u34pWXEaIywBX$L4p3oS_zQHlsWaS16y zA#u42L3tKbcpz)67g>@BCqoTPattFh3_WWGB{&R7eHmDn2QXFyC`&DOwIpzx1uWPH_q- zHV-E>7(!SPQ-eva(GNvx8e_8>NL~p#VH7b$F>HbxU5*rQwh&K$6hBoOYQh>vTo^n~ z6?MNOR%#7ASrj=+8>9Iyu>B;b{yf3>A*uH>yZ#T3|2x0`8lL|Zlm0Na{UfjV6Oi)~ zp8hSU{ve$84~Y0Z$o(~=^c<1zG`06HrT99#_!EKc7moN4hVmto=pCj03yJ<2o%$)U z^fIpY7McG%xAP^B;X=RlCa3Z*iO?>T;Vh5XB%u8&tNTT~@En-)M85wem+(x<|16;R z8<+Ynt?o?A`5lhvR?GKDwd^>p@Hn6CFPP^hpz$`6+%BB%Le2e5!0Jb?<`sVC8j9{W zo7EeC)DD;UPR{Wkgy&7H-Wqz{9C*qjh}Ars*!sID=(ov<+ zVZ7Q8U8ZBl=`M7`K&k6eyz?1z(maUAC5Ffhfc8qa_e7M{Mj9lm0001xbW%=J00I${{8rjrSkj8{{8s;^ql%u=)3X$%e?;jp*+Wh&~Kh+57&y{>!es{ObPLxBlwQ{`T+VU6HCr001u%Nkl!F63`+YdK>Sjqoyxn>NSp)MdcBmv0 ziJnAHLwKw(YHWj4Q*&?!qAK#uF|AlGS1NGPVmOo0g60LaL$Lm84A9RJ&?!@zBk`f3 znV-T9#iKqCs1*r?&Egq~8cMKpW?!_DWlCoos#MAaEtbJHpr)QiWms*fXJWop%;$%P z7Z(@P5SdDI`J(1^$)Gl_N`7Ku#w~dw;dobTYwLjnmkyA6d%L>g;fSXjI|L-NjSUgw zmH+@_#x++;i%=@Hz?H%SILat&P}>D7aqzB1Io}*B7W4O}rbb6cH`k}8hV!5vW7Njo zh$CABvr}|+dm@qWK(M#BrRCVMfWAy7LVeDL9J5tF4E%%g1aAVh|d(W!g+D@4skK(oQkvTG7uUJsB5g29&l z{{Hh^C(j@4oVX3@a3tdKx{xK?FK){M0yRd=Gl`{i3dA6ordr zuCxf|zG*D4udmnZwHg^x=_O80-DohV*mU*!Bk|Tt2aX*-eF((!ZEXihZS7||j&`>6 zwqEL)@y)6t8?;8yg5=In3nmkZ?BXVKovZePx>C?G?tnztf+Tyjav2@S^GwWZ>l@UA z*T+-o;e7Gd80Mte(quec)oxEX-nzj&Ki~GaTCIMq?mu{VAEQ3fdWlkvcsREav^kKA z(by)l+ zhL)k~!M4Ng`_2$`S2)6`?M8iJa)=o{nFKR6AV($yrZrxsmlsZCOKkG7cdU$Am!AVO zA!Ge}VkY7H>K9Po9T^>-i-!C;r(ghW7gdiB%$=P1AaeX_L(5fQGwNWFCLcAwU<7TK zW1*Qu7R-~pIyu27eDN#i&6O^dDp6lS>%Pf`9g1UQaFWW1Eq{p*=U%;k?Ofm8@l+|1 z)H8~CC$vp+cZcF#!C)t2u73Uu+811}mY4TaVRsyz2-4uwW4VCYYA~iH_iPk%BXxbV zp*}&+o_%6khw9UPm&Z?}(@RTI)b4pK9ONaR>7{?85|69My<^n%FDTO+$Tgr@u5UejfOiT@G>7KM&t8({IZ^lBU06I@iTGX4tuON? zNC>D}G=Tx#akU+_vHWpm14%3=Bl0dPdw1P5(Tg4|PB<0(u)W#FD*M zyViFR)PSBzMk5}rNX+Ay&o$f&PjiF%?Q>ACp1U}n%2vwSO<8gPyQ#s9G$EjepwFKq z=FebW0q;{z{o%u#*BAD;ZKOI*(DrT6>`$fdgxFh1lVKPKa3ZbD%w@Ggi6zO*+1VNe zo;IvGqg)4VwX9`9mW54==rk!QrD$D5h0ujVD3LCzL4lQs)m@56t%6{tFgsq@BIqXi z|KIof_O*3-v|T0qe0<*LeV#XIKhTFSZeM?tW<~s5`DU_Nrc@gb6FqO~ET9i=cdWM@ z4UK8F@!`XVUc?a9!%nNib@BY^mP2WnQrWb$SqTTGwbtb|aPpsKT1Lrt^+ z=(s5WD^|+%e4_UPJtobJ-d-)+EK{e&Q*S)Ha-~pn;BeTjPH!kmrkQA}aT>i$wQ|GA zrltL9Cj(toQM6|Mj12vk!Iv;Y+t$`5)i2(?8!XYIU9ZMjEUem*p9*yR6o5NCr|A-! z2dd+nW*!j$(A6?U?rb`ssXn>o;C8#!;tdUhteI6dej0qZ?DGg zeJ<1%kE^CkPU%29>=q}{su^mUpFNYm=rB?(=Dij)t!YydWeX95G^Pfi({-l`=ICj@ zDae|dseXl2$D-p$7YwCUC=UnFGz+yP)6V1#@ocd^ipwf0Dk}?1i7waB;b^9xNj1?{ z&U>dh(k3NO;_g7Sn55Ipn3bkxuE-LJ9+2i+w^Z~CqS>o!|AJ<9IsjGJ6W5UFHfV%PE5;t#D(Qh=f zq8=CkdN7J^Vok@*TT^m5md+Ds%csv0O*hFjlM!Y|Ktu4jj5;5pa(RO*Pel*W9ELeY z-52sgjm!Le)k5A6Y}Q00(US$bXc5j~$r~n`WMRH_m1v>X(1v*Q1hE>%qDQ*5c-9Sr z-|rV{uZ5|u(E;sK&|ad4!eOvAvrvnpdt_VvMPG$zwcL1!7AJq_o{gnIugiFiL=RAW z6<_#ngIc0rq3Ho#ik9~$G4 z+i{trET<>SC#P|I>_|x^dO>Evx(u0Uq8a?`XuCcz@EB;W1GNo*MknWTIV9TXutvtl zzJDJX0b5Hn&6mRgfiAZTwJ+UgvQ=+@+B@8bOg|@DB{S5ci;=}uQ-RAIquLa1AXrDa zXc0X%6U~E(?r2lQjJA#r70vS4SGsDJA?aV}dfbSkqfnC_Rr`fH5CGbZ;f-otdXWjK zhT0wKd&~M@04vpg90Hrm+pnU#y87Kts&N>Li*-huE6-zfhA@?CXhDX# z*AKL4?fBD(%?qzL$=JLS64_#R5{+}16_4(a=*K|ov(^#41n6mhLgy=Jm&X!`Xle!x z8agP{^)?gGCa7`0c*j1gYDtzqfbw9fy-xo3En@RJfz2y{XgodaX*|}TqT7Mi)Ihhl z16`7FZe0P<3v>R1c37QMf2W#c=2<~s2Ks4#Fd}ADqN%QrLHnbD>L8k}9jUJ8z1Vbo ze`@l?gaq-fbcpE8g6xcvy9&A$V1Bl?Drl7Srh?4ox{XaaX}Nzy?~rIBoIwAgjzy0K zgP$-cR~vNoZs#K<~&;C#vU6~{Al@(%6Zsg172;TP?fe;Y6m+W+G)K`{ zD%!y7G;S}>WpxmZvxTFDTr22@2zW^*`o^6*K#zuk7W;;3qsc@!f6EBA+F_)cY9-g? z2Y|-kMxFvLx#+iO*1Q%BIY@N#S)lbLcRPVr!HgaaJv+1ZSR)o&lvO->ny8M-in3xI zdM|Gb4UIGl^0jN1ZvfpzHJY_2&t^25&_awZ$9iYP8v=R=XoR0%Jhu22rvPePNw~~c zHJQ_L$MYB(=C;%Uy*fKf|5`z7(a{4l(Q`H}&TKx`hy$ENbo?^UL`$@hH-;smpc#@Z z(NHth?sBBsCeS7uQVq30Q!U*h0;)O~!F1Sw31lwn1BvDQf4j|P)BLtdW#+4fqjWQket}VCcRoj3r(=pYYs(~H~ zK&nMRQS;YyVu$fn;EgLaMI?IZk~$z-1LNmogGu7^3|5F96 zW*X%Iwm4h;?zQE+P#~t_vSME5P`gKoR@JH*KO!=io*aNvGA@}(Q;eVl<`Q>nQCYdk9II^Ce;Lug)!BJ zXzI0+Xe0z1B!rNWm_#~V5E;ZwhmaB}gJ@C<@oG0Tbi-^Uq=N4|$L+1wzq66tF~5HI zf6qDh+>0M^@wTtR;ionqJiKGC$aw|P`k>ueLH{j*MtAf*b2jK3ZM*gy!M*%^-pkkS z^~{~MiRPA;IM7!1M_X%&=nwy*!Imc+YGj8QMo#AV1)yKtz5A~^DNhd7rPl5HxQz<+ z44QG@v)iq=$DF;XdNhI_0NSLVDbajfRF9rPH2(J1miRo2#e=A~dvm2M&>x58a+^TcKfWM(8_}~{-2NtaG#<7BZE%=kd7`Bn0c&PT)ck03+MrX);D^9UV;@KUn8hby4g6+6LklJ zdiO#FW~%2nfvz!wK?xLK6mxAMOp6|!*=Y8NVKPTF)f_hvvs5P&33hcBYDA44ft4_C z06G{e=QT7-Lq8)rsxvk(23p(@*CoBN*@!ViZ-?4pP!yLd99A5WJkYEvwdxSr<-FVd zP0{!~v(c!N!=#M*Cg&8iN2P?COAsz;@oaXgaRbn9qMtn*c>W)BpFpqC88k5p~Gl5!ac`I#0AikHNkD)hDQL@>=C_>d`Xl zOtuvR4xU+A%*G8C{Jk>JZzY;wR{wPsUADVbG|fZ)eF14C(PkadF|bXh0M&}Y6!Dfy z-wPR`9)vk53FkXI1>wGm^CzBxZqB)KzpJ?A;p~n$DVzg!^nlE`^7T>#Z zoteX?Q&xiy>Scz2DdNNoBhiD&!K4&xXrXo@YMYM55d>&NU8qi49?ioGY^Vq#Q4lrI zc7c8Zbed)+eXYMgO*C4%9Q=zOKeXDcZn_e!6XxMx%NV^_Evq7Z5ek)!ozs_2c3f@6U+Iu`FycS~YZz2~p!OMDR-$E3OY~XQTtUZzZmfJaO_@}WmYc477U-}AVW&8iO0AuI5^A6W z=n(I34hV%oR3cFkgVEU|qQ(iIvmEOzpmi;7+znu`{t9(MGvnAZK=c}5?o0JLWB!f< z3pOpCF=lFI3N_H8UU6|yMm^gXfs#0`=BmTT6nCY)n*cPr>E!2m4RONhf7%ob;IOdfxcW(pX=_v0<<$00(#vF zEIq~yuSJV3`NMm#73gc2EXY@{KDzb(Gotn(Y4%6?cROZAqI>>oFIDvi&~k>E#~UxI zL)%-6Uoli9P*iILGtuaeZwkx{p`NyuXhtoI==4Azy2Iae?8Ko(N0*EpRf85UsbSOg z1kupJ5?t*}_1>+GkI$T%5>N6BX@zJP3Nk1xGqWVgW>l0VTG4~nT2HKUNv+UPW39%6P3JNk;usfX z&6RVh&}I>9g`j`w7XMiPxZGmd`|~}&Lsu>y%-XuJ7vFn+=iz(4=f1M#-48QLR;MP9 z7GJ57&?@vXZ(bVbl0c-)*Rc72WJ#&p)rfCP0Wy~yVNGb+|D1NdGndRsADT& z30#$$&?ofn0|!j)(G#`wj;(LLU#L9V6ts$`<~>XPG9z(yL&AuWX{hNRpy_y~J~?D) z4EXxI|BLvC;1joOV3d7#&?FL}?QnO*{O^T5DBFKBuP zdHA`U0dQ7(F*;`EoFW4KVSeJu#)L6v?sRHBi9#oam?}@6IQ6g4yWs{ch_pg&of`D^ z@}&FkpG~MA7(#vC)B)K32<@g0sS8STa!RU_!=QJ9HuYYiM|(#mSn_TqVLG>n9pV%; zHHDspsG@%BqbR?-g(7Eea zqM`7>)6(6i#^&3*Vy&@1U3 z-J?5bO;V5U0!^r;PAMSNL+51x-37bZvG?_RG`mG|WKs*QCF%p9`Hr2u9BUBg&)VCC zwnbcVc2z;?`jT^uS-r>HR8DK5PxlP;hCx?vB^yXRQDi{GnrdjO~0mnhc~mbF!a$ACkDgC+5GUtb1NGf ze;*m^`0+bl<^s{vb5^s}GJ3}=bCgbxLeELh0?pCKgnEa_G^r2jbV+*{9+#9*cJZLp zJ83-xdiQ58Duks+=(C_JQ9E?5?Yu6GAHP_Qx%~i3Ptd4O7AL2&{yn$yJ*m5o>2(^( z`+2qlG#OUPYopPse!7pGYwZNTt_4j|qS4*?0 z4Q*T8x?Cl!XWx>MPX{?Ew2cg)MW$hvTIfOBYgnUejv3kpe~;#bh|DzS=~D_e+0)LO zOVU+nW|mO`-Mm*#=+SPf%m_8lIOybwaNnR;E6_4{H2uTW7V6ot^HIkyV$A~DzQITO z0O}yrpb7QL)uv_;=vCM23Z_}mi>qIK^W9f!thzoLUHC*Kn(ooe7iQ37BNKEGI(3Tn zi>P~1o57o>sL9+gf@qhUp`^z6xO;OVBdx~x0h+yrsTovRK@94JOk6U9erEBqSLxEO zG%gBVbn_FpzMAjRrnbL9cXaph7P4$A)qc^`XT1Rc&CoO!AX2M?%!f=PU8NnMN6Sp0 z_XcRGnHDD!w1w6X!sw(|A{P3uGeX~ViFEpmn7A9W-q?PNLytPNGdF?m<=jJ|CKie8 zyyzk7ARcYgSCdn_VQ)gaMcd-KEXoC`BO|RXpi68p!APy{SIWwot;PwjW)cIvE>~zu zkjYF>hfbPb7hfCh1088*HsuG~(}J0%9x`NTFW^0iRMQhlgR{j=Q%2HSRM#fWB~opMB`a5zzmRKUAsn zyYw1&XX3Ic=<7k3gD&pt>m42VKhRA=qh^!aD0K-PJH*y}NTKs+LLI3VIu-SLQgtL@ z^WDDHqt&G$>yPrHqt^SvEUYyT*e^Kb(Cq9u7+D5dr72{lr$^_mV_A0gn9#oUG!3{= zkMN9Z4Wf)>JX`ajNOY4&YwkULx?7`72!)|5?vZ+MGSuoCKAY>&>|sJ|7qz;P`iwLG z@RW|A9$A>qLAnyAmqedEdwQU!Sx=T6LI)jhWI|I6^P={PEUZz8;3KVOXr2Mk35`l> zkY6MvnSq)P6@^y+_!hL(3F_3KwP@EG>lE$y@fC*Fp7v^)qtNLA`pjverRGZvq5U%s z#1a*jT|p6`z1h^DZ938$E_9|FtR1@jVl>N0Q?uC5=H=WMDG0?sQ_NOFX3)#m<(A); zbz@x249J+LLoa@M2y_o<--xx)!Q+z6d+3e|9D4VZNb89l5JU4(11|=h7HjFjFi);i zW4;(Y$_b}-izzfVjCnjU=gDDnLJ4}lp|80-`fA9kqRP5${7Sa)s_G%uP1j~l2g`O!M8b1Yj zoU`ESjpc7lhraU4D=BfOE`KW8N7{`alV}b&@=>doq9)HNsn&w)Um)prJ+RG;E*-VjaW=giK>=*b5I@tXW2TbX%KKYXs?2<$tJv@{R$W8i!ZIT^C&lSYnV(3hY=l>3eIl)q>cYrptv8CqK zN{_A$6)4MI7q9cv6)SW`y5SP&n3$La><|}jpF|%5%pcUoo`U9Nxa=lYu^JF|%79sH zYp`)h-NCaJZ&%zncFQTK;!GqwXd7;A^o3UA-!9aa1Bo|uMTlMeiWPU=MNK|8kwDLk zLeH9|^0<%Q*}k#5(xa`>K_Jr{y6+@EH6u33&^Hn4Vx36+xPvA$arO-d=rKZ#nk*{l ziY0m3e@o5qX|H$aFZi-k&JKmTHjnO?$>hZ@o_6=$n?Q44^Z97>f&~k>lnXj{61~r> zX<`d)p|~f56Kz_Vj^TL}bu=ur)DaCd40o%hA}5VevXr?ln^FV)ng^X)WExLIfDRX@ zR?(?T>q6{@pMHAza_%w;{p2)gZtutGZr;baoBu~Uwlhmj3JdhwdtP`BveX)TwYusE z)WZ>KiZwtpR2MH=yQD%1>zwr!`JudIh1#7a8(M6?1hG&vfRr#ThC-E<&urSX{6T8? zxYh>xifA-tTc9^m?IrY|pfN|PclLk|lUDm9X~TR(hGH9UsSsLD=QIs*Ej@_xg^ZLp2JKR`2y@)%UnKQt@q zT!eKKJ&H;;%6>ZaQhj+e?~FE!p-^ICU1Ht3b&FT65}G^yZ%3owe*0~*yzf7{jasjZ z(KH|F(@J12iYKl1u&F6^0)cw0`=F_Z12uo`A9m;t4LCL;WP;WTgkcgjzb5L={l0ao zE^L=3QPkvxK&RB#)m3kP`~wx!-h2n>sdrT8%$cJs@9P^juZlwZ0pt)lc~r( zFe_`}bClwmx}(F;Qrp-5;bF`aTq@MznBpX1*@h3eq{f}t=i_3c&_zYM2KoAn z9PKa@fu0iTeLaWB_4K(wtDG+VMw%*!2_2yZO_8W+J-Zb%Xw)MK4N8~@oo0I&Q~OYV zX=GKxe!s`m984uNut=Rx%iXX6v_8RLW;8lIJ>9Nu(mSHjG-X7O2+jRVs#KpXDw;>r zS%)hy=k2B(x7D-(xpkKa9duK+mKaL4T})#kt_nPo6s{EZ%g9Ep^d70lMjEwU_`iR)?T7%c*_exQ!drPl8@BE&5>#G+o-GP3_TL zpq0xA<*RoAHPGOpO30PrZE^8deib~v=8)o(3HX`Q(SXBZVd9pn?xsy~kUI08yO7ryyAfu?sb zAx5Gh2k0TtREyI)Fwf$nbF8Ap9sehw1_2iHq?#tQ)I5tqm#4*&vJO!yZRl202X4D3 z;x0Yuw6&fG5jCHG;yz0t3XS=`=Rgx^(3m|s!hBwbZHBIKpMP-mHP_Y5U3lwFc5edp zAEt)v%~JntXw>x5*cjoTc4ko&5YzjEw+)>zG~&tqzga ztD?|%-l@#=W&*9=;n7ab-(5l<*9p)vpDEULF>NbBE7aM^3BUYtIOx`9c7Od$;Qlam zLt={1N#$iMv_d?)pnnGKnm2Qqk4v@gV5&aX&{W#mqJsZ5s5al(3lOqZrQ6Z zTc+5Ou594>NRImmb%4^=AXV0Xij^!5-GOI_;L6;o%90&(_G+c zJnVf32jUUmZ)~xnfp)AR&T*48F@O%JgT@g&qbsRhM}!4vYWeI8APjnrL6gJw%|qME zs+}A(1=lyTQQl*yMO{reK?P$P_tZXYS~O}avF~%_u%SbPO1hq`eR(MFcWCzfzvzGld!g83cy58!iHN&t(4X9r@ z=m+AcKwlHI6qTs9Xoz!4*4;Wepnh>5YIwb)Y16&s3N-mN_RZFSK4Z{Ot5M&%dxwN> zF*|4ls9FeblXz|A^-g@jmDk6ta5I?9fq)u>z|n$!E$BeJYNG^oRxHnSmjx|qE|-B_ zfi8RK8I4vMUkiHc8CRY9RM0LR_i-Qd8N_uIpz`5uuiU1=nnge`nZIR?>Y=^;xaXk@ zKx@emiy^m^nOp9C;;8#18{FVg1>H*Wnub?vydf)hwCRtY# zy3;|E6_0@|=np`DanL6PO%8K)ato7rGLNfmYtFFesU7m~(1rZ5V`&qYQy4YFVZswn z?VW9{qY8SGPsZy%x!f#lKoiVSKNB@CD%z>tqk<6TQ>S(*6u5WcjB4m%Y9DS|)DlE% z3K%@Jn1Kf4T6adGGcc>hEY$)uVbpSOucy{MKa5$>W#183{S7*mm%2}fN@|}`E@t+O zB1sk2zlRx>D+Q=bNvR5Ylx3M+hWdhLXZqsDkM}$^#A24CyQTjGbHv04TXayD*;y90 zr+06-%(}IIhmI0?DVmxYeNolO zm_s&Z94%%EibM%eRYQ;PiM3?7liA6_8fy1tJG&?5@3fA1ER`g=&h*-{E$qxqD+*{) zn}ICm-ZwO+OoCwA-=N!~Z6&9{hO2=F+la*sv}ewhN>^Ace&ht0o^*;+?xRa<06qiH=-^vD`ywy0^lIT+d>Fn(4>JqQ4v$OM5he;^rE_vOB!TqE;ado7PH94D@ zEmxraD6atwu|uXCDg#%`MlIgB~3UIYCbNVOxX~^z$a|kn>Rw{a^g|5rpGp>o2!(j z`kijcRi#^^-hF~?d53^KGBSkBh0A)pYD>Q}Y6fe!^AfeDbEw4~eAmkfFU9g3(>%2h zl*lh_&0w^qig1yrg>KAB&QNufjWyvygfc{)Da}6@-Fxfi&4U!!;%#_kySAOc%`l@O z#<8iZVH{LL#W8}b^Kpx`Pkv*bGYB!@wq)8ln)akZkBLi~C9a999raO|TU)zH84H+O z)NN}?K4POrDdn5m{AjUQ%oP;X>(gHKDyEW8@=8P@BA=$0$;7Bd2)=H`Ahz$CwZ9=V zuUL;T@g+nTh(Bbll6f8BJ#6mW45RaMoinq+Nd?R_$8c!Q#-$E&NOGzdoowwMXGe~R zxmb)YG{M*!sv(OhMyQjlv*Ff>V|3mXOk(@uI#+ zyN<6gTf1UyJRUzR%Gm^QM!|;GzkG;QXAr^VfOH2 zkopw%ez0@iieio+d~F5&;lk$TJhaq|n%>A*W+rvuSYF7)(#AW1;bFQOY|}DgpiLLA zvvF*q2DFJk{#(7eCB+(L1`nyg63pSyfY{^9U53q=?X6V8�HW_+2P+W#Ajn(kY!> zmECMc=q{DA4v3qTbm_k*eVk^0J0~vD`*-Zv?2Wbk4mD>50lp z{PpxW=6_H{Cwc>Qq%E37qI)TJ7J)a!77^v>Kfap?q8fJ3vRl&iu1IocQ4*&MhDj)g zLu(ABjeza!T;$yR`KF-mxAC>jqBpu1Y-a#BJ4N*V(Kt>2^j=MlXtr~$zXik3t~n13 z?H?Zjdg;%botNRKaPj!?N0t)2GtQGZ>Hv9cNMXHej*_kBKyXQLgPERE0q}uz-z)Fr zwfem+STJrJv9tl1G1r?Vx<7GZ<3wJKjVALyChT_t)Cp8??=ayh13?542;IjQ=c z!hVLq{iMRcUBY$dk$URDNZHZt0;nSJil$u7Cvg>bRBq8T*80HO0|_=HuwnXRpu_&{ z?#jLX9ctb_IP7w>;EuZ0t!{OzTixnbx4Qjr_6u&c@Zn=_U26aU002ovPDHLkV1k}H BRILC2 literal 0 HcmV?d00001