From 596b2a509f77aec883b5a6ea19753c16582d6737 Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Sat, 18 Mar 2023 18:22:41 +0000 Subject: [PATCH] Refactor Position thing (again, we love hitting compiler bugs), and add P2 rendering --- Cargo.lock | 1 + Cargo.toml | 1 + dla-eg.png | Bin 0 -> 94625 bytes src/system/mod.rs | 8 +-- src/system/spaces/continuous_2d.rs | 16 +++--- src/system/spaces/continuous_3d.rs | 8 +-- src/system/spaces/hexagonal.rs | 11 ++-- src/system/spaces/square_grid.rs | 24 ++++---- src/system/spawner.rs | 6 +- src/tools/analysis.rs | 2 +- src/tools/render.rs | 87 +++++++++++++++++++---------- src/tools_cli.rs | 2 + 12 files changed, 100 insertions(+), 66 deletions(-) create mode 100644 dla-eg.png diff --git a/Cargo.lock b/Cargo.lock index 5c6e65f..dde569d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4000,6 +4000,7 @@ dependencies = [ "nalgebra 0.32.2", "nd_array", "num-integer", + "num-traits", "parquet", "polars", "rand", diff --git a/Cargo.toml b/Cargo.toml index 2f13bfa..08b93a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -65,6 +65,7 @@ rayon = "1.7.0" walkdir = "2.3.3" parquet = { version = "35.0.0", features = ["serde"] } colorous = "1.0.10" +num-traits = "0.2.15" [build-dependencies] cbindgen = "0.24.3" diff --git a/dla-eg.png b/dla-eg.png new file mode 100644 index 0000000000000000000000000000000000000000..e188cb6275ec8990e2b8c224f7615c4b457bbc74 GIT binary patch literal 94625 zcmeGEXIN8d*FFw!M8OIoiiPH&f>ITfUQ`ep0@6Duy(`kYqJkozB2AirN)1Q}NJmjh z5JE2rO(B9n=nz8vuZ_prX&k59(KN@yEjgqmyOqr1TL4If`6WxS-)4H__+i{HmjTV`fT;TO_<*N%$&vj6vNc zLFVmyPrp25dL@fRMrOaAcF1`5gTe#SdP248rYe{MSIw-<170r{=O1V?zQIt)yG)u~^Fe3P7%l|w~o2Ir{5i$ur7XGt_j)3H~--`)g4KNfyWkj+<= zg!6m&i;IhSy`(t=YHMp%YCgbaAKtud?wEn8sJ>FSOtuobsxpr`Zc`n^e{T1Q-*0dT zVgCD<%~zNQXB&i~RAi|N3JO_Tna*x*nWi%{Ge7328lg{~v^Y6C&j&3pFLzZ6I#y8M zdG^)5zvU!z;+6AAJ-0 z=;za?JE=JBisZZw8}^&V41w~=$;kzaG>FL-^p0%V>UWg$X@^ZjWF$+(WxeWw{{C!3 zPU+(R^C1=Jy}lE9Cbp3vMpsj^^-X%ZbyWr2Goe3^+PBir;5u^q_U(4OwYBvutd3Bp zw}}6}9slLNSssRmE1Rfd9^1&Rsj11!bK=C+ix)rpcX^c?k(Vj`UMiU@jIt~QWqtiv zHt{>>NgqC({xv?{Mo?B#V*Abx&z5fUk;a*OdU?GoEYu=Be7H46&aVPT8Styj(!<(R zjl&OiJW9w|@NyUjnbO;llli?p%42*HpQ-R*sR(YAg*Bckblx zl2e65|Gv9b$mT1DXg8K>Mg0UR!ZFHlAlsTxlDQ#ENfpErCl z+BfJcCcEFhe}C=f%@;V9hUpDUEp_#9yY3GcNU#hrm@i+xFol@cJUdM2T5Ysg8}NQW zgpHo(O4f@|i4#v^S5Z-kii=~5VBWXSY_hkQ7at>HsbETrC~<7AhnlMI)q(HI$_z;T z{r$I$^^J{%+|le97+9;^E=pBo)8qa9mGM zPoCS9QACu0{`(typ^g~-mtFkqetWydDM3LkkK?vTbfX2Ckd}7xZm|I`Wntl}wRJj< zBkb}KR#wf>kdTO>+OW*HSFhe;DGkQ!YJ9ZYWi5(`=ojSW;pWE8k{UDksO)0HetyN^^DQ07xvz+&81cS!EeL2C(k?>chJ~7SCrYg((ZP8?Y0R!+UAVVX-Mzl?}@H=Au( zdR$0I#XP4glby5v2=eRKuRPl>!H5Bm5q9cKm|vEYscA}Qmq1Z3m+=ari_T8y)Tyhi z!97_Uu_||rMPu!|hqfYd#Lb;*iGk%;(4%GEH7-2P*48& z_;@u#LyVKRcUh;luWyB`H>{a%vMZU^7Z!e}mYrQzXIJaH>-6?h-MOZO1>Z_zDURNQ zNR{}1sR@=Cs7N#J(!7kCITg36>3&U2Xi%>kFTZ4y^EEIJuRlAMo28R`ktmBd6TW(M zuPQaWbn+!FJwqCso}1i0i+tVEDT#YOt@QUYU_(E_jpOO->q8%1m?uB9272_-4Q6$8 zb@7CRgz&n#xa{%tb#^XLxO_RY7uu~M=jwf*w_IFY$GNy}R}C2&8tNG*xloRMr>tNL zp(1`AUtm~Sj*gDLN!f#l``tuWG%P!s={@j=VtP@Lw!Wt9Jm2>KxY93+w$&!0vDmJ9 zJ5gKX8P2hDMS2**f~DG))BA(JCNFdliBf|)fu8H~eQxgVOF@N)w<6~sI>H;Bwi#Go zEb8d`e2j~0IIlsl4Q;`ZsY)@)z6|THCFy=rR^DZ1USFfsusT}h{EE;vN+&(qbq^&<$E`$S<^tA`LO4F6+Vq^fFmcGiqC z*~i<}(GgU5^~XV8IZE%nJm+6(5hIPUJYJMZO$lD!YkGQm3d6(07u40; zqC?)jeXCGt*OUCeHU{6GJ$tyEoVJ{Fzh3<}CiqiAQM{$0p^@gju|{dg(9EP`yAGv% zv!3$s@HDifTwak8n@0-~lwt1=`rDAWlz*;d9a>lvcVE7E@fQ>WUizsEQ;|bJs-Y%?RkNw7sk2k|klh~tf`YTu>1xKyePYO9?}b08^nVc!;77=_ z@NeIga(nD}<>tPL+|FGcFfM=e=+W2+lxf`}hj<(l6H{wTOVaGO7!mXDpC1iL|Ck%t zBi4Hq)(n?Z9>WH?Xh5r0xnqRU3=rRD=a`$DGe_H}-(r5^fg&OXEqPyRYBHpu8f#KG zSyVXDw;0|)*^SSiFQ%uZsTP0yxY_$qoFpod>$Bo|3JU8TI|MOJ{#Q8Re|L6iD6HYd zvCA6$xu$^`Lkt)ix6-~mlTTYB35`g}QMQv6`}+GEv2S5tl0M4~QJ{ZB$>}+KW&0Y=;L9u@K6iF6# zc7f|rg6ytD{X)AJBMDy0q*%uaUBUAC)-#6|sANXJr2rri!F9h}mb5Z8*_oN3U$*x2 zq|XAbC!t*yw`0eSjJNU%W=(MtW7MZXaBFe3oPJreU6t!Dxq29A2%@pT05VPO?d|iR zGerQh`sz@Wxf+A_R;*ZG$YFFh&M9AfUAD2l!fWi(q51Op^V5S=c(k{nP59px*4X1d z9oX;!Fm#0UbQLXcj&Y??q>!=f@~7KZ03Ad~O@5RoHJ?LfVfBtQ#q(O4n_qQt!Qxz8 zTz)KguGp8pf3K)NFT}%hnU{}G(+JjKmVS|g(j+ZnV({-!?zA#&@)UcKBAX6g?6&x? zw_nuNU2)+T5V%3Cu|Fxd+!8jNo|>R0!N+$!luaTTh26s`VX|rx&I3z>1D zFFjKAkw07p9%YmE+z7tQ>Bfx^y|aSOobHKuvE)L1eSPz({&HTac;y~g*eE(B%m7rA z@SGnFTJ{%|kkEySr`ccPlDT+<=lJm}H*dD25kiB44lQ7T;2!*U{!?vZZQWv1n4gz7 z{PmzQ+w|%NHF4v`l+TnGZ;l@JnpU=f#Kd~P_uLIl=Ki*}V*oeDqT7DGnxA)$2!8ss zz~{Ss4`7$^QRB5SZR|OkiRLv6}4HuU`+B4`fI$vufe; zm~XjEZ^y^Qb@9OGeBxsE;xRx5moTc?g-=foWQv)J(s4Q-)}i&)>x4&M9c z&#xUUt1JtuD{&bwDCFhkRrE`t>uhg-Yc%xprv>@kK!J6*tAn9o{Nn2Y=o_Y@q0JOM z3yYs`MxcasWNL@?=y0q1_>{XEdw6(+%N$3wt&tPxE0HT+jz4?(o78eSlVx z$BrE%RWr(I6vOh6;wU*_?B!MJT0tathH^@|DoIL7T^b%1_5W1+ea)G-L-0?L_Pue+sgVO-Q!*&DDNakfA|-2D zvs+*TbcDzp--S$c%URbR6wo^k=#a~4mexR9J4(_5tB0*{a&mf`m#0R8LXN@cI}~3^ zfSb(Je}--dpkbHzi4&I^KvN-z@CpiYEQtCiO_jfp-58`O`(3+sZMZ|*SQ7w-ZmFz} zp5E)lBrmQ<6%2rpyx9NV>jO}U^DG))KVjoS;YB>1 zgrOE-9K-A1I(d37*Et>v*tu(0_{4-=1T!-;mU4M?j^bHPpaN7vi#8TkYO2#6881i2 z99Oa`UJkynRAp-FNE_kQ%TIju z>a3Nqh{d<(<_(eQaW7vchoCI&y>fg8e8ZMbZ%;?Wde;?^fiMlQZ`8 z^lbn5pkdeR*RKmI0OJ)5CHgL>yY~Kawz1y;sUxa7kTG+WiuW@DHRC93gB?K_S|L{=2hQH>BVkS-h&4Z+M2Eu`K^dy$cd}NJbBPYA}A9* z)$q8t{=0tSe`fZZ2;R!rIP}@GSA~V55ke)ST-J_`2Vb;Nf>f?tiT-#$*%%hjWI4qs z!m{!8xlt;7F!5!RLs1y9n_JD@{iCZfFz#a|>(JU>f@)<9EJF}@D(^uSmW%~PHip1L z<%^?w+hG4?fBdmC0y+`4f`LQ&WTtjbXA>jG3g^bsWz6xx$xL=hNbx-;$1OY?w>cwqo+aqTbx~8ub~Vj$)z=zMWA)@ za&7mW(!McyU+8@W1qErQAYo=6G|n@7V%JyVQdM~E`gIa$pIRPJ<`5N^Mer|YDErLOHRqG zOysu$l;Gk5?E%)kpz;b8Naj06Qz6D&zj$w26U>{cjK()2Dx7U!uSr@b;!_2V2F=U>6t$=_1(rq-LHl6==KXta^6DVtSIgMh zStkkS(dG|LK$|)y`S|#36{Z^Dwpew+Dlirn5eby*zEFV0TH7b;HQzl7@UA|3eit&b z>)#de=&b-ZgoTAQI5GfF{cOwwh`C9^QPo*)zF8hvdFvU@)EB6L7~|~XVr^`Q2U=M8 zDpum&d)JDuPK)dK3;=v*Vgo5tvbS#CBKQD72uaJS5C|Fxk}hLG*__`(#QINO zkL14zOEFZJh?s1(oEp$Tkht0{_x%gSmQ{D9K!dRMY6nTon%dsKcu1ylAV($~WD4>* zP_?DWhqopUfY!oP%@&bzIgG(;kAFplEV%+y0>$<&fV_&%>sLUSwc53F3!?b=pR@z^ zntu{Jk*9qQ2ceWe@maGgBAyTua#XPI1Br>SfR~Qkz#nb!E1!1>u}xD|3I^{I z>_qJi(1t#1=+^fx-s`iY{Z5l2-9lao-{K)Q4x;JK35q}gO- zWC-U#bRf)RXA6?ukM3>uWsntZ=a}`a+$gAckUucR+0uPiGQ9q{YpG8+z`F2eioBZ} z#UJmN{HWq!z@v4E?d+78Z2M;8flq#PGzfE`pCHs4fONmfRHgkSC+k`{aFZ79si=gx@=Hp3 zHdlCgd12?+83K%m>q{GI~KAI_3k%O9?#ST+_GQ4@XmDy`k!X|t+; zr+!99AA(MxE%DLpIDGJm_WJ0k6}ciyYdmP(;Nj2aMG!>V#gHFELo0q45M<~9Jh&m@2?AGm(l>CBoZ~B;^N}6LR>yLJ%n9~D(_UN zRUQ4YNj`z00?reM4v zM(sQQIo#`Wwlx?ss;r=P=sKaR;yp>^rn-7chd+_*ii%IgZ{D0w@LB9R^J`bNx{;Bf zwy_Tuw}zo%T7C9F&YuyLNChjFZbyg+3l9%|3gAtB`__uH6|dpxS;8jie1$YvfqEmO zEh(rBW=jD+pAureFxIiz;it;xly!@pNd7*S78W+lr^1WbxsXHb|4uu1tDBj<1)DZ= z!dbF5%RZ{%M3=$65Zuk1H*aJ0G#UC;IGDZp?!%h=odq}sRKSZH1X04hprD}Uenx-> z?bj~KuJquqDJdyc+Jk;W)&uPYOj%Wr{xT0!C&pBMqcR=Y^`#--uuBRGb)Z^k!V^XP zPzJ$+dnJm?&8Nrrm1rrZfim|bBt(;1Jd(hiPaUqj0E|{Q&#ZphaVv61QHf?}F3KeS zU&U&uRa;j##sE|c-W-tEJ2CoVfa!oq@S=Rw5e&VT8yr@^MFLyMi$bpMEHqYd`j-MhKC zCr_RXbski#9h$Mi*FhttlA??|E3R>JaAeybIOOdB%e?TBxuW7@Elars(3V9bt=ry* zSg(MX@DfZZCnKYTr8QsBr5Cp$COiCexStA#=c49#@wb)hGH z4xDWuuvg3fH@ucx%Mo7G?|Gfn+NuT{Ws1_<-)}_4Z>*|BlpE!MyL!zWXgah(-h8^M zp3Sd4iu&Ln9XIg8sz=R`p4+)sfP@9bWtB3nXZToMJ+G%naAz=NW@Y6Ilb#L20r)i~ ztb+$;NS$v}(PUs`#^8liP~tWMV%2B6LYGuv60sij8EXnH{;s^-ko30(4?DtXY5Gj&i^q1@)|9||5R&i zIT5IvS#2mgZ&YMt!uP%;&>g)h{+2RfkuL5II5;Dv4m??Jz$nM9c@CfzcFtoR@n2U3 zZUsNTHJZ&|&{wKXO2jMAP`!CCU%F(C`YR2_%dJtUu(TOI29XC`TdGPFiiQ4I z^sKH4vOdc({rw)+05n=#TcO)Q@ow$xd>?9VVS$4urBMO&%nY9(!y6S5aTR17oVJn2 zyVcbZIc*6j&f~W5%x6IyQYV3-+ffABgvm(~6!clFiL>3%ap zi#&URE@s7FU!E|l>FZ}YfuR>Ez!Dr8#wjPbDU#&9m-}cT4VD0iXfYr;iHG(_uLH%* zcyu^G?m2}Aq+l;P6syk_=wSk6Q@}&)DRs*M6WOvGFE?M#To!HShZ5Gg0G{=HG#y1>!c3IA{-w=z0;Ow=dMnR>}4X4goZMZv8esv1Y(n` zubW$uYZ>f{259&Ms#c~8+@+;nbszeoK9H;Xv`4#FeK-7bXh2?#<^V+YH!?#^j{`p= zW;fn$*?8?zY%pf*AiuFqTv*ttxv;df6y0cGO1`bY$;LsK!sY})lUbNk)&CZM9nkh$ zxL{Iq*Ixx&k1n}@x>9g) z3PaL^2V4Hue)SCfoSgF5WIQ!Ua|<~e@2*GT3hjv+sOGZh{z-r15*Uu0F9Xq}MDb9l zlm>$jU96}*3bI5Fulu{hZp+=|#Be+QA9rc@8*oKsmj-DghK7btNJx0JlN%Fc^a1!? z8lKne2MF*EG@w75OdYKX-m-}}$dwRS0@U9twKze0=`8AVkh3S2&b6Sxshpv{zMi1G z=lAa8=1T4A3*70m4nRCWHeeE1of(BNR!{JRey zJ%X6dbu^RpqWIp34TLO|NT<}_TaD0nxlu;2T}I((hKmF-mZx3g?7>N_ir~4G_USp; z+ee`7G%hxl511;mWX=8kEG#y*`^4Eoud?ky2JJpUqZ&NxSh-fHwNhr+Bi!@hR`tVq zL#ROuK8@$P>HrniX0459mny%GjRk+&XAoAoIqDJ{d(V6Y=^8GXTy2_`mnU32mXWEE zAm*5`x=yL&bX@_@I82L{12mk+EX%8?@IP@!e3)Kt=|1kyqT0bebl!KVnp1fZf-;tW z{X61L1)()6IhiYh>{?p577soGGmmnbH-MCeiJtu0w~naGPj)IUsJQ3kGzO#2k4v37bF5T8==l) zrgxX2TYSsbs-}1;ENG@}AmN6bSgIa~L1R>#j@94Y`)>z*G}#X?w^8;Viz^oChDcH& zUDfi!cn`hrLvTb>eBPi*7Egkg%l|gIx{SO8Q1E~C(!TRfN$WNb`ai=R^2R$arXJs*+t;Fa80K!cdu>J_y z1bTXSAg8Ym33yC71L!)(%3|-wC~;%RpktBwmf^jBI2CJ5!jl2G7C|Hs3dRSZE2L*+ zsG;(@l!K_qh@2YW#My4sF!aOT=H}icLAfWN0})QosKDyQV*eiB1O!o{sBX9m|+FbP68txGk!jpy&pg*y+&)yzEMr9kK8Rs(Pat8$bvUXbVQ|_4A<4iqbrX zaGXGanA>D8Q-5O>2q23`7_oHcjg1r0&;nZtgFHOi%>W*Bzs)ua0m5%J4*MbH2s{I- zgeMaf)~6shjTF_&=5awVYbg9;AXB(i9mn%7k{;1Qk zCk=chRH(G_3IH8pJsI=Y-c_0wi~M?Z6`6OT9qsLPPY>{+?u=!-Sd)R8TI(CUNmsTZ z!Ak^?6xf9*zm=G$iokY_w)!V$LSOk}Cwg5=D-uoPHDE9pf~y4tN?JR&*M0l;>h!SUY`wq^Mt8OC2wm6-US6AmqElR4XsWS&nHG3Gkz)#;<|fDr z=%POq!js^B5ly7b#=G^Of(-&`3p#0?QIYMtcC{Hr33-3t6_D-YKT~Ag#;prlHV$R9 zBBkrgEf%^`iE2b@6<_E_8E z2gdll+l^?CI)5)vMP)3V2eylskMZzWZVH-u#-N8urBpnSV|yA@20_-%XfKa(fJqX* z%Av?M=R0JIo2>Z7?*Y|JU6a_3nPE&Q012Db8Ev}UNB*6;pNUcWG2^ZQ>q@VXNY+F9 zt=#H&M#2I})m3F?_4_a^vhHD!_&Q|IpLA{=WJO+U|iQ#I1UlNaXx@!inmF)h&<@`D3lb0O{j`SF)$LK#G?+LDR4Et0l00bev}4H zNbxMoGZ|wyHq!h{_&4rm-TwG)-uQ}ug{eU1M9NP%sy}P^n$srb? zxc_5Gh{4^3mQ;|_3Cc8M%;nGEYj*)xUC3{=kiw9m8%5CG_jm1u5L|7eMZT*vK!k?1 z1)nkF{s6zpDcOJ`LAFMp$3F+X_W15umg++NEbCkyMQM&_N+4hMGbX*`=Sq!wvsLaG zaAOORjlwO6xYtbOaVV%h(;!z7=wn4X`uZ@~0e~*D2pE;u!I*L72lo)#f;X9fYEM!| z8X9ler(m7ULO?07{E?BSX2drTzBiM!hHf~(DW?Fc3gO zh_=?&nu4`-^;8>)kIDqdFao^XM4LK*NU>}H8PUYG04ion6m-f)Luh_&g^~$IbZW>~ zlG9a4QHV~e6PFgE)Ya5Lc4g=uFahPG(@jI8-P-ii(oP?`GiS~ayiS3GAT@bMyg)j} z_H27c$JKlH@^KI$*V_TTl?&aA!^4GspE#Xs3Bf`Y;)A&`BC_dF0Uj}^-IoOjB(s!4 z^-hIu?+y{TS5Z-!1_lQF#3Dy+s*+9Bnr~&N8%hSjKD*o@_!#W@Z}C#vUP6#R)k^T1 zl-MNfbC*jjzUY*I%V9oL6T<5VsQ>BHr`-0^h<`rwzwSu?tLDNn#{vG5249aonIuBM z4D>p*w16nA37$YkA)~i}L7Z!OhfN1z0Baki73I@o9u@D}bP7tCEgu-usPT=)j;}a0 zet?R147fR}xbF5cqyuRV3@0@z?6>w%DK-Z3;Tti+m!#y}r5bWwhwGSniX0Ph0C7u7 zOX=B&X4#hkE_uxq0d!K^wuNTXQ-U0E>oO|bW@KdCGB$=lu8Q1R0qzrLodRkKyV`S7 zA)^k7y|qFTWCL;`l6O^Cx93CcgK$)+s7HBCKZLNp#fmxVbScM6x-@s8gwIP6g<7v7 zBSU>Z9Giv2oA6i_1Wknblk34Y#?J-1>Q^@Et zPolRPfk?bGY!v%B(Awl7oXiJ~Jt|d)SfSxJG(vwm9SHhjlE>Qw z&#_a#Cr=z4vbEf%=BS%)C}CVE+IYCZpDK_cfj6gkHgfJOJ*W4ZjuPX0jpvTNM#P;*pD!vY-&lP12vEC~y|K?i z2YAL{?Y-A~(`=C+VzuQBJe2X3jLhtp!1hDH!u&n8@Q*9O7aw~*{Z39W94bNZ(A zZWtVwRW6IYq&JP{5*}pnp+)%<4=Osq7uf_jf7BbN(S9=Md&cc}2s*w@NXVWAOoLwV zqp!DH5>l(bH&=`q!KBZ|tk8z=-~yNd5F*Z_t16wU;A0hY(4c}eqel#600^@ zVu|LdZKrsY<5VSJ8(~y#+djFObmO#}tHT$jd;VZ#lYchp`tFpN-gWhgGAgt}goF z&5$rhpK*PsiS9EIoL&=WfSrNB3WBh8PQztRpW_yD8*5&dAPLHETw#Dt1#IF`xaVrB zs&CL?1aa@B58fkE12_0SI6!NMUG2SpH!8oXLX_p{mb#KZ5RRlbk0geNA48|O zAk}aU9i2$ZsRn|D-2tZH@;?RWs?DJ7rrm7hK{|kX(**=KsD^+XAqvgb z@nw8G2C`1GTc5dmLoLFwI+i8D-}4qDHogWQ1oa^-C@lD41;2^}m6(pkmhBH@tkT3|0T z@(-$mj`0@S4e7^^+tg2tzHglFKxh)7y#+PF{|uyh1W>mWCr_s3{5C~tfF6uGA4AfF znS2;$A-inv8|nwL$Jhx7HK33LG%PL6s@o?=H($|(v@XRKD>uLKsRVb}9Dphs024df zwUAWA-t+SGEEs~MV-$2ApkgLGCqWhE_JnbFNaEmN$_M?9`wkyI#l@3|H$gK)h5ddTKI9nGB!C#B zhvE=tHYgl`N>2b1+Pyj0@azSU&&^d0Wu^fbJmCoPY1g+HaNv6(&jD)a^Gyg)G5BCt zfj8uba?4{x_Ud(Q)bk`-QCPgEKJDrYshJt7#ddufU$F53oto?phN+%X4hCc2T!`Mx zLi9;uU2FvIKWPRY2k4+268d-knM?eiZNT)m7znp(3LK1D$VC^F_o6X7NVzl1*33Ky zzX0XCZqCj@eGZAwDCkFH9?g>74q826bw3u;7sobcd>_WOQ@+*Fu`4u#tGBD7qAQ_W#CD8iFt^ zQ1~IX?u0*TS$V~ZScVd61poT$0?0_Un5kxg?G!Q*dW~1_GA&4H{{z;6HK0Fqpp~Ak zfv$BN6^tO@Yh^qKSPy0cPI4t<_8?W=04WzstD#`)H|g@TU>?iC4u^CZN|Xo-s9i}& z6tyROs9f&v?d3-!A244C0u|e0`NP*JM*DeTx?8@soj~B-ROEpT3)^;P-J)O}2LNP; zt7s_SxX}>`0bqShhzUf8-@Gwd65GPWgs#!W^_@PB7M7Ok7Bqs6*MZUEyvej!O-mRb_r}*cQ9-xvRR!ShhWJWBs=UwrZ z#Z1{|7c2grE4dg9k@#b!hwGr+l1c~GvT;dMjdB}Qyc2j%%IKi3{F^`b`TvXtJ_b|# z*d|oW&CSh&@)#kvJbKIn{wIwDhzJb-{K?R51k$+HIOy>i9Ty>ot`0Et(!+BIvdWp? zlhu)eTKg#F2mKj!TJr!PbRyC4^idHI5=kkT9fQu2Bme}}N3L7hdxNeJG=v8+-@70g$)|Grv%X zuLOx(vE3JdoU4zaVIR!;RC)YB!wtUL{CWje&2v+b<0G#wjCVn{7@Z2lmP2gvjI9*p zn(RblZ2NB|L!L{$Lm7={@MO|*^&Byd8u zb{T7PE&PMk2;AnzUq#?;a&w7vhLAQ*xbOJ9XD zCR|HVc&#b{DHVvdX`&K48vbQtXUEuI7+LVdRzT-)z*?LKW+@6`jH76q>vWqQ-&BXC%RuBLzazsCcZ_Ai&A*d|@f&EAjnrKJ5%3pwhd<;6FPHkF zbJL*saq&<-TcBLK9Lf*DcciG#mH6=n;x5fWrd?GH<&?`_gUQ=pFW9AA(;zx?c5H`# zLIMYd4C7lju_DjWWZRknOsFzSPy6E_n3Cr)_wx){NN4)^^)%Ru)bEUbY0y3>l-}Zd zwe|)hdBB>;Yx~Ncb0LEh7ynHG-h5~aZ$X93oZF2NBj>E272k}tg2o?#(qVuBt1xG! z%O4r;H?O>Aj9Bu3#=b_Cz5C-~mO-%^=})Q=9q)_;m(S{A&Eg{=?+c(vY67k(if-Hx z%aMCIAOx;R)W&kohML4Y8WO?ZDJXID9%9W{><4+m$K1^9nYHn;7hsxHu8|!zVJbm& zd|OZuKs`(0$1a^9yAecsVRAvMCf9RetgZ7lNWcuTK2_6bWDSYHkA#B@8X<3c9`zpP zP~g`~B=SkQO=_T{7#W$Fn*Dj^yEf#vi(f_qMSc|^oS+080C*kv+7h>z5r~F7-?ob- z&A`aWmoSz5-3AO5K)D*EzlC4ZwWL)vZvZ(kGyw4_-Q}i&!rBIpJdk$LPXXT{+}zdg z1z|vRa@fh*`jp=kO_lD0f8g)GPY^H>J|`yD00E3_Cncq4-Z03D)_gP~jRxsuDaH77 zI{@VZVF|v=)|(nREL?Pz%!0m9XVh9H@na}VE^;&e&@49vdwLefmy;%K+sO}3p{m3@ zCGd}fQiw+DZ-tQ{M*1poeLj^}C06tX>@1lGK-;7>%7C_nh=}@%jSs{>0M=26h44Qz z%B`xBnsZ1hPzg&HQKz=|PW7H@jukXM2;@i$R-kUgNf5Ts2w5%4*Z=~Mz_hlvJ8|NK z_l*tyIq*O9jeM!*5gTg*8-{$Wr}+8z2Uef?%d{B9Xpnl4DiV%qnSY%PT`A zVg8iXJV;`c$ zdwW}ZSP|et10G$JcMT zmMTrTDja^*Lip;>wGzSXpOg9VBXO2jYl^2tV0@4X@c%-zO$#v>(u>BmkE`^{J+snq%7*Y=Zu(gm=R#Z`Ct2v|XW&aE@ki7+ z6u~r&4AVju&yVqSdSv^4Zv?r8ADU4G&KHEy8hhiQ6F6Zt zvs~H|;W4eyC$Wa}fdSVK_V%KzJ$8k%l)l#1&xH_Y<`BgvK#V-^V@Zi#oY%d3b04gE z=J8LMd30{jM>TxSmN93lP14fVt|hc~1sW;zku?(NnR4xcUDLVP!|VBL4d>3U7H`lX zTehA04I1In5YE4UeMqx;sSZWqL^8|9EA{o=54AE+1bjNWp01IBVD}@BW8tWgL>W23 z(h1?5aZWgDBFk%b_-Y|}Jg2fLft^Ps;dn~R$#v>$KW}k4FL0E5iVuY-c4{5corL6_ zD;e-#{>*%&8>bcY9oEup@F7~JR?how$Zf37+390Cz1~lNEm0q8sG;%Y2dD^zl|Tn5 z9vj+PT6yl(kN4c4W8&UogO%O5qB^@+o2`{; zj%T3ig0D2`GEhzJX(JGD1lQ#a^>v|VY)3*KA6OnA8@oL;DljG643d^tFVA`}J&xk% zNEtK<6{wYr7kpC*Q`@_@ZXV`=-k`m7z(Wo(>FMi#ZI@8!Q+JF{xMuqitOmP`%A{3Z zvyYH$-VfC@xZ9y<$oA`Les-8`*SMmct}#)moFMJ-Qbr2GJvvz(HoqX9$Q4=CHNH^2 z*fZoT*&||*+41yL^J&aLU0Zv*0-C_-w88#Wx|pTKS8N~%X4+5RqOU_ULAnw_B?BjL z_Ru-HOj&o+6;`xZP2`pfXJ=+I%Vlctb~-?)`2izhqTmjbqQ3xX?7a(30Hc%3^-y3; zAJpRLpMh3Zl{*h-PnL`edQRllDnPGMhS2(sTfvB@*xesrWK(IBZrm`(hk}^Gg3g@n zKX{M_V9;&C$Ga&(;CRT|CCYI6%rgatD5i*0zRzFSHjjr`nNlUS(NV!bN9RzU?G$Ws znKkg`56;9%+*|I84ChhF^Wqf|fv{G4`|v_Hlqb72aKu8_0pua_^J>yh{B z{;OB}ad^BXG3=Ek{^1VhFU6pdx>nkpJ#v%hep;#Gd5C8}FS=WxzF7Rpxq5u(&lZg4(Ga7Hx?K+2@q(HwgTk zbs5vhg?xH!{N<}xcfi=}b@~397UiB1;2Ii$+^6hgU%&1?)aN;laqe^J+E(DRh6TM@ ziX@&6`YX@O%%v|G^78|2(ySK0r9m=jPR`Pl5zkb~QX&IHx_OdhN=UHz4Odafco{kr@Fi@xo*x zBTUE6H%Uze=_CjW@bLvhCAkC;xp7$~+l6{Zqw$-*)aLlp$*x5opj&RsD9cjYhJ1^}SC`Y_(7 zYj^t47rbCpu>JVd8sl1cT->+in^d8{{<{AaU=Tk92_@ln1nZW;#NivP*V^)eQP^f3 z1;301mP*P%EdhpdyL{?vUlO^DGXtQkYG{102g&B_bC@?CrTO=s(2n>s)!SgzfW^Xd zyS`n&8lcsJRjiZ4lx2d4;iWS=8`K}MWI+-1~*;(%n3%ENH(dP{K2pCHJeiE0TQ2cWQD80YrM4XjQS7Bv==12pt(bg%xTC;*=7%hidqlF~ zZkjD}k_f)_Nl3bVK@U+%qdAHnha4QvsRB+~`MlhHJNLs%WnSJ(_LZ`^rW8oj>3xAb zI*oYBy2n_0sukpkxsf91S1`G7Aj#Tu+hSl$oQVF3VhyCFh_2$ z$a>7a4WeIJrvxgd+*;A<#2m8mEKk6`OGyck;e=gy>7c=#3nyRGA;%2U?(Ic9kB#_8 zy?XV5wEh#p-8-U>(V77}omE4Bt&wKYl4Gz%DP|+Bv#=6)hSJ1+^2;A;Z#CSf8Hu#4E5A$m@7Ko-(cj!&HYw&z*mKZ%;Hd?oJj`rD`XV zmYzOCunh3oSTPmvLQeAYo6W$nJ@TER$f2I+pu}(f0I&fod-Lb~q3wxV%?{l>dt^_n zEldo8TJ>WDoUOvue7vk_1I!TXHu+t=xFz;7!Q`~6tt}su%Sa+`QAlX$d+4x1?qlug z8d_SNmimxa{ zytE2)!OyZw#xi6nz*g2mBl&ed6VNc<5A@KD;m-}{5J(y?_cio=XR$m3>XPxHWG{#@IYXo=cnRj6-$Ua2 z61tx0<6$ypP5K_Bm)UKDtG}DvH8UH2vzQ|-l-Y3&J^w~_=$XhU9E(x?W|0x8*4bQj zBHbQ?q~a)&#Aw7h@v!6)@XI*AaFU%39k7I7~Xg>!6}-oSx0-?#tQ4)grf$&-6MmYmjgZ{Owu z()!eWb!lcEQcb}+O^2g~&|OeQ1g{sSn_eoE!9giDc6P^;CnX*xg0GxA0Vbs#!x&7C zbxy(>dI9+jStf|~x2{s>EI6YGfO53P>JZU(JFb7B2gqF$F81~dHv&3_}K5P9lC_g{n8njq04lxHd zANWtXd;zfa#Erp{Nv8Afv9rK`sUV2&t6O6kmG*O7pAM93hGTG=LNR5s4kf?1^K|&- zJ2~FL;Xw}}rJzs-5U_Q8L7{z)z$)d+F9Q^cYaNC|dSop`D{Q&4-4X* zf-69S*S^$u?{Y~H?34!2Lg|YWc{gdL5`zgL&4X^-3g;qS zf-&_U3mo&BMYldZ*j50UC#D8U<*e>KICG{1hB$Qf5tI4P^vGUeurT*=qK#}Z*!J>e zdU9W>_7{L96Ys{a%gfUeWlx=YV!zQSHV|aI*G^PF%!jY25r@0o07o`jLqv{C)^*~L z{yNA&`DCn~z{*!0-Cl;}%N!{%)f>Bzn-|1<{xld@&{=&19qsJQx-4MUy)w~|F5pwn zNZdEFYrZLKh~i?FO{?1wNST9X3fU%E6DoK@)Sn z$<@)TtJ>?gj@Us`d4kcf2daTCQ+<+#u5SG@X+F?IK_*9r>QU)7)z3lnELHI?-+*)L z27uW>8@Ov=z*d?K?Z4Y8u=-OZI9&78^(i2f<1lcX$9T0sPk>m|K)QVwgk)pG^9p@m z@0Is$;O5}WE{l~KAT=qhYJW;D@)?2YqTfH;X|K@uKL@Yxq=z&I*H{yc^x8egnO_E< z);-}kpl)q49PD`m{4y3eSBYgsEVj|Ci1;<{?oiDO@Gb9x=%8<;s#+D<@c;4k-SJfS zfB#3i(3L_%r9xVY(m-S;X(>&6MMh>JWgexW6e%NRwp7LmA@eAkGAf(ME+Tsz&iOsx zuIsw*>;65y_uU`g$K_ke`Ha{5^?I(Cqb->Y-QlgU$>|7~9<4bBCwdGaJMsZsn0fSx zRX79Hv6+sIjorSGcL|)X+{D!`BG{+j%$$IW4G_zIcs}zjNF^pSdm&M=vHI!U414(=+o;#evdNhP{vowLG$y>OLhPLWHSf5 zOdPOfmwq)AG%&#zRpLmIFnL;4ToXdehCE~}^X7@8M;B)DxEpjkWPyaKu^(d4K@~k) zP+EKF)Tt%5kSOH~c}}b`fEP}r=7*Eb43FZ3*QmF=8oD~088}An-Az1!pGXhtgX-R# ziru~94aiOLfdaI|Y7JZN?;AW6;j>pKIUnLRy?`fL?9YzD%i2|YIxEn(irbw#ccw8l zH8rUd29G}NAqV_$hR<5*fG}vLtzs3aX@i_x91lu5l4WX-t%i^;nUUXkk#^!$ont9Z zHQUC<#u-0_H`Pe5Pp)rz zS`mbYYbR_eX+}kMR#qlO5Z^Ctr+xWRw?j598|~MYfnOd`9lZ_1xH`J=f?pXK+1bs# z3>MCyC%-tnucTzZdUY#atYz6y4%A-RegRE9Xv?-}K@(_59r$58oqd;$!fl_|{q)>F zkEeh;JLSXG>CwHNrw-uHdMv0!JH=9g9a=}6YD*w4i0gbhX+IXk(7gOkxn_UsT|RM$ z?Ou_P@jATdrmTynm{WLmH=w;Y!NnMjt^D?~+A1~vXpCuvEH2rL7N^YSKKh)}aZ7x- zM#H0Q$6nZ!ROnBxG{_5e|Ayf~p}aBj!tWQ)pI`r!AnZ?9$Dc^evr0*_*DbE~Go%e9 z#t&t=dq^32a)_~d)57MoiTx3kHh$$kZHbrhkQ5W@9Fvb7_LSn<^rJDuQ{Ns?Yk?9N z_m<5F`zOLhJM+zSN2s>A&|yJ#%JMFG${FEZyK48UwngFvQ^LbdA4C4$p;Q{+5PksI zcMH&#E&Qx=okk8QMZ7d3!Lk%T)mS=dbCnR(VjNhM=`eq;0_|qaYU4 z`*YOw(Y7;l8a31HZ{~d;ZFo?jCrAa9@nSdyFu(v(nv(t;DV^cHsG;>z-dROOrK0@U zJsKlAE^qDlVF!mDE2*97_#T=JVJRt8gHE@&wC%?aX=qps>~Yy`)|mqZOsy$Q ztLAzIBw&8;{2XsYSNwWJU=-8SJx66wZ^zjwYO7^A^~=8mTN_QBWLHjw&x!7k3)5Lv ze?{b~-^VsfNLbk7%b^CIy*liLErWU6gtoh$YJ6?WiyQX4??_aH?fTxU3g!&x7B-XS~Rzo8q zvleeFnPHKVdw@uBd@k-@{kVPV>in&_Vd?iFIeGo^C2wMr#nAGw-4}0w)r}ASB_}N%yrlvV{S1b_x~ZX^&gdHBT8Pc>f&#|G z-ROxJipQ0XgzpY2C~fCxfPl0IST%nldV-lZ&}h7V^@=YsX{)!|(`YbS?^=ou9Xxo( zV{7f9-yuoih+sX&nB&E_feh+<_mp3U*)f}`p55Ww-QCTznN#xNu(CftbVh~@_5PFT z6`k7yiflw3mDyCx;P2iO%O?E5F}F5OCoi}nO!mPRT3lS8qtVceQkWHGLhPYz>yC5| zFL|D6*2_%Q!Jw+(n% z*M1)R)%XKA?2^O+ljy=iHK4}k(Bv$-;Oe>?(k4C)NMbv_mrQoz!U4`D5E{Y@eSRI5 z9k)Atcs@D~K8*JS(=gb&3_ytw!PQc1hdN5cc_bm1QSRp27UnTjvT+u{ zoNd|w&Gn@(E1s+b-yx@Y@uJl1CVfC8jZ2YTbMCbjYJ+-?{4d75=45 z3;ZDT;(O!K>jd@%r$^x~pq6mVZfJu_A>@wQQy;Lr^~{8vDXZOZsrUq?|1K5ybM28c zXV%2dJ7r{~;hJrj535Yy3>^X%hs*1Z^1gGOIZQDwzP_82%~-g@rPZU; zi?Neu8tD#M{nq%LHXgE^=Yg=jSDZPs22X+gx2({3y%Q(eQnp|aKQs7C%ddh;K6m`fNoXUr4JVcY)LJ{QaMl4_>A1$Ja@)-{B?qBpWb|$TvDwX%;(%?qLbUWo<_uOILvuQbjnH zGH@`}ua4y|DY{2UYLpKyak#w8iF}M4HiqBP4OSswVSO9CP|{ihNWuP*dxc$u7$Hhb z5+^*$^FBe5`{C!dzQ#2FQSTiVtPuw@rOidT=vm|sxo{)GwI}+f;Ll_d)A*bieewYb zZg_QSGhf;0yg<{f{`9PV2v>eISkrzD*HPH3tE%?Uk*c^)9P+5r(kF2GB~<((*q-Li zwL5m)$1$uaq8K#>qwZ3M@07lheq49D#)}|25cYIOcNS(Pvlo90#ZM$FqN)rdh)8uP=Bxj^Vtzj+UV^$Adw5oCDBzi6AgA zO=oK->^QPXeD1En@{>;{u~&BJJtMKoipMRsY*Zj|J!f;jOU9J3+>w+BW3w!#!s zdiJT~$Jdz1YB^)@6dynBB0pI-G=a=W;o7Bhx(Ml9A%gFOp2H+mpDLoL7$GTe*Qe;t z3ixPOFS>v_v0DD}F#_&6A$@=^EiElMy%w-yzN5cST@D$`Z5IO|`uQ4>rEeIpT_x*x zuRk1Id0NY$y4!_B-;3XLuYP^HO)(keiMje9KF0ppgRD)>^OM(oBa1TwFQt{gf!V%Ky2Ch#JlQGq(qb-SqyBr()el1i1h+A%;UFLW!za zrWNA&G04$uZyJ2e5nHoi!R`-kB3`7-(mFvSx=l2IysXhCJT*3m`~8f zU1!nAIN?RUC8MAa9&x#C9v`W^zZx-zxRqNb^SBRpl4VZI&T@KQ6wG+i-zLa?0Vs8PZ zd=7Ft5jaZBJwO1~J0Lo|4XARer@A_KA?3z%;O#zK{7oDqo9_L1e%WTz&IKp z$I{j`FgOCxFVP3`_a4F!Bu?wU)fV3)%eh`i8UL2FxEvqbu2*;?6wmd6O-tC2wGqRE+xWe)MTYq}27Liz>0?cJHp+B?11a5YwLfhsSfKM&RZ>1}D+PrT+BpqzP!T7F=As zw+-?0q^=LzBh{8jeVL>WA*1zby=)k#FzY7cXuY6yY*P+ZjfZ?7(EVzA(q~6~7(rC3|~% zjAulO5PH1SL)*xxA~mRmbI9?yCzG53Hj_BLcLm0PQC_>`UpU#sKPQ+l_nq>yCR|(( zN>o9TiTHtuz>AzJze*BEdi36#WY0`}tpTRS-VhjJ5YRxI(l-jNZK$2rFP?n3+JBI)aAj7CL9yC7%Qwz>jP-a41u`HwY+s zX8FV%d0g1FKZK!Qe-j1)i-kCF59gzto{{Sm;TBpu>1huPYrOTaM7Aoih5KMG?Eyf} zv!~4U{s8qaenD0BY;wJ8M;nhC83#k?&}p7JcC3(-8Pko@y`I~>_V*l4&1V1_T$x;%jv=PuqS##;_bb>zW6UL?j z2PM&VV4TMxJ@YX&H6<2%LLfpUf9s{3&vO&)hLu z+9Hhx;$F`5&|$vbQP(k>`z@TP!RrriKi1W0EhzwHoaee=;0|N@ht<`eVfN+oUo965 ziBFx&ChJ1TO6~(Gv^^Oyj-Ijb#L*jvZ^J>#y`4u{Dc&Hn2AGl&pvRYwmn;JLa(3pJ zzW&EH2&Tu~jO@}L+dd8rU6CK`uTK!2nNzyDKQGQ8;(feF%M6~;U62SY4@Xi`Y5yxE z7xNSB=pE#SXKmqCH?xI0rp*G9q1qgG1s1vMZ3IF>B==zQdtjs(BAq3wc3@uj-DaC^bCz=>rjfYT~kW0Qq*o{t4Aq z^;wmr9tDMk9B+T+mEb|jcQ^wgP+8#a3!_F%<24#6m?O{)`aq|Hz=Q`rs~2+WwU{K{ zE9+de9W*s}If5JOoMKAlFF)yjL@AwiP1${(m3;>JA2zy`s5@UUOYED*F>oA?0iU9~ zD~qgZ!Y&l9Xj{=|PqZp+qmu&;={-1dcoUoLV(>S7p_O~oWVeft?}yWFy5BDvF5^k4 z?R`4C*HI|fUZFwHE#^y*qTmp(cY(Dn@iL+X4bupz`iT9tzVstB=`Is?X_+mJrJ!E3 z^jy?C6!$NH%mqsKs(aNG?HqU6#&L{J^+U!rlmK*EuFNw1t+n_q{OVcouVVkN0)~m* z<2BBCmm1t|WEB&Zs%{Eh^Xyp6g255`uNq}Sv(%?e z@Zm_zJWH1>@wp5W1-s{1u{i&HxiN4jKS;9fAXMKv3Uli5LmfnMRaIqIgu&8l&%BEZ z=WrXrEp;~C4+&V~y6np3Z1FE&avd-8wtgcUbqKDOI?TaERNyAw4My8=6-(K$8=)ww zVIidnoOQi|rnYtuQZcNoetHd1Lumq(q^72(D1dE|`|y?s{U$=a8~;99|8=zwD0?eH zf+9^Nq|hMtF7)6WFmDtM;dJwBKbEL1-X|aAlE4IMXJZ5(hqslUa7jDuWAu6vSE8eP z9%8s?5CM2UaAy5*q=M>R2gR!ib?E#84tDFqAQ*f*SGAI0->vj%2R_Jo#~Ip`)<*19 zPywDL0x5YEP$xs8Cn9!}X|N*4RaCC}fD~ek55&0jr|-`P1_u4oT9Zi^;T9Hz&)d+% z9mxlhViW%UD@6uK*6fUg?0m5l3^Uj;MB%nT1)chenOcZCok+BKK-n$(;$X9UI(^~=$tN9najsWv)*Fo-dVxZr#2J5Ju&Zl6rz0i zAk?me>ysmk^&ag|oGolJakk{xPp`5Z$)IDMNvfZc%R6+ftHl5z5#2HwFtS?!{2+-L!F zV*GC9XL=<@!Vg2gv9IpN(C=2*7YdoJ!)7?=-vWZ<6H^jjegxWe?d`Gee_xi5tAN-G zTKhx!In0*}U%+2jBkf!8c`c7oy1vfu*j;#Hgw6}v>FKSMtARFbCPSLd*b=9?FUiB= zE31&UAE#PaY|Lyqvf+WzI143H#~oyI@-NPl?5)uB^ksE)Be$&43)_w;+m`%i9mw*} zODHj4$V)6Ds4ggY?VG8;f?8RK#Iiwrzk029DS;!RkCr<4E|Yk%V5PK=%$6;8$FSB5 zM};VKkZZxrKMnFA7+sD^!?$ncT@4X(m$o)jSu^i#a-txpYXr0p0qI&_(!x|BoKsca zbNce@xVR5sI)6Ttu}NkJF%<=tJs% z6yf}T>HUD;CYq3qA`vndL_7uymJzv!DdVJIW_0wGBNh+C!;g^mY2P%Yg_U@p_d$Tv zJ}Nu$^`u7P6#LLH6&l12r`-(sODI~#D?js4V0AdU-)|M)pz+Xe;StETb&eN7UL&1@ zT(D?M&0=J2BzdBKh-2;G3%m%6kB@UwN?o3gx+?VMK^&U;3qah}dZ!n$vA!wm3BLp2 zO&mG>rnVP%hl>LPvGM3k7h_!W5e1Yzs~oZg>&NM6Md3XQIrZ7`xM`c=F=j}l0?r8! z-pvdq1L24p@P`Xf*egu2>?-l%FK4;NOCZej`g>&`hK2QwP6{Oq>_Z}`;(xxmTt7Hr zG6+Alc`0<=f<}|qqc3EzPHzsXrD>0Kp^k6xFIvmIE2N}&AbwSIpa+@jk|uH({quD) z5%i#~rwF``KN7won;B&JBzIyrfXyT}vy=pwPq04iQYB z{4U#u{5FZ4iK_(@2B6MW7PS1+{Qr**@|u%?G7Jo_y`UlEHapqMiV4dR#ej;(aUX^N zNH=0DAk9wx@$jSh&KGRY`aRW;9_3F2OJD1O3XY5@k)H`ie?ioI#=}bbF?&N#? zlgFlu`XQwHr|P5RbRzAAxB4Bl<8>~j3}~8c(skp@L%IJ3cQ(Mxs~+Zz*^?-hhd2=ggZ!zbof=UPi+58yPg$1vpJDF6ij2Xsm_v zzHSJ&hc~>s2j;o=Q%=~y6K!`QcR4r51w#N-;TE2rih7rTTHCmgk`9}aHpJh8Pm<>> z4~3v)8hy*SG0qKNjQ!d$z?7O$`&qcAHf`F{k3Z3D2^Zdw;XXMeoZ?_v(ynA$c<0!z zc@)akx&Kktb7f6D+dUjH4iTp}S058pG)79W3Zj})d=QsnNzz$us&YReIAR)9#JQ$- z7etVpWMh!od=$D7k$%7!v$GBcS(`~T81+NYv38g-4iYt?6dHXEFjnLw9K~p>Dvypw zGvQf#^L~Q*zkN3F$CN8#IIZy`uudvqU zjYZMB3+>tlA-K!V8h$Hw-mpdf&PS_YOGyDD8`e~eMVFJ=-N{g@OiE6M=p3q3)GxOe z5QzWm>sxXGAo7tgndA9rnESGBo;2X6ZmP)4$;m0YjC2oCslZ8&r_VWZEkCgZg8SVb zB^w2qL$u;^zWsoL#}nl_hL)56|7#2{ufqZ_=*@6hh2ypuWCS)pfWdY!BWIeah5Zoe z`g_0rv?~>$XvPMm9JcEQ^;Vzy^v4WMo+q7y7Y#J!jv)Y?zkdCXmt$_qY_!B-Qp+xA zYVt!%!{`51fP#(=*6*z*F3jQgmX?-L=;Wd8RFmFFfH?37Ta1f_NwGmL-^MnCuS0XY z_yQDKPyi>|1`aDmqWKPlb+qmKBVWZZwAjw^pz4w@<8In;cWf8fGAsj_#`)XAn`^Jd zvw0x|Va&6*xcGMllN=)qB?OpuH1LdOeurxeqF2b;h=$!H6bCoK5Xod?3w>2Zxt@-Y z@w4NKCy#7cj3l4i+B!VgeybJ|TR%E~7x z(l&LYGrOGdCQ0q>6S+L~yH=SI2mba%A<|fT3m;)e$f?w<8hmEe!htl76cIXLHsn zQz%@1%H^BhVG$E;I2U(yOqS;jx`Hz7)nTuH>m^X?;??QW3f;t#x2BUMJ(LFC$MGxF z?APMr_d@?27(R}ER2z=(F0g8Z8YwbHhr}kQ`Nk!a1sPuU7(ULqmydZUo=8?ZJC3mO zg%=;d(_eIw*r$*+xbo+Q>#9I5dT*}SX+DvXJd8#AXTZJ13! zdBG)$1P{AMQkgCR?9hO|#9B0Q$8`NGHoD4i-fxBlaS$v^51}#09W^cTyY((E?#?G# zEa~RS@-rXA_gMb;{G6zj`n03NYG=T2J;7=RGCY3)O95TF({#e6I7 zs$tI--yje@ok+F)`*{rZo;d{<;0T??po<{T%?VDgS&Eow5&7ug2uFYq`A#6qy2vSJ z=H7z`dEa{To^yDWoHZFpIqw0hoYj~e60ygv8RYz&f!g{I+3DLogkZRaEIS^yYZun?$2;20kNJyx<5%EbKtcuuj= zq$t?Xas(^>L==$_-=jsJs`lbZJ^x*0Hx^6#pbb-pqgM56_$68Wz7~2UvzyA?pAXq! zTr;3vaGB@S~|sTApo?i7Mlt@biIn zum^s85l=V|yfuy1Kq-?lYENaXgjY)?A4nRUsBV0S+CFotW}Xjl%9+;lGR2mXwuQC`Nz649n!zW0_^!o+?C;;;|Sm6s_g zK|VLMs_4WzIb8m?=Inv1R z`sB_PXT+NbUZ-S->seTIznrGD5?x8wKeAfI^Q{z^?!tUB2H5P0sqYR|hJO{5-=;IX zXb8wyJcuK6Zn-vD;P1;Cp2_pkrqrKD}5z-ZVhET9|tj~3v( zPJGRt)qRk`BK%644~wAp<6fH{V=R0I4)i3JPxz3X8dLBr6YT{k4{sht_gk-d2isovEgB)VoBh^98-=j$w;68ud? zIQ#*qE~AN2=0=~vT;@ptEbf?Y&!Gtw32re(S1$tliSGoQicv%tAQJ4zB)g%=zH1*y zZ;!ZUE8dI2)t%`WW%ojN9h}@;S-I_{_g!GE1)x-)aOD1YVwraZj1BcH=^f&P?mu{- z1KIKihn0XAeX~28VT^PZ*MY7?uIAx()4CjZgmln^*H591DtP}fQy#`mxnQEE2PRYN zxOz*Vki$q9CS@n2PKmT#+y*Dh<{%IAMC~j;7UsD*UwY0Ypt&znh`AHwvD^|va$E(< zwRW7i&AhcnT3X98Q#*LSM9~aE74*DCRyN&= zZIU2g@+S%l3zG(Oe!h-%m9Gfuus$AN*xjS53V^|UrmnIwcj_RmmS@7_H%^;m4>Eg- z8)my+*?LF;FJSKR%$%YB z=U!FSxhoe>TDzc4vtR|uNJ~pc6=}gd5Vz$3TMs|-^gYMM>Fe+))WqPFC_q7T0-{e` z#%%t3U_^~Qk6p#zFK(_RrJAAl{6r$FwA*R-!KYOt8Mb)30eajf_?yL5%*x$-9|PCm z1nRGa$fcV*NS_O$7f+ET2qObjmR>$469`AD2FM_PneEOq`BLPoj1}J;-fv?= zEZJc`b67X;z~9c;@N+UHi|B|tuW$~FeJ5}6mbIh3-B-q7N8`ENNPxE(TpV#v;tazu zEdu}A>fg(;pzsz!?BxMc>ZaKlME15gH`>|=_Q1T^kZSwb2fHE|VH;kjrq1f@u$n?+ zR(gfyD)laNcbbWUtDCvP0s{RRr?N;J9PY`f{L7Yo!JEA=%X7vxV|u8}8=IE105n$u z)4%nS;hlhJzeF44Y7;z+Z3Y znCWNp?j{tV#=~t_vSvI*>24j8cf=CjUHxZVN*ZmpyA&zpW#5>37kdadw_$|{^nD>y z)E&rauP&a9UHSJ@$-yo3_kU5YvBeLZo(g{W@BsQq5zQ`NK0Z=-+pL3Cn~jFGJlA_b zf&o7Zd=f^J)s~XtS_Xc^(@`3_3fj@BFcXPWh-TThHO!D^(Y>0FkDO}k-_kJhfv4gV zQgna#O9@DsIDeVf_<%n;$C}`Pz^?83Xi#fn;E(PTTm`!eJ!OlG;x&^8gIZ8fjwtlc|Gj1X`srF+1gtb{&M9dZ(XY$nf%!C(wPvIL4Yf zCM?l9*fE~lW_-U0hQ=K)i{^8ZFfNY_NQP;>@YLt^PPpl9Fp?vLiz^S|=w&1%Xf5qV zCr|Et$)Lhsd8OYfIxDNGH`yGV*B&|Pxv)4cZnuE)Ite4%2dUK62%s_w{*{UdH`F0`7K2t5)(`t!4i zi3zVhxre~tdmv_t@#$NN-_&{u{@`5O9yv3rx1Za z7;y-2*uaH^lXLWLdm_>51_->#DkRL#SBWUVFm|nhy^s~7H1o=+F|U;@GxDgRU?#Q6 zLa(w3Mwoo>)vWUutM)BBj?gV1gu3P@ADv9t_%lZ$u!4PZMxuo^wEV_={D;ywBp#WX zXo(rq&BbST9EUO3r?X`>nxgvDp#fuHc4z2xq+Z@Pq%DI|_)J+4oq>#wLG^Vaa90^d zvW60&l5-IU2U%c%(x<2Y{h)_-TzCE9H01{TQ-| zD7Gapo#Wd5#$RI%`;n?LVok;Ga+^=X-&Hnt8sf8H3Ej7%#O=q!y->`2An|Vp^uPD2VVfYXm=01I)5A5=g&@DNC)ny z8s~>G0mi~5gHpBnc@BkH2$Fk_S^7nV2bkGeMRXfB(|!)#qNhr>&IikF(L)-2aY}Ia z&frFE1A|WvkKy?Gfw6cQA>bg{yFCHzm3W#gXeFdiZ!$4Ea>FotjrWRD5EKj#((`~xb z6tOaf)P7q7qjm|gO`Fd262;(_@nCjCIQ>!=m@V+aElslRoIU|HzIr)Z&;a#09Kv)5 zW$#e-Redh4$Jvd~?p@$@WpHeI{4_gdICoqF3~k=z|M>teK1K$DZ}B(;(_Jt(%9N!b zpdq7}4T(!5NLtnwf6#qh>hY%$s4Mk}oP|W{@R69C)G#!+PB>6~WwvimZ0QcbK?{k< z65{WJ*TzS?{0sJI_hn^wE-O2=`Lw@cCbX*ikik$tMEXs4VjO<|$1)!o1VhA2R9y6| zP#AwB{}E}&qnYtZxKgeV)$d!ic=29f03wKf?9+yn!=s$N&w3hN!~3o!*h6xr-5w^s zre+xN?y{i6D)O6w?D|wko>=1^)vt&nDkmWrinexk=BBMsTmZNeAwc~M_RU-YoVu}% z=o|G9-&JeBm_<|`TgMaKZ6;ka5P^LTH_C=O^Bh*S93&q6Akc5(j_#aYyPBOAlPx~^ zpx`|c(4W>TY@}tH7AY z=KFN-(^8PFs#p=b3y<*=4lXMSw-SKwXyCFM`9mpRtE&qV{Hso|M$0r!leJ4oD0VdB|6UhGJt7rz?N2}PA z{sKlLuDTheuUMC?IwJrYo=0Kio;IXM+jWs1?XwXw4h%E><2me;OytX2RCGWUIhJ*z zhO_60uC9Q!?=+(YQI)^PX%Jvz&ePfuRY`B#r}+nCNMhpN31uS-Ij5DawsB<65uf z38?jTE?{cBxBR6Z?)EAhAe%2~MJp4eysp}cTIbFkni;U3HgkZzp&5bI1sM>yP`17O z&-~+WF}6`yeJv)faKB(LUvGlBVCbr;iHY_sQ|9Em|o7AJdWVuE#0>8zHH~oB9t+hIag%5 z?sLZkj))FY)l7N^nlnREu!;QY7AhXC`lf8c%F=Ze{lBE&Qf-!6O+>9|OH`4Gx&%TZ zi=vF4C%!%Kr#|-~oK$jZSvyTLwje7v=jVpy+&2V=vlyTWy)lskOb?n!2SY^62_`P` zIEepJ#-L5CcQ1iOV^+SbO{?|oedN=F+{QH^E!&XlZV*OG;_=C#ahgRu%c5bF4nx$` zK6%&#o%=wsAH!hQXhg;A^_ei&;{LR>RZL?sG&i%H4Ix>;8-BVuLk8qu&<2+${KCt) z=guv3z}+i^gfs|ypP1yVYEQEKToKZtDsTRA`7B)tW(%3I9q)dEz~LbT7*VLZDG1K3 z#fx2^GDZmC&LNLP&<4^sNUlchWYtZv6y4_b6|wRXlL{~0gBOpww^Sy!CWA=Zw{NyFB^9m6ZmLOz=uI;Qt~ZX7NOv|_PWAG<;UM;{73?cN zA{sf2QxVoGbjp2M5UXX4B@*|=xB`jE`4(K#Sjq_Y&o=)gP~%MPVjElkP>M2*?&1=d zizz&egR#F3kuI7sl*Vywm&3w0O%{NYTZwASZS_g}cC3l$txfC@5WbSdS~Joiuq`Ko z#r*2E;;4HwE2rxUkJ$p@P^EF!F@)J)?tS{chO+!4qoqZF*LzJZgi4_pPTAzJX(I|! zz}a8Q+W(5U%7v&2h|Lr9-jH@FHEX%UeDMVmXw@+AmP6AB4>ejq-av(kR&NnO3_-I& z2|!nf^MtP~y#~`WB;I@%D|(sOq@+S9hdymw3L?52VaSv2N4mBjY75aVTjFa|MH}~g z-MP$jYUGFaPe<8c#&;4JrUd@H5&_{=-Kiwyi=>$4L&7K>t0mkmMw;C1$74B}E)Ot5 zF#sxf+G6*4?oWA9YYKpvRC^bao~|Q*sb62(0t%hyk=PnxWoOs#NM&vVX&VpO*i!^( z-I75{#}=&`}#{11uc&4-W?>&dX#75CpmO28&Gx25K8MuohCj}~q#^cjs zqFG8c0x6|{t*Iix1L@FJMZjT-Ad>fr*xGFpO4D6lsYI0jv*xIyh?iQs-_J)|=VpOb z%4Z}%3BXA5#ya4SqQ$493_9DCr9>Wu-8$xqWwx!oCQ1jjhL zCyOD17F$84?$KUvk`P+1m2mOiy?e^6sam?~sue4K)aC%+=pDvHz)v&G&ZrpoZ`wa3 zr^%d=xF>Z6+cN8OkRG5hYkh)j?c+B`?2=s&%Z4J!9PDNHB6=cU+9ou8Ay_>sX5#%` z_|HcrRHsQ2eBXe57(PVfff?CYg4>>?2d2g}y6S3bYSPE|sbZ5;ajJ&8`iQmLdf$Q_ zt+tH4_2m#L(~9snm+2WjKjC6PTDN%Gbms>nP#HEx06RQwsaTDXnmx348Sp5_=^#X0 z$%dDE3Ss4M9xc^%HZhN1NT{Np9nRTcG3u4^eHdg0<&m}0sI_O$d*#Op9UV#^P%G=w zMdurq6wusf_zd;*%BJMOdHiaGrY~CpM+a#RRKLz}b9c?GPRN0SOIi&^Ziv%qCgu=? z+B6PVC{a)Og}SrKI=Wduc#a)?5V>q9Srmh}!eKfV53wOJaz(k&hvIR1(n~SE1wR|^ zQ$v74iX%rOOjP+N?LCv(eHX>PdkejrxQ!!&h{eH+^}n4ye;B`k2Ba(-glgo&`86%m z=TVHt(2!{NRWM;WeH=N#G975nd-^(o#gYp7I1^FQ;d$lW+(lfx+=UN)Q&oNcRJ8TB zwS8-q`0Y)~zF(%^LVAh1`x^he{b#l2^xMs;Gm@It?`fy=pImt@dbKHEIE@l8w|HiX z;VqPD@oSyMj*_$H_g&}_H@idA7-8A9->e5bHWcYt4>YAeAYDiF%*?t8=x|=Z9KoeP zMz+QsC&PGcaZO$Y@K~mUch}y^{QARbW;(tQtxL(!inC|WayR7kvB=nqbsn^Ns}EkNACiHn>}J88 zQrY!$?yfogq}obHPwnZ2x{G(o0;;KR<2f5gV96{sai_wH_Zfj->qqc6X04~XV=OrA zt|vLDb+HeWD<$dn~hB-x305qqv)z3Sq1r58gOpJ8_%Z5IIQTb`I``%^8$@z4Mw=ZsbP_#f5Iy>T+?18m_+y>}3A8ttk zC#EhY>oFzy1%dp14Ip!BX!rx3Gn#D!W$MC^?v4zn2|$khI#n!S2EFv0A*yIV(G|;) z`@^GH!8Cm7T~A+MU$+KX)$n@QaEy*uyZwdugW6>MkgS|rbB6cGEWWpIK65Mr@Xb!4 z%}R_$IUvs7mgg*GU4}ZM81!kI-)T2E8d#kdPFQu$UoOH*UsfnqI@$uYUEzW9SmCw) z>GT1?q+k!;SBOnajrln`aR!$l&Q=Ei?jGtQQI^mO>^g3c zNN;&Mxp+`{F9jJdbWa}X@u{h)I@Ug10!aa)n>m+UFQ4T%v4=_TCrBR4ytIAWBgeyI z)NRx%K2ZlcaKhnR`de8e)i%;RQ`B#e8PYvVdyQZ0FqQN&27IN(|PE%2lW+vV3?;rAKSLt$l$pj@S5 zjC9wA2j|ppP>RvIdAeE9gel5JMS4jsbONaEiL{4!heHE8Qjb$e2rn4bMRwz+4-aB|=2! z5%q2*08^|NxJKlTN_Uxk$rTWV==8v!QU5$Q6$#B4eJ@}^dV%oFhv+%q34TGbdGOk_JWJtp$Ad_@NpQ|#nQCJpPCK~ejfCp#IB z93)5rp<+Pfz!0g<8rBc=fqRCf~i#uoK#0S{9Cj8-o!@`}9mQbI{d$p(aV z`h$9`w#juuHpmy)0v0@uk0#q@<61CW3PPG>*Ie2FeaTr@OxaIsq`4MgebWTGZ^ZQs z(HoMZ5sohRtH49lO@(J zSF{*tJTWQE_Wu1cpxPSSz_xBtrNX<(cf~0Dn z*+NPv5{;x6Vp5!Gs}IUR(tFc}{c}r~w1FLszDxPAA$m zXYdtJysykVI|DoUoyJv^LpaG!Ia1;fxqY#JpY=kD%PQa+v99zmc4ZfPFuY%|Wou80 z0*L-<+VnEZg;3K`Oqczi_u9wbKL%d2c?!6mnpi^jGA>Tta#Fn8@;yv&7w(Os2?*6J zoUgWXSJQcRJc)~{LhFi1f_vcg;X9YmVND02W5MTA5mWM)VvbW;A@Fcr*Nl)$sO^1~ znW+~@lyw&l969pbv0Qe44`BV{$tPpJjOv}lx<1|pSfO`zaDGNa=W`4Y^Rl7)BC!sY zr8y8UWc+yXm?LF9KF=?24-b!L)y(ni_^fYF*DrK?_A;JIt1X+x66E|s?Oz`+i98{D zB;KM8iKdUn+uyx4y?N-{1F#T<-vQRXu6SfwlD89ccj^Xs0Fi~SVTl#nu2cZJ;ffxQ ze9Av&V|F;cVPHKrNzV(eS58^ zYwPnIc`7t27kTL&>K9Ba+3TE8aaVHUH6J07!_GCddYc!((%B$dZ$_f<>LqeTivSt| zA>ZI6(|*xIQ7CzzqOY6yFyO<$cwgcQ36ryxe*7cWXy&!(gZASHC%DHCOPx zP?>Hg!3o^O{`ixcmi~q7mBiT$DfEbJci7$#1Lx36B6+qwf~XR4e&0%99%zeh^{6kT zND&bi$t}x(W+&brKfj~{Wv*Wq6Gt`?oT#AcOBXW7ZsGuP&Q=oI|0ha+J?Wyg3@!#$ z;>IiiH%_|G`YegfoBzBU&3B`=*Q{MSa23U(ecD@L7giX!xUy!(ujh0I>sf;3^fsho zME9+znwsXMc)eWLw4E!@Owy5ZN0LKZF7+V!q6?g)A~VJKU!{t_UkHe0I3ZAQr7AxTyWO0qebBk>xrRWP-(x z004Q<K_s;)@~qBr1T0yB2q52dE>4ulExEM{HN9`b?Lh$= zbV?2coRwhle0;QzUcWMdOi3Nj`>@YdB5_oB1W2zkS=4ten4SsTi5f*_F59%mA9xN_ z%3448l-1(_UVAy72o)w#7&Bo+?K%dCV75WI2n0^{%QrXFIbe|P4t z+Fq2wCw(YrPFR8TXLwN1J`MT7Yn24Q)Da)X%6nx3P*-C1lk{CPwv77Pd?Up)hy-3D z16Abh(U`@P96se?{vOgi`=ciJLhr7(i|N2ct`Tpy=i=~sBdiO&^^!HE6$}9YHiy`F zkQ+w`x;qf@OH(YW7UuJ9z+^coc&yDGwcju0rqQ}9)lWqvn47%>>^1~iz`j5+qh zAK*+&N{Pvm0S+dHD3~p=5X&moLA|KdrJ7QVbb&7ep5t=S1ZE^4{WWH(R?dg9`B1%; zw?YAFbGJk(FC3Z*;-&;3FejCx1=;WX!*ZxiBtD`NroksLJpP%DAJUmFK=@HTENbpG zItR6l3M860NdQoEXV@I3B$pzXx=F3r)l+U`q|1j4=z2NAoQ6r9W?VlokHmBaZVi;2 zo#&5e?ZZ7!J$&d;U6Z5Cs;8gro~`lEgXCvNpVaam*Pu~Y66Z__j(|1glv=m%F4=QA z0&nxYY=pdcQ0_SQL+!bLF5nDnZa&l|#vmV{i>HH%U%BBlMAEkw=+VztfKpiu+g;Nzd8hP03$ z$~j&nWK<1KH|xh-)-s>(b>H0a>ZuZzo7L-M8ay8EMqq<1>==A!&Ql`&F`L;AN;q%# z!Yl4P0zZ9=j4J_KcA0OZKfN-z4}=)q;zfhvB@9jX8aQ(=|Br`@_c)z$jA@h^J?(Vb z#pZ~xQu4^n*|MjUJiZ@-GzQ%reL!{0>~I_>jwQ*bdq<~^_wJ%ZKSLJx%o0sm8rB?Y zJKNxzcqVB$b+MLX1=GAOG#wWMh#xfVc7&?Vlvb$D)P`kwc1np_Q?1`2>bLJ=-eiel z4fX8WiktoYc4Iat<&rcbif|}bxeFFszoF6mQ}aahYG*CWJXaL$A>T{${Lm-MvViDN{s_ zuHCKq8;s~PvU^SiHpnrC$n)tq@h_PAZGkL5DyaS=xrK6V5e&#(IThVcpYHd+odhXw zCCO`ZGBaCGwmhh?x^~f{Ni=p3q(Rj)%D=K0s3Wi?sPsBzL{Mb$fSSF%eSX|~n434AO{_$KywDG5-uN@JvclkI z5hfEXSwf~lmN-vkb5hn1jT^i0964}+>*vlD6ffTYDk#F6bLao}7k~OZ7P1 zlf}QBcV<&ro;dOrjhma9EocY^kur|fThlI4TiXTg^<$p3gG55)s1Z>Fb%pk*+HSz) z;@tZUS@4hFC3k1#FbLnIdYkBNQqS^1$#|01Rtcfx43CW`4gKBM8*iKTU}?EA=TL4O zG`e=o$f#vM#AaA@|L%x@G*00-36THZhK)5fg$bX^%QfTO07Udnq5I}&bf>6Xt+HG) zT-QCEm;{bmx&ng6)4hm0I8LA0Yp8VyRfA(%zA^>l=Sf>P&`*6+(22Z&@+CBZMiY9Q z5H5Eq$r{E7?er{WSy@>q;!4b25f<#3MVVs;so87A-`yC=#1vsQt4@Vnps3&A-T5_Q z2tHaE$|8Y@KarHYP`5cCAHR9JmafF28DvVU2m5cmGDUy#Sp+IkTb9hD?e|9`zyjw<2m@nc=`<-Ut}L(<@XU5=^PM5 z?%exZ@*79St3DFtowxCkiync*ftlnySRu+6~P0}j02G>B&}q~ob-(*^~s4vg&y z2>^pM@;ccZX+_6mR3~s0I7(szI*J(+A5Ic+5*0CowcPd@eo`Lx&q;iOMs}-+_!H4c-=h&+wOjt zenEZ1NxIaE&3=Lkhrs#;R1!j5P39O$(o7sLmR$uSbotZ|=gd%lMD$hLuL{&n7u-w2 z0aeK2s@)G6^gb3!r1VytS2mFk##{)yt1zQ0n}DgnfBj&1wJlNtCsP zL5Pwq+JvG#34@S9+KaSkv9xMEB@{`bjiizx+IQ_GTD3`?772A!+BofHEE|&*!~960oQ)w>tb}obf3B<;$}+s6b0&KrMdH|A;7T@^7Yi zrMS|nNJOw%cW!?z|}Sw2{NEfT3M zY}-Ntgr#Q|H6N_uSU+TASxfB#G&8c7Kq7yA@y+}4KaUrMZ=SHK{rqPyUNm5OzX5la zxEWG_kh^iK4ssLHxD$=!%jGLqF2aVRK79qfdX{Z~qT+4jo;yWl;w`yx3|w8C%67-V z85BxZ*^8PKAz42RZ4w*(CXEU`l=2Zdphh(AAKTlHs+)g%8hi!cyfo-jDM*6PcfW9Q za!QlgTGoR5AvMg@|G=`#>;vA29dbbd&GitwHRY2FHp8`q@y@#mr}{2y_U_%g8^E(k zrQ1e|$lDFNT3N-_L8JE!NQ-&-Xd&(l@s*WGVml}waj|^-;6hMih>nq6(B9Z6(?4T$ z*Ds@Oz+2=y6sF}I6xI3joff~*-uSqi!c^dP+hwAkZm%3B{W#F=T_5(Iqpqn*_Nl<-hk)TKSqvm7~Bt`@&KW!LWDCc%lNQ zj52Ky{jkA7!B==rHHU}_8v>uhAa$7uM#Ka9zb?Lo|8eoD@_3%T46{Z(@=ySqj^a?K5!@XmHEkO-K zKe?@^-Yk+jFWo`ve0^`=NBqhmTw}9VC}0n|a%4a-mRcx~n;-TB-scp?!I#jDhirv8 ze7-Hsu%O2_g~BIYx_7KlkR}$BM}s6xy6XM=XW4e$3ll>8jD_)Ytg*d6w}BhMiQDp_ zzfwDM`gA?G4{xo)rOs@pZ2eu3QAP*4Z>JzYJ)u{`^7B9)Pw>HK)`9F@vO{qX!|-q>1202#tymhC&ZO>|}qx0AGq)Rmw1N zeaUg$Ij|wTijh%ymF*RVAPSVKkzvVRP>cBzwFzF|pV(g9W|!`n5&+I{I3^_}aCU)i z8+eWs-e`JvVe99ZdW+_aN;g%C=Lr#DM4cRRT-$@XDLxEA3%<#6=`UVyDFH#G2eve+ zQrfeeqb?Fx=&QSDqvR-E9v~p36SOvW=$$?-^R&Pp$N`lVpoK-rC!e+3x|#13JMOC# zS98Y{?{63ie?Y~%;guMHh`Xe?RdM=@oq>cGf{!JpG}Y@Hx+yiF#p^OtB~_>a59m_nrONCHEa49tU)*7D7QrLC zwEL2R;N87#>*dp)L&Lbi9?=A1<1YE}Hb4R@kum8ZkHXhF2z4{^1AjtgG>aq@qE*)d z1KGZu-O|#5qr=b|h?nhyR*EG3s}YGgLg20s4h)!fCZjb3Q`>S~XRho!`eWE~cCbOk zzRE;}_*+Iacp?%+dgIBi3rnlo`Q8gsQrVE&o;G7bs&*Vy!(OXP@#r+KsEIwJ$KJt6 z+izG{tR7RJoC*6}X7_MvGjfQd7q#t0gGe+ZfxU`CU=L^^&Y&o_Di8`(U^fcJ7 zt(BFgf0l?B-e5R`w9;<3y$b=pDBqyKTt0yf{v31b_X|rGd6jyi3+j{%S6zo(omUs- z=fREdJRvUKp$Ac&j{)uXS}&oBsZf(5P9<*ryAc2G5vmrXFywxM9$ccUXL2j$5huxR z>&0Bxn4N{lhZAWw;`|kIszno}Mm)k0aeW^aqVVncSCE;~MG-Iw)7VT%Ju>kRq7gb8 z1?Vb&poFjv?3cNDMgeY}--LvOR+|*Z4ill*yBY|ZW;FomK#_(4vR;ga2Wg3RDA;jY ztF-Pvs)S?#TAzj-VrI(l!<_3LxBXaoTks2Z=j zGF|y;qt^~F0jzGi7yR{vX z=r@VA$VUcMJl`G9%Ll|8$;L{+fjf(+B|KJPDAPw>4kfXNXb(uV0QR>VpOepWD%gDj zbKZJ!*Vj>(mOWE$%Fl7A`6U^qoVzjc2{ka#MP${%XA&>ivBq;X!>+c2l~ivLi%r(I zRBIg%rF79%j_sugKA1JT_TY?5mNJD++>EaNHhsr}MFLFVL-lYf-9SxrG?@@0A|q?3 zJK)e;nz1$T!E63s*&ApEhK4njn1aInSk0L>YY^DPcY>|r#u@PfVzeM++tn!*pTpen zo*TKZ*80EKfE291_lvzfL7xZp}phYRl1?L*PiQR6XGDttbs}| zd6-B`PB(f9o?Smv?$>*lQC6`^gOH0AY~@)u-d!_ts&c(8FK^3o~$H; zB{lS`Qo0>k+qtrJqr6YUF^OHbVRKXF^871iOIc4bxdX)_4AM(=@5Z3SH{K1FesLac zXRhr6OuQc7FF{T*;y&J9_Ki`1{>)Tnuu88IF7w%YNFFw*S?ZM7rxyGoL9~l6YiMYw zW)6MM*LzFZ*2!_}+8QC{R&lg0UCbZVil$$=pOKnmTS!vrk){lkgVrrG!d89gqVcnVTs5*jw| z3z#9MsnZizv?ObnnCh6BJ^%3uDc$`prfRRFh06p3P9tf*u0Xtsr2$V)4lpy(fw|s* zNkTpXAWMiGsAQ;i9~4dpDVZ5u@qEsoSy`ctGTI;BYho;XE?)}Oe7yc7w`~0?p{+@w z?1_^hTOSPaj|y=+Ut0g8kQ%$bTL`cB`Ue%ezGRTdBN|#uQatcfean`mfPeNddb{|5 zk&#j1jF4wER=1_;O0R)dB{-QbHK3?oR{huguK-_LeBgxlJVY&0;!lX=Er65 z5D!szt}T~VMCx?^XJW%2okFN}a$oST&%%4&!eJ|I2-ocEqf5(K9j~u!XegQ4YWwU2 zQdh@}O$&U!@(Bq^{aD?<<)?Wzu+-)-L)>MrXauQ$-$W{08HgUyN_>`^s}SW;0PLoJ z3c>Nu&9RZ%o14F|bU#d#UQ;t9Y_5EqE1U#V#IgcT&1q-v{n-K)Mp;s5&GW`@Yme{x zMF2~UFAQl-U^Q5oBt}>>%y;JbhR3m8M@#><_;+M3>vdp>KAT3m`S4NQ05r@o6OZbY zyRC-yKR#|Ht{>eb8u!5bZ5TJ)NWioc&NSw%|gQKC6igWL)tdKh2 z8d+=O;TYtcMlpfQG|wP#VeumyECMDD=%A4{Kv-9LCUyhucE1%8t53K?2=dVsLXdXg z02%=3w&x=aL+cDY^kPP7X8x9K_=WpjHW4r(K0V!DeI{r|YW!%66L|K@g^Ly){5bY| zbB=?Rir%$eDuv4gNV;|6X~eU%Z7jwq7G?wLSp)ZC?4W^(=?o{I#1|^>->I;a|5BMy zK!fgtlnGn^qJ%rY=5`9TuyKDOrtJpeqHveUeaWv3)7!oWIK*>;g`|$LTA=0xty{v{gfqm{8dA5?28u% zE%FU(ZO^15UMdF{Xajz6v&_oTt!=}!F@$O`2VPos3b$>eg+6$&q4ZDzDN{j-I>901 zB@rvtip%kACJd{8Y`|JW=g@3wY;8S^bzBYg$p#sc)N)pBdAYH>6#`e>A)pdB+=J$t zmdybd;0HY#w*4$_P4v%x+`=q`{h4so<)x;`cHqd!Km{9$ri1D*6g(++r+6;KI)V-4 z=p9)G3)!br0}_YV3JG;wG7t?|;Q(`w3s_tppM4g9+s2duW5N)&)RZw50A>spojd7% z6v`&ho0Q^ta+IfQCa5Di1#a1v;$4sqm)LwuzGqTIpXP^X;}uHiEtkh#+9>@6@mv~6 zi+q_W(M`G6nF)UBA#6mP9_xB^vn8`7T2{1ZWlL2SRLW71menGVsF!t2rbg?cLLDeM zDpKmdNpZjZeYy~}o%}7|?d5&?*&t2*Vu z<|0p#T%q>%EbM|IDnw^ettXTQ+aLe;>nxENPTP z(r$5OFtN4#(YdB$f=i)_z%Jj?aDnFU)p zRhoINnKI)b^ecaHgs&8+5KufW3*hi zM&*mWJlUo94IbS13mM_{Fb7>nO|Nx6@KL%rm*B|3&)&gSN*`^ivadl^jbXdii=<*9 zet8j)Vr|LANC)_#rF@b;Is`qK3(8OWvLrbu981a0qR+>vT%eO-8Em;YS@6XYc7QTT zd@xZqw53caaC=}{diAT9Ay;Q9{RL-IMnZ-ajq5i~WmxYWXMhdsIBz#8nwg~HskG(s z#0H(pfbz-HmQpT?G;?S|@ZO)cgZS|?RBoK9M|-I+8dlZi+w$Cl*y^RB6jSA%AfL%C z{D)lWti9CIlRTb*UoOoA?Bd4li^!nAzdU3AgNvtdyy?7yP4+PvhqOGnOoWh@MbtE| zitEU2xF6d_blp#OPv@x1Ltf?SpZkb}AFJyu@}*V!xJtUn_ESG1(1`g>@aXV7ED-P= z-vAB&!!}#H5RSG6Ovbz5qKHQ1b;}INCh|bnTU@3o`pMcW1!lYuqh?GK>pXg^=J7iZ z+3%kao_+RgwCIBw`p|SQ{sSRe~_Kl?`BM ztM}t%F@o{#2H_ZU3t*;exd@xL3`q}~UdA5*;^&;;H2r9EnmKRX@R;)=hb;5M<{ zO7E@%0k&CZrc{$?C=?GAh2#BX#-_*C2qM5WbX`(HVqo{~;8y4s9oG7?W9B)};7^|{ z9n|^rU?phd0~r3*q;yi%-B7C%KY(O9*`)CBaHjjXfW&kHn@Gp3)_BIQ2iQXKjP3*w z5+z+^+y$s*gB-V^vY1?ubd(p)p`sjzzEeX1Q21bF=Dw}V?4-p>~ zjtce9sLZPD)N43|lc;iqbr#?8RNYa&y6JyNt^bnj5RB4S2gYJw{>EPWj|~kQD!ZB+ z@jg$%+jRqBZ{n#RCzgd%q8_<5gyfG&PfzDa3Lbw7z!6+nU>%tWoCQB!9QU>6 zq+EY^xlEYCXEWheu)fT*>PnF9V;Nh@bs?a?ID)wIch?DArm{jichUFM1itmGB4C1U z#n>teaqt~GkjmnOHZLG>f+`M0kvpQB1sOQ3JR!UEfBI*jAH;r!-i*&1 zYYm()a;LJ |^ii-0w6!oPz_Tx(E@doIP;+Us9$Mgav53(B2kvmVy~y4@H0V~Xwj z#CWm=h5)8V@c_B$X394N)DcnbpF&?2t4tL0Vi}NJsyjxITkiZbG4-?e9f=f8LV|8d z&8?6=NV&xm$E2u}i~M#M0Ds>qBXioq*<)*96{?t3iGP_akwm#LKObAA?D(8&6(SF- zUumj1t{M~^T#q;Lx(BvEX2ft}7cLspUvb6C$6YrPAK{)3JT^I4K=(f^98J2z%fnTf zjbxLa@j`Zfoo(W6h&xiUGf?6sJ4Af8$lc4XLx@|F_DoC#DYZhdT6i5GJbS2zqY=HP zoi{@g^u~UQ@)Z749ns9o>`KPmlOLMaT$f%<8C{%KE97`S?fO3OXg^*(u z)z4lAq1&m7Fj~eJfH@<8Scnbd6Vk3tGp%844;Ewlu3kvWG^p3NE=ymcj!si6W@mtk znN8%;S56_&!p%K@M6{*AJ@@y8SWP$?my%E1J*%tx=#|9mk_rtM&@S&f5OO1UY3I8` z;K<$5T09Blw-=g#l{wHsBhFd`?~v?~o0;H01AQC6UiPi!G|&STF=e2yuei-!SOlpS zXJMLr$KI$E>sUd+Cw(nYLq z{=gAVtazb0paz2-hEGekuGb^r4K?a#&x?SK@A7bbv5yo@82Z7-H8xY8k@$6s_ z7LNu%54$W3Y}*0__mS@Dv6HPp>jKk?I>P*AE2U4BaxLSZLC4eC?zZl(uH-&AuXXZL zAJ?isbUl}z4cbGehP!2j4ggr7pF8;@7MN<*$V|3EG2g(Ru4T{1MXTKgSddR?W~4z4 zZD=tg8AT;NXfHScdaay?`QCe|af61G|@Yv=GUq#a3>wm{J? zeH450s{#Cyjch!wa6LS(t91T>Fh&n_c{S&gL=zTyxqA<)Or6jim`AzJ17Wf8VvIRD zPou`h99Qg9)_${_ZxtS_u|IG7hOv?Seria?V|tI@nK76Ay~D6o4Vs59bxz#+fS>0r zA~3@eAkpli++$Dt4E;^>BGXzaupHYvbF#`>jB1 z0}5z72A@26Qsah5t{4|Kei(Ku0$d>R{JFmW>@-NJP`jdwra} zMn*#X5tA=}K!v0JurTrs3#hu8bO)<+>tjSc%N`?%d-K~?9c3?`N3VTgs<&(Pk~F;} z+Rn8VllyUA^pe;Dd90EXGXF9xX4;D_5Z2aU{-A5g zO{7Xue}hIbnHg;K<=RmwvaF8WT_1Xa8Kb;;^Ye~9vC$2^rSDg2w#;Tp@%mnVYUZQ3 z8`Si}yIs>FjIgR4Y-twsZm+}vtP-?KG7?5fO=CJr%^9%zaa1pFIhZP8+g6!FmuYTn zq-PDNHnFw$f9^g{9UmJ@y>h>5rutoA|GZS{%!Ns3zTew)6CB^iQz@R*(rz)mfA$H= z_Mc?hJe=F$p7`9Q*_eX8Qg<9Tyv`nO}f@76T)F{rC1rCvN~?sv*Y4wlnX1 zA8GxVfu4V1k4H?s=-?=*z(jDro!a&d5a0exEObLzhrD-S zK{T_%4b=cy|F>2Uv5i)U%z4oo($B^U`O0u;c=Bxq_za|b4Zm=)7Uqc zthuS;Ypfa~Wt8}XliFvLP1`!ID)IwYut4CfILR9D@acAB0oO13cj%uikDYhH-)Nec z#MHqmN7P{3Y}Vq`LJqo!JtROVA&YkEZ!Z4kvS{H#F8@%_5<%hNV(Enf)tE6!NHEd- zwoCOv>~$Df^}4Ha6YmTOF2sBiKcG5<`|CHIKY>m)(rA9ExR7R-c$5jQT_$h{j!xN9 zY?T+B^-B-)P*wrdoN9zx+3gvvPsa`A*Cr3&3=a?QbDY|XPboZ{=;g*(L?Us84TpHV z5pIEmTFm~9fG3y=HwgM9BB@ssgB>QawrmRFLB%^#s`?awTN$W?*j`ZIhLvpAB?z)& zjY$%%?NY$$VK2ywT-9)`gmVHVwJrd$liYA@deZ30ahPYKab-l~pl!ovc|rr4AmE|R z<Ae`suUW07R%z+d(C*|h< z_oqmH8X%~3R~=ksjeG^GIPAKHF1?$g$*9MK?NT0ZfQbCE;|QGw_t=}$Tmk_sSVH?Wz3gwO*8@MGMGY+Xb{IaX=FaTn)inbprBpArRXS z>8-l`cX3D4PZ`x_8&Kx}hu&>VgH$$@ZKsn+7kLC)oqeae7u8v2%#>>T!yl2FIb)#m zC=ZIabWGCGP+dd*yHLq#@RPK&W1eCXey(i~TwPr`TiIw9X^xqp`+--U6ryY|g`fro zl)2#$TnSX$MInb%;8a_%1GfUV>i+#VEIWeS&)lt0HCa&sl?}e1hXYU_ewE!SS}sQc z?4dJBd=QgZ0N$K`Nez;Nr+1538{lJAIm(<(VR96a1ug8r$DAU300bc^dX>E$i~@YC zg8%MYy$3j%&k+eKBu;`XgZwc^>^Dnh5d$jXL!f;TN-sc_p%#neFk(TLB&POl-vBSb z8c~#v=W0{4eO9*RAo}r z-IR|Jk?`Iw=&cez;DCEpgqz5;yY&KC+-YH7Mhi;}wrL$kobFmgBxY{df+=Q}cf-g8y3> z1tWVixINe?H>V>r6<{}Tk8^ZHcRwTXGd(!S(D%3}*T^{^_u;Q$qON}V;)RcIP1l;M z;Ld%l`w+oXUE@49=|)n2qYK$HLk(!zy^g?&wqC?ctFe*V#W%TR#HC;!{6}U^Ki}-8NfaEw}xm>~8Of zopbnrj_wp9&FW~fsUt@rVmZ}%K&c(iD1hlZh@^mwK=q+;zVIEM5h_GLFK2&RiMs_B z@3Y+UVGnS$*+~iLb(0iK5wGx4T0&<)RjIl(jAcZ}%@LC3?C)5U0W_*r)n->o=H9{c z^ex&E#Xqbgf1S5DTWvr6DHyu7ti9@2H<$vqkXnxMGQg$Yt2tkt7mwtW1VC3jbw4oB zOORqRALpnXMXeSu>wzH7XNVzgN8s`9F4q_t?jj=Ajoh@Mnj`92Lc&ppfW_wUl@?8K z{p(;H)!WzCwnLr>i;;Z zQ&a?>V|q!cS+-e&R0i8?>cL=ZN8(rOz;#98P+f@GAZ~S*GswOA%wppx$SDs7p<0Gy z+pJHo?Ou~%SKwWZ&A7%bwxM^{>fM1B!2ZV*{AYl`i~)HXz}7t(@)oI%aTrcVm?eqFDDn zHd4`S16zPsYs&}@?^ujVjW0eD7a9s{%vAN>z=h|gMl*1VsI$ErihOd}=c$IN=NEtm zr~Yn({D=?Gk%**EKfWJn!mzuDqD}xPGH;(C^W++Vp(vh^6HEAkn~Ps;IfEAaA~(ti zJCeF?J_aYPY6SW0gj>uThjkThTifX$mj{h7N}KH6Ehj{c@y9< zvVk-$UjN&=v?u}%g5Pwi&35|Ppbu#mq&CrMaH`inQ6l`^2kdgQd#S`d?+I+`yp20x)~dP6j+o=A{nF z^gPKYZj3{P-5)vc!b4)B3_xI3HtT_oEFHxh91k>NPWlt?^Fm0b2^rXG$9{#Qv!<_=qv z0^a5!HA>hUAGoJ)3Hqv4WarRvNBt$#!6en1@0wLtdHswnLrmlx4SkDRp*RDHske_T zv(Ob?_{-b-^rGn>FQ9xYQdqMYg73=GVr;S=*chG%Q}sQ|u@S%M$P4by@2CC=Xy4vq z@!EqU*lnaqY8~?n#H>2bsDL48ghPkoYU>_;naIZ7T3J!C zDmeiLc3CIl3aZ*j7i#9b0+XI2X)4s2gwtZGy0LhSI;j%~7_qb$F=JY5eefTg*2C?- zw1|EGf1IrUsp_X($J1B37MHUkbL)3ls?>0B^#BEwPJkj08*)d~6tX2vCl`<=+Nrh< zmTVU@I0u%eh|YKnzy;n(2+1IMat;;|JkoH(a!cr@|89{T2`lh&lEM`1T~3G9lwiuy zkZiZC##W^f3O>M@iuW=lQirtD+P_>9Ei_;qVfCp?`Ip=EQB=nNY^F;M@&7R zz7HYi=g)?+<6SZhz~^csE1f$Kj8h5v6{eW;_QuB8wx|4~mwFd}84oxs^N}?lf^Yo9 z8r_eLp&?s!eet*eg;-PzJ*o?P;^=tMF_eW^PpoSLxRmkfpYZ&C3%Xn?x9+4dHVP6Y*+ zzRb@2ouKel_Db`qQ>T&(`afmw{IuDNg1!#UVI%A+@Yy&`=&>PS(~#1Cz5RS9q~S#1 z+bTJZn%mp8Sg(TV-@orL_$LqqbFBu}omYcw6hagMOckSLAatD1+1T0}0-}^#se)jy5cVRY610 ze~)4dC0ZMz)O1JTF2D3Q@SD{USolBmv6-X05bM@B0POH}x$Dt$=brvxUCPjXiOs$P z$O?eQ^A3HZE{zVteTYGdEnnq{?@{`|Un7Zbpou3$1tm5gl7Fq_ydzMTazl{QP+vcO zwNJif#* z*%V~k%}y!lJCuWZH1xkClwcW8!-3`Sqalw|4V?YW`bU9;*m$)2(i0MZL)TSZY|$01 z&$jJnkUEx6BUcqQVApycv%bbTod^yzAS4PS%DM|MKdw)KX>_L^bVsL?LTMltOz4DT z-3lbS2SUWa4Mmn2_uDV7G_7pDf)JX*)InrXXsrW8V?6`Kf6Hrw%f<7=vknUb%+Yc} zEKAxZgqt=-+`q4eod5&q;Mt5dmiPdA2$nDZS2BrPG|>wRx&8Da(om8xAB{iLRJFmM zr7T|6>--?lVa1g!CGD6%`>2 zhJ4Oefey;^@3fXUq$UG;KukHH$jU|;%P7wlqBlaa3td)=Wkj460*`1542^Z zGGwfplELCzYTd;T;Eu#kz!!gi{Z}>-c05nf=SU%O1NfDG?%l#@3=-HZ7bxL7coiEf zuv`JXZRB7ltRwPd)O;AzeSr)htq*3wPf#udfq;coK}fHcQ|_Xp_^cZn0_49K*Yx6zH}}? zmW3=EvbL15Aa<9au0OjSwEudljuETX;;T`xzOHL8Kt%HD!3GuQXlHv0@AG%-uj8QZg)ni|{&T35Z*zYn^q<0VK zZ%POPNJuSfwAAY_b4ctQmrWm-LM5Ay0s{+3paAo${k74bDa1jG=#trs_MhMrT;JA+ z{SoIHMZMWsbCE(urP#OO-_M;csU{b?T*u!!4x-~H=|vXw>|xvKD|j{Li}Uc3&9de7 z^$+Ce-*xuQ+~{Dda;O-rK%SJ3`2dInV9xJ?H@)8j8gwWmv+G#XNqJ`sy=_?(dfw_< ziwxaNr;RW!z)-a|8W^2->yuWN6!Z94VOi&@6K(ih0ViPjVYR!WrNw9LR_UJFn>)0c73WDhd|nO1uhN>-@~~~ zL9*Fs8KD+7iU#2pdL+XPp+KP*%te2I5bb3;J^4_?uOAqjoCbm#TpkbytI5= z$N*?Cm$JR!|6#Sm;LsU{r`ZQV%Iim#9ar3InB?^PI3jZ#YwQ5YNN6Xk_FVE94j+Mt zSg!{x>}^&Dn@LscfT&vBOonu1`Ws?T7va*sI|+wVybUypWXTMZ_-93fr7f2QZL*2^ zBb8romx-+SfR+LHo5d^fppuAQe)%n1djhM*=`h?k^YXRf8 ztm?-;Suu+uxQCP}!o>ywx~M()S0XO#0T#G}EmrH1)nYy3Ei|nfkUQ+)MG-)m2wUZ9nA;hDwzUTx!n= zZuw>}zyBdXPE(+~rsFl?y90uypu-53f)>BrWZTXVh_|GRiWRv%o^^X3+`-U4RpUTM zP}~8AK&6Q|Q`Inrq4U{x@nzw;3f!KL;GGkOpP3^=M(fryK?F!H|9m~2^S=|3$UiX_e1Ie%$ooh|>FCFgAEDX?;sw=*fWV&O4Qy=|7gP zmLcIXwJhWG)zN0oMyI*dzWr%leAwj$UqkqWtuLOZQZHYX z@7U7PZteKsXlmqmA3cuQ+y7p1XWGs*jWMR;?$5s?!2WeP`JQpR-m->;qJSikzU|&C zS1@sToH%L!z;%jy*JCDuj%y&kYG`WEbh{=(`Awobh>kU@vT z?r1^QUE1T|;CH1eNX;WbD1OtBjm-PRDi$_!#Uj==Nb2d322{NFLKS@b7f^IBQbp62 zL;gu>?RTuswTbMc{IN&0sbS+JZ$|!wjRwcBt?wv_y!veclvMczXOd`4eITy+``M#L z>`e@`mGl6V`pubS>?1{=yX9Nm@9++^NuUpagd04Epo*`4(&|;JN;DQ=T@<9he#FJk zg{q1J$;1|Wi~@P*A?UmF3uuUJxj^hMhKN(Nh1s>w;vn)udZ9U$z4Te!7ApqCuPNh3 zJ>s?4&!uuwL3m{LBhR(9n~C<|W+phxmJuKkfQ%RMN3a>On8&NX!_IHkfHS$--n9FM z7ioOgsg(M-??ee68wr+B@F2o`hHi5O~RDw%K z+MH3I4y>TBK{4&`1V2F)~i$N#ztEjUYcjnoqux3dXbY_!zY@Y^T5$_7_ zD=aSf88O#*`{IZ)Y|*n{+l_zz^QsHaiGn6-u3mwgT%7a+tGmHn7i>MivNzXSAlIN5 zlBFY&-Q&SBtNm*SkgZ7ooYX>>cf>X^W#@dS6VUOAEhvO;*@d2srcG=?2c&e^11$0r zT(hPxO(GRYxx8b)0DnXW4?TxOJ=d1tbFj?}C_z>6*dDIR`2G$rU()5--|bJD&s5f& zd3lPnxwUvWykq(%3pcp0zNThf=WxvXf=t(su_qAdESfqkm-O;wbYEibu`al<>HyL0 zhu}7}7ti=|XS^lWZuSrt9o8ZjqalpUIBX8XdA3xpdG*u`bKGyZqa)*6gwy9}5_Ts7 zmH#}4fxs${n+qo=sAz5@SX&^_*Ot+*Ufk=VjHbV>^lm+HiL{13QgBKvXDAoKRoe?@ zWQES;usMFK8ve;g;<$>td!l{TEp?ur_+`xk;QeSI3!rmk<8_}0jHyc~dc=-gJ6wRF ziKxAN^|iDPkov1~}>-mFs~Usq{uH zc3bt`OHni17e6DP1n)jly3v}LH&#K@H}y%%zko8KDkQa7drUqSJnTLPAB5^-CD#y} z(7Xs+l|^tZjyVsUs6m^b4srzgf9af*jEjjW=^j-fg#oVmQe3y)76(zU_8dKV@_|LT zVUkcFOUJ?L46r(G`G7F-VFlUs_`1#F3RaI&{gE}TQG_KK59 z+mRl6Y{($ zW@@zSLpc9{qZxf*pS9rz}?XZxM26v|XoW@Zx#w+fL2 zJugEs-%u)KIkL?|hdF)p?+Am_0M3K<2LtWNScG)8i<10(N%qdEYw z;c3p9lYxl7rcBJpo_E=^J=O>v(?$TIclsu8E1>b#3cD|U5*XaPfY=Ugw&#iKzrMG& z5Sr}kxrf|CAX#V~?3*&e^!_mi&-bU!oF4;INp45gpP+BYvq=UFqbwWh2loOtLtck6%yNL-AKL3EK>s81t^Di=2ox3z3wdiN6AI(~(=J)Mq6 z2GYF@PGQZG?qAY>|L{lFto!?~DC(3EjQ$5O<19&dp%tf-A6AIkD^ra4T`y1RQu}3v4t4zhmDo35IruDC%@#>g%2;xvGP8QgVqn zgTG}g- zrLSCGy)YkD?MgKjUqy%_0SxuBT$Y$m@ZyorB51Jh7qmyWybH281lsYN-Sp4AkG;Ci zIa({OB?s&)-HwI*=StFtUVH0}+;DeI36XEEtPQIhz@O$EI`cfHkK7^fc4;&5itAW4 z18^qS1JT)k7k}1$0~N$>dZ4bNvT}8DfkM{+95Kp6UyH|#o*`ATq)B4@2KoYuo{JTx zEupit5i2mzQD}5tpM5auGEJDGz9Snlht;atTW5133b;-3Tfim^rIr^eGK=tW*X0J<(@l55twqPh_WB_dDEx9 zVuiW9Tj-|rN$`lc1UJp-jq8C-#{FnvoEt*pQ86=CyU1^VIMQ;0of*l+=mBZxz7S+&s>4y^meK z)1I~KAIzSUj6HvSiBP5}o@Zae%hcF{@CdD1Ss)Nmee=1!5C8cT(wjg4H*q(d_6S-N z{v{g@P7*JY3eLQtaO#Jc7H2F16q@@FGj>4_SK8!{W-93V0_pCO$3yL)q={3pmyb9% zDI1<}P%o(Mt8F&XLx^nIxG}kx^`qVt(A-mAPu1?x7bKjjBnrRS)k184=h_*{sci#@ zDA~Z+ztZ5h51I2yjJJSV1&pc=;L}C0w!ZbcBWU)YE#4m@(2W3sE%1M1d z{TeU zrZbkxa7m!HO09|SZIyB~F21mBXUwocQ!6L2a~%hsLdfi5lly69CCNiBxHQt#Q4W^m zTiU>35LO9CoE5nqO-E=LI$_9U8vd!sVmMZH6n71ABc~=PGP0wa*w1c_UOIu4QDwiw zB>x*kR3NY5o}x^#j~y@eIZsDNzA^Bo)CmC}7}g2h9VTO3JU^4yQ}Zroe-f9rVP@XN zY#ZA)&X*i`g2LcI36~UNM}Oq@w0_-0shpF*5j^>dMlK%4zA8L%Sq9n1r|hPEPU2q{q&f>7 z3zwCM%7k;ys~U84_h>$xiOK=gSSDpY{g)4G?}EP{MAf-P5QfZtdCvD#rWk8O*z**> z?yXN~g|hU;FtwL-Domp7>D*`;)}4=^KOa-?E<2YGA-GyoCj9fEjr7l;T@3qPoZ7Y= zwRX30K=i;D@tYjfT8(G%6JM?5l3or)RlFJE@BABE0ivHou6sGWcTXYO4h*jP1Dqvp708{ddNQ!aqHI~r+fmm&5TGuCtlmC=VDf}%x^yE#_=5G zz|>8&D?8=&Ej#cJiN-~Q1YEjHj<n zd3}9-mt*dJ^y^p~Vift_k#$KZyaNZcZVx6|#ESG~7*zIcC^Ei3Gu&vHI_96z<+pWhBANJZA0O5}xV9a#jyr^`hGYbL8 zIk1TKD;H;8Zd3WVHP)TM1Y02r5~!aRD9Ot|8s%MoX&hHeLrl_drh4Ei^|GdCj-w%I z$W^_2h#mc7i|S`7fFx&``wQ4Gqxu#s@9LDI9=u<;4@}FvkC`W84g_M|)KTWDbacc3 zGjJKo2WH2gp@ysLa%LuxMaVdLsyRK8lp1tUyu=$xgY1KrlFzo`9U^oit^Lp61<>qqB876BiMm+H~szOQurzV zd9tqWMNmC)Zrs8ip^EMsKiaqvq9?51{~-G1sWjxeeSr60y#Ng%+Cmf<0#`J2P3=JT zK?RuUwH{6XPK|;8Q$;KTh4l zo#wu=-4kUDY2qj_2_r%Q;^s(AtqG3pmd2m|In->or-3dcEAI=M@fR(V=N8ZaHE2-# z06cTk3izCAqE-6>A%<(2X8rgXjLyVn56v-JLpaEXI+*qLk2$f&@hIQGhPfrxZKf7{ zJZVztB5AUdbSo0|LrWw(;yAvU+qzfjOc!7^E}vZ8+QV@>>>%DFbr!r!&H3GkE?t@N z3uE!q6%nF8ho}(eS+@g3rV|UHJJ+0nr1F)M6M6|+2!VZ84*o7)qVf?{n^9%I7e3!FD0A$z^i}u#<%ux*5evx8tuWAKgfB&c^WPa*M2*J ztD^th`o0uQ+kbuWanx~B79Rq>Qv?XG`wJvEU!MX6@Re2rPGK{Qe~;x3%h(-Sky%E+jXWQ}YgPlrwWB%k-F=SV;&|tI}u1|W=BO}htK!<@Z1tN z@+NAZKVTa!CyK3bD!59HMp4eiT>h`bUL)W_m~u#c@2LYNgG#pSog`{WVGF%BUy%(F zk~%;(zDdX%Hl?))-p{P;CX(gm5uEfl8r@Y8e`Cm8MLILu9FQ2>bm@NT%_lu>HhH!R z;PkXvHBJTlNNAFJh}D1*G^~NxNtqs@5fMj8E=@U9A`-5jUSH`~2%V0IfA;Kp#^_fc zAv5<)5{7wUpDt#FjpGW64qE~171S4xZD?@f9Z_Mn)HY{cuf&VfGJXR`L1YJe#3jF{ z?{;kW_|ZR6&veGnP;x9hFCcj4R54|t(~>!=m%3J8&Q7!x_2=vh__V?_|72_#2Qux~ zrVlLKfLj&TB`s8xu9lf#XV} zLFICCawBkRl8g5c9DM%em?Le%8541h`?^=f>n4~D1X;aH%K5PkE#(pAtkNG2*nylG z=1dZAUDg3+24#!Y?6&@eO7JWY44K%!r>{p7l7Vnamm z(RYV-$XlN`OR-wF0uCexq>X%pWE6egIY^HB!}1VJ)}OXJsE}QO6&N~{b}d1J=&vefyXDNw#v%F;^$y ztwuoJHBS!xx;p2Ad{NZBLf3L$d2ABQvPuL-H#1=bQ{W|WTC(oKD&vUTj6YdqtS!DG zvfB=b0@J4zCa-2kmp<#kYuHU(^Vv@L^f9xCUvSjUUz=6`M&Pj<9|Q<|Bb5Ne0HU?G$nG8QS8HY z3!#73m{n$y6d+jJ{Pf`l1U8R^E0tBJnkWEqG9$Qo1fz&OSENd%gfwwh5h~pRY7G&w zG94ky&s4U1({U_?OI3WVVQsNW%s!xjJ;z!BVW>SMkU;0Nl=mUj&}Aa|Gz913v8JZp z2JGt(w(KwX@hVQe{Rt|N;bH#IMjrJ~ui_eEstxR8RQMjj~}Y5+~R^LIV|Jfxka zWuoBj(NStw;KAk*oP0M;r>9k>gUUK%0+bh87z$Da766p27?i-yH0+sJOPf*o!vTq~ zCSNXvb&y#4d}{HvdEOsCJQ*iur_{&y?|-vnVfne5&n|?VUAem*dr8|MT4j@aaf>U4 zLtORV7B;HLEISmXSbru8Xgbm1jCVM;*;wl-Lt7n5qtY{l$c#u61QKft zcx}zAgE95KhQ_G!1xh4c4UEwN|0O*AGEBK}L^U@zHyiIxF+!b5TTS$?^K@e*yqGZ8 z%gf8(Nm!Lb_;#0at(T{)BbV%Q7Eq$-EL7~73WkyF(f9_AtSp3zk| z=K=y(9w!6j_xGy;XO?jG92Xs8@6(AYp*(-_!tX2vRiL?$O^mIp(ptA+@`;#G3^;>& z{Dk(0Bq`zX=9CpQv9=a(<7JEs8!`XPS}#f;7?GJ9jqvWF(87agl+DN13HMf#%`M!i zRU|gW<={c?+|O0}c2*Li;Q}L%WxJ=4y~JuAWqvs_4VBb4vS2SVb0%~ViT$v4K>$c0 zjpQ$7#sfm0n=9w8g_6xCC4f;;Aqcj8mkPC5ODdEiI+9XSb=$!6Q6SPn#a*_ z-v^>Y>;itFS!iz(?kn{K1^#)bT>+23ZIZd?kPZcYIueos38#{&(EKP4$Q)^)c{)6L z9zB};4M+wNm6SZz_5QsE@cX55ND0cAH~M|M{vEt>sQ0?%i*6dy`S)%Y2IDDiVR@rI zU2ScFR0lY_Nmw?3Z(rKVR(m+xOlhl~!&Dw3%%}T2uADyJePHf&+r3^D&zpbqKuqry zD(_7F%DRZKaXy+1Lk2FZgz+lF6ue^pql@4%r%9d=I&5u`0o@Z&+A*$zR*@p@om+gy-;d^6d~;JaFNNN% zo%kTgO4WPQI0xThmZc|MULV}TzIxSh4z!Jr(YVWBosMhHgQsKBD+$i6L16b}zL4^) zSP9@j(0wehw|nyj)4SJwCWZKf8iE_TSRD8PU7KREt zda4QNb(#t`fk)Z-fBSHb$moJG0Zh^$yP6-w!~`a*9z;*yh&?_+DLdQIblSDvG0XP? zm7tPL5;$vitkqmw3&=Mgqxp%B7wr!S+NLvwyZNwNPT0FuDb@^>Y%^b3@d%ck&j>*2rRgOyh za5^oLH6)Gl=}RZhOPLA2tcS4dBiN$16)@E%`!6R~5U56+RG|N;Q3`6opPkz3hYLixVON@3|dNr0I1F zYf0<+E*%tle^~09<}l@|%e%+H@~q~yUl*{)G-`oL2-prgZYs`?cQ1T%ZrYEe0+{wM z2?oS$t%qcpYYsNO_Y(SQ)oa`$QAR2VjKpShpUUSf_=>}UI^BJ=ZHq?VlVsu>$rwc; z=PYIdehprR3UQZz9C&gUd_WTmwxEkUdQ&#)p?oh(p}qQ?_ZUlue+RRVjH;pbNiQZ; zrB8v&ie!zd-;L9>AA#aNmMpQ(@$5gaGByiA9!oq{>OI(9POLn@9f`%?B*98F`nm6F zumC;84>>#AGC1q*rZ%$(gNOwYD3K2Y`oL73Ge+v@mF*B_H?(d_=oxQGEQLLm(W^#@ zFyhM?Tb*(P?0?f^4@bod6sO{jQY7cJ%z5~TlqD{ENw_&1-$p?3ssDW76ksjl zd#cA{>;%yvmG#Ms*AHZ+oG=owi+B+>#q_ykHZHb6qfw5L$iZM@-2sLp)zYW;xf}R9 z$IWZNzw}i;&;=juV#krgP)!jUWS#vVA{p|EGzg)ez$HT)5aa_(tkkxEPcpCPQ5kO5 zo_)Cq8fedBFm02N=n*~D=F^zmC-v&ptImF!_iD(z>$8v1i$Pq0S<~Y5J}FSqqag(d zhG?T5=2ep%M=1s7Zspqd&Z^-O>FI9Y9s?f!1$f~;>o!E~+Ia_L^cYM$gTdc|QcJ4^ z%q@+!b$xk|U3S(pKr04~=TX)h^z#O-vtgQVyj z*#RF61x$g2tX~3B%RcZJ4rF0Z1{>t~$rXDCaZI}N3s5KOBi;ftUk=8d>S${^+u5NF6esQ+wTMx;7 zeq^CEoRQ@TT?mJQO0DP^B#lli#;(`)p{?l6@?@hv1b!zN`*jT{^#6B=N+dv+h&Aq6Q7e)3Jj(~a^zIgjh z**+XzBadeI2#~E~7tsqSJn}n!vKMO1TVnun&pR_r>KJYK+*UR(iL0vHK-;ch_`NKs z-nmm2pTPmbH)=lM48gdK?bL_Y*@=hd&?(*%N)`&`QEJIpA~o3` zJ?p_9luVNy8-Z!vXfe@wRQImKiQ3nKy+hxY%RMqXELZa(G%SqQS+nD};%0@C{ECu48g^7Q63o<{0I~^cUkC#nc$_XO3f4D9mcEMs8Q662 z@M$)fbaDMpT70vVG^_2PNNlg$Z;WQ7V_*@ob-W!q^lx`8EG>7!{z1!aZ2zhBNB68` zC}5(CDrsC=PRw&62T?Wy3=mFFMTljl!gGT2{C7zRBo4Bw?f*~@L+i z{0aWI_f~^yBlCt44c*M$GJIbd#4if{oN0v5nD@ro)=bnUcZW*=Kq+t0a{Ko6gI^{a z4W#pW)FZ}(-*oh~;Q{uhavctaO_jj!yzf?n<*2^CPpy(oA07`UjoIG}>ri9G1)6<0`_1|<1esni5cpH#9iP~VLu79m8T)(=}19*WQ zFUch&(^S34*LULenlrA`WRLf$NKWA1Q9agur>tYc!Go;<<`-=-zj6P(n4S&oQ?m<3 z(n6!BcIAoi>cypl;);f%g12$+vSdQGJ?CVZq;#i=hg7o5VtvG**BdL>c=jH8#P2^6 zlzeO|wL(vtLl`suY-H;Fn}i^9Sx0LLEXH`w+S+U*j1rsm=`*rygj}z!UfzS6*=*^13>+F>}akCig=q2WoQgjz%Gr$fF4& zIOEQZct`St-u01QiS~1UC0VSrl6WPh8Rw*SV0W7HW1FO^Id3fM&n1G50#7dMx|-Y~ z5J+l+N^An6$IePiNd!!Y%_)aL%cG+v=Yw``vWqoAXJ6Tn&6@j?2$xE;oJNWbgY}(v3z%L zvhfFZbAf5u*tbtq1@k92Vt3q~GoXCB0b+vfq{_x7mTx&j89@2ku?R{Q5?P1$bAKH@ z`>(N{0yIujtJVLCv5AQs4M=v99XM_vqbQ`mwEea2$^CoxYM&t8&rP=zK7FmSz4K_q zQdgvOEK1qYVpTdFv+Pi)$)9@dMS0Cp;e)Fk4-90M_Yan(_qdfC{(;ooDE!q&%bNgyqPnfJ0`%_V=0WgTP|G^+nX7Q#UG*YUaeJG zcjH`{yqughV_@Cg9V3@ivD_@C19L~Zar5sm+%XR)p5a@sW6U^u4=y}=>DcS$V=)8( zV7_S>3Y!TnHb# zYC=giNR5xTBIkk)B~~bbY#{qM_IQnqY$wJnK| zQL>j(geY}*mfJ8DrTTZ6He1`QhG_K~i~YsD2`vvqcT?*=9MQ)z>tY<2K?y5pK67%+ zTCk!**(bEJJqGj_rcZzl_>pT@cA7;EeguR$*_TsykV=@Ru3wQeGMwvHfhfh%QtPPM z^5+rvTx7@nJghRij*@cUgWaBYVU(2Kqe5Pw@M>u2i`cl>*mS?S*baQ^5MSR`QLhCz|<8A$>18gW!Z~|D{vZZ&XZ>ABiw%avpS(}sz7|w-h1V) zo)$qNygJj0v?A8I%b^4p&6A)kFm`bG{jQ4Z*}%ZdYno@TT)DDyq!i6Z>qCI7#OI<# zSaiz6{wK-Fmj*wr+)V(BWd1dToZG<9v^Z6w0oxH@e6izrV`cIDZhXK2T!0HWXRkP? z(s%wM86lwGTaCB3w~s;(a-N*PMVt}}M`}$+)G+9$gRj|leOD%mVgZ5q!o;s{#ePxJKyRQX+ zIv?S4CwzIFa>&1y(6qIG>9D*9p{msDlT$bTYilET&H+>Rk+9g zMB3@ifLW>57CH7oq zSYAl8vs=VM2w#p6{?H5(bsF+*G1HX*w{@VEh}ESFZI(mhU-}!$ss3DnOWO#>_jdg# zQT7*<@}q6B5!ZP=al!;fU zAL7A_$yJUC$d!SmL5G{_>*ZoW8mWN)bafANoR}eo*JO7D+SGP8_2%_{Bgai(o?i@a zO=5-_3^-@KC~UOCHDE~s$+ebrf-mJAHctNmNHZA9TNE>a$vM^NC!8M8;q%u}gtjpb z{H6;ah_Kyp&~KXah1>nDmU62z^T5Q!Q{3-7`SdtJj2@^20#m2qgLV_iU60!OV>~?u z33D6tPAKA8_xmRKeiss*$M?E1e9hrmS>V88ytR(*0!8g_rpJ)^=JHWMtS?C6g^_FD zl??Qt1D$sUFgChNSf*Z97bHE_ky9mje@<4s<_s2$+nhL`wKd^*(jIx337x*{+NTmf zQlu`i3oGiwrC)J1Zh+1Ro8YGb%TYL<>MGP-k@c)q$ygbeUK!f3i4HswB(YzCik{B? zZR*Aa{YPbgdQ`OzDxwTDL6-Xgsn;%*r+9# z0nJ`+tO>0jgZ(FS+0aCZ;Bx!UW9x;^rh}tnIZ!EKuQ#T*rcnzoOl7s2AwPTPSGJ4Q zab*%v?KYev!)+Y7U{s4+iEB^|*V2H+ zT3d&_EkND#$j&Y6(V(^H6qoXKaBrV;_7k@HXN$J7r{Q<*+!1n`tEu=`1<22IFAzsj zDAc_W5+FBRyaOH(^pA{UauCUmgBAdr!!6f$=6nW38C>T)OXcc1OO)uJFJHOB;f|rY z;`qVezYj>L@#}}rt=nBqPtF9ltA3ST$&7VJ-Uk$y?5AKHK{{vadXTKOutTpqiZRn_ zp%=gy+%4Ufr>gudzhV}bYJ*mT4WFiSpG)s9>-+fpV*79hUFNOwxB*de;x(TEhI(63 zLG8m8F+K#H3?^2O-eGi2gD4O-T-#bSUo>%`ctbGj>L11ah0akxd}IWRir&}4eRF!oaxxU68gjrqP&()AxJ&wrumAo|Pm)9GX!m5?cQ)>?M;9hXl5aUe1GE299{CZX zn}jZ~gvb}Sw=WK5N2WujqTGl%xigUWYDb=5_~eZ7vLLXf=+bM3vPWd!wu~OY|Fm~( zT!HPX^U>vjfoLT}>CqI5Me!m^-=O7+Y@h(A>eU0r{v>nNKx6ovV8Yw(J`Bc(v0f{% z>vjNVzg=aHHyNksRJ|N^UTAS^7g5UrD$bl3E9AbpG3#wNK+fmV^ESo=neiRq8*l>+IgYg)XCKJW9nxlil zz|DEHXRm4N5~h4DY953R89i=r@rOC?zsTwfF7JD7NV5e(zY|jTQi=9znVOnf6ueth zUw#%psP+XFim@qLhz;mE_B)AFG^0k$`8`>!(odig70KR5+3@c`rMsLK->gIt{VxY zVZH|*;nx(IBC>8@b$%4ivg1HK`u?LiUX#=u1rrouGNnAlokpWYwyHr(2Hmy4b-!Qh z`sVij5zuZ>qb^E+ZjD`03;W<#PWA#)(XH&71xD7stdnprgX>H%;lMQWN1J)?LP;(I z9i-LWlXw@kyFF1?5T{W0Knn5t=E_Yis96MW%0N1(XnOZ%ya&y1*sZb$`*DkjV;VMj z4|$HE2;p@K%OW}9-`B!k0Rh)t>!*BE9;E?nl^699f62OZJKsYrvf_?-xvM}{f0<3z zu1OP$oYu7eB+8+B8P^Ch@JD3p1A{5B7g29TX?9G|g_2`Qb;`G8bGL$(MrYDmzXM-RMUK z>SN-TqTu$X^)=ejSD)z+V1Vxs*hv=;07e=vCbB8NKG&ggF|!+69jYxipdg-`%>!T^ zOR)SDNaU!{fuE8IM5Tc z1gxQ9OkUx0Qq}Q=16oLf;vYYMNwLu1}nv3xZGayI{hU=ydICn!&Qeg=rn2MD6$FS~x1D;Kc z3BS1S3sU1qqFVB$mSLIzg7OM_52~yH|Nr=$qyq_%cn`JbJupr7w7?dCloWXI(6*5`=9au;nn$*cn_27aWvj)F5b(C$GF25~2+xb2=B6)zP?~bn;CHF04PY zhCGpzLj)28&Z>2Ym|Bg{?&j}CPKF!6d6E;xg3VFM#)>8qJ*qEds)Q-oxZQxQR&@g) z9V_1rG~Vl>h&3-$+y5V#(Q16)l`FA?q-2?WKj>?DK+}t!> zxZTI{bzu-UQw0Jv`JMa5!Hs1Lv01N#Oyu|MCD;0q&>X->q!QDv47c{(^d403lj6JZ zSr+^zh#r?HC}gWD&_9Nv{#3cUBRHfI{#>SeL5K?P_Q)1?)P?^G{3LG3TV|=Ug(=9I z_3R*AEmnmiL+CYR0aIW8_0tfS=>Q4MxJnE;hi;=z^3JE-?o%q~=BKk*ziJs6+$dv8 zik-Ev96Iw(`CkA1Sxajk?ETa;7k@2R!12NNk8^%6%)%?7tSA5LbRVvg#4dCPye;lg zD5mRH8GR4pqZSdn@g_|(<$W0!}4>X*J!lxyNn|B=78Hd?D$0JeOm;k5L_G#-E0{qyheN}0UyMI3VsCizkwrykf#*|^;$2i^D5C`X`>PU)v->% z{6b4TY5_%aNBLemGSIkT#Vd73PzwI@dcB?O9%saX)wqdfex z{0}^`%|9X^BeG%@-Kv zxvjko%l1Ms!66qDCIbVd_pYB`^>Qii$pnV%iMPc%A%QUhz!-VA$&=HFYa($42$u2g zTxs(7NOUox&}wh~>N3?$Bnf3DCp&AYQr3ENmJ84W03x9wk+3$U9RBMSAZL#J{3vy; zBm*%aCg4dBQaw?^)HyOL2!9lwl-51@;G^n1*gg0JGNpACd1-=ry3`OxuHV%-0&;>I zwKzRpVSJY5X*eknNkLN&llXpQU_KY@j|t{(qb5aad8WE4qpxL}Q200QL&m&~G1 z?d2*TNzhY=0W2x8Y}p#gY=2w0q5m>Sc~AErU6zY&id4&Ejqd6)lo3v5{!CC(1S$T1 z%-ntZ>h6QLryAsvFP(P4#?rb0sQ?6@4HgizK!WwA~M?K&_%3>hDPZ*-ak~Yv`I)+3B$!qo?zC zV7vmyV=4^c$c7{BJbVXa^@c4NHIN?uyc|Se3|@yY`WYdwT46rp$AR`XT{t!L01<(rl5Mhr{9jMax4 zITw>!DiI~k;gdr|XvI%3gw^(g$w}=1_O1{#&r?>0LO?$(V4oMv9`=BQTzWHh#Z_Wy z^z)375g$PGVa53U0&e*7!$b0!@BU=2zcXdtx@YwseJxv=@+B^Y-NIC|V=aJbgHf-u zxz@8jOuKr?JMj|KisYX(|0YrtWMRcNnDoH(b+;`y?kg!64Gb32h%QQbhjgJIBAqjr z43Ngi-mfah$?eL=Kfz1r35xey*q9Uv!_x}KGXGyNy&;}`u`k`ZWX%Jk3n0?~DJiKz zbCeu4nb8Wwjp7ZIPIBppz73b=lTU&_Y1c=ar zzB8l9Gf}6rk)1Uq-Hsg-EVQ8={#1aa6?!dz-=JUk(%&cGzbdR)ap3OwDKRL|n1?(Y zpdu{B#Kd7AnJ==i5z1PVw_g^(Y|y+yw4T+~klTO~J@=|RS=8}~3!CbP?v`z~5_qYJ z|4!f)M6*9NAM6fhv8NGwY3~=P!NdKKLO9oZz%vOt@apCVcP`*un@`1rn4H+IHuA+N z{~jI$U%<3xG$OaV>`5^2wO~TE#;PZLS@Hk%!~|az_;Fx2jss4+Z?ohXA{>K%X}7yM zP@!ZObg@f1rpx~RdxB+0R}g_MNKXsq!^fx;WY@Fef}(B$Hg|18&?84Y6m+3|rP%pQ z%sYH=ULsk?*4>@&oN}1#U2(YxetDKlNhy}QefeVD{~2hYJAvyu-PWP$J3iqpxWMXQpe zSWEBmXa0xtvCK#sXiBU<(AVWSw%$=|=w&1_S1WVl+64c5Q_Xyew=3||M|L38aeeqm zM6a%#2OcoUfW#XGX=sSjpca~LZRbY#daMi|dp3RN0QVb?%xU2tofB%^zshVRkuoUn z`D9m@MI%PWB-_J;7p8c`f(Q%k^$0&pdAS)%BC-M@d3S=A__vZ8EiKIQ4)&WY51r~# z_1<;eUFUqfuBY!|)F)WKplRzF34VBJR~YDV%K3nJR<=aZ8Zk$nd`=S77GMJ1y-?C2 zsWY+Kthjn!TklRiy+sVKHh$LwNYm%covRHdZ*np*FTK2RzRYSBR;0US>j?{b(bTgP zittN(C<;0+kaF!Vo(p{Dk6X69?B>eC))Ant`+LfOw5zDATjZeSay9`x#{!Bg6_YZB z4j?v?myC7kY#y@u!Hds`TrLBdr0@4MV8{4dy zm}jjAO}TYO5z}XvV*7;T+D-hGs3QbF<0t=3F^WI?rh$}ANGmiH;f%~of^<57{7qyL zyTEBECJ#h+wv5b9ldk+j3}QzHmNa#p85{$3J}du(@HH7-n_M22lOWtg+}N93wSjSR~JC*y=X+2wNQl zTvnI^VjS-`9g8hZjZkM@{%!SQEmL?VgWG~8d{UN3&JRLs+K}iT;XJUEBi-N9?hZoe zE8^9E?u z^p_(H>MPEzHvHkM-o6cV27))w4@Z>Ph1sIlC4^ImnDw`AJzv}>$=L?1hd?bS`uh9p za!S&wFzs8&jvby4ro{yCN(WI1%OQdfXR&9|N5>O}s2G+cAlaOU2x*pn0}U3% zPsBuoF|w7wfWq5OW(s_yNcWyz_`xbNL;auizd~;e-)dltA_mdt5Ux(wYy-XQ&<+ zg^+C%vl|>Bm@HUeCvCC&5P)hz3>PvX!UdRR~I za#`0MWtZD!OxEb!$Bo@5-k}wG|NnZbo3J-VK{6T{BR$i^kSTV5^3lrU2%4l|=o6l62_yY1S& z`&u#9G+jC_Uy}z>*ll%RuVSVhB0QWrwNsOmXVBSx69_l67Zwk0gH=WsJ3X?Yc?mRw z)+zKDG7R$-ViGYAOU+&bBl@rF==o*6L?gK)uF?rPw|NJqe^e+%B3UTNg$Ugmr{w|s z>ZgPsEdX--vi=DMvq#oA)LswDe@Fil%@3#w>J+S_DUD?fb{=??RZ}zI&*+I>I3)B2 zf(W2{9m4lwV_zJc=WlL)x5lofs_GX^=rm{=V&vq@`us;VOd^8hZd~6aBPeu|SF8sY z9izL{WvETw=#`6N9?R$is+cO`WOM!F$?2(wjn1~g6eE) zfh|6yDbz213Mr~v#lD6p`NLmDdYctZA%m=a8y ze5B{iy&&zVUCHko1q;gAlUQjGtc8di3Gb=g&E(O6$%6X&=d=ZI^QZ*}$+ynK!oAAS zc^J#c1-72Wx}nSW_w;mkbDlU~e>tO~RNM|6)_D)@gejU<|M8WOvv76>9vLzDB(DHx z%eg-$MaN&$bNYTw>cCKUg%biP%I#fv1OfQAszcF*D(~fesp9A7dIw#3lGm>>7NNW9 z`b%5PEX}eOp1h@bb(gU4{1-8fPt9j$cn4HcJ-p+Ocw`#3TQ`~SZp?Pf5ecU5nrbF-^7w=aw24`ki^Fb>j79mZi#&1q-PwgckwLDs(wyO3 zxD-A8(`QxBP~1kaaTsY<_K<>559jorEg^dtIb$dh_Yh`h;s}B(3KuWDw6C zM_C%jK4yuGVi{PnZ^#(Hx9Z`IV(fa%;OZlvL#L@e6p0<7On*x?JeU_x@p!BZCY~!y zhhcum6203Ci8<*|FL1%iD?t%rfr!>Dzj>nd8k2`eN;v_SvMSB1q>C+Nsd)%Qd*TVH#Y)`dwxms$CA zquI2UVhI<1o)_NArBm%z_?q4=txu19;Rcqomf-O1KWKA%>I(e$|80opBrfi_oRA;O^`oIDLcFaIhY%4 zL!c}{=#c3%=?^=lDH|2qf&KFJb9&RtUiAz)m914#*|)w1&u}@+LBtKOnD?z*y?W1j z^$0bJH9uLcxzsLW36X0?lE?+qZ5_9j+?F_2~27l+J8)-qGSb{b^el(mY(Z_a=qH zl91oi%3{GIrzld$pWLq}J1}s^c4cK` z7{FXVmWGT9$K??DSrsx*2JxNH|%De5+Ij4_|<@OfN%Z(U0lghxQ z&O!sMa9lq4VvWmOZ7k~YT7e8og9swgMLKAU_h)pIi6dRjV<{z=)K^D*Qt<1Y#O3Al zc@}iUst58X*6eLMMeJwmU19xx3OIfOj2K4O-@&cyDqBpBEmiPjvyQAy{_AY1?{v5*mUEP8=$E&C{e=#E;mC!}!n5O4*I6?w)YR ztO(uXx>l;*BaHQcP2QOgirl^VYAy~A<)v&|mdGEVz{SoxoMtTIrdsN!q&ECpY)nis zKoP_4wzfB96}h7dbNMG4JQm8lr}*N2mUHNIdQIN0tG8~|b)V}MmciZ}P;==}EYN5|$u;fJdbhJ}dMyZeKtQ1R~Fa_T{+@ca3T)%O2+ zTIeo|O>?k0-?b*-;_6%5>sMduZkDBf?B_0&6id7l5s})}3?{((W8DVOg4sWiO!LI= zu(@Zn34VK>F!f@CO5c?SjW17Cef@gVhUPAhi`dhyGJFe((Z%otKz@fJuiU1mjqs&> zyC2x4Vk}5$T^WE$295Hclh0uWsGHn-mqL z2{)a101Gu&u)FRCz}Apl3;OtRLLq2<&waS^QDNCK-Rv^pDNd{fn>FrF%KC72?n1;e zLQuJdMBtI<3UssubR#)XzVI!+c`=UiSXB`Px8xqMW^KU_l*3kV+c&LW+S|)ZtE#J& zqds+f`I7MofUt;KD60;$r?{#Q*da5R?4ur89SA-rgivXp%OVxPlQH5(cz2gKodRiF zf7Wti#XE&E5+^h@mBChP`@|={(k5WDge=%{CH`Gy<$Vi?D0M6>B0Rca6_DtIurb9; ziV{$M=I1s1dv>@vO-#hDD$!6*-0u7;T+O@7mMl4_S>*p|Zu1)&s1i{{G!@?1P`(1H z)ZLya{ijVir`_VL=Xda6T>UKbIKTO1-a}Suf_k$bdN!k5>SD8*P^cu(>G|)KAJrwR z6=GMNi|6+6*Nbs93_X#1X^rkR&ksMO1Uz0js5Scpp4Br*7G>PT1E38qA>QC2tdbI2 zBvCndttEwNiwEeoTdPr!H*GO|k<);CaUU=|i<0@{C})3SE|Qe#-%o`kA#PG+Q>C$9 zR|WnxCGfw$^+o9Yk+m(b$llcet+^fa{c`@`)AhlkC;@Cm_MT3-9$HaaV~48uR3di5&u*7sb}r*8aM18otkX zy$LtM!gTHI9+af1QBFRMBB7gD1{K3)!1t*u+_dapcaJ*}0LJV=$}tbm`X}y5)iaJj zmYcr6@T|p{yv|2*#3mK%CUYKNk)SB9{V@o&qL8SMA1ey^lYqxwFpH0Q@IV_` zex$Vm9W<4?B22dlAk4U1;{nqY$v@KzZc z&-W%7vcbf72?)v{50+%M*f}(s-M-QpUsXC1n&7(x%`Uf_kC15KEsnD!2ezgh9{|@i z{LSYFaTJ8oEPTkKn5Wrz^NgJ1z1AtBnwHQ7+CexznpchQCrMB84`pS?QBf33x2FdB z$gbP0Pigg$h4_Z%%-wpiUpAgOHBCcg1(n?4m+DvQw z^`*12?!sxi$o=T6wFye_0VUIA>r+smUV=#%+Xood4#euhW2+ZDgI2e>$0#d0I=YO9 z74DTB06A6Zb+3BDDOMSRxF+_p{Qed@@ayH!t`24KvBH+uC~Osl<=h!Q@Xtv}^@j>= zG{P-DA))-r>yna+?$wCOEP!^Wqz2n?Lm502SH4Y|EOrG4fSt*e2m>L?rRA}<1O`B{ z^0%s`;3~{hF0k0Uxd%0Px0YMv7_%`MDgkxL05Yn?@v1@h1W!DZhA9&?eJ`It_12OcF%q+~Zr*Q8ChJNeX+F~$4(pJ}qw&fE7KG%~93 zESvA;4ga+A@@RJ3)@hW2;(I@H!Fw_pw9>&H=2Q*W!dT!Q8!HTT_l^s=*nx29b z{2|bG!ji{RW*;M^HussP>=E+20Q@;MV9DTeL2Zwkzmmy+-8^zxO5Mkp-8OA1t_7+# zN7McLqdVco$OZ?i4x;fAfHv0<4L@f#Yc}Z&VJ5v@Yos;5Au42CIj94kqL- zJe1CC{9pZ8xth?QA0EQq<$PdZW%~^P5)2oJ*R2_2?8rD$GS}YO(HhVrPWd`JR=WBC z&da8UK3tk7*wBU;C0+v}k$~o*#%c0#5H~pcS2n3i2RR;Z^~h#?cH3--g*Jl}B2~3R z>^_=p;U*qNMl!a_BW#7(^JV zyMDg3S2z!{R)##d?=I6Nwr<~UFgi|apzp*acI_y(lmXvQ@&WXr>+PK#7zlZgc=uUo zARp~R5G?_}quzTJD6d(VL7nUJLcML8@2!b*Ywyp*)Joa;6NcUQ2U zw0Po{;EdXP{ALk~ZhryBO2ij8D8T zLfBU3U;e^%v(>6wZ#!^CRQyIBlbrOA{CoQZ^6$(aGmrnD{A;CyRfRF~Rjs|pGuVUZ zeXA z|Fb<+1<$Oj9x}PWdZN8zVN+r%&CxLtJfb9UALT$i+CncwE}WcxuuM9HESO!r$ShT(l@|%2!O>-G$aof=KmcTQE_W9KqE*;5ktQW1q=(<>` z#_T@LS>uEZW>_YxbBrMqye6oPL9{6$lRJ-13#@Qe>KE!diw9u1l#rZk@UwaBd)~xH zr=Ql)b##szB}(C+2Z{VifDn|HMlG57qbVhr!u0{`Nt803?gv8CMH19eKiq)yR6^qD zTB(m%Z^c9$;buZdx*@0w)%lyy3|$=^{hDbKo?jB;7S8zfd~x0G({S=+yl!_Zfw;|Z z#nPo$3DI?~soQzYWX!5|n*MnNIMyn_RvVgGI-pC3fL&q4u9X%d9VwGELA&+!qcB;z zhe=7|2m}R=x@vhS60INAeN^(HXv(w|AQOn#Hs|@8q9E^(bZ-9Qz(3z$9qFD(**xVxPO2ur<_8ZS>f50iwWHT0**)6F_br6d z+wk&Z;0+pMy+MxQmF<^m9%{FA){K;;Z0$iUslo5psA8gZdI^6j!z)_U`c-}yrj&b) zfA$#^qpm!_=J`eL$Q%2>6exifvX2ayc;9p#a9qeb@DTdrj~CR3%3i;onKY=tZ^>zo z4L7hni;(RJH;0d_^(h6OH%YJ%u0VT-a*9-_j+h@hsUR^HVaZZ!qNpYb#PioT5p+qM zlG%`A?u~(1{bO`{4-yl%u|Wxthaf;6vMHw`@fcA}1WAt-K}D54HVO<}ZbXyzp)m}- zO~kSC^d$ITh3e`Q&7L3A_X3LG9RNuZ7+e&*hoRvzm)v2Db&Gra`Q9OGT)I-9S@4F{I$$r(Xj0a75gDHn!f>B}svPdP0-2(>_T`+Jvnlf>xuI_d8{Sqn- z*|K15RJH*7mn&*2dfo^9VGDH3`kt_mt@p*AH!yOiON=^wrBdOBQ5oT|bVfx43ufeO zxLC@3n;bL_NK{yN_n{CBr=q(XI|i@3eMl*|O5S(Dd!#!!Ol@Pk%Iq$4IDEK<2{Xm5 zE-oo0C|h|C=Md3ceQ%nK-~BRogn_4xS{e|cY#yYntqJVDbFs1LIe`I&uxd8C@fd2n z2AjweX!5Rr1WMWhHI}7VP8x8@+VEH1mz2yY?O;HZlYnU~-XGzwuid=4w#~IjJ*<{@CC{TX@=UES)E=d*u#0WpGAVpL)GilD?K0e+5EpR` z>_#K@&u{`SQ}o)=G}I!@Ok*uUH}XoBZSL)9Ge`oJS}US0L&y770{ z9^L4kIa`9X*_=TR7FhJA;oUMVm zWwo7yUZOsu_87n1z@B3qGEWUJ&nIo((wES0IF!M6Q<$PS=cd;^el-R&v=dJzbU)7PQwudY0u@L}Vvi`&{ zyvqdH!$i-&)3@j|@e!$PH&6l2QPqT@6LRFPh8znzQ_IT3gZT;`bL^8RPflvu)e~m?9QkAvTePXkXRj!aT=QG}}>7o=V5UL}`g#8VHCc zE0!;Ri-*34?xGydl!rK-h3H^{$w(D+rddQ&m?1S`d0rg|$t69#lY5)kCkkJd#{NSL`wYCto{!2pqy&&FsvZLfbP`u+Fh6Ucwo2KlK)n_k8e27R@W26B zW9%^iMdBLLYRIPOt2bZ!->M;?g&mHR9DHDOot!#;=~*BzpHjwqRaREhy_y62C?{v< z8TeMry|J=HE_{2e1syo%1E9w2wok**m2QM|*Wii;O<&6vQAw_dBd4=@Uz)#DjFhtLZ6ZE^4#$UciX|xS-d@;gEX6fH7y{pgK0pl2hIX^8>mU1(57JU7iX>a+TY%9YP0kYbuqQ%qL`AMJ^890vQv1Ee zzf^2&?Wrp5fbT;>BC|mrO*Ezwq-Y{B)QY%f2#pydHU6VD zFrP^3!!u4!aq#~gEdGt^yw24jKt>5HRK^aS2=MO*(`D{-E?*86s`e09K z43`HPs6(J4D9T};BldU;F3f`SB(T4T!t!NS{#Zx8pr9&&C{O9+g5is`(iDVK8uVcy z4Gj&?4`l`w6c0#KfaHJ>{Z=`@Spg#`Ik2lOG1c*TSu}y7ne$`R7a&AnO8f)}8E+w< z^!-P|wJOFkO4ktV0$Vh7LOl2mo2`whG!K;=!HJ+{Wu)PG9nCT$$5wY;o;@G4hh+f4 zsZ?v_@I}+k$GZR~e^Vj{I_3)QH}LqD5V!#kYi!ub6OJH;D-;yM2srt!ynN-f!f6u0 zn9R610%-Y9`qL=BEBRzPz1&===^fK=od04L;4ar5kWS~a z76hqM;ePq!?ffg?O&LqZnIv>A2S`cXUqXOWTSU@B)bT)z(1pojU~i0PMWffXEb)dFsZECkaqN(hALzHJ_Q8 zsY^fx_z6{&&f`geOT%*y0vXK)ZBu{-4;>W=pKNY_D+>m)pJ*v0&y$1)SEH$6PUhPe zP75Y?O!duYD97FFdvQVQNeQ)^vP)gZ2`b ziikT1yrus>t_je1WV{?6xc5jd5DcS%1%TQh2RhoOUnflxb(hC6H&4oE6;7_^kCgFo zNLjyRp4m9xWx24q$PvsBru}*b$uZwTi+q8Yf*FAOmK(uxWH{O&F!|<*rj@19*YS)| z(WFDv5Q2bI+he0$I>rsm6qJCidoQj~d;Zdcshj^my z5o1KQE2TnfIoSZ{B15TFeikdBG#4fU(6{cRH)tRy0Nr+5kZVl77uWMz)IOw!Br{l& zLn|VO&1eq1E&lKGBvB*y#!JUz8CCy_C*-Oilh~naCPxsB_e=>13=#Awq+~Wj1QoCl zP(rK1a$T-S{Tw(LUEg5NKq7GKKfeye!GS?Fus+2|^HqP12G=jJZ49BJ34ys`5>(bP zDJng*tQZWd+3*a-kj_wrxp)M9LPhFKF%iQZC`z#3$)f0E@9`Kw+BID};`StQn*nu( zqHtz-W5s;97ukL6301xAV}dSYwb6qyV#h$0jxP$g4+h| zmjM(CA=oY$g7hzkuKG7-+7KI@~ak1DSpp}4%cFtvaZ-#w2wGRG0B{F{BqF;d<#s)^9Btc6X^2cak zH`w+34gX&I+fjrlZA;=R6RJu=4rWS#MTpwF6 z%qQLLsC-22T=Xe&(S zkpXk6ug=^Z;3C4pVnmDm`<~bV&lD7yjy4y&gua3y=b-n2RC5+Z9MM2EWoEvnGyg>G z*m!_y6^kkAqXT=$#Hj1slk9AUD>!$9PkQWKEA`gAgh2Xj2Zt;SZ3h3uTQhJ1?sCBV ze`ez-}dB zjHXtG@7*17977)13B>QjV26&*RbXx*&F~I4WUZhvE!2j6pjNGCfMW2x-7WE*kvQez z^LuxfAvwAa;sabTt<%mKg z0F$9x>b_4(Fgmyv78chB1!M~l$i46x8Su;l0lk=DW1w=>*No*4<@PvO_6Ozd#rewV zFI`U(Zr3{)0EB{rS0uL+n;6&oVe3R6*m$^*i+gdqbTKO`!4j<+9+@y@;W>wbvmZZb zaU3n59UAQ1h{Jzm;Ybl$k5*}@vR1PZdQ|3NTw4M20rLm)0Z8<|6o7K9>iIDb566xI zj2Fb?Us~aJGFZVT10taNS6Ml(uHCB472NC_vuq2mjb6))zDe}nUS7|=?@xMqi0+Lyd+O0^x4mR9#{@>2cSBpFT1T7My)tX`A?JKUO)sP7wh(+cK zp*GFUZGMm|44f6<3fJ*1rlhV{hTYAburgFO>lDPFpGlp0msh{W;~j`JaHKC=|M?D( zANg~IA2tMK$HlegxN5iRETlCVZ%(?XR&!CU|3pi)sw*Ynr~vcA(-sRLgdfH2Xm2p% z9=Hu&#m(0TTbt17W1ybo0v0Dp-C&n(nxosvg)L|dm|7=!u@4?Num&JBbU|5c+Mwa# z4GOGBitEr?NpgkA5%B2F3!N(Eg1<8C!@uu;st2_^jFs#Fe$MMSvbNNFN;$;Rx+Ip} zJsfYh5b0Z-900NFP#Lqpz2q?tFP(7>$Y=YxlDAgTM; z4;d5SGItB+<0eGHlo7Jv((oNPI|=GYi8qy%3k0Zg&kzfU`Pr@!Fpan84`HT!4JK9` zZ$6~J7Sev-_7fP4;oY86_udM_LxU0iU>SQT#Oght?O2fj!oCe#`uGQZjgqBFa2Juyo z1QdIrxK4ZodK(Y3?gdQ;O7A2neY_ZlqC~B~?W{jwD64;dqV4E=)E1~g=Dc|$9z1E` zcY%Sw73gM3n$j4!7s26&o@`~;J{f)XObat_18zDCJYLL?eTqcYRQZ9W&U<`xW(SG4s5lX?$EtowA>_;o~5^6~UaCPd(YhvUE zCJhT`WY~8M8b^cm>P%71ftC}^Ju+|A%nrf*lra?Z`0=+KbuoODBmev;ul3H%$5`3|%(5Z^mbi@Su=ybTak?9m`iQrJYBQOPjox44hS2;k zxE4uIkG1eB&)Br{(5huNs8tmHHk}+K5W0*sAXHBBIty@#BqctYre~je<7LpVb%|2~ zg3CdE573Rt%GyW7_*yad@7tW-vRZlJ!i9lg8-fLraBwNjPtPBOYYg%d!T(4V{JmZ> zCc)45lyT%d(k=!gxIwHjr9b|NcYz*--M%6UA>G8(l);xDP8tCt!utvtlSJIPlN@4t zb9?OCE3?3Jd;JzSV|B$TjD9A7=f$w2+-Ffn{PIzPmDc}^(my97Kf#3`1Vz~2P7gI5 zk1O!cZ@P`N3wNa8#0u9W12FCk=XDVf6Yt4|g+>F@-gt0Ns91OX#O+k>X;O}&trLJ^ zRUMPqxb*^lMr`ah@H3zr*up{y*+BMV)-zCFuQ;$eABBqKbOM+LUMGosunqqPR0i5D zBmal-LAbCCC32W^a@e)TLq-A!C1|#b7Ht)fDzME5EO*Cn zoOP0r@R04ml^|U3D|PHnB0wcW0#AU|0w&q;Y6%I#t42kfqzXK@D+|+xlrkqk2RjHU z1F$->d&%M4!BE0JD&~%g;J<_ZCO*KyQ&>$NcYz`RhG00aAryFVP7Dy62>}7c2i+aX z;-A(IfBSvu(l=ke-tSSv&BfPN1mqHlA0HUR^&pDvGoVaR{4 ze1+|WZO1@}7m19+2UnEEhpl8T!$(MElEM#kEm*DeSsV2VO`+Gcc z0YhZ&n=H7yB>K8&fQ#iVj?&o{CKMzsCyogN*!JjYN@0TP`jQYe1a&fY&&_*t9G~{} z_fMN;EFSP3*82QQkQ!iMBznBd&$U=R^r52iDf9cd_8yz^0# zk(?|@i-pQN5aNZuzZC4M@>Su3BKPx*O6!PI%)CIEzyqz;pNbM~@;{pl!So=8*p#pG z<~WC-bi_0^e#8_-`Ff4@%`u;Eevp)F#R{_yqhcz#mYE$9CfBZu-p3ZVk<;RWS+VNyx;3E{Y&tH#-1QG!H=d>B=-@>k7vU$ zA=9A+YpE2<$BX~ODM`a0cpYOBl;XP)HD6}sd+05`jw<@n+c&ZYbtwcwp#d^Hp4%iL yg*v|X`QPd-y#D`HVE-${{{R2**T?deFEn + Serialize + Clone { - // const DIM: usize; - type Cartesian; + const DIM: usize; + // type Cartesian; fn zero() -> Self; fn abs(&self) -> f32; - fn from_cartesian(cartesian: Self::Cartesian) -> Self; - fn to_cartesian(&self) -> Self::Cartesian; + fn from_cartesian(cartesian: &[f32]) -> Self; + fn to_cartesian(&self) -> Vec; } pub trait GriddedPosition: Position { diff --git a/src/system/spaces/continuous_2d.rs b/src/system/spaces/continuous_2d.rs index 84d01ed..dd5a6b9 100644 --- a/src/system/spaces/continuous_2d.rs +++ b/src/system/spaces/continuous_2d.rs @@ -2,15 +2,15 @@ use std::f32::consts::PI; use std::ops::Add; use kiddo::distance::squared_euclidean; use rand::Rng; -use serde::Serialize; +use serde::{Serialize, Deserialize}; use crate::system::sticker::Sticker; use crate::system::{Position, Storage}; use crate::system::walker::Walker; -#[derive(Serialize, Debug, Clone)] +#[derive(Serialize, Deserialize, Debug, Clone)] pub struct P2 { - x: f32, - y: f32, + pub x: f32, + pub y: f32, } impl P2 { @@ -47,7 +47,7 @@ pub struct ContinuousStorage { } impl Position for P2 { - type Cartesian = [f32; 2]; + const DIM: usize = 2; fn zero() -> Self { P2 { x: 0f32, y: 0f32 } @@ -57,12 +57,12 @@ impl Position for P2 { (self.x.powi(2) + self.y.powi(2)).powf(0.5) } - fn from_cartesian(cartesian: Self::Cartesian) -> Self { + fn from_cartesian(cartesian: &[f32]) -> Self { P2 { x: cartesian[0], y: cartesian[1] } } - fn to_cartesian(&self) -> Self::Cartesian { - [self.x, self.y] + fn to_cartesian(&self) -> Vec { + vec![self.x, self.y] } } diff --git a/src/system/spaces/continuous_3d.rs b/src/system/spaces/continuous_3d.rs index 710a3a4..e1cc444 100644 --- a/src/system/spaces/continuous_3d.rs +++ b/src/system/spaces/continuous_3d.rs @@ -51,7 +51,7 @@ pub struct ContinuousStorage { } impl Position for P3 { - type Cartesian = [f32; 3]; + const DIM: usize = 3; fn zero() -> Self { P3 { x: 0f32, y: 0f32, z: 0f32 } @@ -61,12 +61,12 @@ impl Position for P3 { (self.x.powi(2) + self.y.powi(2) + self.z.powi(2)).powf(0.5) } - fn from_cartesian(cartesian: Self::Cartesian) -> Self { + fn from_cartesian(cartesian: &[f32]) -> Self { P3 { x: cartesian[0], y: cartesian[1], z: cartesian[3] } } - fn to_cartesian(&self) -> Self::Cartesian { - [self.x, self.y, self.z] + fn to_cartesian(&self) -> Vec { + vec![self.x, self.y, self.z] } } diff --git a/src/system/spaces/hexagonal.rs b/src/system/spaces/hexagonal.rs index 370d995..fcc728f 100644 --- a/src/system/spaces/hexagonal.rs +++ b/src/system/spaces/hexagonal.rs @@ -1,5 +1,6 @@ use std::ops::Add; use num_integer::Roots; +use num_traits::Pow; use crate::system::{GriddedPosition, Position}; use serde::{Serialize, Deserialize}; @@ -40,8 +41,7 @@ impl GriddedPosition for HexPosition { } impl Position for HexPosition { - // const DIM: usize = 2; - type Cartesian = [f32; 2]; + const DIM: usize = 2; fn zero() -> Self { HexPosition { q: 0, r: 0 } @@ -51,17 +51,18 @@ impl Position for HexPosition { ((self.q.pow(2) + self.r.pow(2) + self.q * self.r) as f32).sqrt() } - fn from_cartesian(cartesian: Self::Cartesian) -> Self { + fn from_cartesian(cartesian: &[f32]) -> Self { let q = (1.0f32 / 3.0f32).sqrt() * cartesian[0] - 1.0 / 3.0 * cartesian[1]; let r = 2.0 / 3.0 * cartesian[1]; Self { q: q as i32, r: r as i32 } } - fn to_cartesian(&self) -> Self::Cartesian { + fn to_cartesian(&self) -> Vec { let q = self.q as f32; let r = self.r as f32; - [ + + vec![ 3f32.sqrt() * q + 3f32.sqrt() / 2f32 * r, (3. / 2.) * r ] diff --git a/src/system/spaces/square_grid.rs b/src/system/spaces/square_grid.rs index 823c362..6029efc 100644 --- a/src/system/spaces/square_grid.rs +++ b/src/system/spaces/square_grid.rs @@ -28,7 +28,7 @@ impl Add for Grid2D { } impl Position for Grid2D { - type Cartesian = [f32; 2]; + const DIM: usize = 2; fn zero() -> Self { Grid2D { x: 0, y: 0 } @@ -38,15 +38,15 @@ impl Position for Grid2D { (((self.x * self.x) + (self.y * self.y)) as f32).powf(0.5) } - fn from_cartesian(cartesian: Self::Cartesian) -> Self { + fn from_cartesian(cartesian: &[f32]) -> Self { Grid2D { x: cartesian[0] as i32, y: cartesian[1] as i32, } } - fn to_cartesian(&self) -> Self::Cartesian { - [self.x as f32, self.y as f32] + fn to_cartesian(&self) -> Vec { + vec![self.x as f32, self.y as f32] } } @@ -113,17 +113,17 @@ impl Add for Grid3D { #[test] fn grid3_add_test() { assert_eq!( - Grid3D::from_cartesian([0f32, 0f32, 0f32]) + Grid3D::from_cartesian([0f32, 1f32, 0f32]), - Grid3D::from_cartesian([0f32, 1f32, 0f32]) + Grid3D::from_cartesian(&[0f32, 0f32, 0f32]) + Grid3D::from_cartesian(&[0f32, 1f32, 0f32]), + Grid3D::from_cartesian(&[0f32, 1f32, 0f32]) ); assert_eq!( - Grid3D::from_cartesian([5.0, 3.0, 1.0]) + Grid3D::from_cartesian([-2.0, 5.0, 100.0]), - Grid3D::from_cartesian([3.0, 8.0, 101.0]) + Grid3D::from_cartesian(&[5.0, 3.0, 1.0]) + Grid3D::from_cartesian(&[-2.0, 5.0, 100.0]), + Grid3D::from_cartesian(&[3.0, 8.0, 101.0]) ); } impl Position for Grid3D { - type Cartesian = [f32; 3]; + const DIM: usize = 3; fn zero() -> Self { Grid3D { x: 0, y: 0, z: 0 } @@ -133,7 +133,7 @@ impl Position for Grid3D { (((self.x * self.x) + (self.y * self.y) + (self.z * self.z)) as f32).powf(0.5) } - fn from_cartesian(cartesian: Self::Cartesian) -> Self { + fn from_cartesian(cartesian: &[f32]) -> Self { Self { x: cartesian[0] as i32, y: cartesian[1] as i32, @@ -141,8 +141,8 @@ impl Position for Grid3D { } } - fn to_cartesian(&self) -> Self::Cartesian { - [self.x as f32, self.y as f32, self.z as f32] + fn to_cartesian(&self) -> Vec { + vec![self.x as f32, self.y as f32, self.z as f32] } } diff --git a/src/system/spawner.rs b/src/system/spawner.rs index f4e33b7..9cebb55 100644 --- a/src/system/spawner.rs +++ b/src/system/spawner.rs @@ -17,7 +17,7 @@ impl Spawner for UniformSpawner { let theta = rng.gen_range(0f32..1.0) * 2.0 * PI; let (x, y) = (radius * theta.cos(), radius * theta.sin()); - Grid2D::from_cartesian([x, y]) + Grid2D::from_cartesian(&[x, y]) } } @@ -26,7 +26,7 @@ impl Spawner for UniformSpawner { let theta = rng.gen_range(0f32..1.0) * 2.0 * PI; let (x, y) = (radius * theta.cos(), radius * theta.sin()); - HexPosition::from_cartesian([x, y]) + HexPosition::from_cartesian(&[x, y]) } } @@ -41,7 +41,7 @@ impl Spawner for UniformSpawner { radius * theta.cos() ); - Grid3D::from_cartesian([x, y, z]) + Grid3D::from_cartesian(&[x, y, z]) } } diff --git a/src/tools/analysis.rs b/src/tools/analysis.rs index 67d49b0..99d1055 100644 --- a/src/tools/analysis.rs +++ b/src/tools/analysis.rs @@ -5,7 +5,7 @@ use polars::io::RowCount; use rayon::prelude::*; use walkdir::WalkDir; -pub fn main(cli: &DataAnalysisCli) { +pub(crate) fn main(cli: &DataAnalysisCli) { let a: Vec<_> = WalkDir::new(&cli.sp_dir) .into_iter() .par_bridge() diff --git a/src/tools/render.rs b/src/tools/render.rs index 2428e0b..085194f 100644 --- a/src/tools/render.rs +++ b/src/tools/render.rs @@ -9,12 +9,16 @@ use crate::system::model::HistoryLine; use crate::system::spaces::square_grid::Grid2D; use clap::Parser; use colorous::Color; +use itertools::Itertools; +use num_traits::real::Real; +use num_traits::Signed; use serde::de::DeserializeOwned; use serde::Deserialize; use svg::Node; -use svg::node::element::Rectangle; -use crate::RenderCli; -use crate::system::Position; +use svg::node::element::{Circle, Rectangle}; +use crate::{RenderCli, Space}; +use crate::system::{GriddedPosition, Position}; +use crate::system::spaces::continuous_2d::P2; use crate::system::spaces::hexagonal::HexPosition; use crate::tools::read; @@ -26,68 +30,93 @@ struct Args { } trait ToSvg { - fn to_svg(&self, size: i32, colour: Color) -> Box; + fn to_svg(&self, colour: Color) -> Box; } impl ToSvg for Grid2D { - fn to_svg(&self, size: i32, colour: Color) -> Box { + fn to_svg(&self, colour: Color) -> Box { Box::new(Rectangle::new() .set("fill", format!("rgb({}, {}, {})", colour.r, colour.g, colour.b)) - .set("width", size) - .set("height", size) - .set("x", self.x * size) - .set("y", self.y * size)) + .set("width", 1) + .set("height", 1) + .set("x", self.x) + .set("y", self.y)) + } +} + +impl ToSvg for P2 { + fn to_svg(&self, colour: Color) -> Box { + Box::new(Circle::new() + .set("fill", format!("rgb({}, {}, {})", colour.r, colour.g, colour.b)) + .set("r", 1) + .set("cx", self.x) + .set("cy", self.y)) } } impl ToSvg for HexPosition { - fn to_svg(&self, size: i32, colour: Color) -> Box { + fn to_svg(&self, colour: Color) -> Box { let points = [ [25.045, 128.0], [256.0, 0.0], [486.955, 128.0], [486.955, 384.0], [256.0, 512.0], [25.045, 384.0] ]; - let size = size as f32; - let b = points.map(|x| [ - (x[0] / 512.0) * (size), - (x[1] / 512.0) * (size)] + (x[0] / 512.0), + (x[1] / 512.0)] ); let c = b.map(|p| format!("{},{}", p[0], p[1])).join(" "); - let [x, y] = self.to_cartesian(); + let cartesian = self.to_cartesian(); Box::new(Rectangle::new() .set("fill", format!("rgb({}, {}, {})", colour.r, colour.g, colour.b)) - .set("x", x * size) - .set("y", y * size)) + .set("x", cartesian[0]) + .set("y", cartesian[1])) } } -pub(crate) fn main(args: &RenderCli) { - let positions: Vec = read::(&args.path, args.format); +pub fn compute_max_size(positions: &[P]) -> f32 { + let mut positions = positions.iter().map(P::to_cartesian); + let mut maximums: Vec = positions.next().unwrap(); - let size: i32 = args.image_size as i32; - let max_x = positions.iter().max_by(|a, b| a.x.abs().cmp(&b.x.abs())).unwrap().x.abs(); - let max_y = positions.iter().max_by(|a, b| a.y.abs().cmp(&b.y.abs())).unwrap().y.abs(); - let max_size = max_x.max(max_y) * size; + for cartesian in positions { + for i in 0..maximums.len() { + maximums[i] = maximums[i].abs().max(cartesian[i].abs()); + } + } + + maximums.into_iter() + .fold(0f32, |r, c| r.abs().max(c.abs())) +} + +fn render(args: &RenderCli) where P: DeserializeOwned + ToSvg { + let positions = read::(&args.path, args.format); + let max_size = compute_max_size(&positions); let mut svg = svg::Document::new() - .set("width", max_size * size) - .set("height", max_size * size) - .set("viewBox", format!("{} {} {} {}", -max_size, -max_size, max_size * 2, max_size * 2)); + .set("width", max_size) + .set("height", max_size) + .set("viewBox", format!("{} {} {} {}", -max_size, -max_size, max_size * 2.0, max_size * 2.0)); svg.append(Rectangle::new() .set("fill", "white") - .set("width", max_size * 2) - .set("height", max_size * 2) + .set("width", max_size * 2.0) + .set("height", max_size * 2.0) .set("x", -max_size) .set("y", -max_size) ); for (n, position) in positions.iter().enumerate() { let colour = if args.colour { colorous::VIRIDIS.eval_rational(n, positions.len()) } else { Color::default() }; - svg.append(position.to_svg(size, colour)); + svg.append(position.to_svg(colour)); } svg::write(File::create(&args.output).unwrap(), &svg).unwrap(); } + +pub(crate) fn main(args: &RenderCli) { + match args.space { + Space::Grid2D => render::(args), + Space::Continuous2D => render::(args), + } +} diff --git a/src/tools_cli.rs b/src/tools_cli.rs index b886e73..9d4c17e 100644 --- a/src/tools_cli.rs +++ b/src/tools_cli.rs @@ -1,5 +1,6 @@ #![feature(generic_const_exprs)] #![feature(let_chains)] +#![feature(array_zip)] use std::fs::File; use std::ops::{Index, Mul}; @@ -33,6 +34,7 @@ enum ToolsCli { #[derive(clap::ValueEnum, Clone, Debug, Copy)] enum Space { Grid2D, + Continuous2D } #[derive(Debug, Args)]