From bbe54dc3e3e30c6e7fbae3cb99909b4740176fc5 Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Wed, 8 May 2024 07:55:42 -0500 Subject: [PATCH] Added background noise. Refactor customEnvironment.ts --- public/assets/sounds/noise.mp3 | Bin 0 -> 60879 bytes public/sw.js | 2 +- src/diagram/diagramManager.ts | 29 ++++++--------- src/util/customEnvironment.ts | 65 +++++++++++---------------------- src/vrApp.ts | 45 ++++++++++++----------- 5 files changed, 57 insertions(+), 84 deletions(-) create mode 100644 public/assets/sounds/noise.mp3 diff --git a/public/assets/sounds/noise.mp3 b/public/assets/sounds/noise.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8d7e860fe31253eb45d789d102c6458a6277ad55 GIT binary patch literal 60879 zcmdpdS5Q;^7i|au5_<0?K+j5Ct(8zxm(i`+m<%CJ!f>oLSj>uf5jZKk`|o7vTSKIr!c5z4!>z#j6(pID8AB z0@E@uvvP3p3P44~B&1~I;YzA%nmP!5Bcz%6H7ncejxKH}FCV|an;~Hlkx{W296l*I zEi*eWzwp7M((;O`+J?rKXYCzb-Ms_DqZ4nYX66=`-+x@+*xoz%^8M)K_aE}bZwZ>~ zS{N$HE5PBP;{W@EDo_~czyd(g@b5Vyly7GJ-y8qmzLU=;Fa973BY^!O2mlse<$YWN zpx_xybNgL~GiA=-JyHD%fbseMRr{`h32E06io#NILmPjG#0bR*F%7J)dghY9nhV`0 zGm(F(g<$AGYwwqr-~e_Iy)rXM!B#;ZDIQa{u>HT_!(a7WL(5k6^ z?rf3_Wd_hNV{2fjB)OJiiq-qc6nNzG@VRFj31G`Rt9{A(IbmM1_1#oB1`hRy$F@PT z4QL7~cHJ+PvztRvZBDni;&O!*oL)O|AEHSD)RQB9<(h=}8E?g3LK=4?cD)_mo4DL$ z#P>a}7LYY9;>~axYTe>lQ@SFA6W-76*ykaiIFrezFRS0!J$dT$+2PaC&xnjK0=LMQ z=Dq|J-i!Xs`@zBY?aS^%^7a+-#r62t=I;PG+s`U@pPq4VcK?xGwUiP0dy?i;J02KV zauFnqFnZ`D|L4OJ4Ix`uMwb-mnq=Q*!hDca_{>)3JA;+T;)%V_ZgkU0P3<+J{;DaH zUsx+w0%Nsry6tVEs+N{&klwQ0z6U?{?quFDOY83cMGgr*lo+nK}>^!ErHrL5Y05=ZvVa?$2`|Jjf zB?avL`=M@X$l^@d(}@$b{QRe%&qv<1@brAD$6mfqKKpxm{tgt0zU$*Bo(-d6U=4Bc zDM69+64KSPct>BV)rcul!(&{H^%_gSHeRw8K=(9=hKaWb`J%?X!T^8BIFhw`Xs;sn z-L?P}re2p^<4FU(VsZW z>fUe*yk6a4JYCWhXmAkcSxfV#k!T@Okq3V9}ujn++ADN?@X zjrT9KF9_=i`rpIF{O}jH6k?7G;+>{);`dWP^fYC*jphxG+uH5inkqRkx+=YkVbeFt zF6!L-GyPIVD7yPBsJ^L(CzWQ#>LrOY4=8xR#aY|(s8t433Z-F9(i^4G4)!!J1#qq0 zrSlMAS#QWxoP4MDxjXp&bfc>2v)f+jM$?i;-jN55Xu%TpRPq_dYXJaMpmYA6U?ORP z;=3d#MFDOM4cdaCN~x$0yL`C$V_aDVEuN|OF7zO9N*h#h8MJY4FC*nm2sAiG_N>qe zFT9xbnte^jQR&T!v;!|D-?Q$UW>?WN+wW_=nw2pf8{EToaj$H4oLntrSH3+T7us3} zQ?6MmzJ3%kmyce>P|)IcHzoS!3Nq#g=#_k(L|kHzoD=rN=Zh-K>58e`KfmVFAeDa~ z{bMS1yhZp5`9K-~Nh#yaTIC%wvL62&u#s7>G>{mNLa?S&kHrPpIAGbEwo;QJ@!RRG z=zc#6MY)|n87%<`FKQ=2q0~DScgT$z9IWLu^PqSS%qwPyBzLDc(#BPS>-w!f%dpj^ z)DLh`8cJEZR2@DmU1kYS90RZP_h5BPdhaY$vi!**dFG6nhI|&{^$h?-&@SCgWkze` zG__$K+7P5dz!uC~m@27GxhHLc{w-~C@G(^Mswg7`ry@*TjYpTVU-3p{{yt2v$#)@< zowDoOGp*fHJ_b4c%v^{#6QN)QsyqlD9Ds2PDLwUkruhmKY47bRU6ac#yBe#u5W_OV z83=1+7F?auf1NWqK4_56%c2%p(VC1)a!zz#Y~ya&`_Y<`NT)cTWXl@_{C@jS7(Lg|Dn*$W)=!?b&rk;YO_#V^KM^5@D3kiur$jk_JRZ;7uwEYXZzo zGx~(ah)S^yW!L0bQny?lzh3c|Eba38vrX6=_7)NZ`heIw08VEWqbrKsA>ypO8|v}< z&!dztJw4U!ym|BeV^`U%gma;%6n)6K%<`j+zv+!gs(v|b$cyE1pe3jyy+5+b(pP9;a z)0RqDml^^NfKGWRtxs6x(Z%(Z_SlKPt&gVx*ne^K{OI=g@p4(wkeCcIqV-dbW{Drn}%-*h1_?E?+7gDT>Iv*bUJT7^ zoFF*Y;?_0^z4{Y$7$ZTV_jt=g*Ky1r)3e6C>hRm_y@G3EAHH~M>G4nTFOwe!8%kxJ z7^8#o+GqTsTDO-Z_i*lwoK2Fs5iGowEO6OoYIY3?!F^FTHy&?JVMx-5V2I-ee+y?8 zs(ll*9-oYmH9VQRIsic&+Mme6-ygW`TU5kZiP->rvqmw7sOq!hojQd-5!q~Fp-MrQ z?M?4}_X}dFc$bH5eVOJaZBGGde`svc_NDymbi;`-1JkmrpTw3oIrw?3+xdON>G#e- z75hk#pJ{-(IHYeiGN=V4!IBDb6xZjliBG6xx|bCYq}ayx=DliWN1=mblD9|_YdQx9 zFWPcfG+hIe^H~8b<`f>Q)96!~U@vxi-WkP@IQ=TkKtVop_d3G>MIei)T~v||O7jX# z#0ET}DuQ3%L4)TkaM#nRqB%kIL*erYrZP0PR~-@jKAY3+I{Br53|q zKWk%*E=K8QZ>Cvq0`5G4bhMq@QTrs`xsxH6MFMj2!Y&DOl*v9MUD4NT0y1!irB~K} z4^!a1H~ugaG3D78YDbNyClQIizm*x*t<@j3-b!*)eR40JOzvWEEpp7=Xo3;xC9mk% zT6?)-{w(GQe`8ZGIJqGvXCLzvb!j=32SPg+&%*G)EO@Sa=E<#FK_^odwP7XRO7eAj zT2T~hTf$F1Iv?HyKmdy1IIY&<5#VeagH*$+uBBT1H1r>w*p;L!kfSPmNPcS$Uubv2VJt{@8PznR*}xWSz~d z1=TTcFSXC%){^GrW~7*IHLp4>`@*7a5#0VJc+o;%#^Sqxkp3k28~wr8?3E96ym!TOdD24R-+@=kLwl>jLdt+PV%qwZ?y zIvm^K$=oPk5LCT}?V9nLn%x_=l&1bDSZmHV;Yb~t7S_JwXc;YL(;#o=|{sPzum68o~opEtLt zmIl|IkCMrz_?OQ`OC`mq;>DDVWz%x0Q_Oo0{-x?443Lu60d)Yk)Ws&RXo>4Xz)HcN znxH6ZDw)4>8%)hzAjKpzQ943GZ&P<#!ekb^OKn`p_K;a!e>v!@ z0dU+ehO*ukY}~d0LO_Jo-)d}0rCe-**{MLYGfl@|?~Szdm*)ENv)JZg zv3exUpmF^-WK8lXLy{xwq)yq4vor^5qSEodRNV#uy=a$q2@28%YkY20;#81U1=Mz- zw5~vW?K!5=K>QHv2+_V>|2O`_U9`%(#We#%yD}cT4-MU?0qp#^@IvR^6PKc16gYJ; z-I>)Q-g9I(1Wo^gP4^{%adK11Vt9{Z7>*-h&p3UK_ zvcoUR;CtW05k5L%^V-=xarqy z;tF_*)54QL#x^(ydLe>kmvCo3GK=D>x#Yi8{RIGC;dVq}`MIxPmd@n}l;Ey%-;26P z0iZh2`kGq&)z-agf7WI6=+$klk*ZS%hpv5u3>4eHfiE((YCSrSb*TO8Yf7C|NQex6 zHfKbA0v50hk@u=HcX2l!6A5bcN|k%F$KIsIK<6?beJ=Af{!2K#0fZK)xYNuMK zSAU1A>1SzQDO<4h{g;nQeL(i{HrAsy2rV9@Dr2Dov0YA-Ry@B^16;P{#P1-TU1sTJ zX{(o$T^o8jre2xMOR!jymYFYTDl`N5O!i&cUmCBrEO1jv@3y1EjU^SOL*W9^lzknn zxrDW~D!zIzM>e;G_JF}k#=F0(eODT)+J02+1+qh~_#9Z7vs;Lz2Zz09_Gc8{P(^!8 zUjEtQnKm#5{cFVj=@=Y@RI1lA36)!J`yZ=HGcEl-fVb-iI~~HMP~c+c;4N@S$@vAV z4y2MY7Vi#C3%Gw1X2~w?B;~rFCe-x^JRcqSHq6djNh@h1*pT8MTK6gMB?p(8Z_{}* z;GF2Ze3f+i#GIk4SJ_OIqfFDm)ic+yHix|dzDl|^ZSk5vTM+&&9wt)ePADVTN{0W|qT21MVQ2NE+aT53z2m0#Q?m&} zl6{lKc721rO|%qx-kb_XbQB_^(qrT=PyRMlEbZjXmar%aP&E$ua*J{^r{j=;k?e-; z(^)gszN|l19x)-qwR;G@E)mI~v47FC0|1({t^6i%FBl4IGQo^QA>hZpi6l=HHCU$g z2Lwj&F_D`otnqm)>9oLcQ}@v~v)al-o99poh@rSu+CUHdDhuuhf4Jvcb~E!s*$wwh z)IccrS1laBBp-}J;3Z0!=w}+zxiVemZtlOLCcZ8wMn2TJ)c~E4rdRiJe{F-f`6zDI zUF!DS*idat+$fj%B}d7hprMB|A~<(8m9LhpO-B=Jh#@^D#43Sn_67}eCR!|z?q!SK z6R;dbh0{;kfRi>CY4>p_YdjnQpd1*<5e`|+QPIn9czo%VKPm*vpyAuE-)rDh^!Yu{ zW$nwir6}mZ+MJ3Vw?HGp-nol4^F_3!DS@^UgIC_Imr40HayAgzX(R!R8%mUYQ&@Ba zG~5f?YbDAg>~XU0OGhihLC3}X54bG=(16VmwaYVtpr~0<5aj`nID03Oyirt%HAlHg z%*kx5AcBe?($@X=9Ij4|zwXR|BUKbxRx7u2xTZ`Sc3oO0uS`NA^?#$42rX>q%1Ppo1sH2tk+o*Taij`6-Fvab+P6alc(zb5pw zUl&@KSk;uDtqYyJTZ^p1lo1B6O*)}vR~=_g=!6^|Nk6?O1gUS02#OF|{>U>;jlbh- zXmsGmO803t*-_e@j)~Sni(1LHYlQQ7bVvk7F+;V3!uF2D^dO+8E>r=dvfMS@OKUzE zo`chTr?H`K^&Zh@-;Fjx%V_2)IxHjE5#OdgdUBWDGSwRQ?_5rn4mnlRk?+x#_ zlvHn%8&o=8kFOvXr>+0^y}GG(U#E*@{5~d;x(t@ z+3JT#-G|O!-j75RHWuf=Uk@gRvgU|lAQ64UN)21S0RYt!EbPZ7>SrN%3GiEAKaIkj zIo6zpA&uRKNqOf+kK5#TBP^SUK~(pB`U@X!X-?98EaW?W3x~ zqsq$7CK(^3(SA{kdpfgtw$xjtsi;(H*ObMU@80^Lu3ox?Man@|jcp!c66m42s3ShM z*`re?WzpLN&i3$+$5rC`^e8Z3=g_#Dmh3PQ!Ed2nVgVV^+0QWWWk0N(8x!DDFJ&uxqwpO;Q$)wH_hxy^MowXC~0YYm9D8_gH2oMGsEKXUKOv zBUR6>2n})_y^OmP#cVpXtRhntjRmk}P$wC+0a6WtBt|~C#Ud&!@|d<%x$0U1WiFwd zP<8hQUTOVZiLw2_w6txlo}z388@Rx{O2U0Agp^VM7%k8cR`uV^|&nHZkE3>06$ zR9b)o3#ixp&W?pT+CMy+uS`5u6<#z zaCB#Bpq(3bo~TZW<+LGzQcN(l=*9V zDQrG&@VuoqCJM69YI~F&1X#Q70_ZHDvRi!A6d@!{e*yUYso~hy-5yv!O%u5jOBx!{ zQp>(w)t*$!5_~qyYi-?-jz?QGU#q8GoPj2-@i&VP{_4^b^&Kl-Tk~%rd$GeaW6fH( zbLTFpK9H_raa?zG^v*X}pw9&b%NsZ;1rEd)>md-|ye}(LgRua3l}l)5Uk?SQPQ#Wc z38v^7{ue#F7p%%~-IE>(*XyfU@#+@99%SqYa%HDI8in<<=-v@=N(w0HWa10R2hb*d%YR{+!40QMiA#oHKsyF7RL-y#tb==96d$qnL>s-_u*H`7HXL)?=5BUD((MCU=?qD;8vlvOBxm*+_KvoF_ z$}Qf--h$VS+pC~1QuK*KVkBLlxS@6GzU5ae%OU^E0{>&1&RseimzByYpTnIOdC}0-Ou(l_#SYKq2$>7M0Kxjd=q_x78#hIER29R}#9-Co#q46UN^fbpy zi_} z4mj7|ve-f#FW1$-u{I0*;>>ftq;tv^rtkHk>DD|{cYZe&l4!}QUal41tYS`T??+pe zJ$Yp(%_+#m>NHPO?Pt<5*#hn&%U}Bhm?5=ZdsFxjim_`-fP#+BUGk|t#|IUWpPh)Q zp*Nti=}9VkSQ25l+^k#`lY7@56S80-j-8xzAiCK0HttD07h&>!T;N&8vSlXlB7(t? z#1_FqCQrlW-b)iy34jPC=|XTNsw&q^&EbAVAs<4kD-@Ze-k)?+3{}ei_EQ%7k8`G_ z>!v$LBZ5q6=o58+_qLFGNb~1e^&Z6M+94z>V}9tai(< z{-x?)z(tL7^pipY3_VPX;eGZH^IJh1#6b7&i~-6=sl1-JY2UU83qqC z?kY1h%;up2dVe|5`Mn{THCQ^Zd(68qluRz8dau&-avD%)52XAoBqpn78j_sCEN}kC zB3>#%48OIhO_5}*lA$%@i#PlXfw@)yB@IG?c4_&&4j6muRg%#*i@P^Jf6RouJnwuR zk=CdUk}Bd?s00aD=~_0|reB|3US9z6I3#T=UF%wE-t;)Ob{v3EO%w{Fxvd;pcN$)0^ejJf+X^1(dlZ@gd z9$acQ*XiL`jiiRb-aAew+t}3y72H)6N#^eP$}=PDVJ-Jke(GD4wdid{YyWqc5CAph zsI4Czg=9a7+Tfs}R|KLOP{+8YL|^5I>q%0ET9l$b`NgnMjwJ~+p_|%Ux~vDBpOYi@ z{FmaMcxJR#%~`vX%oXDjUjKU8I^e6fTY32!_sGjqb_JwP$~iqRw*QSnGy6q5@?XTM zv0WIM+>wT$aRF|R05J601*@X4K!*MBqg0qiaXe(u(StuiUhMD0@~JfAvsrY#jn!%- z9|0N}MyI5Qs_V_DX3BO+MzZm8WJ!NIq<{|44wIr%3vc`C`GA9vTa7?=rc`!dS;s2C{32Kdr>P%t zsNswF8rPHP&G@B0o)l<5Ro%aGE>d@tSCws%4SFceHS8{K>Yyh^#9R%Jh7?igG=6oT z)`J;Q>aB8hMIrQJ_IKOp^=|xtvW39S#RN+B#Jvr*uY4x2P&dFUs_Ord!!`y8qrZ;Y zbq8pooGxmd0a#YuEdl1$^OZ&>WG7X?qMFemgM1s~Rj?4W^Z{SI}gWh16yoq~w zmkebcOJvYj4S)@P97?7wiQ`sT<*+=n`SLg8oI`T%iJzGw;`q_=$_oo|BR!<3j3Pyx zDO7KYSjBxHmTR&a@@-w#Vtv$c7N3^Oa^YUgH@)>V#K*~->>Q_co|8{`WC$El538(H z=M>BQm@&*!sRZ`MKmK8@HR0e0kID&R!EM*JSu5s?n63?5}RG+T!nc>ywWVPxZIx-wje;n4HAWwJ>+i#>lbJ1VtC`bd zz2?;Onp&WF4HO{ef-Wh9Bf}>dUNjK#8gL9iIF8!oJ9mtG6@!I}S z+I+yBDY;!1*<^&4@o^#Vdi#rLvrZqjyZ`WIfGK>)^jsdIcP#g5rq{Fm$c0!Y;e&31WXC>#vKVy@`v?$zmDgQX;2wY)ZaG_k0O|Lm+I9pz7uV}e+;d+ zX111bxytGaQm2ZYl1!w`M24HAfBAEZpJwnW-hMVbs6WCcm)>?@$l&l7C_MfZN?@&Hsy* zxDtfcHV5g1xT|6npZpC|vCC{AWA;sCD1Er-j|M}Isyn?L?TZflE;?tXQET@R{o z@;rQ%kH;e7SDGVP^WBWuq=f~7E1I?jdoPQX8}{LOOP2LPx7NBe~MFM7jb@?c(mSk$+`)CM^iDLz<8tm(boT<&7o)pSw*2Xb*# z;9`}44HBx9jS%ps9|C*lVpWFJyLnrr&ezad)KqNLfvKWDz|W8ubSqg`0Z@#irqbV5 z)gKcRymqgWY(F1}4EI>5pQ)E8mK zP?ORFw{ySD3pz(p~=|4o3`7_9TT2`7kxbFcVq z!A44c($xMr%4650jQmKHk82!Fed_%Zzhbv@YTWXBkWcUprAJO=ELGNH=yh?4b^}?H zVZ~dHn<`#sG^JG9W;sSWqte1AVix-@C5ELtG`lLBbfmCU zZ0J*(h^`bCf#DO-qmGXWC-|whWHtqi$yD#)AZu5bxF=FH5`G>}|AZvY4fDyncCr)k zVb9V%t;OU$Ya&#t1@^udOw%?_4<%)(J0Yq50e4}8OG1`@%fcOuJ3 zUkXstUQ;f8ND82*s+So&c2-r+XnU1La62DnTbnnTozZ$q6{k1O4i#{ktdYud(p;Er zldo-kYkWUQK;?Fjtge}LX)+8?;dEuz7y8S>(fm!7t>Vsr;*3?x;8@&h&lWASjo=(+ zB_t3OVo8uFT=%gg`aO3#)aX=qx=(K9sUfhghc;s-B;-UVmJ1 zH&2UGUyZTuTH?SNKrFU6pEcaWFV+=#*2N&h5RBJ>*zGWK6#UpD{3Us@$v|BA&fBCqf8r%X00Sj7cB~o9P zUGz%tC^sW>vh!Bn2@^>QO?5e-5VT#mre_cgNI3;t<%6*I&tylB-z!Cj7N7g7d4;c- zi9$`|m#2b~T^1Bc8jTG!qHY5eH+kj&$UZ zep%j!7~$~kMd%U>9;Pv4??I)xDcyg-onnBD7wyOwxTQ9%^QD&PO$gl3H5J}VL7(7% zG*H6)@pr-edYaklJ5@P@S1(mP>A#WO?Q$7Xgm*vaqe@XH^saddkI&uaujGK9_z`a# z!|F-2+iVtI1x+=Db~ho^@3g#?CnlleghK}w*u_||@WEV6as3?WvF?bkUu}$M+8~CSAy@)N+}VnVEG~$$x%xzvj_2@7NI^ z%qlw&8}lN(FoNm6n@=$M6|SFwEp1vfv*b5@lz8^{>2e(;pW~hFmleyL+Cr|-%%6Ev zd$mFi=Am1#+F)U;od#r3|5VSVd* zhmbz8BqGwl-mXF2)?Fb6DfA6=r1wt+kpGc`pGCA4KhrX z&1pBVjh->6$z#+H2(oY~X(C4TFNr>QOdYz?71c^=`*qn#YmUKL!XjVTn^pG5M2gH! zpXU2y#m3E#r>}0_&tisJFE_bz@l@ZOx<+2f^g)L^+TC&FcMr0({8Lg`VKIM7V|}}M zX`~89ZMD2tXl2xAiuodfwmN>SelUdH4LP+0hUBnj}8) zyG-Kfoc14g?e84;SIi+29u&mCx%5wWUd#`?B%SZB@sH>m*1Ew&??cqC`3{rNYnP}G zv<6Zq%(^-Eyu=VYCOuUEo$p2&g^xNVZO{KKZmRssqE{=g-~ODd|FG_$)8^fv|GCj3 zF36Zaung>Pf#~eSC2xl1?nsIM%z3+`+7gpahzxKjjd|IN^H9{EZCu@iiw{={VQrF| zka=!gjs|LQ6jcmFeQOQ)X4?yst`b2VTGK{lb|I5%VBnsG7pSQ-`MSGYTHD zD*h%v`pgy?D$C&W^qIf+D>Gq&&4-Y=qZ{)tZ)i@E9+s&HTznnxZIGu=fFhvK38N_) zzM5(#fL|+0?}^pKvPj@F>*%BPLwAgyyI3#a^oiD+0%Z8mJ*Uz%&45>*yW6ka@HJhU zJ9vCT-s~E;I28K*``-QfOqsq~t@8iXIN3`VBAMwR zRYrCZm!{Pnd-I35F;S2Z&Cn;%o~m}gfZ7$Pi5>QhI6nNHD`+f^S6{PJ?uF_YfOY~S zR*|q{5l%9e?So6QkDcZi3ahV_=6|na3<*aJ_}Y91bLvf!hAM-zN;0WN+sw%=pU>Bp zqkkfo)0IJ>cESS~^;@WUaRI}U6Qo8p8HD``6=fx|GIBw5B9&+Ks{*J&h9_z-o!O#H zRRR?x3wZ^MukTTM;Z?ot{{eT5q4>k(;BlcGu7J!g!TR-S4GcZENxptk;JU608+;?J zj5=6g5hYvC;?mn`MMJ5g;LhEl2jOyO4oiPvxjOlX-5ucQNnttFo9NQ*;b%%oVroX(}R(7w?;};?FNEJj#Qt9)^!Aj?{@DQ1$=nh*UZ#Xvy zMWN7~;a+0N#T*YnDXI`l_CNG;2$!dFkp2Q%d%VyH9O1f5bWuR?c@3?xY<9$bRMLi2 zYU@o#`Z7p1kxqFd4GzurchLnbNQu)W#sOH$c2TR-6B$vN3gziwV3}n{1rNK+`kuxy z-2}s{`NQtHy?MKcf52UASDLW6{Km2;Aq@D0VEu+*b{X$VQZJSkwEw54&_Gz8=-2uQ zU4}SB#g_ho#RHWnWtd1=gX*>nth4}K_-QaABS*P*MXxD5)(pM%GL0D8B^OjB@VE0N zE$!PUUfr&UBp!89x)iUq^JWFH&^oyMRdfoLdQ|Jz)&ocii-}SSXk#-k03_JA`>3%) zQCUYnd~a!aC)(;eZxn_R^1QYp((hTPDnNrjQGYda=@?(ut_Y%$cn-cXEt{CqECi#4 zUj|HwZ5fQzSm}KtN$CtV(-nWzS3^gexRJ?K;Nwt{iT4yDoRr6$*9eN$&!mIG%2$l3 zw*q>HZ2MU{y7c}O67JR$nA8W^M#X#z{=R#cm-I8*rt6WUf2JHk4^ngNkP}eu&7M-- z3LD=~GvLp@4EP7!PYh6jb;<7lu67~0K4^=xK_XR939x~lJzQ<;PcXef8RPQlWzG@3 zr-;hd7K##htZqetc)jj*TF?SRftoZB;Vuhumg=bGof^IqP5v1hJN`MeB2k)Zv0++m zJqRvBpD;zBG1Lu`kQY~lvcioD4J1QRMxZz#b24-LR%$LM3MbC)24p>$j+W70lCN*`|CWdO9&ZUz#I|0BNw-YZc!70H^ zRce4-rUJ)RU9dyEG_K% zU`jo|b;JSAf)3OO{1xwN5hWF98$g4+nLMgJnDWewe5Ok^D9i(qT!LXHv88S9VjO2$ zt0p}D-)aA=aR4AUodZgi+a1xHaz!`+0x6ksOH93n`Ab2r5%x+q2pCGotNB<+q&nQ|0XjA_&^MD(3x^RF7L|W0hxj9oUBCxdiLnT zedni!fn7Bktz`zndC+*A>w9WiW@rvg>i9$1ZMe=~yv}$%nS8WM<%>4)_LFN9r+Vkr zH_SwetZ5xJqUH1U5y?=st-ICy!!TS;&$5cRQ#7oH(eLSduMwm;z}TfjJ~-UHV;}$N za`Fue=r_xT&vl>DNSNS03Sl*N*0^3k&7hq(R)ggyYtgmjXqDFqD@``*q}{8{4USYi ze&2VL^VIvkJYe5s-TGKpzHgW3I=y_;qY9F+)#j_S2Vi;#pngL^%b_UP_z3a{!*C*%C4#~}!g1{GkJ|APB zVFGU!Z#=gYBqiw)anA3uzm&-#mi06A=xj9XNcqW=^ZZHG0gv%nruljOiVQLL?gkls zY{nQT`Vs6qRTp)!ubo~f-n0?wTMvsDb6_UGivo3aIlQmD`mN3oKO#=W!2%V5uLtI* zYxn(&o(ofwnROw6o(ExoIun9RSwYk;2W(&LtqIb|zz2x3fhjVbJZ(tIeAB!OWpZlv zg7$s)yAgMVb|u#AE&aTj#MaRIFeRw2K|5;oHlCfvqqh?%#wfO)ckPi?@_HOc$0&W( zX&U7gvdY5FI>S2q9sIQW)Q%?KH__JUeGrb>_MZ8Gdv6x=nhF?_&a3Ch^R-F?Ac6!1 zdG$+zR~%_9k=jn#=C-bhL;Q^GuJ~i#&?X}c&LFwoZ8C%GDuRlrYn?@ALWXh334gOT zG51D#+5E7yEV}j-gzgX?tHfIz*947}R~d5Zz4JJy_TWbpw+-$qf3jrib_k z+(jP;V_LbJp&+S45gkmmO976w3ECzNm2y+>H-1e6LEKw6D`oi4nOKEX)l@BBoWFm( z{P$Uqoi-pCK9YPGnAVCJ?cLf?%4UwS5bCXbzfPZHJ!vT|>4j*n2Qw;uH?=C)mtoI# zZRY&Y^ft_rK1C=U^5IMA`*dT&wmGWAh}+(pr+M5BR0{F*uy6{%2KpJ6d)SJ>^u z-M+74dpJ9^J#%WV&@rhqHQSy$R;{If8bu5YW%GI6h&X!Rf{s;;ie8#!Mpb-9D%)r& z$$okEY|`9PPK_7ajuTdXz#15`W+<-Ny5K~mrDI*!*)gU6=fk zzZmuDUkLUCB+;Ok_q{?A2LydNcqWb*@|dnpWaDn>lUhY0MNQABTE1;(vu4mN6WrPRF$?m*RsfM64zw>GA;m=N?yXi{1;#++y_$&%VE&n=6D^?Tw53^EFD zH3KuyYB=LZ(&je{v{6ZzTH;sD;(`SjRs1%0&aR`jpWYRF&a1t8__i8a&J8q48p9yn zD682nl%T(ss>er>WxygF)$F@fB~0JQmW0S_AJtZ`dY|tfJ#Gh0{zC!Rjs0$m#de~7(xoSu26FT`gBc=>No_sr-yVaXpXw-_N0$`Q!WU2V7 z9bV)qBBoHnA$@z__U4?5-6^j9Xu!lbBOlb9xfw?N-HA@OOUR6rcuY3y~I~D;G9FEa4Q_aT7XB z8z%VyIYljFO@&HZ{(gU!PIqsbd)yc-9Rv0FixfPHJQ;VHrsq$%Y`XUkxQkOV4)k+t z2S{eK@_;L_iw*L2-GD9bG3Za~edQzW$z2crYq!rOfxen|?%u!MF+`!+fmu_S{q}|` z?uH^{7B#NZ_P58$pmWI`ue4c0Cs|$^f{sDJ!pv^;M z(T~8>u7!;{&=#kIpb6gb#K2NU`no?k^aq9kR=W1LZ8EOQx2$49 zOD4@VqE3CDjidshOwPGunXU(}Z2HL7s&$#&3UGfRfwpV|e)=iwBU?9G*jhPeXa0=!UlATKQ>Gq=&GZv*2&1^)-!7Yy(Y=LMl~ zN9uy44^g5F;9vR|Cjo~_DGTblGSh?hhb~1UDuL3BX0cH+>LM{ITRegl<#gVSuBKvK)dASo(<7NOX$Id!#z#iR7`+^+SD%G{k85sX~lU^Dm9Z^FeY zD^8*w$V1?u&@_Wdkfi z^%6$7*J?&qdAIZ|WycF^Wt{0{3v~abY;J(|D+Obv_ptQ&jAbX5pH4X}W004vbWAz~ zZu~tzwgaJ4l6(W|(n!6(A)x+GP-N!F0fG`uxtib+)|}qgjkjPgp3OUV=5&eVUYI9_ z=$#C8RIp1Yb*lI;{dlbmGpvJ`E_O+1Tjp2nuTCns2oc0O{h5X_&)zm9QMj zOpcUN9LgI1hotwh`BjbgXeq z0AKgd#@T7x-aP@hZE}?c>+o|HLT@}ztB+pc)sH0m#nH#kBu(yDu1xLVciyu_tqHdX z$y5J;qw?d3Y_`87sSyWA4r0lVMUaEXrQhFxU0hR%~0 zl>*Z9)iyO~HzAL?CGScp8-j&oo${2ElqmkS?xId2UO$7>cLz@3g~r||dch`Xy(B#b zAMnwTf!|7Wo-aO&m9YzWote`3spZ+xg)_7e?;G)gmRJ>j4!a?swPYG68!gSpasF9( zx_OhgK&-FAmjv;WC;^7Hi}Fcq2svvE!*(#qYp!36&=C zekg%%O`3L1VQm*SCL?vU4-qN|P^Pyq8TlUt zVh;ckp-x8xk(_G48_$IV!H~3jq;l#YlOu*op3d!m9IEpmO~6*vCHPD1^=H~c69fj~ z-oQ2-(b`xJg^dm=JXb7WBIiSDnemXSkYVr?Jbb0q)cpAE_0wm%;?ow__WPT8KYjr_ z8Tc%cysPa~*%ZqN12dZ;?F-^F7^e~T~K2KdYrZxTs6X&Tn*e+=LG#w238ShfyizD%Z~6+0zhL(I>kl0`@_j z7ft|-Y@CRUm z0FV!SZfA$9fx3_$RfCE^i6(Aau(1;4{TqIiI3=1!nnUBJJE`O0s!y+`*xrE_zdjV+ zOxK}VT{;;mxTPuxXcrBzLh-khxH9~xfNAZkvOqzC_loy{x9 z)6lMp_zs@*;v_nNQ}L=PD_PHwwOC3Xa@oSu$?!qBvWzx4qD=EqkK@J-hhuV8V>17> zDK1>(+O|d`8p?9h|Ig&*D_PvM+?js!+~6W!?>@_o-27*sn@lVsKkB2=D&KzVvtJ0O zwP8eku8NBnSY>P795Y=L)o3!rWP1nwxOO&K&h__L{`&XcNCB57UvpHozL1zpWT$P( ziv%RQ-^I#c#BF@BPB!pO>=3&OW5+NyaX5!|X6((!^PM;Mo6p)m@fcCU>wb^h{O^sk zJWuU!x!Tps46b4YwIJOWT&QjnA3j1P0{UUTSNUvl92jr%6LPhK+0(`%vB-H5Mx%>s zuRr+ie$owcXy+^hvqIZReURt5y-x21Jx5xfUhlHRm;{{ez5RYH#Ngasp)Dl=2)^XCu1ybM$>&251mm5FkNok$v6|XFEMJmnL{FoqY`hk2y+`N5a-iE5 zQw0hJH*H0>SxtvH1ZkX`-M$)RVhlz2Cu3!47cf_{Sw1aQ>PaV4)bE|id}NBa^cUl9HnN0y2?rMZJp`3Ok8* z<7JVh{c!I{?9mswLvfoB&0Yrfnh6`oW$(+2?Fpvx%NBIn1UF}0M?*4ANq1+CLncL3 zXO>gRIus4J>EbD=D&_Yk3G`Z>XHF%3;Z#@q`%RLxc}=<)U;8lmS-8lV+lgU7+=AFW zA}@q7g<+2A7!$2Xr}9Sf!)IRxTG?p{yWczR#|u}!iKh#{N}MrA%DuSt@zYbs-zou% z9L6R}%N`Xtz_=rSAwqk@GJ)8xA4(e4a#)WOPhaH4t$e@Pu?36R-|1moJkO zP#0pTjuu_jvXD9mO?UgH5&F3I$Va8duE90e#Z4#Elh=X%ry>iu8{7B~xFa%1h>^;V z<7&_>JBcTuxgqXGPL&vv1}jCP<(Si424}&+GBVZog^-_@@ zqiqvy0nWB!69txG755Kb7URInA#WrNjsK-gPzW=|p@>hNU?T?BBYd{AH>xTCm^!fnJufQrSgjo3p=ZLC&4Q zE={wn8sfboG2;p`zJAdI0{ackLoruo(xS(Bm8I8*86x^hN+LiS@TIughm|cwq66%n z=U&MB=%Q;La)s}m5xEOr_ckror{KcJ9Hh<{PoO#kMO~1Rm-x7%dHw2knzT1~J+hQp*I@OzyzPJID^0^HJ%AlPpBv^sLpB1xNA zStLV&Fg6N?iU0yR+iM1DeM-vq>HE}8&3T9O3(tKcHeW8bxf3f)~mQ_CIk)?uw@oBg*u%ghW>21wCR zSqB$Qu1WEdNZkUJ9!aj5kkQ?M@6EF61zQ_;=!grUvEt>=}-*WL{8V4v=Sn0q`indM81Pd zVYJ>JIs-Tl8X@)1r=3o;Q<`lTXIP~hl%DU=C&Odn8J8gwM}HUZHJ?h*Xa`$HT{yvEJ~L=m>b=5$^Y<&F zAF>CH}nRm3VNy<2ue)x4iS~ps&|7zj8gvKF#x`O`(nN(et33Bn5Fi-AfbpEND zAS*P<$tjlV&TtsD_j!;LHYVllSkBqcZlX2wWb#qj$_QvBZ)!^q0LZ4J=|LJn`)LM3 zD~z3B!V|a-4vG#3u}N?yLzI8I*la%-+w2;XJvUu!9)TV;*;wY-=%RG}DXU?yzeinE zI;T--zxYqEWad0^PEpmkEI$+j2`hW-zxIQ7-HC$QE<7>C?@cU@yL-5$oTJHgFpNZS zNN1dO>R(K4wtlzd^=^y&SQ&BG5Wx0O&M}nc72{PqPj1`y>k4%4QZm+@d2kZ%?7h)} z)N42VcMqzKz3l8Ire@5vE?HNsyxBgK6AH3N7nlQ30i1CtIYO`gmu^jHKgYOte`&> zEaCR5Q9uA3?TPI#2aBW}OU(#Rb@a8(BfVSFfFIG2V;YI^5An|!aCE+pdZn>khM&!4 z@!@3F8L^AwBk{|g8CebF=fBaP$VOwPXO}heFcciclZ3tjW-b5>Hu~9(wyIt?hbp-qxR$+utmR;f#}vS2Uf6EMOGF5k3A>MRWD4DS0Z=g8j+*0tOaE2s`` z#Tl_k*Cp4t4FQ|{ZlC~!h=5)gQ(H6*K?+f#?KFn$-Zm>P540CWb3SBR=C!w)P`P`0 z*&*leC!e$5-9zmgy;&P{e|5mWeW|_V0+&}4J{OS>EFQCUoaa5=j5Md$j?vOgY=JF9 zCwzN=#=m=OX)@g%?D_eSXvvY4!H4KBJ)5BB=6}F_rfN?yR=1#B#+v;JqiSdoNV$dE zDAvW{M~vs6?()&y4Z_;&i=?>B*SDG!5f}fs`aw>oHVAn6Slb}g0Y*7ybb zF03O9HfvHoJe!jPl#OdZiv@le&r_Cp&6yQo@0*Ffx7J>dnTdhwo6fq*FCG||mET&r=aGIHf*l~b8*_|ogYX-MbF0CT>JYg^r!xe5`jncka1_J8fh6D^|jwSPiTtLW{<|bmq!V zMXHmiH|Fd|CNeY&n%yAmuJ7<%!KW6RdfscHtzlfl+~o6w4Qf<0U!+?iZ^0&Iv+8Ec>($Yi?u_9ILYp0ZsIPl>d!q z2KcYo7Y9#imOR1SQTZ6zv>gDxrnX(LJ&mxw;DK59KruMoc1+8e`nDw;ltXvq*{`4d zH7GZxVM@cX`zQGX*Ka4i6DhE+ZASw5lV#AfzT3B%Kd+A^=5ZXCt(@4dY<-XBMf93d z0QPL|ITlWR)p&b0v+`W=1-SFC?wQ-9-*X@14joz_S*k8CyeGS>`ylD(z$K}Sr8$YH z@0L3|RQJA9l0s>G-XjV_T|8Z^F_1AqDV{Z5o}$eqPB=VGR$o7$b<;s8rJKN!AP6|J z7%ypaA@XC4lDp&=*3M4Q<;4RkaCjO1uiW5ORbWF)P5OHj`nQw!vkF*De@?-rBbLt4Gx@KW!E1Y~)U+QMD z)%-2@#V6akVPGArSWDaA=I6{HrKryqeEAoZ2=Cbf8g3_gO}v&`dvEn{(W`wEgqh2| z@t~(c+mQYFgp&mUQYyQPCiP#5LJ+?sSB6$bC#6ZM$T5Q%G6h(2ICY8_ zeg=5p6I;wL_^N+68YUt+W3_AUjP>S9X_UDP)}+njRqXr_12m^6g=fz++^oGCYQjMR z#Y#hU5fD5QmIR?Vm&#-@NHE$3@VX$U@ark~_#E+Po5KP-w`=(4xa^ggVA*Z`C(CfVZ1jlYjwq>Y zG6I9$jAWg&46n??=fXWM^UdxK4#}~E&Uu|(gqI=hN<{0_ zi%-FL%i{X0>=_9P1x!r;B92O+QRA}y6342f1@ye|&zN9e?K-6b)58~Y<8yy*E@dtC zoU_@ksWg19W=<6E5U{5!23TNv$n(XQ6DVow9wU~*j_Z(peAYBC65w;tcx`~e`|tcp zQ`K~mj&Dx8b9c;6GsLBNQhx6P|66M@wUIO>$!|XAX<9sR-B+%q75PjZcZom7j<_4< z^ndaf(^Tl_y22B#wlb7(3Dhgj>z$H^C*1BNGs+*Z_3>6|4x;cH8G)3)HrXf zO3uz5#sb!Xu(6JW1U%GJT{J}5VZw}4OyVF*t$1P&iQDA%HbcJe?!!pB^ zJ&x&UA&B_W3b3(8iD>?3q;doRDI({cpzx5(nkQ64ycmdAflE2Xw0oacLasZW%!TB` zW}8G!U_N+d33Jk;k14&8kq&8kXg>|XZO*LOAf@lG^Q}0VR?dvB*wDpSSH~s4To__x zqi37DgF*D?k1IT68#GazM%&0F%VlnO+WW^qFwP8Ia!7G^wuW?*_zTJ+z!DbE(sBeo z<;`)!-p}7XYnGLy#ZTXJAT4x|?-F$ye8#4ZV#W9rCR$;Al~AG7(hOjPIi3TcfhTf1 zy$OA^+`)EZ>h^-pRLdhH6ed+NLEGwGObJx3U9I%O14h6HZqdwjtm(qO=^lekL1KV1 zyD9IV3FDH`uUkg6L=Xc2Fe1smQ-ynz|9441Xdc-)VTI8*Is)daN^qrqO%PVml!I12 z2~%f`NO~dS*Ylv2D%z!Lbr$WVn#Bc6&4{|lng-fR-RwTr+{)AzmH$vem@Y@R^ws8blR44Z>;Lbh`}^xl!*sn z(e9%MaG-z|4PGk5SlZvOX_jSe>fn&>rfdRqrNmS}R$-0#(14n)gNm^93GeDA%p2j( zoVI(Xz{T~(}(sWmK)0{Q*SKmAO#M-KmJ8jb~KrIXk=1bve_z+F@gBRmr8iiP9;I(=$;%|{;o^ovZEL;!#f)y3%_@)Ada_kK$}ogWH}3$!e+d0Y%jY)n}4 zj{*($bW{l&$K`tc*LRXZvK-5yR6{&90fXyUF&Qc?)oBpx2Bhu}LhhGmW&B{(WTH3U zDeYymWOpAUk6WRiUPR@`6d1QN`$oM#be%PMcVd1rfH=0T&}Z0@@;x8`!2x2Z;&Zs$ zL3}>f8x4P%w8*!}MHk(|Oh+KQMv5-Xy}XfU=d4_evKI&B*{*>b_x&02P;a!|U(b{k z(N=k?NllpV#g13=CY5WRfc-cWvYCcbdn4mA`Vbqji4E!mc2x+aCk-gc&d3l$m*w2h zn`ko2u>GeB5}7|1VZ~VySS5f|GijagsBRjFywswlC74`k0+K-n3(b%n{{*-Oyz{Fuh#}1qo9Alr04OHWkE%i@vC!5u{3r*2hl)pi;W|C*02;kG zW*fAM-jzg@HHlV9e79Gx^;zp;%Jt6Fm(Pe)zY&QVJ;CIX5R?K4*AD?QBWBe*8!0d> zQssW+Xb4LTKoCd|jbmvw!j#1`YHY@3+3Co#UJBRLBHogg3Zv&`Q1r_r9C-%51_$2{ zG?!;Jg2Qw{)rI%4kB0qF@#x#qea5TrDonTAC`a#x)s}GUOE>Zxfyx4nZbMg7BrJjP z1Lrl$6k_Y|c-pQx05;cB|wj%SK^X1oVjij;@@9l_*V8l!;PyjO)rCpjL72$^uIo>*53Qw)8 zsWX(meEptVv_Ayr6}O!$XJlQXW4YD4>uBxRFF^bHe9hpendqhYa|Ph`11X)wb0g8O z=+8m^rRrZY=n6k^HG(%zk0gGe7Q+gK%X@AKVFaY2C8@0Qr2Ee@Z1UKI^n{#F_tRHo zszrrkSF;<;rRD25?_(w0yJToa&YRI)GE>lBdKh%pmX9I?$667Vz0r)c=eo5WMc_@U zhV80K=#=`}or35Oe4t2tKBl!{%sDp(FHN))z=l|&^cldHtnK4OyMp1wsv5Qf?Yj#| z{%h<43ybxBWDjNA>~jKa@R9i!I6v5BRy?mb7XW~8W@`Vfb8V&qRQi^J4163aqc<}B zMS-{K+jp(RV<_JT66iQNdGrm0 zS#Ep9e{bPruAoPlBkDE3ti3Zqb$8ypvSA=Fo%8k^vT@YdzC7EgecdEh>#J8lp01Yq z>ft}&zLOC`$c4}??sg5w{4P}?cZh@4^?wEMSB9FSKA5}VMvOrOWnj39R2+KIHlok% zX|;t~WD*&0269qUWRs1S|MDe5!^L1JI zxI)%VSq%-X%TYOOE!721#>QZPp;KH(qy}^tQI6n{38TEhCkK_O?=M)Bf3JHjQPDi;FeJIRnH~7^Nu|;QTy99l_`x3lW(RzyziSq!@fYqHCV~ z{#hfN`D~jhY~rSb$5otXA_bgp8d#S`VQY4&C`8%zk|(0>P$_jETya- zSDcP6^^dF=(Hm)|QNiRL8S{olp~fjnpH&Fxg~tlBqPP&$7SywAi1SCpI$|s6U-WEI zNzMG!kv6BVTFH%5td0zXe3|O9<+_TXrIKODRV<|y(c!J(Ei526La>FNRE`cvaJI<= zp{E<8?K#a9a0#z?h2>}M*|A}ZR_bPS9k6SdJ$3Wo%!BO{-)OLzQpVLsfLLU zSQVy%Z2J8YSPx#FTwg%d1O*tgF`uU$Y$4NmWu+zG=5H*4@6rrbBeBh<(Gl_UYc!I# z?xSHq9k5|ZpxRr@yIlp-sk@C9{g%izIdto zh@H4fzn+ks35Jyhyu)V^sWCZsgkEx;qk$H3dauRkNeZ!~aX4{lxrr)k{sV5847$u` z6G}BHR_PJ1BT?OvMm4A|TTUfHS^Ky9ljI=vN6e>EP93Mx&Y$kv^oC6vr%aK#+9YjY zaqx7u6ys?xh;?XUc9xpA>sxfAzCeX&6Jxspf`^ATI=7gQDapwWp?=kx{?19&^{_5B z2HT5ivu8MZJdsF7&8hodmKi76@LOvq^f_u{Eil7+p@O zVYkkMaFgr(9(wW>Blu#tSe&x^$0Q!G;WOGrt%&%ms>7cn4IiN|ik-ut>E$i6)wqr5 z+oBt_amg^D_+w!2eNyB)pvn%yC`?HfCNME|o86pWm+3nqO3X8m;NS-lFIe_|eG;&E{xMk5J=R56Fhdw2+8cw&5%^Q@ zq%c@uydXJ?e%zN$k}pNO)Ub;xnUJi!$k^-LV=CfC9AxEmFD5Sd8v3@>TvsqOBK!bw zrk<-1yLY;BwglJV1^+S4= zqNAWBPAHG{MNoVr2UM}p;=<)eC6>>`m%nIFlxKi76=Q`i%Kb0m9ANWbcCboHz#IEA z)N=vl)}B<273y!)zG`*@I2l8;igU*cxdm$Xba!auWbYnE79NIA+Lx=PuSVhGdV6Vv zqWet-li^Tc4u@}C^2v?2Kz5?vak{~TgqdyI;>v<}4Q+f_b%q=iQXb(Z&qp7!7 zeghw&>q}Nv+B&0Ux@dZg6{7u0B0u8wyDZ-trVF%44jVl5&~>R&I?0+d48OL81&f~6 z?i;wtzlicE8Ok!%7pgwRbg;(7izlpVjSx)`uH2LK@l>Y%oZP+C^t$%Itq^XtYcVYYF zpr~|@ev0|3G-K_bwD|stSHEZLe%O0?ox3ZS^maOO4r@2q*81re|KI6C9;2N+1;3ic zZ)Yx&5eY5AK{|GZ;|*hF)v_)O`nulv+Fh^B)NT>%T|Iay_NLtqHmZC!EV?~acoW=s zOHvL_B*}_Us%BPoR#L|mJz9V>7LIVK(2Poi!MiroJ!j=RW}j%&3LpLL>fGFQE3MoE zqNm>gz?ZR?BQ|5pCRWF9#+MisX=7CaFzVWLcAUi~<4(H#aHJ%_;hT2;Y4DFbyz-Ob zmwmcM_Lz=0Jj|~&G zIu5<4=Vi?QrNA(&!!~n(dMU*JhjD>q6r*Jt@cA43Kj5h1G<~Rjs2BmFDQHX8o{}KX zNmM^^Hy|`+zoifM9Lt+`>S)@LOCe7Mq_}0eTK}#${TcA+?9V!PCWiz|G6x$S+}_AT zJh#j{>Bi5`Tl}%&1=$2|E%v1lFq2R!g&;;V5{EF+A^ENHjKWX^{5lJUB7ks;M>p zo%v&m;l}=0m5LTKHBLtOp z-CY$*yOvVzzQNx)t<7#%5ZNTHEa z5~r@fxeW2o-(Yrt-g||2(s|;w0kaXpqTd`EkP!Mx8D3FbwVCs>TvsNljgKZ;>0xkQTqDb&rXwQCARiHL?&R?% z?r5FVbn&`3vt#OXD}i|J()TNvcog88Wa0iRw0tQ*77rr3IYhCP&HWC4I_#uIHe>CG zg`6X;Z&pTrGGSfY%qjsHr$y^yAEAD7%JHH8Tf9)+8Ppi(ex>TcweewHs_5I0;%JYJ zq^l&ZbkFBUaRF9b*XP>)T%*h|Dl(7NeO=m5q7jdeKoK>GJSb3MO<;lsV_$cb65_6f zB>X68EtunSehlL$ z#9(O-x`=3ex1f5Yw{L&`}n-F?ilulfmOw zS_18pXJMDZE)B_%ggmd?NFRTX>NFUUt^9Afd<+1EaoJJ1xdd&}-ennK5vaQX_1J_i z2}Rj|o<)|MD*)2bH+(lK8kJk4Xzt?Q*? z%rR!b-t*gU^VB67=v*B7Nn z-|(ggN20pv1({iB@DcvS06=VyrKNRSfyaHLBJl_s5KQ@S|nm?T+Hv_{!PBzf|2P1Aj0Q{gMa(RkZl1s-px1FL9mH zh$5fF)!oj4N#;>54jPWW{e4i+Q#s_5dBYJ`M7)ow)x)Gm>A<8#b!N_qM$V{$Mc1@# zILzpwjkb}Dm;n1HPCYVi%)Hi*cVR*A?9{r%D!MPRfpy)e`U8x6B)~)N0WC{5r6tn9 zxi(J7M9Oq2V#jOX6W8eB^p4A+^Vo<4!dif3qd2j3puL{(^GG0=uf_7=!AtL%-@onN zly-5a$i)F}f0hxCw1}DfY4Xw%p?PX=+wvk0Q&XIMX@Z;v$%5}-A8~X3SiUvjoTvaX zw}_s)ul8Ly0woEJF@e%(jr5aE_4(E|8PJ5i5Tc|non6SJ2>(nK z*8gzGe1bcjxIm1sDzK0czSNFlyVj4|bNUAyRSxOMGPgs08+sZh7F#ABoB&#N&L;4FUil%PFL&Ss|Sa(obC?GN2>=9MudEejL`gsGN=J^+~XO zTwvLCr!hGtZ}vL5ws%ksH6+fy3xO0|+|3nP2_U@Sda(_v8)B%R_Dfj|iB@QF{E_WD z{o3y5Hx0m!>y;ciV;y$x=3xc_olz+>f@pKF%-iqNjpt`kXWsj#3wMB0u7~PPc(Ibk zm*%SWte=Y(xj2c=lFTSR>!y<4;^MtD_EMi>h?rsLX{#(X7 zBIBlwXElL5yS5W>_}J%ls-$D!f#c_@f51^!eTo>H&?qDk*Ly-`5ivpL6iHO3WcRPM z+JOEf)hqXfk`>myXQl>uQdcbR^RB;6<<+H){EwW zRhEsjA6Zm-N*ArTo}GqG(^?Zl0oGQQ5}aQ_oHG ziTmP2{Kd)ZO0x5*Q~uk0>Y+kSDkHM5 znAob%8vf~6XTbw?UJ~&ZrrTG1Kyui4(eu%g=9cSfz50{hxX7IDJQjYCqR5C>Mg8)l zQ^ZEFnYa<``|K(dq?;#{rd9EB1pl820&2YrN4U%XNl7^xd}@=xNqCuGafI>%UrP&!8BSS zw%suKsiAhl43~c7ln}TeZt@~Nkfdl|cl2F@J)KjVD~ zhBnH2=9 zt5P8wZMuYtkxh@>Pm2ZS-agFn^8vzr-HwM?Q<2JY+|zjZ`ImVW(H{{@lPiLXOPs>f z50vkSS(Lj!)jd%&Od39GZs!r5pZ{OPvB2l3hIqbe75dLzBKe`<%l5GiJsLbPiI9G1 zVRq1p6=#I#vhLCl`UnYYp^O`|x-e?5zTFu5A}H9hxsy5YZS{PdN*Hs{*oV9}f!B94 zGRr+%cXdlgSnX(^ZPO4fUA2XmFl6w#^8$3Q>Z2<h!8)#!AK=3>%LtUW}o{kZjo7J|efV8&-Vk511UBeb+s@}}}IaJqB! z5g%Gy?Gee2=I*zzXyd^mi12A|XFO8C_)ow=X*4d?GkQUTe*1L4M#|!#T+3s{CM=Av zE>K%Vb34BgM_+_xPAZYK{%?OkT`rp zmWk1C$3$a6ZpQ0m^SU9j0+)1b>y@C#GeQF&IUAh{<33)P^gqkpfy{d*%QNT|)9S)m z8Yy53q?h8Rby53fSoj>;+zw1%4>QyUO0Zy{g^ygKzzJr9UScbS$!#HOrpH>gWlD0Dg__HoV#av6K1b~;N z+`BR!@W)jPKq(vhFI52`9=`cslAP|BHNv{oV(1`5Evi(=%i)kxi|sC-ntB(m;ooRY~7gWv>w`g50@5c-3IdCeG?98OwKz@4C}w{9ny z9Bb-LgM58WeX`tgR{d`BovpCHX>s|v`oSySl@Vd*$THa=(Rdn$T}=Khx5x-O4e@j7 zN+C79Tg(Uzg?7JI$-Sjj*Y&p*+czRvUm7)Rb}>H){e1oDV?5Uy+LiC|%rGYtrvS@9 zBBjOkSXNm{Lqa%h?u~W|!I+j2v%VyFj)^%j@w|NtR!(V7QiymjfMLlT{M5eThGI)q zGcA?8ZTua5fcgg<)htStnaVuk^wo(t`J@)Z2E{wM4Px8`WaIYku*2kP4vlMuHd5pO zqf1rDB5-)FA=F`T8>(YYk`01G0b%m}M8{@%MObfegTtXQNW88Bo9hz6N7kfUd z(JdfRU#l~nv~7IbtBmEO`Dl_Zw0aV1Z}65~RdL=f%RLHe*Jj6OTgUFcdvY{hoVApU zE}sSx3XL_{%juFH?G=s{dq><|%JlwCwXw z8n~|>sE#|#rT>7Vvcd68OTRp@N_dTee@#9#;G*AVLl5bEOzofUMliiuE=5K$&LsFq z5hac8$j8MW9y7`IcPiieIxDq$_v{iP@v2-u{32`16Y21;{5aJt!J4E$YLcoa(QWT< z1sV_F4rpgcUfa9(N{hmFX)LUX0WK1H06GduJPVa;2zO|dk>J#ypoyRhRLHsyh=G6@ zBfD<_Y3TUDa~v=11f3lcnu!WH4kaiy?v&1Cz_&p6swV zv#8k#7>hLR?JW5Y2Qcv&KbNEgo!?bWm4_Pv@l5ij%p-=qOst^(0R*@Ej9QO(=&K*sZGTTrOsynPJ#Rs^g-LWZ3D2iM={o3QP(#Ww49bPE0Z z8!nmc85mF{q=FjJ=eEs`w7UpM&tR66AkcpmQz+*iY%N6xVfWb@On zGhbu0Y3M!q7AltX55++cGnG_XQPnHrqUS`r>uRK=Z%!}DoVis9zG#rQs)`HDpGDw| zy{^PJDwRggpv*0gx;LlLGM{BF%5}cB)z*n21v1Uk%CY!#QQFPq-LOgS>C8OpA-tkI zqyIlTzrs9E^{(93TeGPr3Bn)&@-Bne9@J5cr(a|e`0V7bI1@d?=>D~n+{azL4&rVKn&{@02%f|uO zWvNw!R=c7Uf62qNw==xu1p7O4hY45o%8Z)PY>2KRwQ*R(%@igiq~*T0j+^>78Q2Zx zps%A#t)>ZG&N<}K9_M_W}-7pXrEt8FAf*iO3!+BK=5_Ak{!F?Dndv% z{v|TZTP+T=yL0dGciY|a@Y?r~hPQ{iDRSeYbgJqZ3?9QGkTks3x=VvJMjdgfw7lVm z+Q*-nD2;NY%%|WMO?&WKG(4VTa1v)C8LnRq?Z^l@tx^ZLy)sHfbF`KDV79sZ%ZUF{ zmAZ4#qIM2qobKvq@lR?|P)O20BX%E$U9cDRU@R=_Al2f7G^IOa42cVn4j8x~yZ#B* z?mir6>{%#BH_kx%oCbOH;?twYGj{Lp5=uUUblZyrTYW)v-_l&Ed0%l=$o$BXngU$sxYq50P{4$G6ke@?K8C_?FZ$i zo8sL;?oVBHshx5$H(6OxYg|wZt48|1T;LNbU{$ZC{V;zAFIkHie4a?OOXyvdZQy8yT+ZX-^s{q8!xmUz;NCPNt3U~kkq!I8Ns4x03zn97ee%3V&9`o!4ZR!OGW#&Hm0a;Bup$aQd$R zzHokyN@oyN1r=Pz3OYd{S3R~+J^~1er`*@_Aq-|Btu!;aiazN#pj#NukH>^wD+MxZ zWXjXhA)<80^EnfWgSew=43eNx)qtoH^X@0Crs7#+e$i#^XV+il!4n!|1KXQ;XoHiU z=3KAORsfc{IS#BTTlfxVY5K|%=`HaIe1rMtU%!EB*G7-TPl)idTelV|?M4@}GGG__ z_Pp3{^_~Scu9aW+KVQOhbFDKj?||>tktjH~J`Smle{tnI)N54pV!PvgBr<98Lcy705oER4puxh;275w1M$Fn0BJCWa?-#*C=%HA` z{QOj$_2k}(d4f&6ppp>!7SUOZ6@3yIO-{@So{PS3I`v9mM87%V%k13)m4CqfB!lE& z)~h=Nh`!_Rt9(&VsIMNW50lSQY1tQ7E#9*B@KhWm;p$PI8IMwWHy-8i%h4Iq zEn0qcjBZiLqqHfUepj||3q#%(mfw}DS~+k4-@W-82~`u_7Lad~zOTVBfRzpHRS)xgQ{VJr_}y#XrQ_vOZ43(6CK$ecGcwGm+~9F{d1X(-!j80y40Jwyk>^$!!$U-lQI#TNBgG!5I()D)*ET;CLBt33{7H9 zsm^70vW3oUlEBMyTD=vWLzxV5?oGF^LviobQ>_viFYpVPAYpRr1NO|vZyU87%{4X4 z=(M9tA0sC+=%3U*f6JM+JNfq(wFx5gd$ResZPr`i^!_(8t?;StYvl#- z=Vr~A7hSfz=78o18>G<6_4;?VJS1m_?Ob*wqF6KK<7#rv@;~5C03bQWdA~@SID9$d zIaPExB#T6KOLar-#qAw^iQ7=q!j}evR>@J%rMZkQNmiqr)WfUx@WX+kfK~4ZntCM5ccEP83nKm2nlpaAAF5t z4XL{;mz|n~%#DnQl$o&LFtkp$P`oa)gW3A<1VjWJqedy+D5D%HAgw6f zAYG!;4bmc^bPCcbN=u4CD2V*#=lMQ=0SDJ{?|$Fcb)Dz=I(+i^`yaa5U1P%`#Me&Z z_z!wC=D+A3Qs;1&(VRfa15wP^zRey<38lG4N}!?1hewcDGAPwS8fWgUmlngUVqyg% zXybkB;quxckNvi}fDnRLjRo7MpYH>!dIYG*XxkT)7GzBg9=@-Tq6{d{D!qSF*9?jz z(*sb^a&ghuz(XQ{D@cD@R6>hYWPX;HI}I6Bc_Wgxcqh#=ye{%96%svb)O1vnShMJB zIdc+H)h5i(U)LB5ib`ODQ1f$9>PmS=O#~~32T@^T7#|Sn5c6uv*Tb$PR7;^=_`Yx0 zMO255*d=SzJbq^|x33#9JhB+n8^kb+tBMq8PjFb<_I%Qn zTJP&J#U6@N8ha#%sMNR>2r(8C98H#=-SXk*C`lWZq?sD0r*{zhJQgS4noWnE*?GbT-C1ciCMWkWWmAp-g0!h z!=F>)glOajq<2p6an*&{=9kMe%kK3gz*K~>22PL!nI$tg>S*IGnnx-K&43A8<;+@q zay7dF{mpE4)krbs&$dPOMoB4mpX{+eVvUqh7*`&8bz1K_mCfHVKr-RC#vjC(%afe&bm_B6ae9~!_Qu~+!9P#nlq*DX`M+Iw)y5-`!p`;OPG}F zv(gjv-fJLe5*5m_m6Kb~U!AZ?(9t>pNZ3<<3C9#QGdjgCefhz>@t$n}48e?7ve#7k z@4h0zUscg&B##wVxsUp;f=Uo1-rOz{bq}x+Ug50L<5Vij7BYcD-uJ|FG-c+Qk`e9(u-0{VS@o`xvUt=S8 z>14#sE~f_a7HJ77LEe|IRgA7x4S!iEek|y6V`xwflgigEYX^TSF^XTVI_A07_FtL| zDTarGd4ZH)w5`5=LtK*F2Z|Q9j;anOV+K2a56?<#+gauWN8P^;Z%c4HIy^~64l{%> z>%Ord!(5-8n7?wERC3ga{vA_!=s&OpWp(CTuu{4w8##9s%<#18Sh1u3(=@>;?E_Jb zj88=HyGcAt%bZWz4CnoK8M14rU`9jAV0}FuRVhAoq*3ngUh48~)qT~fP^Fj2ybTs} z`~(*pE(P_@hy+{9yR&s(H|~#e2b%u%+dHE5@meZwmL3N_7wv0Q7(L=k{2QJ_n2dn#qazmw5l&jFgxkJ zdSQv;r}XmR32a?Pb)6cON8A_cYbky0tL2G3swphar2~qL29PcYrOP5+; z$LL50KU8uvSxzdjcJdJd3>_Mw5u}Y_09zqJFc@9Aip$1|`SV&a#bKI`%e|&EVsZ7J z;o7hB8;5PTdtYbH9kFu?9M+WnxpC;1Tl?YiJ*^uft#MI`bQZ(Bu)^;5(Be1a*e_br z=odx%s4{!IbXL!Dra1VPQHUMEpZ@t2wNv$pc6EJsWedF1%5{ z^u7n56Tq69MsYF0lTNSEYrWEU#2jfqSi!H!=ykTtgq7m!%KGW@y5#_Q1 zrKKcYXZ6)borzDwcKlm!r@%h7{+@!EeJJ)*=*qiJ@pSyl3H5+yrL*bY$qab5%45bg zU)q({1T55d#TF$dp_66PT4f9H7GyU|4*jAltv=0$z(3&W4zZ8!3{|jWIja%O$e_Z6 z-FDnX$#>j;H>v*7Xzx=#z{b|ViUOouJ3nqWNZ?SWO46!t;jYK6^hcH$>7emHdHPsu z@oi%anwfEF=Hp1WTdx8r8}mG>LXU}`hn)zP?&;DSF%p^sMH(gEQur&|^Y-16JhX2( znq6O=u*jrMK;9(dPK%S(wcmN2j6IX6wMQDo!N|Q%9#&7~?pKU9i5+|4YyTDQTQD$@ znzVRfm%qukM=xQg53w>PvFHh%-=l;*Iump@lI4#9l$t4g!NudHp~NVW^%_8@|Xz#AN`cx$5E54R|EIvW*H)qe^Ck zDW{cBKfZi-A1PYtZ~H18tFW=5o=$DQ|B;gx$@E^^e@A=}Hj}blHx39z1^J^$}Zx~f~X9$*^Hq?e+O{WGC zs?(8m&&^J>M}1^x{%+mY8a5+s9hS6nc)F!?Vh^#FcAC-_*$dL)esZt$>|fzX$|GJX z)75x9LJg_)UXt{Mta|>ha9!l_!V*XEBJvovAcwi@{0R)Ka^4hy>cYl19MHx(&he_{ zcGS`o(Xj9RDgz-u3P0BKA&M#cwndbfq<;=G^V!8SvsET1D_TDv`Wr!EW@mI&`dOkN z;3%9c9KLBtLEXsU<}XcBZbax~`UM9}EUU9U|Geh6zx);8H{Kk{2m}vCXrvlayfQOJ zQBgLEvc8u8T3uz)M5rdv(qp2lYbN{1t`~){v1ye$M80g8dn1%>dQE?3^}6cnA3jwY zl8<5G2Sj4Z7ZtlWS(;(;<(UXVFR+#IkHP8oY>O$NFQr8V-ooY?xWaK`}PZTJFV zixaL&mh+Kh`G%q@Ng_dqd@724X-68=(JSY5>L2nPztySPn6ysZWT*4Clwtwf8@H7l z<2sU(@uM7I(Vq~);J3ac`^e}T$ILIkQ>Y}UQq+W0UcW435({=Oy+~&kDJ^Nc3-7Y8 zaB)0RlQ9Smpks_+^fHQ93AVvXNApUra_k|tH`L|Z>|ctAHSTtygu|S?tmc#+2C_N{ z>gFZxm!$JO`FsYP9ocg^K$xhZO3r7cuACKFNRnj=>3uXgoSil=57S)~6x#%vA5YO2qMfGob z*W@(zDZrHU8m;IF#``?zbN7U@7 zNzwlfP`n$daE_}qDU}|bF-K6}O+}jKjL({0ap$^MH~_&OI#j7t1JS*c)}zSm{OPV! z>O>a*M9rU0EmnG7RMkUOE!oH~5o5Mr<|o+BS~>4l*5el4c3Jn_n@Lm~38b^C&~u$6 z9vMD;d(^L_b$GolKLpB(Fm2I7pQiALNld?Aer{ISh+}YW3Xy%j4D8?tX4z9N_B+1SwL*SflTS(!K64;>UkKhr0-65 zl-}_(GE9_JD_h4c@-lIMet(zSZtu7KbPQPTT>2><1f(3&UQE&A0fd zNNS(vl^ym`4v633m5oV7y%}UO*0#a2oIVnRHjlWS$h^klX`h!94QV4r8Q=7*5W)ms z*+fKwH?S2UhZBJm&t>a<_rW|*F4f4<#tv7NHUTuUjhf z>LF>P>gN@LSJjHNtu7k)Ie5~t%uuUR2D&3Y3D!R%f<1sB+|@BX=dO*s9t|Eoz4ku2yRfdtaYB z*B)e+EUSBd|8WLh32f-|@BFyb2-2oHQBwMy@JP~OhQhj>4UruG_bu+vKV&|Wu7E7^C5`<6fu@t({Wd`y3-0-+hE?1`?Y;Z@_e2Sef*85je zG;DI!Tc)zc>;-O4)5*a{Mr)HuQ=j+SLViQ5wk{t-@O}ViVr7UYzqjli4N)Z;&?%OH z)jGp^Y0$j5UK483rdT`&6Qn4lKro1GIq3D{QGDAqXWZbXV8tGYp;1B66cUPrzas#O z=#cEoI?*JHoRyxL4vHXWmA`GS2kWfuh_l!K&cxwgm+pP#WcvBz2tK;T8_qRkn$og3 zF@2C|f`+W#Pyei<+Gt+vB8oa%eN3RCX2SH3jVKvedgLq%P8+g~16HYgC*|3_*`gBw z=NraW46MxS4XedHa8$O4LLJ01SF3$0BQE!okm~=9!3C)2S7V@^*x<7Z6vFG|w$ z_IA<4IeYwsY_HJSu;?XlF)9bcY=8-J5xosk?8}_ZaHG1?JCnLE0-TvjvTK=$6445U z!V+TF*JjO~_pboO`uNZRGZc&K=+_2$3Owp15d4+GmTlWx!9R8e$ThZcj&D#(8D8^h zwBGDt-x^d(49vP3P|+{MWl1BuDV*xxi#u=MUC#XtR%2ieHGGvv7WVd$jwgc%;7WMU z%};x%4GFrg4+wJz)J$YTF4n#i-e%@c-?;uk63pE8&h+g3-SIf=Y?&*jlpjmMa((QH zz%(UaK_mw@mI?(38ARZ82G!$#nh+1LY5v2E_Ll3KFZ#HQS3UA2s3X*K5b0XoX0F3F zf!YU^bADzc*BFIlpT$s+Z&+lB^2N4@#fttb9BH;DN@Z#XwW(DhI9G|1;I9&Dgn^>| zRRF|!pTr~0;vc<|0)y(O#UIltZ^}WwGs4#Pbcnf_nzW7a@B&y+|nCNP1RVHAOG^=JuNhAf#aycECFmzQyE95kSRZQ9#ncoF*<@h?C zLgoOR)aa~feNF7WY;snj}+T*?S{M1Ec# zd0zS8?&lb!2)TUHk+8AB+ft&#lqG_2daTpCm}KRJfX5Y1SYaSxg0q zd^FzD(_7fs)l~9Rt3@?-jf+)?Ac+VZW^{GJ6@gd%L2EcISSR=^!M& zUwXNL2mhPgfvhGtH$*+Tpvey-=5q`u5?7vgsgzpT;OcPY{$?_sNvT#BxV^*05iPH! zR^~a4kBN6Rq(y4IqwIWre3v+|S6k$xES(DV6*jL*WApl*cPf{*JY6$cywS5sVBAb@ z4kf;zdUUr>+fU%-M8onnow@j14Wt9=E>TM)CMKSik&+X*9(x_Q90gxB>kSzn3oyPY zLt=NlUU0(ggMxZ8WFpu6KE^vQx?iP6n@vbt!iF`yH(qjoUOJ8a`E<#_r!k51St!{V z2F~q)wP-~5*Z;K1O3yP2ci{V<G%G$OUV zCtGR>cX|0S5efH#25X%c&)*#!1qPgcA|0>53~f|=5qL}YDWz&B*JCCF-V4U3z{1mH zPyDWCfA58ypa6wlKeM2$#QVA~v@Snc@PwxilgoUUf8Qs&zb6x8H>;-~*WQb9xaarI z(jkO=Ad|}`0c+fBV6PH$hw9#P#lUd5=}> zueZ*7nksqgpy^b-t1`kUdWK*W17;PZfy_$z=gg+wDtINkRX1Q24R4KSrlqj}{zfbx z5`z+esURNx6_&cQEMK?(M9m~SqyobNDdBJMdT6D%gsmpj{+?3_N$~dtv@hLNG+n6v z;?;2#-!4JmxkH8q1ByiU6=+7KB@Cogep{GqYG_M8JXT0-ZtewDP;R~(7tj*MOZ|e z^pvm7El1!{RmYlOFQD3ng$G4ywt55?FWum7`&#CU*`pWE1zoBwu^({A5qHHKy(n|H z%UjJ~j}u%^R7?M^w8Q$C_@MW0W>krQWDs@PdBwA?Vle80>kq#=6&Z=SxkS8}npER5 z69i+zI!!A}&y4%3{@qukMX@S_B`I*2sId0zwg5j1WZ&=s$tuJr8NUChvshK-{m$)r zbP2U{wX?J);E@aqEmrQtcd@oU2*B*k`*>6McEAi7ZMi5zJbhT+itYijG2QSZEIcAN zhasw<_+y&YfViQt3s20;KdNj&mp`t%Xd;lgEZq&ELK4T5wWh=v5UA?u==wAm9NGuh zu}V?~x)iI%GEj5FR}04ZWDX3I*_p)w%|D4ATdt|fOPnz|Iakiqd_?wQ78g;91U$pm z@zpn(PSD?Ghg3g(t{J|3RxR}>#@P_Z1o96Vg3(gPDNL$qClkBMY`QC0EQeE6KA%cD zVecoE9_)~NJ4S|^qI6OyS2l#W#xx4vJ85fduJfn$el@G7;MFmP&0H1a76EIs_^WlL z$1_}!3rGAh-}n6QO-33KDKeU@L*e5$L)yd@9Irv(!gf*Ff@CntJrd;`U%i0ATEv)M88uzkjq`V_Cd9D}78#DiuGW=~mgC zgvN1lKJ=LxLTWHtfr)W}Kuitm73EcLHh&{idT;Cvt2DS6JAyNyaA7C}7 zJf_$Z0P&>%3|#56d9YE$PNj znlt8+>s$Pb|Y;?P>?!>Ybutn8rl{$L7Y2!W6HHC5nv7mTyU!3fj>Kzd;5!*HP z^a#k}`lFuDyFT2;;5K{Dho%TOhF@z^P-2ShxPk8pXDIJ*+HkpVh1!WIYL*zv3wC1B19B-oyE}S)|*qxXa^GXhz#(R^uOqNB{!&2FZ0G&CqNd3T1j$#~oWTGWS z?UiBf`sNUS&(CMZ;AMMH8PdPU9Y={`$i2an0Ez7RE|>SbFO<Cp=1R2MNX(?W%mH;vG>bd7?TVUS91O!0$@>H2-VANnlg;N57_4Ey8 zlOQs1C{9^9pPVj@GKQy7p37g0lNuVAPRHpV%_{Neyz9%C%bG@3_bP4NLs(Yz-%nPQ z4*KanS|LLCx7G!#`S=pHD#%)Lk4mh$uIR3Tc2h4WhWMz&ZL6{vE2|(_%CV@nPYBD% z&-w4C3INj6nGs^77*x7A-V4MqLI$th>sRO^2t9TE^F1c_=Ii6*U!NvxGPT&3spz`T z(ls}Z1zhUom0FG!V+PpNsIMy%%udoL_0CNu^bxKJqZ0l7cLv(>bL8hzw*y3wV2(Ad zgtcLaZ)|C%%Sm!GkcxJwf30D}2phscEKUK=EI|qbge~0f>AlPkjO9saX*j ztRANv{+Vvp-MB^m16N~oTy^3MPYmlrzkF!h)Mf>E=<<6d27sk!HG<-lS9J;BUFh$! zco`LI+?uf_dL$WjW)R|tYJ%N~Ah?*-cI5{y1y|Pxc$s8eMVKo~BPKv|sR&yCW?Ajs z|GuiW^#8c>wJO19hwNL-lr5Tfqq3ZXFC$3P+?a3!svFg((2r%D!xYAa-z)6SeCVYAU^>V>J>*ZJgq-Ph8l%M7U$-}yeqT?Aq2N*^I z>cW-p$xL-6zPqjR`0U*{!=b_M*SWpMT7G0^#A2Y-TC9PaMxGw+3>4aJXs`P-n=vP~ z?0r-DhI~E$+0{=*z7HL$M;6Xen^N8r=+F24mJ~I&X-#V$MKuX4C#gmH`KcwEBxC9L z*kXM6qwRklkI}~>1?HXxB)Vp#Pu_t{3hg>B-ofY&beR9^UZ+zUs3=Ao}XaY1TC?k~( z9lFHvsurbdVUdD`jPiwiz%U4??^ZB5#Vv4duQ6j5nvap<{mqjdmp2sCqc=KcA2wDn zxm2I1uX|$A2KN)9D`IMsnerfb1C=jro8!%G;M&{PPA{bM?@(ju7)cYLpX9><9XTTuFDfrO zgNZ3N8w678oZhuEJ{ue_#0)*u-h^B0X{lMvoprxWJ^>|C7;^Q5M5mhmJ9`wkhZ59US?ASx*8*E*=P46Bpc3HS3SU zjT7};(=+Tchzqr*#;lH`ROLx_KAr_D^H!*PoWc95Z#L!RsH6u$NzMhpm)5x%FKcbn zjmaZTeWkCV@C6`eiU^zWJWiV~MlypG)`=s#@O&T{3RfV}rhDBLa|%ZdJuKLOIedLC z@bFH~L9tX*hoO`Jj$Y^OXaxrp%19SIw#1pl@{5xzDr&Zz9n!VktaXxgQw=W{WyZZx z!vL2?Gq6?##1I~hjG0!yYH81H-SjJ0RgJ+g6bp<=uWu4q>Lh~2v_)Mm&!g0P1S3F* zK=PuV0{aO_H%YCYk2r3(!b;k6Q$V;_SS={QJZP~Ai>C}8fdAcbru60{tR_M!Kd_y^ z&kBXhkW@rn1n$_~#-sSG^hgJCd+6tYk;J5vAEJGKL#%rOZ@Ph`v;$C!DS~9~lk1c1 zx;Z8#ePl;zSdV~G34Nl}43Ausb5jhlg5w7iu1VvgHm@u0g8X9f;fLr&qX5-!+0i+V zeEXXi?!-R6kF%xfg1VtDsg$UIs1>CjB_ltJMe0&FEw@bOH*aSsulvq@E_VFWbpN;Y z6XT$}`-i1IN&;7>P~WefD_&lnuTkaZ3OVnQSvWGjloA{E;kKa23+P`sY?~IdHoJ&3Mds95k5v@IdPp@M`<39{w8bTT+IA>FqI56>(g0NGZ+G5-oj>Kw$OByBFf4Bs`vD~S|> z%KdBDdxH-mNHP9Jc|`pc&j>&a;pmxcD8Cw33-MDtBscO|qEvkGWzu<{kL;99_PT2N zY!*G}cDRA90c1lyVgd8%#J+aU*%yPNYT|5oeRRL-$)pGJGzct3ahZ*n|G&T-> zIk_^``W%@sT$1WcZWbNqXtv>m0%i@x%iV-f6cD~!RhXCT2Q)2Q*I&U%o6D56(s^3X5#5{ zhgOSG;wfyQkPN)daftHX(`~Av9k|g-gV4}oW96xF!y=(oJ*SAr_e z)NExxn`XeevJd2@-6VL$<8vKdEhZNjx#wFly*UF-Du({bAGt;J1+OIK^J!35%XJxq zk4CC?cSeKoRE!yeR8eVaCpu&0R2QEE=aiM&x0wxfF|A+0d&t=Fp+F~0BH``E}PPPY>C5AjSQt zt-`_1wLeiwL_}t+mkRO+z1ss9GHP%}>hwj-M-7i14(PKTFKRQYOsBPJcQ9zh&6F1A3mh;6MlSD*3H+p z{4mu5$Cx`2KW1*H36NNkV=YSxFksl8oC4~}Mn*of=M4>B(JO?Rk3uMV2cnW?Ij<@q z%%d|<^U^|?NRrhB!Y-=J)Da{qKy zQpi)eE7%(nQEQ|jwX+8M&^Z2rDhivYLIdMyWn7MvhD&P)3A0tFL4M*OW73C%D zc=*;_bav1?O)rHZJe`zYxN+pBz6=w6_Fp_%FwmHOekW2Ja5H4MN`c=7;-T;M5B@qr zzE_(RpXNKal|28!r2?oPp?VdQ;#3gkX21id6T|^)rO0nbs}d16Jd2stE#1}ixbSl5 zEqc|(V+_}s0q(83f;Hil44Z-F_02>-%iYG z&UF8nvZGj4TVFK^qiv83;zdvWr*$KFtaKRW1NPxI*Oe`D34#Dfks)dEVy8?QRw;dg z!qXU+GL5h<^yICrtIBqyVsm=RJQmjgUU=k;WJL)LlN<&9+0ORYI|ElM_b2F1t(s(* zo$_?qzUAA)s3!GrvElxlq7St*?miFx?Sf;%U13x}H%4@QX8^2RRjCqT#Aicerlh(h zGd?awFjZl|mijtTUQ3@X?8ZaWeC~cz(ZAyK>q&|lrjfJpQL3G)8dCsa0uW52)7E+9 z=Gtq42s<_5d1(BoI@+uk9KkbO&DQF6>*U}x;>oH1M^Bs{st%9uOj-$-xI#tApdS_? zC@|7R$b;tTfl`nXC=5DDHFW3&GjgiNRu7F$W>$`XGATaX$}EmfZt&AupDu|>y8GZh zNG5Qa>_L-KG3U^BfCo*yx6G3DVIdFq3J>WkmoW-%_6Mkv4}`OBz&%7jxTu7v2>V zLi@35$OHs9E;`IsAJjL*M%f*DE!OCvv*weMX_w6j*@*@Ry6SidIS-v%8}f;q5b#Hj z?QCDB35CLUug~5lzx!-?(cH2G{CMi3LK#u+IqI8S$^0xjG>s1O0*AFx#uPMi2-tx4 zvX-l$7`;~}Lo<)RR68e?y!;G<$SuX_8e!F`3q%zFo;YY^Y!ynnroe5ms0U46Ha|t7 z!x#r1sCl{t_%tZZb_8I+4P9W6CkSP*?cI zdcTfib?8bK@l7bQkLSOQ)nC#)j%I$3-iASGHMU)G9R$r4bs}-)`Ct)ye|k_lmXt=B zW9oGwY77YJ7pKfo{e4d23amAirHgN#aN44t{?Lxl$raMc zI_Z>dPo}?x+X+}fKSwIh^_rlZ!Pw#eg;1SwrbTd|RSS7a(5`vn}cn`2ZmM6)6 zwK31>kP*6w2uUs#4HAX36`1+L=&@UnI&O-UC!B_KvWzx%hGRKFY zaz8Pl{VK6Ca-2;oC1cVRle3F{IdghEWF@;=r^h^6)IX&T{GIlvqT`mmpn;BUuLVS; z-Ctn|#A6xkpk9^o@1j2k06`=ilMs97jgU4`5;Yg%Eq*sD8%ahHu}2E<%uRewlJxS2 zQ%B(!6-Ux)ZLxo%O{c?SgYL}jntasko+1%LCRA&^ee>5j~!2%L#>uGz{Jii1! zsBKT-3sk<(OmYb`mjs|{61DC>e$pJPjTp#f(KUd)(U0s;iK{j;sW5Y~)4Ox#`}oN3 zVFz|VY^Ze#p9YE!sWrrs$>p*zrY1&?74ihU@`HfiewWNb1GwagRD!`2vb0oTs|ZP! zSiat`^nHmn-v1FdNO6i-8ne|HDY&w7MZ3cm85E*%H=-_>j3JV=D5izOF8$7&kNY;S zgxs-xVg1sr`W9fg;D9MxI4BSNQ4oabf+c?uFLaqNphHhOB!!#ZEO>d_Myg1pwa|&QcCjjx zx++r;X@0F))WWq#{&-bjtkITPsCnqNqx&e;E`Ii-{5M8aik4F~dOR5Z{m?KNqqS?- z@p|E19nM8|x%C9ZH*PWXfU20=*O2U2Y&m@<_PMk1d^y2QDmytyA!dz3)*y%IykLL5 zaBIeB^68zI_x`=FNTf$b+BrfbIRcBjA+9LM0%=$If80H&$e*5U&`z=N-`}k_CW}K- zwAl-CG6mzvB8PPHBBUS`JPAWG=JB!6oTnE~K^Zj8eY{>aDydR=A2i}+qjK``Pn{*t zmZz@XJ&>L};>ee)pgIssmfdj6W69>AP&SW`$Yi3gkqeR0%eD{gQVPOsYI=$8|Gm8= zt!yKgS67V4p9VGi(R=J^puJkx++M$aeL?;;H(8U5m`4ukWQb2n0w&H}6A;kp?u5JR z?w9qY+#3CW6McjD^_q%2E)VUUj56~&)uJo%_Ig<(h;Pv5arSt2na60tx125PS&wIx z<`ul60H^4I^0TBey`;~>?TqTF_K*RD3UIN!=%rrlj_qDhk#_OExK-Y!s>$Prrk5A* zGI?&gH_!ho9O-GHOY%!S#Ye05RPsvL`a$4P_o8a=@li0i{7I(uCXpU!prHsEhD6PK zB_*2iZjt(l8zqF2$SU^`_;!mJ*3FjB%ZVfC3NCW$B$`i?1u`Zw%uaVb_N2A+*hD?n z*;*#wx+vko2XRM$nOdz(BV@YX93@@AKN^;imCc5Vb|r?_Gw63#5+-epw84kdwZN1} zQB>Nh?@eWmVzC)qP%~f9bI8E72THev9Np=9PeW)%LwUShE0vrIBPp>CgFWOq-8f#H zmi=Vrow}&`%%{PY@pc8VmB~w7k?get?27eF3rA}$u=ay^adws&GE>tLr!L)B9KY^7 z+jd9p+nol%JE%bLcyvK^w9z!+_MKj>s)~s_uWPHe_I@2yiq!akm(5|oMW5LhU%#bc zZr#Hs{VN=4@j}gIPV&9msMu8;p!j_t5OGor57{br%-&INyldLXgAddaYgsWYeI`z& zoPOtJP1P$eBJvp!?DzH^=o}kSKpmVln_nH9c%pytxtiM-7pm6+u6y3addb(Wgh;F< znZ&2ndHwid95eT#NgG>6-z$R>c4xWaLl0FZS+QDGF)GdCrP+L+r}HAW!c@7vS{Elw zVCAli3&q)K+pkM%WP{bseKPFbd%F-hg2_~dhM!NmP)g|igTVe2eerIDzo9Ci>_@J zVl(&Da zzy&pn(Vbacu;3}cRc{PZUK_N6fXHg4{Bl_Hv_b`_LZX7$9tbi>`;aqHR+iMXk_Vy| z6tw{SsQp|ne!e_=D{PVR1EENV>pN08F$57gZ|61a`Sdq|S&H%;*2N!~x29d}DKhMy zdD*R8Q$D8RqCVb09c^i0(boA%JJ~eur|;Vt=2HmLZji>h=23Qq*pw!p8+ER4UFm4J z>~TS1DqwmJ`kd>p1HA>Tg$JKJ!95|3y1hXzWwR>tz7qVm>vezKj4)z?%h z-Dv!XfrNZQi=~j8iC>A}I$8&oj$v%&%Q`5Qk*w}VQ^wun4Y}guzI-u#i@J(lmUhtq z35&bnE9E1%(ma})&8uk3qEFigSymWf1jLRhh`LzVZcJJaj~_HyjZS!^Y)x+%#%I4L z(tRJUN*wt5x31&wC3kWOj+|dAIua0;>VReMelY3gNWt1DWvT1_qRaqeB@vk=~RTCK2p$#LPASNp*EIDM4mX=tAX@7jfqWG z_)d5aTz%}?c{&+8*J^l9Ww0)K?O_oMon@n26DlDObURkfK<>mtNnVFHJk1{O^Wb&c zbGMy--(QB^?P+3>1ncf3n=FM-O0F{gCI*1!<9EhT7_mKa`klpMK}`HOwy6LZzd{$S zIcO2!fNlICFE!aU^`3ZKUcuqe3+F2238%B9R8&62y+X%gZvl@m1Y|7R<$WWAcRObx z`VOlL1|~~*Kz<%K9GNE`jVr{t2}(vF18S`dBRdR+GWEMVvEFu~=9z5&i}AOhUm^vZ z_^T^ha4aQLKmq&K!DSyF08Jf? zxYkwl{O$=(<{sWmYfTb)Eb?-&z9@&eON9qU|FVvZk_#pI%>2R4lPjfzg;-~|8n3s? zRBE9);o>w%N?JCCdO-n4V!9CwZO_7(8$$_VnlC3=srviY#l+# z+&mxE!pK^_unjw9sSBSTqMS3yV_2ex&{E&L;AQhrhV2NdL8h>pzIB zLJyW4J?+MB240?TQyQB^J2<(et258Ae%T%_b{ynq)F)#IZx0TJK{FKo{2m%W5hp-; zke`HOYU%?!+Uf=^gX%KFlcKeOaNZ7=`?p>qnA}@pNf7DVoQB93LZ(TZwgv<|x+sa( zG|^Yvf>qbXr%uZw#L2UtCELOG&3hg1ZfQ}qqO6hx;8|JVyQlx|E0WR7lAbhRWFNdq z%9NDo;h@|Qx);@f;3NA-ZOk&#czqmNA%f~|dS=c6t)=?lRY1u|aev2xmtd4kQ8-pb zbtTZ!MhbJ_E`?cJT`!@i6MGcO^Q)zMv|pwq!l)+p`PnXXv1Z~rzb8Vjvk@l$hb8Y{A#xHwYgAE)M@(YQQRe$VPK z^M+rS417JQF0M{Ob_ZHQl&+k}Cvb!ofRfp0s=RIy_}%OulJ|#HsKkBWZ`b1pc&Jf-vw_|4@m9Zj25(kUgSigC0kKn?Blz8Ty=Poy2{&xorI4VN#ePQi zG6T;%P+1cMW>cUi@<7I&_gYTTtCGt@ZPD4hwd6LJ4B27YdZAzk*|Y~d_3Oz6;oX2b zAJNF3TVhP%;WW}+X|Y1+SkZ9JTf}?xVRIZVj5}{XzdNqP2fDaL2w};y&&aSj^7VHDeqIjy?YOD{`?A4m} zkUPcX#+ea5*E!u#)OOO?@!CKlXFB$m13(IItPWMTnjZ{;O)xt46d_qTnG($nKr~`$ z7KF@jO|u_+CNrnMd#`F|-@mY3@YQdu2e8wxpg5o^Oy(XeF%{7cLNwhW4BNph=BV!) zoaVSVVwRo`zVMo>zo2X%b}5?N9(pM>X4($8!=OZJ?L;WXG|li zZD3Sq81V`SqH`o3eEOEu+93J!jUsWZ;XHyig<`lUg-PVwf+;1KZQJrvJE)_I-48bx zkSA9p=i}{bHi`W)T%6oc_|8*{sN);X{$BHbk+!`ELiC8uA~%UsHQ)^SE#4wyn~l zF~f36{Q1&~a-rBvtnXxpNvsWwYEd91zYzM0($u%!k<`yCL{X0EVZ_8}8_}M-HZe{x zawUGK0%r61{bNx=CL-XODZ5oF)xr&>H8k1m1hG&GyC%@>+$BJib5*3K_E%|CJ_>1A z-6^#C)wi~`8FpFMOr=3)s7&$dBH{kY*|JwzO=(*#`}5h&1(AByBrdjaz_^hm5&^Y0 zOjEtubrfwT%%RKWcc^yHPZgHX-NyJ({Nmr~*#ZFhndX1Ta9|ZfEJ)rbc4%Xm-F7=6 zgpERkRD_Qu>M?uJ_@kaov(|A6oU&i((VJ_7ts2-luJN=fw<_{vW{jMzCla8;aYdb; zbqH9QlMzf7?7%J{b#whI(%yXY_ugz};S_O@Q9Sus5S@DLOx&_Z6SK_copG75OJ@qR z$mmE@epe(#YW_E8$#}d;AdwLq_PzI=zNY&tHsVh3c)n~1K@Y;EG!-#B9V{HlQD4^L z7BZ9a=G{)ArwsJeWp2v&wFJjb{;F|vhWZN2x^8GuCxAXd?kV$Zx@QZZ*=+fvxrB{0 zJ^8+xSOlF#LUqCHr#Yu3?aY9uPtMF9r_B%RQGGWw+dsW8;6eE{WrG+7Cs#`*}e}2hW;zuW-!nLHc!~$khtFEoU0fKg1&!7n$dgZ zoiV$3H`CCB%?sa}j!Ei;O zc69D2jA5GJ!JY-;E0A7YTq8nmD-=^2yqWG@X7zKFCYRvSmF!cuokLH}m8|8EGmsCx zcW8_-@sG6EM7gGrqu)dpYJ}53XbS~o%?*4cmZ%oU!nLdD9(Wk3K2jzALSJE}F6;SZ z{8N2*=q+5 zNAy&Z6LOxhM{3D6MQ2T4i4ejH-hInCV8GiRw&%!WOSCJ|y%+;OVw^*iOp zKYp_pl6TtU5ynI27RfInG&Oy8B0wvo<~#Ub;go1Ben;9ul#n-WqL4mNydQ~Wptp*o zsQS~H(2EZ3?$0OR(M+vsp2uhPo@(4Tc+UHz{_t{^rW_b*?>cCXr3X&Te+$HAoh8WiQz30J`V8f@40~T2xB3%%Ko1(5$^=j`#KrPYiA} zz1XRKm8$q7))8%j$;b537rkwhyfppe^~ADJW$vOqK`tA`O3??}#Qk4;=NZlB1Hb(w zf*^<>MwKLD?^#t;Vz1WTN)W5GX0@~xBe835S|j$T*;Y%7(wZ%5j}}FZ>Y}t1|M;Ef z_5aoLynF7qIp;n(*SXhsT%YR+l8dR5p1!XNA>+V**niTjkUQ}7{8YX1bM2Q6UL_(XEnXRncdR6*tE^{z_V* z^pwh`a`YpfM9dU8A7xA*`=A#)lhsWDckYHnM*XHNSHa~j3!$p-Y)B8?YH03oY}6!=@Xr||MAB2eqWO`(W` zAHsEUhIhZn`HQE{T)v56PAmKVXjK#^Nh@!xAt2m1J|ylx^D{sjGoF`R_j97UU-Rr% zrG`j5qh_d-7k^FnApv|8!x`th0vuQZO{k@=8PrwnGN=-8^>@mLl<(&keeCpLkS z0||2sI%fr^^FF+kU%#auW^;$rEe#t$ZVpZuy8j?})Bot2qOlMc9b?pz4vax(LQQ40 z(FZ2pIPT#);=OnB^SKYLU0#j1Q+>K3Fyo)`dEbrt<-ief)@RZKF&0k6s#eD9;=<$E zrX-JE5^=3s7$CpmVr`(NMpj$Pl4pJt-e8x_{+{Vg^Kq5VtCgk4W+9AYQgZ_|aOLJ0 zSKvhesrd_VGNo^Hzzl+utjveVIf|tYFX*)9cq)ik^K+>*b*Jgd>F-kh!cMx1Tys9= zOC6^L6uq!Hm)yq-K)Ki&2Bzx8@jOc=r@YTU==AiP_lkSl>59xC5+0;vJp2!jLlut7 zhs1w{-PT+-T#yr_hpfs`-;llC0tphqd(4^gYu}h1xGg4iMs1e>e8{ZVH23m-^`;3T zri4jpZ%x>q_n?Le=XTHw*{&HKlO_`H4{uNnJU*(GHoE!-Me4goDEWnL~KNVNw3RxLfCxn|EBkVT^ZUm3%s8 zD^E|p8I{e#Z8HRAc|EidLK*e&$Cp#aC;bXJyrN**H1cM29Tap+VZ&&3^C6ZWyLeO0 z-?4j&%PrH4)*yD~SdO>zQ*inVX(xzoc?s%LL5z596@Vl8z6WI@7FQ1o6p4hTm2mRA z#@tW@)0BG&7t2)?)%&O|UyNat{G7u zC6kLeF2W`<7`|o)_@^M{gJq}a#~xt`ZA=jOSA z6eZbWiYYt7!aw^r_<0Zi&Ps~ zlt);WUA=K+;hYli8bxWJckE28cyt=zbgj`dE;sj9{?sbc@Fxn{@wID^tCESjxW6(4dtXhIyMxOuI}>gb0J_9I9k33U#Vzyx z*I@id?aVgzF4NOXcElv{72t}dgg*6Q0(H{?{QPvnJYgW&XX4s#1iDra+}ywomt8t% zQn!hX2sS{n1NSupX3EJLond>8tIo!5O6j-f;1C^ zwt+TqJoMiq(?Tzi8f7gl+2(#2(-q}?FO@3s?A|trFY?0*@-KFL_IcQNTA$`yrC%Q( zmCer$oqOS5@Fm1&`w%?Ptse&Ms^)JV#;JId=S>t08{$p{zb9)FyPe9*O9YI3{fItXMgIv$T~c9Qq~fY)E|V@@m357W z7)u0D!v~AM#a`b_O-{;&&V6B$_?>jso8H6wIM5~2wEwx1Fqf>Uu1dD?<`)Rbv2Rl; zsEYSxjpOOflX+#we8kRagJPLJj3CzQbx#Zq_3W|cNUHwW*!2sNut9WPaWl(9vu+YUYWY}k^PG(lAh$}A>@%EF?euY^Nyr1m{TD4b3b)V zv_bWUYAZjvO^~%DEA7P0h^k17?61|eQe!0k)PLoV&2apD3BXqPJS=$hGZGj-ocpsY8`ZKqYlk9HtqI+qi9&PB3| zZ7x#IAWrU8dH!>bn(zw|wpRuxnh}Hg#1nbl*#AC&spfw*UVEx=e=eh52*?TsKoqI& zl};q_FLlo80hR0zt0ruoXEmpm)=5o9(}dc_fJ=Ixg1oD{Ii2|8>{YV~7a%%`$iYRA zZ=JPt3RYgYi+?rYUwE2OJT9#@e(sfh&sdF->T3tVjJ~qcQ1TnNc`e=hc(SOrrLG`N z3Oi8KMHHe-=U}^rF|Di7RnKPob@5vb5|fn7~|l zIV)%+Xt0iP84251hVk)$XrdAt6Q+L3A$eRli9TUEh`$O&F@C-Y=>kvnPJZy^uTT9d zWy%Z+5h7LM^w#y!PBF@F4Q+ilZje+VI(JerA8Bhf0)@6*GebU-YcN zxD{`bBw90*GJ86kwWQLk<^Xf31IEP643I1fxKumx;H_vk3gv}y85&W;uk#w}6uxbc z*?2=^sM#`JDN}VV|NF)J&7+S#?OQNj|K9v&ML$)H9eAB~pj%FvF)fO*(AJlkIq;2k zn+_N2&gH-S=j3qcT4m3AR(ZcDaYP=k~Z`wjlKa41PSExqR3(p@Sd>A#%N5GLE7n=TOTCA zZB99lZw-e@U$FPJ+(rJfYz?>!Mj%S@2D1s|Yr5~y#D0Ftc_n&Tfq_kGfs1ES$Aa$dY{~+#V5h6=Sz4e2!ZUuUaQZhC>Rm)XwY;c+DS*LaZNL2jvD`U-z2i zuB`L^7D~Q4urQ_i$z=c0u|_JFWv-5bfwn#}l!Y8s#lpqG+@;8n0Rep%Nce%a3O6mg zuKW&t>7lOYadq}mGHdc{rEis>N8z6|?&p;@mx)A`wq0<_`CZ$7J+aw|i%>c#7>_1O z4P_`c?V*R4;KE-%1N1_{{Ax?L&&sENK#)3o`ZJWu`35^&R!2)g_>`#Te^0<~DpF@3 z%E2#6Si{B6s;D%={=S&kuRhv;YFP`Y6kx3LT?`jHW-y$l52*p!dV~^GCiII9o_FZm z-$=S9XBy_~L#*VnzVH7+sE&U)kj}<~puqVaJaW`SLjZto|H!^J^x%R03;2Ad%v7^` z1DExqucu|4LMtK&$Kq9HY6Mx|scC4Z^6(?!C@V%k zR?3UkR}|r61KR#VZo8H4nEwnFRAVe3gZ&>Wmi02=a9A!L$Pkx9SjV`P(2}oH%O^g~ z8`K4`5>1vSUTZ6^XYNlbeV*8a7;o0e`(>r+m;gC&$vEA@l_gFFwgAAg7#7_YA6<#i zxQC)^07OK4(2AppKM7{C*sQsT4ZXI+?eYnqn{H+xn>${io>Z6y-Bxcs6tHYwVw*6; z?AX(j$L7N&{v2I=X($^U)pM>#YvIFG$8fiwu_?1G!HeWANhYPLq*3;(B`w?L*!Fg8 z`%EmVH$VH=a*n74eouh(pT^16H$#r`@#+P9~}WnxA; z@$KZJvcy_%grmIzPCoypPuHv~FKp~@Dp)Uel^fhGhBx@J!eLl+S>17?j|I&H7JzXg zz(({#F-d8x>Jm?~K4zWWcGN0BpXv*smQOgK{i2$%0t2_x8FK@O#xW9xCD$? zOtRd>W{HnH9D4PAisSB7f{E@NQJc9u?+OKTciHsVz}>}P7M3yNAGx0?4wu)d%^S(K z+mD4yKb;g8|Mi`@>L;DX4byj15qn!tnXKDrb1U*aya^^Mz~so1F}Wz*F8)`#fV<(+ z2Uf$4t%pe>Lk%Wam9BB_%vBix+r&#s$N0lf)i)OnZ%uwu*Lj^8Hc_g^X_ve_iAhsj zlCYvT$|9jPLiGK|E7O$o2fW-lje1;v>Baa6;XK@7PeWur=pKHZIu5SDzbxCGu)Rn@ z#AKy_J;>Q^)~kMSaBoQfFq%wH91gm4DWt~;YRQW{T$t1FThEv1$>(g{fv}cf_uOij zd1POcUEevpLAW`e2}j)sGJ#S_R@ANq<(xC-HR0?H+1rROp`&gv?oo(b0T;W%rUmp) z_lwxWZ;rpkxD&0_{fSBpa4f`9uLu)BSZW=d%g&TAm@DBpVw2!<{!uiLa`%;B8iLjx zX^Q(@5;J^NZ`xsZ=-MFC@a@_+9xom4s*4H&fVA`GBPxGJNoM+Zju4}ezdn-@zoTAgzkXhx-Jb!x zWeNtB;6oB)-&&%SMPcGkd!=-YA0v!R_heMNewyj5s02>3qk6Hx~Pz>qYd%MhhW{U*BNIh_0zI$OA z!=E(r0P5Vmn!m&{yPS=jk1EOtZsr$`_HweaziNF<=_DSNkW8tS_Y0MAwg8ME)#Z`cp{69Qh6f_gWd|s< z>|iSA*$MRvPr?;_>K`?{fz!sv>4t_kGzoKWvhi!0M*Y!0pV3=xTJ8n|aPPz_GR7Ny z&bP6<9wI;Uq`%n`8y0^pJ~X*mecve1J$6^Aqr z=g%4U&mqr*qk7nxI34c9^HyoR9vqR?@_=YN-(015qQFU#9jOmE6uVM^?6J$xiz-V5 zAl@VL3a!1EN)wNR$%Jn{$?@WKDE4WBwd6SIYnU}G2A*`sws&60BpB?XD;2 z1qbxm!cB9pz-7JKON%pUC!C-YMM;+g2=_Lj!5FI~ZdRy9X8k*KcP#P#BIAXve_7c( zM-M-hOhA_|?4Q zHNreFtk*(-QAQ&u{MkYybMx40zBzPE)VTq$2fMe#W@fgP6HrX~TWMUq2ni>lXBqS-cB)f(Tq<^M6pCBdKXQ$KYB>=AyE>#gz#_W)RAexI;X9K; z=U!a;y0c8rGNTzxfg^yNi|w<-u6P}a+jH!^q?}O1=|Vkj6KsS`FtnZB=9k%^%%ZE| zPsl==UBvtAy}}$t9zz~m@6qpNT$mOyTH|cL|r5_^UCRi~GC87S8>6znM{~B8Q zQ+WUW-k+8vAUU3?S6sZ7`z;ZXi4)W$A&Y-RSz@w2wM~k> zc(wSgpmV3?Nr^1FWkI!hK#*n-TSq|4;qjKw?#4;R6~g65S6z)7#1_N&#DdHfb^X=T z2jpsIBuG28zwcpRiQf5@U-{v3$;qwbqxrw@PqtE8PB*@vz9OaCO}1CVfNt@B^6%-G zoC!zW(l$cR{f*@7*F_hw$_ZYCWF}G>~3Fl+EPEyKKr2=9&nOxFw-!k$yW7? z>QZdUkpbRnGE@|~q2EaOdP0J4w)v>+&x&06_=E>i350ut2Fp{Wk^4CxnyzoLI_D%E zn-gXDHECAMqr_qLcha1XbR}T?!jhAHy~P2d!HWA_Va%ddP+|jA#eDqyl$5W9#QHV$ z6gkaR)}c+OhiyQyI>8#=WDEd=_E%;oqoH=i>g|N07-(S?SfzE*xpvZytI{c zy@I){i6{?vWeSYd*q5%=`sV`+sgS@yn}s>&!_q^xI&Zgoa)^QnrDYmu!{a#E%(MT5 z1A_GV=l-tq=Bkw>GRt~cFwE#(Uq|{@9a5W;U6jHiv7ns5@G!KB`i@F2iMFrNn;#H!CDG6)KL=X_>UNz&zCUQcnDG2^?%^iW z^BYYEhdnwH(_qbjfhT>I#dA1aZ_XH}fn4ayN^%=;{%Yqo7yd~>T*cI+5RL)l9egkE zRpnl&oI~bFAVAj}I;iIy0@_9O>AlTUc$>?9&Q_CGI8aVq>9d;gF1CVbG!QucU>WKb{J)nBM~HhUv&_Q+(5byJhjFls^Nc*Qu@I>vg?n!W{$P zqST31yzDbAl=uQRo`FI8Dq%I(YndiaLXHeoR5g*%pR=^CI>2cPf=HtmrFq@`IWC#y zKp6(u#otmVSNr!AH@0X!LT+VQXZpf5+n>qyJo~5SzXdwaKlQLeCQ$_#r;i3PC`hy*y1a+w1{IB*81T+F0$j;pht(I()06TxIdE%$&W&}C7*J}js3>z{L2%D^AiUC9_PdD?;6s0Syeo~?AQ!H+~s20J_xpt6q2jw^UfXz zytI5&!rG*+TgT=tFPLgqTLNen230+KK*GPsZGvdfTnBgz=HUYZN}3t9UWi09yyUa< z%;1iGTpm>R``RTwiN`D5N=nA#+owl%0OW>Dlr3~5L4IeE+scmqVGiJBf zIU6ccr%?m{{HvU>7(`JC|3)3D`43$CFQ*awC1b`Di#*@{qqVk=8`#`8K@c8wP-_~7 z?T+BW#R!r^3|~`o z1X1x(j7U+&;{ME|Vx$UYT0N>pA;4oc;obw5lAbzjo8nDELiy9v@|f;P*K0gkZ^n_t zT^1mzN93z!^_aK_TQRdJDplgfPxmw*K71|hE$SVGLTVd#oHCCQrZDIDMRp1?3xx7w0)r{g67N zp70;M6$^&(WtA0GZN=|uMSQ$4i?sdFON@QIxMHNTheytSOu2N?o@uN)SXIyJd3{rK z4dV3W2P1q;Dy)G~H#SaZ<@Tt*X+Q}RpM$x-_4MbKazjLjUTlB4Ty#n&-5fsmaeTJ+ z@*Y_)XZlLTTusKt{Ntl)T3=5~_oDmF$`Bh`y$P#QPXAYo;i@}-%5P2W#*P&g}!lh5V$sUoEK z0MTD=P&-BJPl_yNv|IYMoD**dMX=L%cRvMIyLkHqeXarJ-#iH&^8S7%9JLBCgU#T{ zROSXMVOU651ajBRd!2$W0VGJM^u`5W8UYOjrdwC0(z?Z~jtB8P_8sMZp*29GH)_H8 z;JBfVK-WW4-7%i6DgaIA*EG}a?Ot2R-ZAc8CjoDBKxDi=eF;0f*U8CcaBD7N0qL%i zk7)w4@CVV(J7@>uc`w~OM`z2T?HVWq;VPFGp*8sUc_*Q9RklKNNh>NbkhC!;p)`f(lweiWiSJ-o7b10)OkxaZq_PRy3iGEESP575%fUiOpbH_l?E2GX$U zYX*EN5Dkb9l^^H$dilWS%KY=*98Y$2n^8gVC~XO#ME?_%mmt2g?E`28OURWQu zNJyc$>ss;)B`~-~(|os(VkDvB_NS2)-xLFEr0(qE9J+0}`u#8}Yj{c%y;cd)Jp$y)z|I~?Np`baACb-jj! zsDhHLt@)il=b|mT{j^F0Z60UzsC^NCui@*Jk>G#&_it+RajWHseO7&??lHu|lcv}B z5R`xtR|-U$zch0kQv?gw<_)jY8Zh2+|c^4!D>*KeD70N*DawuB#a@6l}=M1R@D+_Tdczv=Fp|9{dN6o zLGVM*JpM8;u*83}b-F%M3!v*dwq^3!@Z)|tk`@=-d4n+bl34ruOgJhelY_|~|5ZN@ z+ii4}lNx&e!w64pFk)$;+f+*^L~^k(flgY$l5X({peL{$2fA2Lt8<#RE0%$ z?O3}}yS1REt>NN(kE)ZCgP}ZtxN_~+7kuJ#w5eKV|c!jDExFZNyEd6=vJ6x zOpBkammd!ggqu;;6F*^LXYUz(+Z;%&Wie&y?`c0S&;CA*6O(XC2NP|DoD*3+d z6)eNUyOgAXAqH3w6|e86dHmqIf7b(ygdk53&r=B!ObjP~?oqRydoybKrk+Y;GX~;L$c)jv z8|ooC;?Yh|3pBOdA!|1?1eBM@3D0ISXeOMdjfq|8L9 zdXb5Z(!}{qPWR$njmU~(%{WXH5V!>@H|Qo6tD*y%`s~}Z`r_2z(JENVnM_HYK5iJf z_NtNpm$|NGJsc-c&_ri8hNv@s+fQ~8XT-_Zg`VhEJ_%Z!=;vc|0|4KNs%RTSRUUWh zM~wM7)Etd_EQ+aURBabu+R`{OgMU3h$P)e+QanW@v_zoF~@4H(U9U^x%Cz+y7LaSeH^+Z%=d52DW#qrcwwhm zWj?JHOr0dgM54IwDk`E|XeNl7F>Eaov#u;%sa<$n^mx-}zL+XZAD^hpAc^RscAhQ% zisU(&!IoQ_H13j*Z@%2#i&QXdDiD02oB)VVMM3({gxe*8bm3FWWO$?6>--%xS0jiT zHAe+wjG_V8?sZYLK>}>VC?Qr%GT6`~&1wGoJ5I&>o>#xMF%8g{vL|q`;&dY$yYBLu zEqX@zvvpOe>=695r?}D!V!b27lGUQMQd3`A)+0V>rP%E(CR(}Mk3P9HVsp$0 zTrHkmQWjA~52PU#ZFTNr$+1Y7f9aBJNo{nLBEQ$O?6pL)3BRL>@Qt;{C*K<$J{}9x z5j!HKd+?OZK3ukw*}d+YlnOxTzKESgGV|yA;{_pneDR#vk~F1f{q_#98!6!?cXHG!ZBl87W#)>tWa58zQjC3in(*^VMsKAI^mPO9Ua9?Uv(tMYT#Ln1$$g7`WA` zbtgVj<-vAGW|E}y%QdaXjtOL7071TCe1BvpLuq?_=$rO+pD88Z4~Dh3dhJhmrYL3k zFFKk(9XlQc<#{?tUY~q@E_b%430Z=Ina(`-|G@37bQmUG^XU-VRq+6YL~!6MS4L+5 z0025W^{t~R4^-E_IHkWUpjfo3*ZTZana?}+I>8QPSNuPxZi+iR=fcS2mh^93%enE%e>1%TwsHqj>MyT99XI#;_Hd%})tl`i&&&Mt>2s(5 z9VZ2aj3$pxM7)2+FrTlfL_{K~o*p8O5D!;Ft66f|UjK1@sX@pXYoendP3?Hq{IAF9 zQR*4&T>IQih*~i~y*vLaB@W2mwe9@34glgs`kX5M0{pKh`2Rotzg6J$2=4D06+@$l0yOjibMba{D0#g{147@hT;GK literal 0 HcmV?d00001 diff --git a/public/sw.js b/public/sw.js index f203cf0..1aa4e30 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,5 +1,5 @@ importScripts('https://storage.googleapis.com/workbox-cdn/releases/7.1.0/workbox-sw.js'); -const VERSION = '5'; +const VERSION = '6'; const CACHE = "deepdiagram"; const IMAGEDELIVERY_CACHE = "deepdiagram-images"; diff --git a/src/diagram/diagramManager.ts b/src/diagram/diagramManager.ts index 01d79cc..768cd79 100644 --- a/src/diagram/diagramManager.ts +++ b/src/diagram/diagramManager.ts @@ -32,19 +32,11 @@ export class DiagramManager { this._diagramMenuManager = new DiagramMenuManager(this.onDiagramEventObservable, this._controllers, this._config); this._diagramEntityActionManager = buildEntityActionManager(this._controllers); this.onDiagramEventObservable.add(this.onDiagramEvent, DiagramEventObserverMask.FROM_DB, true, this); - this.logger.debug("DiagramManager constructed"); + this._scene.onMeshRemovedObservable.add((mesh) => { cleanupOrphanConnections(mesh, this.onDiagramEventObservable); }); document.addEventListener('uploadImage', (event: CustomEvent) => { - let position = {x: 0, y: 1.6, z: 0}; - if (event.detail.position) { - position = { - x: event.detail.position.x, - y: event.detail.position.y, - z: event.detail.position.z - } - } const diagramEntity: DiagramEntity = { template: '#image-template', image: event.detail.data, @@ -60,7 +52,8 @@ export class DiagramManager { entity: diagramEntity }, DiagramEventObserverMask.ALL); } - }) + }); + this.logger.debug("DiagramManager constructed"); } public get diagramMenuManager(): DiagramMenuManager { @@ -71,6 +64,7 @@ export class DiagramManager { return this._controllers; } + public createCopy(mesh: AbstractMesh, copy: boolean = false): AbstractMesh { const newMesh = newInstanceFromMeshOrInstance(mesh); newMesh.id = 'id' + uuidv4(); @@ -109,14 +103,13 @@ function newInstanceFromMeshOrInstance(mesh: AbstractMesh): AbstractMesh { return new InstancedMesh('id' + uuidv4(), (mesh as InstancedMesh).sourceMesh); } } + function cleanupOrphanConnections(mesh: AbstractMesh, diagramEventObservable: Observable) { - if (isDiagramEntity(mesh)) { - if (mesh.metadata.template != '#connection-template') { - mesh.getScene().meshes.forEach((m) => { - if (m?.metadata?.to == mesh.id || m?.metadata?.from == mesh.id) { - diagramEventObservable.notifyObservers({type: DiagramEventType.REMOVE, entity: toDiagramEntity(m)}); - } - }); - } + if (isDiagramEntity(mesh) && mesh.metadata.template != '#connection-template') { + mesh.getScene().meshes.forEach((m) => { + if (m?.metadata?.to == mesh.id || m?.metadata?.from == mesh.id) { + diagramEventObservable.notifyObservers({type: DiagramEventType.REMOVE, entity: toDiagramEntity(m)}); + } + }); } } \ No newline at end of file diff --git a/src/util/customEnvironment.ts b/src/util/customEnvironment.ts index 47b9cb8..2d5cb50 100644 --- a/src/util/customEnvironment.ts +++ b/src/util/customEnvironment.ts @@ -10,6 +10,7 @@ import { PhysicsShapeType, PointsCloudSystem, Scene, + Sound, Texture, TransformNode, Vector3 @@ -32,58 +33,36 @@ export class CustomEnvironment { if (loading) { loading.remove(); } + this.scene.ambientColor = new Color3(.2, .2, .2); const light = new HemisphericLight("light1", new Vector3(1, 2, 1), this.scene); light.groundColor = new Color3(.1, .1, .1) light.diffuse = new Color3(1, 1, 1); - light.intensity = .8; + light.setDirectionToTarget(new Vector3(.4, .5, .5).normalize()); + light.intensity = .5; const physics = new CustomPhysics(this.scene, config); physics .initializeAsync() .then(() => { const ground = this.createGround(); + new PhysicsAggregate(ground, PhysicsShapeType.BOX, {mass: 0}, this.scene); + createPoints(20, 20); + this.createBackgroundAudio(); this._groundMeshObservable.notifyObservers(ground); + this.createWalls(); }); } - - private initSounds() { - /* try { - const sounds = new DiaSounds(this.scene); - window.setTimeout((sound) => { - sound.play() - }, 2000, sounds.background); - const effects: Array = sounds.backgroundEffects; - - window.setInterval((sounds: Array) => { - if (Math.random() < .5) { - return; - } - const MAX_DISTANCE = 40; - const sound = Math.floor(Math.random() * sounds.length); - const x = (Math.random() * MAX_DISTANCE) - (MAX_DISTANCE / 2); - const y = Math.random() * (MAX_DISTANCE / 2); - const z = (Math.random() * MAX_DISTANCE) - (MAX_DISTANCE / 2); - - const position = new Vector3(x, y, z); - if (sounds[sound].isPlaying) { - - } else { - sounds[sound].setPosition(position); - sounds[sound].setVolume(Math.random() * .3); - sounds[sound].play(); - } - - }, 2000, effects); - } catch (error) { - - } - - */ - } public get groundMeshObservable() { return this._groundMeshObservable; } + private createBackgroundAudio() { + const noise = new Sound("backgroundNoise", "/assets/sounds/noise.mp3", this.scene, null, { + loop: true, + volume: .2, + autoplay: true + }); + } private createGround() { const scene = this.scene; @@ -92,24 +71,23 @@ export class CustomEnvironment { height: 20, subdivisions: 1 }, scene); - createPoints(20, 20); ground.material = createGridMaterial(Color3.FromHexString("#aaffaa"), Color3.FromHexString("#111511")); + + //buildAvatar(scene); + return ground; + } + + private createWalls() { const color1 = Color3.FromHexString("#ff9999"); const color2 = Color3.FromHexString("#221111"); const color3 = Color3.FromHexString("#9999ff"); const color4 = Color3.FromHexString("#111115"); - this.createWall(new Vector3(0, 10, 10), new Vector3(0, 0, 0), color3, color4); this.createWall(new Vector3(0, 10, -10), new Vector3(0, Math.PI, 0), color3, color4); this.createWall(new Vector3(10, 10, 0), new Vector3(0, Math.PI / 2, 0), color1, color2); this.createWall(new Vector3(-10, 10, 0), new Vector3(0, -Math.PI / 2, 0), color1, color2); - - new PhysicsAggregate(ground, PhysicsShapeType.BOX, {mass: 0}, scene); - //buildAvatar(scene); - return ground; } - private createWall(position: Vector3, rotation: Vector3, color1: Color3, color2: Color3) { const scene = this.scene; const wall = MeshBuilder.CreatePlane("wall", {width: 20, height: 20}, scene); @@ -122,6 +100,7 @@ export class CustomEnvironment { } } + async function createPoints(divisions: number = 10, scale: number = 80) { const scene = DefaultScene.Scene; const half = .5; diff --git a/src/vrApp.ts b/src/vrApp.ts index f34876b..a8bbcd5 100644 --- a/src/vrApp.ts +++ b/src/vrApp.ts @@ -29,28 +29,6 @@ export class VrApp { }); } - public async initialize(scene: Scene) { - setMainCamera(scene); - const spinner = new Spinner(); - spinner.show(); - const diagramManager = new DiagramManager(); - await initDb(diagramManager); - initEnvironment(diagramManager, spinner); - const gamepadManager = new GamepadManager(scene); - addSceneInspector(); - const el = document.querySelector('#download'); - if (el) { - el.addEventListener('click', () => { - exportGltf(); - }) - } - if (!localStorage.getItem('tutorialCompleted')) { - this.logger.info('Starting tutorial'); - const intro = new Introduction(); - } - this.logger.info('Render loop started'); - } - private async initializeEngine() { let engine: WebGPUEngine | Engine = null; if (webGpu) { @@ -73,6 +51,29 @@ export class VrApp { scene.render(); }); } + public async initialize(scene: Scene) { + setMainCamera(scene); + const spinner = new Spinner(); + spinner.show(); + const diagramManager = new DiagramManager(); + await initDb(diagramManager); + initEnvironment(diagramManager, spinner); + const gamepadManager = new GamepadManager(scene); + addSceneInspector(); + const el = document.querySelector('#download'); + if (el) { + el.addEventListener('click', () => { + exportGltf(); + }) + } + if (!localStorage.getItem('tutorialCompleted')) { + this.logger.info('Starting tutorial'); + const intro = new Introduction(); + } + this.logger.info('Render loop started'); + } + + } const vrApp = new VrApp(); buildQuestLink();