From 4e26c2da9839c5ddf37eeb69dec626c089f14924 Mon Sep 17 00:00:00 2001 From: Justin Cichra <1342149+jrcichra@users.noreply.github.com> Date: Wed, 27 Jul 2022 21:47:38 -0400 Subject: [PATCH] more contexts, update readme and remove warnings --- README.md | 64 ++++++++++++++++---- fluidsynth.sh | 1 + gui/src/Home.tsx | 20 ++++--- internal/client/client.go | 21 ++----- internal/player/player.go | 107 ++++++++++++++++------------------ internal/serial/serial.go | 7 ++- internal/server/api.go | 38 ++++++------ internal/server/server.go | 1 + main.go | 9 +-- profiles/default/channels.csv | 17 ++++++ profiles/default/stops.yaml | 87 +++++++++++++++++++++++++++ screenshots/gui01.png | Bin 0 -> 98867 bytes wfh-organist.service | 13 +++++ 13 files changed, 264 insertions(+), 121 deletions(-) create mode 100755 fluidsynth.sh create mode 100644 profiles/default/channels.csv create mode 100644 profiles/default/stops.yaml create mode 100644 screenshots/gui01.png create mode 100644 wfh-organist.service diff --git a/README.md b/README.md index 2983b1f..89fa0bd 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,6 @@ Be a Work-From-Home Organist. Written in Go. Send MIDI over regular TCP/IP to your local church. -# Disclaimer - -This is a work-in-progress that is constantly evolving on the `main` branch. For known working versions, see the [releases](https://github.com/jrcichra/wfh-organist/releases) page. There will be breaking changes between releases. - # Introduction This program listens to MIDI input and sends the notes over TCP. The program used in server or client mode, or both at the same time. This leads to some interesting use cases: @@ -23,38 +19,82 @@ This program listens to MIDI input and sends the notes over TCP. The program use # Build notes -I used Go 1.17 for this project, but older versions will probably work. There are external cgo dependencies so you'll need a few packages from your distro's package manager. This also means I can't easily provide cross-architecture targets +I used Go 1.17 for this project, but older versions will probably work. There are external cgo dependencies so you'll need a few packages from your distro's package manager. This also means I can't easily provide cross-architecture targets. -# Usage +# Server Install -- Download a recent version of [Go](https://go.dev/dl/) for your operating system +- Download a recent version of [Go](https://go.dev/dl/), [node](https://nodejs.org/en/), and [yarn](https://yarnpkg.com/) for your operating system. Replace `VITE_VIDEO_URL` with the URL of an mjpeg stream at the church (if configured). - `git clone https://github.com/jrcichra/wfh-organist.git` - `go build` +- `cd gui` +- `yarn install && VITE_VIDEO_URL=http://localhost:8080/video yarn build` - `./wfh-organist -help` +I've included a sample systemd service for the server. + +WFHO will serve static HTTP content under `gui/dist`, where it should have compiled the Vite app. + +Organs are configurable through the `profiles` directory. `channels.csv` is a CSV file which translates messages on the client-side before sending them over the network. This allows your home organ's MIDI channels to be mapped to a church's MIDI channels or transposed. When remotely playing at different churches, different profiles can be selected client-side with the `-profile` flag. + +`stops.yaml` defines the stop groups shown on the website and byte sequences for each stop. By sniffing the MIDI output of the organ, you can build a list of virtual stops. The example set of stops is for an [Allen Organ MDS-1](https://www.allenorgan.com/support/ownersmanuals/033-0050.pdf). + +The `default` profile makes no modification to the MIDI notes. + +# Client Install + +- Same steps as above, except node and yarn are not required. Only `go build` and run the binary. +- The client does support listening to an expression pedal sending messages over a serial port. Currently this is not configurable. + +An expression pedal can be used over serial. Just specify the TTY and baud rate. Currently the intensity is non-configurable, but you can modify `expressionPercentage` in `internal/serial.go`. + ``` Usage of ./wfh-organist: + -delay int + artificial delay in ms -list list available ports -midi int - midi port (default 0) + midi port (default 1) -mode string client, server, or local (runs both) (default "local") + -norecord + continuously record midi + -novolume + have WFHO control client volume -port int server port (default 3131) + -profile string + profiles path (default "profiles/wosp/") + -protocol string + tcp only (udp not implemented yet) (default "tcp") + -serialBaud int + serial port baud rate (default 115200) + -serialPath string + serial port path -server string server IP (default "localhost") + -stdin + read from stdin ``` +# Web GUI + +The web server is accessible on port `8080`. Through the GUI, stops from `stops.yaml` will appear. General pistons are currently hard-coded for the MDS-1. MIDI files located in `./midi` on the server will be available to play. The red PANIC button will stop any stuck notes. The on-screen keyboard will send notes to the channel in the drop-down. ![GUI example](screenshots/gui01.png) + +# Recording + +WFHO is set to always record on the MIDI-IN port from your USB to MIDI adapter. It will separate recordings based on a small timeout. It saves the midi files with as `$EPOCH.mid` + # Design choices -- ~~Simplicity - It should be easy to understand what the code is doing~~ <-- the code needs refactored -- TCP - This program was implimented with TCP but could also use UDP. I chose TCP to avoid 'stuck notes' in the event a NoteOff packet was dropped. TCP has the downside of effectively 'losing notes'. When a lag spike hits, the TCP stream will catch up and all the MIDI events will happen as fast as possible. This leads to gaps because the NoteOn and NoteOff happen almost instantaneously. +- TCP - This program was implimented with TCP but could also use UDP. I chose TCP to avoid 'stuck notes' in the event a NoteOff packet was dropped. TCP has the downside of effectively 'losing notes'. When a lag spike hits, the TCP stream will catch up and all the MIDI events will happen as fast as possible. This leads to gaps because the NoteOn and NoteOff happen almost instantaneously. TCP over the Internet in 2022 has been stable enough where real-time MIDI protocols haven't been a priority for the project. - Single Binary - Instead of managing two binaries, "server/client", I combined them into a single binary. I felt the space increase was worth the flexability and simplicity of managing one binary. The mode is controlled with a single flag. There was also a lot of shared code between the server and client, so making it a single binary was easy. -# Disclaimer +# Recommended Applications -This program is not intended for production use. I do not claim that this will work flawlessly for remote performances. Please anaylze the code and determine if your connection stability and latency will work with the way I have implimented this program. +- I'm using Tailscale to simplify the connection process. Both the server and client can be behind NATs and moved between churches without having to configure anything. +- I'm also using [trx](http://www.pogo.org.uk/~mark/trx/) over the Tailscale connection for two-way audio. Since it's sending unencrypted audio streams it's a little easier to deal with inside a VPN. +- For video, I'm using [motion](https://motion-project.github.io/) with a low framerate on a Raspberry Pi. # Testing diff --git a/fluidsynth.sh b/fluidsynth.sh new file mode 100755 index 0000000..0fb4c33 --- /dev/null +++ b/fluidsynth.sh @@ -0,0 +1 @@ +fluidsynth -a pulseaudio -g 5 /usr/share/soundfonts/FluidR3_GM.sf2 \ No newline at end of file diff --git a/gui/src/Home.tsx b/gui/src/Home.tsx index 39238f8..5a6f549 100644 --- a/gui/src/Home.tsx +++ b/gui/src/Home.tsx @@ -115,12 +115,14 @@ function Home() { // set up the websocket if (!websocket.current) { let wsProtoco = ""; - if (location.protocol === 'https:') { - wsProtoco = "wss" + if (location.protocol === "https:") { + wsProtoco = "wss"; } else { - wsProtoco = "ws" + wsProtoco = "ws"; } - websocket.current = new WebSocket(`${wsProtoco}://${document.location.host}/ws`); + websocket.current = new WebSocket( + `${wsProtoco}://${document.location.host}/ws` + ); websocket.current.onopen = () => { console.log("Successfully Connected"); }; @@ -132,7 +134,7 @@ function Home() { }; websocket.current.onmessage = (event) => { console.log("Socket Message: ", event.data); - setMidiLog(midiLog + "\n" + event.data) + setMidiLog(`${midiLog}\n${event.data}\nbob`); }; } @@ -220,7 +222,9 @@ function Home() {
<|+^fpUEh@|V zw?6C99+zyG8fy@{Fy?c8_j}ubZ%c%AYC8P%%i4W>tN+z6v*jth+F{pyNB>B;aDM>?W5E|lep~R9pBFqPCI+C38T9DUqtL!dJpyna+S@nepOSir z0G6l!@5bk;jvzEO*7Fm~+h4!AE8qYb=ATcWPEF0z8C$Bv^sg3t5cIo~YeUPJ%T&72 zi78>L{Tbb5m#ok0KXKPThhNx_Z(X-_N$1uj9B25ytjns#?U@Y{-$T#iMegS}e)%W* z^}i s!C0_Oo6O?#=!FQiZGk=Z*h=TO3DlF*kTs2&t#0r}Kea_>86d1Evi2)Fe6% zn%Q=~5!#(Ru?Y}A;_chRi+Ppzz+v|F_LcyhaX4;6C?)=ebJT&;Y2bS9wG}=l4j^Cv zyTkVs2p)QLZ|2X-pI26Dh?$kY0wCdH;9p7*_Bb79IDNHv0kUa?Hs#E0oT$O>I_>)U`o5u|*XL)< ((!F5{&m9J0N5Y}6Nxy39slP^Bux8v* 1Y`Ut|;Ew%voF1B%GSTQE zW%lvy6OY8HS+f@`@Nso@#hrZU?v63`ci3l{J&}C$=uu$<7t=Uoq)EprH$I7 6NmXP&)Zm3WZhxc0-tyDmBD zUKMni97pnc^uY%}Yvsn=Yuun> SZ6#TRf5>=&`2tRJ4g4KBMn+5Gm*`RrkU$YPl_&8!as0~aq_wjRvON^z?_m9cu2 zOZCp&Kl1dFX~*km-|A$5FE;&!0#mJl9_3+5YcF2DeC*jDzXBqAbA5Q}s{;D;rDyU$ zdj(&KPXInb?fRO%O^uC#$j5>^CcOpqVgOLc6sqG5UF#iMR_@)i$H0V>Qw`gi1dH6e zcdxkj-hKPbCPoL_vFpHeK|pf`N9S^SAeTMX`#y(=4dgAs7w0Z*ziU@tq9`?S<9&bU z2tn2(M~--eC$(83W%Ao} JG|*L0f~ 4I6pu``~bH#{ 3z4f1S(gNcMf z29XN}CCSd_*G`rLFH+Hz?{!m9PZInaxIt4Gue v_CoR!$vw6fHfBeKqexL!HR>j>Ty*{+XqV`1R zx{VtZfE~*S=(_+7NLV+!Nu25ovu-KkHnEnIbJIVK3o3(J;;J%gRgX~R)#;A|HF|gc zN{Jiy4sSx5o)@)nY~GEqu=Tb*^*SF4kj40DFcZ>!HtK9}adA *B@1Sb5$J8)UTN4X)!jN2o=HfH*PQ4=c@Qa(`%P3AM}`$&EWs`E+T}mA>Y}$c;K_ zt*`FyW-=vR-lsbbMo8GS-UII%2Gd!->F{IyF4=>J(oe}F+lcCGDHdczs7L!zVtOdm zig)v7^^yJ-jp6RP3gpaUCa)d~B~ +v=o3zAhn_loA~CpPHV!=8&a*M;le8sH^i)( z_A^Qc+RD^YtqdJbpN`as)os(wu(Gu!2f@X-Jbxu|q)i IiCUvTp?{lk%>y_~9q%m%6O8x}vDbBp`*8KAQ$6)vTP@y$ z`12+A22St!)2F+)o$5UB?$3)NO_^MXAVdkk&!~mSv0+67^Cfd~bIG+jHeTCO{^+DW zg&Pp%v@|b#1Y>c^W#cnL?QkIOO4usz+ vr*ra~79^%1=b?0*;g?y?!Eg7#!$_jt)L7o!GJ0{3XjM$HLb-gGp&- zqn^y s oZTw!?N5e%*50qD-w@a zl~RJ<414535N!?(a2C#8CSvkxRe%1vfLp(=-FHh!KlfI5UHWZQ48(^zK725A28+F? zYh+@$K^}%G2iuWHEu|2zQMvo%0*5RE )NIBqX?Cy9wUIhC_B<55K@i_#Lw>jBgf0v)&|ciEy}emM+tzZ=otl29xu z; -CV-9-2fiQ5@G)s*3oFAZib0lT&6#h z-8V`%vs%=m_RX^XsebS~S9!rHo;R;94p0i*7o6(Ec9I|dK5rhI@H0*RB_jCv=^os6 z8;@5f=5OzRDbkGSfz|A >H0f}s_L$Vs zXFru?p0?9ZI#>v6c{x`w<1k>0JPxE5n91;iNfBCUHl`1{f{kkU)T1`(q}jke6Htv) z$#!;HgjH}8YQ~N#_OZ*D&xe5sFLBMGXG08F=9+U9RUC7;LfDv1cWqT?byC4H{g(*Y za)5C7OE8eHqYfs$z+aXI%NBwgwQ%RyVRpvJ>6%dPp1pg05jbz7tZ0xYJvL%BF=~s) zg?khQ$8Q)PYd&7giNliVXp6^R*4WW;OxOP13=y0m)s~O 3d!vlAo!~O%j5h%hZb9G^$-OnpIp$#t`|{;xxF7J%%?J%*xy#B@ zEcHZCMN}OgRBBiY2Gtm*X%6>k=_bSjiVQ@`EfDa&@B?i6Zgh0osuDtRe5w+R*KKv~ zB9Abied}R5#~{{6_ITvEWD4q}8PGo{+}Zl>`O~b}^8LldCtR%nX}@RzX7r}aX0f;V z#y#PHe?H`*qUGC5=hb07`PQuY?fUiWgdSc;Yli~*m|;x`U=mnwZ;ybJ-D>0(6oi_g zm9=#l4x%ca8P(fEsMI-jB~=1m`1)@>`5QbxlM8Ss+@`J6UF#a6^Ua*2O29s98TKc2 z5Qmh~ZgNFd_`Mwl%ye*ce1WL*^NP)?fGQNFQ7kDy!W5g)cNN7b+rB1-GzU`^)-W}<3a2id7t7tCwS#%uy9VkVc!FDyQgA7sq zJ9q9pZ>wxQIRL!r?CeZvWahkO_hA2A{U`Uqip$>TxDJ9s4wt{Zc@7dJ(5672>lvt% z#IE&%8Bk)u&{f!y1 G@7+dPS^yw1gXh19nU?NBYP$bahTJuT&UWy=CF3Lg zB0(+;M)!nJR+H`+)-Vh;KU85iC iWJ(ZU%F27NMC)N%fU2)RajT)Ooi|pAvbpU@pCO>Wf_| szb{@J_66lqIM35PT3aezf@!2 P6%Kh;%=^34EZRFJ)5 ze n{*kbE=HDI?)USMo&Ea6p@+ZXd| zZmMEeW|rP+#BqTe+VA*De_bXkpSm1OrtIC*%T!sd2v?Ct*?K|d-E!SEXQn16sP;e( zj!~*@nHl`*)vLTyT8>}9$96waJ*!kia4JgS08xQRi{E>?M_z93i=%N|>tEKouvLB9 zoBgSyD*IJhcGz;48Ya7*y{t@PY+{5~g3 nA0D$OS?YidbS_U}6 zp7ZhSSr!L-`&JaG7?(wrn_F6_CIp=Y13<29g=NNdgE6MWzD|VDFkqy1pj*Od$6_ tdB3YSxb5{p5c%knK2Q7gBd3UUc8WgsWQ8J$JC5?n|HiSMH5{(Hx{+Bl~^UB0w{ zb0Zjw!L~AKZkZeVD;syLB|AcePWfw5t (l$W3>ndVwE;O3RE)#%G6nC! zR^6R=FvC7>xv0rK@Bm@EFVA MF}D5Li+$E$`k-RnQ6YzQWv3f_+pZ z@>*W{Ha>dk1hPdGsf9sa!41u5^%=8fbs!6=1W= -o6eF=V$Hm1> zFtu`Wa`-F&heW-g)cD8Ui#Mq5hq6cZWI#BZH2m9Odt|JHyN}b@(2f)73!c{1=>R39 z1vc#3wd-Jl(KV`4qH?%RH=ARJ<9g88 d zmo31V9)!8CSiy&UC2w@r0uGzn*J}cw6|W9%6hhH_w!e?+{9e8OF)2M6UJr5XoO`cW zrj(SV8*)jLoU4lurrCrydMs7x08x~7vhfmfv6~TtUQkxlr4Jt%oBr9XA2<3mpYO&& zOFG%OPc8bO8a*rguth_b0L%xsOf@Q4@6Fq{Z<9{}(Yz<&W+y1MK$vWMN`teP&_3MG zbuKc#i%WG+)arLa9f7R(7R=21b+gm~ 1h2du z?MRE)aB^~jRN;l_1J>rn1uJ}cGT=G9RV3^aCLfTInYnoR@(5zLcf9Kq(We4@TUn?q zGeR}|0k)^3QqQFVb!hIYtUofQvMz%mC-FqqXgeRHv{-5?3dx*=(NTj$kb9&oprQl< z+4a_52omxp)~sE#CJ~gvbP=@$D 9cKy_uWw+W z{PDSI+`(ry9 SJkcz@t#GZ>j>L~fpRNrr>9fL8n-2yfDy#*!hFyWTqZVtrdlC|Ea{_`>*1``!mc zjKG_AAh@d`IYf@A1_@JFUHX>KU=yrZ2a;5hIdKs=)Q-64XtzbnbO#5hx1LA8UEbmG zNqH=FO;%H`w;Mv7w$osR#+ pVfxQe8tBmqFAkHX;CT1p%zez9tL zejmCgUG+#c yW3JECqL=mm2%Nt%%@&X zYCv#YjAU73 ?3>tKNvDHgr%TA-;B|=$k-%-9m(4fIXYK_eFWuIY5eR)+ zBpe7NRVP@lb`gyP2bT|RP+giWp{+$aqgw-sq^4T%sm-t8JQlOD@xtqY6_SMkC?Shp z=`jmr$Mj%}x-1*~-IjuN3SCT~lNOZEDbs&dPfu5*5QbVvJT6@dW(VHBQve>i~ ztt3_92F-_uALMy$b9p}(bpF{NrjdN@;_tr`r^je+bQ>M&ilj%tIU{Bpw^ng)*EEC_ z+4z+Wu1f{IfdgO1=yZJ2pP3HU;dw!UZ1IlaJD29MJ=kW~9R}qm=@2PGAY@30q}? NaubLQXV OM0G(q5PJ)O75WGbY zD?2o#jxD??<>EZiFg2k^C-ql$c7D)0YQT=L^9nFSU^S;iEw_l31}c(17UU*vArW*i znhN+Lf~oX+L|gJyK-LT0?)SPB`3MFOK@aW&B~+P%@dj5KU(EK{eb6J1=zn;2a{D;t zi=65iT`gBXk*35$YEl!4tbLH=jwk|~ho78>1FxSJs}Kh^KW|xMPmdsKDAzcpBy(Dx zxn#~|U4IWTFbsrrUteD-TnM|%nXl5{7DJ(_^sGbUf}Z|2WFJXJG>yv4T;SYk3gLpU zlfpBg!n(SNxS~JO0utEgf^B&XKQ>Tj*TAhg`AGOhr~VVRtp#zORnMQ~Y877rLN$Tr z)FYUsFz#?;RNkMBH-2?0d|99~?Qz-Jud0i>3 DC?sdz-{ju*KW>LA7*PvkWcu_1$QAD435jK=yojp}+?{Hy zZYGCa|5;VyxhThL@jtCVyfB?XtV-~wJCGzIA&@GaT*9w;5B^rN+!{#^FLv3%!NK(L z*&l>+O%Tg*K3=X(dUxb&QEb6PhKJ zmmFoi_RwnYgI6WL07^yl_?u18Es2_!P1fJ?E?)g*Bc31fh`zUC(IQGp!@w5L-Z+b( zK=h$hWh6w(nwqzG6#b)6&ftZSzwi}lX*A>bc%VAbG%$N|R2Jou*C2^SL9rkJs^hPY zUFx(1jd<1FU14w(alI@|DKOEvm}8~n8O?ONp4SLdoE;8HCM9d2bNz5XV7O>oPncqW zWLv#IB-<*hSFd*O&8w(TLq=QhaeEdnh$tZoIizgG=>7ZmJ#6xkuU={ce6t>( LdZ>4Lm%}SK3>iLP`F>s--9z zB{NebwIsJh&h6hWxz@C3Q^?vz^3Bi!zXIAtfD`Cy$ks#2ssf8DoNoGc@eC|Hj!EOO z)KPkxoak|(n|1#H%A*YE=H^=I`2?>)hQ9(~7>QbB8_u#vq{GgLix)4NB5jj^k^<81 z4U9Q+=9HoU_-_3(Qad67DTCps^csZK^qNPYzDI|9V&UX@QK%uvcDg4sly(4Eqa6JD z;-yPNudkIRLGmb`5o 8VA&BGTj=fl7#xiNxKRRVRicg``}AGAtl7B2q-5X(t^s!To)Z2E(S;)ffTC z0~70jy)Q*<<*w?c^kmx(u%M 1*5hk?-WgVJUy#L@n_qG!pRD1(n1^>>)fM >+^Ps-EP{23sP%jmT-*0;Pd;w}wv{3Wt2K99 zdAJI;=LVrJFwz}x$!aj%MXWq5#tR`cg8!Ems_dSc?3v jO60h&V^8Fo}+2~A`l$4mgx_1u2BnB*4B%&V)xSdBnECr&I4{#dtMID98^Q1wB zl`8Mw{|9340O;5V6k8<#V$K(=2RKrulh{@oOf3w=l(-ApLPA_7YJ31?AL7j*>GMPs z);H=yrfq|Y1yuSI!`V}|Q7(|P6VC-whLmgSF^9sDsBYbuKMpSDd0CkX?7jjgcx5qM zlAq&HXE-PWC)mqpd9m|^BfunsYCNc55+wnL8LIgTwdX{7Y?IuNFq6_ddu4PTJ}f3M zPGvwGz9b+`MzU6DfsY_O^DP3K$Us}Y6eX4LkVZ%dsB~*m@*vzXIu=TK*r^%Lk>glb z%F2R(AfZHf4)*|3vV#sJ{*l^nz;~;G6lW-7Ny<~LjR|WnM=9r!j!r LUn=wFTQzEuEtiX!7G55ivkQY zf!d!!J1DEq`3IbK{_wmnerfv%hxV>5;?UJsr&tD1p&VGY13F`6)GC{LdIGBCr!kw} zzkh&;$vyT7G>i=tDlk43ruk+Iyk=pvH7uSIDJInP;hZkxO7MZS2Wa}y0^i5A>!eD& zPTF=+QPC%z8DP-R1fUEVi@PECi3@nVP^rmJyD3YC)LIPrQ6>sqrrp_GdB V{V0RG!OcY*)QlqTn;_
@_x#eH348mHQ8_&>tA> zh&=|E0e-Znv1`xFW!R*wk>(ZVwU3mTT`%Sj^*^`3cBGvdiKosGR9jnfmg>E93z1ZZ zI93%gj?nCZmlL;Nv y8o)9pYyMXfty!#zF*w^wI^;X{3u zB=*mrZw%r?P#_gQc-{&k%%I3%loB0}rW!^vTLkp}Y5+T`sESg%3sz0hY1c6PH44p* ziQtOJKPBA0AjhNw_Y_RC4c6vov}@7b!ko}bv6e&~Po6w+{BTo)o{QLFpfMGcYp4y4 zz)Q}s8=QlYQOcLS^PGQ3IQ<8ZJ(WmKSrLojpN|2wAn7wR+A?=PWntvD>CVBUGJ_yk zQU}EuPG}UV(lNAWkfpf^ArXHKKfmaBAo7DzXu=nRSVO6kh&gJlK&CI|JZ?|49H9gV z`2m4>5XtvSOY@-~1j05XM9y~&1D^R0z(wdRZXO=PV!yU)a0-PwgH1mXCkvI8VC|V$ z=^F;=JzdzHMTI*Ru8|G`+0AIN%VZ#8`npsF;2LC)d<>Ko-HBX9SZPHg#Vce> IJ=vZ`wL@528rTYyp`uYqH82y>h+iB8o;(O^QDBy2hCu8-c3AS|F&)r1loBiz z)FtRr0R;r||Nbi*nm>FO*0y-VM3?sg7w;ep5qLYvva$Lf0AWL=$ z4O?yu%(K~g8Nv7%+A64H0wu)(zy?#qA|!I&24gSB0j%3oTl`hfh(k?Z6xpy>ii0g* zvytt-!cLbgfC5NXLn#{_Er=6t-JKhn^0jS(7zL;o&_Sj}N*~JF;oc|*l|B~(IS=KZ zn`+PlcHgn(t{tIt#5Ypi{qVyNlu!cllRyjA1e52UtC7~ l4)M|)&e@liz>8(Yk^EDY(NSQRG;!`_t7FiIOPBrKX3F|R~pnl+m z?*)orR2-WKN{2j}pah oU}LdC$h9a}jjdp%r;O@gu!{B;S!#iF`JBc>!*p!fjM zkrn@Kv18uU0eB_)H>2m|Iq###!Ec*g3@G`S#yk(|!-2!~4N(l($RO1cO7Rb{z6>U< zm#ojmHteKVP I>+dtEd?Gw`_KSwE~WkG-P`(K1yZ$fxG~u z11i`eHd2s)Z+7$eyTsX3$myC3-%OUrPxaZU-^E`S4UjjuAiOi4 T{7hKRO6@9%wJ^p{383SOsY5k(fr>` zt@NWG>{U`bHhAf3@=`T3^Q6pZGne30)o`=$=-{~rpOqdsR`RA|Ny@XBg-2cGnuqgh z#kY*DsS(vJ&I|OAZn-1UawfZH#D9^mVphx72R(cDACl)&|ByVt`A4Jj;n06*rSA&Q zNt-`^DzeM3u=zJrxn29~Q<|I AwSHm>VoKW3@vAb69+^W0u&3a;WFKlK1}HGF|`4rMSnM zXdvM$nvKioukQFJo*&m|wOJu*a+tpsuJ68R$SSTL?LNs+=ZSkpo{ntdL3PPt@9rGt zf3s-`?xE>$&X-3q*zryI?&5YnCObPj4juRL2bQb+!W YBjjnij zDB5ikez;~9AG&*}%LnVT1|2@=@_BwuH5)w_R)2I*SK0v^U !$Jjbs5_4FW0^>ws-Z9ELNAlUXNR_)entUd&42a z-Hl}SIu|j9#Ek$aD_aiv{IY1#S{D}=bVDjIsT&NycWuG&^>d5GHK|{V`nEhTEJn{3 z`nH}-Z1R Ks6b4O#BZomjWaMx2}XR=4J?tt%9PV=$TI+e>_$@v0U=ZBa)rH+~666hNgU! zgKJVU*Z%A3evP BqmUJGr#`BUo6zg=0#J@7`~qpd`mQ$8*O zDKPHy<&g99$5+{-@Q~CDMLrVERA{JL6-v!i-6y`<)bYhO+#S*HCeb&?TCi~8!U3=! z8z8ksLGwj}ck=;6Vu&I6q@<)Ez1g0V2C&D6&ab>Nu7BOM3wNkzEcK}^b ZH;36I`238j`3JSYKFu;V^QZC9CqmUJi z6>I*a`R``uS+-f}4>Tm^egC|hL0BW|ik?yWaC{+#C?Kh=8y?I5_r*y6$6_?i(77D7 z*#cr^^eXmeDvjinm5Eg9?fLg3`Zdz`DR_(6m{T?f^e>oQ;}wbwFlb%C8R6m~>6z+( zoj7>FZ|+g+h!Go0)BH;6V!YS-qC~*QYYfN}Nk{IPW16}Eh}2Que 7E^gyZ<8Yu124r0xr`tcn!(*KT{bSxOKaKO76rw;wQbKQUKA6N4_Z(&7=7f?H; zCA7~Sf{WlB=g*&Sb?THiO6{Pbqj1PtYI@^c=SBTxpRmzyM$1Kysr~ga`HJU$9&6&M zLJgL7U(bg|-}#u`t5d#)Z7e5?=MR4$fAU{Z#s4%Mc~N%08%slD6i^B%sH)O}j_CkO z2Z_+OXKa_dL`=rRhYycia$ *?WG-7x00b-+&n{$QeS{H_I^d z4U|cgS-Ezf+W`=5lth88*^nc^M9Cl;iNgyl9n7-SjZH+kvjdW1Z -ONc ztDC)Yj>a{eT89!fWC&=5H}J0U#?Sz&NQ1~g 1I5_HSF6O9RwtI!|>^~xBXYafVI23^m^0D_^2s}6Gm?QB@h`F%(Cs>E2P-nnsu zi&_LM(mJ$3nWAQFkmf<*8w^l;eP%i!lr2i?w0KYo5iR=C$ogs*C@g?GV8alk;4O~| z;mdfucq?lTWu4IiZ=r!ix~$erVy#hv7J#EykX+3qI ;FC# |Wa5g$;>r04+Vadnwp3I(L?=&AO$^_>b<0GKce2S#vFXDHZewF(npS~N-ZJNf zH~`N51mofjpeXAGX(S5xAQI`cIips<#el+ZUq}sYX*-0xpyveFty@RN!W1@7kBp3D zXJ@woeI+;i^It22AY{8sgUNBaQwX%T$kPWF>c=mZQIQ#>tm&jR1da&&V(??2!j;L| zLH8iQD0k-N=kpdGuO9&WwGWRD7olJ`0W+n!O>l|EX`IkQGG6 3(E$E}gjEB4&ma&`I1WAUkP4(6!1kzrZ7gdff{r+?-)ApEC83J7gA}D;m=)nm zPIwo;AN=_70Nl|44x_==n$4?M?;?#G2*?V^rs-i(Pq*K!{5`9OB>aWzU9fuxAtf!r z5G3m1fF5c$yadgD!4}*I`RM2GGSQ*eUJ`hj6po?(jxuO?Q-Wv#_7sb=i_Wit
BVi%Z=Xs2V5XJpKrQ5q>`j2%O}iAXf4A@0b7N8hGzEoVZRY z3Q4TU#e#ykDq{8YF#YQa#O8Cqm4oR6C*ME%K$*wc-=0MO_QT&0jrPWEtXA6elCNKE z_x|2D{{MzV`M-rbp|u$fs3uYsj|x9ny!AXh`yjy4P*zsfO%l{0tcHFt9FKA+gekU_VsRSIX{QZrk}xzmD7wG6hp|jj#R{qy>Dv^pPU%$z+b6?b?xuk z`kx4w#URH(nD;WJ>dbc%)EC97gPZc vYym zvsyJv`160r&F`IMh>zM%XYri#6=Gj?bxnANbRVgiK$YM9bjS>T=9D}HzpWTo3sx0@ zkhB5l7(oIlKycy7Y8TGJ+c$0mA^H+wj+BT7#W{a^H!D!tybNkQng-`!CA;fC@i2?k zd0)ft0G&_z%aoFnCr<1a@_JfRQzML;lxx-TqMrBG$-ad~1< cq>g1+ANPz_vP5FS(cW_rye-^e!KtA2L(9c$HY|VeBXm6bl zAYZEewysqhS~nhgw5hO@2`*=;!8U6{G(DOc-EFeTo&BF#1Iw`MKR|x`y>#T`tSNI* zh70}xUoxYv=nyqq27_$gCxti@Kk;G1zg#DE*T3>6i6$k#VM~0t(2v+bfgL(_74Rk> z@n>qz!{`l9E^0)DyD#W-`WMq_x&-_wL8cRb qzt_3{w+D^YjdezyVAiKUKTScNnEH5y7dT2@2R*N~7ZN+bQJ%g! z=L;`+E{<}~JBz9~zm1>h^T|INr^#iC<4+7a7gZL3qP#Bb_LJ_M4CdzM4o4!8yZd)g z^aR?Mcl>Am%<`NMFmY-E=j;UMSD5J2bviXHENrUq6_oseal7CNuh#l7nN4rs-h)eD z7VGt$M19h}3sXx 6h}XXuXO`zKfILU9a{-uO`4~)q#_MO6+~L9x`6VSv%)zP?MhR7#|H26D z)D`lT8|{gu$x4sE5*Z*zHZl;LMjPho)L;RxcKR@tUu1FjShrU$Fq;{U0W8(#uFL eH zvV?>LU`$oWaERMPPm6k5jRK}7U_zXQ`+`Y`3!;v|eiQDs(>9F5RP zRY!D@?q?oMJ{}G&Q+;I|()S18LWl>4@D|0**8rf_8JtiFfl(06>nT{@Kq5UTeoehw zq-Tat0M|h~!~{P?RdC>WnlR~`WsG{k@*R#g{_IkGAVA`wN?yY_nC+Yi5v aQiguRtNH`hqrI8 z^T()GaS4fbJPWV)FuM8B>En50(3Th<$M*2hzF;RjY$@)9=G7w0mtEq@oihr-XaoY_ zh}H4i5Ws68TO?T+sNM)PUv+>$V@6d5fj$p%D4v*< ^fl;1ctDN#B!Own%ukUo;uu@-#lgOvG?3Umd|`p) z0mL(l+DG@P(*@~x1+sy% K zfa^clyWqYEKf!pYje(L`>d5+{qsZNEep&j1b;e`yB#ynNdLmv1afEUu-LySfKw@ z2a_;}WVsz}qHI|`Z{qZ!c03g05pWY(Yv}q%Eo#|4d0>sj&|--TEiqB5@~7@bd=9la zKpY-P+y=U9FV;nESHY}8CzPpjJHR@cA%D&7h>EcW7=1bX;~7-A0ZRs;@(9wD#555S z&X1g`h0-P*p$@|)<1s!Viuh01g4Po8o?&B|Bc#H6-`GgKp`@k(!*bQbLj%3ZN45ya zjyRcTA?+j4CAAVsO6o#v8HqUrVd$T2sSyf3Kj!PDLYe^VEmDVThG->H0 t92`h^OCiQfgt`U8Zz;ufZ1y!4)z6(r!bKT5 zx$@l$b`agtii}?aLa_OqlKc$J)CoF&;euMWvlER1!SSiaKxGVGSf4MU5(!~G3C)qg zlT3y2x+)H4!bHW9R3^~(8dMkk{`++FTgou;;A$8yt3L&Ou=sovp!U!D;ZJX;k%}1z zfLg?$`G_mTJU^N-N&TI~w4vdLi$-Y>wuYdz0>>~XFHe? fqdV ;%_(YL1=ePZbwQa5MY1A$ z^YkKWq9leDV|ch2xV8^zFsNe*6b_hEZ9gq 4?+b5#1IAL+{(8!`4fvqgeq17{cuc6r$U;p;5ghJeVM~? zKb}l}IHABoPej6)sg0fo$c?F?5aPJ?$ikR|#*eAlmPiK32&vJOc+&UPcQ|3HAdQKK zV3g9Cz V_Nmzp5(gd%WEv;b^T zH0+Z>JeC+{GmtEeW(&+*z!CN7lRXVWLRq^6Q?|u$5(D2RgAIi-9s`9 12YgX{SnLLI%7lMEn|y z4x~T+rUgiw&_wGcWM>a>_DykO*^EARCKR_rDYj{j6(+AJ $RS4W$oAn{>(8@}p%f-FrLh)9VhuPF z5bshqK6Q;XswdKjRvM*By9-|4Ptqw3S^!qGT@qsjMPVfwnag-1=ZxySPVA~TZ3-AI zQ&jf>%#|VBjz6QPFy;iAD+GZG(8epF^3j*BeF>e3t?=o&a*se-M`FuOlljm(MLoe7 zLxmA+8dD?1E}{_UQB0@MfCd%e9SVJuq&dcbjL$p%@$Ifg4+UWn2;QSL ep*~C;jUXCxfbxiT)}R<4Y8n-A=NMpHI8Q3Qb3lv_`SEL% zY^c0MVsPAtjL>E(SAov!z{rbN=-$8(@_g3H=JB`Sr>Po1Qx?EW48T|C8wiJEKoxof z@8V!=K*1cRj=JgS%y2;zC{N=8E(KT`DGwh5e@;(9TMs1Dj`K76@#%v8;Owdr^i4G` z*affg02LdO|5iD>;LRcv(`KCR`RhEMd~y5( j4FWh2S1N0+)WP!c0^ zp__od*I;ySH`px_A51iIP91>G5*jpO(`ttW>{O&01))%d|4>s_X2O%fF>fF+WY1%A z^ymX3qp?b@SU@lv$6m|9qcOQqnaRW%r>IK($Rx}M`$4dRddN{ gWrgokRaJ4ZtGJFW5+1jDDy7 zAZF61R8*;0MJ6!(E&?$N6ie-`cWRoLA5ZTZ?5v`}+td}Zn3FRWT6VS^NeBW+Xqr7S zbepRU;` XTcMY|CiYJ9coL0i6Q_R5tjiPT4dp{(Fw7WVTpHTmqA8t aQ_?m vH;FYTAxJILN5-7@Oy=-07QD1?8A$> gq?oLjG08!qGg$mOeFJS)Iiym#}-?I{jQ9 z>|4%Jp{uGua?GTkyy{;vn~E>U@89nU;)O@yP8j5`$KF0Zw_MoZ56nqmc3bOncL-bo z>^fHKC%k_Bel)sJD? wDK`_ykijSN!G8C)GAO3(mA!>(J=fg(013o&hrg*k>n ziZ{+3XfjV)YzY&i>Nr(FsaF#&7)?1S9~u~NG0-HjFOL4-2tbBtLN2i3(Q`KN)a8Lo zkx|)6j)OYzO{I AK=O0BaHNw3Qvo#Bk(d?!!8!5##$T|i(dMMf%$!gw8q z5`yF`gUR)eix*bKL8DE@vDnNZKRUQb(n3ZWS#CdjwujN?G3DmHj)w=0qXoB4nryy} zBa<`UUgWfmCa@rg!EWTB+NB_k_^*aqG*Zf(NBiDzWzR5C7}I&M=gM!q%`&g6P9bkr z!^DC?6!eVJx)6D3#tllkt=FYF7;zgDwljwXg@lyg$zP$Pcy0dZtoiu?dA`@7KkOij zr4ety@;Jc;=^n#Rp=$yOD$?D#iUE#|nu4y?wAUD^gm$OPw|86#4Aj3m=&N(V$;oN) z!i5j;d>w%vlGMFlTC4Wp-kTT=U#C-AgK96%xb1(PZZLiNbQ5$Xki3cf9Qs7{Gov5- zE7gx2f$`HS)BmXhL4t-?P!@>xHwu+7NM0B=Wpr3=a!w>d#tF(F=+{BgkX!> zo5?Y&t%*@QeuZ7y3MNJKvo4rn2St%p@T&tP8 zZ_geR094at?MEl>bHVs%&MD4>8JrS0fkaBZP-j7}(we7#UW60Ep)z6Jj)?>jBvVJ_ zaJX&= wG z2dko XMW9XrI}3InZq<#2Ipx-f)=4T6yTuHP{KHy1F&I~ zPm5T)2o_O#Lp5v4;DMOt1mEJDh&2&*956xg!W6TnsBnXaxYmCdah0?rO3S9u$8yut z^B#ae8|s#%%j43T`vC$F85x<<|BJmhkIOl4+sDmf-1d9O64^^7g(5<-bE!zHC|jF$ zDp5(6!64+SBvF>qs)$M@F*8)!NJZL=vZPIEq4jqh$(Ze)=l*?P-{-&Yyq 8tI(7;IcuIG1`Jt}X`j>KM5ff^JsJBqg cB{ )fKQDKZ_aB_RKEs-|y3J5{zkd4#_!jOR^8l>jOUQaxQN*nU*5aeV)EToK<#(;-Jj|ALa2oh7C%=9rpc`Xei9GpRT zP}>q-Yj3i5bj)WVfuvEnK6L_FowWX;)&rex8o01~y==78Vl=@w9a*=fGq0ui(z1bA z?ZzKc1_Q{zOe3Lbw!bU_4ZXuqxvYkY`6Zg8C^W*5wJ
qOgv6atV?MBXl-iZ6y8yelpg8*1XqYx>EVm4 zpSB`^8Gin-KL`~b4Xy6mS1ek%ke0F(2WsB`v=xvm($Wp-XD%vuz@1y*eD^V@l;%2~ z09Sn~#_WCSE~cajt_Izg`TPMqm^sbt@g<$FQqb>k$-Y+}_d+J5aOy#j7DMb0qtOm8KP>uaUB9QXJan z8zZn`!7Lvgar@%)A?32qzdA4V;!mySAw|FU5tyI#G_zmvzF(|HnyxPZN&64v|HHk) zqoj6bO#bFeV>RP gOV`-->cAjsi974Wj32sL5#WO7I$GNk)Tme1*Lub@$-QQ3ttj;X)CR4w10{0Y0bf zqPXEi|FJG4aw1x$VG$ro6E`Bk&8&3;d{y>t7+jk|h8nVca?8M7p(GLO)=RQg?#D{m zZe*hkt)bLjxSm{KM-a^Vzl ~OgGB_VrM$UH_W`hjsC8~`f!=QP%)8 aPTr|8bM z+a=w-!BjU9hrM$Zp)wsccc%tSOTv(RTTM=enKaf*F#hG{qTEiLbv}tz*y$4mRAeGh z&_V{dg*2&KWokfCaKcjCn^ofN0K z34%cam2GWpH&}PMuEg;R(3|}e?j~#+c7IWAH~iFh%J3Ab#ORwK$QOOcHx9dG06Awb zZ}dEUI)v68c+0{-oNvUep$Q=C2&}IS^Lu}ln#w6{B$(ohI136H;APM}d1UH>76^N? z2{`G9SrQOJ6F`1$vk&}hSOo&zMDzgGLFF(Eqxw*pi)gJgu36Ctl}au=Z7~^(9ZxK1 zruaHY%~2+uhiU7Z&|rV+9ys9z>o^2AMXZ(gj24O@2Pp(iP>2G9T0COf<{tuYs2Fu) z-))VjDWnhrw7d2$`REbs@)h6dN6A>!%N)X$A*(<_u8Ktq9G>=Wu ;&io8{2OSUaQ 0trjFCSt4WmQ!K6!>hB0gN$7a8*@P(@r@)Di3H( z5>g4Jtg&;HL?jHxi1t V+= zOAdBpSfw2)1enW^P-!6hLa&al3#}HHypmu4f@Fr~WaK*z7*Nr9tQc7Zd3vlq1p)zy zvJ?(8`k )@7}%n;_#${2wnmg;g@YoO4=|m=jO7z3chOYGCfjzc9R~q zL&_`2KXX(IbnTrRt?)KD5Dk0{gf}h)_|7v|zpse4jV>PYXt%a)g8V627(01#vkG7B z(&J(jm|vS;7%&?2LbMWt^= 6gkT8=i9KI%6bjksI4x3@RmA8ES wq~j&M9#LK28Ua(qrpV1ZZ{%*@*)(kx^OmP3nQb zz(A2GWo2b3tS=z|QYj8>iO>hhlS)cT=BP?4{99>PfsCdR>GB)$%zpe)147WgmsFKZ z)9>g`J@zS?lMvt;Qfe(OdVNQx>2>gvv @MN0%RXP gn z%;pNj4xIN>(3HepzEp~>M>G>XDtBvm#r>&3cTb*LiyVhsLqNU=WV?kCqLf9mO(0%@ zBod{O`7=kP CdP$9wl&n jlJ+NF1KP zBQ#4S1X!hHduvt&gY?|R@Wh3(_PTIrbPmXDeQ%wX5deJ3M=8>P1@{JdJ4-w$i?1M+ zGe>U-&=6}`&`IS5`7f$bcxp8`F=s<>1f?_>zCi$hF3m5*?q#}%qb~{V5Lp3FZPLYo z?SQaDtvi^Us~$z7+$9SXoaYOt`#udt)g=Q(6ga`UZ0BM>;(jS2n1ovVOtr%7X1CVr znL3dM`pE3)voPfQ?>8AN0% iV(kOBZJ$J5CA&UMTtsQCQiW>(L?VOg(t79%Zd*> zdE$~pvc|FPEpb2h6OfFLQ0VcM$Zg~WgeQ?)J^{>y`3th}5uSv%K_@a~Uq|?eJ%vJQ zxd8+(25}NtN-nmQxB$o?tq=h=gFgLmU(M#&2G}}b7w5tJHWd1gwZaDUzAb=W(X14g zrfJoQ1B@S!l3xfIjs|PsKyN_{lkt|;_Be1;OG`H(!DF(n+151(7|Z+J6Qk(19S@e) zue&?6QD027(Ys&tdcEAg&sZmV9^TfoNBo~TM=wsLcb~)f&&H@f%5wjaQTo54y!qex z#!KfbpTA3f7Fl2=_y3n7R+o7eEc$EjP*xtuIla&0mTg+=*_OurXBNCQDfe(Jyodo( zR3k&*%jdp0|MNtw`5g*<5|A1z3>}RX@juebKDag2%t<(6;nw-Ve!yOlh5uSI|BOiJ zxC`G3|MkP-`A5FCJ2^?S=RQsC#b-1{+NIS`j$Hlil(9+6J;T4PnDN7Asqen+8MuGX zxF3WbQZRka&u`+E#@xqrldd}Ft2xyRT_(VoS?)rXI4 zMx`*}SlWQP)}hJS1Cw`aD(u`jQc1jIX4D^L%O_jbbT1W;Mo5;C+FaX)@S>D+y6WG_ zwsoy-? ^~HTabd3S|HM`c{jBKip`R`F2Io@l)8VkreERgMn7M{7GGHA9`?}e? z1IFxb4>W!EPSNhFvnJ=B75Y=QT-W{UZkcG0f_qYLoZ;@BnW;{?XAo+8sgx1kI?R2@ z9OkT3#2eq|m4Cw<{d5y!TThoIzd^&it{G{yv5Qgk+O~Q3YAtsedwj4g_xPaf)bo#Z z-;FP~AhTdWGup~tSQ+Bj%Bp~zmLH!!Ne1rxi-FJz#Uc54i@%^|r}8(1;ZNW1p*%>$ z0XbR-^5@}E-+c4U5D^it>SGVAfR`YiOkaNj*#^B=>^A(vXQ;tDzy95Q6l|5K2ZVvR z81lA3drE7%Z*mZ+DdFrjCKzn1gk(uB?{5^yUwM3wet@9O9vteW8C|5+5}X<11ZaJz z-(2{F{?t?-N5uUbX3n8NBTu`^W{AV5LmR2nu?;KEs7=HHrKDaf@mCIV_lnV%N!w?G z{Fv6uWsRu%fmk)JDPB4ii2wTa>)D9Db_J;d!KE`LtNzM|?*5!;U185+ghzUcG1-X4 znI|A=#$()~=quY!P(ML=*R`J(3vuS7-Z?S7^y`!T{vtW-{ygI=;(Zf +RR$4g4$w|ir ztpIkMp0gBY+;5RtcICA2=*DR!gEI^g;oePvyU()LCQC`E4d4yQlvHNGqQ5@7JD2eK zR=f%T=XCnU(G-2vM{?i~{C>C8_bf)DjB;t(-B@%<=uVRWJGcBe`ES@G18zjX>~0e# zL8U^#otZN3ukZNzYU*;`H+6sXbgGQ4zqT!@vDkI}GZ)~N@5Xfygki2g6gYw)$;eu+ zJF^nhI}NT1JjNkX8e{K1IWkl>3|)}m*3*BpaX-ztoYuWWy)oV#^$mn6zEyh(!Vy71 znC6^DWWsc~dD(dy!usgAIL-w-GHgmD@(!9V-k1H_GY9M?`l=NNEcv@9MrE_;&vU6r zC^s~hd$S@3x$Y1#v9q%M( 4z3Cg} Zuu%6#$EABa6yvC=>oghW?euP|9mR|7_(+YKvj;1)ms0BpVNe z_f4qDD~C1+amB2_>~Gle9wVsR{q3Dx*cX|J3_FOU6Hp0pDP2~anuMjqDGO{OQvww0 zD)%=+fwT+1e{jB<50BOIbwXl5PkFq~pw81**Gxvi!8eN7%TgF`)U@Dr(2&3Ryt+TE zO0_9n9xU^n|M0sXdK%gf_=BRj-|zDp57pn3r}r5A!P2B$^Td(`PmrlYLZ8`M3Q7S6 zOlSQx^ov4hetvpm&te(|Z~gTrxaTf7Q~DlOgcdLn)qgsv`+eg-sm{3DcC^i5zBV3( z*_=6Z*rWp8pRziiUyV}GN=Hpw;e6uWX2Ij#00y;j^1=^pn$oOUsW=5$DFfemFQxuP z9lb}*Te@d4iWe!ELy{3hA2T*h=&%IPJp%J^jPEZqPT*uTu(UWWp6xX-=|WI}kt%}x z0928WlEHr6Cb78K=e^B*^n2ND-Kv4S`PdVZEfBV5U^GU59Dm4$eH&Mc#^S{TrBGvN z2Iye|@OzgvP#bF0SfZgn`)Z@imnSv1BDzX6p=TeFhZrYw9-si>Eny%+ZkInDe6Tp+ zgWVAzkn8s~LqInlj2PBhfaFlLK3tpvcS0W>i0cqZ=407%3R6yAEIJGiva(h}XJ)u> zbEG&OvH;|D@tl7B34;;Pb82{I85N3CgYHWRKo%k{wZ)0SAkk455q @?L~h{%#IE-uPIbZK%?Q<`kMtDPDa;DAJVr7_=#JvlO8p)&~%-|*#K*Pl{bcfrq# zfG18}U__7cEcofPeI)k~cm~Id6eqiFz`^U?<-vwq }i0ya|P!MN|kvzQJ6~y3~PlDcO49)sZcZkNH4`#Ohj9cLxO}Hm14 5s^o9jDCLi8$d6r=(_rdla{gi*X@9H?w4-B>;j&i2%qX& z3vfk=1fL%r4Acg>R_N}1PZ6-EE?dn{K LOo#DxGjSs3%wY44DLmRG07)9o0+p zDi?0oi2x$Q+7*1WN * zzKTgFbSh7)v45K@Ezm?SOKWaEn#I($A{qtWEbZ zZg2+II=1$~jeRyi08lE08z--aj~by1T%OZK4pC7TYC|cuI8JHzQ}lLcxHMUjL|IZ& z;{5LUUO;#`dHH}~Xt3J?#e(PLZ^4dO2i$>lxzQ<@)rWVY4e&eTRp78WonV&Hz)j@e z|2~i4y0EFKiM?f9e5A+;>vf~7*2#V`Qg{xTLY%?MW9Yd6w&7Srpu^%HjMg1{25UO% zks(oA-ZTpx4I$nv`u)m;0|-qwxa%W?gJdb`;*LXH2Jx5Rfws2xz9@<**ceBh0F`aL zNGt8%z~^Tt{9e;5j0OTAMp7elFQAdi_sYJwFzoR {rCq!r2SMoE^QKh1+kAxE8TPN# zl3?C)_}L4D4&>;S=mB(j(1ZIlM9yFh&<$==Vsdxx+|h2$1 a2*(j{ OS6gg~w zCc?K{Yvz!~g9fw?Jti(K?Jvk74HVnR65|0|APCmM(aJO!t3ctn0(cRihb-h^CLy}( z&M>&-b7UKlFc-GTB?L-yL>UHe@L#p6A*c2P;pyUz5~pSKpXj1?2m|4#x?H#(gTvSj zZ2_Z#Y?*?Bf>2;TNY`C%jQtV;=1x-^Iy&b}C`f!0VKvVNF|zgSidVev_)}@dgF3~& z+OsUBJEiQhd&EGVDjWvGuu>|o#FbD8gE?CfAg@B_sn1?B`{j=_KbO6Ld`?4i{1xL2 zor>||CIJdWP+Sdhas$*b5ANO_7wq?Cdp)0)BHQIsSN<=XA$`7Nv~{-eR$0Hset9Q7 zgbNn@PWxo{2fMcaAr1PyYHX~}A0V7~FT E{I-&^+Q!P=`1KepxQUlZ52W# z@e-D^l>MVOMAKswmFSN91_k(u{I&9hA=jsi9_!jwQ~A$CD|{JJ|6HtKdPbP&B#u6e z2T6JteKk=+XGCZJP1Q2eZoVCQPB|a5VY@Z=Pj#>N FXXl|Mi|$V;(f3Ot%AUn2t~ W?71I|P!qI8P62C)kee5*4-pN2 zJ#@#8=5MWM_+_3#{$cv&>0e6==t!4`e~5p7NTu!9fo`L#NiE!SOS+>^v4~qe`9*`< z7j42#6y#+sQv~|IxVi(sIi_OG-+t7mw>JNNQ0VzYWW(PkKLnR3P7Fo}a|(UOF_hkT zHa KK<~XjFWE_90o!N1s4V^AAykGqln&gV;)$0CY(`_f-w|K5(3l-G~axz z@aR8$ ;3Ge1yvwh6w-4?rB?EQUxB!6(L# z`KJqt0d55+6Wg|SgscZm_l;vdxE?8e@&PE_lhko_F7 HJHLku3HDLmNrj6%aQ-MKb;N%D)!t zisdk}D6<6*4pbXW;f6v?Awy=+fM8$_N<8f81kH7l=t|&-VV2!HHUQmOFe on*ZJ5 zIOR|!j|DG&_v BW_j12Y`PGU +2iK#euMcfd2^F1t>zLS}TE8cMae@pyg@xjD z5}TaLIB>w`)lajMvB%+QDYD)AUYFPn_k38ltNLA@k=5jbqH5&GN^o-i8_*ZFn*v#c z-1>{i%uPQG$M}GUs3VSTu0gsLg+zDwy&^ tX$9kU zm%eEJ`0JBZ7T*oDop9)v)>nU$W5W_N^d)XyXeRUaneJQ74A!qXz=)rXj*t;x(f?QQ zGS*nG9ez;y=!V>&(-gi325d`z38sM2r2?y!cCT-Z{ckTsb69c+KVYnDeT{7i{s;c? zu+-?fuF=N~-zI+gt>*#=#C#vC^H=^`B7V;R`ZG%K$Kz2REyttcRBx7bT0gihtdtQA z?1;JboB8GMJWBloZ-3pxe=gh66%&U;XyWzh`|J*Mqjyq04R ^_s25_!-+a2EKk5*rXDi zmH5Fww@Pc_L?s19d!w2`Pre-)*}LFz=h<6w<@bvuB6|y*2H`i-@>R-}fp0k~6?Hkv zoCw8NZF%Fd0AF%^WmbHR&mbINr;-C~kGszEU9NzxVPMt&;rCe2UG%?^o%})mo*MM~ z?$>;|KPct@uO&qP?i1?H5xpJZ=8cEBAw21;Rd!fuE7EwD5Y 0Qb={JwbQ=?Xa5B&et)Asw0m zp~4c-L$m>L@EidzD1XZ$UH3v%FYpyqdVIo92)Yu&0myN4?>0eY{s4wJI3m^Ue?Grp zKL=`RF@A?bWsQxk~|w}M&G*>WeZp?D0m zUqn;6s;Uawm&tGz16N?OR?EAP7uktGN3?(<+6RupLjs}g1i^QDM!~xu)Q7c~N2$cy zOUB1flU%%XX&9I?lXN3aBjN{A@&*-@=xo!rk2YY=p($^1(bZ1tJ4JI}1qqt(aj1tl zEcNLIbw8dc6DY#NYps#m3)?e}wRh+6Ih7}M-_QUL6njqGql^-M^m+uJt74T;fp;(i zX_K1rD;z%B5aFpQn=XZH^Ua3N7N3&ct=5K6Ey6#pYswZ#tEdy_6f_feKz02f+R^aV z&ecRlLE+jCi6Coss9N2iAr_aE3|9N-4yiRK5wC@}05Ik*%@;l$G@cBvGL A}rJ2)vygSO4WpQtLpL_CiP $?$vzu>L6-DSbiDnk5pJ^lRVS_)C-cQy;@O|bMgkTbGp9I?66 2P%3v}x1* zCM-UT++7AflNZ=-C?P#F-r+s=eukl<{V3E29K(@sd@96g?#=@{okO2MP$1+!38*!N zE)5M{adA5iDhSf}03d{+U|M+Y+&Oe4IZX=sfK8xhd3m+nRJR!|jW#6S;APOzb >uit1qGcczboz~ia{CJE-M0v7;7cMd4xXs?ki&?OKZXE;o9)`- zaOQOe_5(VNUGjHy%}}X&W-7-ye^~2LbkiR~2@=v_){c>V3lNg>psmTfxTG(nQf!0Z zj1Y>$i&+oi52~B!5+2b5=1rblXkZ4V0We4TtzdV;77-a7oK;hUm*;oBnM%s7CdiiL zxPoqoW?wo+@Mzf=z}WyiR(7wT4xMpt9_eBj-t7T>IExHOMmS^ 6Iz*Oen!jw<&jT%>nDV9eN*jLB!1=xW8`z!?@(hGR_nggVA*glaTO~B@w7y zp(4l5kH=tw!6sfsbI%lQpU@F+kL0?{o{Wu+HflAmf2^{D{T)YNv3CJAAdfsEcUVp= z@er^i1h%*84uY}?AIz=4?!)4fsCaaHL%i(%51M`oT0)E#MwnQQd&on>L|8m!W^=bT zYx#*~a12|2YYmT6?GO)oogny7R7$@G4lAUl4P<6IJcAeeUi*Yz(261FFf;~h5klak zAiN&(5pdKfG&y06XKu2a8>x=CcW4-{UmMYY+l2@D73}CB>~1s-I-I?1OcGcbVV#kv zNtzadm1y$Kxd>f|NSD#EZf`B^R6H_Dx&R)pB+XGfj4PpB3b2c0+FC2P@%vG7OL)V4 zH9cj(NnU-inwAA5(SQH_1)%PvViA<07Y0-|mM?xe%z@aPhQpgfz08k _o!oo_< zIDtSf3~aaxJYr#l5eL0 _VKZZkz^!d>ynm1X%ta9wnrfJGQL@g z`rjKQ8l)P7t#HEJA|X|}z%dd4F&lj7ZNrq^GD3=+dybt#`w5RO6m}k1%xi_B&yKtl zVqUZuj&wDc&}yKokq3GOf?3W@^*D7rbCRJ6tRX-$LpqgL!Q_a(BizHW`^#F!PK{S%55VVjeQv;dXr0DC9IG(+L*HU$dSg{3B z@mb=IDDevP2WWN41%f7-#K$D?AmgaOV6jz*u9pM2!>)J^@TWWi9U}E-_# 1S|Q7i1g-NC*&WaYlXRRJ;^BV9a~s0r*VG%MR%d! zGS5VtUsQHjb;d6hQjmllUV$Ax6{iioU_i}$Tbi8AfwOw+ooGgnS&+v#l1-3rnTgd1 zj%5Q~n{Z0OI`x4yPV{^w1qpwDe=P8w(HpWef6KedPWDNlAOdIA_SPnAc-}9?RJJZl zQS8`CVE43#V!UUDgsx`j=qNN6(F=WymKt?q;BBT^DUOse1U5yl9P;0V Dq0+%iOK;t^vFTejaH@Lcu>v4Lizb=HY&RL zI+b`T$e9Fo61A7mnN)q}jOH}m>;cAs=D;1yvBFrHUeLL+ogCp|kH#VHG6WBa3}GJX zB!6c>=(?XFqQvR-C;%%`_Y~b=qB04wfW|~%|H@3AIZaZ4g8&t`Xd@{}9HsYmPAtdHL<{$|c=LM@iBK?cVjM+rj*gBMEn Q`x)eo?*Kqm_4JEI!{gAgYidEa;iTfhq9Y$b8pA@G8Mo8#*) z<1`q)WD1g_G8H{ESZ8Fu-wiH5$v5EL(#@6y9Ad$~&iP&iFjHlR=w)_*%Ds7f!U(rM z1y;H^hmU 3vg6J39bq3;;}%pROoT}x zVNQah17lPaa4wG9e<)~smYQI#t*8IU&kkCFItOjz4bTDv*t`;o9uOAQuMS!f-BDj; zEHAM$*3iMhVV~=Z(zVk&cE^rS`T4+&4=Ja-&TnaWXZBKLogYGRI9N}JDKx&o!R+I8 z6#@Vy^`4{V%t`$A<9djwZ{D*)7xY-Q{<*zzadFr7$=$|_0(nnn^&AM4g8;3FKW#>S z`-oO0*hst*^coeO6~VC`M?l7!b29qLPtZK<9bE AS+$YM1tVwi!jB;k zwL*xr8v=~wLOKee#(<1{2~xMvScTAQt}h=9L5fQ%3l#)-ffK-7+k6l^lgBi?7yK=z z8IjHo;StJ8I<%l8xPn@>8)}+4hya}a^{9!K$oH=-@f;DCmN|i*kQ L}0zq)7-H z4-DDnaO)ERtL@%zS(^1RclYts0gR@Rn97T&&xwTW@M2O2C(9|Ldjm& =w0Yh6Jqv%>s^t&KV z`T_OJaHTPyt1x?a>_D^4E~Cw1^%4u)SX7T@YbQ!qz-%3;0$b)d!lY);Udv(zIuyPn z<5HiZx%F4Q?rW?}!@R`x&J_}nP_H6Y)iD|O#bLdy#qa=* KWo=5u~Ocxb^x`9(Rf`0zU&@#4uXMXb0JWBRq^c5v;x$PF-g`I Llv^T(W&MHwhXySU5-Oo;ylHX6Hy)qb?dqEw-3r+ zJ@U%>SpI5$VN=mN`^EUI5)iO}e(7R=@+P;bx?V4s4CsVydHhQi7PyMjF?Z;Jm7>|3 zR&PJ~oon!54&k*}KutyA6s?X#nlr!TF_T=IKenkLwCCUfff+-uADZ~UOU@(BI0qRl z&v+DNoSY3(3wW?h*70gX33MS-!p>B6DB?;0Xkh^b4s w zy@ee+o^~)moKOgDkc4=Gqe5A6T0(s!+KZgG= G z0tsL`Ds>tuq2276u@yDe(se)wY0$~n!1oHn3NO@{Wxi*G(_w 2J;25pFU-x7! z$T3qE6Vs$I0F?X-+zx%hu+kvs)X~t;xaj?39j*HWSrZ0U;#BL-ca}h>^$1(Wv#kXU zOY*dd?O|PWzB{KzQ!vd @+6DAHVN_JC8 z+gAPNO$grxA~cAFLU4xRlGPc4@zm6A0eB!{O{@qnIu{uOP^YoD7ga gb^#g;Nlw=I5Ju-owu=<#AM*H-AXDIP;oPHVz#?Y3CPz=$LvS>+Uk@#BB` z;Cm4dOt3pSCwigMOcM{U+*cVNkTkd#eoTyyufPemveCCJKB@E50X2W^>B*hVg?B#0 z?a8PpJY^cgL5rbovQb|K |X`dZY$62s8bFt2>wCM z&eZBvS3^qCU~qJBr;?Ll>aloLgTcajar}no6}MCus}nu?_wS$i;S&qy(>3?d-@i|; zM~@SG%l!v`Hpxyc{A2USySisF)>8;7zTUC)&;y#Jg_lja@d_bpU4-;0iGDs;x*Hbr za$H7 tR~}CBs;pqSiL2h{G6zkXx=1rY%il`-<61EsPcjVN?mR?_T%m zLq0vG)b9&)A40pDk8=qyl?ob{My aA}*Jw+6^RWbm%OMAw0UFkUy{do0yn{ddAO+ }P>vU#a->NJzcZ*nKtV z_cLKbYBuR^6P{@WGDdG8tcY&ZJkv0s8|-wPQF{`8Fd;zv+5JH~CkWm95#fVSUWDT4 z1FpE1yx6*;pK)tpfI|pR1DM?;Rtf1R4= C1Tc-I9>LF}~w+ZmZMTq|SNQ1-$9L#_o206S4T8#R_K=_G pS0o{Lmh6@cC#JE8x5y>m;6)vtCyDF=_o06E42E0)j93Zg@Rs}?BB|s57VbT9 zud#0RhmRlAP-Y|P*Tv+h5-{h=W)qGzN@hKXTA$$<+2u7?+zIFXq4MBBB@o!ozFB$@ z?W#A}7wnHn2 xEN3fV&A~Zt#7HsD>ZG?LVp6$e}s~Fvx3h0 z&(kdD@4}jEgn=88{5ScBs01hYMid$eN*-c99bmgrtb)8-%j6OKY5JGk*^x-^Q=~>K zghUhZ*EuVZ+2G0XOQs{YpwJaQ*Qe;ghUE3za1VOmp)g+qD2$jCH0RQ3&T}jP0OPp< z@K9$f4Qa5rfW8$F1~ R>K_ja?L2k)NS~kMOD?+oZJrZq{~|jKf>WHjJCK0 zpji)51vesglIl#Lf#?@5&>WbOFro~YROu5~QC=qh5LkntL5Vc;^*ev FleSQVG3mxh>L+1EBpQ?eqh{oL zW+8zya%6Z$;SKXkP_4JaI*ZsFQXuc=3P{#3;p)sGf;eIF= !SR bO60v}{fry0151$hqx-bY??u=5hTMP(R4~rMT&lG44*zXXQ zBSAqwlY;8U`0oW=FPqC5X^}w%xE(;tlhP6v#v#s+nC%e4hm2@MI7i5y2JWg7c_a4q z4TLmF0RtL#%w$1Y*0mG+L2{?Tn8&@%bT;kI6)a(fA?Q%sj>kTCX7|{jJ>|xQeTvJy zz_JIXdJ5+h`%++ I{-FMTZlygQrnlk1|C?jSq`Bbn E%X z``@glq4k4}w+t4BLa?8ADBm+`f1Jds3 XX1eeMa8gou|b7iZP|m;GVwCd!Wn7w zD>xGOt1muoRmdxw``g1W-?< 8P0wBEc(JvOz~hOR zgJc> +tYF z2W_&^kY~iP;E>CL0Ks;Kjit?C4Ddva!zV;U-`}-Kza1#0(j&vMk3pU&-0AP|sS5WG z)_r|B@Gl5~2G|T*TvdQ@DW5?&prxCHe!!v)Fep4WMrA$lqg*gVHybP)qlZ`h1ZE1v z`~^99A~Y>W%BMzu&}oXO>8wO1d-@rTF-vP#YZO1$Evy=wVjC|8{Q$c3Jh4&E0+sJH z+LmaN*3u6Igw`;`7#fyg Nn$OqLxRA%X2ol>p!r?jCAwfalRo z1pO(twZQ?Oj1wKdQ-O8kT$|K99hC-KoW}BmQ6`~UdUO!wADt6erfE)S=o6h2~6~ zm;K7U@Fp2C6I@$kxd^~x--6F(Q-SSnq~f&H;c1WRjE+U|FiJt2XM~bnU|rvjGfQ?Z z0%!jeUNFY3`#&!JIyw_#J{H3`v(%x|qVx-_4!_5l4~B9w8g@R@0r2hU4FWBhFe3W| zSnw Sez&7nKeRe3}Y-PQ_fBqZI-v1q21 zcovDRLk%YOcFBEs)y^#l2=({+EMhlySrCWy%$`Br> |HZN*m_x`N=eS@|$CJ>pF!ukYZXHAz>@Xg2;W;j-m^=%^|mz-${ePzfxrR z^CM_&o~*Qn5Qb&!@i-RA&S)N7KUSD*+q^WZZB#T~VLsFq_DSvjE;WykRz@G237aRh z3b$HiWBqBCL|wxoNy@Z1ngxDM{VnCV&dUh}F&;_^p9+BU;?vsu6$>Lk&Y-QFmryt! z?=-3DnI%%dX^GvrHvg{NzJoQ^Kf*i;=VYeb7rDZoqtT}gKYdu&{~v2M-9ddTq6$R% zbap&`4cUJv?V ^75$bIH zdb-28`OeM>XyJwfhN=YpgnrngVG?*f{mb9mC_f@$<#{9$BoNeK@=CX(Cp#YnCSTMg zQ$_n5O8y(Y3t~XXG=za9vLV1t)cYd%ykk{kI;;mV@eQtx-h_zYaKkJEl%U&x{xnZK z1m$!`hD-D}J;T0y*K_xq<)4-7cn-6qM|92N{q#tl2X5(N5`X&D9#6aJ4zj0IToQG| z^Sm}6S@bI2#Q*)V!k`)ZN2a8XYrP$L&}d)G#+0=iWuKnh-#_JB%e!*PV% ydG)mfy`hesWQht6|r-9gn%Q_UeRQBl$t# z%6|IU9!t_5Jp^8I!HB2%Wf3hg`E1$uXKjn*u80=RS~{ShdHW20+noHbE$5s77sX3n1dY}!q5 d?25{AQ#bG&Aye2>f>>EDGlQ_6+?c-rt9Nm{_MjV#u{&TDkJs((ervChV_* ziAPiG%|3s5{` `3tUgf9Mm&B! zs*vd##DoE5xBv2?zyF}
{zw+Dwez^=?6mBiu%SkcQ5! zUG$w|IWCDm&3`{#=cfzmA#%>Dzo7v2wFf{s@dCMXPq6z3eY{YF^o&f4l%RV20nX<0 zUl;pu>N+N_-#Om(FUPP~rFQQrsS!$w4t_ufSpvj@#d#hyxk1}M-s1ED#CQTJMiHo& zh(YhIS@lnsbWChy0&-5yL4{YMm=R5Z(EWn^`iIRjHM)2U3lP({pVc2H00^!Dr)GHM z^=%mbkIyUh+J%uLMoi)iGEJQ9qkOVG13@%H_gRBJhItmU{*(INv52uitfPRC@1hJW zTJjNC9k(mRwR!A~u2LO %;RoA^SEAiS8F#sQ@C0heB<@}@7zibiKX7X z?Pi{RXZM)TyRDC2WdC9Sp~SoZ?bx}~h!Jg9dYiMe1n7N;>dBrYw~=FpKY7>Qo^M z`qQUR`#H~*$436Nfw_shclD>Wdj8$ZXAivt(O7*0%qd-77dl#gJ{}T1cG+yCCK9|{ zjfD&MAz&B}UwU$AH2`WLzkp$AxrXvv6Sa9+&d&JEm%6+yIGS87jk;mBG1=BUdvCvv zTT_%g_P6g2QvRmZHSP1_p6jIOFcLliyft9ZDTM$cd|w~hm^B{n5V& >c$v79U6#mJUE6sk>&)nr*q7;t-OO#!%?o?;mfsyb!mG_I@}}nk9y+ z7cAjS0}1>FsS`{7Y5N@idWM4pr$0%&b@_$e5a1uf-WvVW1;$Ouu6>xqanm%W20}+K z@g+Kst=Ygq&T_OWu^<(L>_2UJZu{;y@afI$DYVx@6yd6*@qtRmhebfh0BW{+ojq$H z5;Np9IAC;B2b4-)>ynOL|FBo@TuH1r7-@(lNLOA|TdD+?uva;(0ZUc%;Of&eOg9Zb zh}In_PQ)GnSb#n>q~QI_1OKoUZaT#kJ LO+g6^DqG-~_4=_WaECL6t$Gsp=X zX6CECx?<`LH@)rVV?3?f8sht&nd=(cdx-DP(4r}H&RZaJyHlsMv%$}3*NZoIS1eBm z>#3@HdX3?u_wTko>1 h=fcV@B;sZEdrX+B=4|l>K6^e ({kP1qIVSUo3V&!izU0&UHD=7)rd z+7I FDeyzlH>HC27Ld92*}+nXJoaNR)zd$Be>EnZ zP1-65H8&3%GJLF{{(a-4bK5PY!^{_@%!~Q@8;7cL{p%~HpBuMGZ;((-<*?vMhFsc9 z+-8JoUGD^ufU!SM^*ZgK DQlel)!m{H5^4HbQ=SG_vZ%NZD4Rvcy%nMony7Wrbk8vDB9> @~P<|R_rinUL}T{d5uQSqoX=EG6jQ9jFh9oe_a$u=nP@>^%S z6|seK_as9WI@t~mvm5fx<{J{2bhn`OvhEuPn&lzXrS$af=* z=E hd>-PN4cycRM>dX^d|0<;xWx zeM+}kNg5{EY@Q)?MR!+o_{6!hG%WM2XC!)U_B^?%RqQ8lw ilFP4%$3YSy_)CrVep zdfk#qHl>?_E(e*n)_fB-Y*55d^^sd@?_PS4DwUKuc+o*QgCjfI#Dk4hEc;7YNQZ_- zue}oVcFm2oR}ywftlpa!KKuTp4_-dD2kH}cRvbC(9Up5XnJqQ0B5dul17@O8nrRz$ z x;?EL#Pu#X;Bc@8 z4ChHdPvry)6Z2Oq=t_WQj#%NrO N0^Nln@#)E#1_C}x(jc%o2|<3$A1{Ef@^$dDr=XkZ1e)jZIW-*3GAb?r5+L*e zd{Ben6ohwF5O9NHO;g !G~J_lBGp~XRMKetAkC{J%4v&!^i z==vBT>gAxHaBSqp7WbNNW9+7^vMo^Fy ){?3062KHwtpF zwIi|Am7AU#CBVdtOka*%Bgf;%A3cmMUvW=hJLiqGy>$T(pJa6oJ3 45y1fKc?oICCFAD@kUh!$m5T@zj&2Z6NUk472A=S2gP zry>Bos9=n}8INb{`r+3@wDxI$dp7iTZEes6t)t61GGzLx5JJR=S8brDleh9A_Xu2d zDk@(x{d&jhihRS?8CE}O+xM{>lsrax^;?Chg%dnCC? ^HiTAHrgIkU19h|Co{5$jYtX61`n7KUwPtOv4 zCjI+%VI~O1XbvVonfQEG;zv|TM5l}}AR}P1*_fF~>Oo&+7cLiwV9L(jzPzPR|48ZE zv b$6R8nj#W>`h37eIHO9doS9s-DgMS~~v^?5yB%n1EO_<6Wncf=-dS3ztL !@WyPg;q@HtJm-H2N!n|AocVz%;M`zt)Hb}nxO#{ZP1`W z^}8Za7D=Je$v6RlQ%Ai|^75AJO6LMl_zA%Eig!!S$8sO#qmz|MBD4U!)Ccy-h_2>P zOVR}g6rSzi)C>(N$>@6ak-u1|>)|mKn9Ta+{{06Q>N8`$lb<%QpwO#HY(;BZ=HjM; zlZTbg%I-Ma{Oz2Q!Lz>0e9^C9&N{g)kKP)ChCJBuCKe=Ih$nN=B^MbqNLabM>ATnP zA;CMjG&%0&j)P%{on;Yvt!3`$Spn+Ij0LIMHu8jh+lOteRdICZgEtw1jz=Zz7#^eg zt>4v=(Z%f{q=*W|qq+%29O!1&$CqxisoL(Z;x;e49ps2efO|AVgUQ7sP>d)f+Etlx zRuu2=`HGy!nvD+^4HQHh_LfpoD)5>O29L Q-VDV_F2E%fejwTwkgib2YUa^|@y zoOE?G-aNo8%}`#Vl=K^S8$rT%V=YlqEc>VDh!s;sZGk$rFjeSOBu&V9pee6Tz-1 z3QQsNk;p;-ta5kV?%Q;}LVKL>B?7+0(V*v&BWl4y1)t#w_((|cTm+~-HBY&cPIdAm zR%aL#D#kAEXa#|@VhEmdF1iV$`mYy|?LnV)G$$D8obm_3F&2zYDx;ih;$PdHU1nhs z23B1Iyip9Xj6KD*N`K^jGV?fj@`6{nB_iz)Wk2`6zUE5B3c+pN=Q154L;mLdO8@Tt zPA-_EC6^`S`(3dp4r_;&Sq&Ie9nN7-V0mF3T?B)r68tRoYQzhDV?bqof&mT=Al8x! z4Pq)BE$9@c1Mbb&DzB3}8mACi2C11G0$NE?ql)F9_P+irC`rM#&!MXs?5Wa$r(ru} zM6UugX)^qv|IQb^Ikyy{HKS=3vK}q0R|pd>LYNVT$4{;wdpe_3b{mk}fbzNiTnbI} z;NGnb1cdxp4irVN{K+;K%Kf3vW8)lM8dUr_I7j-P9n3`&1}hP-GnyaVs%BMY#&Oh4 zrMKStM@ED14{0eI7Stv$on~+ExFlw@f=ut^ fzH`vhH(DHss}V1x7?l1y-UoQSE7+oJb= z%5KhO1LniA8s@lEvQD5qbf|uod2TZ(Pi|}%b$&=uA>7HH704ARh11{f1|xHAf HDCleY!6<_1|SmFRUE3H;W$N}`w3$cB>O*|AZ6K3dGMmE2H z_l~2C?30SKz#s*zEAz0q_SJUZax6piJybehm_Rv&CWgHgW=*ZaagbP%k}cicx#5>f zEW4oSunr>i#Z{@Z)fw!ArGg&j$9M1jed&)B+f==INhI{t3C`$5p`KL7L2eS}X{clY02 zdE~$ULA&I0b8KNQrPB6p|85xHlL$&80AMcML!a>5VyM`Fa7_Z3i5{soC^E!-Qd3jM zyOx~w_%kxqeFb-}#8(`w!QPkwfn5?_6I$6aN6yqEWL>~eUCg$osat?+lW!N)&cThK zbV2F*alFg!zW`U=A9~Yu=JvFgobm?OW5{C^tM?b&`sLm|bBtT(R>W#MQm*tDEUEja z&u SQJ1FL~qa zxfIzw5*V>42P~>S5>oPG>08|Of1iEBq-;K}w{wC*3I=IAPu1SEgjFHeKMJq3&GDh0 zyZRmgO$5OW{22*y^DrGjbLrB9>@~A_OfCZ@#_IuYa~f#Foo@yf)xSUaA0GDnU(?@v z=8^lvBeMQ(6;zj$b0{}FTy%NYRKJnfH$1qYG0DXrjVcor6(zw1vZ-_HoDKfd z6hH%f9b&oZzy(PBI808=tQa#(x1g2MGhvD-eC0m@rUXrY^M&dma>c5DG1d~tY#gr! zMc*rRplLP1V*Kw}u{dy}@TcWYWB%jgan>J^0Fp)?Cyk{v;lZlrN({CijC*0;9Ls?T zZvnh3)u{d%4(xs=J?>3VU9 nTy@! Iujpac|7 zWusQeW0@g$QHoW_{&*j3xx2@V$~S7Qg$sR^QP7ND@~QKd4p0nI`fZa8IKFBlM{T5R zM9rTW612wHf88sk(wl~B6>e^G7mKc~wCL&_M)X7zQ|W2B&*#3lNUvp!06`}mzl$8n zS5s|U>fE>t``g |Yx<%GX?Hbk%J07NU=5m2qxM5l`akzA z>(hU`-Tjv?_<49d9}Z`!nL(#tcsSYkzTQ>lXrB4}{xrMP+fm`ao<@uI+E6q)%Qt#% z=x*5b&=5nL(cRr$rI+j}u^o;*|G7i^TZ^>Ey}R304t!}$?-_LbzYpmD-AS-@B$yKy z^=)rUgy&f}N(0sE8SnRrYEb_2>9w+!`f!sG)2}9n=|$N%Djm3Q5%U%`Uw-YO0W!+U zhC|xh^R5~7La*gsRgO(zSncg69qqlu1>m`9ZPoC&cyTSJ0v?&Dr@OP{%=?wG1FOf3 zdVduuuUc5hJ8sSQr>;D^ZWe{MQ#nwKIdAic#%IV?$6_3=9T?xz<1fY=Sv|g-Ioqvc zUrkb6_+jrMw?D|}p@2R*-KJ_dAk+I*c75)xvoCpc=c{&VCj}4;msVoG!SN<|@+qNP z*20yQgC$Vt90Hb~E@q2cjDOhWGxa>zv8G4@od4>gn8KhD3Fs%})(w`-3pd+=Q6 &~4TGLKTEocEoEKuZ>(;*gUk~~Bzkx+#3C3Ui32rrV zxCOvA(qqq`$;ruSNRO(_jay}VT~%iK%UiebV67cR4`3kpQINp`z8g3qWKWMmeUBkB zEi$uG%YWLVhKCRYR*dDtI~{ZmEqM8S;;z=}9raR`7Y6Kzo0;gf(Cpfp+ (%%^TUWt}-CuB|afDJz45f_x2Ep6qLxtARA)MPko$ zMc2ww(594FrZ8-)Vr$cwhqiu-;j3!bPufs2Bho_SjCR!M^Ls2JTU#`PS6W|J#dpXZ z`P34bbtS2_DctG$Wg*6d*F5x3Y84q>@=JMGpOjJXZqB)PQQa?Y%g^^qMIPPqU3=q4 zFI0;KK|>DLzjXCt0h6ok pxN|)^MGtOoD3~T*ZIt@6%6R zT|Ez%o|n7icv9m?MT;_9Ke0j_kbR*3xV3Mq){7TSA u z;~#xmN?uv#RH9JN$V{KUSm>~ {yZ)7a`c4$q(0 zS`^4X`{hBO6clDUk!O8?l5KB%rZY;(SsSUhsgKSUO)V{NF9#hA0ed!TSn#D~oe%eP zv;*P)7^2(diW6*-u7?ytH*9Ut5xEVH#jhg64<9YO#FBcKldW}0H2Q1#QxgNnuSRnh zbJ`6-tqfJPY0H!-8C<2Qi4SjhEn0>UW*>UFE$dvO*O^n7ho1c2)CbF6<6?K{Z~$xR z3L1qo23Q70`^r5koIcl}Fs}CD$M?guV=RUYmbvA6`0!!)dt4giDJ<8Ijeu2#gPxk| z_4G+1B_%I!n7_E_`l`H}7VNInoBd@S<% zI2P3IaFhT+;qk#^$ >f@}5sB_dL*;YBo70D`A8T#VefUG2k$OnTJ0zk~IZLuN z5?=eS E5=62}&H@6G@0hgOp7(y|eeV5ppUa fRp !Jj&Y{ckE`38E*ap>$A6ecB_-ai z8@FcN|A0f`=FOc4CdI~kr1({W{9lbr3F1FZ)dN<|DUzzKb1M%{``JC){BPv_=n1^$ ze;_;I(sr}a(OAR8#jkZa+tQHzmpyK)%YD>#;q>L@uq$1Vl?L0Bo_%-=8*Y5an yw@#4h7wP~f}%8_4p7S^s`zrm)jlrswd=*i2=7HaD< zwRvQqa4>nyEMKB0q-)^Xl`C&JS^a`}W2D2DmXyra+-{Ov$LZ@N;j2DoQ|4V6s<^Y& zF8@G_Z<&SNUzOfV*43n5zhdrZ!>t$0q3-XG7BvH0H_ JSD)(LWzLPnxq(sTpHL;;?v4-XIMww4Gp&`XbV>J>#5AVNxR)hOI?q{QnW%o#* zOYwMsH|{i^W6ZX!=w}HG2IDXj)C`&ZzL#cml-GP?uzly0sRZ+y??U$b0Qg)7q&LWd zx2Fa8w_usTRRXIq9K60NQ-S;e-Z!;qaN&rS0*|O>9KvDD*ZCMbU{%o&j26X(ix-xD zypS9Cs#8i*!*@vxFQ>grv{S8Qw77)Fu9ntF^^s&xbw`)b37gr`7ccQIn78}!6o=)L zpHnu4J1sP-1V7L0bxqs)*ZeP(z5izk7T)TAa{d1Q^};Zx)u}KWLC)_U>wfvqKgmMs zfP8rrIkSL_ybiECO}hnIih2PGr*B9=|A^eI&@iDTwFDxAXjGh=YQ93I5r)ozK+Rcs zc_vMr1Q<&;u|(IL9*j=C7>EZHP7nIu1DziSiRHKqv6284(P_ByZxZMOaDNR}azM#| zL#02x7jIL6j-S6nCbIl9V4QB(FgUdmy&v)`1cel+HL Jvcm1LwDT)xjZ^N iW!r8E-(>wtKf)bm3T$5~Yzv=X!G$$1K8XFJ@KEyc*D3aYDEu})hnD+Q#d7`~(O zY=`CW+d~}f(P=&888A3hV`h-j4Yzk?V8k>x7LFUaTQha@mrxs(W`d*CxzpH);qY?E zY?YzCgf|dLdZ_&f%&-jF{V)g^BEUIhT9$<2)Fo{I@sl9cz>1V$%*9Nk6Dbh89=r z(xYcl9s{_QVggqC(iK<21JeWO=29^y7~~^?ms_@B1Pu77?Zvx#%W+HAN)odTH;II0 zAcp~%t1Jp@>d0wqhRc^Sgdl5bxVgDk?Xry|b2iYGI{{9X46PtLXoPkM7HF1RJND-- z1^_qsmuM2=PJ>P`5>v7iaFprjS1uO330b+2MOmvD3#cNv5m?xSR)Hp23Eil7P*5~5 z0-C8vN^W>c#6ydT1tp{9)aRyY-@J^*DZre|GGOx*=C*M`HcMC`+$c!;q+POc!v<0p zkx3>PpOzYPu@TGQAh2c_eSkO`LDkvWB~&6thR&pMA}corjoBogCcs-7f}$PFYdi@| z#Smy;Dgq8CAs3_sqB&*Uy^T5~?T20ovcivFXZ?jKpkcsc=?x&f#LW3?VjP>|h?a={ z82uJE5R$`NpRTMuhK!B6Kv-iNBx(L6WQ}*aGX#>Vg{HQ@0I$r_N#mxa%bIU!z_}&a zUpXW_f{QRZ)flwXdJtI8<2*i EAH;XSPIu6`q R~GQ4at;kyFs5u7nBGB}OAOJljpZ zYSgV(Z=e72iid{?H9Q)jsJw(E(*m|e_+%aQU~@F=>h$33xf<=^Z7`