From e30b666e816df2c6ce3d76061889c6742509deec Mon Sep 17 00:00:00 2001 From: Rizky Date: Sun, 11 Feb 2024 10:50:39 +0700 Subject: [PATCH] wip fix --- bun.lockb | Bin 3761 -> 127358 bytes package.json | 5 +++-- pkgs/server/api-ctx.ts | 42 ++++++++++++++++++++++++++++++++-------- pkgs/server/load-web.ts | 38 +----------------------------------- 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/bun.lockb b/bun.lockb index 1e0161a886bf738685c5fc7a929a397cf677e26c..6b32bdac60b6af7a4f12ceb80d993348d43a59dd 100755 GIT binary patch literal 127358 zcmeFa2{e{n`#yZrt)wDD8A67VGBz7CL?mMwGG?Bq%u_-c%9MnXsL&u4p@Ar*43!2$ zlF}d~Go^`dpWOTRT>tm~d!BAR-}=`2)_TwNUJiR-`#8>XpL@9Wb!k1XAispKx0i&q zle>hSyC0vmuR8;}#9TdWTqXLpMqOHpRaMX zw`Qs<+*aQc9TURLtCcUXe_)6PwIY$UXMjXMT_XJthEd9?8k7dp<%J|tn5UPMx0@A- zbO6;bp|Uh;z=n_m;Ua`9DPhsV|)HE#6 z%GK4$+lS=rKjTmjk%8~*Zw1Xsfv6p{uSJzy2pxPpTU3UKm3 z5*a9Ipqq&*A-~H}BhYh12<13b5B>H;2<@!AyqxRLVl-($(f(9M>>+0bS!$i_V^`LiY>5Tqb zgrLVyL1qe0A|B+iA0ha8MZv=e(f`8kp&#I{5Fxb7LI`=1K?wfbQSza`&k;gCeB3;z z^W){@=4EA1B00EvSVKkKvKjw(5kfmt?wNeuK?pj92tmim-QLy7!O^D#wS)M*?cDtA zywJRJa!2#X+sE14*24zredV3ueLx6twIc*wR}Wh&Z%5SL#n#CSh2m!Aftc??Aed2(^J z@`rw@3C`$UL+xN3pQ19vk%`K%UQ-Z4+1l0D&f3Y#)}PYO86nIEoS*;9OC8E5J4^Mhuj{ir-WKPc#j5Oi$q z>^#Msyh-5432iub-o8FguHGc<-^S6()dlevh|G+Sqm{Rqy{nZ236&v_&k;gD1Vm@_ z@jTp(;zCm_Oba2j+kz0*$6AEY{)X60{WpX#FNG-W*bu@v1)>4)Mt(gdX7U=iR%*H* zwv@7t2Lbq&&mb!OG60tzYszkgOqw@nAmMqYd89%8i8gtv#q7;!sBj^9rwDbTF`j4cgk*-rmm3n}pVfle@Q-zmJy{ z+NZqj>s|cY# zu5Rcdj%=;oOg#?;=OF~%sP0VtYlNWp03qb_7D8ALmnayEkPnq@^k;PUQR>~i(LQYB z;j@XFGi_m=$grLiZ5On+nso<4?;^ySsfv) z&$S34pPZC39YPqN9~Lul4I+eo+(CYz-OOmAI`mA0{5OSe4&6oSt(|kUB3wf9ORwJ* zeqWR8l8^V>=L%NGf0?tvR4H6YY}Fpd{Wmxct_gINzOr@eV%oUGRcEs-bLL+34Rat1 z>yiwQ z^#1X6?D;}LYeS+fWq!;(dCKSbxUpj_gZ)b@dA6OJn<6it9yiyG`{iA~M&kUIyB{O1 z_eszsr&%;ujaAp=4F9^H>uxU?)!NS#PP?ZqaI#A1sPNFeeV!Su51)^u6|``L@Q*Az zf2KR@>t;6ob_t7B7X00YLWe)CiL~l)XP1!sc5{4_pTg0gE#Gv>Z9lkr+v#+DZuM@M z=Wo`KQF!do6G`6S)uHDk?*(wY=4{d4cD^t1?FM@P_nA=+WM$>VkG`H~=XC~JmTIVP zu{BhlKe2o}+nr@bJ2Oa=gWv0={aGs6V=f-E%Q;}Eb0Q(^ZNub_2Zz{yT<+`+-T3`D z|I*^z7Up+-ZVL^ zqRH77RI+8Hwm|vB@c=7^dl_wySB3cfP#9XAxccyhoGE5U&4Vi^6=7{|HBjYlY2kNPH$pYEYsY-zbzNhxnxxl%oQ^X_5A zQx9%GZFLIBwmNw+Nx~#vs6<|RzK7iXPkQNP3tZfDs-j}rHPa8vC|Z8mcfL-0^C?nl zQIC|3_v)h~^i!iB566se?f)<)9TVl>AHZ?7bg`D4qfEMe;PVqqcP}ohJsd3gU7&pB zYV~&k?#*=M?8IOT`)^|tx1`OI>PoGbwFF5T1#S=(*~;d}9eOhG;zW?^c*2f7_D1mo zT*lg}H4UFiLicFyT~7PXLT_Ne)A-H+UB>Hv;kx(`Mt0if03*F7E%TAOw@Y$GtNPwO zX`<^++2nrw%EBevy9^f{UGe@z$Fb{rQ6D8En~b>gz3!&cgsgmEE_A_B=kink{#MS7 z3s)@e7g7D-bN8K}{3&VeraM3EOZ_UcF465=aZ2Shjf=_&wSDQ#KZbsOt17k(WV`jM zq4md-P_e_}P5i}IUwWN!WR%;xLV}Tdf#ZbJhP)?dX_*F^4Xa+?@Bie+#^W6E&P%({ ztnl>}^%Ko$p5xn$jvf#W_?m69&p=9}eqh~6u7DgLk}dn8vr9|*e5TCACIS-9Tr>E! zuhHO?z84K&`i|Uizeg=>6^dtU#`kU4XyA5X+PbZsNxokS=jT83;v#=6X7BS?56-cx zIxoE)v#$F}V3N_hy$A9;SEt@VS)hF5j=Ge0~}Q zUThk718$9PrjyxzX+8Z)t?inohow@*j`3Hs)D_k3KdS7Izw$0)_eHfL+u=6BM=KAi ze^#tczIEA3iToyDP3N+ZyZ79&|Hk*>lA24+UZ_^v*gRS_>XrP;v2@Yy_IhoJsptw|TyCz>d!K*z!pdORr>9IG7(HC` zdU3OfL^D(G9OJ{uWppW1C04!7X zDkC%_T@^lef4R~WcnYYzh&_vNy6F0OmEN&QORrQnr!sxO$@SBzooqR_ zSKQCoE}G~aV(z-MmtKCK!_m4A*YLjVAvSubuX6n9>JtU4C8TI%Pd_d7e9Gva5XAXW zVf}n=lS_+YBck6LNjTE|$lBEFd#Pl!VCY!c(*N0K@&0VEB@uqu~ep4%(eGN)GoI`nw_olE(4l!l9 zCu=ELJHyjVla(?ENwK7apB+|}$S!lz^@M6KF zaD%%88iqCE$Io95-s#8n8t=n+|HaRZ2H9=0X~DTVtgrXod2S=kay|OYO;wMWbHSZ) z&2ug83|GIY4t@GKyan%DUZE1{jh%{oBBQ6J(@9*3c>V5^HobMblvnfe$f1xsnL#H= zM$4XASsg28;?8@!vQ+cw*d>PQcbvDU{M`NQ$-{A%D03}lX}?|jX5KkvRobDfn(Zoa!a|%*mkXwE+W0esxX^>*NqLFukLLUryY+ypIGPK6#FBOFyVTTDx2$=``uW0l zUe+M{n$_!8?fd?D(*4V&%DRJDZ-tod1nq8Z&8arZXXIQzpl?4{#pOg};`y$`e)vECYyK4&2OOZ71GeIe~8Z!xv80->G&*_goj@bdb1DR z&<%CH{i?7i|DjvL*KD1UZ5Kq1UhZP~)T+4T&2gDK^!pfkjd&DJ$9>0oDcWb`M3$Ak zi8QOV4A*4%RDAMI>#L91>2BJa7Djk$#jNUWcyxeO>o5;jR_~=UK3=6~Z>lp)&jlJR z?2WWD4pPg!{Mz-qr9p1nrYF^5D_Mf|yli{4MDHthdAnM9IAe0s!0QY2jeJ0aYz74elR zeBgivHHP_mXySo?n0sKeoqyqo5B@O^<}o#f{Z}IbdhHLRHg2qq`QwO>1~&}K=uFjhdQl6h<~>JjS(O6kEYS| z+ySJV-Z7e#z1gKu2_I}P0K2I52hVf}#N`kB(-|HSP^5g+egf8YB5zJvLiXyKtx zfz$E-->v?>2J;UgzB1zD`Gf2Ko;h;|w`)Lr*#Ggk<9cfOQ;5Hb!l!oZK^yx~L<=9D zA5ixv{7}Tl`2)Tn2vK3!e;ML$M*e||@<6p={s`j3`oa05Rsiz_&_^%y$#8oAMN(87 z<`*G8Jpb_grB(p*`w<_;kJ@#I^)X)%J+$Dv;h*x&5Fei(K$F@zfc>Xa{Npl??{|pX zze9X<2AUp!;GiN^hWTsJL)VPJpKbi{h!5)z#t*ny_jf_yc0Gu%g7`T9v-K~EKBmI{ z2RxX=v*kM?K0ZHUjo-x%_i_BWh!67@muKt$4dN>zKJ0(9S%cW$8ualN<{!0wA$Bm# z_d$F`#D}#D8n_<)`j3X&6(hbT!9TU@81v!dH{=g|Lk_6z2jkd}?DS`Y%9y^e5FY z?02@~--Gzdl>7mAw){0LGtXb>Keb$9{3eJG^Z!rtmw@<6h>!b^ic}eH{|XWC{sZ}^ zb__6|3;j`YJ@OAu(N;L?^{<8a>WELRU+@El{hvepe{=pH`Vaqj9A>=y{ZH&)ifzXK zpT-}7_{9FB<2+S{{nu0Yuy)Z=m}MQ<>_!|%(<`1kJSbNm=0s9X@lU{}3f42M{#FwS`hqX7`{tKdi z-v{R(M4g^Hv-Pis_!}txu?FDp4EH}0@nQeL``2vupEksY{TIiLky`)!+%x+Z_ysPG zi(0-j;;T{o1An&fe|3lt^9TEzZTxiTAEV&;0~)i9e>>t!5%M?N=SMi=C-MFjKh#nC48?pY#9xQ}<8_1U!N)%tZb!3x=KB$h8=Rl0?E~g- zL40lGAJ4zpj(;5D!}Awn1x?%!DF2gT|MwAp6XF98_78NNpvo|RF5mxo{++FVH3}bi z)UJI95c>~Ce0YAqxI^w?9#LbM-^Pdj?Kk41&mhzOasBT!a61A1zvdrsW;^~Sh!67* zk2^+c{l_6b>>oIH7^&sgB0j8t=nu8NK^ym>Z#Shd@01=M#(?a%{Km%h%ZgZ z-)zs1O^CmhkiXgT*#-aI_uHL_5AzS^KlFdL&yOU;SETR}{jYI>!ao@J0(*)0uz%q4 zY}YT_3KB_|z@Jh5{ZH)A7V+`^^(Wu2GZ7!=?;PY3);`w#T?DvY3*y84f%Z^0+x=t3 z%9-^CJaiPF{u?-g-x~IBiTH5-f&GixwFBaqe+2O%e=u)>KimDM9`RxQVLfVN!0i_c z&GaAq!x&I&n6HWW@cf6dhuCN9KLhdc^OKDD)W(4Qe?okmKj7ke^y@zwZl|_t=KBeZ zAFSQk`p-ptS=4{%H{&1h#}FT%AO9qOlEQ!Sp%1f-{{-Tz6Xp-ZK#k%2y+wSO|G=Tv zH?+lk=GA}2|0m<8Md3sK;ljG$C|+P5hi9Gw(mJ|6DToj6KY!Z)PQ+J6e5^Oy@e>uD$v^PmqP8E{pCg5j^EX?54&v*h__6=l z#y^4hkUwhY-GAnPli1Aj3+n%*{~?GE`!Dv7^Md{S9pZLXh`$-}Veh22@1TkK^U=o_ zCB(n&M105})ZuyXI}OY?M$TdX!_U3h z#-Byu7UFNC@If2r0sHwo z#PLrdK0g10e_a1}JY0|4ZAK3tc>du2&o=*Fhz!qvnESIa>^~pz)e#@&-)zPZ^T!Zh z9`PY==)-Kk->gM{{4=5OA^zF+KNj&}{2+GVQria{|5L;#jvvH8jbZ*K^zxvH{6iVn z&4wR^_%MEdx_{OoKAhjcH}s#{7;w8OihrDUT>ra1;C9j*|C&G4t{u?E{BXpF_`yG1 z)M{Y<4a7%Fa5{fXh>!D#e*H(o{2s)I=g)jf>)HC3K*8hhC(KA=$v=Ai>n8Sp8}VWN zLEj<%+4|>44_|ox;(0&Y{_jR)Rm8{f%$9!&@zE5Te*QoX7yQ-5fBX&mdy4orh!1`t zf9N<$m0|u)w0L3t0txuDjsGwrL;fKDki*&LzY_6b{s13hqIMs~@zbM^Kd^rRAN^B; zS^GCbe0+X|z6+s?8pHn65nmDc$MYZ8|4sw9+lDqTbcCLsKRAcKhhKzzs_9{1VuzaYLYfj^fT=co<#zYQJU!9QMq7=I^&`EiJkpTEGt{h*fLMB!t< z7^&rRqr)T4AGKW2#_?MtK03lr_aEwTJ+=OiQ1~!z(D&JnUj^dpAphVG-W_I}KXG(; zK~rFQ{lOZbHV3$$j))KEHz>p0!S(3Ze>B`K9r0Bt@#8i4k3`B%%zuseFn^&MVxMjQ zZP4Pw{vrO^^3NkatY1W>nhR}l{9TB=mBMG7g$CyDL=Rthet{-DduAO!;=}p_KJ4AI zirqJ~K{}aBd(qI36 z2x6etaQxAT59^QGykmXLuS9&9f4Dr`{!bx3e1E|_F6`hpi2ZFX{c`aawFze;6h{lNI)Yc~E}5Fh3b#0`8L*Y7lNyNieq`!6ozc|nJ|8{jlU4_@%b72E~LgeYJ>gvAU?c5KpFPm+4|>3lLyaV z;F8frjbZR{J}-7Vg7jvALbqywHlb; zj`(>0hPv5~Kl6@%_wRR<5FhVf)cS^g;`q}LAMyv|hwI?}?+mwXKzx*f>G=cxaXq#C zC7OSYAMmN|1NO5W@ge^(_hw_5zaR0n3GvU?|0BeQ=MSDYv*pjznpyvlf0%<<=XZU< z@ozmxqI4u)~2^!Gop|Ly4G1MGj)`o)TvpNRNyeuS}yI$V$2{Tp1|aXoIQs`uCW{}X=VzvQsc6tOp?4h$=zdsP)5%nK)XUlg- zi;wvJj^p~fxN$vhmyh@=$Um$fYJGzS<_{r0`UD;ZT!vX_V7|V=%=aU__HaG;_$R~d z^3cQE9r^!LK8Ml2<3}OB*T3*T@h|<`??(S^=YQe91@V3U1z*GXulWn(MeP|FkKZ-K z$KP-MWd02x{yG#tKKoOvf&B-V{Ppio|7pJc=RM57kNB|u;JHVwZ_vVgvgyqE3)bIk z4D)3WAI|^OK6kMX%=bckMZ}-Yy9a1s{e2*H${Bwv8^Y>5Z-#f&I`GeOD-p76y1NOh&{I9>C00-Ao%Mbn!{_lABKK64N z@!|Z2%lQ89@PFD{%;cZieq&wCS4Mo8|G4^Z*}vo$AwK;5?@!~WwIY$wBm9r~Mu?B5&>!=Q|E2%=)+7=- zg8i|7GsH(n=s)IP{+IsYAAg`v2!HH<2jXu=d=fI41Jr&8!1Ff(@ns2oSclXY=9eQr zo`1l@^}o|lr!+wS?=KSgzs3GL4)H$r!)5!|`2*HIuAP47OzS98%7D;LiBblHvNEMiMCdD;bJO?HyW6w@f`9ZbIc3Vd0pEf|qA39D=8zAVR$K!N6v`0+aKOw}6w&Q6dBIsIE>H#4x zJ4zW4c=nVsAe0>_=t!vtgnB0mI#cQaq27g3{@)P#;f5}VV=uZEqH78QV$5_dz3N} zp}vMv4+!P^lrkX1(||6he@MYc2*ChhUOj;VGC*ke6bi@yf!_iJWPp(GS5QC(2=Tv0 z7x3Po3v4zB{I}=={yTJm0Ydpb1wSAJ1B7`vgf6&0j4m)Dg5D^)0LRe2%#*65TxP%-wuq3 zkQW6?J0(gxWrR?#PAP9k2zr_b!TvXdTkzj&2K(O-;?P0&p@}Y~9UwddEf7Ng9VzvI zFmF5%LX{__o*IO_`%rkk6!fF;i3sroQ0f8U*FZ}7pAh1WrnHZtv?n60<9JFv5y4*~ zr5+Hl}9ZH!Rgn3>?;Z;+3fbi=*N|}gIRfB#kLimhw|Njew`O}2_QCv=+ zHR(|ul>d9)oLOK0J#V7PfXrnErV-}Nf6tpU34wDbte5}ooCz(U9`g0y^Co2Dzvs>W zo;PRa0r7ka>tj7yME^Z+qW`CAln2;Pi04em7?dGT|2=O)HfGMJ|2=QcoJ;@zdET64 znuLk||FY4LW^{?t`>)|sN7h{^R$i%jMuO?_ zUE6bp#lI4)v`v-`nLh|nJbrGmO`hf6E2hUTqZqL+tU+w#2sNX0Io*%aVl_7A3mHx9 zGLuFMe{`M@UUMau=|tFkkzs$A_KOawd|f^Y;+||05@$w_Yb@>W_2s3H6w3en_!JVt zx-f>=$UPrKH?xgI4Oi$`=U=VVS$Z-tphDzJ|9tkXCwLUqe`%I)7vEg)Gfbe*?QIgN zKKIBCb17zy;3wNG{FK_()ID-XLRc5xWwDWKX=>DUPY>lfN@y_e4BCA1@?2V3w$+hy zl9bE&#=28ODC8yJA^IXS1x^8MKQWQRudULb?qm9CP>AwcP z6nl>^7kxP}G4yc*62iLh%>Wyj+c>zr!i!zW(5-b*`Mo5!vho#tJ4GLeUyhS7Zd}SC z-CI_`RKu`Is@?dqI^QneLWw2wUv?V(P)cBno*!tGF!QZ?W^k+lb0-3wUFTd|zIcgQuWMrPs(r;9{gDvXh4(LPdN%9X$EU zA?r*P2qn2}|WPnjb9hJv(@H&0NMC`4xtL-0W&6H#`39 zr=41|XT>$wzDI%;N|yRb^670WA*c#j)_!h+ZfNd z)-&yc&x!>N52S2Li963eUYYE4Bd$E!T-Zm@CC_hlQ>XW~9cD+^ZxkRQtP9@|v5{Hz zjy+^MUEUBPbpPueyYY|5M>m`94lFYj%jWymsjb_&HvC%8_Tn!aC49Zqq>mjLUp?}k z|4p{pG0SX?^G3-QSCA0ag?DXiWcjE41I$e;@;x+#m#yBf+`Q*aakt<~`t?IgJvWXA zdWQx1R_3Lq!=I)-+d2_j*T|3&K`gG`6q3usT@rscm zWtzv#S7R3K*HStpZkv+VxZ2~%s@q{{EbpVm(_iQyAsp{wEQ*l);>fBu3M93>_agVs zjU0ZuKz+Yk-G0WiKT23TI5X*+gge;Za!KAgevf&?;$7@$qQ$N1ny4YidkxD|Mo*4t zngkMbnTfiaedDfuO6j|}>y6?ivzB{_ymMLSJ5~pOzfvJIzv272TW_k^id$~+)f(Bz zJ=yKw()YR4$Y{^Obe@eNfuCMDSY9RQ!r!#8k$sFv3CEr+WmvFY^12b-mIXs6ca$Yb zY&Sf)xK`Ww+-He0_N}MVx8#4ZNKZ+VAt|>;-RcZ`6cK2f#%*(IkGlkWaZm50`>Nb4FWV@$ExMhcyM(B#n(Vo;PId4-%hdhq z1La)li@x};I>DJ?&G=69hoc=;w5$gz;+`{Y6=d8Np6s*CU1xM%l`4}+eDJPa!Jjwis!xs| z{-w;zdO>=v>iXVGL!|MK5@)=|6n;G?=&}=a%|s5fP3r8(w9Ke+?`ZcL%6?f~dMsO_ z%|>#RWO-yLS(QP#^|7_=?Wa|0UA=CpamKWF$`_oxTJ*vCD&PC^`9BG|97Ns9kSVYEk=S=^&C?LHo&wJa!YgB7B|>U(C5lf-V^CJ)#*tqOo=Y#37Y6_+NI|A_SLI%nx01PHQGkrmky~Cbm8y4 z*vOZSMJwta&40H4EOSO52UE3RNDzC({o2^|b%i%|`X_BtE~FJ~d0&z)(5vYqu#H?# zf1^<1058eFB%)oG*T%RF3E}y`jYScXZ8vRk{dViohMI4OmGkN3GcL1*g&midUtA)u zWoPB_uCYS1jXT^h`59xyTb?U|2LzSnMhZNA8<(X@oZ^3UJ}s7@%R|&H7?-+b(P3@c zzdOUTnz{PPkF$}xtXYdkXo{t`yKbdlZm$>nIHGj1?A*nQ?-Eztjd9f}Vcuvb6H%fo zc79g?M+HHbm#7=hcWiK6sl|kT_fm`2sDqZi3O@`ME)L?7EiI()+AhnqEiCklKHbIh ztY+~#h2xiVUfIUbd27`8&|O?M=up-Ne>1~*SWeX4fBgu3@_`k`$9KO@40u))@v~es z{<5`Q_v7TP-0Jr~-hH%%=Hv^5Cv}nz<{zRbhQxBtu&^n_9uL_p%ky#bjS^U6SeK8e zE0l0*l{W1O;ep2?^S6uj>UEv-A0FE`)|KSjS$Vu7=(0Y8^O3v4p#fza(qRQQZ+v5| zOrm3a$y;e398NxH|2c-B%TLsOGjH3W7OzXmmCqlui>lnxPClx#Xei!uCBF@SsauX} z!_<5I^KHFHp1#UZau>JrdYwpn^}rd?@*8&gcOos-#6A;r1&F%B(y#VOC)gi|L;s)g z$2qq>%cYkw+R*W>X!)msUJed}<2uR0*QPoWs!aC}D=qqVh1Hx#RjF@}z)_VU2J`af zz3^=n=RuIDd*#%#Z0-8JZRb`OUJcLQt0dskUzoDpSbE3PHBEai<`z2+>KqR|J)F$A z)xTP2^V8s?{b7CLW4t4}VXuDlF{St+~#PO~q>Ylo= zvSX=;Yy0=4`MfI*yY)OXZfNinUH+xw)%V&r#_z^7xL+$M9aU#8y>O8B*#X*9nLEU7 z0;OqMoj&fCD>PZMm!K;|)P2OIA0x*z#VJFQNt7htANeY;|NVoP_VedOF%Q&NC0HwF z1U@(L)?F6-rrgH;(9soDgBtng6W2=zmcqlVwVyFs_K;ZUgA`0l{Q^k?#{MG1|J z&9}aaJ-th>@BilQcxuq=j3DBEwwkExGb|?kUV^<@b8qDSX8WJ?-rQE-J zBicOADo-~vODW0dNQ>5ywmm^Vw2ru#Xhgo59M#$=(s{XgsF)D%8lvvk;|5`DmWvPS zD$&%shbWo9Z8tsmX{k2n!j!TqJGb(vOM_PCku1W^N(o|OnJTmqa%wtsE*0zVguU_n zHNW{+K0#N6sC&>vKxjo*Utst59b(*;Zoza%*Z3?rFErkLG&-_#W7>ZAis$90tcA~; z_}_Y&xL0j|O`)%T5#zhi$AWpms<%4f42kENC{dTK>4VSHRdj96?9N=*MSD^h;z`d% zyw1AykT`Cc$AIIcvpX@q(C<&@KtR#T_;w7-j|wJI(wGoV)->A0I6At>-n0ZssPm>pDks{N@@*U7 z;P;V`ZkqVAo8GiX>uK*DH+zNFHA_3+{x~;r{vv!c$9a$->KZQTQl|fPII`-3ix^Yr zy`P>I7nD*avky#eKdJA*-^~(kJ-SgMP_OyKM0cjy*2)~KYbL{IcOE|4cE}nK=Uf%fj@4)q zk}OW%^eA9tsFCY->>9`SCYiel@vbH6cC;U?dU1PH(>XReO!5t>j+g5Rck)-w9;;_v zL0|jIwKtcSb2!X3*w1>p#<{`Vx3|7$!82B4@2916`2yz!HWBlH|NR!olS|u%PIerv zkL#QhV71&@F3)JsOI_!adC^i~>6NT{OZ%PI_D`P8o8+u{&z1AheEnS3V-o>ln~&b< zOXXE=I%sZ7h<80P-c|S8HwzrLuyD4z=ij@IaoFvnzMa|?r^3S5I;7ZbM_r5Vo*Z!( z-NbKlEAzZhY{avTt7#@5?$Zyna~n3l+O`q)Ts&^D2Vo;~1U;-X)HNBa^^tXoQSIP4 zQKOjuT2{y8oC2-8#p>0rH)FS6yj)*0(6^lNwTbNI&y~OCOTS+lZ%h7pyL0=p)Ep#) zbvI&BgyjA5kK?PAd2MxCZRVdzW{NNiIeEB`ZA#?qw-4{eelBfHKkMhXfaY|o+RnlS z%N2%Y+CG}euV;~*EFC>RFh1XT=5IJN?^&COx`WwCYKo6r;;oM5v${)EuiwkQ+u^Hi zD&ufXYZr@WX0P8u^-bApIP2FvIx|Pkq@gWlXN2ldiL7#PjL5rSALA2*csCPuzYKoP z3ow-XN6QAtF7uK(P zs9AaI+6%M~53z5m;Rum8cf2|!ws!F-M~r)6zc)cwny4G4Vl=E}7?)%|R5oXo>yatC z)SA52EO%*k8N4~tNct|nW%Q^bSGrs4d68yE%bv5#JPxnemAxkIw02_OmGeIt0tmV? zMBU^c_nkr&tPO9N%Ed8^J(2d~5mCJnMOb2PV;xO_H4|^d`RSB)W~eoiLamFY5WpX`=Zq0`FhzjkEZ>rx*P8= zF7^LG(1m9xHgej*i$6EG1|9x&x8h*Ad4=|eRek=NM<&`P>-Slx^J{Kv9=oWs!%V;M z)WG1#V%fO0C6!8VZ?0AxGgI@SE&tp|JU?u~q6o<(^S;lM=B6w^*K@~cv96S6Tjbce zNkEa#NoFFsK)=+nv4m^eqD@X|TicsG6ME7P(6c+Wx<^Dbx~}IsnlN|WHl%^qn*vd{ z^7~XmgXdRP>!}?Ul0i>RZ@4yk^?x8+S+@8EGnn`VmPFY;j z@hTH_V}GT&`xH%n)|;$f)H_>%VM&zb9iv%x!gu zd2pr7Sk&H)sRb&BjC~@mDao^^CdW23C~%tiL91@}kI*f6aH zpPq}Vgv5BR;VM}YaC86R67}`BpI6&IHe+J_^j;^ZXGrR%LK{IB&Q#dQ%8rX|?XEP( z$!p4mDYSU!?9{0DTNKbYBzYqJ9%;{^55k5qDbnI`n+=Yh%hTI?Bdq&_;i!{{Bi&wl z0m~nEHo)A%@oHdEgk&MzIN9zqKFSP;m3(%&VHlgC2H-ztRU+w(CE4mVfQc>83)tv+9e_ZF04LkkxyJ!fbX+v_-`@VsA!o6B>5s5G4QaJ-sC z-DgS*9BpG3vRw5d-+Zh-+Vu65?xwM^3cjsm7)oA2tUXwi%BrbZ6d#}LC zEn4~J`bGPnan{giNOTLZAvb2n7%-=noI<(?KZ~}+Pb~oaCA-vOKBPTUw?yK&&^3IyA zW~cl94K1%F*sj#io3!+Icu{fN>Sik6P()w){++8=ekn;a=-rcZt=I6P_)7~(Gu1%< zyFqi{-@@WNz&BfLz0afK)5dp({Z?_;_ZwP!S`3%Uj5w$d zRUUJ@*-Sg?E!c6o>9hOJCcmEh>e|eYi`zJn5Z2Yjq6o>UyPGZ2(*jFf4{t1M`eHIa zI>uAmG0RMvQGZ>R)pw5THCF|i@)u8h-Iw}PD_kS(=}H$~z6yz-*_~vwty0k%xddH3 zqHbaj11qz*xOKrD`N!d`Y1gm$>ADpT3Hw>4taauHEz#0+0KU==cAM0+uwYQX+E!jtTyvB4^yc}3L4EV|!uUA%ovNKWzX-a!K#*c&8-A0+8gU;h z#~$+=({~In6dw(+5C7FcuXjh8M)ow1eMghNYNe~#JEH*U1573ZCLR98EmmQ=1*h^@ zS8g#chj)0KUwtf!kW6!eo5bjm@n*1d=#z*b^GCDb$dhhzQnaa4n^~u7Bwy&Yt>+d~ z-=nIi#$cQKET;Tn?HtA&eIb=X*$|=8tTcGH!ny`T-2>mucCO8scluei)o|GMh=reO zfAV?BG9*VH0_*}S5nKl;3~hrSo_Tw+Mn z)gO-wi)P-uLehB0PpP62PNuPxxe7`fNcyk$M0bsb$cY*)QgyKYy0Ed`ll|xJiKIps zt=v3`FT2`8T7@)-K2We8}OnwFhhB%8?Y zsZxT3aDL(0jE%hV#Qe1FDZ|OwK%RRCIu=|`=0ieQ*940qBxmURJS^333rkny7N$Sh(7U5* zxwUGof%+YCLqYVHrUlW*8dl8NZKc(=Mci!47__kfLZjMrD%(n9ij=fP|m&rf7toVr>>Z0AVP3`)b>xM7Z z`0lN?uVTAr7k^rodGAZ}EXe|YM<3Jnqb%q0kOq!-4^j8^!A#wL*0mO82Rjr`lzbM6 zOTVbypTOVc!M4@*liHKq@`+VxZ;KV3_K~ud`P|@%yK>CQl+2|-yON)Oeq^LHoTag@ zB~drIBj#7R+@&~)r4QKY%RYrxR$Y;)85B+{To7Y8uJZZKCe!`tc^LzGPfSCXWHbyL ztL>ieM3J{8Pj<;M;H<6B5GlT4Pa!WR?*2s9T<9 zb@E}CZvFbU_hZA9b7(NFiqkQ-x0+XOn-=OVe3LWL6`puSbFh4$jG|ndSLOX1>`!u{ z6T80A_h`djgLQ3)y6vK2YW3kqI$o5rA9D6xy<1$r@hS}fh&qWc}g&k3M zf^ld3m3a!gHVoZQtGm+sq3r$5$Mv7Ceqlac{C$l?;!j4;2G)lS)l07D$9`vVK3*VW z>ep?(rXVjdZgp_fyQ5DC@!Au0dq-b=;}wWzNbGs@Qs7rs%ba;5yHZMQ=bb%$v-Zjb z^^FE+8qU!^sLGRO&%AJa9cNsn#K*;6z5PaKQae7ST~s+t&~+f{uH>po)}4@MWXX$d zm6>O9=iTka^gHK`)Y+dd8fj^Ll6`V-Yh3HG{O*_Qci%Nkw_b!k7*si*f1B)5r*v^{ zUC=6mt|L+Rj?*0Gf#8&G)>6X*0`GSzh&^qHS-_EbqN#t7)mS9lPwUFPEu#AOdCUyr zYZ{9z8X~V7aCR#SO|d(edL$-!z}Xbf2PdL#xk-xM!mJMK;WlCOXJ_}_@B0+C@UUEg zz=ebNuICn?judrB*@U&a;V zA?12CY~4@q7@aP9Q_&IGw78bkM~06+Hs3uN`93hGd;`tfvssDp3%y@3Sq(EToMJxr za7yCBt93nThl%6nLeyQV8_hn)q4Zg&!R9XM@J3T-9WV1R(wdZqns!HQ7hMyl6=F!> ze*Hq5)X`aXCagn=t^fIs9SyW)Db1UM{OJ;j>)4g3t5vHRWdEjS)F3Bt+4Y;LsZUeA zdvDx-_)N#yu)FC&Tl%mB2p)acGsr#3d);_^_*=|9M!l|YcFzd99z@-GpU?G$JAJer9Y)JJ z)W)7|?T)a?GMZbYmUNi$%0a6MyByQguTB-!m3-^HoT$oWHZ~P`Yt7sZ3k6dOK7U!K zMEv`OCsFsHsP9?LaygT_K6Cs1>RIFhJ<~dUJ$<{ShfF`xC5419a4N8K&)RGM{gdr= z#iI9nm-@X?j*jwwI44`Qy(b$Jj<0}d6E%^d5yebc0 zaXq2m_)?QQB~Xm*|>$YDDcHZLQW5q{+%_|8j5cqUwrI^&LnEuM00Mijd5a zJ#Wd6ukW+g*+^Xd`Gzl{`+;mWi|y$Ii&V1@cD2T?w@ZyYLv6ahHuR3}=Iol4nd@??)N8l8Xg^oEn{`KPRk8Iw>Uz|{t&4+?+(o&er}aF?jB0E1-9-AM6F7G+v*KJE zbeNX-oz|DA`@}^0?3zj07u^;EDuG{?>0dp^eb<6nZ(UnmMhTC0(^Fc{)lA!N99mOc zs{H2ttJBvPSja8(=8#n- zWKT3mUSYcQ^P`CTlJ9W@UHHai~#w*d4Jt?Xg zn+DWMcFnVDu8U)MU$95{X|_Y&$K5uuslQB%(?xGtM_zR^pZMT+#qcX>XOLbg>q4)b zR~#QV5#KN1TN*a z$MM>nEsOisSzi$ybmkM>&fg_-cgv@0s~1QJ=QkLOA|zWR+w@pIdDPnSy*xEDbodY- zPyhPOiPCF1J-2B$AHKD6uyx6jZ~4Qt9)iC1TF-M>m36LfwyXTIVe8Q^AC(=LuM>1b zh`Q;^7r057cc$O&JUcX!@ix1p>gDA-d`V}88a6*5JBrFHPAF~c6@JwD_2sgdrwi6) zhOgamtb^14-YMN-8S|G+O9{IBh`L`|86wV}EDG7S>b;w=`FWpCB{4Im1oNHCS)U|z ze81}1b@=w?8arOjoc6qm0nRj57tSS{=WTiJlcI1v!q@rvF@kO=QTJ-C6N}Ul=0mD& zbQ^qsb?oRJt`QIk^kHeqv64*Qur+zBFVD{&@%J8uLsiisOX;r!FVA^mWfT6xcT{Bf zWJ=F`g6@8z?y>wOQ-*yx?&s)~)JiHI?Q~Hj3w<$8wLj^)D5g{T;M|`EPmXr-bQITI zE3aR2=z%1SN0pR{jaiw`!(ZO!Tm3!}bi;_c7M}FwOuXxRX?t@QJjfSU7F}{J-9|sjvnxlcMn;a zY5B3!tNW-qGi%^vrev#{)(@xn&<9zZQ)|sD3AzV}x>adg#Qe|J3+Lbarjn%D^r>NF zhfyD2|HA_u<4KfQu;GGTYMiF%{7_mR~vh`z1 zoEKtamvrZD&J~?q-Ab;3gCCkT)-609(b3L#r-%DE%dR1z;FXLGskiu6cP^aI)tjDA z5?Was2!E5uy3s`4ol;!qdQ(%1_>XX`*SWsJJC$8;iwwK^;j(*C7MGWK&-v!B@b<|! zo8I2KJh^eZ((7p{=@$?68QfkfZL^MjZ@>US7v4RwktZU{b4aI>eOuCPTbI?{C`~#h z)DURSTy*cA%^pedRR-OByF5ZU-V1zO!T2*jV@&pvOv=Nu;GxBrN`sxZEja>bJsj^L zEQ*l4aOFTx^xKPdqWzmRZ1xVH4=K$%zPn4nIK3o}@mdBmTY|YQ&$=b@0!)q8w@0df zBsT8 zuT#G15(u|!?l)d?%xAMcjj zEo650v@z|sMO)l74@!&KU1#u>wA;|}J$hNUX>7aF60IcvCWe?zsx*h+Zs9qkH`!;$ zBF@8dS%#ns&pK>mW`4g83l?GbTm$|S;Rl@DYtw1fOgzq6%Cg^jnK`*;mA`554G*>e zgRlFu-OP`_ey`C%Uo|)2PBNRndn8Nqy{||J=OG@8A|#VLuFp$Lm#mW4ZLrCA2t1G$ zVfkHIZsWQqJB{38xpXpK++VBhrE;rd#T?ck!z7cXIlj#vo-S6Ei{8p{bsq_YGbGkc zAnKkzFnY8u`9R{sE5hlPHWg=8t95SoXZ_sFa?)d}hlT$+&zdU7X9KkR4ydm9S@BjN z?&g}PYS*g+-3%mGd9F2^Qua>m=wNA?hZXa$gLTl3Eiq zEac;-PF}scbgDM{jTQr)ZQZ4PiN9KSjW-mC#2ePhnH=k|*k&p1(9HI;l_f1>(>aQ)054D<>D6~EPmDN@`<~f?Z{hgIYVIOzi&X5bVKI`h7wY6GQ zg7`9`?<$p@3cL}wdi=y`gK?{@r!?mY@g61Wp1#}@k0%x zi>}T1gxkhPt~(>iFY(&5-ytk)cQ99FWr3@W`p2-g*(uGGIxFrm((eNY=`Vklzj;|a z$Gu6L@D-&Hm0b8EJ4R{x1#Rqo%VoSMr(0O zG#Q9?r|}4s8aQcsi73lEx2INgK5Q)N)n}&6>UYG-`(n(jFVWM32ELzN!Ro5g5h=DT z#eV>(sdFzKH>eRNCBS9ah zcfW5|BhTUH!|0}Bb-lkm9N2ngu(VvVT8;A)OM&$6i%u7gErkm&rF$d=%lbaed-ndr zcQK=^1EFf!TJ2|ZVr6fIdrZDoki(If5$sdO=%O~nCmf+t5)Z*#c_`o6g^19*mu%QY zS^CHilhiC3Q#*JD4(}MyRJD+7RFfwX)xV|7ZWfZI7<`;Cg?go3-By>5q!m4Lz{lYl zUKDcN76Kuw7=`Se-uE*jGr9H@7m4ljy|Ut)AoMycFX)l=-XRBq(8%a5?B{pz^B5aYEO2ylxs+SCwyNdl}8eP_^Q>E_e9G%>|9kqOxX~r$#5M z2HAt$UzS!CDcl+elife)+E&JKyI;!HDENm7)8(sWwpVUz7;VAmrek%R6}Brb+?uQ; zJ~Dr+*u!a5QzD9p<7=`Y^-cTcp%Xln{*qgn0|dkv3F*wu!#d^*y-D}-i&140;=&&I za~621V01IEy4$_(W_e#A)K)Fw5L$kyYt>cQ-Z1HIVD;?YTf5i4JZE2C@J!HQsNXqO z%90_hNX1plY|LoM#upOg>9b&&JBHQ__&8)@b$5TixM$WPw`BEQi%(JcPTYaHCA#MV zdD~h%Pkn0~&5T}r(zaF2O;=X`{I>@g*9=>3?R)fTCHd^C^D$gs&9@zE7~L$au7IkZ zfXoGb2S)xqhGlH5pVSka7*v{*ayY{Qboyu8ct|0w3S%$>e-uw%c z&$!g}Iu)}E4R&L6v$48j`OWn4Clk_rMyuq4XdcJxFO<@lvDE1GW!q2obVP?=RmY^v zG2Y;y!~L2AfsJ&$Q@NBxMoQd#W)?Ye2BQw>nHfF~*Ri@}6pB zE4pv(_mQ7^bLb1D0sOyDOWgzm8Pr<`2oL4iU;b7SR!Kn0=ytlgRJH4~b3~bhDn>U4 zt2^0qw}U}(p0iLQVWi~d8&$Jb-n^buk2xkz^4fb|pL2Xozq9ECon7Pd;nb;mcZDPO zOP}<48SLl#!qN7plrZfVI>n0X*ykhh1 zQoiQgDhrfm=~BLIRJUh)kNSr~H@ax+(~r7i$-WhL)gHQArDiaK(Y=AyEgsf0Gw9Z{ zoZArlJ<)^l_OUrBX`R?&*W%pXSq9JyS=~2kI%$Jpd zZX3}96pR>MbPdHPTo>Ps(TRuU0`w<$uN1w`iZgx6G=Gq8}g;nyw|(SmTd zC)5=Qf;u~bTmob7PQ)`(B)n84pXmD;eQzvdi1Szn4eq}8ptu>m6M64Zi?d^(fp52) zSluA!LtKx_%iTO~|F){AwH0=W7nK;^wUa=sj+5@w?prP5*WowI6ibI2RW!tUBIn)` zrmHSUsweu%t({fpzn{B+(JjX6(s1YwY*QKxf2I84lJK&GY|_i_6Po^xKXdy?P1@q< z-hQsmaW^&oNXww`ahUgg82iCAi4q6SkI!SyFCBkX}$yE$LKhCnR{!|ewj&V^uJGGNVeWW05HM*%xLD9My zyDllg>Jsmb%N8j4o>;Rstv81g?EAe>C#YzxF@2%1ok+Xk#!FYRwp}wG_K8-mK53S# zXBofy+ZmLVs7>h_Zre34w`75dLn&6*LO&+Kf%R%-$}{S?J6Fd@w|75jooRh$R$(Vo zI3m^C>81F^=f>%{P)5_nB~!MAID-*6Qy!8J#DZ<_n=X{ke#PkC#_H;BJ)6Pz)1_mA zX#Vtab@NoW0ga5~X%4$belE}NCWLW3I{Tr0(!%b}gFV&CORcKjhwFxv7JT*-jjx=& z{`KT1>~oDWtS;ZT#DFvpf90b^hQ}@hRtwx6RtUIG{FBJ*!cA`~vx}UcEFB51EIl7g z;Tx4dMx}h|pd<4Dze@9Oj*F8aB__OV7=O#Ly1q~1l>4kEXr*;WxCulWrmT`L2lK}~ zp^6XQ8SyBK*`vgTV_N6N0B4N&yYbN2yjio(vr0?!Z+XVqzf7=5jboo9-ofgI1}4s( z6`NBCJG=c6d+)*Dr?y_bevn-E1LfB?2@;YoJ4EEmwfGejc6F+m53IObDlV}&P;&03 zDk?SVkS3G}`iSwj0;~I|cKq`1yKb-9cLu%L9XAweTb*Dy$})0xrQ)8+(hY~OVwo3Y z72PLG4x|+-?s4eJuoD&hE=43=J>{uH^rC(3Fh=(-R`2#-`I9Kx%(rmf2ZC}4MMz<2H zTT7`RS8PFGe=S-o;Y!lsYdt;vFNMxAjMd#$>g$i@d2nFAyTHmCp{`Nog@q%Y`t%vL zrQS)8^!RAz4j)*q@j>^P`1zpGoorDv?B&|I6cIs0YtN$;g$9=(;w(^e;*zq*=E zxERidoqzA)MIpzrU$G!Ft-Z}*I`<(!kB^Z*zAD}OQPVZaXBP=3_(O%gRh4dp`g_c_ zS?^@7li%xcQDLFdc=gNc{$Fe#FE^*1B?b+A9BQz-j5Zf{tK8}GDA$YMcK4TX_^G;m zOJgGQT%tXa)7Lu2)5%-t{aePpie2kR=L72Ow0Nk>PI@GL;i&3q*rR4Hz6YaQi`6|j z&My$YT9!_xyZvVYx1z{1rf_D_vzZY3eCKpG_Ui?bz>E!fE;=uE6g6mjUtf;V{-ZY`4PXP{~u z&vM9T?tYQR2f6uTuU?5iQb<8D#rs>2)s0E_8#ueykcB_+`h6u4H3gBnAX$A$#s?4O zJ{0$45V3v{Cw<@*&ij3|hehh4Y45Fkb-tE@ix3-{qdm$()o;>osa@NlKcDMM+43Vl0!16DWZhF}cyExk`KSh(YuXA8S_6Yo{l z9ege<9m`}xqS&GAUT~D8ykJj0>(S2sGavikcuJMst&C;N+H%^^_rRwhbnU_W`xvYH z%!2Z(*pb$I8Izs9#K9~TDP!L4wE9C@V>9k@Uwc~(Im~t+i|rB>9EhrH=YZ%(Sh zhfR8>Z#Z@t;}WCt+FwXC6u!zH>R+CTw2aZ@H0i?Lw>-t_o-G!*dS!&Ci^2|e?NIY6d ziR5ZK(KJip>3wP@GU|9%{QWAHMr%Ra<-@0%%r7~z9PUSR0>0gvvAPPZf#bh|CN3ox zeKo%+%uy$?a4d{E?AgaM60(|@(|pDB)E`%LOCPxJnhQg(OV{HpWew3n1PudgMdd)ud-Qd$gz@NsCxi$acj zMdT4mH~VDEJ=W?erO{(Yj*JyfUHD``WO^q?LL+i9=+Tbf5k<~FTLd`1n+0oqy-q33 z>sb5vY2K5bnc5{{l1Pkh8&)@md)mSICfVbW{em42=vepr&G0wKrcF=C%+ns1-x1lm zlw0llTSbDz{82p4WcWAvm_$Rg+&7JwU3c7?<{uxyj*E7z?t$351-R?R?t|%FhLi|kO`+kLc`g&-s zhmXT^tS;qFK{_j6kDM33=WoRHo!ydA(vwD4wf)WDQ15SY{;CHV8RRMT47Sdmk;c)L zbm!#0cMYB|<+|NhQ!OQ8z;sOyquYViB~`So%c#~c>e_Ya!0#qyFPbzqHeppW_5E+u z1(i$WC2a4=Caaiz;v6r^CoQaUWQ*4FV0mx0%G6?37W8UGj|ZdMiPb&n?lEp>ttwi2 zDVbhwR%O*_JWf_uLHU(ffU&hn?-OAi-mKCXayda`o2V3?zABU0wj90|@%$;Hu0dUj zp_8vLx?NaZ^8gbvwgOREo8$6F_Xn-ncz?UlSlK;+Grl!jE%%`EGfNls(}LZv4gLG5 z@6`niy051C|4xa__dTxhmhMP%`18A35KY&feF7dWsL4itgiQRa<*3M zT9=7GQ^xm0tNp!K6giDeYLnVXgu7c)K1(+a(N3u7n(;pNvzmB*S=vd|@%}Zn<0mg2 zIzAK4et!L3+W7u}*4X%jql%LvXFg&_;UyoE&6a+-?fD{i+Bf(4@KXxxW?99W6)V?Y z-5Du}AuH7XomhF9b6Xdyw@%tVV~+8TTZevJ89={V!0Vz|;}eeHuqgZBC+1_LE2X&x zluXlAu6pO`dJGMC*_NcY5Kp-uqgI|MReE;geMFYGLR;C8!s>@kn9z*huKxUdp)uCAvb@=PjS7tb z*Q?0~oa_CwKYh7U)~uLi8N-wH?aKm2w->9M{DEolbjiLZ3St?%M>~4#MkH3_hdR4sUkmC4W!s!Y*ED>) zp*F-P+*YY4spQ5)V@b;72Ca(;5z}K5`2$Jf&7mZQA5)d1jA{Ch2lHubMA|N}9*{S! zX;bkf&!q7hQ?jcp=O&%d{RKjJ-G00%6LyuSljU3I(g(^^_}l9a)+XLAyn8%zZe--^9_5nn96vidWGnULtkE?M@9z*+ z_uCA?w*&Kof<#SE(`H7)G7H1H&nlkz@l0aQU1N&^IpOQ?MW4@P$3M7d>B1UHSom$G z;GNJ;&x<1?hb1q$5bi=g;&tC+b=MBH(!|A5`?&L)w~fpEZd`4A^Z35HJN1qWo<}Gz zk#8Gh-#SwKg=*g+?rJ-2r$CWg-XlIQE_=xHdUmV-G@#uKlLbg`U@Vra;5Agp}qvFxBchVqS#-4{nA2NClMhs`?>K0)4R3V_^SFFXPBqr zD$zX!-e2_00H1J6KJ?)ih$bJr8|9W*%{-SCRA_6;nsPv{E`sNyY7OCoN58sA8TjiY z_D+6NQeyY14Pz4>@wKPOmh|tyti(V+?t&)}Fp+?m1Xj$m~Qd@@Q)w7b74Yfb39Abf-~O=-J%PF}~~?#Rs1Cn5PK z-_$Y`|HxUUwz-*EHPoF%L+SI@*y9vog>|f0!1b4VPhxaYU;gh*`1pRoh~lb+L~NBR zU2wyvEpPBSl_%6%7*7_iEv3?5Fu3ZJSX|v}!$HE(+%nOXF_xJ4^E!{dt#GA>_!}CE z3F7ayBcbDWbi6ebR!;>mpNE9|+FyIIoHG{(2#47S54I7IA+kgM{MY_O|7n zW>j0Qx6{Yw?h;#T@gpfv&EQX5B@HPZi#dhSMbB*U3HK|L;OLRM%|S)>PT^fLBm~N>YUdV5mraI==-SE0a5W?%C-;v-GZs@`# zxl0_?6z^n9&+L74yK&?zhZK{&)zUJVy;^A4(u&z!t3b!s!xw%VKR+y1|G?GxK;Vhs ziW|?i@pGPMFqw4(A-wK4yeQ;2gBlJFEA6p^FFNC=pV;kw@ixVnJJwRZ#lK6sP0sr< z?W=1V6XLg*gGmN>S>>|L&(oUj>kNOiCSblGR^Zg7EQrya#Om4*xLwd2$j>67zEK!I z%JRnlcY{i8L1Opx3nN!Gf%*aK@-%_R%1>=>rp_6wCTE{`>R^i#`;hphaZA{1iELHu zbLAI~6aN&u%l2N|6^|r^DC|8i;PqkuX**x> zGB@UiL#MSWQlBcG{Jxw0E8$Iyzu&RCCw}?-_B!Wu;N1R$t6TQscqrX)+G4>hRIlf) zJWB7$=Jks3Tp;%z{Bm7r+MG+Lg{JqQZQEOFzK8cLQ_ZHTBRMg;Kd`#B_V4U-DFzje zXq<5A2qlg#@cs|SUaQO@uHSanpJj=i>>csLsv`}Qt&qjR<@9#8T z6mndQ!t(FNq^YLMhkS<*u9fW4Qp;$6@;YwxWLksg&GDg6g|EuHiPB6gG{{(6Rl16{ zZ@u%r&TD8g>Oe#|IU&~o_WlCR#rTAy37>6GzWOBDT;Tbh9)YZpimnJ}Qogeh(TBek zkje7&x~ioYu(XN>vsJUZ<7Smdyc-_0bAP@WlXG98p_nSw7KHHr&f-NO$IX>ZP##Ej zo7wkprTCGUxbMjeUyd}`r=*lo-RtTfI{3!P*=+c3Sm|YjEvLDva>lAD`Tgr+K6OwJ zhv%OwG+F;<5?*%>tNZ;LQ!re<55{eMe*Dxq{e0;h)o7*4p6d-a&fgk6=`1ZOyW{fh zN=5YpV<%dNjY5qT&UFowXC6NnnX<|(mFXmj@%J}Y_k79j6m=~n?>o%b-)D%Op2kfN zXBKlh{EFQs%f|kVbw*ksWKdD~$FD{U?`~0Zs$&hOc78GcxI68k{2}LhcTFFR?mSjk zg?8CvCCe!Hh`i#xu3UBL7hd%zm3&VnJ0&%%(=9aj1bHu+aWL#9-Kklua_qcfp0h;L zxCndc5U=P{m07yDvZq_LiJEk;bm+w}m5BqQ< zcOp?CdvJ>k*FB#+F^#_Z_^ao5^`G6c$ulbM9#Qq~MQccWe9@eVPdIYMJK6?MgICCC z@0?%Tzc9@sgOd^CGUHe8JhHDlo$P`}>F=fVd&VyM-buEMOl4DRFRK3J5EycBPM3PndhbL#guez^3NH(B}-)t-Obwn(&WBkU-lc=L(-&r1;px4JB_l3{dLu)2w_ z@~E$KOl5eRTB$Fc-O(A7wCX*wlQ^z+@b*Jb#~OvuXIJjik!W)(5O~SOz9e6qidNE* zkQA(WHt+W znXCGH zjAq#DCLG{D63*jgR_Jf1<0r(t6*S79Pcg1ZzS4M``Y~mRC&SCO(PK0qw8tvt;_8W) z2HHF76}RQiDSZkt*S)WCkuF|@;{`FA%klmaVs)=kD!yHybtaltsqz+$BfI&wPhvEs za#f)FSa4T4e9|B_qA+c;eE5P3fn^0@iE$|VF3LBf;$H=QdU&Fe)OMg}8F*bHtS+NW zME-!w6CRVDhfjJ`ws>4^R6RWQ{t@%gRlQu25D zpSuZj1^WwAeeLX^QmwiteUB4;t(M6Pj(L0iA;>Y_h@=~1_ zE>+~*=ekAQETF!1s?EH#p0BrapP%b*vH5b7F+=ikdyFm)t1C?6xtQ6_)S=tf7aDg? z@DqjGrXr#@dcO;HW`dGY(WL;#72v<^#xu<_(X&rhX;l-8CZ$A22Up|il= z2M}X*ue6%&2%U5KrEa2idY0N;@1+1q3EBOV27D5~eYE>S6Mt#ZI60l#Sya?|v1-;( zO75eBq`%75JNn7?c25L4%@Q&Gl3;c9TL$)g&d<7Qy*;n}bjP^6mmIG@Bkx2I+{t;H>!iI>QqO|FSq*nJ!q^yM_n?s&5W=g(& zqdx3Xmr;(HDz5M=9xl(rbE>BonN6$Uv*W^1{Dg0|#>qh=^H9aFUrC@g^>(LIc zVr6mD%l;1&PBRRMxup&il^*5`Ki+Jt=N;C|&qxr2i3258_st4lchceK-nF!?AN?3O zCv$Zcxi|txy^qq>`07himUBONM9wCrp%eN<)0O-*u{YmsJ64_Pt=BT#uJjzx_7K77 zQekyDer|b2!Ne)ccBSFEO&CXcP zil27hpMU=N`cw?%(S>tKN!rG###t--dZrH(b)EW3yE|t%tZoZNmj zvY>Kt`lzjTq~_DZ?y|}z>5ro0J8LMC?umaL7NDGpJKl zlGEBlpJ;s5zFj}@U`K1;SWnv6GlV;EWpE}WG*Kc%7IQf7HbHl5u` zUyko_8G0l8Ot#nDPVg2(qCI_J zOF-W?GZTVcy3@SE_jwPs&gVo6P@0QkbeXWaDwh&Fr-X)|d41HS)jb)Zb!10?&_}J6 z;}-SKH5sh2a+m2u!;S61K*DVJKH?2x(8 zlZa`mUUem0n%l`>Ym8wKS}5* z{6yC%`FzXGUv1QrSxq)Hx->hr@2EdlQ5HO#xaem4S-d}z-?3q=J>AxP7Z*I|?+bm= z<+bBnU*VtiI?=i=D^{0))V5KKcx{-H%Dj25`oTPuwW1kw)2$t; zEOjRCocSv130m^P*@>LG7m7R+`QGytysG)3QtQs(nbX%YMqKITu&V6KBt`nCKm5^U z!|HxMbuP$P+GCKjw;#yz*+TYpWDBOBdHzdvpuF_ZNYR{o6N&yY^md%JkhW?SU2-!ebNf$RGn zO}&RLuDGm@2EKeL+x8>5?5)21vj=Uf`C-XKFG^{GlMGcby1TKu`XME(U&|imr*<&N%dFO%4=LHK-@ifJ1QYqyW3RyMx*hzX>pn)S#^vM}pRb__w^K-@# z%XSN&{FF<7tn2=nclKa)<)@OXk61QpKKJMO z&YyV)ea{o0aEv;YB=L1CtIy87beMZO*OBX^@?@pv?ptN~^c4q#*sNuqV?&}GdxtqUFb2Z!{@5ZFUCVi9bv1dIX7^l;2q0e=VND?uN+_3{WI_I zVs%p~h7S>b>5Y+zk)9j)W;+);`8mz~wV_>8lr)>C?h(NPZWf9obp6dqTiOOb=G}>W80N%mG)5M zI^hGf7JK^oR2qW0qWRsoi?W9x%98Ei{qhxMavMhP~ppdi6 z>iA^Gj^F5+FJ4ywt7{g*PEG&ICqSrU+{CDDre7*w$fSsH+pmSF7|#a1h>ZV zRVG)-$Pwv$ij5+oJ^oTGq}QyfDr|0vaOzH0)Le+>;zCf0*0%P$jlpL8*!uuMtgiP* z`eG@8-$hrf_zufH7<~UyNK&fSAj7j>50{>7cdjBj@1fx*kCE5sbPuYiw0hanCs;a$@@~WI&whVgiee~TW zaq(x#doKM$!%TW3$(C0lg0;u?wrnx&u5pZa>Mkn7=n7+Xdrb5f$@&DUR*4!&E8-T! zg5pMsqZ=++t_7dISK=*x+CO@zd$B64eyEGBU7?Bd;&UC=iWP^J@P6*ths4zxNDAL> zB3RvrMG>#A-#*LGx0 ze_7QKO|_K0_$@CmYZytq7o&^+z8Mt3eOAI`7;#gPoKo0%oBUj|JONKslucQi1g!_@!E~fHhbj7g#M&%!BOS|8! zB2Rzs1J`bet`Alp2xBibW?m+givMLlzT*mw{;tFujPq`B&EuX@bCN;*O?x0hMW)e zjmq$*W+`q;{GsB+aC6thUG^IZ?YVO;N1G@Ato#04k0r3WLf&*AtAlqFJXPfrzL7`r z@ckt1<&0EWZYf;(r=|c}k}!Yiz#^xPpJR0?Y2MY#N7c+`jVvnIMurJSe-hR$Cu01S z#Of0IvAEru?!2R{cchBV%Reo7-0wF%*A~6_S4L`Tw-sG0y7})6xbBwqjiGvHN<(6M zj`YEsa=9g$!fUP!#5QIM7+oo>u3-UrMdIm@&~_0{!|Uzcgl|jSGm?96<$X>s$OR_ZWlagbf7i0TR`8}#5++*X9-?*;orS(U2IQAvE`gAs9 z=N%cWF0MlQi0QGDUf)yex!?2Ov%1Z>P{Q{(u!Nb3DOvMkwQpa<-7QPJOSc&-lRs{G zCU(NYBahD2KD<~{;xUCp%dj)XUseIj9cRaFB30Xx`n!#)Z+9!|EmmIlYr|uan^Q@YD~N5juWay|k5nt*^Zv*$eSIu<(SMi$ziOK*tuEnh3VAw(6wWclu$ zw3;m?MpquI`~7<+(~eWmf)|E9oVeBSR4vlAaeFDL$bFkFIoBk}GCX#Dt-NLW=4`u2 z*^VP`KSeQnSLT>#r`}6ZYTLOSsI~*U?%R*m&6UlP*34WIPuyV00C+x{o_mMB)!{FWCtk@O;)2x929os}CmXmqe%IX4)o<(w=Nh z^dhA3-8ExxBU*Ce&W)AB%oI1%&ae&6L>;F7ocR6E?*niIVW6*s)pg}~lddO_>p^j4 zNM8Qu@*S>ladXX6tygqE@I5?b@HCUBmo6^Tr1519^VC2A(?s%l=hQn}T3u}zzw440 zjTjrP`}=3Tqm0#E)p#uzHOBkY_?+Id2w_-S!k^U`MA>!Nfnu6ai zmm*Tr2FV2YKI=$5@ikN$mf8NPLy}RT;KGJ3x^F?>A;%}2zF4TSQpvZu>jA6h(neq3 z%XfZRAT)na^~3Vilf@-&oUEJPTYmzE04-~MQIF-NC(d2lL#elWUpKH>Y~kJe`UeQ1 z`ysTBI*8TP)M&mxbfw$*S>>JA=~LAqM?&NrgM*$n$(J*=SlD(sIsH(lQ$2G`v)mxl zUfGqD^@_h)b^=MolD6OWS>Arv>UG^e>oXOs?k&r(#GPLh8b=TFu2~s>*vT2jGSPGT z=X~t}`Z6kwFXWdZdpHY=_wt>VxGaBT%jy2y@bi67I?H#>-hBPz+BJng&y~s6+wBlm zSNow>|4Ti$)7E>pE-rjMcHP|S``PUjp;n7bryrA))+do4qIRMz4fGEwA~>?p`|=V| zjok^udq#@2QO6VN4Tl-rDv!*O8y+PS_1SdTRQS$md+(Yo$H0Dd#VLvLtT^)ea}PtZDiy za*N{=v;05LqyF3ns9|-_I2)dklsC;xz9&0>p|bP9WNdaPuf@wsad-Js@nbrDeC5|O z1jsnWV#i|094XdvrClhbitJ7jSsvZk#8gvIxrTPN*v`7`@+RC2x7 zb^ly9HL$wrdwT*E?HojmvhpIlrgs?(_s02buMAU^N}QmiKVMn#p})o8;*NVB*TUC2 z_1gqAy|O|stBR%8(FNTtORmqki_z7@>Yg#zA3jN*e8`3`dz{Sc$Ly8lrVdI&wKEZ~ zC+*q##eNQP8?pU*8vaAXBylCO^6WVlKB2jW*sqEinQ=r_ft}lf}BKooQ-PI_<;S|2ZF1NQ7+DZo{>%Gn0b*@0aqDV)Z>-5umgICqG!w>&X zoXd<64$H;pYGZVv`2Tgn&%ZhtU7SaLe1_|urpEl}>yO^@8cyBeJxS_kc5gCQTcha1 zMWgw&53dbE-X8;B8oIwRKnHE+gTucNW_xpEo${o6lFL{RAN>EPvJ0rL@T zQxmKY$$z%%|B*7}pO24&H9B}2Oqx`G4JqDJZla6H$08?Z!p{XyIXjA*?79r{OgVBf5(_^`ux8q0x-p| zCwz{6K-+lMjqsoK`QFai!8X9rYk-x20ETNA-iFQ5ex434o)++jS(Xm2{}yu-^4ZJA z#n;9YzMZ}6KfmTVdRed~tEIcJOp3AXsK6AfSLaua{YPI@wqg5XkNR z&;5JIMnJF?>O6z}=>MjT;1HYXzZe0uB&6XcAYl9#jV0 zBL8;j!QUssdPxHEe~0H%Xij1PNPz#2gkm6T2!BKPFAxKCZt%$AzwO-qJL2=Npn=** z*!0gc0$Ir6+7$M$;Mb-P|Gg2w{95Y2S9nuxGXk3t*o?qt1U4hE8G+3RY(`)+0-F)o zjKF3DHY2bZfz1ePMqo1nn-SQIz-9zCBd{5P%?NBpU^4=n5!j5tW&}1Puo;2P2y8}R zGXk3t*o?qt1U4hE8G+3RY(`)+0-F)|uSH<jyt)V7z_O9%*#Zj{0MSqM@$%8qT6?S!8V0OY3ulp$Z>wWb8w0P@LbV?Xna z9{B)?L8932BQB;09q*ra!S#L6o=6Y%D->hYZ%{u${h}L;$baN7l0^QX;~N6#n8v_y zzyvq}oCHuGMsA?^pf*8mfMSl~iF`%zLh(WIKKow98+yiO=G$!hR`@jR>E|3je2XcU1AP>j~3V<6xAy5R|1X6%Yz-8bHkP2J{ zt^sL4I)FYZlnDd?fxsCc2nYs3fKVU;hy>08(SR9n8ZZYe05ndm0BgVoumgf22B?q8 z0`dSFuV{Rt@hAoC1$Y5IfFBS5_5p%`5P-g$guZb^2~Yvl01ZG3pmFR1`sjV4X#BbZ zsE?sOh58V@UX}n}OG~gD-~c!Qc&{YE9srGFG;VnTJ^+2ANB}@{0UG;gtfTSq2#(PJ zJO=84b|^z*yBJ6Y5`aYDJP-?904@T)fFIxicmiI4J>Up90nUIcfaU@;_CS0n>maAO*Y!J^N9u!!Dm;-w^;GgAcGx3ZU9V0Gg9=05Py- zV;hy>w})UGwF&YEol7%-;>`za1r7sbfGU9ctqO1ePy!SI)YcLJ3xN6yKfn&K0XqR! zfEl0w$N?sR9zfS@N&p>$3ZMbd%7zYdT7VJQ1~6>o+c9OR935{5unQ0c(D>m7gaPEk zK434v3G4gzyqLt(KZ6@&kLY^(Rm|ngD!0QIX30JRHh4-^B`2I&CuAN8?oz*WEqK<$wXL<12(I1mC@16F_~a2zlOkdG$7 z3BUp{2hjPR0?>J$1WbX`fEj>4_ua4^33wnVYb1W?;%ZREEhR|k+S2Pgq<0mZ;gARovB za)BbC5GVj{0LX^6O9A8`{^#qkjgE02r~|eEwLlGU7q|yh0@Xkjfc9+!8h}T@1K=T0 z4;_3U~v& z1o{9}_8LItcstt0+6Lk0w;TKPLp}f?{dd570QvT5BS+UVv{pjrh1N~`00DprV1qKW z9$JEY5m*35fG@y2Fat~jzkr{>cL4RnDPRm31ttMG;2SUjj00Z*nT>61&YE~5mt0u%r_Kn7TWjTCZpEyMw9@bfCL4A=rIzyW{=Z0H(^E(o%ai2&$2 zCl5Iq7pNY(mZJU9bqlYF)(+@eht^2=^&ry5uMat)9IZ3h0XAS4uoFP*4z#vHYb>_vm0ibmaTDu7YLVzG30-$R#TIPKrsH z`pCd7xzvB$4~hOiZpjI(QAdWf7I*G!%UYoEZW0T3cVSfO?quhMEIUHlfBmH8O4?0= zFQJ4|3YeC%xx@AeMA=x<5}HX0i3maSFoA^}EN8yib;Qt5aFP)@TX@@edH7qFM0gNNP%9fl4lN!=rVwnG+&WSLb!7jv zkE5THm!PMY#T@$~5klUcNwA261w63YsC(zq`4=K=XZXM(3Lbz3|6Q&fQ`#CYxY^qO zQgeYiC_1zU4ixXGKhTCFG?Rihg z+343ct}q}Vm3|lvkzBmWv0evi!Ro=^+s4%zW^{(5+EP)a*TI6k7K3#bsG)vslOJiM zdo4a}T}=#G>@55p++d`J+z@H>XC7h!%f@K5f;!uv&gr)St50~6dBFnlM6H1T@|G=E zbl)URIMK#&zyn{XgIZmfFeTNj-C_nT=zL(>cNcVaaB=V^m^IbAxZ>5uzflL&!k`Ws zKeHzG7btA|Ex@wjLEMHV*EEhR`ScA=upkfMIRB&{Y*<)`|FnYG_7a{z(V%mGsquk@ z4vv#=eL6T-+wIt27CEpWuM_7AuGj6_5&;%5At`jGhroh-+xF$e_?5&-O0dBEf%?ur z@nEB0dwKgwjbYIt2(PfL>K}QKz+v#)acRq@DE+^(cshk>o~fke~x3b za!YQPZ0IZz;kpEen;WdS8V)>l(0*|6lOnAAN%!4-@u()~_XDh@g=rT&URaCCV}wVgNl9 z#SQgQLAVe-ZOZ?-(p=z5L?|jGxjsrPJU!tXPH^q?qkp_T=H?}+gZe1cafeQT#+>od z41(3~i)~;*;}k3bVA%#1*X_dl7iwmu)-7-(QG$zLL9K9*e4br{;n9u_3)K1hk(C8? z*5^dOPg&7+xPwqf^3QSXyxp8^Twxuz#QOCev7R?rpdTU+9R2<@(2l~K(d^&S3}D%q z4~jRu{?Qohp3(RG)q0)v^9g{*>ke@F{FPe%nl*^y*I#uU{Vdj7%7`a+oIlE95G)%p z(1&oMh;qCWHrs2)F$xwm8le?hpqLdbzDmh~iVJ!;6w!6VKZ(w|1?v30+TUCLCT^hi z7=nhb=(S%ZNc~Q=XJF6g@1pbf*OI@VE&qO|$biWJ^^n&`4i`=&e3bYrZhtd}z{2xy z&Ij6*9Zm+t`e4ErANO3+51@tu2NrviRNC=LTaoV zmR#}IN3shRq}MI$o#!9>L5L)*L*O`Wu2wdvleUx}ymr;!f?~Z6^m&;1JYkgyBe*f+ zZRg$~Ux)!5VmqFc)IbqsX-OgM@#G(kwwmWu%Lbbmw-mFp!H6gZNRH*Gz~X5>Oiaq zz=EPPG9w!k?KkQFmt}IpvNruCHfB}@t=~}Zg-gKd#&O1Eti1S=f06xFhYptbw4hel zdPF*t;L6<%3)JD*uxO{n$|;-Ap_v@@9q>SO!?M-MHUCL;%)7rV|G4T@RDd>>77}rG zb48aqf|q>`{&^PZ=zKQX^cJY0eogMSzj<6g?LJ&jp}$E%5dJ2j(6#>ld`MwJM7>Mw zr1=f`2){d^Ci-X9$p9AA3KLp->gS`C(aKH)c?S1>U_qn4H&v&MdH&!&ux!laq8n-_ zpBX>rAENCA%f|Zc@7I=pzfSy{D-(?RzggKqD=2~osP}Rlr+j?I`DNz1*D#B~`r~ic zNIDzm6YJ?%Z>sqf))e^l&T+6nxWl}^&wPDZP=T%`8}r*g_G{Fw(OSe6>YzD(zE<{B zQfr+hy2`9iA^*ub(aPS!*$L`)eF_)RW;*o-jLJo@nRnwtl~BYaBPlYH~ys zEE}s%{5KJ!dW?6Lcs5)C%Z3Lo4z957_42+pc&S=H`ilry(0vy41N`?E88to|Q6=yB z1QuyH4zz-|i#zJP1Oh4yzB@zG1Hb~~3eBUhHqK|q>p&6X014E0P=Eg?GX>mLLvKUJ z!GFKz=6s;@Y`hlSpW@r+pPUc!0D4H(jz4{rc=WQA>($%%buXwnxZ1++HhJ$0H?B^8bA%T0z1*Lnf}z2`??3~jrvdL`1KW6E7YNdI!*24RUxOf zJvNR59-Q3yr;nOEnj+2^nnd>{sEa@h?tlgL9b^3-9n)W}AOEWJ2rQ^gTjPSLw-fck zEC!)L0sZG!nRO5T{wnkLD=tTPc!uT!8kNKEXcQ)8zys*ma3o1Tu%LOzYBpFyvwf!% zST@=;5-ez@m>hRu*yR{8jJ$?hGiU}&XCE6&2T$v8-;UP|50!Jkf?6BGdKv1Vh-Mmi z67EjZLU)HE@Sp;slLZzAu*Bz77_J0&8G;4P@nEUg@F3rtz41&K7>C zp(1(xf9IVDMs?7<19kA<(p+A6QfVH*Pzx6DO<-R$oyGtxNLl< zllbVK%tQa9y(mH9 z5NDCa`#wNrRXi3IP*D*N@CoebiXy9cD~QUnt0*FZt_Lf;UqogdeO31O-0ypTJoj6s zG9x20GBPqUGV!bi5p2nxAv?1(dfJ2 z%?H2%EtJA(@rAOI;M=;ln6Ah)z2$HO#8#oCVqk^VtGiI!L9gH)9N$8CsQm*lr0IV^?j zx%`&G{w2{5f4C{M^uA5sLI(ZC$eMn%kj|aASHJYmb7KwzgjQ`BKi2?4I{NwJO}C8R zIOPXG5HF)X&7{`8xW_SK6_sO_=_}?1-AW~mh*i{h{HKRcTk#TBuG|Z#hvqCJ8YpVH z?fJ(7r?mM55FT0BYX(&s3nleuJYjY^V+A0Hx)29nO30=yOS`Nn`DJYziXU)nBXX?3 zS^VlBZXHtlXiqVIs68QFPiTf!^kMfkJ!hW2r5X@uD2>K?;E;x_IPmlN!xo1ioo1TN z0QrNY)_=Bk`%x_&US%AXPDHPd(ID%yPtUW5pEVA84Qgy*uK`YbP-}et`+j?!I2`r> z;|JVf?<+5FKK10qq3ulaxJH!y<$=zxwRB>+@i^TN5SlSgZ3za~9J9j&gl0gD;JSdN zg(HF5+t$}DJz&f_iUr6S{cYfojjx%~V^H;e?a0PUt?G7ykm%Ym3*H?5-Q0h$bl7{! z<6A=3|L?8)dF$DJqV3f@tBF1xTlQ|d&3j%1t+MS~_Nu^!`~)1*x7(KOHEZ{hz-IIu zd3NZ9{5ZvB0_XLXjrVU_{V1(I`U>sMzsAVPHM_S>m`p5;g`2+GxS-$ktvf*t^Ab(z z!HAJE06FZKnSpoit2h@B8Ew_AU?36*>Hm(j{BriVM&ZA)_cRo|k+;6cSorSi9bcpw zoiq_M#`%C81jwe3&wIuAy6YtjVVn>kG%x%TDSjf+ZRkgUkln!uZYuB3<8vd=916&z@$#o5 zTZ8ukB7KT;03ln|wcBUiSG4U$K1G$70cT0b*y6j_o%X|A@)MFI%hZU6Ho%m&xudZ+T?gs;55M0N&U` zDereEARPf&Uv>K93l?4qtIX>Xw#u2YTh>IBpA@$^Qew3Hb>M^N%%`;ssP%;*<(Ru} z7VWREJT*4H=>|ZkBJ+yKU$oyeISn zcH+@(BvCig*eq@03g8gr>eQFZKW-jE`X;@a95G1JQBcd4jy+Cem;pL~+Bpvn?6m%f zw_vYr$aFwT0O>XC#@mlLvx;VCmRp}b_W?p2bY67j@7A7w^>`O&J|HB~=Xxb)?7yf4 zM~199>3SEE&D$lI=jp%v9E^Z>NBTB@?0MH5^pAyDP1*J2 z$H@=L5sSu5Pj>Vp)I%0&$&M$s-M;LQ?c6^+*KY=dw5o2eopY-;r^xpwdjPxhlY}fh z;JO)CeKxv`ad<`9_C!H#YUh8R+^6jkV_lrX0O%!#Y}6-F(`y_+T4#9JaFi; zA0Y#|VksRg#=;dd&S+fx(H>ZZ!sY8rEzREb1%&&j8aULa4_H&KY&)PG$5deuKtDeR z=K_Z`e%I`Km%MlE<5;7UJBn(2c*{>Me|z#nep{}OJ(*AYO@C=+{qCOcrm%LF%le|B zfKV@7-1db3Hn;Ue>Bm!2y0Eb4&?mfeI&3obdy#x*^cK=g^58J8twsvzTpWF?4K=vA4mp$s6 zDSiR(|HL7}!alhA&ZfDO-a>nt`x9%ubKuz4WjS!j3%EJ7ZK~P4@^D!XEX8}0+7%bC znt1tH`+mugKBWW7i*ndEvJ}Ai1UO_}W{tRiV6VfM(fWr~u^)E6^&stNU3Sq$T_=8b z8?Cpc_p}u_`vT{JO@mu5>wh_MAcRvCiHg%JKX$+2iS}cz>;gyy)=Zci^Y3rlzu9}& z!4-#|KWrGq`LN2uGSK-Y?W>A+D0f!#qbU}k2n?K3if(5?t%kcv$;5((YBeAJ4qXI%JlDIhF^^1g$9 zFYMcQ3-@i=*!hLsObsi&e)J2&0oweyY{0nZUs!tNS?&rfJHpf~SFWdn8ueVS9rq2G zQ`7}BQ?t~N34qW{Yc`k7dE?XS5~jv_9k!CD9*7pTeA3dq_HUQJ#~gsWilUq`2X0Rt zsL^Wb(oe5{_rES#E>@Jl$+b7tOra;(_!Mx+ce(T7$1WXN-v!bT*u5+sM)r+3q zym8L1Bai+H5L#n^>q+sZU_6Gijr-NlEa~(UY%i!WPM#P(H1Si^a}etJ%br{Qd~lbY z&&YZ}?OQ--{5<*KQRhF~xAS^H1d-zA24p#iOXGTc_OFig$cl+@$=!pQL`q0aOoPCxBUA|qEB(s zb@ymK>16&)ruJ^0#TQqZ2YS+l$4JF@&Vo!kN-1%lr%o7^~PJUTi ziHMPee!o;zy2tm|J^U!@k-d;#Zi~(qw)c&j9{%o~H(%VsGGN_ljfT_%gXFdp)X47i z*?K|vzlKi6_+eQC@;5+e27LehKevp2^uW$s4{PtofE)tI%(wS^zkFQ9F|@NPCZ?j@fE*0S&s%oI{|U%t9tB!;#ZGaNxeetroPnRsa|G75B5~XN0 zAQ~W{mMflFH0!l}UC57soB+sCt%1g?LwL*r1KM<9((DjT{B!rj(tGsi1pibkKfaKa4-72g2}#jAib7C5w`d~u}Fvd6Bs zZw3T@J z*SjMJw)KU`J+PAT!X8u~{K=gsF5id7w)9XM>Wp9=^!xSbjXyki&i2zJ1X^WS@Rk92 zg-{qcx5>kni`xC?{nLl7wVr1v-bK78j%9B}9XF%v2%D2Nuj9;+- z$$xYq<$%x#{_xAI@92K(BWqm9=@RGO$2LTMo;Yfr3z-N=XW)$5fAbakMN@~lkS0L7 z0&>b*pS0XP?x7|ZGF#$w?J{@s!eu2#x{yVHkcB;F^XfH!?0ELIF63oEx&RU#QMLaJ z>+Gvt$R`r=^q-c$zy6;O&T%0>0m7Pi;p{bUy)$D1pZMe`+x{V86Sq$qacjv{e@7hF zK7*d~+&Ujm&xCX;w){^t<;WzEOHA4i1~KK;-4c{qIRH}uomiv2Rrd&~m7J>cyooOkH4 zcb@hZcF+QFKZ{-;GI;6EVdGZ(bew>%y7sAmx14+4Lv0~8(%HW!XBh26!`F30n#S?G z$>XjI4?E?Eq!lFgidO9GG|#;K=1#;P<+a=J;J~e2rz}lcmTtns9shR811)uyd4B25f&)c1!3wn0ZZ2cA^6=j zDI*dpGh!jV5rV2qCKJ|)Wo4#biz78=Q)w&_on)29&Dt_C0?IV`q4Ah0P1a7WmJmHw zYs7Rv5*Z~yOX9f1h-z=G4}6L~;ZU%0KviW;x!$`n9IWiCSB5L9^iZFWURBkvUscTj z`s$lOQ=`?75s%r~eCF9sg!N>wP7`(7d9`{{OW+nvIBrILTA!;p`1fMFjVOQ)^92I@ zw^f+lMu31f>C$P101IH&?jOo&vI8}7GpS+eoiyW-hz^U<6bov6UYA5;Vg+f`MD$Q95rL5iH<3WK z#%M%iQ*KHg0x5V;2yUB*bnz)*mKIY1ttly7BTMRftjSJqeA7h^A88O6ji*0a ze=LqF6snO{2@uoLpg>0-q;hFkA2&8>=#5yCIq+tPZY7H#f@+#rW*5jQ9c5(o^C_Q3 zm;0B3cd{Ohf)$lEr+I8H-*jP2+<4L0Ra9WOtpb{x&?@L?Ea5iP1(FT58qP@haPAfY z6*qxl4!4}C;MiO!LOLZafS=jNK*}ggRI@UjR0a=n)y++OWXzks`y|{QQ^q@a6pn@ zz@jk+2{y%p$+!lSmGWz|rxb{IQcyfe$fwb+i3GBnU=`@28uwg2RAXa?YG5tsZk3|@ z3C+eS#8~98>_E?v3$scF52B-?QPo$QWa+_>70@iBmZrvN0Jh)cc_WD~f{P_?+tmgs z6r9BV3>3{wX~96S&QIh{8L;7ev*xRsE>A%KPkw2<=vN2~`|QBLziw$O5Y{yji}mSU zPbm=aq@d0;$o+>Ywzj$2fIECdjT+|B0Gn03+!jk}6c+K}B1a#9ZjM}@Y~V2Yvz4C* zP|Xh%#1*u~y*tnmALQc*YbLcVQC^`X^r%>k;PE>49BO5*|H34l0#zZrG>Obzt7^LI z;{o4IplM_@{KY1&pHaPh(-#^*SimtXO}GF)UFehnzVpp$p{&+3wy1JX5-ia02MgrK zYBdJ@M&SVEUfOv|fs!Z1T`R^to(W7vYjo4UFHn_J45YkC4RI9Z1eR?=KqWhq`KnU% zi({&Y5!-A5llsTMN5!=?potH+J4i8cj*$NEFNX{l+HQpFR6{G(ZUeLj(gd>j;8v@q z4!F8Nz`x*HJ!3dNKX9CH@Fsf-m)*5^SZXnx*H8fK1euiHtyO1){dCJ)Otgf2V8-J1 zs2sSAT0tTs2h)0$&?{7h;M#$(i>5Ml8Mob)BNcvgP^n$1$J%hPaIUDI!i*|Z= z0S!4I{Y-(pL<($s@0m4EZytudn4DnHrguE+F zV0x2ceD$YF2M;O%1CUk8z>*3dS$USQAm&N2q}4iw&=&B7BMNU$ZR9i8&{S*2vYNe8 zHkQ1S)RH)gjNlSf-7m0|RTh-9^4LjMS*<*)f6&7+SVRJt#a7di(FH+BCfvsQ^il># zcKCt_+22g3pF-c#=}>@&<1V1%e8Zujr9V`NO)p=tU}q|viXk=w_e$iK$l;wu02e;0et=oY<1wkTR*EBVRN*+wNi6b9~7MLR?EOU z3_!@6Y_&AxC<7V!RnV;Jm53O*ARygHr$=cP!^7I=(#W^O+66(Ch{e;J1AwbY2b{u9 zT<#3GL>YVL{y zPJp08$N?Ly&#xQ&)_~}#<5`~j37+9 zJi3;ujX+kYnuEuj@U_fNc~s+kLo~2DD#r)+z=4E+5zA-ZA;95RbzY82N&MNY@PJXNq0<)7aK72-s7#c&{tYzoL2Glm zXHR`d_AwX@`A;3cs^{v0>`aL-6+~tttXzeC zDcKZ{2B()x2@gi?%i7N>0MGsuD{aO2&mPazR8NmW%5;hqQnvjHN7yzl3C3q+ zdW#WpM~4MNIq-D=oHC%|d>7=^<}%12k}I3(sRp`Z=|RN#hFz1pMLsHEUyK2w{fX|N z)im_V2hTh60GDSVHl%DvN_pRaXDWGm!QYgmO==(~rX}*!a8pXbiPyEm9i_tNV{&>> zkLzwxG+JeEGQ24gS-Njl(71LzY!Gl0SX8THlj1Qa#-mrA5X+Yf4}O0Gb91APi;oC8 z*W<(qPN>i^TfdQ%qcjuGq5++tNV&gGI81Va z&=6iC(PQX$9Rck8CkZo)qPom1R%q3*pm$GzOMk$mT8Uj|f#oI`S7mnGwgcBqkT0n; zS&p=T>U;we&kQOQTfP$mJoyD)DL{|T5SC6Jw}p=BRz23}*l5>nh?DkRS;!}EP=);B zsYo@I$tQFeiyzbB4pWU&*XS^!z2Gm%rQ|2*fX07;A;nH>Q*1~zVU=K|5(yl1vv4XY z5;uMHFTEgWrf2XvT{ZF9uh#(E{$#X9STQ z3;3QSa0@wv2!qvIwL)=2JHT}lEXIOxv%*X^oh$(JqtZ=J6bpnrDc9ZeQI3p|7${`q zxI@r~iu6-Ovi(CHesncU$r z%&1`wl;_U*R5{Iqx#9kkVs-%2)(E>Idg&9lzhMW(vbZz|ZH)x|&+YNsK%m5bH7uj0 zw@JHncmW6}V>SAjL|&hpc-tDgDL5x)HqoLV;fn?%l&llD!cFuMxwn{8qjWCC%RUOr zPj3YgBL1L@XbSdsfxJ8d&zpp0k;^qb8lPl{FbtF$%bf_f2{r?>dLj=0O~g0IEcrCf zEhKA7U_B2r%#REapPb@oj}H~M5U98bZmnvF=iwfN@<0k2`X2Fsk|)KdidB|9OKm_S zD-ULwJO=;1%+N>B$;e^juJRpdO-HX7Ee(#mNs?uy5T-0l z# zIu|?HXpsrRV|hG$ox7j-`4X`Zb;(ee%16)B3!)Z21jY`!uZS6$OYBq z@Ckh98!b}rpSb)w;-J$=eC{hF2lV7w^K2wHClarP8FAA@4c?CL#ep29(GUj{731YW zh4@?=f&&l`AHb#o>OVYPY`f9Gw?9FFURcaf4Z6olW6q3A9SH}TbPaB@6%S6<{j7d^ zK~$8ULDk9VtV2x;nFg*%`Y1zYQIO5d0%6Z2E2nI1y13=|UL2j$@!NFCRXnXWmkKpS z*>lt=ml;q>&j1bj(Z@pjkM9?!^$RFwXM!qu|0=3!cfvtPTn=Y{fsy%|8s8K^Xve2_ z(#nBOS{mfkOIzpN1zh5X_NFMJ#|IzMB-Yjo=i6R)NkXVcKeewo6Q2ZqLwWI?4G>d#_wR@#!Dg| zX+kV8BJRZKW(EDs8*TRm<0(YR=)Iz-9y0v5>Al6kfj7zhpz?n+F1mn3Mh^6#j~HPj zD~)F?gN~llqi|Xb!`Z-LcX|=sM@GW8vTw~0pJ~@ZMA9$reR)^@N%c#eXw_ya9ad#!>`T6oJZZnsKe z_G6qtvp*S+jX1skiHb`G!e#LpYW9XFXxN|3vFfA=u2I@{iks@BAY0srPze|B-@{SenG{S7_aME;fb(~|N!FWPEJi^vP z*dQF>!|`*TG_mBJtc7v(gsI|?Gz5sF>i9Qi@vg5POu+=wQd-O*_&^8>Ya+kPS8gHj z>n5Oj@-h)#TcOwFtcZV*(_0Lbyh&Dn)l84u^y%CaJDGW~eew+t9~H}(AwVZ12c8FA zQTO+sr0E5=ZG_pi6+3P|wevj<8d>54ax8Q>0!P{p+C@^?TKQ5bkmMJnto91&U07-o z{_rAM)hl^ajYyF9k*$OUjV$r{DTs&<^oRPIZq_IOdR89vLmd?tZ}0+Ld_WHB*tyBkTysUtLH;IW&t=Bo(2cew#%#o_c za*GTka|3uCrixJ5Hc<8oh-KsyZcQ@!n@Eu<$;ifb0ByDTD;SRmp-Ld*Nr4+_b?J~i zT>#VQC4O2h@x3!Xp6Gy_T>m2(L;=+>A%5AHxZ^9HflvshC_wGNDT3Oj1YS?UlY*K& zK}fHN1t;SjBMWB+akc_iaM@LBpb6c1tn9|LOdJ?v`Q zI6Wyw7Jd1TRuwVut}4PScb;2AdXjF1;_1Jj&p`2%0(DOc-6M~R`Cv0QjwP|#b24BM z)k_xp5p-bNpX88HBonsE$wE|wmJW^qbO4Se^x@MfEU9?wl36?%uqst&mCnr2yn0-C zaWZ3>q}(>!d^m=%HDy~txiBsqBk3d60vL42;oUWw*i~k#0BJfT^S2M|{8qKOraxD8F7!99FRwtogRY=DRkjk%QWfDPlPa3! zhPOe{O|U6etvC1wnt;ZC-D7+BxnqQa@hEo#4twA+8vgyDx>PiPYyEhuD-glM(0Has z0`S_iX5#H=x=t>@9DSi^Oaf|KJ28->H2BJq%d%Is%fkjyVV*@uh?XZR zZ28jyz?5HnNL7V}6Ds@@0zk7rd7+@f^NJ6+-X!`^y&U3O{J1#G=2dc9ppJbQYS zXI~ZH&IxxQJKqKMPMRhGJ1xyRud3VCN}#(5SA%^lxktHy>`C#NQ(h`sb$II>hqvkC zcpw(yVamVUAa2RHX`gDiJSyP71-Uc)3lPBIzXf$c2A{yq$Z@II0M!BOv~nJTj8{Y)t)Jp?cn85pcU{tgf0uwQ+su6U%mo~~aHQ*PAaQJy&CG8lS+96( zlHR;llJjzdZm=n4WdB;CZpUX4c0sKqo}q3w;f(B75*6*m=+Lse%Fg}OB(vm76p`6V zf}(}Y4TfuayY1Xol9Y-AY@3{$Q#dJcL{^?-;JrW92EH78Y^}Iv{$f;B9J4z2!3a>v qJS%|)$Tb0;tTL=F4D*81vblP}(di^3dEEAlab0SCjx z2sxJw4hRoI@-Q$o6cl9^=O!{R!~li(fqWrG1_luz{SnCL1=9b3G>Cr-NQ(n$9)`)U zxa>GTW%*4~Xn%ZwakAiV`^gJLIT$r2uN1Xs%?2v7o4i)knpF*GkO!ER2V_}+Su0>- z8q!P*3{^nmSb^#}ffxop099xM#h>2zq7d_Bwaw%SR+5ZNlUHR}0WD#v2kK$~s$gIS zViq7~hw@?G0?{BjZXgB$5Diif0wBHQ>;K39kC9>X@!B$`$-WWIf2KAE3&3I2oo}`!cFdPw{1x;I@DU zKn6rqaau5=4nN4%GoTU|xEQ9pM=`20@i0t3*2!qZ7&F~5no-gW7AKbLoSg-jdit3d zR|0hz0)r10dnVD2jcU5;@l1@SdX{=X8HRrh(F^5NcZ%m@{@_2RaV zWYaW&PJtyo=1Kb+^$otg6k*f?ih_U?H2#1zC^&_u8+0-1aC<;SCHWYpXZJ8FOBEC) p7H8_Fq!#4lS2{pU(@)OHOwB9VezAvf8q;)#K1Pn|XFo7*1OW3gs%ZcK diff --git a/package.json b/package.json index dd94c6e..9c239f6 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,9 @@ "typescript": "^5.0.0" }, "dependencies": { + "brotli-wasm": "^2.0.1", "exit-hook": "^4.0.0", - "prisma": "^5.8.1", - "firebase-admin": "^11.11.0" + "firebase-admin": "^11.11.0", + "prisma": "^5.8.1" } } \ No newline at end of file diff --git a/pkgs/server/api-ctx.ts b/pkgs/server/api-ctx.ts index c591a5f..ec0e334 100644 --- a/pkgs/server/api-ctx.ts +++ b/pkgs/server/api-ctx.ts @@ -1,4 +1,6 @@ import { gzipSync } from "bun"; +import brotliPromise from "brotli-wasm"; // Import the default export +const brotli = await brotliPromise; const parseQueryParams = (ctx: any) => { const pageHref = ctx.req.url; @@ -36,7 +38,11 @@ export const apiContext = (ctx: any) => { }; }; -const cache = { gz: {} as Record }; +const cache = { + gz: {} as Record, + br: {} as Record, + br_timeout: new Set(), +}; export const createResponse = ( existingRes: any, @@ -48,15 +54,35 @@ export const createResponse = ( let content: any = typeof body === "string" ? body : JSON.stringify(body); const headers = {} as Record; - if (cache_accept && cache_accept.toLowerCase().includes("gz")) { + if (cache_accept) { const content_hash = simpleHash(content); - if (content_hash) { - content = cache.gz[content_hash]; - } else { - cache.gz[content_hash] = gzipSync(content); - content = cache.gz[content_hash]; + if (cache_accept.toLowerCase().includes("br")) { + if (cache.br[content_hash]) { + content = cache.br[content_hash]; + } else { + if (!cache.br_timeout.has(content_hash)) { + cache.br_timeout.add(content_hash); + setTimeout(() => { + cache.br[content_hash] = brotli.compress(Buffer.from(content)); + cache.br_timeout.delete(content_hash); + }); + } + } + headers["content-encoding"] = "br"; + } + + if ( + cache_accept.toLowerCase().includes("gz") && + !headers["content-encoding"] + ) { + if (cache.gz[content_hash]) { + content = cache.gz[content_hash]; + } else { + cache.gz[content_hash] = gzipSync(content); + content = cache.gz[content_hash]; + } + headers["content-encoding"] = "gzip"; } - headers["content-encoding"] = "gz"; } let res = new Response( diff --git a/pkgs/server/load-web.ts b/pkgs/server/load-web.ts index 73d5b1a..db7ae3c 100644 --- a/pkgs/server/load-web.ts +++ b/pkgs/server/load-web.ts @@ -12,48 +12,12 @@ import { gunzipSync } from "zlib"; import { downloadFile } from "../api/_deploy"; import { dir } from "../utils/dir"; import { g } from "../utils/global"; +const decoder = new TextDecoder(); export const loadWeb = async () => { await dirAsync(dir(`app/static`)); - const siteZip = `${ - g.mode === "dev" ? "http://localhost:4550" : "https://prasi.app" - }/site-bundle`; - const zipPath = dir(`app/static/site.zip`); - const md5Path = dir(`app/static/md5`); - - if (!(await file(zipPath).exists()) || !(await file(md5Path).exists())) { - const md5 = await fetch(`${siteZip}/md5`); - await writeAsync(md5Path, await md5.text()); - await new Promise((r) => setTimeout(r, 1000)); - await downloadFile(`${siteZip}/download`, zipPath); - await removeAsync(dir(`app/static/site`)); - await $({ cwd: dir(`app/static`) })`unzip site.zip`; - } else { - const md5 = await fetch(`${siteZip}/md5`); - const md5txt = await md5.text(); - - if (md5txt !== (await readAsync(md5Path))) { - const e = await fetch(`${siteZip}/download`); - await removeAsync(dir(`app/static`)); - await dirAsync(dir(`app/static`)); - await downloadFile(`${siteZip}/download`, zipPath); - await writeAsync(md5Path, md5txt); - await $({ cwd: dir(`app/static`) })`unzip site.zip`; - } - } - - const list = await inspectTreeAsync(dir(`app/web`)); - for (const web of list?.children || []) { - if (web.type === "file") continue; - - const deploy = web.children?.find((e) => e.name === "deploys"); - if (!deploy) { - await dirAsync(dir(`app/web/${web.name}/deploys`)); - } - } }; -const decoder = new TextDecoder(); export const loadWebCache = async (site_id: string, ts: number | string) => { const web = g.web; if (web) {