From 590bce1c163b5ec073d72f2465cf5c6fc8eb2a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Fri, 26 Apr 2024 15:50:19 +0800 Subject: [PATCH] Add ballista-mvp part5 blog --- .../ballista-mvp-executor.drawio | 112 ++++++++++++++++++ .../ballista-mvp-executor.drawio.png | Bin 0 -> 62376 bytes .../2024-04-26-ballista-mvp-part5/index.md | 53 +++++++++ 3 files changed, 165 insertions(+) create mode 100644 content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio create mode 100644 content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio.png create mode 100644 content/blog/2024-04-26-ballista-mvp-part5/index.md diff --git a/content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio b/content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio new file mode 100644 index 0000000..cb94164 --- /dev/null +++ b/content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio.png b/content/blog/2024-04-26-ballista-mvp-part5/ballista-mvp-executor.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..26c354638827e522b2f2b318d113450dc30dcddc GIT binary patch literal 62376 zcmeFa2UJvBwk`~aS}1A(A|eK=NFqsc6tO6B&N(N^P~;3+Vu54{k`+NvKr#wQP*E}{ z0s@jGh~ywq1pZY(ox{;{yZiO+d;dP~^%xGQ+I#I4X87i}=9(LW6y+t39XWFZ4-fB{ zlq6Ca5AOgB509V@atK_BN6U4CU-(YS5(vDft!F3j@VKR&#WbC5-OVj+%<$+qMRz~Z zaa_J`@8nF!iKOG;5VJ8eaYotOfsf$2t-YzGxuu!u?mdpn99%4yxmY-OR4?<=abDx% z20z$&SUGt4w0GMZS(w@FbtGr+X=!6)M8_e{&3YMhby368&eYz`34D}S1wYs?gUg%< z@Cn@D;oAM^&cnqBu3U3)urbpxGnTP*#y-!<%gV_EE?<<9RF#vZ;}8X(Z7i+Lz%L0i z6Ki|yBc>=LH&#n~(42#dm4lTVToS#GvbP0|#MwE(Sgbsk`T1GdFY|*tzb{gpgO8Pc zXMQS1=0+&XeZyhbZ{}=dvAcGD7cEmKK65^8MLO>P4>OC!(#+s4%l|sWNpa9|iqT!Z2AX33af+H+ z8d;!>Y{3^hBe0yEVd%to>8^=l{{cZ_n~Cw$U1O(1fMsLHu-sFaD3V8>TU!}r?1;4V zus4yE618>tc>vrnw(b%rBZup9_NHbwpbJy?y#?`O2f%h}>alx;ot+;j1AD~+g&SzE z3HE}Dr6+EAJBtC$Tr5q^oc12xebU+9-p1L|;g1(h?CtD;@%^Ep5ekL1nVm)N4PtI@ zv$wpx3l6~Q{?Gz@LFE@QW3OshnmS+KZOg~OyE_-`bxAWzi|e?N*?EACVAp4BgloLF z5~u4%z=U_7|3y=~g2agvWp5Aq+o#C=w{eYZ-9^o8u+qlKac>-8h5zTz{w597Z$9|n z>dp*h<7BHU&&`SAmzB46zGlNB$HKWQ7*``37n~*TNXp6C183AIdlx&?9mHSsqV_iSyWqrW%5BDHibZNC5FxD1_TAy*Fy`dp0e5!Cb1?ed2640eS*?Ft27gP3 zJbzRnC$=qC2m4gW&i*GV#Hsq+JMcb0x_-RU#QM=bBKbS(+}%`SCG#gN z#LV;$TZMmugZv%w;zW)zvoUhEbp7MLvdba43Ka06!1uY=p8fbN(lWMPS)rrGvs3bi4<`2V-qk~d&8OhzupkJc>eC7e_d1L`X#Xa2NCxJ z(|-w1AXm66DO^~@1(*LhL;Ph(975uT{Og+Go)hm2%s=xhWitnRkgq}gYM%dh?Q?i= zVQydi2WjQqW$))#|9<-%_Fs3ZziR70^a`7G`zfw*bM9?0_P~S(r*NES|LddLFGJ!8 zC2q*SE|}~A^FA<i z$GZo*IGz9Nk>cl#*e^r=b&+E4_-!9j{A1Sn|9n1x3kNlOX2^SakD>g}nIVqs{#PUZ zWv!6o*K~lS89+Z{Go$|t`R>objTaZl_64`U2;b%S^;GRY@Ucs5_W%47zRQ7AI?kDS z{x|YCe@tQW{(MUN*9DMYlQ=3SpxVL3=1;cEzvr+2fvSn0&Xr7!%=paz^jwL@gwM>_ z9AwIO9pHbKAG7?NjK-y2_Cp9RAnoVJT(}2uQR@GHg3R%2=HovYvL8Ku-zfdGXJ+3c zZ+j5J$-Va-r`vx$5$5_kBmQ*(U{AV|y|4EO4xbP>$l6{Yo z<9z#nK0CtwcSiin1_c}}?n{o~P~{g;0hv!wgS@{?!U&WXVk^~6KokLp#EHP>M=e1X z_S)VJTT4?@Y$Y!OW#(k*X=J=p)r&2uaKKg`?3BK8Bj~u1;EEBbGzD$2B@S55`p243 zJ9|59FZ+=Scgfz)S!J(WcyEjSKg&xwdH+ZdeoLI~!zJ9NV}E49NgBso{#PRl`=3=` zgP4I08~arMi^~5rYx{TdVm}qd{7K==Kan)wCtTbS#(v@AuKn-S$?)K|A~;rx%ah@B z`>$uEJU=DIe&aK^A^&Lv!clLKhBxxqS7Nc}p}<7`5q0e+^M8WaKTn?%C$az20wU0U zccTBur2h3KKs!DD7w=-=M*ID>m;H0xxr=-EX7|S40|3+jwqalGi1*&2$HSw>lR{oo zb=RLxCc1aBv$Oid)aA>s^X+d=3l?TQ4>&`Ce1Dq!nB9Hfw-}wJaAXMl&V5qFrPr81 zZ>x~!iBmGKTQ zd5z_8uerxobz$cO>CZy_@d&B$@F6021lW(>aK&RJ!(^6yd*AnNox(>#ZvEa0dv#43 zk7St1F6r9tgL@4zP^&+Dht9{~!D}`8_-_7T7$~gc58tVWnDCL9yyuRGewzulLuy3U zAHIv!Xb@na296`dJCofT6DopMJg~QpRH7XHO6{j*U(RS1no1pPqtJ7Xe6iAN-TvIs z#DL}!BV!~(s<-m&i*NFSJ{z77u+s{G`9s+0$q5N|hI)*sIR#rC^sDZ3czukhdRpo( zeZvcnZ=`U4Qr`taFeh3x9-J1|?RaFjx$ON*Bx&ZNfyb!moyJ>Z?E1^K5E*(Eu8T__ z6m+`9!_G2tTC^5#ZB1t9#U7>Pen|4YB8ZHkvAe*8CBU&u%R+1A5b25^3E8Tc|iUAY;T-yI7RMLY06A{gZkGIpa{~#fJhN!@T zRaIzZ`quY~&2N=ntLjj~mF*K3gmqb~){LjzCg(oOyttG|L_`7moF=;I_qDlUx~E91 ze9Z0T&BMRI(xUvML!KK7aoFm8|4N^t@KoyTLbb#62P+ zXG;8a0ktF|XxgwVDKM-DP>T^EwbjksGL<)2 zx4wU@)=qr?so2sa=unB2UQ1Xz;t6lo=O-L4U^ay3NAD^$ChSCos)ov z>bW_oslMMQf*_yVQ!&sH6{J5@l9gaGu+n)#xoqN5Vx!ob+90wFm#Hq)a1cXdMx1_v zE=6%e2EZ!NrW3Sx7;B{B)T_Oqgd&-Vhx zJ%u6QvZ%2b4e1Y$BVkQ`f-plDdc1AD?dV*OBc;JL(`J@9oXi#jTAwo!kHr3KN|*f+14n(WqTUDTO#9goxZ1>zMbK-v2v~QFa9XG(ToSS-W7wW9g&GOvmHt#} zyXg|bi<5^gNq3b`MX^m!p*L9t6OHh31bPiZr2)MhBO)&!HvQ?D0&o;FD@^U)DE=bR zgr``vY1^)DzxXlhR(<#QIRPYp6{|1jkTn z<%d?Qw=0|DIVF5Irwp3NHFQZT@WUmj5kiMTJRtXE4S^kYZH0epyE>@t`v!kcA|i`W z_qoc|bh$*H_Gk76Bdh=#bfqB>f&nrTy1XK1N z3V_eQI?7fralyxQhTO6{|ABo04Z>SAlm=@-z<1NO^6~o(X5IIwAYo`tEQ?OgYS5Yo zHR4BlC>zeIu-%=O7O51p0Z4`VK9T8l9tN*&}l`q`ycG;ef~ZIVGyD zOodcCm)6Be5wyG5sS4h$b9uni4ei{wr6&xHq3IbL1%bSNc#!o8X3_6`K;MP%!#-cW1 zrnW1qN$HuH)|KW+jC#`PoBq{=vsD{*mhbKd2z~$ha7zF<$KI?NuNeYDSZL99UIz13 z2nrLhG(JioOzIAJh8e)It}pDr!4>roc>trzBTakNxvtzq9tsT9_98nWz8_JJLA8DY zkL{)9sgJ84*#~g)kYps7+=Ovkb-eRz!9a8Q*!Q#XfKgh9ukT=5MdqPP(>0Lnm&PJ*sS#FpYs{>w(z+jpQM%*J@+c)(NgBeLE)km3vjI)Ag~lYKSIp$*0^@rjG1Po$0;1;SBk{Q~Fwk^b+mX8ga0zQ}xXdF=e`d@l-$k4jH0U z@5P2oZDWML32cZLpHAdy)psi?1%>d2l82CW^L2TTnGrRVU3FM{g-rH6Vic;AF!pH= zs{ykn8!z!By~UD^(lTDFq$R<|>fCrTHKQKBuFzieU5A`yKnQR9CT3l|`Q7dAmr%~T zbHT^T()7HJj*jH1H+V2SE8TMV-IxIF&LULL(`NxYt5AU-N8rd7{~uFRa;Tm%2I-s4 z-H%k$R_cSs2p5k?k8ZO0M#!|<)P+D?ly)QM(94?~4nrdKzxOvnqzgzShfQ~W7VqP@ zJJ6EDrj6N0M-%RR=QuEIlF%7auXBMV_Hf{`NjN6FPtGkvz$n>mz$2|(e&3`%5dByP z_lu^JiN*A`ooP{GMWlFm1)1{N*Pf5Ko@FU4F+dW z3*B0&9C&vuwljuFBe*wYpxSTS@SuD#4p2m>r3qpo@he~86FosZFO)dGjdFEXxviI< zrF5B*O6jiK-45-EK^CTHJ2iX5#P9pY3639yDsn-LW+V5Ox7<*l#u(_A2O@?G5$iCE zs+|5xS=S5ok!ghl{I1j28^84B9nDkEE$_%qW^9?XkQq0x9Ic)HkZw0aT-`TvcxO#% zw2JB|$;H)Ek}s>^jP*>huQtV$z3(HXkI0M}IzEm*Cq#R@@p#i`QHjy7pJ`A_Ukgx8 zo!J_9C%LU9TeP{;)n^ivE96-otMJOTbGE13Z8|qx*Hqx3>WFC;U#87=eAFSIM{cH? zbSU5}5wmvj4#AHXaIwm``NU^w=8MUvmDt7}1~<%rfQ2W*uyvIx-DQM}(pj5IVVa@$ zYqiFvT$T2AWU+O-UV=qQOyF{YjAt(KWA$9^G*KDPZ2+TpqeO2NR$q^sZX9GzT*-;v zI>#3EtwJwy>0|3b1PHB{V`{3BJ)$aXt4Hnn8NA#^rSxa<`BgnNC%LnjTsYe^F)3=QpQH6SZz!0jB6jhw?9`qVA)$9xtytVhgrpuM8hAV>(s)H z>QvKc092etT+jBcpiH<6-vfSoBrkP=l~h+?ZpCOTlNTj4vQ*l}SWUg$UYM@K zw9GdD!cY8yo?C2i(-G6om33v+1U6CmDzyajVrL7C(vD3*xdYBoIni14v-VW^KARpW z*Jz*WjLe~rk9vPU#Z??Ns6=4EleoW z55Z?;yiIwUBg9*Za(ZqDf}ionJ{;$ED)iH+;$|wc*QlaXj6QAokw&L?r9QSi-bMCk zygM=NeRadEtHAuinGsuqOWS8FW+pi^%tPxLDBW$PDBC~NNQ^1i`>`ktI?1=|4mPtf zNM#3}BcVQIp-L1vv+=PBBzU|Kjb)ajVjV(@s_=>Q{cSpimV@Ny+f^AJWfnK59!>Q>R+NAmu{Hu(=6U+I){O zSFQCKPo-_!{>Nop*8RwYXSPw!_grlUXevr)3d~)5UG3@m73QvQ#vLG#C#?FhD8oN~ zcHB=_0)1MYvjL7!rO3$?E;C@A^&#^TAieP#P$rm$Au3i;UBD;i* z7u!Txv1NCvHR+nF^_hB-wIyBaPPON2`D`CxuN~RyKTK<}Dc_*=OvN*$N9%jarxq)s zX8eGw+v{x{_5(s5pKnn>VUOZO3o#KNtCCq;3VWqoU&}wDVW`@si74_*o^Bna!%r^ohzGdkE`iRk5MG!7DT-e!@jhKCE5AcAL&{Uw@Q$y#H1qgGIIT z?59@GfD5+;2`1l!SX0Ao;pg|FV=i9nK119l}p%NpRU(TN&E8!g;W|O zM!xZk4GgTL7Hti(x*xxu28KmTg1;OVUN*-XK~`Q`NC>%ooSHhn0ygneCG7r!w7V`cuJWxMC3jki>YHHTHn(3!n@k54ku=A zJ_!$HDs6Z~{>k*+Jbrtjk4kmla2=F@xsHRD#P#>D~lhwTn^EPiF9Gn}M->;=YM# zBXqUtWdSY%qc~1Qea3WzAyNfsr!uIdBSAKWO|*yK zw!XYTUM82_%dK!^%Z9vuVw53+ln%75iR# zczLq-8|p;;kMOw0nyI#E*DFP#!J&pr(9;6WS+WUSQsu5Qjk1{Y>ECmx5laQN%F|#@ z1)N9E6)fJg9_FmM4nb1C^O@Jle~+Yg`y}kK+M|$589|?W#;P!wQjc)OX3)L`qwBFM zf{m)IMcwS^n&CHhGE_3Oc~<|JVr8ZMSSdH@ z+U(to_Q&>A6W@yL&g2?jiX`N*>83WR3yb-v?-e?x86=CoYmdZOQcC55?7_kq6$$Bu ztKu|>7fmI^{w%kD>vE2dZs9TzYY1PR6dO7nz@SP(#x3gUMPdq z#4U)FDJih>_YCKelHT0@xH)y!9A@)jbm9Dv;iI4*I8JVoH*Kd|r51ct+H{^}+s@0?kiS_;o_$vg!djFYX|zKnMrCGudv*cEPlYSOBf0S3qr7s}V> zH}2jcJp}Rqch|p-7oC-1QakomSq%MS;qleR3y*}o&K59o`m$ZEo*X|TscvgL@?CDR zkBrl_d6d2VzR}GmhtbIe*SFx5D|bGRT|MV8fEWM0@1#a)n#)sfdCz&J_?1k{_NoyD zpV?&hz_$;52g_}zF7?0>X)Q=J+npCVmxcX9Txn~(5Pjt0fW%IJ6)&JnTHV$;Xlo5iDUhvzz{bH#v zl?j8tTy$&Dm+geCx5#9N)CXU^!zW@JL$=B6^t@bisV_#?L&hHu_mp}hzBx^jcI8~F z!6_2hmcKkZ8wTn|v_1RKtkCZx{zO;aL%{3n`?cr5s|7qLggfP9^fL|PW+bDbZwkB8SlZO7)LAs(XE*a0{4w*+Gsh6aY z=vMQK*GxCgdyXhdz#g`GjF(h5W{9%JP^9`4ydn;}3n3a?TXga>r?0&oez~c@+dt_B zD-<>xCA{(YM25_uYkQX1G-v;;5J#gm!G`OXhJ-hXreA$1yk?GUoF~1=%pBd4$V-C| zGM#SZf{#krNV{i^hs*LzBwp3xmrXVp_OB8sMyPT4Zakjb-AVs~A9tu6#k z_{x_M*5+{Mu2Dm&pzdKYmV#g|Ya`Br5y8!z4^3hbU^$zVoUo_DVeBUm=-QAFd?j!u zi^OM~j!yeQ>M_;e*HANcs8;wMi8$HXQm6;2#hxwFQ)@!JPRc=z%+SQMGsOD}O$<_U zEhXYz55CvL`$_Wbv9OKV{3@GIoaa`E(N~z#(4sfr9y_<{hGr`}l6($A4*SeWZqr`n_al1eQ=;T|5|Wh`x<_L2Atjkx26}f`grYa!#b3z0QRG2f_W6=E z8z%Vkr?SCVHVda-GE#wuHy{h+CLxf8+fGkBuAysF7M5j7>rZ^^YLpsZ3Gum16GET= z_0AY-*uS;CK!NJv2<`JHMAV2U=A%=TK__7#>3sK-U4eYAtT_-I)4=@h2_QJq)ITt@21F1kclcO(SnJIILY((k$(wP?+LI6UDaTn0{2} zxK#kI7Qo@b!>3ohN6NlyrC;H}L_C)fxO5YrL>hrFwofs-!TGRn|_qW>8rzDSf9g-DK{<)e~yx4xcz5 z9i;NM!Me!eoZI9v(c4YW57SF03%EStFxea^=uQ@kBwz zeT}p3YB5=&Xw@yLk90L;jEKN~0d@MYGQGFL4%sdR`j`mCVCl8yb*o6BD<0A5nRNpg zm^Mk;(~&@fD>g*r8@*qAijb{mmYCu<7VfAWIsIXF!ERWJoFwY*T^b5qhX7r0I)obZ zS$(ri{Jn158`h$59p3VZD~Pg;^zaBnc%;O6Z&`uja32*fW;ktM+t!Os)ZACWu@u4C zY}J}tZzad$ig4t)2g6_Ox7{U5Z9YwFUoInuRg_Lg>glY4LmD5uB#k%oNYdxS!AwwC zkgWgRIb?9e#D~nLnSTc>FBe2)~>2Y&JpHG?#(L6F3N(bSw9We4y(lF?LEhhPu z`K=g55@TNFTGl}(=Tcf#&8$H+9u*Q+#48IX@ji}p-TU2X*LsS5KFZ~(ysQ!!f2yPs zmiQS%>x%H(+Kf`;m}>Eh-B79il+T{2TP&Nfcq7DXy6!k?B}DEyBsfrGL|kk32y?5_ zV>sgEqi?N(3fS|BJNG=#myy%h%dTfG31=so^5jr(`Y@2BRXGf9)P&1PcskE8az1J) zCJg=#_vy?x(7gK0;!yikx=zuh61XV%1 zz}He}bTEXQ)tSDbG~4&QzzCUu*RVSJzT`_!$Uh+>X*0r??Y%=H&9f1yXx*ZP&<{qrvLQaN_6iz?^f{TlB>vbAR?z;*CP;$gd=?>gtsj+WBn-E zSot+sFDG!>8Me@O6NvdRw)GTz`rf`Z%2|}-DE(aM%7}|rrR!ZGp4mD!9TWQ2{H@ug zF+tt47ZWEHg{OOtF0b0@^`2vJ?(h(06|B}pXKkM#CwZWy>MB^=CT#aOj#O4=LD(!vxM z?r&XfkD_59Ar&A)8L#Tc1Vc-rt!r7_8p*F-fM0r)T;ZxIljy5i)=Vlc4e935=CZeJ z(L@IaDLSSPtFF+8CQtJn7@xNa#evo%%jh7 z5Se}j_93%5zbgMW+tiU%A|ky;a)IpoNXe}0M?!g>A8TZ7iXS_pR!-Prseq}}5Z812 z+8l1XTCCCqx=6a0PHn~J3yiz{WlWT@${?CbL}+x3{oAKzjHE9M_MVLtXcD;|1_ z{>l}-^X@|d_cCiqVB|-c)Wk4@H?&sk_|@@Ku7eYi^ELqs^`g(3*6Oye+sbMfJn1|i z{O0l%Gcd-646wj7*!}!pa{Vl8G&^#V{Wpxp=jSf1R5)({2nPm7UB= zjfceU+XWFN%AYbP(I_XR`8R#Vx0Slxs?^kmoNI=+4Fb83qL zxfY>Enkr+aAe$2}KZ;`Zl9HB^3bI}>8bN|gpQcjaYuWm68It}Z4rEA7aKFA?jNkoy zT{KdAHr<@6BPwTr!8P_(n(>62@`?D(Rt9B7P3G$Ig+)wqNzzJqH|MDsTY+b**63io zk{=Bz@kFVX5DLLm@2%XDXz7-rZmN;jtLSc-*RO7gf32eydfOQ5Cbqt?FwF&aNJT?j zR9z)!WyWPO-$}3fedZn0OM=_hm-_jBYH^EhBhI1>R4jl7H(9==bJn^m!0Q|cTk>8O zIr*(wf=>c$bz{i&gdSf)I1@RjfD$qWlkwTgF7dhfE5|4AZ07K8sZ|Nd%p6oQ zn5?@pZ#{Liij+uiCX6Jg?bjbzs9a@+ z-^tCal=Su&BSus=Ogjedeg3GYJbSgmjMKV7>w4nI6L+yy%XT;QOF>XQst+!+L`38; zy2CO#SB`JW3(NWXzGu7S?daA^mc|qOsffTTNKFl1i*Zw1Vi zI}cX^ROw@ZjjYUxuBPWRjAqKxAd=>81s~;veNQ3NW~Ng{f3;G1B0`NQj=ni3uB?Xs zN;>oi16AYu-2Vs>hrCs7A(~88Zb2JG4PmLDrwo2~T+^!TuE6xMu}R%dgyy-=O$AA@ zqPN&QP?Ik*VjZrqZ^kV0RJtB!?(~^T3$TzjGAb}}%X!E1_JM3lf_G}O!J6p0m)fO~ zvDL$zYT(@Jz1K>QMUxzF|H;*>=!xktv!e$}LZn>W&bZFVExt+e)8V862$i?^R4Z~t z63u$;NOAzCcoi9RtRzXg@}|l5me1H6Ddk2DO`&N|+L8W(>B>{@nd_9n`Yq!tw`o)2 zq01ha4i}kC*3JqO7y=6Oy~?S(A(IYqJXic$1Y{KxwtA%1NYZ5d8Klu`8ZdWh!T?ng zSa9ysIP$mOQX-I}r&HgPL3+Kwqpf8bg6d1$bD!cd&_TtK`T&t9!BD+7{*d<|?mr*| zQRQo+caFX6N3d@iAk(aN2F&zmE7b=QSfurhG0g!#ed9%t?;xUJu%-vUPh14~0^bl< z?B`03F18-{)n*+ghU8D2D=$MXC)A{|#Wn>U5Rj=8whamUaQryQ4G0nP!4ql{Sb&t8 z@}Xdm6UxP98?p}tFUpMOGHlZw$fLU7MC(cno1dWiHkvS~4__{9KNgg=co{6f`)in) z;W`{aEGvEF78-QWgX^H^konc+2hJ0pZt_N5qADpAvT%@79uD?xwHjxB@1tsC?Ql;ur$PDhRMu`Eoi~=-^TmAlT@>?n z`+&e{OM|6`z`%sB>Pn~)!%PGq@ABhxDCE7?0gtl7qx}|FV~#$Z$lG}yn^K5knmd2- zSVEVA;mLwBaWvnzG(mM6m(ivkP}_TX1RW1mumZKkL|xImjc=V->E^eZ+cKn@0;BpL z-}0gf;kqHxTAo~JQRiD`Q|lpKOJ)njMAWB$4I{TDUw1wauVr}m+>y3MR?_=cz)mhI zp6I>afkgGu`X3+%L3vZ5-S&)^FxlFdn_{Tmp@H_N5~Xb^BTly=VDG1KO*l+^r-rEx z)O^-zoZOSdu-LI5F5m0g%T*nSUZAKA0Ah4Mp<(kB`|DfrROc$LOZhrJN2wH~mW8UJGrwv5}PmJf+>Is-fg z>7h=%|MVoAiBRG)e$Gf6gW>y*)lCo>bJ#o zyT6~w@t5@8Lw3 zVWDM<3ppOZ@vSWfAG)CQl3r>&90;tkGz%j>BP^m_svwV#fjF{?l$%hly_BUVNtQ)lqnKGfaMJN+?&FRBGt>(p%jE5YAV9&#%=@jp2FsD|n#B@AW(eX?g(0Zbg zS@BTgjl`DS_WxOw_{z~TC8eWtfdi2z6ghsWm zwm`|(J5cugfoMFfXHEsgf==mNE!Qm#(P(UuVT}QS(|{hej>b&HY^F=>Tb3S%w8X7} za~_4LEp7e>Ix_qljlShAR2C;dXkmYPk>+5u4IHVLNeZ9y-oDWx(-dWwD-TLq@H?|s z{BwGR4T7b=nbkKugNqQ?6Tv`T$QP*QGxs~qK5hZU6J62*%b#Z^%Q+qn+^BL{cIBUH z^u-=1=$VI>-h?>Hp8#5A{$zR*#$#S0F`B)6L8^kjKf^;^$5Jz|Ed68S(5*n>jt8D3 zMhy=TJqE=xu4DGGa$f4v+hG(1hieb7U<-+FNDUb(J#OCogaBvd1_GdAhc)nHO;;8oE@Px-_qJ7hSiFZm%rTJei4KohIWR%{K-h?9h!+*7xc)(c%%IeL7k zC4w7|jCL11RQmQA=|=cOEt_@O%0jy6dry0r78^giPK)IGgH7k;#KB4ZW2E8h!raA~ z>R3th*TmS9-i{{efz6}k-?XC*n5W`wBX4ZpLVc(6Nf*r3K(>~16 z^V~SwMn9g0!Qh>WJY_d$4;%mRG7ORQ{@uBzns7pRZB6=h;-JJx@q0T}4MUs(H{WCw z?wv$itEbC-RF6tgsvE!9?4qIUu2`BgVAtZibmpCyd|7^G$Kyl+nY<*9*G_|F`V(Ph zL*w9h%}|*uu(m~#MphPEnIH)b7(PH(xOPXa@W)gMHkO*Y*}#q^b}A@x1-VuDt>QOm zRjZ)7W};IpTw|-oUGJ7Je;~VX51(Yd4-^L|2EM-qXib=kV%y}WXL-!}FZi-PlksAG z6@rHHfyx)(HLKj5HS^>S`E0se0j_6T9a&meCiu_sd#je(cbjc8f`hWXascL%b}RbL zk~&lX25O=0To;@X>@7e6-aEREd+&&gwEG3BBIk!|W!AR2n-yz|4sYZa+r;ZjhJlau z5?AY=+IrD~vJ}ftl`+m&D<3W!gw<~k=Lx8y&MNrNY6hwugo9Hu=<%KDiBKORuo}d8 zw$*=sqeBZ00xjP^eZ1WM8kA&YxF&0}YjTWq6yCf|%WILB6-PYV7tI8$E(%+fF}E(c zym|h;DJDLmJ{k&puNo0PPL1$JC*x^2*Gc0!>taiRu!6mDv(W5~D^PJFx6}RJA3Rnm zbb#N)VJlGRbRV6wvh3W_TaSwK5?PsPeAYYlBtF^oinh$B^SSAE^i&Hb4V3WO_*4A_ z#*g8ttzzgkLV;^`&nf93LUz~+fzu*}b#HYWw6a%}rcW&sR4;kD&}K_LGUdu*h(9(Z z1p;_gRlP!GL;-c4Y9Ml1O)Sx3%+Hs+zkI{Y=Un#MF>bGj9-YE6V()3QbqFB`9_`BLA*3zM% zPD{MyjPgTqm&fXr+WfanB*GgaL9I+ZsOTDfN5Ze_+TF|bG*&g{RGjq0OAdZbRr)u# z=#-;1Y;587?{c=no8D;i77kn=$P&Bhufombow9*}7F{Zgx()?|I3`{7lfFvKw7^)&|&EmEjo z?G-m)r}c+821>axhl)LFItfQoNO8_MaB^_6A@@q*=WpP(`B*%0u3Jp&9WD-n1d-kU z{JMd9o_QO%LJaGER{#whr0_s=aMTjmIw6W)YwJ@82YuY-slv(`EG!7TYvlMv z!7Zn@E90RX5)&Zx{xm5s4PcVHGd~p|aoz*@HvGbgV+V-l``qNg9*vk;{ZAU=r?7lE zMNoDPeNQLZC=!MsxO+(>07#mg=MWZ<{6**p*V3%*JR+#Z`>-IGAhurtr)B-w%D>Rx z?nAa710!VXfJ_Dv?Cfqus{iMmM{m>v!rV7Wdd#YteqGvUq=Cea~gm4K~L!sx? zbhD3dJP>Q|%s<;Z9{wG?wo^_=1O7$}B<3?WRtv`NL0c!!!)Y%+Mv-6aF9658&>bzP zBCwN;JzVCvGszq+tQcUldy{;*Gf7mv+$eT^`Q>1JvCvlmyY<1R<#*PH>7zz8=eFk8 z|6=nZ_elx7-*Z0`st4p9{rdi4 zRAM3%cthhdr$2ZPmY)bP?E8GLMS)iCoeYIJa<)UrRIo0qe6OZHl4k4;g~3TWNklji z8GZfQ!idVf5UsdYr$PP;;JIx1TmX!R=*3JV`$D*0)t&?v7;uvQeyzl}FD)7A>FG%b za2jX2I@{lTW z;Q{Y@B9@k%drGV+il_tWj*yV@!@wMJG~W`^a&LpElce?GTvPR#kX|xy5}=v{>f!(} zWABGxQ%gzbL8wtL$Cia5_;#NP;DhA+7)sz1PvkD%7<$%x3Y`1)&5KB#*8Q`%0BWlH%dM5YpfaLswEXO4va~zt@vcC}=K7c; zU;+LbAbp@8c`Q&5=spFj`%SFwkHB`~0Un_)sR;TxVI1viC@hi;1kcyOXGx4T5s=-Y za%$*dkjgkaA7yxP#~V4s|72mdGG$x7F*yv9h14#`3I6_ep7?^W3`_I88 zkWyF}R|^nO0|Z0JpmBUC$}wV@ZawL1l;qZ`i$kC%u-0S`9QehUb-7E* zMk{5SU~E9l9SHkn#xtVB=IJE#kFW|L1dvLLC$)GPi6xFFnq=}Ukr@4yM_LaBV=XCR z=dn&R00igW^wAmQ!p4c;1Cr7B2a@p|OVfy0r2=6HI71X*OXU3f*%I|}UfM^oQZj%L?x`wL{7APZRkp9g{ifbmEN7{NZfh3>rpRI{6Il;Qwn zh(8hw*7YFj)1e*qh@B%gw~Nn46bJ{v5Wr~i3v31ezaX-iEG7(tIKGv1V`dr4_y~a` z*%UtHICB1C9m(TWPJvh#9{UBp@d3gTi9`tzM`AJhHLz7sK8Lkc&|F&_gY{3`U@RS;W#0Tf^a`)qY5WdrnvCEUZLx>3ZUXrw$XP(KrDKbI9b3q;{qBXi>cHqB|+ zc=~59D`E(QL69iG5&)2fz5Sew3~<{UyKdVT@{4thm(A^S+cb7sJMl9{##s0j!2_{{ zAcFRU=xA9uWFh~>QiAxdt(Keo0wTZ&_Sx!hoK^;aL)=i5>1jAE3JzkUW+b+}81i{9 zKn-Jq>j8aIVr-U@K;1|-ET)Vaky!;ms0paF%Tm4VC`IB%1LJUR? z9UUFrSbsRPp*e1Ve>Op)j{}*KA|&1Z;X~T6(Wf)MGZ`F1A;Lz?v~R>_J?y=Ztxo#S+`_}0Slbg+_d*F*g%Q{mN=7f zs`?sI@&~b8X-!N0=rnZab=OTo=Q|M}&Hbof+nuvM*qf{9^B&aOwUffv%k3D`aV{W!4?hi|hruES#`{ci$&;v9ZA|=B~dIIG++(eNWe4 z;EfJt!p4R}(07c8Xv{sXv4b*(Tz1iBn|kNmw!X)qR_!zE(T628Zy<@tU5Lx3f1pUx zw*0yhw?i!XH7*JxF%`xLG@la)GZmhT&Va?Kyg0r0*5{hENG62ngl3RA{hze})iCF@7{<;VrK@}O8RT59G z!da(^5T7A+r45OvW$V|p3T;BWsk%Ggfa;3hN)J9#b&$Yjr4IuTbkyJ{It@y(@tiN{ zfuJnW{T#bJF~q}92JcFGgBmua^{7i;^vIxycdxhB?dK@f06gcq>;6`$=8UZOc3JCE3iqS zlH2K`8#ZM|Ux)5d0wyVLer%|0t{E_;*~x|vN*JiZ0(~DJ??ZH^Kln38*gqTuMATEk zHb{E@g3n4xC;n8JPG0N@;dqOdkQd*!s+%gzZ?V-CR+v0qctF){f)5VyZgnY)W8>oU z>?Fbv1ezAFJe(CIhiGhcvBdGRzladL)_=YUY^$C(9RfU-s=uJG^KRzD|Bt=5jLLHR z+D8FVKvACuP(Zpty1P51q(P8Ix+SEM?v#)Qkx)vyBm|_9PHAaSLQ2lMQTKN5-}}D* z^XZ&1&UyD>IQ9o_?iF**dChBHYu+%Dw1sxAU&#Dt>ma;UC_GX?;Zf)RweScFM@8Fm z%Vm&uYINIbmn^PIk(?U5KlyE%6tGRa_E4nRzE6b+#*gN`oh@5ycnoz_0K0%r40ZRp z+PS;IK;z{V=+@r>bPL94a3`@(Y5;u-l@S1joNM(tM0n6bY17}}0JOmAgmj^4g9@Fj z4|fvZyqwa~wbW-hxtO6YpF0;bY21(4UmFpJgr)hM=~Fw`l~(0}4UXGLRP~>B_ed@s zWB*VmZ6FeBsIZ+j^s0FFdT-uF=V`495dPf(;h2RJWMG9f{Sx3-ylANY&y>Y`2N{SJ zC@6ASzP^8wFz^BhB}efFL?Z`qBRGn+HCEGRF32rL$yJ)E?F{-~jIVMBNAbIVGXiI= zLf1AwVlT2kPH)D=wFV&s85O?p#t{Zt>VI>Z^JVYVQs4v5(d~?c-)iRqL z$V4CqMhQ`5s?RZjv${NYX?z6W++o?YggdaxxLijChUD%27C8&JD`D~EdByH`E$uR2 zSc=U|MB;9~TQwRlHl$B{+sO3#8KaExV<6W47_i#NdO2q*1xctAK#J`m$e7ZQkibTP zhE`C|A&fg0Kl-2EIW!)Ztr)g10HU{e#`3ZwzkGgt^9i*IRucJBc`ScL!TIjy77`MX z>G+#aFsu70-ApYeg_Lpn1z=KvmJgT7$sF@{>%^r)Vxv?$=)pRqG50=N|2kN7YvdsuBktVny~Toy|sHypveaZ}tKt z($Y`^E8kmQKyK0|Ll5few2jBxD6*E+aDB$yWbSj4W6!Spg*Qfl>P|Cdbn9E(jD@wQ zVgj8unZkocg%!p#VM;zO5lf#ej+R0{povJh2~0t+*3ebkof#liNDclgaWF&^BNGX` zDL~GYU|7?Q0dly7H})7z*Wob;Uj%9a$crqogE+=!kbJ?e#6&g2fWTpQEh4@-D{SfB zzv~%)0<)L%z~!}OIRKowkf6i#!H)I1L|PCAw4)5*Z#^RSdlCqsC^-{IBK}28{I>`` znEj^(3y}i!g&{4t*9cS}4nlwz9W#B73i~Ir4wCTqZ@TKS@M4O#zMkpU(PRJ^5P=NH z8rmK$lRpNXR1gO|96?4)q`!EX2qQwrB9jpV-Gedc`uSQ{HaS0kuXiC#*uPr#%D+6= zgK9f#iOcpLz(#lDg^Ypv(`xO0^+5U*BZ&$lIlip~(Zrxh%OzDWziUGKg+oS z$C7K8O}A0JQ9gTSS`(#YK(+s1ZM{9<@Wzc*&$BG!y0R-^2P^^4@{dr4#@W|PJx@c7 z0L{M7VAb1^nYrLaT*{VV{KS%$_$I~{5&)uCHU{w1jwvp5U7P8_v`uxSoG_tP>LLG z_7*Y;s0KI_L{0`(!v6QD`r-WIba(AFD>g(+HP?R zj=?DW;aBsN9uio08tmPiD1El_snDje+Pu5Suw@5-c6yX)-mF*Z0BXbfE~rpoJWSgk{K&+(Zd zZAf`P9{H!V6pEYoI3iy3hHt2Mvnt5N?Zu|Q-mm}o@%^FuSZCn!(x($izJt?ay{@@g zPgTNXt_R@$&{K8&d%(rAwXh9ff&A$gVYC|s@?p_xM5b_1jgDEJDYYcAJsxRY!d8D| zBfdAQru5p4p){d6>?!_B?*9h=6ZT=q}{ zy}*;C`*{T>_6x^c%$OLr`9J(B-Sm)xW`wjvo|53UW)v#govVk~Cj*L`b9#0MOdH*e z$rKZ{uGu>F$0PPTR%6}8Pb11q6ixUJUTjV#83uO=1|D#xz7JQY7Lpx@=QP zftw9p(DXTXCO@=vFYxumf>*kEbV2KiDp~u^E zcWrzfuWwr{-;!vS>D@$48AOi!^Lw{5Pk}t&989hB$Z`LRN6foOF#_{Q=`SDl2lz>3 zP$vvq5*=JM7ye|WKQjVauc`jQH;71tD*)YT)jU|59Yp*UHn%kn!Bvg9 zWq54|`F;c0{7fke%X)WnsFzaX+9Uc!2?6(A=%bo z3xF;8 zdyd&6Hf(^gp{8aG1f{l|P^-VD^qB~>`zCE`0u^jffQBmAfZd%(Bjx+~8{QHC`Ix={ zZgIzlo?oG1OQ7Gq~9r4LbOuoU_C*c!B~R4G>KDVXEPNG>q{KPQoK9qHKwJLnk{>Yxi1n;QO6FGiJI_=dzpnvOy>>Kww{lUK|sUsZ;em^G4#BwfBm17*`F#*1Rr}OKD{2gYhM>qv7v2v z`=8qYsDLq`rg&UX{^N2nFH+zAAqzZ$crx4Lig`U5%ap&JWiMJ3pVj82# z-7BtkeK(-mqx!!|dWddmwfLX(6#2dgdd|Ic@PDkrUj^Y-v|Zz|9^~l6PS;FOsbdF) z+P^DxfTjVnPa^*clp*CT1X&{guGu5_+((6;#~@+sgP!*}2>Fkb@RyzZxBCPj^8Z1p zCG5>uXOe*Wk5%}qss-d^z*KxYWtZxqgA6Ir{yxY!QvVhS8F)>+6!54GBjnd2^g6S{ zWjBxWiGHOfby>i>50LP`4Xp(g3kypMbd1gcf+FQQXREIM{zTBTng-l$2T~&$(6JKq zrf#8s4|xPMAPe`s@u`ddFWpNJvEkR>T7X~r;3#l|2Q-&wZ2X=@EsWs?ZjlNDOKJiupzssb~ES6 zhQw&P1btadj8hiq2fZK%QoZ1UPMNd+lroT&7#hA=Dw?908rw+#cM@dW8hBzx$RD!Y z8;+H;NXSZ~;5*~FbvIr{ST`En=8psI!n)=j5>tqyU1$J@^62ekHdd(jh2qW9SQ%S?#wae#k0kaX=(;ENqgCC)xSeyOC|C9G>jO!@t`E>mac)*}G#zne$EJ=q zmA{*KNwyT~{Lb7LHJEr{+jIS!;gOCP$AJMV2m~a-yVSsWxgy^!hw#WV@(isNh93s; zbQf;LMo-O2CJ3~pT1^f-!kX#SPoEM+r5^Bt7MJpCt|q2y?$(@z6ik7r;1X;hxJYo# z6Oh*b%>EJ6(elp;ZwP8KbgvXgM>I@IrMxL7=l2VrbiOBZ{r1O%ktyTzGWsD4A#CpD zmNc3s8~;^Lf6XZK5&vZkfw|@a`#{v!A&Mnl{k_!V$7F8cewGs&-I-&}vx^D)CsX{| zlSf>_L+hjRk8o6VT%Xt_S?ZLka=h({j%EBp^9p@4sjTQHp>XyePy<8a@nV_P*WRYP z+FMQ|o01JhwP>LfW)Y!ZLyI-xBP&PyvL`Zuy2XCZXm%Z;sCE)kPm8K$Wt+g7dFE;O z|D;LUKZO~mPC}6Pvk8S*-Rk%PQFRFQ%``@ZJ#5vR+*QY*~kKT#arjJgzbrA>Z zBCY2J(yqRZ2OR<9$^-X5SxgIA08gC*X~qpMZA_V zN7%GFRH%JGpzR8=84Gg5J8i~0k(KZRH&dYtGlzGu6AW>k^?)ch0oFTj%Q}RP;KYd49A>8CiIj9d4Gp_*;pn3?Od z|JW5ivJ(9@wd17`*P)|n!lAN9to>(?$CH{P9@H7{Vbd6^(4rY$kt;~D zK!86xGR(6)2zD;_pbW^rV#|c-fM%!wB-t=qE!pt3rn&KvS`}Mi;Y}@b6VBd>4Z8bF{uxL}q<)>m z`Df|xcK9paJA6hz-JIXt@k~ooIdmJV6WHN#PiNfG+F1|#oEP33BK&lbf$J$^9S1>M zbD$d;kAU*iAKZ&D@gOJjqKM@lOM3^r5E$o`(Q!T^iF+vCGqDJ0FVdQ8_W7PQ7?sB% zq5&|>G>j%og4R{@kB67>0Jb-7Fdk+vm?;}QR#e~Hts`XwFo^LlG`n*RBAd1wyrl_JA zW;M6@A?UT=P3`w#r2eFBOzG+&uvY(%G?JPG-87b#Vo2mdNDT1t-Fe2{+xwz&^{WH{ zs~9*}*yJDZ_{C%?Palt^-2A-tjzQU9<2GKQ;hHVaL;o*K)Yog<0;7GIo`fJvc_VKU z+urBC!aGVJ)DlJLJl(6kFZKAew&4qF4y{%P?psU7xzkZoEb#DdtOPu(HG}#K29d<| zmK+*r>?MB9pv4(%q>@{!jjepqdNxZE$@HN^lqczp)(^LbvfbaEv>geE2kBGNgMUPp z^4uTSHRSaT z$)Fk9z5rWzi$w4giRUoPshS?|OKfvAKMg9HO&Ff_PL2Xfv5Pp|fL{f?v6TkA@m~v+ z|GYWz24|MXn3+GvZAz-!BvFZ~-i9bcyUlI9=&YoTN5z35Bc+a9&uK&)aj>pFT4bi??2d>~R62>o2WVMIC<|<3fL&zTe^gTI zu)mIn7Y&)AD6%q!!s71X;uj9$*-Ynp%?sp18|jt0r^dQ#GgUe|4v)$prlz^V;LRGhMfuiC-^eD;6Le;Y3F8phRJrd+>H0}q{+R=RNK{r9DV<&;K1jTj zldjc~L4yN79ca&v-rx1FLKk%@EHMwKZ+SfZ5Oc76>ShGqwa1aDrTeV=X@ZNhb%8SH z&%Vv5$GE_=Bz3fcVS`82R8%VAkG{XN*zsD&Qk8#SFerrvkMZEao-nnyJG#Kj@Rzl& z5{8Sw7Y?QKR8ZV7NJO5|=~TnYP5Tpuf{l%hWo~||aMl0{#mv=aX>VlEvDtj~=*x5! z8ImZ{Iu?nD3Ob&v!ia~3T2VZ5h|6m43r+&srZbh3i3L|#3Skm#l7+c;{@zw?l~V&R z7WS)edtA}pHZT?5Z+#4>R1jdkJ7;yKR%X#9;_vUT)}1WpW^!MG|4>EsVxjT5!|aDw z>0an0mi}JsO#|KK_*o4)W*XP1wqMhT_`eNJXb8q->`h=1S=ce8443#im}5SH*IkXr ze!cCKh@tSXJh_MtogQB-Jzkv_PB@EH*mRs_J`JZQEo817eM7je+O2kH8GG^bTS=yc zn)mnns8{Qc7mUfd=t z7fW6wN5mM2X%74}`gtX@;WPNSKq2aDn!8JyKH({2i;gEWYu)wVTP{8xmWV>Z3n2oxyf=|oK`eig@TAPSs+LFb?x~xX(Z6Xzr-V|1(}{tEo!~sfy4Bknb&Zk-di=e@}~&CZm_LiPnU2J zqccnBs>)Vki|J&ox?`3E9VGmRD;3%&)4(^6eOsA4j`+tAR4sXr7kkKAzx2$l$lYG4`8|dk&39z&$X- zx9mh@;a|bWn64J8zm))Of%xBiCH#3bFcedp3*R<|sO!46Q`GIq>pp+))v$aIZ}iZA z_{`wP?v+TDt;nd0o|wTB)KKoXjXo8hUccZnktxO-rk5Z8Xd4v1#@-(CEGdCM38pV< z#P&guQ)0a@rZ^u>D6JtX^lE5S!CIi1&7OFg6I8HP@PTX52YNGX+c$0J!?(DpI_HMEf{n+Nj z&~Q?XzPxM`rSw^F6(^>F)m$(!!_KRfmDA+zQo2(?y6#-_DMy>|_|CAN^qP`UIVmgB zw$YWd&lTmX>&qPR-RxNz2h3iSYALQ zA|@efd3M+Rei3~~nWb;y+*2l+QuB)t7>UdlTD1B;Mt5mj8cbHAbC#c^QY@%*w$rNf zYP3cKg$-3Y^EBqdkN!w4entO$@yR~VePR*w5O^s~gXj5)PM)zTx zMHEE$Lc=c3s8C}`%n$M(YH!ZT#Amfp2(F4Y;>&u<2Yt`7o@i!xTDZbZ^7R`R-TAh{ zG*$3T5>h(Z*KI6sTf0zl`R|VDjY(rjB%Jzt$SxN=>2C;V6Fto>moQgLDl_F)d+^?f zhKlZO1jUhNP`;PvVdk*q)`<QNBF*@_(A72OE zUT6@=27XE;6$=#3l>NEK0i=pL8X=6cI*~qP80gEKFN;%}S5&9=J}=e5U`y&py*$-^ zq;1ZyYUW2Mm@3;y;z4~#B2OW+^+raQ{@nc>Z?MsVO(X>c?^V2}mje|DeS`j40ztcsM>D1U-pQS>palf64StmSMj};8dB902=;8tZ&pxxLs?8 z{E6d0h&mR@sA&7T22W}W76}h}h%dvQeh#r*G6bM}v{129>%8A4T7D?LeMkbp#qK9; zUfa2GA5`nfaVD|__c^zGFyO$4FQBO^4NwS#Vfjlx{AoKrPCFN2C3i`JET>Y7(B+92 z#qQeouNZcI(MD&-fE*4wt3LP#^ZqM*V<);-C8cl(<8p};({o>`o20REmB8Q%&guQ@w#YLvk7Rnb>?DcHxefZX;j>>@)3i z^=zIUI=K&;N~u?HXxtTR`-O}j{nyBNka5>$De%Sj1cnKH!vnM&%9p}j?JU#BE`kTV z>KT$Dunm|dfvitgZUtHhEH`+)n~+H2Bm|`ayqgKdr)8S7DEWf_WXAmplHZjcX0zKk z#!AA>l^*4IWO=tF6g4tPB-@S}4@v+`z4eM!Jm{8RR)*{|92(TvJjgbh5s`wM@Y{pW zU)i==y(BPe*M3J{a@yf%HdV}CJ3TEd%c--Tvf~i~OQeiS22OG~r`S^u;4%S+pT>L_ z2~TkL8lw$k#m2n{)I3zSXF~Vxf26hTF#MnsVEkSdAml9Q)q>uTaa@0N39B)7QIVDt z@0Yj@-VO?m6fvUfzcpx~$f{fxl^hpwN;Q4UhKRAD_DP~1SZ`+V^rMGT4Jp(j!-l0oZp}2~PsAptSsC9;zKis&Mk2zEPCW-~(VZkyN&pHuo#N>hwMa;k^4ALv>YJ zg$WZk%3sh)^pud9kd+Mr&@m8zZvRgJ&49sGD~THI@x@t|FPZJO^WeP{UfIvj)DRCZ zQvLni>$3e&&|vTVp!GKu#4e};9)+N$fB>A&g6aue$l8acKQFy!{chLp?1%@8Tp4_@ zQJ>C9ElW(hg%1I0D>BT1yz*57N@=hWjbIjK>15(XO8(To(GowGQmWY+pzm zmb0ag=h1=6Wc~K0637?PK+0!b0J_pKk%vI}ViwnvFvw?3i+pbL`Skr@gWqg~8Of?{ z*U>4LIP~E_KYp*++^HLs?8+pKyd!{iCJ@>gE6~SFUlGeO_%_*9{UI!9U8|#oH1{aZ zPI`4yW&0)T-VBxKd)E8f!7fu8l$H2 zIbP!(qatO>0a@icka?|c>nR3|6R81mI?DbFTgX?&g%5SL84sxX3q4h_S%E+C*B~f- zla&3wpGJhuyN^M-*$DY-+4Y>c?KIi`*5e+epobx}438v)N(9gFj^A@O;|Vm*?(Q8$ zBR{W-OeANx=fW=J2Zos;>@gf`HCbG*6-=xCX5r&9ZMCwUI0h{^+2r%~ua__w;#Gyt z)M}OtXh3KF&&!__d2+Ris%$1%upVTKz$f`Sjg&syhD$u&Ss~v%r9mrx8!9HJBm4ck zJDwG4!Lj@69Q@Z^rnc)x=#EY7g#6b&6pmKS@&M#d00$v?!ZH_hffM?23(W-qQOT2S zQH+D-p*?Ye`1h;dWvIkLL)aFo>Ht$wzz_-Z&B@QuIN1W9YbBSLVW4M-O{f!V;}A8P zvW=u4TSNTRH7p9#eBU5QIX`e{sH~Qw8i@Lx{VO{==J97)#)SF(K{=Y!L7Gf{x9Pi# z#^SxtlrB^89}oYLild;#Va3m@*k2opVI|)q@s}`jiHh?8H+EuJ@Z9ReR>%eG6v4%P zV{91^nxnr|OI1XK`g;*KeOaS7F*%f^Q{^jJMvd|0jp(fGh2u`)ll0z8xhw72chxAz zhy;Yb1@|h^F+_sg+!ysO2DQc9%^(h)IbO03fGwE|q6Qwl01j))e86pcFRLI@!-PWK zGa-RjoFh6x1$PTWwx-WGHIRChMqcHvY^50c%kekGau+G8+3iEI=XbhsZtrkKEM25V zwRwo8*se8QySd^1wIsLnQO&bENmS*z7j2C21#9!rjnj(Q1nsXUeh3ijas^^t9*X>f zR0wW=Lq+Y=ptH26=SJ!)ifJf;5QaKz~0tYRyu=|x9lB}psv%7ldFbjl@rGzIcw z#*()2P^fj3nI7gpyDc8{v3Y_34JQa;EK~jV-LXtOv#-g+s-=P(j`ozwv7h)Kd#Pb* zb%@(~CHOfck+yL#0dm5YrRLN*1ojj&&jW*r5K(REHNQzwr(r#}m0D!3j8lg=}x?IrEKr5zsQSo z4|rUxOdua3N1I}fiv}Nk2^P{-%d9YxMDI_n4_@-cMZDa&y&GpjwLmABdz@ESOPcpE4pVL1 zAGv}=QCG{S<(oM5M_LIbVKjynY*D&)x*8X0p0kH45tt~xxO6p_fcQPh61mOor^IN9%A6+NK+K+XQXRH27zop>| z92K=pJ%P~-Eg2S6ZNi>Sp5^L1gY}Qb%+?SDb^G8j6jnmPr~uH2WWVlhU;zpX&nmMv zpn+WOA^t>hul_`FNqK|8ZNPgM@|#VNh+q)c$B_{GcP3>geR0=Qc%5~d5sEsBp$GuO z4FMoBitd;}6aqteyr+h-OAMmNB#0jUQ1r+Vz2-_ID^yf<;W1`cu{n-(zP<6f$WH5$ ztHDF27O_;g2|1FE08%ki#7tiD&n8INH)Ozvu5LZqa-I&~A{liA--tmhbrx`4Wq$JD zygBeRL#d?6ohM5b8pC%YL@1KAKEt8@1BAL-k}17$_#I8TtkcwJ2Nrq)DwZ74-N+H? z4U!8+=uaW+MgpGR5H@w9Bk%-&;BRW}8mH6O&$wsR2E4Vmf+sFqXU5C0ODqV?U*jH9pj(Y0lxaXE!}=-bCfwnzh~Bxe3mT!^*5{# zbdn5AV@^JP9|3?6Um`fi5cZ$JBB_W*H~*~#_&X2aD;O+ocoKuK#$AHx+k(VzZYhB; zr*931uohbMA-_g+PY`oXKY4~J5qDP&u` z|4)=f_K3aX@DlNhdy}>u8UdpFrH3L|lDn{4QKai|uEexJkU=D{5bMK9u50Gv=Atf{ ztjOXvg(`Y?!#^^rK0e4If?*Op?;KwN#PzFN z#AFmVUQ4f4d$nxs9`1b|*0M04o@AtBeN_cR3WxEW%DhtuS}cRV)WfI%SWdlmvCxF#-~_?<}^mM1Jn z@dx4FW>{NuiLT$>somd^!hxp!8RPO8=p+l7bL9O@8Nr60^t{_tQqk37zi{8LJGzE^ z4aIEj`l++G(BJ6Zm#9s!Qx8(axnBRqFE(~-kuye|oVhr~ZHPYMZMv1UD*l2uB!xE!nKiNY(Nzw;+J z%Fpx+Y%&iAaJS|>HC1r&AopW)tCzRQipetMFP?xj>fJoCb!~YH4?!7r75p!@ofU6^ z;{%%5m*py%754m8y!xwEL0b z=0p>oUhz40o*?Iy#>Pg5si%QW47{qXLYJJ$u0%QsU0o5I_9Pji0%h}MDQ2aLP+Uq^ zmk|1*sazW01QY(jI!F@M*jYY)KbS$$hRw2|&lk7EF`EV634!qv)7Z)$uIU)1ceT%4 z*mxt2n)!kRj}CbFBFSWc@4urB#G(ROR7cD68_cGC_%815**Q64fo-5D_9d{nz;!O$ zVJ-p{9Zj*9#vSloY+*@k_qrrw2L$yI?)K}c#giPb)V*c;QNtY5WJj=2>iGUN$P6Bg z`z>!#WbkUy)Gqx8L3Xszxktn^PKd?YuT1^Sq1q>F(kyf$-v~DwPQ^#`5*IW{hW@y}ja93^RAS+r}}A zvd#?f&kj%}_&CSYrd)4B7AbWZy^x{k6)1L_G^eBlcH=G`^euNKB_%{bLBV?P!B-sC zl_otE7Z7MQsCMTo*sER57+p?XUI*kez)A7pdS5&E*_AM^Ec__iEFZ%D4*2O7hzG`? zxT~E_=q`hS0Tl!2zZKNr%Lbv5NVR>XtGWGE@WvpM)yj>S68IRcgKmojV~0;Fa;9UUDyE-r3<5%?S`CicZ9ejwoQ$v6(1^wK&9xC3PDV;garzJ?g|2Ohoh zjNm2QigY{JpfM?D5M7YH@O`?X=a53N7#-u5l{}Ddb@3c_?bRoR_oO0j2i4LTxC?;s zTv}*1a2OhY4eqkG-+yn|6@uQd+OIkR3(fxOL17P9PHAHIQp3ih@X~dChw+QprhSr7 z362t9Ds+?(AnK5+F@bdH$LUVTWi$L8*b^UVCddb;KX5ZK zk4KFT4V>i28^an>S3XCZ9FenOiMtb~*DMgl&V9_HmFYJ-(yL3sBXbK7m2|8Vj-TVpX)bET% zERPEvRT(6Gd*p)1DqI-B`=9@W565hPGpCCR2@PfTIB}%Yu9U+dQ-7oL9+YC3pA3<= z+71_jx@zuNC-q_?9JCb7Bxzi_!CZ1MmR@*h9G4I;<1Xpuyko3RDQ2Wjm(pjog;r`A zl+JAxfjmyCbN1{!ho5Spz(OHtdTtUqo&{cE^&EUu?7@pe>1I}F0U~L^0@yZg2>WZ4 z1et4ygwbi1iJegGJuPJm#Rj8vLXyajFxCvAV7UWIfg|@HhU5RhwwyS$k@Gkd@A0zW z0MnMeLvJxsO4nT=#*qucc(*d$anlVV%CMJosxw}Edu2D;8pHH-=C}!4_o}-)H2V01VfF;1da+2>ZA}=-KQkcJaT17lj$U=#)I3i`e|jKU zw@qbhq;Op%8D%~|c&x68^$7zBY%)V9y1-X4r+A9~)#;@P{JZ)&6dngB^0Ix+Z*HR4eR?@F zyb;G=^ZXB@d5He-NgN16w>BTpW#dCeZmNm5|tP!aSb&p}}=js6c^ z0x3C^Vc3RTo-X+Z`1JRb{LO?PH3$GIn1593$nkGMgjQY4kC)^n9y7Z8xI=e}ldjsu z5T^jA4aC*Ds3Y#piM3vGYZZ%vX-?lwY? zZ4qAM`2T@VA@*6gJ}(7qz8kp^Tsagq>BrIB{he(ue%~vu*NaADt1|Mj=B)U`#?q># zE!4-GQcwX!nbN#IZn?lHX=iXjGi|GFO5iR%wuJ0_;R3U&dnb{Y!V5#cWautYnZRqF z(V@4u)GD9gMvNys(DCj0@CH+g+kud(-)M2|l&8iz?5?A<_ieIA0qtAzR%b4F_4N${ zZ!9XNP7P4rz_~n$Z(gcqm>F8_!^yRQ#s?MY*^YKPin3D?k#kysoS+xld2Q9a<=~6v zO7NAZkv0@Rw|7J1n9e&4NY8L;LW>%=68;qQ@bQYh9sKwYJu#+;Jk&Yu*cy9LT8)KB~gY{^7`u9OcO32C|-)ZqijCI)zC9Z0gpQv#t>j{<|SC7x}$1S|=uVzUQuNX^gzl z;~`r@>pXp&adx!ocp)w2YaCvOcy2c@B~UYy*x^$O8K0-GZcaMFt`Mzm z$A4^j(vY=$l%13m`;!Epadk)f}AE|oJf zTGgLEe-!qa!Nbu9q0q1fq2Di=aE8pkQ^2u~g785yiu*uk7<=3|&8y=V4j33eh6xDV zl)Z6i-S!iZ!-SzlNCk^Pib?93>bXt2QatX5VzU#nOIZ~9W^}kuK+m7ilgoQm;&4e9 z_AbL>{5H^ZwTx+wQQb~^A4yx8J>~7f7HM6;y2Cg3vZ%sgyomy>DqKz|rH@Z;=o?ud zJjR;?8R)wD9u-6w!$}qrF364b&uyOIuz0Tqb-1I7UC3V{P*-T**O<3Nq%5mlF0fZ!oC^^qj9{QMzqnhX`30p zb+9q!ki)&>G!REJSeD`pkE4=8Ayr~i6Ii#BXP*b^V?=^WgpwRP*0e=4Kq8lmm%~z2|Svwy5gO#+m z{ZwJ}4}cdNhPDI6r1{xS-?KNG_KA&eA|nbk^yn zPb%xG9jIF+OFYlmY2g2i_gPd1npnpD%Yap=+EGADO3E6OnjDCU`@FM{_QUf9`yj^2 z`XWpiQn8&kXN%~S0S*>aJLb%uXSQX)*~lZgqy3whhaEAFcfYAFL8b|m&!)a0wXQF` zG3jVy7s}Gy%CY^Qhj(zlcv|qep@(tyj&m!5KjeY&8B`<0(ph75lOiCKVOR=5uP$1` zIQ;R#Uvw%`S~FUWfb{cNr#gHp?Qzb&0j@kzZ(JGCON`0v4y(Q0gViBgg&_J4AtVVZ zNQULhQD}(E|9L+hs;%%v3xN^_{N@;3^UesN&g? z-q>rH%G~gd*tOX-Ro9-qlmVK<0Kf8J0$?k4q*ej&x4;iRm7?7m%dMZ(vv*Y_HtD3l z>;=2om*aMkH#&_WJ+Tu*UZ9`=d-_mYXYLh2{j+;Kw_@m_hnssrprRI;=4&@gL*66< zsqUfO!lOe>t^;>U&$%R|y^GGudDO`3qAnXur#Eqy`ZgcdbjtUOe+ag$Xk1BYRD?@kCH)N>pJs^?m5=W|-gA8SE@dBcojzR6 z{fy1n!umdDSoq$}Q3!xP%6E%O=ZY%L&%hBsZm-r*3tHz>UO~8AZ961a&F4cg^n2+V+bU5Ghz8~E|4|@Hun+DDPJAlL zwrlQv4baKLekb|rO}eTbK-gus{83e>=Gj&C`)@L`&dMsD=+M2cRk24){0M}BIuS9U zxzr5Q(HzkzoEB$u%LYoBL%}N$Jwk-4eTl>RfCC%91p_$$+1DX{2puW<3AsMGdc7Yz zllm==_*IJP7kcPQ7}ZM)6w*?t!X$0&%OSMYZpYW(=oS~*7lNW>{#*&-Jva8Kwh$PD zNb`5juhB9q95H3|KTy$c3Ms}4xty-qaKE@0HUWq#?_*SmPJCfA>d;n84vec7{l?3m z#cN{3D#(%};z2c;WyUNH*<9)TU_G>bFUE(g2{(TRlGY8_vvx%;En;t+@= zcy6N4{Qeu9FlYHy}3VQA#Wr=t>x`Zp9z%YSFyiF$1^?I1RLebX@kjgKA@~E4 zL~3d5wD3C9r+f}1dV?BhUo!koDz^lR5M z)R0K=Se!RCK)wqug51m5EQpAYb0eI({j$BQM+7TT&9;_Xnz*_Dh83xA)WGYj3x>&D zPoDRN$$R5{3MUjkQTT0HpYQwdaOS<8e1_if>Bc~=2bPwkKX`6xMBu?xV|4}oE0%B3 zE_4K2S-#8$kKI3&F@0;M5$VDAhbo2U${bh^WWPEg3cBS(xIaw|Fu@B3lU#0{q9qGIkvDpNi-|ycB|FbXJT!8BO zqhSljQ}XFHqMc!C8)0-m=XUEf73TE#jRzayATqAelkNxpeoV*;2?RR+aiOu%0#{Wa7+A;Xc9V{p)-aKXx$W0bDSqKlqYvpWFI#QZa?W4934s zsupk(gTA#z3L&uYD;dH^;K(96Is;_=^C)M~La$@S%#u$9%9i;a-G7W;98A|S1m@&x zBmq}e_JjwrI?ucGku2$S3fZ~B@6*05xH8?=FkGlkggEPCHp+#umF(1V5Z&;3XQs1F zjLY#ad!q+#(@bj4l5}ZKvhjUH91)DbnV`i_i;SEY-%~d{r&qduS~jDs3?ugrcC=n< z_-4yPsqS+E4+EQy3#a#0_x`7~Zm?lKhvL^i3LR|+aOqD4`+rR#zTTaZsP1)OwZ_Io{7d5)) z3@fbBH94Xo2f|A~f6_#Rszypj-yEaIcJOJnAAft-l;QqXfSQ)JeRD0=cITW7^c6#! z^)$SuoAiytS2URmKi2o`o6FX7I~-199s>hju4&!iYiVg{aCae=8w%O(`^7S!vu<)? zj3*vqlKN`dMF!#F5b?WV(W(_Suk@xwr>2J8z-Fk<#7_RLh_OIpv!2GWv$MnDvLyz0 zX@hSOR2=tN&~wyIyKWK;MIutx^D)8|u zogDQGYDPrtJt}cIHcd7X<>SUIqdl18N^p3g348RcXUjpvNOY33j-Ma`4=gd=QRt@58c&b*dZf zQwE9h3^TES3MWHGwqkOhurtg~8oAb1&It9PA{wiM?HN2jl-nP=8JjFW?l}znw3-u& z-II;Ci>EtH9X3tpc}cNgr>whNP~U&v*m!yqN1Jph(d)vSpVuqiKfp|#)nVw{hsJ8t zanYe6hHe2+1U~Ak6Bm>hZ;BAD!Rl^!apxUFf{_*P*E^Kc9C}K1CajbRkK^Owq@LL5 z{yzSaNCrtIO-)TEvgMATD{GfODx7q#lfidpCqei{!|oNjM{KfMjT8w_mHhLMm|f0K zU)kzKGV=u~@-HzQk>6rFbK6m_=llLB(JE=gd)$AvP@OTA$0$SM>G!GcY#6*H}L5Tv6`9O8>S?@wAqsqKxE;x3Jkrr zK7Ku%w2eK+fUy%q?!hK6uQBve_TPazsd=u=JM);qSR>%Mk)#r-MJO5jm)iwEIl6g&o3PuM$!g@tuOmhXvF zQeNT^#b9q^X*GTQOd0+kgW=l+hOgy?7H{#_h=B_FhuH3}ZLl54M@=RM*)PYnTSI?2 zurMK^!lQ(3jyyaP4Ve=ucozACNo8LEt1PhIxxJ`cVTZUQuo^Goz14Q;fzLO^2Y(Ln z@zEHF19n!*W(Q19do6wqfr%Eecvic%Fv7SJ4dA)Tpbf8jERr|vQiXvv7P{p>SHN2n z&Fpw~X!(Ok|yzXi1Q!eq|Cy8d?ZnB_01r-r1}PzBVu zi@1{T^~^V_2nYlN(qh6YS#}8HK+@9UAOwcj(wf2j^N+^Dz#kQdXYC`fb0JpAJAy1R6hQo&{GI zwFsMk|C?fr&uRbF1im&HtNQa@%sQhtW%DAP)%W7uR{fx(qZRQhs;jIiY{{E=a^7pT z#(Cvjwb?HY3aD=ohrfa;uKu2)1d>+$|JBu%$3xk@??@SMXaFzdu7iW$-XZkQr3hlCEHjgyWg2NdVim8Dd9n9-b9eDvf?iz*(`+P{l z@7XO)V-gX=iT_4J{RfINFQ*r>XvSW-oqTs#G=N-oZ(o@Rl1ulLyH#x1$k6eeIX!8RBm7Gxhn342~t&UzX{YNlE?pI>D&mwWG zS|SQ@#G4P;V2!c};SV~+l+(AY4>T+X9j4dK8(Q zWJ2HWm4`rK)Ww(VcG63w5)5!t{r`x!szixVZhEI{prCZpi~&ObIp9ejGN^~TDkHH`W8J}dZ8zp338 z03G!n@o40W_>I^4U6tEg*A={52J!dz_wZ>MRjqf0JRpqU(9lpSwd%GPXnbv}~``P~zip=U!$IVR=!(eC5 zoH5&4or%9>6Fqve%(Q{r=DW73X)%_8?Wy5miB61u@91y7caCYC7 zYg{}$Q^ZlHw$A4l@=9QBu_nzvIvm&P_kHyeu;8eX#fYWq?Vs`3ZLaO|y0-+@_~X1Sg_ZfL8&=2d+g?o~R&!D*02%mp+%Vkq$~U^X!^`FTFoXPzI&P{C>5%!lB5Wkmf- zZjUu3afPe!7i+Nhr@8AEZ*fq#re6MD*}U~+chcvCVrT-53!WO3pp+!m6x$BRNx%>X zlAPAaf#jqcT0VDX0fO)EOOwrn7I7ncQsqVb8kp3wn-5z2fE*n?#K+IyFjQ>8?eZ~Q zk@Bat!${dRH@C8N>rnmTp%fYK5=D?z$V}Nr~S8D!_^U`WI!Y z=;foZ$3qD%#wnkn36yF?i{2F3At0?wurvrUQ+GY&Z&0YVW<3Ls6%1?lY8Qu_TU7aS z?!2kn7jST6swFOt-nskAeX5zNnmA%Nmge}3N>%<0JncCI*5j&$L%`iqqw02NMD%NX z%AYlU>6)3Dc?{!Jo=82|eXS7}hCntSv+cr42_Wr-DoSqkmk?dApuiAido*6ka}qze zgKUhPPboJcd+eyLIc@tsvD3lGOdKH7bh zyT`rSUxx@X?|6%QIyY4kn*%#=FJfSY&>T0j^QaR5_z^m$4FF zRM;KgtqL5Ja6$<}7M0`7MXv)G9$$l@63eb!iYMi=aPzv5m4d?PT4g-V9v2y!Dq9HY zu{{2CYi;hk$-y>&XEoRQx8=H+YTvoeA$L9W1Va-+C$neL9)p$!ydvxi#E{dWBFZp$ zYz@NvcopC4t5e03s&eb-@_GGOfX+Y?S*p@wL2q}#;%92L!Oe}0B`CX*p<|DjJo#jY-3o&@_A%seY5JJhUkkpsk1Wh)Z zU#)L%{Ce-65SwktAxt38zOZ(aK2s0T{Mq?Sxnbw+9UrIV8+c<05PGbChw}%V3?RT? z+yYclpzdqU>*!jLM=K*{lwgy#j{j+!+%nNQOa&%DLNdDR!fk$fZwmt#C2YGm=aO8L zvQ2K`zaf%&?O%~Zf!r3ReGiLsnVFs*@H5}e?QV0HsX1meqLS{8f&e)4*?h`nk0CDh z``-_>s4}(vvWvyD)9rkqfI`qj^8{!Vs_FJiOry*z9!)Jni~SdjD7cf~tp!z{k=SD$ zf1tx{%Bi1hjw3D<>4C=VLMT3D*p*Ozq+w{%|6oGxwVK<8hJt5q+kVb{jvdK`!2Yr^ z@nY<`Vc!42n18_);3;?t)dK*Gak;eyV9e`77^6UrNn92xzJ*>Mujzj$b6Kf}e8J_1^I1YH>4661uNdMhSO$%xLjBI3qmz zfURteIE2&#+-WoDuK5&ju5;%B2p`z}LiYfnxnOO%s3~-Qw$Quhkm2rGKs5ox zoB{Xsa3D!xcJzu}0LG^r!FXn>?2YlerB*aP#05M!(cCcuSi!j!2>OszBVBBz8ErN= z8wCBj^oJWVMUvb8i&4ewheUG(^iU`YB^>)KGq_|ZoS&wMr*d(S%O-$XQ#_irKzT?u zVVv%zw*p(d=MWFe(ZR{9#_fRiu$Vt@xjqbN-F~)h+q0`S@uWj9$TAqo6@ySP5VusO#ot zb6cH+_b7f-qgA)j*Y>@uiH%ZWNf+6K5ckZ8>(?uP???R@&x=45GZ1-Y_aJZgs&f)+ z4oL_celbl|-ksT?%9-)*+wh!oo<_e%*IYxOXg&hF1mM6bl}En<2$$)yHS1q2 z7dVW*HS0;fq7RhF+Y9a?k>z%BO^5UhjJ2P_((+~WM~D+UUX0#EM*|y{uu@{)*qT74 z3Y$7BkrKajR-|T312%P+Ym5}d;(y*FJhZO4a&xfx=C5V|Td z!+0uIWJlI%AvEb=nP?Ylf!`4{nK$v9WVRW;rTQSgEWZ=MgY|0f>8zZsP3+2>r-L`f zRm{~rk(b|3!ekyc#)agV0 z1yI_cSHNg=cOQ7Af#lNB3w4h}MjTld_mehsc^ zmR+&sBkrM)V!_~OkvTd5Gv66`Sq>Wt`&(%+;L!7(SbgO?uD#0L-RrCSv}{A6fSM|J zyP&o^W(-3#y5BU&2R&UPTCHOb;qiN|D=|rneujW}Z4I zH!2T_tRiA@A^PSC&kN@DC6sVN={N7Swy?txBTnO$dgos2$8wj@mJgS0lqMbsW1m*C zf*uLEv^>4}koPHqNX9*>GkemskLx@+c*wI;*W(&Wnt%cIwjI1n* zDXjkgqs#!;`KYc=e%$AmP|H^qIbW%zcXRAA>mLIy{2ZwoyUV5~jI><>DePZC3VU)l z7AMEplkfyD@&V;j0uh@(_U>%=qYM~xzaF7OBWMX885KZ&<*|*|W-DRoXFW=< zWjwMWi1PbPoXO?B>?^na@FSd1uf2^y!rt$1?=3}ed_Akb>khsaavKBSNLC8?E5W3J z(+gh>ZnJfbfU0bkCbgG9wpXxhLS*6`7E&i?u*do3&EB2z8Ld_Opn`qd@awg8C`fe6 znn_fy=LVZ7guA6B8UphG7z>?i(IF0x^~lijmY-TqNv0ZpzU{=?btP=6uj1U~n(FzM zIhjS?GA9pNpO)S8-j%8x;^Oq6Scc+j%@?8p`@VWz52JX2@JHgWDm4`Z8xnySN6RLS zm9YE5fj~66XA0{VsbMQkQ#I`16CH@GtX%}-zSId%xBXLb_n9YjIbzKnWHz=mpQ+2l&)MVh5ysd)`nG>47mhoU+9bGt|?L{viRqdrM3*I`B)l9Ky}){DS^c&!gS zu0#Ab9*Sr-)^V)trAADTwUp`;MiFHWmU@Hs z9s^n-{QeS>@DfSAxG(t+G?=P{>~KWDd#eCE@}Nou8#%~3g9=+ZT?QM5Ha!~Uk+qBY zQS=MSK5!0BHo3B9+kBkn`3pV00(=le?Se3(PKsst@$1OgovYi;<2|w*0!7xO9F{-- z27&h6=d2g6frSiY*nXJ|Gm=VigY6?f$V7-MAW^+|%F`N^BzUEk{M`MfN}BdJG$Jdqyy zxd>>ZE5N}lJp)o%bcdeVpkNu)D&qPb9UY{@xR~#zGc}v^0JY-m*}wX?+YJR)FDb_{ zDc{u&-Uq`aFLjM|uu_jT5|kO>oz9m+p97+f+Q!Dli_pTFcP?G9NNodCo@>uuaVUJaCIHqC@o12j zy5t7Rbgt(`C7{MPrs@3tR0bf$x-+?2oUqcTR~m%+*Er%x#v+E;e5 zeFWy@4*ucxp6;e>bRjQ-&KaiwzOL+k>o)<-MNdV=P)ytKz5DO$(S!|ExnG#=O^sj{ zw@L%0Gc|`JB})X5(K@{r-Cr2ODnD(|8WKM$(&Ud6F*R+sA>>}+gTo`69`Xhbms(qZ z9?qL!SwdM^7kUaGBpppd{WJw&MM+#cr<@$SmJ9)lxRf6PHS_+DkUaAfr@YTmWYY%2 zp7b$mt|vAl$u;RWCxT9|yq4di>Q0n!9XZJYvPTZr42F@yJ_H&Hy^>;#5njyvD2>3P zQHHq4q2mt)#Lwf~`ul_h;>nv&#MOYs8}&qpX79RTOK#^qa5P=`_L*d{dW(!&q>&FEy{z8 zQP>o1ZrOG6b5JSoRW8sEJo8%bLiEw31N##Rah(+z*8rJ(&a)qw%j}2yp|$4>Yz*i+dIA=45jRXmm956X&8_6)H3l}9f5KwvtWkDhJsH6^Z!#^`#(2Q(|$n;>|W~(SPQICTOM4h5#t`8*$I^ z-3i5D+S@HoB<;17o=!WpzURf&zPAqdF4^>>_Iif@d*pP8VYS!I5nSOHAO+uP!t-zd(;ub%L%@>=I2%47}wnTSy8CThnz<=r^a9?>Am*1 z<|gOnf=NY@f>b)vL1dER7xRv)dadWG*KC5d+lfE~>ds`EI9Hk+X=!NOSj&;u`BQuY z%+@S?1&F_sV7vUXhyk{EmUGg|J8AVa3v}qt+F&oV1)es zSyBwp3Z_WdF@hA9Y@E?cV7cMbct%vMucxTpoI16;mU@5!^lp~8()#wqMN#vrqiREr zoTONl*<1f~7Ca`W|{r1F9WuC6}x-I|Fz3m9U`ry+_*)7;Cgt*woj zm@u`$m~;9BouqM-*AIby4aU(%W8P92`)%AtDJe}l1?(if4KMOMS_6T$6mlRBEZ?M# zeQ$fC3G}X~Q3A~Azn&m4CC@M1G2bCBLhCGHXywB9OVS%JOe6k=(PxP7&SJ$T0Fx_V zqcZ>TG5tvnXe%PoajR+ zSDG+c)c)7E4lLWm#n8I_jW^kM-lSB~7D*lsQWO?gcd)k%t)tG*&i?p0FsKjq#sfFv z0{t1!id#{eo13o;=xV_^IO_QvKWQD_?BfZtsGrb08jr;h?t+U@W~f#TA5uo5gq4Zv zfdY6+IRzaZy8izDm94qdroq8G$3=#?4@2^7Fb2vF60V|~K=C+(5(>ZV^@bQNIh*8b zQj`2jIQowubzC*ggM8IzrY)SU323q|pEM-X0}l4V%pE5jMQ0Axv)EX3AX#hza2pj9 z69g2NPB$4oq&m|>+IWfqZf%hB#^xU%AJ1p0Y}K8}eZ_R^suI46VCwYe&CJuQYHG%g zqcf5n!8_%qlD6wOe6<30A4}SyqTGqY~nxCJ$12O4@|EJ zf{uV>Q6WSE;abvV2d=o5K-`pbGq|_v6iTMLr99xkKPxLsm7E)aK#m*}DeQ_9Q9F(P zd;GXWMhLxFY^``-L~!S_$I=)c*a$MJt64qATqw;gEM7XE2mXp=8E+jQ6?|?~>nOJT)p-AL8MAI_fxjf-s%66<%#2kb!dR, + /// Scheduler 发起任务时间 + pub launch_time: u64, + /// 所属会话 + pub session_id: String, + /// 会话设置 + pub props: Arc>, +} +``` + +**Ballista 运行 CPU 密集型任务** + +Ballista 采用 [Tokio](https://github.com/tokio-rs/tokio) 作为 Rust 异步运行时。Tokio 使用协作式调度,异步任务会在执行到 .await 时切换其他任务执行,使用 Tokio 须遵守 `"Async code should never spend a long time without reaching an .await."`(参考 Tokio maintainer 的[这篇博客](https://ryhl.io/blog/async-what-is-blocking/))。因此 CPU 密集型任务会长时间占用 CPU,导致运行时上的其他任务无法被及时执行(如心跳)。 + +Ballista 解决此问题的办法是 +1. 采用单独的运行时专门跑 CPU 密集型任务 +2. IO 密集型任务运行时与 CPU 密集型任务运行时通过队列通信(创新新任务/任务执行结果通知) +3. 当然 CPU 密集型任务代码仍要遵守 `"Async code should never spend a long time without reaching an .await."` + +更多参考 Datafusion maintainer 的这篇文章:[https://thenewstack.io/using-rustlangs-async-tokio-runtime-for-cpu-bound-tasks/](https://thenewstack.io/using-rustlangs-async-tokio-runtime-for-cpu-bound-tasks/) 。