From 5a07e249acf2d6b7db35d00aea39daf7f41a7827 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Wed, 17 Dec 2025 21:27:19 +0000 Subject: [PATCH] feat: docker and flags support --- .gitignore | 2 +- Dockerfile | 21 ++++++++++++ README.md | 75 +++++++++++++++++++++++++++++++++++++++++-- TODO.md | 1 - assets/thumbnail.png | Bin 0 -> 56353 bytes internal/config.go | 4 +-- internal/database.go | 6 ++-- internal/flags.go | 12 +++++++ main.go | 1 + 9 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 Dockerfile create mode 100644 assets/thumbnail.png create mode 100644 internal/flags.go diff --git a/.gitignore b/.gitignore index 3997bea..adbb97d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -*.db \ No newline at end of file +data/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ba8df7b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +# build +FROM golang:1.25.4 AS builder + +WORKDIR /app + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN CGO_ENABLED=0 go build -o statsys . + +# copy +FROM alpine:latest + +WORKDIR /app +COPY --from=builder /app/statsys . +COPY --from=builder /app/www /app/www + +EXPOSE 8888/tcp +CMD [ "/app/statsys", "-config", "data/config.toml", "-db", "data/status.db" ] \ No newline at end of file diff --git a/README.md b/README.md index 0a89e07..55b5068 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,77 @@

statsys

-TODO: thumbnail +![thumbnail](assets/thumbnail.png) -

The cutest lightweight status page

+

the cutest lightweight status page

view demo | install

+ +## install + +
+docker compose (recommended) +
+ +Create a `docker-compose.yaml` file: + +```yaml +services: + statsys: + container_name: statsys + image: trafficlunar/statsys + restart: unless-stopped + volumes: + - ./data/:/app/data/ + ports: + - 8888:8888 +``` + +Create a new directory called `data` and download the `config.toml` example and edit it: + +```bash +mkdir data && cd data +wget https://raw.githubusercontent.com/trafficlunar/statsys/refs/heads/main/config.toml +``` + +When ready, run: + +```bash +docker compose up -d +``` + +Navigate to `localhost:8888` to view your status page! + +
+ +
+docker quick run +
+ +Create a new directory called `data` and download the `config.toml` example and edit it: + +```bash +mkdir data && cd data +wget https://raw.githubusercontent.com/trafficlunar/statsys/refs/heads/main/config.toml +``` + +Launch the container: + +```bash +docker run -d \ + --name statsys \ + --restart unless-stopped \ + -v "$(pwd)/data:/app/data" \ + -p 8888:8888 \ + trafficlunar/statsys +``` + +Navigate to `localhost:8888` to view your status page! + +
+ +
+manual +
+ +TODO + +
diff --git a/TODO.md b/TODO.md index 233dcb6..4abb399 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,4 @@ - [ ] Accessibility -- [ ] Better mobile support - [ ] View incidents - [ ] Latency graphs? - [ ] README diff --git a/assets/thumbnail.png b/assets/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..8c46549fc98edd0107570c21a12a3f24ab3a2ab1 GIT binary patch literal 56353 zcmeFZcUY5Y_b!U#s3TZL1sO!ejs$_BBh>;TT}S}wqevihsnTs&07dD608&E{PzWG> z#8Ctikbpp_B7`D=C?yD??DaA;e&c-3_nqsUv;Wxp`gx6)43M`xWvzSN_r0FG=XBLK zbME5g;NaM-aaPrUgX4Pw2glm)epnCRIY#ff0ROCUH&8#dhE{(p2>xfI>sb?b4i2sz z$lo;_@r0i^IJ#eHsGh`JAuxJ3Rz{;=EPr}yzS72TaDbaHV*f+(M*N7NWO$T>9$%{V zwrvl~B=o{fZq_|8(N9r5dI_~lyXt+O)KW$JbWgW)>D+NPVKShgcygK@sH~h=MD$Fo zn#&HbYB%+kUJG}JKfh(gkN^G^$5~!Z!Qa39Eu?ni?_WJlb^UJjs}qlp!kZv}eiZ(n zUxQ)ze={J&OP~B#$NgQCLC2aLPR<7*gU46D@#sU!;~b8L$l5E;tAl*P=Vb?Jdbylx>nBh~iJ5Ob6a_bqU?8|o4$1rS!6=YWL;(GAD ziRMeol0xeZhbh5leN@aQXL*F;8hja2D#X>_NH;WDcTNo}O}8|%d>Ym8Ug#eEbpyA~ z%P8H;WdGk6%W{t6LlP-$JQwpRsw6eN6R-XMGDre-b>j8Kb0x*l1f#K=2sIoGxlIPHoU!_lpmzK@3tXeRAn`3C^L<`Clt0;G7y<3?JTCrX3UttHS zt^8QMzs4+O$hgU-W=Fm?+~U#q%kX2_JI(3a8%9P>y=EFEEl$UZS}Zgct^`^XUaAid z-6^v0zMy7#;UbOs+X%noljjvHRXR^I&}v-S7e%+88VyFPHDq24$)qpuRta2uH4eX< z;`yPCmUrgfE(N1Q=Q)E0uAf@IbWRRlDV;YM?FKhdn-;UIyfSlr9hc?G!gxWlb4Pw} z)QY8fmL00(il)UFx7z^5l7?xyULUCB#pv8D(|2X?#dv#OcZTomhdg2a{G6rQ`CE(i zkC5GYR*aK4^q@a4y1wR8eMIv}bMneiln{C^^G(W&wiV0Dw#WW!Y^KZwqJHEeM&sXN zvg~qXoO_;aHZ64yIFl&vdEbP!q`8ubpvCGH3CwoG>NjUeB$0kLET15X~w0KdH(N70r9&J2(dH~b+s^2H{ zNWk=Pf=fxKSGUvcw#O#!BhPM3agFSpk32c>JqO1FOK#nIn9PjVHFhnj-mmWQdr#$8 zOfF0WiJ>rxJQV|1CY>sI4F)g|3$w{4It$F(0)cXmFAu&deRVuni2vUo%`j(CD^@gd z8s;ylA0A7cJhcw3hE-T+CLe4dXGn5vFq0UoF>@}<(C^5%*w6usPb<5Y^BWiXu*kLZ z*cHb&k51ZJ1kTfg;&?)dA)>{SHs-_8Kdug%4;PW&rSemdFN@)0m1kNkAB%FlX(dxKs@*HWHr5Y>aAQsIw zfmt?^q}P$9pXR9%G5n6VNn}d!1`@#cRUIWnoDM9FXh6nj<3aWNiVKf!Y>BUCbRRxK z&p_J+qo3NKX9oZ@ zM&!xNiy3IwB7(mN0fm;S=afvy)W%cGY#L+q;%Z_$4qyNGp>TT;RA1U3==a+hey5p2 zjmu-)ngf{j?d7N7`RDrlTtdAjx|S+Ti|sdS61>+f)|RP#z2jm+k=b1eXv@;C5StD* zxvWC;hiA|l_diBJ6}g~EC$9{T>&W(!hLLrW30s#xM$X0Z8yCu54CNI|Dx7UMV}7LB zCW}Zk#_E=>!#rRg4>pqHLCesXM7`v`r5c9=iQkwC^WkJAKUNtfLAItl%1Vx>h;+X; zdlQd^W^92+j`Ed{?_LQe`%iU#c$-^bx$t`a)4wlx(P=T0!l9As0JbyiwMS*c%+&02 z1Ke%Ya#&mNPNX$gJR{LEW6iW8TPt|oG%ig-vGzA!WE`0fzD}5rHQ4z=A+}!RY?b&m zvfEU)t0_Li1FyoK87ul=6Kf%p0^_P1e%+$xg7MDzUe3cR!2nlI`0C3YzP;#N)>Pv$ zMqQccDCjpbwhEYaITAF$Jw%o7=ORwUP;Gd1S>q-}Sc_*La&qMpdk^LJKM@XHbPkS4 z{_6_$f4$P}QnT5yi!>%Z%#6s6qkA41aftN9yH|7T@+9^~xd-{w(RSzXg+BPNX#7mXEK4v8mU0m5TG~WgPZ4}^yF=>siaA_@Eu^$~z z4qOgd+E$vCu=JvTuVj`}r>PxAU_ZB&YXpy4lNs99yXFIG`+EusnK2MW% z%z)f-ZVLUE{1u}&Pt?Y{y@&X$T+3}NCo<3Mtu!|pDR<3zjU8Cmcw|X7U}1(UUJB>t zygem!pq0Nw0I5img|BtzVqd$iOpvE5b~oI5ik)I(~y~R`gS~oXgsXD1VbZ}m!5~B9#}FV z9pmrr5R8x1Q>L}$8aLzit|A$c{wYYYeiqZ-Ef_rI#k~|))5-A$Mt_u0(lVeWX2e~K z-Ti$}c)o1C6F8-%nbu6087zCE)O*jmjlLs^-j1}Qm1VX9<>V@qp_?st6+0Bz#)!om zc?k$|3Ksc~VU(Ja%lu?*LWqFx#=BJwcK8R{HcnU+PT#@I3H63FDRltK+|dI(3)PvX)gy5axep!(M_Jg zGMmI4R*=!joOv2L(#>Cz`ei#D%`@QHbw^#uNO;#6Hj+`FgR`?S8G#hVI*97a!%^!?vZVrCX52I(xqkED$h@{Aa;Dyy)feb623F&r^l|=9wjVp`yKcGF{9N&iZ6sJJW^dzwmnmv#6p=(&B|JPg3)3B zdR`F$%?;dV28P1VDXZ|F3M}<+Txl~)!ekb|&tIy(PP zZ+)%aN`@|+$VqXNxK)b_E^6hGKW*Vmi>gS6Wqal?t7&V-TFx}rDfOet$y|T{tLe>X zNTlha6&@1Dt@r^xVh6aRwdZ5nvRxNY4~NvI{>_VzDk)dGNco_6XRozCX9QNea6<-aiM8MvUNd8Cnyf@9mb8$mRX`}Ddef9Vmsp%(9 z!Q98S*^mEz@erXs%by3gwmv$!)_rNVBSA3fO09OhRQ+y0#?xU^tF9zq38@`|x>As@ zihYJ2s%uXVQzioX0_H5-m*+2aMUl6lPFT! zLk(;%V^*`Z)6U!@dv;jZhQ^LAwC9;62m~#*R01x-4wLa%$Wy~)$!4j7%BhfSqr7;U zcYgro-SZndkwZtikiu<_+89rtOf6`BFe_nMITP$DXkA~vYV}@`fopSg-S#s7(Ka( zD7Hhx^3dNxgkidC7t|6HkM~C_-rntYN5tvYmOb`Rs@QO)2e4>$J5QEd+PsE$b`~ug z+HQ8=gW1=+QyvwVT8mp*nv*rQ^vRfq=;LGpkxESRmtU{CF<08qdU#Qb@;EKAsv{H+Pr>W)Jb-E8ndu<7G0cuk$vgQGf;;)y$*&rh;*3=f;c z4A@Qk|FxTp)HsPy)Vw4B7GV|Mlj(ZB^As%M+e?zI;WIGPb_S=ce=rNFE#g3$;Ydy{gbDlo6OUE<)Gu=A4(4-cxxE3rCXSY{Ru z|GIW7X-?k<^DucOCpW*aC=J`3Y}N)labHUf4~hJs09VuICPP4M_Qru)GoqO7!uVXM~7$i$I>I9($vM$#6$U% zd`VT>joikpr&{;^e7kj=#KYK^lo!)ZKj{ucO-lzy+Wsq4=NWM8njRsVDAOdPNCK@7 z_MeVP7{Fw?qL|C^n=_PRr4o)#0fy@`&`9P-naYj1iM(t~8c44_qqSUUE62m0wz~Y1 z$E!w&as_x5-y>;Q*F1opPivG@Y33XDcs$snS5%ameDHpq=;1#z7h3M6tn<@gv~x>T z1y1g(#DP2wDnh2;-`#8z4*gLGo!Lp#=(^+wg)&}=z{#Ua@3rFhcDNhQvZEHtDkZUe z4aU;(dORWo(({shUF@Rw-7bs;%S+TWo{X$FTUCEk_lO&%j zJq3EI>j*I)aX!EFgj=9~rwLY*1U*KFma!uk&1Y>O=X2*@pa-QkaHz#(_*J+-O^?Yi z>A9CrFxqF1*QqIBqPPRwWI()#VjuJ55hAE+^jnOV`Y|d*fWQebEqsHnG3XzH(U@cO$-$_K+pWABH^pLHTslL(&O_&Z3XW7c zHNR;7!+h_QNYF%Av8=>=vq5Y{P-HdH74`Fx;7H=X*2cf5alHZV<~VNMr2lkPm0+|Y zGI}BZ8oj9$j}sTTb(epjPrE~4fvC)_`zg%Cav+MS!b$x83q<}MObI4>M3~q_8=9-1 z+?#<49&So>n5>-EZOt_<=oF|p@Fj4;_GPPZ3Ifvk{$IOw9B-Q>?(q2OE!yR}Jr?RG zulMU!wD$G#uS55Ejd;bl0hW0k}Ww z@A;U2d(!_iZx@#58ZT)J^~LX4Gr9=i{2v@GmK?Y3H(P^^Usf0-msHn~3)o2Q*1?R-T;*JQb7Q7ccgaS<@0Ml! zKfAh*rraK`ntWQfH_hWa4!P5R)LUPz*`ObSTY(w3HznC!fK6Xf>#4waasx?eH!#2U z?-a9i>`!YY>RAnx1NG3ajhA={oNwz%36MC{|LJ;%W6duv%rTSa%5U%WeZAYAEDld( zmw?D2t{JGScrV;qc*SS?(?+GW+ex&WCafsZRKBDm$1blGEHh4FbM z@BXzIFKOE~mxEQHQ}7eE9G@O4v`vTj3Xi|Y3J9U}a2 z)Dak+;V86jyfq8GIr4u=xRPHYdw?jRdWmJ$T4>W)*@5J0uj3Z5SGMb} z<7Tz$so(+s(=CjQYXSrO0sxflKD3qtWB6x={3~8N;+#rGrFLF(djMs+|g+CHUP+^Rj4lz_&H^M zak`lTU=iEj+9il9err_ZcXe#3a3smEYx8L2QD0I}WCQiM`|waz;Ns^`*xbAll+P9p zj+=iXI3!zY3=9dara3DvA|Ne1r~~3m&ynPyYAD2hsh8A_`}z6Ict`VOMUe;Ya!|o| zS({0N=(Bg<6#=apBX{BLEYw#wdt5O6?~hXUmyUfwf@ve4_@Z{ysZuCb#cyDVhGZ|Yh?#TWd&@M%+apdLvh`PU)8 zEE7QhXY3TFg{V-EPZtC&HIkfr%P$=_#8`rQ;!~i&>a?cZ*s6TK z@aYoz4A+0s>VwyP{s^D)7TMFT-&%G&|wKc zQ`H?aCB2T(HH|0*o~tftu1+9G%Augj>-l)lJe{|qj+=uc;~z&BwxA2tNAYv=l(R?~ zqbcFck~kWzT~NJXpUE93cR7_$@ye4#o-~~o2Thxb=`m*UY4_zD7N?U}$lUwlpBHvJ zSKyJVt?tcIf~<>WM33RMq(<4kD=z{AYBvhT0hcC>p23CZ?LU1h4n&^rrgNcogCAj? zz1#^;=h*kVw)%G* zrMy$ubfK*#Xr;1a4-~duSgjt+k51L|!(M#-rVe>Fw$*k5NAx#(Le}Wwldv%fn0-re zD(%JImwW#My9#Tcjd?@nkKPNluq&f1_q(b-7`w_PQ>_mqMO~Z7hQmAo!7?LFnH@%I zSSd3nsAX1Z4XdsEGUS=jmV>OGF5{dxH11i+v8qiRC$hhtK&%JSw-2 z9&<)Xr5?~?%Vu|;d)`)LtLHw~>)qX$Anky)6~~n&V+-tVkzu49K+V7<`A=z7Xlr5Q z6Ma8qv&Nwg@91%TvDxcLTZdJUQ@e?6VrLN%Z+T<0Y|k5I@2(KLM zf43h(Dr=M7yg!6fR+xu8IPTuigRi>jfyZ`^DkJREa+XC^Vpx4|;A!%8v&*b8e}>yBIf zrrU{1522V&E^|Tntz(&^$2|5Zc#)U_(Kk(<1tF!}R?2<1%w}4(S)SubpV)EI1X^8s;$C6>gJe=^fl(>hcJl8;G`ds7qEWr*9^&LUU+38QBt_(Us*Pd1MTUt{ zs$?Th(w@fxC3XoCZ&Bkjl2s&YJ+)77?fOkW^IBd>NnFRHl#D9CT&$X*YT<3JqSQ$9 zat%b9ChEFsLV$zbV@Ag1mQ95W$)+*SrkM7ZPn&S*bk!?&{hp%Z^kvF35NNzsc|A;F$k*)-oGNFS?DB(cB-ekzN)3 zJ{2#qOU&<87*+w-9%(o2#-mf(;}&{+nk+ftwK>v<&NOVr*u6@r^;%`543{W-KF+#8#e7#>_l{x%)q4uuYzNDWq#}! z=XR1QxTx2-N3A&soH^t_(vdwE1(JPdMx<}Al%HmBR7kcQu3s$LYTgdt-M-RH zy1uQzO2vJi9^0+++?E`7p&(Sorh{>q;uryotEWjD{V?mI`r%*ZCVMGLb3N9viaD65 zDppscGk4JI{kJbQ`SS8o?jzu5+LCzqDpVl`U5Pp=aXwPRP=pXl(pj% z(@iwv^U@_Z<$OeM%!sh3sZ6p;I#Ch%#7-icHV0JM(uA-ak6_8FiSn?HMbw z{L?G`iR_7DlVWWBs6_O-uB}~WM@z5**yA9$z7Ku*a@6; z{9HMMb{>SvFY?USwaiZ4mhIX8sgyD;r@B4fBw}83U$^?pR>%aGYTDg151a8jKTAo} zn0|dQyptxKT9uUAjoaZs$!gKwZBd|;ukRyYL1;K2Qr5;k!Q2pi6$q#&{1u@rUuvHQ zY5^mP!zIKh*&9X0bm5u>MT%RG4Ef$ObhUSR@+|vmB?v83mfjz-iSe*YL|Ebgfq%DV z{f!d>2#of~S?~u-k;%t$IkkkFp)txhqsW+Fa3+Z?9BOE$Rj;(MTB;ETxZW!!a*}9b z5`XtbG_TY4e3~ZsHlh>nWiAn<%rtCE8i_`Erd}pP;&r>NYY=5rvWPPIY;X%ZDKvq# zrd7MtADmX@Wc(}#$I-tMzh4LILm$E1;ap7J1Vf&2CsZ))qs_SmEdRmUO()G*IX)=%@tCj*kzI*PK z=I|R4ADiyA_F^b}#AvZ}k#T8ATJ+MJ3gGEYZZkI-#+!c>+&r{UTkn=l5y z<9P796Y39!^h?brz$Hl0Hi5zzDRQSR3vAFJ7#JQf!C*J>N&FU=N0UGlrN%-KUutTd zAj}w7C~Eo1;F|ZfRO@wJ+5L&?rB}YH) zR^rCDV7-eNYV3Qh*Z~nPfyU(GxN4C0PXI_N?P%9yg;#5|zSgSx~`pQ^00u*VU~VH$vC^8VYqFNQucU<22IsFnmMp8OM_eglQ? zay>Y{_x)4tjT7qj9nZ4`*)L{p0Z4?V7zM+Z%4~*pN#{kbiru+T@u~Hy^IvojOFDt!8+jM+`dwI&E3%0Nn*N|<9RiMUg!MEh`bdy5!rd?7;nVyDD0=q>v?BG%9s?pSX zO$x#&cj;+1t|UR3&6AJ* zZ_z*}zvMeN=@h&F3}&AZ4@_N^$oLeWyhqj;nAU3V0;@#(oAD{820T}wyoc3q`hz=X z%fHaT5P&L>XL{y7E)0Q~Vf173<=v^ZLR1nCZML}k@^9O`ZaB6`6s}pjJ`QnoK@prq zu0#ARjAI0F0(I$-=m=Ht;?`!#8ymKYepp5olLVTj7_|Murh{5%GwCW7!mG+@ND4TY90^NhR@S?rksSJvJVNtjx zgpkz9f~us2nK5hGlg26ON-3n@^!dwqPY)(R;zqcP26C;Yg451?ofqy9X8E?rb~{RL z$cBmG`zGB7G%8Ayq`^Y?k6O>J@UvQR9y<$jhTa-m6*rDyeixy|l_GWwAi_HD zwF>GI>|{CmVVhA9x!-qY^upXTR3rGR$Vd%<6xGU~->sd7w~0qGiKspURx~2R;^(ZM zxuztF%p$%HjmRVTTbub;eN9b?3f&pj!7|)>MTp%4Ne4a!tqjtZJ@UZfa&T}G4?RSL ziLXkU(?(Nc#ctDDt`KH#}1xfuw2*Sco&4gbVG z0JjhH_|=earh>0+nvGwP)`$b-|v#(mxT9~WAp3M`+sitt=jj01{1Nv z|Ba>j-?LQGUlNYHYu5xWk&Bv@9l(aPp{N0s8|T?>Qiq^1$I@OemP~Tca#ax$pBdS#;!V*E@It*b?8WFmy5G6lfUZAccz%@?-USTOqEWeAk2*TUB~iVedF1kbrnD$Qs`z zZ660#87j$<=9W>Y50+u`-&+~}ZSJxixpi%(GhDm;m{k-=!i4#1$acd}`-_9WzT|KO z;s+%stEjjqAkdBhG!)B?;fAtYJYud*bTPcV=%D(+Et{wbrtxv7h-Jxc~ZfOHI@Fnn=84eHPN*X|MikY|MSL+8F zeHeg+H2B0xu{iV?q#YXKKgbMVv+&&r$u|tHC)DT8mCto5WU$BLWYd-DQD})+0gpE) zhrtG6GFbv*Mxg-fK$opuq>fCze}U2s=Q8?Evj~51jSWLdO`2;V6962v5x}(Mwe!9n zYHCpcT!Q$+4pYFw#I4`FD-IDi5Jw>cYBcqzc+l(8b%7-7E z-XgB#JM((ck|*+{)(7xnSqwYfS6RN|4!E3F5Gr)rgNAToY>kA-@qh|MHG_(^E<2)Ri#PfXfhpq&^KDPv+x26pw=nY*=+f+e`9?>O)|nJfeBE?mT>vjs-24IFxkw(;ri{W%8FBvhYRGr8YMds z)gt};nq}V#OwNJe+gOXN$JFO;`{ScqN?okn5#FB}i6UTrLj(({#^q&UIU|tB8E)b{ zF4gDpwHnP&mqP=GM~|aTQUhXA-yakZ321dsF{o1;NSExf0EZN|KH{*C077V$gi)=} zL>wi|D2DA->e^WZjI`PQ*uL&1_FS{S6@K+S#=`>Tix7&6YZ*NLrQeJRa~ZDk2w(=z z{=vK@JtD?dmBg0kbpfM7^>@yxW*W?-8~#V8&RB>R~P=v6sp# zWx=gbFFM;6sLc>?*o1~y0H~tw^Myg_6VoXss;ILEx*dz|B|hI_b7yL(aT|}W4IOjb z0}&<)8c_r(E}f#_hP1l3ewaq_MqjcVmtYGsG-=v@hMoT1&+>zoHi3eN=9ZG!rUr6r zt_J13L1xk(rYXQXYlwqX%A%kmO4$TnXA zm{!DD-{4Pv#wA$Q3`L@hLauhveUNdl(?et^WU8A&HiM};$+n1>ak3Y!nlWevUbcd^ z0LF@n+G$P>*W2ILj5&!twI{SZ5jYRpfdzXB;SofWb4D}Y%0KG3=5y)Yuh%lYnSFR> zu{Q;xY2ti!RB)s-G2rfj_zP2SPH&}260^^vW+X?b4sl9aC}&>*USBceOjl~4c9-N? zHV7e-_1T+3Sa}Atv{Z4wY>UavcNwCD$*MU^GmkSQ+g3y~ojbO@sv6pJiVBJ~(?LON z-}KYZkH~dl6|M&Rp{#2r&za`nEq3F?p7>3c*#;+<9jMt+#+)nn9PjEdE7;2MtKPRu zVgor`<{egDea2yhE=9AK&4@v>G0qX}c<_}{MVm%&Gt#WUNCA6^Z&^3v+2DPa%tHf^ z{X)`dTJby)I)`tG8VjWus1?~@&hQwFmW77K@Y;v@qtJ3Vy?ql8qr)4vQZ`Ys?|lPi zm%Fd;%@GlddPfPfRZ&ICAvZ zh4{M?PF zuN?)|NJ!S!B%IHCAgbc|JlL!!3SXY}8o2u20Spc97s{Zd7LX)%Xoc@-`P&@LP3T_SIrr}4QfUut_CrT zD*tpqJB^e#^}Ru7JE}gv4`neN5KBaF(b;>LTZbf}+?(k<34|1VGM9}z5-(FCHZ1PWB`C6=oLHYx#2TyGb~g<= z()u?-+3-X2f9C}xUT7rn2Z8X71)-C5%nHS?Di9$RIRxcqQ;(5kV5%f8+W3mydUX(| zB>QtuPy?k}`p)Vp&0?_bZrOGN9*}>!bz%;pn507*e%*Isj!isyv88e8F)cW9xgaeN zyF_$5sr7^BuLZR_>%yAe>}=UC#3P`5H`kSF@`iNT^AMYCmwG@|Yy5x)uWlFn>|wO3 zUnp)XaWsJ22_=eh!9+!S4=Xr5$iG)oG*;H?e$>~+4woULAO4%ZTppSEJv7(dyv?`T z+*(byz4aHrW&iD3jSX$`SHrQhS?3H=eoQo4t`|&}LcBG@ERgd{dR@*yaqn3XuB}?6 zdM13Y)7B)<5>Y47LH+h%`eWR>> za^5?vo#gVC0##qO%8x&eoD-M6p<0xI!Q%MzRTCbJKlRKc^++5ob^XwiR>!GDJS0CD z+pu0KusS0s^;C*st`Qc@Irzp@P=2p9VKe!39wP8)n3B+q*Fil#(6vER(q3w9gCJdL z#n(ARh(HR8Z78{uw1Gz#bz(-Iu37H7T_jr=dkZfUU_6%DQBqk)4sdpZKJfbGV-Mvx z1*=L?Yz3rqdEncUGsFj5`_|_UUbM(?Y;@LW%U+d-*5OL+ii;m#2=^HIogCZb0$OX1 z(z#~!1dMI+cgm%%3&4$Q-`=u^3~tnziewf~2sYWS`G`nS>#LD6lI%m7gg`(y60tU7 z*{!ptITKkb##`%JspQ)%oN#J3FyWzX`sln(6HK{dEEXpexy4sH_o(-LeAeUDCX<)$CYM0a$P8Lp_7aM~ z9xKMRzH0i7TCI(;D2z3uJMUTs0w)e>a8OQy*kjU#xo>A}+iSJ%hFF2VGEC;nqzv7R z$e64#pL1)n@#roAP5xWsQ;62$Ze|R`3UrWp$;8B8p5|vH^&c7iO+;zP@K)ZQuv^|txoBf~11%Mwkq;FOnz+j#;40d~iXZ`V#^;a^!X*Wj3Bj;$;jV4m~$VKf} z)3(~LwAOz!FTqIU#Gl(D->UrQy~U1y6WGE_Woe!|KB~>WBKqo*V$iEgm6yIrHb8Uv zqnsb;k0dAl7~05B5#M~sAVU-Z9E&!Hlm$-N=rYHOi4sY~)>;P46a`Vb%lr$fSQ0DC zb2Y10AOHeJ!-I$*kO?IeLWT&NcnKg7dKhu-Rxqn8@QOZeA715Z1}@Lry1&0G7!U1M zN0_tVttqdnUNwQUw=Ok}c~1dEyfYzw`mZmfDErM(-wG!TfN@I)u|7bh1<(1`&{!Ir zg-K<=^N^u~zo8NW`jXSbHt?I1ZFtRHuayB=vuaE8>h|LCL_yw5w!eFUg?=-3Kyi8|c^(ya1z@=vafbG3*nT;f^|{yO7@r(ZwWw@HDm8Lqp2 z{^hEO*MZZww@4$!I1MC>iMfR*9cAve(_psd@ehM}2b<_{C;luP_aXH**I2e@aVqrq z`#T58h_NrpZxV+9L!|9dg)laS2#kRRG=0R>m~B>??*q8mY1=G4)~c&cX)sLE@jjxH zF+G1S==O#JoMhKhE9Kbv#xj3gtbFuQ|wm+Q{W`0r&egSM6E;$^nr}P$aI#+_ziFMg< zX3XapOMI`-&^C9dl~!BFhui4-;&5!m4tEeZb{MA(bo2AEgd{@S*xu0@#MK zq}pWQauFPt;WqwhMp^DdRvM$zcTY2dGfr#NxPSp8mqMI-FzUS=p(XmXzzTZO8EkZi z9`s09u0X$j7f@7#4POU{o^OgdDp9rBuwW7UW8sF5vY877;EyRW7XtWSX>BWp!^dpN zEG9;BZsyTKabg^CR)Wz#!NM5SCvagyIUb-vdg*2M6 zC3Am$6DAvtMu|`H=$0pQ?yk~B?Kbp9njNs<;3{p#Cy6aBqPXFV5QkW6ORxibWfJ<- z^_8O!pwwr2K6t*d@zsu&1Iu;69tXsg5M(r5B?SsDTXJkx5g~b?&63=tz;u+P`z2x+ zV*#>`ojeA`$HmD&m@8ATCn{RMh zMEihi?}=KhckjQsH zVS*GXqJD{{vKN0?qh(W?W4Z2NR^^>6j+R1|=tJ8?m_4=t0wGX$Q^^N=gP6ccjl95t_8pow7w8L}x zeu3iQ$ zvbMYXkTb1kBrUGn;mkd3w4Gw~krs*KtRM9Er$q=&A)VaGT174mevAHopD*#AD7O+1 zPobUFAKMrIDLvpB=1kTiHKN4Mr|9Z(+72 zH9}tLj4FS&x{XeChXx-hO3ZIXJlf5-05OH`yxuaUN;wyrbsoJYf&J{|P*XtjcyTY3 z#}dsISc|dc7Ke(@fX6~>0z`}16|0ouW{&{hpMmeBBuQL7RB0W74EW%n$%QeLAla?#NhslkzUdeW4m zZQIq9nter!9rZT2q0&jr$Vv3Jl-(Yg0gAlV5=koX_uE`NfDNj4^eBg^0EW1EOy(r_xw;t?M?8%{| zHQIi=p`+irk#e!cQJ8X$y1u@wp`vQbJI|~6N^Yd@HMJ5++~<%S@DpxlY!;zq2_s>L zH}DC!vIOouLn8d4g0yTUid5doG04c_P?46mP zO!mGjV9KAEIv}#a0I$DkLM%<`md7s%Rn7N8)<>T+^-W(Q9Oz0nQ45KY$v)dc8}Q&L zxM4lv6e(;qkbY77@U6YpzjQ=Hiv@f0*gMP8dm#_t z6p+rfL6r8E!jnq3Vg|-;*uwZ~4`A?huSE%@be)VQq-BWKD>bM_k8ZekD&bbFq1@Op z|MHsUwlKkaDOFJzRk|>N6dsE`JvNIOOYb;uOGZCLjtA+gswItikv5h!UC*jBewbR7 z0{!ZStg3XpgZya%HUhUXHAz^hql=-?@BSEn7ETCx+N-BgBM|>Kyck!=La?n^m?MLNE%`Y{h z6>C1cR_K;E{trfB`5ad6uBPCg8T(u6szCD4FENYId-r@luI-6ZDU`i=KW59=K6AfT zRjJcwHoTVqwVkn(!qDHCqB31?EO!@sVC=FX$LKM0)U#B+v-8~LRWWPrv3Hw3WEf~j zt<_F&9lvUM_-e?HO9a#|%!#Z{{rb$t(0cTr1FI_Oj4>G7bh+z>Mn)<&4%cp?#wDn~ zGnzL(I*q2=#dVg6hoeiRUZ@`q!5ZPx>=R$=sHwBu)A@8w-)9`gEtpDP<5Uu$^XNwV zh^ZxXj*q;-Gcm(OLunf-7Rr5&rrjlq!_gg#>66fzd=pJ zyN!Cn>1cjkOOiqS$&7p5hTA`E^6aY1R{U!FThgq{MRVi+|HIL>ERj!n946l0{zV=q?w#!Du;We zBW0~2=|$q3N3`N&G9nwfwgsc-QNH_PSvSlZGIJD=lDXg+bnpK&&oG8I1aY91dTXG| zPlFwSTk9&)*wELeD8;Qy&wYK(ylbnQg#boyl~gz~$fI&382#zXp$K2K`GA4s#On~H z2U_ft`CB)<&De|37LlJ&GXL!($5%fh1|Qk|$48X^%SRd%RzIQ#AKCTCM`ZuoN90#O z;sPI86oJ&+->AI$D$EUUFRwC5 z^;bUK`%kL{ZZdj8bYer<{@s{@KlmzM=6|?}074ydM6Lg8{QbY{AcYgYB5=aZ470x< zVI;6X9jNsZp&MctJoZ0B{Vj4?zGk$n3uIR^2)s@)$4m^`0&+gM^TakNjvy=mobxJy zxU%oIW^DMUVR`_bnpp{?!p%0!jp0-Fe}*VU4V6pM9p=`eQ17#6k(T@XXYWG}UG&}W zn_rmyW4%#c*OWko3Y#J6-sdxd2iIx2rjqex~U|FhVoXw=M%>vZTeX-2UDQvaIO)<$io3L3ri~il~ES!F;NZi zh((J5B-!1t*zly>(GiMBbc1l>RPTCvh|VbLMPw~Qi+BsKDE>%7r}SUvpV@QX~(@%G_pV@q+chsPiuBpu{@GjK3P3K9Gt zFh}yvj$ua2sQqI|cc+LgaxNR&B_e6Vl2R}9Rm4$^&AYgW(6~-Z)mu4I;z*-bLgS1V zE5Cs<#gb?gB~Y(^bMDV^5|MM$oUgDE&TU1w`mK=}9^B^|2lk`Mjue{8 z1_A#klx-~mQVu6p1Pxz4Y^s!m=0ojybbGTaFlx3eleZe*RF)0yK(v$F%8)_ngZ`PzK`@@m7^{nG> ztVPYAy0o5tS=N2iU$MZ(SUDI)Lc?9ZWj@}hWp399yhS6JfBZxjOb_33PV4s*DMCM; z{X7`n9icfhm$jS}FK&Hntf#D~Y>CxvJ+H8T!LRs#vG*N7O|I*@*cAmEhynp!7NiKM zln|PVh!leY2}l(YY0@P0W&>0NRGLachXA1}MLG)<6r?w$8WBT+bdV1B{as~y&cc26 zxpU^u-DlQ}Gi#P0c#I3102S4DT8V z;K1uGDJ|pa#}+#iyro&uADJ{kLpwh`fPj9sl&aFf^ul-iWa8!eFtWG$aOtv_o(;Ws z_oAoni>v4KB9r#EJm8fredd|C$MOPI3%|bD8H=GG&=a$iDR#~UcVpYle2YTWWSWpW zz6pqXSJIc3Aq3!|KCZZGY|Tw({!;=wa+S+Db8p-|u&sji`P#E5Lfr0dm5iLz+O>Th zkNBH{cp2I`U>On^B^=UM=v|CLyg3$~ha@^Wf@m*Mw{O~ZQwWzz> zH|#KRd|&Ai#ILC79gw=&X01aXm)4IRk^dMtF9fngyW8UQVtbluN7H#J<<dTFb z7lV%LQuhZO)TEUw2ce+zq9^ot(j~5HlWd@cpCQF((oxpSGT|YQKQI^P4&>oXT~)|% zez{>A{F!w_5%r}nY`rpaQAs*YLj*twUsV~&`q5qclHvlHduJ*o%cGVi$vO)I_Spi& zNn-pCWsz+I-!xanb{h2!=FTtBI$e(uV5Fu6CLVLfVdd|=&< z+L*^9z-tYv&oG*;*8U`8xS3DZd2mEi(RBYJv2`f@6E?3nmtCufKC3KPM{pl_I5Esj z9!`(jkzUwoH_#BXI43m^%uL?#&T&MbQA=dQVjuP5`DaxR6Hog*sQ$&e;U4Sj29^En zC+CdX<2?2ic<`o7RoK_!7B+49{^gN9e`-7N6Qe-T? z9Y0G`U}Rrc{*WDap|L(z!9?rjgUhbuhKpr8$Y_+*0+yY0pmOC2RL_9k);`#ua{PVdcK@ zr2s%o&H)eQ00K6lf>k=TYVbauhheX_E=MKsjGKOor;Z?YUK5?XO$v6izG)!xx@O6o z{}4NmxcHiU*w^t0Kbs)5=qWr{FBLJTi@sO)D53LIe_{3J&~f%q3pbBelQjIhf&AE5 zj@^@|PQb<6sfqeHVA6%censHkWKrzMg{%zPP6KU%aGIrfQ1!y_v4PjS4Adz;0&d$+ zw@>M!JxAPo{k^%sAhPb5k!EsA>4oBLvEyfZwPn@m&zIWHJlNfsZO33>+~kIbC0eS* zRN1hz4|~H9O@_snc)RQO7jjkJ8UfdFXA2|rlr_;xL6>W=<4Idx5PpM&i8@!Wo6iL< z*W}H7Y0*t*oD?&X2K5hMJWjS7KxtAArAf<}BkUD{8Ya}1?)tqX*uvD@rt-(mqle7z zRer4{7AKHoQ35eh2^uI3a+F>HMm~gM|!w-?p~)LM<8P%W&o|T^zFQ!`{Cy$5iVmdCP zmyG&|2u&QPOSJfN>YnR-c}sO9Ov1SQPGGrmUMJ9-*h&*=9PC;JvV=}6@w5`{pgi4# zc!g@jmtm&Z?OG4W*)HE3FYH}Rw^$Ev#8tq}u)(o-7gjdSu4yQa)>cQeXmWVG)HXT$ z+tQ#-58EgV(geY${f%u6;^`*lpn;ZB^wLZCED{5XU)!y~Z9e0H)9`yo_t+w^UyB)M z8X$qmS(VIUPCB6V`hio*N6|CaDnG6s*h9@?Tw4+}uKXIg; zx>taht*at$Yhs+(sgSqEXXnE+Cfl3xuW=r~swT5mJ4n4LpJ0iPUFa-b)bn`P)~Bl| zO$A+@qrO3`gAB`QYJBLE4p;n9lJ3-ma6Rl+K*5Yjp`m2WlI@zR)n!KrPC#F*tRPO^ zI-yvvP_S4CpZ8_bDaCr;SawMP65%3+kaIa3lNW{$Va(%V#cHCTtF||rTvrrf3=|;y zPk53Jh4o@;Qc-ivKx@n$erWP!Hg#K@g8|8k`wXFO`%qF+bdm&?GO;N+wXr@r^tgb? zX~D=zSJL2FE^3EPTXobhGvAOM{c~E!OuKJ<(&5H?7F?V8NS_Nk&U28ubZOh0&g2;? zwhGn+`1#QvN}--dkH?dvVmQ?W!&1tVF;AWP_BralP8g&V(UAf6eUAN_7GQ@urA@b` z#*AEI4V8p|)ZeKMUyHihJxDcz5O^9l9?I3u{`da$w3#t;{be{k>%^d_*KF`$U zDRj~VRXn|fK4OjY>`EdxB~wO{lkA!t9(f7NvNFsr9E}Opb&J&4m;K>t#Ov0mIiAG_ zZX9S?XS#ZaghgFDAPZDvpKzYDGPOIjvQ{h*{9^_QPaEM`~t2Q}ufZ1YtsY+OSQ9 zWoJ3FkEYz`ynaOM^-PMNNc^QVO=H|0rW-?v?~P4-eR4U3<=K2zKmG(L#C!mcc!P8iU493Q$Wf7_g_EWO{YUpGp7d*V@C zdQwZHl!{i9Is4=L`H^2jB6||BT(xr_avbvKhYLlfa+Y>s=Sb#!X9Q7`Sh+dZslt@H zxAEg@?d@HCRY5`0C3BIL!M=mE)-#1z&UEdeoQi1eASnxUgLFqsyNSBCsixyCI}~T? zYHjHRjZmyxkyWljhQi(KTW3b($n$Z`TSB+B=3B3iwcBCZ+!w|(F{u;ViVdI~pLfu6 zloQd6D~UW?6npIK$S^;~H5;FAnSk$;_F&j!`M$MD-(pP1Mj4p;40O*;ilbsvY2ZcO z*1gZsjT^Twp_dNsb6mZs^HOl8*z44r3KVEv!SOAo_avlW^o9Dna$=T#RKL{Bx_5v! zs*k46p5vQtn|(W3l+>wGj{J*R&vqarVxk$9X`q)SU`IFpRm zrHhIV?S|^IAYI}Y+%Ecg$+Xi=#_QOv%^9bAA$jNi!4N!)7H$9INH5r7rSX_o>e8CJ zuj6A?Oc>rnYZ>f|pn)b3U5dz3?r!0jw9^fB5l&~PY|aME!92c0?Z|4xKKA14P|pAS zSoM?OXsdGB6ywF0_Mvo?W~dn^B{HkLGGP;&|9~g9|w(==We_U54LfTtrH2l zSyVgdyV8DC%!ciOjgV65rpQ4bz+EoZHELuW483ho{9@aU5=~bFl38-$^W<2ZkU$!x zNttp|3!leK;!>vEn~c518jvC;NSchj8Obqu`G(=l*>gVkuj2$`vs2WT2iJvFa>%IQ zy1&$zMB7YYV(qH^7IKTgYE5zdgSUWE_Kph&(^<8LSkls4_PyyQO{b?5^ejTdRq}h%3*Or6(Ya3uu;T8}*S;5s zVvO(3m&wb=OC%GTxtybcNAuVF09@4J@7MdX(whaRI<~h-B~G$xyR{crIwwHjRSn?u zf8DXa%N!Xi7LEVgzVw!v{Oubwhwi+wrGzY0e`ssFib8_G)?5PPbj54ID*T=G-QO=+ zep`9L*!dC`|9hce_C0*XGwY85WdEUx`yNAb-e{!)@9!`DSnmFRGa6!|UP}{Ee#pI& z8|>GN;ntZK2ophW3+V4V{y~h!Ag7shEtDyL?D->a2I&S zkM$u6d3{2o;#gn3*S8nSw6AHe{W<)=Cxf8RBW8Yn_pvKyzj1>J#nzQJcGx$J&~MG; zCZ37{=sH@#yCmw-$JKi`3fP357`*i2RE9ST+;-HPq}<1W=yC_tJt7mcaLv8dw2A4) zv!CogH~EPLk12L;z%Z)-xH7MWwlsBzV;Lt%M9P2Y@zu`c0C*_01^jVNJcqTQx6(Ww ziLt|s6it)^TWpVf2{=k&bWX+d~lq{n9KuH;}D*E%{n%0ULqQ8M2>;tLk`P9D7=K-dYM{A@sh zY8ajGU6wPMyVZN9f-1k%Ctt2z zG9H=<<`dss^p*zg#SjfZjfbIWGq8Tx<-x(p@LghWp~NXAeX0^n%ho9BHU#$- z7gtD}%DSV$L)S;2BchK&d)g#<%yB6mj>z_`^N;JjmnNvdVxx~sUrYTTvZ=JPv1s-_FRV*_f`TG%J$V}de zMepNbCU>d{KGk9#DqUV0d(|oM6l^X6M{n~k?De2Y_udnHdPwcbwhT!Sk&V7p_d2Ez zuaSCV4eQ+~cQ9$ju=4Hu4uz{+HJPaUHojt>lTK@@C%0ZKKs}?U+ofQ48-|`^N8M_F!o|cS zGI_Zknh6}eR9w9YQbE?2cGxuTo9U1nNX3Z6;eU}V5u|AOWexg}q87iJjfu|HiM1ny zv=-XrsSs9jJ9QbuQpT>Wzg=!BS^f3U25W8T#>gVhm;oXlj)@L@mZ7;T7o!?zaT~NH z?h)%rJ$Pi3o3RRSwO*MYY=kz)wmPuSdC5>xyvJ&xnRUHMna}5V9eTf^H`w;nJOJ)< zd)0EzV`a)iPPq5!AqG9Fp36YX`?6Odxav<%c zWeaF_5`rYo;I2A`mR6_t23Nnl`Yg>ZW$BQ((Ufe+IVPqIttE5Q4E(l1;)5z~2Q~ei z)aOYZHVqR6C3q>AHGLCN%zOrUSs@*;e^kIydA1AdrpZFue8EWDHQ|;8e6k?Z$DkeB znDCqqOUEG`$js(kvCpB2GR@$Aum)^l{#r%BnsH;-pxhxWCGai|C}q8COyOPB1Yc=o znynjLz{`K#z{|bWqWO$Iu5w^)ZvZ8*U;-4X^2F=a{Hp9&k)qL4yFu%%(VGVgvQlA& zu-cxarH^RRT@3lsQkwR8uv@qA08Bd8TF=P+s!ELyj*v{pSSAW26f~#WF>0onm@b|3 z3-5)8vhRPMbge07M0ZFJ$d>w~4bLA%MmQdx<0zeZZCcWnYL{YuFr=ho!lRbY*n?0Ub?E$&yk%G~ zJG_Vc6+xtxs{=%mCii)WP`1lxZ1KW^&0#6}$rDrTlg|HtN$ggBR9>>BU$9kCCGJDV?@!09IXqy|0HAPFXj&Ka7? zuPmnn1Z9H;qMdY!5!Z`Wspu33G+k7TbXK1$T-O-4Xp{5ltY5puZS9OqMkt;>C`BaP zawxu42ye&-Dvztlo&6);%kDz)A<1MGZRn++FqllVvy7KyX>3oRIDBtTj*S)~k7?Eo zCb~yUbP{eU`^`B!vyw$TsGG+!Pgt#ZR>O6NdL8)JI&J7TLYL8?q!(DeOK?!-C$p|80#~8FX#x%{zU!hueF?yZRTXQ+ zv9#4{6yl^SyC$;j^woDou(YSBHBpMY7Z>Ty=@lE1lQeP)1kZ&)rZ)P%5QUNeNy8z_YK$_DvAtGUS)P0dgiGaF2rYizavh3Jc1$v6}<>vbb zi+8G-!qI5_>#cQTeT?&kXE3(6RN@$~I&>v^UFzZ(2E*}LA1~}n2&k%K1&3Id=MB{~ zx#|4C@w5G*UZnyqSHM@?-&8Z_c?zXmndaFP<0g|NkV>>82I>vG;7Y5Vv z3>RkIFzvzk%N8a@WCvM`uRWtvFQ0H zqXC5w*uTD7Rtn^PYbxyUv_}8SvG9ETni~8{M@Cfnz2Cm!9el6rM-jc4A21TL=jF-8 z#fxLyRQH-r-fKqRyHues($Z=%NXYj3GO$zde}5=cBR8s0!Aq}ad@HXUv7G-`V(RbB zlM!R&PR_J`z2NUa$i;v0A^yqp{lEQ^IXmKIj0SN`IXJ6uz}=;VGMEZ(v{a;<2-2Nn zCP#OD|AQ~Be12->No~%KTnE1QRI&1llcEq@ZD?Qy1vV9GUKXf2w}OCK;Ex~Fc0I_{ zXQldupV%OPkT*n;CWp6?3?w@mhZ{I;0%@0tQ03+Ce{_elQqQCNzrPJlbiz|$`0$T+ z3Lwd}y04i9Q@3pmIBRe4`!`=sEeZVjuPPe8A^Q8HSv~ms+ZqJ2sq%2`7j+%~EN3tR z1eh%#di!)tdhdhRI=}t#+*7k6p0A0H!I_hd!6B7;Uod@ODzE}LEESvhh}-0ci`JC? z{;wajhX4HC`8aWYHd0?QhSr|!Fj^}EtBo1?PWc-yL<&)N=)-4fSyT%g+S>mPRF#*By}&RSF`DUGgfxRbTp z|N9?`h{?qtca47_t9;qaLtY{lh_xCQ%7F>*U#;}$tU=juwfC} zOXkX(hhE+34_XUMEXXIhmY{~MKPJrzHlwaC5bjveWxQMJ`jsljJ->Y-|Ew_Ql?P;` z*iJ)k(JH>v(bYz;(sC$^Q*r?+rtRP0ZXby9J9&G(4}t}G*!Hn1&<2nFHvM;*9I4k? zarf+Xry_hap%+<+EH8nl1M6kVBDIcdiR8>JKyuz)P$2y0KpXvZpdYjfm^kK8y@6}x zXSDE%L)CNm)@I?2$eG>zkIyjW_|r!kw>!Mcq}2rZ#RkQmIbaoz24&$9#JZ~6F#ON= zl<|}I1WHh`$i2FG$=DsWIuBagkwK9j5e4r1p>!hjUW3A=N6=!OtBn8HWEiz84+l_P zHl2;>7#$fNqR;@ks;_B$**6+qx^NKT0(SqopTH^gpFZYhFfS{XI@4apkb0< zbJ`8<`}9*#8;W(iUH|22C&pl)eBvo6Kj0mhJw6g$fLb> z3G3^;l1TpZ(&9ZcN@c@t`f}xuo);d8EN|iXx2?+l?`{dT#Q^D2lgW|Hh)6e5EVYkG z^gB%N$Loc@27F6nh!ktHXNqoLsZuTtDW?OXzHw-12o(-WQ%(plnVuPgEs6tJoa_h; zBnsA4I;_^?4Xl*>7)(->J@M}p+=eo+^#@G7H5MR!h}XoHYgMdg&<(G z9r#?{0n1&V94HP?I53@1S*a8-QlU=%x?y?wWeU3zNQJ$3i(6{x!2R(P4Ll1`5N11+ z2|b2axQ!jgfQ`v>w&|F#)Vw)&0UZ-63)vOM@G*_SHp;#q;fU>4lpjEe~pnWD9R@>vdmmt`R37sx!F$OOiolgASDOSXVM z{bChO>qOe~Y602w>rJc~%u#U2OQnLVzA^OwjKP1*7(5;C8I^(~&gEYZ!rxmVHAMoCM9ux$3Ad==Vm}DPL1%`i3DpPYi z(wT97K9!dV{t;EK{osRkxBo_ELw&TA`1%Ik0`)f#weV?qj;pyh7cXYuMo-AHE1>#v zl>?N8Ld4v604>VW4$^F0y#Dol*4XpmiaB=#dG4D5>b#4-VggAdO{WWloS%9NRnjZj zLt^cbtG0Z}K&*dxY3_wjRS+|KzG`t85RUt%Pk3yzcc@OsKocR#7#P|?yn|UMgVgKg z=C2XW0JcSaV0!NYEcreG71{7&FlHaiH<&)x?UztUlP!LdKs#g2G2m)QK}~raaU+gB zSn2Yi3Y?VY#A6n)mDsPz6u6OHK`vL4b{4pteKeU=n1W^mI=O*n9+g4dsM9f{CDj7>W+h_H+$SSYL_jTSjv>C$z7UJT|D}Bj zNoLA~!KxfIr?~cx#))xss+`a#(qL%>XZp6mi=Ub%IQMCYU&Cioq z02|RXLvR*%0G}tv+fHgAM)~%#I`)y%WnhjG49SdK&71Ku9T%+eXj}m%9{c*?b8YE% zBUoZx9 z&~?K%H}LEh29u5N{TAdJFg92{3a(b-OV?UW9 zcT{eZRbm`f?&NZ-Ysv2~vK@hx>c3oPy)EFQ@QvV%<31$_5K~AeNO#dn)Rq~kAst3* z6X3DBtuZVe3q*j*0GDr8?e5j&z`7BeO#Hp@jh>l#eytammtMZ>e=H&ySG5Xt*-$o|?y9{m zuWs@ES6B7+MtNDuLHjfH3GjaWy4=CH=C63zL140-$mWa@Fgz`NUH579rv!PL9p_yD zI*E*$qS4K8@Rl9zD9Vv!Zf6d9!9=#uoPjwNQ$JRziRUtE#y+l1cm%66=4U)^x*eGn}`CL*}7`d)4-FjFeGW-cR=sUVHhy7W0k#~3*_nChYO;_ zc~r<1^0=OXsNwbi!RUh6`8#;-0T0U#sUny|CY$2tlbQJzWe2UmWF~+TmF>`>6OEku zV{!@eD$X>!roP+5d2`Q(_t!G>b(>ATkF645r+LqJ_I_d}S4zq7oKpk;!7a-M*l(&(t z`UD#`wgg@=>v*HJ3iecu3kf^aGG3;jErpx~TJN)h#lM9@-ds`Gq}7(85C*MfcdWMN zlz6D+GqS)Vx7bcaSFyyNr>YK?N`(%GEM(%bF5#FhY(sA>LL--Q3FCI5&*${oJ(Wi~ zl1g!;US&$yWFBQcq9kLFCv2MxTfDSCjB5GW6a~hltEYi?z3x7p?$XoKJNuhFPqa6C z>QbW93m7S;Uo;FuJ77@y8?nh>noWY`$ZAYqp*o0%!7#j$(!+M5KR8mAQnkDOCw14R zHA)#B_+=#Gb!Pf}`FgPi4pKcdqtb4zbW-sX&!c?fwe50JP78|8O$fW(Py)CXtpw*T|FISXe-J8tj}3?}S!oUa z{iPojUH{gjQ3`QAzyK3RNIAyipWjj;n=Kn5);(PJ$E5girst_p#UPy-I2l`C1?5o1 zfqT@?V>R~awJ}(`qrx|^aI!%{VAIG0xROJJ>k5?`g$)Z{YBp$SEmi;o{at+3&jX%z zJ)6M$+VIPS-nFcC3D71&OuYX}+R#g|V^9Fdlr92p2Oy(H>YQUnIpr2h3$s*^c|9-! z$fdR%Y!i;eLgor#MUE^~YM^~3py3`{fzVz6AK4A+pY34zO0fe=bU(PXX7tVTfPWp* zo0%C~UZ`JwHBM{MRA)i#k99!#T8{7%MvF&0MN;8RL$xC^>GG)M1)8X3OOmKr zDJZr}>2d5I#42`!Ruuu5wZ4(fLDIu7?HUz1Uei88l!70^sIxCrq&xxSmu8xduQuV;=zX)*;2tO@Zy)(nfL4FUqS-P0-t1TuiPU_!@(phKJY zlY*5gkx02XlViF6xqaL)sM79HA~}^7pkOEnNN9n)R$jOOH-i%o*R27Wz`254 z>1^2;j`Hm8m?3|oMTU0PwI&Hgu8&EJy0_!c-oa0;7Ud=~Ou`56{1Fl3)5)h-t4t$DbQA#_bf${XQ_Q6DL7?^;vU(IxedGB?m4j(IkKxmyoZj#20!cZlH{+IaO+SaQ z{*wi6tmh)6&1NpRX`;nDfL_=4pSVWIJ>J7)XK`UVTqVHq&88l1(482e1_*InVVNH$ za!NLpz_j;;;2vontTSYW`Q2v49JV>E3^T&~_9T!%orEH?F%0k#ycgBJz8}ofx#bNb z!8PuQ)3kKUP-5^CqyQ8Zg^y%l_v<r2sFZ`j;ZW~hv>T>2RCm7bV5Ue zt^(oYg1f_j9k@{n;m{U7Irl{_g1c#-|E0E{jM9M)^OnjuWP=?OeTiTWh-ThCzW``U zp2H4Nn}G++`$_tP7$^8==+9~uA6J9TkF-snE1TD&VIfPuW<2Ltx^cb?6O&_egaaA^ znVpk^3EEm{I;mev*Rid)T$z#uisDXDXeiDM7Z5A>Nq>?Ter%T`8#DBs{3(ypA-kxd zr-#S?ptX5!PL2=wXv%x3!?^W)asl>@Ka2#cGv@8gckW6W%0g%30ZTr}axstYu$7NFq>J7PA?sC$hEdjV!ZD@67zR1}x28{xeLndIgXUI4Jm zR8IFXuLYN$1mT#UeaK`H4E%fc9dL>9$BTep!Wb2{(JjCO$I4X2MNa#%aJ7wmr@;+t zM9shAliO}I*(4R7A}N@RqyXBd!tTC27=WET#Me!#P)?B)$pR;mzXB2eE{&O}Lo!A4s zovo9mf~mhlhh{$(Z|;YIy$7pyrPcOtUBtqNPx}OEBO4)*Q5TJ<9>5ye&5;C4R+<~^ zOsG&XT>Yba$7o-$ouOH}&O$?C<`v6GX?(Sc3N}Jp5phVk^cFDN z{`&Gy7EIgtPY7ql9H67{4j>c?*IU=l4<1S%vTk3FUL{EJLxp>SmD_(!qku=^VSRl$)$IZDizz^7fwr$7Sd;l6*Uip< ziP`hGa_8wmiB{!UU^dNRU{Ji_T^}{6d=;t*2+-Jd8p`kLzd%t5KaXC;uf?_0UFy9~-Yo#uU>m`C?LODwe`6=;IhT|ty@h=Utwu!K z|Er{iOV2ow_z4`wKwyL6@p59Bqd@2SS}Da5+SmmLr@?aKLYa6aJaFprLK~olR75+5eN(h8*ug`Y$u@T5Ir|&gV-bwhYS< z4FL3-cYhXNsc>937_-0;?}i4oUpe?40U`JSr?>!;en5qr?w?d#r0&r9y_l~5(b44J zvWWdhy#ip?|7>w?ISh%P-+?wn)iN1xjM{MH5#o!8$UBYU_P9mCcS{yvl*KDbh7#DY z;7YD!ZfiU8QU+9x-BKX({0<#UnwK5Z~fj(P3 z2NaYmL+H(9KV&;YDuEAAPADUY$9MH9fOCG(c$EJNP@8c=D4yASdA_#-fv+HiloMf% zxC`E^-jUi?q183@RQHN zcd^LDUY|V+)Ixq>Zuz2b0^v`-2aFXXM_z3iio?_GLxY`Ma5F{VR{z}(Y%_;2a>{Rs zxb|FmVGeKrj?Ka!;6D|a#ub=!_vUkwubWgUDcO*lUWuTRR@F&Dx;YnW<1#D)5hNN> zCaLx}Ok+V7>$QMjeMkYl>ss|Vb*uMF6Fzq+qrVFs`=2?L%a1<_x&utxNtePS7oQ)H z0UDGs7$hQCmj2asPf8@bmlj?Ir_60`%R{$yR)(;ifGUSB1Wk=|*g=8fy z3s2Nf=nf^(tQz|stlT9Ae=3qhsB(qh)*!AMxK;5eId-{@e9i4~0m?&NxYrk)vzw(M z$lXPjU8!Sx3)P`x6FZ8rKd`ovt`01ynXwlB;8``e=%Ofm;+8?E*Dn za3Jb_2G}Hue$8&i9xYAJgM_a;Fj%67O49YfYP0V8fRjSJHD6D>ojiRotRzo&l@lnQ zUPmeA#d+BPJwlVK6VB1QQSE1PoDv7tqe>;}@tv(wh^Q`9j~or?!Li(9NITKU0`?lwBH-i<{5EA7{{zBm)eyrf5 zNt2l~47I}XTyn+v1mn4i;c>=B3IvD(x~|dladPdQ3UoKbJSwLAEM&tx(&<9BI#l}z z{b7MT(A;W(P-3?gl1S`k`@{VZ{D}&CU7(S+FT}oNjG0k*{0UE@c{WeFtSj?{zQXBL zypDuiJ3{l2@EwrS2vY9oX>draJ3{kxU(u;V6{MsX*9>MZb`cy^3yf$^zmfv_L%l_n zMn>2-vRzXOt91iDsyW3UqQGU-)pl4!LfNukqn9)L|?|763UTghy}k#r@&i#j>e&bJJC(!r>nIdt_M$woNed)#?ic zUOEm}0sp8VaEYD|7KCoX@P06#d!$!FsE`ZLs@T?zxUpY49yM35WfxhL@@od)DGcoa zt15-nr@1bNwbZI>+pvvKuorKuug!4`?Xk*%fX1Du9q)Cp;=3-jQrBRV0$Gza@uB+s zfar|a*?kycH9~kK)T^=ch1Gjds|%n%^%^wi9rRb!+JR9CSynCD-sWlrS&0F=Cv|{4 zg06&hO>w!hY5O?0ujS%=-?4Djk}kF1cqVnFNmVSeas%tqEZLv;7&rgyNt%oa0xsEo zN!si=S?^uW8uS&m(7lI7r@k04U@CC}xa`1}te;Ys2Mm*@^(m~ajg_f}{H^!Szg2AC3CPAZidRHYMXmG|24d<_en^m1!p$7gNX1V^B-U z<7bu$r8fGjTG_k#vOk@mX*SnUVGf~G_jap88)W375f_GFuD=*hYOY*81*d-CG=H~t zfwW&R4=#IsvAW>II4}D&OUM-c7oUQd4{{2 z7?!e1+Jbjv<5pti?Epreu@T0Y?DR{{M3Ocy<++m2BRt*wLm{3{@Z!iF25!sb{Y0k& z(#>ZQnWKTFb6+6zlG|(8j7{=2lko&|8_#oG1+BE4cq0>YvX(r#a$E7Ul#FDpW*IO& z*x4;y9d~r9PXC#vbO-6UGT5k<7q%Ejn=4@{laqM~!G4sG*4~0)Rk!vti)oAntZq(x zsX=$|q-X8GeD#!ikMD<-_Kpd12lsOb!!_mahODzRs!h%)>izj+y23k=6}3d_V*9`cax37 zRRN4;An-W-u!7e|p}izzETEA?8~f!J#I_ zk(-Iha%Gqzd@D7OS++GJRWp-dJe}EUPy%ywGx*<-VN3&?f+!R|sK3y@w!*t{3ir!^x*nv%m zLq`8fXq*=_-y{gCnQmNPi8=^v5w}wSC;2eB^v{@!)X1LEAbZTk&^lE&PWvq zaRrEwf`jOb7l7lVlIW~h3`1QG8mFCjXrirp+6Q>aW`JNfL0WwOjR(EFEB#FHN&gOd z0^?0?VPtv9)&(?o<*d?Qx7C3(DD(9$J%UF)h}Af~z?1C`g76_>l~niMc|$Z%Dd$L# zxnZ;g$eibdNC@|B%Do8KjKVTN8$~FpU#E4}1i)aNKgP_*OxFLaOL($f2dL#PD^JAn zE*^fc`{*xW$_P*DyQ|&DUvGcseM%k*!Z4ET8cuHTK`d$(5TibjV_G9Ztqn^X=(laX zCL*#3Za@i5i|RxzFRDF?SP zj=z`#sqz!$W@7b zJAy0n5y$*PJ$Lbh%+b@swU$5KQV*m6d^~741({USxH*v7*D(-09wT`1qa9d)= zx#Np1Id1nEy6RDywypFLJ}D{HsPws3x&!*PX6f`1z7Px;o*)q~CP*?Y-xdtWB5Q$S z@eaTwt8ZUFm{?j_)q;(GEx^2Hpk|SHVc9Cccg+MB$=nHW1M1cirt@jNu;CGN* z+~2hfi54W*WJp|!0N0cz#Jt4XF;yq4{KF?EA zAh9np_AZqvZ+HXoHkXkUX;1HmW&F}Dw%R=mK0ASW%qHUX`*TAADvOGnhzm$yIDp1i zCV*y#{?*S(0@76a2$B}>BL-omIjr7iO^!Mh1Dd|JO;6{h2F--?KkqP0>Opc(>VQpY zHrp}QGFlW}W&xgAUqE1KKP;%#Siq*mKXad%n0-9Ov=D_=;&F|irTXy_t6De3n_5=s zDole}$tIfaz9(&IQ-`m>j`(cn!~9j+2Nf4RAr$M=S}cc=N0z2uo=rEgDk36+R26s+kzCfSGv78H))WCfoVv4Sx3I~)E3=--N`TeE(P9Zz$~t@6XuG=>+CxMj!-tf%)N)1%0djuOwp7h4me-?9)V_19@4K~2dN z3T415lG|86w>aJ-Wc`MhYLn*Ou_Fpv9{}?}*?pwz10BiFCLqz3c{QjqmCylI0UnF>g%*EXFsE9 z!tu@|5SeZA-l?p|cJSj#Hq#+aA&~DL+fb(b>ys}@8k82O)mT4CGJ4e@5X$& z+HfbDG1<7Mp78Ajl3I`S)3BS1b$i7^=uU?Q{Yb6B~HI2gi9e!;__P6tk$0dd*C{<=aBv`{-Lt%fW;)<@rM$ z8RuysUPissJ-5&1{)ZRHcT*F4q0~Szx%BYOVDnQA;NANaNCNdA9yMc0!-Dbl{5P6B z&ORH^lMZAir$c;NSwHTWT~p&l(y!Q64-Sdq%HpM-!XpQVQfz7`qD>LQ;yNdbB|h0i z({oQme|;ArSwA~(zCl0uo|T`DF?3$UX~B$)Y!%;AYXRgCaXik?-Q?U01t&51y!mw- zAFPdE@HYcc8lY(IJtQ%G2WeJLu{X0Qc}csbRa~Tt*aP>w>xWQirX7+vws~nHrOdCPTBZ=WZbB-LBmOS*a;p1v8IxsQ@{8qVV)dd zzBhT?M~ykKWj6jel@&+M6{A6uMClarHURKtZgM4hRQEh;u{j`b?MuOWYP=cjE@Mm~?H z+VsSjgUpyS-P%1W;qFG_bA?5x{^TV%C>GMdDL^H{)J0Tia6OHgu?IvGN*nL#A?goA;Jw zvRQqkx2V)3vg9>>*k)r})IZ)qBNK&<biLS+(UbNNu_<3tY`5{(kVK|zf9R5dd!SG z%Hb*6K0CzamUz7E0c7A=qTYmIEz(FI!49KCcpcM?6vdArC`O*3`jqX5=lxU&eiRm^ znk7waz+N!kc{7;yi+JLlG7C5>fH>-%yjhXypRkmsmnX~v7T(-D zxzVl_ho-;XykX@%a7AYNI4-`7|N2>yFhZPM{QNdJ{7Tj;`|)w#BkbRgY&xPMOEM(< zHh!v$5CZZ{3=Cz~@9ggW%o4egc)4wGYs9Tn5dW3rKWY7IG4ig>F$F}I47lQVJao@1XY zx8&~A;OWUkeV?UX$XMNA{61l}PJ#Muwti}AD(K0#RhkVC3o?}}HWAed%J|0~Vhn`A z9HB=QO3V*AR_z^Ia`$Vk{BvrYU?@j=Wuf5Q+yn09Mrt0;n(rTCR+Dc`C2m4Kj?=H2 z3JMhga1)))tF}FZ?zDX$_{XNh#B^fnm+#Bfv~a05LQ-DW$Y|MYCy$s9OY(j@l}tn1 zHwVNIx#<|3Z)kDy21^t_5rYDPBJ47AS}xM3K6q6){Z<)mLMZbozpY;3h$%@)$>n4A zpI&X&PSc&z4i>&PzLjh>>-lJ@;jIf#eMnl_+fp0vk8Dnf7)hP`BpDBg_6(1*uiP`O z<#qhl*v%LIb1zQ*IOrczy}Jt>myZI|c3I*r-)3jq4WyX5Cm+lBCo+}CccEQv`RLb~ zSx9cv!`+LJpy!$cJIrmtQvRWpepre(94Waa>$nTvnh&T+ZX;*Vv_N$WG0qCGy*vkzl~}YPrW}Gl!u! zR9s$H%j?f-zn_hWKYLTNMFwlEFldQS)v<4!rA5h;o4ER_Hq;3->et@{{Nm5Ck68+X z+}Nqg8j(_uoK36|v2|)nAGOL0`VO&9`(l^!iNEk|H-dCi7MLx~0{KV1R`?tj+e=|# z`9ZwLQv9ajtIS*~wBn(y5!WS+Uw%GnH{OGF$Srs?nw*t2b`y5LrL0?>4%_7HoGy4v zZ2aNfr3(!%gHd5GJk)a9A-O9m4o(G0vk_`#i)!z;5ElkV-eeXu48!^Z>FBaOyf*bV z*x+NzJ3oJ1W5zLMcDoFLC*6MEu2PmDE>;ru%{ik|h$rwoBy;6H_c73&7X+hIe(tj(_x+RL`KP(vkIcMd~7o0{+u{!WAGpN{O7y z=tuddpI2#~_iJ9YQ;t~ogjm~qz?Fqql-K9mnm~85boZDY@9(P$M7f)_ryIEAFIUWz zeNbHdu=lrZ<+nOh0O#%CFfojy;AKT&(o3GRd&nkXr1`$++yxZ2avM5lr+6whwhkYD zh%oMax)n(8)@6`cJ2Ko%t{=T_%f^c?Op@n9&OfGB|KHB3gN$BS_eM4#JN$syiaR;j zU1H-nmar*e!Hj(T5MKrTfGwQ-@~O@I!gea05;@(&ZE1S#p@Q0mnCqY4(EGnSefsMQ z5it9{Sxm#lPMBNLrmLp5w$?b~y7hX)kg%u`Ye^O~eLce$3wGYodfJm~O1L?`uhh9?nh3uH! z1HF3^#e#h{bk}R~tmeDNh39DRXA`^UVy>-OHqj9#dG+0s3h>LC5P@0#e`>q_aHh8~ zKAS~EaVNK)P_forcDuKYEQ(5eXJfW?>ndtDl@gh@q;9{KQSObJRgcYTX&8m&DT&;) zs5`E7{aV)$5}6-~!XobZE`RmhfA9O(_xZl>dCz&ydC&WP-t*%*ueZO7K~dV4{)dI8 zG`{*&cEQ5JqOeX(>c0n;MrIDQm}~-F9n5YtIvn#BqiGALrX)5%_9)!=Nsyn?DtHm& zjLH-D*E+wQcQh2#!)b-zWoWNBgYs)^YLW`~o+Xc(5axe93gS=OLqevDBQ*tyPoF-0 zGnc9e)4aQ(J++d! zYOq}4sQ|MVrPJx=-2G!&>Ogz>Bs&Ql!s-NWCF!WUZ1stbk#k>JsJ?%zqES}}j_zs; z^Vd)A?|m-4pe>GyYz0e0SHSw(XJ*5?5ATDz?c&Z$ZsDPhaAfpxt2OcR!B{g%U9O`K zbI056Labs;rXdCut_GHcKuAOBOTTe*ay=j%k|}c?A2aczZf^(&g`VhT`^z$fN62WJ za~S1i_oIo(dD;}B77oP-L^X~!VU1aX7EmE_M%M=1OiYne&ddu9J*O7*1d+)QgX_hZy*xI=1pJXW}*;1xp zF{QV9_qRfMjk-Jqlf}e^N8l*ct$B%r4POx)K|(b2COhfs?9$=(Q?jx}ri| zZfSlkvxk#xE>@|su3Y5lBPm5u&E2G_b7BX_-URaM(<`1$4hw>}j&}vZ+*POy!Kaqx07*_8Jfu0x^Om+{Tk)U|U0G=UGae z-WmDhM?Iiz5g7LYf^)<#{&ohHRa?}SIZls3&tYuc(4o(w(s=Rn*LRg>OljECAPA+9 zUH5aURCcn7ZhA|7+y!K~Z z8*)+-sDgPCd4!R__=URMZsCfmwp6oxesh|9vqAZ;ojWe3aS6D0gC)yigU3JjLyX-8 zHm;^ny@#k+i`SiOeCLFIFW2NkP;lAI@7Bw zjwT-uYb9s0o zFEegL?s$gQqOL5zAE0k5`Dhz>Phgj292C4hz}n@9*)FXTxqZNss5+ug+O5T?OLq^i z%#x<%isB`3yAa+SxrKypA3)|3`s&QH#Ak&m#zCAK*)0&^VI0e#^akfXW{I!cGWMDJ zQKWyCEs;{CogdLKTc)T_^n#Gt@|yf=nYt+*c}cDfp=@Qg@L(?D^i-ceT}1TG(*fop zl#s&3^PXy~46FlN&Rb>$S`i