From 8a88c31a9f10dff49a462b5524e690ec370b99dd Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 19 Oct 2021 08:23:21 -0500 Subject: [PATCH] using conditional segment initialization for multi-threading programs --- bin/onyx | Bin 452912 -> 452968 bytes bin/onyx-js | 12 +- bin/onyx-loader.js | 23 ++- bin/onyx-thread.js | 2 +- core/builtin.onyx | 4 +- core/runtime/common.onyx | 2 + include/astnodes.h | 1 + modules/ouit/ouit_build.sh | 2 +- src/builtins.c | 4 +- src/onyx.c | 7 +- src/wasm.c | 29 ++-- src/wasm_intrinsics.c | 18 +++ src/wasm_output.c | 277 ++++++++++++++++++++----------------- 13 files changed, 209 insertions(+), 172 deletions(-) diff --git a/bin/onyx b/bin/onyx index 94c9ad5ce00980d0a81d74cf8f7ba45daa22b6d2..a1bcd690e401b97b9e7f5c4e71a832664adc06fa 100755 GIT binary patch delta 102876 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

O7&n=|TG?jv-c&B4l$;#StqB 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%0AdK=1>XhHZyz$Y)LCb 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 o4~Ag2#-R`qI={Q^!u5I&b2b31erC9W!&{ za1$<;>&chO^|R#Q4+S2s;?^hN5$znfk?be=s;65ogZoyM`X@BEJ``?DRVkCrzdFbN zo$?=aA0X1^xFPu&+#uYjq|5{&;WnIjHgFf*9ACG-0d6!hRx$Co8g9K9VaVmd?>JW7 zt=oLu`VWY#qT&A=|4KwyG29=hr30C6eP3(0J__!7E4Q8q=K*)PrCT4@((Tao7RV`F z7r1j_Zha=46>dj!x84u#*Jf@#6|NE7zNUx>t~k`KuYqe1_iYomJ`K(r?t{i|y%$_T zBe%W)E*P$J9k+hAHWG&Oh5L{`5eD~5Ew{e7mcy+#glBI}xBfKTU4OT}3N9S(8>?Gy z$8Nq2HG~i3b%1-lfm^>;AGHSOz-HQy_1t<}xXfU;ej~`OcY}Kqe`Wd|chvjAy@3o2 z?}N)qil+1>hFxB$4FJ>2?}aKAs{ z)|bOIg*(t49Sp9ln_FKG_ZZxnu5LX6t_Iw;$K85gxNBY9`Xaana9>2C=pMC~NtAq2Q)a0jQm_4w&%|MHhmMR1+r&c29tg7by@ z5O0x)f&1kJv=dxIxV_J#nc(hDMKi&L!+kTwtv?S}6>j5XJca`I<0Q8}A1)B?(}`|< z2;8j+Zao981>BMGZhbtQGT!0V-x}xEABQ_X7FU&U{%{|~yY>EXt}(ck3fCC!tLHGB z;O;-`*4M&yfXg54)?b9H2Df>XTaSjj@{C(w2v-ko&(mmcxIagtz2REJ9UFn>hN}XX z?HG>shP(6>+8ZtaZs#zxH{9<-(cW-P;SLNzd&89tMtj3O26rY7?G0B0ZrdQVH{7)+ z(R6U$a2p1?^`8bH^KcXUyY(&o5N9kpD_mj>nzk?6{~mf~__xwUF?MD&`7xDblQ;3H z|DiYS{sA3E;{6dp>wM|DGj?D!`N5TBlQ*&N|InLuk0RRNBt{{Edq24KT0f%Q&;9@8 z9RHG#{xAIhX~xzge20tZba20YFAFmRg|k&C9N9SjSA;n*I)2x!_b9};g$sdObrll{ zFrb01cdY-ClCAuA%xx*Pc0qoXL#}rNu=O5{Lh}}@C%H02F zvct#)a`Z2W-T@!Lxg8BGYpv_!I_vr&xUP@s`VSp+{S*8r^UZKwZwXfo?q)k(Uj}!x zg|25jDcyv)hklbIjNJ~!*`fceB!d%h1Mse`8-sLxJpA3*Hu)(T=7fp62X0gyz7FSx z5`B3MMRC4eqF)GBl=HysdWv!lSkORGt^-Fl#N`t(1^63q3-AUoANU7wS~GlR9XPTh z9)EhLL|->VQJMpn562A;;GU6+lAT?m7d@jWHQp`JyNyZHnB;=Op z3CKvorzLt0(7LMxD;`D32m0Vfg|eqaj{&9tM+38f3BVj+D$ogB2P^_^2Zn!EqC0_c zz_Y*1Mq~Ja-c*H1KNSnKqoL2SODArv>q(cbAjQ&6Tmp&HDChJ zQ3g*AJYlt9aHvF|0L%hr0kaR6=$CIOEgww*jLR=^=oUQM8GZ^G0A>N>f%elSdNSb|L=4OU765H$ zOLVWgi0C^+2uwK#J7Cs%R5kGzP%>Z+5U+|?3VL-9%?Mii93-IkxGGIbyY{9fd&2&Y=tnKJ8$D&5CK^hzNULXMy>^GGGDr z&tf7FF}D4-0JE{Rd52`|U{7g}ghrzPz#?oF2XsIU;0c;(9T7hsyul+!O8jhO>@mcT zTNe&%XXI!;6u<-r0z{&UmSE?D5IZ6EE{Fin!sG!J+}t1iIQW%F5SX$CRoE50KotYC z)|cuD-H_2Y(RaE7-@zUfFe@7+egf&dhZ+XjfqQ`Y@0U9CkRHg{W>gW-4%|XAo`+Ah zBLVzJtpI4Ds{tP+|Fb9|o%m?NI|SK8u|z@ z0q6o20Ij{j|ALYOt-wfNHgFipzoLM^a0fga;K9u`eGf1mcmkLLEC9x-WqRvA2!Jm_ z#{q4?3BUwk3eX8$O*~$Cmj}$p3;L{mQ8I6Y0~P>dfLVA&-~?biUZ#}_wE2|jmw^r^ zJYg|N0I!Bf1v>FAihN+Uf0^Df7M&=dOwR^pRmJfk7EQXAI23f8DI{h`@~u z0mG}5>(;T*dzIsQ6Kz_pT+bu9db#d14&j5!^(o^a2bb%sf%(8KB-bz3Lna`6gK|9_ zm;;O^YzRAGmaSYr;eaOvpR^B|h!Qp~*QWvFo0RK&f!WQ=^^TKJ!j|RwI$(UOa@`43 zT4R$77}us;_nM4^+Li0Wfbsamc=QxhZO?LjBQQI=T zcz}EwN;noZ1xy%^@Gl|({CO}LXa}w%d2+da4VVoKcnRUAV9OAg4a@=NPsM(s*L0Nl z`Eq?UFzy8e1SSA;fd#-D#81PXVgh7fJTPZ^xxN8d1Uv*(63X=pKxZQC5>cR;<$4M* zd``K32bhwCrkMf#JhVM93+aZ>1n)>eo5Q0lMoEZBMW>pD1Ybc3fwor>G0>igHk^$d z1CxN^E6Vi@pmjBx3}|};`Z+*65|#ms2WA7avQgDQ=X>}A>RjaWeH0WJzOh_S06G#j zmFwH#v3-Dq$Y3+7Dhcvd1OQsMp+Q_A(;aiOvZu0!{?{{`@*%twyDF4yycarsCf8CCopatO@7 zj$RK;aG`1!fPcrWA6keK{RbDc7{1wuaB&N?-p2M0;h*4B!2g8}E5bW&eLK*85Brcn ztB!rDMUcI8ecd7qn=Ef#zYHSYN7rqO5pfM&p9Qp8b=?Wf4$^g>C6K%5dIB&Tm<3;kq7|iW(WA>(hYtDG0X|83lU1q8LYjxN=>^8zP-*wV>h;O7wQbMpv~Ggu-=% z3m1c(YV)8yn@jXJi68H4o#gAK*x^M7Q0!u*Q|;xscZ)dZR39Ilv$aG=$1)Czh8{Qx z*@jD+3LHJ89|$g}0!L3(hk~n7fr|!b6Jz(QwYqnMszU|UG^nP4^RK|AfSU!bX$5XI zxGb>~QB2wZRmEKFg=!tRdKJv`!EFQ=Qh~b$E(ctr3S2R`6X2>b*A3|7sVI5dM9Tx} z6L|mD)B|`-D`R_!UY$*-Dl=fRTx>m{cJ_2`7grCc&FZ)+nJ86o(%vo_98@2x@3W&s zkD%aDzSbq4(^2W@CUC=G6D|@Ds3OC9pa;dYOp8X zOn)30l>AYNjb0YvJ_)O%JK9@V=qJBux_&52?*PQbi`g z2JtDN{n?L8bZ?G^k~(WazXR8vI3w2yMy{!TilDpmvG6^N`spYJ9#-oHb<5$_iuSd} z!!Q75@hS=^7La;0)HYBG)T3CP1@#2618U^x@L}XHMch8DcJ(}zBibHOTY47fh-Z$d z{XF;X6dxQ>AIEFHt{hS8A;ofnDI(}7jJN+s3_q&2tX=e<61^FvfWrotR2A(g)*Mxv zcou&mK0k_oE}YF3KOR*dS7UJfpC=M8tDzz)5Bd|IiAi~CKUB}oJVYEVz5$CDXx+|J zJL6CDEsm-6)V;VwcZ;YJwU)5A)KoF{nA#BeU33gJm`BjiI~u9xq6)3z)G@U$UhNfh z9AzpaXi_5*%3VR()fpMHZ5yz#jB;~ONNcU)9EsXkYy9Zb!^OH)U@ zFS^5VvGAnY%(Lvc_~4{E&ok$1(fC``nMJ(#t=b>|d;W}Ino#rAL7rtN#qfOfNp-`w zC3=#GIE6~vo3D0!A|F@f{U`%CsEfPsjtkf4`% z`IK6(j;B(FH{XMgU~^$WT*lvL}3S)1upkH@zH6ur$@ZFeHvXX zRn$0xR(G8fEzhWpRm&n=qKm<2(3ftCm(Qqi9zTdv`D$HpM)>5})C*pn4 zy|or7BF?HK>bS6RfQB&+>Rl-qa@T$oZ=c0T@e&u$sy%}DU=N@_8F=>brQF%zXt$*3 zhG_qt+8FP8c1)mO?Cl$vQ6<{f z_KGFSH*AU8-#4yGnTNQ3QN=6YFRJf^c%Jed`Lu6*wC|K?--KA-IE15#JT92#$7e68 z&DCUh^F-Pub&Og7?`m=LlDbMw!ujs9So*y>NIe1X6mju;^))pfRTm&$ysUn&+Uui& z#lRobPt;;~eRiuqqPe}NG*pynwM+H4#JgwJdSdlYYMgo*+&WSCliEu2u_;P%T@hTM zwp6>pKT^aNs2$W<@H)k!0(FFz5AU5I@neD7xKT0uql2;Wq2MqYfR+@<4O~DYEUHAK zE9zu51>TM#^NM<29o-leDyCjlcUKE+qA1<4YqG;bxUE_P5%aTZS80z2=cb?4Ch8V= zPl!){R{N@V;KfL|rjAmFp>geE>@~32@NN`4uBp@2fTq+L8~vh=_fCd)PYYZJi&MX0 z?#cc|4O3~O=Irioeo=ejoruprJl|hNJ_DO$GU!mM_tGdE4Mps)>Td61kb5KXz_~c} z3(gd6TSApcwsMN%#Nr$33U4nAo()4w^=_2q$s*+@vYZVr zTI{%~F7s~P7Qyg@-OD1X6eWuL1NF2VT!>inhx(d#2v&Q6&z9=l#m;MLu;_bBU7+p- zw?`big?_LhTv0BFtwlI_&>^iwrF3!;LZ^uG;ufXR5Q6zq=h6wcz`gv$aj5iT+2Q8Zb?*y^nj#{@( z2E0iNvE6}0=pf7nHwzr*R^y1lZ!WkLu^*v>luoF+MGwn{?E@tMT%2h1x7uHwV0aVB zn+tEY*#EcMSuKKhm?-~SZ53pDOi>QKh8-9gyD?pL1ecFLiL14O2EgluN1gpyZJZ^+ zVcgwSoAg``?=+}s9MC}--T-b2xQZu|9B{edj5!)Ml*>clin7G%yJ|l*pfh#!M)%Y) zjgsJPjm@s{Fri`gil^sr8fTR9YUonLyZ6*4ZT7;O2Q$n;#z86PgF6e(k2xySHE{Xj z_C2+(szg#Rt5K}B8XFF8>bqQPSgAdU6v#RTdggBm9T+&Zzo7)^Tt-VpIivDz@G4BkCol|Hiaw01$Qi2C=jY-|m$ z3+g@`Q8NG;EfZD?yJ4J?}c~I{!;xVvW)hP_l!4kXk`BabUp`4_4TGM z6}p(}hVBk@m{v+q5mub;@b#+_toFj;JuAAGs6*A|@OBexN|5if@Zwt|CF%$@ysOc{ zOTi|?>k?_DG&jRLLEJ1=CwmXTIyvU+QvE}5s=ZcAB$TNG8svh@I#H@)Vla-;I9ud_ z+YatjP2qb|t-Jennc4$?g~h3`wdmwl)4gdIGx=(%eoL%;Osg;6j?k*^zUfw%d8pIu zDDs+@wRE)%zLCP)Lp$o77ln{j%JiFZqPXFqO{f-w%Zd$_GJSNIc&&41n5ltA_QowYF;Ug}svF^Tik+&qObtiXV5Kj^f~sn-soC(Z z7CWkHqf~tCR~fduhL_d>A5Do7J-xM->V#M)_p+R;HtNjRQ5TYzMbTd}h_UsyERuKSNDQT631$4{Z*f#bovUarG2RGHN3}aX=7B| zFd9W|0<=NuEO_x5&j77QwLS1|--_MD8lpiSCOO|S6|EPbwewH|h8qdi(V7R@;SJqg zrdQ<*Cjf_m!v%94ZF-wLcsG1jrcYwE6?hq3F}PXG(acc$pca7=%;D?4Gu!3PlI>ep)!3fXDA$)0xnc!25IfoTzKtbe-OHn@(hKq5v={L z(%o8Io&=+F#El~M*?L+pbsfCh#in{%{~#BUxIp0@qV;zS7>zmgr!xIF zPLygU9$a)mnLfD!Hw#=gxLOss<>0o13$DOz0Jo=-T@JWI;JQ|@I|Qz%pv>_|;0qwj zU}&pgcmtf*6>NW3;FM=kE8uYYGY-mh0Ju1CSmQk4!oW=fSGNM!4O|kqXoI7zD0t#P z=2i+k0bD+~inWjguJzSN6UhJ<0}cb;I4HhsaH-%HRp4^LDL(z!O1yE1T}#-23{ZWR1=Jh1b9RBvInO) z%5o|=n^@TdStAgOyxn}u^_M-x+kdG|#9Pf!#yudh!O~3Y>Rk+PnSZ&yUvzJ) zH5cK{wb5!S`Uob$=9u|h@Rrpr*I%QJjzHlbrq!z-It4upf5kvgHVztsk>ECfyDS#9 z#>p+aEp{^!!Zcg8vH`o<|2V1;P!|X zEm0#Q;oU1Hw#3Ap3NK1WtP@@=$XjAMqB{cl!lM=HH2MX)Mj6~n>+4PX|CWyB`tRc1 zR$54S4UcNRVNt%eDBnQzxSq6RptMiGYES2K9j77Vpb`{-yCZJ4(mDhMPD4+PESEzW zYbZO^t--AmU0Q2B)C733C)OIX=UI4j#Ff_Qtd&Y?*`mHF%}MiVsIPG zh#BBqVtpF~DuOpxl(#{7T4SvB)m6f;+Zf{;p>6+rX`EW?4UJN zH$r0Tv*nS*}wsat>9Xd1bq4hI(?x<7{Tkpl0X&+xQpAf1mJ ziBBHW8rI!k&9~TN5LUIle3!#zdG_}$@~ARj6h5ZaYgUF3NvHA1CPipm-g*wAnJ3Nz zXQ8?1X3+WgiGzM+>ZpCHS841iq9QS3dPHhLJ}3&} zoR)+Hu8MJyT2Jp>__OgOow|Exr1pJvhZ7@*js(U&ja5S)z&NCme4&xlk7WKi#?#EF zx0Cv_ttDP&EMzQZtZwXG;Lb_Iw$iXLLt-tdP?|HI<_IHMeu8nx3~Aq+<^CqmIEryH zV_QxqiRC2*;{2Ay#M_Kp8FLw(j29SBFkWNy;E1a;)?sYQ*nzPtV?V}`gh*c*&%{i| z#f-}t-(+0Ln9aDE@js0F7{6vb&v=UQ8e<{j-#|)VDP^JxSG5mgFk=hG&Wwu~do#u| z4q_a}IFj)>#)*uHjPu&5I9cFGWnv}c+l)DkyBWV?JjnPB;|0b-##@ZVjO8LCMynf? z)me5KWxi%4YyJ!pV@W-%msF?BdsIC_tR(d_tX3+ipA-8@{eC2ee)-YR_;4?&i&?Ey zQcn_%Vxb1`kEI*v#TK#vP0~jGr*>V*HG8 zFXINrcNo_&u4i1w_!Z+J#)A?EC|@(7a)$ddKFv6jaRuWlqlbyV{f5oGOl6JQD6P zmNR;CTh?N%&)9*n2V*SbNXAKwFEGwwT*3G{<2xBfNgT@iOnkxkA>%>DQ;a_|-e>gT zDy+-cfUyOmIZ2rXYtOu$afpGvuu@@S3gaxs1&qrW6>f_(mi;niTcpcAwU%ioVYwR1 zTUf^MH;&CLV{vC3AG2J8<=rg%viudxek>nlnJzSp1xP*<=1%iPmTPi=D=gPyxsc@m zmhZ4!o8@wr>#$tLvboD(;d5Oe>1hGt!$c4V2w>T~=nrAJ9_yR39Kv#2mg}?p7|RV= z?!mH+ipj?hWMQEI(mr73Bw(d$3%@vct|qm9DacQ7qSCxhKmlSjJ3i9Nk!^3oJSYvD{mV z%Cju@VRu294`ja8{Owvp$IB5iB<$nc9CO6K&Z5 z8@a~Oh2>{hj%FFVv&J!qWpm%?8J3@A{X~|r^Jg3hERSJ%K4eN?iDx2}4aTy(f@SQ# z8OM5-$FsbVI09J4u8eWi@9vNR5}0Vl2H2l5j&PQ-3u7EzSjN_h zar9&v`zOZHpXJ#s4`Ufy9LDi1%h=X1j!6zCuq|O6GgvlvSLU%ikM&Dfp3m~@EGM(P zf#n4(f57rWmOo`#);s#&AtqAT;55sNSpJpe#VnVxyo6=#30Z@wEZ1atDa#F5eud>Q zmX}G{p+qvVoDE`FPGflp%dfILj^%WgXRw^X@t}6)dl1`87jEJ-o+678`ub z@=BIJWBGNK53;<9<-THJ!FjulBpenm{`XK5iGA~xgX1Kusn|C zH(8#~@&=ZdviugyD_MS<<+oUV2eQ!*HZzgU2D@2)m*t}@zsK?^mfvUj3d=b+0z{>Jx zEC;jvIm^vh{(|N9EbnFc36{TPxgX2>SRTf*<0~efW5UVu^DOUYc@E15SWaR2Aj_|^ ze2C@MEFWh1ZI+L)yhX|mywh49pRhq5%U`m5jOC*&A7}X#%U`qnJ%Z*t+!*Xku&$9d&%ipnVXZak<{Ya+vKhMNC zHn_m@JeDuAoW=4bmOo(mdzN!qzRdC=mVaRR49h>VdPCA~q;sxt!%IELY=g zs;ey5W%*~8o3MP1<#3jNVfl&O5#u!B;c-&ze?e=9_u+U6=XlM_QDwB;F%j|8p?G>46vIT~ zG;M^(2-4ey_luyO5sh91g-y&Cv>sy5i&~(^`{EQ)b7HZ94X2 zraX*23@Kijj^KII5&Q%4kMMY227fsL!RLsT380c?B4LTJS}dXxK`ob77ZYK%Lfj^5 zwX|A316FT{cW0m^*ycnLdkgzat-v$5HV2Ptub+k6G5LI&x==+{GEMRxxOp5W z{AVN5oZT&EYm+@9!g;D}!cFnLhcr_<$xdIL`P<+<@#aO`6rO|NHgR!|)-I@kK1_il zh^@MK%Fs^HXfCX>MVGl+-+l^rtd@v_j+fag`*|6G97O+AAVgN zpR2WvwQ@Lrsa6hgd1ys?uz9m^2&4X4X;}`acVxcgVDp1wYtG^E2Py; zjw(cxNn0n2_Q~3F9tC1$vep;h62AzDh^r#a%tfV(t&5odSSF=-qkd#J9=yOvYtaI& zZom9>$R`dfTa99?lv*;@6fXW;@YHzWY#+k*E7)GCEv_!m+Ir**|Akt+vDWo6TGOna zmkeIO!5eY#_RPmKAIf|z^H%2TG9S-;k$86@2HO@Plc~Y#Ojc(xUz_>&nNMJz+wQ?c z6VAMu41JhQ&aICY!<>Mu(!QorpA-0&12{#j15HyTRywqH5f3hR*~$$oYJ%`7OfdL+ zOFlu|rqE8&B}E(KY3n22NYTzgOk9M1o7PwN`dZ?QHfIBSFKWWVqUArwe&gKRm{ z&RjgrWV<3UcnNZ4{Ya{-Nl@Nqb%9s}b#T@$$@A8`@;R&HzZCyjqU{@-@T#ofI$RSE zDwuh*u;$#YFmHBO^ZZnhCgU+1)*M()aViy$PsMRC^F(5vV8UM&?U!P5unm{JeG_M6 zqK~YMeCExya}x7eBcy#-uH@C=slUX3AhTh1Z z*eA#UgE)Z!%x5ugUVe-+6PPINo3On((2F<8`2CnqB>Mr>?>N9cj1f9AIHHu7WJFFG zPI-@c`z*y_DRZUTtf)j(0991@%aS*jE-FR_@$vH{Z!W2=%-iRS z_m*K^Lq}SM2`6WXG#kyid5+DjX_61-dNZfX0xqsuozvMq{0(WJ&Fw3g&wo?$?RU#! zne$-2j7LmfuK7E%zrYy~M?VgHi~}p1CI6=ktI&INsBG4ulK17&@gwuL{gUSszH-Cl zCrSP+=lVW)>fQFOMyc@<5Kg!XT9Fbc+A9Mb;a*mc`ILi_pN;vAj=4Nbrf{v8!_l0! zr!bF6!Z^&?K8JakfAm&!x?RT#K6fjvkTB&`*(}?~&KWYtdt@d1j+{{?NoI6nYngB_ zliwowRUA)$;zLm4giTVB&NVTK6TTq)U)AcyCTx`I`&^JTjxXUql5fHlvX1#|S_9$8 z$JvyQ&CFx!M|44PoNcogeaop8h<7P9C(kZ{GO*Hy&(+JBNAnqnIf;gGbeL0&Bbx28 z{76S?e{(RIB|KxwsofS4Pw#7xTkx8hZ>4kcfj_vTPLI8=POZ0X6&A7nn| zsYf$^l6mEfG|XZ9>t;NiWTxrLhz=DeG9y=W4N-Jnp+yB}y=VwZvW#2l%|^Db#Oo`x zKK}MHsc*%RtP+JQw9aE~vn2hb1Z5WoQ`XCPrf_t5%*X#E!^bdxmHGTEj)3`F%-hAH z*U$|D_hKQ5gXd$VHX4qKfMqw-v2lqqbWaHiT`m|Uyef&a%*QexA1G_2JM$w=UifEe zbtAI4L7rfB3af2T$lOK9(8^lobHvkGSSrPfcM;mt_Otjr3wH-k~bu2x3N{3Z~GLqHS4RRa%A(QV`i%pNR?2huZ8-q%a(Ex+ZG71}n#~(9j|JK5 zNLBHX@${38u0*psTP%XwGr=w1cwKATBCb;FZibn^60CSt;$y|_*R_UYv#QDA>4W}F z$9ax5j{hWVE}XA1Z`~m6K9!*S#e6vLKyjB;s$t)%%=5q$=HrCNYILsnbut(xGUHfgMz>t@Yk4Moi}?Z(yIN}( zn^I4<%sdYE9jmSHNW$En`DE~8=S|3)^tI?=X+2S_Tc)~|i zTZ0L!Ky+Dyofzkv(z+g7PiE^Zu?T999I%qyoQVQ%*fWFG&3Lv+FMC9)Gu;$X8_jZSoWEwYMXB~Y+9UR{o3v)ydw z6cMB@;$dYba*@?VVl33bS*K(ovp6*EJyD*s-Vm<~V*=j~Gh7>A6k1<@+jr88cUkb~ zmWXv)!-xbAS-^H2$vTcCfj1Kt@o4yv`Fycx9kQ0fm2Br=d1f%N6KX8_j;+HfCSko) zzsy$t!7_)oO`_&{UmAhgFDT3vtp1*zs|ca;Ls2%&`i4b3aq&cgwP zHI6FiV^rhHOfl{aY>ZiHe-4LCUs1ZVK91+;NJESJ>C6|2{YcW&)>d44L+gWH(dbRI zYXYCv*7Aw{OSX;|V#u3VKPcab#Xy{ycf#D$mMe}!j7>NoWAD$2^bFzdpvZbK&)B1x zFK8wC2yWq-%;$@!4XCC#Us(!z;|U$~dOs>_yhwyPIEz;mJgq5*SRKAiythH?6B{2T z!*%0EP;tRe!L1oGx)u_Y0F(blX2Xkm&M$@WD&ss6%zALgBZ z5P>U#!!n$LrkT^To_4=36mupDzhs+bNNfcPKVq!I-^#5C^bwME)Gn3(VUpO%utcJtttc zb|&-jCuIchb3EIaw;S!-RZ+~6?K2hCJPcEd1m#=i3(mdf}ZlE-x*eS{VV-HxGS zITSR{hE1j!YN( zH=>0Wn(-~A0E*(4prkSHtTcbEV?JfGG&H;NM&@()a-O48K4IR-8}o?QIQnvcob{fD+=}_9nNKN|L@M)BnODA-_JcTqxu!jj zjgD-e0iFsV|DS^{WR~Df4q)T;+c??vlng(UIef$w=xLWo+ zT~^ukdB0Ib~F9CP!{eCHwl| zQLt5?c=|^~7=CO5M9I!DnzPu?&AVcm9Nkgo<2hX((s*CaDMZ)l7SuFlSt}J> zZ7y@2{fvw!p9g@Icw^Dkh%E{_OI1E67{z?ieVMb@n17OaYnkN3IOESUA5I?}!|@%b zlqgniLwQqJoxmAE0~$vL^U6)xlUi|yqW4czb=z$+p0DKqRt}5Xh|cj1tF6mqG~+qC zOU&o8ExSq~Qwg2Iraozv?=hP>7-^jvphpkTO<8ys#l8@?D6Ml#Gp~#weN+ z7A%w)l7&)(#fv2D$YM}4mMoNyg{PG5NKcYtL+qUU&i^jm&7J!@=bbzE+tEVgwJO`3_I~f>&<}XaQHe6wsbanw0_U-`3NR657(9xTIt%(U;1;^96nusGylz3@PKX&*+c+TdF2m16 zggA5E$L6_R)5o{arvtI`fePNhokam~2>pNue%XOK?TDPxDu{}`VQKLv{nfG&J@TPZ z4sKy`V^~ugcnodlAmF7wqn|Im)2W0Hf=5@S3=hx*b8cb>nP+;tMNSJiz;OgLgGa$5 zaRG0clJD6I#~cOYVvk=!EfpJ=T^e)uqRwN?OAdHD))%lwE_m!v^yZ-d4StSj9s*CR z^!!&v7B*x@AjlB`Iokr7e3Dz5d#Ay%YkE^vc9E zTc69|lh{*AhdvF3!j9o+`J%3QdQ{ro!X@|Gi_eqgMTi*pmvTW_?{F zTxyH<#VEf|qS{s28M(M9$(!;$uIlmyH|%v+Rb>SA?OvStqUVjP>iuW9Ey3hh3IB_l e_oZ~(Yp<#y{q;opaLc~e#l@r)OYHt7n9*fX9JS1O-F{6cp4$ntCWG_JRdt?+tqa1=RCA+o+>4F&L9r zV>Fsz7b_Z#Etc4^Brf(6d*T0?-9=%4-@o5)Zg$`2&6}AwZ{EBqi+Ijs%Q=sQZcYma zYNUTLa-tcvDDY;*r3H4<>(T;RmDH=a!;MI)C9o>8I2!LrQ1RrJJpGQChmf1$_`RrCsqoTn=KuOX5gy0(&&(M{pebS|q^PkOeJ z!T9TFxkN`5T8om(24j$t*IR|wr(r;wC}^k(ZAtq8tx`{x9HT=qP#s z=yU~5Q=u064CoRC9i>8ZsgHxfxI;lRRp=(#&cTpzSV0%6&|3<9xr+Wkq35dTuN3+^ z6edW(wgEYs;d2PdP4!jrG!sY9Krz>*d8j0%mXu|PX0XrT)IijD?4NI{>f&?$5^ z(9sI2=~C7bGU-{MvlY})g)XKP;V8wk%j@yQ_xTqx|Q|;dRReYROoTK2feV@s5I~snCZCeUOU&PN9!d(e0^^qrqs9$AulR!mlqKjNd_Y1%CbMas2M3Z}A&M16_EoZulKa zE%*(gJMsGqEpiDlHjI~D$MSAvo6&@ZxrUI2w2!NS#L`KwUpSAcI9t*K66Z5;CR6)r zUpU{WI6KgG)ws+V)eNK?T~UfNpnKWUd(&IhT9SS=(9n`*R@2dmh8Qx9?liO{b0~2O z=`&PurN>nHrYrO_D*6(I{)LRP>Vy{~#4TS>Ye0qCb-P>u4sbfES9OOclKa9qn!~UQy76Dzp+^4b)R9 zELVkYre}eErJ!3>XfH}U490aO@q-Hek%j@yEr}mg=y2Kx=qLp(RH3u!A`gT8Tm^kf z+j$u1F%L)MLWQE~QPwypeFkaE6x30LuAn~E4K$^?&dFPaOr`Cr8;luBzEBl9j?Mr& zNkL;&=tQ~|=ywX5qC$V5w}7ru&@>ggkvi2dWb`lTVimepp-)uNcPjKu75y)TK1W4= ztk4&#=yhVGfk4;Ra58?=Qyvt#DxSaT*%}68g)uUEMunE6#5066r(vEUVe4~bp0u82 z`{Y-JzEDLkM;A$X58(GSedcK}UaBKYSlFkmgzMDD%iwccL335;3x&RpI(Zq$78>h? z8PChn=%ozvd=-Bn-RgxIPeIS9&=&L-(AElCs6snaCvSssgn~X*p<`$)&|<6H3e8t# zTaiUa16`@)byT5Ny4u@7M|s0GRmfI)7Wob-`9f9bWlDSui4PStMuoms=w=oDlR{5X z(d}s;pD+C|NQG9Vi+l|B-ij?xq%(Xl8hsp%kqTvwir-A1L0U%zU9LiVQlFZJjDZTe zPKBl^HoHYdAFS~2P|-)uleM0&q7PO0kE!UxWjf8P>GawA{H@{{PjA)y;<-c>`U`dP zHQ4{C$bUnfY8t57*U^}%P;`CE_WxKq+Sgzlr=V^sbP`<+bfSU=sL-kOEYK4F6sbaI zQsRf0SjlTvp|fci&=McoRfXDUA3uYAi9a1g`}i8@az97=5+6E|E&}D4pCdivt8<#8 z%KaUE2H8I-B`;T@Yp72xgK?&Uu2Z4wXgi=A6?BIR-ArfHG9+$Q&_Wej+(_>2rz(1- zNM-ExE3110y@j%T71UdWhES*424hnNjZvYAG!|$(1x-_--RNkb{S-7)g$}2yfeus9 zTosy5&(=2BPgT%-8dlptb^eaVc?zXa#lMt>`D6W}pql<=+xQdh19Y>3daKZ#bP>>l z3L2wA56}bthN$BTnx;a}D)dn*`elWlN!$4wx-C?p_Z2i(MSr2tx2Wjv6?(pkZbxSX zU=1E6_iUjGb)#E>`YEVpKv|sx(_26z6x3UVny6Et!PrVcV^nB+8VfX4LDN)de>xiI zNCnMQp;)B?%~sG{6*`Ze1-e8*^Hu0-O6nMln-sKAh3=qXb+GnVP|d)y?LDK=9aZ#e z3f)^p7ZrM_ivFKMk5SQu#!@fPf;vt{gZ!*XQ}NWL&rttn3Yw`xJ5rw@gK@Be=BiM{ zVL=A!9i(&0S0Ufi89|1O-;{iXD)g8_f2yKiRp^>QW%cw}p*yPRq={^0-YU9_Os9sr zPR5!FPmGGE9*wPQFg8}uG!=^I8)$n4%~YYi=xU%t6f{?bj-_XTPE*i)6^bQWu)#W>KWO^OV zC>8KY$&jg{W9y@y!RXRd?xb85>P6cDt)rm%Dl~%502-s9g(@_WZUx#wK{Z3ls;L*f z1$3~2daKZM>J);>SwUk|=v*2Lbg6=-snA?H8t6s^%~YY=>FN+e#y$njRiOn6eT#~I zMxp1c=$94x85RAuLN8R&AIS9Xnx`t@rIJB2w5*ywDRf5_y@E*@RVun8T@-3C8Wl7~ zh1R48fCedOnhI@1p8;*ApqVPvOnt%(#x4q)t3t6y26U)`=Bv=jbOun1f)=V!Mz;dp zq@bE%Wi@bs-U>5hoKR426?#dbhpOmz6ncz`{z##xsOTRRdYX#v5G{M>3H9Nfu5U0lQqWu#8c)vxZL6U9Dm0an1_t9m1uaye=`^f?fu5FlCAtPTw zV^ru#g`T3K|Enr=XcCbQxU@G*>}$ zRpxq`x5G={fm z>}dQ=p%kk457MoT4Sh~4sAf!AMO;(pjw-sS(7jdkmkK>pMK4DKn_ME4lBO7D%Atfg zy=+-H0c&dT*`c7vROnHKuA^I<8n$IN4Jd~bll9F)++7sFZE9I@dvfUWX7zBC;uFJ< zQrh9yi_XBWFWrjYLG%`W{i#zdKT3(kZx9_FYY>j*(7CboaH6skq@lD3zai8Z7eboQ zMEv5k1ivlmdi*BS%lPd;?c+mm;t>@eV(hKd<;~2pb@^r6jQ9;z?Eg&AXqt!JE!s@O z+xHA@Z6=!im2u#oXgMrK<0Z**+iWxStEttPEk{$r@?(p~d*eSh{O2fs+ngR~->^%6 zUygPP)jQewnXPuU9C5S{R`GfZqS03}7v%q4TwMI%sJOQ!gg2Cg9}&0U1(GlOXf^F2 zI>~aM3!ebt6Ciwoqo}9*JH&-1mCn-)FJMHr{>WBRp;CEPCD8m1u_0Gcuu{-r@f2Q= zrhynu2UUGg5v*!)(d+ zOT)8x$(ed~_N%wm88mCQUkYgEoP2%u-pU${)%+&G7E2PE#C*^%;D_AizN6kiIRSK3 zXG7f#7>K#=akI_!+ZtL;f+gmS+2V36>pjtDKjI}=r|HbL2=71aG~#Nyt#fw$mB)D# zZdy9}=|snO#l<=K=|0ewF6&*eKBo_Ekz`IGo%K0gq$fe6&q=0(yNniAq|<9%f--s_ zhA!Ujw*$2|TO&Guc~gj)wTz+VHJ_lP4I$+<;?D;K&Q}k7=B&fsW~<2qk2|@sp~h{4 z%4?Er>3*SLAIsTK#c{f+0M7;5;XwI6sIMAwQG!a4u=!cy~^*+{vJST^Yf03FCt)lPs@Zn14j;d216Og!-~;Sp)i>tZYbY1Sc0mQK(>e%29Q5V z)!O9e#_iN1KIpvA+&2X_X?MmPb!2QZN~?<;C_5O*PB3Yt$|PC)!win-#7`z}7Or`9 zd5Ml;#YvVl=;Wx`(p4v}sY{!r*3q?unZg}~(&4EdE&f6o8j-p>+y49nW-7ytNQR8WRn?NKUg) z(3Lg8&oOJFu7W;iAon3wtq1+1r+dbkTIkOPflwF9a|HQGpj_TK7=h_mj^=RGI@Qln z9NI{uu^i%#DHgK>8r25H@qa~=_`6lh`6b7-1jGbu%$w$%c{W}ktj{6drD0daCC_=^ z1v}W4*HlWf1($!Vg&U~VijL^zNz$mTms{1f&oKG?DfQa^ipVW4qj|j=>b?^o-WEKO zzU<|farq#8+9@#Z7t4X;KL{;4CAAd3->MDgU21WSKw@oQIqHl)?x02Mg}0*ioXKX| zm2Zb)gOgrqHKGAxFoGR<^$YC$P@<#{xK3?lUM6(oruWK}=uo82I&sP1oML_U-<;8^ zjrBtzl`)TMqRe*s>?@pVGZ|1p^g>-O8=2h9oW*7;4>HF0(wAs8w5mhXD{+!F{1_%V zYnLVByQfkG9~_YKKcplrxZ;%$lJXvjztPAvpZ*jq2~jV{J%+$+nJ*Kh2df51N&_`f zrVatMC97Ht>0?cFdwwmtFRfZe%rRbYro%}8 z@*2`^h-L`)|9k=yr#FIKz^gy-HCvvDnbPRg-a=N%0+vIbHRVmtIeoT`i?*4Taj9=> zA(PECm$O-ph}~-wP1ZD>cKn{Aff855kNf2j?T8A(crvn=a%XIdpbGu%6N#Sl9^}k< zehH|FF4^*-DB~rszxJ!zmd$ zExNwc{8TcN^hD;cSH-T$NO`AwLtrc~!Ri`^B++st$x^!GoE25K#88mS~RU5L(m)lcj*1lD;QDA$Rb)~WTrSy?@u7(P$2Gj&&l{}h z!o!$D!t(c`D2=$hHhjSCHz>vOBYEan+EQa>c09B zjBpGmSxt{HhUA6~U1O&y^5qW27O`@#Yz_A^zzSdM3)=Sz?Yu-9XHqKZ&8?um~*_8t#qKiXMKH%1Be>WlQq(Iipc~MP>|_Q4uoC89_bZj%_A4 z)LfkM5R{y&`Z(82H|?LuCkc6>cal8Dhr@Q79xwF04!qEJ&lg9^5_jMZ!wbD57;;`s z?87VZS%3`!P?=ZArpQsUh9j%&Pv<`1)zW(SLJb!`(rW#^1ixZ>rJom>ORx2-t}P0L z{^`4Z?ip|4Ek!G5w?*9DE%(L;yyoPOb5yjH$+a{~a-k9D6_(3iSenCL2xsXlvm94g zelN=+aF!UEWskx_AJ8}b8<17B?f|chYZ$_4mI2K)1v-(py9$rTAAxvhtOpp$$|YEJ+qV8Hjr%Gk5a&TsLVf z_6Ea3dS+m?P8WaS#^KOgN=%Wk`C`|KZ?u~K79#gn5AOA}8+a1+CfyY#@-Jp*IP`S; z;zDHxJXA6hVqi=B5tC_?LDjMP?K;Ras5wZQaSb||vrJzjD^&4Mx&y}dMU+wOItL`N zFUmZst?ofr4;n>w)2f4iGyM23Ca=?aFR~_NF%m^N`@<;5y}hy9YZg zq`^Zj3k~m4-Ov_f-?p|x%M(I32CSN(vq7%jr5j?KbJ7c>Gx=plMy3y&~ zMmx=eI|CN(;!1>K?$E*MzPKE3OK(cz@#{_Rr~A5vY_>zNW49&2a#WfeFdf3v6kVh9 z)4gcIxDc|QrjJV&hF+t6<{0U!HrtEbN?E?ix)Q?@D9F zS0OiO+wsA;1vG8E51CKD8}CMr&>iDLJeng%*g0zxGdepb-)uR{*ZTUzV`BBIRG1J% zifO$GM&X|;yd?V?NnDeU#hG;I1h4jAT|r?tVmpStl3LTrZ28#1+Dx>9Y@LP?wTl}u zSHz^x6y9oai2RBykF~m&p-=+r@4FPX3Bu>5w?} zH91LRr#X|qX{TuqN$R$^>6HZ2&GmMg=lX5})?LVpC+(l0n0H(a|NYX;8y@kTvRmfS zZd1~YO1fs-+|0%TG1DV6y~!o|?@Vu@_Gub2!A+=qnrl9wdXnWi*ZlfFi;Gi}EMm{t z9 zieAb-K+@@ooC#zTb()omVKIDGaO#*pii-y=~PgwJ^; zN&x-MQd6jPloriBM~-jXV~r-{9DP6UJo&iojBTtPIZG23H$sO@T^!}ra$j+=Erq~? z)xyq(9NQ^-25_9A^!#EUp~61;dU0^zpnNQAc}#d%{Bv({aj7^Ex%*;U0CIQ~m_n1O zFZn=6)0pm8!HB8!UQq|kvv4##xWo>IEMi?>tKfY8N#&=9^nJvTo zbO<2(a2l-t*&PhQrheiiNQB@1idI@u%eg7QoqQueTr9=++Mxev{E~=4-@MRj^uNcr zWEGZciolo0AW61!eA zE`F}%i{I>;=yG`Y*gcS`5f8tYl%su4otD+q4+akk7>jb?u&>g%Wwly#I-%8AGwjUP z_PQji-CI=2_awNil@FM6&ZW24=fzNV%mWr0bRQMqHAFc~A zh4y4#B!*7IuQ&acHPX*PRf|Wt6_0X+B6e%&9ab}=3o3)=JEGs9-5F+b>~jbJdyYai zU<8ek6lhcME9tjf47XELbs4OIM9hcFD_Z}NcORhk-rOfa=^=CYq!|ZAkI@y6@|Fuv zupC7Bo{&}4s{&sEShaJhb@?0elxDAJK=#lbEBx?$eMJ)ai`M!2BKfe5tlTCLk^c7W z5OSS*udqZFwe->Y`hsaK_1O?8EdGg}*0_U#|}NSD>% z@DDm^SAXaZ_Ff}HviJMhu=htaW#ewoTkQoHaXL1yUyB!{XMOg!FlavBkF=+On+|1c z36{nhcRD}vN2_U-EB2)yZUBJxv=~Pj?zYwO&genGC76Y zhcZW@F4{n306jGLro%ISx|oKyE{ef2$8`ssDSB z;5B1g@869?IDd;y&Wk5&>ApN#^D34+yp}!CRk7COP^rkj-o#p3gcj|F)reoyu{#3E zLi+6vZ+ORjJ3L7Wy}rW_M@Pa=KT@9h@AMSzCD4{TYY4{@=m5N}OQ5rM`jWnM1Acqc zQ#(B|ejn}htLcFq5MEXrsVp>YMeOTop|O_Ep+z6y^2PV@w81W4;bJ`Px~qne7f&bb z@+FJu%3Z!y+r&#*b10OVXq_G)PNQdbg;&)n;dCW{RCA-A-CO$LgJ+m;>(= z{F_+0kkuuHoQRc#E#Fh4Y8M6jr9{{)TCk^A)q62=mavj6)o7!=y__c~#nzpZ#a~Fj^wM6sVnYMM!??~VWe?G7b2Zjj;=aT94^ug*_XFNP;412Oii=Bb)@dy&)1D@-h z;zLuhH{nn?8lHylZNSq+4#a@7nZ_Uyb@OS%L$ydB+T)Nn(a>p!#>Wmm%zb+&Z@7>F zcoboO7@y4pc<9Zm5+e`EgQFlZTb9^(fFyAi60xFDD4rzoBs&gb!8bj#so zPN#;ICAXkmj_i(_tD;Umhl*lzvB-ojHCvnOlxgE@6<>SW`e>4%eMMIs?df;4ysWD7 zyiQivM%ZG7KTJ6w%~b7>h(CBx_kseipeW9mz7|_?m2-;I4M~>a0n({}<#AZC=&<-$ zL*eK!8hI?Da$AgHEH~h5w7cn~W3~J|5!-Mb^x`_Ox-LN6gEH3bm&#a=MEqc+2ala{ zJGoD**@fv)v$G0*pvprah(DdC>yD2mbesDhVWghZUMX8uBx0uuLK%M3f9OYKdx?a5 z_X~g0Nhg|^*2&cMJh9vtF9*q8QxwSudy^c=SKb|jj`8P#k1b+qFR5d4cA{gF=(7_O zy_|nRWOQ7=;0H-drn|ePV*WvrWH~6-qH|7qk^Xeu$uPlV8@+n6HTjqN|GB)%x4R_1 zRY=5VF7(eo1C6V;@Jieiqouvq_<$lWC?(0J9YOV{>ccI^o$BSbDTM25Tym_{&M)gt z?Q#1Pq4WT;6WwvDmQ%(~NoFPzzNLA_nLa+%*m$=upALku{6oraHUh8b=z;%e?CF|O z-Bax}2xMfhZMJqv1JWKe9-iGWTU+UPRDms9o2x{%n#@ucMI_R1PRCUmahzzd_Ov;; zZlp!0YZDW7JmamaydL$iIpomDGr{_M#|T!2j@aghjEZY%`WcgMC1~jFJ#^=pCZsEU zd8Q5trru|}2p0(L#mkw98+O$SJzuFD5jcMgz`Y)cy2`%Q7)q{zA7Z zCcKnniF!nbU#MyCAmI^J9?|6&reZbZdU1mA)Us{n7=Y#_+xqKZrSdpK zID|dRa6hx+k{=j`Q7IB7b-;{|CZ zD8PXlHn9^d$N>1d+3#`UP7VtM(R+42MNp~^kF<)#aHLyz3-AXNW`x)%n!ELn%8Uiz&>ehjM2$yI4; zVN~ECY%_7+9*J!}F%>Vd)+B6H$g4dM9v)Z_{A*{-qw-ltzl?PqgmiIZAh zXIfC`NYCCLEL6Kfo8D>B{?ui85zMzp9=F2M{f#gIZp`_?VcxL?+RdeK&$b%PgBvn^ zStC-RM^LKoN)XVhsoz_lO6s{sORJO1{`-yhA8-fWU>uzI#{!RDat*yJc zhF8vXhCaI6B^=FMxlm$HBJo%-M8n^*d5zIB{vjTV2TgYMNM zM=874jm)FZ?m1%?(u#da5*;iC+t<#Odc!}Lekb;-)EnDXiPnr5vGX0OE2>fPHMWSQ z_s2A(XiRm!FD4&H<8qQ4X3ScW4dZ-T+(P#jMUzDOp(quf`**!xn=GRl_v>QUZqxli zj^=YH#TMKyop+hG@j2@EAeua;eIJ-IdYpy5M8RJ4*=JGX*cnNF+>7b>k!bLD0O4bF zCF|hW-iHdb(?P^oh4s7^SH($Ps-LYv2k>sqEztHVg+F#E>C(ik=>c$`(*p{$CWRrr zrrwKsJ&flyc^HC?ZTc`$$T>s*d{|3&ZY9@?=@5PQuuoqxTDbf6n*iyd(Dw6q@jhuIvh{>>|dZP zan}n3OPFtZLd+*R@=2t94S;B3l@)Z$6L-OB1wHx18_VBEPdYhIUe2M2DM$|7_B!y+ zOT;$)(@5_SnI4Kn%zCcWFD$=k2J9BwLT~8LPkZZjFiGxu>hi3UeX9JD#ORo3Ic|5C zN&5Ors{9vU6;1Weet6d48$I*d&+XnqNuH;q4aAhP zoBg^SJL`@+r`~VE?8kxwI`6lTc7GG>+>!IAKb7K7nYT6l`b|sSodputd0O%8p}A1^b7BM}!Ap>wgYLfUU46$z@I^$?XpC3o_KSo43{J&}FG`iD znP3L@6mL;~9sb917^c-g z^w$q{acFn*L#N8euAp*qonO+Jk5NwX){^lOizhMR2%Y<}hA|w^kau0>lB*=s{Eu}> zE`9Vd%;5(7qay0BBxwqa{p2jTb)cO;4aZT%;ZGgO57byZMQCZE%Zd|);4}1AajgCK zbGRl=bk5Qs;_kK#Zz!lO+FsiC$1LqhhSm+oSsJdP@Sr;I3YyNR?k`YWY9*KU~a{0%f2DR zn`~iw328_Y*?)x8*9{1iZeU$v^#roaOVb49yuN2XaK9XG5-v8Ad~@IdbJklSy?T<( zVJEvIkVGM-4Xam<%n`~TVmr!_ZXthU%bMc>mE}faP`Y0v)}Q_TQKbW)Ag9GkGp6D3 z?aaL1+8h>RN9s6-bt_wAt&=~SW=E=%7wl_05-voaU}x+|h;DBd*ImRuRzXYpl7noh zmZbT;ohd2wJ`%C{b;U37&;~c1as(*$mG%*Pq9v~GZ@6Vzp76E%qw}Rr=@;f%owP@Em|?cb}9 zco(Jn={}Dj<91;QvXitW? z=8wS}DjTy`s@hb(S#X|N?9r3&5~T6OitI^{kg2=`RU}Qxk8Dsy(#XEXbV-uubhfS{ z32>=|SCW3Gluv1#AUQksrXukbVwIP$N~D8e9?oV}BDKhIwy6>{e1Ki6M2=L9X(!*` zh;Pm|Rwg~1&rjhJ|0pFfi@7_HR!(UEFlO3GNs3O~!Nxg|0LR`q*~H?u#MgSWpB+e( zi1U-BYFgWk($`lImx& z501ps=lcl~x&{eHrmd-Ym7NLnPYe zA?L2nb6Zglu@&<3tkR`c_Sx}`- zdv+8yK{hIzAmSnB?o8aPbOnZPp9XDbRnDARu{60{LE5ZiI-s7#YVf5Il2>k@K{ZI7^y}K_meMDzT>86%E zfe;);1GlC)iv8I!1MxDBi{fnfvVcz{Sk;>jLvP4;WSJWY5L`O3I&P#{Y6qFvktddT z^mcQdHN{)Jmd7)jB4o6ojK*+OpO@k%?v>yv7)ue)`%5{^V$lYkWr`WJ8=#4o*@JaJ_mjl|6`QfAzQ2)GpEId;Y!9LtR)$l#`MV1K?8 zM>go?Jw@JLy#G{c5g(u2AC@@lv+r68+K2yPRyfg3SeXWfOwZB)*$_bD(l&n8f38Jnjw;`ACO>%5r1HTo}{kVz;(PCiPjd8`keWajz19 zNwCdSrGAOf%5ki|4+$0=LRlXl;zj;qGki#U!KEp6eD2Eb`;enfl?R};)_7Q6ggqX` zVeCLn(%kX)HL^P%!Q&2_wt!XhC5;6Ade+vLd?nQB&$juJu4FW;>_?iBZY;@wl6?sei$xb3H=+4>(l4K#0vQ>d3veLi3xMkf(?eDT%fuyd`_IswUL)r*& zZ&>d-#NgBd4A{g4Ljs<}Mr+yZIwZPwqo1X^N_`T9XKU+{E_vipqP-50>_HvUu-4U0 zUwBXB`3vu&&%CeM{W`>*r3DcOhXtHp9);ynznAU{?(hjkN+@*6!RUXOMENh8+pg*6JM7o z_%KEPKUPL+gnOE9quwW>UhH)lxhc9>JV75IJa)!@i|AdlcAJ2KE>VXOsy@zKg zwG;7)bqGUTc8X<%5er$!9O@H)A@V2Ius%Ln>BvUcCy^L68|srmLiAkb(tva(|FWSC zFhq|sYXig{Ke9~?NVG7(!X7q2I~rP8^>CE0wXo!Hw4;4TsU7hh*_3e7Ff?^#>2|C| zg_L!x6Zp`Wtg?-1%5H@d+~SzSTqB6d=hN&jjTwP<6gh*vRAX+iu@Pv@X0|4RtRQok zsUd1_W8)i=9>Vll?0iGgP-roWRc=J0gi5nm%SP~A$kT{~#BI)zMROxWpog0lMfXrU zCA28e&i}voYiuBV#z*9^yNwV?#^*47BuV8;ip0X}5St%K{O$EAk`^>6Y+od4T+M}j z(ZYmbiUv-xDp3e8-mqFxm=4h|Q5a6M+0-a9i40_~qKKyun!u_xCSHNF+eo%N2MO+~ z8kh00W*Q?A;T^0IBl#m{nFXv@V+16rGuf2Jqz_hs*Bg_@hQrB{s@FnyrJNd;eoaU% zVa5#BsR`LYOv{=gNLk4mHzkY6Eq1agX|CJYS}JxEGnz<%{S^6aYHQZYM564YX$NaN(5`07Q; zI4RJMC`I24MVIWvcAm~YL=zvO!F1-;jC63iF-^{26oWyCy;vA>Gnn71X>5Bl^m5;6 z>`60HTlb4u>VRBUBZf2y+rHq7{>yC04gnji&_lAqFIz)Pm?Z`wG@Z)!$BIpb3i}X?&S^M>RgXi==sJa&;)sb{WK-gx2(&W}f$g}-?0Oujr90SMs>n80 zF`hIEJu$CzMXG-p4l}^^e}}^+HaecvM{xQ>Jc+J3g0CtR7jxtB{~Zl&CNaAN3`x&P zEIfg+E5Jjb)}mc*aD zWIga|9~Ud>xS1TF)u1>_SvHb}x_fUTHO8gtk9P-TpZ!3S!S&Vnj!bV>QfV zfT3FhNV9|$Rp6l&d@b%%z^GH%*Jk2J64-t-X=q;o3r1{s=_a#JW<&@_m|G%Aul5uh zT+MUt>T|ZEG-b3mX~w=!B=z0b0mB`z6MWVXtwUtdkZX33=3|GqZDeKhd1g3sYz0-s zvbwEMFGB^^r4{*}^kwhxN}e&l)+FA(r%7sa8xtGVn)tZ1!YfH{UV4WqlKt441P9u4 zM4xjVRZ5lW#4ja&?j-n=<4w7wh(Fl-)}$MWWSx@mSE0Ir2u-D+!%D^7CmC)5)+LwN z(Ik>gjxm>HOq8Ek?_@HZJY|0-W6d;?{gX_33hvWcLK}>V)hxXYc3O;VQyb*yz}~eX zM}*`|cAza;B8(iyx}=b3`;bVfE#8rARSGc*evxcv3h5TyY6=R+6_}#-+}xn<^-{=e zTHHvgFhwH%i|@zG7VYeztXVq}WZzzfIy7Qq+oAL;Y)v~714Z7&n^2)Lb8U~AAc@7c zM=K_<5j=@wD|upL$J!HL!_x?<-6zrarNU-sCUhVZnzjZAg*8PYvIV?g?8#uZqEd!|hlfVmq4oJ9#laGsB%(Z8;tGWb_I7xE}PdK4R)e=@ZS?p=Nv&`I4n{ zCNKi_O=oNnO$%nnJCiu#!zy9W{zE<`Wc~8ugnZ( z30=uRLfNLSq@55F$%=v2IXC#r-HB6pmcLiSO#@ME#8sW(7sGeA=ZF@DzZTGvEMnhu zBbhA=2T4M2AxX5{l`|=SFyOZMq9Hdvsc$jy%$EbY+NJ2rF2ZSz<k>YzZeJ`wQwzIaqND{fszUf7BgeJq8Z*PQ4{Q{*jIw29a zWO2J}F73tS?fwH6DLeVOKYTD{ZZ@VL$7Z)gA=FzXiyG za|e-O?oYdwV#f1l<^WcEFlY8xm+}hoeI&V7IPm)+E-l&Vu_%6cou(Q z(}!U|_GNzzBVWVc_8(4$cm#I>m$%#@fq0gR;~kRV%kB>+Hu4*rID%|2Ug_{f+C@B< zR138pN!pX|*!+=XO5$H1Kb0Laxme3*iNvCfMfh0M1Rn=VQ`SZ`U-)ax_4P_FtB6+C zeiZTb90)f2;RidvGQ;pFWG)n2e`ItNshQ#bKY3Qb@)wGg)Wzr!6P7CG!3R}!>tJW7 z6n;XDx5WNrDSYFHPi|$~>yLKm17TZ>Skh?XE|f21gGQ6Pf@2|TGX_R50U>>f{g370 zy=?z(;(Yeq7&6)P&KxI@K;0o}3E+B|#ZDmp zzK8KS1V3-E6P;m!X z6ERKg;+qFJ{=mE!DrT{{6Uhi6+>O1PNa6*39oB3Twt>epHi=BKuWsPgfOLjMn32_= z46VHm;4B_&%w+8D^t{LpOh(Y(^dh@G8Tl(zWByaH75|cTor1Y?#RZl#g^b2(&}%A= za~!4;C$f(}*RH{y{jU*`hgn0ce1Uy6m6(L!H*ED(Y|zHPV<)B}Vh^dzil<`F4Rhf% zIRB0n+1zQQWvfaRdAkfa^-6CYYi;Y;T%Xs{MgAHBbNM6OtmmIy^Us(PvkF4RYaqZt z9QnMu2Adu9djtg1M@|Qs$8_RuTnmN=JCtMEi1eo=@B-FmIth2~t`?YR&z4Rnk>Pp( zay`be&&9vfLD;Gicfdbv!kKeKZ3yLdbdr$_QX^v@m_V&7Q&H)kWkTp@!Z$LZ$!CI9 zCY*dM2|||1GU3i=!eE*3?lYmQOsM)<&Kv%l@|HY8yiD z{0uS`!K^8hj3k-t=SYaZAiPB3&t6&fAvx@>6k9=zH!bHDdfj zm45<=Q7i^MWZPztI@oEuF@v~Q4#$@^MTgX-I46nWWu*hEc%2hWW(n9N&+7t`s1+N zY`KWBwu_G$jH`>YNRHDY@RcT?%^Nlw0h`OcXu&{Z=Em)75^V%0J!eoh>&n%V2Q~qN=#nCF>tykqDe^>-B7Fx_cEh4^kQ^Abhm{`VwTYxBTy-~KPXIJFx z{T7ps< z-$=C|cdgO0rW2;58QC8e7Nd68L=&)BE$~_!oX{BsNo* zV99fLMG|jwi8l8=m)!TY7<-9_V$b(^!|tT0=ZLr&-=lFMt!z^xfZY}y_AsAiq=qnk zH;Y+@W0@Yi*;mU*V#bW;pRn&?GkMID${B-K`8(6je@lcuoFE^j%(ZgLmy47|&4DRX zyQz-^iuFN?wT{CcfT`gXNq{#OfIt2Q91TNL^dJ=R4PzcMvpS44?y(#T)18_a)ZP|c zxsEjF*g!H{Ows%ef!|NiBu{%m>GCCYWqD%i!5OU)JtcnE@|@q+$=nkgHqWtEEy85W zaI%1NGDh5Sruc!82CY6m{Z#xw`f4_d-wZv(H-2V-8=sdT@Tq8R|0XOS_kO<12TvxH ziUPEKfEUEP;cwvQ=Ob2aav+8*5I8-l-6(j96^z+s^1mfP`=;t+#e_|{)}Up%Zah-8NAA6)O#(J zv7eRynzVMc{#7;_craho<*@-+%3&8GWF?93_wF}X;pbJ_RzBQ4DWK-VJ9Fza?RWyvu8|ifkq1`ZApEk`ruZE*TZq9yVsqI!N@thZ|zDU+J@} zRnll;8izZk7x8a*O!jJg3L^bdc)59b;j76WA~c=Lo_~*k<{fLc23vmLGTR#BC%AsQ z><8k)3f7RHv0*;$2b{BynZthnfwUBw>|~>U1m^rBStqoa&G!C?;Je3ccKb&X?c*_9 zRjnoXva3|FXIbn|C}lNU@Drk^CycDc+Y8oqEe@{EvXMObl`TLb49HzU~3mmnS)SbJmf~4nnox^CEvI$BEE-dtSL6#El3}f3q4pNupEv z<=ky}CBR4!WEU9<*@T_MFCa?Cy9C>Twgds@)Petf#af`rR%>VO8~4Ucw3T%1&`vU3 zsLNRWU1YS-N5_8LMZzolf>R1a#l(y3pIxM};Bb-o>_)tZMd@ymY~Ns+yrA37zTZu1 z1|Ea!Y;H}qOU7{^O0b&zEAZkY0(fF`P29nQ+Yl z(Gu2ZFWD^2#-;JSWH5P{*KQvIK=K3IxgXo4E{oXx{iK`lb`uLbN2=we=40bY_IHir+-PADoF7Xj{}#Mu2T_&7TFHEVGky7-xGIS!i~H#_g`am=sS z;;D23o7>y-CY>P0a^!19PmxQ);u&n%X);Xccp&e}X~euj`EOX{S#m%qm%-kj#gffo zCD&ay@;$SjBQwf}jY2yfu&RHN2;t=lS*^YQ!U>NsbSk6gaauWcxkP2R&SSrNcV5j4 zM2~B&to}vpCah*XE|Q3H8<%}z?M4dDZ0$wtp)Z`oMqDD{sL`5BUHmy$^&*k zyvyuyzp{rn(A+A_=>{?8Mc%|VBpI4FrVuwagsSuMPTnHh2-%yLd57S#YB7uc2glHz zud#LikkKV@+H)4W^)ET;(e^4Yl84PGuN7Y8{WaY6>7RG( z9_df;hc;M95t)aJA$y9*8ge}^?LJv3*e7LvDwh6gBpdpPcrmv}WVTn&3*6a8^g@Ce zTiL+E%Fr9)HR4FN?-7=S#jM_AGMQxOt$&QYO~JnpyYvKSgp{>|M4V$K%#!c$z5hh);nRMIi#=V(DMZA^9)DA zo7sYAa8wQ_*w$y*9cVL!J$**vosXYJ+&l%xXna3TnvYmsi|1r(IYFDs-o7N?VF0gq zMP^}_#``t-fvjUkUgKmmdfe}C$gpx%78aCf#~LxOfK7gn%eS~l_@1N-K1-Ry2ePGB zv!hCfK?_artn8>bn)mkZojz$)|K9kVbqTxufy6Xv+!38(8D8;*ELv(1+K_^!1B5=6j=-7Ae`a&{(sM!@ZVxsf!YQAt zL(5LvMJ<$wC>ugx3cFcNLGXk2S_(o0_i=&{M-aXu5gHH4vnwZf5zouGTL$;&=@0K@ zjrfbdSSelz)%p0Z?+zB?* zXWI*naLTsdUdTn?rd1Rck=8shF#Afv9B6WJC7~a#X}qo^#0U{bSX5=91rC!kD+?Wk zL20t9eOOsoNq)k`D)c79IbpW_ z1rr~9+Ucm0voKZ|+)b(|d*CcM3#r5W%Yx^KuiK;bKN_H({;Nup`qM@%oaPjlx&L;tq02 z2aOQsDZk`3bQh`#*qlkOE;I_9_){r&Q{tkAf+$5|i5R$%Qg2}sr@GKk=$69%sV;27 zl4)@bVStd(R+jJRDNGZ7X(Lx`ou?2i*k1~j+8ooB-S8HE6^4Z{{Jo)uLV9aim4!Y+ zqTrm$f@%tl$)&sjHHEfXp=BV;!+n~-I^?6vE3V{SZhHSUzsr9_^iAT(lzd#G z)rlEUk*@HmX>KfL#j_{9=T$}j> z3C=hMhzNq&onu3TghN7=SQc7WsE=@~Z(ZU4v2_)2RV7`VH*--eLb?PbL_q}wB}73% zQNix+mc?$d^@&)k9=lt2%@xI713T7UV~tfW#+qv*-~ZhEaFq{!zsEgi&Y7M$bLLD% zi8em8GEjsVy3w^j;bY@fmm`M=dl%OOi@*jyDq2>Yw)OKxT399NeFzJfs(+T7FFh$M zS|F4ffKS*pAF;yr#NQ{E|H6mE_v|HaDYW;CtbINGIy{Kj+eFzr67>L$llY(bf zM4nF96P>QMF*B>WLADh|U2ZHD#ZWij8Q8-<%&n7MC&oI>HP_hpf!B{A)6)v`j znic6oxTx#7pkkhs4bf6|JjYAyM~G=6u>!q{KtH@j%_7BY5!*EVNu+Qzc-=&6 zN=$>U^uvlsFoMvuNERkh;+NH84-j-bMsK24F~ZBRjYh_Z@?va#3a$=K>qv~~W55Vh zUGy`g^2d?(R2TlipUeE1wWn+JL_Nsko;8Oh;7k?zMGdqEi!xeQNKdFC(hOLh`ZHEs zz}ohvII%Dw9aqxmDqL#l4!|be4rbTfp%jW;_3}`N_G8C~Xezqbq4NJ=>F`!f;U^;e zNU0@mi26n7uUcYc!3i&gnY!45I>kc_jP{|6Es&e5@nR0Q|JtINVFdkNTZ}Q>ORrH! ztTKpZUNj~VEMMzFtQPRnim1ZI!MR1$n~P`_(D=+~wuxd$c#>)61psC4iJcC7fro{< zfhHuN^oGT9>DkfA1TmC#*hEpqa3DP;Q4Eugf4luya#;Z|+o|Wss-ajUD!9?+hGLwk znnOX2&~Fa8=;bx1k(eTcrxTTEDr$&DpQ&?G)C)vyQ{fhFjk`PIjXiKV@qnP<=X!cV zB^)tqA-UXVIF)!lAUYaT&{sUL7^PY$l6;$qgTj9pJ!&RAL}dpm*j$_v0UzlSv^x=G zPnIpjVUDE*3hE>^Y$<$7tp1dplL!qyh%MN?x?tHnwc6O6N<7n@So#zF+!77tL%Mk@ z;bsu7#mT$1Xy-AaI}fM58+=o^_%0I^pswSk(el=i_rKH0*1|_D`9LpP3l~xH0~Kk5 zfn)Sr8q-F!76x~^-A1$!1+A%aTS)zS71Qsw6@?6jH|bB>iDts^gpe!ioa zWp21d9lMLpUSX~OYgHkDp_-VI0qJI~)-FvCyNk&p^%*7gKq2&cMl*T{XAEl_dWfmW zbVyGz+p-c4A>}sB3N7h!Pc-F9rP4q26!r$p9W8r{%c71i{oPv}FifRYeZ;H+@2;Z# z9ifQ6qP?tP_LUa*6)Rn}GdQWC2b<&uXZ%y|+&E~{GD-Z4t#9>z62lB#=;Tl0x`@oC zRmtLs&rdiEqw}HA&w{*x4T}{z;&zxN3Fqi5D0oLwI3)-T4(OUdG!CZjy~zL24Z+I;IzOX z4Dr9E`wtdF3?k}X`idc6%((W%z??a8l##c#Mm(fy1{(QWS_bBJ;|Nv5ij{%YkTa%&M~;*^d%+try3E#R)FK zH<9*vag;m?nh)kqqXdbF+oSg}yxB9Fhu3NN=lIFXu|ItXq3g?cxV+j`a9w*C*fjl%%Y`5Y}8 zhl*QFv&IWo$Dk+KIII%ugS!{7PI)zJIj_{XKA|Jy#XQ6K^i~s~VBuiLiix5mtDF;2 zm_5m7lE@J49?{)NpkAd?lf_yr1fQD>;a>3sot`3MOFR!pNu}9WSjp8A`k1l*YUcu# zHHzV)X(nwjLK&$3ApMI`)PYEQLh-2(>6fTistCuv^VO+hs{!hL(=-tz995c}Ci;kB zN9f-)(MU8sLba!h(iW#ew7NM>!>1#WSV5T%-Rv>doFQgHRlGJs#94XX&SujjUwxRV z{(P7MW{T;;`!?;JDcXyYx6<8a33r32c#tAzi|I}S{>;`UE^)@YS|8$ROKOyR5Z#+C zysSi!CSpDD5{8fJ{*`Qg7S%-2YSidw=qBrF;?E*Ugjc11e-^_Hko$AQZee$w%FKm= zFgJbuT(Qky7*DMTva@n{`g;;54VEKOYp{;$$$LTP76^Y)pfr70fK=l%U$z|GTLIU9$YZ6LD_WGLT`MsG za41V3R${x_0!mmVoWvMs>b6RB7u5pk{3;~MHjqBAg2KOpTCGO>SQcL`d_`F&+O}HQ zdOJBmU)0m_{DGE^fB0j>@t~-x5HLpbf9UaQ5m0LFUrZepgoj)(GYd*}-*#2vzJ+!8 z&wmq7##qfc3UL^|MwAx)uTqya(CG_br4wsJ^FmARYe6r)PyTDgMj@`y<+b91wbMP# z*%_bUlWO5Iv~!)W&-J3Es8foLuEzj&g5oxaNc6t38$>%1X^(MPJ0z z4o(2GzG5`jE>DcJ*6qnrD{g72TS?xVMb}~>jEz6S>O}A@n!8!_Kwtm58PziG95wkx z3@z3`lhTb4qJ5kl-S`F5y;l_YtEdPYQ-@#03g04L-z9nSD3lsT^#Znv8C&tSt<*;I z_vE)lL|N}C&Z&!PbVEx*;~O+!3p(`>nzu!C6<)`c4$w@v}C(*^t3>IAq$1H4=!>rW~u+;e7h;jb*$*} zc8rnDUebr{q9eq9s~wp846~#)J1~W^v7}-5VP#{{Ti*npB z)5SpB5`~fTw6^}p{f-M-G&{*=wmKE*qGOgkx4?O!SEJ!Ksm|>DT=bhcy+tz8{0n6$(2bniZQaIT$UP@sbuDz*J^Aojo8DMWfl|hCKsrX9YNn zp~vyD+GU<{QkosU>v8ylhta(EKI(l?bQBE)odc&RVomapn9Ysskf_)2dZw1N8~CV! zCDBy1MV6?;z=Qv&ZLAru?Uqdq-3^ETl#))ZG^Jz_d&Wj`3^riJfy2;QnG|{$YN9Mc ztq+SiHfPaR;Cv1rHtw{uocB9S0kphCwi5MzKbSwLd>^{{>TAE-8iVF_fL9y zLTs<}(~az$rw#Q*0cZ{Wyg4Q{s*ui87@q{}yiG8^Qr{K)*0<_@pi3tqd7IpzPbWp~ zLcK#c2M7UYvzFsS_1B z2fb@kdZTl~T8N0T>0K^}ONQVz*ad`Z*ID&jcm)~5;~3Zv)gL>hGFouJaKFDWJ0~@C z=msv7s4LXt4-w=L4NN@`4I~D~X_eFg3I}kIe*Hr@7aR0KYBD;eZB}6nU4NkMEFMkb z5~iUrVE*sL#5yQ_$8_tXDkOSnk0;RbDL&sDL~`yNPWrT6(W_9)aANY&P8CIfyI zdU0f>(CBNTR^$+!aVS1mD$`l@b@D8?U-g7zYdIb_8-wN${2cS)H}RWzR@`pbyz8P2 zrXc~>(fgEP)ap8B!;fglbyRriVYKEtw32p1=iR_)w2I2y5NSUIdgH!lmu})jaEj|IW&3-iPh6wc; z!Q?c1hs}c1ofp#U|cjIF%+^P8J8OGY0DZ}M9 z(uJEap$;BI>P-=7*iH7ggr{ezK`8z`x#^BIT5!S>!k>@a!U-=lh??FK0bU8`L=*iyaPL1JKp^Uj6gy1jLj!-nhS|j(0?a#jK5-6!Y!rtM2gpxXx(0 z{Fex^*oltCl8dbG!W3#Xit67LRjf;Eid$3}ofxn_ebHSuI7~@jb5AreI6at(%xiD9 zm?nE^P#)E`No4Z?cBn=;?)X5QNr=6p1s%s93{YJ+XX8x>Y{uY|{@1aWDK+%#JY6Q4 z{|f-yPpxB&LlnrGfl9nF8AlC2K@L>CjmF-Sl!xMuXf>JsekgjTY`F^d@LEm--B7p! zX@$tpj=iepd$P6D)t&i8!qCohweUGqqj@tR97mq;SKUPT=MHN1lnyv1wLJuvDY(JA zSo}F<9foRavcp0G(wRrX0z>STN3cl6J|vgNm}-utDv!lS97?RDie;kmW4flItyeis z6|zJtyRG9fGs5!Kajc%sMtP(~Exk_5vqaSbpJpL`BmJEvmf>8%geM}JSD~I@nBx_| zC*ri-#IfJ}I?UAk4!BCEpNhZ&_h!IvGG#v%KVk8$hTQO1%@@reP5p z=!9Zkepbt(-l$ih>tXvhE@GxLiR+i&!~3tx@X%QUp4FsnT9a-LI3~4? z58Ct-Jv96ETANPL@7m`vkax-i#IlkXRr>pQi*Cx!!T1pM_6&v;T!>{FF(*=se?@&9 z;9LK%@GfyV5P5NHqjkFpv7AlqTK}Bxa5is4S^tW%osG>JNc=E*QQ_y6XM zwPrJQmC3pHH|IAq;5&XZ2-vZ~g=!a##kRj`*gH|(>foV3`QSBhQ;-hn&S-${3zV3 zJ-}d$XN!XWVA0;}F-xwIYa~2Po$=#)Glr$o-3Ow;p~-;~Ak5Lq|?auk%Gr zF&A}?(q)4T5q3wYu#nz`m(}OwK2}TBr^-UsFI3ZnpQ9N<;>;!85YkI@sz+ah^ssq_ zrk#<(B?+w-&jqYV50vtt!PN%JHNScqpWEv!*a54-{?n*{xvbBNHsn~p}3gOI6^ZD$VAa#D%~j{lW~N;enII~^2}ajAk97zGglP(amH9*|IeP+ zn`Rf3ZAw~dlu#>tOg7P6YcJbOt<@4nvbK=rv0xi*A)8=Go@*gHCU!f*4I6Wbcs|^Q zZDiO59^#W~Z+Vy})m9TLp$|W;q@B#!+a*sQc3=VjZBJQhu|KIsAvwlrK@yS}j`IMx zc?PqQ$5s=t%hXIAM>h+}YIZC4aTf!H?{mY(GR)IoP`Sb~o=`InC&L8VP*nC4#V3$kF*(kFBQeFKx8tYb+)tapdo>HNBSp2tbly_7aQqG8vaU~~pC`wEB@{_vLv>) zMcYWH<`W<k{$C4_O|lf=u(Z=+)@*`ipQ`_Pkoy{5xjNw7mEo#}ry>2qyx! zICJz!w$%{YVk0Y~@E_wNEK|79dtir$vA7HsC0f&=;?g}Rr`7*O{dBUL_5ZF}MQ{vC z#YHu?(#eocezvlVms?fTcv`VR6Cu)HXwoNi)KE>NPr^qnTb26R%Hbl$NY8C$2M3Q- z7I_1WxN;bV^w+xleL|h>WSFhjK#ZQA2qPnm14<2b8c4s|$$Bt9WZTKum=Ob{PKrg7 zhMp7J9}av2lC_nC;)Ab~wx8v4b98ntb+)~`VbL5g1`zXUNi@!021eBTMXRa${4v@$ zKzpv8#-@LpIDb`4VnOkhr)lfZH?YYIrqiff{WTxANwt?_41cHhbdcD~wzv;%bd;+_ ziEwJ*Bwb5i>@D@1M%4ERCB}Ft_)r|O%9HqAAbr!I_Rt(BS=v7ZZtGsfdtBGn<6a$F4n1yfQ?12xJsigA{<-fCmr z1g%ejQ={f@;E4I%$)&xte9hQEL!4!BbQea`8V9Ma<6uWNw#D8yj!3Hwbx592N+A?9 zYlKo(52eHgQk`Yl;P*YbK%4k*iSjwDb z^IT+Li3nZ4j>HEArnVl;@}!0nbgbMu-X#RL@mbZ?m~!b`Cb( zCir-o?m26XiLRcujy<#-HiCne{n}VM!d*!)k)!DNs1{ag?W=%EOR=`c0m(+&F(v*U zJ#&=_g)eK(;;~wEGF5kz4ZUulfY@%0RK?`xOPzpWL(}k_)CIKDO@?Ag`-z*ZDC&oh zhr8^CC4ouqvb*VD5(>1mH&64KBo>|GR*Pv zD9z(t&9w9_%B8f$OCD+ZX{1K{(c>}rNJ#aMc^6kOdeD)qSLlujsh!z0yQrh7qj3v4 zp!+Qi_wjK5R$P-Pv!sj`bIVa7Z<&BAQJQ&Uz&K9pyrsWrJB%)R%PzukBvtm2L1mXL zSDxN{kMqmp;;6%m^eaUpXFoUViqK z+JMf6^M8yo4mv!T?!;4a5PmTj2%1S{G2gd?_kWdh*g%pe$jyOQQmz z`povBGl4Qj%6>8-clv!2=xc7nwoXjw<-Wyg3+%1J3tti?K z6t%rKS(TF=4bP}wIq42nY(_cR4{Je&@=)7;v83c+>EvTPrCnr-I~hKSf!??Zp=CK% z7XG^~)ja$QH7ze&8}`w*^3u+8ax(Wt47=4k;JI$aYLXo*>ZwtGwa^OgE`x_A73Vc}e{EubM{m6&g|5hqOLeHZN|jO%bBrVQQc^mVIPXK`wA;q|X%^v%9BO zf3H=`?sTYvEQJ%~Y6aOx#G~(3ly!KeyQ1{Bw~fftDEFx|-RVw6*~zgAj5UyX*ZIwf zZ&%Sd_NV3{GS1;{e~pO83a|&1^&xI5due-!tnW4gG*+}M;QNo-sYCu_XxNY3L*+Q< zwrOZGm@#|87~PU#$O(j{^!BeLq>Te;x zz$F6xE6K(l=~}H9^+~{B!qMYa(tf$ozhEmyB^g`%aw^xJ{S|zIPjblEj8_>wA!Y`R zstjG~G0m$iD~9aoiw1v6UF;0wLh#>wsCEqU$uA3}hPH=a?esT4|B33Y1-!8u6H3{Y zrBC3^W#}C_5IEWZbX;A8Ah3WG&o9(sY5T&5`0z^u@v7)!)yA0;!{mg>&rZytpWgnf zlYTB>2;BBWAx4vNk*PtdAy3$csc5)#7L}c-RJg3`eafgwT_o`YARceBN`S;|F_d!L-@}6^IfQ46g8i>qAbq8q=?_J5&{Myx{9uYFm(h7uJw<7gu zZ-jIX=utthY)`GowIN?SP2*Wx3*Tl6KE_1!tf;S)6Cu4VpTxrjDxRj{Euo-DxsWX_ zk+P3lXlD)!S6%XaWhmr5kLvnx_=y@;?lO-+nuveybv@M31n8kF;W&@t#4( zCGOy9p>^wP`tGYHJR8@^X-xh@CkN`}A^50$?I<`3qeeYDYQW#}cJxz}Tq@dkB&(|O zWx?CA(1`roQGsf*jUj_NSCchxCDgiVvSLuxso%zv_cgFkQyr<*4)zxsud6S*NJc%F z!2!FC3P;NT%%v+u%ftfCHrYA6SP+eo%8ZJ|$m(Ly2x=IE#kt59WLsU%wVpFZE55n- zU~6&B8nnB*yl?#)*P7uHXKy4Pha}uS(Z(8bqHD1fjn@*N;6tp9^AV2qc*sn}34&O8 zHh2Oov6`&3(yx{_Zwk4RXcY&E7HTt^8_X%)>{I5s8KX+j+3`sLaJ+Vhw{hxJ4f!s(;W-!DqLAp_7oipQ?Xho+Wv(pkiU%! zQ(gXs6sBIaWIJpPJ6TIsb(o9E2AasP(fFjrSz}W;qFaxeazWxR%oE$av9qEE(#`5bsQFwpG&;x@R{ux6p%(8*AVpMk^a{tI|F`I84%_ zuB=|E(=={nBQYhz4c$#~n;6TgFvMOPK5A?By;>TCDFgEUxfTktTm)UHi-|6-L8~i$ zF@(A&02@oO39@YCGB#Yix${=6ycOmf&+*QZ58SO{uh&kEjO8sfou}vIV5u&u^jumpbv%|`=SgR-?L!7K}tPY#j#3DU7~*{Ip3>}EvR`t+1BAi z3ypZ04>y=3`g=&mQ}tvM(XIt~)<*)$H>Ya#Wo_GmnCc;hLHMu)eXrt*z(w_CeNl1( zJp+Sh!O6V$rIx={da@^$&pp$cVQ=y$sQ4fJ<0H-c^`WK>WCX5boY_Fe7h0{)nbgg6 zuYnwE8DYi(_fS?Ro?B<9CpVM}g(#j(MVm;MUW0$)VhX($Cd{y;qYZu#YTD|~3w4+W z54~BC`xYpciCwfFZ(psDFgw8F4~%HJe+RM12wj8_SoS|G!P&N&_y7!X6LYL4@I`JI z=^xU}CelCPZ%jxNj2~lmm)8P#a)2lQ>SzuFo|{3#LTp{Y|8qrp&_o8L)Wd6mF=Iv+ z%qc%;9$4@uMwJrJIoXx?2+-e3E$_koMiTHp88O7sJN#vjF|f*0RedR;U{?!Ef@ zvle!Nobm(PLJat7!Q#DQ#G)rKK8@0v$|8k!mef2Y%Mz!yyXbV);xhG zw}ys1fHGRkz75SoQBJ9f4^D7=h`}86={D0qsV;(u{yw2u2T^?AML8lbJ%XeBmxi{H zo;H8i(dyMxvkSaXL+jFpHqyV?qS{<5|HP+_@KuJRA%vXT%3wZf)K)gcfu_Z6 zWqXUmWwbO)z$WOyE;c z@y2ThzH+05o~5Wo%faj!2_x}Xn1?^-sL!l{V-+0jfQ_n&f!R4@BPA{?z;#s^+2T8o zfW6@#_1Jf8Dd6)1A818E%UX@V|0|KGVw|GMXW5l~+YW&;aqE`zFQq2d-1 z*!mx-y}t_@A)g7z4f&DU;78InkY?h(9Sm$;;sX?4f5c%maR62q`JlAkPmatykPT;K zTJ@AZ3TO6fj%xTZyiN!&RgV78cfjjXQhz-LFJ3UfV7a0ZV2a+TBp$a&V%qMdnQ<1Um* zjUSd24y8Iy=X%y2f7GD%MsT&qf3Y6)Q0qId3|1n6S0Z zpnCksJI2HtAAUXM8W_20{FAkY7qh-~Z@eL>rQvUQHC_Lsr6HEnFe5uBJhxo5_rBG0 zoP$h+pbmWgg_XnS(a`>W;k2iPcEs?C1*5J!%1(Sv;a#MEsqr^3T941cv=U=>;zte9 zW?VVgcWhoZlgDy<$6_?4i;OLn+(+M#;}6~8GTrDRJ60CBPOCM_rLEPjmr%D?X}4=3 zM1G#R*nWIp}lh}mvexl8y4q?hg{KT2F{=-o?}!-395y<{0ImX7Kr z1F;2RBQP=4kFNHT0iv!S$=)(pIQdbf-cTo>Qm5V!W>{X}&qO-WTb35Bed$ea2vlER zD&0r=bBKLl{W?Zd`pD8aDYYG#=;}jRAc{yIvh53Ib04bR7tA-Qe_t@Kq4j+c)Ch07 z#MC%%DwKryoxG`15{8J%52$$(lsD)hNz&Kno)xCS2hrO#ZHKk<`WU%;psu;`b!)RrhofO54$mVkW_mdJsyvvYd^?j z{{hh3ak_Va?A3U%J4<{Vp3+5rydevRM$v$x&D0{FFuH!fX`ufPYcA^3k9p{yxsi3f zO{E8-M9Wp64g+NfSH?hDMLVf6P}ao8GnYX!(&@b`M+-wIW`MD2)eU$)4(IZUy`;W_ zWD7CbRUh+i55ka8*@ToG41?KUE;?o6V1$`!LT(I}PANs+=Sj`39|x$X?|!5|ovU?d z^->=9EI$?*Gu6F$-QWGt3DreE(hFV9!twPS)&5T!Hbh2Z2k&n~FokaBOdp0Iskp+W z(on1we4vR#(W=8~=TI3Ib+;ndP7JEXiT_!v9-h2+4!6;U>2eEFRDJsP$Ao7c<9NDW zPcJ=84lop3-i({XDDHpe&1u7Mi3^)?eV5!C@C38dcq7W#c&xVZ+|zQp1mp9n7w|>^ zzO3f)6XEI@+CM_N_^#2P4uAstSarsWuh8W7qkrB}SO+_Tb@gKgHHN;7klw=mPx2Zm zT|`4~iW({1T;wZ=7A)Suz&WJ_YI3MKVvRL=s(;dekun?>xL-!f3Zkzk-5V*RvC*{T zC|O5XccP?G^1h2(NeE1{tVPJ!?$PKrSuX%V*4QObuhHmV171+-XiPJ1(YDcY6U>Nh zQ)D^6SHn3MQKvB7gmQ2iAM~&I`B-2+hA@zIUU|e57%AvzZEfgPii|9GNb|!F^A*6g zmngR$5K`(!4Q|3u3@W#91BcZ_o@_(eZ#70n_^HFRcn<3`yWjE2C!ST5F-DdYp3mvd z7&!zclV)RK!V9I{W3d#_%8K5Og^96<71bCg>)D;gv<@X@tO?^<=y4!w>8G@29NLNN zQ+hBC?Z)4d{Km_=5vfnUXooZ~iPTooPGTDl`pLAC|4Gpgewq~B;}0q7cJ51#y6zs* zexEjtmzB6FjF+WSc6@?zZxwr&Yc{hL+INgq(iI@xtddT2v+8sTJ6%SfQ;T6xjY%!) zlh!Z?FD?!4$J{s2yfh;Qi*GFIhH=qam1Yry!cL1?fM_)V6NUz?{nWME0U4Agx8!&u zE+U{Q6J$rxxhPGaDBY;wL^%=5i)j<(0-V*v$DLv)!3e&OW=)dAa91rp?&Loi1^1+o z?qv)kvrWi#Mj}i|&=hIowfAA3E;8juNwtVNO_AOyL%_zXZbeOnd4M}or@VgoRuVNK zuPfU#)Jl0>qgmp4=5@8?a0};k9bN#5QYW0C!bY@=i`2)6g~x6MNj1vrQ0xy+l~aYG z041i%{vzr=9Zr=_Vt_f_OqGYR9eBw!*;uUpOs}V52J$ntN|O_X`(3)1hW>!EoQ~P| zJ=!^44#NHk3Ya02aQI>247pvH8K~Y&2wuqHnHWJ+>Gzqkf^1=yP48#QGBN;w&nzrk zeaNAP^QA5IoP`DY8R-XR$!i8fdiuPdWqTxr%W)9zvRC+$Lm`x4lBXszi5AW+3v!jgp;2iaVF3yLd&`@`? zUI4dJAE?vYCT} z0G92I{hicCr?tNLxd{3q8|9!*rC4iyaREN+s&w?lB>Y2n%1VC0-H5ef3R)-|S!PsX zwP}=p3?A($QJH2glnunlVsw8YYWEG*StNTo_7z1g$Nq}tFKNs==|g`kmn(35YTyc4L&O!JJuBe5{R`c9v6ZqtZ=73++CNGQ zR?5L5>L0RMC5L1G*tAu!8;*X?oK+3w$ZEChfZg@UtC5KDbZWKi>vc@<8M&YE49!tC zbyRAtzwDBc#LtYT_^ZCuVhvh1D$bUylS8o+r^I@6 z$=6hOJ^I`)w0ylBfnMykL0%SZ9;d(FAZ-kVYCqDOt0$eGtoTsSCV5{(JWRLS40C`e zg1e>mBh22vV04-DfG%c87rOk5j1?gd$ZH3xB=T2iO&9O$$Wlg1>&d#F>yXTY=oaOL+Fqn`UgqSekNIXM4#MHxtr$8;12g6ueEAq+JX*(_!cBV0v>$ z_c4-@nI_~fM#^ePN5d)d+yS3!cF1wU_cra{E&ZwCPOSD#qr*F8y10B(cU$?J{7FRK zq;n5sFvaeI5FG!fPID3`lf_;+2u=J#hIFL`d!b~n-=-J$xxHAdEvFMA_JL4v8#UjD zHay|7UIl-%V_WQ#+%LO|N0)TRar>n!&I2vokG0fVCO5AGsH?|+=*2VT07_(n33lzT3;j_sPQI;L#UAt7j(*yL!itxA%8Mb!GuH|26Fzq&bFM9J|;x| z4y2F?=>`OLuv7bh96p~Hbkz;ySl?tKO$qt4RBBN)_OOpZ;D!ZH1f&as=3CMLx7 z7?4+|b;@W)rkjv^j06BFf{fHWj*Of*rL(O&4oX)OQaBTcFd=;zS$0xqyO1fZ?Yn1 zCPZb#$Ar}V1IXb6I@_;|v@;<#mwBU2s zH)SV0D}_%+qfeG=r4K8d`xh*@1sXKIrhj0_6Oi274AV;_B zlue9uG$EFM0r|R3r}SfFkqNoXNSFz!d>6=-tvcI6M*5qOY(}h1NQZln&Aqnh(zfV* zNZX6Q>caHb`;f!Vzv`5>4}Kd@7r{H^M|SrWs_!hTjclkPVuUfP7%_ zP>CKtMW=UPL&49u^{mzl=(lGmljbJG={biII*b#PThWuZwj`KSmarkjspOnUKo=0=cqCXIscf ze-o0;h?NQH@D2&tOe@|Y2etWAlKkF-{%C>j)5yqp6Y`7^PZLuA1AOkMnIDjaR`Ydk z`;TCFPdYM`kvS&hCL_Tnr0ORi=jQ2bD;Vi*LX^)yEKEpuM%K*L*-kN1-Gr3=0_3kb zI%Os!BTdK~Mx0GZvuq@B7hU{(nUw+7Ez)Flol3EcRgs_}UgRy6XhRkmq*9V5F+53!vl#Z);RFS~4^7h}*}_QMX{>s56rWOc$3fy0{FCL?hsq>KfS`%`pE8Y3wt?Bh!%#jMb}kI2H@#LjGc;ERZ6|$f=1s#~Lp5?k2>dC=kVj z^k!tm1fA_1BUMdEa4{e^$Lo|ij0`m)?-{W-A+0QdY#*ny?YC6i4VZ#iDpf@2IC8d9 zBHT8#`*H61bOUylX_FGGr}UGR!WZQqwNlQC-fih;Yo(#+F@`58CCS1@adT(^ImXt! zHaOdgW#%C4jPb{2hX@-bfsM*GN@?8svCT&D7Xwo0rj6n&5>iMMSIP*_6e?F-@iW9z z)8a}wNa_i2#WfCFiYuY889XemM2NDZ$;%czO)1`133MA8$H!;xVIIkg7`Ydn@cNHs zO`2(oxbSAPtrF#8-s;CZWi6S_K40Lr0vkJ}y7)L!pJ(;4Q^GNsUu&m$+E^}uAWrto zNp{Lf##RNjCS9{rVnoPDah2IQ>cQ%t6777nK88Lt%Sj3Hh-~@=tH{5cfK}`VTY2NjFddX=N_U+UyRsHw z`hjZpGpMhdobmp#YT1xpx}h9DfbWNL z{EGDu^?qL0Kz2Pt!S2c?C(pdZChtHj+<@M?D_tGmU`d0g^PZ{Iu?zuOIG&FX;21^; z#olvB{XDUihD{t>MeydssCc!dk=B$@qC~I$^mhrRq8LIe4D%sx|Rzc;N7_#5QmANT`*2=jLY ze{--QMFr9fY_|SZA~k>DF2LLs_0U7;mA7JB-suO1>m$Knt~0blP46Uh23+L=ce3+U+-aMy zQh_=Hg19mG!F7(WVo&EQDdoh!z4WmA`628fwe+wjXpXK9DJa2Avv_P@z_m6OS%>!{ zxw00msEqinO&*(-g2&l4b&tz>Y6`Q%!c_KXo$K-F@9QEZFEM6K6 z`;8ooQ!YcvLlj+Fandtfv%8*Q&oW5&i5hykuXNMnzc7V8I_7$eI*9n2)X?IWYSkKa zsEp$5ab&o`EaM}FNZ2*krEvR=`U@ZRv>zaemA^SG(Hw+BdkU+d@b%v?vG^3-)HXNHj~~gaf?{8ADqONQ>WD~cOLy6GVp}qVC@vzn zExGg8zAc4^Ah5U8G6aFae9xclw1_{j%;6)F+t8g5rKa$2qt|G_Xs*$a+!|fH4du8l zOm9)WLeZjpLKSz1O{17AGMB6UR&bTlxS%t%)*DQPN@y^K6`IB|NvgPi(Gd=3Y3` zR4_zOlbz=1>R^S2k!co~o2Iy5kS6TELz?U&(~3zP$;~K?(~f9pIX`I)tw}OklDDJQ z&;pqphT|L{-_^-u`-7}FQbvT*UQ}$RXS@;`VWyc!ZX|a&lI<0=3K8mJ>KKU@KAu0e z1+L-&K(&_+w_>=V2GhYv#T>?ejc4ZoxO?bu7{dj0cpvkl!&Fh6x?K+b{|?n-Fz9>p zAv_xd!peLI$xJZjLwJh~6l!uXO|POjx;D>;;R~m$YA_vQ2H$)bQaCY1gDECju{9q8 z_zk_Pf&z%g`Z1QiHFyZSAJ$;1AB6%~ue(3SvNCpWXgr||57yx>?6<8BXY)uNtHTR; zPzumsdKjg+qKz1;qRb!g$F{(4BS1c-!=JIrjc3i+o!VDLl=F4>*z<5t(cu&40C&^j z1cnoJ_`+GhAv)ZIVOJf#eg?46V2?HoXO;W^%DIarF`U3GTTO9tNzaF_o&tR-wFkZ1 z#C+&4PlDbjAHqN;G|q?c;RFZ~`4C1j!K)nIuBJG;SmeVnArlNQXjU~8o(02Kb$Hrw z!25OBn&H(tJm(nTR2_C=xW5iBJ_@*{4tp{jt-*958U zgBXU!AA@>4qC15hhSNqJ-p9izi~wMzlo$jzRChnh!&`eDj%T>04xc#yxU3F0VAxKB z!!Psr{~4FJ#_ZO1B^h%^rxr}OpAX^IJ`hd@(27P#CBs_-$ObLjV=rLJ$3qV$j1HhN z)fLBXUGrf`&HzI~K7_Y>K&Y4xVJH(^@*#ZL4T2$nvJn^br)|}dMupwZ>+qCxz`Jy~ zD8oy1c;+s^6Li>);odqt|2M#mbl8pIa2;O06R@WS)5{tt{(`#u`W{0 zba?A_!21|>!cH}fyqkxusXAPR;eHxS%VH56Mg|Vz$}PB8)7>w|Ds}J}ty>&sm*C#wUiI8II9lIv1@D|cMO+g81jzc zwLIyDykocw!;p6j|H^Y{$UDFu6&TL){r^JTh0_u&@8VhB=sKbQD`4G;rJ{ge@p%D{svhj92%e#CSTCo8E@-7~kyMrBuEbkcZ#4zL?!;g68 z40*?JFNPuS82*RN43KvW_h%ULj^TG~<$$~cOc!dS;34nW{i`->*WqytL*CVadjW7+yIJFytM>ehfq2 z0S@1YH-^;DCI7#^$}!=7K7{RTd^lN>`Xyo@XLu_m)>WKbDIeadDWH!oNn`4=sLO|; zCXd<)`4GZ3fKV|X!oKw&xa32KW`dz4Wg{*Yb#;-`_;qlDsAKrdTEGx>3^!mHqK@Iq zYXC#kG2DV-h&qOEtp*HH$8ZORA?g_Zdlg`aI>7WY0VNMn$L`No!u=nzN<;&{;`#pt z`gR5A5LAhZz02Bs=y>E)v!}p+w}JW4gV=xTd<` z;5{Z$F?j~Nqf5bn`!MRE@g1YEdPTqXF^8Ib$e=X(1ufAO zGlK|yX7EQ#ZQ^hQTkX|%W|%k_FU6+@V!!97L_A+WiSX>92Q-UyiUK-p&oGqvhA61Z zZvS6U{aCK=&4;jvCHl&I2*+5Y8}lIq@w_3~jixtbWj-H{dD z=E`K@5l-b>C@aN?FuK%2>3}tWkd{h?V()rt2HN-ds847>OQoc1rtWlto%Y&tBfvJg ztk0kDs5Px<4AU^KHGo&qxH5fi37aT(wgt6@HYf@(rZYU9qI} zk(zW>_{p+SU6sJO!LV9F(RI9k}&yLVAdMFLVC=FR7u9l+DJ+WlC zuqVo{v4(6BEB%<$l`?xN@gmBPYzq^C(3Z0t%>#7`(7mAd|<^fF|p zU-(HGj@Qb}q8Z{DjP`~~Et-vxa) zu5vWXG6SR*$xDBNZg7CF4#{fs67;9<@`Rs-{-a*Wb)}#oN@y(QqA+G_%~5dmkIm~U z5wzMnuj|S$aBcdIHVjexJ@?)~L&a71WzmjD>HAyPSJ2vVOhvTgGxTbR(il5Fo1|1l#G#5hx$Z-V3+piQkLg{5w z5bx4!$Fj7$j&juZv}=TNTwbvI-v8o}umwiZ){*G@J?-e>NM*BgYkrnKb+OMFE}r8M zsxhf?o=9%p^o^sG;s%?kus(mkG}?g9j#hq#ov~wzlIB#d21`Nv^7tgA?ev+6K=>f? zdnzzSi8FMhgfU8>zYpeCIMv~u!H4zrTbfkQYaHzWoJhM558A=I=d^r`QWp6;H%8el z2K&*Jv5=9&tmw*Er5U!a2abc0*I-47t(uZ-%sp4g>=;39&IPl9I zPQo6#JYLyYIO(z`fK&%B90%awiqe${${;k+x)YW7LVFJ*Ay(>haVJHQy+{IQgHAx+uOCjaS56Pr^fOid%+ zh?2=sGw989$O{KSVKbCEZms_2+YI!&i#J?|H^y6Jnt38xwF6!lo1r-QRl=if@u?HE z+Qm(L`l%3(r*8}sM*8^U2Cj>AYlhNSNJDzvnMz@U;eC3uS*SK1&t@x=g!9+*(4R5N z@s9mDO4*{xN8wdZPgj~U2STF?ZJVR?62V`{eXg=c4E{{l=PC`Q_vg=4ZkXagc%9Ob zTFz6t;x4>{^RQ@t_Rx<_em}jOhkQAIN)IK)+E8>I=%(JV7+d|7vSPFq9+g#kiq0SC z2z)1M3AHSRqXT8Qzu_JgN5~O<<5&jCiq%yI4sQQE$m+3Dg9uw^VHjM)1F> z=Mp7I$bGbE2~rz!fle(^d_=o9oY4xR%p3Aqs`$FfH#}y>`Xr|&e~3+u{}PK^v$Klv z2)2N_EJY>YP{&g2xxigrz(n$Ey0a95xz=kcxC|+Dc}*e9kR2S%ScWkP?Q0p51c9_n z@eAC&2M-+Ezu+-D!Ka7zB#m~5?{c_voE@~)_)m}lteY=aoP^ISDzjV}DVm+7^~({> zsF!q+zfE4!C;kS!B<~eS2991OuE1D@Qywd@B_iw$9bW-5w&%ZCfhP5q3awP!Qm&oO zQ*1p{ja`ME5gks^(p8G1Q?0zL z8TSxr@F_YAs&G0*k5*wvRgYiDZ?$qm;25i6jZ%r{mupb_r8ZOdHOgIK{*-F3#b$|- znK&|_3=(rU(#N$*b3+?yxK5c@$b1{#joYU#-9RtbVeAf|aqE@6!b+uT82H=k)mvxxe+l|E=~tGD&8sYwzE9s6L8DxaIHrfier4h z#di&`%ySz=b&Bqu#g}#Dinp}TOeXc!NRTF~?I!fx)EazBE&;0aPM|DiTHwt(_5DWf z)tP*NZn5UR&u0pR6%JRZw~G8n!$H$cN;SFS;b*!x5Ng-qP0Dnyw(yWE!})-0BI70* z&Uh3hZ-$uOl)iE^i>hGS_lpuN+dnXck<>=9BgbEr^$ukb5#J#IKP4Gt8K~l>=UG5}|z&3O&*Sl148)Akw zwhcWBr>6LW!DE{en9}+$z0+DlX~oGQKDe4?hJiZwl7y#w^VH0cAJweWdFhSd`8!o^ zQ(pS$jl+i_&ybJ^z{O5U#E0cUdF0d@cNZA#gNfpW|aCCzKusvnDU2IJoqCpLNQ zM5eHqyHmL+TyIgu-;};A!G2RVVk}J91>$)cy-T@RbjgZu1v(qAlqfe`ES#|=>QKB< z!BwZZTY3IQ!qqKQZ#QHqmUDM2e977`yD_6mzD{>`qd=ptljRo+9qa zMTkfH^17Ep(S2XE)M&2~g#%Tsm$fYOSmFb5PW5%!1P82GtU?Xrxl@#u&8AurtaQ{f;i`JOcD zAokJyNjnZIQI)D#f5}P38PlU_wQy9c><~xnAoy}0{j{?(4&!~!-Q0FG;4OmI&dWzN zcums}V`hDqq7K0t;IV*G4k_cEo-BZNk{O2rf|`eOw^_k#n;JNiTn;PMLM~bU7?A@a zs{4IJrc@T;K}e5BrL@B+<)O6Zuo8<}dV+9-_jwBV9U6eee0uadCgs-WsOk~L)oInn zJe7bJnxnc;Pw#gGRuEC33JpD~c#Dn?XvtB`DoQ<|Ye&)7YMh~dry&7K98+3CLJmEq z3=kbp)AM6W61JzcIgUE;SVw;y$BZ8>HB;#?hM%O%nJ`Th2&17V6gU6%Xpf*YBt*spRAySSpRePdvL5xqzEfPb|E0$&E9pbQSe9$7s zebk+k6?NPXZrA~v9Hb^4qOIqZfD$XlauzU1yfEVC;v;Iq{hxEb#dDNCo>x3WJ0E18 z_o}Ob+tdr(z|zpMg#zUpYrLs7Oz5vr# z)K7(U>T*$8D(W0eSN_0U(6zuztsD#DlVE%hZ#bbns%i9B%P#z1Z|?#g)76Fz?-{eV zgh(bNau7@if{=tDD%uG_;uxhwMMY7RR+MTSXGj!{w4)A7TWzDX&TX_b+M=UX=hisW z(ngDpqM}tIhuQzV_Ih?CdEfr;cm3D({rkGs-0QiYXPpmw?KS(rVo#e=@JXyWr%g8N zLYz^ObHnfsfM495D{#Y|Rn`}kN`e|Zd!k_H1Gp4cqe);lIEGx?O zSdMTOvD~d>3N^dRST;e-osP8cxZl+@fv?|Y?lY$N2I&w7biMZS@0G3a8tZu06w$E- z6ucEK<6ROWuMLRlR+)+cOl7#Zuh?s6QNK&R68&S&PbTkx7%dEM3^$JueRbxo)#ps% zzTIwX)s_HoM>7_E&eS?KXO1WwE~^T(*>r3$dbx!^{O%1Eu3He#fTj0%*TM7e*hgP_ z&eSXP#Zvx8ulbR85{Ywe8K%}3M=%yOPz z_kY2jI*%P6JQHvp7atvWvzzBlAz{J0k!aW7{BnHwAl5JTaMiw$|6O~*6x=Z4rdEm; z0KdW^E%ELQquacS4ZL7#JoxS(n(i-v``SuTGOYf76!cFVP>Qt5aQk7S33v^(uqh;) ziCVnt*q#ffCXX)^x@>@ZW@WTs_Jv@CUYxWcR zP4TWr{l;gF7E0?kdCc*XsiD`o&$RAyh<*H%sa3*8O%kJN4*vCm z;L0};<-ul4L794^BTf?d@~8XudE`l)*+b9q8Tugqc9|Mh<<9z%d$8e>jdzXg6#K|G z*{MsWiM@@;6@Lvfza!o~zA}rGk%LDql4Q8=9`Om1sO;d_J9^Z?eeKMC+4ObDWo&5R z%#*|J|u^@e4m7Em{rwUZKFu!LQbNM3`JIX|`+-ZXk)ew!+z%5Tvueg=(t zy~bIZvsm-->xp>xK6d99QzGufh%GWTw?v}g;vCnc(ic$atMdt)QG|~5UIEV)P54Pr zW4@0^bGqX{Vb{4qlrU%kK8Bw&PJPU~EQZq^_aS&OX$4a0L%-#NZ#4 zE7-}#iywc*RevxGzhY{VmL$d!qWGFuS?(OOyWv!L#G9$Mg3Im5V>M`6?HyaZM*iA{ zk^1>`eloMV{>;8^a9hDtPOJ?+W?O&7I%ev}q8#e4CNE>)cIN#XNPi;v*(|IO!EiQ? zM4jLjS0Ap#$8Pe#?}cJg|kPgVR`k>yuSBO9jP64NcZ$}V`JLHGQM8LydIhOOL)3{>{S zYEx|rOS*=Ok-l5mjBD6#n!1%I*`nTzcO`cK7O{L3rLw!{u^C&!T3k1^i0UvI)wPyp zZ9Ws=o%Wcfe)!{(?jivh$yd~m8(O9nhEt*fZIJm zQ-^bPGoj7`KLWv9^593HcblpttKaQ5fp0k7%zjh^UGdsYC{Fzsg*X2b;|rGb2d-T4 z@a`YD;bTS>Grc?&eBW;5e^CtM|4H=tFN$}0UAO)(3cPa*cQIt+c~z4oB+JRa_~!2N z9%lC8$UI&GI{A0#@!{p0rY88tMem!Y@ZqbzLPg*vUS5s2zSgSo?L(-C?$2rUG?S~J z73%MW`U=3^M5u>z^%$Z4Sg7N8XqD}|i6=Y4x%vl8+K4<$s2B6lN5*TB8@c+HP>&Gm z7r1(hQ2+KN)SE@*j|sICuV-}U3iSc5{!FMF3H1@Ko+8vAekrw)zT6`8<@>afnR)C3 zpmzu3r}E8ydGa)tbIbH9{@Sj4+tjV)FYn`BjLCj4Ix#Y1op>E8|CWUr3!%Md4bpRd zQ}*Mu^yOJL<+iC+rz18LCAZT;XudF6kV@q*Io)zCVg&D2uneU&bAX}^TWvc!TR_)D}D!dunclSd?*PnjUneP_E+2 ziCmf6X#xCD+j!u>d0d~jCxXZ2PKE*1Td)>)_hDM_PQx{;l@a;e>Lu;6npZw0(mh64 z#gf$~Zq@&h6*ond)Dc#7$;!8Yo3(@)uGuE6VbR5=1pfa-u_-TR2rnbQnMjhdb0YYx zXSkVg;xev5}9WNuHqVlD7z zzQwC=9XasziOB3lkvv{)`Q{!u4$q6-Pl_;^{BlZ>YLegQZhpSwZ+32alK<1xeOyk>_ifrcYlt3A(ZTm6YPz@O(79;PvFX_b@f7Jyr~s_1XL*e(|!$H@+ z*RpvXfag@ba#Ky&-x!j|o^t!(`U^XZoWwi=o_`U~Ju{t`e=o0FY~^T67{0vs!xD(^ znoVV|{)4}BW^ZI?{=r{q!@RKNS}QbgSBYl-mo_HcQSa~yTErHd#=n1$-#2AjbKeG& z*9)zQtrhfL{zqi19Y{ZWUNY8hxIppCc^{24Aa`Co|AzX~lA8(IQ_Z!t|54{M{|8tc zPWXg%d0^_;r`j0Y9xaF+km}Q)nOLKjy|cz8y+KdwOJleiq={ zD!3AI-yG?|70S?vSl&uYV2s!kb9=L_Qd8r;uV_~@-5rPV?B{Mo&*v%(+$E5;%<{jX z*009gYOk2@mlKPj=(l(*>>$te%h@k{^ZXXws>^;U#s3xqS2J^&>B&KVVb>)EC;ONr z!(Gv?OY?X``Q_x}wi8tHX8rewn@WJ7mOtZ;aS1KErmD znFbn1tzw39Q=58su^x0F2R6S&E9$WLa-{puN}evRUdv4ljXrhQjzgw!BO~&Ua#KXm zIh<1YtyTOME3Ih!Q<_~@vKAGlF0qc8n9BSuDP7O`<;>7-%?jN6GA0Gci#A|cs(r67 z+v%0ObWuD?al^s#Doi1^gD|aG$}p{z={ykLrM?+Uvp?$bsjJhGZ5+Da!8?Q9w}Aim|m$5lMcd+w5|-LBH$9olawy{C?>^4ClBIaRwB*}`uNdVMOhdrSe1 zvS3tAyNh3Qo8ACNrw|e->{5RZXdQ zSHo7-6z%;1Zlva&_i6TS>#6zZt=IDaFM|%xeblY#yp;ZIrryGug zE;)CZw()`fn7rtSU(O|Y)jqkoagJlvZ*mvYLBC~btcgKh(V*XSK1GX75^c;pZNfJg zrDFzq$k7U}tN~EozU$Kl_*+*&N&{S=)UQiQkyQ zc0dR{u^z4YHf9~P=GKi`YkH%B-6sYz)hLJ9#=Xlk+P$7r>)O5moF?#cP@L6YOg8cL zGXJbkjC<|#i1R#lBxoAsD+7EEvQvN-FfdSqEHfSq&zpu+7OD8$Ly7xyZ1^GeJ6~(D z7XxTf5relknB348eS@eU>(trw@{_3tDl zw?3JI|Ndic;Cm#QCb?l~JH#U9q{Q4O+-7VY(Oz12mJfZM`75a_KV(jm9NK$}c52j` z-+H6_pA>h}Qd5Mx>7+8ebCh4jYm2*3B+Qp3JxqB?F{qs{-5qbFX{Qyd#3E$5m#s6- zTw2JFa1~r7fUDetiEAGGlyI$2U~BL0fRdkkjte?RrBBlk!| zmAD&|KB`d5Mhq`t<=v>y`JFRG^v~1g`daSjiR>3y4z@iCUKhbhU2RCcjhjXJfV?@O z##qBffXY7^g+LdOsQV}k@UbhrRzsVqDHFYK@!(dh#2#7ZS6bStnr^?1p}nYPGWfcj z>YiGYZNaxBM$}~QVU}{A?u(YptC#a0MuSI;1}8=aCaZ2ABAZu*`ZBH^zdUUd`gKBI zyaD>}gnl2_pAzbYLcN!(KZ08H8oX?-4DaX1XMWWgvio&(f#kfe_{Em{CBDkc`%1fP zdQS7tNp=sw^}Y5Hge1-Lm3Fb=7r9C^Ekdx7HyW*C*>&Xh4d;A?VSs<;>|m3Z4#ff{ zH*o4#>`)y!qHC~wDmFdDo^W2LNaT{=W7cocBhE}*7jXM9Tr`8DuQEqNIndf1fs=Ey zc{a6yW5q(L|JaNY{=I|*-0y)^9{*2dE=q%iO@cVxxi2GBuSHk=UXNz8>dMWBroPHA zm#?RcecatiSZ0vrYQ7_r+b|_>Cf*Hw$Gw<~_WAq+3;39hq-6(uO78xpdB>P{E$vPGaflW}Q~b%{ZV72X?tFY69Z&963%0g;u!@CMgWZ9IO6bhX zl&#gBg7&f+-q>Au*TkJpxy&m03Ic!TkxpT4)g3`Trcd_GBC6`a~ zS;mQqA@b<>`z}g*#8`MaH`~|%K{eUCr2f|Rh=%?7P#4b$e>@od@ye6SGOX%~6V@BQFtP)%oEcy+rLM&6y;F13O z)<7(1_;rOA-#$KB@&=Q5VUWpW{(r3%ZJ}*ZxJMvD^bVYqFsP4@)5@VYLpx+R_I@I7 zw{MXL)bH1Lf(Y}2Fhf4IPEwnftFkPAx))O{NEH?8#&e6jYd2oW&8Ta8X~n=0*oVc7 zhpv7Y>yfB=~X>}Nj7%PEO+$N+JI-2=jf1~wepwShqZc=-`?6AH@7%nKDQ6| zLUV0O_Cd3Io}EqemqQy49{ZnlyM4ZvsTX+h^-O&~kC##1$2Wf5X05UG>cV^>s%sK# zl5r&ypUdAHgQT#v#_vr#`K(rR@i63N?l2!_xt|pwCjG+}Zr_zGroP@;*}4 zM)m`D1Xp5OB+Vi%KUKPWatW56i{3X$zUc3~|KLIuTfFm_BR~#JO4I%U*G3q=GbaAS z$->H*SJnVVe6NZh6a7EJ#z5g#^l-`nMOM^bzp}5=hLQ z@5RU5-9R;Wu;t9N`b({wIV#nEPw7w*%!krecoArn)Su0w8p@4=&F+pc)~5%(`QDh#?$nnXHtItmcqjR47G^0v22g))&m3)3 z*@lC}`H)`#SE&_LxO?w2qPEelyw^6tVk~N)QLR&WDODt`qi%;v|hK278?z&po-lmkU-_6B$cD2mk=#Abl z7BHCFZ0-xAL{(EUyYjT>P#%w?%s0+p{iW}Rpoea%Ztu#}Cbh+#{46UDk^^lM(TD$YJ5!84 zoOWx z`^VLh)w*miehWtKXZ(D~*FD`T*ZQm|L=H~eP~BSAuHW?OzgjhM^%3?tt&Rj;+Dz38^t>nv*k7Ms@80L(`r&5;w6P!3SacMc;2iGnF{E+^wEBHmH`|J3^6OH6p zQ=y});xK(~kw+N{r-jS447S4<^A5N&G(jx7Y#zEh$C~bi8vKPSHkt6dW|XN7rz0+) z7q9>r43`PF6Rz~7GIa*<7H}o795zE|l!dBmA^Z$74d?=90gIrFFAQlew=&zDbIMfi zP7)p>)cI>QWS!UXr~jeX?fwOA>K#PjGgml%=HmVaggPHvL)Lj6Tm28cZug%!L?qY^ z5!}WF*WMg74K8fTfSVvs2l_y61pi^UHITD`mw@AdLxCOP+_-$;&KrJf;qo|naIM0M zF0!vrp*cx*8VW7F<-x&)3!ag?B-nNztWddo5#RgLozDF?)NR%reiUvl#qrPJJkfZRW(iydoY#>GHR)o7n*L*jx|2KjO~4OpdDJA_ z*y(_aCqI|JF?!TXaG%IR-$e1K9pRp+Eo5%=Wru;9uR}pD#FOT{bTr~dT;F&2g zdDME8xE;6}ZkVq}oeP(Mj8#oMrk+Q=fH2%`g5S2eu1A%8JnCLVR@LzTi+>s-tQzhI z)Y1pI|N6ZskJ=6HU|Wwm8170NkNP28k2W5g`b%r%6fOkr^GJ_61g^N1N6mw419zyU zM;!-efP1e6B7(aR;Za|Ps}J`{b39W5ccYm{eHE@boHN{`j)E)2$FYJMdeohPNEq%< zd}k;ZE)wp$1|Id<1~y!;*7vAu;kv?|^Y^IJ;mmN`&G;{Y+(<;Ux2Z>M0QXW8k9wdn zY7K65m`B~$$fNqgy%6eAkK@6IFt|Cv9`zXhi)#Zn8yV=_8=33nQLiO=)J|}xdV18U za6UHtZ0_Mvd&B*f=uz!(jp4qu;>DA2_nz>m%i-F?9edoPPK1-;KIo1P26rjJqt1eB z2=`exkD3a1`!SFD8eA*516@7p7&uS7M|}q_9`0-x6avl<&bF;HuIk{f<6iY_I1Aj~ zIFI@?+=GrDbtPOZ+z%Z*>SQ=CxDR8|c5uJMpy}X3;69H=)4>(vkI6i^HgJd9q3PfZ zaM9CHJDDDJ5}X3JeyT^cPDT4)ei2m!7X-KS1+){~pLp^-7cLU+yUA!LIQ4ln6I@rg zbCb|aaAvse6Fq8QxZfvu)Eu~QxP8xg)RAx{<2~vsxDIe9#(C5!aNckqjrFKK;fkKM zdDMB&del(3!Z99oDBRr)kNP@XTe!ocJ?eNkBi#GXU^u~D9OY4G!Zm;^NcX4%;Qkot zQ5VBS!0mt9qdo&yHo~K>f$Ic!Dh=%o=L5HSIGP*ow_#{*8-5zYefbpH8}8mvv^QLP zxMM@m-f%M92T!8C;VunEd&4z^`z#gh4R?DG+8eGF+<}2;I=CAH&@^yg_ebX8diC?D z{PC@0Dd?`kLih$3(dpoh z{v-h-uAB% z)G+)%virA0mmxD}C_~$TVNF#`;oRAD&m#hqza)AF{5{eoAlH|o zRJBJJRowvBsI#i>?Wn3N@Fdrq7*(wU_eZpcVZYESrm$hQAeBFtLCZH2ct$TnYF#=E8Jl6sPq@qVd#AykrH0p>T7 zq#R&T6G?g%nATL1mH_R**MOUV%YZK6>%b{3C5Zu(<0NSvaLJRBbO@L=Op>0-hkcqP zS=S-HrzL4SFe+V=ntf2Jj(ZXJbH%`uW054+&QdiK8FB3@RSSTbpO>nKfiZ=pste0^k{75zq~kzARPCfo7oD&xQoxiNHT0 zsla%k9oQe}0A>Kqdr%`lC-6AX1uOzu_m--`X4nC(zwkLs8me_<^z`j&4)|X-9RhwI571{sankOC^8s`c#gpy=)&zaYk_tbngUqhDz&Mm zhDi7%G5{*zBWC7D1guo$=#X#E{E#(6hJO&BtA1MvV|z+x`nDpeC2!ydQ{SY*460PtkoK@DKI z6#x@}#lTdcy%4U``M^}*PGAA>Fwh0O1e6*h9M=N_A~60P@I*zx0GI?cH^Id* zFau}@<^wlzJ@5cfYKnadpatmF0(QU{pk%>j4X^;X1XvV~0s$?}kT92RIjC=onsIMD{1AFW^jbOK#%%T(M?CKa?VQ}+NJ(WsHu;5(G58-STz%G8`T z$UwI;HK8r4v`3k`EeiUiGS$)!d@s}-uo!3uI(nC>yMdNul)OFS1t!?wDS{^rXzqs+ z0$qbph0!p;_Ck6LB6$S92p1Zr6L^*D zfhEBFZ_$@}AmhL^p!ov* zxRFC(25=A14s-!i<#IKwHv-_(vR0r4I24!(%mg}tIh?OuuI>i9@X9Qy4@!m?e1!pv zfbl>_9fSjB;2k_OfEK*H>^RWogeN!|3E+Y989=9Bx#|Sw`_UQ z0lI)beNpn(%GH7a;QJt>1CjA3VK)dF!Iw*x0rTgUt81S`{5HIa zA85`&dP6Y&&5M!X5R~Y(ay4}*BFrmSuL27k_>}KcD8YN>>ZW1P=a;Kq!@+-6u3kt( zM28@cLbGdo|n0g%vjzWfjJAnnim#de6PGB)G=0>?1^9*X>pK|r^GZ_B` zcpxKfGz`ki)jdE5o|2I=5P=670>;#;P^B@@dsV38fKnaoq;a`!g<1|Q2&quh#zGFQ zP;-DT;2JLDyX!vV5WY!;Y5^7i<2W{j9ngXQGWOWuv4_KOJW7afWTyi&npddXfcdQ| z)QIO$!Zz6K0%o+WPz!)kRE2r~nA)yFEde^Cu>m##dVH%mZX&9-M}@i)n4eUkUII#e zD%7Y+h#zPLno}xN2T_ui=W%cARFrHo0s=FE8-PW?OPrrlp$23^2BrcFrdFuSfW^R_Kq<3A zJq&bCgWWU~XnKX335=OppZVtx3^AG~gK?#pl;I9Pa z%!LHzBIjq3Ltw#m^m<^b8&x|G{QKBRZRo~(KSYPvVzFv|QUUUE{pT+K%dm6(wvzhzl#|E3X zl&a`h+QFmYH(ksHr$q^wV;HzBa3PwN;P^e1IpFG5;gZ1Fnc*9`LHD&#b*!SA0@Yz~ z{#7_TxHI5dRN?SMgjCE1BZ}wBp{kmTJy4Z^YgEPD1LyYxG{APY?_0TZ<0;U^^5BWS=4|6sRJy3Ep|Ei<{{wP^Hp^hrgPY*sg_{f2VQ?cg zM&cJ6k^@}8$86vMIn6TCyfkW1Ubf1a5&CBbjgE^=_lBImpo7|KY_g&cJd^uEB&M#_jn90yZiDC;NYFxjh`vtx@wHz z%E7Gx_d0RO+!nJ!z$x~_NhCOtg`AQbwb_O%_9az6sU24Q=JQ}@*fXc( zX9u^eqT@*i*O#PixXK@`-t&GXK*Uu3^|9Xo9(eA6zvT zs-3vjubK@9xPWtP;Ay!BUd6ZkG&(0mxWFPE3tY^2Qlwfx9j6A$y@-L+-8b&*K@3LdCCH=x4KZ`Lk zkW^sg$+9Ah&GdQ%a{EE$!i2+PvTHM1MDzvX@|Ej4WkuUywsl_;cLRI(CwYZD5huZ0tkWfVkh}-pEVlHL{Dz#0T8&_hFUvp4F^$o$S;b}fGuaJq zSmCap(G$G+4(!~(G8LcwIx9C~Nkww1d>q^+_EwSHRw;+qE0`TElH15p7D<}O9u~wtGB8+A>dDw|sH^XtiL@>uUF@E&fBTO!zko0yhTugj5g0l2G$ z^RCN14WWG|KUxG_LO#7(Nm6>pGPS3|v(c12{9P{ec7r?~k6W?Xg6lYaTz1R9E9EGq z*AwjM4S9>atu?Q)S%1h~>bT*()U!|)L*6JCw2`E7Y~D@zeR(Ll55B>B zOU_m7=l7&)p;?aszrlSA2qJMuhv8@R)4Rx!H4vKYRA z8F3e<6(_tiSl(TEPKXtYl$^1+!3CM%M+V$baLDLi@@Vhf@a`E`rgjo_==?#h!#?^; z9@sdl1BS$eGO+}}kVr*yUqIL-@cGRDZ?v!li#{wC{+5S(&xLo>lrr@-wm%e;TE#ut zhfTXDH}yUY#jUwz>NMu>lEc`pd+6o?ahSf?m3wH|40va-cK^sh?dHO}WIndbkO)6G zI>6p?v$@tv>&cUYrBlig@hIi>+lH7sV^#D9Zfg>;YZF-nxFUA-yG&qI6<48!h$+`LB? zymO)E!+;+=!^^;Bfvb9o$p?1;oHl#IhUao8IB7Xs_(1L}o4W9Re)54lI(#C$3D^J| z3oRdIuNsZR_%P!s=Rk+`Oo`mQ-8OhHzznmKcJP#);I4x6BaWBp47eh;u0#%!`Ge0x z+1?Vl?HEfunr$7`8dh%ukpj1l2fr5lbsj?>U%SzGu@0Zicq z=TkGhScsL&6TB0!c1}B1rf$V|5S0eZQX%(mvH@KF@iGX8(XCMC{ z2NkZXke@Kf!8l1KuxlPUw+`RgT=r|3dMA+iR>1+TWee&Z!uHpr%7T7nIgRv|I)#ub*UwJF1yz$9=n%s)t(+HNZF0&1}@IT27WJxu%02xQ?d&rdUyy59XEmxK0_!f zJssXn2g=pel%W`4Cb&4(JyeO7H^7_9riG##6~jA&?G06K%KY!!2)4ZuI)`;6XX}M2 zJ>@0v;({ei=@)VV-s6`a6`dFJ7Pv_E1=O~LbWEtfl&gPGqP%8O!3`}cS0_~A#(^sU z*PsfQ1#SR|KwVEldQL@N4x% z=7LKDhXJo0JTne(E5R+O!fgO&{;gbWGlA!JyLk?yKb+Kv9FoH|qO=sUVQ@Y4;xH@n$LvtlaPKEaXYusGvC@+B* z8!6oDgg1`mHHU3Eyx2eB-gum(!hcsH=T2xYh& zHV#+B>_&t#Rd&Fe#74EiST54M+qpMpJWs2lg@WAzcqg*AS|TkkOblV{Y)hqIoiup+ z`&Ov4jBMaNxj7rq3T4~`axQzhmD0`I4X;oA3Uxob-Ck+Midre@@(lD5OoEY^`7Xfg z6I`LSRHYfPWn2z{g1VwB|ThwXXWPW{Oh*J7^^FIUv;wsc*Y;cqk7Sq;Ht_B;SD))MW| zS?|GXVf))DO}&F(Ku^d2DcY(bm>Jq*Mw|=o0!wL+Kt=FwVB6cHJYiVqB(odsm44n+ z;LXBc8-Ma`F0Dc0iM5GQo{^pK#}($qDDN2LjA@wW zSi26eE`S#!rvq|(58fEIzk@Q}d&*0QW12^O$OdCSgr#;=a6JX?Dx234-ME~q*%5f_ zBu~d+p6*ds7}-7p+IwIJr8esxr!-6g#Nn+WF%YK2?NvoG9Lh!J0Zbzc#~P{&hT!67ahE_GCIU(CWg>1+##to zjp(fwa3*%UGsZ_IyjQ=#-I{^?d>qckc2SxJ?Wp5hVi<%aZBO4Na1LWX-(o|p>Flj8 zN~4yy5F!mXCqBg^)Glp}gZRu7Z@@(M3UUiwe>3~Bi?Ye^6h6z0k+3~p3B5Vj_aCX6GDCw!c+7vW&Sr=w+@Cvc1-VjAImLI)uue4lVV z;da8^ghvQZ5MCg>%wm(3ppeWiq6X4p7ZJ%9T9fog(Lfw?qQVn%; zwx6pf##887)kC*pce#2msihj~wk$ja>VU2kI;(o<$!svxwrD-=8tPBlh+xiFM6k|e z*G;#t!6y>$oLSwz5ApUI`~bl}Em>JZ?=exk7J2_QT%D7 zwoDhnboD$o4Ql*Zvb3+##WtCS{CvWdgb{@Cg!eN=hTNj8#PMsh64L4;9+L)wb) zzmQ#;;B8WEGB`tutAtMwf1Kn2B;O|aZ^GWh|44FOlA92IOmp9}BtJvAN#ol}(uZV_ zPxu01CgEa2?0`LqZnJ{K)r4;mt|gpHXd`@?a28<};roOe2-g#CB^*!r+(`I^z$oc7 z5q}c4v5J~qJ4&EFKx@Awuh?O1VW`DU_QyqQFJ>5^MAzE9h_j7Z>Hx)D>(fOtiw%?8 zJ+j$9K!}cpfal^MscPe&@i|_%VhtQiUSD&Tyg4HM9LfAn=Oyu!IBohuL97Q;R zFoPOn63J7SiN=^ra?MUPlX$(;eL}L{8Rv0%D6(lM#dN}d>rOSh-9oaTMp(TU`~OET zX5mAWpxBz7QIACo7D>`Or#`6gChj3hQ=3XB0j#UEqb^O%Mv{X_u0?Wll1(H>lPu~C z7ZW6li3^XRv&gXDT7&n4NHF2~u4M28$&Zmdlw^H7Y!b=*`kfzhN!B)MAiqKKMzS7sv%kNghS| zHY8({Pdhr1Jep)HWS+j1K|~4}j3Idl$=F}hj%P?7OY$U=$B{gPEPX^d#(vGbpW7|kOc9J}qBo8NfF3Dp^o=5UzlIN2=n`BY%=zmLzu#*8Jc>&4W zNM1&L4MDlMWze@6Lk{1ivCRGrzgbeCEE~<1X$w4H)Msh2Xb4l(( z@-mWplAK5KAd+7vc_hhiXfo5wfkCVKS(w8m}v55?>lDwJZVv@Iz zTtV_yl55j-)Hag+N#0Jfh2)P(jwbmNQGQA4PDBA2JVo*jl3yhGQ<7gL`7@H=CwV8y zn@Qe9@-C7;CwV`~g5|nACSC<o~~x@{g{!b9wh8*~#UDmGbA~m5E9%Y-DPCAuRO;#h-1S zj4iSNZZf>q9@-^g8B?JdF$J0sHf@SB+z`eMtjzlbP)%9*3!t!bIazsv?S4TCHcVtE zIn_#7O?nYld)a~)LAB*nA7+_~O_;+~qK`zHSEeHT;i(8enfr$uqDA;wnF!yFEzbm% zC{l@>2CF_SaT=%r!s_BQSPfx!IW2F<*6B)-v3L?|HbcQ1 z#o1dk@CS^8&Q=#{iMr-z9=YhS*}7L7P*H{A3VjMg0BsIO-CA z7rYT~AjF?zGZ9>37iTKbAx^RiA*-%N5jvlRzXB^e>-vh)r*8)Jw>F4_AG63xdS0Z_ zLeSDu@H~y;dxCfuGC$rS-f@i`eMM=Xk~v9)^A~FA0LAAbK7e?=ECn@qy(;i`WEOIn z%0^@<(V-TyilWfXDOSfM_Cc1?KDJ2v{0japqEf`8VtH;IUkO5AQu0R&I4?27EbQFo z^M@pG=x45Fq)uhAP}?l~gj%1*KPGh%@%dU{JakXIU3+UO?);)$oG0Gp6vP(dZ|L@T zi$6ck5pOby++`fl2%FR!hWuzuih@JJaw`RhA>MIB5GU&k`@Y1-3=yr=se$01CEnga z@Vz1PV;b?9mqa|LHGVQ)LqLlB!6E>@7@{3`;icALi{^;dHWR;v>|LFO{XYVvL&RGj z2t)q1b$;-KczdL>9kY3REEo3A)fQ@h#4glVpf+Yiv(nj0du(M3v-C(|Hk8aVOGWIf z>IgoEc(W|*Z&NNE#M@^JzAaVHXT-bsP{A>Za``RsG2JzuZJeX{hh+8?M$OQh_@Q^) zNOp1#c7f5u<|;v<1$n~iHboVth!SN!$2!bao-tV2^0`VMgN0oL#1 z!G9u>lDttrq8ksMr=_)Eo)XkIW)1R*!%S8q$*QQn2yLh0zXG1mHV!82!^r-1vd;)$ zzs^(I8!#KqSE5^IQnb2RBQFu$N_;p4@4ymmN>F$TsWU0|AW~-#pUT$F$Jp{Bbv;t& zk-B)b$W$Ql>xp*}Pfb-huQ-U;li?q6;)N?9UeC2Y-((8DzSNi!I6(m{EX9VFNM*}y zN_4Dq0;vf+u;MjdT!Z)b7JLl5%R^&QwJW2Ij$Z6-yK)ZAI&A^Ebn_^vQrC`_Mw?Hy4=)Gyc=_~jBFOVP-$<>T*>+_RAz=2^EnsCHJbk;fZVQV zBm0rt*}r0SvX%BB_D_VJzGRwCcByP|Hgc7@U8w5_klrJ;l`View0M``^F(_{Uy|Cn zhkcr@>>J}+DijT=hAJzVc)hUtRGmS*-aGZvk(GG8VfArjVJCBNe^ddf_49^)K5;B% z9Ts6Ous#fhMJHV|*G!SB@LPt)SJ zN%}>IixfpdA@!pKuId4v78%m#ZW%paYqgPr|CJIBB;J)S_@AkHB8V>-E%;*^U`47| zSn38*0{zU}g#y^eiU5Nsf&O{|#OoIwBZ+s66ZXx?z5@-AG^znjx*6EElU zX9-?kNSleb&t@Mi#xy3elZ!Fo6fYEJ>6Dvi$Sie<;6th2^x4r$#nr2GD%oegCG7L5 zeHroQcLd*|P}G7x55|ai*n}mDzpY67hyWe|r@%)ju=OLH2yy%+!b<$jIlOGCPYT|b zM#s;@XE+5<=XdFr&W{)T8OrrT@Vs~DZ_-MQ*Zxq#{9{c#ftWoaz(ML|jfi)CBlwpw zzwzT0>I6m9$@JlT+Q>y}Pf>ItOSp%PQX9--p*Ci2V109Og4h|)X6Gt1jm}Tm zU%5(4qo*kgU8XeYD|Hohl11UCW3H}`Ds#OhczudqOuRivv=xmgi4k8M$rdid2`Imb z7!p$`xBT@>JiZuqWEmFqj#ovrc2YM%C27fh#_H!`;NlV>533v85uJz3yMAD=fwehL z2=iVPYCDB;mW!6wPte~IUo^CO=6}%bPl*T$D4y#&A15-+FNF9Z<3y(AYNjT#F0U(z zp{Xxuf;3meE%hQJ`#$#O>q>9`{4$|$OOd?9ZoIB^8B;V}&;tcXpHr}mH6osg6y0Is zoizC;6aOpm4hKa*{2k&Yw%`qP1M?oN8*$KlECr(BcoA?bA=D}6X(DtF0TRDD;OfjP zf;dBb3h~Y$Q6t@nPb1#K{2ll!JJlul$4PA`wY|H@U91Q#t=5xaBOKb2cO60-?Z2`w z9q20=vqbRr6iY+QFj}UVVL4x{d?5I)q<)Olc!U7zl>EtpM+ei6G*Y`h6mmVPsBt=P z5ySu*weyL$u;n~8iF&3!EH_oE_d{)TU1C2j$F;6KLKKZZ$gdq(v}$?g&w}IlgBGzq z#M|jAHC@w6QWN3}*x)yjYDQfVPhaXZNu)-rLTz+au(#h-+P6-w(YhO9<}ZcfM*Zro z9?9;$sWctqRK)P?Pjz!%Pt+rl(HG8FiFeUP^)AZf-^4q97Q`=;C*1m>%^5Q3P*iU8b-X8Mv{IWm`J>t8CIfmIhhECiA*~d>(MP1 z{A!vB-_@gIDJzxel%i14GP5bzSv?qEEaA{M<$fdHFAYys2;GuyF>H>ZakU4<>7e3rNx zJ=oPkSpakBK_!uIFfjN zhcrJhqiM$^;`7-$L>J;1D1!Y>ZJ9@EJfg_e&Uqr#VT$!rQd^nfZ6(NGdqxx%+7r`2 zyift5nDuSND>R>m0}87hwa~|Sd7Lk?XWzy?SmxWJAR>MIQ$l((&C&4`E|vIHwjW6v z?d{l)Z!5jgE5hGFySnCx@N@|+?bTCR&7OP*>j&#`wh)Lj^A4CBi#}sVA*RH9BVzAI ziS)p=x7Ho#`G5V4old;9t*D<^YT@a`J6Pgc-ZyE|=I=P+2Y;a-j}8~rP=}_{ssg8N z?Kq&PwwZmfR_UGMw2E*E)Ce*z_<3+wuCQ-S;R1-yJT9`q-{``RraI4J-$icBy9NKH z&`Lc?ZDC{HRT>!T<6gf8hG}daY;8HZjtbtK!n{j-MkA4@a7t<`@z%w{uov;46YqLa z@arg^W8nGJ8(CwKhlPwy0&;LTD9d+?s(pE6I6G+U$+LxC9u z=I?ysM_mEZ7R^3XvVSA&EyRD$2EVTajX6TW9Mp#TS^u&g-D%Op`Y^vuysJ#`e^7Km zO-0=}9tdIy@h#Z8d{kXmQag_ceiZfJ!Nj{piS`>q{4>PcrwV($G+D%F&>8wEO6GMv z{t(ekmJ`q4|B4>mUdo`kza=SlQvgSWNU zdE!kl@Hd7?kz=SA5bw_n>o6uFpyor${*BL*yh<&DMU_UO&a_j2BATbB33F*R z@#dEVv5xpn#Anc7E^Uban#FFw+;D-^PUtmPB`xZttDLvw(>G#LnmHgD6T8~Pv|r6;gR#NeTbCK7Kc5rjVX zy+XWoqu}+folU&CX)P$Qex~@OH%Y;t`r`*S`LyFb;`y_5{LmxXrrV!quYIVrjNMPN zwPP*KZkj;@X{J8OPY|-cZoI^WCFqQW^2mw}PN+TB&}7sOaLCMEo$* zj+Vrm-!f`)TjJx1FDey84)Mu?ZzE;=C;|+sB{akI0I7nAqX3iHx{r|G*`&79%I#Sy z<|5)VPl@RC_5UjHyu$?7=*Qd0-f~dHzfu;spZI)Qed}}8NsX6SmyI|NUxQ#qq*-(x zrYuT#DR8DDa2{0r8&z&!4|Quo0MqVT3!9C;Pq{XO~hO2s_ZbW zPzouTm>Ly%jO;V$5>lTKZjimThJCqaFR=%2Vt?1%QWV)?6^)%vd2FroPl_7cO?)@- ze01hNE6N&472J>PGuH^i>16*j@z(W%SWEU31drD`zAhB2D8L*jwBb+Bed#T=lp=Ca zWm?I8HSy9@BIZ0w;3MMs+cWt=)0iK&X^YLunJ)ZzFrxt0La9 z0;Dg9cW4tW&e^mHBz>zZhKUSyq7wW>eCA1!;ysG!Ht`uX67Ueup92>n8-2l3J}!PALU8ce+PL%}bhc*by^uS#vx z$s(0v97Ps(@LD6)SUA2(_Ga2M3Mc!wb-t^pqy1D>8;O@3!Z4fc3k7eJifNc$l7;37 z1;}hHVpu@|ekR`Wy{PjW)Y$jH^YwAfc~ip0C9f(A?cc7Zc!G(yX7Dy`j?X&K`k)yp z?6^gUA4!y+ zTKVBUPkcd%;NK(rtKgeyQwM*~Ag>u0b)iON;TFoMESoaO$l(%3j|q^b5^w!n5P#GaXcvK{3_9Ce$$k~v zu><{ngB~5Ni_j~y;}hZ~YHf;5IzW8p7GXD^?9UQ!p&9yF;;#~Kr)}Hkh`%fNhLU5g zV7eLws$8K}cl~yvTBXjSny9}>&4|yW2}Q4gXyP4IZxFR3k@%wiVuICoNXHZJqRlFA zvX{m@JE`4^Q`wzQmFEmy3Wt5BTnj5qcPY#K3xB_&jHzWD{~halO=(|e30+rVD}LcM zrMJ=fCOgV`=ci&O#b2Gq>q=+;V7eJW$Na*S>x#{Yjo>40rHi-gQ_=pjnD-5(iy?(2 I-cVZoKi5O-g8%>k diff --git a/bin/onyx-js b/bin/onyx-js index 8bf494fb..90377bb4 100755 --- a/bin/onyx-js +++ b/bin/onyx-js @@ -56,14 +56,10 @@ if (isMainThread) { wasm_memory = new WebAssembly.Memory({ initial: 1024, maximum: 32768, shared: true }); ENV.onyx.memory = wasm_memory; - let data_module_bytes = fs.readFileSync(process.argv[2] + ".data"); - WebAssembly.instantiate(new Uint8Array(data_module_bytes), ENV) - .then(_ => { - WebAssembly.instantiate(new Uint8Array(wasm_bytes), ENV) - .then(res => { - wasm_instance = res.instance; - wasm_instance.exports._start(); - }); + WebAssembly.instantiate(new Uint8Array(wasm_bytes), ENV) + .then(res => { + wasm_instance = res.instance; + wasm_instance.exports._start(); }); } else { diff --git a/bin/onyx-loader.js b/bin/onyx-loader.js index 017dbbb1..e60ae573 100644 --- a/bin/onyx-loader.js +++ b/bin/onyx-loader.js @@ -78,9 +78,9 @@ function launch_onyx_program(script_path, call_start) { }); } -function launch_multi_threaded_onyx_program(script_path, data_path, call_start) { - Promise.all([fetch(script_path), fetch(data_path)]) - .then(function(xs) { return Promise.all([xs[0].arrayBuffer(), xs[1].arrayBuffer()]); }) +function launch_multi_threaded_onyx_program(script_path, call_start) { + fetch(script_path) + .then(function(res) { return res.arrayBuffer(); }) .then(function(data) { var import_object = {}; @@ -90,15 +90,12 @@ function launch_multi_threaded_onyx_program(script_path, data_path, call_start) import_object["onyx"] = { memory: new WebAssembly.Memory({ initial: 1024, maximum: 65536, shared: true }) }; window.ONYX_MEMORY = import_object["onyx"]["memory"]; - window.ONYX_BYTES = data[0]; - - WebAssembly.instantiate(data[1], import_object) - .then(function (data_module) { - WebAssembly.instantiate(data[0], import_object) - .then(function (code_module) { - window.ONYX_INSTANCE = code_module.instance; - code_module.instance.exports._start(); - }); + window.ONYX_BYTES = data; + + WebAssembly.instantiate(data, import_object) + .then(function (code_module) { + window.ONYX_INSTANCE = code_module.instance; + code_module.instance.exports._start(); }); }); } @@ -109,7 +106,7 @@ window.onload = function() { for (var i = 0; i < script_tags.length; i++) { if (script_tags[i].getAttribute("type") == "application/onyx") { if (script_tags[i].getAttribute("multi-threaded")) { - launch_multi_threaded_onyx_program(script_tags[i].getAttribute("src"), script_tags[i].getAttribute("data"), true); + launch_multi_threaded_onyx_program(script_tags[i].getAttribute("src"), true); } else { launch_onyx_program(script_tags[i].getAttribute("src"), true); } diff --git a/bin/onyx-thread.js b/bin/onyx-thread.js index 881b2ee6..f58a8fdc 100644 --- a/bin/onyx-thread.js +++ b/bin/onyx-thread.js @@ -31,7 +31,7 @@ self.onmessage = function (msg) { WebAssembly.instantiate(new Uint8Array(data.wasm_bytes), import_object) .then(function(res) { self.ONYX_MEMORY = data.memory; - + res.instance.exports._thread_start(data.thread_id, data.funcidx, data.dataptr); res.instance.exports._thread_exit(data.thread_id); }); diff --git a/core/builtin.onyx b/core/builtin.onyx index 27778d6d..7ff48650 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -148,7 +148,7 @@ cfree :: (ptr: rawptr) do raw_free(context.allocator, ptr); // for forever. use package core.intrinsics.onyx { __initialize } if initialize do __initialize(res); - + return res; } @@ -206,5 +206,5 @@ Code :: struct {_:i32;} // This procedure is a special compiler generated procedure that initializes all the data segments // in the program. It should only be called once, by the main thread, at the start of execution. It // is undefined behaviour if it is called more than once. -__initialize_data_segments :: () -> i32 --- +__initialize_data_segments :: () -> void --- diff --git a/core/runtime/common.onyx b/core/runtime/common.onyx index 6d6f5e4d..030d4d94 100644 --- a/core/runtime/common.onyx +++ b/core/runtime/common.onyx @@ -20,6 +20,8 @@ __assert_handler :: (msg: str, site: CallSite) { } __runtime_initialize :: () { + __initialize_data_segments(); + alloc.init(); __thread_initialize(); diff --git a/include/astnodes.h b/include/astnodes.h index 24c18836..045c8f41 100644 --- a/include/astnodes.h +++ b/include/astnodes.h @@ -1357,6 +1357,7 @@ extern AstType *builtin_callsite_type; extern AstType *builtin_any_type; extern AstType *builtin_code_type; extern AstTyped *type_table_node; +extern AstFunction *builtin_initialize_data_segments; typedef struct BuiltinSymbol { char* package; diff --git a/modules/ouit/ouit_build.sh b/modules/ouit/ouit_build.sh index efa25c3b..0126c5d9 100755 --- a/modules/ouit/ouit_build.sh +++ b/modules/ouit/ouit_build.sh @@ -6,5 +6,5 @@ [ ! -s "./js" ] && ln -s "$ONYX_FOLDER/bin" $(pwd)/js [ ! -f "./index.html" ] && cp "$ONYX_FOLDER/modules/ouit/index.html" . -onyx -r js -V --use-multi-threading --use-post-mvp-features -o ouit.wasm "$1" +onyx -r js -V --use-multi-threading -o ouit.wasm "$1" diff --git a/src/builtins.c b/src/builtins.c index 27db173f..d49c098d 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -432,8 +432,8 @@ void initialize_builtins(bh_allocator a) { return; } - builtin_initialize_data_segments = (AstType *) symbol_raw_resolve(p->scope, "__initialize_data_segments"); - if (builtin_code_type == NULL) { + builtin_initialize_data_segments = (AstFunction *) symbol_raw_resolve(p->scope, "__initialize_data_segments"); + if (builtin_initialize_data_segments == NULL || builtin_initialize_data_segments->kind != Ast_Kind_Function) { onyx_report_error((OnyxFilePos) { 0 }, "'__initialize_data_segments' procedure not found in builtin package."); return; } diff --git a/src/onyx.c b/src/onyx.c index 9b3eca83..7c19d377 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -65,7 +65,7 @@ static CompileOptions compile_opts_parse(bh_allocator alloc, int argc, char *arg .print_function_mappings = 0, .no_file_contents = 0, - .use_post_mvp_features = 0, + .use_post_mvp_features = 1, .use_multi_threading = 0, .runtime = Runtime_Wasi, @@ -120,6 +120,9 @@ static CompileOptions compile_opts_parse(bh_allocator alloc, int argc, char *arg else if (!strcmp(argv[i], "--use-post-mvp-features")) { options.use_post_mvp_features = 1; } + else if (!strcmp(argv[i], "--mvp-features-only")) { + options.use_post_mvp_features = 0; + } else if (!strcmp(argv[i], "--use-multi-threading")) { options.use_multi_threading = 1; } @@ -511,7 +514,7 @@ static i32 onyx_compile() { // to be fine since the browser is really the only place that multi-threading can be used to any // degree of competency. But still... This is god awful and I hope that there is some other way to // around this down the line. - if (context.options->use_multi_threading) { + if (context.options->use_multi_threading && !context.options->use_post_mvp_features) { bh_file data_file; if (bh_file_create(&data_file, bh_aprintf(global_scratch_allocator, "%s.data", context.options->target_file)) != BH_FILE_ERROR_NONE) return ONYX_COMPILER_PROGRESS_FAILED_OUTPUT; diff --git a/src/wasm.c b/src/wasm.c index 197eb3dd..1d1a20f1 100644 --- a/src/wasm.c +++ b/src/wasm.c @@ -3176,25 +3176,20 @@ static void emit_function(OnyxWasmModule* mod, AstFunction* fd) { i32 type_idx = generate_type_idx(mod, fd->type); - WasmFunc wasm_func = { - .type_idx = type_idx, - .locals = { - .param_count = 0, - - .allocated = { 0 }, - .freed = { 0 }, - - .max_stack = 0, - .curr_stack = 0, - }, - .code = NULL, - }; + WasmFunc wasm_func = { 0 }; + wasm_func.type_idx = type_idx; bh_arr_new(mod->allocator, wasm_func.code, 4); i32 func_idx = (i32) bh_imap_get(&mod->index_map, (u64) fd); - // If there is no body then don't process the code + if (fd == builtin_initialize_data_segments) { + emit_initialize_data_segments_body(mod, &wasm_func.code); + bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + bh_arr_set_at(mod->funcs, func_idx - mod->foreign_function_count, wasm_func); + return; + } + if (fd->body != NULL) { // NOTE: Generate the local map u64 localidx = 0; @@ -3253,13 +3248,11 @@ static void emit_function(OnyxWasmModule* mod, AstFunction* fd) { WasmFuncType* ft = mod->types[type_idx]; emit_zero_value(mod, &wasm_func.code, ft->return_type); - bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); - bh_arr_set_at(mod->funcs, func_idx - mod->foreign_function_count, wasm_func); - - // NOTE: Clear the local map on exit of generating this function bh_imap_clear(&mod->local_map); + + bh_arr_set_at(mod->funcs, func_idx - mod->foreign_function_count, wasm_func); } static void emit_foreign_function(OnyxWasmModule* mod, AstFunction* fd) { diff --git a/src/wasm_intrinsics.c b/src/wasm_intrinsics.c index c563d51e..f39ffe21 100644 --- a/src/wasm_intrinsics.c +++ b/src/wasm_intrinsics.c @@ -410,3 +410,21 @@ EMIT_FUNC(intrinsic_atomic_cmpxchg, Type* type, OnyxToken* where) { bad_type: onyx_report_error(where->pos, "Bad type for atomic cmpxchg, '%s'. Only u8, u16, u32, i32, u64, and i64 are supported.", type_get_name(type)); } + +EMIT_FUNC_NO_ARGS(initialize_data_segments_body) { + if (!context.options->use_multi_threading || !context.options->use_post_mvp_features) return; + + bh_arr(WasmInstruction) code = *pcode; + + i32 index = 0; + bh_arr_each(WasmDatum, datum, mod->data) { + WID(WI_PTR_CONST, datum->offset); + WID(WI_PTR_CONST, 0); + WID(WI_I32_CONST, datum->length); + WID(WI_MEMORY_INIT, ((WasmInstructionData) { index, 0 })); + + index += 1; + } + + *pcode = code; +} \ No newline at end of file diff --git a/src/wasm_output.c b/src/wasm_output.c index f6a2ab61..305a8b0c 100644 --- a/src/wasm_output.c +++ b/src/wasm_output.c @@ -14,6 +14,7 @@ #define WASM_SECTION_ID_EXPORT 7 #define WASM_SECTION_ID_START 8 #define WASM_SECTION_ID_ELEMENT 9 +#define WASM_SECTION_ID_DATACOUNT 12 #define WASM_SECTION_ID_CODE 10 #define WASM_SECTION_ID_DATA 11 @@ -28,14 +29,14 @@ static i32 output_vector(void** arr, i32 stride, i32 arrlen, vector_func elem, b i32 len; u8* leb = uint_to_uleb128((u64) arrlen, &len); bh_buffer_append(vec_buff, leb, len); - + i32 i = 0; while (i < arrlen) { elem(*arr, vec_buff); arr = bh_pointer_add(arr, stride); i++; } - + return vec_buff->length; } @@ -54,112 +55,112 @@ static i32 output_limits(i32 min, i32 max, b32 shared, bh_buffer* buff) { u8 mem_type = 0x00; if (max >= 0) mem_type |= 0x01; if (shared) mem_type |= 0x02; - + bh_buffer_write_byte(buff, mem_type); - + leb = uint_to_uleb128((u64) min, &leb_len); bh_buffer_append(buff, leb, leb_len); - + if (max >= 0) { leb = uint_to_uleb128((u64) max, &leb_len); bh_buffer_append(buff, leb, leb_len); } - + return buff->length - prev_len; } static i32 output_functype(WasmFuncType* type, bh_buffer* buff) { i32 prev_len = buff->length; - + bh_buffer_write_byte(buff, 0x60); - + i32 len; u8* leb_buff = uint_to_uleb128(type->param_count, &len); bh_buffer_append(buff, leb_buff, len); bh_buffer_append(buff, type->param_types, type->param_count); - + if (type->return_type != WASM_TYPE_VOID) { bh_buffer_write_byte(buff, 0x01); bh_buffer_write_byte(buff, type->return_type); } else { bh_buffer_write_byte(buff, 0x00); } - + return buff->length - prev_len; } static i32 output_typesection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, 0x01); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 vec_len = output_vector( (void**) module->types, sizeof(WasmFuncType*), bh_arr_length(module->types), (vector_func *) output_functype, &vec_buff); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) vec_len, &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_funcsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_FUNCTION); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) (bh_arr_length(module->funcs)), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + bh_arr_each(WasmFunc, func, module->funcs) { leb = uint_to_uleb128((u64) (func->type_idx), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); } - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_tablesection(OnyxWasmModule* module, bh_buffer* buff) { if (bh_arr_length(module->elems) == 0) return 0; - + i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_TABLE); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) 1, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + // NOTE: funcrefs are the only valid table element type bh_buffer_write_byte(&vec_buff, 0x70); output_limits(bh_arr_length(module->elems), -1, 0, &vec_buff); - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } @@ -168,70 +169,70 @@ static i32 output_memorysection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_MEMORY); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) 1, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + // FIXME: This needs to be dynamically chosen depending on the size of // the data section and stack size pre-requeseted. // :WasmMemory output_limits(1024, -1, 0, &vec_buff); - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_globalsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_GLOBAL); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) (bh_arr_length(module->globals)), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + bh_arr_each(WasmGlobal, global, module->globals) { bh_buffer_write_byte(&vec_buff, global->type); bh_buffer_write_byte(&vec_buff, 0x01); - + bh_arr_each(WasmInstruction, instr, global->initial_value) output_instruction(NULL, instr, &vec_buff); - + // NOTE: Initial value expression terminator bh_buffer_write_byte(&vec_buff, (u8) WI_BLOCK_END); } - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_importsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_IMPORT); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) (bh_arr_length(module->imports)), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + bh_arr_each(WasmImport, import, module->imports) { output_name(import->mod, strlen(import->mod), &vec_buff); output_name(import->name, strlen(import->name), &vec_buff); @@ -258,49 +259,49 @@ static i32 output_importsection(OnyxWasmModule* module, bh_buffer* buff) { case WASM_FOREIGN_TABLE: assert(0); } } - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_exportsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_EXPORT); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) (module->export_count), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + i32 key_len = 0; bh_table_each_start(WasmExport, module->exports); key_len = strlen(key); output_name(key, key_len, &vec_buff); - + bh_buffer_write_byte(&vec_buff, (u8) (value.kind)); leb = uint_to_uleb128((u64) value.idx, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); bh_table_each_end; - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_startsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; - + i32 start_idx = -1; bh_table_each_start(WasmExport, module->exports) { if (value.kind == WASM_FOREIGN_FUNCTION) { @@ -310,65 +311,65 @@ static i32 output_startsection(OnyxWasmModule* module, bh_buffer* buff) { } } } bh_table_each_end; - + if (start_idx != -1) { bh_buffer_write_byte(buff, WASM_SECTION_ID_START); - + i32 start_leb_len, section_leb_len; uint_to_uleb128((u64) start_idx, &start_leb_len); u8* section_leb = uint_to_uleb128((u64) start_leb_len, §ion_leb_len); bh_buffer_append(buff, section_leb, section_leb_len); - + u8* start_leb = uint_to_uleb128((u64) start_idx, &start_leb_len); bh_buffer_append(buff, start_leb, start_leb_len); } - + return buff->length - prev_len; } static i32 output_elemsection(OnyxWasmModule* module, bh_buffer* buff) { if (bh_arr_length(module->elems) == 0) return 0; - + i32 prev_len = buff->length; - + bh_buffer_write_byte(buff, WASM_SECTION_ID_ELEMENT); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb; - + // NOTE: 0x01 count of elems bh_buffer_write_byte(&vec_buff, 0x01); - + // NOTE: 0x00 table index bh_buffer_write_byte(&vec_buff, 0x00); - + bh_buffer_write_byte(&vec_buff, WI_I32_CONST); bh_buffer_write_byte(&vec_buff, 0x00); bh_buffer_write_byte(&vec_buff, WI_BLOCK_END); - + leb = uint_to_uleb128((u64) bh_arr_length(module->elems), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + bh_arr_each(i32, elem, module->elems) { leb = uint_to_uleb128((u64) *elem, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); } - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_locals(WasmFunc* func, bh_buffer* buff) { i32 prev_len = buff->length; - + // NOTE: Output vector length i32 total_locals = (i32) (func->locals.allocated[0] != 0) + @@ -376,11 +377,11 @@ static i32 output_locals(WasmFunc* func, bh_buffer* buff) { (i32) (func->locals.allocated[2] != 0) + (i32) (func->locals.allocated[3] != 0) + (i32) (func->locals.allocated[4] != 0); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) total_locals, &leb_len); bh_buffer_append(buff, leb, leb_len); - + if (func->locals.allocated[0] != 0) { leb = uint_to_uleb128((u64) func->locals.allocated[0], &leb_len); bh_buffer_append(buff, leb, leb_len); @@ -406,21 +407,21 @@ static i32 output_locals(WasmFunc* func, bh_buffer* buff) { bh_buffer_append(buff, leb, leb_len); bh_buffer_write_byte(buff, WASM_TYPE_VAR128); } - + return buff->length - prev_len; } static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer* buff) { i32 leb_len; u8* leb; - + if (instr->type == WI_NOP) return; - + if (instr->type & SIMD_INSTR_MASK) { bh_buffer_write_byte(buff, 0xFD); leb = uint_to_uleb128((u64) (instr->type &~ SIMD_INSTR_MASK), &leb_len); bh_buffer_append(buff, leb, leb_len); - + } else if (instr->type & EXT_INSTR_MASK) { bh_buffer_write_byte(buff, 0xFC); leb = uint_to_uleb128((u64) (instr->type &~ EXT_INSTR_MASK), &leb_len); @@ -441,11 +442,11 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer leb = uint_to_uleb128((u64) instr->data.i2, &leb_len); bh_buffer_append(buff, leb, leb_len); } - + } else { bh_buffer_write_byte(buff, (u8) instr->type); } - + switch (instr->type) { case WI_LOCAL_GET: case WI_LOCAL_SET: @@ -455,7 +456,7 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer bh_buffer_append(buff, leb, leb_len); break; } - + case WI_GLOBAL_GET: case WI_GLOBAL_SET: case WI_CALL: @@ -470,33 +471,33 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); break; - + case WI_MEMORY_INIT: case WI_MEMORY_COPY: leb = uint_to_uleb128((u64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); - + leb = uint_to_uleb128((u64) instr->data.i2, &leb_len); bh_buffer_append(buff, leb, leb_len); break; - + case WI_JUMP_TABLE: { BranchTable* bt = (BranchTable *) instr->data.p; - + leb = uint_to_uleb128((u64) bt->count, &leb_len); bh_buffer_append(buff, leb, leb_len); - + fori (i, 0, bt->count) { leb = uint_to_uleb128((u64) bt->cases[i], &leb_len); bh_buffer_append(buff, leb, leb_len); } - + leb = uint_to_uleb128((u64) bt->default_case, &leb_len); bh_buffer_append(buff, leb, leb_len); break; } - - + + case WI_CALL_INDIRECT: case WI_I32_STORE: case WI_I32_STORE_8: case WI_I32_STORE_16: case WI_I64_STORE: case WI_I64_STORE_8: case WI_I64_STORE_16: case WI_I64_STORE_32: @@ -516,7 +517,7 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer leb = uint_to_uleb128((u64) instr->data.i2, &leb_len); bh_buffer_append(buff, leb, leb_len); break; - + case WI_I32_CONST: leb = int_to_leb128((i64) instr->data.i1, &leb_len); bh_buffer_append(buff, leb, leb_len); @@ -533,12 +534,12 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer leb = double_to_ieee754(instr->data.d, 0); bh_buffer_append(buff, leb, 8); break; - + case WI_V128_CONST: case WI_I8X16_SHUFFLE: fori (i, 0, 16) bh_buffer_write_byte(buff, ((u8*) instr->data.p)[i]); break; - + case WI_I8X16_EXTRACT_LANE_S: case WI_I8X16_EXTRACT_LANE_U: case WI_I8X16_REPLACE_LANE: case WI_I16X8_EXTRACT_LANE_S: case WI_I16X8_EXTRACT_LANE_U: case WI_I16X8_REPLACE_LANE: case WI_I32X4_EXTRACT_LANE: case WI_I32X4_REPLACE_LANE: @@ -553,85 +554,110 @@ static void output_instruction(WasmFunc* func, WasmInstruction* instr, bh_buffer } static i32 output_code(WasmFunc* func, bh_buffer* buff) { - + bh_buffer code_buff; bh_buffer_init(&code_buff, buff->allocator, 128); - + // Output locals output_locals(func, &code_buff); - + // Output code bh_arr_each(WasmInstruction, instr, func->code) output_instruction(func, instr, &code_buff); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) code_buff.length, &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, code_buff); bh_buffer_free(&code_buff); - + return 0; } static i32 output_codesection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; - + bh_buffer_write_byte(buff, WASM_SECTION_ID_CODE); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) bh_arr_length(module->funcs), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + // DEBUG_HERE; - + bh_arr_each(WasmFunc, func, module->funcs) output_code(func, &vec_buff); - + + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); + bh_buffer_append(buff, leb, leb_len); + + bh_buffer_concat(buff, vec_buff); + bh_buffer_free(&vec_buff); + + return buff->length - prev_len; +} + +static i32 output_datacountsection(OnyxWasmModule* module, bh_buffer* buff) { + i32 prev_len = buff->length; + + bh_buffer_write_byte(buff, WASM_SECTION_ID_DATACOUNT); + + bh_buffer vec_buff; + bh_buffer_init(&vec_buff, buff->allocator, 128); + + i32 leb_len; + u8* leb = uint_to_uleb128((u64) bh_arr_length(module->data), &leb_len); + bh_buffer_append(&vec_buff, leb, leb_len); + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } static i32 output_datasection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; - + bh_buffer_write_byte(buff, WASM_SECTION_ID_DATA); - + bh_buffer vec_buff; bh_buffer_init(&vec_buff, buff->allocator, 128); - + i32 leb_len; u8* leb = uint_to_uleb128((u64) bh_arr_length(module->data), &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); - + bh_arr_each(WasmDatum, datum, module->data) { if (datum->data == NULL) continue; - - // NOTE: 0x00 memory index - bh_buffer_write_byte(&vec_buff, 0x00); - - bh_buffer_write_byte(&vec_buff, WI_I32_CONST); - leb = int_to_leb128((i64) datum->offset, &leb_len); - bh_buffer_append(&vec_buff, leb, leb_len); - bh_buffer_write_byte(&vec_buff, WI_BLOCK_END); - + + i32 memory_flags = 0x00; + if (context.options->use_multi_threading) memory_flags |= 0x01; + + bh_buffer_write_byte(&vec_buff, memory_flags); + + if (!context.options->use_multi_threading) { + bh_buffer_write_byte(&vec_buff, WI_I32_CONST); + leb = int_to_leb128((i64) datum->offset, &leb_len); + bh_buffer_append(&vec_buff, leb, leb_len); + bh_buffer_write_byte(&vec_buff, WI_BLOCK_END); + } + leb = uint_to_uleb128((u64) datum->length, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); fori (i, 0, datum->length) bh_buffer_write_byte(&vec_buff, ((u8 *) datum->data)[i]); } - + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); bh_buffer_append(buff, leb, leb_len); - + bh_buffer_concat(buff, vec_buff); bh_buffer_free(&vec_buff); - + return buff->length - prev_len; } @@ -640,7 +666,7 @@ void onyx_wasm_module_write_to_file(OnyxWasmModule* module, bh_file file) { bh_buffer_init(&master_buffer, global_heap_allocator, 128); bh_buffer_append(&master_buffer, WASM_MAGIC_STRING, 4); bh_buffer_append(&master_buffer, WASM_VERSION, 4); - + output_typesection(module, &master_buffer); output_importsection(module, &master_buffer); output_funcsection(module, &master_buffer); @@ -650,8 +676,9 @@ void onyx_wasm_module_write_to_file(OnyxWasmModule* module, bh_file file) { output_exportsection(module, &master_buffer); output_startsection(module, &master_buffer); output_elemsection(module, &master_buffer); + output_datacountsection(module, &master_buffer); output_codesection(module, &master_buffer); output_datasection(module, &master_buffer); - + bh_file_write(&file, master_buffer.data, master_buffer.length); } -- 2.25.1