From aa2be313f6ed1be020ec66aa2e60273d4a28a9b5 Mon Sep 17 00:00:00 2001 From: alekswilc <aleks@alekswilc.dev> Date: Sun, 23 Jun 2024 23:04:53 +0200 Subject: [PATCH] first commit --- .gitignore | 2 + .npmignore | 4 + LICENSE | 10 + assets/image.png | Bin 0 -> 77275 bytes package-lock.json | 967 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 31 ++ readme.md | 69 ++++ scripts/build.js | 87 ++++ src/Payload.ts | 75 ++++ src/Queue.ts | 34 ++ src/Ray.ts | 252 ++++++++++++ src/argConverter.ts | 68 ++++ src/formatHtml.ts | 45 +++ src/index.ts | 2 + tsconfig.json | 109 +++++ 15 files changed, 1755 insertions(+) create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 LICENSE create mode 100644 assets/image.png create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 readme.md create mode 100644 scripts/build.js create mode 100644 src/Payload.ts create mode 100644 src/Queue.ts create mode 100644 src/Ray.ts create mode 100644 src/argConverter.ts create mode 100644 src/formatHtml.ts create mode 100644 src/index.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..48912d2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +node_modules \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..0703c37 --- /dev/null +++ b/.npmignore @@ -0,0 +1,4 @@ +src +tsconfig.json +scripts +assets \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a260599 --- /dev/null +++ b/LICENSE @@ -0,0 +1,10 @@ +Copyright (c) 2024 Aleksander <alekswilc> Wilczyński + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Includes other software related under the MIT license: +node-ray, Copyright 2021 Permafrost Development. For licensing see https://github.com/permafrost-dev/node-ray/blob/main/LICENSE \ No newline at end of file diff --git a/assets/image.png b/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..19d705a29061ecee469aa90c2fccb721055cbc5f GIT binary patch literal 77275 zcmbq)XH-*L*RDqtR8+)9FG6V21OyBnrB@XJk&=USDUnb^6+w_rLhncwY0?Q*MM?-o z1c?xeNFel*03n3H4SLS|p7V`yzx(43_Fyo`-fQhS=QG>0W+Lw!XkIwSdhW!D6Bo3# z)E=HVaT<Bz#L37rwABCnY4Yaei4)u>wAEA}`TnumMqkJN4Vt%dIvoj+ox5`dqt#7& zYB8&T=I)|<T*AeZXBAH<s=SV{U1h$+uoa^k79nCKnWqxAcIV>U3w^zlajJso8!Ymi zE_~rH9y5=90EDUEa$ilBurcqI>B~R}WcZ_l2^;S$>z#d!sXtymUc{a!_028M(3O<E z{rlt<P;i^`1gz&Ao6QNDTYq0`fBs-j_qKh{A+g3>+7a8wIP$EqGoJaHOm|)Yt$pvT z=6ea+|J-bB_k!Gk-#B6(soP1hENF{9?Jj@)^XOUA|J>21LU`Fq%KZ6G%+rx6`Z@E9 zKmKurNU}H@9F!m-03dApK=<U|AB8mBN|23GU{S1uSb!%q;?o6e=AvzfwNbWPaHIJo zBLkbVAIu`a`P<eu=l?uG`=2Z6kM;2~AZ>HbSFhyCD$neq715UUnokPG@T0?KOjxXh zU}8uqS6cWBr|1_q9vbr+&(dFf$5~w-Q*!~&%znd2`FWULHmi$KG3SjX%&er{@+|&M zXIx74)+-1FJSCWWbU=e200-$FF6AC-AI^ggU&TuNOCYLnAurDd9Fb>I!GX?=W}qcG zU9@@g`qv%P_Z&A$;Q_Xu7T=jeC0SIS@<?EWBxdQ`Cy=HrUc9|@W(m$SgtL(3MP4a; zWX*gDa!|nAea?KdJC%!ZkMZ<>g*=v)n}Mcz`m0xJWk<Q7CY%teq8W5amAWMAQmmQR z2c`hK>IcabExc+9R`n{>58D(g$dJ#pO}iG(*4XRQLFRwSu6psmCjV_LS6dadW%FT8 zKD%}tKog!wTZA*3<wnA=#;{qlH5E9+I{-MzN}Ugy^;Dgg<q}q{9UB?&=6u$N6X*YX zsjQq2Ahyg%GtOuDo&L2BFLi}mUkK-IkxTDZHQ@~TfT6^vd<obLdv%YWu%|^knHJa2 z#oYME8r1bv7->B@WR!wWYFpV)yDs+)&KVSn!`j!9k~dF-*05zU%`j{zKaxNXi3KS8 z?Z1U;Il$O}eULeZ|0&h{tvm(-0G_1<;Xy|7tdj(v0)X(=^RTHwxddz|02#`TW#y<e z_ZGu%3N0I5Of~C?PcJF=2sIzPAU4-~=hHuhJ8}N1^$$XB@Cj{$Z6EJ#pLCnh&uUK_ z%vBm{gO<Z*OjuOlyhvv|C^wQJ9nzHb{!duIig^oE(2$L*&j?GKUL*4MKTtjX<InfZ zdkeB1uK?mkr;JP+o@>H+S<I7Tb_OHF_ulnrUW>bdq*I4SJiv1Ga;aCs1Acz)!c#Va zxu|-L_@^5kqfYGBrs2`Hp%&z`cf)rv50`{At$yz)oxPV;-gsk;DJ}dTiC8bAiZCaW zVotG}y<X;Zj%Q^*SvE29%Q?Q!4^0Cvu>AvKd7Ly@fPerHh(u}|7(kd8p|pLM#@EVe zs9VR6RD4GCn!~Wf>7Be*B9j4($Pv)Y4*9|&IiKfYyR6EU!oa>Q0o=}`pT9>30&wlW zinS;IP-Q~Cp|j-X>e!R&^|e*_x4loCFTC}F3OZgSW1*tBRwO_G-kSZg<(HWSkTyc= z%B{6t+CeM&x$dV(PtyIq_)(Xix%Kp5GdMU>kKCmX!HT=Wd4ow1AU?G!fj4*wlD^9& z6Uo`KY?J#l{LXxMla<=pp4WF?{!?!uhYlzHh0&xNH5fBGIJ-8dE@6z1<R5HZ-MaB( z1e*|A&V7`|zDv)9sspw5pV=x1p1;YmACK<cY*7~L?AUiFyvvQ>@2I?eGMnw-u;Zgc zT)NHQ!R!y_MSWVUfGu^z(II)B7_>oLc6*|M+QlmbZ$*QWIw+V9*Y9+qgfI6Pq(#un zkB?nW3v$Y7i2flJvH)<&53vHbW6+9dAJ*nl^rrncAwcX8X~~^D5B*aJM(mMwBKr=? zwC_txu#v{JM>ablH%K>*vcqP(;17nUZ?p}!=5FN-XyiC^?6`6JtWEIcQdS+VWUiO_ zT<r1lVC-&{0RJam-?}eK`zT16&@YAWW&@8-)y1T&&6A8slw9Q_Qggn7VR}vXf0d?0 zBjwOHFW+s4o3nvnCJJ9z1!B@x0|G48+aSg4E4e+m9EZ~LH*!plm1>m&I9f6czPTaq zTcihc%+^y}<i&psmF;6ZI;_!3C_AIP+a}xRzA?koV>o`(qj>sR!?=+f%<T9d2m2TD zy+&JLk8Z5%x+gDyj`q<jIi^(xamLPDT>-ba{_+0$w6|YcoQ4*Vh9#dgJV3nTsuK9P z!r`phkw8@|0Qj^P*JY1@VWs99dJI#TKo&gW?YC~^lC&PetB$53e|(P?Kn-H-cMrZ7 zoweNM!?nh29lJFu3A>@}>&2`d6oQnhMD&y#^*Gyh`&UZ63>dqSn*cNdCsyBUMD9hb zCy^qi?5uDcei8jSHT6Q;l`juqnw(3d%uVk}JtGHcrnG)~!pXnm)R*Y<=Q99kpibhf z6L~^0mm?8tdbG|nzVn%fv?@IZOR^+xy~1x^`FLmvvJ&hF95`6~uEh&&BN(S=1?c7= z<SVOYfh=B1yZb@u0hFx+^x#{8oqZo=QGWp<%30nV?C^}DKJoSa>Nf~kpvvvmMQGpX zZoNn(bbEqqJA8py;x^}ONFO%8X$D!<T!+1qofM~+4ZIs?dCTO!Z6&-bRq5u6A;@^M zwdV7LU5!0~rpDLg@l3g4uOHFl?8Bq)BU}lwE8;5;kNQ|knsRFP&e<-CkiIsi_C||~ zCA8Rgqo1oUmC9ddeQ>xIVQ=hqz6Y)R1c{JdYu>&>!xk7%_4!mGB(ahm&Q+dsgG*tN zC;hqxjNxdxo?pkJpo>QJP#ZYA*<$x}LJ{&4M$B-Xt@F2C4b63V0&f|fXGQ!hwyo}2 z4N_Ll=hUpJz3)o=6uxhL{_jYZhh||`)2{Sb&~YaQ3gBvO-~pK2cb-ppTGr2<S}qpP zx~gGAOWyfD0#boDg2K?}T>J+zbNAaxv$M$&wQ8hqc+De<XnNK`dw{dEw_<}5k*YbM z=PYjxzSgj>ZzxEA(D#QBaOGo(Z9VCrFbgtkCh0nxU1LF1-jp_Ss}~|jo7Jrso|GI( z9Oct;GJP)-0505XlXR<+cdv30F%x_Deswzj#L`d1Y}5BGEvRU8Ro;ajWN2_vaH>H9 z=3%8>-=zCpZsgIArjr)QGaGdh_uxMEStH%;(@NBcppbx_y(eG7DHfqujj^tA9EMLa zPGsD)+jw_l+<)x-s-^P1>BH}DTidpn&HO)i@e}v9B3zQ85pMLSNHAibw&sjLbc7PG zZg`NXLC&Gjg9lc(r*ty*OqMFhYx-s92p#)n9g?}m;pR^3oWw4KVz+R#*?*(jix7?T zZxzI9q~BG&>!CA-uLL{>P74}BTNWzi;Q`Yp$BRnOTPbLBUgSlk9(JFF?1Vr4`7QZ< zMJw1D0PS2{Ti*r-ww9j?)@>)e5bvu>q3bAkc_4~RSsV`(GJX2)l)P@Y_gg^leS0|` z!uJ7CVl8LD!|Ro49KEOlC4PZ`eX8CM$pp>!?~<lhwVst6`du!sv&p$C4)UXg;hp&< zZJ#!hXFmI;qEeHw^z+k+BR!78iq^-06ry}NX;;zZWv3rn<F{)^uzRLtZLWJ@M?6yd zFifZ57V0Dn6PGX;EN7q;yi9BM{4*GpU*N+GY<Jlv+I2}BnWb=ebifv%00bM~;Vbcg z8}L~(*}|J$u7i-|`E}sUo~a=-ulKoK68}haAM&JL0FDAWBcKh@uu5&bvJ^a^`e3{S zhdL08wgn)B8*NxPqw#ft>%iEVRAGr)K2nTu?(N}u;mW-<cIYF)I}SPgnnQzJ+HMbF zN$dzq!yHl%{9)^bQV?q)c&Y1=$UNSTj}#Wr?eAEUUG~k|3J(qr(SpeHw-z7eJ?%Lz z$i&UzEBE9X$gg6LQ|37W44g7I?NbZY!tK#*B$=mJh#no3qOdI>=$AA2kvRYR2AQN6 zA~}akcVSqWs7Z~;7OIrpmg(yn@hd@W!1Z&U#DMAAGvWWrs{oqNn@HEIi1y|Ud8DQf zfV9};atKd!n}3yPi&i{shd^o{zEiM2-9lksIFXw*Dc<~T;bgFd6@7fV<WWkrf<7D^ zY*J7hDhJ;Q!wEpr=*YWDEd?^UjZX2I@_`WwwX&6s<*mz0u-VvouYG9s)!+pwQ&dU+ z<3jaRTvdlfWV$G_WT4gJdd3+7_k15-l-S$<5{RrQl&SG06x6uare*+)CD9rV7{B6l zysDxT<MO)K_LJtW2h$n*T@?1$cZ_@<%TyQ$FT6zOT{Lfm>XR9{hX-vtC^Fq^W#Y7n zYmT6C{9XnhLy$*x>)y|&<AgnSptNwtULCN80DcLXIS6fqBImdi;B#i=s_Srqx%|;c z-1%h)Zgf!lv*mYhe^J>sgSmZ0`!NuIP@7z1gB#`|CcF+>1)RYR*nF*O;g4viFfmvu z?o1?%RT`|_JH}};*4b`Z6^DwrI4!7o7@;poF|CwgSj!?!XWH&2ncJ>@F{FiIH7Ri- zEc-EOT6h~}E;Trp7wCp|rEJm7USq!&*|+=S$v^j}k6d_B_2rovT@?{Tq&nl=N8kUJ z@E`t^y7d~apdVGT=1lY{aE4pVuXej$!8;h1IiADAl_^Ce$sU~zjVhBU3}k^2ls-wW zb73H!&c`q=71T@0!)N2RWyo268V3<zzn}8@HJW&Y>iF7F`;)#-&4QKjEl1MM!Tq?h zFTuJwq<&Jp@`<ZW8qmulQDfVl!XcZiiL>>@-p|>Fed!FeP*f@?z-_SZQV6?6@Dh#t zpd0UO7M;@*Anx3w4n08$bXAAxm?mDl90TQc<QBHnerK2EobER@_l7-oSwY6wO5>;a z)z_8W(s&8Nn`~9KEBV7K8`UK<Y|4*DIYPzS#pA2S@pi%;TsflAHT#};7ZSX0o5>)l zD(GDr!1T@PpymadTBRG#>>9=CTRv%bB-0AQZs#<~?pyQSC~zKBG}+e7RM=^8jR~vo zj2*{4cMLwS^L{P{ly7Ox^|PkTc58p{O^&q9)8MPms~q-s9eF^(Ukr%kr$<(vN7s(M z(HPDZ5U!`_7#griEtk*WK4$kE?q85xNighfWtbErFtq6M7ej%__`@U^4*IpC>61BF zL)tPbdD>~o=s*G65YvwTF!<4GvEE<e9%b|Nf65BO<FcYkpp#np^kn%M!_BK()^pTr zG}TEtSLTabe@Yv}TNp8{^XyvgZ2DHb9i7g6e2qDCXep~JuAJF(jh*1&yKuS(*iuH^ zA=L6{G8!Jxzz#&|R!EZN%(nemjSuts>y}K}-I<WKE#m4o4GCdZ?`(I~Y7_-X9|rEg zzgsjeWU2gF>4Sem=8@Dtxo`JV35upCzdiZ&TAn*;Vr8Xzb-zWN(-nhC#7>l?LpDH* z3_d^zoJptg^5KWs*9&<RA!WVCoCD5y-vZKWTTell4P&-6h_oEP96N!HBIm8!rek+5 z_dE-F1nINqAP_STNv>MEUHAvDOpl|yp7!BksA*qP=pgJK!+sk3;f5IOxG_kC*lnX_ zqGS1UeHJ-1l2$_H1marJF7y{?#5|Or`_F1Y+Wx2?#<DV2{=~#yZ0z~^x%nKv?vdzP zQ)!XG_1^zhnkQ)520u`UGvY%Egcwq4n%_oty%UQl21Oa*{YXd>ay~yHjKsyF4xn?A zxYg76<Pu{!(Uhvma=c%=OFQKhY4Iz!WzW}4!}9>rj9%|TE986X$f1Lg;X`=YcY`aV zu+1@#PjB62zv*mGN6IvwR7#KH<D+QZg&$$uM+{;Iy?G~%22t`CU4_tPOD5NQw;G+W zdx?-wUpGHyYvuqvluF5*usKZ*#?*v_!Nc3`*$LRCpX0A}O@sFDieHYF@zTil%W@nK zdt5iXWRO&iaMO{y&U>0|w`<Ag4rl4fv28w<YV*@eiw$oqw1dhgcf$_b`UbV9Cqv~& zaFfLb+6T|AdlYm^Z4hS<=T-8{dupsTj`-BBGd*dK+`l4HoCP+j1n^8|H}DNAOCB&? znouVC7tAM{<K!<5dE5$uZG&HKG*v#?#RQ%|_5@vc2Vqbi-yUk1eD9(hm4ex}ruKNz zKOONtN5wIR6FZWGKw0E*0fR6CUrC;~;hMC!axg@E)AFn+n2s&XmFr3|o^|E=P-^!m z2~#KRgmc6qI2&<<zWi%{*Mq;PqGhSPKZI^}Nawds7u(gjh{xmZF(}&N<7JmaqwwNE zThXo?&i;I)BKrBITgg${rTB_hH4lo`qh8^?d^(^VkG-d)m4kH{KvCq}SOqr|IF9kV zyPG>(sT=Rym8y0CLy>pVLJ_1!;X1Z$@5i81^m@`f!zog)Y0$2=8Oa|cC1h#>Mi|6- zhgqgvLZy6`c`7aXu-+ud9&KZ!YKy+2d#_{qN0ycbYsj;evgDvr*IQ4AcZ+t}LAKp< zSL^HwGSBh%_;%yaR%QJ*^EwdnkHIV0hH|B8_m|pNcGi>y@jncLmDbV##7v-8j0gOh zVvZ@iB-y#)@D!T{+@UsArZJLG;9hS5tYOy{JF{bTeOa@2lz~cqm2ln&xk>~vqzV~@ zt|bUX=)ULRkG?J{<k{&%`R0QpGg$E%U3?;7#IXMssjsxgB%W9hMABjLBZB*4h%VRl z+wyAy#>kCn`ZHX|4QS=wV%%NyGtbT^8@?HLs!Vfic9`^H80KjH4pF}d$2FV0Hh4hi zN$6grdd*6tIzCxkBq8>S_2=zY5@e_0)o`^X=!u}Ls|d6Hny&kiM>xR8BZW><K56Pf zlJCQEfiNGzCa+xBq@TgES9ZIt7Cvt}0NwZO9*JC)qP)Mc|KV$0gl9MYAUUFH@W@8v zj{UrjUUD?O?OqHUw#h@8{~qi)ebL+^LegWz!H(Jvq4L?3gl(LM`qJYSgoG;=b$b<g z=@Q}Ny^i9~WZezEw-?qKL>YRB^1h#YJ<C0TZZqiv2F+v-Ay<~ZhuxKw){#}p;Wshr z`GiPOoUTAaNHy?)kV$DN+dgW*^AS4(Al-u!U}%<^Q$|i6S(B#nRY)0))mOvQNRr;z zwSH4bF0dmUmXIyDEDtrvfyPhF#})z6vF8k9B1U9`JNykEIc#~)JNdKNU7BeVX^*aJ zlY$@Ml#dXTn_Dv}M6T9}Ld)v>gV({qrR*eBDr&d`k_?;g+(4L6nSqMMvOYq5wwFWa zBVoHK&lP3*Z-RKMcsC(ug|{Vv(Jb95)vx|h#|egp?CL-?Z>EZQ1_IZD4X6cRa#SXS zFKRIk08I;?jNUX*_;bVpwIFJkx;iX<86FU!K=3>G^Fd}!ksH8IzUNCBd7-2od<xod zs_`;~jIXE|Wcb5M(aFQI^0Vh>GeA$@cT?f-G2cBPVVK+3WadN9=@Om~s$s$0S6x|z zzr*2Q660>3(2qK=8AX2hrTFdh)5R&(Kfh|-!v$;*_V(#)DMbdKD@$i!_{ciRSzkGZ zusXP+kR^(lIJP2~StSa($R*h7@Frk^7r9$;H1(<mcUr#(QWHRGg!imklyro9<m{>P zO)?EQZH{xyz4$l*jXLU5P00U@Px&E|HP_V6zJt!XvQR{PSTGtOt9M9E=9L-?@-rMA zmh}t_vAiSBD;Il^HI*~|03aidOOU5Z-nc;uJ~@5ja8Xkk9=sP3oPf6S*FQYmI8yTP zr|h8TD;lTa6f)5V5H(qBeS--YeGPT9>iyr``*Ci$??p?i3oq-J{`$n@C0%CUs+s}* z{$56)HH*=h&i3Yk)=POWTJp=q&BZ2hB(WRqmNuji5nyoT>%d0K6SpJV0>Lc>yJx5U z#xF}*-o4J4;$(M^5r+*iK*h43Y1LF8$zdifqU3m4ILuttf-17=K1~%GKG1&RVa2_+ z({wG*<WUc``>JNv>co0YH9X^Jf4faE>6s7pqZww|{$??foK$qE0+Zn)5t9ee{d2Y` zuKv{Q_;{qNbK=_LU*wNtjzx!iF}u0rc@dga<WoxZC&=})_)WPtg$+Guz0pJ8D~ilx zV=%q~-t<*$(vVSysRq#S{gqw$1-{kzPEB6z%GGftH_r)h2PSB$dXb?Ac{H6aQxt0q zIdq|92N`RO(^{XG6GoN=C2Er&pZWN2hIacLO`9-MUM#`63oORs3V`OY<MhX7c<1gn ze-;4<l-)qeiO$n5`L%tdwuNPo;-k{*jZW~^Gd6xfv5TB}8xk)AUYsJ)QA?|J+${lU zQoIEL&NQSwEi9W}mw1}-AKlzBO<hH0Ey0bp2KqE3Gj|o%dP1iY(!Rmr>Zh=IscRS7 z{mkHvtZ$}Jf#SH0lgG58LhqI1rF!cUyV(D=)cNZ)TKEPXJU0lM<X2RIe%Ii;aUs$y z?mU~P^;GO3krt%L6D9pEDp7_{XKSwHmC)tWIT@^W@7ux0oEALbz1w@U`w}z%EKY8H zF+b0Z#PC#xwqheK7F-bq^<7PD52o2Jd%Q2Sl(qG4sT^ku*m(_L;QGOeqxZq5GcnFB zsOB()L3<JrcubdS@`^gO?SNt1yh8h5hLiryoql|JLR;wve&X8rTEGn3<ty4&cF4z7 zuA8S@cJ|(WlAyj6ySCC}+3zB6)4=~A4XA9WDD5#5=TySp=*24mOIy484^p2h4HP`Z zU7Kg!{y(YmV-^mEJ#D0wbff=mfkkOFK-@=Rw)S94?bipPUZDdoqe%a5M5n1Qd3>0` zi!4GH3Bp?gN--;Xk18m?l-AnlmSFbf7U*9}yY-l=v||GHSO8kToRD|g?j4H%4<-ML zuq76Gep5Pr)mQ*2W;p#*H}ijctKV2v@nQZg%<;14w-soN6MqKz|Dq?MK5m|7f8JXE z*E^k{f&TTtnXfrag=+9C+UvSY?*cX846gyXe$+E7zpztO`0YGTm)v;{w2f-{mAP+3 zWoh~SOZC*Vszn}}-?CBl5)qQ)koWB2B$$C}tMy|lB+?dn1$md{PRKvfz>APUiT}aP zPo{n~Cdd5JtGtf~>h8<xf2sWsX2HG_)Fppw-Z~G*@;2it5fl3B0fe@=U!nmt?f-v^ z4=oxApE+QkV+eQV`h70^D)RD%n3)q{!+)~nNbuKV6j*X348t{6WlY007W%fWrxw&O z_-oFr%6YhkDg1)rE;8O~AL2d!zCY8@6(u&(MK@bGU3j>K!t<_~KJ_=_<jfXoRM?>* z4I2h=&oqfPeU#1ZXf$_o^5<$m%C_SgOFw>hR?ccrJb>qLZS&U8i0*zI&Fy;0GV)_$ z%}uj5(0?Qy{WdOPX5*l`F;9w2b1{HF--ABZ;Z}z<TIf*(y1QmjI#3^1%zUKE<-ZJ8 zHM7xDY$FhJ5l<_B!~bSCRgu=i4xdi43^7RlMn(41JbG$>E*37E8ggk$K#{Lo0byb2 zcRewzLaU!2@GLYat-(Qi&Hg%F+!<m|d8G<?;fd=V&ET-Nv!mNW^F6O=ZB~dKTR8rO z#tSwH69xcaO`cJ?JICYD-&PM{{pFxkX#NFU6{GW>Pv9LQGf*LQu?)6Jag<LGo(3wV zuVg}^ZF+G+9p3U2g!9iG)wt)d<}<W*NWKlLB2OPoGhAjQ-Gq<y6`xy}%;H6wvvsT! z?vc}J{sv`;_i_Au_F%H~jCAF_+kn3|e3Tk8sEdz~;(6^_Si=}=)qIVYrNEQl?IxY@ zBN``1qnxIn()#x&oRc9oPYmJyffdPEq<71b!4qfmi;>SJ?2T$#MeMDzJcZrO+hh&_ zE1GdX>9gw)>BG<a?=D$%-qXp|w{&mLWGN7`gG4)31zX8G#Lz0^1LoqTEAD4I`{C5* zTy`S}v;Frzs6sAI2P~ubv*S?E=YjIMR`1v=<R3UZ&LxY}JnQqN49FX(^CG8$1cGj# zonY2nDG5f;&FMGDf;$9Fuau5W%m^+-Z~d*;V`(+vR}{}2m%uN(^K$;41vs|rm#Z|E z3E0wn$&}P~08#xJ;96|mxzA?$(_n$rhT!(;m<%}!)$dU!$^@8VPs9`j)vUFj5|R3O zhjVB&6FeejiVdGzd_8JwuFEMUKRvzYXig#FF%LGHl&cmz?zV>W$oDhm%E>giUI4W< z^8i<4+r~Fy>d_9E?mMQzx0tFAE-XjKV=RaUSKATcgmFpEK!(-^);AsEHwG!y&VDZW z?r$ykGMw+kkd$BdYsDlVQO<OCQ7SQ9v_Grgwb_qQ9Pb=iME|#be9K8qXvNpN)OL(z z-^C-W-G1X)u1iH0K+=<d^rza*Iwa@8wso$#Rc;bq<xjtD?r|<Eo9<8LKV@9Vvb3bJ zDF-Ya346QN$XUBlk)XQ<mXe)$^EfuYB6RmOtfxKT{0ebmj(*@_PyeoLQoXyHCuBVz zQ8Sk$r!)wR+!_lyRB0!CW%wD<<rnDUYMsii=@T$XEG^f>Pn_G>i%5Dqw5yq=mMcR4 zv3{+Iq|APb0zm;V&nC9NqWIe$Y~D9(EN|0Dtg?@5-3Ud!$wrNGp<Zq{Z&HX8>@}Au zu4h>AKv!3T%vF!iQaGu@{{-wQyA#^e4Df@r(`qMnI~Bgt-8qhpA)GdOx^M+`TXRx! z0#@TvF@2-TC0h7o-=`nN3J7t1ZhnA$*~_vV-<?w>!rT4+rkolZ*>C5HF(!t7{5=9s zdVML+G4JejIHXEIk)*AOOP1&;W2u~2-!naib`?1epiZU7gZV-7u0qY?oV?)H>>z;e zm~*<)=Z6ZFyjJ%S<Vm7Cd2)p$39RgCYbX`Cy3q{kklK~rvlenQ3dnA%oFqRC?me@t zz03FGOR<(tYlinerLV_z-Mit|hDE_yF=p`BZ-0jaO=>nGwkF&$OtIY8tO?qID)L{K zyEfnB^;+<E|KLbRQ_aoA!jU-3;`DbA_RM5+9f`p8ZO;OS8v?qPyJZ7&6ru~W8)vTh zx8E;MHgftYf-qe1Ffw-J7_LV(nfZh{>XVnx3>V%KF_%MJ{#Iq)BcT4-pR$QDT~0&H zt;algy51=n>3zq}xm!*Iyz+%`@`fAP9ISUB(MJM4MO$^|I4GA`jI7+t4;BhE;PPp- zBDS>!Z9ePy6l0uU5ppShd3Qm{*~McmzB17zIwy0rEbf7%x?as;9%w6`m1Q2~(t_gK zU^~)xh+*daD`dT8r}>tE#fc_}D^+WGE7qxunK>y+fEog4)y9j+xsL%1!Ru6Fr?oYD z(yPX0q@ZT&pzH}#k4<A=_y9v+O?4|;%*5^Ifu`MDvAJE`nvYZ!0i0A@6?FB%bpLmE zgOwS^?gWXjKbV=dXq$zRp$DDfDA^pySL-lfDX)Zmn0eHfShwDh&t?!1;ADZvSEKiU z)0P!KPzqLtU%y?+pRVrT&-TWNCyE-ZbqW_qTwF0crw4LOIq1BbZ|L2=UGH6aW$jt- zy~)7{P}Ispvx98qv3=dBl(-451`40Dmw})!$j@wgyJ~5`KR?*XV>X$A`Mu3`)bpbV zZuz0Dj+!$)rd%S=j1Y^yLEuIOc1qs;7i7ottsW3v2<WB%PT11prv{0E4KuImHX0SX z%an@)!q5JtxkVq^cQ=sYmV$;IO=?yLWmHmyX~IDy!O}maH@aDT;yO|W0Bv|Jk$(`6 zT^)%O6nI+mok2Q=Y3>)NIdJQXowgg-*Tu+Twe2!dn-N!LiAMeQt*>r~u2#b<4%14! zEH>7xY9(lmRN27J@*RN*oQRUb$MmcDAppI;0cy%B|IiOlK<uIuv2V1z=PMX9g%}{7 z`^hdXBRv*trJ(82iY5E3m2uK$RapQ4g;3~E`q9IrkNkPYU5bHk5HaE~!s*%~3x1H> zN;&L^+a#Az4A$v=<Lun`c;ne#aSVb)K2zjgZZ*2buAF1pZV&Zd&GZ`(MY=At;98va z4{MsBU*{TV=MvIPJu0vy{rd5A!@;T}OS=GOuD`)0LzA3@W$Snjht2u7H>-@5GUqa< z>T~6a>$WhKjxA{6A9kI}S0HPKxxMd{PG>lNY|)0cSsWRAYa5U+j&xNk&#b+Z5|VRC zwx-NGH#xL8F16hv(o^{3$<8R{OotYcS%>+O3fTZJfG5DcB5T(+_~GdCQ*JkB5i#8- zfH1gh#q@;t=&tC3D&`8O4?+jlTO_)9_m5ncdm<~&`;UkbiGM0MliB0jB&pE3xS!T! z|Gj6?|7X9~sHw*qz-FNZX3}8h?lLiZpfWpZgb^o)#&$a02CH(-ZPm^=2aD)D{o>?s z+iJCJQu&61+YgSvh`D8{``X&=OK()*9eWjL5lgG~`7JsMC8+>JU)ueoD)S(FuIR|i zIHr)(0>9&|zQh-6?YQT6?@+tH+XF9>u{%uRB3UedEAmB%s(l_D9)LY~g?BJ$PA)kL zuvRtW!~$mC+gmnm#w%yC|H$M@j%_Z&p3JRX`1m7Dh>#~@4o^uuxCtB?oBehrE4Sa8 za}{&rics|P5l&g3eK^P9PG*0Zl22`U%YMA=05Y19OUTCR*|yS7C-ZULa$b;{@KoDF ziZ?{K{iFY&wlM=tGvW*Me~H-qQAL`MdJfhP^lzUee%7wRy}Bh%qL0Ql4)wCBvg>ZC zybfo;PaeF@LVO-$e7*j-FkZK!zd>>`dHQ2}Q;z!<S9|)UnF~C_E2(WdgPy1TtQc(o zqyorp)Hj-&Vyo<gK8BOOb+bn8d8T98Oe>Ku&(daCpU}Q2JMg>{`208VM(uANnZPxp z_ajO8P0;E5gO%LOT%&z^Er{VAHX%;+M06i`gw_y}>Cx(^(JHy+(7{npzY_+KeSlqJ z#0~r2zC8bi8`Kd_=exjJt6|f(l{M4yq&=Oc`xNb;dBM~Ps9Hzna&;QQKtSg|8uM)_ z8p~uXLEt3x{np_vIue?xPwpB#RV=~PGzJwAs4M|eB7^Q~2Z5}{f1sR>JnkFbg|iK3 z^So93!>zC(^BJGthDIjl?e=z(SmiA(E&Om^cE-8x*ylbdbYMKU<^s>Q^)GH$?(+$F zYc4opiH%<6FQ@uFpT{gh+k6w*NO4NjnO6_A6lrNVjrSvPiKj3PDB<=RulE&0sc{`~ zs$oEsQ~g~@qoNSfl_hhb=!J-8f{#|zci_+Zbp{zNIbUjQUi7Ed$0Dq>&ch!9r2f@% zQ~Fg*`A7>x*@7)Oj{z+?X$fQ{CD1|`{W6J-sW%YxzQ-U*d|C=LHh&#^Q=HOEB{aG3 zI8*D#tob*mq-*5kE*oYg3Y~ZaSphDgz2=`b0}P!&3-#T0r&Qx&sE6!5KWL8OH1Xko zmD1A8V%;BPK+YZE^Gwj`(nmbyZMM<o#Ig~2Tc_w;Xwegngp?BP-GQxR&JKAI_c7nP zFNGGi$XkFzM(M}*?Mn@%4&S{DSTtw9wh<`fWdAVewxDP1W(4h^Q)rg83yPBY(N{8u z3O99@*L<YS7zyo}1>|N7RPuH{X3{ZJNx`(3Vd!kboAH`}u4ll2?f{wYU*`E|OW#a2 z)nwwA5W(O_x5f7~lE<wKAiRusL)epsA=PSC*Vg8Ku1mody#P=Phq-_S*q1cK+dOVl z#vj`5M^bS1>VbH+-+1>r?u~az*1uHq-yQNm%!@|aR<~Kp{pXGIdWI*boHYTHj67ap zX9zTZg^?7hn|4f|A7Qxe{d=wd{MN!(>dbE6zIEn|Ft_ik)4#A3@=o#vz~RQnyC?th z>AyCk?xX_uF@k3X%)19c)U=G%&#b-F{|&#~|78a;Ej+h4R5BHa|Cq|~ccKirNu3e+ zziy%m=T&?sqUgvL@Ov;3OLgyQaoNu8&{rIPcWZyS9ku@+488f=EvPSg?tfX9$?7UD zQmo+ogV%q_|7GU<BXc;HRD<4i5k=kWRg>JhCfP#^F(Gl0aj|g^YGt>LnL+y>U)Grg z0U5l1tASeCcT7qRC_|&O$g@n?d|e{4E46JTS-+~n^-IHT`Cy79*T8PaFmxls8(aMo zOlf<o{$%^>L7XK*M-H*`_4^l-cGU6yU-W6;QP0iv%9FZEzzLD_xV{5E2d`lB)-kPp zojN<DS<R0mFMAiy7|(LnDG_oHPA|(Ua!Y@AZaZWxLRmRL<KXW)RhoG*)xX$I_~?Gn zTs~LtE2bkgrG~BGz8*2ZGI>n*k<&z;>#)qV`Bu<Efn!H>616wewpt2)I-{*xiN1Ts z%jk}~>mIdvTjZmCCxn!iQ=11Hht)OMv_6GT#>MK`a|m<Pw#p9m#E4c*?sZch%RQ&` z%7c^2!bPk()98)?z|2m&KcAyr&|s`n#@@j_5d>gzS?#`Fr;5pUy?Ob;v^ZgSz2gRz zkbxF;-GaBKhB3OTKc|}Z{AHRD02h_R7^jxctkoC`7S^*3OPwBe`<q#RvSo;(Ov?vF zW!a{fbKY;4FRLX)JXkeO#@<9RiO8FK_Or&8DOz=HabSbKLub977t(tSSR6-V74WSu z;zYfSY3!$HV))AgO~`CF7m})$@8dyF^IN3*S`{-rs2qZ`8p$frk8gwc2DHEn4$c&f z_{H30CyAY@RK0AmeQlZwt0&fZQSg9CEH}FMDVwO}E3}R-B$gk9P`#Kdk#jG})FU7k zz||YH9S(5xhIK>x#ed;bWkd4#6$ttl@$`?PG$989kYPUm&NWxWBHX~`<Ic&mTy^T0 zLSP?3;;S+NR@E_ZL>)cmMPfvdT&ZY&BC61>O4(}fiE$iY=5W<qwS#{K?y&BrUUz;P z;W6|5rZa;}vQe)2!?Z|~qMY=`Hbd0z=*A%s|LL#=+e5BO7BAvtSXhS1t|$6j{Jy3E zEi@SK-&JxiFzN}!53;Rfa?u;1Wyagu=tW#REP@=nc>>wtHeR`{cr~Q!s{M@70!25t z<Y1Cd{6O1JnajTo(eWysy{ImvX2}M0*!1W=JU+(sCb99_ws8t}LL>0~(kw3!09Efn z#}Pj4*k};w^Ss61zs*JbX1|ynkKy6e9YA<7sFGj~tb7=dJ1%3jZ?yE;zKZD#sZI6s zem7To!~D<k_yu0mVDlzTD%r`*BjK|#F~wu<-B<aw+m<>G(<pu85w$#irOS<CocC71 zw|eWtHv+yLyx*D_6p0+ug6H0BAwutBv?e@Nvm8V;G>n!-_BmFI1>Lxj1rlda$)d>E zFz`HGc)rb4UI4GQ5`;KX;{)kf4fNLBZj@y$p!G5mTk*#n6Q{xsY;8P9dBWx+0Pt?{ z6usthgv9UgXmNfUmejUa<D>U1ncFV_B-j<q&n8~cp}1Xi#0NbZsfk^tk2|^@V`2K> z&;|gdmsE(JJA`9@^+xf1-M{)HH_;4#Vsnu$gg5j_Vow`4Qd1+;k>s*9(W1AVoP^>N zNJW9#y;2YMDs-{CSFO|eY-@LMY#p4bSfRP3i4AWpy!U8&qcY39+tG?)Z#*&h?jb(W ztDSfuxV+TEt=r3}C#%Nw@Wx5)X{|WS9M$m<b~lEc-Nt9aUp*Lm8A;K)@jGra3w}_U z(T2qG1j}E>GJ$qIoaz)wxFbU=O)=_FX`r8lI`oq9VM8RpX-IA~N+~1Wg5o;MS#1a) z$(c1QJs59VGD&|-;D)zqOFV1_$nrQor+&rZ&A03R`~&Lt8P_noa`4GB<1tD6tjM+v z2%@%hgA?9r_R$~bfx%|eRH$uXpyC_SsemI{gY)r;Red)45=K`3nH>IuBS01Ek#o+I zVi)c9g;rf`>C{kPcbS_QAJNZE2!lO&4`U84-}Wt#+!<`_nV4em=fF&t%gD;Ptswmd zrsA((S6Q?A^Fi<*Fv%AL-^K7m+hq<Emco!Dwh?Sw1pPMD+#%v!na-RdU}^x{$RU^E z6EAc;wc4p&7hhq`)UZcUsnq$73l~tC_wFqiE3X{ZR91VARn)kz3L&gN66aH1k^9Sn z#wd1{HWSFk-r<$@8=9a^#q^*pE9#82SFjoSPSC6q1n-1HI<1H$8RM*6{#tyrb0%9y z;tN(W(I5Prz#-pHnPxb`SwTr)knDysg&h2tnA4}&F-_(nvZ?~08Gzs(HOR_V`I^r< z8H8W;pp&#iaJD$1I&5=t%VnuwFql?<)wUpjo<l6Oy&^r|Si!ef$?iJ!MD=S{9yUA& z4>M6G>ZzT0XNDL5Qx^kqEqsx@dc$gDBmH`1q&Iz-SGMFF1M*O`WuCO<KJFD_w4M=x zwE{J#)fl9!=_I$z>o<x@Z<uR!JPZdMWtQ2lg{;^i2aO>=kIvv9JBzK<(^bN+WYf7l z`wYeJnV6B4m3Z6%`<k}tImAH?;756IzlBYi2szVOnvh_4>NE_S48s~)@HjJA2-7#j zN9#LZjv42ZL_2gQd3Eo^N|)LslnaP#BuV!WD^k<lC>S)Vl&+x<X>jpb2Pg6I?J@NU z<z@{78HMjkh1(A>S2bXbm)F2yE+$XnSwlFZHUz<>Kzt|8K%WC+v1FnrcP*1<N|%^V z(baCee8yI>C$ZOh+v}OZPLf|fl!b%oiUc_L{N_qE*^+jWXieH*G8sb&52k&qo2mfc z7BrWy9E`tc#pc}S*E0i5IAHu7XYHEV>3n<HBfl-@`{0&1+ez5;1Vill!PazUs2?G5 z<@*mUh-HH9+2J}i%V5wrb*ijMEX_|H?rhE#xH|NZ$*cLq=$!W-Z*$j7>VgqW%%UPm zbzBW?4Fe6?-d2-y`!?Z2_X>s(<l#>z-%insENhw+No>C9x*|F6W70c{Nk!5PJpn`v zD1Pj{5J*KaDBc-SM<A@4D><YDkYk8QQ!1XLulFaIN#Qb@x2ebtQmmZEkEWW~FZC*r zCN|#&K=-IeqrEObx9+r3T@V%V=(#6iYX=JCIOW{{#M46pWca(R?Qr>kq-Xy*qty0g zhpDQbdW)R>uYK$i8v#H+iU(x0xe8Txr7E#A-kfvPYZ5{*Bd)lMrg{hE1a{Ukp@hnY zQWFj24efK@Tf}7{zKj-C?f<@`M5%AHvB-hhan|bI25{%_V_WX?nX+5p`SwQ}_o619 z-@f)Xs`$(}GY*+d#uy%wY%R6dQ!0*>URyB$5DRKE7;kMWFy|z2Yi5OAx_QPUo+&-v zJD6_&F1&^Q=$$S^xNgQ`S!67AJ!y|{4Syhgv(6I85#?g~LjI@!(S-0_()ARNBLBx? zVp3wf%|oJB`d;X0z#~p#w5GNEaz%Bgwa;x_IXv{^Mequ>dlZyEg0g1U>eR(tTYrGi zs-*imWhZn*zNrHN*^0wXlN<V;Xxa`1tWRha(*<65Rm<C<so^{ny$hVj>);*rj86G^ z_Fp3oOFx`o9Gg`-kV@FB&sXSWo6#9{<5sT_smI^GG;s5c@%QeRJ22Uw#A47JY$dF2 zp#`Tkbyb4N0#zY?6<PV7h;48M4eZ<%%KBbKcCnmw#|$|deDby{O4jZrBq^o&v5s=Q z4mzTHv4f9t%>-4UaZMGozO3WxG3IyZ+-InG&cVu1o-eoqu5L*)80)iXb_8Bfju>+3 zJwRXBx)(1@pt0yw0v>_bUe|=)KvrBec3+w9zYdKD45eWAX~H_*zt6=qd~md$eTG?R zpLi>Vit^W+VX{_7nK-=}U4O;A!w|RmaH|3~7m*VTv1EBi1&dU^MOULn97tZ`5s}r; z0wvAcXB^;+-81g&LAQl-q9FsXA=hSDsbj`t4bA8;b5AN+9=M$%ot{Z_ir#qZe?hU5 zapA99f(|~7tXSQPcLu7FejF$=zwV%jPC7R|HQ9Kzt#ohW-V`||pQv@%rUmnlEd(5y zrCsOC<wkq3sl(AsbBA7&Ny2NX*h59jF^6p4Y}ssq?96;(u=+y5)C?B@D!_z)^FHpC zZ`A!;4;ECzd_@Ag?Eo=K@q_i$rfo{&Q;VcxS$k5DsTsWLfLxpX_PKDYa{;mz+c?e@ zMX<G04MR+&G82*{bd))JD;LyFLLGy^aU+-?@2~3En{uuIL#{TS1YY_Xl+Gv+g|X;4 za_I(K9fN(i$UDaI2Y9eT;L{2R>f2$Ab2w}s8B~9GVq7I9{L{DIF>X0buOsi1M0l%r z+_E|+mCR!q{@Tv%tsEhF=f)>dlpC-`e2dj$C<?36fYI8{%XZpn5JRrShIBTJjEPut zsV|Tjx6@%b1Bwt{{u0jn{L31oyZfNegegkJ6``R#eM#F&-X7XrPc5}Ua7>q089gHa zx;Yf)r7)$>ba@8=#aw6B7qgIlChY1S2GCrs^Zz)(u;U!&%d6@}E}gGyrDPF}c|WtA zg_x(NjNo@YrcGlnfdRd)mQM^&m?0=g`fe+XyV1)DC<<1_1%5lTrSWod%ubE8k2?pt z_v=Cb3!)|SYYtYVmI=c7+t8{vM2%f)P)H9ztR0rs*Ubfy%7@eoUCQ7GJHdO(=`gHc zITrwNZEl@`-OMJpp`$mTj@%Lg5EqnwVitgdeNin$u&KN8sd7Ioc)fXk)`}Ndp~qlU zJL(*qv-?ecM%n(9p?y-}nkmIp_F9zi2SO_YPmd+ciY<h5l&jEVSdOBErLgywoA4yB z#NV6tPJ_Im4m{XBg&HQ$%t`)4u8f{>XS1BP*S2b;luBCkyf^uQp(~R);th{O&Eq@o zH#b9Mf@ZYf{-rvr3TbG$mv?lZkspjVOnS&hX*8BZx^!yz=H!|H7KDX9(WnOGp8BeA z?>pJ)@#R2|rd`ZxN|{f;sKX3elq;@;iI0;w?37p`?x(+GvsVyGndOFWnlY|Fu-vJ< z!YO=%&$vBk-cc9kZ6tFLtR75_dSLTwSU=tv0K?bP@9MdM-@39n99o8g_06?x*HCRA z93it&0L_Uyf9r{=olJIYqqs0YMS4dE#y+3nY++P-mF1o&2%w2rU`0Q=sb2YJJ{l{C zwwTM%De9H33;54nh;VJ>L+*dvhI}wMGtSfhsM#fv>gM1=;@z9(wd+1E=_czBJZ7W@ z(!c=kEVm+G090HT(q{N=ORRY*p2Lig`pbHm{s1T)6IuGC{QShYUF)NpP(B1AoU1g8 zf3~McM4R)>9ObLdp@VP`UKf80=gXs9U(D{#N4mLH)P%HIFSM;jyDm%jODK%5MQqI{ zU{xO>2Iefu&rW;U@j(R%p%yFkYoL`g2M+;=sIP)gCv_Z61^wX)@L>Z^cl{&SO}AP; zgns5_9E0H)QzYg-b^<bdnA9Qh;2cbl=p(5kCv*r-ni_JYFY@P37+IFV748neYIi<2 zBp+b1@ujW|aXpL&PV)p^eEF9CVegND_@#)%?ji$uwnGk8xGbg9wzJyR&I*!?>3~ma zY%TsQ_?8uaY$LGPRFv4|k?WVu$Pn>c85T`ENSN%JRobpIW&ggx0MM#1m|v5`LF#H& zN;2|@V?u<dpb7Y#0*3j~tT`yk87NwXn^)B2>MI5I5K_>PCsso!|2U{%$pW|drUlJ_ zS>^xySQv8Aj?`jdMw`)!e$R;90hF=n=Xe>8ItH)%7hmT?C?(Yn2a~uaOG{1VGTqcS zD4t?bZgQHj3m+7%Y?USk6yOTPr+4(buVPX)@5;iluXvG^Lv@A=71!pW6Q*i<o?>tX z%A2fu7`DuIRY$f>XVZ%7yA$t7^!AV_<_U<xB{3OMzRu_*ITdwn%1yq2Xa>V_iYF&y zsZQ-QgS-ssrrPCFm)mG{JA+;AHLO*kdxO?4pj@5~I$v!h#zM)K;T%-*u)@#gJdm&F znxMlF<sf(DdR$wMl-N^mBRSQUF|WN!0)sdfYUS6R><HQr;oihG?J9XewtjG+YVKH$ z9GN<If}aIS20Au~fU29b)ZG*5FBAE{i79x(9&Xd3D|!NFq5$aLYp&5P<BrZgx#a0K z?;Iim+@Hw~a;@6stq^VA>x~*LZB)@KE1RNFyLFq1wp(lHed(U2KrQOY%rmH>I2bx0 zK|Q`nC$b+KNwf;sy>?HIkW(<f)7m=!*Nq-^tvRWUtqaWYoL|#TleiiuvHU~+7yk92 zA@GpjG$Vw6BYiu_U?bDzW@8<hqfNPn_|gvyHz^*ba_f4cTKE~nMzAz~Zeee_@kkjd z-X|}NT)QLdS5H`Im&u?Z`oc(#vP3QXqq9bu&*~md4+-a(n3`O44-S5#1*uXFvTWcm zBd=}cSMi<6vw&e|I~6U*E56EG!XwBt<AMTd1UPH~rY1Iuz6@}AvjQb7<!182Ck@Ns z-!^PH37gH<6t_C>486wT<<gpI-4%FKP|j{iu`!Z0^)du*{(ya<-kT2rtvY!prto6e zGuJ{MIq0{)X91`duH;3oMB4dGb7*rG(P%5YkaTwGra8NwRDXF7rgn-XGfq*<g78a# z><Z11ek#QnO|sH3x-MuQhBdSM%7=(;51x<w(P~==eZq!cb52TBxYG`LqI1o*Cl)Pp zh9tp~^8lPF&?&Wm{PKEgq3?^<dwo+Nr<<m!9vt&3Vj3&cviThBw-Y!HpKSXBO<XtG z$i?li)#Q52q{$+FjJ#4$0W`V_&ei|2we4?P&m8sk6@PYs5rS%FO*5J`V1#M*cSkB; z%1OeIX;FHj^tX5(oPLKd*a$5MnSSRX?zYT2kdrFCyNcWJMl(C&bC3&ll|IT28^$|_ z@5ad`zwKxdt{{>GN-{NquVgJ!nrOd&CvWq37#;iGZFp<J&mZTYhpe%ecRBkJo+WAw zSoRC3CWaaIore{UnI1Zj*o*Ni7eB{Fn#??8({@`CVMk<1hiAjFvot`ooRg6r>oqFP zCG=7MbCYQBpJm_ayc@1-Plv(-ZU=16hdA4*wq0d<(;vqf=A;A?E?LLitOPKG`C6o2 z!)9D8Qlxe;>wNh;ny#py&pj<zky@brv4C9wLg%YWINk8jzS89qjh_=qBKz6&uUxJy znbdKp+WJ;_8rD^7u+!BLIoPH+<6;}6Sb(l8J`XFy)_e#lbgsQROh)1}&AicUXM*K( zhVNv^RHd3yr)Xv$^X~%Dw{W&+H*FCa?iVnr$s>xaG+@0eg!>U6Cm^%&vgt#vXW|Xl zQ!7iJ-yE&N-a+rS<i??|P^$x3KE(8w359XLMDuV#usXbC>Q9U#v4&^rw?)eYko62Q zGd68+OY7V>iS;d9S`b^^7N%m#6J;1y4UV(U)Pfv#FU%G?^xcLIVb47e+?ZKuBJxz6 z;>NZ+JbMUNCgBp**%3lzxZ6Rm9i;i7PYMyrK08YP=|P6f2zf4(2afv<R9?iW`g9O? zX?7B;^wRBey?B(GlZgumq64{hRT`~(#@Fz1nj?O%8O}fA%EsE}tpf)+dBpZ0N{xdY z)Zy`#EJ_~;DhD41Rg<uN;li~A2h-#+l%9{9E4GO=JbO7kld;P+AL(k~Yt+LE1l~Y~ z4h?&`jK7^u=%RYE_4w!{wz@q2lx3QD`;r1lBTsHg=8<nlwbJGJph|b)fGPG_jT$*< zi_KC-zf>h|j|WpVG`ccs_b~s?@Q>md*tY(;-HesyoyArRVUl8!B@dCS*SF3gJoYp< z17S2lKQd)7E4EnOMpr_QK!!u7tCDuk-qt4zL!7KIHQP<n5pr5{h_a)U^-=%a2yKGw zBR-NjzJE&Js>F)z&e&5==#dVjEmG7di5FSROAT6>u2*c=K%QHv{vpHIPv0!lCU%$0 zlF1WRJ{^G|@Pj085g%oIv38z?5o5)gRoKOcl;bb%Lpi6B)bYEaPVJ#2r&+5`jl>m2 z*tCtKO2~BR9#OAZd`*dGsGUlr+^mdNY9fr|E^fa9pe4q*grnTlamB|Kr2H2qc<WW` z5D~`**9*^NNdge(HorFBhdcLOt6E=p{O&Qe6gIQsp>Nf~FLaB(N|$L+^vzo>!#_4c z--l)-4YYm11vwWm5-MB4&%`pZVpsQeP6r+~6BK*6_b`&_EUr06ew6OJ()%Mba0@18 zZ;7wZ)To23Rf{hTna-~-#8qGGJ9N%@l_Q!+mHgAEZ{XY@>V%^AMBAThJNpb%&*6G) zibwbE)OQ@Gc?{8+KYYIIH0P(%o#S+~AuSWzpCZn{mDticR(70Z(2wO-Oc0JDM>LZ4 zR>wK0t-CG}3@aE5RP=#Xn4(so&?<LoM};kX$uK*L_p_RIz8}}omTaGg^uN$nGVIUS zM$~J;Jtvw)x^09;wJuPBFA2BkYF+>wbw(WdtXH^Sh2p5C0@2rx!Q8W!7!Ji1QuTOT z%L(wI@+?tmIt|zVFl*-q@!426UsH}iSd{^{UIM^wlX4<^pL(Z|XfE)x9Q{)bSG1?D z1g@8L0KM{C<-Zsnflk)lKC%w;EeIa}(*rJh6aCO!?v^(N(|(wW^|NtShfXL%2mI%v z0W+D+Uq*VJ<=fZuhXQkbV(Kl{PirL7n_AX2yVh>3-F>YE3Da+3s%*13N}4gd@qY+= z^LQxR_J91o@AfF|NTH07og&+i$WA5uFlDVQld+Cvq=oE^eJ_e+%WiDbVjJ6J9lK%} z*@hWRV+`NRQg_eudOpA3KVCKEn)5o(<2=^)@jkYqQjx#kPnP<0ZXmZ(BxNUQ<N&~p zf-awha&X4x21MZ8(tsdFwa~d?ooF+V=ZNm;hMU$+Uk$g|Owl&;Q7fR7ro@SQh3Oln zi#Cb2Q5Ow>&?Us;8F_sqUucicsC_@3vzGXk&ctC*Ks^UE43>H?fW0k7@!RSh4)vP- zB6Ia^uoI1|C&zMl<b9%3Lq{~j`398I@gh!8f@|KEQzM-FfhOBjH0S+O*3ozF6yB}_ zZN3!hUgp%@fK$)X)?#C-{hJ@nH$AZ}NOte&U)Q(pO`@D|d7sYkeK^@Qqcw(4jv{1< zzD{wNx&HG0S=6=Im+%i37C#KFCH<;Tq-2*Qtrtj{T~Zg;@4|o%0%_vbdoi|e2mENa zbTP^23qQ%g#6alLO4CE81Y5kY+%yW}ckiqCvUK%W%T%e6$2pE#+;$u>sE)GVG@XC8 zD(<1Ep853F?1lZ{QcvY8(g>d01x;nZHeLQF4wuL~ra(2~2!@{~0P!GeZDUsyf;<)w z@W&@hO=+UiLO+o=ZWla-v_7O|;ICPZ(%{Sc#_ai9!niTtyfc6;w(?xHlyMw+aYPk; z7{0sd>f{!QuY}s0gSFwKen06eoGqg+#)yUZ94flGHb8SG<A)*2QZ91%a^t)o;}Uj- z^Oh>ww-=owy|Gbrk<#fj6-9WNB^8o&D`xf!F)4Dg;G@%zTFQqGq3Z=JtWk1OEiQ04 z=I(_qmrwPFX(5~Bc-!j548hF0VHc8JTV1zNs{N`>Z0i`6Gmfx&A+0^D@B^(XGi9KR z_JtC`bFpN`>NF81su8(4v<cHrioLXP#?Uu!e~Iriz-#6h$VeZ$fL*yM@7Q^_)X@}7 z4MPMmfroTGqU>0`7jlK;iDf4li>j3(+E+8QhO#O5d0skjmHMQWSKGj;nSpyBR<pYH zjB#XW1L>8Q_LpN>(#q72CVM}P%2)%^&KOSE%}BHTcYW-iS7zNoKlsF)c-5r<9k7$b zOFm9mJ$t$CsxlDq`M6q_pOdy~gWTB30Ja~5dmjNZG8YPR?w)BM6uQy0H)`egBZutS zZr5#~xno;`@YwH7!YrT_=T@7+AbcX@?Df%5?h5>^rTpXLNt&uI;ee>GB<y_QaYF6V z`Ep8&eK_sW7a-qV_=+^*&0j0J9D%1p2o_e6fD?DDg6f8V27%PBs42t6RIk&mp<0&1 z02(a2z#<LPZJ2gagKUqa-26gtZqn<S(-OqDGP369=^NtZp~B2PR(}Ecz@_h;f@Y{{ zxA-M6RXIn82^`z{(5$o0t(r@9DA@q)p%_W<|7vy4%jukUI9V<(@#PX#vAC;d=8HlI zfg1+;aRvV~S};4|<x;xC&(lEqe(O`$Bkfl=Vqf1rDZVlFH4-QosKO(qs{*FZj$K=g z31Y+8d<XyWKatB-u!Lsv4_4CE!Zoz|QSwdvSI7ikx_ep>8`N!~0Vp9vKa&r1n1n%a zj4;WuK&cT)8ujSq76ZZ{*BoQQBt2x<p1Bx=JBul%0`A03KbV;UfLMNt>3XUd(JxY> zUC8u00_t7jK&zLM+2n~=p{ylyVX$*%E>nS-fCliYC6!{*+9ue1J}S`wXg_6?n+J=# zd}<`d1Hym<dFJz`m22~@bQurDV|=v&x(U)#+eq@YbboLao?i=Pui!nlu}RoUwOFJ% zOA|dasj2N6Y1GmDUbsOOb*nL($Jw+_>4AAmjKD`qk3oa@E1i6odNzpwpqf1il-+UO zH@2|yL>tvs10XT@=*kJ=N#4WTZE#|dz>>_4eP01gU(LuEAJBAA)3w#6;LmTVy;Hky zx%Vmw<+IdsWUK6bJ_ynw2+kG3y0snUVuzjUy(%GMa1JWRvIoy{@i>QME1USuof`hg zy;snMMBBFb5Rnl+R&#PW#1#u3@cf}SIo^uobXu`?mkZyA@0EIBrkyM@5+6YVC$WHJ zPH+Sr`PH9yOMHKTT~9QDV(oeJ!;!GI=zGb6H+X=&*as(<jQQzpaL0^~bY<8X8J-EC z>$JrBQ*lWYL5r*k(-Ts}hniSu07Ym64R9pm!Lsi+PZ>WWHnqm%+t`U${CiH<@(KIk zu2|J=!38b~<UjSAc&j)IP@&i#0EjJC2g@N{mD@$n5b{h6KnG+Q;*>#edAX2zbeF{E zf#?=mPO{O)byT4E=kgJC@;MZQXTdGcwe4tn6c4H<V?wTy@hyF^!uz#4Lu~){dwm7) zn>BpGNZb|ZRC<l-7A`;~ickcqI6j%`-D?jtJkzz4OC4!b*?v<zP`~8OQ6LFHP~rQ{ z19i%J>p1GpNlA#fT+)>$Q|nI?4V2@Ign`^e<Q1~13v|}_N5W+7_kymUT@h2PN(f>y zJoFa}#FeHkki?I5Q8QZLP0b+y0Fq&rSyf%c=mDzUcb~T-lOirML`+xBONb)J{dm^$ zYCG*hMJJec&!o0p$$%G~bwtL&x=lqb{c(#)2I9TJeh(M38uAzO+PX21^C!=9gmL4G zT4EpZuGuBX)?L4%ThSyvz;c>Fv%$p8M<B0MJQl6GmmxpFy!%j9_US_JBVmJ5IYuHQ z_^d#<REJdot+VV1ji-4;X10*_08c%xVIc-*&gmSw^NeP-u><%31hW_gu_-t{>BS>| z2KL1YZd_3gShLsP@5wn>TTlmIGd!A9c$%41qMD>9K3(K7iHCadDYBj>xPR&qWqe?K zziJy(bWdpKY41P&MLpX)9!Yy}h0B)*OUy&ul5#>`8I>Bj>~ieeIt8&?mwn<dC3fqf zhEqn`p1<=tKgagxy((1q{zt|FM3!}Y&93P#I8?o4%I_tg&r($gU5n~fT$MIG20wRm z=W7OAfv=fAKbEmB!DT`LN`S)$$<I$=G&}CzPwQ7BK-i;Pdj3}1xk6%MBE9hhRal%r zx?4#bvVR9jw)+#{j(Q~uLJV3eycF`g6&H3vva2!B_wnDmo7xWCd(vjI^%>>1UuVCA zN?|?<zyzh%PddE0LFw`@vYOjjmzV$FAlkQKp%O96g5Q{(t$%v8$v$nS0d}sN;v2hg zQvET!^S3C*v;i=%O&H4Lpm@{nigy|b#jY_gXM>={Jf2U8G@}dqG~@oMJvO4o5v05e z&z1((@Cj{Vd%u1g7xEjZr?e^g)ekj%7|uC}W!bx~wDY*X_Bh_Zm)CQ^L&U7ewDQNo zX0p>%g3Nz({P@pEe1)QX<_rfuBwi7m4^PWPUc9pN9{ZF1$-K1VnM?rv-hb@i7Ak&0 z?5iT`+;!d3duAE?j^BSK{5ipIiVNVk3)}joWs{Kq<CnOAUkc||i`>N+DmAh3Ls6T9 z7jBR_{|D4;Mq)9Oi=o~!>MGo~RrK}IDMA%RC7*lPCH@d~#<3ZkacgU>uQu5pJOiam zfG~~!qi4%}|0t5~DB#^)W(-v)Z<zV;+)dEm70P!ad*&kvU&!|QUVh15^+Jh~&Q&Ru z>vMHOrO-i4DdN2{X0}W;zkP0&LE>;}KKJ_wnJ?~9qz~ZU%;_{8*U*g-kDB^@kS_pG zncYYzF40&(ElfoFG}eT;+=85sUlq--%^GWRtr$}~A3ai6DpeApdi4+Nmy)Q&Vuu__ zeIPk}531&CM#8(gnVT!((rrg}065v(&(%(^98b9$lwweaU$t8iwfD=W8^yZ2R*gX- z_JRL>8X&DUOz?a?8UQ@Q25|!5$DJeO2f%ys_Q$(OD5+dO6M9KwjyXNIE8Kl0!s~$D zQY%Cf|NA{m01L+?Y$11AqtWf9>FyK!KLP$pn%kGb|M375p+AwMTg`YXwBJphcb@`) zy1wx@W4w-ro5ibkVfxjpMsLs0&v302^ZzN5N+=`C+uEhyzNs=v5ZiWInVz(MOb87< z6H9Qhc>wAMAd0a7r0S{TgYt6<SIpw_jYp&rHFWbX+wJ{ebvAgYmQ8P8G5%vcAHV(C z!n5^`U){FQYIf-#lsg#Hv2a>hMUu|gY@MzM+uH7v_?j#V4R-bx_V`Rg+f|p}CN|Ot zRcKyqNRBfo@O*5CXC1okI@mWGK$zsqYTmFL6Q*yDiy>&;k~Xu?Ina&X7uk1J!z()T zU44|OIr@6RppV*2R+DU5!nB7*axW&2k$Tp{JN13(m-0ZPGey5o0r-QBWTcu;E_a1l z8hP+02vNaHW0#zqgl%LrYmwfM)KS0)S^z@jh`V=qC75|fLRFaW>Y?mQJ>$45=yIoT zr>S*WxYCYfB-fhsQOy>9-nFbIR}B%qW=^TtIGFe<(0SrRydkYW?D8i9%obvcR0Z{M z-7XCKp|!b{5qC7clvJ`7Uk1g|zuhjGEY7WH?$0ntoG)IfSTij=pWoL`6MFoo?tA}H ziRXvoWF>uY`rJG#O5SwY{emoPR0x5jVsc|A4&C3FC9hAKKQNPSdSTC#xuZxgw<@iG z&{+mW67sVKt*+w%<!Nus;cH$z#oa1pLsAL_HY2{PjAg4!geu{olPE}Q?lruGSDN70 zd4vhRk71hLXK&-(S5{V#w_!7ncL9LDmxKdrKL7LYoha>4Qusa}?7Zn)OL4V`B$z{< z!x)SkXAhFas@6pVt?gNd1{i*W7V}((3Tl_2HdNw<L7mq?c9f}&ix-(f?#1n!$hE4W zyTDo%_>7Vd)QKLMvLoh7$k5))PnDp`#zdR!Hac8W{bw}b?bp+Io92<i-9a2=ui}0S zD6gwwefdp)s8>7R%uN6u_ig4~Xp192>GOUice;;Kl7VH|=Rzu;n&YSuLsCQd?YE#r z67of#&;6vd82{EhfHktlIzfZ8eLG~0(8?$e$07x@w9VO=Q-VSKaPReFh_#yi<2lcf z!`1E;&2g#4xzDS}!OA=dB&0>h+;{tn*rEEY(*)@afjb|bjYZUqjbycqFiPiAhef^9 zN1`OM<p_zjbQ?ISySNs*rloji3a#TODl6NkPWEDo2HqvjNKYmAL*ImHAM2>$D?K3v zK@`C~J+5p8DBG6K{-h7{yDC5<vQ;yNs&=Htg%@2{k#qk_L#u!wPI7*gTCI3-nl9Nf z!jB*E@i-L(8=AoM*#|=7a6)2#ijh~8zfk8$3-Wy6MkGPYy}7YH;!=f9MN3M!NK%N% zy4qy>-3v|)mGre%@?c!X3ae-Yh$~)F)O$$f#ev(cPJ2syHv=GM4-0~E-ulHQd#sMN z?TeZ)NKGG~_kvg?4~s?vfJC*FDS>XqP*$!RYZhVRxoIF$tgGPa{$bW$cfZ<qkBt(l zEr)$!vjP{fz5)fra(z_pDUW@X<pYPwC5puY7uM$OgbSbgtQ9e}uO>_TNJwI2P$@48 z7@UiTnSNhkMvIalAk>iaxgI)lWaFiZM?%VGQGXj@6EC+53b#ZEb7RMZMWOf>Pl6n) z#zI7QdJC&Y<{h;MYZC?wL?sj@Q-!ptaI~@?z)k*mXt>S=(H@LtkOw>9h?#ijH(Una zGQ3bVc+TNOUaT7?d9A)Sr()cUir!jzYqiZhn4aYBC=A=GhC#qyShuLWa^e79=uj$f zqg{BgE8kP4hu7pR_f>Kl(E!LVd{x#|muoeLzMK$t4L`AA=N(=L9FJKzRS0NG_!mL# z6}x*pA>dfTgoIuDvtnn;(Zt1l+NZ&yBLc;fLl?)~GaF`WF}JKKBN`?$8<BHk#b#+- zT=C|tbH@ixIN{|%)HUBLHmMRpF_%4BlUIj(@Rzy^`|q;f20v7D?>kp=d+>X1I`VB+ z4VU@)Lo{*0FLop;?u#JD<RR)RUL}~0zhY$!RQs<8mKTVo&0{%SbR6w(MYLz1Pc?GU zG3y8ql(gMQai4MN33Lt`%y%*EcAxjoTqP#(Wkb;*M0?Ge)l}Q}0T^f_R_O}#HkTuP zPhG}_mv7jrSvkX1?6xnWF>e(rs?sKFB|cs@@?n7!M?)@fnAyy8*jroEy<}EC8k%r8 z@hN^Ul9Lt5%G00fA;zirJ!>oSowc!@al<!b50nR+A+4{xJf^2tG7e2H6@2+PJ?On} zK^h3pQT0|(+Ior?Z<Sj0cL&cyK+l!yO_plHF!@y^Ko5thl%F14``BI-WFR~Vq83gP z`Kb|GHXoA)Q>|!uY?iJGPj=d;(eY0&{F9*2E_iwiE^M{m6rlbk&Q$VX^?CK^X9$K5 zFlbjuoTH5PC6_mlM4!3KH2=f@Vu%o@50jYAz2=MyX$@_Cx!}_J-0GGo2*EFMvRIEw zlW@Kg^D^zZ_Tdc0SW&O0JsLlP$+zm(SlpQ#EI~KEAd@JyveEcb3h7{<SITq7O5w?a z^oq$`4|}s`QZwE>*K~$bz;8lLzUo2O2Fu;1uR6rjE^sGdZe3DKZ_4E28<r__^b1Fj zZ9bgtT<t|?>4Z&$dkb?I`pmMhEE!+AgH8ZXCG#oZYAu#CL%RzeK*ymM-h>XkJI@mM z>~`!F48*CM^dR@USbl+zeEm56L?VZT0tIbvGY=GkKDnEzaij57Cx$iMPS0gdoJcu| zk6Pc@OXRDs4mt|(n4yO(GB@mxxus!z$ZIRJSwa)tvU_@C2wwWxTTIBRTwOWIb$H*@ zn$7~g5J$N#5IX&lYHO8%;T(ExMlHhLx-3iyU*%X8Q#$)*zQoPGHmRi^ytik;1G=UA z6d%COonGj((Jy?bf|mk#FR!ORT^2+VDmMr6ODyDu;We<DpO*hNDFQy)yGwgaGOA-4 zvUr97w#g~>2+;0y#J*28Dk5JrSnC+m>ko$4orYXUtVr`WY5ZfpF~f2&$W85K8fVbI z5TB70R+W??d)wN$OIY8(A!=eo*1n|#lSAxGCW0JRht4jGM+P~gUxlyZwG}b8>ob~U zvCj%8GVXII_@|F%rQr2KNn22}1<cvS(P{@!hf5=V1jdUN^bc$99iCtEB-;BGAr2EB z`-BlH?ZR|ED2A6FRirBhSGvSaXX0<d(ol|%J>iX?$?O%M1c>E4cq%9}9o><i+O34D zR`!t(zFcufPU{Ju_1ek!=D|INs4eW-=YwuGO$S#9S2?|FzwMFva=-@#f9rm<o6Q=U z-IP;>syQsZgaA1vy<2UlSmiAQ8Rg{Po;;hFUuX!=Hg6gu-pr{c+J@N}Zg#B#$-=1< z_~pw<VAa{X;+(3V0}+jG7-9Q}oP!mPi*JGLkL$*lx>q(KpzSX>DW7ZpxI4(*yYrJ8 z0b*(JT>cA3DGXL|HQ1|M^*oJF&v$<8Z3vmD$nEDGV7`9f_V{fT&)~;+WFG*q?*7sv zw9<I7)^~MnpGCgwIz&QQYJTtsysWd#$C)iy$4IFv1Mi)_nY7_1F*teHh-w<du;4gJ zzB()WT_)|7E=N=Oyw>ukAAZVRQ;rzv{R_r#YYGLiCnt!dxl>TSy^fR@Zk9DCe3u7} ziL&M4N$!_sLWZVXh<@cOycQ=X&f#rTeJ;LNuwg#wHgM{))AP!-lQ)Baq|B*NBs&J8 z{5&v<Xqd#|zW^M!uja@BcUfOa20tpTK`|b;QA0s%U;5`dSVH#F7s(k%Aa~UGKN}d- zSlZ)k1P#@cOYyMq-#$07<nsKqD+X<`p~`F3VEo(bUzXjK=1UA7titsx&Km%UBjs7K zLta~hv%OpIL5HEK*{ru&=7~O@aXf3ayNH=|4|xTg=R?#mL^38?N+*Ehp*`K4=Sp{z zbY!HIp2zxGwU^$O-8qUnM<-Fyx?JP4Zz@FfjW1c};BOk$1xz|PQIhcQwaCNs)W%nz z<a?X#DtzMP%e7T&0KB|!fpCOwy|?A4l`U%cg;nQ0r;`4P&{7>#;6sBGW9hfD4xk%T zV=iBA7&8`ST76+Df83^kp@!mX?3_%Xc5F_JlQhekm^4PG1FCjo8R@fy#Sunt`SE@S ze_;X6+fYN+jNAT<hm3dR>d}a=Ab^c8L`e$9!FkP;BU+M0Yqd6L-7b?a%+gNK<|A5h zP_Ou!#OARffLT=Z{^wF*l&7a1H(&7(KBMN~ix0_ZUo<1%T+6EskA1Ge&i1m!*n%~> zFs$I=kS&)AJ2bo8H_IX5lunBa@EJf6<2kS>y8+2UI_Xu#5`IQ#EpltnMfa`Kn%Vf0 z;g{^{{ebTFs+)-@`8>h*a?^G?a+02lXo_Ofu*`%JvFS+<IY+yG<t_NJq%f)`9K>?5 zV~<9`XGr&lX>k4!QkNj9hN8YY7@qhrpkxDlK*I^9U1IS|Ec&jM+4~s`b{1^h77h7> zR{P10<1l$xV^ryKY*jy%60C+l3PMMXXSERtest6@PS}DUHGGou7ofw?Led%<c267f z<z#E8IJCt!ma=v}4Z4}MAOip*tvcw;0!dI*;5_V@0pxN>r?D(UeJH-O;?1}Ap$!S5 zfW6Z?;}h{tS3U^Y|FS7RARA(p#WLMfv#=T%P+3<mZ`TvcKha^9(CQ5*8z9<7xawd+ z*b=Um#5M!YH#RaW=&RU+WWb~sfDiUW&k;blgs~WzmK3uVLqgMj5F%4m1EV##<*~!A zSlDnCYRa`Nu&xxb{TbGNU@pD*rKF>`ihdVW7;Te$Wu)b3;=35*54Y<^pIwO`<=s51 z;Vevfg}uGueoABEt!XECG6rC{=Tw-JJjWEh%FBxy?h_dOq7<UZ5$lH}6h*zieVAE| z?ZvpbV6f~p-0`5-S9)AeF3B_y?2ql6Pa~D`eF_nUNVeDnwbdgF!|EP8iXBxYzA7aL zfuA#|Lj_iGxr|XZP-B(5gFT_d2&^N4hZ|;qD&}MWTp_+YMo_go|AF6^ax^h1Fr)4Q zHRW7{TD!+bjsqSA6^isYZQTWFv%wpp6m@b`r&v>^VAaVS!>8qmRYx6SuRR)`y2Ns^ zWyC#f&d1;qAJFNOfqCe>d1CT&-9AP$6r6u_wU^7PF?(R?I%<fcI}eYHFEwGb4yIq# zogak8x|inq^|X$&{p)Mq<JNMmD2AeEm^8qEqj^H%gG))v(sm2L=^)u$^OpxuUJ=c4 zkE_2`5GL(LdCBY5He{2LqsI|H9HMabHW>%pO|QoR-uuBE^ypO<Y;8H`X0J+g6JAHF z6{S{CPZnz%n0x!~@$5nC?DqNf!eY7GQm1l*hNtRkL@q&B23HCn65BB0BZY;Ak7eg| zOPwKPHB{h==^>8ZOgA~jV?SMbgK(;YJs%v35RX7uO1srHz3_hb0ZGyq_XCP^o{r0Y z#||nErF>hvp`#;ra;2dyfu!=(QDKUbx-p@1q_9O@$9zKKjxq=#1}<8($i2A!(J=Z> z!})6NVtIl3{A(<CitBy3*oDd59k%d<YW#SuoL-G+@_{Yc!=?nq!h5Da*CCGO3_*cB z6K=$AEE&nwJ%Z$N({`sj$RTWQAKFcCZf8DbcV$uh2cXATPTU(9D6z)FBATJkhYIYc z3=GNCFP`0jDdYS%eo7!^nhH-US}!+Wg{uX!hRO!28qWy<S;(8xJ^B#|HY&w8uTY1w zE<)(>Qu__2J!)6qmL>WMMgB*i@GFi3mK$*}t3&gzH%t@fftE~S)BCQCoBKNn(cbBC z^NDT&HWq#<&bV_t8(<GANfK4V3d?vX8KU?rgS?%@n&#S3q?ZA(i^^V!!~2VY-etRp zBg3b-IFgTEGI$#J&~Qf6b+5C>KJf`fiC~bObEjem(-aE*I|&B3S<|Zfi&Z=X>2BvD z2`>xAGeX2UQUH!_mJW!=jJIP~PR->A8oqUq6h9%U?H&uHu0%&wx^2(+{SNB3H&StD zBMrbnGQr&8WUSiVUrad5K(-iuhLurLc~2x!>yH=kx3J!k<)*&@oCn|KowCYS67#~I zB5r)C;D1}+M8WPrx8#$s8zqxlr5lHanV!JwtK&xm9c^F#W{us+_kPvgwK3jNgd?mC zlPW(`F_YjQ%jI)Dlz#`F_%|{OnJ?Xc=rqKwW#ka4A6Gr(C1W$-Wl}s>^T4cT8Ddhi zd`^aTYNR7BI&QjL_lz)Dt3!tR4~TZ^%!zr3`Yman-}W8wo0ge&O}x|=J=Miju9G|Y zoc(G3Q+v_DKpQY-*a2wN4gZg=yXCv<X4UXu<%F<$waZ>VdivyKELwy5vN54NJ1I{( z8~4azrhpkywgjH3gMX-lS7YqWCr0w;@W7ezV6iubF6<xVbBeSC3aG%6O1GPL#~iv9 z&&2%S-wIN91e0}Dqh{T@UVJ)=uq7b}=yTyc6BU~)d_c<~3FWswJDJneJ)0MqLL=~! zBY=;%Fm6G^X;Kw(&{!<iXtJo(YHqe&#%?r08pw%<11UzkPq!HR_PEra`;RS>+ub5t zb#k~+UQ=eEySo`madmB@3Uw_4<VOgj6H<NSTT{=Ut&ZwkA-DL`34yrOLF2twQH0D- z5qr1q$9a3d7f6*?xG?seh{69Z(9O<3mgsC6-}*B<^igSr{efzLU1~06G!V7!gmA!d z4wTqM%x$cnjy0J!x`6Vbm%y+D!WMkV?ah2T1jq?Ne@4$q#KsXaiOo!BH8wnmJ&E+D z$ucZMg0?o{)?!V?kUN)i;DH-r+Y=|gp4}2}=3c0nm|EMP+<HnF$w=NRvw=dZJ`dFT zYSW(U;UH>v{$9&#g6*21qx%64++==<heoTwh=Zt`ox?nMS|>n2@YntsVDm`SWXH9p zrzie6=)d;A$L(ZKQmH`8A*&*&nmQNNRKBm15E}yW`+n5K`(8-iTFXi?IlZD~aF2Vn ziJ^s8ZDo!zstNeJUtOmRGBdBw#Sa;sGL`Bv(=DCsWu%xIvo&6a30+wM6;YIboL&=M z*82u}=+2w^Nmz{99YRQurpJt{{`+CtaQWQqqz(oJZ&x}T?Y>W@g9WrDQMaD|4U+l) z7R*^54de^?MJTm7t%(#D)p=Qqd@EF~i@x7vh4N+*Jl`vvfs#W_LD3o=w*)v-U1}e& z3l3+(<4tLt>QrOobLGl6%NLJy=Ra2-IX&vntQSmP_8qdOx<gG*HEW~^G%#eFc#YN) z|5<66F!vS?7r(Tvk!FFUJ)L2jyixS(Pj&aie@60aFf&fph*%2)(O#sF345>3#SDe@ z<duUICwe(7|3>DV9tGHwO~^xYEDea_0`AYl3n9<jM)X=ovE(};S5Sl>O}?GJ@8?E6 z(rYM<YqFcABZp6KLaH$hcvKVbSy;VSxQwIo0-IGMV7OmpGK2Qfnx_+(aqlYHqhBBQ z_^%pt#!&I;+!x79Gh?BW|0zO$F}tSkIEblua1^2L6jjj!+MIa6Bgs|JEc*61vMMGN zcb!lv*k#Z2_1Rs)>$0q;e?*mDrB!gqe<*q4pdSCtJ+$Pxd;Tewi&)A_a-Qt`)nwoH z#O&IS{VG-+GU9%r`>cR+A28a88*9Ss>L>p3oY;Z?&=X=p`OS-YE^ZLIGAcRHZ37=j z`267b=qyUUO@?z)2-j@xM2={>GfWWoxKph1xg6+fxxD}vg%9K87P1}$4JrnMBAPM= zxb|L)*y03w;y(r0C>P0&r@seW?Bvm29cH!;S}<I-$9O?eupt59OyUlRxU+873Sqms zT1+@J3S?SGmM?$umX1e&_Q(oglg|v^e}kCWBNIjFgxplzi>{%hEp7EA`>z59weWMh znB%?MI~DU^H9)bQgGbLGfZ}U2aC;Qo%16>M8MB)`3LaIbPoB3(M)3j&X<FOXC9&;r z=`OnV!%(xM_PmN8AJ=F0)}X=C%S%N!Pw>qS=P|-&>>t+<oUvoL{qxGtJs9*B$Y*{a z<%9w*M9A?oJpZwef9)~Y_1x&a6qG#rWm(7?ClEw%HKY49k}bR5CG-et99jT>beZ?h zw*(OOTtC?(+P8J_)=U&QVdA88i(Jm}vF|^DK3LGA7s6(25}qyi{L5Y8hXO`V*C)4b zgj`cT#>sCL822G0YUC|HnqLuC#dc%M=Ds@tcq%p0UjlInq7I>d|62+Gj08a33DBC` z#Mp1C$`FvpKF8!SVmJtYz$2iOaJepjy(1W;xYD)wciMsRVL}<o2lCH__4o3IcN7_r zagy~xSnQ9bDUF4g^~pl{C|=cZSE2H{D~V~)%dzWUu4_yrVHhS8^~lC!Tgt2j7*~`= zwT)}|dQUjuza};*u{T#+@Ml8erk!m3xU|SKhyLNgRt)nQ-ixQ6)r9MyGoFqNpitkO z5st<656BkrpLvN7^}^j&erEc%9ojZ`pMjblsa+@pbVlPpwqMMXnP4s&bGzU)dzzaF zs^(cng(FH{8#fOA&>akizTDeMpih>i=D&Q3ycW;J>?8Gam<7@e@Sgdv0>qIxZ^_oD z4;Ig;w8^;qIdd%1qxRNK^mb+*gurQ$Ic&<Ztewg6X4eY}9~OTr!c$p1ITys*TSl{O zybll+9Yy*Bziu(<`C9;_7hBt~?*tR*50?mFTae#RE?{lp$8V`9R*li?8m5mxXx~b^ z^FSE|h?e(g)KCY`=bWe|y$I7Nxntq9TE|s*6sgA6Y7zCK^rYc|D8NG-O*T2B@~nc} zvLn&ukEi?B%)XESq9EX!0j>uBUs|yQ-BD+0_^@9@GrLOEjr8xFe;(2Q@7nfhIN2ch zEaFqW>i!+57uo)?>oix~RQZu&SJj%-VxMPw|I4X5RPI6`=)209>6#Yn>YCR4a;u(( zgOAjO0x^)R@v$SLPhZN|b^Pf&7xx{Q?@!;hsPjJfQl5y@eu9esguE-)Rd?Pzs~+Vb z@VQ@1YUk8jlw6)d8oY#>R}@e_{V$Pc)P*8<e6ii1_ZHb61Ty2^m;924C<5|wjIPgA z(@|u~F0H4(A^SU>GKuXpP;ogzLf$HkIjnMv$70tJb=Y!5ADfk1UIj)m?T20XG#(}M z=TNh0*8RoL-Q`y8c6J;X_eNXnINBixe{UeuKoi>wC|*avaZz=0pif>(M}D~XCv)`^ z|8?e5CX%J5<-e9#TzWEUV&m#D!I3k95U%}Od-IA4Xj4{nkj;fCzYCv?#SQ-ydd6p^ zsH-<}ZA!Mh`z?A`fbyVOi4=0tn#%>CZxnk8DE*M(`qfq)Fyr2*9Wd7~O-W<tFSdP9 z=CEC@0Xn(%<#0`o1mS*2*a1`x9^0e}<=oIJed|`vl3KLuu@~w^;IR#SdL$PKqqVVA z7;hKx@PLU{I#t$p?N5hs)K!iYCw;?~@U*(5>H9*q4Qa>s8tiuEcvrGGEZH}ZCm|K8 zv&DhbtRut}w9a&>F}UbY+FoE+gY(!;g_E~LAp#U}=Hq<4eQM<R#?`Lp16GBk_-%JI zuP#CnM6Z~OikqyAdcAeG=ef*=aKH!;0}RZ>*U8zBQ)8o<gNl`-i^R*B)x^!)PvHOX zH(g^dV&~-pi)+I9Va@lN8k@@#@s0B0H$ywQ0a%PE{N#|RG;R6WKEeOcqy)QH%}K9& zi??kiT@58VaDhWwF{yYyGAQ_<H1wXwc!{XnKS2=1VCraDwQ2!EeZkRfc)vO-VjWv{ z3AO%05gVuer|)^?%#2LsgSK0Xh3uE8VBsN`9->Pd(V>HlqjCTK!B7A9F7b!>hZIy^ zcdBEIRt-%L^GdjPT}Dq;IGyx`0+r#ki}nGAt+rcoNlgUi6UBv<Svf;=Q@6JfRZQ5@ zu-B7fI|0ssPn;mcZRZe>Ub7pZjOSv^R~p6FkH2*qO!p$X2#HT&NnSF3CGVo0pa0#u zy&Q)`>A{|cjNj4RwtYV<`D(m6iW@&+h?=Drt0J}q(`>6U0|+JmVCYBWn(hDLzoO(2 zKDl`eB1h_kbju?JDp4Bya1@c9WbY8$s|QVwe1Oo8D!q(-cK2*j7q2g+yKwJ(aBG%U zx6)#hTUF=cMp0$KD<7{%?A^F68U$y->w}9`3^?sO5Lu+=<zHfGMqcC<@ynD)eSY^p zeBF!1LI8tBg?*&^+aqmd*F03G5{ui$wjdOM476U%TDlk@ZW;QgZfUW8#jasd&M&%s zfwpX!B4BTn1>y*=*&^Ohj}*@kHNN`}=9+~P!r#!0oKTVgi3|}UYT9_1`fm8GVcmf) zg)?mTy+ZI@dM_zIJ%zkYV+prYWxDcv)Vq47$8SC58{DX@i9@~TA+h|;leu)`61A{4 z<9mXN?<4>CfFFj+uNMxJlmhrv5o>jh#opfXf!Dp62q4&N=tHY$BUHp3z^alkzWEqs z$VXqNO-gEiR3frHFhJpAUq{{hgZK*WS}AN+RF%0YU(}o2<wcA~l<1iYasH{3@4XV= z)2>ODP({>URUT;CF10=47`r;(Y}GI(Td^qgFe*JMx<;1P>?Uunfo#l`zIOY&p(p-k zv>g^!qIimkt$KRUrCKzp>D=eRIAG!f?ty;TbO*oP&}>~_ikaGmI|wz5M)GK+A%|H< zvRf8>feQ=E!(CWqxM-~v$oRsWz)Q#<x=}X)ItT^YoxgZzI$V5P2;VZF$%}Edso}Qo zs=gUbwJk@EfZJGbL=ZPmQ^q_tNsS@lPRl=}IR|+PYskShWJ35I7ghI6QAkNrsJLhw z)9$@qzO*Mv!e;3QQ8hVPS@o?)ZF`&o$;v3WI>#Co8~DdHiU1XwJlRTTE?-aU#p*8r z{>qE-!;A8yXU)z=Z}2x?9RQMot|F$yP2A|vrZGI`P!&bA4VJeMTl3W*`~BI_-0Js( zVw_?Y9ucpHxZ1OYabCVZijHu?a1xHg-<Hm{B{_X}45)6d@-`Y?Di)Og#`2+wwe*W< zpEgHD`{DNYr1AS+N0>8HL*AzDSE+D)3vcc6mX?qttJDWIM{^y|)}2BK@e=Ra-n90S z&wfeGshEg?i?{Y)t>8a&s964stfu?QDfIbMgC`x&!?GoWC$1S2_j0}7$d)6;e_KOb zc&#ANK+z`4X2{>oM%sP`DC@8dbSUb_x!z6Iqr9yyV)3QC7v$PVKdDky;%Zj@AXxFs z`Kn4?vkeA07K2czm}uDS$OZXLqe~J&ij@A&#~<P3A^7T?7P;S?!Mxbjan<Vc&)>m2 zbHv}gP3DIR_IiwH!wtZvS#>M}3aIW;-(MH+i6hXh-Da<&C;KPhtw*>LLX@f#L87bY zM5#h7bLLKS&IL2LRdMNZYXO_l=brAo@uNuVmUv;QC@FmqVr6u);H#+hBQy@}tw7R) z@zP3bTT|PdJ;t0}LgL^Z9;8<w(QDX}m0W9}lSdx9V24U)=U_|V0t~gznWCaIBU}v3 zM)WX)&{`JGz--=XZ`eq05j5FPn<Y;Wb(=qxz4Y%kk7#9&rKO%9iwm^uJO54)Czak_ zV%aXZqGB!bai3Ki+io@F<74(~%ddyzG~g>Xsa&=6x}ay;WTt`D_%HoV4T3OIRC2h2 zh?-MvwjFAC^KD9WBH=Q}$gl;kAIvr<{^|YqAiRX_Q3-6VOU_V*o*@&hu2w;y#aj?- z#x#Gidzk(rMUEdEqD=<U8g0oQ7EwSxxJM4$-54<&%EjCk0H8H>)yc7fh0%Viu=HrZ zrTI-$#Co*c#=9(TqfcEfWUJWg8;yR^h4m*wO~d_2&S=N^82L;PVioNBIL;;+H*K<a z=m#-c+&1*LPRJ7f3Jhg3nO-BZu}^KESwQip>J%f#vjxBr31EIC(IO9)Nn%Up77xsc zF4RcYzz~;kehdKw%&=oPyrJL8M$@oDfIVYgqt3ep*<IF9Yqz1yczBDLM+M<ZF!Q3{ z&qdG)<(DVy(>BbMuilk%MVk7K6yi6=J06A_Gv-DM)~s4e*aQK$HyZGSqgCfhU-(AP zR<G8mA*p_Tm-(?{zVzB7d(nrh4r?Hn4v=ZasNp;{CQ3Q|rQJ~Ww8Qd8smpx|YZeo| zzUAH+f!>nU_r!CtO?C13C`ZzrxC>gfhYE*7`gbsdz)$t|zfeBBtv?qoez{>2D2NTo zH=N=PfnWm$Q8ho6JH9lQ3k*nI9_SM+-;0~+p+dcsmRa3xiR}tl4?M0vj1RkVMxe0y zq{V>Dyw?T(G%wW-jAzRl{x3x1PwPvFL>uIS#_Wd1KxRdJ&fwwtQ=sFcioOsLPszHF zs%&#y<D#t$y)~ls%arFCv$CJ%5G+-6GezD{LYdxfr;C7^q3ry6D*3xtlhRW#1FL~V z$x*Qn(}3gWp^3`no@j^pW)H6ya-|=eG#XhuaAY4X7CzuM7Q0y>fz{U_D~lK{@HlC@ z%>w6>b!u4krWdV*@0-wbpWYI(Z@bRGLQirTb%@;NVmFx>ZKRo&xPeN!eNmy>Hg2W# z(<4Q^{(*)b7OUSrDUcPVo%)W}TOD0IEt64hC?1Z$a^vA|%Rv~51s3x}pL8Rw6}IUv z_^35@oJn3Z4D-R|4vG|AWfoN*P0)NFig9(R?$;YWoiSRAJ&#STU}Q|omRH;uXZV3j zjumz<q`F-~kAED|T31%`6iftz&tc~WFza*O7yPe|hO6R<(La(pjSJm)5mHp5UMp6h zOTn=E9bf$+B0#+O9`K||Z$S7@-vV{l>5!PsvCRkw?Nh{6R)T#6c8Rnuzgg8mu_LgY zI5_GPvB+jA6F*?^&w8<PvmiRZsoCd9S;Jt)+jkQVmnPh#5S<&!uW*(yw~~<>DvodB zbLH={IzOOD)X6!h8rjO!h;Pu4*`I|kKt^T-{GXi8tyZ4;Jb3);ssbHU07{Q2@}M{4 z9unWifmj?9pNVnRljOiw4;8IKNqJ4I8ekR_WZyp0<{TzEpF?pb_H(TNgrs8Yq-Qx7 zO_i3r`B;x4`$&C7-bL>78D7;mPxU9cb%uTq?Jm@eXfG=V+tZvvT;*Ejt8Jay?__Sq zx+u{=ZQ@f0Pwobc#zNZ*y{^uqZ=vQ3b*QjJ-p?)=J1ro~Gt@pMMQYtk>}(<&x1Qv# zlq9+vlCrhPmbvGPo9~B?Ns4`C0)Clt5o>n99~hYXA_X7=+WWaUvQ4}meyJo^vMWFI zv60ejZD()%OVdE}Y=c1FsXeF>-=m6r-yRhG!{|$Y*#Asndm;Y&050-y5Z7~+uj8@{ zv(9LXc>||8s8b&)I)k=)DUDH6_O5bOAPTTW=@7YDZG|*qa^Xg*;Ho!<p|a?bENNV1 z6K)%Y|Hif&!2}*_Gf4-|nQDQuyWZmnpP{pMJ62>glqT1XTzrz-al+_?TX4OIL}RW* zr`vgVLv+W}!lDta5ab1w<KKRZvDnuzAj5<5IhN5JgHIjffcCMUAk45M1)}Yis-OW6 zN6cQrtr6*OJMxCW8xnVO*5VHiNC}?ydviVX0Jx$gO)t%kq5Hgb-&Ao9_ZTX+tbL9x z-$@hc(EQ-4Vw};cCL(mT`Hu74X6kGS>>=!8CUIpHebfg@67BMJ&Mt}7h<E-VQBy17 z6<l9l{P~8zu|?pSAAOP~WcNNq{KhS*D+f{nkL(`e6MtLat^<MR!4A0)XRE@cDz^)W zW4^nu^7RFvA@$i6$NW3Cl)cuLIz$xuIGuTu;9EweIzb~k7QtptLvYPBfw5UHz>)+} z*1W><p?SjQ<TY1A#KzlKvbhjEHdkh>CUBc9a!W1xr{3F{SW<C}@Ljuj<`MiC7Jw{L z{G_<~($2xEZqGGgIq<|}wXBRt^<-JRbFCt3N!8G+F5Qzm(+ozs10Jg_JT?imzB*Q! zuf~a-HkouB)MH-_`ZrGY2W`LKmS*8*Q_2%Y8D|zQ9^LZ=SOHjFW7~QitK>a2?0zvb z*e+l*^2_fOftc8?fFJCtGJ8{B17myoPiMXSjt4S#3dok-2d10G8jUt%swo&h;`4JV zF+4554ISX|djUb})_@ScXrE)u+-P@A_!6Wa$nHD<;vgSm)H;JaJ%D%7vREfYq_Z2k zA0M!6<NG&SWRCwk9ps0jgD+M~7ewj#tw!}V^;NUDZCGh^SH5m#u!=w;`vV{0U^O&h z*hwmPf)j^!U~5C$u|hLe3R@aWV?fbPo+6<G2)llayDdB`o(1!4E)^m#um*<$8}j&B zGup05&BQ*GH~rVGPGH&ZgIb^FQ;a_3#M=@(=j8PcE<RQ9aQN%wM*mYtZy;z)LGJo3 zBZsCMnAf6W^+xxZ#<SZ+h*y5VPA7|4SP6Z|u>wC8oAO8ewt-LlX_g=Pum=0lCnjYx zAsVEwQE+f_;}P=(H5BgFgY1LjRxP9|HyYhp)8d-nZNS1kvSf-@JE|xO-_)9zn6@IT z-y6oPeZjSER{liLa8OeAa$?_xsg?71Y04N<$KqNiPJEGa9m>YKB|B_@R}ZW5)Il$1 zEzk~kC9q8W!JBK_s-%v>k38Zv?5l*0?k?hh_58KSRMM-ug8pzsI?N&Mn#b+(3TPCc z{6u2N_iRFPn!S^GH;6KW1u!R~zPCHT3e^b2PXL1P`RxR`jBQ?e=I7MBXwcq`d$+Ep zEhH>a=8W&<vD*W}er;!4e3_<<iATA>=O)viHa=omX_Ml&u3`T@HOOBT$a{9Mdgxlq z2ksg3CS+Mfv__Gy@fxugOF~3ywO<NgX8R^rsf3V1th?%z%Snxm0nASx8W-!P`o=nR zU!zk8FRf>lWB9HHxpxF%yRk~^hIjE#gexc>xOTto>^jnlnRf2e$2mZ|@n8?#WL02$ zyXmuiaNF_s)Qi7k4;7Rf<|NBFjb>9t^m^m7oNvU_v7q#e-GDug)eawXZTHc9US%ma z<y)@pc?VfKKW3{s76_u2=nG@1*hl5_nk)S?;#0kfjiF2v!0>Oe^qp7N7p^j>wMLzM zl|=}t`u>Y79JnBZl3%YlO~ZlkR}%$O;IBC64Vf~C%>AesJ(jH~94I;>8d&FCcy673 zfUwBx>tlL!6aho(Ej@zzDIMKpI8Uqr+CG-Cl1-@9Mb8%7$#dh=>+mhN+Dn=lLwOIx zJ5^A#5(~3<3q}T{@)US@-iR!Gr;)n3-sWalO<9A*l^CX`M-%lPy(U<2;A1N?M^^=% z6x-6XHOZUUOG5?Iv~RuEfz-vn_W0Vq3i~fr>~<s0sHdnxKJKQs3K!jvxHdP`Q!R9g z_|~E2Bfz`~exM;E+SC3ATJA6AHVMw_C?j=pu9Gh$+-L6kfSEH+Hzc?SBwFt&P)mxw zfhm7M^@gGqqlaw_Y0_X`>B|BZacH9+1=GrS>PXI{x5!A7uSoe`8R{D~rHFkunKdlH zC5`Ta=v&et_uGwUCSUCJTd~cYmu?+^A|agaQ`Oisf{k3NtPgQko!pyk5j8&_Le9)? zocNI&;u6ZTrEHeBbbRs)r<T7CY3MG-qC{r`M1L6vKvm(ClKWpfvV#z}Y>`T<esj(; z@L2^EmJC-UH%-QIfbYHRO+C`0qk)_dq_UfQH}%xBjSeJuxYq%^W9EneG}tIO0cgj5 z_>V^xN}juuPsQU~T`_Dw>q(n1`#Sn;S}rfvLvO4jYk^V;vs26sRh(eiBNn-Je@h<d zup0xjy$%Qq5MNX!ZeQ$Oh2k$&bYn;Yn1i@@&d(&fY^3FCcCkVWQ8gwR1#x^~d3aHl zL}_!@f1_vnifEQk7(&03)#{A4k-=ONO?h{Qs{|-%zGf^tqaR~2sln9-S_7D;VfRw6 zyT5O`frsj$@U4A#H?k>gj-9XZ(EfY(h(I?{g-K}^b7Ul8FI0e*;q>$0e53y=b7|1| z!MN+F1FCixu&`P?p%)?E#D^Slwy2tZmzv=c`41lGq9*iv#i6F*e$?AjOfLM`T&f5_ zSaL!IkELL)P|tc45>Fh`2-g-&WZ9^@w+(XjuL3U5kdUeV{xiUOJ%(M<*B1+MHi2H7 z%aUVJ=^OK7Sc)Gl<IS8^a23lK*_)j1w+JN+=PE`4?rD+y8mTU6MKx6)e@EV>(#@$E zovB4`>};K!wKr<{a=@dNV}_V4?IjWJ3-hCY^sUsExYV|d2l)8WN9^k*_XlSCH8^7| zCgu%?KVs7VM{qeI9*C+b`zlfnEh=eu`QBO8!EJ^BE;;_R=CBcRDod=v_rpJXd;v2% zYTKD4p+2CYQP5C~nsnkSyG1p3A%!tYP@|g2+|?H|08Nlcx7v5EnTffMAr!4RR}=@L z6&`ic3EjlQEKt(nd97dUOPC<piX}+8ope?S2iID?@vp8p+5Lm{M;%+av4U@+p#g!D zG~MQ)!9;?I`_DbAtRAE6qZRVeM9fA^jkKVhQ<J4bMe#{*6sZIAxO?M-?u}q=hg?fY zZo;g?f-*hEBd26MaRnp;{D*pCupLn2xhvLjO(I<E8_>zM{T_=6Z$WrV6FW1i2`X3S zwlc(~QSfyHh;-td6P6mzMy~ci)gbBm$he$pre`rPc4jsB)2v_V%zZ6q2K3yb!<L>a z!Mt-J9f3yiG}T?CSNQmo=5W1nga%ePr&PHPw){4>+@grr(=fYkvujTV=7XdhY(b;0 zdK5Wun+g)GP?r$_xFb?Wm3duj6Ed?SLIejXq0YECLD|;z-ekV=(H|F|JklTwnQdlh z)8RcL^RMRS6e~hytd8yp*=nb3&$w#ywKy6D39*4TuGZKAZz9f1(=C_Y$3-$8Lt!f2 zbT;O`R8Qu|laiaK!|B>;60m~S!f+8RI+yQR?+=raXq&2Xw>8Px3XHuOKbIepUBB_v zwk^4r#{S@>T&eIg5H;A4$5T{=7G)J-2kl1?`UTLBOcU8H3Wc$x8Y8mkw;p;VkvxPM z2_A&M{rL}0YeIA`C5AvJY+1O~RY9_fYWjpG{HioUiuOWlf>A#rI<~x^v!K2J367Yp ze4L}4XE#8&O3G(r(huzgSY=bH`G>ZGwj{Tt70T$(bCSs0n;-X>eb~3heE0rBDsgvE z_#c6z*^qgI1v#Ig!b%$->N~q?D%vdbUAix>hv*}L(M``9q0mUsQ!8T;=|LQCkSmKr zgzvyqo!D<_`JnVJl5&zAJ;u&EK9|uNW@Sl_RW^;M&c%@&b-|g#bjX<9g8%5x#OM{h zWRC(#+uuP!H{0&UkkIno<FXs}7qGo?f|?&V0)^Gc^GfA71@@T7OS}kH8F57$zyc)= z4fIpQ6&ac4ZTq(L^v|7_&^43yK!af@2=%R#ZFypQe#^|9t5HmD`bxaRjNLmI@KXNl zqItK?L@m;!gAfiOWaG+C48AURjUv33^;lb9&Rekbdwj!_C^39y^0f;ERa@6R(ME~d zt&53?as5(fJXqnsEm{^Wt4~vy<W{a4c@YK(--WM762Kb8dhdA=MX^Ur2%i+|D$kKi z(j^;TIQ#n}eq9swA0;3btOGA*#p1iyT#Po}`}M5LYy7R+*YxT%Sh5DPshZk6Fl5wv z!!9h>h*E<re1m>8t3&FKB#joEIn}^<hVH1EOIH|(x6VpbMa(3c*3EjYxU4A5RMllc zN4%G7b)eZAWC#)}0<Ea)FKHH%uBVlHwYgtK<As{&v`D75J(OLbm)$P~0npBAARz@t z-mx6?c>C)G7QUZ(ht62juOhzJzX?@B>4gWK{c>3&4d@$@lBz>|OYzHNXKmaE7yu+& zLJUFB-b{kgAJh3B0R&?IY5iFsqK>RDDTX2dXcLDT=KIoXoWuMW+E+O!^){S8y$l4C z#5|Ha#ak7-cr+F-F;rX7;<H)aJ9mq;(sx<&Niy|v(L9j9@R_B&4;`$A^uBIMQp~Mw zi}k@%liVtNp~885HkHV5vx4DAHkP?@8d2ZkdfmvfGKQgttN=f2`$e7E6Ko()0Sbl) zUi6Yp>V@l^C_-*Syl0x<QqOZ094}4lB9*lXh{&VTBD~E8?$`?zI~uP0J$^ukv|Kp2 z6}H^7*cP$rEM}=SA#CpIF%Mq!*&DpLm5uQkgIH>qBNT*2bsMk`c7xCY4ZhR>5IWIq zp~cG}LZHFm{1l^Z$q8OyYRqbuKdsO>Vr29Z>Wi+eKu0}vD$iL<bl!8Hg08W1_#Gha zs%>u(`*voMNv&FGTgZdg=Ra)Ejbr>0B&8WZkZe$Rc2VJe-;5d{qp@<^?s;yTlVq|P zb&RjhO(yn5K?!Dsv0x7XKw75Dr?ug39r@MsxZcmQDH>p);jvcpy|)TtMe@*Sc9<~! z{x*VY$M@VZb3pFE4#ffOFyS4h^MNAO+t{~bu#YuB31`O%Y0CvE`m~a4%rbw1$~jra z$}g{(rWzSk!0546(6gpQcDIFx)qH4^3W4kuT52TWvYa{TMuCNuZB#CjMm@)MAkF-_ z`@6YPyP2gaH+hyFNX^cn{Za~B(>uL8{u;NpsArvjq6&l!vcJqfJLNLgAU(Ez)iF7v z=|+evRZDiojq!d#-%Ws)k9&B0A$rkmw%5(gn^ByC=BN27`W84qyJg#JKf0OlcKD)9 zZC+(JgYbzHQ&J*T!krc&!gr8vVq<%JGe+CpXa?LoK0bvl*E}%8CH?OkqBW2MrFN#! z6KDCjIV)n<*qC;GL1XJ**Xa10lin|RWM<TlF8J?6js8-<*1De}ge}XHq8>Lg%d4Dt ztx|!AfMJ}48`|kUZa=Dgskv=#z6w+J$=YyfD>L8Y*{Ctw>eAA_#1XH;#mfNKvvccv zV$%4?Nc6CyQI!Mv?Gkc)!D7OGqZW%Zchn5PdOsbnZM#?Km1QDL(m9G?VfmG)NZWM@ z0azt4(R8=kc5f@UvExDk>(XCMt{OUE|GKFA=|~$0PqbXn;`9O&CvXB*EeX4Ig^wK) zyUq`|<W;3kIlE2sonPJD_W_*8wmhT&$x*3A4Vj9P0yCS~T+#U}yyy-1ZOU-oPy^-O z?{9xq_^&3#{@Ycazz$>%q(b^)LcBmS*R8bce1`J5o9_!<vg+BVxAQt7^}9|tt?j9$ z#NR~l$;FxY$pJNJydv%15PA*e^SyqS?2|1!2=@NF#dopS!J+r(R8ubb5ExT?CYcZF zqf?GckBjb*2RkohIHY?Q<9(CqV;&s|-J>QOM^$&6*}Z@>oAiG=vpk1UA@6nqaD8$+ zg3BI+fS)l9sZ@?s^v1_eRfJJGs5NDz93yLQddB*+KtzhXvuOtm8bc9Hv#cXJjy}-a zdnt<GcqU(94-*JMf5kglb4!}?OIvNd=r1>u`R8sOL%FGmGp6=aG3SqxkJMFtR7A<= zro>j+XJ}7_jr@bfdktq^QuNLlS?NxBrWVaKD7b+<V^yHv#<FV@pi|l7n;e(+(PkEe zO-yoK99kaq%1c?7R$XWnoar~?)XG#qam^NQeq8Bt_rC_4yt7|j9saa1#^?5*2wf%b z{kH7!+*pnS6tp~MGJxgo-cK*}^a;!QC^?q|8;MQjy2oWMb>fOK(gW}4;AjG$MO-o) z>H7L8wp@S7p=6vKIa0w0mj6`4VmUfO`+u~(1ys{-^apI9s9=E-f^<lif;0w_f`Wjf zrKY5`bl8H#Xo;C1HKZA7!5B4>&M6G0q%b<)XEe(1|9{_e{_i=S9nNw4#`E0g#^>Jq zxdt_GumaS`|6T!6@7tP3l)A5#4wd}malp0em@PNcSJhd;DUi$W#_Z>x9?XQ14L<Xj zlIEZu^)WQ;&Q~vWE3(HDfmPSEERW|NX?$90mFhKls>OCii&gnJ^(yIP>9+E=NG@be zU3PFlnq7vm^I+BJ<cN|X7rHCWF<2E-RmKfJljnrae*N6RR@*(ZL@}m(#LyLQvR@YK z)FObJwWc4oC)oN4=PtUPhCuL!*qIhUyE(5a+9_0>(0l7k%{9zOvZQ*&!byxX>UDke zu*)FfZjJ}MV9^N<QJ3mw(g9fvgtt3f-@BjEVdneZa{I^Dsvp9!lBIac@w%|NY3#Z2 zIwKjT$3`W$dR(tI2Zf1MJC{3FxtxUHx^1*Op)Kh1uGN3CefVjj#A&HPfLfly9VRSy z5k~3x?q3jLZ5b8mPw0K<bjQSzbm-oA{%}eiaT=~yGQ~x^?3rKedE=msrW!R%$B7@0 zW=ikPjJ$@IdnGyvjL>1T)wP?%2?-|FZ_HuT{%zs@lpS}&DdwDMu{w$dnlIc3bouIL z*@jb?Z>qH6O*x&6?3daoEvrK=9)r)wH&^Jp2jx?seMI*qCoPsjIc1<#Z4QB1-fc!M zx*3b|aAD-oXwhu(c<{bQB#fAh$m(8q?Es;=civ+$XWCyhX=PmtZ}Pc(M^GJp-nOn@ z22Cr36nU6up8>5o>!IxtaaPtAig|pGG5F!wYzFSrG3>h^{12uD>>{h3+mc2rakI`) z1eXu~PBMa|XpYyqc+QtzwE9=pz_~D7;teckTa<Hi-4R)Kfw;0?iw>A7%&WHj-BFIH z=%z)_x5Y<6RFnCP&5rTLu@E7bHD$VDnE>Kpv+ymE9#-rp7t_Hze(`4T!vfBan5-HC zxxGsGi8j1Bgb#hXE#5pLR#^H594ck1<lrM}&m1>NEn%r-sQk^7w=-)5(-zGZh0}dW z<zH|tJMV_e+#6JONPcaeM+~fXv?jCsp*LbI<()HEWwzBrGk#Q&?fkIN8Tjewy`!GL z^Bz`IMAVmK5ZCJFwGOxpG88?Zl5&$Vm7vrob7dXuV8})br3}GGpvKl|Q-dB!rBtxa z&<^CTmNwigUVFVnsCkw9xVuVnf|82?{8aWucc2LK3T!x<ya=C><Aie&WEI?tH<^Kj z&<@3sxOg2Ix-Ge|kzoD^ltFvNQJX4ew3W*J*;<wi)>njd%^F?@zDo|Fx)u*eAIv`h z`PGuv7w?pL8}Art%`UXRy;*~igo!dy*c_yN&vQ-GLrw8(;lhKF>^kc4++)>|p1C6p zjydX1iJ5$Q&j)QKDHiBqna!=uwq?@$8~U;Cj~eoaULeht-MV7%X*Mp+^Isj)r#ftM z`jb5$Nt4=2E}Hh|s4Q3SS$v!z*R@pWw7)1cnc<AxbW>=XJgo|hTJK%>=Z^O+g_sjR z<!R#~wp~#XJ^-i#cxBnWlsq=0+R~2%;O;(<Zg%l0sJOR^{giXVioLE~kgI6jR)`<t zmp67P)<MzX(!vd;N61<htbui|iG`cT+*xL1wMSg~4bTglRveo=6!vGH?HQW@NuFKD zVXOH--(Pus?|8V#kQ8TP?QfwQ4$)E;Vk8(NGmr=Prml<SQPnRdxGEWzEl$zg@S18o z=dm<2cGSo*A++|wWhDj^2bQqT&iz+%yMAUoD;jsy4fK2bH14?*Oy4fmr0zO@S%A%r zKt8R;*}=L_ULB*VY*hAq6|ZBHD;rWgs5oD?IzWhlXkeQfVa1pWdu=#>Z6*T%GAz8; zruVTZAPj%>;1KCALaaQZU0>m%dKm7x2)fIjr|hhgMtI8|qkBWSm+im4p7&gIlsn(f za_*YWOY3G)6^B7lH^WQQ5WJ0BY(U>d2i<A6ftJOz$$_QgUlw3ZQI~aX@_P;$DHyk` z?P!9mhyLf5IJdfXDkYfJ1w&hruza*lfb4w7ohY8#y^ez!)eHf5de4^{%7#htqQSd8 z8?txCR-`J&;X5*MvPDJ%PuUnT7dnt{^vh7kR*x&^A3BF03fLcX>yFN@{h!Hmo-?+G zUxJZ72&a93ainr<R&zD7H-caEcv6I?GlxlLRivxrvpN|XWlRoOr&4fJ9_z|0o@j~a zBHWgH-5gQ&YCesS$CStB_HvOUSaPyk;LhovdPQK5R0qSPeU7*`x1MV0B(!1tW}BoS z=0l<{2xg^X9V2<!&CzaC!eWEGSUnq&x#W(KQj3o82c;8Pk3gotTz!0;OqNiH@YXFk zMT^Vm4)ID(Dls7QfJG60*HO#1VEvO?OdkTj>ZUyG@%{aKxIxw0n)gPGNGjJ~OZ{*j zUNS(6n%}j$T0txF1ED;wMTWhP+F^u$Bs0(4K2P_$>2=VvHuT573;BU;!~+3TWHeHW zIqVSnxA)j<XCt}qbA5gH0-mW_B+NXNDrx}o#5ew{05I$%j_Y1Z$V>ae=}C~~ZEfqD zMcx_C-#3vXQ%HbfjTY*^wDw=NyE9%K^ZWF5Scck%n>iP39-HKR5wj??p+d=f0VORZ zyOh;=qb|z(k#zUe%|QI}Q%7oZ553c+i^TwV^~!oNEVkqu-G*z{=7Dq^it$EQo@((3 zGs>z?$rGJtsk@j0m*wNEwx^jEYILm=xk4Zo%GH{jd&=h14}~pGR}4D*Y#Ob)-*R04 zuz101yFVM`I=l8Rnyo2n&u910*_Dh@v4|L--ytfNrYg@5a;2Nk%_KO)o|Hav4#17a zC^6Y2#Uh3f(b*ZK!!j<9H}~xo=1-FhU6k`eE#bHU2(pH6YPrtLlHayu-Wy6G!sK0I z!#&XSxsltBtVjQCyE7giSAupna7S1GZFjX{G#6#u-l?PFQ2v6dvR5dZE$39~#mgRe zonZ6(ZVvPB2b?=%u)WH|#iNwNu|Fy;E(V8|r+2^UTrl+=QNgQ@_lW2}8ULc}4^_yl zedb+fn_H{wZNuA;dtP9QPi(|Mdex_7l<r#y5*)1`jqOaW{!_?A+jedyMujQ_xR<F) z>~4rE^Le|a8{Qu2aKF8~83|i!`UP*SYjM2rlM$;w>P5Mg^gXFYGs5^waf6LsRoR^& z%agdUR6D{NK>u6%VOV2vMLHw#puM;ZgI-(^6<_Mam`PIh$%b);;Dj50Jo9EgvMHi3 z;p-xLlzZmN&58)xz$EbmMTdKWZoei<E01Airp<2dqK^5KD_l1#&A^~gVNq9Mp#jTC zvq4XoYHBx&n&+ehAEr(3M~zoK;>{T13w~G6fDU$U^ZDU^C;NOHO8B?`3xVpGfGXIs z{?fwq9PRnHbaWN>H>Z#TP`nia9M@PT^zj3Z9LJ7@#^X#cCWPWX&_>i=^oIig05|&b z;%ko#b~7o<<=c2%u`owgA)QjUOK2?r`FhyG>$us^b^CYyo>MHN(c1+7ef_+JzpeUK zYTtq?ef@MnJOzjZ*&U|X6B34R001E+t7f*Qd9J1+L0}+YOp=I_W~NlVC9@2{{jSJ^ z`_c4%D&Djz9~T7It`}r|A#bDNp$2pa0T0hoSIIkgVRkvz#{>UxbQ$gt;)SMMx?tk% z&$q{@f6F||xleK(Gq0|SgBk1oJv435#tT%dO>iKa5xa4zcMDU=jFqy*p#ct)WwPFh zjJx;xohE>q>J|Tn_$lbLE*l>F=!_zQVa#N`-332mlQr@`muD*%<A%lku>19iaq+(W z=Gy!bS$`8YJKnZX9!Ykcd;CMhSCuORDYkq_S|VV28P;C<`B2k3|FesTwb<%x+SR)Y zDy)i418ia9cf<F|Z_dds3l*{0aZ&qVZ_+#h7l%c>JR$)lRmVwIL$(?=5r}!*S`#gh z;D>ync1@(y^ASCUG1cD`M$j6zx?ySo!+=*eq6J))2@MT@6~qR2WxhBcvgYEwSb47$ zZcW$YT?;a7ZUiCL_og*luVe9Lb&2`%K;=5DJyZVEg5tR5_~+RGhoy4OD~Yqt;|l_1 zXQ=tTuJbR9_m1C12`#m!ULBy7ogZq@RU`j3`McNQ=XX4AHf(HuqVgwRK1hZm_(okz z*Z6pS)a4PM<cgBej+sw7eX|Na%ti%;<|R61ych)>gV%a3fXrN>)bg*?@uyWXd1-Ko z=h)r9QGX~=P5Pz$nC{7UI83b!-Lu(wcvRH%yHUO2<+4g|MqHT{j}JEfJRd&aD2!UI z=6VP92m#Pf6U_^TV;A!`)3^=%3A}Fq^EDr5JOTIuENJ+8*0;Df`JuB|vg9b3S2r)A zobmv+5Sw4d<}m+M`Db*Oh}K)zp*K<Qyt1CLWyHm{n>bI)Ab%r_Y8Ha`#Wc!{Wp$o- zfqjIBa-k<%`?EajE+bEg@l_j@h*v63jt*Rgw>@%9LAga|thgyTu!Yodon`owN=zRH z!FuLJ{>vv*AJ=<h!5QHdU3Xa;{HN1N`yxSR_;_yth)zlNeNDSR=N5uniTFD#I4zUk zWYw0SZl+;wTvYG<?C6y^9KerOuT;+>Z)1@xzPB7^<@KGnti`9+)d%MY3U2_Ca5+IK zE$e9sYRs;-7Vq3##+WE=H^Sy7n(yaU)1UvPjOmZ3MbdNinYklA`z0pXmvv-UP<FM+ z%S-wKm-Pw{jz{EPrA<#U{UQNsQ=Yl;KA%$bPODzp+oBR%{!=PaiITpH0|lRtvF1_W z2RgL>7umD#6Rw$ic`L$aH=7~+mV^YWTS=4*PevO#a)<Sb8JJf3_H-6M8IO+wL2Yne zmyLGdSjs8vQ!DujHzqQNL<;xUHVyM<8>Y%Z)_@@_K=~Q8t@j+x$bQ*V(E)16>o=lr zC6shaNg}WiuLjd|ys@y`jDNW@)JKh<p|l9@<BQHScsl9fK?8r-=Gh#IGoUJ{-}?dz zQaARCvK>Bzq;Wu9`oN=XT7W5_j^6VV^=4_tS&Nq{<n=kcuuhn;%LkvPbdakLmOkT= z?jgf8FFRF0kDN?EhOmM<*2O#Gp1-}tC!Txs{lLmHJr?-g+u-o0&ZGRq@2N?U)y6W4 zAsC|uwc3n)l)DGRi}*b%_Bt&7_DJ`}LvXKbw1>vx_?a!0$HN$-;B*lD6hpDQ6?J@! zOx<O;=Tfah^ZTSG2CSMMN7m1-l2*<US$?DJnJU!KPZ4;w$Y7T&{XMqXg21vm^b#JE zl^=9%+^$NL!kG;jdwl3wowd;)DW02lQK9C3^LandOdk^y3EWFtt_AB%M@^@t0kM2K zZkTI_3{4-IV2!Hjb*VKm8u})si?5y<%!`@N@KIS}3wIvvNcDP+KxZ;myO^fkFmMm# z9QZcOZ8+)G41J{w)9aL)D_lU6c45Wb+|F^%bz6HYi*|Vz^qK_4=(#E=C3txUSGQDQ zNe4u%7DgOoM%x&F1Y)&hWgX)uJz8IQSdn+R1p8QYM2y|cp)GSU2Q{|T$^DD<58p-N z?DWHZW`4T%UC7hDL;vA2oYMbF|4J>xnj-sn>to<SjWPw8&Vh%jFh-!EA=90#Vy8io z0e4vOvDO%Rfp^nh4!>IR{&<h_OhaKs;r-Z|@Xq&d??L(vuTO(1b=|H>k)uc_#%jMF z_%H|`vp=8*)0ojB*UwU6ku*mXZv`td<d+=7MFti^>IyYFUd&r23-g8Pt5|Ce;K!{x z;Y}LhF<#v5mU*?mV-ZEqr5cQ`M4LZ??kSFC!#qspVj`QpeaPa{i=gr>eCfs8x_fez zALtl}^b3b2$_VL&`%FEcc<bhoAUzf^q{571Ige+e&UmEAH+ObK{hWX)6)P5R^;iNL z<Re673+L#V;G3m{#*KT&5>lr{F%PE;mJ?<>O9ZH!)#Af2TBaI&=xSkkAHFMDODAES zak7&#^PihdY$v0<+$*e2ybpV8yP`sH@G$tYhF2W{GmY_?6~7KQns(J)lKi~j^+COK zDrHvk4ZEy*2}?%@b)SNIF0b8lQs;0f?I1E(arJ8|W)%+6%~L|uT?~5-Or9i~hvFi3 z+wgx4rk{T{gw>#UIpfAs<cTNwbUtihH*zduJ}~VrUomGk`qH?hq|p<{B81czeK?P~ z+?e`QuTmr!BN}>1o+FVfp?XT31u2!$U!0=PPWcmwh{QcS5L>y++05&GZQHDXa+^A# zv`3fjLPD?-|H9kOum!GJizb>I7BI>2>n*)igBO)$MxW^E8IrOk>j7uoJ-yJP6Do^} zZb(}gj5%S%$A+wXl!x<?t5J)ptH=(Vx@qkqZRAMaD596!!WvF+=g3BS^$tnmM}3T! zy2cLH$aA%ca3SVXI&PDB`o!+xg<{I|3}xnEIo-D9b2aTgB-H>KmeyI6te3TQrVT)9 zX?H>S=e!ih69aA#y!X5=Cwmg@*uMc81L<88*`m+o1jmHyhMsQtIP2`!eNVX1P1<J? zcV!S{F!W;bb7uS9OPiES;{#GOWj)SSU-kqgP{&m~Z;&x(JV3y@5)~7oTP~^^2!ADf zm9CxZvw<VBLrmV`n(?lwY2O5@9<r!NdHA5~PSv71LWc_Nph3`%tQ=}wugpN817Gze zk0AW?zRT{4-wIh87LhbZRkZhyB%k>C3QyOYUeVwl<W|dV7Xa8fN&B+2yruH`pcS6l zDbwWz(#!AThli~$ePE2Ri48~fx6UM(CXfX!eidO=8t*wO<U&`Aj2}|(?jFGV5L_nN z^ZhWNE*sHPP2i{BO4u#GssTyxQPN3)+i5<NJ&j_+Zry{K%k0+zMGu!8VRMU;=i5!O zo8mtt%+T%SUgvlvLu+K#<jYP6RkTAq1ToryZ27M`48xL0oMqi1E~Amj)NHYi+9a-` zYN79*5RDoH_C)Vb3G2{2T}9Ut(n9r8^_&a&?|RNr`sB;9%hp5s+M?Y0hnpx$xIILv zL+iX7DwbOMB58K-wmsPRQJTPn&UQJqST&_7;FG|g#Mz%%S=Zw8veHQJP^+~!*+Kn0 zbSqUw^s)p@>TFW4jh0iSONqChqjiqCi7E@IHeJrWcnucibK}6>!38VQ)cC&Qb8$R_ z(|(I>pi;u!&|A$1^O-u^29oA-Bk0ZIyoLS|B^ic*Z#3mH!Jz6*@!TjUlWwu^-`$Zl z(M*$IOvg3;6Gq=?Tf;oZ$)rt58zu)*1<;E|RpK#9h^+eBVXbk{bL!4T<t~7JF2r9Z zmr-)&DA|Y?OvT2h%R-#sC0<AS#!q!TtXH*R<aKBFMHWnWd?&nEivu|?PIlm~%FF#D zF{DahfN%!^`k_BaegK|5<ihUDDL<Rzefxspl0B={pjm$|-^<i_%UXMLY^n&ddhD=$ zkD^P_b7x_6>U^k|%!;Qt#e7ZSl9J(6)65scX&-5SHpXBp<AnAa8*@;L^gj#2CtuN= z<$H<=81BkExTYSA+GylXm918@06Kv1cOgiukzsN_V$y|Y>bynP+Y|&7XRrIXwK`Ut zYk)z)A!<?_&*vtJ@VJ<zH~l;CUfF{T0e=T2L_P#<KJ%8%D7`&Q>J0Dm()XpLBiZ`~ z-Ugl?6**n0i$HcgU8H|wqwS{oR-)~Dv)7eb2Sfaj{`-<w1c>Y*CFwEt*f4?#*{^|8 z{IuGkc_lR{JK9PH^`hgvQRl4Z^I>fc)H`>*6!iQh!lwk>B#Qg&qpKKJP+X}|JAd#A zmB8P9ySqg=6c-tkY@Z&L{L$nQigkK!zw|=W;j#@<nA0Py<v%J*aMb=m<rjxkzgo`r z)@C6nIwBQC`>)l`HlR53c>mZq3XY^|cB8IN75~vbP&$__1Mvu<HZ@)p`q&-BY}IfX z`^+P)&@!iOK!JZr7_3RCV4fZq>a{X#aIrLL_^|<iBRw9|(SAdAE<Kc@ODWTs3qrlg zW@~{|UFoPA%dBu(sDT*hP_)-AB+#R>_{ybz@hMdi<QcQ<g;BcL<@ZYt4aGiJ+1!={ zb`On@I1=DiRfD@!`WSB{jwm6@{^Y8~PI%TS!?3*2bnL!fS#p;;Hp~+HH~FX2<<;)i z_a+Hx75kLB&9AHYUiRG@_3hdlfRc-%d3^^0nhjpPlXv5&$X*1viJtAu$C+xLr0}Dp z)%KS!+9-MBOJF{`le!;EMPXm5jt`FT0`&Cz44Gs$G{&eC=>d=P96Q(6?Jb}1MED38 zpoz4py0>gtVwb<<peoHdB2z{!aj@T0hI7D)q$Ow2t>c;fnQ7(eC({R&WFn!|{O79A zVDh!D8(qB3_^AYyr0CG}SpS8Dhg2*rdUvKcR|eU2-J$gO;rsCsHVH~2HerwqlUCT! z$r#+eQRHQpIY{nf=Wq;q0(+WrSQyo9bEz4cebgc{UwUaalCKN&{CM8$&|yahAi1XX zr*pCVb^)Fqw%M5YF;d?#2Ey(-7mPA27CtyOnlqxuGaSZQXAnM2Na}lAy;qiVVcC_< ztwBD;O?G#E&%VE#+KnqnlCdCN%}<h35VWkT=#bm@jAE!FG(ewkVB9CG%xeVwz~q8# zfR4uyYcMKT{b{FBFWCVr#qqbpL$lDx%%?TOL4Uqohm9)6KDQ4p)r!16tu}3gfHNAw z1Tw5E$E&)>gxXnE`ZD?FL19HQH7q*?zU%2OP>Hw2yQ2#BgOt+^h%1gGkGxL`AYJQ0 z=oz_%NcgE-Dis^&lQ$Zqg7vPOV#=75e^8OfE4{ohVH0$FbOQS{oA!+iXh(?U&8p;F zD&v)wR2=6g)8EM+uQ~d~c$h#6jX-vJaP_2RhJ)#{13_FSG-R=1akvHdkdnZXdHb<l zLQh<E*$++2gU<cTb<rY0gtI}P1agNzEyHnTsiroe`=V+KF2lqO-oBWoWIE2YiHiW# z;A4-_`nocmOYy&}Y3S;0=Lvx-hNMDgI>MlwppN6l4+-INSzE8uQ5VBgy=p@H1hE9{ z8)w;ABt2$&1XKDW&u+0U5AriO#u+cU1iTFX0NwxTo$O#=?$|+v3@w5?=7V&a=#1zm zv`#eG-dwG+d`|=+f3q|d@3i=98fQciU%GEzOIWfgxAgh(;dGw61xK}s+r)GlWV!$6 z+tVxYUp04^@bitkwN@1JsOo>eW49wHlcY^ieP#4v1qA&9ngoc4TrTI{?&FSiaa(Bw zot`qkh?EDF6|>(jtRpvmIDlaRMT+#1r`cPvMWDb_TYLfJ5N_90IevT)-W{XfPq`v- zFAo#>d#1A?og#ICBHNsgv!G@hl=pkA5Lc|cwm9*-1GUrxfwZPuVaQ#3vx$TbQfF+# zY_8B|omfL5jL(zjoW$v6W#vH_-ZX(Q+BSR*20YF9Mmj6}^kCLm-Ka%U1hgnftk&Yf z)gPbFZ+*j6unDj_ZPphkf<=t;eTCh<mw;N>Dq`gE0QLF)GMe|}PqW>^Q8nx<uOg=h z8gVWeU2Bl_zp}nYphW|)eu4Q3pqirX{svyA1aK`%!3jxY<E7}WJY#;ZK)J5^sT29N z=ikt`JzM*}AU(M7b?U}g*J^1LLsk%-*zn7~tVMXZhm6y=B2EvN;UK-ftfz}rSgz5+ zUS|8jXYDTd7`x?fmmE5lT-`e$i=Fo!dNT`cYUi7V#8Z~ktBS5n6<FAu>f+89?}gVY z7#F9`|4d%K%0rRBy1ZzU@G~;mq@pCh8uL>egFpM#rVILLa8%gErb9bi#BI!bsxaqy zmUG(=nVakE4VJ|IC5J514MYeAXkmhLnRNF2NicP-?zq|}Rj6g_B=5-K5I_G+_||So z52dA8<(YigBcx{<=LCQUP9Ch%9&PQ%L`Ty(CY&lhin-3v%67cH+gpoNBfY>@8b8@i z5tqNe7n@?#J$Eu`33IC$+DJ#8fI7diGpfWP0cX!}klj5G@vUKZTxFm8773a!bN1bd zA8h!VtoIo9Q06H;0!qp@8`~(dm$t+3_xt;?6R-ubh_h1%7Y@b5EgomRc*X5r(D)K( zD9)~G8C0xRn5TANZ1DORugO7urSU`Bh0kwI(p(ek-M}Hgfeuf=!9BEjINq)l%xDY? zJHNdfTARjh!(=MPYiyuo*qD_6?Ct}5jt7(Hc=WXM&-w6Wr^efu<OCi*gjE$h)lv1! z+k9MK_R9g^J(J5896hx*22N#8k202!_q5y8U8SBuwVtYDbB&9%*{a_Ppzbax9Ci)L zf@cq#$K^4I%xhUUm^4D|gx;WP5MK(RheYgjI%a4vIkYs(nP28ndrYkt924?Wt<^<s z!N%|%nTUIi@3Q>z_=x-RK40hHPnIsFaib^EOM*RJ6{tIUpKc(BLlJLor&>s6*k#pD zK|MOD>qMwFBv}#-4*H#Ioua*g4rV;-wLf=3`J1cZ&?*1S6n;H5ZY~L`sKPiN<4HHZ zu-qTngSw&lql}}bBZk?7PPhVCJ7oTOUZ8D+>u;~dy<SDu%Uu--KXm^Ld_>Pe$h6|U zY^5<&aR?gcd6TII9>=}IwWxYpLW&E-rUs=L{PbJ`<a9;rZ|UlE*;6>kkE!N!vosOk zXRpp;rf;gwjAX*!%|+y*LVC@Oo{OsHwMBkuzUhwomXI`l^nk9Mm5_~8L%fQCMJL`w zKTud(GC)WuMy$FJe%OnzMpY)EP=>EdCC2u^oPF1eJBGCDtv#UcYNb_ftG?m_YPych zn_XE2a?@ul%`Ab+qwsJZ+u6Y?_IFgCrCE^EhM$sgFC$YC_nKgxk%@)Uh&V>LSV#ZJ zaoZ}zqOQV)f<@EW7n5DbBYNkD@cZTmhRgUnUK*U740jCg5~&kx@v279^|<x~ADau_ zM<tfvR==myxLS;%)V{%n%P4&*y7y&8MLg>?eoUG@BSH4aO^;S6rlIEdnCtn>_P3+g zZA7Ym3ypWDRtM5*EKWYZE`G#)NID}$e^!7;s%5b8leD|qy@&hOG}jZ*Y76#NmFmac ztX(lG{j2O~FZotpvQ?Gl5u2mD@5`@nW;rcM<=v9Zzv=B`q#IZ#s|Xd^XUeG<k;bn3 zk}Zu4^O0JQ&vB%vY0gpERKM$)5q~F_E9^_aKhJhXP2-)Z{0T>LwVpu9tC#K}W~Y85 z!jlty(_8ql(KyEmC1h>Uq=L}n{(I(Le{!&vsdk3X_>5Gqybug)vJ1=?DsAihEt)bF zgSkeK6vF2{smuNxFB7wP7E8ygw@0!FWsRLFSuzbl_s_)5$BgG*ZR*Rx+<si{>Lw#d z+UGotTo__hAQs!MC~0566Duhhv!fez3v6JIyWNh*q7_-^bMtOg_a(3|ho5(PXs!*% z8}c<pkcd5mzN1g0@YAI)^16<%bu9Oqi=k{Q>KCb*F7@RaZIO0;@GkoWTuQI~R}zD% zYccQGkQ9a@zoGqIHI>)7Ie30wm_x_ugsES7r%X-FZw|Vo>ZGRoO%*K0R?bZ=-;&QC zGkEiwu{rx0lsXR5Q)msh3>L@B93NJ^?dZwb9-sfkJ<`o*R$qFgw?*|A=@L_@k4t>s zN#}hr2W6_4X$KePnP-aa8Qu01dB@h0C7_)WSgrz_3fjI(?Tvao!Ef>*cIc{h3ztA` zF?Lx{?e&7Onuji{ILp<O*dghXR{j09!4zYGVIm*NypuGgTOv(5SA}pWG?MI)tB&pq zzX$ewHx03jA(>Y^INNc`cY}B3;*uhiMyR8Ek>?Q5?~Nz23v1_^enHy|@o_x&tLFpp zX82C{q{u=>f3(@C$fvmAzVr8G1gyGaCq>S3HlLrvo4@7{e!!TokS{$NJBf;VYJYwD zeWpuA2EBl52L-g))4xLsKb)=kc$%T>agSDTsQ0;cy!q`O_X3~Z@wu2K@#tc8EQZH) zLq`ir{$r&;9b$0)2h6^X%TzPJw2}79lG(BcX5<UGp%%D)mU=|ed7Y{W*Qz3!vrDhl zTrq<~;@YBxZe<E2w%vS**Cz8c4_-A$;t>-Ow;ahBkzy^ftsWht_G#}qOId2ZKfBE~ z-p!`vO}}~sm%MYcsH2qD4~?3u;@<LtnoWpjLYZ%!rlhh*mug1P;`SAa`SoU>PUAIp zrDpZY=niv@Wa2;kK%LPHif!+|g0X`52+0i0_MP)cNVLs=o&QIuLJF?uk;Z{4k8^Yk zjKk}hni`5!7u7^hCc6ojd5SK-k-N*=nfVicVKG#sd--UMTKG4M)%HTFU?2loFQdsn z-ZI-I99*-;dPxmdCv$J0>fA{WU;O;tVDm&ieiWI9b7^>SBJS*<kl7o{>_vJVdMmDh zj@~w^hmd8mdc6_45h)(VH^pjv4Y_}6syu(aB$z)9!+aPK%YV#emeS_aB{s>sC}S7f zfiWS^o}%s@nqsH>A}1anF-!-|XE0Uec<VH#;O|f!t8uS`U^!jB_*q@rVm38_OuCyt zDTQC!f^ry5BRn|!w%CfGjjRpD%`)nAx&$H{=l$?Dg7Qw8P^6xb=n>OyXSXiuCd2G5 z4xKrMNlO_!sYKm-)GgVw^#sfOS_Y_B@IVwpZ*lM~j#{A~CDjbFUr5&c&mr=^y)!hh zUYK$gBXqg2sVkJK%ejI%?Aaq;gr<e)bn6};QB0t;dfvzQ_Qy0e(LVYI%&uTY<6?Vd zAIyr)f0<8SAiejFerPo#OCGbb)CDTdwC3oIVMez=IdpJlh-kL4n{1sSly~5{eBDbv zv}UkDOrOC*J?kVvqY3^zKI{`iFGR>&;2P=cjY<wCj-4JBrC*>y?RRXOL;X?i5ZF*O zsCwP?ICOWVlyLB>3LtiHB;EX|!Rfb^K$DnkRo(G;An(58-^0AkpIudzVf)Grvg*#L zG_$PTm;63>*=PHBohfKGT(Z?=_-gjIb5E??jV99>U^%wg{<Wfp6#>tZ6y%!f{vU$E zyJ8gj*XI9`f$yInyE(un_}BNJ0RMwtNo|U0{pIC^_q!;9=yxS;RwK{qeEh-cLu`DK z6Nz=RUhc3di~}q$ypJ<&7y#l=J`#PI?O{O$2n#;mI`6mF5v{-VyK5KT>0n(lxZEJH z=km5?q#=^^ZVL;Df=79tob&GA?7gpmJFQN2!WAv?h8GgBuFJ{6hW+1MIBfU%KytbM zP`6c!@C#7;dA<+0JtyzG(nGM}?R^1}*Y+q4Y^1}U$3IDqZ1~%2hK5KJi}vr~hd{&G zt=0*u9)aEczq#<=Vr@hFi@P%4%-lvq@=9tfjFC=Qw>G#hqC|rM1b<Qh18K|TSE*hp zTNZBI$GgaKp2!Wj<=?-8L;>DFh&sJd{@8ZROE833%mDk_i2ekpT0PhIouNPLwhR0E zMgQYifMsNGtXDQ5xv;UctA8W|3E({V484b5jf!bQymHKq@$9qaRyv1BO;?w9%V*QS zR|nsAOW`FOV82hg5_fw!D8E~;1=xtwjTONU!$`_)MC#5c<ZT?{#~@k?p{kvD$g~lP zul(c@z%aHSG~)V@9RG5dC0ehaY73&YeqpoSM>xqskY@a=QDHlfVaD&TV@i*aY&|sK zfPr9m`vC*u7sq5$aDl|Jx^wGy$)En$!vEh~`0s$8ZvT22yp@A>Rh6zc@Q%!L3U8gR z=J9wZb;ZNXEk_|T%hVt;vc-Ja?~?Fac^)t31AhsYV)@?-=L8lmnJS}E#rQA5Iz}wH znb@gYBDm!CJDGpf@QuH>{xXsA({fC?gyhO!f|UstS>fn2Gzq;n2NMD9xw@=5L_zeZ zSN0;g_}BM|g1Bu{o`8}WsivL?_k-IQ*Z@>x0x*kUh7<W{(KqCf4a|bb_>c)sj{?(Q zFG)N-+e2j{M~)_+VRF>Rtz_Fo=t~r+{a+V^Vtl_;k(kNEsIMHXl^z*W0o~+axxc@E z@^6h=4_-S-w^&2qA8Tg~p0ECXk7%1kIJ3%zegb<XHT61T?!W^g2DRm%25=P>U}4f5 z`tVr1pOR8(Rvvq8&{YVeI=Fry5lBaxshfF5IO=vVZv?7vNY@YmPDhkd_OVS;#BJE0 z)jw8bdE#ZX>c?B=dxYU@bQN-R;IS_03N}#hk=v$4XuwizHx|TKLy@yA)ytM%oHBI2 z<~{E!bGG2pq{<{l%#iSHG-YbGy#{%UG`L29us#r05Y+Jf*K7CpK%TZ66!}#1z)WSJ zoC6w*8jA#J$-!wo*F0=d_bFR=Mr|DH-L2ClezETOQ2I2f<m1tkwR#4xmLAq&3Kt3A zgCNtf_~Sn|0k@AmL??*hMA*UeX{vJlVY922=Qa^Hw2%{WQlc9$`sG=ZnXcJVobyIa z4+*v31L=Q(+_?R}`kHvGgs9UlMdc80i=yw4aIRI69LS0AI1sr3Oo2UZU%m4V@@hks z_)2)~_m3;Mnr7YZD5QWXB7SGry$j$F{Ck=ov7)DodtGr~mM5nBdg1p3B^y1QZ6p1@ zeq*<J@AHa~P46+8=5_~_HeXBF`Y6Ws;E?TfD2-`g3+?ywD*@U!&M?rP=KtuGO8d3t zi+Jd{kvVa~_aj{lhSZ!l%@Hwx6=T(g`9XFN&?Oaz2tEc1+}uK%aMhq<d$9L{%=O2H zms6*wWhYS0WAi>Uw6jJo!+fLl(<v=Smqt+K#fTA2*;I*<`KaK^=At9+)yY{S+0I^b zvlc})(1B^<%BDIj4<e);T4c+N^17YRwDKGHw6vtSIHkvqlay{%BLuKkQtsC}IXVJ` z&A8SSIq;{VPvBCEfUQnPXL9ja%?jyug)g**)DO(uG;HJPBPJ~7ZW=}z5UsVGm|IGo zR=u#)M9N4^xqqJWcSAyHtVrlEWs^lmqqB2{n_8KX_n_AJ<7s#f8?w;osiSi+H}sH` z0sn-xvtd)xKvS0Vgte9qaUW91VR6P9j+NVnmbn6{*#=#{78WE|LQF9oMcaEBc8LV+ zbBo|@#^_K;glDE_eH@jVQ;2}z#IQ@4YLD<vZ4LdBl(~ps+I^SWa3k3f`Yrwj5w017 zqJu5O{n8R=bDNe^43^CZT*Ziq@<S9MDa#$9mDUSah&M~2s8_z3IyhjcbI;1pyD4{6 zfE_85G}1IVsOp4u>~yrCD&)>U%md=2uGI}mWYYotuY#5VQ9cfTSRqASgnq{3jq`M} zo|l*YG;mg_dUi2P=cb$<DOphU-8Pg%VaM0+jvCgU*wcBkY0gtiyMU|as*r7I%jDTm z9O8tIxu&uMd->Jfi1xI7v!p)Lrjfr|WK-uOn2fwT?95S&ozofq^Ra*!#c2}nt8;V1 z$D-i|%KZHW`;I`7s?hXxJ^JMq5cXm_qfS~FZlD-B`4suSrAIGbq`Y9(5Np?+iutXB z&2Czp3y^Hm=3kx&lI1ne<xeuYL?Pj17$G8pZi;g4p8ior#rLtvnY~PluF-2wd_ZQ> z96k_Nm?%=$<U9>ExKg5>`=vN|nxuBCbb9@R;BoK$5`wd|_Za@9=RXfiwaV7r)e@Q` zb3MI136}%ww$*Dw&M)<`zN>7$sOR;wzgg?C#IVwcOm)|r&JqTou8O%c<nv)a3uV~R zAPo-u;v2R5GCpi^)f$LK`0x(i-FcWkU!v9(WV^e(mr|0%iuxcM=7ywo{0zg5X!8sh zItH9H&@L%#>*dbYg}zKJoOIzT#n06J26Ql%Jd}&<FXxJ9PZ3pScelNE0VJy1U0%tl z$wH(^YE-jy@mZ|+$dYw4r0EDjrd$1JDGh7I7Sq`e*!#9y<oD#{Dlp6!meQcNlTR&m zJX1>>BXG)=sc8-oG3kc6xG8CrG}IzF*8Gww?ErkVxaydW$J5kdt;Q*?6gBpWYSkGN zxV^I>HZ_CmIHKc+vi&sF3+_G%cA;*5mV6?bx*zm{uUppvqW`dC&Lfk$cU_w^VDC%< zZJwALHaK}-ZaYme@S6U9d?vK1K*3}FJC_#8;)A728wO&dTvV+%TZZL=$Bd;mZf*Qh zW<@B4AiiJFd(75nrugLnkHl1<VuuS1lKKUnG~F@*<sZ9zooJU0?;bVy{%DR`g3-e> zsYy&=IJ#L4(c#C?`{~}MA0X!i4&U|rJ$baya8|tyALPqNP!9p=fX$&2)6$+39Sa=l zQJ^*fxE6pYXDTSTo&i!7<O~7c#j1{6dKYx*Ce7LnWe3IMqg-kVu~He{*U(#Os=fY6 zu@O&XD;cgt=X5wQ{3<3bl1C?#y_1(_+hLRQ>5?6z26l(@F)bE#$C)-QH>eCJ@}4*D znEuM7E?@q|XcYR?ETUd2=hD-=O|sbN+Dm1r?RYB@{DEg%?eJXX-=>u4oOtP<Xt3}X zU$<*3*6pVL&I<*?gdZmM_sRMbkelVNAm8?nTSDBEY5VJ{u?PD%_a4ZfvHgFX$X!Zm zcQXq<?Q_I*{{80virRd^nZ#NW$F0gm@IwI*p*Q<?h_1vxmG|tYu90>G>^vK~;oA;+ z7)&PVeH|@IS+fmI`Pf5Dt(`g%w(oo#uiVCbAtDjl|I5Xw-^l=vWir2MS^x$(1O&~! zrkin1%Xs0C>|MpVg7fccNwhYfc;(TvEkOLhcg8l>=8CxR$+gV|nOIOMUlQHtMsn@1 z?;C*S-X2u|ETwp`Cw!db{9j*PyYx=Uyfo@;so-6QHZ=%wPhax<<BJ0C%GDrFBVpHS z6uho)jE$R#d$Vtcy_x;Ly7UgQFMQG@5`SE7+h&5HBmY<-Fym$%5ujN``D0U4thfy| z#9o7(onVLmt4seK|LX1MV4tmOk8G3`H8;2MT+a<i$VBRhnz@<Vtyicc`W9M!euUJx z-$D}(SZq6CyY~Nk%+G?;%tiGzD&2sK{;%;Eyi|L+OaiXOD~{j(*HZwprt9P)t}d8! z^V2axt>@O0d1im%*JD?!SwK_GmJH5iBKd`rkS^ZapUr>!@Q0gH`v<-r${e`>Qy}}- zB7<95g<3XW+Nl;ITIj;S^xwf4khP?n#S}Z#qJ*&I9cX$Axbt_)>c5hQMiEFZ2T&gq zTAw<<>LRX{Rc%)`w}ITo@?RP3RNtu(EB+>PvovwxcC==E8nx~R{=499JE}*N!4m;G zd)W5;vuGM$sa{EdF);rBm@VMd=KLCRNbtQqwuhxZZu@u!ic4qt0{)7iiMgnT^4szA z2SX10H8Nt1<~=3P*FsXFcKJsI_?-^H0aWh>!(f&b<g`xZ(%#2x&HnaDgUmZsYg*7g zCbnArB^3!K%sW=IJ!@sT!3k!^@08JgOcifXM|q6TQ0{A-2!5-+TC2?79!C&KE(&SV z9c6c_v~@OlcyoG13+<pPf^!wm?esFnc-om?UDN0!*?GmjOpo4EZSK>|;&W)s6L&_( z?$xr?e<enf*U*$dC)o;rpReCne8V3HM3PXsr=xfL^$l8J`X#}9Rhs|n)-qWx-9OX+ zM0^v3_q!$Z?FtM<)%U+FLCc3d{2Ng|@fpC~U#7DKb5#xg@2BwCx#bHdwoNya^P#<_ zmspJVV&ppNNOqFFB=v~bsKQd)Xn@-pba%wT)hf=Ngt`S0FzD0=4`U1<VAbJ+^yF_X zM{R;j*r1q%2vF1aqC+%sKyq?Q>^5{HT5`<`QLOfb^&&`g{EKWkklb*~p#Sv{$TYv6 zpHp9^yW^nhV_U{HdkGU?%QhQ>3VO6RCJY;y4K;$HMwICSuQKW-V78=7KJwD+z*7F& z<R$hVL9d%*L?~_-P0XjwtV030(`wPvoztM`2~F&N4BCLbw;qrzc?h+*w1BzkK2jZ@ z37J`H>{5niu-<a5=6Ga&84oY4#pz=r`z!|cbUdz<>gOZ^)fZT`P#0uZeTggKXJZUB z7Sj*O?2m9~`Ots&W3+JMn)rV>Pwo_fv!yCr62J0jmbdq~FdEH<hqrF%=F7xlEz9F{ zB8ssbRfA*>C(pCPaDP*re^{kB7s5vre$W0yBT}(;bwOfIiU;Cw944iFZO8&PCerqB z{l@ozGMr~ZYu%-$=&J=B<1h*(2a!~r{}1fqr#}g*e)?D}oUwYzwSdqnNcPx<<-H6t zSKZV~h&?nq;bPP{?qhL&YyvokKAE1x8~NRE7*zR_f!W(AS&uz!7b|t7d9W>=;lpYr z5RWoGjFhW(g1Fl|T+D9)G%fr0Y%2?hI$he7V@bv*(cwo1YqIt0DA8|m`}#84`cru| zmD$D^p(vmo;cUo5ojGUhI4iY&gc-u{9uH8*s*yDaiXTxYFB+n4jEw0l19Ih6uA|yi zD+aB{UoSqCgO_&?lukL;0nA~AI&{TR3jpODEBv`z3hY>bk}p+qIC+fwy5Xpbgx4oc zcclcVtwQVTx0Mt}58gdT)nwETIbbJ7SrXEtTiU_WRVR!=#OP&*oEup*C3*dM8q!Oz zzqV9z++e2^$Ddrtj8&?@m{G5zJv~4Rj=o_VrLuktI!w%hm?K4E4B|s=%^wu)(Hnh^ zD81Y$F(i>L!7IcVGBn~iLu<cf=#$8bbF>|H1+j-XOv>R=7*&JqluN+JObHeJT#p@@ zq@Cwk6>zh!7ex;Lit(6P<1SbskqyNizi*PYk6J)4WMlFXF~(3FKkuhZ`$t?aCLFI< zd6VZ$ho1K;_48uQ;5U{ocMI+AI*HNmj8%{NeF+~n$|}AE5}#^&dgSuT^(=Oyb9U8r zV~bR}053SwrW&xjdu9wekJjTSt#+Vy9z46h;0WuQjPKf;yy7sk?k~6Hpp^|XSVv6) zP{i%*mVQ#5m60x8hVt-@`rH<KP^Pc#f2VZL6J9HLAu8c@O6M)5dn_QnP=Ki)Zz6F~ z+Edinrqy_~W#f4+0f#?`Etuv+7+=A?Hvf$oT|ZWSL@9Sf-1qI4o_fK{L<(f-(fKDs z-33=<7TXkb8TCeG8pSWLXnFojo&Nlg>~&B>lDeymlfi&^*;s#m@zu`z#_fj_XK6Xs z{K%DX!YiPb2H!76<EG}#TSw&OaugISTVxlsu-)`Fjc=3Bu+7%1dvoYDa9>B5xi(yi z2oO>eGI?6)d^__w&`Pmkkd2`08!?yEweNPryb14zhDJX&brA#!HgL;~p_*raHCl%j zryM>Q=)hibNukO`^f_H&C*Y_&K_0d!7B?ij5q|w5*4tLU&PlPZdMM^h>AN*+#Vfp* zS;^2fHR2|uw^aQ7v*RX4E8{~?t(D*Grg=gfr8ad@s|Bwo=on<YHJP?+e<6TJ@Bxy? z_gsG<*ODe#6^2{|@B~i)0n@cad0(YnpqKGHU*-Ljt3$D?>%MG7$jbP?RbY6x>|Sn4 zeVcR*F~`ng^-+TaOKVfqNv+9HrJytY!TUCL_B!xjb@(KT^i^_yX-~4C7e8rK2_@N9 zZ0)Fed1So@?Ye)@E3=RFN3+D&g1(p1K$|3z)fY~;K;-gENR`xln<GzGeLAuVcoIL~ zn!mIyKGrMq7g%!!=y6kCH81D4<Y1ufoxQQ)jtX5hr#F8`9=qGfI%I&JXaiK64d&A% zD}pjtlWa7Hz+G>UHHUvX3TBV_X(_wBr*qkq2qwP0$vtF7C4V{V*J(bigf(Zkhc(+u zo?tQ{r>Enh&pdyWo&wvG5scT^&!{+_<9D?R`Np>Y$Y${QsP-eTDd1HKe|hf=?cIs{ z)@o~-{Wb>dY7>j7`Jel2qgKYb>{!VxHaq$*K5R#^27l3<gIn(}Sh2mC0fXV70-Qmn zK+=i;xLVQXR&)+(xkl4ToL-8vZEr`s@772Ot?`+0(JG!ani(KgVs9x_CdyA|erupT zU`+&E1T7!yLUFN!<2>v!cHJQd4WC)z5eWuHj=Q~)o+TGuIsoHkQen+yEcXDuyRBBt zwD#tjwU#@z-{dQW^B_PeK@Pgm3hs<*UFR~o1njt>>+bf6((ntYH1^phS5MUu_W{|e zE{r#y<jBmNX_kG%V~%qEamRsZ&qa#}Hv`2!24#o%#e{0mELDXOcTPG^9mvzWI{Yl; zh2IJ(HgQ(k7UlCA<Yq>*&ZKk4I*duHC@poHqJ)K({KAex_srOgy1^IhmY1+qA(v;r zjCvHsm3V25+?!5Fh7}DK>jH{k1RJ*S>%p7&vtgZ)I349?ID-v!gY(jv(YsZQ6|m(x zU-4+7+<*q@YbRO1mOf$&rZ{nweQ%I=NbNc(J`5Bt%JBWboW}mM*}zeGf}Qj6L{nVg z4$xO};Hw*)nw%~3yk1u_N9p$KE2G|I6CY!tI(k@k{*SHOVBfrMlcb6g!@zwRxQbJR z&4?@@%AT0wob%4OD=>Ye#hJ?EHPl~oln0T4%&>m<8vm$eN$F63p!ljZw;tT@BqbQ2 zv%>)a=}}GoO3>RhDaykg+c^{r>$My_8F3wPxzLSoVkyXDB#d!sQhfF|b}3$JvBuRh z;$Tx>!YDVoYp%Zse<}v&qCFSk00G3-zoGV->$L!Y<T`&!8XMx6Ff=OR0cxIFLrUl; z318w^*26I-{<RY{eg=e<uEW_QG?Epo!f#AGxGQ>DV?P~OD&?TmlFA6)mc{FkKII^v znE*~YJLGrKu!YludgIjj2y?yH?`^I-HP5VYlVbC96LeY{UyW#)->^Uy>L^WQFnH^^ zT<yxJN?wYde1UH|r!_^#=xL>`Evwg(in<7WIfzfunWXnBX&5}K#84o^T)207wq5i( z742y#KdnN=I(|y^%#SAXa+k#4X&oS08AZEn+~MjMD<twMVVzwj^5$U}OCtyNgouzM z&yCK2W@88T3}-j3D4whc-sKU#A{948!kcPKH-t~~<eB=VsInsM$m`CQZj6@DHv~<b z%eC8pn6ucvafSOjpd-OJo@DC6RHqOQUl4OIkh6EK0$pMMi&cVtaI7A~b}PtM_OF*- zPJu-%;#E$qO4R>`(S>1W+DNkl9UMC%AS&bByQQzfVl_Hl?IPH8rU#KX{PkPjb;sIh zOe16Z3-wc5xM0QZqYi+p=ZCvWsq5EHtIm=H(jQ<z`DGsMSyts)N&m54k=6A3OPWo? zv)SRWVR)j16<<WKwRpga^bqe$f7|E`jDTJcDJQD@?&hy2T2c(*Gun7(@oDdTJ{vY< ziY7EBbuL`0WlvXnSrZ0~da`<D&}apX#qYKmln8yRsIdv(o}v9V_K_D1M7r*8k~Pu} z?GkbcTvhHLuMt5L-QqloH|OpLK$INVKQ=A(DnE%`w9hvb%FrsYBQk-4rm@ZwSV?BI zvt&*|@C*3_`w*X>iHq!US6rIE=5bf#-l2a;;u$58Bpo)`46QVKF@3o8A?x|o2=&+Q z|1bcG0_Z3mQ8wABs&Qre^$J&jbn2F}NKP@HKilAw@JsJ@g+!EwXDyiCBlDh5d&GOn zsx5U665z;=i8Tww+GD)Nzm&;v$}V=4g(bmf)dqK|`?MtjX28WyldVZLY&wu$cOQqv z;(`qKfN($;-feuhee$A|p%=2?wKRri+8X&fyT-1rto5v|&#_m58}lkYng|}_NqDb$ zlxXmz!pYCiT@YRW&m4f^8$!q0`V+!0eB)(D4m_snQ;tl1lg!j&TF(Il*gihf#`|Cr zLZ^iLR{Cf?qzf?2QVbUcdN=94pQ(BQHaG^CQtXXrL)eZItjEQIf~F~5%RC#3#E`5= zM=lve@AEgzW8UxdBhABFid%R_saa=+MKc1A_mZx`)t4;R7`V5)yF_oqhWc$o)jRze zAjnBWDn^4-<}d|p6#c=jInWOk!PEZy>>6<3w<IFSr}o6{v=RgR8ID1OSMzC8RO>1< zN={_auaQrI=v3_@RVvN?6jmoJmakV&JKB#7C%-mbC;V|nWNE{1Vcx$J?m^T|ntb|~ z0{Ut2p*Ts#@Yy`Q3n8Nm#b0MUuagqi{b<2&5B+Y8J<Krt5A(fZR1wvm-E|>s;(i@x zuWa?r1wV+8e|^F}(CqgYu0?!-70*&*KfB_1{K0z~bzIIONgIzWC`i6VA?#phK^K;; zmZ*8ieKy7`yCPu62Ob^YJW#E)`%_FFw6^S^--1i7HBG)FR}R5RQvP`xr#WDuwwZ7- zrXl}z&zK5OrJT7ic1`%lFVeQSwMY7v0G>Fd+^UL+R7oaq7dJa=<KfL1g!rCsp9y#Z zr*J!r20VfhJ?o0|QNm{~z(!R+hB>H#nHQTJaelW1kFiF+*CXA@bKA2Q3^na4Vdt^3 z*({(T;up4+<IiNkxvVmTFbt!E0EH9eRC@LI&BMv&O#Oi1ZS>y{TO+J?VY`F$3vjhd z_3aTgzvj<|jq&B|iv#ZPsw1)z9)B@rG7tRO{G4r+{=`w{`R6hr<?9YX7f@0~0X5OG zlsIzM%3BOE3Y%Nu>&HR<HIOT@>EU(>_y)>;XLA6wJ9w4qd#B2eE$KqA;$Mu{J0Tsf zsrDP>*GN_bkFEK$dx&0iz&DQR|G3-Pr?iFLf8nUayScT<-_e@oAp7k;4amy%Pt2DE z$cA7tj^{Me$yPkI-^A;{5H*aPR^YMuQ?O#kYf=w}#OCCv*0qZhfXf*?0PamKyXyiB z#n>=$fx>3X#5rT*Od3H`|Hje3yfz79*BbKn)l=kNKS>=f^o55h@hhQXc)cp9H~nPe zm&|*)Ov&?Y+1&6iqic$6V_X9n*R+Zt3D6!REF%3Fr9M7Tq>+B>Lu9x@`<}I$Wull~ z6Fw%A7_CkHSCkC}KWqTFEP^uvrZ_HqKuMyG#A91;q1>hQ)PN*u`K3zlH%HCv*TOS7 zG4SiF)UU3NsB_x^;!3N-_jBJ$eW$v&5t;e=!TdOcF12|4^Tx(1fUSq`j_Z0|;AYnZ zjM2j!RDtmZPnn^<gG#XH&E_px5{SwmVl7z9!=B=Bb#C@hocS@BQ{2HR8t7JedbB#( z#P!HCbn#%M8)`<#d-aT70^=VN9CpXv=w?A5Y(BN$O3Cdl-=7UVwrel@+Tw1<f9rrA z?2@;rfrlw8vANMcU^@-<m#(1QzAHke&+a%gqjz4OwZ+W`9KX4bKIv*O+#!?NjBe%7 zJ0>cKw~gh$7~2WIq0EA=W@7t&o^nX2ZcW{+9J#}^w<$!NO2F7{@iQC*gkJyYUewH* z1@K!J=(pokN@^dP1#hZUvD)};IeBMjcXDS|j`<WzQ<^|>_+?ns1;y|79Ie}Vs!j>7 z^#<?!wp`Td|APdE2v^)4yz;MV=`=8_SP=go?ztwq;Kc28;O_*~@wfC=cMz%ROqN}V zgAyMFOw9}z!ahFTg4Yux7k@u~q00?fe+9JhAZQUYcp!?DEe!-<JfkLwtmzi*CU`7r zU5MlF_b{84)stqOUys}AfW|=td`}rCp|ih#xFT$9Q}#h7eeYf^p^HOS|J?5h4_YBL zR#@hrP9e9nYJ|D7e&}fsH^W-VQ1K}lN6GHBE52OUr>inRq}X5ZBdXglw-!D^(3t7M zYS{jWSRB>2C(@YJ_QR)p!U<bN#%o<mZ$ku$>JM2|893|6NcATtRBpA^cs<$Mv#vIF z)^;*B^=*9;pRRNo-ybuR+BB9RZTazkmTc_feNr}T-?pxnuU`TAnu6Z>#fk?3LL~Jc zcUx7;+np++cFUwrw(#=0`LW^3o~v6_1wf6eeQ7D*dILCWN28UbpF?5&^{^<7dd1cy zd3lulZJ<zR;Xew^m(7(rM#yL6%bo;Lirbq<9ONVA^!J-ooM;%h2-{gP{r|X%|5)QE z%xE!lb3WPiD*w~l8r8OmAA+phjZ6K*aj{loDcaTA;Z;n`PexF%`X0&lR)&`%;3R~T zwaW1RxWftz`$i4`{PER%(?8fjU{}t6%zucig{n|G|6d_JQ9mXT!M4$zS9>j&y|a#5 zF<6|fPw1=#6E>p;;x;kTtm)KkiLaFxLj-74Wsvs=Xm9j#uAY#WcHmLKeayO@tBXw+ zXjZ$?{g{b3Ob1K!6h*;b1q-)<NN$5{h{nGqK*jLj*-hYW<=S(^+KwH4jP87S!D05h zt3J<0Lh>7Ul5GyA69AhL)KSG0x3}&E_<MqwIo{cc@X{k`Fx(@y?V$MXUdeuJZ4%<# zZ+)S(&_hMLxt%^1a0YO_(IRY=pf;~@W)wv>**_f8ExZUKLN@nLD4qbHzphI&v)obC zVWfwc=l`)l=B<f*{rM@Tp+wDnbg~5X)^<QN-A>n?4<diw(%h1nO|$77lchLcazpds z3FbQuocBz*C?1AidvQ&fTUnVbL$UkHh09F)szeT)yq>^l$d_X=^#Wp5TO%`H7ncnN zS;MK{IM#I&J~Z2T1xXJUwZx0q$SIcI*6=*QgPr(vNNqojvG4Bvk+jEPc9RzK3lV<? ztn8>d2>8C*5z}d-qZy@tj3+Mn_m@N&kq1lbG7u`?s6U1pdW$sT3#&@I+<(^o`M#K> z(1BbkJo=fCVbk86XLQsx{@zl{7m+0A=XIZ1lLQ_`rOb)-3SA$aT%-|SegnPb9#}CA zcYHn<?QAjN6}2EG-9H?yhU}Vn(SSG7C^EOPvh0Y7xqEKLOaHqe%66dKJ5BK8uD#@f z-{_9P$k6EwX5fjzWBbYPe}L;KL<a5tk(yCLVcX}|{yX63ti)|w|4z%YCZUGiLsOT= z75<<0-aIPFH2fQ{Y0|RHW~{Va$f>l(CN)Q?RG4%sn^G%t%LU8S6xR%QBrCJcrJTkE zmsTwo&<s&gaG4}4wNgYuL~}tw#0^mac^}lumN~!QIq&zp=e*~<{Xyp-56^vH%jf!h zuKNPcbU`<@3Ba5lTqQeEwDaiIf`>R?I9M4SnXdjpIH>2%IlnD>@*HW`rr3?VCiU?K zjKN+%h2xUIAha_HGWnn=UmzH-*q4Vc*PB~KVaLV9$ajz0UJ=~2c`a7rIRmb#2A)&_ z_bI59yeJItv6-3(!)R>vx5YL&I7IL@!ivvC?yQ0-YJx#$oN8{20e97cHVBggGHBet zQ^QH_&_kX<b&<u_nU*oV@cf;5-5$6AdBmB8jmGM2-l}xR(d4Dn3cw<6u3k|O>hBNg zB%-g><Wb)2FwU?qGE%E*)tF{S4(k16<J$3K&0ysjM1(h7h;wvyHqq2vK9v;huc+&h zaQCp-+xEvC_*uoQ>*G1(mlFw&hsA$sbDNv;;0SR(r>MNOyenv^vOYK?#$y}Ou6EWe zF8o$n7MlF}q%X1{(#e9RV-lak3-XD`bqI?;leOwi$Bl&1dW^%Sfy=yp{+WvRZr-%C zgoH3U24iBua9N3$ll6Kt6R1NQsk!_Pwe;9fl7p`cug(Zp1d5#v!Fki!@BVz+$RJ&{ z#~I)md{&z6GXZh{-fw`D#-`NMddp154kUdrvlnM8*aq&N_rn{&<U^X{Ctxb8V24cc zyVGyoKL>Kko@`m_6K)byzoSdL39-SC!OL=UA=zaX%aPrT(376Ndy#s^Ntq8J@9^Yd z(j5~;<K-1zrq<&0A1Ei2K7_khImkXlz{aBDua+rteL41&NN2(g!xDqP40f>F)3@X~ zhkJyrH>HaIx*rO9pB-4=L?PM^Cy|(~1TU)%@gc|tnyydK#&b$I)q>M|Eg7;aoUbv6 zS<vFhx2$a2K3Q4*)CTSlWY0O_MgbRoJO2gNoz4!L^!O_|ki=@T<GLV~cSp^NP7!$$ z^rH>l)pH)NGL&CYAJc2AFu(Jvs$T$mXp_R?x?xHi{2&g>tHiGob)j}D{e2qK=k9?w z1@w0Zs8wVqR;;!Vrro7-VNG;f=oVvzE#w5Au#*T9zMn90JgkbP@a$Z$USxY1+2u%g z<WJ=;Z!rd}!MZ2yo~6&q!l0|3$bw8CO|J7hShsEYaB4wO_$`XBuH^yL*ywdc0sOe6 zgV&s@G97R)^eQr_^7K8}bJ98MP0Y5Eq0*BN-yxgzD(|mqcti`yYbb`VhrBOCs@b!> zpBQ@Ae%_Um#f^dr$C5EiaZ7^K*IjFY*v5+baVuBnnD!ea#VU*3m!9+SRH|BY>B+C9 zKA62@v8DuS@uB<qw)G`TBh(V>CULAr5aoEw&P;s;q@C~0XitIp%`@AAqT(ink)&Z^ ze|p}<@xG}iiMKZei#LY(uYZuEuqMqAD{no%B)B*@j`B$DA+`2M!xr1CJw_|)(U4of zHsCJBL+PV!9WQHByc)9-jx(=%482cjrC#e%fgRz2dz@w7asL{djkMs7NA)v3|GAl1 z(XQnWlOUnll?}7Fd`Ob-O;#=~8Mh^sXDXpY3<|I#FjYGky~+E<LKf4%lhs&JUFFIx z<LjTIJGbMPy8bl#qDxod0O6wFS?0Q2@>=8NX^P!vVVAG#mXuk_#dC=NQpc&b!pHD6 zwvjCAOA;vW^{+o7!}eW>_w}!NU6J*47oze;S6R8sar8~v-FRod0S86@2iUBRC&G$* z*tfykI=`@S5^k50vpM8}2|^;1M<he-5Bo;;U!WwE?;2&@E&io+n5INeN(eKubbjL0 zavl*U!tE!}kvHId!Vszjf=4opp8Z$$=K@ZyZ(fi^npY=Cg8a*kA|Xz2N77EsLw8jb zV$<3?I%(@bHEb}l@J7;nUb{;XyfoGKQiZXyv*Ju2*XvS+sI<PSa?Nk!hyR-F>>c%z zT-P;(^X^$7RzQBfxS`u~wC%>|l49)s$tcCN{%RlZpqVs&G2EYjN=+t2=uY)=$wOIE zl_hD^N7KZWDfCmp)uZfF(?knsPTiv?JyWHt8x4N05deGl7urTn?S68kL#wqs7iNc@ zIS#g|tovbDgnI|EV<|JV_^0^>l<h!5gT2p<%wCWfKJ`V#<vL&Hgu)8uKp%)!@9!ig zx1$iR!E#+cC9Ot6tJt=yqnl0ClWi5rDjY-eolV8z1*@8~)-+YTmE3QfNu@R*ZcqlM zXMK%sF5!#rCQ6KHjmqb;gIc>i6yy6*CyUAtjz?{b5}>AvS6iaHo;g;h<Bd#=Dvho3 z;l|mka?vGy{96XjaTazY%8wq-gw~cvD;}dceMk_j-9$Ah_u$jGvY7HlXI+&9uF(Fu zC(df`Rc&ayo-^Zvo8SA=U>1y`<wA<Us^+W$;qRz=8u*h-@+pP8rc+o3xfocBCQ1iN zG)&6UsZ2JpChlS7${;L69U{Dsk;KA4hW%zPn*Z>dV--GqjAwU4*f~*iWh&P75A#f> zlM7#9F@O)32^9`;A#ZkGem$EFC3ePCguP77(pshB26_d2k4T{00dnT3)AE?naEm={ zJi1Bw;}t*BgR*r^mS<XkV4=sv(GA@OH^eu|*}Y3W9g|w{p#>92N8n3W@-`WAVU)7r zBi6Ood*0^`744(4>e<j0kL^G|Paxnz7__Nk=*WgfLxiOPCn1iU6HfK(DZ7)pKjPUq z0%3&Gt2i0c>(!BixeY1wVq)u_4hH!XyqI0M_osdQJBLfG`XI<GJFF){hep3;wTb%7 z*FB>d^6szPKnWqavAxx+yb~c7r&9{2cvq<H^A)Qr7eKKu0o&a?DtP><uD_9jC%CD0 zFfNjyWa&RauWx50`jd04t_Bkn<E?mC9wwDC)*K?^YsCVn=YcbF$!AL23fdTq>jxC; z`tQ4YOK>P(v-g9AAt7*@)q{gSbRZCwtM#X2S1D3y4811u#M(M24*+@QD%`PE^W^T% zQjO^chetK?qnc&&_H3M6p}hy-8o!-bHvCi!8(y->1eU=S7B(K_JX>8)<)Sw79@~8I z;tSo=$M-e9Yr&kVj@rmA&6U{h!QQ((m%2-3`hkT0nvDhd|EcEr^E|vSpd0}R0)TIR z8yUn^U>wc${6{pLi<qGAq*EFALA?I;)ALMV9yXkHH*bagz5{ZF;y>fMUTdBdy#`Dk z(w%Lqaul<WopYDCVwP%@C3dj)&l^M8{_G#-5W&HgKux{5TP{2lt^%OwrsfOV&fgrv za-!H|>GA_s08bJEtn=hG?H0dSmwGYL$=r{>dH&9;ckbT2H7jBZdry+`!d>Q!+_wC` zXp54cH?F$(#)2j1mixbF&aU02W8(qA#SBaT^w_BX@6b{T?)I=&IU4?jrKsPrzB8$t z0!iAvcw6?K3ko6+P!PW^QV>`|`$T5_iUp(00sm0>x7H_ez!fyl6Lkv#GG|y0;Joir z0V=~Myy@(f#g+<Yd~1CsU&V#1zr$^Dlpy9k8e2GH0m}a{FB)7^fn+F0TkukEEfl7? zRa9ZVBP|F~wRuQQ_r;DcZ2T|o&uGXN96k7d+MFrA_g263Hy%B?hp^Z4BeH}`-Txdw zmdb$h!FZ-+)@m{%SW7jlW96ZSU?WvE<{AN0;uJd6AK~LY$D}_!I03l|i8$dyVLY>0 zgyODvvoU8_!F{CdIzR$NJ6?o*oCWyg>Z)DJU!p<#T;`YonPdBf0sjRIIQeL5tu1Nr zvQ7H@pLXg4>3n_*+g@?w;y9D0&v}h9%H@SO(4_;{D*2tmRsZ`%=KKTPx+!y=V;J72 zFJtB@NV=#h4d6+gvY!z7*H?d9B;e|yOJBxgic}4+0zap@p7{cZjsWrKX>~*4G#?GI ze^EalB)frh-UgtN!R>F*Xt6pg2GS^``zioL`Cr7tbs+SH4j0`Gd2QSIG;3x~O{xOx znZBcPoSgRZi+KD$V$Lc|OfSCnT|GD8LZnd#N)mKh$<Gj1{V4Y9Yy&*@9l1;O55_fJ zxwZJky8s~k+7vqF?Gwb6E5GmpfC_*qzAZ@rG!ST>re8pV640AiTxX<_r39b?^U61< z@PGF@Rlo$8IG)};909uGKh>(V#_y*1hM0a(&AGPs@6T3_4*X79sDRt`%pu_)I10PX z;}@=Si!^<-i(T^xW`P=I@|~KA*SmjB`z1awgHv92U%)G8v&%IJpK})dRhgHXAKiIj zS3B>mS+5z7d8a5O|N3vAyjx{BpE=)(I(%Sl_<+XPeSyEqL8sc@)K5Ed1rlR%g`UgF z-h&sK-4smzgiOr(?rWUXFLM6`?WMbbJZ%4_8&K69+iMlYz+Y8}6bNE?;vi^;&!}*U zX6Wy-@IK8q;HmcdpV02jSNf}1UNzW!cIYxs4ojTuAK1V|2aWG#rI;z)R;WY;)ph7; z;y;^({`;IcOUC@#Um5YOp;F+AHq#9#)d+L?4YEElhl<BNh)h~LZ573nHS2gEcR@63 z<{wqjM&t=mTSe6m2@HrAbBdoJ9_7hT3j;}0LB?cRsOa5Di@w6agq!46swL|PwTXTg zrjH~Ymb@nt({?V%f2l_UrU5^gp3jq==X0*ECDFC=^*wGjCzK(4gW=*hl?jB#7#JlC zG2B0Ce=Gz48xbUEfE{6GRd6c1h0qDb1Lo?2gzB&kE%jvCfx*(Ja5A-L`a_s?8w9}( z#UR8-sAK#wEmQB@?9aQd|1Nq<HytT6eR5BxOM>tb`c<B&{O~nZvw^4U>4EE~vS#$5 z&x6-bhs<7wGPsJhT;&^NY!OUvAf9Yhpozt*)$-RBl6yD;&MDvbq#0!>`t5w9ZO%~v zVPEePfDS{yH{g}GsmtH#6~^<(C9TmRa&MW!ArRMeY~oZ0n6FdtCx~DvK1Gx>Q3o+W zj@L6AE9Xq;()p+PZ<ITqLT@vGE#D~}dpZ&$Ve0rhe%_pW`znckHlgY%tm@EN<i4ib zE4_&A>Iv)bpf7GaLVWfqn1(XH4&r;O>zn)_>(!&Ab(zkcs0-VUkLaE_NXSTMtkUuf zxyhZHsDJAhQZrhg5pdx=ff4T?>&b&s3oc~_DH8orr9r=LO~A4eAocLumv~dB)Niqv zIpT3-GklQKhU=LfR0yd%R2C_C&4lh%x4pyb+`1#K09$wU<K{vm=Ii3uihB)sYeG`A zCn%EI8&uyDK~K~5`T3WG<&+|%UV8lf5Ju}1O&W*0URp*6i!P(BDg|W+nzmxGHqeI^ zQK+O@3VCXptLLEKSobM~+v308d{?2_Sg4u0-QVOx*ngq#H{z#|k-lg!2YuzGn?{)U z$=$Yo(NEf8AU35Za9il9X!WKH_2k{b8Aa6hWj$e%AzA2q@lS6j!e<dlvwcEgl#${# zgstaCcF@Ijn<pw?$<3}2fT*M>&+i8@q9%OiWv;$#vNYEiqniNhX&Rj>;<RA<@><5- za=gn9OS0qnGjz`n9{F(w9|0^t${N4OtGRe<S%8q*Yj7vVmE*pYe-_N#xdwQBvDS-k zS*D?1%IAwxDn8@R&TnvMMSXI|HNWto`>`)$J4qJg_9)Gg&q+sh|L$f1;u42$n@1<Q z?uSj9EuSxu(wD{Z(`TN!pw%Ph5x6<9Bx^BfBj)qq>rjz4XRez}tet)<#LI8NoHlLv zR7?s1BDYuqy)m5QaOHzVAxz<BRg+Qv>1MIOi`0f~BO$$uOVTcW1~1jLx$^%t6N+Z6 ztWU5U1|%?@8ysn593d&YywZg<qlQOs-is-PJpWCmw+Iz$SpOEJ_$d@FMkBw&IRt}s zc8(S;U(hdUyZC#|6GW(<NV_ikF#x0)J(ToyJOjqI0uyQ855Ax#Zu7qXRx`SRQ(W{% z7rNJTk@EkR`ALD#)%X9O)-2@7yt*i=Q?!aHMhBIAN8ujx0eUAren9iY@<TA8T^&kX zpIIq!QYK7~ryX9p*r~e5zG5;CfcO0JU#r0R#}qyy3qUd^n}I-SeH6;HBYKf2==r4D z3EsRFytJ)p<;6gKzt4HL`tPsM;vXPzR5)XGr%YNt_DQ6~KrCeo20Kb-{HEDP1}Dwt z*aGr@<UKnDcl~Mpe9if-z6P|1#gfUOA6z?bsVv(4<F5i5fRy37@`@r`1^%Kab%g?# zdjcJKq9bv}Ql6414P95}|Hyj^kbUS$$I1mMbspfbiWkMe2NS_Pi&E+juRqLpZN-Pr z-5BtN2Y^e2qFw&^6f=`W$=qfI;F&|xnLOS<SfaI=!JM{l3;CaT&kso0bhg;me;%!* zXMG(%x<a*<)HReYVkO@TC8H2G@%x+_7D@DCr1eOjJg*Tq{;q*8h_;H<iyT~)B?k(< z<~CVIq7lpFaVNAtMqJmJlrVqK=6HnlY@H|RXW~R3g3hW@(fhMgcdP#;mJT+)eRL!& z%6ztHB=v!ZHAwxW5IO1A{UNY&Dy5{ZR!=C>BIX#Q^gY_6lw2ecHIA@r!h~DEFXH`b zV$ssKyNR;Vv3b%jt9UJ4kecB1d$(f<<|a8uwTCk62C6%WP`<@{_*AW3IX**+0}JEc zoEb#&Kb}N#zmoaV9HIu*cFKg;7Wxr1rbQz&-F{;%=bVD$>d#B61JqVvYu@cjaao=T zH*0K&Z-2r7O*@TuA7VCA_=L$@E#8PXK;4Kb6PK}rOIY6QL_Su2Jg?lTziccZG?&YO z<QbyEE+<BgIUz_o>dhrGu#K}fV{FuBn7Ek^F0aG$h62P^c-DZJDY3lOHpm__ar-EE z%;sX`TYrke{V?>k7=__yDjk|Fc|SC1%hegmMeB6a#xdhXBXzFZ#tQv>_naztss7`? z4oHy6Dzth~Ab~y-tQ!v}2dtkm)b4#94DJq5!+`gn?>{}!QR_Mj7*!H~6feGgo6?4C zgSC=Om=k4&YFR|*ykkbK&*e%u3hUC`*lF<_nP;<#dMa#ZwO4(Dof7YFqh7F|Zl4%p zgO#uC#Hc;g7@$1w`LK5CJSHNHn!4h0p6kTzL-ZNTnCB0x2Vd$v+#dvahhE)74_;F< z9_q6iMjClKaxl^|Vzl(`Q^RE2Y;Omd*U4d+H&tipJ&<XGab9uHIIUnWHM=J%$}^3K znsjT};_@mna^Ue^k0fT1#bmv(M_3@U#A^tdF(v+R`w$SVUA}ODhrmzx@EK#25bq~f z=U`9>H2$MZG>&YH+~E7Nrc86^P-eX|X5TKecZS=&VDzrCS9t;W$b;b}r}kRrr`>(t zUZyEYIY&<xIU)9RJkOJRX3b<HZ=PDM8Cv@`D1VKT2^HDw_RrN`Sgu`+=l-#K@)nhO zdgo@c1bZb!Ir3P~IPd1Belm-R-D?*T35rypb#jv$n|Vf%OtH|7wJE~){80`wS<jOK zFW`;|yxuluUsW1Pit`-n5UD@n7_bIVu`(dqNnSE2?a`^3eah%)u)&Ef^T`M_%D>Q| z07z!~ZO037@+%K5`>?ZW*bHZLFSQ1L`_R?ZmtXK!`XeW;yO+U#c-)^dl>Su4x64kZ zggc$bI*K(VJ^(!xJN)4U^BfWl(%>XaBZIol@*3^bWb{PZ2tMzHCON;c8EO7gZR0b| zLD~Tc8s5V4*YXP+fGA@P?)#ve=-J);T+en`f0?ZThpszXnuaM6r~KX1V&$R(v2!Lp z)%%U}E*(EvvAda?ZxSL2VqzLQpA_E~->DQ$a|Xj<Q)fm8l7lPsp$*FJQ0OK}+u(uw zB72pJ);P!0$DCVYq}blY1ppWDX$4Q4`JBnNn76|}Dy6p)MaJojA$+q6>ppWhrddTC zd_EYwjy{;wT}qcyv{Hs&2|2+(22d;^_arCJTO3O^E%~6ZGW#wA`NTFhKWwCQ@X?bs zSaeSsM?kG_vbmb*{zod0ifQ3C-G=4tC2#iWJo~e?Y|gY^p5Vm2jO7yt2shSpyA!<V zE>Xwc#+yykRI<cprbJ4_pJ%!taWK%O)*iecA_yihFlf5WxM@13Y2G>FROCUKmhshL zZz4Y~;GQ!lj+X6G&+4#IWf3jQ;wF}wk{(3-zS*C4cXE*IMFYOt`%JpEkxU(Z_7R-w z3qxh(LNA9$z~*N-lwI!`eAT`Jpc%`$TE6<t4a1``EnzG6mE93(Ys3V+*sEoVE4t@5 zgd29UNGz2j<<Q!l@`hmhJcX*m5My4W(L3U>c%5r&-j$xfFtjbp3j<!Uqqx2&-OZMz zzUmB}^Y|i8{ta4u!X6gqJY*MfbVHq?@2jXr@Ap}p2d)t|^w-8zP2VOOE#ARs7Qnye zAm81PEyAM-77kPo(uc5-)VORNU!hKvs6G@b>xRxK7K(jnFl6HHCvJ>g&=85mvAkvC zC8>dRKz|_mv6QC*XB*7lV91=S-g9Fl0JFN%d&K`wmKyBp%NKjIYgoU!s>**jF|xt# zWWw@SHia$e4{828&kfO%Ws{}_l(6Q%KCD|&;_GYHJ8>$cvAU?Qce|QVRL4m*x^9_E zH{B(uQ4fhe$bk%)se2^g-2*b~!=;HT@b#X#3(7*lp8p1gNTS$IJ;K#A7pE<m@SVn; z6He$`O;eC%1Pbq{zn^GoR!mgr89q^2H?wzaskwF5Z8(NTg*1^?kG(E=#F@_BwLrZJ zJHJvNfCeCCs&H>t?OYyr#B}UJ{IEkk=Q3V%DBpCfh+4j>ubXqy=+F<<!|4s9Xl$^* zo#>y0-Gj8BvHBY?VJ^MO^=~K&iXUX}TYu3u>28H#9)yKzyD)-u3WT&{-oM(s!Ub2b z0;9umLYJ82Ss6jLbdP4U(tIMI+0e=BI#>70H$M!vg`oooW&Kkmr*rHS+ZhEKh#X|x zq9clnQr2~Uq)Hw$&Vv^SsR|E$^E=wfZ14G8>zthTjgUBIAuQ-zIHf3Csu8x))>r$& zDaDk&rEti*r!}>|tZNV)VOnKqRc5JAAD69HT7Hu;3!gcb@o-gr56<rN;LQ4R&a#oH zH`%npU0vxxN6!}xS9oO^G}U3?Fyk?|4;?nYk=1qdS6|Q>cS4d*Fm#@Se^Srs8OPQJ zHGs0JWmf=BKrx=edy$ODteK+SwU8I%E*FTC;u$9-dc0)X#d(2(xdN={3+*>={UL+s z_LHT~%cBr$1$CaUZF=~^hvNKYZ8q2Fn66!RT_r4Sn2LOb9rumdNPpWdCo64VDt0?I zVWTffZYFPisjs7O{Q!c_$?7TNxTPH{KILWXlH3%7cVTPoaAT>%BM7j)9#1oo$M*G~ zU4K!59TvlSRU;<aQusHJh6<5nwytgMBrfVG*?ZrLdII!;LkUiuJQZs@t~Ug^@Y35j zxN=>jpog+gnPW`@i(MkS6d$8U6`<jEJyZd)e4+g=WuX62<iM?N-7L0DNU(XQr2Az< zR$zsk6Z+7}zxSV(+a@HR`g^~d9o}YpCl9=OH#*2B+AU<3&A-q&EN1I%;v!y^WCxV_ zo3*!2Iw^!4l`{|q#Y0)hw~g0lA4NUJas%Cs&;nav2n%8TBrP6J>hIY=M)n%(Jtw{i za@UwTOD7=ziRpDiqzt)*Gz_j6Da9YR$;qCi$ZmBPH=n&wk=4WBfnv$}=0XNGl3dC$ zSoX(5*d8Fh7WXse6w1)3iVxzr(tHTcd3Eyjf2f|29uf>ZTlYG25&hK#ivBk=y;_}A zZL5S>bTr~h`Y&qBnBr06NTa)57D=gFUmd~C$+JSTe<9_-$H0@efZKGw%j>F2%*G<R zdx!i;8IX<f1g_<teb?#0!A6H)QzvRysU8!n64c{fu}DOes(;l-2Q1JbFXDGp<q^t1 zcWZP5%Ki&I{od#Z>YPj{^TRCjGN1Exa|bX1qYBm}Us0ZCv`CO8&y%UI3ojsd^hg~l zLHv_ei=2ZYf17Y2%TOlZ5jJLckqMoEv+n8q!$p*k*LKXO_czUnm?45xla9Zx)U&hV zFN{vk)&6i`X^WdgI|0MO%c7yEZ51;#^ovPRSlAYEo0wXgr(?XrjSKILn0_(R_OMSc z!Fc9EXn!Br42dZUa%zR+T|)IME=UI71!G8cmq$c!bP0}2t##JQl<-I1csV~T9(f7O z!aUBMZ3sQu5`lysY?KT*q^Lg}6|<ZkLOe23!<oRZ+5!_s+17sG%KnMz<QBjE^czg- zO6$wa7u$RhL)o@NWVw0s0a6y&<0ugu*&LMzUKnSPj-PN<ILb?iGc@gPTlL%wqH-qo za=+%wf=Nd;eYGk-=vLHLnQITDkzuuv{BfJuUeD9Jebfqk9SPNKy*(3anN|tM9h0?J zK0hQxyxa386g8RRA6!r$7;$Yzq0%>)TODX&A#|<Sh@TM%_R;#%^dTu|uRjVXX;NFd zCVa=1`?m+jfUA|3=O7%<*zYO%HFCz7y7mq@k1AYSG+aB;WCywf)~+M}ATl_8eq5t& zTmJSe^@oN};GLu^oECn@ZfhQXh&ABTnBu?T#PA7oh-waJN{ycH_qwjdV18ImdgAaO zjRj_B!-(en5pRPaIV&yOAxqgp#6|o*Som}E^~&JrfN-q68k$Cn;@a9NC1eaN6P->h zO*?CF`og4rY74gi^0f<bKBk6&vlGgxvw_-AVP21sGhv7VOcugqEcmfoF^3!+w|pRp zyKhy)Uo)7iHWuZ<`Rb(i#xB|39C%-kciJfr7DuQ`PxZFVeAveNK_CCYE%F)sADNjh zLRh6T_L*UiTW3ig+{zknS5r_^T{wI|#U)gCMrX+l<nFu%jzdQC!wXkIyKH<NP12r3 z3?1J`&Mg?6It`_dKN8>t%!F5i>!VU~ti0ztl2x<c^mZ`2w~`hnY$|~+du@HYw-Iu; zY6u-@w*QQ$cMp^@fJRYAw`jbvXauo!;MdxE<r|aL?rDX;S3Aq`Zv_3l)Flj49KeZ^ zsE*H6j-}h|>5L&eI9kG1H$7rKv6|o(39)CJezaQZpLXFSH0KWke$HOca+i$(t<~ok z$rV|(iN&iUtSy9Cn+7T_@0?pi=gFi8nGJhSz-Y4xxV&LIxfg`DVe9XZPNkgV*biH~ zXipZDxon8Xi;-(Hn=Xx<M!)`paBh4cCAp^sdGW1-FS9Aj0WuI|oi}#*a(Lv;;9!vI zb3~kQ5@+7}0hmhS?~TyE`?_C*G<gkYu>?qo(dYTmx&Ch2I-c+qn2Qfz7{2QRaLthr zy)Z-?2n>;CUoJOXaWv0~9Pc}0v@k^KvTkQGH6z!nJ=6G>DwN11DeOTLJ+-g*;AX@J zm)p>5mMoDsJpAYWlk9!1)FSGMJ+LbnrRVU5uyQ@`$w6SSkoG&zb18!GL%D)mb5x%` z^AIpg+BH8*T0l6+j(C?98F|K;bE*X@5MI#Wzl>dW0F}m(7dm|&CY>M{l>6_?24A?J zdNN@Gx7UA0=_g>6_VT7|w@8z8g*|bPi{@KETfT+#NVtZbqH^PkwljYuFTYn*>Ab|K z^fdO;>;AMYsO`@qOqQd>R6|$nviFcB4bmynUH{utq$iHiQEFFuEkFlpu;&I?2NdR) z(0Bw&S-)X=T#rqEd&_xKa~tv1=^(~LlzylCT1Evd!LGAOBzyyWWffT1%jJ-G<mZ)s zs<9vENZCTiP#2u%2r%2Hy=tI1I6;kv3s)7r`Eec*?f#Rq+yy^<QRW#7w;540D=Vtn zz3K<fy~33<AA&H}_xAo|Imyjf;f97k>MC6$*Tb2H=ZW7N$Z8YE;l0cRi*#F!f!EFV zgM5VdvUXJEb11i7{JG~;OaFu5$0ZnG=#u37n$!I_xwt%M@==KgE>*SpL4hLosSs?> zH<_*e%ezNECogIp_1D@-V1jh!Ct!kf`c`7anohXZi_k~m3Z!fWH*aC(ATTrvIVv3* zoo1-05HRYs!F;M9^V8TU<vXl^Ug4l)+YkA(u=U5VuzUM9mQwG#M{UWh1cyb^P`})2 zpc$WQwl8&9e$V}F8qCeOYKW{EL0V}s?rMnJi)@%_$Kk^Z)?6ltpK*T2QlL5TTc`&3 z`$*;liR&p?afgB%L!zTB;|~9HktJ2$d#L7#bi9@tb+TZ^U0K9+;lHQs_#Czkl%1VR zwXez`8PZs6)rZ1IkbGkHrpH(Z;X!%%&MY>wpFfPX#`y;P#>-p3Q2CuQ{;PN~&=ZCi zRE$eLOuQHoiF42_lX%&|(bCAiAeF8EupBB|V+N%kycm!i^8~(Cs(;^sYZ*M~&ucPC zCyZa6d7h#7_9!dAwn0<1LGt7bBCcP&TQn>g@!Xhh810Y0wAVi*JUBcob5Gr9%C0AV zw124jmM3l9nkoJUVGdM`fx!;b!T#_tCfP1nf&3`<xVM|%eN2$jt2#F!WCPcMYaQSH z$}0G%9eyeW{X2#+ZO6Y(<#lS42W!X$`L-1yk{XQ|;S0Ag+Gb)!6r?{aE|;T(t7pDW zz&7-<RLUm3civP`Vy8{D7sD5htGm*^Q!u$#dwmPrt|X0)YB5@4Q{4l~<bL7U(DKm3 z)nU08@sXr8@z&dE_=gI!ukIB-efO*C5Y5RsufQ#$@j|BI8<z}8j4TDzrt0#r4T>^; z^XpNr>9CE-d;KR=f&Qu>>m^Qt#~WkIAxN$k-6l&buYU92E=cpYvNgUEpzS$xm!0n2 z-U_DVLk%geZvyj=>=WEGiMuZ{#>RR!!dB}%-t_o7Bj$bpu)VdF;X98ZiP>u^1rxIS ztx;|f<H0P<d+C_y)#7qINTwjuqVu^)9K5~6OaEz|cq&<li5Lz;y=e;#wLmUV(5~G7 z>a}BM4)WhOf@)v*y%-+0)J@YhRQS!hEu0G**9{5b;5%RIRyh+S?kQfE`i)!ETm3@F z#{L|QTc}PD6N^J}C6#)Ry15aauJ18CUq%%x&lSnUy4c-p@P4=NH?y%kj5GdK1phwS z2FA;6WX_L!QfaLyBPUk4sSLs{M9M{@k-sOJj=dIb;*7|4PEQfcDjoFjJnjDHS*Pcz zYB<0jkrmSvk0irI+*SFBypzYC%*ORtjjdU@Uo1x6$|`u@-!R8o2>@+#VcO5MpIvlV z0-V6S`$MioXB?h?8IYO7S;O;WJfKVFRibF9-@3aSFFgoiN=F@oKaM(nuf{h_PK_3f z42fAakj`}P;=>=aa8By^(5u|9_6#}|DVUzGei<#hg+MGnF3hiz&Y56<_Ch2bjKO$5 z`}fm{CvY%mcY5=3dh)bEi8Ua9l<s_5*Ogwoz#w+IrpY2Mu3PB4EO}#mPS6X;iu&bS zWYurk-w)$!|4y-w+vw^l9ks+Gd)VQcM;2cbuwLdwAu<)_W)uU6HjTaWupuk$v91T_ zG<v=NsOsh}q8sY2k4KFqWvy27wI<hnywA`K`yjXYhh%`5mP&o%%PcL=tp9ldg61~w z6chdQo)M9_Ybz|o$tMRe^RBI)Qg!9pRVBYuzP_opz2Ur3WuQ8Z>$0cvoxhf+z?8s{ z*YX4oW@pY0;ElQmw))}G+|eG#?pa~hD!ah(fppDnUu@-^Olu6odjIqR^1qu_erthb z`M;M=$7yBCd4fT~+RMh2Q><co^>k4wiK2n2l0?yQ#bh&d>3~A>=Qp);?|M*0Sn~?p z4lS`+?13s740J2>sqGz*r*^%Y`Rs2^Q4v$Q*sx?uZ_W9|vFO_M!!q=h&K=vC7nplM zig#8WT(d{Hz3*-u&7)5`!&IoYjQZ0ZLBc67^|JH(&1Wrm!jh5rW`f^UozjiO+`HQw z;dd1m8B*xx+T0~PJ$Z9n4`>}bnK#ZwOVv`9HcDb7-)XFe-fdz<(lHL?cmaP;ml}A^ z%F>6@s;b&6O!Tm@cN)C19$$Q;!FxZ#W8MkjtA||8qfX6^HexIJnIkO`#P)`f<=|Rd z!B7)h-OYW`U?JvJRd%(Yc1TdboK!O%<D?d@`l}^l?oQEM<x(JJT&|&>6nCZ_%1?Js zaC!>DpNQ!_q=l~qNA?J7>l<=@?7Q@(ja=iRV^@;E?E=NDsmCL4z(kliF=J)<=07v$ z!5a|H$)Gz~oqH6-h8ylMR{_5w<Fvf*5Cz0DCWL__$MK@uBLkptyvhdy@V|DrO)tU< zE-aiMNtfjcUG4L8q<?vn9dWFw77v|@4;a55q%qAu+O~Wfd%=RitA{+yqdKniii7Gw z(lgx(VP^nOfn;@T*H*#)FNO(^D!2W<gmjLioQN8Tje4FM`(io;+A)}bQyT%n760(n zx_H79uxqrlVWF(X^!%{nzhun6_lz;y1p{}*_Ak!hZU-)2AVFrA90?pIY0jF(c`Of0 zN4>ac+(?$TQ9fm)k1N=8EQuYcP38yHC-{TGo})6{p*lu?YAA~r1`GYrN{tCg@05q} z4S3J)oISJc`r-Out!?ar&d=dY^>R>hYl1K?z`2fv?~~DR+i*6uV`kM&dk(h@R^a z3{{`qTP3onLCJFTriK1g6=LI5224ci?k<riMzNG)>Hd-$$r}Eo0M(6(c`j~kk~F>b zmuwNWHsR^4s9{p<b8%&s*k8ksG+ivgF(9+TZZH&h;6;f@ztjCiZ%}I*CYwo0Q9U^* z9Z^PtILAZCPnac-;8ASo6_~Id1)6QO5)npHv!?Lf&Cpr@8tm*8X$@&cNn$f~mo!4? zwu6l6)Z|1BX?G{1CbD9zW(T11DDEMm>MUD9k~DGzG)wL-07F2tV+vy1sWJs|_|#OE z<mgl?NQ4IN4IR-wt%OeyS20&mamb0wS#ngom_PDPfu^1<1Le=?#3DPQ#`sn;3r2XO zSC}AS-t>)1k&x(MhJp(dIf!7~<bCMairdj}|3l=jjd>qL>;mxY@hNT4><N9|jdAQA z1t3SYfe()wcTp}AL`@Q0L(dLrRReN_eYbZsA@m<q#dz<|+3v<}5KlE<vnlHcF}(LL zr^7BjhwwE<3B(enIw~ZTwVZAw{a@(IljDVod`m0Gox9aa3MgGgA&{RI2C8+*7bP(N z>C8TED6DN_nhRDaJ?Ga_k=2l+4$bX%%sW)@?;+SM%HGI@SIoHk?-JnO;RBX`VoY5x F{V&L@U_t-@ literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..097fb1d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,967 @@ +{ + "name": "@alekswilc/ray", + "version": "1.0.28", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@alekswilc/ray", + "version": "1.0.28", + "license": "ISC", + "dependencies": { + "@permafrost-dev/pretty-format": "^1.1.5", + "stacktrace-js": "^2.0.2" + }, + "devDependencies": { + "@types/node": "^20.14.2", + "@types/uuid": "^9.0.8", + "dts-bundle-generator": "^9.5.1", + "esbuild": "^0.21.5", + "fast-glob": "^3.3.2", + "typescript": "^5.4.5", + "uuid": "^10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@permafrost-dev/pretty-format": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@permafrost-dev/pretty-format/-/pretty-format-1.1.5.tgz", + "integrity": "sha512-hPS1xNAu6Ca4zYwyi8+ZE7JkG8uYrCGSCAHbwLqtl63Jmfe+zLKx/BRaDUoNCAtB9EfOJTdk1CzQmVeWWNrgGQ==", + "dependencies": { + "ansi-regex": "^5.0", + "ansi-styles": "^5.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/dts-bundle-generator": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz", + "integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==", + "dev": true, + "dependencies": { + "typescript": ">=5.0.2", + "yargs": "^17.6.0" + }, + "bin": { + "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..aedd88c --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "dependencies": { + "@permafrost-dev/pretty-format": "^1.1.5", + "stacktrace-js": "^2.0.2", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@types/node": "^20.14.2", + "@types/uuid": "^9.0.8", + "dts-bundle-generator": "^9.5.1", + "esbuild": "^0.21.5", + "fast-glob": "^3.3.2", + "typescript": "^5.4.5" + }, + "name": "@alekswilc/ray", + "version": "1.1.1", + "main": "./build/aleksray.cjs", + "module": "./build/aleksray.mjs", + "typings": "./build/aleksray.d.ts", + "scripts": { + "build": "node ./scripts/build", + "prepublish": "npx tsc" + }, + "keywords": [], + "author": "alekswilc", + "license": "ISC", + "description": "", + "publishConfig": { + "access": "public" + } +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..cc16f6b --- /dev/null +++ b/readme.md @@ -0,0 +1,69 @@ +# @alekswilc/ray + +Lightweight & fast [ray](https://myray.app/) integration library written in typescript + +- Supports ESM and CommonJS +- Provides standalone bundle +- Supports node 16+ +- Simple usage + + + +### Performance +- 3 requests took avg 28ms. +- avg 2Mb memory usage on request + +### Env configuration +- `ALEKSRAY_URI` (default: http://localhost:23517/) +- `ALEKSRAY_DISABLED` (default: null) + +### Methods +```ts +/* COLORS */ +import { ray } from '@alekswilc/ray'; +ray("Message").green(); +ray("Message").orange(); +ray("Message").red(); +ray("Message").purple(); +ray("Message").blue(); +ray("Message").gray(); +ray("Message").color('red'); + +/* LOGGER */ +ray().log("Message") +ray().info("Message") +ray().debug("Message") +ray().warn("Message") +ray().error("Message") +ray().error(new Error("Message")) + + +/* FORMATS */ +ray().label('TEST'); // set label +ray().separator(); // display separator +ray().raw({"test"}); // raw log +ray().json({"test"}); // display json +ray().pretty(["test"]) // display using pretty-format +ray().send("data") // alias to ray("data") +await ray().pause() // break point [ASYNC FUNCTION] + + +/* SET CUSTOM ORIGIN */ +ray().customOrigin({ function_name: "test", file: "test.js", line_number: 1, hostname: "aleks-desktop" }).send("test") + +/* CHAINING */ +ray('test').color('red').label('test2') + +``` + +### Used dependencies +- [stacktrace-js](https://github.com/stacktracejs/stacktrace.js) +- [@permafrost-dev/pretty-format](https://github.com/permafrost-dev/pretty-format) +- [uuid](https://github.com/uuidjs/uuid) + + +## License +The MIT License (MIT). Please see [License File](/LICENSE) for more information. + +## Credits +- [Permafrost Development](https://github.com/permafrost-dev) ([node-ray](https://github.com/permafrost-dev/node-ray) under The MIT License) diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..289ceb6 --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,87 @@ +const path = require('node:path'); +const glob = require('fast-glob'); +const ts = require('typescript'); +const esbuild = require('esbuild'); +const fs = require('node:fs'); +const { generateDtsBundle } = require('dts-bundle-generator'); +const _ = async () => { + + const sourcePath = path.resolve(__dirname, "../", "src") + + const entryPoints = glob.sync(path.resolve(sourcePath, "**", "**.ts").replace(/\\/g, '/')); + + const outdir = path.join(__dirname, "../", 'build'); + + if (!fs.existsSync(outdir)) { + fs.mkdirSync(outdir); + } + + console.log("Generating .cjs files"); + + esbuild.build({ + entryPoints: ['./src/index.ts'], + outfile: outdir + '/aleksray.cjs', + format: "cjs", + sourcemap: "external", + platform: "node", + outExtension: { '.js': '.cjs', }, + bundle: true, + external: ['@permafrost-dev/pretty-format', 'p-queue', 'stacktrace-js'] + }); + + esbuild.build({ + entryPoints: ['./src/index.ts'], + outfile: outdir + '/standalone-aleksray-bundle.cjs', + format: "cjs", + sourcemap: "external", + platform: "node", + outExtension: { '.js': '.cjs', }, + bundle: true, + // external: ['@permafrost-dev/pretty-format', 'p-queue', 'stacktrace-js'] + }); + + + console.log("Generating .mjs files"); + + esbuild.build({ + entryPoints: ['./src/index.ts'], + + outfile: outdir + '/aleksray.mjs', + format: "esm", + sourcemap: "external", + platform: "node", + outExtension: { '.js': '.mjs', }, + bundle: true, + external: ['@permafrost-dev/pretty-format', 'p-queue', 'stacktrace-js'] + }); + + esbuild.build({ + entryPoints: ['./src/index.ts'], + + outfile: outdir + '/standalone-aleksray-bundle.mjs', + format: "esm", + sourcemap: "external", + platform: "node", + outExtension: { '.js': '.mjs', }, + bundle: true, + // external: ['@permafrost-dev/pretty-format', 'p-queue', 'stacktrace-js'] + }); + + + console.log("Generating .d.ts files"); + const dts = generateDtsBundle([{ filePath: sourcePath + '/index.ts' }]) + .pop() + .replaceAll('export {};', '') + .replaceAll(/\n{2,}/g, '\n') + .replaceAll(/\t/g, ' ') + .trim(); + + + fs.writeFileSync(outdir + '/aleksray.d.ts', dts, 'utf8'); + + + +} + + +_(); \ No newline at end of file diff --git a/src/Payload.ts b/src/Payload.ts new file mode 100644 index 0000000..95fed4d --- /dev/null +++ b/src/Payload.ts @@ -0,0 +1,75 @@ +import { v4 as uuidv4 } from 'uuid'; +import StackTrace from 'stacktrace-js'; +import os from 'node:os'; + +export interface IPayload { + type: string; + content: Record<string, any>; + origin: { + function_name: string, + file: string, + line_number: number, + hostname: string, + } +} + +const LIB_STACK_SOURCES = () => [...(process.env.ALEKSRAY_LIB_STACK_SOURCES?.split(';') || []), '@alekswilc/ray', '@alekswilc\\ray', 'standalone-aleksray-bundle.js', 'standalone-aleksray-bundle.mjs', 'aleksray.js', 'aleksray.mjs'] + +export class Payload { + public static create(data: Omit<IPayload, 'origin'> & Partial<IPayload>) { + if (!data.origin) { + const or = StackTrace.getSync().filter(x => !LIB_STACK_SOURCES().some(y => x.getSource().includes(y)))[0]; + + data.origin = { + function_name: or.getFunctionName(), + file: or.getFileName().replace('file:///', ''), + line_number: or.getLineNumber(), + hostname: os.hostname(), + } + } + + return new Payload(<IPayload>data); + } + + public constructor(private data: IPayload) { + + } + + + toJSON() { + return this.data; + } +} + +Payload.create({ type: 'test', content: {} }); + +export interface IRequest { + // uuid, payloads, meta: { my_package_version: "1.0.0" } + uuid: string; + payloads: IPayload[] + meta: Record<string, string> +} + +export class Request { + public static create(data: Omit<IRequest, 'meta' | 'uuid'> & Partial<IRequest>) { + if (!data.meta) { + data.meta = { + aleks_ray_version: '1.0.0', + } + } + + if (!data.uuid) data.uuid = uuidv4(); + + return new Request(<IRequest>data); + } + + public constructor(private data: IRequest) {} + + get uuid() { + return this.data.uuid; + } + + toJSON() { + return this.data; + } +} \ No newline at end of file diff --git a/src/Queue.ts b/src/Queue.ts new file mode 100644 index 0000000..b8310b4 --- /dev/null +++ b/src/Queue.ts @@ -0,0 +1,34 @@ +export interface IQueueItem { + res: (value: any) => void + rej: (reason?: any) => void + promise: (...args: any[]) => PromiseLike<any> +} + +export class Queue { + private static queue: IQueueItem[] = []; + private static isPending = false; + + public static add(promise: (...args: any[]) => PromiseLike<any>) { + return new Promise((res, rej) => { + this.queue.push({ + res, rej, promise + }); + this.process(); + }); + } + + private static process() { + if (this.isPending) return false; + const item = this.queue.shift(); + if (!item) return false; + this.isPending = true; + item?.promise() + .then(val => this.done(item, val, item.res)) + } + + private static done(item: IQueueItem, val: any, func: (val: any) => any) { + this.isPending = false; + func(val); + this.process(); + } +} \ No newline at end of file diff --git a/src/Ray.ts b/src/Ray.ts new file mode 100644 index 0000000..8837abc --- /dev/null +++ b/src/Ray.ts @@ -0,0 +1,252 @@ +import { Queue } from 'Queue.js'; +import { ArgumentConverter } from './argConverter'; +import { IPayload, Payload, Request } from './Payload'; +import { v4 as uuidv4 } from 'uuid'; + +let defaultRayOptions: IOptions = { + uri: () => process.env.ALEKSRAY_URI || 'http://localhost:23517/', + enabled: () => !process.env.ALEKSRAY_DISABLED, + +} + +export interface IOptions { + uri: () => string; + enabled: () => boolean +} + +export class Ray { + public uuid: string | undefined = undefined; + protected origin?: IPayload['origin']; + + public color(name: string): Ray { + if (!defaultRayOptions.enabled()) return this; + const payload = Payload.create({ + type: 'color', + content: { + color: name + } + }); + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public customOrigin(origin: IPayload['origin']) { + this.origin = origin; + return this; + } + + public label(data: string): Ray { + if (!defaultRayOptions.enabled()) return this; + + const payload = Payload.create({ + type: 'label', + content: { + label: data + }, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public separator() { + if (!defaultRayOptions.enabled()) return this; + + const payload = Payload.create({ + type: 'separator', + content: {}, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public log(data: any) { + return this.send(data).green(); + } + + public info(data: any) { + return this.send(data).green(); + } + + public debug(data: any) { + return this.send(data).gray(); + } + + public warn(data: any) { + return this.send(data).orange(); + } + + public error(data: any | Error) { + if (data instanceof Error) return this.send(data.stack).red(); + + return this.send(data).red(); + } + + public raw(arg: any) { + if (!defaultRayOptions.enabled()) return this; + + const payload = Payload.create({ + type: 'log', + content: { + values: [arg], + }, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public json(arg: any) { + if (!defaultRayOptions.enabled()) return this; + + const payload = Payload.create({ + type: 'json_string', + content: { + value: JSON.stringify(arg), + }, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public pretty(arg: any) { + const a = ArgumentConverter.convertToPrimitive(arg); + if (a.isHtml) { + const payload = Payload.create({ + type: 'custom', + content: { + content: a.value, + label: 'HTML' + }, + origin: this.origin + + }); + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + const payload = Payload.create({ + type: 'log', + content: { + values: [ArgumentConverter.convertToPrimitive(arg).value], + }, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + } + + public send(arg: any): Ray { + if (!defaultRayOptions.enabled()) return this; + + + const isObject = ['object', 'boolean', 'function', 'symbol', 'undefined'].includes(typeof arg); + if (isObject) return this.json(arg); + + + const payload = Payload.create({ + type: 'log', + content: { + values: [arg], + }, + origin: this.origin + }); + + return this.sendRequest(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + + } + + public green(): Ray { + return this.color('green'); + } + + public orange(): Ray { + return this.color('orange'); + } + + public red(): Ray { + return this.color('red'); + } + + public purple(): Ray { + return this.color('purple'); + } + + public blue(): Ray { + return this.color('blue'); + } + + public gray(): Ray { + return this.color('gray'); + } + + public async pause() { + if (!defaultRayOptions.enabled()) return this; + + const lockName = uuidv4(); + + const payload = Payload.create({ + type: 'create_lock', + content: { + name: lockName + }, + origin: this.origin + }); + await this.sendRequestAsync(Request.create({ payloads: [payload.toJSON()], uuid: this.uuid })); + + + const isLockActive = async () => { + const data = await fetch(defaultRayOptions.uri() + `locks/${lockName}`).then(x => x.json()).catch(() => false); + + if (!data) return { active: true }; + + if (data.stop_execution) process.exit(1); + + return data; + } + + do { + await new Promise(res => setTimeout(res, 500)) + } while ((await isLockActive()).active) + + } + + + public sendRequest(request: Request): Ray { + if (!defaultRayOptions.enabled()) return this; + + this.uuid = request.uuid; + + Queue.add(() => fetch(defaultRayOptions.uri(), { + method: 'POST', + body: JSON.stringify(request.toJSON(), (_, v) => typeof v === 'bigint' ? v.toString() : v), + headers: { + 'Content-Type': 'application/json' + } + }).catch(() => { })); + + return this; + } + + public sendRequestAsync(request: Request) { + if (!defaultRayOptions.enabled()) return this; + + this.uuid = request.uuid; + + return Queue.add(() => fetch(defaultRayOptions.uri(), { + method: 'POST', + body: JSON.stringify(request.toJSON(), (_, v) => typeof v === 'bigint' ? v.toString() : v), + headers: { + 'Content-Type': 'application/json' + } + }).catch(() => { })); + } + +} + +export const ray = (arg?: any) => + arg ? (new Ray()).send(arg) : new Ray(); + + + +export default Ray; \ No newline at end of file diff --git a/src/argConverter.ts b/src/argConverter.ts new file mode 100644 index 0000000..0282666 --- /dev/null +++ b/src/argConverter.ts @@ -0,0 +1,68 @@ +/* https://github.com/permafrost-dev/node-ray/blob/main/src/ArgumentConverter.ts */ +/* Copyright © 2021 Permafrost Development under The MIT License (MIT) */ + +import { format as prettyFormat } from '@permafrost-dev/pretty-format'; + +export interface ArgumentConverterResult { + value: any; + isHtml: boolean; +} + +export class ArgumentConverter { + public static convertToPrimitive(arg: any): ArgumentConverterResult { + if (arg === null) { + return { value: null, isHtml: false }; + } + + if (typeof arg === 'string') { + return { value: arg, isHtml: false }; + } + + if (typeof arg === 'number') { + return { value: arg, isHtml: false }; + } + + if (typeof arg === 'boolean') { + return { value: arg, isHtml: false }; + } + + return { value: ArgumentConverter.prettyFormatForHtml(arg), isHtml: true }; + } + + protected static buildHtmlElement(tagName: string, classes: string, slot: string): string { + return `<${tagName} style="font-size: 0.8rem!important;" class="${classes}">${slot}</${tagName}>`; + } + + public static prettyFormatForHtml(arg: any): string { + const formatted = prettyFormat(arg, { indent: ' ' } as any) + // format whitespace for display in html + .replace(/ /g, ' ') + .replace(/\r\n|\r|\n/g, '<br>') + + // highlight quoted strings + .replace(/("[^"]+")/g, this.buildHtmlElement('code', 'bold text-green-600 p-0', '$1')) + + // highlight array contents + .replace(/(Array)( |\s)+(\[[^\]]+\])/g, this.buildHtmlElement('code', 'bold text-gray-500 p-0', '$1 $3')) + + // highlight types like [Function Abc] + .replace(/^(\[[^\]]+\])$/g, this.buildHtmlElement('code', 'bold text-gray-500 p-0', '$1')) + + // highlight object contents + .replace(/(\{.+\})/g, this.buildHtmlElement('code', 'text-gray-600', '$1')) + + // highlight keywords + .replace( + /(Array|Object|Number|Function|Circular|Symbol|WeakMap|Map)/g, + this.buildHtmlElement('span', 'bold text-yellow-600', '$1'), + ) + + // highlight reserved words + .replace(/(true|false|null|undefined|NaN)/g, this.buildHtmlElement('span', 'bold text-indigo-600', '$1')) + + // highlight special chars + .replace(/(: |[,[\]{}])/g, this.buildHtmlElement('span', 'bold text-orange-400', '$1')); + + return this.buildHtmlElement('code', '', formatted).trim(); + } +} \ No newline at end of file diff --git a/src/formatHtml.ts b/src/formatHtml.ts new file mode 100644 index 0000000..4613d86 --- /dev/null +++ b/src/formatHtml.ts @@ -0,0 +1,45 @@ +/* https://github.com/permafrost-dev/node-ray/blob/main/src/lib/utils.ts */ +/* Copyright © 2021 Permafrost Development under The MIT License (MIT) */ + +export interface FormatHtmlOptions { + encodeEntities: boolean; +} + +export const formatHtmlForDisplay = (html: string, options: FormatHtmlOptions = { encodeEntities: true }) => { + if (options.encodeEntities) { + html = encodeHtmlEntities(html); + } + + return encodeNewLinesToHtml( + html.replace(/^(\s+)/gm, m => `${spacesToHtmlSpaces(m)}`), // preserve indentation spaces + ); +}; + +export const encodeHtmlEntities = (str: string) => { + const escapeChars: Record<string, string> = { + '¢': 'cent', + '£': 'pound', + '¥': 'yen', + '€': 'euro', + '©': 'copy', + '®': 'reg', + '<': 'lt', + '>': 'gt', + '"': 'quot', + '&': 'amp', + "'": '#39', + }; + + const chars: string[] = Object.keys(escapeChars); + const regex = new RegExp(`[${chars.join('')}]`, 'g'); + + return str.replace(regex, m => `&${escapeChars[m]};`); +}; + +export const spacesToHtmlSpaces = (spaces: string) => { + return ' '.repeat(spaces.length); +}; + +export const encodeNewLinesToHtml = (str: string) => { + return str.replace(/(\r\n|\r|\n)/g, '<br>'); +}; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..6b7d0ec --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export { ray, Ray, IOptions } from './Ray'; +export { Request, Payload, IRequest, IPayload } from './Payload'; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1bd3b4b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "CommonJS", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "Node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": "./src", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}