From ba471395044f2c76a8a8081708c52f79fe44bc24 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 7 Dec 2021 12:58:20 -0600 Subject: [PATCH] added glfw callbacks (bit of a hack) --- modules/glfw3/onyx_glfw3.c | 81 ++++++++++++++++++++---------------- modules/glfw3/onyx_glfw3.so | Bin 56592 -> 64192 bytes 2 files changed, 46 insertions(+), 35 deletions(-) diff --git a/modules/glfw3/onyx_glfw3.c b/modules/glfw3/onyx_glfw3.c index d160b1b6..568c9349 100644 --- a/modules/glfw3/onyx_glfw3.c +++ b/modules/glfw3/onyx_glfw3.c @@ -308,35 +308,6 @@ ONYX_DEF(glfwSetCursor, (LONG, LONG), ()) { return NULL; } -wasm_func_t* __key_callback_func; -static void __glfw_key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) { - wasm_val_t args[] = { WASM_I64_VAL((unsigned long) window), WASM_I32_VAL(key), WASM_I32_VAL(scancode), WASM_I32_VAL(action), WASM_I32_VAL(mods) }; - wasm_val_vec_t args_array = WASM_ARRAY_VEC(args); - wasm_val_vec_t results; - - wasm_func_call(__key_callback_func, &args_array, &results); -} - -ONYX_DEF(glfwSetKeyCallback, (LONG, PTR, INT), ()) { - GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; - - char name[512]; - strncpy(name, ONYX_PTR(params->data[1].of.i32), params->data[2].of.i32); - name[params->data[2].of.i32] = '\0'; - - __key_callback_func = wasm_extern_as_func(wasm_extern_lookup_by_name(wasm_module, wasm_instance, name)); - - glfwSetKeyCallback(window, __glfw_key_callback); - return NULL; -} - -// // glfwSetCharCallback -// // glfwSetCharModsCallback -// // glfwSetMouseButtonCallback -// // glfwSetCursorPosCallback -// // glfwSetCursorEnterCallback -// // glfwSetScrollCallback -// // glfwSetDropCallback ONYX_DEF(glfwJoystickPresent, (INT), (INT)) { results->data[0] = WASM_I32_VAL(glfwJoystickPresent(params->data[0].of.i32)); return NULL; @@ -465,6 +436,46 @@ ONYX_DEF(glfwGetMonitorUserPointer, (LONG), (PTR)) { // // glfwGetGammaRamp :: (monitor: GLFWmonitor_p, out_ramp: ^GLFWgammramp) -> void --- // // glfwSetGammaRamp :: (monitor: GLFWmonitor_p, ramp: ^GLFWgammramp) -> void --- +#define _EXPAND(...) __VA_ARGS__ +#define GLFW_HOOK(callback_name, c_args, wasm_args) \ + static wasm_func_t* __glfw_callback_##callback_name ; \ + static void __glfw_##callback_name (GLFWwindow *window, _EXPAND c_args) { \ + wasm_val_t args[] = { WASM_I64_VAL((unsigned long) window), _EXPAND wasm_args }; \ + wasm_val_vec_t args_array = WASM_ARRAY_VEC(args); \ + wasm_val_vec_t results; \ + wasm_func_call(__glfw_callback_##callback_name , &args_array, &results); \ + } \ + ONYX_DEF(callback_name, (LONG, PTR, INT), ()) { \ + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; \ + char name[512]; \ + strncpy(name, ONYX_PTR(params->data[1].of.i32), params->data[2].of.i32); \ + name[params->data[2].of.i32] = '\0'; \ + __glfw_callback_##callback_name = wasm_extern_as_func(wasm_extern_lookup_by_name(wasm_module, wasm_instance, name)); \ + callback_name(window, __glfw_##callback_name); \ + return NULL; \ + } + +GLFW_HOOK(glfwSetKeyCallback, (int key, int scancode, int actions, int mods), + (WASM_I32_VAL(key), WASM_I32_VAL(scancode), WASM_I32_VAL(actions), WASM_I32_VAL(mods))) + +GLFW_HOOK(glfwSetCharCallback, (unsigned int ch), + (WASM_I32_VAL(ch))) + +GLFW_HOOK(glfwSetCharModsCallback, (unsigned int ch, int mods), + (WASM_I32_VAL(ch), WASM_I32_VAL(mods))) + +GLFW_HOOK(glfwSetMouseButtonCallback, (int button, int action, int mods), + (WASM_I32_VAL(button), WASM_I32_VAL(action), WASM_I32_VAL(mods))) + +GLFW_HOOK(glfwSetCursorPosCallback, (double xpos, double ypos), + (WASM_F64_VAL(xpos), WASM_F64_VAL(ypos))) + +GLFW_HOOK(glfwSetCursorEnterCallback, (int entered), + (WASM_I32_VAL(entered))) + +GLFW_HOOK(glfwSetScrollCallback, (double dx, double dy), + (WASM_F64_VAL(dx), WASM_F64_VAL(dy))) +// // glfwSetDropCallback ONYX_LIBRARY { @@ -523,15 +534,15 @@ ONYX_LIBRARY { ONYX_FUNC(glfwGetMonitorUserPointer) ONYX_FUNC(glfwSetKeyCallback) + ONYX_FUNC(glfwSetCharCallback) + ONYX_FUNC(glfwSetCharModsCallback) + ONYX_FUNC(glfwSetMouseButtonCallback) + ONYX_FUNC(glfwSetCursorPosCallback) + ONYX_FUNC(glfwSetCursorEnterCallback) + ONYX_FUNC(glfwSetScrollCallback) // // glfwGetKeyName :: (key, scancode: i32) -> cstr --- -// // glfwSetCharCallback -// // glfwSetCharModsCallback -// // glfwSetMouseButtonCallback -// // glfwSetCursorPosCallback -// // glfwSetCursorEnterCallback -// // glfwSetScrollCallback // // glfwSetDropCallback // // glfwGetJoystickAxes :: (jid: i32, count: ^i32) -> ^f32 --- // // glfwGetJoystickButtons :: (jid: i32, count: ^i32) -> ^u8 --- diff --git a/modules/glfw3/onyx_glfw3.so b/modules/glfw3/onyx_glfw3.so index d8c8fb0fc0609775072cb74d8ab351632e9b27d2..a3f8adc5a07de14ab04c0c1d47e944ded5b702d1 100755 GIT binary patch literal 64192 zcmeI54R~W^mH2NvGY}YPGdK+8J3ztmRWp296*Qf;GbwZ+FrAqqVv=c7TBdD6nnLTN z5}1#FYZ-}%P+e9F0uBgL_5Wu9*){7R7IodgDpuFksK_<~T0qBH7wP|;_dO@QIlcGh z4!Ha5KF{2FrYG<3Jzwv~y}9qbN$!m;ZEGtlDh%G181FZ*>>@(O@ix zzsDKJD&3_ERf}FtH)zDt@ai(gScWeH_y@Lt`dgGgI#!oin(b7)2DSm`DeY#+PRd%c zV~H_v+whxI*IS7fV!JNwXSa|SQXVWh-sND2{o;0`VKJ_tcy{C9qj)TNW@20){Kq-7 z?$V7g?<%s$4uSu;RZ`ikzY_Qo_>cOPzg|{1c>LKP``r7^{Bh)6Z{B+1bH93zwlj<% zyg)nE9xr6-3n+&57o7Xhk2j9TIDJGV+c&`Qh!Ua;w}G%S>VyVZ=|^n*_@O_n^f!Wk zD~>UJ@Lz5o8$VZrqE(*V(79Ir?+1M=K4PQ)s!hA@w8`fOHhx}#fwYSIs*V2LHgTV{ zY43m7wCj5|arfHf{}UTOTW#Wg%ErIPW}d`t^uJ)!4?nZf|F8}Jiw$3C)1NDB^pCd5 z|6gtT?b|kd+NR%{ZQ2WI8b0_hx4eyhk4@aOZQA=~8~wCRKcsB@1Z@0_+T^*>hW{TM z|EJpIv({!@T5R-#HvTu-_&L|cPuixvzlDLaI{uty)84Z{-zNtb%8%LTKVp;54Pavx z_ZXWzQ#SlvHvO>4M&E0b=UT|;WQ%s4Z=?Ub&A8la)7}A<=V35J()>zZ)q za5UWAI}q*b{YcChOeF_86C=hA(ZT+3?*RB7=#1%7f4pl5T&bGaFhm##_r>E|hZ5l} zBjJH)e`!^8Fx)*f&}m%L*L}l=SZYIOGTztM6z%KV67Aed4rBfCB!%i%uftu@RMZG# zlRCGCJA1Ztd<(@qyk{Jh^c&mJG#vF)7Z|re?vWDGurb&_z+`UTnca zRj6lVuow6S9GlXr&GF>cXfhTR7#htalcDsFKw=0cQdhB` zOTmU4qKP#_-QBUI?l(vx)zY6xjkH|PP2C*rO{vl#4p)3gcfbNwkwUO1Y9$W5xp$x| zeuJq|r2taXpuIOmQ&g9OFwvEd=2&-hsE@Re>I{p98+zhHeO+)s8q{sm=91FT=t|{R z4~+@5z=3CAaB=5B*R5`{!5hVY(Z;c1jRyZJjZedS48PZ|?Cm`qS7m=oZ0ML?Si)5rUxG4j zye{YWCtr)^v$XDJo@>_Jcbk^XxyERb3Bj|U*ZzkEPZLiI9w0s{xIsK4c=m6#{|Uj<#3uz05Z^7hL3~Q^ER|XEJTW3V z?zGTfPCO@gs733~2=1rjeqQi29nU#08P`MkGCzspdIit6>bNz6hbXR3@JWix{lxyc zy+NUWA;k>|K6$Z@+aY*@;zk6|QrxuQ9CuXkjTAQ{c={3@cS7(C#hny9PjRz?bKGgc z6BIWmc%)6ooe_MB$5(LUA+68zTK2Pt<~#FIit80TuwMJA5j@A^E4Yv1@_xqtxxGQ5 ze;36K3GTa8$L$b&j>lK<0L4uU&T&Tte}v*@1UD|zaVG@#e_HcN!M((@f^*zy!JnbH zIl+AtcSi6K`Oga;;qj&8qU>jn;J>E0Ucmztw?^;;#q|lE=J6Gr+Zz=8O^O>5JWFvq z1kX_1h~SevzJhbyQNfRn8fwc39tdeZA@~%dP}_vy0rEd7xS#UL3eIt-1^+mYui$eOcSi6C#mx&IqPTos zCi~fQx1l!X8H(!_+`B>R)d-#-|31Oflne?R|pJQ9is*W&cJ*>j#DYdWstoJjdfJxS!%i1UJ5-{ih|T zxTAt!MR7BN&++&Q9-_FDg8L|LR&ayjP7B^oadU!uH|qRn1kX_1yx|31N|i1T$0_HR&ogF^pK9$&$In{<0S1fL`S5y1mIzJhbyQNeff z_zE7PxD$eV@6`EB3LfF{6`bQv3;sBdui!a~J0p0A;^qbS6X)wvvY$Qo>3o@gpT}2l zW3$$)5j;cweS#;5^K~-z&+QEg{U7uA3hr;A@fAEr{v(1<5l;)waYqIJEsw9@{>?h> zgy3l!$4SBGC~j78jyo;*L7m!vPVf-Loe|tSq4o2EPf|X7T~qe6hpu-rKZ@dd1y4}i z8o@&p*C)82IA3RF|J>f7(66JoA;BjpZinCr@*fdA%loh39CuXk28x>zJWFvW1UDYh z{X8jnp7&qDIqtOJmr&fC;5i;&!81I*g8L{RzAi5N*+bXMnMWzESMWI=U%?~f-zRv0 zIA5n{|J>f7&`(g@kl;p#?#~XvC&_qeLl{CJBdq1mrL~tL)O$*L(M+M(QaWjJZDDH&d5%NDNcz}3TaE?1I z_)jTrPH;cPospc{n-@GyarwTSM|X?CaXoauj``~p*DH94;?@YBptwH4L&W($A^YdJ zL7{(0mrg7sc$(sN2%aJT5y2;Ud>VB9J+)MX;^McP&T)wX>``N?yfoa^ED6UuVG{vnE+)r_Rf@i6pi}#tuyb22a zb{=2BCn;`+;Cb>N5j;fsqy^`G9u@pr9$&$;6n8@K1o@v7-1w?)U{>;o=F@`T#N#V? zp5o33o}svT!F?3hp!*w(##itRkFVrc={#!$kC1<#-~r+R!MUG_!1NMoA^=_Z!qy?CLS^t6qCSIIFP#H4uLs=PQhlwvY z@ra2ZX5u|2ez=JzOuWj(hfTcN#M373HStjsUt!`I6F8<@wADbYvQ9Oex8YEO#FNkpD^(Y zOnlPB-)-W%O}xRxr%e1kCjOX-zt_aGCVrubPn-BfCZ03#_nY{PiGRSv^CliJ@mUjZ zH1RnTUt{9?OuWg&joWkq=YNZddrW+-iF-|aorxcKd7uXl^uU20IM4$Jdf-40xbK12 zt55iIaNEnC;P|pQAwZORhprm7l{hF0~3-RsJrPafwx!Qsr-98JAXtNmYIV%ebT}WK{WUSjMGPA+5>} zVi`{l3JF!d2g|smDnwNIb6CcuX(6P_w_zEVR)v5ne*(+6q$>DT`DQHRQmWun<&R() zmrw<-DkrgwOQ(XN%GYAK8q0HU0yuRGmc3ZctMUi2yaLNPRlWktM_@Ut$`@l9m&k=F zRbGQ-Tp|@FRr$SG#-&jqqsr%C8J9$bv?`y0Wn2ms5~_SMmT_rah^X>0SjHt$A*9Mj zU>TP}g@7s_ie+2^75u7PiDg{+6nv`u=S!iCOP+#Pm0!a$E_DiqD*qPCxWp;U{RP|q zD=ho4oLA+aVi}h-g`6rshh<#K6tb%PT`c1grZA<--@-C3T?&(``~;S9$x_Iu^4GA8 zOO--el^?|NJF%Ql<$JJC9 zK2`n*mT@Uk@TzhW%k@|`RQXygzYEKAZ>aIdGA=m^c~$-(mRDmrr^;7g`5Y`~Rrz8p z{|BcZV>O;mpT#-HES=?hnhp? z^VKJ&!MCx8B#=~CBcfPgU`O1S_ux$CkLMSe0TMU z%?tK;JWF5n8L%~m&fOT?cF_@_X#~f9lR7*&eo;NNW&TJ5&}=7+<B)y zCvL|yj6K~8ukmAv6&yHW=sa|1>g*>aXkiNEWY+t>1Q%$+FJXEH!DIwXpue`L0KX58 zEz8EBegA@VT*vDQo~aWU@&|8v3e#Ghz3S@55AEsBfWK#2(R0J>Nif{O@eQ6}=M^=< zUFUfV-O%jW_rai>`UKu9dQ9zUuI*Tz4UT=Zwl27O z{w44yumt8#Exr*1$C_(BuT`&Tu5Ez7ZMDJK=T&HMwvg#Ecn|8?Gy5bo!xTOP@jI~Z zOL7RV&Q_m};Z+V8S*J99(T}>|Z40XWW2xE($WCR1c|afNJZ3*gv4f?tJNC>5unS$Z z7q0>DUwdD~J!#ykz2E07Qdh^DE6Lwip)re(H{Sz4rXBw6w(qV#+O+R`&D_3c)vJct zPvLMw`%VWFXkTTqeNz!=-`8EYZ-o3kt1RU4^d<2AS8U&tf3RuaOHJIqSJkVAS=Har zzE&`S_T7Vfy&Au{FuotUZr^9g->cY9i{3Am|8?8$TXv)i@6pjo&5Edw<3D9cS0ROH>xvzRM{e)!)#*2VPa}ySdoD zsjH!Vuj8n?YTthZbo(w>7IOdF3JICow;?#b4o>Jk4F88cvp>Mb!`VgkiX~%Ba9VfO z9(cclDp2W6XqA^BJ2>Up1`A|7KWuDoS^WZ>@Qq*Qfs?-R%j<&Uy`CM<4V^gNShIRB zoZGz@PV8WqX7|j^&tJ7Vi)USEhwY|3A5bHAiD&iRVCUs^ZM$l{U<>Q;r$Ogz(%GSO z7TWUC19U#>I{qmz+NJTIg_C-m2d6v4f0%TZ*~Z`0xUsQ)JG2G*1-c2kK&gm45M{ywr#AS&V2tgyQbJdjaN5*xVRn|Uv@g= z0DdslkK@!Bzr+J)$lyHK*%)lyb(XPXZ|d{VR~1U{1=QPA)cZCLNoQk2YsI&BJeRr& z)P4$U8`L?6bVRpTZ^zSK(EA$c9jf#ey1uX$>S58b9U5S`AOBN+FZ=&;3h)3l92+GP z(c@1#JCx2s62;9nrg6_1g=l%V)YHz?Z`+o3K+}YDO-r9brvR|?~3+tCA z&sC=N5$5FQp&{l&@=M=Q zgQmO%#|L1FfKTvu()dR_vnRd62dfriti@w;txiCey$Xwd^1HU^_hMYyd0zS^&tLYB z2f+c)c)$bRk6k@K+XWW-NLcC|^8M_B-`_zBlrK!93%xIW2l_`JPw{a2&0>apIL(yQ z-@3S-`yY?<#k-xd$0EcTu=V4C=7^^fmED$G00VM3mZcePb|Ub=5K0M59-aDPx8 z3NM0nvm2p`dR6v^%lE@~K+Mwjqei%hg*(A#F|5t;@OaW0QaaYhLp}d+fT3q*$A8Nc zndhJ>;qHa`$ok6{%_*r5$JG($BA|{US zHy8RCK7fcl#tB1h{&uevEQT5NA z3;k}=S3~ll*`k5cFCL#%?Flrv+xAt!DP{HT+3H8L^d8OE6V1n?@IrJRUs(S>w-JsS z_@?5;v&`|vy0-B~ILC@Mz@gedeqGJ@2wW=s`y%2g2RQ*=i~9%>$97|Z1I7(I6lSW`Mh~Bw7rB>i`@zk@)E}Eoh&@$2Prtkd zPAZ>(KHUL2*uZ}y4d|lI%i*o|EI5~kx75@ZKqpE%k1HKDw{<7nY&yc|`L-|*U_Qa| z=KdFKk2i2V82s)j-p7O9-vj3<2etz}aG(bc^gy{DP`^B=e{2x{!fz^yA5$f&e~7Z> z!0(}!{(|a(-$TXUR{fv(d#LckoAA@9@WZzQo&2k(2Yw>;f9X%88WqPbc^^K5Vl5od zhW~Ybz5`y5{sKIX^#-zcaoY^ zaUe&3JwM+7(gSB#?I4FiCP3EwW`6z_ko!PpLC(Ml+aEwa2B&3pOATWJPBT9Qau}8c z8IT=tmj4u%LE`VsPk`J9vIdq_cxP_{WC$g!#xfvlV2Sx8$Oe!zAnRbc{~>5c5ack( z9+0<#90mCh$lV~PLGA_=F)rpkLuWm8qn&LxdizHLh{u9{j}dFP>3K0u9C-ZfR8 zrsZgR3;cf!Y*J{`T$QN2_RuO%<8lM*cEkVUU_K{wU8J&mq3$VQ38=HO%R}7{q3&jF zm#(NBR)*;F4fr2~ePTq{B`V_!K5L*49)dcnc;`W#0sD~p$o;yiOhx4mWr*z#LEUz! zbK7pT*$y^-*!T9w<}tAO*?!u*3^urL?@t^b93Reu{eORK+QBBjA2v7^qhNCj99Mks z+JH&1t@6WFu#2hrc`wvupbqCF%nR>ksHuaOPXeC+uEtNzvF73&yXMfUnkF^3T9%{k zEa<-MLKm(%8!O?M7Jy^hpWrpl-A`7osjAtvWKEUtmZgnVbvu_eRr$9aRM~Q9Rb5k+ z59&Y%CNb`6Dla@{8gNW3mlw7>4Z7{1dnCNp?cSi;9faatP}c!<1+0S@w_+Zj#5{H_ zT~k$e%d+Mw|IULNs~WZ)+*}o@eEQI;2FMID1dU==u>bhb9=6hbyehKo;GGBEvTWDV zPcFH&(hK$2PYtlYAB)PcVSYZ?_n)%J59=<3x@n6#Jf?I&-S?sHXn2id)()*gn*{J5 z0>=+>>h@xdj(rQ%%|Km<>UQEWW80GED&JLlG#jfttNb*YPf>R* z>AnEEet2(M@XNZfqAqlk%Fhe$JMEx*BKh4`d9}(9b3Y5}IxOn2y+NqMYhJ4FpuL-@ zy%FGDHZ~uHx*n)A&ujE`JMaW>jEQ}RGXh^f1bi6y$;j0{5>dI~F=QI*Zh^Wy)~S5~ z+DOOS=BhyD!{)xr&;eXSQ=jZW5ySQO)et4f<3h(bK z2gnV32gd`?H;x1DX3nQTHvzh*pi|Y3sA>ncF#~nmZR+qne*)@MzbHHGWt|tE2iyg9 zC!kNr>q@9Wy*%)HE&O3y-hjHt*dO&X@|AEdkOhu?fW9sPU&zk_j{4>~jl9`L|3joN z{iJ|Tfgf|O*oU`}ez`tW^B;5%gY&5n*kK>q?JJny3!v)?T#r_XMT^rP?v7x^7gIWZ5JMe`zsq+BXr?)MI!`GmBT3$^1 z>+N7O2{sXmv$GP8>*_er5BnjJKPtGIfO zqFx`=^*|lwabP>p0|$EGKo1<~fdf5opa%~0z=0k(&;tj0;6M)?=z;&99^mJv@$=H) z(x}>Y!gUnfxQx$e!wtU}t+s#`hihR>U!`BDYXb0+pVOw+olxero?3fDnV;9DuKAei z|M=#79E$qE+#o2dQ3KcYaf3@0YOBL*i?9(kzD|m;99ElJcfu=Dg9|E}!zCTPkt1Bg z;s%!h)TY+Y@M;>rp$i-Hj9TC>w4*^?_*r_audmJlGl^m zN%9Vo_mg~-?V0V$(0g?vE?7dV^ zGCIgG)VIE1k+#8dI6FK zNq(MW`twvz(jdvt6XoZb2L4v-86^36vP2CdqF*g1$B0o zA+n!zX@4Qv^YdF1WS@0uzme?uIjkA7&%3lwkUc+7b&BkbhYaV9>_$oQb5V0-?{jH? z7uoakP3Ooy;L`pPvNtX>)aL)RmR^#&Wbrqm*)t@4WFI2Ch|BoDCi?){C&)hS(*8}d z&yszH>?d8?^K(7MKBGk#ts zKOfV3yXHRfV_~ULM2nuNmi(N{0NMG;kFK@&8`13JWY5p5jF5fErG4=^lpD0a1lgrs z=FiWQJ(?6NN7^Yb0~d5&{rpK}?XpVP?CW%PeW_k)+DE?NAI zXjXjQV!JLU$S&m4o}ZhTAp0q@%eb`X=O1RsK1X(Wm;J}jF`OcM?;W}wb1via^9XZf z?;f+H=jZP6bN0M<>U<(D?TgRP+obJ6WbY@bsm0%jX8asHe(qg{>=G{Re@yM? z=hx-PZpx)SKbOwGS?80ccF(!A=jY3X$lg1l{Y<*-zoR;}euC^nWbY@bYc2jpG~?&J z@$=mhWS4arpP$>t&uKFr(SGwT?TgP}qx>@z-$#BdGS?`g1wTiPpPLpTyMRl3ejXY> z|7?=%(k|_9r2gmUm`!p2xwPl!lkxM&a%7)(Y0u9YVM05>5Pm7n`1Rx^MOB`qlOR5+{ob6@Zo+ug=SwDgc#mmzLjWYDfXU z&w-rRzds`0&-!aMND==8$O_{qV}jO~eE$}Q4gE}!euDI$BmKvO{$EJnw@xdv|Kp(n z=zm7&uLX|&CrSTi@{hkDj{5tA{-;UbAJmE?r2jS2uc7q~=l@gEpCWzE|Bs~KAoP!} z)cN>YwPRj3p9>uG=@9yxNT070a6jXB2~@i-)_$00iSxRi`Cj6@UT1##677fA;mkXT z^ZJ_kPU5_7_EGwkm& z5I>UiUnb7$!vgW6mTCX~W)1lB1nY?NdXW7L6X$gv^ZST%@7z z6(WA>K{_8^M|BWyC(i35)*mAtqVx6>N&gAr3Bl)xXNYrqPdix0of7&RiRXy(IDVY? z9C1Dle3>|}15T!VenFhi@AJf$!;XXFdkOXb5yUSf&gb*&2Y-1V_4z!V#~r`RfSjLK zeG2*c7I8kWW{%%0MSVWs<@`@Pg#6Qaocitv__~BRpP#ay8;J9HC;PdFIG;~?DW4qi z9Qo&YQgNt`%jbWreN&$l*FJzpt{Nvw>F_tBk;xwSzkHvyr$V_|3%m z`akPW5$F2>%wJ^x50?5r7T$m{F5fR;{Y!}R{R8GV5$F2}%)d%J@Ia~mU$K9|kE+&j z`Thg@xr{j9k6^xocwl#_|F0A0`xUJJ8}|RDQvD-gAh5lBKZEsKhzErJAaTCm!TNU- z&)#3^|9SQ=xMu~8ui)<{&i6~$|24$<{t5FtiKl6zF@KKz3%(Q%fNFdNuP4s;U)WEC zc>3Pbc4dh3{TbHJvVWmJ$Ns-q>Zk4<)c=BCNjxCj7OJhEK|BB;oB+mDnBksRVj|&vl zb{4#`;`wu$j>F8iD!$4H3H`5-{-n@j|J-A=|E$m-Qhb$>5&DmjeqQLmLHbid z|3Y{p!~BhhO561@#a9_Qq5nAP`-J{p(w`IhtKmcr{Rf18zv8P5|EEjiK0@3p_-n*N zf}eN1_8$@cZ%}-dkr4V%kbYX|ze)NTq2CB6JedEa(BGl>Dq~9MKSlakp}!PPm~npQ zg#P;#Kg!4p{So5E!=?T6cjRYI_}NR`dwZ#Vy-(-w6Mn8C9uWLK#bI28pBG3!BJ@u< zNw+H`^sgkI5PX;7u)hdD-y%LK_+Ijp5q{2u6Lsv*DZ#H*{3s(U{5(kdb3*?`;yJ-j zffH}^@BfUUHr}se#Jz&=CY})dMdBgBPpzf=1@9rA5&R+IIl+IgILsf>-g8gY{=IjU z<{u|MC;U7_+%NQhr8pcPzEbMv=+m_SkkH?t_)&&W=zo&*GeZBLi6;bK@lNeOC-}w0 zrv%?ld`|GcR~(K%BA-8zzW2`3cKP9ekNbN>=wGWi9M6UReZ>8O|B`q{@RhJ&!FiPs zJV-nz_%`BGf`3zS*pEb>OU}^#=Y)QcxObwoy*DWi$2Z~U8>Al+`hOtq7rg#VYM0>M zio^aW{C|PC@knVtKP8?Q`m4^;{xiaVyW%k4gr83nj|l!<;sL=c&qn{y4}!mkcv|r5 z6o=!F$mc=Q&kFq)NIxg^kFVEp^Fn{K;;W1~p?@3c8&jqI_5;%Qezue^dzbd_6Z#hs zj|l!z;sL>*R2+_n!v9}LKP~h>;Me1o5c(e@9uoXX;u*pBDh}f^RobrAtF`}}(7%@W zl;HOg_kOO_&##Hk3H?*f(f<8H|3iwyd=~lKK|C+`56MqR_<6^<)IWk>q4-gT@zv5i zZzKJT(0_*XeL}zDJoFF8F~Q$WJRtZ0@wDJyP#osDi2E#XtLyeZ1CH0bBF#E~{`+&{ z8NpvA&fnW&{e#cf`6s@tNd;BBL-8Yu-@9V{_X5Yb{5>${YnA?r;`g|i+vOiq`d*_e z!I}%ws=b3M?%~Dnjj{HK^0R8u_eypu{tiQaAL&-$@EkE?cNcrm@*eWjL;b+DUs3$X z;`hOrKLxxJzfBfkqU8C9DWq)OifeXj*?JKS3TTQD`P{QLq^vEn}m|5p4p;697E zO*VN}U0|K(bJf=VXKJkZy*BzOo48M`wDyy$vgYqxVa>0#(N9CWj(~Zay-Ih6hx+6M zn|?mdrXN0U)83sn`OLh-I?p9@Ge_}*sI-j9R+ z3ON7I)B9ZVeKi@qN?b9XotKVV#D}E`tjP~N+2oEbS>W^(@XSA*qWhKDn3xom4hlb zu_u~bAMYxkl#QOrO}S*6z=hNybNGR5S<@*7s#L{s9>L&S4~ILe(w;A8W8KB&tgtUc zx4SVhby7L?{pc^)@7Bi$dQ;;nzy&u^RtIhG`)@U*o-H$l%gZgC-Kaf-?+1npYj!-waFd$7gzFD=tGv3$b z!gYIZe=NB+8M|&MHqbfZ)?ib#Z>VfX!bqccmp;p>;m+CDo7fVMCc8GIlDz}hl(T@I zUKj0;C8D4oO_j}KW14Vd80dnL+aH_#*L5}Ni_L`Nb-CnW3h6A|>6(t| zEMds9kr5RVw~q5Uu@=Q(j2wX~M+V+&j<}zro#LyVfoGZSPH$f78-#gYaHj zF5l)@cXX(aaz=x)gHp_7Lr;9DudAsq4$splGnaHe`(Z#w2W?l*yFNO&(`^}scmBcN z_`rstL?WI{#mc_F;e2hyMZ@*czH*u9T|EhtRh?oCm+k)b(XBC3g<}L7x(Kleb{%Lz zInDN1vcGr0#hX?uoPI5G))niPOC+~?_JJ*&LYLXK$3ojhe_2?S9~KKE$8opNcQLap ztQ_aAg}(ESVPQ~y*RwEkwU1laHJ3k{SXk*4Ess_f+Qrd>S1@Anq^(4+gM@Aj0%A{3+s=S0OP zUdcBmTMIXX0luBi&a8dgpZi(pLr3kGzCL_t6E`hzbs}w%m-E@Wg+Z|)Zn7%3#<2F! zR!&PG3riTpw`j>`_Ukl@aPC%w7KV_gj>6He6hmKM1vS*uA4Z33o1> zl2~Yl<6D+m6&fY0Jr0lpZbc|ij*eS5Pm8@fUcP^ZgD8B}GOrX5EQ*h`#cJOxIxZU`0 zN&_aK8yAip;nIgw8k~dOongoL<&2#I;|@5K9E>LyE%_Zo+M78AbH4KB7|_|&DX6Q< zbdIrIc_^R4Tj^)VYm!bOivwhJ4&m5ZM@y%Wut)1A?srH>%Q7KN3%326!VuKSwoF)9 zuIzU>E1U9RY%jk%jv}-U!r9t7g>`$wz%jmCCr*jLOtin#;TYY~(kUc#+gl9jXz3Kv z>2{HGBON~c;S>;dPp40UIL0hv>lC*9-8aX`<;~p%-@mHQi;gpnF&!>?*wNA{Bpi3(^wjC|WR7vmn>z(}@mVX!=q~J?!b9?Q9}II0>tN>;&i+Gd zj?wJRoPt??lFl)Xvgk~v22*fD55CRR6-&mh=^aePlHpW;xU(-l5W`PycE#aqJ@GB@ z^`{`deICsWXN6#!FHU#fyybsws) zcS{n!r(wDStFz?cTbv`cvo9XsI+O@+83_--V1T>M;V5=*v=6?2QcMwBZPX8r^rxa* zK&Fyf_VBBLcq&$Z&A?E7A{kG_lBp4+zKFIA_4ak0-P>g-g`VhOk5S(>G62rBOeJ;A z_4IjDrACD?)FoqmQ8b`eiN2IkuZF8W1#K|uaauuLTy<7`tcNC2PZ!v7Nn7X{r7ie1 zIF9!Bc0vkq@CASBRRHa5%iy2^AJp&f$4|_@-3@-8N<9O$k{s=(7cBiE0DljgalNpg zA$ykaGdv~R(vp&4G(veVJR_Ck7a#t$L@UD2#i)(#Wc*8@b~*fKdwy;#OZ>f6+?K(A z{7Na?!`Fb-wgLWPD7NS4(6Z#`&T4J#gI}Y>uczZPVA-CZ`^xfmQs(?wk7W4;mj33j#hZpb_`r>ZK&vnj!Ol$CbVSO&MdL{H5xN%$_$Dad36}Hdbidyg-wi~q!Xi@yj_AGx5HD-H$j$_Ro2and0|N8g^$=5)lFV3HT*QMugv_f5R$I@kPw=NmRpWp@N?`J@g z?cwX;B^z~TasFXhG*RiNDSn4fn;!$h3(DMXK7Qi#;@q{S{yXyxEob3-?&gi-GlQ?| PTiR!_V{j7&qG^CzE8-#3nPtWI`LR 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 ga|j1EY=3^Kmi)