From f5526f73c7c747c7cc6fd8f1d01e00ed5d6d5b5c Mon Sep 17 00:00:00 2001 From: Li Jie Date: Thu, 6 Jun 2024 11:01:32 +0800 Subject: [PATCH] runtime: compatible difference of stdio symbols between linux and others --- c/c.go | 6 +++--- cl/_testrt/concat/out.ll | 4 ++-- internal/runtime/c/c.go | 10 +++------- internal/runtime/c/c_default.go | 8 ++++++++ internal/runtime/c/c_default.ll | 9 +++++++++ internal/runtime/c/c_linux.go | 8 ++++++++ internal/runtime/c/c_linux.ll | 9 +++++++++ internal/runtime/llgo_autogen.lla | Bin 14110 -> 14104 bytes 8 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 internal/runtime/c/c_default.go create mode 100644 internal/runtime/c/c_default.ll create mode 100644 internal/runtime/c/c_linux.go create mode 100644 internal/runtime/c/c_linux.ll diff --git a/c/c.go b/c/c.go index e557e829..da64e03d 100644 --- a/c/c.go +++ b/c/c.go @@ -97,13 +97,13 @@ func Qsort(base Pointer, count, elem uintptr, compar func(a, b Pointer) Int) // ----------------------------------------------------------------------------- -//go:linkname Stdin __stdinp +//go:linkname Stdin llgo_stdin var Stdin FilePtr -//go:linkname Stdout __stdoutp +//go:linkname Stdout llgo_stdout var Stdout FilePtr -//go:linkname Stderr __stderrp +//go:linkname Stderr llgo_stderr var Stderr FilePtr //go:linkname Printf C.printf diff --git a/cl/_testrt/concat/out.ll b/cl/_testrt/concat/out.ll index 1ef2685d..9480aeb1 100644 --- a/cl/_testrt/concat/out.ll +++ b/cl/_testrt/concat/out.ll @@ -13,7 +13,7 @@ source_filename = "main" @3 = private unnamed_addr constant [6 x i8] c"Hello\00", align 1 @4 = private unnamed_addr constant [2 x i8] c" \00", align 1 @5 = private unnamed_addr constant [6 x i8] c"World\00", align 1 -@__stderrp = external global ptr +@llgo_stderr = external global ptr @6 = private unnamed_addr constant [8 x i8] c"Hi, %s\0A\00", align 1 define %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %0) { @@ -119,7 +119,7 @@ _llgo_0: store i64 3, ptr %21, align 4 %22 = load %"github.com/goplus/llgo/internal/runtime.Slice", ptr %18, align 8 %23 = call %"github.com/goplus/llgo/internal/runtime.String" @main.concat(%"github.com/goplus/llgo/internal/runtime.Slice" %22) - %24 = load ptr, ptr @__stderrp, align 8 + %24 = load ptr, ptr @llgo_stderr, align 8 %25 = extractvalue %"github.com/goplus/llgo/internal/runtime.String" %23, 1 %26 = add i64 %25, 1 %27 = alloca i8, i64 %26, align 1 diff --git a/internal/runtime/c/c.go b/internal/runtime/c/c.go index 3d200e36..a81e95f2 100644 --- a/internal/runtime/c/c.go +++ b/internal/runtime/c/c.go @@ -19,10 +19,6 @@ package c import "C" import "unsafe" -const ( - LLGoPackage = "decl" -) - type ( Char = int8 Int = C.int @@ -30,13 +26,13 @@ type ( FilePtr = unsafe.Pointer ) -//go:linkname Stdin __stdinp +//go:linkname Stdin llgo_stdin var Stdin FilePtr -//go:linkname Stdout __stdoutp +//go:linkname Stdout llgo_stdout var Stdout FilePtr -//go:linkname Stderr __stderrp +//go:linkname Stderr llgo_stderr var Stderr FilePtr //go:linkname Str llgo.cstr diff --git a/internal/runtime/c/c_default.go b/internal/runtime/c/c_default.go new file mode 100644 index 00000000..fd3e7261 --- /dev/null +++ b/internal/runtime/c/c_default.go @@ -0,0 +1,8 @@ +//go:build !linux +// +build !linux + +package c + +const ( + LLGoPackage = "decl: stdio_default.ll" +) diff --git a/internal/runtime/c/c_default.ll b/internal/runtime/c/c_default.ll new file mode 100644 index 00000000..208dd270 --- /dev/null +++ b/internal/runtime/c/c_default.ll @@ -0,0 +1,9 @@ +; ModuleID = 'github.com/goplus/llgo/internal/runtime/c' +source_filename = "github.com/goplus/llgo/internal/runtime/c" + +@__stderrp = external global ptr +@__stdinp = external global ptr +@__stdoutp = external global ptr +@llgo_stdin = alias i8*, i8** @__stdinp +@llgo_stdout = alias i8*, i8** @__stdoutp +@llgo_stderr = alias i8*, i8** @__stderrp diff --git a/internal/runtime/c/c_linux.go b/internal/runtime/c/c_linux.go new file mode 100644 index 00000000..6f22e8de --- /dev/null +++ b/internal/runtime/c/c_linux.go @@ -0,0 +1,8 @@ +//go:build linux +// +build linux + +package c + +const ( + LLGoPackage = "decl: stdio_linux.ll" +) diff --git a/internal/runtime/c/c_linux.ll b/internal/runtime/c/c_linux.ll new file mode 100644 index 00000000..4fc23ebf --- /dev/null +++ b/internal/runtime/c/c_linux.ll @@ -0,0 +1,9 @@ +; ModuleID = 'github.com/goplus/llgo/internal/runtime/c' +source_filename = "github.com/goplus/llgo/internal/runtime/c" + +@stderr = external global ptr +@stdin = external global ptr +@stdout = external global ptr +@llgo_stdin = alias i8*, i8** @stdin +@llgo_stdout = alias i8*, i8** @stdout +@llgo_stderr = alias i8*, i8** @stderr diff --git a/internal/runtime/llgo_autogen.lla b/internal/runtime/llgo_autogen.lla index 4cb3ec4a802fd13d1e6599900d61d0bf4a2dad02..64fd50206b65e32a9e053ad7428ef7fc1ac342b5 100644 GIT binary patch delta 13735 zcmZ{LQ*b2=&}GaU^9B>!wr$(C&6`XxNhY@KOst7*+qRudyx+gOwQpP1{nTCk*wyFs zIk}GMjy%e8kWiRlU|?`yo4&)^9U*Fw=A2+)4{#7*C}0F&_V!jzMkXHaPF5ChNHYvt}li5SAthJmkVw*ofRoW4m}AV^BW+Yn#OJ9aRn{i>gwpRL@WkJv;kZzsyrA zqskViH-8wL>Y?u(`g~3Ee7F6x^?InYG5oej$dLnoO*kV0%>)nllC>z*E`o3!zSa7^ zza1rYKGcvreQ}#Hn0olGS2kK_G##NHHcuzm@#&&aRm+ZUFp{IMpL5j$L z`70CiO(K5N=3GPg87c?Nv6wxU#h#w-vT?LV6|0_SE5a^~_naL%V4)&hNc zjK14>Ij^Mjxw~F{Jlq;1SHJzIZ&+P=5E_Dop# z0jfY#Z&#ioxm|A=N~b3we;piVvYwuAI<7o0YQnOAq^Yu9xA=7M)_@$ae|cSO9GH5v z+G(95DJZ?9Gv%awthaRPY;t&YeEx#|HgV&o_q_U8zT)>XRl?z#%0;wS=zwx!=QREb z177vY3_)COXL-VN!Pc%^y4Oap86I(>T*ows;eW_U(EF&8W`OkKm~y=>$17qwbO?^m$=uzuG#Uo{CN zUOVjHaVr~oJt5#LYo50<#UbEaE1u5vYn?BAxXw@QO1Xf)-dj>il3VS&m$3SLb&nwY z|9Z7%cs~5{u95!wc|HrhRsTXYU3gRLc?$Y%rT2Z<`orU5J;(3%zX2C;ECQRgEf*Iv z*fw+&+=f?x0k9#O=yScnjxf75^4?DNP znJ+I>PxWmHgunMbwqZBTRR8_fZUTK6w|?7$^Z6~y!d^I#aX&lv9Xw1~dVLN&;OLk9 z)iz`d1W`i&JhGa>{*4&8RHKDY1Jl{AcSm%Q*RpeyRrK%pC;z+E_`h#Hmk&gQ9;a*M zsk^Z3gvIGpRh|1%xiY1+jmt03suRDG)SDUnX}fvL#V~CWkh4>kS)&!UUUt z{{-nywc3xr*PdJ$O&X0dyBQ*rN|La}kv>Ps`?HFcoS>)*h|jHT#)UT*5yW-`kTI!O z1SYq6DF)1Vsep_mx@#|2nn5K;Z*~EDM|pCeA>;4hOFhJUOvDAIyE^fQzl4I?wJ8&L z%wJXvs>WmTqkoAt3UwdjEwt)KI@plIzYb-6iu(IEum0I)&l(E*i1q$1olz&dUo*Y^ z{%Sm0Q0QR#F7eZ`g`xO6ZyRMZlAE%No1{c)n;3&C>t|)iaOK0(C=K%E7PA!T?IKU1 zaGY+QWam-BUC>dlp_%ahUbsc16=z+$JWBhxnK6ncx+d*_x}3yq3r>NduaS>uPhOP@ zEhbU2=+Aa*KBGw2;y5yq{zZ6775VG!)0TGgm7WnH4_oUj+OwCQKgvjwru%S^j3`{F z{7P{%Gr|1dd%(s9mp+IF->oZ!s3k|J#~NirbE7@5)wj`xov^gRJ^cZt12!yXU#zGK;Q&`sY= zOUuQPkPn^sm!xU*4Ggh*)#sEH>{yq;ca1(d+Xou^ zO_IPqfTg9H@slM0i|8DMNW z1k7w|-|QK)k1uf{n`c6hKYwnY5rsf7g<5~HEY{cuCg?%^$E4i(o+%i1;UJThP^4zf-EIf&TxjX zIz6lN(Mo(~az#gyhuBoCehOw-^4w@SzwRbY3>o`-D6vE&vLd1!X~>MH7+Zi(9< z3C5jDC;9GgSJKyiROo>B@*gk$jIfK)A|xectC*3vNATpOKdx8kVB(nV zuT?M7DctKlBba%78&j55w|#D&0_RGaN_5yY`#6L&n5 zom@?XD&*3=9R*{WSt}nz;Rt++zB7h=A}~v@z3dLRn8v$*@SHd&Q+BG{%j3ECAVx8d z*2ED!dig_Oel*r9Z$ktNqjsrb`6GgwTR8-u7#|z%lP!h_?3%CJq_1=;7s%3EJIr{& zaRFEqf>{R$MJMhmc z&TU<$vTP>E3!HKNCz!!AN!H6MB@MCZ09`7dl|OzAIIt?Tm+&AsAx8Q~a;;g6V`C-E zf1#RX>x(8?<}2^YzGJD8kBOjuVn)e%8(clwwX`|vI|o=7c7kugS9BK(_3WeDD%5SL zHoZv+d)IBo6CX~Fu#$5cfGT!)eg$)NC38^~!8WZ&vI}}Y!pYx{1Crn<+f#60L2@{( zB@rGK&zoz6Pd^ULvk~IwGSWN*0Bu>_~^^8az@snOZOg`knB0okaT}JaDKMHHXLqJ`{;1^IxIqK`n zQIahl<}Vb6R41Ux+BPlxwwE1j@xK>aQsg>#EE)H&o-#A{0s7Dms$QVAyLw~ZyB6DV zK#sX`LffKDO3jjIYJk8G=paJfDwh*vU;{ME8iV9*+HiO{1NO@ingi#)sfi+zoCtNF zUHFOHT!YQ$v9lU)XK|kkj^txgNCm&kcw>ufs|Ye zfqdXwIOacm8Z`Q|YzN;H$__yJBBV-MNV|v=X?uTu)98X{bAZ$l5g;#ls$jCTlGs;G z&#dbtcG=(swedS_~VyG&@%d5IY=b-(}^k|6U< zDrE-DpU-ezzl6}7wA-zS5OyJDrjgfZ^v?`4smdceS~h1gZT*!d2zG_}+@s5S=n(06 zdm#9JGU|hFsUM23PHwgoy){b1_WTp`IMJ>3@;v-0H7J0J>`us;(IAQ=i2GTwz+N#n zBA^<>v+T$z-IBJYHw*s$B3ZI6Zde!z>fw5c_+tWdYuEB+M4(x2_l2k|$RTT|do5DQ z0245coEldbaxkdo7RIq|GVO;ilN_E=GnEHEXwMQNe=FKWjI2cr?Ov|shrV1PbkLbC z%#`Gj32IxAoyId4Z?f?bn0Ag^QplzlO;^q)J}A$B$F$)u1%2Rw*L~xK#UpWB{}ii( ziG~WvjA30zTar)f76&WLoLaF_nF@TaXsWXmYE;Zw%qk@Z4~8w@Jlp$YRQKQdA3 z-`o!R>MzqG>vL~k=xAB!So)lS-FDfyU`sYv1Q~JlbRAP4gWsA&tUT=bp8TfGgH6qy z?1k-cP|Z0L=@hP%*_QD%t88v+8W?P}{mg?5wTDkzbXT!x7Y7dPy&QwZCZZG*^ll~L zs%t~>#fU(aSU2L<)w#>0G7jf%!z19T$fq_#t190Oi)bUk@7qS8Og*!Z@)+h5sD@gc zfCMKDF45-gT`7Zut#=O4M^VGkg8sVhT>rudvZ{^^d&T#IVXZYWK4ef`*+?2+6BRki zwSl|d{1AqLrtIi~Bez=o+hy6SjcWt7Pg}aEeJq!Tde~@kLnYz|e#`vxQo+2ZX`tLN zf6z&rD|j&RxR>KL5|U$ynEf3t1w|Mv7{stG4|!vK+Jo+3a|{>O{XPEe6^`CVLRK#J z4}qaB0ad+UiyFc|?3^1e9JzMk7K@fMJf@rh^(;n&B}^f-zNvjI#&uGDR8|T$BWiQ) z!DGT&;`kwu@l$wv#^2D$z$2d~X?GtTE((KuXXafeE_iG#GUMqkFcoG0Q%2jX4Mc`! zGdfO%)j0_P0BsVrNf;89Jyr4zy`;AgHx@b(E*xCyE$L+3d(;cvQO!L_G^jad?F6p6 zf@!;95KiMV&b^f`(t~elo@I>kf6`Nvt=q(Bs5IHkXf&BDQ$wI=evZ}1BU_|=bMGJF z=dH^|;-7^D@$VWJ4Cx&phD;^~gHVm~z}}9t35K%GScI@glLjWMo{ANs4`B!9?h6i) zFxtG~`&S8kzv6woQ~ur~8|0Oq6Xs%B$Y-S0<9z{mTL0XUBmxmA&aeZkapv_dhmM0D z=c)Hr{7AZ>jij;DQS1fFii`E)^dG|}RiDCuAp?7RF?%#PliINJ6=78apzsV?f{L-j zrslOWRx@?xg^8(0=O}znC6x9SMtL2Pst7B|`Z)QS;o+VoUXnw%MU=%m@Kmg*B__6U zu56?{8V^f0?lz^wAqFnn0Of(h{-tfmx(X)}36@C)zCZA9NbYOsA8Y2+Fc`M>@WVL$ zC77m*U&t3E0ClB>GuTc1%* z$Z6rLNN!fGWcEQp!r0|yc~i?^9|u`zCi*hWa%kXzT9#zBaAa3l4!oY})I z!IZ4nVj~Z9_@GKQh@lv~>?dVxlX&po&}1FHNpmAJl`J85URE%Jfo zkTFoix3-j0rs{9ZP|^pzcB3pnWYz*L*y%k6f`qFgKhv{TkTY+(umo;k&jmGFmgcC3 z^yq0t;S~;eEM@3icCG!Qd#@OIDhAH}EYS*X7MVGBr%CDH-^rFE*_~U$_{jc2!9BXDOuw>@X8XND7nxS1^@VDf)qRvE`nVA#*ViW@!-?)@=eMv@-sa%Lk zy~VUn`YOE>wvVxqM1qbLbHcMvkD*O6CH-HH5Yt6ikRROm(Ru@{jH(52-O#1ZKEjdB z>;N&qa+)Q>9L^m^&+bNip9NA$sbE*`N#cULm=ck0dw7UqF(h_do$}?sKB;cgVq~r5IH7f)`d%rSh^=OwA#1;XeKof=cr;P+&**_j z&WbM}G&c^i>du{5@zKerJPXty3YMhi7|617e7hO&SHH}Satv0*+Qn(NO>1DLYw=`z zTl*b?REv1bp|2?j$4_bxE1iUTJ{*^s>?ATDB;D{&#ZshMNVx@#Dpqw>@=@)D0jK)} zmZ~=a@6KhnAc>^~(V;V5CjNt=Ryp3o^Lug!AqYrQePKh#KPsj+CW3wnz}^X^HHCy+yyCpG}C zGcwcMBxQhR^WGv-1K#R*m4XK@6GTKug`HAnSFmUMPI%7uQ9#FDmb+y zHAvfjw?XuHlJ+_xnfP40dVlwf97>sTO;&$?9|48o7CLWsogCA1g>+X?e`Y-Sgtqb6 z0lvw**&i0O0irFy1{ad`ud5_RDL$NyA|H?Ujlcl=WR6`~4AWQjW~fN-HIOz)C^fap zESuM(AGoj(36r<8!?huk!5(wyXHghz9u(IT0!%c`DC+zIsMUu$!Y09%y;7vY->9P# z4CaR~{+t$BAH363FU;qU{)(t74%gJhmvf2)0$QZz8I&rSVs0P` z+!ur3RZn%DDNlWf`XANB2N6KLGzE&3V>8OV+z~SON{*Agz4jAFl2G_vLO=f9u5<#T z*OXszbiPEXB`N1HS2DAk{u}SPK5YS21E05DX*`WrDvaprHyxta4pGJ@cKlb6DpuhI zcY=WHgr8iIiS%8C`Xf@<#tqBX4TH3{SNy^j6*dL9CEE&X>l?JBdkxC$xOhiFIMw<$ zFKqLWCB#Zq$nj&{KHS|tLCmsX7C4pr<3|GyH6V60wDX+JR3&|xew4dd`QR(S?O=Aw zw4fe^2D2>>>+hgwPn{aiZ1tc}EJs9ze|^XIEqT9Lev*7NHFhQ*F;My^5P$kXo(&lQb< z3WC$;9TU#%3Q(rK$K_3rH03lTa-WFs{$l7LTz~5y<+Y^ofvET>bdzamcYooNyADmZYU|PFQ7uzF$ z&!)bo8{xU_0YR2V5|%f6aej$&7-ZO*!$Xw$FcnnBEtH_7UQ?Bd-B=_6~84fhPJAWzh57vG)c_h-X zrR%uba-ZAERhRN*jMDFUbBCg+(wCECp*5Xhv zWqRe^AuP{WDN-rZjnr$7PRP=7s)SXi1YTPa28~Pyjl|ArX&zgy2()`EI_a>YM(Th5 zkg64aWd%tOia1b4j#nrN3SktXF-nr)|4t#s!P?Ho{CZSJ0A)v$_`o8{$nGcL2lG#&90v>NMRk=8eug$6(+5L*Qoax!Yeqr|-`BYMpkaDy0Y!Z;o1cp&X z?T13;a2uglFzz3Xq>GRu%P|iEu<>@g;oR+`9XI{lCR4Fq%R1Ii0I zJ=022-cdwdb`*M6q|CHV;p_bgRMKR#);)ij50iVb?HYm>b^9sOlm`RkeOD1CPg32w z16J>gPp+Q7>P1^h@xJu6fBgYQ!P^aVeRU<%2xCt|8C)C)x;)?q@`7{2;^l||)4|kG zM?k2|x=fTL&skSb*QIN}aX1Y}YYuHS6cTt6@!U1O7kXJ<&r?I73CswU3twCrMT&a@ zN#PIU5u#|}2Pl)g@43mpSTxqySVNCLU3%IDzuMRN?Iw0C;68gy?Y|072%2h2&uVo)^`w~EeTli_u zSqAJ?I;`llI7od5Kh$k6Ad6be1>K@Ih3siPy)Qc)=0U#TR&MqX1HFkvW46?_x?5aG zy}-hk!_G%9k#D+jz18_0+nFG_UBzbL^|p+ILT}{ce^cn&+w3nGZ4B655;tXo_hJ+RK7=eueP^U3vCtmE)avsf9r#Cz3zn5 zdtSlCq>x3%#Uh97yh`qXh_^#mRHKkQ#1s;lKyb~|G~n>OD6)s31~Egv2S6(Z*qh4K z8+rRtJ@+S~NVmR`Jk!MiIg=68`&PdfQ)Y~^Zg zT2+LDpt5MQOf%IVgRe9EBpqRrCwUkCMcz^^FHZ33a{O&uo!;0?Y?-ic&p$)!-zU=b zj!^P-yW`5v7ok##sQ6j#-v~5Jo~Cw^<0C$nln38^#m=Zls4NzCz4HOkE?z2hwU6p0 zx?WU@PNN^8J2r+zA#tkY$*r;)v7urmt|>GMzD`Jr+o4hfHv1ry|4AE4svn5lnSkOq9{m|wl~S#oTzP7))zOb8OK`2(Qv*C@~U&uL~GVj ziV#0~m3lj&qMU8mt1yJfB_DXWTudDAGlPB9hew7#l-zJn7<>>wF+K?Y6B)R8kck`o ziuRNA`CZzYBk80&a$}ZbjbhRCiz(K>{$+T6`0Pc@x2Y&jqn?;RA;b0@r+}Tx#7F_e znq{5@VoHMWCN5DJpi`|V4MHqY*mkP5IRa#Z_rdi5Q>kQr|q&(4~60Oh199 z9HeWCG>`c6Ku}Ocz4Rkof3|1@4@Y}L4Bnoipe{cf3ju#9l$b*uEe40FQ{F?oj;eZ< zb=K^GRM^N265+i-V9uVaOo7;?4tp{KjpJ}T-C>c>#+`Ng%+*I-E*`~xsXsQ#fedZB z9$r9i_?@~-nnz%1_VGS2pa-95;6c4>7qEmFo;D1D3;F{vuKVC_^{IX>V!E(j{sKNm zjGh7J$#R`FmAI=w6xk_vgD=o8P_)4@3mH9!h>@6cAr!@y6){+d1CjrBKF+n7cW~hb zXb21>UXd8f5_NNR_x_j;dGmYJYA2kZEO=|5v&lm|+<$|{nOXEJ7#TO61w1XFQ`Bpy za>}65K??&Yz3`2mJoHLwRlh>vgy`$(O40;lB684#X#bv?dHSMzSYOKTc@XcqDe4iR z^EBkcDK(Br5zbDisVbxo#rszHgE96s?*Xv}aXT8oJW$oS&SdQp9j{1naaWE~)XHHB z*yz%-@tLdKZvJtvm3(?7RHSKWlUD^ZjOoa? zm;-06=!T6$Y+w!+JdFLK!LtB>j)Eo-TDRC*9q|BH;t1)(8EBc;=+;Ay!a|K|$6e&#BIIj9L3+!J?St)W+ zca%C1%jS8+T-GrDi28TJ)pzZMr5oFPk{pQ-cuCR_NjE6v-@S9E&9k5X&rP>MGHO@V zV*J_UvcJ>F=&ijpVT_5D$~?7Dtlpv#6Res)Qsp^Od~deXKTHc$z*JnVV_PD5@z&-w zUd|39yL1SbSNh9|KOfyN(->$JUDnP#ERaI226J@3i(VVIvj^Oouj0?2NcgODX_k`f zG>lqSY*j(Ac5q90@V_{hM~$tO8Ylh3p&a~h!kEUvHnt@!hQz99bSJRogYP3^lTHtY z?j;+-@-9Pq*H61oT!v5U0p7#*=`W-a_bp|29i6N`)5+b362Gg8DQV9)T&9{n_gU1U zAL-<%KF778dQY=U2_T5^Wb9lE`DA2eh8NS@F)BgHVtJeOo0ay5 z$agUmwfxK|`0OsoO+wQZDtCjB2#o4Obd5Dpixs0p@R<)oA<)X$U{`iOdXe{v(cM3m z7dgok@nG@o&3in3n`7+z(^th9)eKol1eAbOn9~rGXf<`!=U@YFZ4g(&0@A|9pL`KX zH!&bgn5wXrzx?{yvSh2!=LoKfteC{Vk@$uR1p>I;Q7df|E;NJ#rQy$%t`>;y{zm@( z`S3!u*#`kVE{cSSU^nvCa2Q0b-Ds8!!zWp=mfH{pOK><^u2gvDNSoa&$b`zafJ*cq z)(d|N^JbA#mm@qRWLP}@?huZ|BOlDKnvDgyO0U9r3~*ZGjwqNAvvCBmBVI%Y~4yna|L;){V}C|87-cIE8&P4ovsd*a@7LqPbgsp zQNXw>Nk(k%U8HtkktfP=PZy5pIK)+X#x}xXEMhW?D2NcA74NpU!sXBiHwnL!(dA%f z(A8pHT@c?td?fd3!rkTfF78B;yy>ZMchVA4WLVH^NjUkIYq4iL{03Prj__hs2)Xy(;4ao z?J6Q3MXo<@_4is_^*1zn``W`c&}8lS5o-JWZy)MyE=DrQj%PpI`3o*d=8m|3>eoJ-xSi!FDH!Mw`({=;@&^fJMT(6B5r z76PH_%ZwFh?u3s?m8D>`KlFz@(sH&uo;8}iT|THgIukNxUI+IN=f$8)UaW4Zt`4B zXCs@Zq#P(dv}!hw+dv>{zRqGG_Qp!i<{*?y$5aPsom%(8K)h_V#Z{Q&EMMY$)O^zZ zB~$7a#7NllW0rgU`D@@hS=l;jyw5zp4}C#WJ~hPkonFK>4`e~UbuvHk(&mmdRke(1_cuc2^WGlv}qLxUfD;;zgWKUJoW1DK>u2`!WY;Zi*uirdIS z((5=0I=NPYfBv<>8u3=j+a+`l7C~2tvG+}3o1{W0V;)ZxX|0v0FFBYdUQPtrzgc~d zOWy3!KVjBd1NzKq^yqIiZH;wd!@{KTr*q-42k(~RQUgJ5gtet-me$*0NmO4^z{9#eD;=(V?h{sEi zz-*)hFT@UnyNOswU&Vr6eu-}i4L*Fw_kx?Z z)Ht^?&T8`_A<|2nnc3Ett8?IsYc!5;weyQ=u*Fp#4{q>oPcD2)|In`I-Lj&Wd96Ci zRu0Se2gRc%cZAa?N`>Zc&QKj~G^!ENS6LZ+8Mv}|j@ISi==gtFLKQY&Tv-Rr^o-<*3T14hJN(C+>|M)xx;7H$5kMmh)R`e%YKoyNIj>Q=bP<|x!;U_>HKt+DGbMFE z`}`mKqniYk0jFj1FN4oIkASTAQne}66`*J_(;expABLCDL!Z${3CG%37dNJXd$mh@ zR*?_HAJKSR{69LvqSuY;D66!J1d4MZ!^%FIO`70A`Iga?1btc@)@o}LA<#jp1CTKY z&y}!&9v^q=5#xz|lAfne?*(v9o>_Q;D1#u^r)_JY4q2WCpR9I7HClX`KtkR!weMpQ zLqXOR?jfl%$lx6?{|Z^A&j+-5$>M#^!guW z9gE6GlK$_-N0k$X1tYOB31Y#3PJNh;KP>hZ#&<=XhHae}rbJY;;Eq%KxsX)yTAO*$ zkt6ezb{6`Q5t@>;_rZ2aA7@TWuoM@q5RVapF6p>)8h^fdA31KwWEA-N71%0-_h4Mg zHU~%FS?m1|#^lmiu5AX*N#w{Gag1Y#DM?N8|0+8TVw1fput5u#rIZo<0xXLB*`1W~ zg+m(3@~#MH;8m`R$*G5t#K^B~X6R^#Ju}}yoHz(4i8fUc9=fA#YjNWi2k8A1$W3;FEQnD#1o@wQ!AuJm(Sx6sr)HL3Fotdp;O< zbeLxZVbJow)Iq!H_`a0;S~RQ}W4q$_dw?Q0ZLeQw=S${}#(+d+ef0x#@!1)ij(3zI z^qKNL#H0oT9wCYJ*p%8&b)Pc|AH;`Kj+Cg0?PVPtbzhU4{d>*(YtYm)tQx^3xsGc-#PkH-85g=tj^Nwo`Zc^4t+I2h0TQN1+l z77wuO9<(+|JjoqpKjxz#5x^{k`gA15Ba3+<0bPyLKSnN(cGVfU*w)Bz7uu|Jil83B zl#J|CusGy3hq^7Xhk@0NCl^IMr|qHJ+bZYw?u|64Yo(F+@0{Gbxo4S#SvaOTd~x(I z9KUh%twwLjIswss7zMz;HPHJ3FeX#YaLN1)n&16+IeSi-`h5 zs7n_orvZI)QSIOSEF(&DKwC@2A?6?TbkRN83KoA}x~YstRjt6On2$`@d%IkGM51M6 zK!VXj`9~&BaLE*6B%qTPr;qbS~_S!%8QAR68PI$BBa!nd2neH(S@ywQg5g_W|++N9R*W7isB23=h6AsIyYQb=mZ zE(Jhu(sa?Mw#ZqSp;m9d`L|g3aG23;wXrR462hZ1~9!K*haG2>pw)ab*#uii54S& zJ^IgfMF-RcynmLbCmfc+&FPB|c%`)34YEbM!)))8Tc;;vbqN=mQ=?_u072-)s+1GQ zhM1`m7yyyRKEdxY9)i-lCD+7WhN>;NwAJ?<-`MKqjq?kII4=6pm(cy3MrXCG-l=Mf z=73du%m2{xBpEtU!E);6+c`}bEjw`9Asu)fvX;jJjhb2=HINh2Vf3;rsuf6 zmefWI6BRVFGF{T}PB1J@5U2_qAvv} zKj?}q|D`{CyHF~@7Eee>$NoS;aoS~%|4mbg#A1O-Q%B;Ftg;9*`Wpay3JE2;aG7*sQ@u3_@AW;cwNBOS-`moXP~q+zg1X6t1L= z`vuLXIV%SPl~pQn(&+len)-*=k?D?MK@vFQXan~cgJ~hpHI8R^G*q+8O1n$n zulkFc`Y{kZBtC+Rj%REj^8B*QhT__qvgA#%<00TM#(kd46$V0zmxh1`GLkHZ{W`fN zgw>ZSh0KcB4fEPx8GrMhBtMrD(5F-&+Bs_Fqk!tMjVr z;qt0_&qML5-o<{gEiL^>YL7ts$J4UA6xiJ5V*+|yJ|zC_b%nk!gGDG|G^A|PhV0v8 zv0%gP7ukwme*)p*B26cY3W-%j74g&0rXjtU;s(jM|3pePhHf0}_Jo)6$^QtcRQwXq zmB>nz>-U(3kmc^26c!ilsSLJA!1Unbax5^L0Y3L!m@Z$?I_0!;Ian58@*`5bUAGj& ztQ!=!L-4}*30HJI|MUC7$uyDc$f$L)3z%4$x@888s&-L5i zXsuR+7g1`FZS4LhT%^xU`re7fc+tDb#GLq43@vf7h$Z^#kArSFnx?ej567P*<F*(xLJ$E#@OnT!^4;N?#EtxiXp5%bF20#^cJS!s5thWd~^k4>%lC?-g{ zY)f^wfq7A*GwEk$t zD0KFtsm~)V6%{S3f#!nCNJDxgHJQsh0k(R&cHuM?tF?v`y5wzx z^1+GcX#Xv|p61N%wFyJ^d_cORi2%q0V3#6Eo>+m-a_>>;^zyq!En`5F?G*k*%@5h6 z+h-WT`~RsY0^TnU9Govw(1ZYhp6x&Go^gEjY1uu7Z#(Q>zmBP47ob^~)cPR+&z*GK zyMe-Md_vi!1~qU-7tz`obI;6k^^EaMgxC7MrjXN4)nQzs8dWMQAe8M)lY4_EV>?qN@8WliL3#VFZIUE(R5_R|s!FL+KSI6iINeN% zHOOiVsoBnK5*eH7q3;}ce@^p!wLjZ>-qqO{et9J3%7L#X{v!rPdQG~}Hp;Y4g<@L1 zDtEsCu44L6<&az=$&0~>tGKs^#|yV5zux!G@E>W#nw7pbj#?|RJ7cSr@6GKFkBZdJ zVuQm9S(~2O9^5?sxFINa6A>34<5>87J2woH4&(UygUcgJ+0w+P!Cx5++pS!0<&RFG zU%y8K@H;nZUxa{X%$cUc*O$qLV^a~&shh1!%SBZxAxFVoE$)4T*bY3u1LBs870-@~ zlVXHnqh!&qh&ed(iw88+6c8J(2b8omt{9iqM9&N9Kx2uuu`t|{2ztPt0t?VVs8}cc=y{*TG zg*_ABh0VB=tF5Wejt3!Qr{*IlGd?}1l@Y-At!{mXd+UbMk(e_Z?SpU~@1xYW@NzTl zBK_&@p|;9wAz(0UAv<4-i|cLZ!O@qyre!3peko~$p(ej}L-GozBVymwvtzZk#VPx% zL%(IDZXKxJal|=TtIB@~4G@gnSbpr(ar)}sFy#8HJNnNB#If&~-CDK(x?<_#)!Hq< zsOj19qjY=r-aY)Wwbl&X15a z-vRB{*#B~?jtM`zlpbI<1^C{GKbFNt>uf$McYJz>8h-<~dhvfeE~W*Z|2x1VG=u0; zYvbV|9|wm)=Y8_ZruSjuToyC?qj9(JZR(q1XxMdwV3Yr4_R>^D*vSB~Wv_t8C|^2E z_fgMZNRF$k>@zbraz5;VmoAjHk&hEr&(yp9`6CnaTN)71qOE^j^`mQDnsj$*EBZ_OtLY{_I@ zw|wX*!-7Oxn^}I1sdlivqX)rrvC{y$>dC7GSOC(2NpGG=+^|Xh=v6w_n=#n1JR#`^R0$(DA^hbySMJNl z*iPlrSCyk}o(F*)i4T9Qm+l6@XeBM}to9)+9bkMwp}qR1{uLbB6BrsDWF?YB{0Vky znkjyiuw~@=n~W=%l?Zw2^EvBGZpRg?r8JS^0LSSO;pS$^w9#k59vkPDZ|@^pP%U;e zA1CDNDW4(VaozugX=_52jixVEQw@>tu^MV5!w+30#6DDco$t=pW@ZA&l$amDV?}_t zq^zWOajUT?8}shZm@aZv&>8m44>wXKO&YUg>e&T=Pt$j2oHa^gtKmT;dv;?Ni{O&N zK|wMKByU=bqns)QroPT!AQZ7bXTm}<{EJswYJaD#TvVQ$+GMSoAT9r@ytB&QP*M}U zFu#j9cx`ZEOSGe`VJ)&VF~+UA(_Y_^!6BFF$lFWh)f_V^$~~$QijVEn&^5 zO`W>sb8PV2V~OGq_e10lPogHe8#K%Fn#72Ik@lKwy)`-or!!>ztMDvYe#b`jIwN); z$x?9bahA@F<23cS3J#0Q$Uee5lgsDpKIW}n_ovA@_`hnfJ8DfD{TSM5BFfpXf^ zLv;=pTnHGM+gRa&CM#n2%o6SUhH}UW72kV&;rrp|`6Z%5;$q#N!5uw0QAHu%_Jl#E2Ox7fq~t8bHDp>q&= zhN=1dPj`2R5g{ia_3)C4YYR^rt*3J~p?3REcjKn1gTWJNb3%BY;&MTcN}#Jpa8n5# zw&)&KVL}mbfjS(@of;>&A+Y%SGlaG+!Q9dDAl3#Dy=Rlh>{y(j8EJelR>(zhqxGes zs*gbTs;&Bm9|>#mY}wPXyh*!A8raaQoC5tLcqbld$hi|R5cKCj6pGZnVc?{RFK`kZ zAQrj%T$K$RG1AKZhI>nLS>TQRAr!*?RpezdXmZmznVjJ-{m(eu z$Xm~-LvP1>B^k=<2!8sPSlYZvM_(^4{jAZ|vZ;uWthbtf*De}^DU_I%kvk zn%VY}x5v?Q7udheM5H06;$Pb?B&vcPx5O}WknaGvsS~CFk$r*}kMEkWMT+o*1v62Z znN>6-lDAr!d@T7Js+f)lnZ=0-Yvz^@Sp-YnHcR76E*#-Dm32#Mu*)_vR!PX#mYAsl zD*AnPEAaSe!(wh7njo32Hb51foV& z?s44aWP;J@P<|?k6vSWR!6w8@`*|~mfqzJ7O71bU$W?SsHEmq7qI~96L)7cT&~h!xD8v#v#d^OQ_~Fp_Qe;U zSbh3vdqL-A-cLw=+{HchL=?261D2&93^slb%ZQPO608se8GnbSv*rExK zU_|Cqcnf(n6r2|q`YSuvH(t{fSiX9)ZGtH z`SP#e!lFSdH+_?PKQqBKk{}J*6*+pfG;IQnH~RRzx$ejv^2}9i}xM3`3pD0VjMCImFih^VR3I&f{Cm#k4(N-N6aM{Uw)M)QT_2{hzX@? ziUN|cRZHH6YSLu=NaZ<)?AjZBiuafLGFr088O2qWNA2MriENm_UzEQiVPSa(@IL*7 z=TQ*(v#09Wy!OfGKE$$2Ypg(`p(^g+kTfrnnH=RCD?VlS1xZ}^{tmSfSxroIBVhnm ze>REd&-O@#>5W7FnXVMN#d)gy{f3g|Z5g010`@ z{B`fS*gl1n5i*O?GuaT&>D5xUyP)lm%7bF&hdpQqRMqESQB#x`Kn{E+qrtn>k+3|_ zuf1-~cu<-z;P(D*rU(&9!sC2;dalTk8uZWe{=DlA%5zD|Wf=(~I-wN_Ea-9}Z#o!_ z{b@I59-2kyuIpaM!73^f`@<(uA!;>EDWGEg-%)nAx_51}cMLrfxl)+6t$?T&a=fTv zocnJ}5}oNX;ftUb*epQ2k=EExBG6fJiI??X!OW>Ub^?guiEN}yiBO|(ndz1I5YnaL zx7dVW+&2m>#sv9wQ#WiP`~ktHoUwY=P_c=JLdp<_9tf*6tJg^=b0(&6p*U%)UJ%#f z%)!x`6LrB`@FclXi>#Mgte4QO`#TD|^ufPh;C?1AtT`Sm5_CXdW4Nt|NuYq$lJT8w z5{w@Gccd0rKdQcOasy40+CuyCbmM1IG{c3NTZtiI$a=HL{wdaBO-;d!8o`czik##9 zl4G`LG}>q*+vB?=1e>z=W=t_<ppLgTJdmpdY4sS|EN z-?yW!d5VR=<{f1_rlh(%^lk!|grje#hurxpMM7@p(#?Jf7BG%bKhLr>1IuLA8*>C& zj8Wl|7|4Zl&`k{|+^GA^L-%GE|DL%hVm&(<{ppI;V zQl`ex>T5mvFPq+x7UYMpz1Tzoa_4ED=5Q;5jJLb+LxId9g3a?!Z>0W}MwMab=PsVW;sZ#~ zH|Hk`7%c2QMKe?p&^kQ~J-tCv>CgId&tM2i%w!9PAWZd67gSBL;5Pg{u}1$G={Ovk z2u#3at$oH7$2XKcJ4eQtWc{fPiZ#>(ilk<<_3bazu1=Mi$>(rh(4-wMuJ_NyhsP4v z7G>pjEBs(SE};aGpfN`#h%r14$67pQY)Sl}wrCJm+RHp8)QkP zGBVFczb#hX#Fx%|IiZ9nw)_<>t?$<36m4x#!Fy0+Pj>;!X2!0rrk4Jl`G+B106MU2 za49X0-*77f&D01sK>Q@-n7A@x({-wNBT&XLT79B7a?kyy>7iNXXK=3cE_3gfc%JfK z#SymCff8d*2Vmhq5VL4=QME8bh01b4>VmgOH zab7RO0igU^fr76w9&pWIXik0rQ=$fDH!uOP_O- zAC32bIHO@OGiOAekU5bdWlg8pN_nMEgp~xI+L1+dxRBU1gPmWbdAO*|pD?4duzPIZ zdLEK4cG>3#LusczoFwQY$m|&q=-)Cqjz4Lmy1&WruCteynb$Zp+j5Y*E%5iW&ZG=o z%9fSK!QruT5*KUo-jz)tXD@tfA*ALvf|}+m?OvwJIr&0k{f$$zBJ2y{1EhyvphcMJ z!$iz2lGT8fZ0;JO;$^bA%S5a$@gj4(bMq6J{i&X`3ZmNtvR!Zhq(KW5z=;>#7mBYJ zd=usj3d3#g8SsIHTv~8{1;DTR$v>LnY|pwI)QU3n2tzKk-$Yl&3z~#T2{Ebjvhfi{ z@Mfk@Hk!Up(C^hj_np|NEg-`uym>l00jPTJ8g0YHkJQWE@4Tw$>SS5zjHc->Jozed zW9)}s?pcOz*$2@1u-JSKAd$HjDqFm~qiRh5k|Jdj1DVlB*aRg-01j%+-lwfEu`p*4 z(YtEHWN}kR>?%LewJN;OCCehiYkG`8< z<>!}boJW1IR}3NrTrjN=Yi*tHgd1PL$WcavLKUP@7mcABZg%E4u*%k4u zVNQj~!C^bI#u9N;1rfpLxv%kE<-!gsECWe3Z! zT)(5U`uwtflL#z^GhsibBjEUcjT&`07{+}+!XZhDd`z=Ix3 z-coAnQ}D!fvB3Rl(Yhi1u3vIn|Lj%K8LFJbTtwd*eXG#8vonIAd9CJG2>3U9z1$ui z?k!yi7_I&WDrHG|$IaG;oTukyAfFN27agSL+Tt9>!kvD)O7+n0Z6tY>3lj2BHJ*~B zvi^hr(hM9>|D99#)BKWbLqdSC)@U>mnxRQw@aOQRqRtqOS+OI*qAmj(!nl-jRcU6A zrd)_hmBqA9Mg_eSwzsj4M53k@bKK)gm!XXx6@4=Y5F)$y%?lR(a6R~&%&j?|u7QiP zeIzoQ*%m^V#WYJMJFGhlo!yoA9yQiaEIEXH(!zSo<7!K0nR~KcL%fAoLa@5+DEAx< zJYDXEX<9rmD(#w6_vpJM`RPwG$?$clv_-9P+Ih+FDjFgOEUY5jM+;vTy}3inr)$dv zcUY}fK>x$v`Wti4pS`}PWkEntz%q+|gQ6|0#VLpwTw%ABCf$mnn8G(M*GgNB1;Vl|je)CFgpVr%KTFdJK6s&m?B8ZG z!}|^z{SWvNDNxsr zRZwclLXft7Zi7e(q&{`T90_?^^?vT&xl}UcnzVlWIsyvaEp%S&Jh`T)@)@i^e^vs; zgf{BfK7sMuekIF(FYy-C1{acb$VD=v6ffpRh_}bvMu5M4%J*H_WRn-==J!azYYEU6 ziVLVR%jA9N!&{h*g2~_7;o6YFV~bt%wI~WOCyDO?@RC$Bi#y*D)ha_TVUn-PUMSOU zF4Y?d26w|2`=>;F25!7+ z9IhY=#TNtNR8Lf$sZPAV_p<});)77UmHCQP12f9KT#;kfN{*AgVD=OHl2BM(LPXEk zE1jD^*OXsybdE%6B&Z58S2A+$9iuYc*QYH?e#0ei|0xMyA+be!(dkvGCxgp#7&DKXRP($Z3tK;kq z1%6fQd0yD&E<=cwx`>0Q+djO>E>X;~a1?JUiHN8H2Nf}HG_>WE%~ZvDnO>W_Bw_E< z-)( zG&ES{s2Gq**%fyTRJ=TuL92~DTaVti7#2IWnRyaPBUe8&f2=4CRHB|d?wGLVR03J{ zF6UQ0(p1v`Byyje9r42&pN66b>plIgzeNux;;>v)vgFg_2GgV?hGm|o}*7BSq zC8W^Upmc*UL>se5u_c0LDmtu8`JF7E**BS_)~lkWXUnlw zueu80^zc`6D!HyE6FyQzOwmVxD`ln){h3s|)42}K3>$rRf)pM9TiAUizf(6+d?LWySgFXO2!lZ`9aPWW z_g>`6AVl1Lt`D7LdpXvlLGp=C{)w-uB~u8rIvn>xC?4umD)Yx--E;edji!s7BH1=d zsVjcJeaXa)b!LHI)2?1@t2j6+IV~?&eb_&M9plrMR^5x+gk2O_d+NR&yW61Y*}S^+ z+M5|rakB1JGgXxQM4zPeRD zC)bo=XWfnH4@#{n+la};*@CL^e3-Z~tyV(%UEH%k^saO_II<59bQzKeb!BxKT+YnF zzA@>yrm{MN{*W=`?&HlEH5Aes$WeP z+5DvYrLMCfFKh9nd|cH8(ZmF%iCO1SWvJV=t#Nw5jLt$hhfVxTVTRv&gdf$F^0oMN znf?t${P5T0S7N?~FnY11Wd zsXJ_=HE_RRF;s7Gvi&>khumk{Xm7&sfIF6?prUrlT)IKx#BfT+C6va#3#7YQ-m4y69XH*N~^H zbE|NEjh|;m%elIi2^Dc?Vfgons}1;4{&V)n0C@A{ zPlZP-_1zgDV~nwArn9PKX zBhI9j)qbSO@Fpe6vb37ulA~$xiYcX$)5?Rk zwoM&(%JNx`E1^XA@{8Lb7kd&{rP<}3Qr4;3UR<>MvdoeqJfVg;%v>n`!2CdOILyEE z)|%7-(lJMFj=*03<^c!fT}4cM>`VR;^R(VACjQ<3#Kyu7L(%G;vznnJ>|0+Q$0E_4 zo-~zY6@jZ$K{tnd!*=m}*N;}}R-BVVIz0eOh#W8__qCIZACDVui*f3UF9*(%wnnTA zPd_972WG;x&Vy>&3@(jw(5oUcsziNIQ2$g5^Z;BiQpN>34ZgAs+KM;is-AF_uz{(W zC7z&#@`Rzf*}7X0aP;T;HF;T@a(ltTg|8cHP}vS{3m%g;mQ-lYaTbom!^h_n@E-WS z^9~#)iAJn8TGQyMZpL_MjY{3M?9VahZ@icYaL5iSywDR3C#zGmvcCo*?N{zGp1sTS zOaVh|uK`?w;m4J(eR#Auh)h4BnYHnHjbB_G?{x2^jF#7`KiE#t5*P4Fr1<|<=Q(SB z$#T=}M_nOY!l^?Ll(PZtIOw2)Zxd2esyKAm;TShPFRAs$-7Ki#YTSRKZwd4jDVzD5 z`*nt*Z@f+o>&cd8%5UlxtummF4!^!qOaRk1RRjIDzdq;V@U)fsO1w%46lD>_ff$w- zuG)EwYAA4M0otZovP}N?Xnf=W>dtc`=l2w+v#Xi?XTrV5IW622uI3_Wd6x0>+h5zEfva$7L@EMXc=dM!40jEFRFOsY2{fdA{grb$Ubx46ngIPPD}o+K*+Kp z(DaE^643Y)7mV#4Oi@-dNX($B826q~{IG9!nLUU1e>#zFFgj8p;N zsne~w|NA;uxJ>Dzw)o&QOjz#+;gni^tr_xSraM3=FXj^ zRK=n?PVI$Of_2szjvh!F8y2}*A_y^}XNKREL7tl9RFNXr`!g<>%U{n`HSnsNfmxCs z5I5gIIRs+h>-tp^YZkXyzl9(4hQaTmnGb+W&+ z!`OI;7ynW-XW|Mhu8OXq@r>6xDyp5WAH?leg5i{j<{Z%dJGHx|TdvjoQMK{5p7^G5 z`O?69GLUW!p;)#b*#pwGsAe+f(>k?XQs>2o{P^NBTa5TMqZ9os{!tj=oqZAK&ZR(t ziIdyNDY{e1;Emzpt9b&VSgt3@e9P1O9HVn}rl|C|=H!&boWW3j{r_y8O3bY+aw$Sl z8$nov6+!!;AIu1o(Lswc%+>>8Il?4+?nedqImD}^IpV=_D_QH7gED)@VzK8dinT3? z3OE?PqZZ?GR3*oteW-pNFP?s^7LM=6&Wu|5-wVFM!Bzv`TpEC`#D0?IS?u(PpK3Bt z9V7-K!!qFzX7wWF+D+vsVaN~~431s!qbMNKk4pbnaw0Al7U$2;P(JMfFr5l;QIiX8 zqc}oTNV^{~^Ts1I?CWYR*Tx})I1e)HYYJf)%g13RmiW73*h1sNJ*W(pQMQ$0oy8XG z?*I-BOGqfLJr=O8f(*A_;5Z9|RNMxN*-NV^zlh}@`jL&tvPuymUOZc5cwz zYrV0;hrshTsdcpUr3(Yr1o*uu%W?Om5&t!Mj{uZ8vcW;t$S8~UM)K+|!Z1V^hRyFb zz`;4}&f%8f?<6*3s#YknaZLKuJ}+ZOYqWV7H{0#{KwulHO^kepDPm`ynWG`$ie*fJ zGj!8j?pVAbVblCSO;XQ_OPgj6%r^uYz2PTr)uYj>JXasmCO$Wx+e?eK)4R3O%TuTK zxx4E8bI{o+E1eBXrf0niJ5j_7jF}zm2lJscmsAbb(V3f~T^59DW^tffUy*gM8dTPN zh%D3u@Q4bDLpyc&Ppd^SmssTxnkv$o5nNay&HF0d#|zCv6ShbrjxtI}h(+ODwQfhn zR1^MFL`k5XOuHDIYd*TNk!ErDKr&i`Z)c=aoDAG8X$r~A=63{;2r@{7h$3xL!gP$x za<_$mP4p7wDoI2BkSMbRudu1?X0<)_S{k^FwtK0(tsNA;9D|+X^V@Q54Q6+R8_~IM z`*q>6H0^?I;*$kYRt~Bl&&AY#!VY4Cj>NJC%uAEW+zy+I{J)C_NTT5CRJq6{YG(s;6T{AsPS*~&3FLMmW=ts?yo@NOZ{hYSj|O; zS5V=}KxET4U5^}dRkqBhlm;#uV<_JAebxliYYN*OT$*VPk9$=o0n1V;(ZJtr9}aSw z>hr&nk4%eXsf~F))tv@zY1*jF&?ky_sZ~j8mNHPyIH{mkV_&W|KR|t-&U!E^JL=_6 zQbb@b67FR0J>m|mzsREyZz<3&WRoT$pOau8$b~aHJT{X{S`@v!&w=IU9=HD@>iK zI1+=(Chm4Ob*k(F%2l3AacXssVDm#Yz7-6-!}Fixn3Om(X^FX2f2YS%QhbivER-(@ zLz-#UcX;?l^dB@{i6TG8M_wypY?q6x?|I|CjY^0`kfR@+f&P9AcP^{=;nPx)XTdqz zJPGeCjdsj>*Evxw1{l~7bm-woV{GwLOAIAn3Iw0tk%r_5Qb4AV?md#`?L@fq1Vo;_ zkOrMac<@eWC)H5T5H3B5!SDdE*PjWIZxLRf#OU0Clgn6_%h338@F+x60=Dr}EbmU6uGMzX#C5RXC9X_mjmP=bKw9E@M6Kne`vV~AqS^1h%_>pps| z$6&v@)F5WdDa0WVTL>eEur@LBYDEOSgnyZ;EMpGuNG#j2rtvhaOAsJo47y+H3pH-Z z-a5N@eSSCvYTE1TNfv19nZ+IXW0y!Ph z(TW5s=g&^UX5k2eV(d@3Z)!vaHLPkTw5Xb+iKTeO;PAN7GOk$3C0D}RsgmVXe4=#Z z{i-pXsgYHOQ~QXO5J_=vl!YqJWuu1D<#TGaHZ9bFU&(o+%iWu^7?21u+N(pc`kd|L z#+^Khj}M^gm?K zx>>&&R42{2=QSXDk7v9JMTa@NVNFK*u)(3um zdutY^=25TlIJVB?KV(T*k{MhrDALEnNtraQz7S2^dMX4{-qmHaW$s zWq}ahsIrq6(WHJ=<}_WrC9qQqh(q-kI98CaIjoICqnD#ajpuci=3gWozc!I z&E2cI{t!Q0tpivUqD(!}J46Y@%Jy47r?SOkDCyRb-)AV4Lj##Lq^i2rtBjS2zsMZG z={6}IblAy8!2=?i4JQn}>-)`?FxH@sH@%;-dv9*@S#|X6Xodb^!Mo*8WpZfF{e{Rk zLGBGN^+0ZhaWGgAnz+HmTf*7uSJbdFk#5x4vvUzY%%Aa3o*e?=ijJsT1eb4B_0nxn zPnl;^)K%eT;vjTR$bO^t>W5xB`Jn;uYlyw060XQuDFy?Dx)v_k+64F19Per6^-eK7eZb$EhXhhSjxR$_|9r$-%uWj-7S8-l36YvFq6pQ;P zJTK~*BYIMtl{?Xod*Fm{dCMf!mLrn@H-rKcXNemR?f&lN@^heKkj?hGpTb^iS_!Sp z?9fg~#n4A&yPw}jp>(gI)nhq!BhHc!q?EFb0?GNaG^!!b@CGC9)vc&UX{p}K%aPXd zB`+gt?ARkn*+g>X85eWM{-y$m8z#7Wi#nZ#m<=)+;LMXOX-1BAavLy!@MTxO9QrQQ zxsjc%id$ab=GZL2^|vfp51u(Te7a=7wXM5Cv0Lfwzgd?3;ucv zK{?v8Xhg}Md5J%;`W1R#Y@MB$Lt@6?nZZT=26-Y^kP64Sd($V$dnyhCm42LTuxxQ; zdd`MwD#Vj$;{Gqnap*%nDk5iL&a7~1;(WEl9+&hp_$C(^e?Bqy5K6@iX*_NW*h4*4 zp2fpzhm*);*)?;quP^2|1q~tVmvvGpx_RLYFKRtt5tYrVNI6&;AyBj#{IHxWIY(j} zRW0v~WbL|T2*l*qagUM#P%0ZtVow7pVwwdD>k#`-3sk*TCwT!_Id z`7tZ_06_=Q>rhXW_1~5Up{pMDlB$2m?bsOw=-g1LHEoMo?qY@kpGHLsG`6y~5_hpw z76-Gg0@A-GI+wdzjm+HiA@wHxf=Hq2cmRd{7&6)zt(6p2_3`9 zQ92x+Sd9ZM4>TQCnR1(|En@z(tlLrbVyclFdCyVMd)D!Ae?&8+*ue@vZO@T}u}veK zs%TirHD=Q0oHRVZC0ofXBHOPF!&yKw>=@Pr?q5b-6<3ejLt||$PBt8gxuPB_FiOwP zg}@LJhCM7F(mYEls{9u!g9l+rR9R&N*Nn50asGL6WGbL%W8!}v$^5hr+|o@cO!hF- zL8yd6!NyBEy6iozhm&j=_EU6+r4TBEVtR@gJUVpNV*omtLC{E{YL54J+@Pzdj^h?* zK9R+4cd65%m6y^uuIr2#j^X>5&QvKC56D+JRn~(X<(gk-592emR(IhX4gl|Sd`^ayE{5ZHp-PY>};x|H_^Zhxr67II~~EbJp8+zJ$W9n)_vQaQWX={OK`5@5DwGvKp4WOP3t znl$sg@p$n3^Xp(!EKTiiJF@f*TztOiOp3xh>1c5zmT(cWEY}bCM@K#@by7Wv;46y^ z4_sl@N8WI~E{y(VM-1+G8G^}^IWF$@5H#kK*I>uuKKNEB?m=?cshPmRh|vD|s#XcD zVop&8{WUN^z>RcZ8f_~kk0$|dFa6yDvl;xBYykWfEJ)eYkPL#w_!gr%chRK|I&&gK zEw?&Sj%TaKigOJK&)2+j;D07|J%fJW#_$!>H&3=BPAMD~JFY2`C5eSv#@3B`e9;uW zYU5FDErO$FS)yMIUe>DRyXN@(&W)>4iI9OS9m7)Pp!OJ_uorm5VB>`T)74jKin$7Q6 zPH5)ZVCF-9z_a`1|L$JSxIdhZborRSv_&WpWnLyS_IuWRTow5p>jLF|Ze=$e*7?I% zGlD^kr=B%%%3cutoGg7h_mWRl4RiVs-+WY!=HHm-nok}|Z;1--DL0d`JCYXDoAhvK z{ISaRe0_{cT^>uHC@~NhX#oGRCPs79N0hGy*>ozAKd-l!7&#MHuiL0T$xnbSwpb6> z3k2*m2FbW*$Q`UXFa19xF%l7EOp({o*QiDoc_mzy#Zg-BN4POmGy8Q8&TPPbnd1>I z5!URy+V0%%v;MB8UI`Wg*9^zNEd4It;76>#DAXWs$0>eC9&rB04zPFa?+q8#Ps=UN z4{7q4Z&CZfnKH*$Nx%c?O`dxnn-kQVs0c4LExad99m`jGQ4q5&b2y4ON*KmRj43wI z7YePYh?2$&PtYLf=i&*x&qfPt)MDsq&^z10z!N{3v!8FBUQKPCejX1P(6tS9WmST{ zN*GO{0^%6FnvEQs07Kj^4xZ6HgN{%yRSBs%Ef#g%nviX$HFx}J!@Ud1^LAka!ue?Q zLE)hjxT0OdEP5)NF<;1x>z73J{b*LO_x3m$0VD4a5E`FYZOLTBG0{h9Kh^h5^S|W9 z-!Z{BMkf3WbG%X9Erpx9XsFaq9PT!__-<^BGNi~7YtsG=0vT8PTq9j_Lj4sTO$EF{ zL5xUmN-%t$Pf8DVIh9|cJNGYfV3LGc^vGz9+(xy?6H{b6T90-K)BR`<@(rCNqNdw? zme1aqwHeME-ny(N*^P z`;SmJ%>zd8thHdY+Q3Bo*0o48o@|}4<)&PVWlmNM8;&cjD>!wRHc{93SX8up`jY!* zJ-sE_xb&uA1T+>^TE$%yqV7_5lpqrmd=j2s66q*hDq1J~;&c1=24=thv?aDSUu}eP zcj7WVKwIhifNm*Tl=(057{A=pjgQU?^`p8aM4$eb#XPYLr@VRyLk7ccKks%g58s{7 zS1*E1AB#a0$bniey4VOc;q%><;Q81a+`Fz z{uN$wP0J<$dG~6B1Gxyk^t{!;J3YI;2H31#<1s z&8^)u{bLJWCeG)%fqMU-Ut}3Qg{?godJ<=0+gEgA4CGf2j!$+A{`^stBsn!yq1C;V zbO=xF@wAq0fBYW5z?9{{A&4OVe_$2vf4~(O7&sVM@**bz=>Gy$9$pAw;7||$E&Y$i XQkH{;`F|g4gjsG!OU||0T@$Gj_