From cd7573e418be84366c5cb7787797f6856d753d19 Mon Sep 17 00:00:00 2001 From: Seth For Privacy Date: Fri, 9 Sep 2022 08:32:23 -0400 Subject: [PATCH] Add LibreTranslate --- apps/libretranslate/config.json | 16 ++++++++++++++++ apps/libretranslate/docker-compose.yml | 20 ++++++++++++++++++++ apps/libretranslate/metadata/description.md | 7 +++++++ apps/libretranslate/metadata/logo.jpg | Bin 0 -> 18495 bytes 4 files changed, 43 insertions(+) create mode 100644 apps/libretranslate/config.json create mode 100644 apps/libretranslate/docker-compose.yml create mode 100644 apps/libretranslate/metadata/description.md create mode 100644 apps/libretranslate/metadata/logo.jpg diff --git a/apps/libretranslate/config.json b/apps/libretranslate/config.json new file mode 100644 index 00000000..3245ad38 --- /dev/null +++ b/apps/libretranslate/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "LibreTranslate", + "available": true, + "exposable": true, + "port": 8106, + "id": "libretranslate", + "tipi_version": 1, + "version": "latest", + "categories": ["utilities"], + "description": "Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.", + "short_desc": "Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup.", + "author": "LibreTranslate", + "source": "https://github.com/LibreTranslate/LibreTranslate", + "form_fields": [] +} diff --git a/apps/libretranslate/docker-compose.yml b/apps/libretranslate/docker-compose.yml new file mode 100644 index 00000000..d24dc43a --- /dev/null +++ b/apps/libretranslate/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3.7" +services: + libretranslate: + container_name: libretranslate + image: libretranslate/libretranslate:latest + dns: + - ${DNS_IP} + ports: + - ${APP_PORT}:5000 + restart: unless-stopped + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.libretranslate.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.libretranslate.entrypoints: websecure + traefik.http.routers.libretranslate.service: libretranslate + traefik.http.routers.libretranslate.tls.certresolver: myresolver + traefik.http.services.libretranslate.loadbalancer.server.port: 5000 + diff --git a/apps/libretranslate/metadata/description.md b/apps/libretranslate/metadata/description.md new file mode 100644 index 00000000..c5354d85 --- /dev/null +++ b/apps/libretranslate/metadata/description.md @@ -0,0 +1,7 @@ +# LibreTranslate + +[Try it online!](https://libretranslate.com) | [API Docs](https://libretranslate.com/docs) | [Community Forum](https://community.libretranslate.com/) + +Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source [Argos Translate](https://github.com/argosopentech/argos-translate) library. + +![image](https://user-images.githubusercontent.com/64697405/139015751-279f31ac-36f1-4950-9ea7-87e76bf65f51.png) \ No newline at end of file diff --git a/apps/libretranslate/metadata/logo.jpg b/apps/libretranslate/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c71acc73284b7ff330167c7ddde622c6d7ffbf43 GIT binary patch literal 18495 zcmXtgdpy(MAOB{t%B^*i+-gRAa_Qnem&(uxN$%GODfi3VnQm6DjfjQHP~jX2o`hsX7EeaXvj#BKYeGR$K5>d@frOm zDQ|B!T{BTIK|Q;ccui2~Vf!~>jsG%^8lnU<_9On|{US-bBz^OSv`L%#aO-^Hd?mfA zVYOkdviM%+U|`X&?a+|i*~US&m9ZK7$ql1PfzD3rOSIR-NR+!b*0{af+11rmF}Wg% zJhOZ~%|Pus?Jj-2v$OL(7qRMF{k9b?A5|pp-pr~8%arzE8R>7BJ<|+gLRv*G`Exmi zl%7t9pfpTq5q(l?lv-_?AQ6{V5wJ4<8SL@r3T-n+W`$B`?9#`863yFpBGM}jZ^O?~ z+9ceeOk=7auliOAzAw5@e0-2sy)ivKo%f2V_dsEXA~7MQ;z|8fk7SD8nro^qZJiqG z9Qi{iT8zVugAqrtY2Dg#m9}Mf$vh&vLDQaXY6b|f#q}4o&LelyUwnRVA_u;@LhGf< z(N$f~!`7sIxO}WJw&^ch-ejV=yNz7+UYUQx)$_QgSu+RD&hyX z@$f)(@z=|uTNNT?(ReG7y?=UH1vT&FJI@;gWwi6%GKUL z`!cwS93bq7`bTBT4{WF~8}9goCDW$>3--gSAr}+9bD^qUOi&;vbF@~CwQz3gd9#}S>bX9UCn!_Rw%Dl+T)wO^YhG;N0IssdS zEES(e$!!0(0yzuSbBj55kI3DaZrBqsz5SQdJ zHM-SdJ7apwYBl&F=ikZ3^sX*=I?IW_RKcf~thc8R&w-weK25;@0E0o1=mutU>{|E>VyHx45tL@mpl95$_4JjbIfpjbJMBP`W zSViy%Y<@`RUn?NHxq_`9gRQynWKVpF%j94D+2}yz_!n@GzP&fOYAslE!crY=pl8cd zuYmOG0h>qxZW*dzV`2H@PFf=OI2=k=)L#VN=We9$OI8r`;V9L|rSgRy^Vws{N31yM17)U` zE!T(*A(2KM;5=nuQI6=+j!4yYrge4GE(USP#}cx^%}GZ}ev%9i0e#B<>BM-b6YY%+ z4Fx-?`Zg<*4iW$4D-2kPqYV-@j;|$<&$xgOGQlN(tMJT!6^l8B_b zeRV12VY^!N%O2%`%;gla8$^pk^m*pznthg9NUv@_r{oUPa953+vxj&2!tE_L z3GCfG&VI>~Q8Jd#jay3l3O4@?ZUaZj?t97co|Ksjg~J3~V&2kgsr)DnNi@NbZ=R++ zqk`qW-c9#@27Y&gmF!D>%?g;e5hpP?gfJ~yln0i(;O2pr{bIW+%s{%;Ngr8uJz-4% zPo9KLLb=@@-=$_t>#Y<6Qnvp{M^F-o3Sw-D4J+0>tSZxr1x1d#QN2Q*ouqK&^3Lni zFTZC1bEJ0l1|*xas;8Tl6r|Vkh_dU1c?l8DO3HWdfC^mw_t@ZGT>es*THb#v*<52O znYpLkpd`%0KTBeTE^!y5d0R8?s(W$R3nH|-z^T9Pdk>s8E7Rft>Yw^}>ruH^)UW!+ zw?9UA{M!S986*1ZRR2iap&0=nl!2H^*WHi}8`eCuDyv`!c2l6&gKK0UxM0CX7)XF2 zAh!t^mB34i@ew?wVYpPTSuq4GyE>83fftDu?9$PvNclV^H%8V__5q&DS{&PyH+gE~ z5TT0HR2=nwN-&MyKKZqeYY~>6y7cZYuGIr&|4I2?S;2#`L3|g5qVPA3T8r>)E#*Ho zb? zKF$CvBmov$zpcHpeADp(ONO_WJ9r^rV0Kc6hNSZ21->r?%PxmG<`C8lz^IoJ6#K z-+tBa+YpbRnTcc_x8hQ9pnUuVw+Fv-E;SA9imovvV>K>ewuFbc?kt56Wg+30X}9`&4Jjf2 z_A_MC$!V}NrfTn(>G4!+#6qjD#%r>Ov9iS3o8Xzg+Fxedmg=)@_ka2ZDQ!`6*rS%WYpKiOBcf z%UmH0?{LV~`KID`)hB)d9*4uFkYkx5PLfzL*jQGk^R-4k)&>0zrx{?+Dd(Rpp_np` z{lF#osh65!q|jfl^}k(>rOr?&acw=(gP0ZukTuP{rAbS>cyH*Q_miBwZcQCa7P*b< zM^wq1Cd?Y%pOMmOsw#dwV7MnnFMtKkKBxM5Cynar3CK3%$BRhw;w77ZMK7Xe!6W(s zRaGSacoKDpZRYrlrS9yfSn7)z$q>11U%)SJb6svYeP1j@536QQ6EFW{$pb#x9{vUR(knuh>~~SjG%K3&=6sov>C%aVN6NUbvrY}DgOv!Z zwI$7j`izQ-Po3Lme+(gT8~#okGh!gU;n3E7!L`sdZ%rAvur9x5WueQJ_EDne-1V~N zpjA%^{*(vb-BZQG&fInrq_jd9sR4wNAG7kn`Uw%q0vrrT>fQ#cP#ZmrcYaghn;@A| zJHHej2D~bfFazGH0R%!q_sI>?qrWAKhI$}4mVa3cTz3O)@^ptxhtyo7kw;d~od;@} zcbRsW*a!_L?l{~-qoH+rEf$mqaoT1}L0o(t-9)A@)rzPo?S3OecR34~I4+d?G3ITi zAn@+{hbXl+k>gj@@O}+*s7ALPzBLA+Mg~oY{{nOfdi6(^-{KJJ_~vHxpz+-@IDw!o zt;`xt%amxoh>u0h+KnpR5t(RGr-Z!CyU5SE(%wz{t*KwO>xWBHN~(~a$Xdr{{?R1) zO)LPLKC}b`rRx#-xwQ9OPa9b2)!tj@?E-f{f|bu%VmJVAPK<(}F)jRiYlHO}9(<_T zOYYCmZJ#3z1U6#|4~`n(qg>pu|MoFAiJB8t^`jsrq|2aW4}^;jNumwj4C5_Ui{2TH z76`tgL{F4cP__GlGrh-VxPbcpM;v%nA8i;~#%TE*c^Bc!$qsK1q$J-BWDXMfl75HM z{6v2aw-n+;=Q+b4woO0Msv}8Nk8R7KucloMJvu?l6gZ>Tw&L8*)njD$OdY%Rq*F43 z>=He1a&qdLUs)4ha9Qm3l1@uhG;eynL6GYz2UCE!!d_^=`88KRk#Of`-f-Mz$+Q)7 z*&juuxx%Lk2sJ`OqACO$`OXblBRb5#3WNeNWikKq&yiG!sSr*558UB2I}Q)wy~JaR z8;j=9J5Rr;3#o=|>a>^uljs9BM!I{p_vfE=b#n(P5=pN`mVS9dmu3)ciq9>lR8WJW z?Zn6D>6axl^Oro4SFNwpqN$H+KxpVa_Vsh4Ai|fgRFcW-;S%-9TOvePHeGLRAdHv= z6K?&j)SEtf1|K2rL>$a$y+Wf=tEE0O+TXVdi96jO9nS@pGqmtzf0IDX34t&vQrk*A zp}KA;Q4eElJk`G11%kT;Yo;Hzq=WCm6ZMbP_QZ<+d}P@5zok5V(zWUv8{^rTBDZPSAIDWrS}LFo3`Y3s1yt0L zb3J^0L2_#YLd2{C;Rh^1C>6VvNfX#j158O;vSlhT+vrx-zXz#a2wyBNNptaJW1xMd z`K}jJpk}CN+KqZwZe{i`qKRwZO~sqa@efpERD>nbP3t5Or$B2(YqgV>vS@>jaM;lK z|0Q4k=CWE59Ki;-)YK0rhs2SQNg`x#K$Q`(;w@QQDs$YHC5B>NcN7xX#KjUekxufC z{Ox)AXR|oM9cWmhC`lyG7%cAwc|>mDR3C*>(K(uu;5zn%ah_uYi4{3MRT#XB^@rH%zv}Bh*2uROgDmsGN zmS>|K-E3KIL4u`uu@Ti~lf4d*moJ2KdYcMt?mQuU0t@aD zb1HgG@fRgBPrE;2owEZBt4tsZz_K~bu?aNuY7Vqc%RBH2R{e6zN2HXy>7Paqgzr;9 zA?Mop`arxmaFUq%dW-E9<3RHFKgP}=tl8lX3GrhuPc`qJRzHhYj(T%#F$#^oN?JGU zr#~vW8-2;XODA-M+{XSvn`;5%o z&zSV}U<*v=S3c(ulmis$M*$3?=LKL`fIu*28YjO4O1 zb0-?P>qj^3ZP}i2D9?T2hb^Vi2JmpsAr0glh=XS(rruEp@%`YvM0`E@m1jjAVs4B0S3_J5{N@LSslo^MibwRP zjdQ`+DjeedS>zL!uS97e#x?`QIeN4XDYq4|?95zPF~`^u1mi2;1tYmN^SbF5qutbI z>Mp8v>gf@@vd&&|`@Rmf&F>?VyIOBJ8y7eE70EjQ%=txO)gQlUf{1cRQhMlJPfO7EPevL}`erhz47O z12@jHFEjtj+1ky5wQq~xN66i7X+l=RbCEPYXNdV0@f> z)A!CAk!*=oTnW@5C!Tv;K1d%&jO}v~E?f4Qr)0ewa}USFf&=_s7H`Uy`eU}#L0!VM zz>2Dk9|bHL;$a?T+JQK`^OW4$kyrmM)!i7FN;6963tWYYIP~Wp8vMzbYS!Rd2B2+?7HsKT%2;P!wnqM0fe3&BL%%Xx2OqpE44W}<{~vleEhMm zW*K)RznQ==i>DqoUsd#}fqI7hc8mvG0!iRV?dYcYR+}1O!hLKXF*uv_3Pvl#IKp5C z60K9Qu~PSzn?Pnia2)vGoy32Uzy8?fe2DkcYCCNhG!f7|A6;;(yD`Ov6>jFKF-NXA zrYW=Mi<}2^iS`G>p~0ZOAiBoyBDv6KxI7iqJYQPCIcFn{zB76*UsDT;Tlf%4d1q#~ zF=i|nP;+MYuh;9P%PI=U9h*s59WyA2>~q#$ z0o^Ke+*M!f;U`c7Q4{^f*`$rqApMgLwb{bfdb!<@t6#SP1%_f!wqd(69UaSlt3>z; z`S7^J@79`#e&uX}p&IbzzapKtg3PO%U}1VK(xBS4afNm;CH{_(i`&$*^tuiHctRA< zB1BG9R&weQ6-q5Er!0Mopt?naY}u23t8?QjO)@3>qB84U&nVTGx~tPt*|)AMu$4*- zI9ckBOUSC-56p+0$nRK*Sq%NGugJvC%nWjz(e;@Eaw2!CE49gWeKMQcgdFeg^ay-b zade{liQNLCQEl||1M!{cRHPl-MxRE(b1#H!sEuBu8*WWa30EcuaI%-^k?USeU8Wed zKZPH*`(h%hglp%IL7;~{%9AVHUv76@j@i_&bEv!#3O^)j^0gR`=o&bn@h4B}B^pVJ zH2h^YQnWFSJwMGTaZBarGmSqPbJ|^}-D;6{I+Ar@+0!xkUBZz~o}dn$mO%-PELwCM zSI`-kQMR~v@gvRGdFqShx0ib^POfkg=kl)ovbWh@q(*YI%QPE*N$Q)f4yG-38-H+f zZm&~9bqOE}7C}C0Ozn{HjnY)T;Ja5tL_8-%YtDP6Rc0HJ^ zI38J?bm^yaVP|dG=(lPHjfjbz-&lWGDR=IWgZksinU8a~64`Zyv*KIdT{RKDW*CqC z9tjSU*At8yU5Ca*jag7@slvB=|6nw_c;3tOPF_EwbVYa zbI$lc&+b0Q=7*D+2_!C!2ltAW-hwOK`Mf{M9I;SM7=i{LNTx)uuMt$7zQcidL=#jp z%5y5^ceq&l--Aq8@((+pQBjxnkt$y9f9mvidYiveli|gCCsMRQ3;#g9zUk zvY}K|iE&T&MgFwCj4T8=;n&>v)SqumLg^j!raXf+W%_8^XGo|&`Q;iZ7?DQ}# z=L5Cg<}ZawA$JVjJN@l&sj4*`Lx(LX6Q4yLAF&`XpXT{ux%WSVsy8uKJ>t^xvNcfC`s9v$N@Z0g7nCP;c1+ezyNy}h`~)t z(YzSvNVc%M{mvDuYHxBbaEggKE#COSq|LS!t(350i>HJfQ2b@DfXT%pQ>8>a`T&dGQWzlkfHqsUjnLe<#;4jq!vvwTbXel@aZ9 zrLeo0`kYU8Owc4d2NBrvn)#?(Zshet2!q*zSjN+`wlYQ(!fQgay;8V$9uf$NrU~y9 zT)5c0j?W3e%hZmo7jTP*i?z*EwYtDhT=M4DR4*-?7fOi@8N1w_l~0LYjsNuo1SB1e z)F+Bsd3aMi=pzAp71))Soy*P15a05;7uMXQio8+MDv}1eCrG|r4;K36f*p6b1dtue zm2q(4q-lM+2!4KWDM{;hnd}e7Yh#ir&@t55Na@|%)bnDUL z9=;?Ar7%P`~fFp!EbA}@Vt_Ua?7xy&|OU!f5z zqLu<(6rG(%zdzy)^Yj=|1hko8>IvmJP2D0(^G^sD?}gV#0}|d&UwO=nzuX<({j!#E z3K==(QEq<6-(WmFGEIc4OM7%*%hz53e*^1V^;&+qH@kv@#L9JJuH$Wd=Q)ihgB*tS z)>bbL9S|iMVzvrv6IKPOG5FDBaSg|47Q|JS;s>OE?W+B1WdqY;zA#PCv}mvijc$Dp z%6MUK&A`Q&G!{fj9n0OjV;GjzJ%1XM7h^)r!B;%P$K7{+?EC*%0Q!$xR;S9fuK}+X z1FCzX1+$#HxNupoL5=fhDnzoe$V&`V(#%j@#+!res2S0XOpsXYb;U)O6dZe5hfLWU z5v!HpiGuZ;_WH1*-&dx>Pi&9#bqqeb2n^I}5@-zr}W~BkQ67__z>l#z~6MOK7*2gBXn$zfq{XLuvo}`MSxo{jQWV>-Q zl}q#)up@KjgQlQM@p(6AyX$)7GazIGkEX&)7^^9uI^GLz0!-Y4D&tAu>%9RP$9lT> z&fy(g;ib<4Uo*qD8}q@9pH?NZcLfnqJ$$#sXFjIvT%kkX3xbqy0j0qa914t`Er=xU z_C7-FLCd*Der)I))I94?xj=?pOj zs{6m6D)&eiTB-GR`4P2r#E}yldpo9d1Kg>yiRmDO@Cy79;mJ62p)WjzBwpkOvivvL zP@YmJaD4D~qgd??Hq^Y0&vDtmxf)w7Ih*YYl9U*^V_TEA;d{Fblfxpx+ioeK@%>H{ zEJ$A|4hJdB=592sttw&kP|-_h;~Rqmp9fPaF5&hUg5H7Q`{@E&l~`My`d*XnmU!5O zZ@HQCiTljE_--wODhIae0{bs`-Wn;e<+van`WWP>kpF#I9=Ip?GppO*J{$VT@7-!| z{mRGx>rrClj1rqVXV$jI?|Ub|2O$axf0m+cDVqg6#eRd{9Su1pUclXFC|Pb9z@dWz zIxTUmLrN#H+wKy=MuV*2o~e05+oX@A$KN zE6)rO>NL=}DXvo&<^h3E*i#p0h{k zr@m;3a_#STOtG^acJ_YH5MKizlXGX~u3$*Cz5sx@7ei~R|lt%i;5-R2AP zFPAC}0lY{6A3n8!EV{+K_~?KfpJp90j}81g_q@iGejY?qprs}WJk(-T5>S!8mEjY5 z3vUWsN(1A#8<*_^MQgbms6gc$D?@JK@LZhiTJX>jfb0VUZ?;<(Ko}{2lD)c{@Vm<^ zrl90eAORe9ziUs2f)ERddq?$4D|ar_O`|I*+Cxj=^-+I68aj++GQ=Y6o3fuP&;ReB z46>P&tkH0H-}-i$Jq~}KZheE{b|DmWhBxLE=};~oEw7qB?*5H!avVEtpFK(BBNwn? z5rdDWwzQziE-^sBvLo$YTzo!S4jW?HvWu#LY`%X6wD&Bu)jUUgri!;57Dun`FHa8y z54}vkC*}6I&JoU(S(TozU#7rN!4Wu!&>qcnB|0?E9mZ@Wrh?qQ&mzKd=40HAQ5>6f zQyJ6(<*}iMN7c`4$uQkO`viB0RFy_!?5r=AE3g4)l@tZSX9|n{&dqEB-VkfQ?J`6a zp7gC>oCO9bZ=hcpLwV=%T*MI*3(Yt90g6?;@3~hM6()`mQ-SST`~ynb;_jRqWvR8N z*b>;78t;%gGjxA;My7agI2B-khUz~sZNxmagK(4l;}HFyt6$!({5z?{`p>-#9KKiN z*0USV)FOy1lr<=Ync?uqEuZ?;f46SuWQ68|W-|*!^K^W9`uqa@GV3x?)Iizzp~5YB zd9A%(K7u{#0xyGm@N{O2yphP_^LQch@ehCuglf|`mi*PCa2=*kcNQrR zPC!Vv;djy-fCqR9u9aO+r0u(XSe3dlN?2iG9RlRd-Y3)Yc^;AzEJSt74ol%UuUY961g&G|v6d=^Ax z$&%Xjnh3al1{=yXQEMqQl7pW&2(`i`6&DmcM0(*85<*F27Z4R(01{cyASLq0BlI|| zn^@tFOG*fhz~T99c!Gm)1T2ubOz|m`l)#%p-5){Qv#OnsCP6&Tv7?OEYn}bcOAZ0* z6pPCbSSbJ5RUhD%&pIViF6bir<8k#Vb~NiyGGM$~Zf$8xy!!NcEw&D}4z!;L%5Lz# zPdp164k@_;;uMErUMSP-b-eu59~VKj9vgbR)E-oTUhuE^fGdFL4KxTM9h+Ff8b_%= ziR$+=(GDD@B^FozNt4b4*^r|PEB|oUhv;4XaRz;L_-0y@2PrcrMpFVH4i6=_0RH^O zvmhD*)LX={=OSbm+-DMoRCt-6(0v&#{svd}RCqaqH*7Bw(i>vxNJW3W1Yl zM`8_tVFXZ?fn%b934^DJBdAAn9N||(qi_TsqCLm^xa7G2>a|dHL}GJQ5*z<5MG?Pc&#;q z%11xF0fNyVb5s_Diy9+2^%dlaf5$xITDwFd|uK{Xq3VA^1_Tf26P)g`Hl0qxHHAUhCrjOu{R)aKu_K-M;gG9U58|+R`}zR zB(c_l!G^d5ceV4#KNYS~C)o48F@nu?bA=MNJbl)?? zf;WDz9eQvL<3-j501Y!*A!wen9t6xsEU-hiTM0F=V8)B`?=D&nuWg!=$gD#!P?t9X zK(?;r3KUz9Sw^?Y`|0KQnXtCW+PzE*!}DLy`)~8Fmm`I+=7mc#!G=QFIeRkV?f8LE z<8SY9b5vpdtYd!}xuCTtx>9_6hjl8Vx6-(LAPWAi$cf))2G7p)1ZfA+=o z7V{={#ufgqxfz6AKEH2%7JcrljABkVEx4AcUW2r!GhtFW_rEn<_) zIz%N{qmgt{#F7J32eGgRN=T|W&CUcj2@os2g0V&aRld3*Iyx=ygD$;`*-}Mc6$1?j z&wq$oGuCV2m<+eQo_ilY{;yG8-&E*PwjK8DZFqX|-P$?>G~G?jMeTEAx%|1DC+B!W zP(D|dgKmoh{V-3e5S@^+PwRwes{a+xYx$5eJh)-Klnn_lc`%sS80}T$*`qK!@B!f~ z_^pyo6M%U4@b$vw)>4Z%mLgR~hlg-Zm@S+d;}BvJDi7W1yZR>Fn6r`b{P;VwZWslC zH`7doKaw}StW=UCB#^}?R!HLG7S!12 znY#wx&HJ$SPm)Pb9%zzN(RbS~8hNMvo+*z3w#pq< zgiY_B&-mpwhSmgq`GdjI+ago*`@^NsEi9BL?|Tpv?;pI*$gBH>&+cEc{B=Rg=Oy_w zCxo-nX}t~71D6}LX>;_`uEdI?qqRyn^B7%>tl>-K zm6R_^c4~R>+*#b<%BhMggJT{=S}V{jl8DoOJ-rr(>Bw({H4QeBnH{KwGYGHJiCERz zr>==^IaCZwC|ZOT@{(J>ufK3Er;umMwFBbOv-BaXHD8Uer3|`5VHBz^i#%!Lp9Z?^ ze4`_(n$K;bmyzRxR!~$C=hj0nKHSO^f^q-$E8-5khDcL?XW+$YUXuFR17a86YqKhH z8Nhd`tr>eDpL;)+rzTamKSxsv_`{toWW^&Ayc*~2_`_d6fhQ26p!442WkOXdK7M)$ zQB_w29M%SI5tZ^;V{;io_(V{8L5|;GPNeKCMJ(=PUc(xo)K_hyi|s#bEKFw%=Y{kA z9oN`jc;SlieJlXdIh%T>W=xKb%HpnLM%0SW#1b56jIqs&LW?pA#b;8M0+_FSH5|Hj zpy7FKX9$E%yfW0zay)ZXNWzmO@`f8EW-k*Uz(b#ZSa|1-TA)309LcOqNrpx&9&UeI z?rS#lM;>aIxe?*;DJKkq9M_{-kRr1lhnv%$(og>Ya{J}YkJqF9c9rw*XQaLd=(Mcj zJ*A7nH(lMZ@VK8LV_few9#6V|oPQhQwsUlhYeePCWMK!9`oyaN?G0Q*&Gda@kK5!4 znlawnm5V?y#g9(?37EO5iJE$Ds8K^U`-?*l1jYX_^HxKSb2&Eckz($AZPTL`INC2i zlLHnwG3cH2<(^Lsr}Cs4KA=i`G*;F3A;(%y6Wecuk%T2bqdO1$%jU$+YQ zYrG+I-N8F2g{9pqS%*A<+{eE=85$Qsu`%?@KN@HLgs@6uC(NSGLLCZqC&ZI0xJE~x z^ZWeRzdD-u{_g5XE&32w#eSc=%R9~#5FJTIKrJQFElGUwgeKr5V;k_M6m11ZZDx{* z7`fJRqL6xD{7k#A7`vEtD5WWu;SzI#=10YPHfE_l;BHiWQ!C@r#}d{C9THHn@IQjM zh#!P%f$BXzLSj~Z+*uf^UYT$Xt7$q~l=L5R?)A0V{P|mgwAcm7#u#uq0HOakIu}{# zjTw0^;$&YCPU4t)^ctG|F7J1KQSAz@HDfWZZ@J=amnX*dYEaq)WF@sC0!OFy710OZs{DAF+*-arg988GsfP&pq8nvm055K0PIf zLF&GZnhepYvEt(!Q<2U9Wu3Yq9^da)Xmfbj!+|MJKdoEJmD^@2tEW{5ysxgLG+v(8 z73=Hz1C3PEkOjE#Jd#^a6OYGXL|>!eb(%iaWLfWIq0nDyOxN_Jvs>-v>%;B3gPJR4 zCqPoze@m-2q;>lmuG6AOKRtajvo}hS-O7^j_vL5T z64t)&Ph8-0BxU@&{Q)-AP$abcC(k-`>R%)xm`%$owkN3{1($eAUYF7%q#7q&c*?l$ z^=~GV0D89#<(_V}-dsv?gcANuNdKd2c3EZ_Q+C=}SFZ{nCU2;n#L?eSl_iRjL~h#x zyJI<@_i}fxK#(f**a|)Ol&~gJdMvl;lF$|`*u+fcF>*?fYVmg`Y%p;uvRNJf@AZd{ zRIbL0(gL#q+c94bU;S}N1;kGT&B44vZ_;4|BgeKXdG=tt;O6VZENrNPkJ>1M93)WM zaV|{Y2iaQfN9w=Lsq%c&r;&pW7N)?_yFaT?9~HZ0r)>qx+K*UJZTDJ}(c-jMX}5n; z;IjB6VDrYybiVh+*|PvUEh}5E8@j&`q^Z^@^ws3rtvpX>^X+plc>w&sWB)$Z`OftD zgfJoY=)*}3m}S!s({oRap)-R?XNF7g#;Q_TJ*ju^JsxoLj-W89Z{W;EN$6n65&&97tGUE~F|7Fe*2Ve^C`LO*@?9~A4|&1VAUYDk6CFWRd?%;6^38%WippSJ#U zsU1;WJF?&7dc=zpPsnFD7+j)?eg(K8S>#TZh?8(ZPN)q>HQ+|3&je@!Dd%oq zd)icFiJ!@s4@ewolKq10Sv+Ha?XwH9Ka9{4U5-X+JoYo2OV%^$=hM?^QKo3enPO}? zSs9r*l8aD>q>3yzD#t$ zuJ)g677*_)zGonMexo(`jf)L>)oyUX=iH4NapcUudKcph@ev@8x58{8hN6EeEoAb) zw`mQiBtMeAw{kCT!&26l-(@tCEdE4f6~`p94k@N5`q_F9vrgpz+X^N=4l}>9gcWP} zhax{ReBg%>Zr5D{@_rp{mrxOB{IXY6TR+LBnTQqYj2%NXwevlbM$YApOt2X&8O3xl z6?@tM{qo}p0DVcSI5-hsKLbR7FM$vXrZm28;>CE@Dzl+g1xk0~$v@8eDY&@5mT%NC z?(sFYz-$Q)J&AnT6LVv!Nya@E#Mz+s3kK9u|LOL}WcD^eG*d+07!-&*+nCM?z7T=} z!;uweyM>gNnyd;EUM{o#otWYk8X@f?9!v0siuH7xf zl1GfJ(6eTnG~c&I7d*7BqOwLKsND!(N0A=0W1BrN@AtnJtesrN?mtUY4gG6JP24LH z{#lC5cg+K>C|kwcP>xanT+U#big1^o#BCZ9{p{JQMm)w+;3_mp@d~rB}T!GSp=Vhy>Go)>ah~giIM*l0~zTNe# z;;_&0QcJ*S+n65p>Qu7cb+6wu9eLlZM2;b{JNbHD5DQ}Zz4Ok>oyri06on{UlGO*M z@qTQ_4X@Li*+3LOWP^DQZQP--n(4a}-Y_A6ucfLkd50i%`XhraHu|1;o1>v;EFz4o zL7R-@rrlB_TqavM*JwVT;9ssi^a*Rtr6Le)0wy_Z4e8{`FGh+_2qjRluid>#U3mY( zRc3(PnubMu#YVt{R7x?vXp9&A4yD0a0|~YV-vASG6tUY4Do*eP$N88>EAE<0G(Y-f zTXxv{41F~iK)D;l7dOwW6rtP$nfX+Ja93d3w?Dc(H$H@)o(!>Q@4PNn#Ibda=6^vO z6suFnoYBeA%jJ~sf905!W<5do5ZD>hfhsWovN#REr2G`^B`eH`wtLg?Air56ygNB% zC5v^Rq21s8t%Rebv-<``8Pg&Us+HQcZi z5}sKLzX4?zJGRF&>q|mJ6Z}g4;hr5O?(nZ2-kzE{S0@jHgCq^rU*7hobA8~8rsYGw zsqP^go;v30R~d_hxfJ1CFCc-SXwFZp*w0pEYAoeD|6+CL*&bkRBb|>UCQZFeSu@$& zTU0lRh_|5(QSLo_fxSXD6xRXnIU_x@GG{h+m?)}eRl)#+Z4V-iJ`9hw&J%B542{qz zR_;SbA88FV2hcBgfzz(^Mi6&@L(0XTC{P*(Bc&W#uz~Jw+AA#%(*FhmCG9Z6`-Pun z=G?Nmp|mL5w{!%+5k8&41L)r!Dyi_D#=YoiTCN!E>}@yqZ-LYf5PGprt>CLU7(mKO z6{TBO%su~M0b<067K4u{_g7%{Ar>C74y{oC)Wf8B6H`08`(D}L<0Cfh>VOxeDpC2t zTe8{!BH5Gn{YVWn$TD#CADRL_RA+k9PxGKOhgBG+3gx00$VLIJ_P=5i0GE~T9Onk#5 zlIerh`yMfz#U0stv#&6F-wK#y!w*MyjTEY9lX>y6(Qa;F>j-KUVxb5OWKd;LG^aT>eOhj~@W~ z+G1=Ec<@~NDE%}ZOb-;Qqg#-qie!n2B-2sJ1Nq0qN8ucC+>xh=p z(@X?N%ulfde<_`)!x?_Ed@p6Dk_tq5K65rrpkyJ!@On+Ofp#N*{b?Y^g}8mY`}Pog z=jmvqW}3)HT>%6GX0Jz&?G3t2e;e_X{93NSui5)NmK$~kIt=*zbs|_V@+8*as@ee+ zVM{4=&kL3SB4U0-$pkrmv>ks3%edH=^q>It1i}=fqVa&3Qy*a&iiP_{qNE(N{QNjhIRal*FiyL^FwVM}J;h+~sF~mDuwRX05 z_fgR1ekC5QV)QmadZu;l2^e+I&$1`udeJ|bfbc&_aT#=QL?Q2TCV+`x8bI>q~-OVT`tE@gc?osR}_Fi zrR)@5j`4v&;3IqgF8~+!Z8t32!f}+a<_@suC4@DF2~8sQ?8bGk%=3GTSx;RZ+;5r-Yy0qh+r}U|V2T z`N15-UIfw94aPJIobQk>3JyNr;R(iKwgAb2dKh6|kLKH3al$7N{4W#yn#Cx0QRPbP zLSX)D;2=<|JB&6a@>PF_k(W*30|bz^i}FFLe#&4Rj8GU$U7g3so1-WEuVt#7J*-ERFKaz|Hi%7K{aa#i_;QACYAC}pUb zEL~y#W65aOKA#*Qi|R8R3!e;|Cl z0H45!G2A7z>E5=m7blo3bu<1SLiI4h;WewcQ5D?*(NvxB<-gZNsCoWxW4e90MT^V+ z5W)gb-*!E7Bly6#=i676q4J4@MfkcCK;pi`B@`RfDL)gom({jxy}7Ad1#L{qbUEno zM!0U~mo)5N8KH*s@8Z8+mW*i)6buh}4h%5|GMdolv#_F`hQ#+z5<&^7r zmO+Jb?qykT$G-jeX0v78PO=o+xM7)yX?aIIE0wQPZU?RR84A<4W!uOh=OCc0{^G>1 z4r;O7%J$9W>q8lS3Cf>1sndwwe&+`R{$_P-0gge`mzub8*QnXjJ@6yc%%W@*ziSY@ z@hdvhmbEF1G&_84L{;pcj%?s3E}S)oiVGR`>cbm`^F7WB!$ zPb)dQ>B})>3xnE*pIVFJ5)RqwPf$fNQzg8ORXdXIT`WdEy%hC`3`31Fm_1KWnd0tc zY7c^@wTc!h1Ic7gN|b|ZAaTi~e^+y>Qa954E+74< zz}APPrG416fu+fr{GL|fX%0!RPOe!~Eptf(fWGAOLo^s#GyN?4G zQ@?6`jYb#W5fmeCZT86H|P84)Ti~nIvSHS6)$i-Jq=3obbr< z$#KzB@Y2#F@-DX!>i1prFCW?$EA_bkxXs(>BrWbum+U4GO(EAHT(bJrf9r?m zKYLdxdK}oddzi?Y+-lW{lnhY{JKK@G{Ojr&x0e>##F4B9gsVY0X;EuX3tQfxC0-Zo zpMQAEK>wdYTd!crWFpGg)%*4bV*Ry$Gv7ldj%#j7v>6eD-0Jzo&V*FXUN$(jW|8#! z7STK3{{QUsdr!Hu_l|v1y?OfAqE8wp|Glv-h*hneS6{F5*5YKhr1La~59>8f&i(UK z=cV_g>dodK|DX7^=+gEN4`n>xsac-+#rOK&8bP3e(jG;|Cx5GKPs?Y_nEJ$R((lcE z`;A{8$T=_ZxL|A4&R%|lixQ7tXKl5bQCd^q$Hc(OBG16ZVaFgMP{W|1@Pi@1;REA> zh6l_Jj0f2pn40*9xPr#HH<|Tb6i&K(Q+dVL#Ga3Z-#8k4dsJrHGOgQrJ-KK5W_O01 hL%Owt%j*a7|C!0L_y)fH1UwOl!PC{xWt~$(69A5g1cm?r literal 0 HcmV?d00001