From 4af2b687e127c0a4d4045eee4c6587daaf5a0283 Mon Sep 17 00:00:00 2001 From: Will Anderson Date: Mon, 4 May 2026 13:24:55 -0500 Subject: [PATCH] feat: native test/assert system -- elc --test runs test blocks in El Add test { } and assert to the El language: the parser recognises TestDef and Assert nodes; the C and JS codegens emit inert no-ops in normal mode and a full test runner (with RUN/PASS/FAIL output and non-zero exit on failure) when invoked with --test. compiler.el wires up compile_test / compile_js_test and exposes --test / --reporter flags in the CLI. Add two native test suites under tests/native/ (test_text.el, test_codegen_js.el) covering string primitives, arithmetic, and list operations. All 22 new native tests pass; the four existing run.sh acceptance corpora are unaffected. --- dist/platform/elc | Bin 503896 -> 521464 bytes el-compiler/src/codegen-js.el | 174 +++++++++++++++++++++++++- el-compiler/src/codegen.el | 209 ++++++++++++++++++++++++++++++++ el-compiler/src/compiler.el | 87 ++++++++++++- el-compiler/src/lexer.el | 13 +- el-compiler/src/parser.el | 38 ++++++ tests/native/test_codegen_js.el | 80 ++++++++++++ tests/native/test_text.el | 84 +++++++++++++ 8 files changed, 679 insertions(+), 6 deletions(-) create mode 100644 tests/native/test_codegen_js.el create mode 100644 tests/native/test_text.el diff --git a/dist/platform/elc b/dist/platform/elc index 3f5b8e40f756464dbbbdd5e4f20fbb4423c3f7d4..4d31bd55904a0f84c50734b8a93df2162ab32258 100755 GIT binary patch delta 151935 zcmd44d3cmXwm;t8A*4fCOaciB&|#5;B$5ayhzNATC=x`5HEdxO5u+kRWE*HSBC;rn z#h5{^LSz&Wl_)AAqkyQ4GGc&nWrU85lCTJf$oq-q2)n@AW>ve|~wMJoTyN zoH})CuR8VimqDLZl~lAO+8^$^;?H0FbT7{}>x;j>CFZ|guIF+ivZW;Xua{M4cdwYY zUNga)h8V)PUQ-Xddo{biez;EUlGOCqQ-kWaP-on&o82E}V&4igMD%-ftlyJBA()ZN zZz5fOb+@Ot6Z#h+LFn6_ZqW-R?M_YMaxGMzu-;82H28=U8tw|y?C%e26H_ljv!5;8 zgY_cRy0BiJ@CbD@>~=a`>fJKgZxXq7Ix<9PV7+eq&z;(#^Dk9LGsqb=i5&xN6 z;7@kBJcw$J|AjLmTnkx(S0Y?%yQ;(W;v!ojt|5XRpn%~EUyN`CiwDK3Yr{KS^`w>l zmr^Kyg@5|j z{yV}o;;NE|{#CE7y1#ytz?n9|2F15}TxYyh4T>uxT(-t%fujW5z)b|ZqlznI1xEtM z3yubEAvhtbctc?;OY><19Og4PmEk^XZCDci$622)cdcCOQl1g9kr95IA$yi9--!6g zDC66)T=jyliScb+uExR_YkZp#_j-I}yz#AHUh?iu?)btfRPo_i^19uU;3b>o#Qs5qfHv;z-{3>uC!P|iQ3f=|WU+_o3 z0|oB~9wPWF;6Sc;D&QF{xC(fj;IqJ!1lzz<1iKp+SLO?j1fC{18n{4kLPJz?j8r~w zSgce&!wn92J29fEiRjJbv3>Q3s;qfMXD#Ha&XLxfHK8N9g zA7Xeyz(g!zM1sM^j7T(i6~hIWGQ5Qe-^g&muQI%)3E#$W!MhkPP5&c?w?b2AlOJn+ zy^PJ>^}5@oK5r1`Ij~Iq(7@;Uc$sP(<@3C^Ol81%dzrc&&TGrmeQ;h}rk;TF+%okF zoTrzmeQ=%x9h{}0Yv}Vl3_3V-K?i3B=-}K9Iye(S2WJ%M;0y*GoE*?K@_DjB2j@o6 z!RZV-IBB4R(-w4a5z5%(7|~PbZ}k-9h~Pt2j^+f!FdvNaF&AZDwGd&aOQ#z z&J57Oxf^tFCV~#mDA2(f3_3VDpo>QNKo^}=uiU%8p(=>(=kYC7??(6RQr_mvhV1y| z-U>8X)A7r_Rlug>mwV3wqvJbclm~obP~Ii#b~rySQTM?)zC=9{lNs3U-hXLc{f(Cj z-Nlt*t{44a>#`aa_k)|-zESZ;)cuCSB&!s|-REz*R+bj#S!*%;b#N^_z#(yM;aKaF zC9ah_U9LAUcQmCxuoP_sarAF09A~|VL2(1xPF0wz_%`rep4zDR8n??%4|myt{s_qL z*{C=@(q*SLa@jfX=L~C9oEGh}J2Z3I76;~HV?au;Do4Xnroh)f|Stq5yj!r%ThEBBJ&H|gkFi`Go)7Tje%e^Ck&1hKe zoepe9!*cH`U^5z)d$$3b(GV2_oGwh=O`O57+}j=442I?23BYDBEcea4)NTKh~0u40q+s~2{PL&_;KJ*1rGu~C^#DU3&9mA%pt+g10NAQ z6Zoj$e!$0w1L(ya;W;4@;lQT_e*jgV6TAfYg5Uu$7@n`#8&Q|%y2!ip;a?nPiE!bOHB|i z_#I#~v4NK1dSWa0-pg=3nU#A7FkEmehU>|!Jm9Trj0ofLegGV%Co{BCh6`TAa6Oqp zAchO>$#6ZHm3t!@F8G^92-lNYx%UlVGqII>|IBbbv7tvWyj4`q%=YYKYHYmE^VDN% z0h}iuQ_sSA^fC1=oCS}m!*CvaO#KGuzQ>fWxzBUwW2zUNv7m!99CUDQ2OXSSKnJH6 z=-_k(9h?l%CHOqapo8NB9h^AO!D$RSIQ2mX=eNb`Fr1$ktKZ=KuvqyLeV*?Zt6p#p zFIHpWe7;yMfU|G0dKS)yi`Bbu-US_;H$eyI70|Wtd0qe=oM%A?=PA&^c>;8B9t9no z1)ziTAn4%S2fCIhAL!tW1s$B>po4Qe=-}J}Iyk*R*Yf7p`v*I+&53Mmj zX#WTBV|wU->A{cb;8v_bLZ<^v3pI0??iBxnG(8~2TFhyjzc|ukj#5Kfb!rq9BHe$f zVqa`nypgW+cmMdmN#|Xr>L+D1Nd{RE83eJMKNb!ZB;~bzKO8EEGGP_i1MH+f0)Ffj zDzJN4^r(6-X=0P(dqLU+!Pqox0%@1li&8Mfm9_b2Gfr`3-t!opK&EkYoHNChd9ROC zM_ND6A+=1`NIOZBhcsb=Zw7W~2ZYcL14f>j_FiDrrpA+jQEM7=iGd<%+!NtRtZ}mj zmjo8rYigHoOw?gdQP!QvXlJy^h+)CretQDL>Pr~6T!o{oF$i1ezEU9YQ)`kF)XJ-Gi+KRN zD^P*KZm5lJe!Kf3_2bpqo(_vt*Y<;Bau|zh3}zxW({DFfq@HfyIi@>d>iMwgsndxqU<3>NMPfIqits zG!#mQbBUQQn9ES;K!;Z~R82Z0gzZAs=^e6Sio>7`t!%DnS|FGzSP@I_a^l=uU9swJWd zI7~|4ED@uW;4I)M!OtMGCW5aAjupHLY2pRH4BSF+6>yT^v%u{HzY%~ZMLeaz>4K*N zX9}JG+(mFd;BJCj0rwDm7DD$H{0VR$!5e}53SI=+k!1$liW6Bjx7NYaSvFUnJFpt<5YYSQmez?^ zTq`*pZot^M5rdc49eE;cu4|~7BFADX9AjB-GBX3^OICHsLXXU1$Fh+5XlvWUu9f3u z@Vq>*aV8m~1*wqC%R}-C=+O_7yb*@cZ#zfF(bjq}YTdvvr$AsC4kjP zYd%@&vnE&59Z36R``c~%jkIzXyH-|wO4W05;7G)*bl`9IYjw$5#Iag~M@01XE<3ffFxMLH$hF>Y|A}>t zMzSG{%vxGqQ9Z1h8`Z9B;{)e^aYR8jVY$||HKN36|20~aI8YC-sjvnOLn~~!)t_2! zLh+kH)M3_DD7rsVDhza{(wl+Duo@mO*4I1&Shb<55OE{L#I|s4;ZUo|`RWo^i0&9q zy?tCGEYgJywZdzJjn#fP{S*XSP+gVlTo7uwRq_yznTA+@hO4XfP?jC3RTMxcTIaVj zYjiY3>!=Zx`h_TUjms_tlS>z*O|0?T?P}5w*XdaaSJ13BG-n)|)qXp!E}B4SMkR*m zs6$lZwG6kC7#Ux0rtjs(_*4YstLgs|xA#aoGqerTYF~g-RU*@k5I7ZmYa`Ar zc#g55@Q;?d>guL}Qh-uTc$Mxb6?;tQoDAvKIxBaEh5gYQkFcQIXrW?HmL1$JQZIJd z^Bh4I`)$LIXP6kyWGHF_;VTXrKDS@y)4FNJ4lvp-j0#=$REJTa-(KNzt8v%G`H+8b zt0W1y>@iM~fZu)?N!D~r=-(9ut=Ma1?+E^W=^VN|kiEm@JeyW*L6)0^-#nMy$Kf~6 zZ%>sh!78{(lFV}1U7aMe{Pq|m!EmSi*N5Nosmak>M~-2kIj%>J>x5l_%l0|!3jFpT zz%Hq4V&WQ!p60Tno#<(PyBnf+T%ULgb%&OCbm4!N?J&Y>>SZ-@DiK!sF5CWD`eeS} zPLi^LRZvNiDK7h@lVpnDjxlA+dEX6neqpkF7wlVyNwqT!>f9EZ2QUh0{2f{g%UNoZmiN%@O~87_Nr?2TV`C&tYzx|NO5LCf&lA^E6zTHXD*Ka?dGgQGF!UM-leyu}!BP=*t zDEqkV9u8$6Z0192fcrR1l}#x33B#vxC?A9cbA?ZD%()Jq-hO+a@KJYkj}DwRw7&*I znlQqGLxi@6%Z_(wd-(01b;wY~q2-+6b3Bv}!h!>ZPdAqx?(pg6x6>UNeu4}a4DFYp zvQaWqXX53 z_VrL&ga!KuZMw_;)S*rH+vk4^=?zjB&rpUiE;2@2&xP_qSg^P7NpaclIDAt4_EF)Z zn)ZkeL>StlP+EiqdkAeim%YiMZRfZ5*CE3!$`EDvEC}U;uwXaglZ5W(@JT{)oy)~2;VZn5vjdj_R9NJjFy`&Bq(kVj=!>4N~AA|){gijNfJ;>qH#Ba}XWO)Ck z=uSz7_Ucetgaz9PZIsLI?a)T~?a9BX`aPe_?D%VSe8pBYn=O8`Qjc)iF;21wzkP#b z!LzLDKCx;~&(wNx2z#nWSn~`VjTCutO~_+Q9x7KLkF~f;tN?#666y0bFbsmxzY0ql zf9_7aR@2}nu`ZgQFI`FVaiMFa3Pv{{powtZsEKgLSph}Rh@%2Z__srZ%y~rn7KnIU zTZv4)Zr9nDTxMmhw>A*6UPa#bTiE*9ZZvp07v(;3Gdf(jndiWPM zl#K$?n~efZ13-^T987wsW-Z2I9`&UzP=oz9#`I<|v>8N~4Wg^YEl|(;6Fp59sJHzY zp0EY#xPM|y6DERYg6NMy^uzDxtFc)bp0DStC$fg!dM0~(La`Q|M=21!rg)AzcuE3N z9nKR@AO40M(c3tWvk5*kKV-96*vjgsdky3Btf%Iy zXR{OCAF6HH-P*rE!W0(M?8xVX5Q}u#>KRpTR?YgP4LOsaTC09>A02v;u?@?zwP9ex zWqjCZ>!n}m=YhIm^DwhYhgL9J^MHBeeD!3Xe(lcW_pHUY))C{A58;ThjWH0?Y8Z)@ z;Ixo?ft?oect{H=1$J7tG!VKO9tf`q z1_5LG()eEBZi1Hp_Yk}h7*n)P^A2zy!TW*x3a$X|FF3rFz7p5z6M%1uW9^pF#X94dPJP3G?;HkiS1DS~0$7T}?>CYXbW zOu>tQy9h1@?k1RKZ#@J*kMQ1tx3$3~#Z{K(^BFKU%^II)c(lRMZ4oXw6&O2yqzRz= zF+zLJct>FdPSr+W3>{1qW|V}>37u;pU!wpo{Zl%&lUKO61HOkOu zY8?z(FrHHz;y2b2AIo^mM~pA6BR-1pn5P)OY95x0wKWjN1lYDPL2(@nF7o80n~7gi zNBlX)_b~Af)e(P!@x4v_oIo83jxs?XlVExs@rM}S*The)BmN-c` z#l)x95w94ZZ{pk35x*xm@Gdjnin%2j@b+6_ykFJ9tPhzf z6TiQX_#TWeG4UVGEqQ|6R~zrHxh1dAyT*98%`MqS?>ggs6_U}r-gq}cvU}j&WW1%2 z4Bo(I<6Tup&SA`Xi-|9;BmN?fOSYQ$C3VD~WBhg#|4<$AClDW~*kKaPsUyKrGT3e6 zr`HjGi1B+&{M0()4>EqQiJwqM{9d;!(6r)HlVD^W33ijgK@&fyj`;12|H8!gt0R63 z;}4nmtUBU1xvxQjBPK!jIufiSgQF(C(_FQ$L44#f<4c_jyXpAI6UNtOF3hLnBTpM& z!dzHU$48zszUa9yrjC!iV0@8tVN)F+dC~aXb75K?A6adD_8j#Jd^~kQ%Rf5@hSu?s zJV$}AY7XqJ@g~9eD(1lK8gCMe@2femzQ&sb}@Zl7IzE_bSd^k^_ZzJ-952qCLl_I}J@sT+1pl=oOgAb=D^c5pN_;4OW z-xA~pA5MAbdkFc#hw~!(<{-aDaScjw1WE67WJqtJ@lHjKI(Cqboq#MGGuC)VB2Rj8 zO+ng0$P{MX{g4}+EMx-{R|;A{jPoKn!i@_QBN zqT8z1hbINf+bnOv%`dFFvEz!+i`;U(v5FGR%~2D<+>68t=4wA)Fjw*|1al>yB$$iw zc7n0EmcRC9AK?kQk=-~V|OTT;h zd6x2x?AZ;r&bV`T%Ea>xr%XHpamqy73zW$*M$EjRo*bEx@guJgTd=E`4gW{8uH5kB zWs$6&@~rn}sUJordbZC}4Mru#oB*Xc)G)Vg7k^e=N2LWme&@2`4^D5&Lk)klzt*n& z6eg=n^KRW(-N&P?*sFKf+yCpdXjrnx!2G_Rsbikgq)UC!)*w?b%i2XS4I#Rj?OnMy z?`miF4BJ}}^p-?aLLb36W|G}=xtG=t{Usa*E4;AQb=eaOWV1?#5jhvjxZK9!P$?G7 zyMD$biu$LGrfw9x$}d!7M<>QSLZzltsm9!3^enY>bYl0RSLn8-^*D9gg~`TP18T)B zLL6TW@Ca$X`et;Cm^;X{8&mUWWVF=-)iB1_eguPiBN!V3S{h`6k#ia1FqohQjL8^+ z7X~eAUKpgKYVvWE=sYmcRfA)~&<6&0qH6S!dWzp3C8fn{H?vekRt;vUePfbin*0gL z`cp7tpb+&ZRX^|g-v8(9x;ojl^V?}ZtGRg{Ga=#?XFBCM5IOX$D9NEo^4qaLtIzXN z+m+`}zdH2%u)Oy9VdOm3c5LT*H^t!?@ozDn=IZ{j5qR*xw$x3U0Q*gkkS60a9~#U! z&4*2UP@M^&{Q(7Z<3HYoNyb*Z4VD{imF0@k9d7eYZS#=&A2*VCLkosxd)iL_k zm@OQ8SYDBIc~GT|PfWY!L0s)Oc8(G+TcPyl9c(V!o#_y5A5`~^_qhkD$H#X|YY3w8 z-daSs>F!A)y_iIIfjz0`LG{D&w~@^4j3ble~v;O*EDs)yDzxzdv9$Q^5T9FV^lT!z~R98tVps$QJv^SxAxsL`Z=orxnP4PoF{bJh0~+qz#< zk&}AI%ylAhG(sbn2j{9$lYGNFLI*EH2OXh?hlSakd;AD(*o3&v> ztn22giFYIiU=y}dZ_8-GfkjO`RI=8&2+yag23u{IW)cf$tU6lJKaFu$f##1^1FGAx znJ8eoK~__ynMI5=SXsHrH}qfxXGt*PP!W?`1;UUvxC2MgJN&SlN9F(IT6w$>$J5(g z=7uL7cO%>Vb`{=vX+=O$A=evaIUIGND94WfIw(Rno^-$60le5nnqkyEK2L6pQotAG z5`LLw`Tq;U)(%4q<4u232PS7^{DVP#A>$Uvz1463T`Rw(#apRQ(Q`PQ2R9>bv)_L0 z0hMv5uXCNE)2KH@^z*Yt^mZujIkn)<Gfg-W^L<>dOHdUZ;y=e7sbhf{I_E6%xAzJ#uI0u$=-KIkjZ5%pZv-(}a?$R{LU z*~mHdgf?=B#YWy5ja&~D)02zS+Cb#?E_*H7%5*4TKn#s)#a-P46ClGT$Z)(1 z^2d;*^Y0;@3RUgA5!9MR{vk7XSq}1dW^hL>9VCCF*5u+2%pZ9>GV~D{ril!Fr?!dt zkzrbC91cfWKg?Ehr(W*ojodD~VYr9{5gMWmL^=H&B1Az24V-=s6*Pbdkx)S@YAO{f zh=d49q5`aMf0)`iLRWsvWR-GvCtmB7c`*goR5~Y^zEaVgU{D)64X0730dP8YrdnvJ zW~zmFHB&7cl{v7L2BQyY(b$p^F8KN6=9gO%)&#N?WNTBW?{4FMRz>H>-oEOm>JqIW zuJCZHcYlFvr7OaW*=C3zW91{vF9up>e9p7n7@z+Ow0gZH)7*ptH6#DVm|2=-F4&oc z-0cPG-TXvP-vae@{_q$-yVeknTBb&Bnys?$X&dOm;L+%;SOwEKG*egHFpEz!=uf8~ zqj(Svi2f8E4}WjtZwLQLG_(_FXvce?!J*;n28UJ7?`ZIWGQHSBb=M5*(&9O+hqk!Z zsBY~?{dGtMW((}-vUkGmizO=;j~G##z6krx4V+}1(Q|5I3buO0jC9@!Z>nHFz?$hpaWqSSc-)#rjkhjdDhr-7{;Bs1^#>BH#SFRk=JPk zR+VC=e*7YrU}KzyUX*`jLocemEO-#B+xziye};PE{y0vn|0~6~2i3>-`+9|iW{R%< zf64UL2UYTP--MIXL*&Lt@qb~_3CoEM&;{+r$521m0ldQt4~#Zk>wN~^JJtT#u`xgW z2yJ2fadypnr>l>rCnxSg0x`H~%1PT{_T!JL!HgR{FHKj^&W*dJPK981ba|{;c;GBn zaSnA$5oJC_>1#y!^K|vxjO3W7xd7UVAP&UXXg~F!`g%s!wsRmyu;v*+o|TG`t18`P zYl9Dr%6rbJ&IQRa%UO!kWJo*s5!R&X>h6L>&zR}z(So$>@eXgU%`wT3f!_@2Be5FE zwN{=nL!n-sV7$JY+)hvyn6krwJ8Qc7vEY`vt3N#Diqg)Vsm4B#n3F{H#h95Xc+hYA zo<-@tpnNorA8y4{|FZn8#Bz@VFP17rIcSfedzuL|)q4*ldq$p7#~(<}@KLTq)@ zD8FM$=$i3Ax)W%UI9c^?gMd4+Vvm1tdfnO^aHaOX ze?YzRV4`Q){p#ZfGdzL&)h}=g?pJBEGCWi6SEFWS1n!oi1aYBFtF=4fuiVYK*lqL1 zo1#?UJoiD0vIpU~5vO(70Eps}O-d!=*?@TY?WDh(>H8o(ZqtJ}Rn9{CpkqoSJPXcN ztBBdx$Mke$z>Rzm=h59~s@rG#CSvL?dKncMvLP#4j^Qi#)b<(y>Z=z~F6DFks^UkU&5?eJG)GljGK-^)4a z0rfFBzd!AF4-%2c$r&WBlcN8bMbBqz&a+W9qg$3pmddaM171{HX%<12Vty_frH4RL-A#o_4>V z;;sVq0w@~({sImPDd3-^fZuRDT4oA({ysK_-&KP*7O1iF@o|CQPtmSGy$y;zzn`LE zfr?w;^OR|dTYk?xb{;djQ-iIgfDf^Nt4#q{{r=1k&rti2`NO10fC*hlM{NKDk(^pB zde01%7VvrUe`oTt8R}6aAF7l0`CqxO3Mtq7r%lUj&vI=tb0;&Sc-wxcJ*l%-l4A;kprzJj>`?IRc;;NX5h zr?FF1#6#@|pMM$y7nVr+l&uGrN>~myMwmW|$1>>l=q1G|gk61T2$5h{+R7)RD zi&;~{io)btt7oVWAMP~d%s#ZL3^z8E;V!!obpCRq4#gcKaeUAS#|ZE*Z_}ap8tfs{ zo8cG%{(O96C_MptO3Xw$>+3sQacZ(-y2>f+7&w#dMLi~o{#lPs-LW3KNI2`!sbAKk zQ>Sthr0b4*gm#ji`+^jQ7JEXj@YqhcFF>1d4zSl2s-Fwv2KQvuVNtEC6xGh^9=_^w zbw7-=*qS)0?%NTsSHGz4?o^qcR84hXKSPauB+)bTq?-Fka>k9UvUaRVb0iRbZ^$YO zr{1@)bEGgHmofLMeUGHYGFYfCpVu1ZH*HvDWqFJg_!7n+<; zwdzN9s9APt)$^1VRplH`UQ0TzY;io#BkOi2$%k#yv_1QjX=Fikmmrqa<@e}im*;hN z$%Ov(VpaK~E?v$nM|*Hiv2><$kSQ|Zhpu#{t5Dx)56*|K>P=T&A5FdOO!kJx#m}MG zrca{pId#Umcj}3CUsHdmOQ)Zs?rAfpX(y+sO^>#BW83j)X52zn2b8F*DV>`eTuuB% z#Vz&)ivNNr-DUEuKcVEM(6e)3KU-_?vQ;v^{HR-kvwOL}COvN_##r~j{}Of+Y(Sf^ zihB{YzX4jL=5?olQk>!R|}T3f*mG~S!klDh2_zW zBNUHooT}wX3ceq^5#i^I8b|$dX-A4jD!vH@1K$A($A0G**ss8S%2oFd*+TQ^Y ztfC|gp1id;M&|!Ki32`Vn`0WeDIbe=+5I_bzR_veB%m$~yw4$xbCXbsmc**n3P7g{ z-AbLDhWT5qTAGylIytaWiNcqG!%o>6FqaMJRy;ENo2povh>inBS9F}SwK`5h>J=U5 z!)YpGS$ot7=&q=dTGRUL)6|2@e7B5X?s7cglyNB}tTOXiO<5XXERV!k9*J==71Kf_ z`mPIo*NS^k0u(Ht>fvds*K%JVxeit%$O;`3efD>;no5mRm)L5p z1TBpq_-6ips--c8Mjcw78ECm*HzIr-iywK=7$4c90lCIEV_w-Jn8$ou1-}8jUGO)+ zI|SoPUo;@swD*j^BH{RK84tH~ zI6hUz!!3<@uz5l-?IlhN<|KJeFek|if^95zF5+`^nz+%m+Jf9LMFh5H8lTG42ILy^ zA{?7PjX7gtW2iA_TNsdQ%-I&(RTB={7J@nRV#}+;`Emu@WsUF6#OW&b)7tYm2(aJQ zczy=P0KsQF>OHg$Pe3>f$TiLah5V{t>(fHnLu)GtDp24q@=y0A# z4kYI1=r9rTt0X!CJ7s>AMB@ZxJlY9|>c$C9MffDaJVTx$m}iIig7INDew9S?;T%>V zm~+@H!Mh;buzBKH1W!OPPels__e1z%!8~KxH2kB9a_;UW;By%!!?eFqpi+&s|H2Bz(59{xV#EUzWd7a2tKtRfizqP@CaYe z2MF7u!&>UFZ%=bp;TmC#HDAIV|3sdWo?|>#Iaso^LdUDP!2I+QCc;WUz{wTrm7@5` zoAe5@{AE;M$Yg0uO)v`avKe!w`E({$5WJPZ2wa}SCq^N2<<0kTG9P12*P{5Wy!u#3 zZKeo$*72z-t=JccKvac(XK2>Nho|B;$2qlGW=f1S70X@E_O8O27n_>#QBiYwZ}yYoB0$E15QyOn(VSNw*lKFJ?h&UeV!$ zFY1FQo5cO~IOstKqW48a@d#6$d9rEFUs+cJ(Y9%`P&mw*VS#77PoRzeMnYyw?PJc%^uvy?&E_{x1^y%qfE3rm7{NM;rRH>XHR+^(6 zv6FC5Rr^-@+WQ>kh-t+6yJ{n7K8upD zZ3SbE{}lYE`m#o1t(Rcrun9-I$7B0oUp2_6a2>uCfDXM6y((l&S^hG{?T{^HISxAm zp?k`5ecE|>Pg$-{JKJFO+}@>c;+txf4zc_c8Y+bui`aSRS=&%VeDYntW#qYwKCo>P z1|f04+oX?OS%rtJQDHdp>|+jdbsP-+8Tlz9c^?prKnWxI*e`$?4x%-)Py*K9w>U#} zn1(@+AQ+uF2K|PG=?l}!Y7aln*tD`b+uq<9H;E8$Fdx2wzUaY!w!J(+sU@Ro5Z=HB z!UxKTTvRLWTEsaSlhL=B1%ekmxK28Jf;pQ^&yrz#2*2H^&V<920w%cD#M_f zH7>jILbkIMhW#F{WUzeffaT*`*c<8-gf)KqB`KvN#KSBNPLPA=P?~eu_Q?N1Yt#t; zw^vuke=8Q+(0st&0wyN{U;=55M?n|}#D0kFRrzu>ppd1sF*L*sB74yCoae8(Vk!MN zg++C415dV(=j%b6JIvtK8N#h?bh&+KjgKP zAp8$N8hNRe^M?$cF>Z zR`A)HZQl<*9CrfDtQv%gaP`20$f*+P#Kj=4t`a>$rffS~z;sKtJ(|M(Hw7Xu{(lwP zcJ^im>^Hz92#XI!yMV55PMBk-9TZaD+UYjxd&%X*zB>d zTM4>Z{InfE%Z13wO&)uIV&lSmusPeFg9Cd#Ofqi0$FA6vZQqP|u7HE@kgI1hD*C2jPwtcmeezozphW`Wv4F*7Td>!g*_5aXia1tAG@>Z^m zGO_S*PTmGn3lMsNXyI<&mVauraN$l@$Y=3nRxA-gOS0`iGKjvN21ykf5CU|o4M}i2 z;%hX4@b9Swtvb=%3Xfg=q-YNG>7kli2F*y;{*x#jX-=qY`}ksLFJQD+wc@{7yTPp0xmDF;K+P!~#(%v( zsAcE+8+K0>C{3EEG>$4gXjHlmDjhF(^)-!Zo~U$Qwmrrvz$^$nE8Bj-DL{eo^8l)H zG&ByH%D}YCgs&Y#qZx;Yd?d`zwwJK(qRja4?G!XbFxS-+lG!oPkdbb9h%Y4%tcrtE zz++0bJsUjyVmRQWd66{8m;Cg%6f41i-Oou-L?&EZOahZh+4htWCUpt%vj{;R-{#Be z2+Vg%xWhNj(abpT9hYs7&&NYw-55rjfHADwNk%m%3Q)JxP`9I{ZkOr0EvvPwEL%RH zV`$yN)~#dcvb-$k84T|syUNE{wGi%g2)DK{fWt&QHmpQuG|Q@FhK2at;&l&~P7c@`EWWn7drbYlyP)e#y~Sv~}a!lI->Bi)u@-r2FZ0lH^oGky40mI?tP zA%Lruxw5}Y1XxJ{nqh{6v5~yx%d;9$)luq~|4OWP6XI3NXPO6G_#mV1J_DhpfmkCr z4XVHKhtuB&TI&mc|7_b$KbGggKJfR+wttu$V)ob{;Yedqh=IVNEpPU9e!~)nM&Vp8kNY%{K>;1A?>;1A?>-{oq+yKqU6;fHP<$js7 z+@~2LdSzM8N2t2g`!LdVG&YD=L5N^)l&W{OUC}q&zERhq&q`($LNokvqjuEhA=6dM zP;z{?UC*%Ws(Q_rFH622(rbET+uwXIOTKO%Tlv>C4TOVn751W)`RGbWSk(ppnfOn~ ze+ovtcKA=ie+&G_qbtSA)EkTTBVAUvdN3~ob3OGof#6ND?ZptPX2}n_!RR%5=0)5> z6W2ydT#d*ar&|gmz2=V+DZd0~O6TPCSLW0Ol@`KJ+UZbgoerhd>F~ah=>|_m-@Sq%RHG9@B|2emlknEs452=q4r*gM zNBBt;o{Nbv2popG1zpWzBBU^+G5-Nq)6&q@1QM+T6FpmHqV7=gv)!`oGhMRn)0yZ7 z>Dl(F6tv`a+4hMf3@$C8h4^f}QpKv*cB93$`FBcj8}#kg=-V#%T^(8!w?^OYguWdO zf2SWi7I#7mz7~D^Dt-s~s>F=qYtgwg(Yc$ze;P-bnQdHl2AVLoz-9YzoSBh|TUE4R zTp*RbT$)kbu@i1pub08(tBm4nx}!_pZUbJ1;A!mry& zNPHi}>()OBtsmi47w~@$X-~U#l~taGcD=5EZl${Zz~razq?w;^W9yVukI}kp)l^?5HxRwx(Lg`2P6(Fc&#wlQY^h$!@u`K&VWVF_4^+%Bw zCDDyD9qAGOTWO}B+MN~AdhCMRL` zMX66*#H4Zof}AsllU3vXn^_H8@Q@WtS^m9f7if5LR$7*WBlbY(wDvwWj?@M-W4rhl z)qT{oi>Z)07;+Lp`-7K}E_ld&d0G60w2v>c?3a1Ncn)=c5T!ntW#7d{cLDxSjsFh# zaZ-ng0Yv;ZwQd6-e85rH9wgk8W%s9g9kWHmYi)&OG?zkvzA_|^nmh@?PkahZ?S-Ze ziKa%^))eMzJst<{bk;daOoX^!I=0P;3&ZX8=fZO ziB8jR;B}%b;CKn23EV<(F>sRLSAp9J{v-{Te`y<0SnCzWpTq2EG;O@Z7x_ z=-@O09h`8`!MQY1zkxqLv7}c|_q8fH4g;fzy-Ux>IGmoZWdgh3i6|#^P-t3n5Er z%B2@EZ0?Yc&HI@O_1w$JF%wBPkYzVE`rRk0uU}3Kbf%hQ!ry_bF%A#L>}iZOk9REN zm=mwaa;>gT74YH;{?725ZzYU?dWTzgSJ2OkMWb#%vm8x&G0I0?&SHR)LPE78BV1k8 z-m4bA(ljs~=}!!yh%KS5JZQ_9aMh_Tyd4i2_KI@w9z4{#sz3IHY${VZe6z}NFZkmG zdU;knY{KRFPAeXgyhwtMyIsu zA7*_HTHUPm1>UfLbpQe1_AyFu6xp5v_6=2xxqACu!d6@#(hXsZiwu`){ zF!GpTyU5F*`Y@w*5uZWw%OyHJ-@BSoyU6=zU^8kLd3OPuQMQb1ouKZ6bK3;<1e`xiP_MwbX@c4Z=eh~%2RPSE zP>o;nd9I$IGT^iX9h|11gVPXnaO#2XwHyEcSuneA!|EA%#~c)Oq{G{ypim=uR=Zj#>AN35^LUYjm6n z6OO(nbU|8_-|CvswR=%cC){`>U}e$D90*OhL(O;-zYkWSo_#a1s}_|rN|=a8v7H7; zvC#l&8O0B+-f)DCKgr5DqJDVuma!2P7@)$iwn3WAvFo z)(E6UTMfqh?QgO2)nBniJEs3I_Y7#??6dsvU)&M(~xi9fSs;V4D583MZjj_FY?a0R?h%V z>35=dEd83pa53NRzSs7J4y(3rxAjattZsob{;;|m zPVQm#1f1IstJmJ{+_-cs%FmB3KqtKps~_KP+q5Ohrh}l;&XR|^wr6wY-`?Ew+h5hF z?THb(tOMfIyzL1MW@;9GyI`z(c6*}fTsyBdqX;c0oeHJ3q*I}M0PCn}WT(q&x)<0{ z(?h_HntB2|YU~S-*^55gL!B3gcTcKFY)|4vDWsvtxWy7r!so#3TrWCO}(af`()O%nW9YRp0*Y z7SA<#CC@(XPHYf#yUw_-ZdBYZPu>0wOiA6Q+QFI{Za7vw@h(R7vFa5#zviiZaDK{DKfpPeryB3@dH$WJGT{6RI)(Gk zJar$Of8?nr;JlxwUV-yB(7|~fbUU)3_P=9aLbbnYHZB@-ui~hkn;1v!vTxC8WZ$B( z>{~RJeT&AjZ_yb0mKwEV-*Q>)*tpcFU2j}Ob$a6>coiGIsBV7e%WCWi?5HuE;iAR; zrlaVLH?jj=*5Z`BkbZJ~7%jh(tb0N_!nn``5`RZXN63Xb-;EDQs~;GeTDslPkXGNf zj`-UckI|RCqIVtfe_%Yi7~{Kz#!I)o3Go5*9o2DGW*rHxBZGE^K}u-6^lLpXq?q`m zI^y-XkZ$7RL*w=OR*wt)^%@0I5jhi2oa>kTPoiC3mH+Q)_rrZncj4Ax2 zk~5|}gm7m};rE{On1W8ljcev@lJO-Za>kTzkjNQRx?iU^tGe7-5U97L=Xag@u*{b? znTHOQyu04rPR)P6NnrOO6j%?=+)IwJO0XW*W3lWLAAz1)%f`Ws!DFl^kVfwhQ4d@n zBqI%5;?;2JZ%aQ~UTe5P=%1#i&+ym9WX?=ve3IX8K87Ff#bCzs5#7>InRg*_t#b=0 z88jvVGH3{w88o0DEzire4n12M=tm&TaYh4&^ zn4gDB=I7||;hK4Nz5Ycq$o#ctGuHZ&{vLk& zbL}5#{gZyMJpi|cZEwT2?HJYd!?tnnheq`=QBB9F`#x;zd2_US@ZJ0#=zz`G^UOfcOe;hhk^SHiLH;A;fU z6nhRnM$j1h4L(ND7+X(%X+vYKm5vDJTInb;*E?J+9g_%t1?7ZbF1k(&=A!GIU@oFA z2w&P8U2MI8$&>;4XsQz}*ZEcy~oQuMvv8i-3DeB0Iu)jZowr z;B{Uj6nQ@b?k{P!Ap7R<3M+(3Nl4cvy%o02kc%I<)zyZP0IJYkp+{oiRMnEBfmr3|Y9EZ#E z8GK~Mjb0#C@JVm<0>O4q^a8>CdZ8Bxeg+tq0J?FtL3$kcYy5l<^a8;)@Mgj7!Dox$ zehA+R42!fgUN=13C1M*I#SX!Fz`F(SXD<+}e<@gSaV&a);0o01LBV{l@rB^27(WgP z#yKT_B2^2DGs*yeBUO7oxB$0~E{?U2z%GwP}tw)&Nnb3}a57IwDo=5eY0#4gwt)-fQnZozOBwJr>AEPB( z3w`|S0~7v0YfHFXG9}W#2~#j!E)AM8L(E2e^>!D+cGePb2KZ~9d-x<4JTaw5@|T|Y zQN0LZ5=JImFoH=g!h*G!OrVf54bP>a3fBX;vb!+S@Hr2c!kmo&A1*Ax=VtI}El=1S zZ4Cq;{mZ10*hKMx$xWlwzE9FTokpo&KJmq+lEle+JJ>)!UB;=5eTi|cLZzBwqEg1G zvHN^!+a>d@%v?|Jc~(?t=90YGIQ7Cl-{6fR^Lim$M>0(Bl$qth#{%`0xAWm{H)TG^ z9C@HT*1Cj!uKBe;9uVUT?qgNlr^$iS492QK|L7=Q8=Rp35XtzUA=mm6tj9aQv#3=) z)H+BJq`blSEc`C$Fl!FN`1Sc&aQQ=}GwDZF6)-JSJdNV&wf#_QH^U5lyQU6$z5sXT_lD_3Is}%{rpaonqNT44K;zz2+`=1WK8Q#|Fp)Z?u$1N>0tQ=v| ze-D@G|4l#Ae+!ox9>$9uU65m@Ae~04U-tVt|5L~g2wAz1?Gv((9kL^atkp=BbHJCl zQ^?*GvcC!0+auJ&2a?0X9qHQOu9?zpkn}G|`oBv0=SHY+4bHY~6K|2|KQJ1+vnAR;Lf!pOU*ZiC-IdW$#B~zgd4ziIpL0ET zjZnVN(gu4aReecSPf~f{QeD5{ImZS(YT4k_>pWACUviC_Ex6?VGyPEWPr2&p&oUCR zywtV!y+r?8qQA{m-+q?uNgkn+KhH?~KvM0NRJ$bAj$C!$=baN@ljt%=qkykS^h>$w z?avcEzvQaV!DN-BDq$)}@@Gkyl`litKz=ONQ{)|2#F4t=&)Qh_NzqCpjK1-XhVjO7!O8>Xok(J(q^7kH1b!d`42OmQ<@GRmpJG_)tdTGKpRy z(TgQ|(Qq~VkS}lm-tjGE=$G;N6NJ?aA2L1{kPM^8bhy;TH2R^7dzlu6oyvyX3~JNq{JVNa4ncYC&dtN3q$%k+PsANgg&Wq!Rx zxn`j<)G8jX=KiZ~uP#E?iSE{HJ5&4};gU@{{a}*{mu%WoY_4^18$D;Z`ubmO11*Fk zf$o-UJ6`BHy;y_;!4e~ISTq=yKD zhVy`-mg+7HGYrndC4+PHgTYz2WN?ZM^h`d~$^z4%v-(I#ZHDckndk9%>y!SPkQ?U{*NHdYp`6v+QMX$#@Cr-3b!(>mH>IfcvS`lqlLjpVUQ~f^p9;x)vRZjv$hj;KZh_JXBtgyHx2M5tV;Qd zHNo{X=f%&dk5Z$88HqQLHL~gom$F_*KV7g@LG@6>;1XOixCoaFF3=!b z)Y1P+2AcjX(}VuB(4P|e6GDH?p+|l6xPm@lricn*a6}k&nSwcV8)qiGUFeoMi=^5WKtQLc1BmjdY zaLHgX{iw-BObhyl9C|3?GltcopU3o|p97clv*@4oN54IjiNRnx8Awz3fMKG0Ul!U)? zuSY8B87y*5ab!D@Ng6cFj&PYpI{nBZm1)7FJxe1!gGCOZH$5YX1Ypn#E*Z3-9}E(h z7z~<)sADR_9DRxaO_(0^jo^|#ihj^XGA-!C9eUKqNQTwWOV6ktVi;V4O9mI|2Ll@} z8Ju^%7Fjsd>URYL(=$#B{VAb8A@o&3|D8h*0lJ6Mw~-PY5eDA~gG0jLt0AiX_sM}z z>BWlX6S^hY_FnOS1efyep&#;o0GIOaa`MB5yczOy$=eR|Rfw@x65Glav=wC@MQ|S% zT!EQ(MYi4lAmZW?w+w!jZ8sh1ide~4Xd@4**S=5lWFAz9zfbhsbWr{By)T(xgJVk# z79jQFZ2LP%;Fm88>DCAir$?w>$J%(eus__3^Q` zgHIfg%%_0e6g*hu&L;`%C&7;wRxg2Sr_>%#M40AHq;ZaCD#zg^9bQZg5bphls9u$c zIe(zHAluHCU_V^y=_cx_57wrfaT|9+tT4h=wg=~go+wJM1 z-L=zhw%vvW84@z{Fy#(M=KiK`$B$5Rt9%oG8Vr8x{q~P=gRw3=g37k1 z(YA%>P_cgdB;#=?b{sBc|DM-UeL3mkGk?e?C`N7058-ixTTudedz);q!TqHwIlzr= z1^Rjr&tZaiOhVPvbhkBryP{jR{SmW*+V;@xl5KxL7i!xrS?@sB!PO@1yOQ>AlJ;#$ z`P6zx=qHFLG8g|MX`1-$1&l*U z{sfmwoK5Kl8tMLlFg%eltC@Tw+~>KjDAWd|i_Ny{A5gEH@OfemsC_5W+E(rdt9ekQ zJoEV*x0P)1)v(XTv!AzeRpQCyKn`=fkY(RWmsJ_%x4#2vFbXA#kP=0B>~C12CU{~> zwoEt8Z}%V#O4MCkURUzT(q^Yb5m-Pm4kfx4E=#2Ey@!|*EgbCXQuAoi`8~;{kTZA= zGM>ZyhVKQEh{mP*w{6gt3I?kmPqy{kJy^w^YU`OWSlxIkCs5&b6}1_kTwDb=6~Ajx z)xu?K+^T(XRgz%*u0d5h!MI(nN)i0(b;VWbf-9~o-iT9QO`COnaaELrF9Jq=>F{m9 z=l~kqppD1NJ>HIQppgh}$8V&jTd;^UOCD!+r5|IEKGTN3GyR;-U@F1*4Ej?TPkXp= z)`x>QD37z=hf9Ot_vkMiYwgtTXzN|Ly!50gEKM@jhL!yAfxEtX?1zRE-*Do>a277( z96zKo`Mg9v@V`iZJdUJ=rX95Gq+KUzOC{|Z`q4C=8Ki#xq3w+;g~Ul-B*~wU zSv8n?mvtjUL3Zv=3T?9V_+)eP~z&!+i0^D0L?nSHm z2rgxtX>Qs~qZ^7h(!Ls1Pa7f{^{vCE(HKy$y2n~;hF@iLX)MymTC0bvC(b0MT?-xQ zX$X4KHxFTBtaK-g)ue9@##qUN)PXY@fkdhlt*SZPQXJ#Q(T`TuRQpF;G4!Lhuc9B9 z7LDmgYig+d_!K7nnSR?V{`&NH@!R$2#|4Fl{%(HTCGo%g5&j;2`&YR5OluG87Y6k9 z+ZF?m!O!&f!C|5HkFtK$?g;CQc1K!2(1kVi$v>*M&$i|5uQ6VPN;MvUdrqiSV_qBe z70her{(|vlMGQxZy!h=iF&rtk#A%1u59kOA6)UyS@P~5s=8wq@)}gqZSW5q> zzW*^f(5@U_bRg#m!3FF~jM<)fQow_h%e9}V?}(O?1#12=xX$Om!uhFrj=z2V_QR6J zLb`guVapq3?Pq%Vc7@pmjGkm2;zmd}O=EXbKq9o4>2PVeF^zt-mwV|i9BJj#kM=SZ zE=L>F)yG%_# zq#xP!gG;)>9P&A6qCBe*w(!dGSnGzV`+iCc+(0t0?FyG{ucIGqJJXL+TuVRLX21;< zCyn8t>%erNOQs*K|7z_YVYQ_n#b^yTl&&SiL6@l0jSX1M8GsDqbif#^DgDSW1}+Kt zxsM=vG`mzIge~Xi?4|x9nYKT!0CieEuP{{;#&BffhD+h92bw%C!7VM!wJy?+JnVrb zPe*tX)!Oq{n<4c}n0l~VwZVldhDD9}3qek^r%4xvMbn~TUxi^;W7k( zRz^qp?KcLhr+!WjY@!z`+Nh)Rto3xEis!W-11RIs4NBo&@!ObTd;k`)@zQR0v0ebc zoJWfd6C5!~EYd$47$(J`*^N_VnsAsR2lO+6nljT2!znXuJDj0}wjGX6ISfIkj#a2R z56MIQnGydV5Y+E%GPD}TS)X&)#u)+SPiexokz@^H8xOmKjeM-N14Pav7p?-DMw>+1 zQZd4$d6Q}6eW|fK8)tDVZ*0yuz2Lnm(kyhgA+zj!imOV`4)D4CLrfG;YN=^7RHoQL2Kf*Y0 zp;JaI2q@EA2=6Ves(IWqWLZn<^+VLyU(x)K@UttLldt66dY<&aaJ)rQY9Zufm3e z#-lMC61uj=?2%|-PJITzjTNHzSXhVNgNz;ZJJ$9OBF&A`$r|dO$n>}sLfX&@Y!VxW zS}rN=?QT|byWbrbz~P8C9sIutG^Cb5{yGH8L7MC85a{|V1*&hgj{W~GkUoM4(NNPm z1oA-(hJXAxGwFUZ`QX38RYUXLE_Wjm4Cy0s2^|w@QPy7)ymWs)TTPTgQ67`y2 zP)&ClHvKRJDBu8e0gSbjf1C0F~pE*Zc{VXU1=aPb-@>-CYU#^n49vLDvt~Epk zuz?R9BJUYc(%9|x1@3@0{WZPbjFI>@V!p<-P5k}!kl6=`*UF&FZ=TS={Y55_A+-nM7dDl%6B$x(2D8v1 zwex_IpHU!B+JKTc58So`O1jcb98fZxZp?s^2kAB#Q1TRA&w!FQ>HczC$>(qre!T7S z;N}?K|2oLE@>)G!{tT4Hfw1I;Fn9BWLvbbA#s(b1+&5CP!DcW{u zFJ;esbPkjiGF$|1D|y!MZX4GInX*=s=t`ejIH07L-<_7N`QFpf@ZBG)d%5O&78w1i zio5@f9rZ}SJo0MgG5ofYJHy?+_P2xgPHADBQ+mXpn@eQ}(T91K@pH+>aCeLD|Btgb z53I7d{{Qn3fs5=rVF?fr49F59AVeSm1%U!0$YKaVsUT8Cq)HX>YN;Z%LNMsK10u4h z80)TOal>7Mid%~Y6-!hUtJLRKk?-q0GtcFkrtRcpw*Bq`H3<=&egK7n%gVknPt)M4^LcQbNpuiV7k{y_@aU?r1 zU*bqEK`v`_wEt?I9ra(Wr>X3It;;tNCt3zwhNW{DZT)xSA1#9pgENM`6r93zS7p)t zl{N<2=)o;%j`quKH%U&@^qJgj93o9q#p&kq+Ci5Z7mqe~*A9kHoH3ek*fJfczC2BC zTJ_8xbc+M@z^dqC;rZ}>sHvZ z+E)$3@Efs>YpV(CHex>4;t$Bbu^V+@(MHVgTK~QBZ{qN86~Bp#gR*8LR&Z^c4`5xy zUU4WMjgR7cG(KYFKRG_iT6r`+>az(${8-7S52SKew283pNe|<=DuJ@M;VV?KjivI%dFZIJh zkL!BvB9H6ZZQSF!YP%$Drjw#`Nxak((w*+>JuXRG;S*?`RO)e*XS!~0Ymd%LU$%_a zzkMZ0t0O_09_E~G`W+i|>GRwuH~Z>K(OOGuQM@hk!zgidWA;h>^vLC$SIqKbgVsaK zaIeMM@)iq=!utg=XuR3N!f>PYpAg;))G#7D)5BiTq@Z^vMPdI}%ooQ7-Qpeb)3!Xa zVQ`3Lu)A&|*&2O0(F4mZSFVseSsiu)hdipP%Rp z)aP<@$O@87QUx5vfI#$waBVT8RgGQNG z>IYroABiX&`WtX9XSyHC4Ts*h?!xe0xhdQ`a#OgshC`15E9$0E(urZN%tVMFqk5Ub;n)_S zICj6>6l$~F6l$Z~6zX2jm(6GL7$UpEL^_q#=Yq`le3<;$FMllDgI zE(}ZLChc-TrLE2F;FrzdhQZ*Tixh|aFH=}Au2n~I($QAGj9;!Q<{p@RvBGR_7)&)3>%hy zxlkU{2U9wEe|<28!Nyik-xcZZaeY?AO=sm&Quyht+$y7^b>TYNNxb)i0Ub8VB8)T%y{whtG`gde%5{ta-O_ z(67r0Vn%dYtVScOAA3PN;;I30_Ze&YGzq$lef~83^XT_LDPniXJtRM|O;8QfGCxuH z68UoIHCqzjRqa|B)+LXMNJY@!<HGHF`H6^@PG)Ckn?ulqM<&L|jWz}Wf z9j$K(Pxc;9>qoXNO@p49*ApgP>N3%Q)>1()^qpTaXEhC4pRw47EsDYrqE;`tGV4xD zN0l3aR=Hm!&WtL&*~PBI%|?2*FfDw2jM>>V$U1I@=uKc5CJ0Za3HnZxc+t_XVV?PY zjb>)q?KSF}6Pg9}YV2HY1~v=2)qI}_6=wY68ZFIL&4NZvo|T&grX*c!x230ze1A1=;cE>g?h{*k+b!lHh^!lROWe{FV<8d zyVieGFMFV7aXz6_iRfCKZ}(Ipx)$dnGL?v~#jyp;ol>@;}{>t z>|fj^(9t4GF`F1W&y}-%;`Jn+>v6sTUOCU>yTMtC+4wJHtgKwH_S&G>jTtjBY<3-@N`#5~4rE;~$(M(jX z^Kt4lURk-p9R~T7rY3;HAzkCwD6-KZI!)Bwn1^u3b$7Y$NZ2Bzt4p~ z?!qJMnbX3Pq6iPV2oF{vaBdX-unXT%CH%%H{Bak)x=Q%=DEw&`Zftnmu|xyFS5buR zF2af`1TxSxs)lRRPlv5%g-ff150AoGek(j)C7c_%HoXRImS#T*{UgDSW#`+2<>`^jHZJsMq!gg1ozd0rBUsb~1PYHYND9yMn zbgh&ceS0*}hMnlc>?(}{jfmt2m6sm2omhoCqoYc)^VKr91jB0;kzRpKhWy?djts6~ zp*Gy!J!hpRkEN{CfRACMJbGl9%eAYu?0B?0d4Vt`e$FR;#<~l`?Q)ZLD{zAhocoNY z?o=np46}5-i+NDzesw5pa*@6Wzc@XjscIBg1Rd;74I9c`id*NnYI}GPT^`)gNyOUXy!?3gOJeJqf`M$@ZMY<`izg@)G1Es+rY7 zc2$~5;RF96{uefW+&w0JN0pB`J**uM_?{_K>iZzd+oEJd@MnqA81{V{k7dbK+$XFFmE;SE=CQ3|td95ul#Wz^keG=_|# zF(e9~uJB&mrdCN#ttP@GMaXpo22~S2R^k0!c;9NmhbuhKg^R0I3ouyWL#&`p3y-TN zLO(?q<_NT_CcLM@N4W6j)r5CZ_-GeiznXBF58GQf&PAw6gk)1pzz^0p6zeAo7rQwz zKQ(RDN-U{wM4KR`qD-*6W4>9Go?*%|gWCPe z)6f9x0v}U;S;|>WS+>q4`7zK1DJP) z>i{OR#d$t_mY`qgelXwk>=5LT@wES)@%kzm-{mtd@Pvm{$#}KTIM;{gq-1xSl6`Y?X}9_Zk0uisQ&ng1*M{k{OqG{GY7OtCI1FKI8X1;oZPgR`>N8 zzwEfM~GEVauukztHres_*neoK`o$;>uuqs8k zUU3;`T;K`Mt&;Jp=Aj^HYAQMe^;#7BI7KO$mtPbKSjqp+{EjM_-{dnt$rJ8ZCG(q8 zGVkW&9G{Z;?a9pF|KFL~qWfac)`4eSxy*DiA7{GOJo)u#4^syrmsD16XulU^{fv{8GYd zoH#dnnK*4~X`SPZ>ZL1we&P}0?nrJ^ip|2VLC*iF5LT^`Qi#%O3UMce$g8Fh*HtM* z*W>?>g}A&5CuUbui2201x|%{vt5S&f{;!1?Tcr?r)fD1X;w-AB5WTAuVrh2JcczsI zPV?;K#%Z4JZ(E!rDX;q|%jPsMsr%q8C8_(6Rv^-SNGs6QrY+Cjnmp1h%YGrlwC@%) zzo3yy&PppffvYEXOU;xt7S@KkEygOK zmX|jIuP|%71x*|L3ACa+vdpAA;92u*x1dXxIDT_JV{yoWPU|YS7$^=eQ`~eHx68Ap zLH8iD=7so8F*)6XPHilk&O6SrN!k;lS~lghHS@X$&9nZ(E@iLe-Yzz|-Xk}Q3%lT? zdXJ1S_jV5k_OyLW=9VB}ab4m~>2LL}Q?=b~x!0dD4NeHU4Sf6=`H3x9#)KU~&9ra- zjGxV~jmlgUE>!uW2O7#3R$e^RTzo<>xXGe-eSFNvWE@+Ze7F)pHe^>0~h4)I6$_?LhqQ_v}iam=~D`yB7! zQo7d#W7h~g*C%+A1pPg}3p~%q=YqP|1-nbl!+e}N%{e=5rE}D>SUchNdPqqOp*_+w zXcxR>+Vu*$#?LEATXlv^Z?}gL2+gl?>m=nIpk#Q4bx#YY%MIhF0f(o=pQ3QI5|b2; zj82rB^k>LDf)|6pfr{VN(f^gg*|(2Ucy|{3r+JUz^5~VHIK{fp3Wv(gfi{DBB;eY1wP4!PY?Skd`N!cM7b$IAGwF|2E~RKhCSt`KqmlOkX{>&4|W`n_<7BN zE*ibCLy4!b)oG2|OPfI*F&2gG3(WbwgVrrtk+=qlrQDW(Gu%IaVs7glbUB%RRML?z z+PJ=h2Ge%A_I7QqQQ+L+{t^>iNn)lh^i#fWw+`K8O4_71%d*0ti|I}Xxpa;_T7)o~ zu>P>aeDp4tPfB)}pWh9-)tI%zT$zLW;vMEL!Bdu+Z8<@g>6VVpAR>X(Sp%KP`s;+* z32lk}9zZAWFH3TfKn$lqbUelO@YsT-WKW1PS7^Rw2*8sltdE(*V- zX31NtR<@>xhZF}Hac^FV!f)l4TerS7=sP{5u2>g_-)}cJ=LUoO?VwL+142uc*j*1i zwz$8crd?0z1>~7BFaIgu-F@jvz0`6i2&zo9<_!h*?u(<#{^GyUy`T!+S)Ojp)2)?4 zcebV5*8KCtpn(<_B^~dv7uIaU>D1jekiGca*5Up}B>s$M&YHEw14bm&0~Xil6pdhK zgF7K9i`@$DgrqF?40trM1uZp##a-e898OBgVpoGZDIozkQercx!zHz7)Ebk#uvQkk z3EYiZWwBl0Lwx+k45`tmRRBK1`;P}7?eS~kIL3L$GvE_EUZ-_*Bcm)f9=y=|Ujkn2 z@lCB6{+hd?a2Gfl9b3>t@^9hrzPcOi@$um3vTU3Sc8F9@XuN5YfOy#&L?uG>sB2TBcsflL%5RJKWNn? z+6P7*=J_F|U)O6{$L^n|g?|}R+Ms^RI$DU(nI0KZ+7p*uhD;0ZA5uCNm+hd_!h434 zUWiNGl9+c4DP4|B9TOKfcemiO-Evy^ry-?p;Og$e{y=`X7^M~S3i4~vvJPXkT)!nh zT#V3i{f7J+v@mN<3Su>WO>W>jgij+c@CxA*$*Dn$n+JgYifr)iAp8_E0nZnHGFdci zVP*(Fkqp4E5`F^Y!Pf}y40-S!!rMZ=VaqzG)l`UPWPl6Bom}lkuTm~;I! zxU@kd!Y13W?+2Im#D!W@>Ao6VI#yxK3b;NSTza9xoa=9cOP4E**?_Qj2A6J8m~*{0 zxbzK$on^zGA6)vi!kp_b`S)(_ySDA-_KvE($evuN+}iHw zLS++p)Xn#SN8LOlGwSA;I0TR8f;+*Zxu6ofQ`)5DWV4bbwY~oCS8O-PjW9-6JTD)N z3fZ5*>!#fh>8}_VwUYZiaW!~G0zJ>H?Z~dZxE<@F5OAeNfPyi+T)(8#%VpET(Jy7WZ7TxCTS!;FlOUV|_6`9L=gL!5Q(b|88){ zv65JGtdcs8mBhw_N3-Wj@Q7o(z%9q(5N+HsTHEo#3h-$9ytO0UTSs5+ok6oIoNQEu zlZOZWl9To$QcNr2WKD6>a#d^OqVONYwW>>#=*;&t8cnGgvwSWJzcAl+=8Z>heC&8o z6n^4-PRGZN2}R+D&gUY0?6^=AzUAXQQZr`9hNAEl>tkq>nlU>-6ot>aNcl}_#_S+b z6h7sAX5eE7ilXq(&Zp7Tnz3|7E{eL@`II+qQu<0kJ=3CQ&^Wh*)996(bk?Yg;WUE9 zQ>NWj=R3)X_T)DVa?@@v>McI>5cJdT^1;bzw5Eql!fv5ZF$*#P61$}vkrqV?{_21}bRiWF))7|RnKAl3hZ7N+fPydbXPje_w z%ChFr$&SCq)4eH$?mq{m@E4`hf1~?u6}oSFy7N8Vc`05lev zN2bu-JjlE;jH?g77#Y-C|Le$bQ>UXN!!Gb>Waz;Yx@crL7d#pn)`CYPLnSyPL)6i) z))u4vY3jLdm%A8`)G_mXN}D=n_Scx{d-}ynoYK>aPd3|5VKF@UWb={WxRcG#f+J2g znWqAWoNNXQ_CMK7KQ$OsrPh=%sV8%=EA}B^w^JZql$yO@7KV7ygQpexGNS3x1Vnwg`TfXWsZ#(AzA( zw#KpXwG0aXpGNd(6n`kC)Q3|_J(A~;QClqokJ@Svcr=PPPTtSr!7sR9-j>A9#Sx9- zYu(GSsQQ0lVV*i4J|TC?e7HXEmu)*PWj=gBi~5xL@HXPwQJgsLj*=htyX;qM81#INIu!prl_wvz+DkShu=&MWQN#4qHE!t?V=$Kvwi z^Er8Zv4<6h8=KF{E8W((GvjhyQ@?+D-GAf0WFRR&aP!~fN4v|YB^q-6e8)wn|~`_A8~Z-wiYujtW{g`;jGhYT5P=Of6f*z@ufW z(h>g?Bct*h_+@#@l}`%uUXweeJWrBu>Il*>MarI0+`9FSGH{D4R{XhuC$qIS9bOWw ztlG`gJ(3Mw-9VAe1@@?{gTSNV@oey@Za09Z3=}u194P}ula=yFjug|wD=C)-ifiSc zGUP3Q*%}z;4s-*>%z*GPqF}_qv}3y23!Kat<STyF!d(lgziZ00gxr93Tr(MNkh(9iKF%`zX2 z33}un?06dAh}7!zhHjRD7T*mH11(;Ym#;7|>NQ6O(04Oy{4jt{n_1(V0i_oL{yxCm zH8vPD^I*r5cvmZGmyn9)u=slLh?*!z%^}KBpWO!@HE|C;0OLBB=qv_bqTQ!kqHZ5x z29JaDj}I`@1s@z>t`yur0R&eMFxv#p0Q>o`6$9+&zm^V=*bf?guwxnIM0Pi?aHHal zOsQ=19!HBOhD60H=<$nUoI60Ho7s9g{k@1R8QaVrInES!TAIVc$B0EOO}p{nr@Dd+ z8ld6KeDrFKdT~7uue0g!uo^4ZP$EeTC3DwvQFU1yY4OY|k0C9|((pm_B(p~Lw9|#H z)kEMcBihZPowWe=Olv{A(-$AnB^vF3Ca5pkK^(<$!vW^!@#wIw9AH|U5%f9M3JGGk z`BIZPF=%1VJA?iF8XP~{_Jit75Mvz%B)=QYZ%EA0`7j7%82&v{N zDG3&x1PwaZWr7U$3k6xYUji&PTPFr>Oz#On_X!8}E;Gprw<;=+{U=sD&?{m^d2EbR z3~fHw5ss?A?j*BiLeRSP9b}ZshGDQlPp<0PnrGfTF=%$|8L9}i?{910v&kt{D&F-{ zGks#vvrmNzPtS`g+&i_xG@saCUva2#UErY)%(jWaNXFdGe3nZRcq&(^BMB@5k2=WJ z;86#85v8G)=6PH?zXcwb%5R~^rSe-8#Rrc&JRXzIZ;21k_jZ8K3Judy<3Xd0{nZxcY@#U@x9=yJ$_tY`vnlo_H)5Ec>k5)_o1A$0b6lA z=mYkFKkV^3{p=?|Y@CtcPkaBX!MA&SEBJFB{}%j3k000HegVW~4F0C~Ul0Da$9KnZ zyyqPW@V|N-rJ_CoViTiO)F(hJj#5!y0I|5VpI>@h&j!DV;(&kW@lD`AcziGTj~>q$ zV7~yeQMY|#1vt|AhP3dj!E1Yb6L?*Z?*?z^@j3(P1s?AU-qPb|gSYYcHQ?<%{s4F< zk5__s^>{%ZUv=p29e3u@3p{=RJlEqHC({c&UId=!@x|anJiZoun8%+1AK~$R;G;d> zm~UE)^Y|F>2^Qx|Q&JXB_5n8#Q0VcO!HYc}45k-&yf64{kL%0Bb3HB{@;r}AhrGb! zQ;EMYiVwcXpcD__y&*1_u#lMa4Ic*Km0+D4+4MKM?!h6Pk_86b=Z9TpZ55A@a-Po z1OA-H8}oUR7d<`z{8f(^fxqeT#o%uTiMS=Y7RP%&;05r%dVC-F#~yFa$51}?_(<@- zd;AjcFFpPc_%|Lu0RElFJMyuWA3T00_>Uf+lOCrV_*xEN!GrNT%U-)!^0-|rdE73R zJZ=|D9=D4nkF!|X-^SxCmiA-c&sK678Dsa);`%B~SK(3y>N7G}4734*j-eNL{2K6F zPe=zB{k{KI{PR412po%uE^SSEfyXZcAK~$r!7yF%h+iIiNXyB_ z7LRM;r`NnTfQ6r4^IDvRpI-A?T#G$k^IDum;6|>Lf**|4tb>0uhv$IvabxR$uKan2 zr#S27@9_ij=kcQak2@Cs7IEh&!oj(X4OpuHkMEOzEBTk};7P|eE^%G_GaNo2oMRj7 z|D^mm09FP;J^VdB9-Lzv>wl~KEzTn9M44Rh8fd;-mDEPRpakt)f_?JWGEb}S>0#%7 zW^)lM>bCvND}v4XnJQ4q*US<;(AQimxUa9dS8z{X zvr}+)U-P-(>wQhFV&DsXO&7tfq!)aY^nwqNUT{6>1@9!i;7z0#yn*yHfY*>-a53ox zFCo3)1*8`|m-K=~q!&Ds^nznZe>U(`(hCkEyc&wW6!3rPZ z!ndS^M;Y`}_%IiKZ%TMXzo)`S*zkCGS4xD4Ko> z!mmvUkLWj0_+*90(e_jmp_U>PIs%tg6aKSoZx_4p3#$qLr^08t@LAP_f35J@grAKR zPEUz&o)^N;6=AL;FexQG;=o4=pXb8I5`J`pn;BY*_X}Luh+LC7hhaNE*9@FPw?8S@ zoF&*h*IX`me6G1outTnSO0ZR~`B1P?uKAZ>EZ4L?pJU&kN*;ey{Vuf#T;h*$L%S#RuQH1jq;XW7PLkOfYV5Y(zbYXAz zF<+lgMPBV=8q5Vg*T?h}e7cVrEBJ69bD`jUeav#fb$!eh!Q1?q>Qf-BchS36 z;h4P^{eQM2LaJ!66J>CAf#2kqD=(zU{+?s*68t#FY!iGh$9yFCW{&w;@WmXHIgcjY zkz)qV!~H~#IZLoC$6PMBF~{5{xF*LuC3s7Y`B1PV$NWp_mgSfh7va7-$Mh4tEXPa| zoS$PZ6`Ye}ZWcT{$2=xDHOIUwI6lYx6Br*^r4DbQz_PFWsNm2P21E>cMd5k_OZdQ) z@bmoGA~PH^@uBcODdE@oaJ?>*9TbIk%Sq{bQG`ER0uyY6tSW`O&n9+ZZF0;T^QlPF z9B$9F4|2FS!@ucyF@8VxHe&_9>&;D>_Cas%$moB${okU0^R>cX?ae(Hxq2?Z^)#s# zz|u#0oAc$qzqk3L;61&~X2Cmpn^y!^^)_D!{;9V)_P4-4^fuiDujp+?{Wcgmx;*U| zEIBl^=lkx8T^o-}Q{U9%ja#kMJ#1aKlM%SPSsG6-a>~8v=E&sU<|7Et`d2S^Z+Fd- z>0#M}#PKTo@9~$){vQgjD|I^eh@)^creEQ2HKu4;wG`Kh-QSf4_dca*PZ};ONMm{` z?CcP<>ZBKpMd1fN)_a1=4fW-yX=$sDS1Ynz^p%(N5StJRcd626k?5>7FyqRhOcI{WGb>DRY6j>(ZcSlY8X0hcZt0yz~O| z(WODwP=miNq}vk)tcv6IOV{Jl&(-@~mIJectL^usSD#Gg{AtP|; zlJl%B=IgsTa(LmgpkbfWx6o|5-Vp71*)Al{`{<}03CSIdJA8@)JLjN839DGD8OW* zAHR9T-1UIOLND`+!le($oL8Hi8fg=CVkR$Lqn}R{CnWB9`>84(8XB28(3ADW515M= zW6tjQp60g2LC^YshHM3*TLyg6?8Xc2udXA|$d-39xI@EQT$kNxSclVSG_1vSA)bb{ zI95({0%UP)gs5RHE}@`dEv^gkG_1vWB9m%Gxc39KRp88UyXklammKf7GH5igbyO*7 zeBj;Jtg~DLxxx0Y@aL-NshJv!IQxiGCorF18DwR=R!#W3g#Sy%ayw;gttR+Ig1>aO zbT5hrjWV_nXH8^NN8>zMJVBhlxj6U7gL*X|#J$|wrz}^Jn^Tgwt1d<18lpUJlazMo zShF7OFG2?2OKn0-OAhINP$p(9b1)5~hR{^3=QxXqr^bz*+?>~ggW6u^);8&N&%YW$ zPo~3+jLxPl4a~?S8xSip$p*x7OtJy7D3feJEXSw;qiOOC@?487N0+dM^srZEn1Zx; z=-Cuguu)fsO7SI$Ex4I|N3ZVTbOYxI5I-!?VecgciU(oV;0SAgS{;ap{?5fxQ4`=)Dxu`L4PrbQVS zy0~@OdtHm&mw$Hu_pmhRbhd_fGs7=5!`Obo)1K70#g5J)R&^OZuC?jGN>c*`ZxoaE z7Ofo#%JT(r8z`>VOtPXj-&_;aG*4X1n6#JBny!X_yEbSx_QllPe5rR4=MaWm)Wx4x z$^5YN7vgq^3@=W0CEH0{H=j%i|GC)=UdqF%ip}QyrNPjwTZq3Via*Z9zuU%l#zx-S zY~CP#lfP_+qZ1S^`yFS7C2V`H3x;M~M0#FU+8ZF&HUzc1ob-2@@ylqT-(5$2=Houy zG?x1gxzEEr!nt=`7c|Ql3ymGoI6cIbVG41surzL7Mv`$jdn!rS7JU^vvM!SAVh>@{ zwk*hM(2r>DtLGELS)0w3%P9HjDmk;|8V+IBu;=XD+dQ=_m=r&<18Z#rwTQGEG*%UE1TPLhW!Z0g;F9U#TMVhuGN`Y$ zWWw7ndX@aN!IQwh)Q$N5X@VY=%3n(k%}83w%=;$b%iKI~B%&Aj>!$@C&{1phYhZzD)V~==v(a243*}Su*`@cO^Yo>?c_Y?pRuq{W`c~X-W1W@Q9;*-P2{u-8uH@a@?_6 zZN~6z1Jq^=-xj}wNV&d1yixVrB#06x&-<&H7{1jcnyBxF-Rs0|nq;ANXT#K78sMgf z3vg@YW*3>b=k=17%5D#NN2>N?FSUl<#52}<$yB=xl%EdTWVC7`Y(3h3)2zQ+GGbip zm7~pcDBCsDcR=^RxhUKdg|q57pm3V$%eW%=c3is&Pd_K`Qv}-XQ-veV+P~f!g(EC` z6i%D|RpCgu)}${)86ZEq6^@|34P@D~xuSbMS_bzWpEnfN3ma0vlO98OG<1)Qgov)Y zQxW>-C!Pmx!C#Bo`vn;UHUlL@=Cj2?$M*iREwfX34AXd;<2P#6a3{M5N@XerrMJa$ zS8;gqCdx@?I)W%{g!5X#yw=tg>{p-D1Gg7_^o#=x&639YW5q5D#mLKWbY9Y9#eeZeZcxCeN$rVgGu$ zEsxX_io>G9?) zXlHx;0hDfYJzl3>wA3rNTk8eBppu`3K28p47kRt~1&Ujo?*!?x-4dJNpnbu=)JM|Y zx$8at0{9A#AJT`2>>Y`c7~gL2_a)f(bMt`v5|)c7BK&m;s{`=YC3x7^6#phJ4!wS3 zdatI=!5&BVB{cl%lVciwHPjA5Xe4~&1Q~v}n_W|mX*%oJ^r(+dCpz}52$prOXld!T z>rx`Sf%x;|88;$pCWxB0@+Wwb>bjCqbx+Cg=X6gkW7}*r)4vE>kLRGs@8{17b4g?S z$}sMsLQ}H822HqbR%ow(F@Dl~Uj#ghadaa?qNCe7{1Upw__-=fJikg6zS^LgIu*gm zKhguDg)F0`tm6HJ&6-=8OLZ_M+(Z`99HQ{AF=}W!9AZS-&H(Kybym2E0bPUQ7eT}@ zy%awye9h(trSvJ*eK&njX3bt@EK4o)Hxzn5oz`A85iQJDtW9&YH0a7-d8yyFpmOxv zc%qqR5M~N3RTfdqtLl4Wkz~;DWk0=KQIvB#h-R zh5Y;_U&uxIiGSiR`+VO6-4r`1+#IE2TKQVxOHjlsoQZ2qoF}()qFOS~e69#f^An!| z-@w0OoEB+kh86O^K0omh@Fn@LV9Erl06TpF)?hO8UB#mS?*Q!_%>&;*Zop4tHe>M{ z_^-uu=4%RPQedK-6poAvz`(qd02SbQ;1*?ofyeuSsqK8f=A^k;&Bnig_Eb~M-{3Rp z#YfFVgE{?SpbQK@BzOP(#DligiZD4p@dx0AN?6FplYprlcuO3}%TLV0-%9j6mdT2{fMqi9e12N7FypK|yr^K) zPxGGLsM+Yqk~A*lyV+<73z(V5mNj4b2arE>u5bSORnR9stg)M-E@6=V&X1wXz@y3h zn#`k(J77Ry~!zUA9ysS-I{fDO3UsPX)oN0WrEN6 zTM9JU;~D6)3c0&%OH_b^Db3<%gEOUBd@VRrn#Df=XG*hpW0YR=JYE34z~fRwE%dnT z??hADGZcuXw`pZ!BsrtSnLnc`O=}{iG#g24BBnHOo^>#ZmwJEc(2d8n=DOYETBLrH zme7rDn_giaD&G=8sWyai^I{#{`iC5Asx@d9@jI($1Q%)D%GF%{d=cGmum1;k4t^{rpIf-`nP>^o=Q`_7qvg9KK{lw7I(lu_6dr}>{E|R_xN{@ zW3^g0wzVT&%RDU8$m^JU?_qM(ke+{U+Nv+U;c)9ax-z?-?M$+j>1ivw1!;-nYo;YS z&`T@fQS+PTzj4NX~vPy(@53XgAeogyoDSQGO4^{dB3ZdN_lUi|nS-2cod1?5mSu zDs|eo81}X6jwoXe#;sf1juU-c(MnFwzJgJ_XnJOaE0($plYyP`kIvm)H6cw7H=hA3 z8SAyl+YsTo7^IJI#{0G48YP=i0PW+N2r^_h5@d*O0F;b8v0g)X%W%8yuG#`HDQ#l< zRhyn4&Dm;G{O=~RGnuU^dQy0)+Vo8cm!{)0!6@q*mXxoY>v_|!M&s)VSIYq|3zSnC!proi+dmu_HNHloCM6Gwz~MC7aC65 zk8S4YgGLr2WhUmb~?{R}F4 zj9JXxsUz_qab!{TY#mkWmu$T&V(UU`w6Gv?v1+)18ZW@Tpde99!IRr0ag{jIcv>Ny zN1S;DiAl$$+#s_xqyQ?heoF8@7Uk2t6wCcJ?iv1MSZ%0`PIaubl5S~Gfry6SMwZ{M zOEwB$gIh=D28sR1-SMKs_}^^*qJqRmuduZQh!7E|PQbb)2P?7l^l%!SsF+QSxbk^_ zWCC9mz&-n)(YSE55C_y`-2NobN6d+a9tnEf35mvIJAg!+e?J_5vJL_o zK)O=$t_6w5#Fc0OVf$=kIuUn9)Y*=8mwUJ_CfBS-jRGmto+xvHs$hLi5HkrQgN~dn7*M3q=L_H|A z`@MpHH9ac+<>o3Zzg9$RQ^MK>iFfHjGyLeLFAT`<%M?FpcJ+k<`F{etU;ZmXu@w)0G=&I9yS$jp)qlmLrYi0B!ocIx4DVc5Yne8Xs z)*d>leZ}=y>3xBMtjJIN8Td56$}f(XkZ+e4eTk6!QC9_AQ)>wyTp!lhJlHVEFjqA{ zre5n$)6?kTsK{aPr?pW}q~|BHm;uK9WPWaYOzSu!ds*~}DvRsV9t~viLEsHNUWvlA zsmH$sZ|U*9;B7p9#O|SG;CnVd1c8qSHEJA~BJB`|sT=oJx08NMb z=^bk1W|_Ng3);oY(mK~)*)59`4x0P$qGy~Mt6E=duA0r*EEZ~*^E1oTke9c}j3kmibU{cb55=;OkkY^_{>Mvdloit)v%xl=OlRkp9k~V93Fax71S; z@jMUqBL(0GW4z8w-qPW9o^LKLkb%=L!5uF0~dITmMG(;Sy%S<@UB zWR)&&GH|Gsg&6~#EaWQ7^M+ z;4yVg`Rbrf-?p8td3TP9-OXx>ZE@YKCKnx|w;YFXs~?N+OQwg7vYdtWhda8l;2~fI z5~(ot29q;_c2d*il;j%h3?~7X3N^32j7{1sJef$ zz}0Z;W)V)|){2gfTYW^3k+U~2m0KlQj$565cvh4#mAh$-x$^EHXNb)h;js6SZRWZj z92G>@gCowN1JmUR-Pm0;MniXTc-tCXqV3k_4{IF9qT5GPv~Q+B_Ar1^aH8B4T!pKk z84Eg^QR{-Cx@}M*TUtmwhimS-qQzfNcGsj0N&J(hVl5t|3|vyTMFW?P!J>gn)?1^2 zOZE$*xl27wwzMoEy~ywC2Oqtv@9uHEs_*4-SzUGGO<7D`;2wWN#~#`~DqDx8c$p zM%V`(NFI-P{u(r80>*0EcFl=*m zcdktx+(pA)&bgKhWq+&C7Uotm#I?k^R+6E@m}DWdjF=d+8GCP#kyp+QENk(|HlMWC zh|ogBL>)=9fAmGnd2nDy$`>&^cC=r_d}%dN)sg9IzyB3t3`3qtuin z*OcDL0Iwj98y5)yCe=|#=laa{kigAe<*}Q<-R#A43JNsD$0@*nSQ^#OWF6oHV%BQ2 zZ9~v!>{!)Tjc$c!T9_pvuw9#jPPp9=HldSo8wI<7nHFYf_lgkeP*e9tA8Jn;MB%~q zX7EO?#%+=tVb}oF8LJkIx;P`S`p9Xs3w(oe^;1ysv-W7CC;(wlBrtVL0q`2 z=mOEo<8#J9>5k{g4ebkn$%+n%IpSN}o3l3Y?f2r;z+o;7PTfdYjq&ZxW1E7(Zv4@O z)kuUG<76?``sA2W61xFB5+~h6aN<-FM>PvQzLvC$ zJg(E3xW{`Ce~HJ{$>K|`qdcaMk6-Wc`rs>kB;BAb^>`(OjK`ZZGT-jw2gG0P{dKc; zoyT>vc7w&sVh30>-RJ#v*7TtBkK0w&!`8ul3u^zk$3Fmn+9!AjLfbvAtGLg3Tvu*i z^!S~$_p25!k3C7+H@&|un7r-%@5KK-@89?Yo#fd02f@Mdu@BI_-%mYWhm!u?;|Iv# zOOI19okH(8K%`;Oq^!@?0neFim@VOQ*iybD;ydZI&R_fXK zFYx{Y;Nn6QU>fZip;u_{wy1y+*iG$MWF8%b(K8hjae8dZ9|f~B&1S)lq!-K}yR!$*azDt408mq4E!E4fTt3GynvSG!Q#}r5nODmAbj62+2g0C)1;GjR@@W1m5%n zUiSoE^#t-npsP4FF>E6O(T#ceL9_*a$-^*70w-`C#7&Fq*l<$V7Pmb@qHkGT?Gwc2(m$|A5#?dmcfM+3$uIJO1+U=ui+rfwI~~oyM}wYYe=WM? za}H4X%#fRWrURAF8&&gB*`awK;T2Wtb8lPo*rVK!IYl&}ITR?G`Eo;ZFi-kr!wv233T)XR*Ha^iTTwKXz2+w z2P%D2xhZsG#ih_!N9k#}v*lN%0JRmL0@Q39cLdTsfxr`(?`!SuB}@)amwyZ2U43sE zEx(BHY}Z@9Z3E#W^fsUhc0g_l_9ajSD^$Uho`U5mJ+rCZE=0X$uP5-aC$Ps8_^T%{ zS_JI&fbLdJ0e1QHZ~FAF`}D8+^m$Qw3ebl1dfohs0zBghZ1)7VdIC>-0^LP`{fFeL zZZ!pX$ftkMr+>hwzt5*{6Q!pBKemyDiz)?J>j|v(1n%?%ZubQ0ih!35%hpJ+eW&`I zcvZ)XgKW&)c)?8oI@DL%sBv3%%@Xs;6O7hZC=Z(La-f>+cXHEgmjcynvgh)P4(vzl z=M)~5pHl@5xO0>i*_sU$t#jpu)=b5P*4r{~;z#U<zcrl868@WZ7D!0Cjx&+CF_vpFZ8EU!e3}h9}_nZ=E2~+7;jjpbBtEZVK=n zPzA6iYD9nn3=`2R1*r7t|L)W8^XWhJ=_jZFUWVan|9_kGdP20S5TBG3V%-{<6rR|@ zJoPm1lb`pQJ?k^u;WOLjGwVra)d_Fi)Pn!$#;=Ez7TJ5y(|W+uy3f;Uqk?_sCEk5CP_*N6Lwhk$v=7KSOn(hcMd9oCRW$Ph_H$~f>EV0QK)i@T6N8Czzm2;B zLy8r>h9=T)Bdj4|7+I{y9h!KpeOm2R6_{Uae49CED+|-V-)fd`#dgW}x0=mcgUsPO zXOMs5=!|G6VtpVY(&^aq_=d#6sLl}L$ac;kK?A5Y) z8r}_mRpd4*vL7QoI@sViyP4D|%44CzqpMi!Tpm{|kL}>KUBMT(H#ct!1`a<~c^u)O zQ;-I!B}m@K2$FXVpz^v{^y#=27!^94;nMslNSs85X|bJh9h95!uLX(wl_0df@bUHo zMQe&^y$UVz{ZwJ3*(>;Fe&XW{bLDo-;k+j|X?F{f$J;=q9p>w)#_L4c@}o~OQcpEj zkEotM1lFA`cSG{}j#K0x3KGZ3JsS5nxW6e#G=WBkXuUQMf8w-lpJv+Z&>@^Me>^|2 z1!!MIe^-#Wk|SrU%tXPrQQ=Q>A=?+O1%(rVqJI&`K7OHg#eFXBSReOSKJKUt3=b*tX+H83 z%50e9fVk74mS;ezYu>xHXWmYwwihJcy2UhjmTvLUEvDzQbiGGzF=stX*L&s`b1D9# zN{cCo)Xua-3uOqWoB4eHpnOKSe15HbqVBT5<#VC(*+4!UXuVs^N6KgOE#_zP$-3$m zXf1(>hHz7mm?&m1#a-&$r?Yo{F6h$YlUDd&Uy!H}^y=@$x0q|6gX!aSe>iu;V)i^v2=cBdKpm+tA0) zAZ=40ha=(2mfrt$;BXFe=3U=m7=vGXZp6u7Z$n4ombznv`$1czP>(bu8-Rp=0NPvRxGP7mA*V4WTJP{T5sx`v(} zX3IUku5W1~9EXP#Y9_i>2J3aOr$=c|wM=;&iAc)t(Z~-r>tIlRWi8FXmsmyJLztxQ zZlI1r*2s<2-DTZ{;T>`#b+^eaMVZ_*<;~W8R=7%TB<@DuK z(T86rcOI`}Y6~NBrJKC=9QXdsu$rO6xu=yu!jM;pG-i4Sy%dxyq$2P1ei7 zad9;M^*Q2fCBb#CLTFQmqqV0KTU@GVI#E#8r1H9E1y2Z7V1*GbWuLiZ^hZIJh-vO29X&R@I8I4fGpqHE^eWk`|zs)Th9k;DT=2MT` zKJocg0NrErv%<2dob;IweO~YTycm-D+XKmW6o8z)1(ZCM%RPcy??)rrc(2GG4!+dF zeE4e6`iy7frtsT+yr#)nvxT4O(6TU5#nmeWL9ui=GwGH=p?j^F_)`&R#0_1P#k{P#$>(Dym>(j zGyL_SOP`qvXWTg(s7nLIg2+yh{2AU0t^f3Js@%xSIrSU9~JWl_L$;RWTdJGb*|& zakw{xKcnw?Z28M#130X4U6lmjqkW`Hz{h!fCHMr7?;`PJi(^6z|3dGtE??~N4E$$W zygYUT&!c90f1NbWwfMo%aG;_)63 zTI%C-Xs374mWxbodKYcE!sMoR(bm6G9CdhBtU1P!cp;*}Nt4Yugut22bnek@%=9;d zF30X^F5ze!UVD>Sj=h|$cW|#|+y55O_Uk1R!+AHUU+Rp%D4cnd?CNxjkHJr39hueX z2z|E&p#L(4w3FM0yZ$VlhczTa7ra1Q3A&_xR>e!HbYy2ov^p=8Y!-$Zx%Dma4Jt=5 z_sV^FDi|P#-jvqW7U)S0DD-7LS^ftRBE|Ar-fd_Q`Kh(JtsMKnD+!ZL(iIj?3vUqQ z1PJe*OYso_U##B8sMYb3{Jz6wvz)#STC z^p@mLPRs{ci;ilZJeG1vz`Cb|bLFOXa|AVzFeBHx$z{Aq8IN-rKSp>`U$Q`cQ^Ost z%^!CKt&crZY3H(UX>PXc3R=t>Blo=g#Au*6I8tu%7$K-U+H)UwmCIv_@|fWASVj0% z(GK6|ahEE$kVV`g;^?aZdNhS@W?6I7?Jd5Q-c2-@JG%6qcQTl`4YZ>Fo?!q#TXTS4pL^^}(S9jiDDcX}K3;kSNfV`Mr;;ncSV zPKccX@`H2;)%;2}Vck!|Oa=BF(g)w+vz6!to zDvzYU&{}gml3wMF?l4_$t+(lLdiu(Z+C&?UxoKW{+ndYZ368CCXESr{J3(g8o5X~!`H51XhWnLrcZXTPi(&pr ztCU`6y~Sb2RpzaC*k9Jg&sn+B6`ZrekJ-;vFnVjfBF45{WioeTi}2ZIX87))DDPm} zud?m+EL#D8J!@kDMBset^{h2yntDC!jOO-wR-%-s5~_5bj^~pXjro14Y4C2)4%)A| zkKLuxzP1|LS5~3j+tP0PUJC7%p7vY#9bPnalPPJF-mIr3tYJSrr3G9omD#K9v{G~f z@2*nw(YxA-mztm7)lOX0sU#~kd-ZUlIAukf8>NW!pGwVLIeeLtifQ9K{VcOBhu&th z)Jx$=s$_`KNmZG>Am*g1Ot%)jRF%c72|8ay8DeBywRD(@HO)pvJgd}v{a(;*(kUt$ zy)?Ql(2Alt!O?CMJC@>Cq;y~;QTZAwPAB2op%#U81%%zUqgR}(3b`s~~9>pZutq$*h>!&61xmMnW zEu%BOp*3t_*r3$hoXf{8Uua&VsX6_r8poKD9>Fm+{&AyO{z1^E#)mhWXFmwes9Am^ zTsGqu*Jx?3Y8EtV@|4`Pp5#Ydk2f_R{m3`-#*9j@Yo2e$w{VvnyG!Q1Y_G;fBOAH0 zY+hzpzHK*nW!do1?=s7>>-Ub-3T4@}OC`P9#;+s}o!a8?->VhMvU%0*H<@MG*l+Zk z%(86kH)@lq`0;FBVEbKWSvE#Y{4TRB8#_jRmx(3Z9xE$H_zZZxT{+t0Ji4wN7iCP^ z2_Dx~+Q}9_nEfbeS>}-0!R&zeEORWr6*@E7MOa4y$7~;PsQb#wxgO^uKb7+=jtO1} zE%5k!@P!_~6P#s^rSm9hS>}M3XETgdF7f`a}lT-L38*y80@VemLO z=Qd^8+@Py`+6S=6uH0_%gV|S8>gOz8maQAfFM3=zl3(?4xPw&rW}59wy4d} zYfts|(f;vv6P`;%8dJ@P#MwifxKyTYl${=aU^ifH8tS3_#fu8lZW6O@BKWEZx{-G~ z1lRaiDjI!TGh*9=`TG>7Fx(l%*A9}!+QU`iH*oRe&D5KkeSgZ}bYVi1k8dc$t*LZz|)W@Dv+&S~yg3NtK{+KV=1rj^U##>9myKLWK{j3?wl#y5y#BNo)j*5YD2IbF@`a9`#s~G}Dx? z1SkB51Q(_xNTX27Y^iExAJW%riImo*DlC`A zv==rC*Y%z0;a76oia7Uv-0n611loN9_NdOV_L1(PARAIR8oyr|^>P`#Mn+Mej@sxR zh3C5P=c@_7L*e~h_+P3C=aE)3yGf%WkNkUhJp7X)3~>a+)~W@t#}UI^_&wExU!n9P zT=*S?cZg2C7T^bG?iFVi3TLN^`);`xDZVZ;V7~1xdBhb#w;77Ueh|rs+7kN)S{KW| zH~yN-)s}loNW+|NZNb&fPrP`Twp=QrMPV1>Y3J7&DA~vY)=bhHA8I|Vcx^>5Ue^(P zSp@5Pf(==0ilCQ`CPX}h9q_10@>S!}%4}LVgRta*#$^1c;rXi2T!nMWO-40{qes|j zK<#3FZUpr7;u=0r5W#Vd;IFD7I7tL&int^AH3YQ({Yr#p=O?}ZzMfLRR-!k-(L1Rc zdP7C8khST1X{{|QJ`|z%@)Pe17Uw741wLuUd>V8JmY54a4Kio4J}T*0?|7|`O0uy? z?2kf9vav`kjlA{mi+>wGN22iXM=;Ft%&DEczg7iZJ-)SRr13Awej&rO?-n#4R99td zs=B&eOl`SasxDfb7F$JvU94)N#eIaWpk0K*_z9-qv!G4$m6TpH+6vXC6HmW^7n%8= z1x?#61;yen)TW0gmJrWG+4-7~Eu46qjC7LGPH_$UJ)jn#0o@na@uM z&Z&{s*tGt8Fz7_|TRo5NUvB~@f!%`8^vV6J_O*<~w(vCf^?&CW`?7;@nq1w!0<~*H z^_AlA384DpV{+39kH`&o{|vkd+Yl;w@d`@bo|3iCM=e_%j>av~k)Jj0iCn5bu2)*G znfQdbL$EL5L}+@g@Gb(cHa+$So#M8sj&HM4YF=ANeE}iY<5EHP_qcZYc^=mn5QbR1 zJhq975A*)A0_B*%*AUPEFz8sCQUEw6lvxD;WyHTcc4jYLWzZzn(HsLxRKnuVK(teo z7%c&v2mdl_atcWXFR>;Yd#O2H^Y3H>XXgytho*d!4^S?)*&TFBf! zHN0!N+5AP&rSV9J?TDV3A+t@*-Yz58_cpgJ?rm;cd?kBh zI-SMav59vRR(UoyR{exkp53?i%6M|ds>bH_#-_AOS5@3iO!we+lhpK3I|i8mbx$yl z+S&e-j7-^<&ijBh2rokY%tj23VH3S2y~j`fD#C;eSQ~(BOL7& zj{LU+rXgSIP(Kr{PWKZq&A!mLcD7gUkg>s(SNc+W6rdH*mlH-xJFq9-3sz=?)*-vw zY#m`)nPoTIPU|mr(?6`g*zH(ZmMwNibN^yk%j*sYP3ceEH`^zJE;&pP)%irwxV#k znhMROwzC@I^rBW=&4Pn*WZbuv_O)%CDJ|Hq)x-<+9jl)M-V1BhRHacQhwV=T zZBx-fu8+cLsz()${5-61`lH6lIXB>^nTcWTf%QsqkDB;lL~LuVBQ#LXeUEa-friv73+qCkw-5;XZ~^yT;1XbaJ;Z zlX(pxvkufx$w~a*%xE{efg&&|{r@qe{nMW)9(>RVbOk&uXFsUnTve%{_~KuFw9BHp z8iAj{FD*JXvh9#!MtdX*i&Qh(2mXT@?UT6i_P@<&GYpo+ycuoF0BPGJW_UB&)?W(& zH-whOG*3s9`Kf&(rLDDCoK)IQ#UEDLwExYF_8#%atGYWx9)Wj_L<62R0DfEP#wRT*9#uXJ8UNFa_GcujKwv)se#uV_@*mA; zKUaH~<)AmCZENezXj}iA92YFU3!GuV;@*t*dD6qhuHm4Zalj__X0&Z2Z${hV<9SHP zFks`TiQL-DHQg{zG-JTgQ(=bqi_1c`RiC)4ERlumOyprr zdfj$mZy}75&c5^o$42&!7{@gJ)goAS52JIk54EfPf0TU-Tvf#u_w3mlIJ^|Z2Pnt^ zG(j;@@reSaruoQcX{jN>QAq>>d}a3@OiX+wJFU^Oq_Q%zJehekEj2AoEwQXDP4Q7F zT4Gtj)$;qV*?Z%*>-~P;$M46PHSaZR)~s2x=CNUdF$|RBYWD>}CRheZh%QpIg3TgH zv%1|A+1D3Sm3YuozRLYyPg?&-(Wd=!29{V=rYMl+3dr{@5(PrZ*noZoC|Dw#Y@VB- z=vz-(+g}DXUKh4rjv_frYTPFh8L|t~lhzNwT4p?HO>%`^6qOIOsS&mHPg>(#5X~eA zzw(m(No#~tgJ}--H^z{=&JO?ycar+kfo6&AN$bn!%?Upvy)FWAwA60~SDw{D1)l*i zDH$-DLn(f8dR;@fzarnQPo5eLyY)%y2Wra~la(!vM5^&PV>ak!m}Ct9MEH%{e-G4d zvMTF~r>g^r{$x)aQ~Qa9+rm~3_-g1$idA-Plm%yVnt+WXmh(s~ub`=CE* zzjLZpMhBewL0+0~-;!mGt$maH-S9#!+$G3k>ze=dr1b-}Z5Jbx>>A^#QnC#h#?S|9 zhf^F;3|+ATg<6KupMEm=WdP3RA)IVcOW@|CQb|b|K+7n66wcq;oW7@W<6n@JhR;UkD}?G&({w0;2LlB4s}>+YwtMd@{;;gUviV~?Nyzn-(c8{+5_ zycN|y4#2B;)|!|FEt2b+(?CK)0cTWg{aMv_y{Neadw?2v1QwF@q?=B}lt8c3NF5cW zyaaQa+$tQJpjZE7ZW~6m($~W(Cc|;FdOZZCghPAj>mev5T-RH#M#U1okg8XMBPFc& z(yK9(OL#ug5Ti)XZg`-jNO(k=UJbog!jA&R3<|h%(8o-##vU%k4U34aS1^O;OD-OsI8V?vXjpZ)Y|OlT7J_t&cjn6OWP zUOm`^a{v!BVI@$n9%aJqgY@b#CL9y2SC2Dcyv$IYVZvP+>eZOfWcg6!t0xnTqp^cr zA$s*xGh$V!UY&2kM;htXMOKC|y?UkzFKw(>V?vV!ZEK=egV`kfZBxB^o|UGVUcJDC z=ZEXni%s~x2)%ll3G0B}%T14~xn331h;n-fqC|L9pjk?=%a7J*Rq)nFuTD>U}1R zhq9{=nib!NiVvGG9%!%r(#(qow5z`{!;c{RxS1E5kkzNm@Kp#ui%$%}Ok?gHy6Ydx zeih4)*RarXbTdR^)lazVX~OhoEw6`1)ZXYy!eK=1RE%#jSvpKLnnd9wgjGPKX2T^l z`(bi1kxZ1~<7?+&Gh%|7X53Hi8-iYtBfG;`N(lY@ez-LFso;VBH@|o}oZ_R?>+U5t z4)^!SZIfO%h+NEc1IdM$yqjEz$$sQQJl;hvmL%!qLh_}O3klbYTsK5oPXZv)x|2H$ z-+>_)qAZzQNUToeLRuw}n~`33C%IWTu}<#f^t!g>PKDuwTu7`t$c4meMea=O2at^I#i-dvDc(^t$F0uowqz$z6uy?Bp)T1r2fq-mE6~d7QH)cMUXba$iZW z3xeAO|3odC=eIAE9{|aC#Qt_N)RI>hLiBE=>DW+PW|J{$AN)`*=t~@v0&I7O4pO=Y zY6~dMVS)_>WiHat*}8S=SdsQC9`+ksJ1amu_^aY{8wtvhz`@v+3(eLvKd<_)cPQyk z%a3qi6ViG~cHO)&wPhx+NK?0|zEzzii`v-QbN+0_z8`Oh06F`Ot$i1;oRE&=2o>V! z6@lY$KSVe+TK-2#UXf}M^v&kA@8YS+T}VI_nQTzRy-2e?)C-D?uqYy*Bp73u^4_J^ z8k?Jq(3pwV+HfaPYD_Je^5izJx#8)LG)_xF^crcxkj8oh{FK=lM?35?9Bipw?h%aXaK5v6cu#F(6%4MlGjp zK77FjEuU!eliYnr*nBe#i#_9OSETDvV%i;ThZCbz(d`g9OI-x5X1`frJou^VbqraP z@$Ae?!mcUBzljlR#hYD7Wy5eOF3wRKi4PhofnCn4>iWKz&$FOlkZFmovYhc_b!17U zl{Hx?e(=LbSX7)o1gTo#|3jg~Xe}D{M>bMwpygCT%MtD-T9e?jNK3Dvl4kR!c;|P; z+53Eu{4nVhTH%J`QynN>!d(EPHtRTFivdJDV=reu5fUsX%0z=dl(sFW!Ef0~hLGZh zT1f9D0YA!L-2VqoUJdpaGvGQNk)43NAwTiP!t;j`#Cr}CAO4}l#;45(Sx_a3b)Po? z0~La^F-%D0(7e>#Jr&JtOHZXt?dmYEEw6Y0*Nh}~w9^22hr@K-5Z z#DuDGee6YB*ugR+F}x4OR@pEljXmohSf)rU<<3OHKnw&&pTL`3&>zoY0ac5uA75Z_ zwfPCg2NJS$jb%AL4AEif_$1&S1j0!;jQ`9p3~E z`bQy0{OHu+&_=Mo+?wHePfqsRPic1tF@<$#}|8usA$a z8*Ie`nGqBZ;WG>_380~H|C-b9jT?R4inO**q}A-|nE$f8*AKv}#`mk`hDd+hJOpAA z&H>!agg*n^Lc-+<-vdUY?m@W;5WN@BD5Nh>=z_zHW`B~_Qjre1+Lo|Fi{jy;i%dH) z*#RG_jYAmOiDTf>@vEg6F=QV$HdF8vnDF^qY1cc%ETVzE2v`eg%gf&^!VfM(5k+PZ zRdEm`aacl#X@4s%60YJX$7G5E9j$$Pe6oRLj2xddn-P{Z;+?;ht}Q(d>K~)uJPu+m zG|?IvuL_?VO6P=2R5KNa7E|_U!k}J{!#sd4p>Ly{5t%oXA?}H7Xs64dR|k_`Kj6>` zDv`8%Dd8p^j{rugGChpZW`BV02siqpJOS^+)%Qnlz|m$oIe^i2nHR@2F0?Vi)r5bw zd8Pwz9eTpYCi~mrsflM?yv>B!2&FMMlUyKf?Z6koPjq>d!qHRt<2_Z;N8yb}2DQ6M zCN!y@1Qwa7sTRBS$LU{?Ns{j^Y}bKp>zi$n$<UoX17&E;Snja`{klkVl2v5)IlZcK@x! ziE_?;1}-(OS76lt*TMY&%xE+#So+8%WVLiHd56TtUOmP4ocD9b2OB&0pLT?GJ+gKR z9l`j)Rzq*>qk%p$JPKO{ppUGXF71InGQ1AyK_3bGBMpYNOheZVKywM>nz^}kXCo;xQyAmYqdK!oVA|m0=>vk2mA3G||+=YL@kvm;vXfrtHASH{ z0Y67YTi+xi3@}pD5k^dsN-mhFmze9%`;A}HS*OXgo;IL?gz=_oy=({P*H3}FL08a> zj%1Jw$J=P&bVJ+}BpD@JWXKUQ0X#b3i4Mep8MR?yVo(5Y9@V}NWii?!o}jqM+Be9B zRC`^_4dCs9|0RQsiwxt%Hk1;9SKx?RQgJxnnKVc=9qxK@C4h(BS4XWvOTXoy3Wjx6 z2fW`yyXI&q9RRI@JZpnAyG*K(@^Bj2KSO#Vu0_c-LKegCG}2EJ4+Mgr9}=_S1aF~~ zCO?i6uLknCm{#|g708|&SL-A{B|*>O#jzC?;>tuG{@^^iOc;#MPpif>(gR9ASWrr# zuOMJRP6=NDjFO}fqU~_7n+y+z)Iw_|OuN$PE(yDm#ke3o0%J|Q9mMa5pr?LlHA%## z`7{oGQo8RFKL_!43HMV2FqlTeeQDlD;ars4af!#rtptMpJ3kConj{M zVJ7cp`n!+|%5{d@)XeTNvs3sh(5R_aDvr9|qJENfW&y+@flLQ-V$CvfqFSQV60U+W zVc!vI10L$r3<3WU5e;~B=yP*XRvdZ~JWK*^ins^COm$OkDU46ZgOm~wg158WffT_88QN5a1Y#^~6& zr{z{~{8m%e!+ofB6*_(!{w*E)JUxZuhVZ8|6nCK;41S+bJBeWMJB2Tj;l|NJX*Y!R zpTfV8;dJX~LhTZzEAQG9CX;%;5ab;HySRaAJ zI5>=pp+u^VAQfF{F0-ts=qWl9#XxMRYxTN0UQ3ecTO++(yumI_%5{6H1a@gDt*sNG zFdwg_ZDrV~Y1(l9n@+cx`_DhV1T)NFNH^G@`(r^spTd;F6z*75DiscJCO5xq_&UO9 zP%c1URt-Rx4@Q>{z-Bp}2>_goG7N;q*4~TV`l`NE_So7}phOj>XxgPek4;cXE@~M~ zXfMNHc^31`AoNXD3P~_*@%ytYQ>{;@p>;86-5({Wv>PhLoJI50UbKp?ypqrDk^^s6}}7XDbr`jbROywX(VKu zo?@+OkY_M#(((+u*^o2s@XjGM0%?uU{}>ItUTcIAWvFqjZ`Zn=)H-w4I1L%OR0N0e zW<%aE8`IZp%&TT&{+crqA1)q&Gh~`v$^JEGC(e&C9maVND+$vbEWM5?XjMa7}0^aarbzyMrWvsUHmNenBdFxh zf$KfqoIi|pQ?NHJlJ8dhoKy;;{aW%*>pkDtJl@x%c^^(S<6{!_HRDSw-Nm&So_V_n zZ+dt#ol`VS6jACjJK2WK7_Pp9y z?C-%R@Z?m{rYE1J;j1xBywcOadq4_*SmK?+2dPkeMS3z17a_g)DWy`>^x~7Xa)z?U z_2$_K*wvdii>gfc_%8XKy}Qi4p7W5){y#tdXDeh;Rmc-zEY4LX?S!N? zb;W~cGCDGicSgqHX}krT+%%pArxLz@R8VWAOHAkUkie79BY0U)aWI|V$*=bm*V1_b zW$(l9;o&L5+lRMpmYAZSe3~YzhqexZn~6a_g&HCA4oneYckz42)uiYjA~GG3)I#P| z^keXoWFYh$s|IXyD9WRO<|mhpG@L$!RvCk|dy)1JSS9a4+IULq!$RX%`E8Tb+Hn`K znHVkn`f_KCESe1QZy<{;`J+~H@4&tsCeW(3de+n8m!Z6c$n4J>^N+iW=zH<>klvqn zMGJ@b(;`$N___Z4vlds|>OSqMiN?2CHsNCBx;^8zrc;7Lck^*(tq^f<=(n#`3>?5m zb&)-`6iG-LQrn3c2+4#aeg8L;R1V;A%_pbM602Ek5(R2)mB^_%G>+Jlag%k z*+2*iOhi-f<-HV-#cUq2_g?;GR5>f_q91Gv8esiKb>xbkM1M&asn@pQ;6+WH`Sw;KrK>?@kaYp>^^2> z-;nCfe~5p?QLDFeCLgN!4Fr`PyCcMchxz*y+Bb_orV>&+CxNxW;%6uE5Bb(q?<oNXC>ef^pSA|zJCSpR8qphBppfnwN?uv%?u$ol80mA4QP<^`Y zX`*NjKcv)%^v7WosSy(&=lO6d$ye#Ed7QuL4|nyGyot)YcN6a}1U^H$iEqfw?k27+ zl=2u_M`Mw`h`VS&zrKiX8R<;Z8(@V)xBaU2ND7w608xL0NkpwMAW9z!mxx+nK=cM~ z+et*NFd({dG2aYny){gY5_6aERz&I7m+%5ZinUnEyZCA7#M0quV$4$B&j?<#lzR+l z)KffHbne2Nc#l5C2WlF6&*OD2=PS4}P%bmPho0fs$tVvKZwjbsTf;=Nm3$H(7%$u_ z`6hBZui`IKtzWL&!d6)&GCyw5=U4d2SwXqC*t#P+Q;d{`tCm$yQJ4R0snwqf{PYAXhl>uD>B$SrOw zp5KNgVkJvvV$U|dSF4NxwD^7Q1eDIi#`iI%D`SQ;ar}J@W90YS4%H6jb=%HY7^x3$ zw^IMM-AWz3!$>`NhfM9Avje#DiA>!15W{9G^N!icFKOVBetUTxH6ra}9tkh8r?=o^ zt}5^pf5Mk*o>EN_f&0)1EZ)-g@nkcVDBH&;G=u^|Cpl@_OGh7ytNVD`v`SXR^+z6M zD-26bbnU%}c0ez2eA}50f zpn;Ts&YQtm_c_nd$Y3V|4?}s7P|9JRj;O~E^8rS{zQcS537fP^-X$Dw`FkEocxu}P zHDG-Ll=7T}2HQXmk62R46a6H?k`=MDl1CYyeu_9-$zwE-)#G&>;ZB7lM|tUZMRfRr zM=9}!Jjnh6S|%t|@+I)96f3{v$J}$&4MiyXbIg+92YHm2854T` zcRayFPk6q=7^5bLiiK)p@1^f}cP>0t+=p-OCfa?^dmEnp-9-NPyrUobAG1|Mk#QQL z`$RW!(4L~-S%O~0V~uoYtN0yZzr%(Lq3XEMO&`>e zJ?eO8;d8=yiboOJDW`dqMr{$}PeTu;l`|)4fN30?m1D z4{_tXQAFnpMiChoj3Sm_kVS}}$Sv*RO{s?IN+RMtdXcx&gx?X~P&BCFVSHr|5m&?G zoe+qMUNIS~2ZeQ^!H-F#lCA8apN1Q=wug6W4d+Uutv&RilMJh=nLxO&@W|xKn0|^r z1lbXKOZJ%vE5g4&ilpO|iVqZLqiAvX3Mli+gO~uXU*T_R8f@iJ-Z%f?zpBK7YyJZ( z2grv{KQNGHDs`U~S2s8{#qi(?;bR^D=53kV?<`s@;5QE@0jj zy?oWqm`DnI)e*$odwkWNRPYU7bx4!S1PDoo;(zfYb8UE@K?6o*j0Q0~o~euh|;Ih_ufv!6p9aI@?)=8&wWvMU^F=g`V{sul+G_-{3-42p9O zl}r~Q{%YsmvdTDA8S;rC#Qs;+PnbxrL!(KqNfb)_)iji}%U^9HZd~TU;;O&e4g@>L zb>~F%4A3w5=!SR%|0Me?f{FA1b%9uL78#BPs52o6Yq%H|sMgO@C4uTQ8WFHrh)Uwu zI}R?{55<~LwJrZP$a^qUy`X5IzK4{d_LSzQFts&T9EQ2HRa3Q<5j~`-+9RxAcinG- zxrV|#5pftxjVf@FcXLy9wVz*wslJS9sV3BW7PM5qvOM0bX!U7@YWdTtrb?h&ETM#u zIdSTf1PHaYx`|wGYxNATN$@^@hkC!FRV3;j(Xp)>FQVerAzI0u`qShM7ZZNvfucNK z&D1KA^a2Wt6X6N!I~q&Yd)kuJB&fZ4c^A>4tvW+1fIyO^d5^SJoBDv)pqGX}o1{h& zb)u6%9bhmxN&Sds^@bhQfnr{Bt%*0cqxyjofH!?H6IVL)FmLD1YK4OAN0ZeyaIPn- zgJW=Ux?kOXbEbM}W+Ds$D z^3&mv`eL_f@~{ZS(-s5m!O3(#|05s#ba=v^kNgT73C$x8nn$#m@yb6k!cUuJw`7E$ zD!c?c#LsQ$qhgrjfo#C<$V=@y)>Vy$`nOUQ*Se}NOWy6K_S2v$X|RQ=Nr{#0s-|Dv zf>SBbR#+%DdPqn?r?_l|HDPtTXwnNx5PiF=zc)S)dF+VkLtP|^L4Gl$hZ^3UAQq$4 zQS3l-0eqgO4^s_CF{B#nuZ=borX_G??$tfiKW}Q#W-^#r4U7k*7{hOIimIuwz=Fk= zr>b{zG~sxvnr(y}zDtb|c?B|My_Mi|2fn)>B5^-eB1^e)iALo}Ft zmpX|;kUbv8>#Lf$b{Du8A#M7q1&|4ieZ=#9)#jw=d;6-x)sTAiPZ9--ie>}U$9<4@ zw2u%&P(gePv2TcKs!M+kQ9JQjKBC=F#O(JG5~L#c!rRZiJO+N`M$M0#XEhRPF#l z7SzW)9sqleQRc<^!14eXX%L8&^01Ls8Jh#dypd{01C?XQR`1aQ#c%bVq(ISbl$ER` zP-Kl#TN`=y28w0%9u_3F*LxC!#835}u|Xniv{gWruNYkK@dSx^qpi|L`*=5wR#yjN zwtT=>44bI7q&~@?sJ2(az+~kXlT{G^qFXj*s_T5TnwSz_F>W&Gw6%eE*<`hABitQBm$I;vS>Xz) z6o>z<_5#FGL_;^RPfUD@NO7x4fcm9~e1!RWVkV~OpNU7^Y74Q|t$yp?5vhOp#|?p{ z%SbFYwxv4^wSi1fb1^((LYnGZ?D2j#<6olq$5ZsT?eV_8xcFsk&X7>`O$Sv(9ZjigKmxz7>?x9{Hjofp+M8*>sKA`cMCsbHxdWt>d zqDOvuLiWuuO*ET_kclbYlzD1XMPn)Y8ljhBzMEF6Iyw4jS*hxQ(vUu19fR)L>nEO{ zua*F+@e|QcO33LDuRN)4g$x+&5E%>9aKtWgh&c43uh#We%U_7`bo zGHiptm{+EDZ;bN%^`|zGriM%K;L;da{0^6?<>I$$wTUQRD0LvL8WMPTZ*g!T_!NWv z#zM3*skew;q;`s>6^`<9pxGz3&aN>h#@BS7DY%$`Ceayd@$JVGyT`dzpJ-s zv6y(0D=VHj)Ua2B&iQ1LV zN)PfH+h%S*{>u~b5b$n=A_cqW#STg=2ha(BT*KyGaV(d{X?Ns7oP zw_FjgKc%)3>L!q->M7`y9-%E$+rVB9!gN@sCbgpFr#v}G2-9-}bm~o&2;$0zpaS{ErOov8{d0LH8_6uc`+Dw!`tv;GQgx%7YlFP6uR=FZwz_#cPTHIwOh+Yf@MRdCJ4CmI1nV$I8R6*W`tYP+ zeWMkQZmtg>h^L~gaCCEhIC^c^^Xgshpai|?i%{gK9(1=tRu^b|!U~VEg_i~EgTJ;STH7Kv2kVsxzW}5pEl03z^_7E`&+NQO zOIx@Yw_1IcR|R{2TdgWQOsX-a5?Nx*@4|15`ZR~m_52#OxpS6}ehC)!3+>EWLQxB( z14c(p%zhvJ2l3Y$$o`+#s6nKBU0b8J@~w$U^wp0T5xpxA0ljT-g-W|L-sdaS8FDcd z_Of~hEoD+(Rwp^26pvgD`6zzoJVJclN^R~vfhT~a5jbV7+TTwjJVoi7YF2oS<1aE@ zHkGDJdg5220$t?Bn-D`aG1sw7+5km!YXdQOgBjwTxe-B5TB zKY1=&!b<_;=#_+D0*qr>5^fS8k7cg|`N*Ud?)7X^7b`FahoJV&KpO&L>Sl>Wc?0pf z0YRjn-3&QcSvsYmXz?E8aAoPyhGLijIYMCPHrIio>OHyKb8JyZA<@7Pk+DUMG}=+V zg`&J$x2Q9@vl3IUK0X;sX3S4?`Y`V`kOHnG1t#NR+YDuW&Ng)*O2VYPZySViB~8kK z?@I`i@-PF!q`drnHQT5sXghXx(A5jJtG=Aahl*t%s0Vm?s2KO5IuY7DI(_Gd>MFm9 zv?yl@-i)1UCzWii_pi7ihU1@Xt+c5EO}$dA`$+8zZQ{~L>Nr?I{xU2qFPld^%E$^b zeve8gEoSYJ=91NW)KRctBH==;(h^$Zqnt3w%=0x2E67meK-hV6g++c5xfg^XgSy%d z8~is1gET>3=xD5{4#TDD97=y#vRJuSP4SoB#e~I)z3M%rDYW@meH>JZRK@Ebt3x6^ zF~>snhjFH+UngnFN>bEdGE!&GfK|>S4o#6K zaemvU&H@c{_p329s+a9opBst2<|0%;d&pIypHrPcesL=XmF*cuhbmdWi?rHmz~#s5@A zVx?IJpbUayuN+X5dP85qAwX1t0|#~VJb;f0o3zjs@*{jWT1}it{qrth>JJfeP~C&( z9zCei;hnLE)ckNy>F_XpMhB2>BgnR~o^0aOA+?FY>^QM>?U4EqZHA5e3>wlqVPei_ zSR7ViJMJ@e3y*B<&H7voP-!8Re?*<&C#m~*WAWt?wTs~?_w_dXLS3bZ{qI5S?)p+4 zN-b)5RBhggc64xzUjfO0qsMV84@tj`hsueE#vN6M`pNEH*H~;ksy0cJp327h;x%YJ zBqLqEDKlXi=V+prT5&juJJ%l9tBFv*QoDqJTpl7iXX)m_sUP*g;)iWe5l zz!FVtJg>(1$rML5@y&U4t}z%}`G|}QY7Yag)fZH!5j@04?75)k7{N)^YGWf9wy(j} zu*FFll)>Cmt+q~*o=RUm8aGGi0DCApkGh+tH#${37jR6vpFTETj*)V)s~T#BWC(fC z!Ew=;&PH9tVjui7^P>7fqP+kbBo|bs$3ySVq!F9kRIh8pR^Yf2P2A-o{gT?)31%-( z2<|WE;QDi!n4;)hCWb`0D88gRqhzYN@%5+fC_k(4)rSJPXc5|uHzVOuE)HE%TLjm{ zQ+de$2+iGBFJYZuBb+~Dk6?bd81}PT3==F6-uJVLop^#S{;ZDVCz^`1U)1pMa!hl2 zn^mM_++RBb_@h{mr|rO<=q0{iOjyR@BeKITqqG`-G4(R$t%2cU<7JF#i2qZU)utRq z$UiTu4>zU7_ZV|kF-FS2%9zdJBEJS)hi@~6i#0V;2h$?N#Tsf=OnQW9c!iY2nCu8K z_=?&uzB1-qg#G~44xvpC<0qrzX<0yiya2gPVgyXQSJYDIC!?F=F&_1CkZ#AX>Q{uq z1=X>ho+l>D`xN37tlMAzP5n1%?`^K4+L{>bgAO*Jy+I=Xsyen;O-yZ&zE}`BaXr2n z?irY{WC>@mUTVdGKy&SJQ?Q@%J9f`dOWN;hK|l>F^VQ#Oja@i#2)2b49tV1xr_%q z1#F`9zY9}H1}-r?R6CJG45pBu{=l4sJCF@T-#=lUsL2}MKrH@~td}v)0PjzK!g4`U zxW#|eMa}VcN&ppGZ}J;g+lPAJ(?sn2k6LSF*?vvk&z(5NjO&~jafHK5IAO7~Z`4-0 z>;j5-sN`4vh6F~*&m7iDTY1ox`a^M;TcQkO-%i{@*(onDjx%z=fIU;uW>7C&R|P(3srGHQH}j+CccJ+HeCJr)snty{>^+plVV-JgjOXDRrEtb$XCk&D?t=P4RCW zc&vh|MCT_YgLH4GS1dxr zi#9YDZeLUbV{HrZye~CBMr$t4`f8h~iNa4SMXD7oM6^Te1Ot&6<xYJl92mgz$Ad<^u)#_BCa zet?#1;C(7U8xA#nAf$>8jKIRD*WmfCrwv$k17y>%K+Ty9i+MBsG^N6@JKZEh+~9gG}4-q zJF}7Ymmfx7IXf0D=7ec6hR5j?uhe@cI=u(OwChR`6tqZPQrM@3_sb^Q6*a7k`o&zG z$wAyWM0^vWWoi^5dNtSj;dY8N53X#kMH-RQlA$C<_x^T6Jez`rNl6ne zNKA~^d}uK^IbLhsy&P@4_4sYv5o(D2Zd6qUt2;f8)t$j?_yvqk5Z&csZ@ktHa(aHO z_$}TLB+U}E*p?(nAZ3Zc;}z`qEQ4JN5(~_alhv_eOoB!;mM2!sF`&{|u?A2itX8pl zUwjh~21B_Rug`TNRvb6dUXK+w45)FOh-<5D4ytjy)k?>r6$XW1akj0NO1&A^4kD$d zG%-%hX{RM<6~s2{+Cl!_?4a}T4nQ+7E8Mkh3Nvb)37jXQX{@A?{s`WWvf}rf@mAa< z#N|?26wFqJh%t#;LaQ8FRE*%;tVE-c=s_f+3Ao%StX!;3MC&E>_9tp|#Q`XxrHV6_#Od` zpv`rXNT+u~&sRDww8FI}$QDri`A%9{P^H-ymDCpW?Ch-3&8SPA zwRVO*Dlu6j6>)5`*1jR`%F{(fYC2&hRwQd_h&!5$F_w@dnsvck33qB2NIUB3E|>x; zvsfF^qN|pKghRS&DR9cV$|5&+)#Bhg)>VUH?b&YhE8@Fp-QY~@CZkHbX?@$@+Q@lv zvXQs&J*p{ zfpl}1ADxKlt-F}o6EXpm=&5z&v)YR26ll>kVqJ>%<$tC1F7Bl{IcB@^c4A|yRvAx_ z{sS&F(_PJVP+z8)-+ZUbq*(ds7-*iDwRkQiO_S$^2c$#YfPYy!M4qRecVD`8Nil9t z?Q4XaFJv{@b(cn#x)X3(<3vbPo#o`zQjGFx-@0Fs%4u$CUQpBNm_wzA?5lM^jv;+P zZy0d;8iIUHUyXJcadk*uvFZm-!eOX>8l7O=+E2TW*R&H2`-5eGPfCAGPl<_QYJZ5{ zf<*6^{WTnm_1>Wci*t8t?QyB!c)177ar6KThL0y0A3bU}08L5n?admX-AguW@4ExF zDzepTQC=}fJIAqsjg4~mP;CguZra%P;_xsn30CIt1pR{&Qz!OIuY2EwL9%ipS@dv_ z>i70y@^CGa7U<=qZ5$r1b#zM)REl-5fX<`giQF>R_&fC{FvR9Gys3W3v?GkPv+QXL zjI{I)=PvW;oJ^}5X{XuKmKteYMp~!TYh>b8cSc0Y1U%o421py9)qo`(^q0{9`nt_6NSSF{+Ur@{L2Mj}dbV{C`$lSA8(lHV zBU6pU?f3THhNHCgiu=(d*>{;%1it1$LTQ5Kf5GrSVEK0&{`)Nd&xU`5kPvSpMmTzrX2sJKit?&_yO@hM(5J64O3-sRao2u>6l2{w|jPRm0!W@_%Od>CTAJ zQo~P_G|Izef0WnS@Vm<$E+ZhuN-*2-M_K;Q3_n@ZWdTj_5&#NlV)>^T{!q*Rmf;V! z{NEdXf6Lz<-z7kPqbq#CxzoCcl>4;@#02Jfhs|HL|zP>tbI(Pz2Ow?+uP+8 z*QQ`bxzt0XX52;Mg%)3k&3{ex)D?rbL zUqR6Q;Huo5{p3s{61Se!Ot)GRG0-@{*zMMH^2O-xOI zcs^fi-W*s|BAz}``AY z5WDbC8%XQWYI*yNC{Z3LE*D@PKnc;0VpRh7%}2E0W`$@NLWUJ;QyN!diLU>- z5N*N1L9<+Ouu!Y%QbQK0`FOPrkLws_VoXvAn6WMU)*0*AFT%;b6;HEyO_5Y(LW)UY z@b)U!{?yyhaF*aOM1~;7rU_0J`scw$xmn* zP$Mcrg?NJ08I}nB>##jxPBEx;9<$sByHvdA`x| zTZcB|fv$tJQ+a6f=9x{IuH!%Q!Ec?}l=(7a#y!@yKZ*oBCVObG9(t-5|93RII0Y}!v?pt!FSr=PByr!4IX5J@3p}r zZSegz_(6i*X2lQLA|AHElWg!KHaO1)a~teyg9B`E0~_4P2D_WuJk4!zp$(p4gCDcO z|F*$T*x)B^@FE-hlns8`fZdYp&)OoMv%xRg;FoRiYc_bj4Sw4OZ?eH#Z1DRw_``Jf z&A$K07V(J zhun436LPl=9%O^>wZS88@clOUK^y##4Sv`LPqM*}NZ3u|-V>5%izu|gGi>lJx=u-G{%Gbh)T&797hNzV9~c$SdhoCBZJIjNv9C$D%?d{J?> ztFSQ98S8Z3-RGVmPA7AYpXKT_epdIS@w0j)JK6ZW*n||BrO;J8y)e(&F@?>EEuLNA zitQO&j5;%@j@ZQ5yv%77!~jmpapzhv;U3$QCB_;U$+k%UG*?kk=42z;zhngk(~FDZ z*&{{ydCZlYAMt3u#?+yF!UJR+)*QyzC_wpWy5bw5^_^X0&T(bix0ulM=}q%o^R} zWB;p4G%9;~A;_7ZmoW{gdnQp^WWE1#x^jzL&N-4_P??iDsa zvx#Do*QD=XZdo$LC(1G<3;h?*_3oYOES#Q~myx(5PYeqA-l*$vKl|$Iqd0dCRaQe!%DhH@nFtj)Oz}R#+^@ zB7EjZ1aBue+c{&6ZUCuCQkZxY7fuHn@tH-l^Rk@O3#l?T*JU4OF6=>W5QoqA`|wN>(#iuO~VGvutpg#Xh$TqgxQLC33oN4kC1I{rItw!JgWQK}2Kd ze-#HN0k06Y#4`2ch5{uEP@vHaYgD(kYI4oWDUO$kY=Z{^;$I2z2`S!$_q4eV;rT%O zq*43!Bu`oU_Jyv3{K8^aVQ=sB549kl78E?eInEYQ?3z{lIL#d1$McdyRC0;zOMY_LWqg7SL9aET6LkWYKqBUbIy9HC0#K6$diYbYB1?EI5 zQ&x;%tl&Px!%&v|08`FoGZyY*igPYwhZZnp<*ST2*D+=DTa3+mkMUMp7%Sbyl*g+X zE55{(UB5Cm+(%LN1}W@lu%e81hblPUs3=L1*a2v#D825)g0z#O#P@(ZQc;2m5kE^& zO6FiuSfVKV@myl^LPc4Elaw_}6=m}Zg`pL%vXynr{@=>RUxg zJf$$lj|ji4u#l^Ya_JA$^Eb-TI1BONiu+hFXG0>m&)5jg_B*+9DGrO_wp_W|p0nZ( zTq#Y$RzwnK1-&`<^yX^!RL-uaadk7Ept&@Fb2gB(iXmL>H54xPJA?4z=#cxlvi||j z5+`EYJ(Ke(nVgNqp6Iz*oF&cU%8q9_>t4ZmSp|2q^XoXjzK$y^-{dTOBj;N;a-|$M z4>s@Oyb>$($)Gr`FDY&Dpu{I8Q##*@+XJH$KVL@h3SyQN@+y zGbk7ahLxAO%4&f4pIm9hRCe8=`j+{tEGR%#RtKqUT|<@63URBfxRI(BgsIwzFqN%t ziicU6s;pIWRT+*0LBo?&<$NcVJ)W#;jk~C{%)0By&LbN3{Y9_0F`^-_RCe3@<$Q=nCchuIFOmID(hAvzxz2=-G!HYkG-TS z6>q9+$VOE7fy&E1R9WPHRayH5koZznD!)aGl4K)_oLQ~=sG`6d!rj+*5*uYdxsZH0|p+1_jq_4(m`)X?Aej1DKuPL5^8XLLx zUQM|=Tw@bQYfAF{8Vi}IDI2mhb~In(*9%eL98KLZN8@83$0NxL@F)QuJPy(|z5x%0 zA9_Yp5}(u5y?7fr_eD(!c}ZheU-6zir^UC}@`JX&$$Vd*_k4Z7`^cTQRl~pvVK12O zr(VM!Yx-xH{ufO*!VG`?FC*PYrhlX9f7f)kn(l|DyU%q0*ka`S+sNl;i_8M9NY@Eu zjK8yH!t16RY9f$qx)x%)O@F279yQ%xO*gcxX8e4rp!*9(&;pgWUHEI8T z@?HIeek(o(8XU86UU3FZ#;m*Prh<qyb|M?(7a{*gJ%3hja{mwm~1wwIA@v} ziznvyenz=g92JZF{L+)oJsS$&R{SERE30sJK`}d~xbh6>q@uC&m(dBVY_9{qo_*p! zetroJj(LLNTfLl0x?UqXI{bzttXN1T?OkA&l%MTli&YdvfUcsPrzn0yS*Uo;;n%8N z%?<~u?3&CDs)Tn&{v>t`sgBN7Db)rle+jN36Lg4%4z`XXUyw3Z_uCi+m>K z7f#D8X5~IPdF)vq)R2=Wdy1|00e%?hkQ*<7D|prvSJu>wtjye8_L)ziD=WV+J7Y#p zey&_eurGZW&&^;j`xIobZ;^BB3ZlWWzp3>l=VTwB)Z8fM;r#5`Y`Jey@w8&L%9rsx zw$wMjFoUh}1>vhH)43n$_tI(1%sew|3ft|Q>zd{Q?+`imA=%ZXl)&>V5@?yl#f3#O zX1lM8edb$$gSRshso>^zmbju5C=;noxoe;Qj3!MW}@F_vpqK_Oe^C$V`A zp}Pd7T)V~>zgt&>&$(QOe&k1*1>27l*I%Kyt7lLYx>9N;ClP$iqwx$=pJt!?6|r*& zT>BbI@RM~c@SVgqx_zeH@y(f(!8Z7T@Mzx-qx#=b2Q8!X*dhmbbqQ6TfjyfX zpgfuFMcBD5RQ1X?h>J@E{qA1}22>xOo|l~q7INg|<+%#kIfulm8acK;>rgUaOa`N@ zLtZzl{Sw7$M!I8;M~c`Yf0=lN|ID1?DY7|5>^Xm+zQq?gD*$bMhicm8AyzkQ`pn4m zC1R^KQVrh%D%&XWdW+J@GJiM9H1k|T68F{(lzJ|{f#-RfFwf2@Dv&g|=nq_02FQFb zBf92IO1Lh72J~cC9^2zTtpKY5wi|JW@U>#*lfi!1GTAks$?Sk5pB)U4ObzbDqBOIR zeNR<<9|XibTL`Tc@6oUOke8hETj{rAyZqfmzoqXJ)}XVin7t85+9tjQ>}z7aIM6jM zrx+tI6E+g22Tse$!y=1`!2E|NO~=Rslf4jV>89+Jz+(1ZAcjlMw9MR$!hG}%n;%&0 z$|}xa?vDdCcH+B+sPXCn`TH~dF8PywcPt|rb#5vB9y>xINB_cGXdDe<9|jc{y7DF$ zPXQ_R1~I?Ptm2#*RPl2`S^4PntYTIXL|C%df+pp-a zyMS#CDq;tMz&RgLyUX^GT=2->DtucRL*)qlo|C_8@ypa{Ik~wxMa&zVmzkGe#6Acv z!r0HtE@FFv!Hf$q2z|^XubN5TtWWYzFa!$wG(>vE3-J zW;Nkiu{;33dnJk8rLy!Ts2TMgkm%xY+Czf78DSh%@57WCELZ~P)JWqQFXVa{XWe&~X?hGsC-=U1>K-#f4Li0i93|86* zZGVn1Di!p*`UT*nQuS{)qKY>+DgyjIQdN{8hGUx9)o2zwihy%6Ad`L92vgV(2-vV& zQucK!XYB>z^K<8Ee7oFe;}c=hEWpabFz{ZbN^)H^6JBrh=ya05?5VI~SP|Kah+lhE z4#SPaW2Ik7a_#n4GG=sQ2f`q{3=Ve9pt&iturOzai+vad;XuC0MQm?ap=&Z4=_<^a zl1UP}5FcX>qi$UrHa$=3GwcLvsi`GSu9ZWs>I#X)DVd$Rbj^4eQ+`oK9($#6uFF+G z9coOqZ#2d%k0A)j!!|YsmVZMB2+n-Ch<)4OVKk*{a)zO@An&OLS(9@xQ9&~N&>-7g zKfDe%1Zgu2QBe{iXQiS{q{?~B#hwf?Re%ikHF)ZUM$_2EMtS)&>otQv8WpnTjf>cO zjmger=qzV}i03z&?Key9r)E9DYqv?w>~rdaC3Ep$KO}}A<%%rX3!CO+)HKBiUr(v_ zzYQ(JA$6mhdPNbt*yQ2d%)F`WN)zZf_J}{5NXoOnnwXM#UejFmOw(yDn8C8x%S|PL z>lKtDwyvp`$_}lk9=)`(fs!F7_9e}L_7^zE!7YjUbTf>v+|1b!^%aQRwSzL0%*S(? zTL(NwE*Rif6hoP|i2Yg3vE!zaW0=6=I!=r>KmpXM)X2 zp9)90?^0O#aVzX)gzdOU<@xXcGG#P z1+1&H8acl?I(rj^mDCW;GmDFiZdld4etKKe97-KV(vgU)%)E>|;8Mh{MYu8xp(!nH zUd-IDHfI5u>@`rCecH^GJsHyFYBOlDBrD3oiLEIUTM?eic7*4#O%WK^g|jmXGxH|9 z*vAotu4(x*TxJg+jKG8jq&9y^qH1zs<}}c-`3&|}3-s#WG~oBw(Qi#H$(+mr?0mRg zY+sA~Y11&G*=H?4g~@Dpi!Amfa@1Uda9}?HS`Cq*vP$T?sw<2A+5#d0W-ltAU2jo9 z)AbXP(EAIaa@DIW`x`(EUT93J279|{9(%XNEVdvL80@6cv*EZDy59zo4vno2_IV_! z!$*+b&`aO0Ps7Zmso{VBXu)Wci$uE(Z*^AlL$Z1ov za|+piA`7A8u#zZgk7i4vNK?#~}~bMxJq#WdpCcad`8kTEGYA9Cn?WKjlt zJ_;Nnh2_?o5Tzi8vd&~z5qfn#jqr6PH1rKD7PZ7mhLyL(@H$I~keNi>I*vw3G~65^a_DWb`fNEs4g29p@7^`3BRlDY9ySZ>0fb5A#fmuQq#m6g1D=t*R8mLNrO~sV7~-=nF-$dB z)lKU47fxd}&sN14+^{1?WmU02>C&?_u=A!*%fO-zx-WE4tQ1}BVhk3X2zHThu0c&l zFVXt-+%lRb&VNO#t{n?70jL-cxol0WTr|BZcN5v0vCvePQ^FPVu!ce2vig+!jg+4o zDUZg2hiCzi!QP2AX4vnLdH<`F`RX$y$j(1Oa5+9F1*WT^ddrSs{?uf><#Dp!XXB(9 zVs#wpt?cDEnvqFar8I6<8kaK}!HeSRXVZ0YV2UzYoSnyl9{qwBL4nAujBH9N#~u4Q zj+TDKnUf6@$8X58@&;9Z=_;YJ>oS(3M&qArC6TCTC6Rco6$Hx_O1Sq)`gLDjR-bZ@ zk@8a`<>6MAk%et&1tIbka;{!3h4(sY^YvBqySao)DP3Go!Lrt}x~E#p>Q=Nyr@TN3 z_aCE#o0rxn{6DRodt6NG7x14hOvvRp9k)U*5kjR@Dx#vu{T6a6U6iI8O_9V-Lg)~p zD1=Z7Aqs=gA%qY@DufUxgb=;!*=vp8IrF}MzWK~H-}S8LeqYbtdya^T0?S3sGX{JB zhtYSN0Yr8Y{M9CNe^tx4zm&LN{;Dy8cj&DSym_;S23R}az*{=p{3tHA*@j*VeL}qW zYHVjO7&${>mSYV)rGaR5h&BjjdwW6uE85C4RkE4KmUN%TR}3x>_O%DB8*6$>S#B>`Sddp}7_QfD_6qS^6zT_4 z%gbJJAE~c9nq2t#tJvs%_6h~dj}%rjQrPEsNm)$qFj$XcL9FS`PrKb={NN@K7T?=? zp&uL;!nWDVhi&N{0n2rmE_!o2N>Mi$ga7UgnS9B!n)iTTV_tDP0=F%(kA{iMA|;)K zuZED*FWfQelLW4@ANjT99sH;?T4%ERi1v^ZeR!w``f%%vq7PK*39hF&B3=)2ZEl?@ z@AEI~OckgVzUM(#DnQ|1)|t{iKJ0ZLZk-Y2tg+88^UR9AeBHx?Ou5Fd3FpM?GCt?! z{N#~{!}Nu|Xn+Cjloi~q^q%Bj1{e_6mrDL+fawbc7!Ve$f`Lp+tjV-KzO1MZtaJq! zW7qZt1B{r-?7mXZz&YNY>_lI(#`G2CpCCfA#`J@NTEhp#xnPdz2Wty3NTA{87C0q| z#as)&YYe3)u2gIK@#9tY0UYy6xLBOh>-(XRZna1Q7} z=2URUvTwW~s$cW(NiVpf*jTQJ$C>OV=oNg2;sN6!oW+7M$p~5xtbP50z1bNEiMPp% zMzBzTaR5$G|JA+(DSHmStM2pg^J{tdF~$6Q!wm>eL);7ad$aWZSTOGJ{ZN0gZ1~rl z{;)2*#nrQ(ajyzkoj}RJG6J?am=?&!v;J_fyub$*0ALoCvsd6L3rYxL&Cn7TkpJ+S zh20HQ4IJr#>1P0(=t2n4KzxGaY{vkweQ`tP#sU5?8Kw<@E`A%lwBY+ko++_czBQb~ z8V$YJ{eC`dy^%k({x@*44YdZFBff`|v)%oJz;5TxPW6X?Jp)BU;cx6QoFuY;`ty11 z!hp~a&qVjWlJ>$ah@>c+PpH}HU~vFfI8A4l20~lj&8OD6Fm)FV;VZ0Tn#|#=rP_fwgMJ>!*J}*}`I;u$n8J-UhAfpghvmgO_!jk{IWLx? ztvrb8FXB=tloc2&PxRSUW9UpFA)bre+0%hMB{{~BBN!;p8p~O+F}D=n9{>Xidupt~ zYJ2g7)V6^oXd%DUYQv?b2UM=76lP(z#YCK!ShC5##u6dbM1w_5gH8qIxYvYt{dkjb zR$u}R?Jyr4>-LIMNd~{BWWbUhmJpDy7od=p2_v}XuTp<#GA|e!bft+bOzy{OOmOM_ z9TZDa`Bqnv(gw;CZu)^uuop`+l`n$UBLuPorqE+Hw}CRrhHrH>TsLPszt$9k51gX^ zHVuR>D1`-|>96gzxH!FQy1-u!gDQIjo(nVia=HEhzox^LX?S}sVsV24A<2GhXaTU&0XrEs-gV~OgpyzmJzX@cr9Rd zrC9j;3Vd|iZSiZMOSgbA_%mP4rM~CAvO&D&Ux1+jviZOQx*Q&){L0}Si-oMhf=_y2 z336wj2a7|`Aq)RGbKtxMR@i*UbKN4Cy@8<9s(H{^uXtjjUPEG_{fU$RAxk;e^5BCSaC=RcFgSiP$N%mL?FiwUB2k_B1!-{5Z_Q}%A&tK{dV>0`0>BIiA zf;N8`LMU6#V=XJ;4YLN$xtNA8tFj8@W4U-Y5qoU~LqjcSrmg0h2`hPw@S_?KBOixZ z!Vtc=3u4=bKo%Zz6(RpIq({S(r4E7Jk*|L^J2E5$Z0I42SS~0jQoyg)9QMFcoXuZZ z!Xk>#9wF=>OR*Z+B`bgS*$OA|bwgzA%n)%RzYCtz>eQh}J{kfA639+j!mzo~8sZg? z4eK`ZO{pK)roCaW6#$kG>j0lc{LJAH=oEr0v;grM!!sStWXHhnCe_?JAOR`x2 z`y)78*a4^a#jknkro7QolLoQBZJ=mESc>(0m#p$m z*k7y)Is0S-_tl9jZE>Xd&O`AQS0}G*_^AN2Q)TlN*grP%U@338%WR>8DEP2Ye3D;l z@_6^h1H(dFG@sr8o%B=OwO+jDU*q2s^7*yw48K;2@|bh{y8^C!I9$Zm43#c&=jV+> zSu<`zxnPUEh|Mms{bk{NVT-1{8e6eCVFmHQR-DK^efgH4-ZnUd{j`H%4JXn8a^z=me$?-h9(*tNOXiB@YBe3Ltp@{gMwfU<9T)R9U55LhWUH* z_4UDFG(R652Ibnwhp2+@d;mqO#hqci4?h66xb?iIxtW$#3>)Omzi_92z$tziZ|phw zeAFmCC+^DSEZ$D;BY4T#7CR`JySz;D%eX>uDgT~#7t}OiT4M+7_yCt}2W?Q!PJpLS zrT{NhwY+lc-|@v&+L_K`Uq1LBGBpcqh zzJkv}akUcH$Q@$E0;v2bh+6CUTE!ElSqKoe=x}Dg(H?qxl6^32KG_a?-T-7Q%^nJ_ zTJ$Z(F7@#ZWjF0Zz)Bj*?t)`hG*4Rf51wuxDAXEzDc_QP;QnGD3UwLWZv)*K2Afq5 zP!t*a<`0xSrqk}xmmw)-{0BwTrys&g%IzSF#l6HWz4}VDW zVFwvsYd>}fWyy}vi7R-vY(Pdy;%APIJzAn__Fd5aN7Z^8}X~`8%Kz1#W;It`t~wU7!e=Y zhp=4^a+d7~R??9e{Cc>ps>B{rQhSW&ytqO%fxyBER!@O^V=QM6NBT-V;nbyKUx0!z*VEpdEFr z1z+MTj=};WEYyo7IYB+fh*pOa;HxR@Y}o5j;*nnMC|?%s#BHZLoc^yHEi#>;*JH3p zoZzOlB`}f|@=NJbxWq5zjT;UhoW#cjK01kmeZ7uV6(IK!5Up^*`Pr`e~K>pV8{b?<{0TbH(U$EcS;HwL; z;>z6gkfZ6vo;CMoDXo0iZarUC(3uzS zx6Xd-tiC^cY6v$;G#bOyz=v3Ov4+>0NZC2FKu^|a9>kVg!bTrDzn2e8X3(+IEoJPU zO$b{)OwLY?3T2x{hq3H23+6zUOUH225xeCA&wXl_Y9zIdQ!7^MkfRo(6Qv%dUayv_ zR;ZS)9n&=mcw(xNq`P{Nbz*^$#96&iC$V*Z$-F-b)MM1bb6VA?mujZNFOU_q zv`gr0ml)k&Vm_pxZIVX3TAD_^T3HjnTJ=ixSWzWU+o|xk2`+K!PEOfsuC5;8e#L5O zYAL_|6|3bXKJG8+pkCQD_e+0?ng&c+{O=%ac=-Kib%WIz{KrlaYr${UbN-tcekoVv zV&Z%Uwj-Y=P9?rdTuWR= zoU;S<-yjRjawiJ3dSj6k61O9EO-1+a#0|t2#Od&2aGoGX;(Fp4O7{$O4R$`)2j&5+C571I$XkgGPatOzr<_Dq5cgCdUn9;rgZz-V7+&$s!~aLA5AOo!{F5{M z#5>$wf`ZnDSOT%d$hyRQlg2$55o>)$wj!1hI}=;NoqJq=CNaO0k8>a~zo(D004(rU zpU_l86vUH4YIEe>#M*H4GWT$lxT*v4-^B2iUD5r%Qol2Dl~SMh3vq%zx=Z@Nl7%P0 zp$`h$^}!Nw>Wkc+I1X$ZJOTZPU9FHUiHn_)9f>1HBabIG9E0pioJ#E32kM_Ez|aL1 z=8*y$i!3MhCXOU7BVIx52RiE})V-zq)$ zA+x>|K>)HYv9=W1gt!Fm2j?YbPn;8iJe^pv7+DA=fy+`9#1W?xClhyoyF_<^4I@E33fMGa%{>@^A8~pXvOwJCDDoC!*8=3- z#P!5E#MOVJ`z7L-OPrzpOG#k-0u}0%0T8z~!W>L_gYMml!->s_WiaFN5*kUIpoSbk ztknW}F>&@EzxSICKV~2a z%*x!oJFzy{G5Pqz%t(+8JATe1h@D^$&Uq?vDC~VXdl6R?hY%aXmW;bc6T>@zL{1{M zfz=^*KS5?mL$;eKz1Q^C3YuP_@KL-ILa4!6|vqt

5!8;N-EI?Kt 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 delta 141501 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�!jf;oYN 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

$g6v2)Wps3Yc4SL*eBfRD+H@t& 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 diff --git a/el-compiler/src/codegen-js.el b/el-compiler/src/codegen-js.el index 7e44b41..852eb7a 100644 --- a/el-compiler/src/codegen-js.el +++ b/el-compiler/src/codegen-js.el @@ -948,6 +948,10 @@ fn js_cg_stmt(stmt: Map, indent: String, declared: [String]) -> [St if kind == "TypeDef" { return declared } if kind == "EnumDef" { return declared } if kind == "Import" { return declared } + // TestDef: skip in normal mode; handled by js_codegen_test in test mode. + if kind == "TestDef" { return declared } + // Assert: no-op in normal mode; handled by js_cg_stmt_assert in test mode. + if kind == "Assert" { return declared } if kind == "TryCatch" { let try_body = stmt["try_body"] @@ -1168,20 +1172,178 @@ fn js_is_top_level_decl(stmt: Map) -> Bool { if kind == "CgiBlock" { return true } if kind == "ServiceBlock" { return true } if kind == "ExternFn" { return true } + if kind == "TestDef" { return true } false } +// ── Test mode codegen (JS) ──────────────────────────────────────────────────── +// +// reporter = "text" → human-readable output to stderr (console.error) +// reporter = "json" → newline-delimited JSON to stdout (process.stdout.write) +// +// The test function returns bool: true = pass, false = fail. + +fn js_cg_stmt_assert_text(stmt: Map, test_name: String) -> Void { + let expr_node = stmt["expr"] + let msg: String = stmt["msg"] + let expr_c: String = js_cg_expr(expr_node) + let disp_msg = "assert failed" + if !str_eq(msg, "") { let disp_msg = msg } + js_emit_line(" if (!(" + expr_c + ")) {") + js_emit_line(" process.stderr.write(\" FAIL " + js_escape(test_name) + " — " + js_escape(disp_msg) + "\\n\");") + js_emit_line(" return false;") + js_emit_line(" }") +} + +fn js_cg_stmt_assert_json(stmt: Map, test_name: String, file_name: String, test_line: Int) -> Void { + let expr_node = stmt["expr"] + let msg: String = stmt["msg"] + let assert_line: Int = stmt["line"] + let expr_c: String = js_cg_expr(expr_node) + let disp_msg = "assert failed" + if !str_eq(msg, "") { let disp_msg = msg } + js_emit_line(" if (!(" + expr_c + ")) {") + js_emit_line(" process.stdout.write(JSON.stringify({type:\"test_fail\",name:" + js_str_lit(test_name) + ",file:" + js_str_lit(file_name) + ",line:" + native_int_to_str(test_line) + ",assert_line:" + native_int_to_str(assert_line) + ",message:" + js_str_lit(disp_msg) + "}) + \"\\n\");") + js_emit_line(" return false;") + js_emit_line(" }") +} + +// js_cg_stmts_in_test: emit test body, routing Assert to the right handler. +fn js_cg_stmts_in_test(stmts: [Map], indent: String, declared: [String], test_name: String, reporter: String, file_name: String, test_line: Int) -> [String] { + let n: Int = native_list_len(stmts) + let i = 0 + let decl = declared + while i < n { + let stmt = native_list_get(stmts, i) + let sk: String = stmt["stmt"] + if str_eq(sk, "Assert") { + if str_eq(reporter, "json") { + js_cg_stmt_assert_json(stmt, test_name, file_name, test_line) + } else { + js_cg_stmt_assert_text(stmt, test_name) + } + } else { + let decl = js_cg_stmt(stmt, indent, decl) + } + let i = i + 1 + } + decl +} + +// js_cg_test_fn: emit a single async test function. +fn js_cg_test_fn(test_def: Map, idx: Int, reporter: String, file_name: String) -> String { + let fn_name: String = "el_test_" + native_int_to_str(idx) + let test_name: String = test_def["name"] + let test_line: Int = test_def["line"] + let body = test_def["body"] + js_emit_line("async function " + fn_name + "() {") + js_cg_stmts_in_test(body, " ", native_list_empty(), test_name, reporter, file_name, test_line) + js_emit_line(" return true;") + js_emit_line("}") + js_emit_blank() + fn_name +} + +// js_codegen_test: emit the test runner (replaces main() when --test active). +// reporter: "text" or "json" +// file_name: basename of the source file (used in JSON output) +fn js_codegen_test(stmts: [Map], reporter: String, file_name: String) -> Void { + // Collect TestDef nodes in order. + let n: Int = native_list_len(stmts) + let test_defs: [Map] = native_list_empty() + let i = 0 + while i < n { + let stmt = native_list_get(stmts, i) + let sk: String = stmt["stmt"] + if str_eq(sk, "TestDef") { + let test_defs = native_list_append(test_defs, stmt) + } + let i = i + 1 + } + let n_tests: Int = native_list_len(test_defs) + + // Emit non-test function definitions (skip fn main and TestDef nodes). + let i = 0 + while i < n { + let stmt = native_list_get(stmts, i) + if js_is_fndef(stmt) { + let fn_name: String = stmt["name"] + if !str_eq(fn_name, "main") { + js_cg_fn(stmt) + } + } + let i = i + 1 + } + + // Emit each test function. + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + js_cg_test_fn(test_def, ti, reporter, file_name) + let ti = ti + 1 + } + + // Emit the test runner IIFE. + let test_word = "tests" + if n_tests == 1 { let test_word = "test" } + js_emit_line("(async () => {") + js_emit_line(" let pass = 0; let fail = 0;") + + if str_eq(reporter, "json") { + // JSON reporter: suite_start to stdout + js_emit_line(" process.stdout.write(JSON.stringify({type:\"suite_start\",file:" + js_str_lit(file_name) + ",total:" + native_int_to_str(n_tests) + "}) + \"\\n\");") + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + let test_name: String = test_def["name"] + let test_line: Int = test_def["line"] + let fn_name: String = "el_test_" + native_int_to_str(ti) + js_emit_line(" process.stdout.write(JSON.stringify({type:\"test_start\",name:" + js_str_lit(test_name) + ",file:" + js_str_lit(file_name) + ",line:" + native_int_to_str(test_line) + "}) + \"\\n\");") + js_emit_line(" if (await " + fn_name + "()) {") + js_emit_line(" pass++;") + js_emit_line(" process.stdout.write(JSON.stringify({type:\"test_pass\",name:" + js_str_lit(test_name) + ",file:" + js_str_lit(file_name) + ",line:" + native_int_to_str(test_line) + ",duration_ms:0}) + \"\\n\");") + js_emit_line(" } else { fail++; }") + let ti = ti + 1 + } + js_emit_line(" process.stdout.write(JSON.stringify({type:\"suite_end\",passed:pass,failed:fail}) + \"\\n\");") + } else { + // Text reporter: human-readable to stderr + js_emit_line(" process.stderr.write(\"==> running " + native_int_to_str(n_tests) + " " + test_word + "\\n\\n\");") + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + let test_name: String = test_def["name"] + let fn_name: String = "el_test_" + native_int_to_str(ti) + js_emit_line(" process.stderr.write(\" RUN " + js_escape(test_name) + "\\n\");") + js_emit_line(" if (await " + fn_name + "()) { pass++; process.stderr.write(\" PASS " + js_escape(test_name) + "\\n\"); }") + js_emit_line(" else { fail++; }") + let ti = ti + 1 + } + js_emit_line(" process.stderr.write(\"\\n\" + pass + \" passed, \" + fail + \" failed\\n\");") + } + + js_emit_line(" process.exit(fail > 0 ? 1 : 0);") + js_emit_line("})();") +} + // ── Entry point ─────────────────────────────────────────────────────────────── fn codegen_js(stmts: [Map], source: String) -> String { - codegen_js_inner(stmts, source, false, "") + codegen_js_inner(stmts, source, false, "", false, "text", "") +} + +// codegen_js_test: emit a JS test binary. +// reporter: "text" or "json" +// file_name: basename of the source file (used in JSON output) +fn codegen_js_test(stmts: [Map], source: String, reporter: String, file_name: String) -> String { + codegen_js_inner(stmts, source, false, "", true, reporter, file_name) } fn codegen_js_bundle(stmts: [Map], source: String, runtime_content: String) -> String { - codegen_js_inner(stmts, source, true, runtime_content) + codegen_js_inner(stmts, source, true, runtime_content, false, "text", "") } -fn codegen_js_inner(stmts: [Map], source: String, bundle_mode: Bool, runtime_content: String) -> String { +fn codegen_js_inner(stmts: [Map], source: String, bundle_mode: Bool, runtime_content: String, test_mode: Bool, reporter: String, file_name: String) -> String { // Reset per-compile state. state_set("__js_int_names", "") state_set("__js_match_counter", "") @@ -1292,6 +1454,12 @@ fn codegen_js_inner(stmts: [Map], source: String, bundle_mode: Bool let i = i + 1 } + // Test mode: emit test functions and runner, skip normal program logic. + if test_mode { + js_codegen_test(stmts, reporter, file_name) + return "" + } + // Function definitions let i = 0 while i < n { diff --git a/el-compiler/src/codegen.el b/el-compiler/src/codegen.el index e0bba78..4e96fdf 100644 --- a/el-compiler/src/codegen.el +++ b/el-compiler/src/codegen.el @@ -1308,6 +1308,13 @@ fn cg_stmt(stmt: Map, indent: String, declared: [String]) -> [Strin if kind == "Import" { return declared } if kind == "ExternFn" { return declared } if kind == "CgiBlock" { return declared } + if kind == "ServiceBlock" { return declared } + // TestDef: skip in normal (non-test) mode. + // In test mode the body is emitted by cg_test_fn, not here. + if kind == "TestDef" { return declared } + // Assert: no-op in normal mode. In test mode, cg_stmt_assert is used + // directly when emitting the per-test function body. + if kind == "Assert" { return declared } // TryCatch: browser-only control flow. In the C target, emit a comment // noting that the try body runs unconditionally; error handling is a no-op. // Programs that rely on catching JS exceptions should compile with --target=js. @@ -2559,6 +2566,7 @@ fn is_top_level_decl(stmt: Map) -> Bool { if kind == "Import" { return true } if kind == "CgiBlock" { return true } if kind == "ExternFn" { return true } + if kind == "TestDef" { return true } false } @@ -2703,9 +2711,195 @@ fn vbd_has_restricted_call(stmts: [Map]) -> Bool { false } +// -- Test mode codegen ---------------------------------------------------------- +// +// reporter = "text" → human-readable output to stderr +// reporter = "json" → newline-delimited JSON to stdout +// +// Each test function signature: static int el_test_N(void) +// Returns 0 = pass, non-zero = fail. +// +// Text assert: if (!expr) { fprintf(stderr, " FAIL \n"); return 1; } +// JSON assert: stores the assert_line for the runner's suite_end emission. +// Emits {"type":"test_fail",...} to stdout then returns 1. + +fn cg_stmt_assert_text(stmt: Map, test_name: String) -> Void { + let expr_node = stmt["expr"] + let msg: String = stmt["msg"] + let expr_c: String = cg_expr(expr_node) + let expr_c = strip_outer_parens(expr_c) + let disp_msg = "assert failed" + if !str_eq(msg, "") { let disp_msg = msg } + emit_line(" if (!(" + expr_c + ")) {") + emit_line(" fprintf(stderr, \" FAIL " + c_escape(test_name) + " \\xe2\\x80\\x94 " + c_escape(disp_msg) + "\\n\");") + emit_line(" return 1;") + emit_line(" }") +} + +fn cg_stmt_assert_json(stmt: Map, test_name: String, file_name: String, test_line: Int) -> Void { + let expr_node = stmt["expr"] + let msg: String = stmt["msg"] + let assert_line: Int = stmt["line"] + let expr_c: String = cg_expr(expr_node) + let expr_c = strip_outer_parens(expr_c) + let disp_msg = "assert failed" + if !str_eq(msg, "") { let disp_msg = msg } + // Embed all compile-time-known strings as C string literals (no %s runtime formatting). + let json_line: String = "{\"type\":\"test_fail\",\"name\":\"" + c_escape(test_name) + "\",\"file\":\"" + c_escape(file_name) + "\",\"line\":" + native_int_to_str(test_line) + ",\"assert_line\":" + native_int_to_str(assert_line) + ",\"message\":\"" + c_escape(disp_msg) + "\"}" + emit_line(" if (!(" + expr_c + ")) {") + emit_line(" puts(" + c_str_lit(json_line) + ");") + emit_line(" return 1;") + emit_line(" }") +} + +// cg_stmts_in_test: emit test body statements, routing Assert to the +// appropriate handler based on reporter mode. +fn cg_stmts_in_test(stmts: [Map], indent: String, declared: [String], test_name: String, reporter: String, file_name: String, test_line: Int) -> [String] { + let n: Int = native_list_len(stmts) + let i = 0 + let decl = declared + while i < n { + let stmt = native_list_get(stmts, i) + let sk: String = stmt["stmt"] + if str_eq(sk, "Assert") { + if str_eq(reporter, "json") { + cg_stmt_assert_json(stmt, test_name, file_name, test_line) + } else { + cg_stmt_assert_text(stmt, test_name) + } + } else { + let decl = cg_stmt(stmt, indent, decl) + } + let i = i + 1 + } + decl +} + +// cg_test_fn: emit a single test function. +fn cg_test_fn(test_def: Map, idx: Int, reporter: String, file_name: String) -> String { + let fn_name: String = "el_test_" + native_int_to_str(idx) + let test_name: String = test_def["name"] + let test_line: Int = test_def["line"] + let body = test_def["body"] + emit_line("static int " + fn_name + "(void) {") + cg_stmts_in_test(body, " ", native_list_empty(), test_name, reporter, file_name, test_line) + emit_line(" return 0;") + emit_line("}") + emit_blank() + fn_name +} + +// codegen_test: emit a complete test binary. +// reporter: "text" (stderr human-readable) or "json" (stdout ndjson) +// file_name: basename of the source file (used in JSON output) +fn codegen_test(stmts: [Map], reporter: String, file_name: String) -> Void { + // Collect all TestDef nodes in order. + let n: Int = native_list_len(stmts) + let test_defs: [Map] = native_list_empty() + let i = 0 + while i < n { + let stmt = native_list_get(stmts, i) + let sk: String = stmt["stmt"] + if str_eq(sk, "TestDef") { + let test_defs = native_list_append(test_defs, stmt) + } + let i = i + 1 + } + let n_tests: Int = native_list_len(test_defs) + + // Emit forward declarations for test functions. + let ti = 0 + while ti < n_tests { + let fn_name: String = "el_test_" + native_int_to_str(ti) + emit_line("static int " + fn_name + "(void);") + let ti = ti + 1 + } + emit_blank() + + // Emit all non-test, non-main function definitions. + let i = 0 + while i < n { + let stmt = native_list_get(stmts, i) + if is_fndef(stmt) { + let fn_name: String = stmt["name"] + if !str_eq(fn_name, "main") { + cg_fn(stmt) + } + } + let i = i + 1 + } + + // Emit each test function. + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + cg_test_fn(test_def, ti, reporter, file_name) + let ti = ti + 1 + } + + // Emit the test runner main(). + let test_word = "tests" + if n_tests == 1 { let test_word = "test" } + emit_line("int main(void) {") + emit_line(" int pass = 0; int fail = 0;") + + if str_eq(reporter, "json") { + // JSON reporter: all strings are compile-time constants; use puts. + // Only suite_end needs runtime pass/fail counts (printf). + let suite_start_json: String = "{\"type\":\"suite_start\",\"file\":\"" + c_escape(file_name) + "\",\"total\":" + native_int_to_str(n_tests) + "}" + emit_line(" puts(" + c_str_lit(suite_start_json) + ");") + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + let test_name: String = test_def["name"] + let test_line: Int = test_def["line"] + let fn_name: String = "el_test_" + native_int_to_str(ti) + let start_json: String = "{\"type\":\"test_start\",\"name\":\"" + c_escape(test_name) + "\",\"file\":\"" + c_escape(file_name) + "\",\"line\":" + native_int_to_str(test_line) + "}" + let pass_json: String = "{\"type\":\"test_pass\",\"name\":\"" + c_escape(test_name) + "\",\"file\":\"" + c_escape(file_name) + "\",\"line\":" + native_int_to_str(test_line) + ",\"duration_ms\":0}" + emit_line(" puts(" + c_str_lit(start_json) + ");") + emit_line(" if (" + fn_name + "() == 0) {") + emit_line(" pass++;") + emit_line(" puts(" + c_str_lit(pass_json) + ");") + emit_line(" } else { fail++; }") + let ti = ti + 1 + } + // suite_end needs runtime pass/fail counts + emit_line(" printf(\"{\\\"type\\\":\\\"suite_end\\\",\\\"passed\\\":%d,\\\"failed\\\":%d}\\n\", pass, fail);") + } else { + // Text reporter: human-readable to stderr + emit_line(" fprintf(stderr, \"==> running " + native_int_to_str(n_tests) + " " + test_word + "\\n\\n\");") + let ti = 0 + while ti < n_tests { + let test_def = native_list_get(test_defs, ti) + let test_name: String = test_def["name"] + let fn_name: String = "el_test_" + native_int_to_str(ti) + emit_line(" fprintf(stderr, \" RUN " + c_escape(test_name) + "\\n\");") + emit_line(" if (" + fn_name + "() == 0) { pass++; fprintf(stderr, \" PASS " + c_escape(test_name) + "\\n\"); }") + emit_line(" else { fail++; }") + let ti = ti + 1 + } + emit_line(" fprintf(stderr, \"\\n%d passed, %d failed\\n\", pass, fail);") + } + + emit_line(" return fail > 0 ? 1 : 0;") + emit_line("}") + emit_blank() +} + // -- Entry point ---------------------------------------------------------------- fn codegen(stmts: [Map], source: String) -> String { + codegen_inner(stmts, source, false, "text", "") +} + +// codegen_with_tests: emit a test binary. +// reporter: "text" or "json" +// file_name: basename of the source file (used in JSON output) +fn codegen_with_tests(stmts: [Map], source: String, reporter: String, file_name: String) -> String { + codegen_inner(stmts, source, true, reporter, file_name) +} + +fn codegen_inner(stmts: [Map], source: String, test_mode: Bool, reporter: String, file_name: String) -> String { // Detect cgi/service blocks: at most one declarative top-level block. // The block determines the program's CAPABILITY KIND: // "cgi" - full self-formation. Calls all primitives. @@ -2763,9 +2957,15 @@ fn codegen(stmts: [Map], source: String) -> String { // Clear temporal-type-violation accumulator from any prior compile. state_set("__time_violations", "") + // In test mode, delegate to the test-specific path which emits test + // functions and a test runner main() instead of the normal program. + // Test mode still needs the standard preamble (#includes, forward + // decls) so we emit that before branching. + // // Preamble emit_line("#include ") emit_line("#include ") + emit_line("#include ") emit_line("#include \"el_runtime.h\"") // Cross-module forward declarations: for each imported module, emit @@ -2862,6 +3062,15 @@ fn codegen(stmts: [Map], source: String) -> String { emit_blank() } + // Test mode: emit test functions and test runner instead of normal program. + if test_mode { + codegen_test(stmts, reporter, file_name) + emit_cap_violations() + emit_arity_violations() + emit_time_violations() + return "" + } + // Detect whether this compilation unit has an entry point. // A unit is a library (no C main emitted) when there is no fn main() // and no top-level executable statements. This supports separate diff --git a/el-compiler/src/compiler.el b/el-compiler/src/compiler.el index e74b38a..3e6c754 100644 --- a/el-compiler/src/compiler.el +++ b/el-compiler/src/compiler.el @@ -52,6 +52,24 @@ fn compile_js_with_bundle(source: String, runtime_path: String) -> String { codegen_js_bundle(stmts, source, runtime_content) } +// compile_test — full pipeline (C target, test mode): source -> C test runner. +// reporter: "text" or "json"; file_name: basename of the source file. +fn compile_test(source: String, reporter: String, file_name: String) -> String { + let tokens: [Map] = lex(source) + let stmts: [Map] = parse(tokens) + el_release(tokens) + codegen_with_tests(stmts, source, reporter, file_name) +} + +// compile_js_test — full pipeline (JS target, test mode): source -> JS test runner. +// reporter: "text" or "json"; file_name: basename of the source file. +fn compile_js_test(source: String, reporter: String, file_name: String) -> String { + let tokens: [Map] = lex(source) + let stmts: [Map] = parse(tokens) + el_release(tokens) + codegen_js_test(stmts, source, reporter, file_name) +} + // compile_dispatch — pick a backend based on the requested target. // tgt = "c" | "js" // (The parameter is named `tgt` because `target` is a reserved keyword @@ -62,6 +80,13 @@ fn compile_dispatch(tgt: String, source: String) -> String { compile(source) } +// compile_dispatch_test — pick test-mode backend. +// reporter: "text" or "json"; file_name: basename of the source file. +fn compile_dispatch_test(tgt: String, source: String, reporter: String, file_name: String) -> String { + if str_eq(tgt, "js") { return compile_js_test(source, reporter, file_name) } + compile_test(source, reporter, file_name) +} + // compile_dispatch_bundle — like compile_dispatch but bundle mode for JS. fn compile_dispatch_bundle(tgt: String, source: String, runtime_path: String) -> String { if str_eq(tgt, "js") { return compile_js_with_bundle(source, runtime_path) } @@ -147,6 +172,48 @@ fn detect_obfuscate(argv: [String]) -> Bool { return false } +// Detect --test flag in argv. +fn detect_test(argv: [String]) -> Bool { + let n: Int = native_list_len(argv) + let i = 0 + while i < n { + let a: String = native_list_get(argv, i) + if str_eq(a, "--test") { return true } + let i = i + 1 + } + return false +} + +// Detect --reporter= flag in argv. +// Returns "json" if --reporter=json, otherwise "text" (default). +fn detect_reporter(argv: [String]) -> String { + let n: Int = native_list_len(argv) + let i = 0 + while i < n { + let a: String = native_list_get(argv, i) + if str_starts_with(a, "--reporter=") { + let v: String = str_slice(a, 11, str_len(a)) + return v + } + let i = i + 1 + } + return "text" +} + +// basename_of — extract the filename portion of a path (after last '/'). +fn basename_of(path: String) -> String { + let n: Int = str_len(path) + let i: Int = n - 1 + while i >= 0 { + let c: String = str_slice(path, i, i + 1) + if str_eq(c, "/") { + return str_slice(path, i + 1, n) + } + let i = i - 1 + } + return path +} + // Build a unique temp file path: /tmp/elc--. fn make_temp_path(suffix: String) -> String { let pid: Int = getpid_now() @@ -458,7 +525,9 @@ fn run_with_postprocess(tgt: String, source: String, src_path: String, do_bundle // main — CLI entry point. // // elc # emit C to stdout +// elc --test # emit C test runner to stdout // elc --target=js # emit JS (module) to stdout +// elc --target=js --test # emit JS test runner to stdout // elc --target=js --bundle # emit self-contained JS (IIFE) to stdout // elc --target=js --bundle --minify # emit minified IIFE to stdout // elc --target=js --bundle --obfuscate # emit minified+obfuscated IIFE to stdout @@ -476,6 +545,8 @@ fn main() -> Void { let do_bundle: Bool = detect_bundle(argv) let do_minify: Bool = detect_minify(argv) let do_obfuscate: Bool = detect_obfuscate(argv) + let do_test: Bool = detect_test(argv) + let reporter: String = detect_reporter(argv) // --obfuscate implies --minify: obfuscating unminified code is pointless. if do_obfuscate { let do_minify = true @@ -483,7 +554,7 @@ fn main() -> Void { let positional: [String] = strip_flags(argv) let argc: Int = native_list_len(positional) if argc < 1 { - println("el-compiler: usage: elc [--target=c|js] [--bundle] [--minify] [--obfuscate] [--emit-header] []") + println("el-compiler: usage: elc [--target=c|js] [--test] [--reporter=text|json] [--bundle] [--minify] [--obfuscate] [--emit-header] []") exit(1) } @@ -510,6 +581,20 @@ fn main() -> Void { } let source: String = resolve_imports(src_path) + let file_name: String = basename_of(src_path) + + // --test mode: emit a test runner binary instead of the normal program. + if do_test { + let out: String = compile_dispatch_test(tgt, source, reporter, file_name) + if argc >= 2 { + let out_path: String = native_list_get(positional, 1) + let ok: Bool = fs_write(out_path, out) + if ok { exit(0) } + println("el-compiler: failed to write output") + exit(1) + } + exit(0) + } // When post-processing (--minify or --obfuscate) is requested, redirect // stdout to a temp file so codegen output can be captured and piped through diff --git a/el-compiler/src/lexer.el b/el-compiler/src/lexer.el index 5b93f81..8835b29 100644 --- a/el-compiler/src/lexer.el +++ b/el-compiler/src/lexer.el @@ -98,7 +98,10 @@ fn lex_is_whitespace(ch: String) -> Bool { } fn make_tok(kind: String, value: String) -> Map { - { "kind": kind, "value": value } + let ln_s: String = state_get("__lex_line") + let ln: Int = 1 + if !str_eq(ln_s, "") { let ln = str_to_int(ln_s) } + { "kind": kind, "value": value, "line": ln } } // ── Keyword lookup ──────────────────────────────────────────────────────────── @@ -467,12 +470,18 @@ fn lex(source: String) -> [Map] { let total: Int = native_list_len(chars) let tokens: [Map] = native_list_empty() let i: Int = 0 + let line_num: Int = 1 + state_set("__lex_line", "1") while i < total { let ch: String = native_list_get(chars, i) - // Skip whitespace + // Skip whitespace; track newlines for line-number reporting if lex_is_whitespace(ch) { + if ch == "\n" { + let line_num = line_num + 1 + state_set("__lex_line", native_int_to_str(line_num)) + } let i = i + 1 } else { // Line comments: // diff --git a/el-compiler/src/parser.el b/el-compiler/src/parser.el index fd3a223..3cb15ae 100644 --- a/el-compiler/src/parser.el +++ b/el-compiler/src/parser.el @@ -27,6 +27,15 @@ fn tok_value(tokens: [Map], pos: Int) -> String { t["value"] } +// tok_line — return the source line number of the token at pos (1-indexed). +// Returns 1 if the token has no "line" field or line is 0. +fn tok_line(tokens: [Map], pos: Int) -> Int { + let t = native_list_get(tokens, pos) + let ln: Int = t["line"] + if ln <= 0 { return 1 } + ln +} + fn expect(tokens: [Map], pos: Int, kind: String) -> Int { let k = tok_kind(tokens, pos) if k == kind { @@ -1554,6 +1563,35 @@ fn parse_stmt(tokens: [Map], pos: Int) -> Map { }, p) } + // assert statement: assert or assert , "msg" + if k == "Assert" { + let assert_line: Int = tok_line(tokens, pos) + let p = pos + 1 + let r = parse_expr(tokens, p) + let expr_node = r["node"] + let p = r["pos"] + let msg = "" + let k2 = tok_kind(tokens, p) + if k2 == "Comma" { + let p = p + 1 + let msg = tok_value(tokens, p) + let p = p + 1 + } + return make_result({ "stmt": "Assert", "expr": expr_node, "msg": msg, "line": assert_line }, p) + } + + // test block: test "name" { stmts } + if k == "Test" { + let test_line: Int = tok_line(tokens, pos) + let p = pos + 1 + let name = tok_value(tokens, p) + let p = p + 1 + let r2 = parse_block(tokens, p) + let body = r2["stmts"] + let p = r2["pos"] + return make_result({ "stmt": "TestDef", "name": name, "body": body, "line": test_line }, p) + } + // Bare reassignment: `name = expr`. Handled BEFORE the expression // fallback so we don't drop the assign on the floor and emit three // orphan expressions (the original silent-miscompile bug). El's `let` diff --git a/tests/native/test_codegen_js.el b/tests/native/test_codegen_js.el new file mode 100644 index 0000000..f4a32c7 --- /dev/null +++ b/tests/native/test_codegen_js.el @@ -0,0 +1,80 @@ +// test_codegen_js.el - basic tests for JS codegen features. +// +// These tests verify that core El language features produce correct values +// when compiled and executed via the C backend. They serve as a +// regression baseline for the codegen pipeline. + +test "arithmetic" { + let x: Int = 2 + 3 + assert x == 5, "addition" + let y: Int = 10 - 4 + assert y == 6, "subtraction" + let z: Int = 3 * 4 + assert z == 12, "multiplication" + let w: Int = 15 / 3 + assert w == 5, "division" +} + +test "string-concat" { + let a: String = "hello" + let b: String = " world" + let c: String = a + b + assert c == "hello world", "string concatenation" +} + +test "str-len" { + let n: Int = str_len("hello") + assert n == 5, "str_len hello" + let m: Int = str_len("") + assert m == 0, "str_len empty" +} + +test "bool-logic" { + let t = true + let f = false + assert t, "true is truthy" + assert !f, "false negated is truthy" + assert t && !f, "true and not false" + assert t || f, "true or false" +} + +test "list-operations" { + let lst: [Int] = native_list_empty() + let lst = native_list_append(lst, 10) + let lst = native_list_append(lst, 20) + let lst = native_list_append(lst, 30) + let n: Int = native_list_len(lst) + assert n == 3, "list length 3" + let v0: Int = native_list_get(lst, 0) + let v1: Int = native_list_get(lst, 1) + let v2: Int = native_list_get(lst, 2) + assert v0 == 10, "first element" + assert v1 == 20, "second element" + assert v2 == 30, "third element" +} + +test "str-slice" { + let s: String = str_slice("hello world", 6, 11) + assert s == "world", "slice from 6 to 11" +} + +test "str-contains" { + assert str_contains("hello world", "world"), "contains world" + assert !str_contains("hello world", "xyz"), "does not contain xyz" +} + +test "int-to-str" { + let s: String = int_to_str(42) + assert s == "42", "int to string" +} + +test "str-to-int" { + let n: Int = str_to_int("123") + assert n == 123, "string to int" +} + +test "str-starts-ends" { + assert str_starts_with("hello world", "hello"), "starts with hello" + assert str_ends_with("hello world", "world"), "ends with world" + assert !str_starts_with("hello world", "world"), "does not start with world" +} diff --git a/tests/native/test_text.el b/tests/native/test_text.el new file mode 100644 index 0000000..869505d --- /dev/null +++ b/tests/native/test_text.el @@ -0,0 +1,84 @@ +// test_text.el - native test suite for text primitives. +// +// Mirrors the acceptance corpus in tests/text/examples/ using the +// native test/assert system instead of run.sh + expected output files. + +test "count-substring" { + let x: Int = str_count("abc abc abc", "abc") + assert x == 3 +} + +test "count-overlap-skip" { + let x: Int = str_count("aaa", "aa") + assert x == 1, "non-overlapping count of aa in aaa" +} + +test "count-lines-words-letters" { + let s: String = "hello world\nfoo bar" + let lines: Int = str_count_lines(s) + let words: Int = str_count_words(s) + let letters: Int = str_count_letters(s) + assert lines == 2, "line count" + assert words == 4, "word count" + assert letters == 16, "letter count" +} + +test "index-of-all" { + let positions: [Int] = str_index_of_all("abXcdXefX", "X") + let n: Int = native_list_len(positions) + assert n == 3, "should find 3 occurrences" + let p0: Int = native_list_get(positions, 0) + let p1: Int = native_list_get(positions, 1) + let p2: Int = native_list_get(positions, 2) + assert p0 == 2, "first X at index 2" + assert p1 == 5, "second X at index 5" + assert p2 == 8, "third X at index 8" +} + +test "str-repeat" { + let s: String = str_repeat("ab", 3) + assert s == "ababab", "repeat 3 times" +} + +test "str-reverse" { + let s: String = str_reverse("hello") + assert s == "olleh", "reverse hello" +} + +test "str-strip-prefix" { + let s: String = str_strip_prefix("foobar", "foo") + assert s == "bar", "strip prefix foo" +} + +test "str-strip-suffix" { + let s: String = str_strip_suffix("hello.md", ".md") + assert s == "hello", "strip suffix .md" +} + +test "str-strip-chars" { + let s: String = str_strip_chars(" \thello \n", " \t\n") + assert s == "hello", "strip whitespace chars" +} + +test "split-lines" { + let lines: [String] = str_split_lines("alpha\nbeta\r\ngamma\n") + let n: Int = native_list_len(lines) + assert n == 3, "split into 3 lines" +} + +test "str-join" { + let parts: [String] = native_list_empty() + let parts = native_list_append(parts, "alpha") + let parts = native_list_append(parts, "beta") + let parts = native_list_append(parts, "gamma") + let result: String = str_join(parts, ", ") + assert result == "alpha, beta, gamma", "join with separator" +} + +test "char-classes" { + assert is_letter("A"), "A is a letter" + assert is_digit("7"), "7 is a digit" + assert is_whitespace(" "), "space is whitespace" + assert !is_letter("3"), "3 is not a letter" + assert !is_digit("X"), "X is not a digit" +}