From 43c339e37e292293297faa95a789072f4a279dc0 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 5 Mar 2026 02:33:06 +0300 Subject: [PATCH] tests fix --- tests/bench_timeout_heap | Bin 171720 -> 171784 bytes tests/bench_uasync_timeouts | Bin 174464 -> 174552 bytes tools/bping/bping.c | 233 ++++++++++++++++++++++++++++-------- 3 files changed, 182 insertions(+), 51 deletions(-) diff --git a/tests/bench_timeout_heap b/tests/bench_timeout_heap index dab6341f25bf1f391e5d2bd6c17a0c18f467bef2..55251448da8ed14dfb9c0c8b35e0610c1e8c4e74 100755 GIT binary patch delta 35214 zcmafc2Ygh;_Wzx`J!P}$o3hEK_mGf65&}u60Rn^&AoSjQ4@H(Pp~tHZDk7pHPmvZ2 zq9PzqP!UlP0R=&Pu!smE0v5>sd*(SfuixMHcH{*F5hD#(LEq&A-hou}qSF^;xhiweH_7ztypM z%9f&*Y^QR*s2v+u7gOAxvDcNcC0XpI@@z>N%Tj(U$qJmDDM?q8@7CAvmx?9neQ1!} z*OcaMvRFdhs5X}wJE3%KSHd3Dt!uYbmMy7DV8;^nq|&EjPM(x1Nmc!>F0HSxALSFd zRQS(5FGZ4;9q?H?30R-E2Fhh?M#S1m*UZ%Klfh6{bH$yc9PXIFGL@e?wqpa7%+gTy zxl&e|?`MMKwWCeUSg!EW;*d9zC8?xuNx!R;p|J@SZYzzKjme6=QxVHisyd}Ht}O4A z#lBSbb@~r`MA_VV4I5mS-sL4D`&~KNBa5}KGgpM`*j^>BS1voK4CqxB{DT8+zTxir z8L8Gc^nZ}@ey>cnQTe4;342A!>YYg3y+hc`%B){F2(~o^nUtdb@aw|o{@?D?Z z09e!3EKpBjEZ(=#c#H`_TQ$1Unj?ZR6rL{sLQ?us@?i#=9T~!LoNX+An`7m3g3ajrVH>)OO$^c*(sHS_TcK zelCV_WSJ-QJ#6r?5n-7Ox--AI+U9SBRns#%)tqUcc_8y6=o<7B4ZwHq4{z1iU$rV_ zBjR15s=k`(4-gc>*~084R@LkQK)X-9FRb1P7i(6>W|P$`$m*-!Xt1H<=+MP1A}s<5 zt|x`)$}9PzD+^jRjOF7{fA!b<_4UdxBLZDP&|kXh5wqJ{t=QapwPJVwxt}b);r1N^CYQf>9TsCrK@3jr<%V?Ykn_XlQR^3$~^GC@XSkStkbH> zSX-x6WwCY|shnvb3u3356P=Qdx)*CKPGU(EEbIQkGFXWij!5tGqBO$~XlWcb)R_s4(`ua(Pq%GEvlM|CC)Vw6?)mNM5V? z5#pg>?k`Lln0cUNK*_+8L02P`!K15KXJzl`703uBV}`JIlr3Xg=M}!Ac|S|7*xbo# z#qN%x3cMeJ^Qw7y@XNBxG@`5K6}t_JeQb}wOK=#xda^lrb%;TXwq983yB_?LEbOf zD?@!xHF071D6WbTh6roD(rH|WgqdI~+3N|Whsmw9=3r^k=RLrB5+11lFIV0immXa% zc&!b*580M#Y#kNj_-08KVsN6Z%mek)o#^MRW}@9}aEWwSKiv+UH*=Li7 z08%Brgxvd@p;zD^Fut0LF+61gxvHe^)kwsD`^@WCC7j(E%6sFBUHZjY>%KQl-a#1tIXF|B;IF?ybUaP!2p)7RicN7Un`d{_*L*k2+KJbZL2){_~FeQ58 zGB#4#HZeMI&)dTKA*D6rhhW_-t!Zy_M=0M-bg%=;{fUuSm>rV}z*{vbgN;yXCT;c} zeyzU#+Ar%%DiO0^E4h<%*h|WU$+2v^Qaia2JBH(vSGcy;fv3(VvKV>(`?oQ0()%9N z@>;?_MFl=`&4>29aBXGeSGBwXVt z!Rd&hyRv6mT$n@C=cKIczOtL9{fz_U!a>TdX^CvE5;i>{r}H35%0J=L=1~4UALW40 zn+Jr?mfW+=xLCRYv6u|{s&_t~rEBKLVm)pb zo9Mo}6Sy^j9bx5uCrmG^K?omow^8QJa3Z!g&PZczm5*mQLqA4$YEG99*Do$*CtBBE zz}^tnsg8o?8_Zkg=#LBt@4U3tNFcz{kv?9!KHMY8Sc47rL2`5AYSa=bb+)e1gjPh^6?lWL_ z*)3?2rf7G>>_k}oLFvIOI`^;tQo`mJvVSX8^LzVDdRg?_4CnVBcy);K-uyB)yw2m1 z;d1CsgmlT?wy`=aQMcbcwkvd!* zhF!1N{nmUZHor@ikcIh`p&()#_3Kt@UhGrrBS~K+^p#_T{)leWtFB3Fyk7@{`xZ8q zRsF8LfZw+Jf(9?IWwG?5>!$uCpoKUIb-Zr1GF^FroLbc9@^`8II5Q?)QulUXTbyyq+X z7iY7lm0uSpH7i#oll~!j27MxHx1edV_E}Z(hSFt8o6s>pmh9aPRKp-XO&3pV0y`)# zFX<2(FUTJ?As49RQ;KP6Jd#}c(nxlruG`Wro_p3G^$Q$vvcCS_m$3W`6x6Fw^6JiQ ziIiQZv1Kmwl%#FAHkpsJ`J?*!FOy_}ZJev?)@*HSPJfCnVB1@5%jFWQeTlA}wOBWcd06f3thN%Xxr^s$YiT!Y z`4DSqiM3dMUwN=2f<3M{b{64&%)p)3*aoH3t_1A8rtb1L{)PSJE=hUtuVCf*U6E{x za&T8z;Nkb`>k+l$KsTjIY_CozzwGjNgzvAXc`sUDLNgOb2Fg-!IF+c~S-9oUYj;eN z{r&p-nSv@wq~Rv$OMyeD#X&edVrsqe{BHkN$3Q{gG*VJQISL%cq7hdN+~I%lRRVWF z`DM3%5@`U?$W8G|8X9nRP}T!DtfcJ;OL8}%kR=B|`Qab9lfYe2rta~_rO~oIDJ(mEnJ#-BRz}qgV`G$$>beJ-kJQ(HrHNv7 zmDVG&Pbz7zr!c$H7oP)^Wv{oyy|sg{XQBSv>&?2piwV|2lL)|hBVzU*a0rCP1Cv{N z9e4?o4r@Jv*J|tQVKsO3oMtrxB>G9vigLFP?Za688k(cr!9&0H$Np@uZnDhH!NUgRbe7)9>W5 z5p}-resA!9doUWH)}#|%#7Ua07!Rd+Zr|8|FIHL~it`-(Rs-x*CIJrF-vF1_Z8~&D zhv2IIFrNKf_uPkHG4@K`%%ee`>`LA0FUwfCSFj}MbS=#@u(r!4^jKGDO++0)uyXrk zD(*Z+ebvG`KM@I#P1LPHOOPe-pMG!WK$d|bvQ zsZU!}5+tuUW%}t3>?dX4X-8}J{yzKMPrJ^P_avu6=Bd3o*xtFPzN zs0VqrS1zB4X)zi@ndLbHvI9Ihv<~vTi~2CnuaQJXdwv6hCV0LD{^_0x_+08a4Krzl z=V7JztP|68=vk-tD`>^W2ubho8 z1?LLjfNUZlKjZ+sc~oA4{s$L^_5}9{(+`-8!A0RR`h3DH8SOZG*F))gd!+e4WFhyE z{3N^6uWJ~M-@XtmRZ*dRlsCSM49i1L>~UUO5pPbp1n#oO3m{Q`RJrk8h`A3^tvw}R zfMUB4nRAGk(}mgP@)p=*&k#VRJP=mdGX+p3KZ`-J=bB5=+7S7yGU7r!drVn%AtXtL ze2ACOZ<84;4Dl9#UA7X%s+u8r7b~A$uv;tP!_a2lH2KZ)UFFvc{n%?tw~Gm^uQKc6 zTkNiq{=MD$GaM0?7xX=t^5pAE<@YlNjDXz2u%YH#aH!0oIBb}pOY%X)Y1nW9nB^ka zA2vdmY?B{>F<~P$V^$Dll%P1}R77dmnBX8NOO#J2v6r3>I6-ap^E?G-+9e}3?KMpK z;!;_&IC$34E{vkWCRbo=936x2khkSa@T{YA810*!vM;i=qf6i@rRxtva@RwdqramC z^tcHc3!b|v=R%ERa1c@MnYN=-j^QE*C1%P|F8$CxpE8|eqDYGY%tWcqF-br{ z%=8)2CJTN$GfgK|Qw0>xOv%d7|AdVg0?#<+ie4l#(_S)To`5o#X%yVySSxu-S7AX0)*OP`3ED2%v{iY|oy2-6AGz0* z)xey{0ijQd1}9Uu1_~4122&Lr9XZHu1?i^2)CGQs9PH=_=$^s!9ElAPkYtpM?}3QR zhb>pTSfkKQXPWAK1o59&v%+ZgaOR2yqe`qE&K3d~BHNWtKbB)vc>2c}pkMw8%~ZIDL7M^iI(T6QGyduy%u>XYP5i|ndv&|94DNP7@yOY zx;kDEi^E|_P}a+&~0{zIpYmh9O+)U;WQzCFi5Y&Oa0kCU+!@=kBK z-&jH50t(qXP;DFvFp83xo|ZewI386oB&$#ndlQS)vJjM*Q0u!udH#uJCC?{)B*k_k zW(aY4#lZBKSk=)PF%y3T&VTxhX;RE2k6TFN;JA!+E@rasBq&DO7)Rbgt%v>_FhUc~p-jFRVLgu4L&`B8gleZeb2G$M9RqbcW$!+?51gu3Ez<*E9{Zond#I7JxOz5%Nj zH8MsrK1q!kkt|bo3#L(xOk_=}6nX}ukr=3|ul*ab$zTXwp^wI5Bwt`w*KZKr*1#+E z^g__2$9caFjFGh3@1a|XqeOdW8rW2Astax+zGHt9^czGM;S{j&U2D!-vLp9a9ZS!+(|4E?N^JPVDQmutv~xQ9rossO2vW#~d_CbL@Tj)+sv{aP5h zGzP|)VXvpI*(^+7PfW^sG?3U?$-2G3MPxsWrx!}>wCPi%U|nPlaOr>(Q9OpC>2;ZC z7l(|U1iGO!ych*@mxEFUmd+@;xd5tA=}o{S0Ao=ZjUstG-${}l(=-^QAoX0X4t0V&1^evbo;bA(Mv<`9+I?H*o=`JX*p;6jh=&k`c zfXaTdB1PrbAzdknchYnFLhl`jXai#yueC=>#|jq`em>GkgRN7bEI&r^ec-P=cgL?a zMX{k&vtbov#tNBAc{(I}K$5WvmLc_>q_MQa1h71&0SA;DcLF0?Ve&*!puHw%QlLf9 zIKL*B(>MpkDbaV6*&U_pU8k!n7%jSO&#N7d8#7{>bVPR2*vHYBACsdhz!CHd(%cm} zx)18vabu;cvY)u_maIlNh;)cG!AlCJhK+RfY@99QqA>Nf}HI^x9Co2uE<#i`xAhQ zC7(Ft*rm$dd)e%WlKOj$%PRr+;S)zlC2~e*@XSG4n~mZ@5tv(~I+IE1dfbbsTtue_T)fi;yQwTa`?>SJS>ki6`uy!+w+E0DHXbX*<247H)?0u0K zX|BBurngXZ*A(AB17vh8;m_pG6EXd7HVWN>&_vn0G!bl%gK`@DCrM@n06)aP4MjH} zKmsapC}wkk+TusbGk-c&3*c*1K1V6)rwsnf=_*WuN!3oQ1Hk=?qMHDKZXMo7@m&hQ8x!1wqNe9VTF+!8 zZ@TGVSdauEO3(4&iA53Vxj8Bs1WE8l;sHQ!;JXn`1bT2G zYT`%(*Pn9ic`(|j{xDF&HJ<+&D3ohQXbep10l`0HON(R}LgQbJhA3aPpj>O7QYc|u zaUc$s-j5lZ-$|0bC>9v3J~JVENw&-(*&(2;f?N%Xt`Y!lo=8s+PzqoRDw|Ox!*lfqI5n4i-GaK! zkh_)&-M<2;26_@oKLgxf(F!~+6ehh2CdOrpE|rD_44YAOP5?Vmd6j?w03V=o5XC&5 zL~(r4jT~O7oBxH3<&bp;N`&J+jn1TZpn0<#n~?_hQT<^!ekgcwN9=#c;}g%bfTXn$ z69M=sTK$B~pa7%?YUjxeYinTz;_!*{EYU&HvlS8)0*_!A8myq$`I5&lmgp~nCsz}r z;4!50L5xNApzw*rs6$qZygkLLa?+ZsQdqWR$Z4aZDVi!ZbY^2BAFENd2;&zSOB0!V zu+}D%ZomtD<%~;^wNd?{N5*M9|Jxzx#Fj=SdOdb>a$sIF%|AcF9qtDI+(+e4^3M*z z57yvtUMsU;S9dIso3)7{OCg{n$lkT2g!Z^5Z}~Vcj@jm)PhQyS3)kjc%o> z_TB=c*$MZkgI=ULj7e1x8760(f?^xh8@f2qW$vso{hxhY-l%07B!|j@*%?|N!(dGa znMW~@j!G(u`7w$qk4lSF0-fRhX2!$B8`Db8zC4i z`yOvFBoFQ83PZTBp3!p16Z9-HLj>0++JZ>&@jE1Fp>N(0ABHO$wblu{_$)n(Q}bCs zkt7bn_v5btZ=frot^8{}>ljIjEdw=sL@N_CfLb}vTNzkmQsd(dEZcRU8`Oy%A#J6^ zUd#`-!cjNQVb~1Hev)*9(MDBl25+#3Thkj%-J1S{9-3qa@q`_=s9Q^mZo~7cp^}l- zgQT}?SXY@7u}sH6^&~NQ<5=!AvXpGv>t12u#QPNVtwRyY=48OCFxv&NIf{9&rrd#if}z*FfZ=DAjTZ_HQ>CriaVF7S^iNn~Jxs7sT?^1% zE^{Z1r)hxdYInIHDXxrMjXF;0CBD$i^huRDu#nd4VwlnzMNE~RsPrJ)R%sH5*VoJ} zcmhq8YZ?wUwEjLz-2fdnsz0>k=Ksf%q;?Ix@xUH_KlA;y!H$7ww!g50XIRvk(!qk* zri>iHr&w6Li!P8`GgfC#J>+=emud0Wd%Q+GZZu;+ybQFn|!JV!fhB|>%oeAKf|pG zA13Z<>uOIdXtRf(_h1QZ8aH~fXbQ$;PnH{jdUaeW;0sdgrd8~%e`2Di*EK|L@0Chz@)Dg zO_LgmnU$J#SXH5B6^rcwH8!e0G-aK}^M9FgOrtaD7UWhk%bo^P-h&z8?+9Da)(KST zR-XB^CV=3r_hK<(QC*EVQx7j0O9D&1LxxcOp&_*z&;Mn}CmNke@sLYnzCExP6+StO zW=}WRaUB(U>S+F2<#%CCZR(;anu{2#qWcM|qkhzen@KI9dlE~00=jKfe`wzwjpzTe zFAcFs2b0PnH<5Y&DC~2=H}t6Iw*~_}d|@1wd`;l*_KkT=RijzBU%@KJv$q=oDmx1ouuHZ*~Sf09`|EdwFu{uqx@xtBEOp6}MCiOhS#yX0=g!B0} zW=|DaYq7>6veqRH5dFBN0i=2;KVV}a{vt(XX(2&M_q7t2D!kstvW$cf)9|>)Ldq_-Zqy#ii~U$g0VP4pEsaH3 z$&hF0AeA9Ss<#_+s~KMt6Gy{_7j}m71AZ*Xdm4B}67`XShw)2(NRvIer#}m`4KJZJ zdExV_WLkHg>(3%x5yglX+J=rqtPH2%pEGK=F;fy@r5AdtnxjEBh`pv%sO)M4RBmTkqqlK7V6KzHfn!Xg|I;0EQooCNo+o%v1~&CVm6CCP^FALFRm0Z zvN`k;%VaF+>9hi#5euLWHG0`XSW(<)g$tZ#Et%jIRs?~|4+Rf_G!}AwcaSM*U~=-k zLCmM$KiV}@yU3m4bh{$HeM1jpp?j=h7wM+E6^YOrk0S0?WTVoY0J>XIf=VkCDeZY4 z6^wwrPclbAsQ|W|*y!f?AXEkrKsU$7pfUcrm>g@Hcp8J98N6K~ZpfKGDvi^C&N8!6e!Wz^^@UtJ|jfU&u zeHxk`QO)8<&_XypECwgLS;iIUKP#~Tr?N_t{_tM1K1zvrC)?vrzdcJBh|Wi8XBL6X{paY z1s=NXtIFgvg8hELRgylRO`*Dw$!DqzO;mj}@zCQXRVG@M5$#0xVf1`d6^hn``UXNM zl!WMFO%)1dr%AaG3T1yb%7kh%^qkiaO&5QZzWiR{y&SBgi*A1Vaa?j5qwOOgFBL5I z!vv}GCrfn$Kuw_s3c9*7s!K+CJ+kd$571r>(9sg3l3#5np1-YuOLW__=)Fll9XzUg zt+{yc(vEJbEKDc;^b(JHW*cM5T;QQ4j9$}QhawiY{iwW&;!BSXucAV4A&MnztEPfU zN1)?378{Hu!$x&&2`e`5(pZ{i2f4NwEMj|qxlzNnK;2GZmI+WHvO^@C>Oc|Mp*boU zDCS$50J6isBUt2cTJJ5^W)Q|9*03NA5L2PM2GEY;RcNN9J{^u9q~R%wKT`1zpKTb9 zXjGaAfo1AS(Jzu^srM+_(WT%Cjit2FdvA4vt&f1z0d^LU;WWuzsLUqd2>`F6@*Dxr z1E6;ZzeNcrbuBa09x&+_R0_TSMaqaPCZUj)HGf|m{BC>Xa zHXZtl+y6OoS16&XmbG!IUaU3PbX>Gcb&<6fG#cb26^7wZp^K#pb&gh^pk^s+zk4y5YKxZj)m*`<53)u}J>}auS&&Beo@q?`wQ21pP09KuNCva^l%GBsM@INokM> z19ym!fOtA8sVHXOOj0lIJzj`nDFZ0Dpoi{=Aj<3-Rb;egmyprUpbYJcDNLmqr4BEY zX6^CO5@ncvlk6ciqxZ4tMvHW#5RoS_^Ur1s9v>aeIi=?7qTZWZVpvAlzz__d(QKxtrTTdw8?9a|L6-EN^U4@@mbK!|Vww7Ouy>3F9+!gj zBlsh+ERu2lY%B|7&+)foSy~3YEZotHnvp`kz{kr_7M6@kf@F@fAw`$!CIJ;|# z^8j8R&q_k*%_F}6Z|acwfd%z&!5;V?e`FU~6qy?5&A6;;1@0VL`lFrd%3;|T?>Frd% zOaWBs>Frd%T=Nn=Vo`sVWLgH2AI3-?ond<*z0j1wa?B^m9(q@n<%alR#3cO(7$w%i zBLIL|@3sTT6M#+s9U6#b`2w=*HxgfgXwIpp*GySU0mSO(^5{f1!d2D22>Jr-y0+*| zsuk?eh$vbHohCie0%ME^K=b#d_Wi@*WZ7T5O5*<*c#8e!;B#T753-uXGQS2{k~5!$ z5t81&EELN8VnE<${991Q4kAjD z^%$J0*PCD*OBQTq{W+**DZvyfHhnz-sRFR;dy!09NFdZW^*zupmM(xq{Z>-YOt59> zX*gJhCxuy_-pL0hV_5o+fFj=%W6&bLDH;2P0Uz*v$t*_>597Zivp{lSOEd|l*M4@<{=u-e`geEPL-$(Fr z;7Gwt?+>cjf^_~|3f6ME77N3RT4d$RM5PE8A5w=67zp2F18MOq0NPe6>c@$Vf?r1) z1IaH79taP$4F!jIU`zaBay8MF)fJ-~?z9mvF@|Fbks)pVoAUvD81AqY_^F)58fOzm z$!{Fg=)y&pM)GG;S%~dtNa-TIh(PVH6GoU6c=X^c7LfJqsaeD;7Qb zl;{t8*0Ci#N7}vxK0zwI47WQb>3$}zB6LFPKrd=V#CenZ{T_p!!1=Qxu>U8>!(L--ZejlQdz)5P?{w6ET75XHXX?xJc z$hJakGl|iIP~9%rD0!U6M?N7-=|#P;o$|Y!rL#cCx5OfP%P@{=IxL{~!u%gGdGV}t zmhOnAM_)deWV$eXNI~@CU>IH;q-e?K3({GTs~53Mgg10llRP|8P5T^?bHw1B3++{w9eK$(uwz0z_}+ zio=7P7JdfvV6WPp&6+NxGI6kt&%;FO&0eiH(x5mDE8C{>v#&u80C}4sntE%Sk5F;F zYVe>%GIrX?8PZPtdH}^`S|)U^HY}W|Di&dYD%*I=s``JmA&N9yhiz9-JW~gv!qq}@&L&u})KIJ`X{GuI&KZsE4+ZB^Lp(XB25d`E zJQLvNrH1B2{ukhv2$zW^V5yI1P<-E=y;)PjhB> znQ}B_T1(tN2+s#|F>Xb@gmGZ?dgFblWgE*e6{w5#`dDfw2j;|}cn*QB_4-trHX8sh zM@gq=lS9C7(GA(68X8wTMy;f%Cutv&g{>=+N07l~qYm2r;rZ>rb~%rV-4NQEG7BEA zSxzC$LJiR)q3{~CUqvxiYU*A=A~FrufI2kWup>5(*N~&34PW}frwz-3g_=w>h|Ssq zD7uH@vgZ>I;?p`-N;3FSSK^R`!cdHFXliCax8(a<9RlrwL#RZURu;<$n ztR`&23^)q2C;+m_J!Yq5+BaTRMv0uqWV2*ffq}8U7G3o-DgiForm6MTFzw+#>kMhQ z!9kOF60Ds-7QfM?bxD4Aw8~Ab4u?QPt9YqSFUenO)NvTg6)IJ{wpnT6$FiBH>rNBt zmo#a*sYEu*-c366K@*~?I<^T_ym^f7YWJh`k};);k@8RtARE1~EH&EbFN}OrBa?5c z{JC!@=FjKnuu#_!)kResHHXMYG|o0=yo#$T(oJ{6_n$Rsj=oJpqcR0AHG?orcq<87SGUky~m;shVYpUWff& z?`!A^YzfFkD5fX*f_xU1L7bZ#IU8!wC63E_i;(IIi9RItCbt#h(ZczB7S#6;)*DM* z2=bg>B-WW=n2cgSi1va(gvCGWMPA(m^kXQ(u$0lNawdHa#$PnUPJnzI#gsjoyYiVm z$Cpey+-O=u4eg2JC%t7n+7RZsA$OT%&#C6^EMT6QB;HzUN^Yz*^z4q-Gx~ghgLz!_K6JT7$|j^oD#`CoHlAsz#wS6vBIrBl1BhV(w9G;gn}MyMS#(ph&44Rz$Ou(xih7bxBfguBoFy&QJLxJ% zt}T<7Yb`?6Nb!Ot zHH@k_8rJWzddm_-fLOm@fa%Ypi1pjIai|(o=T9mr(RlqA^tC6pM6BQy}#r z;F63v4NYH#Iz6)63yJtu@|5{G>q%aAD{QTF@02#Y*x|8i9P>LM4b>$?&yo8Ls-F z9#PU=rIGb=l7_zo{CI(Hd{`y7YC>DA(Xu6%+^q?I(?4W}HKD!HC?i*EXu93;r9k(h z^_M~=Ly~uDR5JXAN)@mDQINc=(L|7Z06@%LiW2#@Mxte;h*uS{q`nU{6m^r{RnP`W zj%*T!^yWmvsE})#X*7z2RhkU80CGPKZ%(7ferJnVqV+EgMJ;+na9c4;saS+(ve=I8 z-Jk`Uu|f+Hu|eq96d0)iqAwFPKy>9<4IsrU_?lvtnzL8cyK_^6-hXL4;sQskbu?MU zTIVfA(xe{Ni~n4V`(mZsT!Oo#^LTa%bA}fUVj}#gY`YgP$&8QLeY4 zeLPr4qj(<%upE`eC|yqgaQ0B;VXip5oZ$K#gy+EV42r3>#zEtujh`el4M~@Su@E7` zd@u)Uc)A)?aWGag4%N`YSHoLVOqq4YIwQ^-D-+Z;->ehY$Dg20x+CZLB;VZz(`y9C zc)?GmPs%^SjD{zTh^giPC!M3igQO{@kX({hJ=@@6So=@ zqLI~5Ea_OAa#h?4zzYf23i<}AxVJ4pyh_M^yu2+-35t%vg_a45+Udf_!Zcm&!a0`r zd2L&kFp|EDQa1#a;mBm_8DG-#eh>1&&wv=bjy{&+qxH-GgV%c-ko(ZUUX*To0Qi_N z8g-}~1Li17)H&{G$D;h*7@;2ke~;q$6+riMyhl40;6sE6LclOr>v}@^_X-=6!6II|_-lIK>aSTT5jraFD07yUz*Z4o>we49zOJkha z^tg3m(^Cio=-VRB&hUecE@yA+qUe_U$Y&vK3&R-S(S_1|WXZRPUue&qarE^Tac5`> zDia8xdqrzeS&1TUDzz%&aUGa5y74B`%b?I#9K`*jf1`2`MfiGj2NqRDF8vvppHMVk z19MX|+)1oBg8$+9|G^@L;XbtdiGpFc0PSKJywGb86fq1ARKf_LVMs+K8O0Og6YN&x}e01QKA5Q>wyBK8BLtG!Si@v*3!sP;aE z%3RQ^QM|tgP=m^&D88flj*i&$yp6hn-s0Sd%9ALjR|cvrFH=(jUh1e;mkud95B+W+ z%hGu?xt|4JBn_pYyobs=D3U2cGoEe_LzYYeI=Vml{6HfyDH_9mu7%F0Up(X&gY+3> zKP6?e0DO;0+c}6qDBg)wZ>KX(@9~q&2J>c*Li;h*z(g{?M8@gsHV&rBd`3 zKC5+%qWWJdUOeNIs|TrCN#Ni^0ohB70$M1%6X>e4mCHy!c}a&@SFURFhf*JYsYs>J z&Fv0Q1*uDMeDE45eKjZumEQg`P15iX_d_u*o0KAZJ{rJGnETuR7(4>Wa1K?>{T*~;sA`^;b2=qKF+s_zq zvkq_$iabbLv|?eN0zm|T$1KV0j5RysvtlLFng%*Q-n9Y^|1!A+^*;l4#iMxAQ?@d>2R%z02Y3kK=wVw|xf$VJ z1pGANw(=HTSrL1j&+f|7o0B_SDXL4bgVtQ4t9{ocnLgIWV=|0{%fv?9_ecJ9SLPgB z1j`Kc8fX^?w?{D~0GN!*SOUTT)S|M603QJVLggg_bN~*b@*V-dL-W_De1+m&1j>)7 z{D5ML)7sv|hje33oAHbWi%Asj=Igt$aM_&3cXVSxfu4xQEIDTfJXi|5TB9Hw&U9mK zGRXF;fHnI~FI5RgOaD6z!msl#-SI->IzFa5OHLw}`p6yV!DTz_PxDZOOMT>Fgj)u9 z4&k=)ce=A88Q;|Ut2=Itk?xzoQ<(kJr_oybO??{O89krWM>UK|BM}`zvhSjFEI+lN z1TVvfVGce*fbvH%OazdJN^=5+1L%cH50v1(xss=3TA(T0#5b3-=yYSg)~f2g1(-dz znV51?Z?)C%#!O+%;5Wvj^Vl4Xfx98pb8cqvI46E-K9Ft zk|@`hVBlT!20K=zg0&2xM0-;0s1KxcD8e5b_>~G4;TnyV^l`dXjzgAGF@)bUgCP^c zLu+h1aMLR|rl&NP#x-`Ai=qUi=)PD<8_2R$2o0B*p@1|@24yf<`lA>|0H{V~7K*ws zTYKT&o7!##q<&yw!$^u&W_nF$1u@FwwT9^d&|JQ|C-Zl_3s2GyDyXv_!vj5Zkl%Lk zi#_pXHeDSY6)fU1T;8s+&>#df=c_95+F$!hX3H_wX%vbu`A`#0MR4oiM!|HuK?z@3 z$=bO#fI*ChpA<=B5OW{lxr5PSO^e?SCQ^UEj9I9bY(~R2dLr@$^P?vsw$8Y6c$bMQ z2U~kAkNcUm7h>5q1@#Zrx)ie|1lJFYHZi1eovKlYKE_-RWgl1h6Ga1@1&Ib|+@EC; z6yTU*E1`Bd^Q9&#Ngb?O&T^bhF?+$_V)Hbbi=~pq0V8GrnJtDO#tMtaGx~-A z88hC+L~4&6Hgl9TgL#N=4v3d^c7UT{Kd=ZgUD-KJrYp-7_nb!gVZ~?S8De7W4E!X9 zcoG347Gd_ZVO|J4YN8EGCw9?7d$onc*hx}H=1Y$_u{4Ai^6tHn^+xjvy;*3>e2jlz z$To}`y@GBOkB!kwkwIb>z@ZMdfEs`Y94wuBDV1O32Ya(%84KUp-mG;8a$S%*W$q&g z>AQwyua|)lhj!g5zECCg7zuqk7EZeudNv#|eJH@r^h!?AAU>!Mi}9qJPrnO>$$WJm z7VD_kiKPE6xwPR|DL)j7VfV%#`KNu@;MNvg@f{Zr@+rY4LFw_9q|=AC5A1j;EuTK( z<&@*YXo>U@@1}fKAnIHBxGEOiYYxWqh|sY~({ZFZ=}5vB<46HDuWC3_PAh_{;b=2a z7q74!EfaNgOkzg|?I05?Ug8(4SSb6A|5e2j#d|Ze%E=ZPA%7dQtp&Y3GpipduK=nY zN{fl;?d&|#wFThgg!-CLeF$|6;14Ky^gd0suwSl~^5}({>Vec7xz?Pwm9Oc`npb?D zhy4O==@y9{T}Q-JTaA=BeF%_b-lrdPIH=kN+_WUSz|y%1OFv%Q52=Y* zrZr)CubZlcqGmNe*pCHfQuRf_BECv3f7*oQT@Akg$?U5JJU8`c8HqMK8lK?I=zC=p z5ffU_Xi7O&jB}}j>U1~Q=W#x`KTGLD7cM@}z{C1VCw>?Vm$q%`4H#VI)n&?N8*7&8Al<{jA}FcQpzQJh4GASoSw zv&NewmjLa`mUMI}IClVZrY|c%E3`~Ki^5S%FKc=mm#NJS%am^(KMEPw+ayCv%zp5{ ziz0P%01BbjB1CJuT;9p3oB-`Oiu|>vldcVKLYjtuKJcCuYIo^zwHfAXcvGQ<*D?it zUml0Ct3X4C$V5H8^ZC?)ETC*rA$E|7@a`qFbq-}LJ-D}ZZH~{&nx-K_18$R{74Iw% zbjUUJ;FaVN8VfCtPxH?QvS9WWzdDeG7knv9!pj1*PG?KU29KL*Ajn~F_Pbx+j_!qbnU5guKW7dFB7)bR6xU)cmdLB;E8OO2B0u_gpkG7EZp z(i z&YqIQf}q0PQ_V^%(g) zDd^z;B!DUMSd!@|fEn^HeDVn9@cxRpJLz_iAuj&Z2$miyUM04f--ZP;y-94ddhLJ# zlKeTp2)gSxh)68xqLXkzbXQc;2bG~A$sANfkS&P5k0UvQ`V&+fw4b1b)_1_dthvC+ z)~l%Nt%RMYs8LFyioB0fKI~F9t;#h~%KVkDlrFgH1PI$|43oXz`oj zMUJT^2I{)_kc#LnI~{%wZx!K7z#w_{=Lbi!P`|HXhi~_oJs_B58T;Qw{5tUL0XL6g zx%ldR(I^%uJ0p4TQ7kQre*P`6#(xBMK~!{O@gbS|pdr(3Qo4t~I0|o%@8sW&f{qdV zk5Mc(?qw&s(wP~^u#7qQz;PKObg+$=kb&$zF}&?)RuFgzeeA`=Xncuz^cjlJR{q#% z*0#Cq#P_S1&xa7|hz&$rlyv$*pF$L$Em8EHTYn-B0HHTZ^gNGnr%>@$2UjfK@ zS9q&2ETrNY4fhs$t)>kvS4xq|8YxVbl3pkE>2Tiy=1Uz|0M+wR+GK=a9oCpxGT%0a zMX`MT@fa3qtb;WInd{0 z-fBG735E9>&swr`ymmZm&3@)5#b>dqmv1uL`X2Dz>>;jLT z%rau!8oVu(e55V|&B`&##j{mLxtPzK%o4M^Yj9IW%kUX0(E&p*cOAfoOwPXRWSAR{L07mj=Q&>duhnUIiw*YcK%k@R_5M%jUCXJ=k z;T8?-O&8m-@XsiMm3ZgVCAo8UMw3tATTSY6EA66TAPLS}%}e#KAW9#0a9*#ae|>BgMSc3{1&t z{`3qM$6n+IX0U+di`rIbH>RNEof(Lmn+W%#>#DJz)Nld)Vm5hrAOS#ZUMPiyuSjt*t#IXl68Z@bo(1FI=dEV3BpH1fGYdaz8N#2M z#qcbYpPPm6!FT0`*{luQ#Y<O9p=3fJE$|a0mijqvU@rr+n|6Gmyw~I&5K?6=+HiuP5 zd;;4Kq9m<=z6B^1hE2M-=~9v&^*{Lcb6A3}a~^cyh{kBp;lV@avY+uSCCfalQ$O>x zc`S|H=KbffkPO;C7_oogj4p79J77Hmd9zIQ?Sy=kkTL17i#?4ypD)g1U65FB&O@U9 zfv3)gs&d|MK5H8=1*(?#kX+v)EcPhg%lYp4EI9M?1*8N0*6xr8@6!;=bc7VUe#u1N zjhJkx0^bS#`+QbZK?mkuk+;jjo`2_FdVv+WSR|2)! zhFs!}-G%?-e65Scgam66G}d%APM$YsNZx7uV;74E9p6M@!=R+l2sydDki~@d(ZWiq z#m;HCci1|RLdnB@c+o;O-?!WalX3V$H673KV++|K_7h*Xh-rVe5!3Kz8$sHiZJ6lK zHq7DS-N7I0;3pPgE#1klE@EBOzthl(zthl(zthl(zthl(zthk?4Y?p)d){|3)BaCG zHv{bs(24)k(24)k(9tjajn;|()6j|k)6gYAY^hHCpN8%*uUpI(VVdSFVI6(e$71Ib zfe+gK+jP8S35z#{b_XJ365qQ7udy8BKP+J**gf89DfZ8g@`X!Tg2RYJ<+IysJcOb! z#xhmJN0^k*ogZGxIz-d251zM>+VZ9N!0|Ax(y#Cu2JzHotV`5AjP-W~CouK*w87j% zNj!^1p;8lKm3+f8HiQl3zb|7gqTd1cS3+yXe`#%xL5J3g@Rv4jl8;-j7rN%Q~~N-dAFyvQpWwW}Wd zXbiimhKI~f$rj6pJjw<{zX4@031w6MOW9df*?A~~CxcgDAANWUANnW@<2_ce;+#t{ zuvf@lSgcyGy3vrkxb!yA{YfPz7u`x|hxCMEc$I&+g2lK?m-VB7j6w)1s)UUTCH(HASzEOiLj@ z%>g)*P#^I-H7p;ORT(SMxQ!2_Q!~DDC2VM~^+DKBrU7Jw{tbMIA{BQG@N zd!-4V?Hdh<((}(&;)%k%RV+S-ej9kS2N`yAA=!%@sh(hY9kvGsS~5pF$;{7T;-@I# zgZQacEUD!zt*fk|qRm-p+)7XQX`V(VgC)mN=xV^=Wv+tNEZVkMWNM(aNrdc&jWpU)Mj?mH) zCHx0&T8o7~kf*JM`Ki47THNGs%O|WwF9!0JIE9VUl!?Kcr~zW|Ht|DiSqtmSO&NA@ z(>fMyrf**2@!Kw*xejah5#E0tA{?9gx$9Ve&kfiFl?X%2`30hn<{sk%*h^_#aAOZictgDZW;yU7QX5X&wZf(x?*|86d?ZXh` zG_rk_K=S#{zM!J`qZk7w7@CwiC6FjdYd(5524iz3YOpF|tF6YMV1tsjYNIxws97aS z18%D*7FCocO46hlA4Gh(kszQZe5g@7Z*TXUlKp4)&71knym!0%=Dpo{_d7Z?0{2(` zfcXu9Gu)tp6BT?K{(w(wclHS_?yF{D5mrB4iq4O4-t(*lqY(4@L_ZAh2%psiR?`u< zrqSgW!CxBX@%_PSXbfueA|a>`T{h}MIn9A6@36|#4O%@8h1;5Sp?OrTUKgrr4q!2V zo7XG`A+V3nT6wwDR@LjwblrEGpdXSDRMu9R5Dw%)ewKo3Q-$?B+OJ;da63b=G4yBL z5aJ)aoz9HI{Ngp$kin}AHV4W>pmf*LSL0AJu&&zCj2HLWE_UR>l6e7BD_c;uzKEx# zjJ|%cFwF*2=aDgdS#G3(7bQ(<-9%U!flvYiIgWT)q9HWe}R>!RPQ7IxRz zx|P9uRChg`;c=5IgFl6!^_K~lTncYm&%6!q1pLOht{eZ}qz4Ut&uLt=ww;A6-oKQ7 zJPkGI3DLwfBua*QTXa33b1J)@V{Fj%!cjhqr0zAen-o3=4FkhH)e`jYXkU7wQtCc! zxF@;GVSw%lG4v_sgO=<8T`SP}C7UO|lLd4``-=bmiT^)9ukBP4hW6h?rz?_7OALC` z5@AQ;Ki`mmXXx5F_?G`pB6@>$>I6zOv}dVm2Ff4*BGJOUQf=7#ww`CS25d)eB$Ojx zll6k__^m|Ch!S@p*mNnQ0q+wn!Pv@8o^R`4we{_WIPLfaot%L{;L2Qua-X|sj6Rxy z3jb$`=!eW$miBFoyeX)RUP=J-%CsZi*OhNJ^rxToKG_#I=J}ho zm#OAX=0&#gCZ0wT0qr*6X)fA)^Y zewf(2W!L7Xx_0iee(l9GzMr3dq0ri1fE`}zlZE)n0{AWcu?}NFH_4X&*MZlxJY}%X zHesA5GlKIg+*H>}=^hDS{>Wmw#mIi89_RQXR$(N<^@N$Alvh zyqC#j1eY@TR|FT`_vX`SVaej{vTQ9p#1DOsn|@j9_`o1>T3(N3C2q2%6d~x4p;+1h z+f1Cc*E4>K#_F+|@h{ZlqfAytac#lM$J1u!@%%Y`7`^mTl*N1Ly(r$d+)d*PvjZHo zW)kz1Kf>eYzGY|B6$p<2-;UvOp2R&7!(|Ymi5QkJc_W64a@{nWZ2qVidB=IW8pEQ6 znM4|&w)9Ba5vTiv@mE^Zz#TJ9tqmCFiD-WV76miuEk3O&qri9#^m|pE$u;q5@xv}2 z`~L+^tLjV^h)+9_sb=jC%4x)f%iJ^q$?wS9<%-u4*2#b1b&bg_?UG@4z9*9wk?xs1 zYjY!xd2-qY*_=G2-_ea@ZI*1pOMa-O&oTEst|gwa~(-B0dmB6pZ7nXWBFzAI-$Gwi4>JG92UBJJMa}QtFo&^mixZ`nsurh zN5N{_fh#1$X*7Wk@_qhs0$&CdP7L?r_jw*U+lxJX8F%f*ZE%>TcH;()enWly>yGS9 zd;Nh5)A%?mc^WKoMJ=uA!y3L3_V+R3yELUpE#>XOA|_RPxRj#ps+6LGdu++q6xl+v zikzn4Ufj%eyZ2&EaKu?@`AOP_JtI&?+G%nxBb=s>mGB9w>&NFfK%VMngj%}Y&&)yE zxX&&fWD>l4*=aQo-3q9i{=SceyD2D>wLK@KC8ZaG~a zz*F4BlY@3^rUvmNencMMZ#QvPkz*82+76B;881$gNyfW-f$wJ=KPbG<>ADh*)0!cc z`bOZ*@s^T0LHmaotDR0Nsdi^|V#w*B7DsA?&JSTv@LgwNz?nabx18!h+J1n2?zRpd zz=;CbPgRGp#=GS}8fA;sbr`cW?a(`d8aH7PC7;JqXr<%NW25=2m+S|w*wN-x;!!L$ ti|(Yksl_(8km5(N9BxwAQEY@+IXwPv(%L*$1~PXS=j0_`>JkqN-xG!YOR9AS~ljhsT(OUcO1V*$#f+-~fo@=9(z zGb&%?E?{pdecEthnFclZB3<(>YSY_0N3|04FNk~JWSxCewVuFMsV!-Wu%v`)xiz$fbeiX=kjYwW1Y47_#~j5H6?NO%tH$2psxG`sFK>^yej4nwWXJ;cx16EgUe`nWDPGXQemwY5CD4XU*B6!{7CZss_7eu8e4q8YcOu zLDmbtZ#a1fa`PH?lAz_+%%$tRJLe!|4%8^0jPZ}#-;PuT*1#bRo6u~;Nb1rW*g}R_ zAz=Il#Wpr9(-&egzq&#q$EUl)xpq!Q_nI%eWFE?VA3~;IBPV~`aOPHHnffImkxb%)N@Ey2OGcY@w3|t8pmR$*iLbp2D{!12-mV%Ud zNCNQiLJ6+W+Lw6a>%LiC=V1KiD?=WTa zI2)UwJToqGvIW$B&XtWmE7rmn-E01G*8JgImop1}$~^Rr@XUTF>t0(PXX{>DN>LB; z{U8fs_nP|d$tM~f(pVhCk|bE3_z%krC4GDZW@YL4uF)QXJs{56eu#PYkG(B~uU9O$-F z=xjE2Jfu>ek|DMX<6i{HBBg%~2R6=0Dmu{jza8kPb|4ikTXdiS`KED>twC8kH6*b& zSc(pm|9^Cz$8t+LpHxmxEe+lDEd|K&p;tWpB*`aAa_72+6s66ym29qZU|LMzk=I41 zDx5V_DzJV!Yr5DP(v=(2B3QlRJv|DmdD`@L;GH-J2bG5PY>Mt9L$`Q(! zm98^#*nVa4j5zEco}5v@S}W>aiOx2c9~gs6wRp?_Y|RhfaT=<}4JjG|4ZTo(cYJdaCIf0ZJdDOQ9rUA=$XTVVvod8?c-u6f z;Icy1#5-R&qdSBWYJ)Jjri1st=rtYw9tjaSH^)kkG)x^;eB{4i=kgBWKuDGH zyBqq!i_fN!srMRg!Yx>KE3L5mFGzFNL|j)KvxB040svE*#GUyMd`cNO+tKrJYO=Di z($+9#F9aPotOkOPmDiyph?J}|(6$PzjMJyf&4zMKpB?%tsBuk1ADoUGMk+^U$A_h9 z@*K3TG~9WGvcZi*-?8xm_K0u~X61GzU~Wp( ztJwNDlMiFwU3>|PQ_ZE)TCcd$nm>xzd!_3P>y;66!#($^l#<%OYGvizoTzqK{b{C7 z2EI$p_ml>}-X-~`?qhD%c1TjboEzsSfye1n{4v&zvE-6e#En=`7D1M9dOp>JP5$K@^+;;KcZH7XkI4!NjW;t;i`ffXKjaMP#a3o?W<2V z2POJ(2tBwGfOV5X5b#cd_09031pkKY1e&NfpzdDkp*493v|@SiRn>$7Z1@rNE3ud( z4KKW?jG6zWUt^*qiLJA9`Ma{S=9h+GC8#RJatLUGE-F2$T!EA00r?ca>r6h6v7nxR z+0a`#Ulo-a2|grMWP-pSl98AwE8a=KG^~tsG|c`J{i8kXU{d&llDr_jy@8CuK&#u% zEtsQ-%!6owJk_x4MJ(Pm$Hc~SHAoF@!QCaZG4p!qy7;G*hZeMDW0VgTZbM$8g$PqDT@o(=gP#z1ALY~EBbAQ^M?+0`Q@!Z#O_Kb)Qg>}587g}fV?t{kVkBjTy?2h=Y2E^4!DK==Aa>0cQ#ykN(eae z4B0OP>{DK?j!JzNf?H(kD-VF71>El-ZN1*`#Ye-}3R{+GZx=&)r;}a;#3Cr6ZI-u9 z>9H)Wb)c%{=bfq+;Oiqbe-O7xa2FkzjMgyvxbn=huDD9PzATDuSG@1fZryW-urjW> zy|HEcIRI##U#YhLMwxkk>(7Bh)j^w}B5kR0~^aZPti3-fNXp_h+-`72WdW z))i{Y{QtDP0xQYdy%DOm$JLgN%FyMVL#u!+I`9fm?m>K>uA9~c4p3fO-ZeB=kl$}X z?xB(|DZwiekmNe9h+>U(BUbG2z!1(~qf8l%Dy9oC|R_pKNTb#CaFakKmm2QDft7oSiry!ub)LPZJ&I25-qF9YEzTAWqGvb&UrYSPa#X;?8JE@&Vz7XjPpdCH{e`_^V2xr#kn5mypJIm=SOh<3+G)p+k7Nx zHTu5-XXodjRP1ISOojBh;-`Kbo=hfdfHtq{R zr2&=GI6E&iHvWe5#JY9Q6r0m)=z_J2)wW9RX|*rcl~@aP6PSn9UShQsSZ@lPfR0GhZdUP*!*X9r~ifPG5Z-mv7eEhuEkAy7{L2X`8{dS%vLf807*xi^J5 zlvnl!Cp&T3Rw1;g{VIgnn}7qeIA-Fr9Jme2FMH?6f4!@WuN%z<~iGH21xYNpl2wv_S5ig+@ICzFHBGi@#3KF7r@VVTi|ec zCzS#B+Xu?e``aO0l3y)mW0h&ICc+n+UyZ^Y!u_vCg_L3%wj58IDT4@CcR1*(UOD?_ z9xJc&ed~LJKkXpN7Ga`CHxi45j0dc+WPkxnY|!9q^Lq?ulccGxm7h+!H~b?8CaXpOv!k#vn=3>DrqsvBJwH^jKG5O+sCg{|r)o zJDtkjQKCO@Yn>5@Exc~9`7*J!QO19s9rhVIp&M(>2F5IRgmZP{1mGnfQTBhHfLonk zf1YjK=MTb6Yp@XMr9_^|a#fJZxq{a!zmMxM-8^d{=zg*{wCLswAXJ_Vzv!w2TZ|k+ zVipJ>LGt!BN|Hmj#5@KQT23U@OGP6|UQZHS0x-*-B%xX~vdQlu)^y7NDD`KetPg|K zUAM|yOA@9if1gQY9hCSl>R5*I=&=WJK@t@6g%h`3<1_2~X1*l83pS3?udUOi!^Z+LhPAS}K2&W5lZ zO5m3W%7f<$tk)pN=J$gY7a%@Y~E2WJM4$7#Fl3+Dy5vCKq^UGi7(KyY>l18$Fe6q&=qUjxau3N*vOD}T!)W|o48al>9ok;m|7}!Q3VLFX_j(5L=8%ivE_;FilH_s9jc-HD zJ&ecV37Pc2F0FhPKCA#`6FfQg#>Jz zYcGT({|>7|yo7w4ObcL$w*c%igX9paYKG*UrF?Y3ZtVsihPL*m$#0f_QhvQK1be&t zzDq1#G1C#E%@F){W|~8yW(g>qnIe=?KZcF%2hT(-6un4drWeSJMFPrTronJW z#QlOlkC_G_z9LpwN5ZNCW(p@8S9(+CEMq2_wAKiy4>OG>&b1ydLUdmyMGR9e{8%ji z8KT5rDzZKYi=zB|)f{qDsk}6VQhEKQ=%k+z+4WJ0=4YW*{t&q#Dk*~Ml6)J2qLS@p z0L=0(CFF7xGD804Y}Q4YemRq!Qnp|29DXbsOnt1?=z(N9jO|QRUlm}cHp)MjLpCvjN(60>Y}%qc z(U8oX%KHuLN*BYNs9~WG3x%VpTf>Ek4F=O7I67*C-3ro8gQ+8#KQf{lpt}asL)5H7 zK$1~1z73-H3}wfap4I>it|Lu#K7#n(m8>vYJsi1W!5Ab~4@X-8RLGu6_n*qJDm?mA zEOOStpW@4$Fd;fo1n(nqZU=LxgpDO_977V0PJkY#$KqW1@XaGy|||E3dcUTYG@_Ovv&22c5Nt+g<{TH(jjQ z?QOg$Bg?5Sm}k#&Tm?n)A2oY|WY6{?)n+lm_M8Y}vq{D~U@)fQ!y&=_##~^HODQaG zL$t9Az-UTTdRo#XV{cT&kjy|u>_040`vOp6L#^9^^1KJNlIO!dl9GBOwt~34Vqto0 zoa*R|*lDML^Pf{WTZ*0TaSN#$9G9?`#m>+j0LAzNKBCUyqmTUojB?xoFY4$$AoRb% zBFXNB0gKNR*l^|L8_}*jY?t-)I8aYD$@l@Pp_MQI$G1I=Rl4v2-=mu2tv#6d(UbTS$xKc#9K zNNB-MA5!Q?=tWW+CVW6Q7*wH4sP+IpB;#~Sub_;Tj25ci53GF_B*xD2Apbv0tfFt! zOUYgVCVO8KX+A@wCb#HCU^aiKwprkXq$E}Utq5i9FQG0AE&L)s70og{;tpaTw;Om^JlxG+pcF zmHK%hqSE8N9|6WlQti~Or13)E+e)8X0VNlM5M0*;;xlR|f-7_f%!)HJD?v91O_xC8 zLn`l#v5Z|}48z)^r&!nTR-U^R@0;5U11a@Ct$cec!a51q0bS6T_0@HoqloLoD7uaS?x6BJN}B-y%-efHDvtR*AdK~w z=b>(1r6J|`W~4MI4atpV=t60(vbhdPinJ?#{8|t?F&3S_hvE0swVsCw>WOLB2n9(U zl-|EB9ZO_C42l;@-0V3srC?puG~m(!C!u(Bf$H^{WCSt`_5+d>pfjwFhPjhLDFsUp z6x|2_gHRbjKwkipP?>-td8|}2e-FqB#l1k??(Vn<0CE;_Z3plmDr*VY1mICrC_v0F zY5E>h7XI#ZJ>`_7&ovB_=E8y~UEBzWvr#>8AIQ3m+g;}GG@fwGO*o5XFjh_kvf&Vz zqTo?Fn6w`4B6XG{WYSllya=VVC(wNi;1DVY$%+(}Uxx&wl-y3w=>WOs&_o*u!xT*) zWsF-Ielb#k+tzXji%_1uo#6L2qRHUY)Kl*1rF?rkvWRkmPAhg!nRLhD$^@fDx9dsKLn(gZ*xAx? z*+HWlPosKLj?M)~&@aeUm*trDsAtDdlCH>p;`&&!8ljkEh`jD41(RYUUF90*%djRE z%WRc=5lCT8m7LXNO_khto(F<1i1x+{WU)66YNOciX1RU^zeRVTrBSsljM^Z_-UUa{ zZ5XAL#0+%MiY286> zOLm^baGpRB^B_zfK;F9x_&iG3Q42(&g+*7d8Je>aUG@Yjj@%d_$4ylH|Hx)36B9*~^cFH6} zUe}z$r039=TsbKx5r$B`*^r|ek7|f329x#y4JAt-fz=^<4@Way7AQ}{i0vrqRMO|W z`*{|8IkNYA#79%(iraDm)zq#$^-sKk=31`u(LZ9YHT+ZPDufreYl38{ z8g>`RzW1l2mjgl3^~A?Mn713nMpWN1z|d{6&rp140Jx6IWdarf@JF&Tp!hxj;67Bk z5}*K>kIFOx_5#?6%HssM4gxxf+EIc&0Pr^|zoUqC``0GRHbD1U*)TK}Mp1;c!rnIl zMMOvuDjf)*2pNgWP!uWe48(0myN^>L`wIY7Ku<>*as{63+W|bA6PVRyqj3OwJBm&Z z;AK=^AmA?e-bLjwig^w-!0{>;I$D_*e<~vju--t4fO|uuGwDqz-7d!kq`_%aZw|O) z8c)k5p8us|mW~vAaz~*63;gG3^@MDh4GALlK7s)sl0_7I7f?A*7Fjj^dtsaZWJwVe zIcv~@*7qeC2e&~KH?Q$dj3xPtg*;blMuBrBjW1*@Dwje>hhaxsE$a3bs>YDiP?f^6 zB|}bU6-|+p$3JF_LW%#xSfR+#_XB-@R^Sd61p!R@M`h?xd_tR;aCE*gr&Q3zrCz4>f?snciul z4JlT=a-D}%C|M1cH8Q0Z6Msn0v_(CjlOztpcjWH_?@gB?Yp~T65|oNR6L_?Ng%pt% z%W%ymp>nDQkjf)kgG{$dvwN^f9Er*lqMkIcP?y+xiX9;BgT!XbPYR}8lyL#W=I?jx zId8CefW_wT25a7m-eBrh^cp;5k|T&mY^c=j=p#?6y^)NR_>-TvVaa3;L^K`4)sw{J zt-W}Gk)?#t-u5yJC*CcPw;n|Z8_uhZEJ!3@J%7xoPMKGYthm+iEY02^DYzHv$quwt z*i3Db^}z;$4z~3)k2SFrT!8U16T6QcZQo7JN{`o(yPnaSGHExW;tghh zA{$Y64U`*JBx@Ai1pt4da+iS900Mll9YN8Z0N_9+9K}ZMeeVL34X6!@`G8wCk_Co9 z$8*fgPfYtx#hRfK-N62kC0&G88`ZT5v&UubuJMF(UkmdeKq2gEYIX*!A29E{99Th% zZ6Wk^L=p3)A1ZywfLe|J-ywWpv#OjXFaOSr3A7kuY*+uK{pP>4i`kl7;x^g?`{;wr z_Y1f7;ZQczt$ijc(@A@d#*f)L+QQ-ulvicG*1{58bSWE#!Jue;ij_+iuBj7I{+8%Ob^y2xOo~-T!?89 zAO)Z1>pWOE>&l<^V4ZxA_=Cd44P@QM`lX#W@IO6RA{)SCJXs8dS65G#8)L;bI&RLS z>C*iyVkl625Kt=*q*~2)xzY$5_2J@0UhBy(~J4LC`{&SC??)+FJj)mpqU7h z?NGK2MTAKmDzA|CQBx@-W&7W8Q}DH{Hh6qjHLjIjiv_YQnr(te7rq5oqe+g&CgCQqPfYsyFN2 zsPVK={h@|pQUX}hm~ReTDO8_>rn7F<*HO7jswtl7fa*iuEJCRMNgF{XwTF!9ENKB` z*r?vD`nJZ?LUmeORTPuTz&ee2pK`0d15LlXReK-vK}J88 zTjEx%>`>;<~;$;M6c;h7(Wy-`t&3+o>X6IR(;pXq6~Bc@(WQJt0X(2;%@07~XyxdvVYg92!x3ysXqdni~!|d&EL5FXF zTd-vKR^y?2qODcDHkI>ik|9P53A&RxmH*(w^3)yuuNt0=;5^;NLJTy)FY;0w>(-r& zmpZt0U_N0xW*Mgqu}CfVYk){C7d1fGd`kmJau@zJB>RgzlBJC_soB|s00iCp5=OYDo<&AzU(bcvH7YKCI z>Bk(pdybk$F)D$-~hX~tCp9jvK_rsDX?A{QdOXh%5?0>+?-9pwyE zrlF`eIc-{d_f1aM95fb}1er~e*IFj*{CieUfx({Zm+SlydnS|+~Jh^W;IE8 z0<9V?k3fKk{RL1zpX{LxaoV}hk%a`>>?AV?l*n284U+VXTq zFWO`O(vJHDvR2H_I|MR2YsUu!ve?+(Fx{dn+@Uh1)8p4F@$j#mKXx4`BewCafh>k? z;O_*op#GnB#^oI?OYC#8EL{Z4cPQa{Sp8x*O_#WHd&V*i%(_4jZh+$|ie%WJu~2_@ zf-L;Nw}r82-ZO}K3?=`Vk84b8;Q`7Mi}6`5&(l+)Kpf=ITO$3ihNsiI_oZ0&bf`7D z?I>)r!v)TBmO$|80{NaG7U&`cS%CjF0Ole8w??zJR)*8Pg@i8d-o-)cB*P|>O1Bo0 zpgRFY+*-&+r40deYoQ304k%LENewX@(I%H?k+9 zG9E<=r+aaqHtEiW?m2OB7+o7xwX|Ko)cm!^(lUx^e?cNBjQzU0&F@Y(=4V@~AVb7) zCDhC&y%fg}pt2Ih9I5dmj4gKLaC*w|G*7d$#2k?#iZuG;z<&l&G*C-upeP6RVY!lF zn#Ms7XzrEp8asp;$}cheMcMH15XFqp`@f4|V0$ zp~$tZLYch-g~=YRP4fnjhJp^E>-m#)HiTlJ z=^)k-|HB%qQH8cv8X$T$R0Bxc9@3UvBw5C`WS`QKy+#8_&3A4!lHu(ZQc|62=Z}Ul zd$PzdMtYhduIMO7h&1Dm7l=?VK4V0$3cT4iZU|?wI3%`IU1d zmK#WqQ>BD9z{F+30sW2=y1+ zh(|6ZS=4#$8dYl}W^TNjb+m(1EVU?t{&v5Vu`nZ#(M1GypDC<`b|0zze86LBL7? zmr(f{C7iB7+h?fuGU*po3cS~mFyacraM3$|qJ0i3tqCB><*3|80O_0?9H<@xSVSH^=)v`UV{ zyHLz)GR$fRFg_nTSe$Dks5xl47wvo>0`L~t_M%kK)ZWk}UCj0(ixB-I$n;oTh`x&o z#j1I?#;aZlx;Opw^oDMbBYH^SyG;Vs8lN7`yj-5-MKW4OYLQTcWM5Q#P|WpOqxZl@ zNw%HXCAdZ2Z4&9OVeX2f#4_J4I1F+^+=A0lNhQI)nSzg=+Va1mSxPWPD>UG~LVtv< zT_s~R>=?s>(<#-^)}wVED(NVr_1k0*TyyxS_iUsyxcV?i%>1(%+ZMh&hIM1*{KFX5 znH6zsEDK`&d3-F(2rCQ0FdNNgdXB1JBqJ?Yz1EN=`lEbiEIY?Cc+WVdzTfK|Yr)7! zLHdDwOB{=0YxwJNEQ~GTpU1JZ40_$So7V(t8~Q0eo`o=ah=R9$&2}5ox>GkDs1UPZ zJ&@)E-X@;K;T1eSD4wO@PQ;3MHj^#nzsEDYc+JBTFvrgEvIHn-$EPN+BK8)4DS-vE zJsfXl=d)W6C$bRsA`eXje+n-mXdE9(ryhJRkS=;B)Gysq4sB(6dMDH`LjdJ^dMDH` zQvieX^iHT>u6em0ai;%>+O!WO+b2pMJ&<7o=@p|4mSaARrAbe3sIuG;A9z*LKZ(I* zZ9M`2nDt-T0ptn5rvDTQ;#j_b?D~bo*G{N&=;`H7)?NT{`a!&75*zCp*rgNX1=w}P zSmaW#g#w@zX;2kpn)E~qj5Qtt&0kOY{r`kO+5aN=^!_WsQ|LbxpVgVyv6Yut=6*WK znHyjP7&?K?>~9ByE%Q4xmmI14=>#~H-l3u(ccjuwQaB1z52}@FX>c0POJ;dtX^6wX zzB*DL7>d;B6F;PbOoVxsN&j6R!r|lh2j0Emw_drQHT^nqX3z4`kLDW=>NDizq>rZM|ew{a<56>F-wd-bHj zun}4f&w^_n*eg*Y_X3bNc8fTOvr*Fg5Mt)~OlEVvpvj_O+=ZsJ!*NRTDGg1z@{o$A z+j_EF^(NrYHsehWO>BJud1NEhE;D3kGCHV^fk)^`3q|BILjrlE#*Qhz9K4ZhtY zhc>CcsHvW5Xho{8LJ+OrF8NQ5bp%rIvm_S|D3l5UHRCCzekEw zk`fGlM2biH2}3dM)TC5Gw&eSD9$r?_FwM10km$%WSe`(18?Jz>%!StXp>&`&Up2LH z*HYCc(o}E3J`$Y6N#73|Cw0tpy(MtFCD7OcFq$T*!l(_UzIg;D${%Pv_kgAs*C`0H z$vfPC^!3q?y*0$qVue6Qi#p@HeT22fy`q{*sK0hn6?z8bL250=P%G>FXd z2;duYSXyKw?(Jgewm<5&>u?LE0sPTimL6$VZMVCJSN5Hva+9DP#FJxpHW4SbAYKpP z8F?(#WmF~9yS11OxtWk0<&QOhycry*Ia1n~< zX)oe0pq=4cfcK!pw;GRK0v(Ihlh`C!=;q{?dXWlmf$L`!`&@|Xi0p^F^p!r4vLvk^ zCKLy~nJO~ld3^$9#x_7^pk&AAV;?eJl`Kn-fbCnouOS=QB9J?w7+3LM@|k}gy=8?X znp$jVYT>RyrZ_I@Eu!^cv>ZsSpP|+%u2-?pSe^;N%T9WcOy`0&1I2zADm_7j(O2~% znQjC6ArxU-*aTHBlRg3C&zf!ZAk()ajBy&d3Ijo*Krij6hWe77``mUWHdSGQIIid| zBcWCp+W=9QNZdzcY+!rmqZ*Ui+jLEdEV*m$-u|lfmc9r64+$vYe(hOePtrXO_OcK4 zmXDw%m>enzlit&Ufl2O~TiC~XLmI3T7TF;%2*vmnU(ueW=8(W2wU*5_aEqf}Z&>DT znSoa6)bgKk{KxhzN_f$%`2p9&TFu?`Gri$+cT>9Z=}Jwbg&TOU0_N!=%_U6^xQtHS z)*FP46<{5K(sQ&%ZW;s_70wW#o%J>fZ`)|q%o?nvbg->UK(r$Mi}eA-uoP0}p`_E> z-RnTJ=w@mg0atw4Shdwm^(37{sJ9+BPgpHRI!M8OOb+e*~i|f5#mH+ZKxBM+`-U4965=awQEP>uq6ix8aPMU2wdhb1DYNJ=Qwrp!_ z-k}J$KS%RPMa&T%?Z8BumW7)K=(h(-WEBA2#tkmtd3+~0oQtEt@i;P3KB#R`3>yLT zK*dSGN&tgVp_gBbH#Kc^dx%y8+A{W$&4rQ_y_tJ=X3?(gkUj;h6HvTg0I&)b`r=*b zYXBU5R5Q^7ar_G1-UmQ<0vwN_7&~elEjQ3I(~xwv=;;u?qpL+@poXWbMfelAXoxk9 z($L~!ag2DjVAdJyj9}W@o}cQ>f(t4UgJxYaU0;lZF*ztALH10f1X;a9SSMNNL7BfU z;5@*)F!ch8rIbe(Gye`R!P-cb)BvsDqgZM&D5*Me!!a=ic@D)AjU_5q#jOThO}H>V z3nEw^Us=pjf-JFc_n#qH3UuLR(68HAy}y_t;S?KWnPF6X`kG*YGho zegNzDC=urXbi0olRcVdTA#nr~UnJ3Cv8&^y|AWQ*GLXMQ%rB&Q9{;d}MQ2c~$#D>Y zB4W)S6<-1<)?!d`pcq$c>TEo`3v(ELM#!DuMO|1_!kIQ03V4Kud=AFD*GSbMnsmm{ zBo(OVtGck*tgcYpbfYj0K%!*qpz+iFM947ClRO%9hyZ&VIO}>G|GEncjiO84-*nM* zhk4uzw6pzzkh!f3rCZCAZvqeO${g{YWHsGxnu*F(0_XAPe1 zP~h#rZkUkdZLfIDeH7vC2voudAaAFl(h9{WRR|H{#xKomdRaxC*#aN40zUT{s`ALv z`~G z$^$6A_hsY8!*I72cMZcNj<=a%JGcyk!L=2Yhf$2rYwUER6@!U)MXJ;_M~aDpD|xn) z`KFwpW~~9fjmn!Sk}*>24Bd1_1F{h4n9h8rlLh1yC7{71IOtf>pI{VSvu%{qXwRAi z7lfmTrEA<-ZseN-f4{-7A{AkJr?G7ZJs3d#yp7NbOj0EkAzEv3wnLu{hqvmot6 zaXe)N4>j;6#y5c4hl0a6R?|Iz|6IzF`)4EVliy2aao6%TxUQjyUX;phsTUbAD*?rm z9-x)VedsY6b-sdd^c=01+?sGt1AdfnTlmyotP@+rclToHM!IYmpThf;vA|&C2ZPm~ z4}evaWUxKO7X`W3eazuXfGLL1TwL;`;LTDLgB8FGR3;H11K5blIs$H^{d1`7B;Y3i zhf#T(fC~V=K;?53?*z2@36&pEjPaW8l|ZVxDZ$a}&i6R{CBabHBO27*Uw}s#A z%{s}~(s*VW3pJ3(zu;wMEXZYy(G;|FcuXcdFnyrf4fOEp>l_N=9m@gK{WpUaf58KL@g7<~F06F!v& zs78c0<$>$1RiFOG#J!uj&@l|7Xj}?5!hhUEra2ge}JK3$F4yhso^PKhx5n!u#i})wu4Bd%oaDk_Gyfigjew|`mk=| z7TBk))qH%l4+|Y>#5eeG=da=s)e_05*PKEk|0Pb%xn#J=xq(s?bvpbob{D6Z=_Rzc zQR>8TrO7Qb_@2IaPoa{Z=*!xNP)!n+1ctBFybqA8{)LZd*Y#nGH3$w_ET#~yfWfxy%B z#5ieq@+4RJTMW(=jY`)GFB3ITy>ORzYXlm#dzt)DIo^p}Sk7!YraCtTE1-O&h4ch0 z%l{fH<8N+O{!Te7ak;=CM$J!(nt^)kR|w{p7%k_tGQPyb>J?Bq57nYgP;8?IDEpZo zJwUM~VTj*i;$p%^KcsVzS^Hy%ZDUYBrq-p{%~({|V>M7Eu2&_BrVlY!bK6ZSf09tZ zS&&dbf$=ztr0~a6k0lVhiusa?_9PBgtztP;l|1O(oY;rK;9{dSnv129#Q|e0fy@?T z6nhQbo5EIV#!P9?#3~UtdhU3sl6eqbeKBVP@45su3C6nWGmv%c zO709&=h@$g+&@ry?kiQ*<15 z{tyfU_~C&pE~3v4JNA-j-1NJW$C?cIgv*22$c~rctW)B#JZ0=;2tC!FWctt^gPn5H z>g*$4YdJNVR$w3TR?EljM12c?Vi1e*qz6OCg^ZQ_q* z=I4><9RN2G>H|UzB-AZ{^cM_y^y*EOFj(Fw<I+!1 zN}zTFe1=e`c-JBL-r9|}eDV+$VW2&sFJFtQi>k>`M~gO+o7|(9>JY*gwZIQD*AGN?g6`&E8B4>Z@Ch&rxEF(#0hgDO( z*>7N>@R-_`!UHcnV$hutRHqxvKC}6zp?FHrnd*Lt*KIg!Tt(lD24oL%96I@s2U1=#8OU?}K|vfrRgqW1)B zr6Ksdq;XdWUXb8F?@$nQ$Wo2qmE^G+3$4b>Ko+YpZrHjse60l$vyDfNz`pbi-hKoN zbDdGySRw5faI^Su6Dwx+e`quNsj8`G91Gu|cj zQwh3_PW-gsL(LQ+9a{#eFTKU$er05;)_Jy-+$dgM>4@&FB`?8y&Hh^NDA}Ed~P?5FCE3~DSaRtNo*8Q z;qOA)Pzgu)Mc6_$efTxticm9$KmFR_QS2HEzTv>5r5w8nEligY7XiJIt5Y7~N5`F7^CLTHomuPc&ICkwfxOg;k@K7|4(ms8L^ zpCSPalI_%{v+rHRd4;?HHu-e%ByAJrw@5%&p=YMtjoNf0AYH1IKPJd2BveV>WC{Hh zO(15POKMr!o^IhZcErFYmKKhwl5BB*db^!fIV-3zoymT`M$ zB((XDWyJd_@qUPk?r(^fJimrH{%?{P-gP`nv(qc>)@#CuC=8B{oQaFoNL~vndx*b2 z9`9do;9rhs?ZS8XgV)T6md_Kc;`WVG$1wTH470VZ*xYtA$7FZokUl{f$vxi}8GXN#(5neEnB_+ML5J((< z1t2$np#iU^Dj93}+KDW*ZK%c&CfeXO2NJ7~7ks*u`4Zn!NM4N6IU@vH zRgIa2@^2=xXqLMQ zKO|}=FESQQF}xcccpAlij4zvvCl6U5$t;qh=pN8_i1fH0;j#%A&=%LwD0Yj3a2?4H zd4RJCx0io1ndJpK;36~gN(bo$px2=|0(j&U*17}z+k`K(jm5Z^W5MZ*;)sJJKjuN- z*1>(!;Xb<%TXrTU=Lpb;p#&d*hnMp;Q&@ZU5kEGCb!6wcVJhC@4&kX&S$ny|Tpl`| zh4B?rSq>Y_-yqy{4d*uv><{ri(^!`LYBOH~KRylDbKmf9ra`LAL#DGT+yH%OI&-po z{?&9g+oOISx`2b#^MNy1M(kM)-W5vjQy<~Brf(!<%vTxZ4F3EKmK4-UgIh9M`tgPt zEFyG5rOJCBe6UXp6K*T-8ZKFu@~D}t)tDbNB^J=VdTN3M&|d@SS-9j~j}JQrGou|U z_(y;)^caWz9zdhSazU_(QT{zsa|C<3}ON?2GEh_1rp(1$DYITkVYkYbEnku)kTRp=PNR#9Srf z$G;V#;>{GYZWSzEisFAMijSGa;-aHr+cA-Vld-}lqIk`1A=kK-@0!JOGYY`=YN1BZ zRzyhO2I;=5i55lCh_9cR_X2t)gIj0gHWhXAm1MG>z?ZpZ(~xJ5FEb9btn)9S$0 z#RaVsNHgMKTL)l1ioWbfqQ10+v6(2L)Q6`1lNWQ zyl@VSi&zI)YpXS_KB5C?wY3$ppFgJi9OhsCI{dMErpAI@nmE|ja-LLyni}`yXLYOHkPk7kQP^^oE#vR!NkTwtJtKF3Svv3T|}pFNKy%fHO$ zkI%#MV&SLev0`K?zxjCh+JU#5kFPgv=S$|ZWcCR`3H+n^tZmfPDphkiEIwdISCMMw z;Ohf9 zsWPrb=kwSFctvA7AGiQ|ZG71RRu%aiy7UA}@_5J_hSJxtO&32$O8y?mvpjeqOZ2rZ zf(#rn7%Mugy!S%(Grj`VaS;}?lYI0dEcKW9hD9tSgLWQ9>^wNbrdZ6j0Q!Q!cA4tC z3Hbnth>eC_>`|kGf4PYDM4F9Xj9h%0k6H{-g?#;DRy^!Jh+6JL?FM(k+K=KrZz(m# zg|`mIp-(z>-yd{X!|UKG%A&!~w_wzmBolq-V}@Z6=!bav64t3NX_zB4oPzWZNW*Ph zF3>?5=AgJWf|pz)Y3U@=dW#w6TC*CfAX{GBB%JU<(x-Ztu}r8}x+YL&jN z+DEO9L3LQrS0qO=(bq5Xgjw}GU@05jc_^su1ml!Kyz+qJH65t-!QG*x8sI{d5O2-W z$)q{)M~qEp4Z}L~150r;vyA_=lsVXZ?&)ITfuu82)0w;(jaa0yf)}`0XX{?kBizLR zw$&lN*2SXiH?=|6rWvw_HzuV2Z2qo`#fFG$0_de-7GJHwK$tTm?+D)LVv%epkF3T< z)yCUav)IsXnkZ=__EBTJ!`7q2q2#%4yt0}t_APWl5)NO?M>_D^JImOSq2FQ_$hxgG zNp-i8_4K-%xO6h;uAy$!iT~n={SmQ+5s-qk|Kc#we{q<@!+Qf8XQO;+dd=JqM%rh? zL9ZL4QI+gFc;x-8r~3aJI`RJ-x*;H&b#2hvOZPGq`0Cc79;D0T58ltTKj6?+!j@q= z@dq3_@dq3_`lZ1Mx>HazRVV&{Lnr=#Lnr=#L-!hQxF22d<&&4=?*8&P?3R4_Ys*=N zu`}u!qxkjZc%^1L4_U#+vNL??3YLpmwSNUmq%U!uU%^5#lz*&XU1NrT|Gb56ffTO5 z2M#z#9Bk`@u*y)tN3CQ%qt9TFzin5Ksj;^+<{L`VIUn3R(;Bf7{?STS!TRv@RjjS& z7I1$qq&oP_Rrs!D0e@f>%S-$kN%Tz8F-TF0v5iA9Oojnx@=ieIUVyt%{4@EbRroC? zdaL4X!xT^sEmut%p`H*j^vD;cb$o#3u`l@i2e1bYSiz^PMk;*e0ah5Z3vG9bwiW-= z_MF<*e>K|9=cTJz1lz|auV%wM568kV(W;(*vKp%l-8)obb75~{333aHVH>}Z!EESR1yM{%CJ2WkHx6qiV0p9?y4O-3@)xxZ&YFMG?OR;#NODNdGf39IciKJk5 zG%4s0;k`%!y?!z~g}S`};9NpI%Tw0i3!fMGxHV8I@rURX#ot-OBEoX+SDhj>7ia)! z)=%Si*03J=)f%ps9&0b6iY`pF-?MW_Mx|x*M_V+veaIKq!Y3JV2t*IE@B;s?7Cxa> zZ-RsD`vkUqgc4rBJ=e12_T!hSrZ9I!n|9LVHQ1mSr)XrdREju(t$`cErtleSS&VJA z#zE#w`roSglWSRYl!u0;4p`8NIzV4Wz)Ro`NngspTg!UbN4H>_qA_Jkwx@XUI_v=E z@a^kxYm|O-bEq0o)vBq;8{%MFGjL1AK*KRqjCXPu+>J!>f4^GgI0l=bS-k%sS^kX0 z!(}1qrj}!lsBDPM*;Y+bX*{{D8>F;H3IBl?Jjmh;4Vpj$xpnc-{L&WwW_D8a!@6p#*f`Jy4A1%_NY(OSLmYH_y zs}xI1i!&wz+ZlESv3>1KW)>60%;ZioBgkefMpH)OTo7s5=w^%#WNv^X?sM*s2V?h- z_r2%){haUle9yc0+;e|?@2%N_f=H1bLqrm%AJI{De3%yHwn5(*c^_R6-LJkG#+Wmu z=8oX3{m=H|5lRI^)JOdo;Br6%s<=R%Rfb&6$Y5%J%s*4m-QI7U=zb>rD@%n+E zXYd-f)z#$J)NN^0b4jn$;u=+(!DN4}kFXLIxs|aN$CHm)SM9m>6>WvIAU|S>vUz3e zi*Z_thT3mumeptp9Aegov5M;l5wa}AXC*96X~P}pxef^;jg|%e*DamJbic^I5xcRP zd7XpGx^J+(W>tn(Jxh-E;jGpHwnQ{^lPWw!5xZcVeqBZH*hk)@4*D|68m}vpYRl91S;V9ZRkln(?f=c8n~?&C_>=Si>vrNREZfiYCAN- z6oWk-K4j2ET=Nih9^%{d%?KJ)DFNl_gw^06W$1~qLyTCL&&!{^)EX0oj|-eMgXJEXp;@2kJcofe z;1T^i-P)mB&UzS~rjmze{*TtUgD3H6)-r}#BqlsRXVc|gS@&*8TrXF92j=dB$AAjrzxYheY|4SuyeJOuy9_>??55loSUyg=-NoFlK5GCRm;6$E;bK28u@1}-+-VQLNE2lNKb;bCwB0KJV$_ zr|U+&mm*WdU^tvLpy6d|WfT8Sy`O9$@tD9Gx%3F9Hu*816%b#D)28#+2D14gZugQs z+Qfem$cqhti`;KqHO%pty>tbi4O6*_ckl)DkiEKtUy-+z*qSaenF+rf#-_%Zyc~YM zz#K2Jw{GJ5i~4`%@s>Ztgbg#T`-T$g;Q}SL{>vyDN z!z5p&-w-oC$kr{AbG9(!T(+Dqrt1;bSV1- zr@;(AlUK5+j26q{`OMhvZETWdNDiB)@Y?t5s<13+W5)G8u~OF6F~i^aBny|xc%0?< zpSnD2U+dx{WDozCH%q*?S7e;VSj>U^4iAGSA9iVb*|fu3}Gh`nXHjWjFjgNMT^)(7yo+S$jS$DBX78y?D4 zVmFjs>Y!Vigov?j*Mon?wi-i|X1iGx_5-|Gb@%fceqopTWk0V*-IFN76Ad8JoAdu; zm|M{?rC#3)&YSJYy*v}8ZnfheuL-vAb-lFP69;*Y5SOV diff --git a/tests/bench_uasync_timeouts b/tests/bench_uasync_timeouts index 56796a414fc76e3b123bdd27bf0690ff1741d17c..6dc7e019bc2858ca285da2d49b2c2d2ba45eebd9 100755 GIT binary patch delta 37789 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%0A*LA2 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 delta 37693 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 diff --git a/tools/bping/bping.c b/tools/bping/bping.c index 32de0d75..c82a2ad9 100644 --- a/tools/bping/bping.c +++ b/tools/bping/bping.c @@ -1,103 +1,234 @@ #include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include #include +#include + +#define MAX_DATA_SIZE 65500 +#define MAX_PINGS_PER_BURST 10000 +#define RECV_TIMEOUT_SEC 5 -static char* host = NULL; -static int size = 56; +static char *host = NULL; +static int data_size = 56; static int pings_per_burst = 10; static int bursts = 0; // 0 = бесконечно -static double interval = 1.0; +static double interval_sec = 1.0; + +unsigned short in_cksum(unsigned short *addr, int len) { + int nleft = len; + unsigned short *w = addr; + unsigned int sum = 0; + unsigned short answer = 0; + + while (nleft > 1) { + sum += *w++; + nleft -= 2; + } + if (nleft == 1) { + *(unsigned char *)(&answer) = *(unsigned char *)w; + sum += answer; + } + sum = (sum >> 16) + (sum & 0xffff); + sum += (sum >> 16); + answer = ~sum; + return answer; +} + +void send_one_ping(int sock, const struct sockaddr_in *to, int datalen, uint16_t id, uint16_t seq) { + char packet[sizeof(struct icmphdr) + MAX_DATA_SIZE]; + struct icmphdr *icmp = (struct icmphdr *)packet; + + icmp->type = ICMP_ECHO; + icmp->code = 0; + icmp->un.echo.id = htons(id); + icmp->un.echo.sequence = htons(seq); + memset(packet + sizeof(struct icmphdr), 0x61, datalen); // 'a' как в ping + + icmp->checksum = 0; + icmp->checksum = in_cksum((unsigned short *)packet, sizeof(struct icmphdr) + datalen); + + sendto(sock, packet, sizeof(struct icmphdr) + datalen, 0, + (struct sockaddr *)to, sizeof(*to)); +} void usage() { - printf("Использование: burstping [-s размер] [-p посылок] [-b пачек] [-i интервал] host\n\n"); - printf(" -s размер Размер данных в ICMP-пакете (по умолчанию 56)\n"); - printf(" -p посылок Количество пингов в одной пачке (по умолчанию 10)\n"); - printf(" -b пачек Количество пачек (0 = бесконечно, по умолчанию 0)\n"); - printf(" -i интервал Интервал между пачками в секундах (можно 0.3, 0.05 и т.д., по умолчанию 1.0)\n\n"); + printf("Использование: bping [-s размер] [-p посылок] [-b пачек] [-i интервал] host\n\n"); + printf(" -s размер данные в байтах (по умолчанию 56, макс ~65k)\n"); + printf(" -p посылок пингов в одной пачке (по умолчанию 10, макс 10000)\n"); + printf(" -b пачек количество пачек (0 = ∞, по умолчанию 0)\n"); + printf(" -i интервал между пачками в секундах (0.001, 0.05 и т.д., по умолчанию 1.0)\n\n"); + printf("Внимание: требует cap_net_raw или root!\n"); printf("Примеры:\n"); - printf(" burstping 8.8.8.8\n"); - printf(" burstping -s 1472 -p 100 -i 0.2 1.1.1.1\n"); - printf(" burstping -p 50 -b 30 -i 1 google.com\n"); - printf(" burstping -p 200 -i 0.05 -b 0 10.0.0.1 # бесконечный burst\n"); + printf(" sudo bping 8.8.8.8\n"); + printf(" bping -s 1472 -p 200 -i 0.05 1.1.1.1\n"); + printf(" bping -p 500 -b 0 -i 0.01 192.168.1.1\n"); exit(1); } void sigint_handler(int sig) { - printf("\n\n⛔ burstping остановлен по Ctrl+C\n"); + printf("\n\n⛔ bping остановлен\n"); exit(0); } -int main(int argc, char** argv) { +int main(int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "s:p:b:i:h")) != -1) { switch (opt) { - case 's': size = atoi(optarg); break; + case 's': data_size = atoi(optarg); break; case 'p': pings_per_burst = atoi(optarg); break; case 'b': bursts = atoi(optarg); break; - case 'i': interval = strtod(optarg, NULL); break; + case 'i': interval_sec = strtod(optarg, NULL); break; case 'h': case '?': usage(); } } - if (optind >= argc) usage(); host = argv[optind]; - if (size < 0 || pings_per_burst < 1) usage(); + if (data_size < 0 || data_size > MAX_DATA_SIZE || pings_per_burst < 1 || pings_per_burst > MAX_PINGS_PER_BURST) { + usage(); + } signal(SIGINT, sigint_handler); - printf("🚀 burstping → %s\n", host); - printf("Пакет: %d байт | Посылок в пачке: %d | Пачек: %s | Интервал: %.3f сек\n\n", - size, pings_per_burst, (bursts == 0 ? "∞" : "ограничено"), interval); + // Создаём raw сокет + int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); + if (sock < 0) { + if (errno == EPERM) + fprintf(stderr, "Ошибка: нужен root или cap_net_raw+ep\n"); + else + perror("socket"); + exit(1); + } + + // Разрешаем hostname + struct sockaddr_in dest; + memset(&dest, 0, sizeof(dest)); + dest.sin_family = AF_INET; + + if (inet_pton(AF_INET, host, &dest.sin_addr) <= 0) { + struct hostent *he = gethostbyname(host); + if (!he) { + fprintf(stderr, "Не могу разрешить %s\n", host); + close(sock); + exit(1); + } + memcpy(&dest.sin_addr, he->h_addr, he->h_length); + } + + uint16_t ident = getpid() & 0xFFFF; + uint16_t global_seq = 0; + + printf("🚀 bping → %s (raw ICMP)\n", host); + printf("Данные: %d байт | В пачке: %d | Пачек: %s | Интервал: %.3f сек\n\n", + data_size, pings_per_burst, (bursts == 0 ? "∞" : "ограничено"), interval_sec); + + // Выделяем память один раз + struct timeval *send_times = malloc(pings_per_burst * sizeof(struct timeval)); + uint16_t *seq_list = malloc(pings_per_burst * sizeof(uint16_t)); + if (!send_times || !seq_list) { + fprintf(stderr, "malloc error\n"); + close(sock); + exit(1); + } int burst_num = 0; while (1) { burst_num++; printf("=== Пачка #%d ===\n", burst_num); - // Запускаем пачку параллельно - int launched = 0; + // === Отправляем пачку максимально быстро === + int sent = 0; for (int i = 0; i < pings_per_burst; i++) { - pid_t pid = fork(); - if (pid == 0) { - // Дочерний процесс - char sz[16], cnt[4]; - snprintf(sz, sizeof(sz), "%d", size); - snprintf(cnt, sizeof(cnt), "1"); - execlp("ping", "ping", "-c", cnt, "-s", sz, "-W", "2", "-n", host, (char*)NULL); - perror("execlp ping"); - exit(1); - } else if (pid > 0) { - launched++; - } else { - perror("fork"); - } + uint16_t seq = ++global_seq; + seq_list[i] = seq; + gettimeofday(&send_times[i], NULL); + send_one_ping(sock, &dest, data_size, ident, seq); + sent++; } - // Ждём завершения всех пингов этой пачки - for (int i = 0; i < launched; i++) { - wait(NULL); - } + // === Собираем ответы этой пачки === + int received = 0; + time_t collect_start = time(NULL); + char recv_buf[2048]; + + while (received < sent && (time(NULL) - collect_start < RECV_TIMEOUT_SEC)) { + fd_set fds; + FD_ZERO(&fds); + FD_SET(sock, &fds); + + struct timeval tv = {1, 0}; // 1 секунда на select + int ret = select(sock + 1, &fds, NULL, NULL, &tv); - if (bursts > 0 && burst_num >= bursts) { - break; + if (ret > 0 && FD_ISSET(sock, &fds)) { + struct sockaddr_in from; + socklen_t from_len = sizeof(from); + int len = recvfrom(sock, recv_buf, sizeof(recv_buf), 0, + (struct sockaddr *)&from, &from_len); + + if (len > 28) { // минимум IP + ICMP + struct iphdr *ip = (struct iphdr *)recv_buf; + int ip_hlen = ip->ihl * 4; + if (len < ip_hlen + sizeof(struct icmphdr)) continue; + + struct icmphdr *icmp = (struct icmphdr *)(recv_buf + ip_hlen); + if (icmp->type == ICMP_ECHOREPLY) { + uint16_t recv_id = ntohs(icmp->un.echo.id); + uint16_t recv_seq = ntohs(icmp->un.echo.sequence); + + if (recv_id == ident) { + // ищем в текущей пачке + for (int j = 0; j < sent; j++) { + if (seq_list[j] == recv_seq) { + struct timeval now; + gettimeofday(&now, NULL); + double rtt = (now.tv_sec - send_times[j].tv_sec) * 1000.0 + + (now.tv_usec - send_times[j].tv_usec) / 1000.0; + + char from_ip[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &from.sin_addr, from_ip, sizeof(from_ip)); + + printf("%d bytes from %s: icmp_seq=%d ttl=%d time=%.1f ms\n", + len - ip_hlen, from_ip, recv_seq, ip->ttl, rtt); + + received++; + seq_list[j] = 0; // пометили как обработано + break; + } + } + } + } + } + } } - // Интервал между пачками - if (interval > 0.0) { + double loss = sent ? 100.0 * (sent - received) / sent : 0; + printf("--- %d transmitted, %d received, %.0f%% loss ---\n\n", sent, received, loss); + + if (bursts > 0 && burst_num >= bursts) break; + + // интервал между пачками + if (interval_sec > 0) { struct timespec ts; - ts.tv_sec = (time_t)interval; - ts.tv_nsec = (long)((interval - ts.tv_sec) * 1e9); + ts.tv_sec = (time_t)interval_sec; + ts.tv_nsec = (long)((interval_sec - ts.tv_sec) * 1e9); nanosleep(&ts, NULL); } } - printf("✅ burstping завершён.\n"); + free(send_times); + free(seq_list); + close(sock); + printf("✅ bping завершён.\n"); return 0; }