From b1b238904b14f7119479c36f91e3edc8b0e8863f Mon Sep 17 00:00:00 2001
From: larentoun <31931237+larentoun@users.noreply.github.com>
Date: Thu, 18 Apr 2024 15:14:40 +0300
Subject: [PATCH] try to make it work
---
.github/workflows/render_nanomaps.yml | 46 ++++
tgui/packages/tgui/components/NanoMap.js | 224 ++++++++++++++++++
tgui/packages/tgui/components/index.ts | 3 +
.../tgui/styles/components/NanoMap.scss | 35 +++
tgui/packages/tgui/styles/main.scss | 3 +
tools/nanomap_renderer/README.MD | 6 +
tools/nanomap_renderer/nanomap-renderer | Bin 0 -> 4073448 bytes
.../nanomap-renderer-invoker.sh | 24 ++
8 files changed, 341 insertions(+)
create mode 100644 .github/workflows/render_nanomaps.yml
create mode 100644 tgui/packages/tgui/components/NanoMap.js
create mode 100644 tgui/packages/tgui/styles/components/NanoMap.scss
create mode 100644 tools/nanomap_renderer/README.MD
create mode 100644 tools/nanomap_renderer/nanomap-renderer
create mode 100644 tools/nanomap_renderer/nanomap-renderer-invoker.sh
diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml
new file mode 100644
index 0000000000000..532cfa7f169c7
--- /dev/null
+++ b/.github/workflows/render_nanomaps.yml
@@ -0,0 +1,46 @@
+# GitHub action to autorender nanomaps outside the game
+# This kills off the awful verb we have that takes a full 50 seconds and hangs the whole server
+# The file names and locations are VERY important here
+# DO NOT EDIT THIS UNLESS YOU KNOW WHAT YOU ARE DOING
+# -aa
+name: 'Render Nanomaps'
+on:
+ schedule:
+ - cron: "0 0 * * *"
+ workflow_dispatch:
+
+jobs:
+ generate_maps:
+ name: 'Generate NanoMaps'
+ runs-on: ubuntu-22.04
+ steps:
+ - id: create_token
+ uses: actions/create-github-app-token@v1
+ with:
+ app-id: ${{ secrets.APP_ID }}
+ private-key: ${{ secrets.PRIVATE_KEY }}
+
+ - run: echo "GH_TOKEN=${{ steps.create_token.outputs.token }}" >> "$GITHUB_ENV"
+
+ - name: 'Update Branch'
+ uses: actions/checkout@v4
+ with:
+ token: ${{ steps.create_token.outputs.token }}
+
+ - name: Branch
+ run: |
+ git branch -f nanomap-render
+ git checkout nanomap-render
+ git reset --hard origin/master
+
+ - name: 'Generate Maps'
+ run: './tools/nanomap_renderer/nanomap-renderer-invoker.sh'
+
+ - name: 'Commit Maps and open PR'
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "NanoMap Generation"
+ git pull origin master
+ git commit -m "NanoMap Auto-Update (`date`)" -a || true
+ git push -f -u origin nanomap-render
+ gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master"
diff --git a/tgui/packages/tgui/components/NanoMap.js b/tgui/packages/tgui/components/NanoMap.js
new file mode 100644
index 0000000000000..f06141047238b
--- /dev/null
+++ b/tgui/packages/tgui/components/NanoMap.js
@@ -0,0 +1,224 @@
+// BANDASTATION ADDITION
+
+import { resolveAsset } from '../assets';
+import { useBackend } from '../backend';
+import { Box, Button, Icon, Tooltip } from '.';
+import { LabeledList } from './LabeledList';
+import { Slider } from './Slider';
+
+const pauseEvent = (e) => {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
+ e.cancelBubble = true;
+ e.returnValue = false;
+ return false;
+};
+
+export class NanoMap extends Component {
+ constructor(props) {
+ super(props);
+
+ // Auto center based on window size
+ const Xcenter = window.innerWidth / 2 - 256;
+ const Ycenter = window.innerHeight / 2 - 256;
+
+ this.state = {
+ offsetX: 128,
+ offsetY: 48,
+ transform: 'none',
+ dragging: false,
+ originX: null,
+ originY: null,
+ zoom: 1,
+ };
+
+ // Dragging
+ this.handleDragStart = (e) => {
+ this.ref = e.target;
+ this.setState({
+ dragging: false,
+ originX: e.screenX,
+ originY: e.screenY,
+ });
+ document.addEventListener('mousemove', this.handleDragMove);
+ document.addEventListener('mouseup', this.handleDragEnd);
+ pauseEvent(e);
+ };
+
+ this.handleDragMove = (e) => {
+ this.setState((prevState) => {
+ const state = { ...prevState };
+ const newOffsetX = e.screenX - state.originX;
+ const newOffsetY = e.screenY - state.originY;
+ if (prevState.dragging) {
+ state.offsetX += newOffsetX;
+ state.offsetY += newOffsetY;
+ state.originX = e.screenX;
+ state.originY = e.screenY;
+ } else {
+ state.dragging = true;
+ }
+ return state;
+ });
+ pauseEvent(e);
+ };
+
+ this.handleDragEnd = (e) => {
+ this.setState({
+ dragging: false,
+ originX: null,
+ originY: null,
+ });
+ document.removeEventListener('mousemove', this.handleDragMove);
+ document.removeEventListener('mouseup', this.handleDragEnd);
+ pauseEvent(e);
+ };
+
+ this.handleZoom = (_e, value) => {
+ this.setState((state) => {
+ const newZoom = Math.min(Math.max(value, 1), 8);
+ let zoomDiff = (newZoom - state.zoom) * 1.5;
+ state.zoom = newZoom;
+ state.offsetX = state.offsetX - 262 * zoomDiff;
+ state.offsetY = state.offsetY - 256 * zoomDiff;
+ if (props.onZoom) {
+ props.onZoom(state.zoom);
+ }
+ return state;
+ });
+ };
+ }
+
+ render() {
+ const { config } = useBackend(this.context);
+ const { dragging, offsetX, offsetY, zoom = 1 } = this.state;
+ const { children } = this.props;
+
+ const mapUrl = config.map + '_nanomap_z1.png';
+ const mapSize = 510 * zoom + 'px';
+ const newStyle = {
+ width: mapSize,
+ height: mapSize,
+ 'margin-top': offsetY + 'px',
+ 'margin-left': offsetX + 'px',
+ overflow: 'hidden',
+ position: 'relative',
+ 'background-size': 'cover',
+ 'background-repeat': 'no-repeat',
+ 'text-align': 'center',
+ cursor: dragging ? 'move' : 'auto',
+ };
+ const mapStyle = {
+ width: '100%',
+ height: '100%',
+ position: 'absolute',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
+ '-ms-interpolation-mode': 'nearest-neighbor',
+ };
+
+ return (
+
{SOr8hl z@m~OcjEmT0XM0g zU2y( wUH^_ru{*P)u+TbPf68N3uF8G0TKB|D ^z z Si(D$&|;2iIOA5HNUaE`Bm-$(HQIA4Ejf%D(T zwZZxIdk@@Rs_GDe^SBy-x3{S4PBA#wKlk};JuS*_f^&QUoIelT2Iu+80p~mw@b=BB zUsZ69_rcq@srWiLuOFJ|cd7Umcud{~uiT^JJK)@&5WGq8eelY?Do+INkq^K*zww3a zeu+M)^5np|zZUxaD!u?7liT2xkE!?~IJd_IZ&G|2ywX&8D&QV@6?{>P*4yCxepVg) zB#Li>^WTYg!1?dQyWsIds-1oC(&v;%;2!w^oX@{TJG;MpiqC<+>eH&f7WhTvHaN#S z8n0-)2ELH;*TFe|Q{x?thu}O;2H?SK)cGO?_g|-c2tNBWsy^lyv-M;zXuJe|I^`*Y ze~8=z|2nx3{yp*l{8yh1A6ec*w7r^=RplooCcffhw=z?>66+Ali zkYt_dfpdHvy#0Gs&j6g`Tj0@4RDW>(Je(f*XXx`V``~>2Z2*2N#Sg(bKKGSu{ja3> zJUGV}z|W@mA~?r8;01~=gL8Zp{9uZ&ft!cZbujQ8#W%n?e+&Et`drfv_`j0(z<);G z2j~0)@Q+gb5d2Z{+#}igbDli-y%b*n=lCKxzpi({w^E)mc#i5>1)rK{!1+3PL*s3Y z_rUqMh`{5Q)p0QZzmKj<8(+=Vjq~Ke`FOX$zxyS1-n7AgLtX;sco+Pa6kh=!lGijI zfb;sTg VR8x-Khu8*Eb??^E_4O0k}sVgL9tT zquDz1brScnteY38{1xzk@|$1J#)os%{ON%ki>aO9=3Xkk_Kj?wF6AkFGwZ=@72g5( z$&GF{p6}ZlFM*pS_4>#Kzm{H?Rl%>P*Bw6i1g#qz;NcAQK3eCWR6F+&tAH8eKmONE z`AkM}+e`UG%EOfJp7MUmXQez!x!gAY8>D 0UiZ@ffcgpiASMU6)2d$LvlZr2-eBYGYDSuVUiz%Oz@>0splshTkFXiQw@1OE& z%GEcjs|UT5t8bc9UQ4<9c@yl&dqZ@ ?% }(;AD{9{%1=mnHRUI!yq5Aer`%8ZTT)(6c`@Zd$`_`*k@7oI-c0#h zQ{GDX+fv?6`N=8or2LeWcT;|9%6ln4E#+a#ODXTC{PdJZDL*6Samvq3`7q^Yr`(|P zsT{ZGq&%1Mb5m}n+(~&p D zQ{GAW?e8?+9T<9un# zb17ezax>*)DbJ^TdCIMnUz>6} P~UP}3ODR)x7GUaZ{SEsz3@-->1q})q+ zHRWql?xlQP%4;bfPr0A+^(n8X{5>fTQobSOjg;3?-c0%RDQ~6xhLpEczA@$9l;4>0 zUdlJ8JWTmbDetHJ=9EV%_ftMd`KFYYX`L+B)Vrm;lJeK5yqa?LN<=;ArTmCgd@bci zrQA>Xn^Im+`AI1cQhrv-8!5jy<;|2=Q{GDXyHnmy`Fm6T_aFaWfxlPa?-lra1^!-v z|4RjaKj)zTaW?;V&Y76C-_?g3&aK_?-6lh4^S5%_leCj>KJ<#ijmi1*#Q)DZxFmj( z_meZ%j%ZT+oBsxRe})L&5hnNdm-po Ebs3n@4LzU@5%dn%loC|{ fx!T$Kb7%7}WA~Cp+h(2fdCPFN?fY+^lQ*XfKR&~loO`Iq`-ec>ef_AY`?gv8 z%bSJ6@wsAG+$7p2cg0?l(VT;QnRq+hiufIJKW%&S&*jaLuQ*#{=ked1<~%-}>CAZ2 zdFGYz*N6lk5RH=wa+A^WIR}e{2|r)9&p+i8;89H(ly%KINZ9q~UCRetaKi;*{Tr zJA)%dnFh a2OmB{^r?#(B8~FF9L(JeYgT>kMaN ETem041~-aqO7<$yT-($g=w z*d5vW7iaU$;t8`y#GcGe&Mk^(Ef)LO8kx9qp0#*l kH#^M>ap< zi`34h?Y?Yy;plygo&PnmdE>l-F}~Nx#A%arU%2dWV`O5{Jjc29>2cfHcKVF3?IS{+ zmw)cP&e?Y1e$M8{U*l~4* @mGyZJT^~GSd(*~qz78b1N)AM-pU^bw;gCCPiQBem(T6&3Xwk!P7qVJ z^xiI)KMwx9uW*qkl6Q{1ezqvxWAk$2h#r~PGA}P~Wd#;(JG!*s*+mm?K3g *U Aobaxiod4{_ z@{mm1_QB2j?J17 X_Kh^Y2eraJqA5Flc^I$%&CZ$Bfc?btMz(F7 zR~+2FzZ^pw=Xrxu#LOfU%XSSykzL+NhUo8UoXH_NI9#0H J;Qo}fFfyi=U3!jhfvCYf#1w`8ehw+|3^Ww#%ES$3PxZ(IL- z$DSw8+_3k_yN&Om&M=E6Zpew5Xk_Bt+@vZ0-`QLfV_D5kZ@) l zZT;iO!vEZLd|Bf7vV^3MuY*pX{JuQCZnli^y+ h;Ja2OD zf4E8M&B?jn7C(uSbA!cEGCBVdX>w0chNR6u`cSej%t3g>Uh)}(p174`p!vsS3{0(d zlJTADPgP{o_ve*G6GtpgHYC?LkN;v1IjzqXN8-rlr%HndEqRP=@6voO&X38CkzLqN zHd37I@>0Z6k{^6ZoYAF-owv`3SmelodXKb;Q#0NB;oD{Rp5l;F&M@TB_mqem{Qhv+ zsmZ~={2}QSpRfJXc3(eZ`;Pfyft{=e{L_r_8Qax)dnix*lk+!;tka+0MHj`&VB*}o zn)Bx+bN(?Giuh#C|IhUY?L0btc0Wr_TRi_~#;2J7lks_zST2Y?d6QTz>@7R9`N^W# z6WmEP*X_uU&lZiHX1yVX(4Ml*i??ks#bF{w%7#3i$xnM-awh-I2%pJ+Jh_Ll;~_DZ zBxmxEiXZ;wOujpu$q(MuDL$X?{^S4c`TSR6_lWcVk7WGR`TS U$ThV%;$KDMNi60bNL-wT zWDUea`^j^XoP(34-e!7KPQ6o)%BeSbbS!yv%REO+pYrv{+eaooGEdI9&Wb@SpE2V( zu?jd%MD5&9tv5GqPkiCd@xw&z21kEmH!%_ZQ&+}{ZAZ@Lf0A1=#(yAJ1kcE(ltemO z5y;Hqb;TmNj(lvMoXi(bJe1sytawPBVTFk;{;LQPORG7zen~u6CMhRL)b!k@=X=8B zs>K(#qVaRKd{zX@gz^E=fws6=@T_?DfdlctZtD+{>z7U2B|8hBo3lk;U!Qt({Q2{? zo&2W3m0#b@kUuz^o@$GS2S _uC5F53FyV2(&OGV%4UNF<9R4ofP|qp~;;%YM~FGCu9}&sTMk=QX(>l3P)ihPYoA zE7WBE5+~}sv+0SJctIq`?xyYXk-;BjGn4gKkV<&FOepHnOcHLHm-PJcXx5@_Czlqy zAR0Nc@Wu6S*m>cu?ge5@SHv-15s!>76ce}@*Wx_6@fcIISWM&v*^k*`>>Xnp<1>|& zq=`vu<1vmg{!Q7lugRXZl7=LUS-JhmxqmuOb+41O<|D}}NbdHYxNj!ilk*GpFP`e3 zd}uIB9B!(A-6X9V2%i!e<)-?HC7TMxkCSunqzB?%4-AqA*3$zyk<=JZ7Gv`5i|hn7 zIsXC?mbLBTwBu~M)s=gDVSoJ1&XLcFy&&((1-}|pynZUmwLXnA6|;UYwTk+ex>$Y5 z6}n6)I{T(w#pmbe`^ocV$Hg{eB~s6ykk9|v|MU3+IX9_+K_eyg{PV^0cRIB3g915B zok*->H$5RMB;w_OPQ|}b#LER*RXjTQF0JG0^3H{{!jpS<@Jsn}LxjnlJNO6jT29`P zJ7e%Qu`-f(WctD9 A! ze~GwHinvEbe~snNoYjvnTR!LJ-IJ#zNw$gyr_RUX8L_juFk}6!9Sc4=+YnQPIDwnA zZge(3mD}+yQKRis@$`DWJURCcad3+xQvB3BSGIk7P0R;Z?6~e-;??}rl1CiRBHyeX z^JNk_zIN4DT=dC1TgAdfG-1(1QC_4m7hP91t72xDc=IBWbJ5m6k1Tv)ePQQGyAm$i zwzMj?C7$`yLGY3oXPcj>F53DF5hq)HgE(6~Cst?2$ywk(9C4X|a4%=#ZIg3fK1ViG z&MA92+iu7Y)`-f9`<7T1iJX?qd8H(|I25H4`y-!ziPRBK7pox-J!E%U9&!BO-wsr3 zq)+Ws!%6JF9nT)MPr4qv`Y*0;yfWvJJ;i!;xADu9RqOT1N#sbe-xiAzGBR;ac3rek zY@XIdZ`kpS*tyB^x@$c&XUk&()obE`C_=I(`sv8#)SBp}v*m@;N^oy!?H!&&}j`TrRG+q^8VZ(ZXM>8{@c &fBy3K zw+@!idF)@$n)B5i+p3d?JRz>s%sPMb#^dCw>U=RyC+98|jW~betmDM0syqHboE(cE zK7ZTE$BBb4Kls-N#L*-++1dHQk% RJTC{D0I0{C2fiBM4^Gd g1F!#+@wD+)e6g%Hm%o%k Uc)>p85%_z8vBcT@){-$jmO31OYyoUKRN%8r)OSrE)O#E(d42Dxy#}8*yG|k zbdBJD{d#QbdVv@f@_K=IJ@#IaW@OvV#leS`i;I5SHdIF@M#X>U*3{lRx|AGW@ sw@BBKw^UeCn`~FMKASI zld3hTFeQqbNYE1vmQJl=TU%_AV(TMHqF7(SBsG_C+q9+gw=L7At({?}cElC|(Mkde z!6&|{T8&!mjqwq+3Th?)?{DpWl6#YYXr2H6ejxk3_u6Z(_1kMd&N;0T4Q(tJD$SYB zh)%Y=clVx+osqmlO&r{hM=&=%Dw4lDz5LxF`TNz?SRM_p)=LJbbjwiqTl(JTcf$W8 zcWV#X4MI&hgW&gPv-!_dxKThiuxnFEUKj;NJyCmdRm+9i3CIm|dYB@MNeWwL#H<7x zp>-d3`=bRcE@}_TOsVZgtYfm48}3wU-LvSc1N^H2{I26^qv2{aKtly~+^>k#)#d45 z>_3{;Pnsia8b>?in(uPW0sk%6Ni|_IH!-v2#(IW8tYr!J^%`(4_taG4Fh&wcLxx+9 z_%7Ln>MnwndBM!G7iuRW{k>t!^zD5G)u{!&z_H(tk+t8;qW(VGT*$N&w&W&cz7&3z zdMX;$X+{`XdnCR#^G(C2IcQ{ERYl7>TaOPyyG8Jeq-A94E38$(m#w>l=<6-|EEjDR z)vnH#AN28#h+5nD>ALnn>+vTCG`>~JS~TJy;TeK?XRpIE%1uk8XI;6s2oU8JEvrRG z`n{Ti6xHUUL__*T7bOzNrH-T@BTCZu`RB5wkMVZ)*zr;X9j|~=XhCqCK* x-VS=0qIbRDvJ+TLQOO|gMf>ZU3cAnux;9|y=~}G+ zxJPK7^1DGu+nF<4F37Jww@XXL%r*3<2D;+xW4F%HcIBrA*3#X!mM-|8?6q{)-7Mme zCm9+0uu<1<+x1QQ%d}6$`hx=As#IelT5L_NDt?kh!{Ei1(Xa9De8|>2BGqThSigMb za);bMenw+w=bi3w3uENq>T|zUpk>xTr!+l|r TjmJNj&vz4g0pmVKjZC-iB3Ka{?~>wmFU_S M`e)-OMy=0D9?#hp$bkexzK@HiSigITqGd)QFM2G;|1FGOn^?Igc) zv>`C|`GCFCKOPL@(Ej$iZ5FYS^z@z25A>J40A{71Qzf7_o|z+KEV`dO2n6+3Pc$CQ z6!sNqJo?wWHXesvrdh}8Nw0fDvrb?7jHfj=*1rM$W&KnXa>6M4N1IP`pet-Si >EMDUr@{po3=hzbCS1dpNeeSVD;wI ztiFlslcyzeX=*cO?KW0Yd!5p9#Ws!yTFS6%Q@Jpsy~GaSPiZ-CTZvkaWA1J%cWZ^i z%V(6nRh4{cX4#u{d-r^HUMn`Bh#pTw?IGG@M4)<3ZnCd zP1Q{NDF?M~RrxC=_$BFC5|frInWkDSyE7&~f#DfC`@5(gWjJ&DmX*9CBhGFfP(Ixl zjH1#z%R}}@@;4zb;LNPQ42J)5lix4e%I4rqn#Neo11sG})amS%?s}q-Tz|&& nSd0*s>%M K(!zhi8z#r)2L-M`P|Vb%dnr_41!;1Q-BWR4rK_>vjCOft8;6@3 z6K%NqshGBwMd^68OSsL4^L<#xhtdlOtB!)exiRk+a2%@m7_RD$ {g$QFNBreW%Vsdw5mK|>mT*i`*6EY zukm3=-;%@}A8zyMvwYamyChNW!}UJB#D^XI(B;E(e0qTo8$XJWA@QeZnej0w# !~(ivLrqm~=$9l)d==%&o639C7oFvc&c?klDk|wv zQCy~xWhNeKc8;&32A4g_Wr=!Ux)oPHYgm2Rdr9ItW!}3nvE1iblaZ&__q*MvZSiU9 zL>K *vU (k;ukD6APkC^8lI{?;jHTK;#pCJ=cxTu zUd`VoTJsUMYDve@gfUFmD#o?pic#&j`bqwb9SBP&VWn-g6qjbKA+5`&^=70Qn@HR4 z)ADm%qUto3ktVxTb;dK&jD4gP5ht2L?@p6TS+P_4Fx$dog2uQ7=M$u+g*Y~_`0LG2 z3t~P@7W1#OQl9D5(o9$s=s-q4wO|84+H&QEg6-Z-dv~jMJH5LGS9RC{nXkhJjXJb| zu^!^;r}}LGNh|VcQ+*n^<3 8l266fDi4NVMc-o--1o`26||`y3Uudr5`|@3)Zq8IpR(MA zb00-QsZQ049;+T3a#Lti8K%Z91H}IA5(h51_Ee^DLr8W0c6dT7CABy zz?gyes?UJ{mIdiUL4f=Q0=NbOpud3t<$QSu0@Uxr4g}oT_78=?1V)&$!-!~Tl W7#<1)D1p4Z`k)Eh3IgV7!y_)Yvpa3w8~l6sAMI!wM|8q9@N)TTOV*V#9+VHT|+RH>3o*+Q-6 z`wG8zxbCwLXk5RBd5!DWFt2fuhD90|X;`FjZrU8sIBC!a(YQ#%B8{^#fxbxNjD3W~ z9Gkx7YI@bUcreV=xGvhSP958@G!94HZBOw~8VA>RQ{&tuI=se3TGd5usyS2RBCQ%u z po%Q5%b0^Ziv1k?r*|YR%y}9V+!e49_ExZT&z_5~ zUN-z(tcgi8p(e1k%@T>^tDG#xX@FzH%9iUB!c1wd&6U ;_0Lx? z3P=?mi8GZ+N2-)2bE=opsH7
zuwgl~wP6OPdySQ2O= Zlg5hxv}q!M|2h z611x6XgnjBj9@c@$p|)0pUEE?DyDseBSXZLh;RgpQXIi*0dl6noh7&?Ju;lkU?LpB zrW8QwhGf8G+#5=UUWB*!bje*NtlBDx^vEzWL?hg)_ESfc{2)&AH@K+^Rz$FhotS)3 zN!emIR<*OYgvLwq#JqM~{W8}SorIOP)lyuVgT$SzaYQ_G@^)V?Ut-5E)5;$Tvu;VI zaz*5)xo9dDc_C49qvekHow3}BUmCaId{=U3c&kwn53W;fMXXgdN;KF^SREX&aOjwC zVYzR4yLZ#x-Rj*=@2 dvCYa5uLj*Zp0kf zHgY4=Mna)*EAiMfKiLw;VO@gKOOGX6+Km3 EzUCK{BX^kipUPTm}7TXdE z67uTrkK0HJLPYaaTzbo>X6PJo?~4l&T;FD@sYV^lEj41(mwr-E#+}7Ujw0!A2KG%C z86*o9)`C{C^uHbKu& 1x>OD^3eWQ42>T3Bz`nTUUz#YveM38K<#=poEk05; zM9hkq=a>m6Hr?kqk%@i@C=pqM(Jw-y2<`fpaS{}Wi_oz?3j1Z;93PI*vCW4gbnGI$ zJ4WUEp XRu5u6PNbt}{g z+Sf&1mFra@ewlDK9Ml=tr2QTl;DL-Fl;z{bKvv8zn!D8--Ri8$-&-~ zyqIB=dK)Gc4tZG zg)dDQv@(^53N$o{qJ;HP*so0IL}3piZ9W` zG%$5=f^*45QzZbp8=5wD24-(cFBl(h}esx|66;)8v9* YS&cs~Hh zRPfya1XE*JUE=_ufOYhT1O(#<;yWB57 ;zo7k?l?xO%@2 z2ne$_#6NOC(B{YxK*+1g1_WjDfN)n~HXxXYXIKa())~tT6J^4?0stv&rh@MdAoNOr zP+$`z$`1yBOa J`x#DalARK$`@PME-cy;EEHP2OY=l+6ycsCat*0=3!!}|UAtE-c*^gW`g z`?srAb@C~#Wro?Uwk1y0x}mTVNO~;-c|ERGk!j*ppn P2I}3u9%$SdUE?J}ns;vU+*r>*8!CHvQ_F;ju{*^)T4<;F#UQrf8a%NDn?s`!Lw_ zkG1h3CQqdV^uu72lw??JdVa(Q$0jgk2sYh&ys&ARKU(uAiL+(m>IHc}7@ZAIrf~lx z90@)$;bwQ>X@!R$6Kl%X4}zmPJ}i;j9e8T<`OD!iKtKD!xDA;^Ksa(8ZoYAT%*D4T ziPeQqT8=x7|5 $_cYbnu=qWMVPxX*Vxu2(r0B9bzswfL*Rn1#;vCLuBL^S6D6cny)R|s z#j<~3N0+shwgDiZnLNrnu=aB6Ri!N_4LDe8Te{{+M=@I?PiN#=gGUt&EWrHSLq$U| z&CN5$0ZA_9q8%A=PIJ;na6>> ;?xgt%V9%p7VXPq^0$t&KL}OeIqOOeNVJrK*qW^GY+vha)9w z^I_{W^}pYo-{teK;Lbcsb>1If0uq?1R1VI@oViL#*-CXZa=uHYGB&~c;go8NnkKD_ zN;LevxcX%(&TvZA?#m6QRFP&BA&QbHoZ*zpx ro*+Wu?wHR`Gln;xTTS|hH=mtm z48PasG-LR^J}3G+-~4xi+kYW^$Cu)a{rfKM#rJ{vhUXD94iszl)5O4h!<5pVSN#%W)*ZGQhy+Wf1 z#}O`fg6P-XO5_q+*fQbgBQTrUdCz-!Mcm5G0pbLzI!BByFxBAqr;cpqbBws=ySffO z^cXR9v1UYndLZM8(*uqX`yTpWr-&RFq^8V%UR&NPvknm zA~D|L@1sW+fWa5}+kE+G#_jT96FJi3zI};C|48oQKKT}3zJ$$C2K4wp4uuhF+#MJ( zj-YTuCtscqQ7fc%X(+NL-+_(sp_A_tJIGMEp_4Cls;8uB^3~iBdN HUfuyX=;`k6`=NgTM(SpXqsA@u80mTA;$6dt zgxN!aVB|C^HW+!}hWHQ|Ib5QG)((M@Ey_F$jGTCZgAr?Fw_#-V1lP=0aqTjK&K*}K ziX;XMRS7PAGfJl7&&Cf2kM0hF@Z&cn+4!M!k00~jn`HX Xp2zaL&?;=yqEVdf3^XShUtruBr|7+Uam^6%n?znK<2y1zU45n;q|_+e;@CUj{i z7?uI!eE=hd!;c6fhQp5tABwzohTe_vBhv2KiZ2>->CD~25Ai({KaB4?!H-Dym;07K z41PoyG1NHcY8ZNL2ss>nXaE6{r8eW(T6-4R@O+@lnsz5%V?P)_K9$@5T-xv7@%Zsy zcT17_&5$Y8;%Fv*Ja@tH_#s-g10`XOE;4blFpi3C7k BB$Ti=ZM^eHD6$bTtxP1m!Fvd4oO7ELqOH02*nl?p%VWzx{38 z`nAg&lKvcog9Td&tn@cN{WZ{ph1!~J2> +VHBmLO* z-vael;3dz(9$6F665YqD_hF1tOP}Mzc0*Oz ZFRDMf zbZVDN2}h%27)jW4oAQQ%gnLyl;dWoYKyX(lASJYGyjA (8W z!(nH=sM!g2&hcr(VP~698xA|WeA>>iQyf*B9y^Z-;})EcG9d8_afY+KX2JJN>@>db z1UqdENc(57)5eWDhQrSGsE5O0=SOIJmBXpQ*g0tcJ1=_EW9RuB;b>7_&Pn2ACT8Av z?f_;AXxx6IyCWYx&(~Mj{daQtHI~%7SKUfJo__7nomwobDDqKjnd-~bB57ST>a(QX zq}!;YMfQNpZfIGi7ODJTt&>(u%S@X|H(eoI1Lx7Y$A3Lk>lpjp(YkssBg1Lk9G})j zRf8>-HlH?})^+)`;j}K&s-0 FPqOo5$ruM~^HGg-{N)dCZ(wKa%;3QC82-5vERL6d zG1THXRBB46`YjIs`hbtp#Q6UKe%hE5_-V#c`zxe;{or@R+A|mrY|+6c2e`QJ&y|Gw zdjMOGtEcXEc>q&yy4^U89pZPo*r)08753ulr=tRgh{K<1Iz$})RMR2ikW) =NCBcZELUBNsvBz>!PgK0ieqFfXDl50e-k!Q1jx3 YH%jVi|Gpv-l++4)Jx6;`DYCK!CI$qz50e0XgV_!#E#>7%*izTW#XtkLt4^JO$fI`hjyDX)sLpKb<6~*O)N!7+Hv*M zV9ya%2*ObFV?d$0$eV3`_$?sH4K+Xf_OS%d3uPQvKee~Tw^tNNZWwtY4HG{_k=L-w zX>kkAC*LkKOk5u@Ks?u}rI}*c2FQS7ERUN0uo@O=(Qq0TiT-dJrXh6uuXq@mf972R z8h)xkUYH jrE{?*NfJ|2+W5SHV}F59WAyR%hF;|D(`n^ku!;$66}{h zFK<#>yXmY%J)qTc#FJ^iZ!-O=xRo;#90F$3r#Ow+Oo)Hi`zB&Vdc`L`VpB${NM9pU zMvX+K%+B{sB8Am1#b6U=$kg7yVPa}WTUi#&@qZgJz{BX^WSA#{RY*?+yXV@mLoB>3 zvBg_HUGPzN#cXS3s{+Yw+H+Z%XlEd9ttTej%Y6W*|M07b6b`@o9&y`h)MTQjCd}|v z8+cqJm^h3$l7q)RTib8+;Bk*84`=deaK)#!jwmj`>Xk6#0d1wkao0LJc8J_DZ9j<9 zj|rhUdHcPl(3l5t!sNX@pDul? 50fTkx$g* bUeF _=G~n;_6QnoT*Iq}TXJ6ugWqfot~r}GkM lxedx1eX#jM4`i z{&sxjsK+|~wnxJY$B)|4eV~#b>={{I{CG8d66f@G$WSh-B{7H=)Mn_KisfDQyfpGo zzETWNO$6M9IopDqa107)_k2eDO&&L^VyK^@c=S-CD(e_qtK9&CO+4Q6-FMa8TgDU3 zSM!qF!)?#-F4EwK?Lqw-de*#wm$HxK&AFG%R1K|U(@)LIf4i!yPQKn(xc>{2Vtklx zOf_#1Q3@}6t~<=$3G!6B;j{X>>WtF9Tb12Duqdf5?D^{?_tN^m*0ObZz0s%Fd5A0# zGdEGvGkM^ZtGpmJhYQ;F-k=xz3eTtX%;e#TD!mj~e|RZ5FWBW{2-Q45_H|fL-7 -w7u@9{)@b?rtc{g* ^XIx z@A+~xfa!mG(=TmUyQHh$B5*52#tKBKALR526M2Rnt+v`|RqjA_wPVsZ&EU1{zPY)q zUvejHp&{P rBk}{qM6B)fnbK8bk zIVjci9PI4hYB|PrI%vFCv8j-kH8Y8c9W6yrRGx3ZVw=hOloub|g<%+YZuN~36J0vU zCnn@uvu@k;)%5cZO<>F(to_(cIrUSItQ}FhS#y$PObT-y?nWke9KLq!Y%INA^(1e5 z{mSQCj@#^ZGUw63%>-j3#NfzoRE6o{f1@pJ908S=03T+G>Cyc}LHvireTbU(S1r_uMl{n7XWZhFo5Ws*^7e zmrn8Rx{xn!iIAMy`D#j?(>s~JqWCokNUUyFHBUUW;X`k0_Y ddnr=`Lny}*fkONC&V<(^1Q@nlbT(9{r zqFq7BY}SVA@qFB>b6+*HO5*b#74Z!veK7(?1dUayMfZmPPnVdnkzNIj-yyO(*=rfP zC{Vh&^oapDX?>#tMH!7$LsC00RNs&jF6yur%I>XuwtIzWMHbrS()FpZ1wnSAhsRwa z#KTb!S*T}eqR8?vZ;p2!mS1>G*>EKWyVd(o|HVm%06YELX9W<;tR@4n?$fEL!k~AJ zlvMp|ifcXrGu>nK8eEf8z(Nep0E@hIW5q$S_XP<_q3CYI)en%UUgj=wNR^bNUT1*> z^Mwh7$d&-84nyn5)A2ERmefX6`i;#w##uM%Axz?t@1a%%DsL8w5XvkR;gMM=aXeZI zh^=tEpV9rS=M#%0k(cEZc@48d)ephK8vUd?` ~F5iMT(Be@bK4GMyK~vj=QgcHu~b 9 t#d{*n z0L~y1Axr Hvpn(nuUmRp?@MuH&*CTlgOsE{$WC2wEF zYnU1(h64Gf1M#er67&^Lc#>2B|CMG{jOQHm*}GMKQ~F0gn-Hr=Zdw #M)F&Ar03JZrB9YM^PBmRz1xs zY_HAWyT2k#>CgR{%0sKXCaS#We?-HbC`{fz4v$M;$UD1WWBGVgcTSvkibP)2c*(}{ z^4N?<5VsWR>aA*+5z7g_|2Zi1T-ZOV_|lb9em>)n_axfWJ%a40$1KTcE0P=(OfT2o zMLm8rBtumQeWk>f8d9TOC{Fp!Ii*iT8k_$93&13^u`@Y1Bh-vlc3*8dH-a92Y*MU; z&t_~4%Q|cMoDpB2gAAARIQxoNXrK4^3)hCCqa$A3t}1#q3$bP1@tsx8SDFdoFEuj2 z)4vZSN+_Xp?Ox @m@6C$jtVe1};YvVt+vultiM{#7=V zF7st1zLmtsp!L^(3tEwVg`JOjnOKL%^do4T{0}}MF^xZ}P}r@Xh?d``8; DYh3>OFo&NEsoW1{YPf*=b6bZ>bH>$Q{{{v~{yG&c1MIsjPWu>5T zyO@x?!EPB;rOx8}#8>k2&obJwxyyYNa<92zOYWqQsjg=~?Qhzr2-*j}0a@B^maZ~{ z$;w1Ie5zPHgTdxC@rNLDKLPJ>HOAT<(rhWlDKFnl0J#WMwVYp4)iPtM%*^UU&5Y8& zM&C;a%kI3mvZDUV@|?Qd()J#{<@cqcs+PKVxQ6!hyE-ge9|qI6lwy>9P6E=f9Yr}8 zLaUN9rdDm5Q3A=a(w8Yz6qaoau8I8@jTfh@MxGxxuz&S- oHv4N?iQh`+)+>+1}AOR_uTj#x~t5r=zFZkPw{=TjLJG_q5Eg* zu+Q3k9MxO?vqX(7z2C#3sPP{v|F_BCSNNHSC&gOEH@rJ4Xgq^2mSos_Y%6aroe-NA z1Wi9?-gX1cM^D&FxMnKV+tAid-Q}>(dBhKE)0;HO_ah(jt=0Xi^oj1j8f{mwUPOZ= z+WI-Q@Va06Any%=aLpa%zJE>!kd!0Es}_o5|59(a7J|m`SMiv=atqBzeIBPiZ(A;I zykCpo^)22 f}AHCH`h&(=rz5|mkxVAjiy#5&l;l6 zD9@M0&Eg)ZbN7+psP;4rhmi)^R{E8`-2E>Ax1kra7i`dA2%!Z3>UF;n6p0M4Nq#YX z@NcnM7&@C1Qn?4Kr1?j>;dFL(U*Q=D4l}5$mdVpi4MIH2O{w-c?WCsMab+Bb9Sluf zsDqR$eL#FK87d^daZEh6)=pfAe)f|#sRfN+`VaDHVhb8imUo!RZR0=oAd4f4$*tV7 z@id2e*R&ZSw+MD(ZE|C_Q$_V Pa8ae8&py{sbAvHCn=*)?+wR=FTzGJs~qG#2G)(>OVTzQ9K)z9C}V%0pd zW!VA7?Myr15C+8TfSVrB^zH0`LL$3Q;w#Tkd$k4?YL5tSIq%#BwMW#Py&ya)KU{0R z1?Lc$H8K?G0i+v8_Hcd3XY=2NTYcE~puM!GVgT0Mn0Sq$>wb1$^>xe|v4;i@3~zxC zN1S`XybHs!{Ge$aoVNN_;ejV>$};NPFk!D4YnjxP^RFfr={HWLkTvF)X13RY#tjmW zmaru3cxEK?PnC(vuN9fRx4LCcTx2czc%BLbjf)lUwF9Fr{o`6XpCRFGw2-X>vQs3K za*^FHS;gJeInPw3&P(tmEw|2%bjntb%4+)K^b=DcOm=EAzU6oS?S8gZ`e;?hE4lg< znQfu6+dynkZ&KgXUfFyF_G056+PpxklAHKW^ZgpR4eCeJ8>~%ib^wdgUz=dNjj1v7 zy~G_F-ZJ;xdGn5d&x~QPsvHZhcR@I+Gidt4uRXUzJn;3@sTtg!qJvMd>2M9LQ`U*{ z4kLjFyqzV1hmb8x0{5|U8J6ftxm2XJ#F5qyCxK-|cHjA;2H|}T&(GhZ{!_t;c)a2H zO}@z0{T=?Wof8)nW`ZWOT zyFIIK9m s;ge0{Av7BroT%|2jX22G!i!ZINdl+O^Z*f?W+jx$F;eIGPeHJmT2 zeG*CCNAO3OZE|G-^J;s)(AaLb$&y6KqP1V(HEZPJ%0!9RF3BI8XMpqT nr@~z0BZ87kr4xW&JO9Z*qBuF&jp)2B}_# zqFwSUsLaqVExEF_%QhBMQ`UbG45dqk3=0nQ60FX732u^i7zsY(t*lYrA%*a3sZe`> zFI&V?KX3X4*!sQLfEt*ip0+$}Dv75s-CYD@4%MV( _cMsRdvi3)*NyHzhtD&AV3u|NZ1-3;k(NG?Vt@G;gIKmV zxW(43R3In@&MeFpIgHa~(K7%(tyjfb9SnVI00>9uN{fI|`DAM--`AC&d xJ$$&!hZp+r79XBZ*g7u4@eJA2=TyAik~sRF zZJF8T51nU;J!E09TtrN_R_`Bph)(?J?hVmZn?B$WEnMbU(+2rsjX&;pV`Ql24w SRmKDRde9yP1_lZ_cuUweH&Q7Au^qsnp2`(~ye^lt1 zJnG;3nY?2sOuppREGGZmvSqBNp0kLI^;9YJvz}^Z&kHn lU)#$Q@jx7yuvmiWL zG;j4CI8uQP)`7bhJk%X`9e9x!hxd=eo>2#?4R!`CKi-5*Rmpp*TWVN-Y)g+Bo9Cwa zzYrf;nOc5~oBsiqA8Zqt{LY`5^Y@v_ZB?n$cVh{n&4e}vv?}>%Rq?|EtB~qsmn}pd zuIhM+g~%PzLPW7a{a6jV76X4*583DBe2P`bMH|pTEkQIJyA3Ms0;T`V1wF1j?98II z<3_8c`zUOF!#aIlGGhzY8Ok}-?+j&kJfugY()XO{L_nJ|eluM*dtc!(?NGy3gxL#` zO*`8NW}mNV{Umk)*duy6{onU#j~^gLf`v3XP?N |0C%L8VS zkuvl(5o+hkPH!0po!+YA>XzC>&CKE#++~7_b>oSfS+=9@gl=sPiYY1?Ref@@@|cXe zPYABgJw~!2AySQ14V(B3^^TzN4=T(jyh`@Ub8_-4MP#h4KX=Yh;kF5u;n75|d9&Z( zuf15j5fN=xuiJFWHl;Mk)yHtM4;ewzDXg +4n8PrC z_?Bd$3&AoRwGNcQw$z8U;*xwtQtfU7Iek!mGcZZFGi&OTbt5as9`{nZ3{TQ+S3v1z zc;bRM(H#S&>s-jM$a5;2Z!-gw<8Doz&2Bl)vPj_R7va%8ShE$GvyA9}kd6XJAA6QK zL&|vRI8ECP7s4fk)wH^#u12=2ExJgb8l__ ^iX*0Hs${4!6~ zp4%a5v@Z}FtJG!EYe*NgG~=31s_$mKwi071BNR4`28E?ZYgbs?PjjJe$87+mt{z%Z z9h>#9jMZp65h7CKBtCAz)p?#S!bqOuxV|?3ytFo+)A{ur(Qx+MIyOF_z5VDZowe(D z8TVJlrtdh2`zv9~ #C+ou7Xp4=8nl>B+M3@Ef&eoUQs+aod zLYZA+p(E`Ilh&yOe(VjOa@j=7vPD6Xw&KeEgWk !oS+(pQrpN z$Ks{7xzxNg@oQU~`L$Y+;{yDl7=+<*D;_aQ)JC5tq8skfCp^pC7s!xhu|hc`+3xaT z$!;X;#(OcqaY8ASn1w4QN-Fge{Z2`j4oIjvY7)9oxmo{7QYB{B`O vgN8Tb>W8+ABWU~m#Ax$P?9%4jy{^C(oIJ^JE4f2Xm#zaG z(mM{>&utw_3Ug}n(nlPab*(D68e|;q2Bx t)HdAEFfzm1w?Zq z5P%iUeDaEh`Bb^{AY*t;(XA5B$`wYz+i}HJ98sh8p+@aP&1Pbu<{q4&2!5#QEd(_1 zT`IwkyG*awxuHw@q+VPNouQXxnPS_0T0RF6`q`RJeYdeK(D4M7#(k>pcovx-+UhBq zBiaQ JRBjb#@;0%t!6oiGt6jqCFG(-A#yCh5GFW4sDneH2zkXCH*3uJKrKGS| z;g-DX)-tpW+eg;z6A4iI<_GtRb-!%MJ{#F*A!DMjOYs^;!U(3SMKD7`Bz6-bt%{Ju zRCP#9XS%$y1Ihb&rLqH(shP$rb vX&_wY+&{Vw-{;=^}NO+tM)*&Gw0qEJMK5u{WI(hm0}L-k-p6xOaP; zZl=d?*(26{-rr^5Ktgk?n$vPqS17An+Un(`4o_BfJfAx==XoAt`N7Ib8S5H)j@0(V z?L6C#;x|!i*m6u?;X$joeqQ!c(8%U2Gu?AlEz=U*3tF9ZVP*7O?x4F1E8|+hK`I-# zt-_7qxz$OROx+d1Pc|){p5Mr-?9K0qtZ&Y$zkF1zHqrAvu2fX2*~<%fW5p_$Cr%!v z2TgM|=`k|mnx u+ucGob?n;560r)i@Jly$ zFIMK{CT>&r6>eq}4M^d*Eb;0@Ia}X$g|i+u2)EQ&6^F;kKXWPRA}R`Hnxfy8Q>5k9 zQwrE(ni5BB#aAY$HzawLQzj-)o05 aVhghRqDh( zT`-;z)8Cl|GlErDa_OhD?z%8}ci6WfXuMT~WZaBNZe3fXDz`lw)c=w+ZU!Q%CV_O} zYPwK+j*eKH_Gct!k_ZBcH2sF$F=>VYTHo(LO0+^&ybRJh-A!tm4Xd$BIds@u}Me zwxIi2Mvz8o$6E5qf8<1Ir8n+(+SY-zWpy{TyINe0K~o{kM2&m)H!Y&J?te6p!0e>! z(& X*;Jufcm;$h zER42U*@vh4a4TWMU(sgxn@ ybe<|>jMWQF)napA@aR&z z0%{}BNqstZ(3CzesCmdTKQ41`T+?razvrYzx~&)N@x@_CVc!@;#tG>or@I-4!(c zAJv1{+OZ}qb+cvOMcY_16Es7eoAIhtl}D>mJ(z(V^fS$0WV1eaafT5?#Cf;@gOU9b zoPO;`3>X_^?uskIW3+GNQd6&;ihk>AwZAgK?5GD*diK-(Kw((*F)lJ_s8kj>Vox@~ zVAuT)s^}Eu`IH2nYVQK*a!f(<*i>#8GS9CD5oh=CbO-)0*`aM`-JRe%<^1p%S9HOT zRJU=7x{V!W{dL=dn7VKGHEamCJ*3B&)J#3y l~7NN&8Up3l_V@^F($~>XzQ{q z@uom9M^emizI(45P8%+UQ=^{?VL~8{ynZSkiEO*1fV56r8+IA+_|u>K;RHtKPDaNa z(P|fEw)XtQf}r8YU}`@j8t%W0S~Oq?d6=^` x0#kzaWql7N_r9 +S;-! zXf4$_vrr)sSW^3q>XwW0typ!-+?-jOgU_DXaz%nmKX)R Id0G`0{|)pB~g>X E zlpEbw6^LoexexF=F|GC&-Di>~vIFa?QJLnuh9aO%)Tl-OgpOaDmM@0lm$vB_&EM%m zP?wAyqrCKwMrSR}0ql0+N%murk(Lf -<<_MJ&$J{3Rjd65sx(!iKJ@@xt>Di_ zHFV=pmJNemUX{wd!!WUDbZhl7a})D}#^cB`vt@Fks)a{ZBbx2{=8NgKo3m!sn=e-_ zZl5P8IAM-vKB)u#S@L%|f4TgoVg($gpUh^#h5s7o&zDP>?fO@D!%w1`q@}s)h3RFn zmg#DT2}PJDt}Bzx)FhS%tGJFtiPsg|CJKl}VF(yExRj2|taw2?GiiGz%*yL{=U|J$ zoUPfcm@(^!QT47FzmUrqWLs!EONj|vL+qJ;LJ9K7h2dzOm!6`}#U}0Ui9ZDe7!83t zUYHv0#Y Q!c!e1Gl^OE;+hlKiUV zy;T$c653<#Ws=<4^K2mJw7^c0qI}^Y359Pie&)Cj=LcE5hLKm>1NppH~??wte0V zJ&<`dS{vC3vPCtgS2N!AaB5yfaNDL}b$c~vc!-+{wM>w9Rez^<>ZvU(!A@?eo&xq= zktm4O27j>K8&%<+0Dh3ZF=G+7PDa 9V_~wSnVm;M+B-_(#zx4%$^S!6g>O~#XUZ$pN;@*1J6__ebr17|$y1qm zP8>zOl0ns5j7z wJ*96A zbg`AY`x*3XX99 `LVX>nq{LVX5!_>EX!-@B5 zik#g%x}do_uR!~cW@7D~dz|0DtUNBx=%BIMDLAg6I(fx$C1C^bON}`_Ck&7`uNCb7 zOayUO`h;Nb$|+HCP6aEcn4M8`GTRCznl 5ThYwU31%m!RiN%?L$}{H2#pm?jFHJJt%+oD RBo zlxw?q-G3)E+_i_SC(oFR7M~JAv+Op>vbMs6L)9MTWV%b%HReK50P(`y1l-g_%8*N# zV9O6#EU?FV JUx{U5!C6s%by2MDYu(z> z4grG_eVCzeUxZpOGDyB^j|4t?5pBRhHD1lUSFS&3+<6I1fR|5AUh$?aSus)Be!F7} zPj^6v)f_a6Ayui9$nB49Qe!4OcpxL~BtRqIrnU)7q2Sk58;0^rV6E==Tb{tBYF6>g z%@W$R5i%^VYtUlN)6{gHjB!nd;6d3_LDLMv+H=$n;Oz@kY~a~Ab^yg>+X4Kw(%=O% z&}_T5{)pfjTGWPqL$>^W(&knodr?w?ri`{NXUt62P@g#6S9s4du;VwX4%D7tH%-s} zWhUpFz9+OeLnU_AV1fp%0c|uElRIkF4`9>rs-{5Iq>i1~I?)~FrVGFCWr|~I{Uq9= zRadD-DGl0f!Hps)KBs)Kv+IJUJqvVBy)u!*z*H{2EinRj@zTUdIm;5cavBqPIHn%K z>e~{!bkqF^IxZW;rWZC2B)qnnKkiaBpZ7 kZ;YcfX6rAMJk|I-Q=AW8M=%yL! uoX#2fS@`wstn80}TRTW6r$!&*c8pjS+f*xSqjTE> z(1D$?xpw@3J#tsiQ3DgMt*=UghQrPs0My4is}|i^PtUDz!`pqek8gWG3+{5}%gw>+ z&Ea<*m|D$)R7qk_1AKEH3L0OWMD+>IyLLtRp>B+ 92GKCXrD$carB0l zpy^4d+ZiRdas-|(%%Y@a7ugdPWPjnVOv1lPcK6tyZ<{-xt$FcS`UedIB%DbmFY39) zCXg*f>{W~zKeMHFOnhg=9VFrwX0`Upw|3r_=Pn_8RaW+OWWOErJr*u{ui#K-$ZKvP z;9_n)<;?F*ee}-rCs(m_NljQ-sFi!VYFigaihG^AUfGk~#T~)wj*j$*bK5VcnvV3| z-`PI5_-(`>Se-ka)5Xazq51evk^dE8Qp3i7&{$vBn|WdKkxPFcHoP zTdNlJIkrC7&(=RhY=x%@h#OG1d9C)gu;&N(TbX?OLot|U#o(&sW0&6WehhBgcjpW~ zau9?6Wq?@YFRwx}e*daxOT_OlSalzq-#2Z_WZ=YI@cZMn@cWvq?605Wg|=$Zj$QG4 z &FA#YA3?OjHRRa)sI++aJwTIErUb1-n&S39Q zwXi6wg>ByeWmavNHW$RWzhGkQ;z_B|^{L#>j`Zm7bj~fhJ6LtM=egZ;DBYag&@*~o z>n$Khtp43S7wlKRp`>})Xdyw*Co+V5b?yneBB8qxo|)8JiPJ8k6Srk$|18;^xjHaY{CfMrvGh4wxBAKINHS%xsfc&M?W~Eu8k#sWtBL#1 zj?n#m@xD3u|AO~>)9lXFV|VcWfw3P>A4)f5j@*CF+4;!*_l2-^L{|2NWH)Ox74}W+ zSTO>lDrma#E$q9s{CS_%ZN=hK-O6^EExom}wUa@1>Pj%OYuUJLywBNv6KOg!VX9Nt zTYejTu4tq$TyH&)d4r|+mP+KXuv?K+?JdN4t=M3rvB4}$&!Nb_Y;rq{cmc)fxPXoo zXVvoN*F7KlGo3J%Ou1Q^wvfr5rC2?OF@iC3D*bOHFzDUF}Q1m<~{Otwm*Wt)qx- zFd*qZ+e)7;jj%`At|J?>s?}JxPei%B!GuP7j);5%{orBc!ne d+$%s)Jsn@uPFUp94eoh)7^vTPqtR`F9zk+ zIj6O1&xps)kS(pg^1WLimmySq`o_O$0TnIhhre$ElR~ZP$Yv|JRNjBxICNbF+74M) zNoG|nbCbZRq xVzLF45X!zSG!KhW;MCJqNpUCtxE`>VFE z#_E?7YcZpxlGRml`s7q@Z~yv@BfyV`shRm&EnB9B_U&QAm1^hSx@Xw7sO9aeJjl^k zc)$`~v%@8FE{dg_o|q8p{^>m&-Ewrg#Gk#p_YUZ?pl-)k;(o#0+Y z&CT_vO zPh}EbnT_i^P +>&*z19~Ly}e;WQ4X)tM)qbV-wc{~w=z=zFKs0) zJr9}czKEELn{()R&@@szNu&5vUjN>R;F@p0LuR)8qzb!uVcq^}PZBg1PxllGRoDY} z_F7$bR9~?-Ih`qv(OF#**L(e}v$`7|6R#h-*4-AgR9zq ldR zZDXqC7&a&Ey@Jy@q+Q6vk)!M;@I~L#C^03>mj_tTn_QUBV-)Tlr5Yj%j)VdXr>f+` z;Tp2UR!Nf(Ky{L>Rvpu5!ql0mp0aW!GiS2u !%dlcd`)_{kqA?tL|B_Df@W376PZkFv?4j2D%EYgk7!+ISocXheT5qlTAOSN zwd7202v+A^ei$1A$?5T+Aa4%dVDIU=@{w1GpNVFqJsa9rm~sX6To*4`D!0;{t&G>4 zboQTZPAbp$dC!g-Ie=_-G6u}#P3OD2Rml_cD>j~3Fq+rZlvgyLxc7|atM AP? ztJ0T!=D5pT`w(qW3siU56;iHmJX2B;tbRD`cs9;?cX&H>^UIOx{hCPHoZM_cM)>V; z)MMeOZ4B$)2gVuJ@&deXeL`MF9)(7tr4S)56`(B=H;w179`iPa?IV*#H)lX!GfYeH z>(_s4DY8oAKEassMgIcV(-{Mkw^d)GcxueQBnT(h_t-ngO=N?n7pQGGiMH3I22F?P z+~;uqtSca6U*X88%Dyj2gx6Omr-E+miH|9!a-M)!1S1z|m?_c!9Cm=sV_j5X^BBZx zUfbfs>J?J&5Cf098;r-@bHdYq^T|D~#`yL>z&7}~7B4nZZ)^O4&m0izE=S(ny`p9Q zBJB-M-&47V$uLt+tuG>;3mNrOn)t5)ide1XO_XNqWzuZU6&{k7{^k0EVvFAC+rb+f z?7 zfD6tG7HrS&Pi(m&QPWrWI6Z}TE<;uFY3YCa0KzpM#0w@3+cYx5Hk-@9HaF}PbTsaC z7~DF;*x_%@5#w$j;o;rrB&iQ^u2L{9|MklR5gr9G$n1Ve5&nMDsYLl?I$d`arW2xK zsj?R>7dE=^Oy=8cMKCsVaH~_(ba6C?uFi<*P8jbLc|;p1yl>(2RKyLjm+L0AR+qiE zpn4!rxM+i(-B7-H6_}8 8Q6_|k?yv5;}?O}0;Zo@HjqL+2am4F-FkpwZ*&5|@p zh$@1;Pb?p*dBivfG1-cX&lSPdUn|ky)8qPkYJvXlp&LPBs$F?98^{Yh=1^bZDb_0X zCt@W{ZAE&lv6vG)1dbTH5QMAuSH#Vzx)u2fZ8=^y&gLUx)1SJRk=*M~GH2X+%nadK zmNgp;)Kr_Yq57uszkAeKf%cFnR^Yqi56~-LqU0q?=3vw#g-q=A>BrV#_(bp!a)fLm z%5qd9s(rOitUOTYNhlARwm??@@g}3AOj@+-%9_r*rNLU$N=?JmlEmIVy-1uPypN?X zP3&v#>`yXnBo;5VA!=S~T1TjqL{|9act7jBC3uf=-T?1p=N*f8it~<<2$(W(Ce-mF zxAZXKv=2fsiK>Pjug2w>PmwRUBIn@!qP$1|)Dt?*CCmp|BFwTStUIy_vu?nCm0f>^k02# z)jqY$mp;{p*N|Smn9E2$yv2wA)rZ@B_)9)qPiqw`a)Q;%5~mY256PKLmhN|m*PARE z8r{LrP`aU7YIiZJF`;!CL+r3!4%ngV7-EMT>e>4+gyZIMc}0)S)v(Jc=*%f)r(>mY z$jdePi3gg*C;gJIL|meb1|Vl+B_D)y1;s4qQ%9Vyo cXM!4m?IFCD>-`}$b%;%nrpTpY|;oJdqG-gEKCB~9W(<>LJ-7Jo_kuFlm~ z(wE7nz#a;GRe_e{@l7LZi=O0FnHjo};-#YT8M UEQinEVbXT*+|gtrh}Dd(;PNrMv`1Jt2*!?0xl7r%t1N zSlv{3EMe&iP9?51yLp)@bn_C^XZ1olQ%P7lqsqis72c1qIwc)~wi^;3$3xp<7|HtT zf+&+pg@mPI1SKnkq+zN|Dy7P#V#+NkQCKR*Js}Am+kb+4)-UCF1tfU&R!#v4-T<$F z1n*e90usF1H58EaFL$U^da6y%8ns}^LW_2nm+;X(aX$WO=I63K)QEN|G+8Bhgrv`+ zRpO|cOrZ%&P!%?XCM*$#3h6Thor6~}rIOMBg3@d{DNP|H;3D5_yh1JIt4B@ xa1TYcliBRD70%- df z*N13dg`7#muf|2h#iB?drJSavGL1wejF&3Y$V+4s bh!)t#)ZD?Lf5;{WiIqv7g|V2ZT<&AwfQ1#NETY<5-#~P=|zoZ zerTBDgxA%RnSIJj8FKA;KQfE5n}}mN*CanL8IGt-*5vZlkbI)lE#9&etX^V0B6Xbn z>J9$=7B8``G>7BysT nrm%`)Z7mPweIV8+Kf#wX8!b%b0@QA0smN+a5XQ_b0q3|?CI}8d>r$NJ? za5k-!H-~59lr)E5#tE9kui%Vr4!?>sra3%ImAKQ1@N2qv1;&JPRGY(>@EeMppA5OC z%oD8igTsjVcnwp+8pS$132WtdSQ1_$zu`!@kcQ4_4lh%T;Yavg2sG>nFDGqwb9jZ) zBnr*pm7>StMR=9OX8t5N!Y;(E8~rXs4H0&ZJn$6O07}%3O^ 8DI4$@AM?GYN@H2ALxq27hg4T8Jcq&357Dj5OD}$uc0rk3 zSGiVSm?MLp1G7~zMK#@7(Nx~QT61pBQ>~iRw7b&ZoY{JygvzEXw{igjt +0PtoRsUrX!?+SJw|gWDoPMCjZ{MA({7heL|g=45}QeRP3HZ3K%umNR;{cD?7! zx^f_{ukh;&yngR7)Ah^n)p$V{#0ym~lvecv D4wXic%uB;*;IMA6--#?hsu8t z@z5jg8-0XTUpxF$dd;51Q=g^<)z@aO+r3izbCj<7&7~e(m5*!uDIZfj^-Dlhf3Fl@ z^~YU$f!ZZqa-#H@=px;{9t`ys-K0xoEL~yskMU8s1gKS5W1;X0;$`@|)uMl5kNPwY zqDM-h{5B4}u*YOZ^k^JNFY@Ucmw 70aUgx6PoIyg{%Ral|8 c6r-;*0>+)6+WyDc@ |TYgIa7F>MyZ4&Vxvl8E5y zXMM)6KKm#Zu20G<3rtLv1@;#ru huG$BzYSxW!=W9+o}IYlc_;l$cm Za$yg9=VOvgn*Xs;&sB;Fak|5`y2j;1ln)3z@wW&977~Jp%4oR=U zVO%b1Xf9j1xSHLZ{A1b^wu%gI#R2qNKe|=y4_HOIm}9G0`8682k~f1Vsd-%Wu$`<1 zB)66Uy s#BfL%_c}Z zritQdJ;FzcG$oM@7-%_ah>;vMD+Rh*ajkDZk_UPDF>b%S{N ? WnxP}AlT*K+L$s!;3JM6Tlfpp4 zQx&G_dcs!q?kpv1ocJ@jI**&Jji7R37B8`7G#%0MnSR*Zh`PE>Fy2 gyHGq+X@yhMUIlK%$F*$#{%a?@#?t z$qMy9!^xoj7pj18M1A8QBsW@-(q}_-GH7ZPFO4c67Eh$3v&?l|3yPq~@;S=PR8jt7 zKLyh(b*6bq!c!wA(z=Ke^oa^lBdR1bjtE?(LxdVN4N|LkqQR25S-Y-&IN}<_ I*S+iWsE-Ivnox6s~(W-akyYV7kD7r_v9ccmR=wcV(s>;?r&>jq*}H9z%B< zY@*ZXRc9rLVxH(H>?9jm7Z+SdoF}4E9kH05O25%P1gSb1*3>WmEd2WE+0HpW zeLgO9TOU;>{q>pLNTD~z1?si+Jt8}vT+A%JIL&SwOu6FfvvwzbVReLD2;zp JITKe15ea+P`qZ%g&wjCa$~ssD*sbA^pz_o}9}4W0 WzXGg~IkZ21C(-{EdB z#(?Aqw*c4P?qs|7p*Ev~#)rvI#! c{Lssp0bpHUN2Pz8=uB5}Myg!ZeedwZ(71Vdjk$hLp*Oc4vTCM82gEaE~ zo68&37&N|#z`HVM*IqbK=6sd;GihrW5ekm^h84W0_6rp)<7l9^?&8wBAoYqwZo{^D zrJF}R7W`yAcf86i8?V_pb1yjbfRy?3_{7<@N1lE0Ii(L!2+lUVezv~wrh^n7%3h~N zs#BA;^Q4n(39WuaVka)wYS56ijDENFNvb%u<%JGY?L)TQH;+*y{n)7oa0Fu4Qyb0D zYKhe^EaJ_bcZ>Lz>zZjsd#4gF>A&GYDz84BXF=O-Nad9lf>BEK>Ml5d;aPB?S{#~S z8~J>K1sZ^2uI9PhR_QnYpq7}tKpI&^*Wq&W0iQ5Q_Luzi`1Mn*!X|ItlU80}@gTV{ zg_}a@=SCkO4J*8SrPH(q=T2(D4O=*-%G8=`Z=t8%%O^WFN_LR?+`50Qu*<<(?r2QM z-+M5^e-Cfjpqr(eD;7;l9C_h4zRgJL`%%ZfcaM@8%L7SvW4RAL%Xa>S-v}B<5Yli7 zjjK7FG#D0k`fe%CAb8D@G^qdm;7cxbSZte_`f7q#MLyP3DE!l~tISMpu3j6KvT2>{ zYUujdEygkq#(7^sP}!-c )Ip&N66-<~Yyv?hIw&eCR#e;&D=OARa3z{V z6UR}sShYoqb*WmbSQU|~B<#3?D|G|+XB-#Y05|6U{+#>Fk^mO#_x1bF3v!>kpL_1P z=bn4+z2~NDQvp W1mJ