From 7ab5f0bc6f1edfb8cffa7ad99f6f923732b94a17 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 12 Feb 2015 22:52:07 -0500
Subject: [PATCH] first attempt at nw.js GUI

---
 pd/nw/DejaVuSansMono.ttf |  Bin 0 -> 335068 bytes
 pd/nw/index.html         |  489 +++++++
 pd/nw/package.json       |    8 +
 pd/nw/pdcanvas.css       |   50 +
 pd/nw/pdcanvas.html      | 1009 ++++++++++++++
 pd/nw/pdgui.js           | 2695 ++++++++++++++++++++++++++++++++++++++
 pd/nw/todo.txt           |   80 ++
 pd/src/g_all_guis.c      |   34 +
 pd/src/g_bang.c          |   14 +-
 pd/src/g_canvas.c        |   63 +-
 pd/src/g_canvas.h        |    2 +
 pd/src/g_editor.c        |  205 ++-
 pd/src/g_graph.c         |   76 +-
 pd/src/g_magicglass.c    |   15 +
 pd/src/g_mycanvas.c      |   14 +
 pd/src/g_numbox.c        |   18 +-
 pd/src/g_radio.c         |   34 +-
 pd/src/g_readwrite.c     |    5 +-
 pd/src/g_rtext.c         |   16 +-
 pd/src/g_scalar.c        |  185 ++-
 pd/src/g_slider.c        |   22 +
 pd/src/g_template.c      |  538 ++++++--
 pd/src/g_text.c          |   81 +-
 pd/src/g_toggle.c        |   11 +
 pd/src/g_traversal.c     |    4 +-
 pd/src/g_vumeter.c       |   45 +-
 pd/src/m_pd.h            |    9 +
 pd/src/s_audio.c         |    2 +-
 pd/src/s_inter.c         |  148 ++-
 pd/src/s_main.c          |   32 +-
 pd/src/s_midi.c          |    2 +-
 pd/src/s_print.c         |    7 +-
 32 files changed, 5671 insertions(+), 242 deletions(-)
 create mode 100644 pd/nw/DejaVuSansMono.ttf
 create mode 100644 pd/nw/index.html
 create mode 100644 pd/nw/package.json
 create mode 100644 pd/nw/pdcanvas.css
 create mode 100644 pd/nw/pdcanvas.html
 create mode 100644 pd/nw/pdgui.js
 create mode 100644 pd/nw/todo.txt

diff --git a/pd/nw/DejaVuSansMono.ttf b/pd/nw/DejaVuSansMono.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..8b7bb2a4e1b2c27786398c320e9020bcc24c3af3
GIT binary patch
literal 335068
zcmeFa34ByV7B5^?ckS+*-m(%%r<2aYp0I>XmWYV#ATkgHStEuW*#txd*%#SF0s&<i
z2AGI|hzQ64A|RUx3hForC?rA5FbrZuNN&G>)eX?d;B(&lz3=yZzwe3vb52*+tvYq;
z)PAc&C?UiPA`^ehmR;Hpu*Gd6gjPprr6*cE-tv{fBU|A!K(;*5spC^UW0o$#=bMBy
z%zxskKQ+JFL+(n*BWsbsq>fLe)t*~Aa4R91Nr>OI|Iof8dUZPW6+TZSBx-j5v7`Mz
z<Z1>X-E=}&`hXG74eh}OpC_by1H|9>T;EY6h=zZp`z3rfo*OcLzzgpUy@Jozh;(XW
z&a-{9OK)}BP2_4T@O`};1n4`MhR>(*IVor8=y467YxFWcL%#}_h79lDH+py3R3blq
zmXJEThxQ#e!n;^bCGz;Ci0>cPcj&WyE?t?0&pQZ7h#WC|)aci?w|axfc_#^(aBalM
zXGb*pWS>Tq$bE!p74ZzW7CAC&crDIPH2bRQUCzI80vmV;VWa|)*bGA1OtuVC9?OHg
zoUMkuhW#1xTDAf5Us*onx7lXMTi6!J@3Nhccd>ntKVpX<f5JY2e3%`Ed_*2Ys61Al
zOeFbL`7q=o@)5{K<ztYK%YTRbjbk;Tjx~-y6XsZJ3@6kWVZ1<?G0ylW^p}NpR!Qt+
z3%N<u7A@O#At`-F_U%W~`;Q+vgfx9_<g<fGry+fZ`$^9seMb)?gT!+r7{t>&1uii#
ziP#B!s&jKcI1i)cIs8^;h%J-4L~s36dq1h$R?v2Ww(r;uAsvL=xg-DfskTpXDnjn2
zstoNraxn1=T3yh(LkABXOd5?G-7lLo7kV-1BNGKOBP#bJXai3Zn)3Rg#0EX1h>xU@
znxr0SN?MXmB#ZPxY_56day|}e@Xz~@8aU0fKHDZ*pY3mfBUSIzifi#b(#^;hAvEK2
zeAWqV&<MN|a-t-W7@$apjVQYWiOQ1%eG!!K{8$c80UG&0(-E8Nj%QeZEs<080>YU*
zQGNwnlE=#v<d;xR%iAKrV-f2adC*<jkIQ5S*#x>DDe1&Zl2F=K<Y_X5yi69{$w9h+
z(o<<7zA4XBN)IA8wlR42Zpedi8V6@0PN(41yKy#<>adc(?A}vdf_)HTgoHeh4l{zV
zp5!Keq+|Igw}T{)lV6l4Jy1enCCgS8)%Iz_2-S|FgvIn5dVv<wVtSq4q$ZP@ow->Q
ztHcsnWmc2bWsO)SYsuQN&Mb@dV%cmE8^Ol1iR@Lh&v|Sy+UF{^j%{RH*$%dc9biY<
zN%kc>%f4rq*;RIf-I9o;N`~Z>VkDoGBvqBtrFv3hskzij>L7KIo|gJZ1Ee9+NNJq(
zvNTniEiI6iNGqf@(gtahv`yM2?UN2k$EDAuucdR+CFzQEO)8N}WhU#gQ;v{hWxt#v
zSC?zc4dkYB3%QNlN$x85l>5m!@-TTc>U@$sU7jm1l9$SF$!q0&d5gSV-YxH!56dUy
z)ABd+1-Vczmaoe<WmAzAyW&=&luAmXQdy~~)KwZOnMzBgozhv!QhF)b${=NgGFF+W
zysFGp<|&JnJY|)#PT8nzRdy(Qlmp69<)reZa#s0XxvX4OZYZ}@qN=K)des=!rzWXY
z)pWI<+E{I_wo*H&UDT)5KI#B<h&oaor@pLCRcEUU)FtW)b&a|~-K1_)cd7f-L+Ww$
zbM<TWoO(&UqFz%=)KZOUy5`g(v{=orrD)Z)+FApxsn$Ykqjl1{YCYj+S-f?y?6ULl
zr_*dAmxEhDb4>1q>D<rQ=wQ|zN=wU*LpI7zf;KMu08|h1r}W@l(Dbqkf)<13nC(DU
znN#6~mCduDesdpk=@J|PIwUv_-!2fT%@nEi5h0C(Ef8MW1f`|HY{(HNPv6p^o!Jv|
zgJ5OQPVj!pGR<wAihM)#WOd6fBfL*Ycy<}r$|x%Wtt+0*610_wQ<L`|%u{xe+d=4%
z5#(*Yi=cgiy&;F0(3}k{+W^{9&~9blK(^>K5t1or7ZLuXpjjfMk)X{*NFPC86)Cq9
zv`26`(s??#0<?z+X)S0s5z<9aD`s60-d2P>!zr|do$2CWCg=_EZC6g|g<u2FnSxs3
z{lvGUg(f{Yr5jBHIc5pkMTEB!;ZuXW=gbn+3U5%h9`SbwD_QY#MEq<K|G>R)dV{C-
zAZ5*jR)++weviV!ur0lMFNBJ35zcF0P`X3NZb94eTA)isU34_paEl4L4<iEi<gY=G
z3mOxg#6yJlW()7yV##I>!Yc{d!kh~^OVH}vl57Zi-aAzIDr+o4vV@;o-?kDdw-O;;
zf};_ilr6YRb<uVVbI9Eg@huhUSpFXxpHAed(H6m;h~MBpQ@Xp1x1G6Ve*?AT6=l1H
z9k{i#OgCutAabO_O0=g5YfzgRb2r@jcAOc3kQS!rH{tC>3jUDzGEa?M6ZGp4`6O?@
z<>4oTuw=P>R^&dR>?@>f(F?)XQKDYK*Y1W`;fsPRMYu(4K+X=j5a+ERW?yVja5Cfz
zW(7{mc7itGDOlmGQLrsSz6m~we81)~$(rCZ_%_QNig45HD^lY#!$CYX$t%*_X!1E>
z%U~pr8B7&1{{*_f>>xric{;3J5OW6BnWqnmc^%!tV={LcW*w|u*$<#{*(uPP=0ea)
zW$z%)B3=uukvRvnvpEfPoaoK0zNiKFLwZAm)D`{A<GiP3x{0y1ya(gG3L|0ilk$_8
z{QXJHKo`oZNupz|<2<S3_})=KhC41hek7wDw;i|13kEYJGR{zqL1cn41T)a{#`i`M
zxoG@g{6Ky%el&{771-qukM!kpnG?S|msz3mntol&xH~JcLV9QweiO1>E4dreMddzJ
zO}lkB#Cqzy^6h^W(o^KVQap8UE@Q(?{RJ^&n<&2|zbwBZPsR+CV6I0nV<MzB&;a18
zh!#K_pcBv)whx`rJt&Jg-hFX$<Sm#DP1G=p)E2=~-_t|%IQ^V{P0!Iw^a{O3OK2%$
zOlM9O!D5-8rLgL(Hfz9|vKFij>%_XUo~$3sVZ+#HHi1oI)7f0Mh%IGrVXcyn)ya0Y
zo9)Ls<ODm-zF`+wAuDFr*-d6jvSgRsQj}ClN|Y)~HKn>zBPmmADYcV2OIcDcDO(yO
zjgZDl6Qx(BnbJIIv6LsRlGaHZrLEEqX^(V3Ix3x%zLd^N-%FRJtI`eWmP}+-He|0H
zBm3kexvHEl*OME|&E-~d2f2&<wA@D?AP<p8Vz&6QJXM}8FOZkWE95ou26>abP2MH%
zlMi7%^tt@Cd``Y3Uy-lLC33046kTyD5lXD$S5lPfN^PZq(o|`ov{5=KU6r0nKP5*Q
zri@l5D3g@w%3NiUvQ&9XS*zqLTa@j}Ze_o6SUI7bR=!a#D1}O~a$UKpn5wMWRks?Y
zR#Fqy%4$uuuG&b=R9mX;)Xr*_+Dpw=2dN{}vFb$iRduF1PhG6$sjJj=>PB^|x<lQg
z9#D^}C)F?2v+DQiW%a6hL%oG%u!@y3WlLq=+h^;%4?n5+(OQqoJ0Rz%7#}f{Ed^~L
zuL7MYod!+fGQA;Bge=Q_I8|C9<fPmVbf40Khw!K9QW>eSp3*hQXBDJRGbN-<>&l2v
zE~}79v5GY53Z*jWMCAtJXUSbaOBJrw3gsrkuPMjTk1bFSAY`e`W8Rd}s^~SIG8--N
z{%51ySbUofx?9GagvKc2KsRy9dUHMLN{N?upmZ6urJ&tH=rkc`3fd)v_7HL-L7NNO
zN6=S!d09I_dnn<MpH?D3d&qBsww5=8b`v381Z^jOkC3{8wpH>WKf@_qpzyLZkWqGe
zL(N2ZFA?q+b)n0b?uPdh;h*!|=`KMx3Qe+vyj9S3f=+!Pe2G+qr*?#d9}+S53wq#Q
zI2$gvhYq`ip84`#$V=sagC;1b7y7QkN2Q?Z1pT+5bGe1dPlDc3*FqMQb&)6GDM9HD
zA-g%H$E6g|#q4E#+fn3eS$K=^Iz#^&;aU0x(78${E_08flVpU`N)oKZsw;eqYoQDP
z?Wywkom5_@ITH5)H{-G)9R}?wtpJtzJ_hT_Q$Pq$Azh9DtuAwqN|$+FnKJjK>R8%S
z=2x->?SmX|3Y|}LZ>OV$hxd`;WAv<ylG4MxPo(Mc0?<jk9l_5tLBCddg8F&NG)6v)
z)C_qes4U8;b4#)a1?jU)37XJtSf#=yBK-#POoZ2!`F!An#Mc)Y(mBXKNf@c&)h%G*
zZAt^k>7v~kN@K_^q`3$`%Pl|;OG`n=Nl1rQ=4q0Xau(zy-m=JPc{J!XZa1<|g>Gnx
zobFREfflPbKu-$!8n-GrtnyM!Rd}g4@D%6)1!=MzQQoO45C2*j0Xj();aneflZUXI
z@=b(qRCYifq9lQ4D;q)k$fpsWuB?EZ!^^@Nt2#n1s08#E<zEP~s}Z1`IHiYGH{^C|
zHfWBz8+5J&{n<EaDrf^iyGYv*^AfinogsBbxL?MM2>sPqgk0g)V6~+QkT;9o;Hp#!
zAyXvo?T<)R5MIikqU%@-geX!D<Poel<SJ5YP`^mi>H~+%@LuVPUKin~xfjtH@Bv0#
z<#U*)xSg=R9)mf^a(OukU`@T6B#HS<Wig-07W0`LF`pUYFbztE8Zu@w&toR@J^9us
z!hGhOn9rOS^BL3u`G0)0w>fpp6l@X1ptk=zrvHCsOxL_xjONplw5nRVR!?iJHP>2c
z9kedm(^?;GfHp)Msg2WK)~0H+wFTM|ZH2Z*+n{aIwrRVt<8??ou6?e3t)0^@X;-vs
zT8UPwGhNr6dW0UU`}GvPx?Wpvpf}agN@PB#M2i&kJx=L3Ax{u;M<M5NDt#|xE2ao3
zf7X&Ki8z<;#i3R2$@k^*z%HHiI*)l@94p5|_flZkZNIDM*bq6#gnvtW?uF2uX7@X(
zNun%rMgHx5abm?&`#Gf{xmfYbts(T3M)7AY-KcoV`qm2heaa>XtsbNgSfD(|dP2_-
z8-{A~-^#SE$lXd)lu`O!$}FosNFS!HWuFks|F;@i@hz){(om~fIy2#!<<#;7E9600
zl($@yP}!;lt8{-v&J)%X-i31+;d|U$?vpLw6YawCE~|}%dfI<s6Ol`(_gZ<C`=t2x
z_hm_VPPrx_vfMC4f2%~lTc?)J<vuTbCRG08B?@g#q4FP3AvC7dOIYpE3J-0Mcj`ry
zw7k9^kpDob%X7p@73w<F$1Gn8^{DdHgjaO6EPU@Nnkf2~2mA+f65&ht=zZR9^;bIo
zRu1V=r9C1S@htt7e@po(TY0}NXNkN%7vZ9hk_VZXwS`*mK{>QeEt##omkV~jg|}NF
z_o&<&xiFkVC6OkOT99XOw)85QfpfdrWGQJx^2mD9n&e|YrW@IXv!wy#069p8lf(G;
zJUL4KPDYZm<RYFaApgQM*U3-h4N^jWA-UuhDJ9EDkg8+_wb5|0mPXNNvYE!xc=9ey
zqyh2)O`&zjPFjx+CZEuM)9a*+-k?8|pktt8Af=AMj=_{UMmk1P$uY(;mdcJLj$Eob
zRykHt%uZnwtm&XP-x;3B?G;@dZ6_=y7W1QBfAqvb>!;;t!?e-b1Z|QwU7M>d(w1s(
zX=}B7ZHu;D+pX=_4r?d0)7m%M1+7pk)~;(eHB*;$yYAMb^h$c7URkfH*VP;8nR-jT
zo!(i`(tGLI`XGITK30cb`m4Z9eV)Ep&(l}w>-3HKR(*%QM?at+)lceQ>Sy)u^~?HI
z{f2(aMr^9huz77UHlHoYR@Ihnt7mI$Yi?^rh^+(A1$Y|h0}KF$*hbpM*<MEJiESz{
z8(07=0agHOfDOPV+cw)S@O=P!0o!o^K4$wGIA^<Ly8?a<C;>_du`@uoJM9tnSi2u`
z3V<CfJ9e<_4FK$5*<0A#*gM&IYa#ZYKtBLpZ65}V1||TLfa$<oU=gqscneqy<O5sm
z+wHr-_XCH46ToTU8~X)&A$T!x9k>aY4w(>#o#*Fp15rRFAQ7kx)C4e2IvN3)j+Tyg
zj?RuO$i0AUU=T0@7z<2vyb3x~q%{xHVjvG#1*`)$0$YI{jy)pI0mw&zla4PPXR%_q
z4EZW>1Gt4(7ZAx%0mJa}_(qK3Gm^lo0_jFQ(8fS>qZMcepo{S|Xde-G0Hh(tNSxQd
zY)my~8w-pj#tMY30X7($K(~o_yCCfY4jIRd&yBB*bC53qR{+$VQ38|_62`*xFlSgq
zSS(~ekP=oMv^Gy8tU*}QuomELfKEVHpl4V=&>ZpoFi4}rCV);7pQl5b8@4EHY1ms~
zYa!<YTY&ArZeTxf7&rl(2EG9<gcX7oi|0{yVW_(>6UWywU<cel6i^9B1S$hHopqg!
zoSDv+&UVhu&MapyXSQ>YbA)rObE5NA=S=53=VE7`bCq+QbE9*sbBA+}^MLcH^Q7}j
z=UM0X&dbiL&Ku5KF5*&MhRf@Uars<HuBxtdS3Or_S94b@R|i)Y*VC>(t^uwgu92>B
zu9sa?U9(*aTuWRlTx(n#T$^0mT)SNRT!&o8U7x$YcAaxwa$Rv<bCtMC-OR1Ko$d&C
ztlRHSaaVWOb~kW0b+>T0ad&ceb@z1lbLY5+xktMvxF@-%yXU$WxtF@%a<6sgySKQv
zyLY?yyAQihxKF#kabIv3x{KY{-8bE)NA}n~Zcmh_k|)tq*;CU~*VD+8>1pX{=jrUp
z^7Qg#dj@$%c*c4rdS3O+^vv@t_T+h1dDeM0dbWCYc=mV>c#e8bdcO3W^?dKS?78Z>
z;ko4{Ue#-Oz1|qF&zt0}>P`37^EUQ2_qOtO@OJS&?d{_o;2q)}=^f{N**n!c+q=NK
z#Jj?~#=F70$-B+F%e&8e$a~!Tx%X@DIqxO!74J1~iMKSIh3nzY@QCo(aDRA8c=hnw
z;SIu@hPMcB6W%GjYk1G_e&IRc!@@_0PY9nBK0SPH_@eNo;ctbn4bKnX623ircliGB
z!{H~wPltaKej&Utyg2-N_|0%LLXNOUxFez>Dn%qlRF0?_QJ0X2MnERe5@-i>2GD{d
z(1IhffkD6sU@R~Zcomol%mWq!dB7@Q9k3DD3hV&Th9eFDM}d>Tm%v%zd*Cu~6}SQ1
ziX@S0q!H<jjEVF`CPh|_OpmM=**LO!WUI&ykzFF6j_eaTAaY3L$jEV#FGo&|oE^C!
za!KTh$Tg80A~!{Di`*5tFY-|2@yO33zm7Z?c`5Qr<h96>$kHgr+d`BMIHMw>Vx#;~
zDN)s<YDYDQY8urds!dd<sIE~xqxwbVL=B4?9W^0pQq=UQxlxOvmPWl5wKgh0YD?7i
zsNGTfqYg)%h&mnhP1J>`!l>e?>rrS~d}g4Wxi>!uk>3-tHSeh><a#3h1R<l1<EgiV
z{FadOgbW-0PMQyk^RV!T>GrVjP(2?O=YJ>sK0U>5d5%?HvAbo-?}>2BZaE?0V?{W8
zkJ~3CJjY7MnpcH}TQRM<mk76PTU*GyKSnyCI{dzDr5~Et!{UeP@US?)A0C>QrRN`@
z6GHsT@;%GP9;D?qe<02KYX5<6|HD%v$Nv!iz_Xz#hsuBC+0Z(&e8cjA2k9S5?E&5H
zdn&YE9u_my(=6Gd55~9bBhs||`HxVmm$0<D&sHIRW!0%=frrW>cdONe#>unv6godt
zwlsgRT%k1{qR)Lce9#V7Na(X6b`I6S>Ra+e%6TG=^{qv%Hf!}ERx5rmygWpt5E}o%
z@cVSObPLhS`u1X|=9V?AI1gIpzby5GwQTu$dH4gG+^21*Ru9Is%JN|CgxdeXZy%=r
z?}tCcZsppBSjn=#75*^!zFs|4!%)pb<%h)y3Ac;*nD?T$4;_(1N14!87AoI2(uJfM
zI^uK{>30pSk>BPeF&;-^mNl$&gnZv<Xq788&I4)Qr;in1#3^qtLcVWw3)ML!et9}p
zUZMVcFAn{c%Xjuic$_=CB=_Rn89hZh#Uh-qI_{3DBD~z5R$dQ2`}<}5&$`_=<GQcD
zLfgV0kmm~f%oRFR5%H@CIn+10i#XjaJwxmnIvWX*spz%v1~a!qNI1hA6bN~mhtrW<
zrXwGS^R9^VuCP^8kylg8ZX(>;MS4TXZ-{4y33*s(91$MspTk8u!$o+xEaJBi&$bAS
zFXRRyegh$k(?-@w$p1l~&}Tz+5b}1B{&p_YQkkDkr-a4{efIZd%jOS0YlVwv>xsPT
zg~oY6?l0o>e;_X+!VwG&L*-B#juLr|5^09Y<HWP$9tdA6!pnC6AEv*EQ{GSh5jmv1
z<+=%-D~V?-g_bus4`m6}KU7W<=_H9~^M#x*<k0ZY^!*}zzlhUR$W4VDE1r!Na%lX}
zyzUFP^cQ-D<`t?#d3-CTWs?wUwWjhoA>n^K#A?^~#eYa%_r-Z2uZ#ymLQ<Aem22qj
zQ-x(-lKDG?FIiSnF7SF`{FJ}5kUI<caUnl0<X%GVCFGGp9x3DnLS7)`93fljgvz@`
z_-+xWnUI?axv!A>3VEQA2mWq4p=mxL;y)qcR}^x^Km4rKGg}_sQ#{p|TZZ)&*2q@)
z`#;!K0L>8L8A5(8#Cp$)IM0gkK0@vz<U3=E^?n6keOqm9pcr2Uia7VpC9L|g!mTk#
z_+k0@Yqgz_@bYIx_(0(y1BF~m#Nl_5D2o?q#&cOBJY0f^a6Yy&lKh)J{iWE`&%-``
zTd|Kn2>bYl$tdjLUnAqhuKh|<f?fF4^c4O@<7P!6jo~};v;w`s!e~Y2V&OD{MY6`U
z5#AqcPW#~<!dCP-X`u8x9U_gAX3{azYtlSAM_Mkeps(RJf}74)yh;+@r<$Nlpnq20
zRo<m*wPso~`WNk0?Nz!?o2E^p>$REMY`Ova?sMteV&8uw_Wg&@cO1`S-+!~%_kUOH
z`@iRS6Z`(}8|RJlbSFxviJMkL+_CbC+f@~CuWA$Vi5pdk;x1J+af_;!c<&N>KLmR}
z<Vyg1KjeGhGJw4wg1sM{SBS#|oLAs-3g87|03U$fil2bfbO7^X+8Ah#aitZ|0l?cO
z^l6|EfRTm{0Y(Dj0KAz(@m36-4J-hb0BC^}?}^h5z$SpdDYFaM2OI*919-=m;+-0L
z4tZSyt^nM7f4^t=KmIK&1s(q1Nv&3Pj}o28x6|M&>VNc=o$wWY<F1DAk~*;UVY-Jf
zSlu8M$uKgSOdylUbTXGL!fDuBWGzm@wvg>)H%`J1lN01L`G#B|g`^lQ=q53#OzqT-
zQ?5!l-KtD$(z>(}&7>`9JKC9M(Oxv04x%IISUQouN@vn}bTQ4NtLQq4H?ZVW+@kU+
zdDZX9{7w1)6z5^#4@>jEjW5#qoWJw+AN2fh!%saVo&QPMA6AyT;SAbsln>!E?jDL;
zl0@8(qy%s7;f-sG^G%93t|{pR@bywppdV!J&BMS)19%?|bxu+16!lI~^ECJie?t#;
zf8jq<JblkDBBm9>{SZ%~{okdbA&~F-=l%L3J)~eKM`?rqa96X1xU1Pm+|?W+?rM%D
zGUDHVS5tu%_}xeidDzQuY@$aKH#V)f3{1KEB+v0)DtGQ}HWl|an~HmzO+)T&HVwJA
z*;L%y#GI`BhA2{k#0MjalUZB;{zFHQ2H8UfK1Z4k7&xpiX)$ovz|o`)0{Y^{>G1wT
zNLN974t+LzAn7-f#}xgGu!41;6L$whdi<s*MVUC|`g5&0<(l){etXxm1M0b#h{bCi
zJv-zs<)6=j+kguer`hHF5>i7rW(F32)k>Z1!}oZep-(2N;|oxVae|Qu-114nKdwU-
z!1G|F9l?8yLgxOcTc6Pjy-66}uV0Ouz1Dr;x7mk~KVk<!53<Af_82>cCnP)*MN&ix
zJUyP4tvqe%zR$R*h<|rtKsUWU*G(FPun{D~QRWC5)Q}9tuo(`+Wq6E8qk<7<BpAs?
zs!_$LX4Eih85u@HqlxjT@wn02Xm31e{K@EUJY)1Vo;3y<gN>n%osM@Me{uZP@xJ37
z#}UUt$ES`{j;|bN9Dj5C-SMsCqT>h0cgRncJL4`Y!F&2+NClbS83`Cya6VZV-*q9W
zhGv8r;YPGk(TFz!Mw(H_sBb)CG&3GEo-o=P9gU}qZblEIx6$8t&QW9xcYNr0&#~U|
zw&MfGX2&tdCyvh?UpV$U{^2<9D8TI#*cI<|q9w~&{C!&75$J`M-ya%i{H6fj{u~WG
zqM%0}iILxgHi_kWsQjGPh%#bvN}FiZG-@05j7CONoX@s2+87;-&PG?`X``3X&lun+
zG=@2LIkr01Ir1Ib9h)3S9fuqz9G^S(IKFY5b6j#<`Crn5;;jn?e~mz0$;MdR*5<w_
zi+kH#V#vP-cvBH8N%(`4L>Qy-jbx0(P4A$ATRM)iyWflv-;5I9JTJbvmr5*B(vgx%
z41P<Tbabo%ZHG{b_dB>AjQm6k@u}Q%<x`leptUJ=lx1*epT(uG$N+|3ggI23q|1!S
zg(M~TIr;TA8e?U6C+Rfc@obVw{K23aVMfqAZ799ihtTuqapzzB$6GLO%hdt27@g~Y
z|04MPUoKS#w~KID_ai46DPt7JH!stV=|yp?<yV%#9%YZS_G~9w&Jp$nJI8*&t=*rb
zX3}H0f6`YPBTc}q+}YAxX|;4h`cCc*uNZ|lfBz!CCx0j(z#ZD-@~?_ViNhU`-pUMR
zwyNPqhoMHQ71em$<@gisw+>ZDt1qgPaJO}ax=>xJu2ui4ZpPh><La+Ck)Db(>DkWL
zoVm`G&ObZ<;#}{1+qu)Z+xe-xG>*mD;v(Xr<Kp9L#x;)X5%+A|xVRVNrp0{_x7Qc$
ztKn<!>+c)yTjpEtTkU(t_pWcJ?{B_Oe4qNh^%eMj^!@DnH9j&vF8=ZO_VL}~yT|v4
ze<uE=_-*kA;=hRhNBqCyZ^WB^yFcJh@z?h^@;CLj_P6!-_CN2R=U?G}-@h{f7XuPp
z3DF6$32_OD2}ubl3Dpv6CbUZEofwwrN(@hoO!Oz#NNkcgFmX=eqQt)>9!mT)@rT5J
z1=K)fph6%aP&rU7kP&DaXc1@~Xdmbl=o07|=o5H0FfcG8Fd^_#U`k+4;Elkhz-LK;
zl(dvNDJxP|r@Wggr`l3eQ`@GtPwkxAHMLjjnAF9on^X6s?oU0GdLi|PDnC}aT{W%h
z;A&yjVykCYA5r~<>JzHJQZuGze9h#VHP=V2k6)j<e%|_p>+?$v-e$Ka-+trv%G>YU
z{^54e9Br1G!C)E26#k!|tfHS{b#epuzDrpWdklBHJFyShA$A=1w=W1UAmv^#T6n=!
zc)>jB&$w@N4Y#XD;@;32+@|LDg+7sw$)91R606iwx+{H^S-A0RyXyrBxY5IJIgeJy
z<A(DTb^33-;F@zXykLg#g2m2d&eg&T@}2KEKXe{;pM)3a@PeqgxVY+Z>2Xct`o+B<
zykL3UP9O2b_|kn{d^x^}@Pd`TjlM0u?Y`Z<L%yTFuYDJMmwi`#H{(fsOuRq7ReYy%
zFX$aVDSmtWq4+Q3zm2~hU*aczH@qOt-_YOK|G4mi5&qHs1^!k39l{I35+V~S-1UO0
z!V8{CSO72Zzzd=iQxoeZKAJc*aem?(i3i~Y-@pq<Ko7(ODg}~-7t{|t8h9em7GBUf
z&@Ip_&_9q97#tV{FPIdV2`^Y4IFS@cCMgY47No37*^)|A)l?(33cR2rydW#JFT7xB
z>bvlQgYbevc)=}r!JukNH7~qiX!SAG$5)>yydV)?ps%mEK5_l5^$Ua-(A%AF&%XWE
z?fl!9Z<m@Q%(3u-U%3|qF9!DqcLqNQZVSE_d^fl`xGA_HxGwmY;OgMY;G4k}!KJ~)
z!I{Bn!RLbmgWZBp1v>@X2HON%2U`W72sRAX4^|0=1+}1LmYKhrznDLpKbhZ}XUzTP
zK69_R$9&9eZa!)@H0zqR%yhGwnQA7QmCP73%8W3>O}i<V{aW^O*|oCo%g&T-EvZ&g
zwWM-MYDscQe2K3luB1{)#gYmoF(uI@#tr*r<uWNMDf+qSTG6GVi$&iToh>?6bfjos
z(c4A&MT3e46lE9nDtfvotEgL1m!dXBt%_O{H7{yZ)S#$lQT3v#MU{(Eiu^^sqDn=v
zMKMLuMNvhOMG-~bB2SUK$XOIt<S4Qi*^1;MR(PxM*TS2H*9-q$c&_k7;qk&_g@+3d
z6~0_Jv2aY`h{EB8LkkBM<`h0xm|fVfuytXxLRX=)Fs#rhbQCHD!Gh9)UkgeKZWNp;
z_^jaLf;|PB3f?JryWp<{>k8HuEHB6_SX!{8;EjUU3l<eDD41XHTEU!x*#$ETrWZ^t
zm{jmW!N`KA3dp6TOO-CgT#CG;UEFc;gNyH9+;;K3i(4;lzPRb)#*6bV&bc`I;*5*a
zE)Kc)+;;=M%la<)!jBg^U+8dNIahY>*K;?|{qk+^Z@Yin?c0voW3xwQkH~gqJNuVJ
zoOQ2ucg9;b&D{-LrmHw?V%Upe<Bdtyh#`7||4aV=YXR)h;C(l|HN^iDn_qqiF9Upj
zu?k@ygZBgf6u1aX2MU2}z?%SeeP{`=0l=Fy{H%$-4U}TukpTV<coOg^<S)P<10IL`
zZ}4_Nd&o$GpHJX7d_-E9%@g(!&<8jK908sKjsrZ6!N8XQc6Hb&-~#XiFcH8`lmPT(
zKb2#KRUD}qKF@><9XPO3AQDy^96S%HuLX7#d^9iy;m5!ySYWV$1lw@16W~*U*^oa2
zpKF2ZCCvj?BOJfsB>fpcT=paQN#Hvm8i4)e-r!ZhVPCmFWXuvV<0dl7BrOMD0Dw!d
zv%CiQ3*^6o=L7FShHd3t0PKZ3bwu6=9Docv%AWwde0#uA1{t=K`1jCNMjc7}F)wuk
z9?1U$#~FYU2l-#%*c(-_B9LG|r8@vU<qF`ij{;lDe(+fU$}T^FSBF(VgWMY22G}9D
z1vf0<?j=zpEyx|fD_W2{g2!8sJAo$vjqvP~;F-XmAP)wA+JZb8ybmxG;je<DjySlT
z)bYTJkQaiZe$+{j7lTg$P)~9$IDA6o`Y!|L@c?dLb*Tk;1^8MExbI3-*qTFr3w*N$
zc_lb($|0`;hg~_aE+XnR;8)0N@Gd5FbwWpZBRKNskT-!Ne<yqpH))9z_T!M>1%J(g
zycHaJJE1SHV<&WVB2O9h>qH(-_>+vho$v(?`6KZ47Uccl`M}!<{}}uoU?=2*;P4UW
zZpfd5!!MklLOxB1`y_z2ird8`j#*GpmvK6Px>Puiu%Mt`<D!6Qgge0DFL9_pB@Dbe
zP!qBnJRN8ZIUKwx&;zm`ydUr^WFGbcFb;BaaMT+IZh?}xX%>{n!IuLlx6%?E<%ru0
z8STVJ0Hm!90*?V|Kz<n<`TE*JhW&h90K`>bPhSo&9y09Xn+U+B3d-(7`W(u2aM;)f
z`zr8xAL`8a4&)N>Edc6Axe2}<fF8;%aM;rKH^?UVA>b3#J=g0f@F`^2()Ts+Eo6M*
zy8skGHoz|fKSK6`Uj=@K47>Vx9=}3H0by1W&)bY29A%7$t<`$q{4;E$!oKmX0F+mS
zUE@0e-5{f^@!c(`BfxuDP@e~X#)3K$yf^R?;*SEK1Z;!62pnaMKL8o!iATBOzkvKD
zILALAUjj#&;?Ym2SHNMr_#2SRz)Jww1MWkhCh@~xH29F;4Fn)ZfTvi{Dubs1^$}hL
zydi+Luhj-e+5Al**9Ave{jDJ*p1-XHjeigQIkYC=D5oFg)9{RcG%ycxCinti1!UO3
zzY2ICGVJ5u0qlhQG9d}5Ck|~AxMD$@3?2r!5dJDS>LDQ-@-*-YKrG~$;BgkT+2Dy5
zv^n5O7PPtGC@+Wh8hBNp8f55~fVRS+LC1tv7PN)nPXWAKsEY)Amk2$ymEh2YLr0#8
z9v~dD4;;F2=n3G^G0_hhx+JCoH6Wv1Cc=)1u#;W~{83;aWPDB>3P4|d0Qh_WdFm)*
z;v2wUAkP9n2poc(2mYxA9X3t;2KWKtZ-W2Jg8mL6sAdvS5xxmr2e@wUgTsddu$}%f
zcqIV(>PQ<49}=hx`4~8C!=Zl$o?$^h368oCpl<b3;LtySenS5{_!9tpL;n`MEzlnF
z1@KN5^o!t~fi4J#-v+t?Js}r?_X7Gr{wH{U;91Dmz;gg@pP#@710x{+3_c2&0Qolf
zOBQSr_#|KowiRXYnZO*#yxebCu%W#NmIJVdEe!kwfb!W;{-l5f8#v5BQqm9(-$`iz
zARRmOPFVoJ-u4aPtAN#zVb7E;z`Kw?AS9In$lng1PKE7LZIJ&4j=WRh2lkJ^s{pW(
z9kxn^oj4rGGqocC8##CyT`f2i@GJl}a`5!}0%IUU|J216_<fPorNCx{L;qChlDY@-
zBjEcjI8ZmK2LbqxqYd~43yyZ+g}@I8haOdawBUFW{1yNkJD^il*n`6XJ5(J642JwC
zLaIT(YS6`j`mE*!Vj=gzwpX?V$3XC*0P2q4SE&x&tG@tw82ESq_2_sWd?N4)WYld<
z_$P-0@oL6faEt>-IcuVF9C)r~O$!dx|9aH%`Y43I3|<kyGmh855q~{w?pOpq3z!EP
zc3O{mT)z<VTj2Q?9IFT^fqgje>yzX*>VR(oVqcNmM)_|~hP)PhHt+`I)8KgiHu?hx
zY<U~$+<pi0_u!WSZco_tb}0~qj4=EP5iv(YE(RY9;5)~^!SOwZfiebv1<D|gC-e+X
zU;$#_#O2Eoz@H(%Lg-f|0FVD3hBiCFe^3_x-}fKi`LzDK!|(e#<b(AjKU+~SZ1VFJ
z{u`4HVvsQ6#95P@c<}p+;n>-Y#14KmiNP;}#^OA&5{bj`A5Z)wfh3}{NkYR(A*t9m
ztwO4jYS{U#f#0Z1Bk6>nSJ%Owc?N#Nu|8=)8saA2Bcw5Dg5BU|B$GT!nv=&!3-UN=
zNuD6Bu!Gx%v=t`|9Y{x<b392plc%uX{wJJ%bi<iMcl-`y51e*ALwb?kqz~zf(oDxK
zzgc7sd0m`r{+X=7>E=4}7u@&zD|s8|oEynIWHZ@Bwvczpd*pqx4d<Ra$Okz4{E+;O
z?9q~N^Dmn`O9pBwc!OXy89@eP{1{6H={?CzlBZW8qx3#{U-BGzLHFoBJx<c~bo?6S
zMD}m80q-D8CjH4UJ(+gVTj-HwD0vB^YCqf~oJMkK1dY_9acADIC1{njII`1rm3%}S
zVKf<y-wUk6f9X_9CgX9ZK2fVmrsAA#3V98;59gBwWFeV{8;DC#!o_3-d6O(BKe6Z7
zc=9|OgWrFAflR<J9gP#`*E`5Dl;{}ArwhRc;E5e%273j5aOd9+@-e<=BHj*qjLyOt
z{V`an6m$x?PVLesv_2&C9VAOmK<Iqr$)BDt6_GL0Zt?{=LjD1%h&Gh)ELM>T^gQyJ
zbvF-&Rn9E(G3bl<U8F1;Plw{B<R+x}BH2NQlUEox>x`5?l}{n`Q`FlG)Y@9y!u(Wd
zHU;{Bi~5;^w-}aUE%`L$UF0D2G2xG*Ec6WSWWIvmbZWu|Al^ZwmPhjF6mo`)k_ojV
z=6A{&Rt>3cLkak*d4+ODS<3AJenz>5Z!n3)Zx=;q0hEH<Z5`cBYq1XG3q1cK=_2)%
zo|pbXr^x~N1?dMeA4gby@GG*PDQDCOGG7aj`RV{V9>3zm|GkLRUSu!GeP}-U0crM=
zZsKzSG+QA`OvpC8q0~X?fHDt2*a|`CTNLNVpGvo2_l3-)t>l(i8_y>%;&)Y+!i&*0
z!!m>nmokw1aPp$^n)MGpolj~guSrW_QDF^QhczK9*Z?{Q+LpkY!=)BzZv#l2a+OS@
z+n_hmULvFLJ`Ec42b!wL5~HNL-@Sz;x6a;@`DB*=aQB27)qnHR@7DZVNT)4f<NZ5=
z!A@CnMWy=|rP3BDS>GZj2flmQm*3T>-nLVge+P|zyhVAkkN0VTz^Ag11ODg1$nJ53
zSpluLD9QN0b)PN%{yF~H?%9Dxv)#`&s)6$JGe?HqQhqX+V=j?%l(mpG5|1BKrYIOu
zX~cG_D^r+E(hi(1u0`CZi%%D)hkFt{$qAl>9GR4kk}8%Km`gP0&Fdr8DtHE`lQIbE
z6n&qK#Amvs8CaRl)MZJd5{_TpryCd7ZrHFENxM{9oKEX_q=4k96B%IgvB=et$Brpy
z%APlu(`U<en0U{kvy?Bvzl2_KnNEeyl93jXnJUXV)H%zwx`7nasV5-*Nv~`=wF!y9
zS2=`t6ZunR5Bk@5(k3&#QnWT#A{7+si?q!RcR4&^@xHi96=P$fqr$x&x62u3*loI1
zk$8d7?>>DznycIRbmPXQjX6C~ySO$ol<I`nk?KSy2n50dQXo7bBSC-$q&jS4&d&o^
z4ZL9%b-87p&sjCFWZ=pi)1+0pm?bnVhw49fDN**Aed$WGZ=Shznc0uN#j%Wb$fGOE
zJ~6kV)O*Y?<fq|fDn^bplAYO5ubhMxMU0#rk>-vLr^$1Y=EYZ@?~9ldK9A0KCivX4
znxx}5ksNBpaHX=}i3;^ayCf~$eLA{vadhp{#>MW^OIJ~zL$wcFExGExdZ^^8$J@};
z(Bq8;8p4oGX-3_YRF9KJMns`lHEC*wk4AfHBDh}tj5^Wy5Q#vK4-r(2Z5uXm#JQX?
zLr-VZ0Y~~}AM1bk=ofplX~#8P{<ON&iLZay&03fpq|w>WJa>w|DUayYHT(8HT0^N>
zWn0tcj2?~OzU0jhoj?Al_+sCwmL{7|#_!L|J7MF#q+lE*@)q<m4vddJjDZbF*UU6u
z{kY1Bm0T4i+ag!uqWZ5_UQ~0T>vd^SOr?s|P?xGb(n0J-vc0Y&-d@dU<c9B-7Q3&S
zR~zyI^18f=lA9<yO3j0KsUxE5)UJne2NG4SZoN9Sqfkr~FOZl*Q)zVa!@p)b26kva
zcu2br183}*o;j*!&Dy(W%-n9a3dr6nrO^XBwjVO2efz;PcFf2eQ=>+$UDIdmpv^iA
z8r;79kU<@1>`bqjHoDogT_4ccK6Fi=f{p|6#o$35@I{RpV;-HpbBAbCq+#%)d=PzX
zRrEgZW%l#9nb#GKlX7QtSeQ|xI;&YN8uOLfb?Ro+Q)<<Zrj#_VZ`f3-Xs%jeF{GN5
zsMX5#CMG23`j&W?X<?)?)l@0L(B=Bo5@IS>bS22)dS!1yMLo=2v8Fe&f%|Onfzku+
zLza=ae+WatMY#PAT`IZy<q6o&@)=Kb!*p~(n%ntLh<BOtPtC3HknV{#%AG2W*5Mu#
z9Y}T3KqBGpB%F#{8y*GI!{apJcc_f|O=*1=psP|-B)Yau+x#;fp4v6&YqN0noZ9K1
zyz}UkmXEyjc;69?>h<h#czM;H)hh<v(wwqWwU*@gTWYDRf66Kt+Oh==J3i}5cB|P>
zEZGzj{XuGSkM@sD{;c(%d**%;6YYu)gK;TyOZjY%=wrMeP%;z0GRS0fExcnnAi5Q{
zr@TYqbwO#qd0iTV-HkBbyQwS4a%Y%EB(F+h>`pvayBM~@!@PG>S!9GaI*`IL>U!%-
zW2Q}+GHq4v;>EeD_mcTYVS(AG@GAZI!g+e280q#zx~X^4)p)uZb?A64!RtV}rNy=H
zrCTS;8yUg0Ks|3pT}FF~G*=;Y)mv;fKL4HBxcD+Xbny~i6ogl-V{PPW@Es57kXhXw
z=D;fiHjV$vwDhLpG2XOO=Mt}O*d?3lk#GZqRB*`-TZJ&yE4u2l=v;Zn!23Y=4c>Vl
z-~srYPQ$2{j80cctwHN6o;sdnxtf_r2Q)Odj54=0qyx;nhP2Zt+DSgY|Kong%o%k2
zv3?)#?|+PrH)kB<w#3ZydHfdU>uBGpnGs~QjjmEwYm&iYWl~9x#d$l|0eu$owgglN
zjx3QWx>^t0P5)*-w!v&ccgwGvE%LdLPj|zXubbbo>og5LNKB>!yVPq`Nv3f`<s;bf
z^2(_bi5{Dllpf6MPt!g#C(~D~`pu^2rJ-yJdSB0WvWm%g=fZvZ0M`IDip*&?vz7hA
zrmRIiSd*{<S_^UA+sPV+EG*Ya6GK~o{!m&<Ynh*kvJMC~m+K2ZgH8;NM)7`!PvQ^U
z^|m?~ImYiPy}DO9^XpKgIt}f<9qP`3RYHK;Gh?N{*u1$uBR6J=Z&^~LuOfDpD<-;p
z3GqpAIHco7*Y3V_1N`*W^vo~QNE%IJX;PY;rlhH9TAH3_OS7jrnvrI-8EYmrlbb2c
zRJ?JkH?uXfH*<6(9cf3_(caO~oAjo=S#Nu9$4au2u4F5vmGVkurMgmEsjsxHw6An*
z#xHejW}BtW@@8eTx>?(-Z?<i=Z+7e@d+A=bSK2G@RracTwY~aY+g|%#N6UvPQ=XO7
zTkfs&R(or`_1-p~@xu~IdWJqjMIUW-(BX;9<M!66jnSK>3K|e0^kVyZ4LWsf*r4sS
z*XGQ5ZQh(Y^Zxbo&;R<@jT`K0{Z5_gH|WrgtuRlTN6e$<Nt%uy8L3axSDE9?$>yu(
zIJ|%PGJS>46m?gEai}Hg&Q4M?BcxoJ<tj5Zl55igs!u}AI8ccPO5vty#kFtnNfIVV
zN=9-W?yS^F8=0GEr=zr9>EV2NOuHRzZk@s6mis@}&T;_tTZufGS%p+eR#YXXLaY>B
zF<DiW=5EjWu-u3xGRbAcZD-W(i%xV)NpbE{<h5@fMy~P<ZydM!U(wt0PB*%C_rzr6
zoq^?{7|!{ymeG{fsV(y!*h%RawyAW?hcqT5yXEVXdK@0{+$VkiK^@(*8=T3{&p$|O
zHl2{$@uhjqA3I*F_78vSvv2gHSb9@33;tLi`c@`SK;Q7(Nc$Yyy0Ba|evW@#rQE<0
zby?(Jt3-tpDWZZe#qE<4<0EYGRiG~vK3$BV0Nz;)_v8-BCm-lU_%JJDnB|iUYY47J
zGwzMWca@g(*H@T7{`}mR&kZ=#Z{60dOY`#PtXMd``<|Tfe{1~>Rc1-?sh_-Y;>VPv
zBN=s<y!Ps{brXh;da-ilU4H*R-hYuVPB0h58crULdc<!RljfQ6G)xL3k`&gQNDeJm
zq0&qnHSENv%lMIqB&WNyly`Vy$h*WPOcca8Cm(^4kMLm)vp+t26&(^gZ&smSC0zOB
zlOts_l(^C#rB6%itTk8A?7iG}^I^Lh$UBZS$xM{BxY%6HGsitIA~%fXl9^%4w0xiB
zBbavB6Nx+C$1C|jd3zQO8ul^|K!b4J0rILOkrCuR!|_V~jNK?ZP_0|_%hYXN{N;s%
z9eVESyZ-$T*FTvD|IIfSx?SegE5+tDzyH(PwYIETwKX{z*0|Hp#9+^%NoGKcuaIkx
z&vo11ma+7iC+9{jaW6|w#NWsWOVrd#G(0|;cQ>V%c*ks2XMtNx71F5~$eB=(4^ja?
z8YfAp9Yw|HZdI&wzS+F?`wpe&5BvI`H@-DXuhRgHXtUV-cJkuIlc&#|schSooNAso
zi?Roszx;F^6Xr2=A)P>9i!U3pYwg-y@4mAMJA|<59MmW8Q&p0YSwTr=5|ff;MQ*OZ
zqLL!ved|OLuR+%XV(?76QGBPN@K(}25w=9u33H^4WmmpndRc~Yrt7WAN;Mo0k}0UK
z4x;Z3VD9}`W^#-{a#Ph@UyWQZdf(K)rpFjbRq-1TK9|iGSus)axf0^jQEkPd-uUeD
zj=OW)G=#5*m>~Ji%!jwf@-~o!8Buu1Oq1ozc>RrOGhcthJUV&d^^>QrFPyw&rD<Ne
zWCmBZpEQ2Lq*q=XKZza8ojrS5?%Y{RyCiITW$UR^TVL6hkZ^eA(MuPPtU5ybjeGg!
zaT6v@w*3DUl&PgCQxbV3GcjBxxlwPs!{!+C+_{NrZlxuO%aX%YiN+_|d`3zIUd@*<
zc`mPJ(Pn=}xzg#KxiThfl4!VItQXMjVxm*WkB%5e1}Ut|<kw$Eb<X&X*Y?3QUfVyN
zqw;mUO!H&w#cau)sw|s@>ZS>_LiS*4zwvMU0{m=qxH-cd6^}M+jj{L(J$!9iF*A&<
zAsgj2szT#rf+ZkYCGP}Lu~<t6FbNTZZfU8UYM#O?I(+Cw8e%?xH29h{IWt_xe1K01
zHrgeb#8C}v2F$SVkIxOTE_Gi;YJ7Tt)*Y~>2w@n>tyzNfiHU6%K6iNybC(z3dkL9d
zMaH^ckv6ICXq1u4aw>Pa+Pwa66l1DnW05q2%HvBnNu6(>mlLFq@G8;AAJ8@HaLEJh
zFN^k($4hI<%V@}}RJMxf3bl%O07VqD1gq_%{bMhQCv*EeGd8m3d@%WqKB|J5oFZ?c
z?`SHkEEBFz<KnyeglAB$kVpnU$o<iFv)4Ma*9Wu-bh&{x<%W;=um|~KW^)Ht!<u5K
z$rWNNNO+-BNsf)J&^#_yVX|7mMdICaT(23q;Y;GDC#e1kQ8tB=Sig-()K(?RMg3BI
zfRBx*`P2jhmi50FxUQC%H?F!rMJu_pe2}f>gJ9hgX#mZknOHc8RhbwGqR?Di7*XS}
z{Klri#yw5CJl!;H%Fqs5`}NwJv+LW(dSyMHa`4zOx-hTbtj^sZ$*R?T*yAmBH*BzP
zb-O7&yEgCAB+a~Ta-Sd-&5z_fWfbOCb;*d#T9vCM#YRg`!&b4bv^m<g+3=($ZLSvW
z+gz(!MrxQ^*&u4Q2of7s(}+mG3(++*utdTN$!vV!PQg$~2Tt>#17{A127kA_>6u}Z
zlu7C&ZBqE8h)IzupTF=jq4l6c3=d@Rwv&S5@|BQSgc8wd)~g?lZ~WE=Z=~#;G<fjj
z$%6+^n!6x*O6S#Ie6hOI^rS5dOU!R+8|tk$q+xoq7aN(&&1dL1+W6EhmN0qw^2x6*
zUv6F=-mJy--Mg>1Y|?DS9?Wlcnje@GA|hv0h{4an&!yAp3A5w^Y=W}@d7~H~?PO`@
zqa+!VU$}O%B5Qz}tSGWAS+eT@O}0yRl8j9}$&T?;%cWZ|d@67jRcwOUlr*~oHnKKP
z(5UVVp1N2TYFHgw3&cB;j{bP7CQ<rKW~?2%<n!@QmZ*ctk|EnPRi930G5s0x43!cn
zpC~6t0hV(H>#=u#rbkW<EBkrKDJ4)QOPg+0qti@mAWGPYCGztqkB-%kpO0)6NUq(M
z>zzq+?eE5W92Mfjb*2!fFG{Ihsg{lSyy*$N;g-)<#AZRUn604C^OVm@uwP|$f5{lu
z?snf*D1H84Tb8`F;a@*4nlgE@*@o^axH)CY>+8)DyhPZN9Vz?v#n%?iVgt;kBVKww
zd)=Y;XT22>_1UUppYd@F{c<g|xeBCaW^9G`$kwP_DeOICt2@`WL|PUbUfUqG)bv=c
z+PxtcGpO|Bd;U?rhPLLy_3F#D+OO$herJA6o6)!)YudNT?|SgSfrD9pZJkl23SEM0
zM#Jc`Dpfvfl8Gtsr{)RsWM&i5E@r`Ioy%=jIWtntwap~CE|s`!npE4UrTN_HUMNz^
z*SVH~(D^3&>v`NM2?0;I@YX8SgBxqXqep_IPd4p}zumFh%r{T1yG>iswzqG;pro0L
z%}JPMzk!TUew-0utUZIaSS2$`<@0N7^X1C#+NolzrD0lB#}L(W0PC<ct3vMfg?x^E
zP#Rm-h0QA)$@Z4Mz~?zF^UE%l&#|#ale3VvjU;7;m!~bii_TRfT-R<TYz-pl_{H>!
zPq6|&NW;r|vS-VdV^cEUY?WVDU-YvBP*<H$S8=3qW<rHn5+%jvR=Tggd=)GB3{o$=
zwwi%y9D0dTzI?RiN#<#5yX|*s&J)N;kUKqjY^-_7Jb>$AalJNndNRNF!Gn7bJ@#ys
zztg-I+qS2<bU3fTjC!B7Z*6{t>N{ediBF&l;qkC1uftZto>;Hwx$IqRo7z<vQmJLb
zvNPSXrWiUKUxK%%hhwS22T#zztYfUov14Ul@x9m;Ec;e9_DNYoB#U&9AYE0Yi&4}r
zYDvz;SX^K7X{5dl%XQv%#E6V_Q0=?M#9}?+h}6XVgf=Ywm^L&&fkkh>lAkY&c?o_=
zJ9tsrjdVSvdS<kt>6C1hb6t9_eWq)f*QWU#Bm+K&&egIbCL$-`ed+bf*9>Aez|A-7
zhW6N>Gyi#W3VY&<U;6B6QvBqTZyb|a<d=HQ!YkFSGH}}*5oO5DOwg0D*Q+X8GL~Dq
z!X$}ov#WgfSH&+<-Z7MWpVf)+jSn$@<Q<pju5_7qSM4<XVXbIAMM=@?v6k#ltec)?
z%Vral@%oE4C&M&U!$Ba^c%)RNx>`+3(Hlvvr6<%Uv>sA7B}>iHy6J=QF8Vkv8XX)e
zgVwQOVycPCc;TOAAF{4D%nEtDMsnEFvbRcKW5sLB_~sxbU!gqw1cL8%7`#fbu^`nV
zbyc_?I*YVRR_#V6e07YSD$Q2Th}EaK-zJa8a|W4~SzX7}S(7AYrwl(F&S-PH#&E$1
z=5U}($DxK|S5-O9u9EaH?$Xv;F0C=PgYNGBDOeTpmC>Em(N>q8l4mlL6y0u%rZG~q
z9%D<PRiqTXime`wyXxr;Y)+Ske|8B=`tSrSr{IAow<pjQV?4w3-SweavdsK>7YeSk
zo42Ydsipsv!f*W@<>qsLz9zSkp_!F1>!J)-G@5g@x1ma@#yoN@%|p_80~ehYYyo}Y
zHh0%>GS+Zgv0I8dOo?VOS{0UpKQ`8l|1mgi44a_YV^k=twxq4qZuB{tqw?V=JOLwt
z2P7~Dmt$^z93-axv2x~i9r@E+)#Oia*TFbC27N?NG0(=nO=h?)*CpjfE^#f3A-G4R
z*7jz^2&L|Lb2@c1YtI6^7~vtZG;2oQvKcd$<<0owm$I^wUrMp@^aE{;U&1ZK2)@HC
z#O>?W<^*#R_9|x58FZ342|mF@e>w)X(Q(RLEi;DZy0KX?)9beDIG#~zhc)mJpRG;=
zlt6P8%W^D@ux)X7jKk1|odUTUN=fHmnfvC7*UWZw+bzn>;O#3%m9(<Y7Ehb@`nrq%
z`1X7JF)fkj81uR)vq!9O{lw??xGLsKkzxq*_&hOg!$o4eFhI<mj*$-`d=H+_oWvRz
zTk)7CD2Zsw_x5yf(i>_MHeZX?Z~ek;F>B7@T=yLdRb+G$W-`JE=6LfPb6KlB+0rlf
zTMM?C55GAD+k|7+Wl&}VOjsnlnv6eKqa@3+)LfNGq$ERYEX-#*WW^I@Q}MTKJfxCS
zvR9}rdum14eMUMqVPLxh+;}KK`M!8#ZbV*$J98c0QHV`(OlNUyB2H7dO+CWA>RofQ
zn;nLAKKA#m?O*Kw(J{KJgsQ8{PJX*^UhV?+QN-|dW)2;{`kAs>%9(SYFaD5qFT48c
z^vSb$8-Sm+fuE(4shLf}4CZts`{I4NjcNAe_;_D)yTcbR)5!NC*2m;}=zC<noSVGF
zv#heu?uf6bk(7!JowXvghKcEwQ5@{iT*8!94C>{h6{Z+>n|J8uKAMfrc(bwNkJ6y2
zNgAVkW_EWMKmI@L>!jhrb4J}H%yFd~J$Lq+zi#LogFfG9-Ygw>dhn=EbC%_gSvch6
zZW?yJ>mFszr;jwA_I&@GKuoRA-#>GqMvbppx0v<fh_U_(X?s>3{x|-{71rcLUW0nn
zNTp1tYIS^#FjZ)z@RLEY8FzOGg2B_|QD%)}W;KjFx6betKJPnUhy9u$jX2CZa7^aK
z$)_zhW|^DL^tpVVS_~tA7{SG)3nLmgMmSo31V0|aERb)m@sE5<jc>)&q^}<{T>kN0
zyNye58AltoY@R=8VE$u|H)2hsrKQHuXDU3>xbY(udJd6FN^=T6YW7H@MvpYb<cI5m
zAy!@rT~yL8vkK*V86;W7>>5nW!o}>nIZ^PZM=-<2YLlfY>3o?f1}AiE_qI0p6x*6+
zV;hjqm2r@rLwlbx+x~2}J(aIiLq{s+UC3Cp1%rH-*#hIB&2E$JHp%Y5ZX<Iz&@S-D
z7||{iUDsH$#0>myax#9T){dc4$8qj9hi>o%qIK}?&`4VOVQFdOyW@g2Sl&?xTx_0c
ze6-Mc{~KfDj?^n&ikIW<e5<;ey%{#98`z)5pXYHzJ5pFxZ0b~1D(ls3$&M5wgEf*e
z<VMOPdLvt1M?Iqp=|Z1oSyDH-tI|X5p>@`~*|HqZ7|-cB#&~J0Jl;0e5rA`g>Qtos
ze<|RgfrIn&zt}kc;Q77Bj$*I<b_*%7^sKz+RyFB`Qr@oc-j&SHgdF5hW?Ne_?4iRF
zFvz|60#?|3tBED!FOP60F$dl=!vf0D+<}>djA6*8I$%AlFXTtmH1dd@PrELaUV;-@
zL(!de?{6)1|7Vz}J~kJg$!rj&$c`8#l~$IjC@GFC$2c}#dBNd8pT=CeOUIw^(i5;&
ztEMMAGB6A2u4g%(Wuusz53ZO`@F@kKRdoG3X5k(FZazxS|J__<j`@b(!0`Ght5epz
z^anPj>?QsRKfSva)JgZun!hcpPIO*Yy*VFlF}0BtnQBCCtoTS{%_iDk`RbRK^`Xuw
z)Z+bN@>g^S9sGAQflqOUve!$Gl=WkH8w`5jZ4-GR>cU1I&#a_ddwlT9<~rZw%T+K(
zp>i5g`8bb>HbxYl;cqwkw(2^(j4v-Sen;|SoD7<<RXS3712ykpzm&x*XYy_j&(D(=
zB2W4m&f;Fcxw}SunJ#&|`T^Tc-p7(bYQp!NO2vjusn~Q%z~(Pr0-&GK4cD%jS!%@m
zUrRB<K=1p`d-%a3_2Gxq?>q0|wLz05@1D|s@&h0Bb)NUr$eZ2CTiQ-PP<Y;?iHajT
z97Kr)pp`eKy_m9R;8)wSu3b|jZl0U3%2wX3qzy7g3-l#1nb_k(?kKsU;avtk*4{Xd
z&Z68I*hlp6R&$}bXe&Jo(|<wdm}3}T521L2E>1p$zfdR<*ZX+UNG2?eZ;$a=0<0&W
zx}9bY?bHcHh0f9PRaT-7K-}a^8{UE1DbvQHq&&B_TWnq0ZgF<$k+l<%GaGa-=9yFa
zEv=Aeey9#GXVP)-VZH|)z<WPf1Cn8xRWY)}`i&TuMz+UjbG-?3{Cnf(ChhSqiwVOY
zXsY1E;b05DtVTAiiY+z_UA3+A(KJjXO8M~u-+%RBAch;JXU3(+r~A_r(i2zVa_B0y
z%D&36CTdmms+d(3R>eA>DL;DV9ePH6SoF?z%p)|TCjZVlI^lgj+tXzApC=4ix{2=G
z`N(^d-adZ&r(fvw*L&^jG2p|jIR~4h_*tFjM?5>?i(OUPl}%ok-TR|8AMTHvKE7Vv
z9jU3EJJ&`H^ZD6FC@XvgWvxWgGh<^6n>5#Dn;W^zwWs3p3dHMuBF0eF*p_i9TWw6y
zxJ!!(5?}R%?j2!!%sTkuqYrmQY01oK(`V0~K5b^%#p=rk9KHO*vFv3vckEzkUw-qC
zGpEmf!~O?z?;RKAvHg!f^E}TsShm6L(pf-2MWu;=Qr3ou4Z9*5dyPHz-W!OCMuQ<n
z6Jv}qUawJtNv;|-iBZ$l<Qlyx*K||vjj6Ja-}jkkcUg@2e7@h;@1I``g2U|0nVB=^
zoH=!Vzae-m{-AuTygIml6@b85p8-5c*!u_}%^hjn6mrTUY>GJLsFW;~h7+WKutEJ*
z90`lKPyb*c<=xNsQb2gMS~+r3>0|v6nfnn-VshV|y}NH6{@jZ%9US>c$Gp^3mdnEM
zC%0v*S30);<ej%a?NCVjvIub40Fp)B7mW}WS!oKZ)Yq6!utz1Qj8{}Qt1Y;M_JxkT
z>Arvyt7oUmj*dX54ynApzD>>83txY8e%wyQynfA^O`F!NSuedScK-clRsX@P12m#m
zmNQrhzH;^2rOO{(^}#a)`(g(?UERre>oZuqs<e(ermYNNuS8Uao(QRlk;G_=!J!qp
zN82o3*v^t91?<PE-5_MN-1?rpDCq8}TE85-Pj!O>)TwAD4{7-K$wNa<O`UXRm~vaW
z%3MEQ`L$ktaQ&Kt7I8$m_Jwn~c`sn|@>nP{GPm-tSD$$1Ffs)RXFwxUuy3J4TX!V#
zDjD^4T2=`c0`2J_F;piQG};hza2V9(XTh2A2ExYCyWjFXY+3{qkUWN{B8jHi@uZ2A
zQ{ElZi>*+W)hm}->NC%4!)p3Y7*pMlCcRtTyPn(+>AaK@)MHfdY>7K1!WbKsVvuZ`
zLLG+6SVyH<!i|kJpJ{%&Wl991L%L~gw)hfUSlCGT=~-^vIICV(%VpAwV27IGcPK1K
ze%oMyNEg$4xX$b>seIjvb(^c#FI!jt{g*xW^&h>v^TX>~Ju>y|H{YDSe|uWJnD_Pv
zAH4ncKd&m+8<d9VsJb?-o;a*uGNJ-mcXUk8+7BuRwdeSc{fpxJ*UBAkfY+3S^R=EZ
zK8p9SRwxYtCoc}8yU4F%J}5t!I3UG#sft|uki~6Y4ms-h<e4ir)z@e2pZ)AJVx6Z{
ztlP2qg=anMv|*mTBgcG7`*sBLb-{cF*dg1vBlLBG@odne!fCBoCrdqpnO4(N=n<rY
z-$y>|FZulbXL=12P^EzW;%}HJ67d54fK6?f#-=Ktvbg$sd1OOcb+yz<><qP+D7>f)
zk}Q}f1e%pxcZ>#}oRxZ3Ct1##9+gh(&)9<XqCqsvT9cr<dz^)Zk)ti2jN7o%HC(+C
zrd92-+*xl3)QUep|CI7gIj&Wh^m+B|$}{iRF3~=PS!qAvk1Zd;yure&?)G}8s$+4&
zrfqOaqTZ>4MnU7$LWmS)CnQ`|^>SKx)T?_jFs&BO%SP-t%&%T?>Be2+5(HdXRV90M
zF*=eX`)N`8${~hp!u8o=TTMHCu{fR_dy(4&{>2fXA>o<`ZKN(--yB)+n(I199biGs
z)8*((rS7_++M&8B(j<A3c9L#^G+(noyFeFBZ~g#{%*_+*-=8Sm7<8+nH=NLhH7sK9
zD&?MHvC|5r2y5SswFe>cF9f~<p$0(;sx!VS)oCEKBPmQz1NjIwTvVkLu9hI*GY}u3
zc{XjdxNO+a559itnDS5dG26a)Y3-%c((hX^?o^CB9d|83c+#B`ZZjKXoe&eH)!B`e
zF6l(n=?IHXu$uL~w7spp%)O(-dqs9lB<5=b^R;s38+qqc?$CyOt`6ZQnEd=3xAMur
zP494Que)2ioUTdNrt8x6>4x;6^xz^#k+UegD55B`D5@yBD5fZOxwKqft{OA+%MHte
zmIqfms-4y0)e+T^)lt>a)iKqvi7;>wV{$~WfD6)iQ|$bg;@*TwrR%2e&n_<Ous^S~
zd*0Je$B!xMIZpb%r0cuN$DVoOitlDG`rNZjT=C-!`Yw+gnO{`wzpvPfQ0NN-@9XJ%
z-&YXfd)!wQiod?E^2q)Cy5b&@-$Mzfb6lUJt+WZ1Mv_GgHggxrW-koq3`wQ;WIgoR
zcF2=5z$HbTSh;0OW!07~RbT)5%Qs*D@{9EG)hm}j`snhNtF_8|%4fi-_gQPWc*n9f
zbbnC?2$gLYaekQPj`s7z6Q&w=Mmik>Uf7Lu#Q;eGG}SLEkb71ZUne=o0L7Zf4)cy5
zCzkl-SLesqupif{a>KeR&l}pH>i&b3*OYG{CcH72{p=MT=x$>#lzws??4BgM04Bfe
za>85_btd9;43}KGL53-8<kEpK1#)F*`2q<#lubR?ty!~S!<seg#K_h)<KFoCtMd?F
zjvp6O2?lUw&&K{k;iqFo61Db&`&a)C&m72~lW{jzVV|r*AL#gX!SLOZc9>2WPV1ny
z6!f5N@LD6D2L;VVLicocl0~pEi`6B#n9G_jz~F01x4H#4>uhmb%Y-skW+}7UhC^pT
zhC2T~I-K&V4hy><ti#@&T-9Z6J840imLFd9yf2UZXx_4fX0%64xD0&J0-h9Mj@!-k
zGET2r#tHpQr<mAqu9>k5o7gEiY?J*|c%@aYOgaJ8OpL0U=@X?jb=PUb61p~5*<};e
zj79mGq%U~kk$4;6d+Ad)-KB^j)wtimCQbDD9!PKY+1-E1qKX$vH&oqxuYcX-2`>*=
zxb|m#*T)~adcJ(0oOiTMo4);flqQ-YYnSYMDKYUxcJ`Q|%QHk%+}34#{ua;Ix(a)*
z*X+Vw%y5UBG<vgCCs^5OeO-_~*Z_5-)?za?l{{|V%ExhVR!_VP+LQqLXN9}{6UvAY
zbKd^+?E@rwXm%;5t3A6HkKVfPf;h68QJyxESEJ++cisP*Aa>eFyt))joAYZ(8C=rw
z-hWkfL)JULsF-}Fe#(rM8;>8)cxL9o{cJxmY+~2qg4<8*A2k--n$B}9);LujiTBhv
zcMI?kJougJyC3{a3r~5xn6>m4J`E)bY0KsALRTGV0_R;f{z^A<B!xfhO{7HABVCfL
z5tBsG_grU*V^6ZKtoWod>pSrE0n)+Sy8#RSL$<h)(8O5XU4y|wgA75WxepEkSO(}K
zwBWBg4S*!24d5fCjWa-LbNa88HaHgI0)$RYRS@Luq$+My<qcF4s&2nB*dPbT32`h&
zjFh6~2u-vhDkw5I&X_DfaV{onT4-D767{W&d15<Fo;FXHrO!8Z)ps`(2bUTL!AdeX
zc&Kqa3OtXOCut@d#s$xX)nvYYv0+wlYjaS9NJ^myO<WKhxy4jXp;)NN4=M>78Z=p)
zq?s7BNL(f@Kn3-Mn#DoOg2J(HJ{=Du9Z%hv-H$zSrcU|e@bgCwV*}@jojfO`4YzlT
z<2^gobM1+}T!Xy~7M^jJKq7(d+9}C8`UZuD$RsChA;IKZ9pp3w!L2&T861S&H8`=i
zu#w12*5k}Y?@wZPy_TdF(nF|H%MG8&2<}GMLBC#(+>ZkPjUCl-Ye_6*AKiF1NjH}*
zK)G)QSc2?9?d7&X<?^5)J=SOtNsGhPIr0c)I;+17L%{LNtX`RZk+onc@<`8Do_h9*
zQY4m$;mQ<-;5x!#<mQ%FV68S`x4UbI(-cCe6D%5xB!O9-s0?Irnk@o-vszFc%Iq|m
zLONMO5wm8f)Sa=KPKP2qB7`))HodL8scR_kTV1E+2I)rgny9^-t`*xs%f&KtZ6u~e
z%9gnn5piF(2xCM@vMJe|Ywd3BZW|gBM0#X|6+ok^3Y<BlxPq+TrrVf=HXAFpP3>FJ
zP3dz6IWxPRVH4+^RDNsUyZ6o!XXV}v+ob!|wO+uvT9A3dAPjLwOLQOfPAs<*1ntw1
z#h^2iS$9F(HHc`dS8?!Xol!37jNJBiQm($MRH`2=4bhL2ChL(pOdk}WM*6qZ+OtGl
z)$kH@XAjGx_cvVIen5h9410cEIU?PH9NbJ8@6L`e+k>@9hDeJ&CRpQ&mxSOtgHXp_
zGrVrE3q6)(Gz4jyIU<CZAWf(kCb%LBg3Owv#wQynJ%1so0y=c{^l$<Ppl7AmuLh<Q
zk|PVi<<-5zPwhBu#p{mync<rwOS<L${h2A1g@sj<pZVQgTsd&qwCUvoD^G0McKwGP
z4^+?E{^Rwn)q^+x_Soi#sLi#%RS%-Ih&ClgJfV$&j)(l@j|KS2H(cZ|A@RgPZOm`5
zIjLvRxc15JoVcVYhtaH$3bw<&T;oCjPF<8xm-t%L>*hM^v83pTNV}Q5og(dtHd%;_
zvlm!|V41HTF)REr{a5Sfo8sMrbSH>AEgFFZ{#|g;q8oQ1m0j;rHK=_0v|)p)x)lDt
ze@d0xT{UI@?}aCZRQ*=FIVxiFW4~1msor}1$L+JKAK3B3^=;~UhOnFP(W1Ps$!;49
zmdz+vwmSm12^Ho{DbdhALj1ebkbjB%L;)0D)g;}dkX0Z+hvaaQ&yT#IM|Gd_nU3II
z6SDeLb?^O9|Ln1)M*9Q9i#JHdLmhImg5>z{4n>FZ+d1MiK{@ct^2b$4!0K37JcPAu
zy$rV)5k71IVO6*2G_v8nW(~~>wIZyF;;Q5i6y<gcv6_uj9`($m^@ze{<#jm;u{Dv1
zvgz$^83n6%G~|)0Xu~FbmF9vm`hp|ee!^_52}y{un{-YiNL^g4t!o0V{UwTnQeW_A
zareQ_z4{=?R($0YAB6Y~>;P=o)?~zb2sz-nv5cv4MRHQ-l|@CXI(1)}H{nyIf$9D=
zA#bJfuhqME%h?B;w~`xnYFalx7?&U^pRrg6%e(ytD+pzA%BN7*rb;7?H|y)a#r+~1
z@DSL)qJ%=XOXpy=pt>-<5k9LhbVY2p7<ZV25JRvo)*NcLM$=Uy^#?igb3bidpiB8a
z4G2FZRR==vYf>d;sUBH!m%?S8*DhnTl`1i!A?xPruYdG$#|@gg`c|!;KlRUQCGEfg
z_HOm}${#U&U*8nY$UWsw;3;Xs3U{Q-5#=;BZygdI8)ax|Y@HHsH_MXYPMkBUo(b+0
z=}wD~*6DFAnz=%pHdA~`Gp*TfYZ)7El(oWqhsm};JHNTB8N#=qd4t|rwKw_+0pUJj
zUE?oFhZ6ABL|G{1IJv7SLU42`gqz7Jx)e18CnqJx$sc9X*u}%jmn<nCwm5uW`M%hg
z*tq>8_O%(7nLaXoZ^b?&9aR6F)n<gas(jI+@`@!(*#rBA@5>mTo;j@bz7bDTG~JWs
z`?7|&$sFE#-+lY>Z}t9wB68odaABFd3+xF7ZaXp1HwpAEjO+<vokX3+V*Jt;<kWm=
z*Ga;9Q#iB2x}lNqe$EfpjteowI;`V_{7`cQ4iD-9Xh$+{`p6&`_RyS3UxbNVG`^eF
zs#XVR?R8Mb`BYvhICGyBqOL)Cbr5?{nSMc;$*Rkh3qPq=3D4WpcO*{t+!Bq`6L(C<
zowO-WAa>{x&_taO|1xZIuz`S9>Rw=a&_}2u2u6sYc=L1XI{c$>9Y81#9@ISI2@-#4
z5a@4?H?Q9*kd46QOra2V>HNfIv3Xg+)@Chb7F8YjR_xnORxP|Gzn#9_S(K===Et{e
z7u+l_OV-5?4ATv49hN^(NH(>OOl~(Yr3lmAID6^FO}HjPg~M3{*`xu-S)cDcS~;eG
zN^#7$hdI3=Zz_s3c`$IpZDX(&UTx4}0$=dDmG<|q&Kou5%}CRwmBWS?w7>XV_eTd0
z-j+9h=JoI^%ZCrk?{Mzvk{YF|u%PPK!u)DY-QJXxvTo(G&H8ye$CX!Rx1H+Vygw!e
ztpj?FUu2qJGk#cgMynZJS3Vx&x!k%u4evqvo5C>Q$6KT+mL5cOFYPztLABz)WZ}AA
zGfHNoxM4;Oq`{Vx|88OuDaeZ847&dOd9CIA`STb<!q*bmJbOdeoq@RcF7A|&tEQl<
z)@#X^3fWbp3UdB4@>1dZneUeBD#Aj95v_E&VJ=<n&@O3TD6d+S&og<54b;zM>$fPL
z@2}vw@7qHn?Od_z^X5!}@j%_JSm;Bzy%-t+P)A>Yq2F)}S_5mcG_w8l_H))%uFRc~
z*>+aJ(YN1uzF^kb$;W#1=+&!7&tsD&AM4q(N6#KTj!jv1wY<Dy*sx(&moB-AZx!X`
zSLL+(qoW>PzIt;+<V2_A+`;G0JNA_J=utm;;tM@`(tr4TeUBcc6UxhnT~j|s11wp3
zZCH6Z?F|n0vh)gY5RRR&!i;sdGiZf~xL_x^P4l0Uh3}ln|IvPDw7PzX`#$<R>yL@s
zTPDYa2~LC5JS9BDFgbWioHRLXQcKmDATyK4s1Q8@=H0qMW|_0!e|Lp&lF-r1D}1Vw
z0(O__h3kvFrWevpiwCzX9$YeMRdsd7s(vfBzjUx}-khu@ox7|nsz2zNBG!7w%4J=8
zyL(m7jww*wGdgx!|G<h$xx6AVepz(%L64C_%E9;M!Ef6pC*m!Km|C~fAO_0~I^m#6
zG-{BhK{wYZ33D|RaYvk-!${Brr?{frz#XUU{F~U5v^7eq^r-q>PCTjHQf{4OPxNC?
z_<tlha0r_X*<pmh<I&{ZNV6+NGo&+tPaC-wKsy0fIZy_2?B3t7P8y-u8FY!r2mgN?
ziw3ge#cT3wX)E-ES66ogGfNiZa9H(&hX(~2IvIns4nvUR19R91f;H$$$4f1Q%h{J&
zydU#!FK3w9NN;sRq-3{L*di-}q+#83iMAmfbcsXLfcu|A=Rj`FL{=ei(({INUN<bt
zceoN)VBKiy_Tuy6_PNN$u|(iKcYbju+Hn_%c>KjJaQ?-u5r=HuGNdfDee$g8DH#Q=
zb5?#eetdapX_tH4g{AknGjh+-<GKwuX*zd!@laVy<wLP<z*p^x3bWaudtHbL_qsYb
zlLF0XX)Cg4QG6iG!fJe=&oT-$Wd-6O&jHOZ+d!{Uk!N@x?vn{pmdkCmUo^aFz9?*u
z3h%ESVC!#;B3&>c05%e4Ro`xa_JSH<6I4qPHcFh>aZan&X^0*^TEC{x^r?NyX3o(3
zn9-*7tWK+6IJ$1_iz}v=mEAwBcb^$5jt>E^rMODiZed>tH~c$Tw_E;qhz9YDS{A97
zqm4qODagXP6ERQ{h`_1vV|orP!RqIWRvsfDj`c@c!fA7>^1=b-DC>CuZz#q(iM7%a
ztT9{|<qj1FLkZz<iuUlq&_s07gqwtp24=vuGvRMDwgib#n89tbZI8fZFzJ^;N|wON
zA(e55V!jzSKv^k#MrGgLumFnJ;f8y1x(TEW<bsX7&pSP@emSo1*nSx^i#jgou=!x=
zJjpa`+GnE{W)<{o)@(_1^qMJo^XAb0Fjg#9Nwt8vxlqxOQXPZ>IJ*#pzYQ!HKZW2Y
zEz}wYXa|F#-U$+-0d#2Mb_BN}Vk|6TS+ZrBgy6OofE@AVm$-geg&kCmg6jRjZB2A<
z-gnvE@QWXf7<1z9?Pqo9I<xh-xznb0Djhz0<lt5_I&__r`QZK`@<{vrWsBF^!xltE
z_U%&I^Zugz+@f&j0;_HAm~O+do{!}3r5AnnckzF>zmrdpc<VLgrJZDc=X)ZYQ3lAn
zpdWC-|EOhXM4aT%N(Q6EY}!imrf5fva0cqN_=sSGD^3(_J}p~3$6en84LfinlWYoH
z0YXv3=}mNQJl?^}AiWZ(^-TTz>C09ecf}iGqLaHM6!tK-Su?a^Su16L*61nOyyL(=
zv8rKrhuol$ZB9p@K4raomU%9NrcS=of%_tdz{Aptx5;{~XcBaTHPT>~fr#mA2;SoX
zFK07voyC)g$SeKfK4@YwJ5_bE>Vun11ILT;+PL38m3mvR*Pr-G#gDJWH1Tt3B<_zL
zg=82zhHLJN?Zuttu|^c!D~&{i(VaWwG$FM>u0bv8%@ckN!JXKu`51gOuVXM|6@f4d
z{M7*Q&;V?LldU^MvprZpN;_CuB8=hzq&`x>v7aOut1deyi+h($e)HqcH(vC7AO(qI
zT0D^ANu5S;O2RGh>+8T{iVuz=ZG7ZU;o#7=ABFFX+oL1QhH$%Nm~5URO}0<M3l%dE
z^;Y>Y^c_TW0;mjx65J(~`bflZCyt*zd;GXLvnL$5aQ@i?=Px`f?)6k?7S(RrwDYm`
zn`-BL^72a`fBe$RpEQj0^43?tTPqrQt5Fjqao(!YGoy~pg-7vR)v8H>m3~N6-pX03
z0nP%5OfoQW9lNZgg1f%2wD<iaCn_WQDI-q8_H8`b_#<+dM8Ws8T)W7UqH_!N4TCHx
zuuLmLtwn1*i|kJUzxTE$Q#<Ts4+w8G4D$cJGT`%b?!@>$590O8ozJn)m+?|g5>~pq
z-8&{KUX6(octn(tu(lb(qH3D0Pu3<PEGkYTNHHujk)onvBxX*CO-v?FB2c<3<f($I
z!i6HbL7*VYo7`dGuR^0Jj{=231-KG$o}q?IWw*;lOi`AYbdTt$&dK80^XKI*_Y9A6
z4=7?X(u$anNE<7~drddRk__#YVAUC40T#~@bZ)6nFdLo$^t(qN3Us}9pQ-+FPV+ut
zM>QeVAYH24;IgK{JZ%n<X;A-|BmDhO@&1;hn#3^buj!NM4ilU7?d|V-g7=L+s<E1=
zuXToLnKj*1WObR+tb)mG)pNk%rNq}Z75B!3GkwK9*q9VzjEasjB}GTY;wvU8Iy%ag
zgn&+bg(StB<BdrsquCta$ry!b&mAGsIlEy?$Q!QcnCNg<d|Zf48*75$D@rH}H*3pm
z;XR_$Y(3%=EZ5-g2bqb)Ca;Q06??&O^S}6lL}5JEy?jpf*z|=%;nAx8uc}R#$B_$Q
z*qV@yrj4;{;^b;$wQ+gKa?|oy4RpeRW<4FkqkIM)&Kh~7lq3u-at|I-R5bJv3Yps0
zzT@s$v-Y?<u!Cykl(xKR=-`e;LxwbX^io;;g6^~S?3vYlZnHl&sIgQc5gZvgpTNXJ
zg$eGQkR-Foh%alB$!xMDnaw6d-AchbtQH2xJlziKVd?K72GSTCHKrh#h_vDuTaYP@
zG%i=pf?=o%^6$U@{ub>IjHdp#x^L;=_jsO@D8j#_MCO#@t?~v$(`PAfB1h1t%I<OX
zZ0G#*41v4epdYqOS%H6mHp?oGf;LlZl_gpH+gMO&WK>hzU&VTQbNp^jv;g>RV{?Fi
zcekHx(oT4+_CMXEop4ZXKjCeE1LJG?_y|1V<Ku2%{JY!vo$<HR_~?)Orrwj_qZSuz
zK9=rd+I#Pu`gxj9?Wf|r{wTAV1zjq2qRdWeJe3iz+z#$|Cya5SIF%3t>}x|qw1Vsi
zvt&vchV<~T*kBz6mVpL?9azrtQ+X|uN9ThFxhVD!(Oe)WR_2TGqSIhUd05v=%CpM5
zOO~)SZ?G5BE5B(j`+~c~S05G^{qe3E^`)df?D-VyB%NKcZZzNrtXStM+}Q<!<*1wx
z3ixrq6WpP``_1Dh_#S57MT5fqH0bU=jWp=)KD4*$I6fL=jEuEmPJ=5p4GD(Kkv<xv
zj!85~?N2by0gT4<c<Qg|lkSdh3L~9|+Sf;e;0r~4tuvyQ#imCU#k!)>VudJktV)9z
zGSD58JIDh-gW9;GgD7kg#z2@%H4=BJ)*%Rq8IWn0a-eXpYWki@5|x4F7?{(*bOyxn
zjZmI=0F}e;dq8=DRXm_Psq6&{tzaYO;NSF@vUeW!0a`#_(BFAcKCE>@7C~HyFvZ<I
zwM8<RnIM~D;#^@SsbzAkv?J2ABYAsd4dMq{xe~1{!(j444{c1MwS_iSo9S$4%}mU0
z#ifZ;oQD(dQcV!5V;M=nr!178g5HGumz3v$92KGbFmRK)2&*qc8XNAFKx)WjF`JTj
zIGjjdG&^?HfSv1tf;`vRZxOQxJ+?|CzSJW1SI>f@1=SOdxRQQtnEhPdrm-xocR2;X
zOk3aDb3uH&??C06vbJoT_(fj@`+%sJzI`tgH*{y(T@)44uk4Ld;xF9ipW{^ST{soz
z$EmyfG~(3VeF&%2aeO#sbv0ugr<$d?gl1-!52w^I2~X7iK0L8Di>Ln98S%@SrN<XF
zbH%4MLw4R~98UmmBOlJ^@cLnK8B}<2--#wvfi~;$c4>Qz?XU?ug6o+c{zvP>^dg)$
zHJRqzP-M0+WI1qf<Wh<g<EM3tVqF^pe;{>cxkwB|EN3Fy`pvG#9^0k#Jde_Kzx@Vh
z&hv7-=cm=HR;^-3mH)nX^`m!{2XQromtl`z0y|e4@^fWC#|`auh)a-LIyN~YD??jW
zN{@!tv@se&VqEb!|7Iy#ZH%^=#nD=8=^_-T(-Yz%a!p+V7XVnKM<7KmGIS}I$-+fA
zuf|4miARksY5J^EV@pUysd{U?{N9Hb-xD9*pVPVhj_IGA?Ygd0&ov$HU*2(k=ZaxZ
z)QSscE|~R_JoEBf*FQ8Z9-GmtWzz7y59~Y=5xzGrc2wVP_m!sPuIaP<*~BTcR&BaX
zKD#&v?w_n3kMrvSdaM;X)0MhM``mlCixZl(=lI4E7c^<N_}Y=15dZnc*J*w2;yh}{
zU2cIrKMWs}Al&87LbbblL5?}yXp`CnC+UUQ&cQ5hQ*2d~zA_<aQ@fMqHo<ja?3FBY
zrMvx!<_R@j5S0*~R3N3<+Gy;yUTMOd*x+7aoi)AMrOxi6I-F4Y5pK!ik|}@L;b8}3
z&&^E8rU-n$)u_hfUDDl#^z8I@={f1S@^F?-2f^Qa-q(5z)5PB;v8qo%=sMtN9r&VG
zO%YZxF5{W`L;F{hvhR8g9^8|C3#}L%H>1yr%$(KTrakORSu?8k$#W;?j2V%;y0F*k
z{9%ie;#Utn^dNh&q<rSkQEOOr+Z}7xKbBf;PE6RdB`fP-i`0I-%gPS!efIew^OvWl
z>`#m@au;;^PI-&=`3&R)_&}4KFp<s|j%IxS$tQUTKlc*#+)ejxpL_3iaYB=JI$w-q
z)e4i*4r$sQL$?_7AHf~&!sq#^34Yz(?!&Jp?N%+vFN0g-4oVN=tf_HKniFHvoZ*Ps
zI4W5}v?M8b{n~JEBZU^iCU+m3Gt|a}5R=&=TgmCc;dF*O?anZJc(}7uWJI_<EL7_-
z$Jzu(Y^AYTrMAZCc(kR>9xkPXg*v2o12ROIh4>Vk)Fs|#;Ews6&T!@c6yZ9<n-_^a
z_*jD~^m!#;N?equBQF6TXYl#@LSe2+$w|p_COMIh(2rT98GG~9y4#=MxPAMRghX?E
zNwV^F?00n^Eo1TVhZ6g>eyC>K`VHIKYtk+$tIt6<`yr}s8kvDL7sb{?TUCrMJNMv-
z(F&62z4tm&RGgi5f$#w55T&L2*_Y12e?PeoAU~geP0r`;cHj9lY4@Iw<)}F_)(&c~
zF+<+KF=0NnAI*nx(U0gs_)&8k7xfECcNMj9xzgHLTybr*0sZMrd4EnP!jBqaqa^CT
zEOtiJeX(UxePZ2F=npzEMA!~p;B@??gRGGP;Ytx?MXTS9B#Fq@F%On15;4d!ic5a!
zEYv3C!3f(4x%z4#?6L2E#(&CWN;twc{Ve_SmnRO;<&cE5JG<rW^2=U%Vz#?5wN-Ll
zOk^lrS>%uw$*!;v86ribT$vnF8F?bPrd4Vy$P*S<Y$ETXYvHuS=;Cy?#4Z+_v#=G{
zCEX=cK(z3_iNCkpB~(DbKqLt_tN;^KGdmfkba?*wWC^ln`D6@fs*=%cT*s;{#*)M_
zoi{yfGHps}@ypj^cja##zPDwoU%r{}Sl;dm$>@1EE$ySrZKwY&z0H;L=?`?<-R;aw
z^2p4|J>2U|r&kt|mu83j7kjF7fcv6xycp61FYa#l;YE{nKVAeoB1sC+m>oi-iWh1>
zI%kY)#ogt25fteZ`8h|<aNZYL=Ij&ccB**6{d+hZ6&wyeAMQB!A%#CO#Z+(~(nthU
zAgrQBe*!+Fuio2-^yXbYq-s8={}&%p-5Z`G_jV!$&a1G}+EiG5yiS#M(k;nGc<^A&
z&^!oXM-8H6!kP_GJ%}zTO@u^+F*rZg{9;KKEBSiCl{vju$ADaBe9b>b_|Z^gQlx#m
zPhTeV(Yu8-y-QH{P37w)7-w_Salj8g(OkBqi1XR&{5ODx=0*D~@Cj-k>iY!Rc@7UQ
zSK@_<_ufgNoWJ+z9FzFDfTMt~%q3HszyAZ46uk77vc>Al6z%^0;)L=*KBSIchIPH(
zgW53*A4lzvy%ei?J7x(OpX5^&o-_A`N1W(|X9MV7KivfMPvP*NxpRa~2Rz_^8kg1%
zIR7EGzw<YoN;gapqQ-K$C8SSR`Iq<23CJG8@6}kIcfngIr&x&_<pC0+b<&pxR?m#?
z=!8l~bfu-naYFNGuo!1Vw4_!ar0o`A3oS_^DgbiiBzoixd-6bOK+g%tsT7`)Whd(N
zKg9YdZ?la0lPB*T@x!tgJpAy2KmPcOs2@5TRR_TF&_;XR+`Fe-7Ep06k=nt@`ChC2
zInMpLzn0^c>CgT7S>B^RKg*{5fpf@@!f_6-W)&hj8?+-niQ18|+B<_EemYA)4qQAV
zH1nM$WSLQD2jt*w6BBQ9_<2qf-BgZ?c<EyNmb{(E_Ym%qbb;1V?|OaxamO;L9lZnk
zH{PYD{rP(D(Vwrk>G+;Alw$?!IwUN=^XXmi^hWzm_!zfQA;NkIcS{=K2acu!ps=Gx
z<b)u~;nJqT=4vL&!QtdQzDfTc=pQchIBe_di&Av!W(XsZEnga*j^82A5$1RcZ>&)0
z+Kb%rTG56a0aoJ<J0(|vy3y#AV-1=NTSyp-wFv3R@Bm3U^P>7U>H8?)>RLWEBHaqP
z7^zrn<(3KLRYuc>^J2^M>(-t3TsgmXEq>Nq{^XNS_TK&*Wnhu}?%n&zCjbS48SXfb
zSBe582?htnE7?qS_7H7l#0iTxXvq?4wHvf1OK@>C%-0ti01KXe1PC<$*8m2&fN;k>
zE_#!TJGndoGN^aBFOV-ZV#$(vHcEN?PXSHxFMAg*+^d{MlmyOz-k@6D2;k5u(w5*1
zpr3*y6BllXCCb|;+-)cdPdB86y9^|mG|H!teMsuTX+lcn?dn+Rem+1WK?4j|H;km|
zBf2G(M;^hPT>^MO)6X~Z0QK``y+C|KL-ar3^XmO<IzR3e^4#E_;FGu~^NFZpjYrUq
zxGl8zRNKn};pO<v$D#S?oH%^)NXSPCZW}qDssUbVe3uShdz4*|s2u!f$wY;%&&J<@
zQC+@>E{un4?RUPAFKRwSvU$p81(h(;<XCIsgTh@qg6-=gVs=EaV1qFs(h(kGkBdjR
zZ|1d&nfRvWP2z7iJl<|1UuY6fos$Dkc$(3o!*e<%8Rk_I`ndO-SXr>T+o+Ue#lxyf
zO7?f`==QW0hu^s2dGf{$H}dL~_V6XvnKQ@X(3}a#=Of>_t@MyLg7#C~8RcE??oJM>
zG@NmXQFS(J+*wofqmu1(Sa_W?NHQ_4S&p~IgofLqBV8njUc8on(Q*yR*1b^U-q4#9
zT4HR{pM%jfzHLjytxA;M3k*$bn8a4HRvsHm{r1}(JK_QZ)lT^X<#4W)f9SlI9;9>n
zhY)DAQ~cciM*7FTpkqb*2G1vyLkM_#XtDylZR2gfiFU-jak{nT4*jM#e&daY10Dnm
zXOYAG|1us<IQ>6`!;vP?uQA613jhEAARJB}siXyl!(p$^;f~JM-4D8OQu&U}1zkwP
zp5W!{;*ta3&)w(~r1rV9hxh4&K17dA0rdEB<ZkiOV~qO&_8NJQ=nTfwPSdD#HoMV|
z_&aL9P3<%iwR`g<ksKo&x-(V%1og+<YtbL=Z1<hx>L&vG3k%ptVQrKCFH?WCe;{n}
z&cN<~|MEOcAwrHj7Ajn1!9!#SwC;LPEf#DNjHo%FLz20+NGwa9i)|p$kWhpBe}nu7
zC<#}R6A}*SFBGC5Twon~EAuF4(}QIwzTtV~qv^``NNXl`m^^J4Es7Bp;<1Ky_`k-7
zAxax5J78xv)mbRyFxcoYhf3No*$UnlVsMZGxdA$4)$@<$C4(@}zv%OjMhqenOmLb2
zQ2eoom&@299+23fOqt`2N@UI6ozC=P+7{1=kESW#@jX^``%~zwQOAVjhyZ@8C0TTC
zm=3Ld34HAFCY%*=IMG?Pq_aYA-hKw{QCt^uD4p8<{juI++*58l;Brk%RmMhp6qm8l
zljIsCv83^#?vS^0dfgX6bUJaA(jC7*-WS9|6lne{#0Z&)V1rACY`5%)+U{6y*X_{S
zbs@1rMyNB^f#fed=9dIfyozC%rDI~&Fr69<OXSnfJiT#ta>3B@r`~+JymhMw7FRuT
z{(QUor7s<qzHHE(nKZe!u<#-2KS!UrdZA&k=JIRPA5b8E5j<xA57rB+4tOHqb|^b6
zl`$urrybflokItUO=(!T)>%y67LX$TH+Xd3fVFlx$SCPVNHT$R93UYwxwtDrlLri#
z{p^5&h;?eGLbX&pzhm>T3Ir)r&|_xCO!6bb{;775Mn0U0=CGp{QF4Hf8v1|_r{P7W
zzQ?#8!^ewp%lo0P{%EKuML^f&AFGik(^!_Hk$S;JJel5Of%*`y4Cx)maug*S6R96~
zxVN9*?qdXn0gljk1hZf7B5vjF1P4At60iIU<TneqiN%?A7_C7&^y{6%4&&cZ-a;>i
znS*1)@lI(S7ORQm**#&Mr}%h&MR8%V_t1<a+2dWLmukUqPwB40g~Dn<fPqzh#q*@{
z&!2BWz0?nh@JkSvqx^l-roR`!LA)2MWqVi;)krC?_(IvM?E73^0jbi2_u-3NkL!SC
zV3Ip8GmU#)I+I<&xlX~gDXuD5sB=aKS0*}Nv1%)`(@wNVtjQCk%;a!GFVmbjsh6{J
zSg%&I^MD*YixV!msx;vYU$s9&Wvh}K@83Y<w%&RdF^tmrT9Tnw!#W@X{K-qlr-tKF
zp;dN@WrGIyQudASS2l4%S($WDv5%QiwkoZ|lG4#z)7vf|@Q(ur{xNiUTGGnFf7>EH
z7@TZ)aNUMosh)54|G*LtJ&kJGKRwOX4R~@(cGkhv7M(kF>Bx`@f>J^hb}Z~j>R39*
zYMj@*cu#|t+&RW+NjA0fSkLvKB`K&S^_D=?WT4s~Gy{3Ph?dMEnt|TDzYFb%4W;(=
z)Q;W(<I@`nJ&BgwIZJOOHI|gq67(cm67XIxRpAjLI6Uq6IG1sLT9vj%5;TLn<MZ5H
zjc*M6Ca{0wo66rGvL$kP0nWd1yhU$ye3C^u{A#<uKjtmvv=BWxEmZBxDm-MTKu?0-
zJ5CzLLB1^i_&MJ8RcJ^2Cbh#1t3^F9b>1}W{}X(C^t93&QVSa>?93qs)y|AFT7^D(
z?NZEzPXUI1pm0z)=o$Yk_Z4XEcFM*bh{!b)CuHq4NJ428+M`qkxY12wM<oB^X5n9W
z7twv9FP?_No3so0pntuf{EBasyvuXyfaj#x@qp;YJbZq{o<<3s+)z0iHTF7vm>gag
z#Uf4{>&!-Th^U2rQ)`b1bw*JD2#)~4U$`Q~{wQ)qjTKOJ3wZlLhQtL>15yhZy@*Ia
zR)bPM|6C1A{rq!(VCvVKzvhvt_)ejz*b~*x7x)g!#fDmrriB~gh=S2O2$YVWt*Ybm
zzJEaLpy@-;6o)>B(?o|$uhK+y%tks)BZeKdi;@QY?xMqd%m6w}W9pBZkuXf9!|GU#
zbXbKhPA{1GoPIj2!q!NKRoEiD{Tk^oA5T9JIDnDBW9Pw-vJdt_{ro@Cj!yy)=b7K<
zYgXrnUy+w?)BLn=YJa*HD&3~}_<kzmC`X%je7wb?e^mPeZx734qo?t8(8lfH?f4Yv
zhN@Q+*kY>|wee^NOk5YB?mO>8cNTgL9eU6e_xAuSstz%54A@@LBRF6TRfoyPFw(t;
zCX>&vewOUK_zdoi&p$&p8~yjD7BD{Or6p0EmLT^o=7rW%wy3mZ5REz9JEq#7zc0D|
z1ib_LTd<C5+T*+W12zFY189RfKG6n@?4u1Ne_&q9A7e&71&5$B%5@rJW$>e#(_%;v
z{9iSaj;<>#f~vGiiDSSQx$=PYalRl!ai2F?%ys0Bk<Z*NP;<r9KqwQ1V$dtfc@#;z
zdw1R<Rr8RAs}H>zaU#xy*n)r*MvE5Ji=>7S#TajjBkA2Hsf<*0M8g<%kY_p~`viP@
z<)^q^+zJa<k-OQw@;~dm`JXBMb9}RuRLiAnm-23AUQ@k#iA+FY!rgg&iJv9k4|ipN
zwo(=yN?R^Q&!<$-^B>@;pii?-0jZ!*6ppQZ=6^^Btw|d^Bcu57<Ae|U06+3qTeK2s
z(i-zd*&w<8X%De^f3<hwkDhaXwQbt4`r97=o{6X~Dad=UXF()AQ-(@NxouOD6H~He
zCmaKGTDSwHFt+E1!##TR>4S9FY|*&vHESrz^*%O}7KT`#hq`p#Yd$%4&xHvSrK2|(
z<(1FJ`ESGd8{u&W<ijCDOhwdDRwhRVr^Ba(pgdM7OnPtq>b1pPx)iTnt=!*g=lJsv
z;J=Gwd-iNoe;TDAh63WL(=K0{Hcjf+Z^)yyl+bF|W2vqBSJ8Znfzw=H4&PYHX{AFh
z<_y6IsSYVRGX%HIn_SzQYJ0n(CbBW(WqK&&92ZZz?#r5>X3x;-HX)}ra?ckjXOvHo
zQ@i^!Lnx>ApaZ3vT`gKD6Oc`Bi!zxf)kZy;On6zRyKw;-U;D$_3CP_d1Z3=XLOuth
z!9K*OJ~4K(TD8lOJ_|_QUEaspvizyA0a>m7oWZ*#s|m}>#IquMT`}eH{=uKd8*`4p
ze$UoyrrlQOL{SDf?=+p#YogDQP6Z_ED()OwfGP1_xGQIu*qr5BW_6=?%+hTgeR;cp
zrx41ye%hz|r+-t9Wg9rN;M>eZD_<$y55FrJEB@M-9{lTe`RTQ%*cjE5EV9vyOp}(D
zJS(I4*pog_vfK0ME)eghoZ))GfjLx?(Sb2A>v$I`Y2>s+`5kH15Bqm*Km3EItF%@r
z28#ZYJ&rB<R(xZ_Lsg694g3B`efz?mu_w*!G!ax$cno{i7C0J2_e-!)I2U(JkT7Z!
zbA!{$?(<TiC&eFCI|I_FJlaaqC<A!@Ft((=Nn)`f{ScN)bF5bi<Zh7ng9XS{N!|(Q
z95e_Gru&tckjAokm~d7O3Lx;?hbUtF@s&A3O$T2h8TNE&^TN6FULBvgqf>E@?uH;&
z_xzNo5NnI@N#8D5OgUy2#VzyYnCWR~UQn^VUq55B=fcfqCZ<M*w}}r8w}&uk+YVSb
z<G8=|r^;tLl4(Bz^RlP9gY+_<#lc!B3u!E=pbw%(+(zvVeGnu&d58Y*qAxSMsy`sH
z33&p0Bk#gVBxc|28GzK&sRzWE1MI~E*a!Z8!~LY(Y6Wg1a;Rlm+8G>~LN?`%L7*b>
z8dL?NoNLb;v^zq!$2fMd2>4Xf@8K(S>((W3A>?uiB^HG2Hr_ma>SYx}!>A@y&KxOp
z<96IoTq)15ltlT1%5B@08pN;r>;J=??t-^*ahD@su$n|U@i#ol?<ll(dPl0Yjtbqu
zC}RYN$%xG4bW}3}V?fjgfO7yaR6p9@LU8N|{d<eJ=Upg*RMUdMyNSQ(K}Nn+Jmi2}
z+x%gIYBYM_LyKy^u=-USnC5Ete=L}IV(8ijYd7uO`N)wY`$oSu9#xNiR=%y3;u4-%
zbnLpz^<wkpi)K$<xUXhq)%Ld8Z!}B(_N|9s2h2s#BRqsV5sC%)MCkx!1zRjRJjX<%
z=N1$Khd1JaliMsZ+b4R}0JLt>MUX52YbUd(GJa=itblPO&h&GLmWap`Cys*Z7@6Yw
z_B&RbF)2A&R6bzM2Pfqhk1{~}RMVn4<&BHFGIC^XdPWU&u)U8~q}U^AuD00Y$3PdG
z`)Cv|dx1z)Kbg|;JyRc`?I=JnUXJZ|-j^Cbdc+{B)od@{7djv-m6aVBdG@tauXP&V
z{KF<m@*|N-F#<%Z-P))>CCe9uXyh}h({zWf+D;%@!{S}p7M@-si@{4VD>K_7UPT3i
zkxB_mR?<IY53mQWdY*Xg!;9iZrAV1`^CnX9-w^Am+-So-#4EhKaU<)h-k*-3QCqN=
zxK8k)1+$|)Q!@sWzCBQTWW{fQBjQgiAvq_sUE0%+>|9pb{k~4!mh9Wt%i3e$+(*PZ
z<&&C>wzAm0Q!RT`8F%B;kt44#S7UOywZ@E3)p^N&(jItV#k@ExIz1=eG)_LLC@Qa0
zF8)@n%a5~v9;g_qNj-3&Vd1iZ!e=Lse~sUJ`aJ9(v?KgU#sxE<b%O3SPv(y(7Ufsb
zo6`SxrsHY-@jg=~LE*83UTCzT(=ZnDqk|6%jIS|{=^#!3ugr|`9QQ~JAg<dp$sV?}
zB5iVf>wIfyr>T2IHRJsSx%Plj8k03EDN8obKIlz+4{a!(wT*e^oPd)^KEGEGD+1HC
z`E*~Jz_e}BH`}}@uUG^1)fjU(;HCU+7}Kv6<qtuw6~zpxe!VCvF(FHv;rewr;_^&w
zXE%#aZ)tdAGr@+JhCCJPHsc>j@YdzIcj3l_$~9tVR#B!@vHzS@PAYXL*)s{s_A<8O
z&`J3p|DA?R4X=o&JZ|a1(%aKn5SL}9-uax@E%V9`3CR)g)8uLzj!c|SVHdrbOU2xK
zCsvz<ylSXerZfamUNxkk4x+qj(l39c`tqv9;O<8NW*hc13$h<vK)v^#q`(tju-E?f
zh0>vK-)&KSn>P>0c^}6&vtSvm`wZ?A=`x81;T?aMe)LcI5pUPZV^tLP=UbEfyn%ch
zqcM&}<SIANb4gTjM*@++vT>i}ieD8iPmO;`-@ePvn$8{c%#hc)W@ndNQ2D0G@s*2A
zzo@Eek@8#pA9Jg!=G=ztq6H0ln*1BYC)onF7q6(y2TAsJq5TNAtv|_D(`!lSw}be1
zYqakL-?ETw6KYAqt#u+yE76LFq)TMLY?WH&v}V1t3*VZ)^^3n9ov!3w7uOeT+_+%D
z#*GEy*W&J>rd_M3T)^&zxu@7tX+)JTqkk36F$jD3EZ;*H&B4{UcHbm)iE}J`^;XO#
zX$SpLHtxOYOTRpPY})(ZOdoXkgHZdjjvbf1)!ZPav7@t-cBD?DsUGwEw&Uf86lG2V
z>RYazs(jW7_fw=-yIg}acao&YEE=e`u^6AIhN<ISp$^7h0f=6-$~DTlLDPnxCuwcu
z$fc-`yQ5#IBERo;)K(3boyy)`4$pp{$kwl~a;>ZK&||q>)@=2>jp;BS_eat^g2<be
zG#^igl5I&zpp}3KW|Et@>ahhduyo&@X7k>SNm#S)wn2ZTjd9p%olZ?$*XsC%qTX*F
ze+D6AY08F7-PJ4X36t^zYBucE`cv5T_q?Gw$lCOYsJ(7N5UNnE{KoU1J7Aj>7%(Xy
zH9s7nd6mS#<or49`uno;U$`8Qou3^K%gK3KP0z0&NwxA@lLY-(Z(xpofgToo?7L&P
zi2DbWy83j|i9sK;keA=N|G_y2Y9_upd&;Fr4a#q)-kbdJ)P2<>j#p@&NJ;t6x!oty
zB3yH4EZWee`v<LCe{%WQdl})06UWS4livaJay=k$C<Q=p#Vy5*i9Ug!=cb`B<A7<I
zscc{Q`Ku2--c|qe+JysNo-nzt|9dy9Hk7_lv1m#E-F@V|`1rr=S++IKBxWohIwm{&
zL}KDg`<B#3ni5NU^zYlI4cAG`SLq(K3*Ykdo(q~X3_MWJ@e5Kck^U@=#5oeu6%iXu
zbY-{2<HX_2vWvMoTl}=ek~ELa7gLhP9zJxY@8A;(s<|HPmu)+#ky|^{J7(>?T`-|V
z^O`{wN99BBeK^uR{ZYQxt1uUInSu*z=6XcZ<RSf!-(CYk?#;8=m}kz%Ae!HuZ!XNs
zBEo!$=lC2x-KGU|B-7K49yG)tfv)V;RmB;#r>=<CQELD;jU4si;;lH~)mLIK==ILI
zGQjg^{tRSbcO}7V>4Q-o8ITGu)-SbTI3W#dr+NtB`J875?yp+?fEfPAPn8c<iy*wR
zw6L&t@}x7GA}kB^&H%c0P8-4L;7+z5(UG}#=HgfMyA=HHfIO4`ZZT+~P8f1$Ed37i
zLNg(+(;P*;ILM2M6w-mJl!6r%k0Gqtc?o0})hSNNme>8fXqxiLkN;IZp1$Ze_V)a>
zM_JqF*Ur}*J-Al+<Yi=~eh@W{a$jcgYYralsl4#7FG%bA#lKkho(I*rc496##gJwq
zo+A#pAQ2EgK2=4ABLn;6Kt=h*R;|i+9$h>C>cVMTwnD0ri*CPz^?FBBXRCji!;k%v
zPia2juSki`FpGsYl~bfCzr3LIe}$F2K4xm0)@3~+x&<XPkB-ZdA5dCSntCb6GnGAf
zuB9z6bS>Tq0FL%09Ov<dJeByD28rd=gj_|8vY9m*UYypqTj}Dh_xBu-6|ZzSgIFGC
zX5ZATjGXlB=x9f(W#WbQ1v^XD4xs#I;!8_gIKr%3gMwS|Icfnr<;Ev|jkNY~-9R-<
z_-_Cw<9U92WzJX1uVu=Ql;xg<9%Tt^E>CsuIZRU8PWCiOX=;xBY~)Mxj)Nf(G>CDi
znmvpEm(&{fFIU+$^uLtm>{I1uwwcB8TxZImy~=yr53tC+Yy!rKymLc-0q}sThT>pc
zs_F<!=Ta!68;&QgOb_%MW5=*XW5-sE*n5c0^2AE#mGu)>jviEoYGhv_j^`cre02}}
zSG~4-={|P+z<#A$ZtDFLH(vkmf3K_i8!#8kQpbb@2!6##;H7J&>X!h7^!+&udkq7>
z({JFI6_b?p(m9Wd%{sKNqCy3OJx>E~oOpj~E<3*efYNPWY4^1p0KU&ll%B}LI+Ey$
z;jZCHVPnVnCaOw@oOa?21zF-e<Jh4?PYuWLC#IeoFnR2l5j1<>L8F(mYwX(otxCwg
z(jKcZLuSUAq);2pJ+&oRF%zBx-ZWF^BChKl+}bt?Od>HI$ARTBmmQ26<yBuA(5p}1
z!DWL+DK5l<MSrXOi+%3F^vW(aT}l5;`QC1C^}H*@#3H`WP8z*f%-y<Q8T+|%Gb4P|
zCd~B+@Q3OTV_l(;V^H!3IR{|@(WzL3sj#73`<I~G`_4&J2yUIwsqBkf<s~W~%$6#j
zvm=vY9ozG|9Q&81Y78m`k1QQ{ph(%z9{?){<QE>#cdThVuR7oc=1TG+Mj~DkpqrfX
zt9T(LXJ-L%P^~1tAOyIfbdzd5X)IyViZKIK)abXc)%jh+Hou;l1<a5P2bAu>i*Z%g
z|I3774;<^J-V5J(;qI}fbLF)2;b1~awgcHPa*E6q!=F+vk&1NxgjHh(_9YB_>Cyq^
zmou%iX^vL)N)}^zD)yD08H0U04SHzy@)_txNn%2PB>up7#8F(Q1%1lq0;<%jbm()1
zpMQS-%P*h0f6lax%J<JcQv3MxWAfMwv-;e}%zIgwa&zyJm}&D4A7A=d@xei}I%2~_
zVF~bH0{FLyULqP0rYt+B8@NFhhJ<RIk+OEjkGEad_r3aFy&K*ZXXWM2zxLch<sEI%
zflmE0X3VTn1}it%mfzQO>i7e;LX<Et`7q);9uSG5eEvKsWr)VJJSfajf5wu+R^Dkx
zG@h*#&ePFhy?cQtRJ)jDdepwM^FIIy2tt1_4#gPK*Lh_(8%bXfhVI}0;{k=SI|qK;
zf9H;GZphK{9pWiT81o>vFGAB0V57Jz&dP7U<Zn{mAKrBV{f}UrfVdfdf39ER{WF{N
z_xlHshl0-r0(ks(F_MV6y;Fd_Gwi4}5f4`KA&pB*6ynT@ejifcfa-HH<R0VfhTR&L
zAK`b{S}-2$Q<JfG2QUw}bLlc+v)O`nuk}ipiQndPUaP|K``w?1M~xs#{?9+r^z-6|
zyFP#WPoIa4=YRP8w!1$6=lNf`>+>n%dio5`6YB(A3$Y)A<wZ6vyTkvjo^Rtmq^LW9
z{y1;+=jV)lNKx00c33;m?*E*(Km6T=)#|72^*PLUg|}m~<yu`j)_p-ZKqn#qK8)7_
za2@v9L(#gQP#Wz%ALbNTwsF$<O-tV1=<^H}16oVH{jtNSY)3xQzW%DbdlT(PnzZ-k
z<II8G5;fp(POw;F9AF`D-+*@H68E<Q3mf|bejfW^(Xu^({Ttz@g2B8$=YN6oB8r;U
z#c3b+S>*7Gz&_qizKj>h_nW-FG5#0cc6A?ApDjcz{COYXXW`!m(1HT&=Qhv+$goM^
zPo#<Px{q3+83LJtLo=G34ryw;i1@mRd25!JtW_@8)v?qU`Z?G28IQabDJXxusj^r9
z8a8^nClA^j)R}CUqx`T5j}=-2H0AK~BA9@6942T}(2kw=-nq^kroP@a;2X|fUBi#O
zf56#uUk-H*zO(0X(BA&)_>e3yK96S#=>MX3d=)3jW(_KY9RddP{(f48@?+HArAdFX
zvA=qc{$x|HY102Cz|V6Lc*k$<9mgMgC?b<3#xL=<V^s8S9KUIQK7Nz_G(OKo;2j?n
zl*4}n?VNUc;s43o?x(e0_?z}`gx}X+rL~Rw<HvR2N(skBb$|T0j`oTG_?z}`9N*WU
z?jHF9VgKKveaKefWE0W83gf2${_T862l91Q^ZtB)n)C+^M*kA@uW8c1(I-JYU*DZ+
z^hr?R2c_rZ`+0?Tf137hgx}YHljk$9Z_gnPWjpUUm(i~J_NeWHyzOadSABKV_8f2f
zDzvM<I){eRJ`ARI+{q=-7Y%?M*9QNPtzjkvIqI_8HS;FQGPCTQLMgj#8woOTHsn02
zH;=lcF4lJXag?w8rsf>WI9{=2#(lG&{4Ia{#Dc_}9wo{3KmG95stb#q?Wc)PbXGo^
z@z(D3BNKM#RMtG!XWZ(nl4mDJb{w;*U(TSc1Y`Y)y@TqO=Z~NH0AM+!^x<`!+5(nX
z2@`3M!%yaBG!6)UBtT%SK`B6jL@Sw!XB5VFy8n^Ko`1OXiJy0kX+C#&hoTQZPUtwe
zsC8UM=Z=Y8_itrEYiHCyFoC_P?@~S_smI3qM->;Om{+zLIc)T>tRXWZ25lM`;>zzj
zKCe}A%c!6Z<vZ7OduY@&Tr;}Ygg<J0h>v!2nMb83fizU;!S{13_LKZW@2$hM$psgh
zICuUrMf3PwUY*F2eCK}oalG}lux@~QB{_0HEfZ40oRH$|7U(^+y2PC1G~~M0`fYm-
zr!@;^M{X2^md@B|kt8pFCS=ycy?=B|j}4pG#g%M{&h0h!$%^4G?I~N7SnsL1|I+m7
zm$um0qlJYJB;I1;RpoVSpS;r{LzBw0OPKiRF62|9x<>uQ&JF+Z+9vrLYaw5ft;h-4
zA1?~>d<xW)1QbYPKJ7!p8Gog;mOlM?7%!QIbH9M`EO<lu$AceLfZm11^JdD{`^NJu
zZcLf&SGMrn**G(m=5n8xd(hBEpBEp^eHH#d6e9&cHtr+ir-^8%7%5-7kA|u=>t6B+
zs1e}|(XJ-)Nj-1(eU9h*0Eaq--TXN~z6<;u%Anzvz7X)a#`QF%d5!Dw(LCQgKDo&!
z2Q~RzAbjj!d>(b*(tUCSc_Hz3?yuA+N2vZvcxUVeo|3&o%Q?D=r4q+Y(#%1+hl<6E
zvf_s-MsA4#Du!mIkoAKjXE8@Wr51>%8C6=3f;G42`LGdUBXYIfFOSDthDS;?xd{j^
zx9GfgA%$lyCrdtm?U2$EULjIjb<*RGg%cjv{LwALJ9&1ww_?niyj&IkXSHb%#kaIt
z<s73cK#+W^R*>P9V<wGLt^t-+fQ58~S|RZ-Z>4YL{H-IN{PR7e#iKSwJ(a5X^W~$N
z#SZWXMCA%>K2z&3;Y}Yx{#E`eOenx);suzH>zT>|`HL?hy#h~v*fiKh45+%)SaS*E
zOTv8M>QJs@MHLQ8;qN6O0scS|ZKqGOZokW!A?v%oyZiUwE$-`E*0*23zGXi}4lh`^
zsd8a{Mbz}Diu{F@RSWWmM^5)UH+U9$9frvHCZL*JU`QnhjtZMnDi6ikQ!Qe^29UUS
z7w#yY$EtfpC?%uzIT<4YEf7>|qI81;=PB=7R@T3N83%4bWfR~EDk7(ImmsR#CawjU
zqgr<jhx!fSwPNh714`WiIOSE8y`!2o{XPGnee>nRF+=kOTPMp3rMx=OeVJJzLNH(~
zO9^HOe;>&VW0hA}hj*tbomb`#%9zlWeZivorVf1@&)nD9qEaRI_HDN2#S6v7rKoEd
z|0r{NB7keY@%8XNgXV~y>@X=q08VtJ!3r7*j}CImp`<rDdvXd{B1oUaW{7QV0|&i&
zR(zj(0_`#!nQ*BuD`GLj`gX`I9=pt9^=z`(N54AcneL(}HPgDFvv_l<=X{G67lQ8;
zv$W??-wf5^!_1LmOOJIAF*YnsaXmt=NPx)~v#%qoyMgRgP$UI_lznfI9%k1HyFK@!
zxSKl)J)}QV@nIKU*{@gg=JySsnGo-}5n>)e<^9-pF~|1FJN=d6sj0PwuX-|ZHT;5E
zu07Z~tJm5!u@28NyKN>4{xRBfnd-iW(B7-MAkqgx>FBxud-CrT`~q!bFkT1_Qdq+8
zm#-lnd5qrBI<XoXK8do*^cmVisvT}+DdL+y{d7TTE$iEiO(|98Tu|0dklta#JgddU
z2RfDJPWHU%(X%U_8^wU(vSN`VfS-^l8}m4;IcA^?i(?Kbb)aibWB5NC+9Qs%X(9|6
zr1wWL<A5SMb0;2tWNXWwDFbG88~R<=xXeWhyA&>@f;xM;b-zbNoe}+l9$DIKXF>9?
zpRyAzCp06?V|aC)_->`%@;aQaS_1j1!^y~$?}I6^fT?_Sa)yiPF?ZWxeDZ>FA8Wl}
zbt%7jXDO;Rp)v&{&m(y!_MMzCe3m}gFnG;xgn^QKBOLVDT<($u8=qSE`}}z-1n#r#
zJ*gJ|7L{!*Xe-?%j0s;woJbU5R%pC0^Dh*>Y6h`TpWCG5&HtOqAav|wF9vu=7Vp}1
z;al>W{PqX(p#0%m#K|1nuq({*_U;RBvuO`Yt(3wUOJ<I3C_1;O>Y)v<J<RdJ4*ExU
zM0rf$2|%hidW3RcZmmDXb^$}o2J%D1f)esn-1emxMEm(=%L3{&f8zPJv4AtVnSbMP
z(ANRkU#|Hxd1PZDXH1X%gzn5+yBRkM)s~T6b&|5@U3TnecI;i0TfWS-Y$C_^cL8TO
z*}||xP`GM!xby+$M<^2g`}A+tlZ=fI_4eBzr(SsLtqU8dFt}O^+}>z^^lT94?GtVO
z+Tfc36V=3u0DzP;1;|XwRvzVxogo_QD`qvUmr-OM&+%*50*YGQU$JMelF!cWWxshV
zTZzI>>~k*0q#CWbu|DUu7*u)ij)(=}RGUPQv|&ss+`Si7QxDhI=O0;q@M6P%e_Q|1
zh*K5gUmmjYwS3e}P4(4G6_@>G%~W~|Q?1E+)doHNzt#o?PBh_pR0qWe{$JJxt-Ae0
zAV&)*4GPM0>dvRocP+qP{JDnf>HlvvTp#w8C-wZ>U$e9oYPh!cmL?VF2ePtFD1-%g
z8f(fn6Y|_~Ql$|UWy7hYY(#uztXfqzHa<=*ESto$fWe)c++ow;&wT@haFBwlNxg`>
zowR*!-uAyJGW+~f7wgN*|Ekigyp&2rF5&m39%mWJaWmbm4Yg@i*Idel?hfUZXL$|U
zN&_m;p78qS`U=ke**RC0A+);s(%ODZhL6@&rJ-zR?~-j5hhBUc49P7grKT$9l$-c-
zF0kON2wm)Kxjo>BCw$hl&EY<l;K&ZYs~+xVyDXPI4C;KXJrp<tBTNE28j_d(Fz0^W
zy0&9<+JR@_J$a;GH*IQu=|ii>RZZ-hn6(EFad1BGq}RsibccWWhc&MYiwn)`fiqi#
zH&ZT`+eoA2liD;OU5(b;0(v3(#UqwK_414vms!_iiOov1xvNXMB^4BuQJsLki~Qo5
z2}Nx`^qP0~^lz2wFK$bCLiZ>Ka|ZDYB8@^=QlS00>1A=U4pS#jnLd5WWY(oy$?9B9
zNwdTknk_0j`qtZ+Hqk$Cu<ucLdu8Cg>5sLEKK(FgAgnT>ZQ-2R#KjtAd*XBAiBM@5
z{(9v{=E5=F9(HEZ)Kfzaoox7by*R>haLxLM#Synz0<?#>l<$<+Q&V5a%RTpkwz~GP
zDi?Tl(0q;}?o(>Bbf?O^yehBHr_|xE<69YWA_ld5sg5uADuv*E>z21tFZU`X>4=vg
z;Qrt^g&dW%EtFz>g?gC=DEA2!>czE1onFCTr&oC$K;BYLv4q#2IDk66DF2PUe;)W|
zAbd+A%NmJ%nG$&rfoOW20d%nNh%P7v81T^rjg8o;r%p+AMihRzqha38%Dl4pjMXb9
zJ3mvljp-I97MsJ`E2p>ayt47_!d#`cYht<7@YS4cHKS@@JlA*RT)^;;2Pf3BmzpPx
znRtjaOiXy@&Np&%z>!XrBDm6MsnngwjH+{HCRZlKSGKIl3=d8YwaGEIHpLl@{;sND
zD|c-rw^pA7gewBsRh1*Xq6s8Q5|n(_OET5Nz4euO9o@Iy?K`Yu(!{}odT!iSQnGH}
z<J<R_4|{IRuwlJMl@A-FY}&X@yf31od&JsZMq~KXQ6a`br3I<2woL0gI=ijSn($n-
z$uz8D-&B|@0@u-8$alvhQu0)EW#WkzLRg)>g<(_BsSu<nYY|~fw%8=QE2xF#nwqN}
z`J`?&faW1TIDYVe=#d&qhG&SsMj}jl*?#`utwBMWD)Z`xm2dA1tQ*<0ZtQc%p4q<Z
zsr6eP-q_>0iIZL^d+*jt@jmCasrz1tj(#p7ank6%)3yvQC><0L^>ldnuC*gps4(YZ
z?`yF4@V=tMS3SNlGk*5PTJXvJhF2h<*YL-&#4r72>$2ept{Ib?J8|Mk_xh5&E?s)8
z?A+B|G;{9a@$K57Ik#iS-hH}s&EGYwhv}J(G0}Zo>8m;xysyasoTa5x_f-rdNUgTE
z*`xdB<ZNk`T2PvrY77CqMq{6j<5z8~$$*nr`MD>Uwj+QSg~N9)%L(9lVI<)(m(>!F
zGbU4{7vi?b<PL{5X?;~>Qkub;YnSpI>pwTYLx=cH>(_6J@327m`@lWB-<UFb^pp#`
zA0McECw-`lP&#(#(6eW|*vDdXcFvyN=DBSXHb+Hop0Mpu!D%*xZRF<-8-_d+?2g`Q
zkY#)|iB&ZPsVd}|%HwKXVr2y~0i#N>IB~DioO2%bA)FMd6=Yur-7VpM{>c>Wg4~0R
zUS{O(*oX+eiqoK0p;nLrPA$dnN=nvdM7EEKo;dNX!nK|ItZX-bTH>N1hu(ST(63jf
z&YnGO!Zdk=%j=wT`~2-yEAOg3{WZ(?e8isqP#OKtt9)M{BY3bb16dZ}x#XScp4G1b
zY*xIqSo!VVrLX7AJjcEk^Sq<qtMc`yPd$!FgoTg~hscizE>I$n`*<s7Gn^*Vi&VYR
z$U8}BDIKY0ol1uEKHs2RVXc_9aN@+}^JfeyIWl(i=&?r*9bu7`o*xs!Y>*gC%*NW=
ztUV6)igL`Fsf?dF3;R7@=_^mc`qX$3_*k37gf^nj&02sUW<d?YF!3`MojUySYr96I
zg8t9C3c0n}hn{u+9(Ca(F<%*=JfAzLV?sj5LAh)IJ19mev)JZ8w)gA`ua+1*fdA8#
z@8x)`Ycl3CQuG&dSmNPZrq&Q-AWOu+#VbdYe=G0S(+tg7%MU%j%vm&3Ec%af<mtcv
zR}52Tvno&dt_~9?7STSv3|+7t<3Se;!MxGyHW8J~fGIE6-;esC_4S$iXEm)K`ui<$
zkXk@gjjyBn;;|S|$0cu4ars?i{RpVFvn3)QsebaT<&}`8_P+IE`4H)J5OVC?Xe=e}
zbzfe*6!7uf0T`QZq;Kp-#cP0zdDB@ko|*ORGed?!WE+OO0QZ<IFf{;`FK?Vv6zFY{
zi8)ap0kh(nr6ysa7d#M&e~HHWdK7QF!bZavWg04!-><BM!^mgau&>`#g7zvGs;gP{
zUN(u}Yj~Z@LD*vx{JK<+KpKM>q8xN_U-=N_6ZYYd@)zOAC3dLt<SwQ7uH6I!J`;>{
zp@)rk?%mQu%0u1>x5*=_8ct9>bo7TUMqU6tXEGr6Nmo!f`Z;{2lLHQH_m*%<5g%$(
zQuyIFd+XYysWtjqK(=K6npIJ}p%mr&22Ntzw>B?Af$rCWc&R?ExM54f)7b@uDBy?u
zF~IxBFlSrL89}!!(3>1M3FRiA5W7dr6R0U37&i3ES5F-)RKETtyCo@C|M;Wc*{yel
z*Sq}MKYoc|tF|=!w0rmJ9(ZzM4?qvqTH}JoFFw$y{>&X1B#gVJYo3I=0ez;q(o^0K
zm;j+4B6wiZx!HXlS|EWCKX{5DA9-i-Y=23~!IxG)c#|y`UsPTgFriOZ_fMbn=u<YZ
z^X|cq>@F=`UCD-cZhC=*4p`~9Uuov`+OmZvoyo}DUcI^p+__*jL_JdM&15cn^Z2ws
z`Lu&5;JW!-+A|X-mad<+zin|@{{Gx;x%>CK#uoM*U&TGz#SNZiq~{e^c$SezySU=^
zZq=im&x8B>e=(1Go5laPd4B&uY{5&CV?7ga7L%|ZSe8_O+X$50^okLUSKWW-)%P-7
zopy0&{XN@X+~2=<(^BaDTV?xdp^rIzsdn*F@!`7)qK_Ei?vRKHX`M$fe=p1*hnI|Z
zV({hwuOTnR(SgW(vuJ&`*d;pp#f&bU2k##==y=75=^fo+S58rcjy&t&xXjFX^S|;`
zh`S!&b>Dq^`S|NGek{g!kvEd+ebhuzZx490h+nly8$QF`@z}A<wL>s|OiYp7c71+f
zn0VyzK7BAE5{-;FIBqOWQo@Cdk$euIsN4~A80bz@`~m(-+`=sE`dQ^iCGo7hs9}M$
z?)DmKUBd#>-*Q_E`g`L91eZ7V%W6sD`VNStq48e9iY;UB@uKVO<I0jEy_lmfD%t3H
z-_*9GvZ|!5yr^mY^@pb3clhvqQ$3%o?lX02AG*unE^;Mw_-gE}N^pqi;HHq9dKQ9f
zu(h1B$SaghY^+ktmV5U9v=smS<Z|vHZ^j)?dE^1*yGND12RB!<FlO6ay>;S*x8Ipa
zWDs*4xbvBujP*FUCD*sf7Lp4KKxVm69m*vXTu;ugAz52;Y@|b$mgki{xT>UdaY75n
z9A^vHl6~np8}92IWwAtczHe@qT=!&V|8{;kQ)*}KnLhhV<y@cC<8^h%Q~NOev+H*)
z%p5l^bK%a#F9>&@W3KNG6Fk^ooOy{h6qcc6%IUz!qnCTQk;{h;$~&YA%f=?t2IM#?
zgo%Vfi9`tkRt)=5eB{SH|A)Bu0E^=4{>SIe%<j_JUAh$MC>F}n6oj>50TdAx#e#~8
zs3`UtOQM1$YAlE?#+bwqdqFgb8Z^d$#+Ycz8<S{ax~Xqs5@m<~=iJ$)_~!jS-{=4Q
ze$P*&%<Rl9=bn4+>1WL1MPv5;Vk!FNVBw-gg$HYTckJ7@qh(-B-@Y-L>HGILw3$<(
ze4*UkHmA)mFTC)h*P?9*L=31{<aMB-woQ+cTOUm8(eR<v*Sp`e4{nw8!?@tLh<Yr?
zK>H1XkjS-pEl5Sg_Ez=TzoGK%VuwfjR3(=6UC_V(?Yq+bzwg@Kod|d=L%-0eHPPE{
zq&sgG9SkOE>F^N)#=USttq-pb#(l|>UGHD~nJUD;rVfba!HUtITDM-+(Y4r6Hr?D~
zh2|UDYwbR^7MgE<ACV}UrZbK9ysF*fv2$1oF{ES1{O^?)PFU4@G^YG~_a$km7?eDd
zw})X(oq83p-3vUA1r7o}tR-X2&sWhdC+FmQuN8-fvKctji^Q*Pjzd^q>~>4l1~PTE
zcwdhT>!EBdM+}6x!iw=)N#Chw-#wX=BYs7%i9>f3>?#;X_)k3PFu>Q7#|mKMl42D2
z#Y0jE$st)#T!xBgA>z%%__+AP7x$$lCy#yk414P1sZ(ZH{<u6Z&1_DaCpsGv5=JZU
zu(qY4VM>HNdO+5Tlh?7`%8?Eo2Iodb{zrc#1%mtMnq!h(-Au59YN6&-yF=X9&EgqT
zrhcp}KJ)U}<m9w{7Z0O*rJc3E%i>_)b(8lE%0^l4_F<u=#FUOsNKg_ZBXb9Lpko2N
z<WSiiu!X;fYHLvU35*OjK@k1{Ry9C3x@qeh)`up0!$$*N$}j7c9vi*Id?_bq;o^^q
zio=6TzEw`{p9pq*MS6N{T$TA?X6BuDCZ3Yh4!3KE{>@>bK`xP5ndQ4j<a<1uh(PNP
z9>uru?bLBlM!R-luA%)iR_r+l?i6DrztddscHnny=Ln^_O5n-~;L`i5eD(4PO7h^&
zB`dkM=5XbpN$UFB-p4t_KqZ^cKr3qqO@Os2gB<smwAM{+wYAJPd3`o--tt28_<$qC
zc{Uw66iR88LOsRzBf`hu`1HifojQ#mq!+I=d_JjN`^v*LlG9={P@cvq3a#Q&G@JpW
zMF%@Zgp~qPOokTtFD9Lsy|g6ASa<roF+S&%a)Y^?8#d_T;iH9N5j#xXqrKkRIo(|F
z(R=dYlOu;#wrdY)FyTd|R_=f^1F*zi0E=ba37#IbGYn#1Wi;ET=9FO_lv_$IOWhzA
z@Psm!y&IHTYU4>|7`IoeZ4gAQ2%<{8k41`f(CmTH`O%-e4cVS@(qOIv^iDT04j$uW
zXlWk-gT>DgaKdC9Q8Di68nJ6lWo1pz;lt;=@s{|j<*n4z#aoAEabtjD$Np06U>Z0$
zF*fFxZycm&vj>hDqOScIoL@814=n3YpOITUv|3gN><BtLIGzj8ZILjNIEI~_me%7a
z3(U*w(Wj7|ygxH3LAj@-KK*oD{5<Kk{kMBhp1%6o+OgyIJX1J5?e_k{(vq?tl-rx0
zxwm=Bv?9O;S_yd``U?c0=$!X(7Z9<G);T|m*`%p~Yvf=f4q-ib`*+h%<qX=%28Xws
zWZH<H2ae2?{$*_%5w$SfTM{Z`Vv%fw`kj}^o!=PGAGQX4X-P)mRvvlHCDd2hSIhQ4
zlnypfd;qPNE5=ldzn$ngM@IkMOuoz{*KVmfeW<2p^ACsKs68YVH*BMCr1vbAw$Xci
z@!lG(1CJL?C5<ig4HO}ZuEe+jTNXcq2$9%ec3JIHzH((DMTI;%E=_G9=Usv1-YN1D
zvcstbj=}Fu{1{5=&L1nI>g6R$61!sAX!*AYV=Fyhi+%2jaY9Pw{y$zVC=WU7+!9~1
z{4M%0507NuxUz+o??j#Agc!|+PhKL9?ZOA{2VhGSg_jyP$&tJroI*ibkC3=TdL66H
zOi=QAc?Lyrt+`gLk}4%-n|P7}6fBuXQa<?-mZ9VB?uXO!Oex86Xl^rFXMqo1-<*&S
zq$OI^6n9}0O=M!YRMEsnmet<GvBk^A4dveZqsJE(=U$n1ZhRqJ`wz3j)FHc_6giFJ
zM^s4!ktM1qviSh!Fd6+6VGf~ODgweH7elk)LsKD@2<hrPF~5jtoi-67n-1E9ME0d}
zOcYt<gFQ|>mW6kwOqjg9Fn3TyVP!k_3i~B*KFRi+8?R)({zxMyN5-t|Pcjf9F-SO?
zw6=7}g#9^5h6N8JGomuAYlF3P)f!1t-gNwM3m(@52C9bzDyy?|Y3GM^?K<&j_P_xH
zG6xMB!razOn>wSaUJ96*Ic{b5nVudU4u%+vyO*4;nl&%LLjHLmDot$zMfkarm_UbX
zlg>v+bU-rJRn3@MQqJ6l3>uU<VBmmkidpD7^nw)7@P)W8VBV~%vrBdx4Iu|RczDk2
zzH(gVOck$Mwr?`1V54vdtQs!pL`x*jmYu6d`_tAaKl1hm479Z`{w`sp|Gj<qlMrl(
z#(;>l9yoQ!dr(7iKnZFep8@MK{zNvWL*P<=EH9B$TTSE9omOC@^^k-yLMM3^YPzFr
zDz|N;U&3sVn?NBEzzXEZLM!Ce^pO@b9<yV|M>luuP;Mv#m8+*F6tXs#3n#2uUpV2*
z;Gn3^!9hJn2L+4qH+Svcz3b*jh<S?sc>VbCm)EbEh=1jsgYmC(RF9w_K872BtHAfS
z0ljuId;1904uSU7##&Y#=wkHL82to$tr0mQk(vV;D#)-$iHo4+MxrLGGW#Dh7lGwr
zJ3k#YX2j^b?+wY#9jZ)V>yKX;S1@bojW?9>D004ia@xp3R;zqFB(3w%m$#HnUgGMr
zYtD`X7#Hb;Kj1oH4=(uv1U5RN@-`+YfFooB!j&S3Fr&&frNbcjiLtY~m{S7Rl$Wmw
zOfe_UVY%}u6lUn=LxqLK<Hi*i79QFreU#8`M<R5>2?P3@6Bs+k_RXqL<|_wkQ^jFJ
zp(6J4g^GCCP~dd};4>9?5#36kX%)^0yPNc1JZQ6(ep7sBHf#XTcinz-(UPT$KQZ<7
zc1}$xJGXp5fS>69dRpSDjQ;&IR;^I=oN}!3*}cq}x$fO<)N0sAqrm{1Dz+4d_pm8E
z0T(80#CS-SbtHPs-4PHk18KHS^slS4d|3yHvpYNgXeF8K3CHR{j{!XVrN)PX5rH>o
zOKt>YH6&QYZ*fOWP0h)3Zt;Uo0c~7r!8w>t&6A`>#o-2M*y<nc-8mzz;L~eJ!1YK=
z+zEz+G0g*=8v#1!fD8D^;B28Ne|f}N%kBGOj%C{~V$xY9Q>sw>MJF-W@~MbTM(_QB
z0p7-3H0oSDg8slPEby9Xh=Sow6hbie#els(w`*~RA|hN3TW<w-4+GMB!QhpcppOU-
z)`_on?9p@7;gV_7N)C_e*`s5(Ze{0|4)pgsqqI*;`y>tjK1n-J7#*{3pQzurFDAP1
zvNegw-~W>LE5);C&6>@&;U^!XjjoXf-NrWmC(VS+N)9gYviNVb^P6w#zPk6%^z-I^
z<vw#KbqHY6vOki63B6hoBUKkbOUOGE`#wfak525`b=Y|x8OCaE{u8}Zb~JS;3I5>W
zb^t$g*!@@*?&AkvIx-e>_uU}qnmFV|$|41PH?RYRM<z@-!rV(lM`bK~*7ApbbWn2A
zfMw4;w`@RC*Ntq0_)sbS<{P%{n-1b=B@>75<^y9*F|3!UXT4&gvl<>rSaGbcFYx9h
z`gRt2QqL+5VhI7?Fq9g7Y{4M{2YJAz$w_|;Rbq?tdVOqc-Y`>atZ7(YEJ_JZ4~dWO
zzc4c^D|2E0`1p|NOmupXmX&OZsXovpImK+6-+g9sN@CLZA|@)OH0Y+KAJbrJg&}+%
zI9UJjtjAnrAp!hKC5NLUvb&pFK+>(5Yw_^x0BZqQnFy=bh+0p^U;=8v13>$-3fZL+
zTd&L#?Uk{UL!T;RSA4{g?4yw(#Tg4KD;H!Ghm^2rr=rOCCNR4<D3WMna!e_MeX&Gi
zRdA0j6h}W?YUO(>vDQiOQ3dnf(kHD2K*1eyE|*-L2*XGyXx7(S%b~#(C%Z>YNXW@a
z9v(I?I(Ey7gsw@crOU<+8Z`aOFFW;~k~%keKyF*#;_ylNs~2^f%B98JTywu5myQ{k
z<-4j4hM@3g-xCW|S60j3@&Q@#@xviAhPHPN-D(vXfghFF|CBc?jO(o+>0mE#4i;ws
z>8q^fL5jXtnR6s)5kU=!&tT=ur+dog6;Ji|3lKp8;==~``>%g4x!Z&Z>;<NL<L5tw
zWSRlhBe+=gsQrgyxW>UfJL@JN*~13rB?emdt_hDII(n*chHM1vI^#qz1AYJxKdhU$
z8=$Wj-EqfYknEYfKANEkcR%jpp(DK-fz`z3+#9jm6cgP!Dk>^^YI1V2EXU40!LGz~
zkVfi){ALm~nG)J**uZYLvT{G|)SE`TVz<Ev#>ms7bfz+Krp@g`D#{IxU1kO7!{6Zp
zGI{r3Ot+H&%W2ALz_Bmj2&{x`+XS~3MjR{gY7(OTS+Z!03zhrC#7wPRm*(Y_(SLZ+
z^phpU#YLr)i<6^HiqqP~C#26#Nk#$ZzE&CvRqUQ~P{c|%8losq<EyV!W*3b=%vHa%
z=f6fy{2%z5!dsB3$0gV5wbWJ+=zxJ%`!ut$U!(=(Dhugca%%S;lO~3Smqcw%Ngb8{
zeD}<Oz1FO;%gEiC*{i4Jhm79+`;Co{3kzNuy{t<t5U{<Qdv0!8IMfw{f;&g%8$A5O
zweFU#YqEyAx+<qF@0h%NJ9Ws(XcrO*y+wCUpFY9D|BkUbkS8gfwjK=fbqD5VV4tiJ
zH$aZjSxVjKu3`Vyx~p_fy4LVef+&YvAdp#mXad38L953lH3(}GiER>zZMKUIvo~!l
z-?VY|nX>JbWoKGmh(i=F_8om&){CM=(R6ElO??Q5&_`R)Zb*l2<b>DadxLahgJp{K
zCmPFR8s(8ZQ~izU;jB3hp0_RL=M9}qpbx73@(l$o0#w7QnZ%$KpHe>QGB7N@Y~k4%
z%h#+K@6SFIFTn}q!UvWf%Efd0#RY%g7stKL+j|pu=7jcw(YUP%t*TZaHXSq@o!Im#
z9_-wf5tF8i(WwEE)1qS8z%@U3d8PSBP8-KAs0}}QddtLJBPV@x@NM2Fmky~P)*W@w
zH)>_*KLX8K<fV6TbVqj0l&Gs2@buDZ4NfB6NV#<LYBUu6%~leVT7X2_ID5c=(NpKl
zX<yoZ!4f2wS;^)NA3kNIvPYVvypoi(O6_9@`Ve_07t{Y>TLmd%rx<TZZ8gp`bMNLJ
z-rn-TE=j9aD67zRUNPDhV+PMlNEqhpM@kJ5j^2mFA20_;E}6ps++@@N-4*A}o;0&#
z+aA%gXKP$7E9OtlOBgE6TtVZi#N3mx=A=jM48qq+w<{&Ob@m%qJbQN7oLnb=qkP1{
zzI2LGEzTO-C6OYf`TOhezMjATA3AQfqt*Lj1HI4sTh`-!N#ySjVuz$<c%SreP46QY
zN|XNxCACsj*KCkGMl*Siw|9@Woo1R$EOhQ*jH;>CTYVje`ugT2B+PfTwJ)-0%<nn0
zuj*=5-6{06IF7*Hr7;r>1g&(Z2YdGE)vNsXImO+=!rDz-R1y>vq<pv->c@8NG8RkU
zxeiFq@6<`0rTppPp7z`;@c{vif|qwxXNWmW*dXr0{?U_8rPU5?wJ9~OkL^2#z^6mf
z1-yq{2Q9s7jH47B*wo^hm{9{q_KJ=V^iaN7bo<jq;<y>ThqcRyg6FO$`yL=fO#FR$
zHr9S3qQvX@^>yhjsT1l6Xmyax@p<#LKfnG(t`+ZU-@x;`_!@jJ{Ve{5eMY+QxOmmy
z6u-SZLEG6Kb6%c#W;XswKX*&bGpFTsOU)kmb#^vh#rn5=7pEqPOzs{$bi(8={x&;%
zz<})8)PnSLcJ|i;vs1g}rJ3`<FwncBrKhD?+CTn_{s8@xqMP&wmUasgLPJwaO);@C
z(I!*Ep<%sy^_j9%lVy%f%m_8Z2dlu{-XSl&XpFh1LD~Fx+t{;K&X;qXHkpd+5ykhH
zPU+JtedwVClPMa_n@UqdLlYKgvLN<MGxRi%DN4_Cuy-$juaP-4BQes9akrO$l2C62
zI<`c!ldKWX3TJe(=&03^6iaSf_hY+6qbi7fE-HiM=I6aG=o&8oKXmvqCm9lxh9iU{
zBtjP=w%z<-?WvP%wG)-HKOnt4-nJy1mDw4cq;X_TZKps`{-4{HOz^;x#I_ICo;<bo
zf&3GjkFtnm$g2=4eIp)%{38i&W)x$RQE~?aPLf3Yb%~QU@nD(ONGSq2o^;cUlQtt3
zOG~xu=zZmect~jYFYm)W$AI@6)Yl2`x+y!QEsarl{|s+$fu%;uYm7!-o}R+Ezv>>l
zH@9&Q-2*MF#yROLhu}m4U(ci<$t_4MI?g7XIHBwmKL-7XQ1A$2)#69i=jbW^2z|`k
z{hTS{Z*mAC-o^`pf}Mr&G~X*!@1YGOLzlKlLrDIGFCEEUh&l?17X!B4xwGw#IEQ}T
zf##F?D+9Lo7w2I90`cHde<hXGvd_0s+fkbK(murOYN<XS@<=dEF9dn%alL`hX{dZx
zTBOsWA1`6pan~#MHB2@;d0dgaow9{R#%!%OkcZry`7hfFJ8|ss=GfznbJdDHgj&EV
zTm!3czwv^KRqi+vNqGT|TBn-uxgV&s=-Jt`o_%)K>}MC{na#t7naz2c-)HUJJBx0n
z<qb1;9|pG*#`Y_7Byblv2ZK*IqE=W9)0*vF(1nA%*nku8K2AWWYi>4NLP^UY(_>|F
z(XXhV*QrBdLSSm!@LmB6XT^8RYumZAtLsV!hhd|l$#~3ITaCYTT$_mKi&xD-f>Gz<
zC^MtZ)loKH_0h>!JskazbxhECWP9qe?T`x}8X{{AXq><eNWb5*K16FU`EfA$ft;vd
z!Y*+oFyR_=z<n#2%xU(5lY^6^lar&Xqu$lvYIJpTb$9h}^>p>J_w_;91YZYVM_(sj
zXI~dzS6{ua!Pn^P*4DkPM_bP}UOv7kuFcdkp1Kfzl2aHC`Qrd0fWKJS#UsciJXBoF
zCgw+&!*Jys5z3bEE6s>Rcenn7R&DVMvi$+D0Dto2pJXpi!$H0TraZ?!lV-_CV~>k4
zZc~S(Lh8wQjq;p0r6xRl@<Zj<Bg3E$kqY-Wxj^Dw5z6#eq=On)aG4%>o2aOaTzs4?
zFfB>N@YOwa{5RzRw$Q_}^EGA4YilL8dKr^$|9x_~B(1*iD~q~wM_F@tdsY^0eXQG1
zoTH1O_Xp?N+8;-JDk-V#nWC9zS!Zc!?>@ukO%=NiQs2qPJ99NrJPM;JsjQVRCroYO
zy3;HQO4%{RNyCPwj%v3gHg0Em(xP7GCEarJ0{y19pHi@Xg}GGYJl4}QDk`+S(at-v
zL)Nf~?ru{80%AKw!Zcv#F}PpeSOdmuMBnED1KQUTBVvn;mR^a{u}0=x{?4^>W_(!o
z+N(H>uPf&sJYaoUhtEH!d5*?=v%sg3PW%7IxgqEO59dZl(6tvdc|_HMxSdV%S6syf
z^1EdZp`>KY_PNgXIZ{L83HEE5w5yE8;h|Q~5EnzqZ6yD)GPLuHSoH9KSX8FMzC~ND
zpJT5{yB;23agRNRF@>Q$-kN1~nf&g<17*NV;eGHD4O(|2!g4sCu2&qSUX8>%9OBnr
z@=xLe!due00FOVx*?5*;&*j(Fvl7ow;@8&wkLv{-udHVbXsV%FtQKUH<mJZ_c0NkY
zAwyO-aj2zA^I!|cB4}QfZ)hFC*Cg<Ftuz-n8F)r;WD*Wzop8nlgo9=CP}SQ+Pk&FL
zrc5ojD2tlsSTJlzfy+F{J)1V}(e};k-#>H1#*H}RtaKaWaYq4+&xB89HkO9OTcUQr
zO|xs)wEC+U0_K~hNtZSeo#&Nr!B5M-NlDtveCOFX7@R2F=LC8v?7aS8>zH3`+?Jj(
zp7TeThiWfZX*A~0o<Vt2J)_;@M+ZLXP3>CG3&3d}IudR40prpMVP?otXJz4xouHFs
zrqMCUj>-XCHBhB4K4nxXA@PvDMX#zm<)YJxzg82Q!RCV%K>N+>Qbe#6gRzcP+A4mw
z(Lr8Srma$XvDehG{3OlQRv{n7Rsqw-nYy(x4sT&x!h2Znjo^i7Ts+1x2)+>PscWnM
zLJrOH&uv|@`RG$!uiIz`xFKA{+~(jnvz?usws3;#6~aXk9gA|@vvJcN$9XOVLxvSN
zYT9FsHqcs8-;CV?ZU#dprt=uqOYzdruRbHaMdfZ8`x!j$7uq+-&dBs3@t!!-P2$~O
zXUzCjb5UtrB$X>_8&+PJKZo-_#NFf(%zm*xr>t5;Z2_mnulXDW4$#2Mr8{V11e^aI
zPs7+Q3;Z&aA2^hFloxo6%(AkhO4nnG=P}xhj9s-bNwz*i3JY)}VlJMs96!dsw>~pV
zvq~C`nxDiOk*PjJ`~aS--<N5>EmJ(v#`9u>)LAa&wtSnWEj$9)51$l}T=snHGg&HX
zePZ)*JX9RS4;tSfIR<(E!@*Ce9KHC#sHICsnfmlmrjA=yvvgdaSW_Pw_c+UODbqS`
z)!E7<?&Q-_x|Wq4<86+{GkvYksQy_YqAQ=4GT!#g7|g#Po*|lz<+8D3qW;*iGW@q3
zr=Qdu`kbYVmqz1RT6?m5&Su|JL;SM`&>Q#)%Lt#sNQ7w8>ou1cTV{&^+5*;~S{W*S
zqCQUnE={6meDxVhMtKd%D3@)q1}dRDk-^;bPGc1Mb~D?7MzkOiAT=5*iMWBSBBBUG
zq4Z2+XTCrD%+6ZzGg+|HjHOqwXHmtRI6f*WM6cnX4`JrII#yO!_g-CH9p1OnTh2H7
zpK^j<A90FTuj;SH2&Y`_J?tgxWi<Ra|C#&iwRF_TrAtSS!h)Gh>FFj@ALZ+j%a)C#
zo3VY;O>ya1MS|&e%NOETjma3Rf%G6Uu+d73uVQ$hCJ(T|-c(+qXV-#PY>&6xge0WB
zcW^$-P)3kx%=Uu4-c8UimWW@xc~wtE;2tP%f?;H4=YEKOpUf6Oms-iRqk?Qm*~ABg
zM~JT_#m}GHX;{bLjHs^NI(AH*96dbW$>~XhYjo#;VH6sUJ$D#=hfuZ+alQksN2q0%
zc!;kD&p-zu<OU~QG|nNGucXEJ4AcqP>3}IA25E7*@<aIzrMkA3gaszNqjZs_#yswc
z4;V^u@g^`yi6&1k{1A1)Vo~z!e;MXFPnxKo>o|F$>s;5{vz4_utc@sb+qRW$g9AB-
zUwg$@I?%Woa-omek;`taL^mumpwL=6Q+%z`8I85o`&_PUC03%$TNkWDE6H)1Dma3M
zDn8P_#-#tvS*ZD+&cZ9UqY&eX!hH5McI9;0N|9BDSK8O={8W5xFM+?uJI5R2!QZd?
zKfvGrzhu>wJR67J%&Ie+OiO#DHNSEjJD>QKRN_}|YyqA^#`KqOC{)9<2jQ)H-8c&T
z3w%&;od?a$0?7%Vk0tyO*0W18@}8k>&|MUz2yZBYkJ*0ynSjr3sGlK$nTLD>UQYY*
zjxA3D-tmfHUTa6n4x<V(<#)62nJuq_^|R@d<X(m8=~}P;SlgB~Ue)--$9jT-u!o@U
zCZhAo)IO%zKI4|wEF;_;qAbHcs^jMuP9`e8%Z8LQk8))h>t9<7fn3C1v*&w_^8&~U
zVt_XpcAMp6wnzElhUH&kxH67;D&NywTkJUv<W)C!kC1TiM<L-6_+d<p6^l}^=jON+
zO>mv-WZiQQbCj>GTMiNzz=CnDmFuN+?P`8zAQwhNq8Ab@c<IEVB?U|H{|Wl3=|>l1
zpLk*{F7VDL;0+#V-=j=2(0P)vA9<#U?yLC}cqk>=1|mf7K)+|oa{4<sx+MhrZCRDm
z*WS^ndCM=_FME(!BKrC{IJvrXXnjfREZ1{BHJtcVy^el1>Or@xJPGL5PFjCi)bx_C
zgLl-4b45NKfi=2me$kxMC6e4H1Z!knNL*M#td|Vvgo%4g;DG%56LVR^z3;wa4Re<&
z|JEM%@p}4~6kp$zU!I2boY{1N9Eac;%I<eRS0c}5zbOb>q0hg@S@#vZxPTL3Qiz-Q
z6+Z8)xUk<qM+5NL!^ZvO*A79JyK*Np@!?Z>TTSlD(9;$BiB-frHY<0bTZsVP2Jq|0
zd4A%F&+0xx*2rScEnY`^GXWRq7UYAF4Z=mllVR4^6(|DH-gjb@_?1+E_8=3WdURVn
zH-JC)nfjci7u~1ot*|@M`**DOkypd|yq4epqUH0Ar(mBP$?tz_y^ns;&WxsUphX%-
z!&ctTJGc)f8SVdSeg5BcpJDx^>ogw;tAy2imq3a6gi$-l<)np27G1xHYvh)|H9o=h
zhq$KNzgmeHR?+r6{z47elTwr%t<(R0FGe`2IVo1iQTOjfYs`8UrjfBUT1gCJVKOj4
zfB!zd?e2%!Gffcq&no4da!y+HXaRfsk1Bb=qt#VN)xi6E6a7(cDaz$V{X@G;d6#jG
zgA>=~xbDlZq2B`r@Z3$v$0h;We1!y@Su%>-hz_xy@qTd6LGheR$CpVARRGPdx(c6d
zeyl<~=I4ysHmKE3rDO0PLRx%~7iGd%GvgTDTKp|VE2V71@YOpiSFf(zvHE=~Z1ZP>
z<xlagsxsD(wXszbU_Pv0>k<fjyl-Q?RNtJ}Xt$1^>RGFmtXUI0wL<hsIf_}Kc|ts?
zVW?wIz|@98pbL{^NgF1FfpKdBrirJ&U=MBpi0thf%6dwDp$SppI28RZ;Qd7NajeBP
z)&Es1|03Q%g(Kjm1KnwNT4yK3XdOYwVIxAVMu5vntdPnaG!@!ojuj5vzlk6Ps!7mt
zBii1#p}Y9I1%WyB4c$@RrmEq$DodBDD&C)UUC<x0Xti8732HiA(>l-L<ADVhv~)hM
zsfLH6ka9}2kI~rCNbXVLBYQ_3ipMeyVHXvKC71|dT8(2E%pQP9m`1B<f{8uJ+wp4V
zXvwH_;n}z^D_x~O8a@+$u$-?#VjIzH9b**wq}+edf%7pn?}Zc<xA6H0j7g2j$TGVH
z$7&q??8Ais7hj)_vF`eIKG7Iu%I*95OQ@WlatW2}Fktuab`{K9Xj9=^<{S`FVXt>^
zsc?>JNVyFb8Bx&uHvq|93|hr@kS#wELLOW?tnnQY%>f?Qj*eZtXza1gitFZMV;3zN
zcXTuRb#rEio;^Ec)@Mfc>J_Q!FxM@A)(=0-8sRp(s%o~|2>LtUZ7$a3d3|KB-FtdP
z>Md`JiTHcZ?p~2t15h6M9G`zOUjs<8e7<cFtL~}|(78AX0fx3d0p4zHsa!n5(JwW?
zf=F|8M%ajxo3o)p+t#~GA9XJl^QZYi1COCwGnKXoTj6)eQ%1bjuX9E{4IdLZI&M*Y
zW~Y9dTMhZa!#1&AY?$)0GXH!<;0IMz9|TsMhqjvTytZjru=E0k2s{C^%X8qj70hNY
zF~HZwQ0fs->gzhwW4hxEVW#hN&D20_X%vvYr^lD7OfWln|7G`QfYC)_f9r*)l%Kp}
zAN&*z;VfK44kk*E;4UH=cTjwSk(aj;J=~369{rI+p9TK%8w)}XeI*7t^mpt)4*i3x
zSm0|&b~PO}=&rn`d`=nkS-;P|rV>40f2N#927SPm?|a<<WUV`gVb1}@1zpE|j$^Iv
zgMQ<FdgC|pR!+D7=JXlo4ZqLx2k`rrR`=CdRHE}ZtI@jkd6mx7^Hw@<YX`ebp3Lb#
zBuX3o2Nmc2BF@~Ia`GZ=Rzx_gx8y7mn`k71Jh>Ke{}OzJ{YDS)5F}CQ*y-4~Zdv`a
zhOF#6IeGm4Ywheq+6U&9jLvOu=sdF1hRZYOKC$6B(f*tJj7={;eS7khTT-O*It#Nr
z_eo6q=v}#ydDDhRGI853=FZx$uE1eV=Sv0T-m%&s#HT`gN#+>6MmC5#+0CfYN{H0K
zb-auSgir$;bcS7H8`vw%Q<Rl9D_$A&B@0xd*_7{<N4*t;R$||@^;LE#_s1o`E3})J
zmX)se@Ie)oHl9^l7X7-jt8$0>WI`bNoF*4gOstz~??-Afxa)-&Zg(0TlV00hXk_W<
zmHcy3uP62#wG5U<JwiAr1ECYGHL!z0x1dczeQGr!4{~sZ0aDzI(UyC3xH7nybI1}z
zsRW~X+#rj+t-zcz90lfnRO`zP$@z!sa?<Cm%ggQO)#VK0W98*2!b^Fdb>gvI;lM3x
z4hpO~acB%aL^(1XJ&1P<vr?guxOh+1X)GjA5{bfl2yRC4ucrp)_RoI4cVu8-+pd;V
z?glZ_a$lO*pmgrIlw}N@KP!7!My94?NLYNwNYTXZunA|*C}Wio%4F(?<0yO?-Gt6&
z2NC(5o$a-b>F(H`u?_cQ%&zt>5`vMn>kQ|dYS~2xA?jXJ-S?Ir3TlXz?0W_^)z_k=
z`hi)myew8f+A9~ds%B)3QPkXq9?XEbbul~I3r3G#4t7T0RBL(p*ch{meYN1S&KnVi
z#+}}k0RmN{yrjQh{j+c$HWq1=9)}#3j{7renj#vl`TU4Kke<|~^<9s^Mx7XMsn?n*
zsL`za@EwnMd?2NKvAVKy^%pgF%6IH2my?uv%6esuvVg5-bJ;A0W0$FW6!_*U_`@|r
z(7HOK=Ihmlt1)JsbG1;5LiF697__umj}rmGU%V6?I(7K;lR1OfdvbxL!=}#288PlA
z!YHt;Sm*oL<HzL!B>8#B*BKnAyh`gqvM)j#D3AiXJ0#vq7FUS!MU?D$;v)N@f7Fhc
zbY|2{c(_waX}BcEUS7)fh&pQTqLM4`kqdA>lKz$nv(a7;j2m$bVB)B@Mq&a80(1<j
zm7CQmRhL=N{K8CG^!6)0+q-jQ*|9~4yU1O9aQTe*!g)^)Up#Zbr6c#y5Vf}tct|;U
z!v6~%q7Vb(g6KR9G`MR#WG|y+Xhz7uE|zB)%Tm6*{jTI;Su5%-Z=qb+<5<b=emf(S
z$#3QWF+V+TUlo2^IZt!5#<OB>IeaYHjUUrotvOY>JDM#zopN)67KCKWG3#RzT|4SR
z`iGT{RB}&lkPB)o*?rSAY^Af)lSjo}4S5p9IPkhlz<bJ{1<W@X<vv~xTBmfXrpPhh
z#lgMJI-UDE;he70@uEL)5J*UgD5F_|l{AE7!HLkq1Bo13xD8Z%>f70~QTwv8<C&5t
z*}c^(SFKsIYUOHq5!<s{`QDms@onicOIfwsa`FS7nektIALhtm7!Nr7f7<UDXX`vn
z;{9eQx9zGlD4(=Uz%**~e*!s)>Xlk^FWo4aZl#M;08eM^#8|U~zk^ZVOE!A(jff3*
z!o}B14@G~M7_*~pox9*t?OW?^-Hoxd1>xOpBc-tWd6J7>1hMDv%?R=k$F5HAyK&w6
zjR#XceWzmPhbX-{>sL{dUdkSP>((cqJoESRP9FP|ukXFIlyNd>U%8<MaCjE@OL+_o
zLJ)SE<f?VTsIc)aK@VxRb47NZTB#abCNY^|wo{MCeo-u#__ezEa+K|q_~5F#_l(um
zmM=G{_{`5(%$eva#a^`B9ARYklz_{$r^VUZMkKr11z?Y)cZyuLQhA6FP4*t!5FEPe
z#N1aWE}Qq{h()t@+^v6~sr#Gnb#x*MnK-Lf%0=+MYcC8mJL_Qgm9zn#5h2Dlk@}+!
z8H4g}``#RW|K`c)h-DGtC{&V8!QZaST*Xl!xq2yLoo8ENU4Y{`H_u9si;;r<{=L}W
zi7_SKE!e|=adWi+>^?l%Jg^WW=SRL8WCqs2pqDh=M-I)(>JzzU-qNMZ-#Go&;wPRc
z+R;5GGjqTMseY3sr)bpYpN`Mp{nUEpW992@+m#Zwsd6U{`i@Uc^LxHc#;kK6O_(Ge
zVV(Kj8;&{6SNEO<c1|YoLpadO4MfI`uS1~t)6>eI=h^JjQM*8`gq|Ci!+B+Gb=2;d
zbfxhjTWI+}vS(l6bXJ}cJ2w2T1U#`vU6Uu#_5idEZB-angrb*KhaB!sLs!I=!tRom
zntNu&f(@rPELd?SH#P0_I#2Vk7m?>+{zscuGi5s4#8z+mNG!7~eQ}uCQ@Tm?D;=^q
z#i@gSF(c2+A09#Gb2#L~l4F3GnvlR?A~#t48KIYC`zK>F&JJ1O;l3>IY)0&p=bm83
z_U56%K2<)!L(T1t><PI*`O9*C(V0n^eW#pRBz9+Z$SQUBi_}e`I6a3gP*&$m7sXAf
zU*K?e10A#Sd&p_5@_VGM;Aa8HMd)S1CC=|P-RE?V^M|^Yd?We6%9Hthl|QucjeL&$
zzM=VfNR8VXzmr96DD*5o<ReeDUx;<oX*DFMh9Wdw#8yQ;J4B-xRY1Vyz-hqdHf;|+
z-7lW~$QECigN*1u&YtLCziiceEGyPmdAjE>+Ju}JjwB3|W^`Xv{+w3x!a~bKrTngw
z>*eFDf-SAPsjRrx7~r5-CO;?3+y9`+io$G+C5Mj%6pqoZ!$<&g@)%G9_C-oHgbW2<
z7z#PfNo(c!{*w;2ZL@j6cgm+Fzxa1zIj^i<W^cc&{N5YSZgsw>8!&V9g2HTR#`$?K
z%G&437j>_4$k_jgJ#q7jvQ$}e`PQu~><6X{F5b2K35<b}f2aHsWJTZ^(@NX}F)l*H
zK#<53%qtbcA?{f^R5~!SKC*D+?D?4$%(eflucn(9CI!wNsxb^y9<G1EGFM!4@(C8%
zA+Al8w{JA^?v%&3i5asc*Binb)|=~nUgGNkO;oeqN9`YSML2oCpk@n~I<QXDfd7RU
zmk0D*5f~eHBjei{xDT}C=>=5NF5uQIZeFT6QS{VPqt4YFpS*JA=+}qF=j23=tr-?K
zXiz(_zMH)lQ0f4em*%!%C=~BKpVA8a_R@Tx7rgqE+<I+wx=+LFQcq9h5je93TnN^v
z3*fUId&QabZ7fKu6Orr41RRk--Mx%qz?YCfR0HGE?=zO85t5vHOj9Kt8N}G`XswHK
z@27}%KPuli%F*5BG17sJ7UdQ8zS2QtEZ4Ge)1Q{l8N3aZt772Kl{Gc!5^EBtER{E*
z&nVbUfD?&2paFhiPjdc_Qp{pi60M6vC<EM}XX0h)^#?&7-me#2Sue3}1!egi+C1GQ
zKj(=DL2i+c-3-6B{SZrZ2>fN&_^HaDi-&LOmHX7<`j?BQ-sxrt{%PHesm#8`P0O8$
zStIuDrSXZv9IOrMmVlN6YlLQ<6C>KxT!C6=kjky<r$*t#m_?+0T0Hs`+bcfPtbVdw
zXWN3eki@*2E#qaD7uRkLRzMCQqo5zuL4k}y*lFV?Afrg2?rK+*&I2jVY@$d^&4GeN
z50J%U(U@kTqrpL$#x}Q^$CE~|&T1BqZF6ZZsJ#eYE)#f0v;b!}AHB*Jwh%3>Ckeuz
z#c%$VHSXy0g~M&)MPQfjpI!9qS{BPDXgbW>u3V!6>$$BZjQTxnH!HbztP1_@M1SqE
zw$xt`IwYBuzQ|VEvPWduN=#_a<o3$WH~NhlHD=t(0nJ^$s(i9}4H8FAkS-0GdJ~L`
zDE4pNB}>Ag)vjzgr>Wlohx0VIz+boLa~1$sE%;ZA0rBP_ceZSn7!Dlcanuvp3AcsN
zvcqKsFUO2Gh30ge-!+4ESI(~;cc{z6&M}42!^}DIioH)48jbt?{8I-_SKi)WNqgpn
zSstGI+XiKf!F&rE8|3AHFDb|+CehjA0dOX|p@be$8JySb%M!`y`v~72PkudUjN1;2
z_Mr7|d9{+yp0IQ*h@2YodU{SZ`<Jpw+-SW*+fQL$S;#%2<8lJh!I&gDOZlee3rjfj
zsrf>h(XdgxEM-|n;n^U}c?WPd2;%_uz|N4M0eu5Y5P}~RuZzgDXoEhDgebPWYFzG4
zq;2f+;e|VQe@dA+qW;|(>vm^oGA!%FehyieCu($v#sAgvx{|1zV419r{X2hP`VW@N
zVmuR%6;#K8m@#3vvJw2je8H3E9)gC!BcSz=c!cMo>kxf}l>PG=R_GF|q@NMnj_dpy
zq~G7}9GrcifW@H@?S+sm%e&&yr9n^a|LBU6t$ePOv(XP!yp3!84K!jBj|0Kh4+)Ns
zQ|rKUM;G|oqR0m)5vEw=?&fF)BH=;D2?;0ce!-Q*;6xUh>OvI4oZrTm`TK)J;HGlB
z`KI!vKdS_J2p+hD*{@mHH39S?S`Jg*$j>4If!oTT&9_-veirtvO^)yo0->28))y4Z
zTCvrLO%xPp2u1Q}>xMp8viw7ve4t@|?0{0Fc#5~IQiAA5Qb7wrL77!0{;Rz;xjbM&
z@*emZ$O*vjbbd{BjP&F;C1l}&W?ehU*U-+i5R<LPD)i<})q__###4#l1V=H|a$f8~
zRf5eQ*y;yMrJqk<zkbGNRm!ch_3Kx$fsbj<Asb>W_MlmWXSCMX;*?YwJKPkT#yqf6
zNNoU+@Hjx(J}hi}@#%?UjN%KHeB+pjr<Y~*A6PU+`JLi@nbU-lb`jEHXNNZ9N4~uA
z<&opt_`GEF+_g(=w`-TD9Xv#UW48Wqj=M$MV!uHWgMyKZTxA*%Y#(GD%D#wpB@>tv
zwXXa=rD$OPtYy@@C0~4jdM_RyCLMm>$qs#3K0+VHmwcMKc2HscHufA8_JHkP4r{*F
z+P1j9z^~V0{xO<ga1HJf<Fo4XxnF(|wA|Qx*ae1=q42gBk&D;$RpmjY^2b?Z$zQ})
z!VVCj6tKMyKc;t=V$Ti)t;9^-f_(YA5)!$GEM>k|-(kLIzNq~24ERpG_h_$loWHl9
z&W#~>FBfaz&8aLrz~IorC9q~R1er57qad4iX7c2cCvVx%kljtTqMvek#*8ZQAWMC!
z6%Kw`C2qE%pjy8db0!;GBKP}Ib4-E8z@v(%g$)W0U)%5Hyf-ghdUI%1e`M@O$=NjJ
zqH;HXU;OoMW)_X}!^EP^-LAK9uS|l1cB4`ZS`FN`!82TnCH@FjI#@)S@9QIk1&!nJ
ziB?MB_us_&P@Slzx>(YH7WY-XZW8Hr={{_p=afj)4gZkmZX$G{L@p}Ua$b<wnjlh*
z(--&Pr;s9|HxY4Sw*k&h8%m2yi-&dg>|OsrdP3<L79H$j-rB}<Z=Q?ekSUY@9BfeT
z8pN&jY;VQWksf{{Us0xOI#pF!{vGLUun%((bDi}w?kVZYxAW$RBF&52?W}dT`tos-
z{jM3t-a;mP8!9}H`DjjPk4qJHh7<bZZWS)u>?(b{1kYH5HpVg9hXULiVj&)rmW)&s
z4}Q`&{B+FIt=}<8=$D;$!c#DdUP;5FnI|G)i7cwi6pIi*Skn-k%0|l<UVm-dj-${?
zUZlDTM|W&LckX#FahACCp7Ozx>p7^VIUQe>IoFpUg>NIYs<w6MkD6{;iZ;i5Xuq_y
zqw#Cb@1_Y<Lr~>+?M^bItDx%;!{3>PxH{yjM;o2csMz=;+IS0RsE$kMSR*|IO;{#k
zk@cVQ9w8U7HUzOFMjwWek65x`w1>w=B+gJaTtDbtcYn=X_ZOdLE?Y&#a^MT4@0Z9n
zuUxkL`P2Rl>^U}!)WO&@BnMC*c3gi=ct9a!sG5Kc3)fV9)9O<WT;9d}F&<}?IcLwZ
zwP!s}%$tO+UVM7Rx~-P>;#;<AZI%P2<G;WCCE*y_CLBW_+|1GvmsEu*31B#XxswoE
z+6sy4Ti}<b(_@I^&E9E+SLzy+qrbPUIONN5Xt26AxZkQ~oHU5vhiP42&TEZb<~wO5
znjxGkSI&{m7W}7x>2n|uILhl`IaKDp0<+~Uz_NpKj`iT}a2p9<H^_5<>5FI=Hfg}r
z3%Vpfp~A_&!n2H3IJvt!*@?2?rHR$YI0ylr(cT<k?_V-_!G$#HDxoZNNw$;>pnN7-
zWf4&(A&8ao!Uu3!?EM2<G$DTFO66}QU0Nl+ZTXZc9*7f_RM+!`&(%*VLg&Ci>o|Z<
z7$N4x_ZU9X2;S9Vj2yt?wCEq^v6E5-E7L^5UW(ab-+xG@Rbe50NJefEJk&YVNxTL9
zZyO=n?2H%n0j|aXXH9^eFFej}BVK?T5*-Z{E@iBZU4^96L|u)&9}DwmbQpJ-CTxmz
z1EL1$z-CG!7!y;FoVcK>;mxY7=!gI*w_fSt=j#~7Zd57mtOsCwAN-YoWD4(9DIea!
zZoKPf=ZWE9UYyo(c*Ew7dAS1KwHTk9FyHKGM*_V)3qX=r{q2;7lnVq}vr`W{jVKu;
z;iRjBHYx=Qq*$*m(HVpD%=UI+_I4T_4757Uk9xZwhcmOAvtWmK2v<R?hXb1+BYKDF
z`*m&p5>7kWJKO0sZlXR#{X&frD&HI;A#}<RA@TGHqT{Q~@49lAMZfvk@K=X__9lx~
z?p|kpnp>7b;$X{*4J*YpXJG((_pD{Ev`8FbIfS{9z9W&-5t=OMAK@<MW-p|e{p@6z
z)$Q%<d)SGR=A=%rmnAz8KFPqM9k7xO6t)38!tA>6$?5di5BMG)On9sw!fP+GzsS^K
zr@8gWBwu^jLB93~$`nq+sIM0L0lS3X=lhDoTh)Kb)-kyXp-@8xII#c+Xl`y29stz#
z+6s+O;aKLPiAquNxdok~eZ;=>s<(hRNuBG7B)zJLO(Y3?KnJzYq3ENfKLCxP$&UhX
zYGtpdJ*$2WS{Y!r2ZqLI0)%Kg4iq?T$`wMHR;2Mn+hT0XrStWc59_%P0?KgM@T$qi
zk3OttF!m348eBszZ??aqPfkCuHts^2*|~>Zg|5;~U*_R%r}sc?7hDqbP*vXNNM<yK
z33^wzFn4#s80KmS)9YQy2SCrgO!W7MQzHK+pIMMe!X=aVRdVl+nY~ADnKr0%r(hRX
zCGTUHapP{Wm-kHX-yz~)ROhU~NIAZtR!XIXlE~vt-hlCF!2z`uCYfFRVx3&u+6Q>c
zu^vX|O*U~dio^2H7s{nAtFZUhl^J}53Rj~cO11Z^R`H|G8M#OG8M*mKJ?MuIe&n48
za~s%r0R%w+gCB^9A7cW}QilAfP<^|ZJY?d3G~m0!$?g<}dJH&BB1Gwhe*IpkXO7j?
z${+O)->PBu^>l}&NQ>Ise(TC@dFet2rAldp;{Kq+_U#Thn;1C6!48k^wz+-ft=nw~
z_E0Cavi)a+CT+!B9f5;Jtytz@Cs#N+2H42~S}8z)GlrEY!3X0iRK+$rPQ)mi==dsl
z@NhDIi^vVZPsO2LXp>@+^>7tn4rR_R_5qG)Fxnlcbn`y^JJ2B94&AVyxQ!zbe^~Q9
zm)Dm}o3k*#zJBhuCr%%cZo+5T=lN{^-s1d+9mHq4dR?MEW?~+wfQ)g6n;jej9PDVk
zjK+IgC8Bm(N3jf(Vdw}e6%EQygXdo`O&QPL!Iy39v|E^v(nO!5%+A=4jsf<%01cYO
zrle*YICXZ=+KXk5XxW8M8ghV0;b3WM9rH-xtvADl3e?!(Ba&1{J}@}fJcLN>vRI>w
z5Mb}<Nn1ZQiuS&fONHGrPlsyfGNHoW=7ST~f~$Z%ffo~(L)g!2*6-TAZcUx?h+SXv
zh}f2gFK%ABa*L(Crb87tmQO$V5;)x*eU_k437R->p(FgI0tEY54}%=w;)B_tTiem&
zd<;NyEyL{Khl7(e8eJLCHyH>xOM{83WsIcf>l=3GPaKf4U|xP*U4AX~{RR<&7yBn|
z;{&*5?O(L{{qQ+=FniloI0+RFW%eG<OoyCHv4$kUDZs(x3G9HSOg+Z$0a0-5HL+6E
zuT{~*HhfQ${=Tm6`$x-`FJIm?V{}+r`spV~iH`NO(j92Ovfxc*?-c73<0ks!G=rgs
zJe|DkE1Zt`ODDwRnhL>q!tJ=e!eg5N2eDR6uamytF^xSjz4lHj)2p!+9w*5Vx?WXf
z0Hp*Ndv@#Sj%}~KUNA;uDHCS}q>X#+)$KcuGXK5LKD);stnTJ5-&8U8vD=qi&$)Wd
z5?o&oGLV9^YAfU)N9aiVnnS(4TwP?nr&OWe27af~uMI{SQ06BDxCLqge4N`j1^Bhq
z15<9s-q#~YcTnC<-`m51HBt8(e$wCj>34(~;!I}EdPO5MwE?%QN>!o+HWB$_u8)~A
zWej~=lBPSnT32`Za$Wsdhw1h8;&+d^x9w*=*<`L-TnLBRVwPo@2t>lTAz5(WEjwsv
zdYYXb+>y>Qzz`$EI@^2cZ&FAo`XsKwv4?|P;i0K8l)2f{;Xw(rz%!io2y^fZv$uE9
z>A^C9V*n*Ua9J?e4svY`#RX!-7@Pg{Cg!UAy|F_1h?Pz~&a}`_)+?VW`{b}yD@0@Y
zqY>hch~vlK`waA9o&_fu=p3&bjGB~c#bDHW2aNk7cGC|2E(vDm;1I#+0>h-e);+ZY
z%(FQ2ZxTxAb?Xel)gb}Z?ZkDC=M0q{2p8x;)}w}n9*P$XF_1x$vjWpC0ZBN>eG6Z(
zGkKA-2aX_VCDPyD+qjPTTei>t>@#u^c%)%WrxD#l^IuxV{7fO~A*Nr(^?%btjABQX
z>|38m%PBwdUFg%_hbZgQ$?(#=9M`S=&J5}9B<i1b)_6N~n7xDOt0de2+(G>?m;W1i
z%F2HpGhxV-f8Vp^DXY3NX8g)&JWrXVY@U%la5Q^Mxjv+4&!O9P%$UC1#ivZoQ-;F^
zgZmZZ(g>br2ccT3WwM|ZwZK(?7A26tkz+kQ*qIvf7pblxK`z*a`A}}aFL-W17f>eR
zi?yPw*2SQ8(rE37HWBz$;-s&3u4S%v)&GSrHo|605|=ybk-3|spBHSiblTQ4F;KjJ
zMtREJ&Lw!8lF0%P@o<t|E@XQf5~Migx57U+2DQO3fHS-nG{>2~xWR;Ez_|kRX~hp~
z|Ct}I{ZD?_i}+!${{#FmY@;@Q7$F!;^f(|izV$PcPMj|~P;~wTlYV|nXoMms8<;fJ
z5{H;0gy4=jX8A?D%C;y-c7VAx`vMW$0mc<`YlFGj3*F2P@I|p>8m*X4+%GcQk^7}x
z4?&}oYVE=8+1Ow#DyE~=ctM`f3HtAJ`tOE=SI6-Hwmn1|r})&=uy1N=r1lLT;)wlF
zYX4|2_09W2e0ey<mqT+>iV@KL`xrw@zm)*%m<&R&*-l18j@IA^Lp`lO4M+nY8K-JT
z8W2t;&V>hgxQkjf>4Y(!*-M5RWsGmd*~E|`qdnvTXtnD8cwM>i-L|>R`!IEi+Un?I
zC+6)W3^052aL|c%l2B`}b&_;i*_i<n&O}=28z`G{>3%HEBF=j1?YtzNmn2H|UZR5+
z@=?OO`A5(#>#yNFBPj5jYv;Pvuz74A$}@aL|KYQfC7yV+SNuw8%kEmp7}ErQ&UdkD
zt-W09fNGW?eeicncWPP(I)rfy^4Y2)bPGU>lEs2`@50`Cv={Jv+_%NH#yY{z?82($
zTEqq;ogUgJhMs`RIe8V5)&-P?)u>w&OGj&D)kTAjsyYCxt{B(p9G-UpPaWV%eK-qJ
zwWbz@F(ElJJN@kj9_ba;(2%0;eCWc&cWaclrEuy(s@q1}AARt;x!m7~GzXF}9{R@#
zu&=26_jt3x-{|J-;OV2+I!i_eo#5Pp1MinixB=FCo!<Fe8|^wzU8VO$mz{y|JSX=C
z`i^EzT=;+Gy*cX*<rOj9#EN<neTNL{hBP@~dqlhW#l`b)zx~!{HJ`op_U)P)TuLAK
zRQ~bDKA&Bl%n^xCIxt61sQM>)Du2MVaZCBbQ<<e%*6^~=zCZq`ROd<O<w`!!d=9(C
zpnIbMJB|bPnp&)XwS<&Oc3KD6)182XD&e#8-sBZYycm7UqqjAjtYKf*aFT}225>ec
zSn<kN9tWBgg!~8ayF+_$y`$v@MpqlEwGOP-`M)#Y7i*@J<jw3|Qxm^#?Yb-Czv1q>
zsc@8g1pDLB9`>F`hv(7963k<WZQNk9YwhG}=BRbB)4~D{9-KIEBG{bszSNrY9@5b6
zz%Tf+4OyxKD9~m$V1bPS9YiPKk=D7XIlbDP%6nrzyf;@ytT&vJTQv^2gvh}Sop}cv
zDe*6d3PDE6#5qIsh5R;%?`{vi+X%i}+ludYw5xU@w!2oSR@v^>94NW*z-5ZUQQ13x
zEnZc=;IEp$*ik0j`0?8hcIAy2F~Xt%t(D}L4jh0cop70C+sWut0>$wXI)Lxi3id`1
zy{vVntQj`G+rg<?4<NeKI;(6q`n9s%ExB&qvvjPc;nZO2d~kJjKJ`qLZpZNa{CrCT
zsDZ6>k<*wYK3_M;8D4hPPRM6kYwxD=+(sn((K>M4fF$<cSZ>>N7yY$-+45z7fxrvz
z{`k!YmBUAj&a)^jx+B~Jk464wZG{Z8or9yD(FYPB*lkRccq>o0wZ;ps!diAgUgz&n
zZRfhq^PGQWAm^}tvKAja=HS}zm~2Pfwu7C@ZL1~$FjzJ-OtW2p%rxN_yKgTzIC`)>
z0ziF?y+<D$wYlGb9fKhFhHZXEX~@~#<$P*#Y2ne0<vBCDc7LN|q*|wN*Dg|!h{6Dj
zc_X)x2SED}V&lEn>Cf4(Bi_5(DWKL*(7O3)w8VOAn^|v8Kkwac$#UC#_7Y<gTCv;_
zD$9LsMrLMd@sJ@CEM1;9ytjMz=U?xrd|&@G%1)+T{`mJd-uRw9Bqj=C)NSQ`FoWMP
z_a7BMEFi{t0Lb(aUrSG+huMkq+I9xPNUZj464G0++SMMKYD4W~thSefr&lXhI~m+q
zFubLC6d7l=Lm1mUGx6S+Ni%<7`uM8b+t~V=Hxxy38#{ze8``jreeSv9r2{)2?F9qa
z1$3M9OWJAhJt?7cUFi9Rj?;5~Uvs|cesRbVz?$(Krn#W&h>@~ZkcEzv2hBsX1%tA&
zIXzj(xf*ssF~=NOe6;%Ej|&bJFIuy<208TDNhNcGGOJ+x*PkmVm8Uzu;KRI`=l1od
zUr`=OH{cfq9#nSZW17mxG<Oij)CxB<&4JEqT`m{|Ud&GNtoAmnb2uke26_q}-bQCZ
zmySRJ#C60{{BLXI^fdH4=I71rAKof*hQaR(21#CI+EXoQ3HCqCYOqX5l*80w&YN3!
zQjY3v6n!jT*bnBloV%ceGr7XsidfDVT+TKgEu`wrbT-}serh>S3QZoak7ItlC_ffS
zUrpEW_Y(dMdk8W)cngBvNlEXlg*619TWz^`o@}`yd`>9Bk9c%Y!?0LA>>pmhPViAy
zy%|Cw=!A*&1f!Pt?z_$&uYcv6)AO|mVyVP<k7s}Uwi41{MWxDGEt|}FEA}+Vj&hXK
zJdx`f$fuUhZ}br#r&?RkB6=g4j-O$Y1GSF!_P?%dIdFhYJy3b-q*5V@)KD{LLwJKR
zcLCmjae5qY(3raE@JAEQz)xKD8E=U&ckhv%fjq|vQ#kB6|H*M>mWnIUD*mecD&aLa
zRl;ktdY|(tE%?~QfGEc;oL$6AJGQoSTqI^#*$WAR&LM;je8B*7tU(~=L;4>bRfi@8
z2ic<xsMw5R#WIRxfY2d-00bqgYR9V8Q4T`Iqp4%1FK%WITiC*zq}q`O?Z0!!3U_|K
z0Zs<8q&7neBwSB5H{8$@X>bDms$nlH!_-qt>06^7WYV?Gw7E7b?-2ZvyzzS8$q^VX
zaLB47Hfq^eer@G5p)SOVV0~1ZBV`B!pDAfz13_w!7%l7~TycCAoWSq*uaZrKr)mCB
z{7rg^>>?~y3FW2{kUZ>L={L;|f{EElqY95YNRMD6@86~t8qfllAECP-2{P#nlMXcG
z$px&dH9k}r0=Ob(5gINvLnR;y0t3VtvVsgTVu<C_`W4c*?8hqQ^(wCJg^e8jlFW*C
z@F?uu^a_15wqk|&i{%R23&Z&DRjjr~c~GS|@%btfc|YU}f#&%eq?sbat~Fl+w*s?$
z_0%s*JX<=wXyU!h)Ky7|ix;aFzA7bs-prri?DYHMg;g0DwJiAAJ!lTJf2f>;@xYhZ
z*0zbV(UVV6bKB54aVgqz<ssAb&B+;b>WzaXLE+&stJpV+58Tt0>wN}&rToSdktS|t
zc2$Axu~b+qSLis&#shyM(v36hMe?>K<*QA|bhX-7RIAH_u2sI=?4p`hU~u6^7fTfB
zGn)-B)OIrV!C{P@+9pAjw=K15J6RQ0xd3}DYg-(bU{x`d)F51dts^PDS%_6}uw0qL
z?K$D%k<%nYLaODs_%iOJ&MIWfBd^o_8FU|GA=@M3Ey<?EEoUJppsh-(OddM(W?RK)
z2UK12ezd&G?PTKp{gxUSl#0ad7Fq}4KIQ`1^dH~vxayL>GOqmGIrilprB96#iQ)EG
zuB3q*g56EQu3<u3^napd|1AjLXSZ&V$%NGBYUfQhUv=!`(D&k&eYbe`%*Bf}HaVL*
zW`8RXzm%Trb@g3PEcuMO2S_1p+X6v`(z9%;7_4kRt8BqMcZr3tN)jq!ti;bBL4Vi-
zt>0O4fbC$vC^ZLw@LbH?){sDy88iVoG{{ed;9f{@CsIMQ;v(*Y2c-K&bble;M;}pu
z$3Bb;G*Vp;qH-QV;&s46=^)QiI&n}yWli>UCO{F!<;usOf0yPD2~v5R!(BRj948|B
zZMGe!@b^bzAI-*`?1&avqq;_3gl4lJqFXM2ByW+XK00nqwSoSu?;|F{`aI|_(GH@;
zVIQ)oY|6(<5OYu-)GL26*!(Qh#LW$FXICjB+5Reyj7+fg+1v(lqNwgO@lAbSxpLvk
z6<h!D+kX9ZTRhFz2>6_Di7z~IhmTy&n|M<LpO!iQV!tcdA0yw_fRB~#D&{<CSt5Cf
z=PcJmlLginhB$#Q<W((kr@0;J;krvkrA9e(i`6L8uc8`F#C2sl2P1n!NfY~u-pUlV
z)$%R1vko}X2R;W@8rRaN1<8oh82*Fgd3nlxnj8%3Lt>-NTcf$_3P$S0{$=wm7_a%z
zG9<#cjn!d=;|bbFy-u928GQZT#&t_S4{nQYVM85AXoPi6#&Z=d&fw{EALA_tiedv3
zR|8e|e-h&kP5WP*<$Zc~3wm5Jj}ro^^grnFQX5G?`}cuQ6e|ec6+TJ-K#*H>P~7z~
zqWozDrxoJ7{~*fYHmYHp18lRDe=DrzQ9^jgSthw}(WEc=F=8bjMapjr`SBr+vAK<4
ztQ3Do{0Q37v^+MN+i7DvF|4G--Fi@n&dt;WH~^d^90<gC45Zn1rOH2uXTfO5Xh%wK
zUKS4HlNN`VqSV!Q%2iRqBfY-<R+Sjqyzuux9s604f-QX5p1c$Ic)yTIXVHfDqf6l4
zv$jsCEFaoO5957Pq?p_$=B@_()f1*r<RiO#k2xxT5Nr3&qdnlVKEOHp78tFis6i(I
zuy|QqTBB|I_g&nu(Fz-G8MIPAV37AoH#@;w*TL*O#x7eJXlE9p>;eVtDB_{HEujU@
zO(v9UYKMI9(L$3ilHW;<0SPEOm<=;rmKvg6(hPwvQ3k=q)nJEg1oWQT9`WqO#9vCb
z_Ry-li~9$Z@#oru_dm*ce@K6LkNaz=<2KTJ1FYjv<uI;ab)ox^#`yEieA^&?ZLQr7
zKCZF(^OiBmQhoDt6hmSi-&JdS>Yi*7+bm&MVqEH;Y<`~aN!%wsF;Q*5@n`Nw1VV}X
zYHTxq{#P3B3~T#s8t=)cY5r^hf6iK)2=S{){CX|mldg-_hdW`Mcn`DU_c_0gT(9Aj
z>lOEL2DW&<<#<&%sQi8Ncx}&fcyZsdVXfBFDZtmr*VA`tK(udKK%j3_fZ*#IU|Ubl
z5A&Ftd8!PC?%hwi2Kaj5E&HVbGkgaIn0;lAOV%~PC_C{nT6t;A5xg{DV;e(L{J8W<
z^K&iM<hE^&fN_i!#-DQ-Pvp;YU5xtteS*m<>+?l`;qn$R9BI1`nz6hE3>Vw(^XFT_
z5N}|dsw~tD!`9DF!5UrRYtgEGieC{o^ZT~v%h7(XRybIojvx1ZTg-PEjR&;iL(nAR
z@$Eq?RJwq3n(YG@L9DjQL);=3g7eZ}aNfT4v&2CWW6uvhu*!H8^XZQMN?MJhP@O04
zPi`@er>JQ>&vBdlbXg9+w%S)96IuB69OXBP@xb{Or#_Fkg|_lMT<7v@v?AZ&d%bJ(
zHP;OjCxtpPjhA>%h6r2)FfVAKiRe<%cQ0LM76AuRRQIM^0SKr;!Ji0mx8LA+XZyO4
z;I?Uj=^gVr&NxtVc!9ajt!vTH%(!l2{8*i7Ovkq7K)L^;-$y>v#Te+a$351+SMvPR
zi)E)r)g4D>M!P3WiACSbFt%*iqy5l#NPJvpM6A1rYGeb%?Nl)~K=hC!(emUWLyNj1
z4zb~3oq56G+vrZ3@_EPnjOgf${EkXUmC{XiT3kK9YuEYJiy`-te6|?vdXgUys;_}A
z2hlXpq>0)zNY=h+QbF?KC3VWbiw`aAkv9L(^pYbBy4SgPEk=(?Zf;3MLz%NU4IQwH
zsZZ9g-%z(KIeA&#24xdFl{h6gE@9m2eXGZkK0E<^?o{XEW*s`O=7EW*^YUjQ3D&{C
z`fAgh>Y4|xjHP+>w@vGFEDym5`z{-JNHDV2TBkD_JR@I`R1wFP9BFO1jzB~UF=TRA
zw>tLr;?wh!Rk$l_t1Pz&^wF6kJARIK3ozbNjJG{+S0>+gN~Rc_D$_z>9WY)37~mzB
zMwoN+@<Q39hMx7N*tv5{hM2;#=I)z2Agn%n&1)ZB*pMqN9et>B+4%0xRV?GVn2{@<
zdu{U4qb1SNB}bRKyC3{{OOGB~epcr*AN>xu?knCW&4u+8*EXQknP<cIRq*q{VAZ+f
z*=)^kbY4G>AODCQ(Jhd}I@N}PDnQr@2GWUi06bsBydwqd2Z7@o$2CF>f681+73~S>
z(F5wR#C2w(70~feW5O4HWzB-V{+D_``TG2MuRYoO$tPonFY4EK;qchl;S2k&@l8Lf
z4~`89jteoYfm?wlGp6{J1r4*L7dPL2reDU^&o;*$QNEn=LTR#T>VfYM%}nxMbf~1^
zUk9e8dHZ#rlFj_vm}!hdFvi7zk&3?%m6}JzaX3hWaW{=himzL;r2B#+CDRYhPwTPp
zP%(2>{%ynFA;n$YIY5;j8|s!P_ucTphV>t9%Bbp5x_RH089n22rzDCR!ZT1yxf}X~
zMyDmLi6JD-Dec5=%~)HPuxcRfdiK-jHl(tc&`)-FB;gy{+ky5H&>kA+RXl=r)QdM7
z5GnYOs3sFeVUDx$IoCg6F0rX9nQ;+0!J$2CGKgi)q1_6)wskz)rr(P9R%ZF1K6@5M
z&X|meslL9c6Eno?mVWbInI0cM{grv5UBf_{Dd3lYwkd|FJyBcuxtUTWnt`e|1!<E!
z++Ac&*pSvN#LYcGR?!|#+Ab{NbX?S|Roik>MhzO!Y08;_W49zd_vlc*XWZb0`-`8w
zHm`G3r!^MQ5Z1T!#aS7V?y_Te|D~_3bm|bMx%Efdgg#;RMqlHH=?Puq<lN_e-ZOaj
zy1BX0g-3oWU-r!eB`$5j)chV{A!)-V&FN-dFeT3%I`#*3U$lUKkm{e-g6?wI0RC2}
zb6Trz@grdz;3$k@vMmJ5BlzYw*2!}LU+kSQ52T%@3~mXbNO0}uqJj6Hmpr%Ov$*`8
z5k-sUFxO{K{q*sa`cvCWQWI0QU1esEsKg%ay6v7c?)XratdyHdOQ#iNdAI2V<RJVU
z)A+7D6Y%X!QI`xFT~B^iP-rsWHx#Fq%Jh$s5d;RR9(bLZJY)2r37NY>`iACRo6&dv
zkf^93^ZQP^kQdwaF}h;u(XC&fw9E~uz1B)gUskRyE_rfd!q`rOM~C+>*;qQTeO8aL
z-!b`QNeodMPfwyW-8cVinbL1X->lv#y#WUsT?QOl&}D?v{U=pc7THdk7F4-mPt{{I
zS>&-Y3o(DSUPiE1$B=cL&KGjeLD_<YP!kY|(hCIPx4dxL&nwu+4G&T#_KO@iVr;(h
z$-Ub3%)8QJ>d~!mINPUe_V1$Ue)@33mHlm!hNotKvGw_<;Nf=o$hn4vv-X&JnZyO1
zM$?)SUhh=b6lth9rQ(~#dO8D3Bu}>TRoh`;I|$$y-mu3;18qkzodeXS8EtODT=+`5
zh=G`f$+{g0L{Ll6&WsC35LgIEBBunPkk~}>rj#YM%I_BzC%+fecjn$%{X*JhmG-k7
z6|;McN^bMS{RQuJpZmgu!k6av^pDHz+-tnKEqiUuD=V_Ho;+C4y>v)S=Rs3b(<Y{e
zS4H+25j}TC>7x8ClarDrZ5okWG&sf8(5C>(^44><oqs&b0r4a1>9^B%tg@B1DYrQL
zq;XX$)1jVx)Mf$ZO#c2+z-D!>JddABdN9dEWUl8rP){$7M?`0d=sq)r516-aPFASx
z$jg|sw)=>rlCVyTOi%P>kA8P<*D1=Q@0`KndksfQVxvorEc5g{^wX9ey|?}N@(aKH
zf3$rESX9^cFYBB$Ggj)*q)11KfDAMA-m8d!2#APMEZDH1Sg`lrdx-^&EmkyYVl>7W
zQ#8hIqPa<~H&v6|+?&X3-fy276m#=0?|t8kLE&&_@3mK7Ywx|*mK>pnz2*LH&Y#_^
zR(9^F%t0M(qt5-A?_NOWjU36ZSF~BTb{f~XM)0E1vOPc9&am+{U6$=R{5X?88*o|O
z*;?bCnKM**42fI+v=)z;+@j(hPg<V;=u#GdHHc(bLz_(THH<mAye7$Y@C{17S!t@4
z;pe{Wa_|oKO#rp2X!IFmCgIBn5QO*67Y+@#JRdXnlT}+joe_H8GJL2al_$lzq>o-x
z<QqQo&gR0x&39(Dl!|M5ubF^APmq0+(HPgqBnczScnN@85+l9fzBX?~7aBu`7fi9I
z!C3-^O09|^VXjTDoY2Av*}iJgIw)uChQX_^Ht3Q@Ezgp@m>yA+!n>G~ZMWpf<uPT+
zfeu|dd#1%?jn42?Cg#yw!Fl1`oqNTnrn!VQOc>E8sPe#<(<Xg=VTI>@%Gw#=7g9#w
z4%t6B*+rY$JJ-`Ex`#TXq#?D3@1SQ~KfcsCz)L%w!%f;t8vkGUg3nLN<E{eVavKeP
zflZZ{D_aKcvT#MP>ZM^YvJ37E$PPE>eeRF9X#oSAuAtvxjE9Ku)$y<?ghS%8g>-#6
z=2tAwXn>HUZEE8~;X_z-GTI@-xI+PFHRu=3$87^MBtZGX0e5f1gW9<Rm{az*hTaG&
z7?%`Zo8zA_e8KVs!xOZln#R=~7!!8GF={}3+<<6jzx0Zcbt5a%{o<#cp4f0{ej2@%
zIli}#SNgEzwDN?2poso62KHGoGA?f9iasIzV%%IK`vz+>!+bowdc~Ja&MV(NDJgmC
z;aBDERbS`7mOCDA{FUHg!NLn2YR>tU`;^8t!+G?U8B*4le4&4#Ub$(G5rlio%XBu@
zy0Y|y0pZ<jbbE$1jgM~An~_s5uwO4sjlAKKTDPYz)ul()=yd%dvT*6;Y7sqtuOiDU
zzM#B+qK{8v|MJ4Ps}Vz2_m8aV6JchNUNI(o;DK2=Z7Nq&I3^}yV3Oy4i}0kh?)_H{
z<32E%%mW`}fDcq$j=5;zbXlJ8Z+!>cwqT16bH57jiTos%v=HBS#Hk-YylX0Ap|<d@
zKu&KlKs1Ny#D=1?XpRM2y9>(nL6LU$k%Q7Mq*p}P*+o>OUzm5O(#yN@;5>X&)uTt%
zp?MdiV`5<S?x*{P2aBR+c+=C})q&#k@09&EJs_J0n+p|_Co2j!KVaWJ+}uyG1z-T*
z8o;py{N)4>#KfviTN?Suo3B7lh8rm%+phrnIkfKRZ*Pp%>Bhd%;F6J%U@P3z`(J%a
z_-b=?jJ;Fb(Dg$i?d+mZ8-C5e9TO6gChROL-#Ia{tAno-J9GHgUk{7>dZblNsm}EE
zPOFKJsmf@}p~!b=gJt}rg6}zgd;nn#@B@fcrm!AfupzRAfr7H&&1ZOMVc{&2*1#*W
z2D1R1(n5>C+}Q5PeJdhIG({!m`J26CrX5o7?s5OJRn;e_9vB{|pAwkpt5*9a(hnB8
zA$fU2bQXer{+78zUCph#NOn#xL+5SDx3U_zwmMAI%wCjSmFU72DH9glrTy1cHohr7
z)=K^9+RZ}(TRzcNt;IP8V{a<t6NX?7M7KmHJjWV%P@u8q)o*)zx@$(B;<NSa0>$DL
zd}gxrPqDwU7I%jyY*T@M9!t-}pH!Ya4@}%i2#pa#HHO90r1d@-)zQI|hNTJXy;BB;
zCe0oeFFlJI(J#iVi({|eagoCcW6Z3&`DbI?N$8VMq^!cYi4_>i<f!ySa#rE)Lfg1F
z56$(vL1FNM{oDmGBo5FKhbVVz=#V9a(FuvOYvSAzE8=|nq-wkFR_dG`y=*%<hot%h
z2MIH$O3&(!%__7p^T?i%r|F;IWgV2Mb8)h8^i=!C`r@L1%SFt6R(d9>vB%Bh7hcQR
z`s`xin)Hm^_f6(_GO2F;T0U<Dd&|#ewE1E3{c%GTAj73@Id3gDXA^?mYBH1H8Z~t>
zwNL9E)#T`uk?!cUcdzT<*tKKRk^{!Py-HZ1pFR=p;N)*m8EE>m(6H#(uY?)Tx0gr7
zV$M^@ouN}N-}gjT15O#gnr{?Xjj@WI8BQe3Tqx|<7s{3F4m1fTfBkjc(vt_6%`#S~
z?9?=<;t`jjbc{7mnh0Cs@^S^B9rxX_JIzB*H26h3Y;!Lc(W~eBs>&UsqoPLds2s8(
z;B-^dY5g~IsSA3l{JJQ=sL#4P^B3OVkXM+$swEJ!NC#Nn-Fvuq4VcH`$1)?#hEZQ0
zq%guPUR}LfhWZ7>`n!A-l;1mfKtB(S>SdV8WEbQMJ=^&DK@)l5azp{y!j?Lxg4eEQ
z;krI>_~=;+PM_}8H1^<LYLZ6aD3AU&AM87QP}86xudLrjKA&QwVEgsE{@1H#+y0By
z|1obx`?Y@zJw<>Qc|rMB5Ld0P;sL#TvoKjdSMXG#gXOXoWQp6+mdg-#6kgKy&y;Q1
z%1ab-!s;`GlYCh%BbFHnE0`nzaZ7=3Kb|c|+-FFsA(*x{2Em{#*GW8F0kyf-36<Z0
zDi@~<{smL>vg@+Eo15Lz3x-5j?VXscsI2LnS~WQ)tuD`B+iy&iXS~Kkb*Wo$4|{Vr
ztq@qXV@#B9@v=(j>`wb5vU*zf-EeR2vRSWJ`FLjxjnApe^kh*k=@Sao@ROXiKDM0q
zK*xE&iy7YyC0Cw=!R%a=t=e1}4jU3u02^DdKSY+Nc)280E`&Bats8Ur>A_JU!6Oeg
zkoD;%@p{CFO@k`8kB*EQwY?I-RFArg%lZ^;x!pMCgN-HfF)kUuXMq<k&sGLs+koD-
z?1qiCq<)nHIa;4TRGruF0`Gkdy_kwx6$>SPo(T~1Tp6{}BK<iWy9Vw-Kc1(q!T8)R
zqEw80jS27@*fIcFI@C(%MJBj=|01O#oNcEA(n>W}fBKQWctr(-4cj!h#qi|$XMpYd
zs9638>uakM>W6qAQ4O?%Gf#5JULjB!>S<-GQjpOt;R@56(_Bg}cJ;K9!Y7{i?Zkxe
z=%I^q*|U#V4@2b`wR2)^ZtvP8C#8cnU_(xAQg^9*fAFZ0RlbuyT31l8?xV@`K3I}x
zc8pvr*4@yb>bquCeEg_2eKn(Mt9%p2tOGvU;hX!GK!|Y*PZm?{+2(dKs#HH;%@Hm%
z{QjGe2Lb&WOM-np2l=s<>w{$e!PodY`ny7CutFXeSep`0<!}@m`Pnj5&U45eD-F>A
z4-bs11_iKeQ&CK^_OULWnCjT9jxDH(?7yg7bLnJwewc%WrRKeG7qv%lcQ+S@FqY^L
z-Y+_PL}GWfZeV8k;B;Sw{~Ks_rk%EOSBbv$fPaS0Ibp({$_rG!N!2qpr-w_dWAB2X
zUJgMX)}1XqTJ|STDC`wFpdqPHGil-oZ*9YZH8LM^eK-*EDa$$cvtJx5d!Y^2u%ldu
zztD!zsejgmg2^_>P%v=e%e`!ZSu|v~44&pIIKg3~81YpsC<XD|PWE<IN_AK_-LN48
zdepx?FTL3=wog?|>HLzOVY(GJf~T%M$n3lmi-Iz%V;y@|Y^?2tQksG&3F|s`^35KZ
z)T#H}Q)Bf9n*7s3oZ`l8EM7@|i<gycA0PjGThaIwr>H@bq8DY&D34H0U_WyC0K8m2
zux_rqjSRuF7)H%qBXa}|YHHKlLbE=NbA=SR?2iV6+J+oPLk?F#4m)Ah7{+i`Nh{oM
zKDvi}dmJZ}7hk%u8Qg+jx1SR_Rg0AQ3pO-Z3o>t_@^*|!P2$64ZM^t=yJ1o?IS87$
zOH)jG@qKRiaFBn4{zOEB90?>z<!wxos!f$NL#1}<COGKF`6dN*iyAy__O!uK-kG(j
z?&-<VHuIA|nlbE9Lt@0hNz*0`jQF@iH#^H^4uP>A!L@ahr_Gu(FDbG-(ZkA9=T=!f
zJap)W!I^88FPJu_JgZF}<oY>%utGBV8MyddS}9BX3z(!(88)1ou*LNxgBak#m?`vu
zvmlt!$NKZ`(SZ(bQF-OVbv<j#<9me;Z0O!I+9#opw|k6j?C5g~v%A>3K(AT*#rsFh
zU%qNlV~9)gh^(lF(DE_P{^fz*VV)M9JB}&7{n`0=Yj0;u8Q0ao5kG(azw(FV;PU_7
zAA*+X1cwO!;k+{D^#N@Hcyt1f8-)tmQ3&|~gjaI%K+X+#8f*=61uFR$g5+Z)gjF}E
z&YWgmiM^ci(wtn(MUT+9P>=Nbjk#3^r=~DpzrrNn?mcxqy9dY48lL2nIaK(r_r?_q
zrj8z%<7DGxsaj_57w(d<Jl!cWI?i2NoR`(7e@O4S<vMNknsp8#IU3jaq?D{Y|31B=
zXD(Qg8C#x!=o>Vg4IP&aec*u~IB?uN$gZ5h(dGLxS_7y;WK4OSE40GSNrRUb`#FZ@
zX~{>gk1dUI>J~j%ydP3LIYnP5l^+-~IA!Xg>b}coP6%H%JEV5f!rb&3gTgrfKnAU)
zGWgd;GXGQocf<ZeCb`iyg#TVu1}%MnZ8G{&FJ<!IpRSNqHD5!G><c%TAfd?fShAr5
z>lq~*o(32A7dEkNb<$9S2i(=1d%&qBA?h}d*!ZI`gWEc%#!7t|{9oO$E!D#9mrk+q
z5uabSHNYWkdpqB$4Usl~w(V_h)ANUI?l5q(g{4U$vTS9z@iBi#z>CXe+}?W{?EM>p
zm)@;;8FaC{X3p=x-G8jPEphV7nqTap{IA#i{5a?FR~Id5xyk3x47}eDFigg}9r-?|
z=Zm<P6YzyPf_m~Ykt-;fL;2Bs;b*<+>H7N90UL&Jk3Mqrj;iW)^wZqA^A;?aH+Knp
zbJ^g*%M^CY@(c4e++R5F?z%pOD8zW^?md=&uWdgXwf?|E*pEg|pa)=R0v<fz`5@QM
zV_u%<f)4Tybruos8XQf;yRcDYfq+GA^D^FT3Y&a!QFCVF$cml~uBo{L!YVe6jEESu
zt?KZ?cN)U=X;a5F2$P&L8wZz7&vq3OXWrgefKqe2okMej8~ro1PGUgM+|h|?qqDtP
zYTAM;Xqn~LJ1rqk|8?==^5B*m3FCKgTBU*S=l?aI8|*-ufzO|?fiGf)HY)(*YqUKA
zKg}ZC5c9BV74XeNBz#fpr}z)I7xEb9q9L?PtQBU-xfB}@R4kIbX~--RX3t_RGlf~P
z%J5xbN+buk?&^h_&}&t0z#aG55IQ2oZmf4LA9>QqH3xM_$jgPCaN(Cwsst%39HdnU
z>&!Y?kG1PQsKMF3i*tZN9NV$0lb7Wfd;f~Q)-JA2^w!qjrZZ*WYWnm(xhrjY1rKZe
zv0>+jamntI%ENKM6jN)WpfRtzM!7kv6fN&-Ti#P9&H5u=xR2Po4K^S67h1s9R+`t=
zn!B(@S;pdIxRB5QxHzxHYhSj5P@Iw#Ul<YGE36>Z*()$QthcUbPF(E3l-Q&mp*<bl
zh?b_(nD#)be9AgGd3vZ_9E4I|kGKF=->#N+Bh}_zQ({Xq(|k=W9bDY=)7+n5d<9m?
zq!>DMqCzdxMegm+X~Vzxey*nmw^}bAKhD<UtLyRO!s_k%vh9E1KZP29ea|HvpTFMj
z^Ux!0BeWkya>58FjbC$)AE#^EnU_4$i?NVD0rH;Xv>8Tqb=RW1kg$*EPYzHVdmF!^
zA(CFKRX&6Nf~+g@7rfemH}Gi7Hyofdu!RIZ0Ko-qXtu4^*(_XRdw6u8Dvz4jl=wKE
zqN1y-b$4^gM!m0+ma(_ed)Rfe&npQ=ibOEXt+2q{h&aI}R+`Qn0|p4dq@t$`hQ22_
zmDBhh1o&Ubqlw)5cp{?^ikt%WK3+DOHEx+gW_jBuClbXEluBg>@4%wsv@e>gFO&^B
z)_cS(O?Yu}7-MWzLr9dhy*9A0a6#6#cf!KYCZ>$+->Xd9zi?*dM##odlLD!y_&KjH
z<;hFnah{QRM~9P?)?U1%3i{L9;1`^;=xAWyq>!Z=t+jLY;EIvOLsB%o%IQjYL|R1g
zhkq|PqO@1L+GX|5kI$SC8*OvCyFlH7M%M+KnpwG@j>;`YJ_(ByKT*vx_mXhV%3LK)
z16JO_bHo**TBU#Sd^(=bg$>AJT_lZk0?+H@_ow5AXbgX!brBIe8sAq+jTo5gLVNa$
zbX_XJ^KpjvTgU3ZG9jT0kb4RGM&uMm_sK5J%}Vv}-^-s#W>=&mf&=QlT^Ib>6?0{m
zNAmN}TQ7^hNZs)K28|JCn=7TUhWA^)myU=o^7Ce4;fwc^`E&XGPia@X=S5h<L9t36
ze;qCvE2RMdmQ0M#dA7sK!&b7j_Am&tf>%}Jy^pmhb{NWOP(<pB<Z+4JyZtC*23cLW
zx%LmXdf%*@<qIme%^N6s#}R2ac0GRfUkl1!qY2FwBwSkmISF4>hKM#+J{&LdT+$H^
z16>7-Z7@7(y(c~qhw(E8a;@w(WyjfFp+u=VEliY<f5^2%RQjI34NuE+$z^{8l&!0-
zo0GRLc$9;0Np=0P5wq409h`Zwhsvv&_n48#l&;9@bwq0>r8JPQxAhw9ASDTIxTAu(
zAYvLWRDwcMXk9`*#5tX`&A}af*a;N1x2CfXOj<Waq)nSYVRl{&J8^JX$L7YB=$R#t
zA)e%8iv^&8QW_+W?ZMR2df`VCxS+g8kU<Fodm3I88cV>pI`5D`(ilp{Ld5xRG{L+{
z4VG$n-&_79E$-;#6_q-6VC8sAtLR-tC_)(+s0()MW+#~YZnreI3F;9L;IT{c>h4#w
zE5^0JCMUrz-oAUXCOs&sscceq>5#h5p3Ho_;DBFbTJYrB-DRcUZeHP@D~eOA-+66G
zJua<zvHjaN<hgaUPn=d8)<Y1mE*XBAKA+NHd0lc2q17DgdK<miyYQIOSc%1uwNPP2
zZADT1_~Bgbi*-PNHL^+ItCmZ<bF(F+H7-dX*25z%wL0rkX0N3i4-^+QPoI7djXZ(^
zG=sBemP{FPpe8CfI>9r(qifgwrk$Dtl2Uqly4L0>8>8OH%b9e(Hq*JA`QceJ{0fVw
ze{lA|waqJneMBj8*!-H9n`vgDJwOVqMTS|-mU*qWa0)c4#4il@&vrouyYQ3LudKxi
zdfBLH+m<Bw&sfZ%jZLk|oUecW=uvYPKz_ZXU-PsVV6i*Riqhw%FMtE@AqJH&hs=BZ
zMO=Q8xMM~plOcnrBwwDlR@k_50poY~+N>o17tLbZ+fj-CKt&U&uPkjPdn)>k$<_oG
zU7ON!aom8Qo&i04wlen9_t)RpI-z;+*-`JmQ8~+Aat@pM$@J`f@gX&t_I8%ZPR-rc
z%sM?DaLMy4Qe>P=1)Y`BP?>L`fuyfZnz>%$^&-{M@2F%A9G-05h5O3a<aM-2I_Q`u
zvhL~5rs9kaU*8R(uQUzMAIrGy(E7f#4Y+lca}O_k1KDgDrP#;{axrXr(XUDAu9Wcr
zhA|3?(2(JkYuY8LswgifAuOq9RCrWQhNTM$nFaKENOR%L#7)fyU%PAGY$~ju)Ngvs
zL@6szGIe%!v^4KzRy5MryK_;eZrz-5G14(GppTbd%k?m_6yIp+%{G?Kw+|J<vzjxt
z5&i>ux;x-}BxsWe{hJBcVSPQ@!3CB^p>P8ua{(5|J2wZ9s9d{q@Wh{q;+o_4^hh6?
zKR7*{dPu{buVs@{H}^{OEhKSaX<gm41amhZ@Z3zuPrmRAbPo2VNLB>0Ko}B#YLyqr
z%yYY-zswDs{S3z5T`3ez&hod`Dy<`X1VlO{jSSATzfvDxEbPoK&F+2Du|q|D(NXgD
zwF!@~Qx{ouaY#z)altXCTW{Qs`u<>5sBe$evtvE_?(G@2GCmhFZlYr+q$Ogx%md#F
zS3$dPW!lMh2K{)=<QoRy!Zwv9L&`5S81)lpQ^7RBwHr}rczDTx%!G#ZmrpLCRl8@G
z_u1>2FZlLLZpicZ4-Y8Fj;}wqeah-9nFa0{Kb^=q&E-$FrNUg?!$EAqD|X8Tw4w0{
zHx6*08fw_+Gs^NHV?uZw>u;wCe7n$-0uJ;%bDj;Ox*d;tP3XBuGw##ynEq+A>@4U~
zxT{B~Uk|A{(jMhJ?;Q%rFKo`LStP3L{3;gQEw<B?EUf~aW!o$|a_^PvXk$6$_8Qti
z8m_fuI&jyUL)KR4TbeZc(HjG1q_O+4%?Tvz%IsS|Vt9O{gWK#1qO$DrWud_q%~lTH
zYCHF-C86Dkx?BwM>Q+OF@ndEUUe#0W?w*tC7T~Li@Sn9dIygOHLA1S_gq`7VAAgtX
zh%)SV0md%Ub<vT_7ma1;amxJ&_;E?n8F8_4qwLR`kQV2+_*asUrf(L~6#GZc9LbjA
zuXgY1fo1Nezi_FHn#~4HdaY4m*nj~qL=tWGN!~p&tX3H3VdH8$BFQN>-8-zSm8q3g
zfI6gGR(@GssCjW0kD#!vlF-RbZP&@tU#%G8;j8KzUe+(f+FREf)TEJuB08sVqtBQ@
z-7<evsjThX96NS(^t9{%@c3Gojkvh=x0h@2Y_}F>gJp~~ECv3dyl#b|zq;`)>5Tka
zj+4{Ci5^_bV<n^G_{u5~fAD2$W%Fy$KXSsITced7t&Hn4v#_+Xa&zhK;FtXVstt>5
z3b8gzbK~O92%W+P8kXkLlP^sWqkS7j)>@917iMbOwlcuVo?u;fWFOB6D|;ftil_?x
zR<|pE<sBvsg#wLAkBgdYB{>;n2sLQh!2fuA3H4^K;mN&y+{_1cAvjXO(UMRunr5bU
ztu_-yJFnu@?hcCC+1^Pc#0QV6t(Y2?@8)RRttqd+hwfd04%UUIkDH?_>fF&49v<*s
zC_NS@qkkdatH&7{ett`BgR?(!18j6F4;D>|8jJA%<gMezZr?t3oZ{EmqJDAl{fdr#
zvwizF+wdX64L|V{#RXo=k3!o#8-srE@>Y?__Uc4mU4-xOe#ONJI=A&ndlb5czSdpM
zeX^#;IoY_SG;-frdJDcY&ZA4qO_sFz(yf=^jW0Jb`8OgE%u|Ye-wDbP+~Y?5b&YK(
zf+pv87S5cx_>%M^rChwo&Tw8rKVEuAxFwvGan7T=KOQ^~&i-Ne-CFqcQHbFX`M9EB
zyC7;Tt!%`o<6gZsU7D2cLi-+&D~)6i+3HPvEctwD7~aQO8XkG`BJcPNUnD1y2K^)4
z-RK8LTNggU<wP;>_+*_+hvOZ5D}Eg%4jMLg6SFanxk<5JSW}QYsh0hLap%IuW?@{<
zKacx@@G|K&(1OrOAU%C$XD&~2DX@oCP+AA&aZ~HSC{xqpJyJH$cGZMnOQT=^^QgUJ
zSi#sSF&(<Z1@HOX-cu0#eXp{QBS*w&y1*5|-Lcm1#jg}D@_zXXtK8;kpij3UuEMl0
zd=Vb8i{+E5=a=T>^q)66C@Q0(Xj);~l*-Drqlb)$D@yYZC3-wY;nHLgk{IV69whC`
ziW{33l|i<yewREQZKsajJ-0E-&Lt=!c5P!U^!`=EB^?wVxZ{b_PbSd&+``DsTfD*5
zHr7}-uVWArYAL)vr?9uENJYrdBTbTWHoi5lxUhyr56v&0C)M11`_OxJ2?=%Y9eSIV
z6Wj6KG4{du<;%yD_Skp)dUzWRLxF4f_+)NnY2_}6f;UGik0ZoYo=z2)3c5QA<x7w5
zJ-+*fLXC14+t_z(E*e2*lJ5$~;N!vaIEV|SJd6WAcSWBNZ_YZlx=>3r*%1YmU}|2m
zecGjs#X*7)RJ`%huKGgf-zb96nDr`qx2bdICW<5-3TdRXtDG6hq}_O=K?ea27*|dx
ziKj!;JJaLNh4s5$4mfRl1yT_hEFC4;bQH;lWbd-8-w>k+$g;^!z!!x2sB$L=uKNtB
z7Oqb4M;@L(;o8pdOlbKqdUry#APt_ja${+uX(vmMl1rr?s!ncU!*e1c1d4Rc?kyCE
zW<K$i4NEJgp~uODz4O+hDaJ0^Oe6b^h#C~COAXg`?`jIMGP#2JI{`mD@70-m)9o@V
zDaViNm%q%a7;`G<LD$+{+$1dGv{Ass8nqpd^zestO=E@!+FP%+%j~^-*x3}tnA&Bz
zz01pUM(y9eXH1$Bvi?7wLjj&wntUY1Nm*Rx<+}3<D^G>hN~#_;hN{`a(d<5ZI7;{z
z6|mQDve!TTlnOBJIYlt^(YLbP^ZWw`4M^kV#0}Ok)LKF3a{SFLNYI6qMQb&&2^LOe
zuJvr6Vy&gx!?Wi={{SMFA+DA#-Lf4zIaOu9jMJqJ=H60{iLbutFXHrjf(?)Bjq!dm
zY`-B7a8EFARsO~EyR^0a^B3{{ePkH_YMlG8y#F!}a6|Al=>z?XJOF%-m(TABADA5e
zi|2QRVJ2(;;`x1{;^q5tZ2XDTgxm*&5!yV5D)gs}F>|Ff20qQF!e_!`jDz2|#TW|U
z2hT@K9kE`-7@%RN*1d`W@W&A=d7>d6B1jZEltU%5=It=LlN?sG^WeCHCV1_<rwbW)
zD#kLPP%vXPsV=LR*5vIP{PE}!>||_n{0F^@hDC)Jgb%%%l$zhYcRVe<&fW<Ph;`q&
zY1EeSr8$8v71ViQY1#bxG_IzA7Y@fDRT$uVAneDAl+srG0+CYdIcb&nHT)|b-(l)O
zZ2^qIlL7~EU~RpibC6YO3xSLb|AMJJ4U2dY63|2TAaMes8t0xpB2#;sS@sOd_V085
z0VyI)dt@A*wb9zc&D+c-A|CyNtSMDl(ZwR9*EDmLtCL4uBM)f&I-7SMnw%4t-?zA<
zx9RD`<G1dHgjYw88S#}vTv~L1XGl*!cW2KDXFa_ajy1IkNOX3M%1P$yH2TF@AAC*N
zW1~&Q&okwpjdm12&yw-75wZ_EiJ!4kh0h!98-AW6)9)~T@22pSdq1@WHHK6krxWmi
z;MdI?dg`Tx6+ES)(h>PZrAcAV-R%Q|l9ybJUb4~wrq;99=Jygr2T5&aRUZ*;zu5zw
zLfx$4Y6^nI@os%ywYp)LUobh)`cKIN_Qpzv;01z>!i-SPR>^fEvRh~%U<C`r6_D^w
z&tNx8hknI}N(vp!JT?BsJyvWF&<;Gdf9IQJNN;I2FQ?)i8N&;2-+A=tvwKl<GIo4|
zf-##<Od+pJG=VLAlU-l3YYPbg0XhY)u6RY!-NXg<!xBqwGqAdLY6XyRldPf+2_ut+
z<OIyE7`=E>zrt}bK?$M$)r-p?kD9A9X+1Hjz_WJU;qqERa6PUGjIYSn`1l-8Uw`T`
z$Gy?60QU=ITD<&uq5QMaPT=>80GDVI)B2q>1p7lOM0>s_F>zhpmAD!2fK5^xrMVvp
zo?N^3AnMvRxe~C-#745*;OS=`_3O0<*Wx;MvG34hv6Jh0f0Up89#4Wiy{y%|v6X22
z*GkQM*@RkvyxI^r;%LTZj~b03(4(Y|jZGlRlK<X$`I}#@t*>5P;h%Mm);52+px>`T
zLOfAyjHobv({k~{_pd5xbcavg>eGjvZ+TA)-@g>J9nty_bv_njCD>&%aZ?AY_>8(x
z4|IJ~LD+Dn1QV+uWjw(W;>op#LW$cbYMR;Dm~`Xpo9pOn64?5a>~Est?-{ppw=SGJ
zG*)wMI2%B8{OB!qB{Msg#8Hi_zgjQ|iA=Wdhw+i6eXEv!HfY84-!CtXNSS#~q|mT}
zJ2E~eK?mmo9u=$_xKEDoy}aG5Y`E>URa@J5hJ?bPAiavh`RK0cg$;OHU8su+sPg8f
z8Q{VKO4MJcunkHl%ju|c(MyNA(}#ThQPHmR*W~(E^YndhY!ZEOwV(b7S9cc$we9QI
zuCeh#x!Tf#m^lS`yO9|9V0xpj_osJJ$K?^bg$6jl=qXWb&a|Z6yE}W9ga<6Sa)KAT
z;WF|YvlH(FZhK^Ga3Wo%6e{)LTxuwAsI@S6N7Rq*bzZj0P#bUEzji*P%1zg9jq7^O
zb<*LPg7WtD+liu(kRXt_XUus0uli-|_otsM>2&=U;R~v<cKsOTWI9s3{0^UQN^2|X
z_HBf(-~%klkq1bHh*LzEZ%-<#5N|ctn;@P!=%tje4ItYv(!<fk#nZvX_m3$J%~W~i
z?!8}i?9#_s7R}DXgmV5XH)l@=A!1TJyQ_!O;<Gew4+*E<uAwywX|D6!%*_2U4>12A
zl%{!Knu+=Ot(NxlV^VqJ0UXqoKoOqm;WV)dQlX!stBW?IC-2TAGm(;XMtIzB2wzXY
zl@btYA$z`0A-#8OfP4MAxyz3Puw86A;gHeS?8~t+G2|hRY6FvfZ+=~%IaA}nR%dTb
z>mNS4@>J5DU)YI0G?-F8{r8t6`sIw=CsNPQ!n1(6uJtFWR9XX=!RsVr%iD{`Y@*r~
zf`z^~yjd-PN6SHlY)!aQ4Mn3Oy6xfU+8t<{iH)1MX4Zk3i97dzBqNT$JuN^ej$giH
zmAK2r#lwNf)y2b6zxWWL5}f{m{y1KW7HCDE+HWa9pd)7l8h<V|q{|LlL`8s!-}f(+
z^@pR0e_TfgWe26XV68L_Y=J^B)DQ2x*zUZOi78Zvqmw~(n76b9dAgxp1nO}qEJ75L
zwS|YR4U~jMh)1XnKT%a&Tpaxy{_Y1zPt)JOBddGwlFxT|8uy*p{e4lq$Z{RNxN=2U
z`raf#sK3_o9$;C6vtOg69l#Iw6xz|$$_<g4N_4U2`pCi@6_fFQD01zxE)uBGNW`xu
zPc+kE!S<g$|9MuKn@7f+pPNH%s-Csc3zpF9G0VMl?}o4zUEv>L*PHEYIVlF+XOEzP
zx*@k016*()*xkg$1KNmdBr9+<pI7Pb#TkohLDWz(s6oN2v621I*tq8zj`x4++I=q_
zTM;^G5h=Ge|JqRYpi$h@sDF6+;@^aHm2mzjQRR@&YX7*e@O+KmVI0QKOUbzRhUQi&
zy9gaTlxBe~QCvH#)JhjSWj7zWWF;ydDlHbfZNQHxd5v<DUM5b9Z91LzY17<flxqb9
z4kaaJ(pZGpf)s!gPOm6{wai1^NXI1@U+mYbci8@;EjV#okp~TPfE~GWOS0s@gOq2!
zaq#M+n|IC%8I0(8%M5Y)Fj1`3pJE4r-5Lsl#{l><0e?Ppj)Gf7lVENZL@n0>79L!O
zTU)?4;O9cjU7;G$lC?1|MrfWqpnyI3^2Y)7>zmo}L-}Lxigk@~EkVmFH&b<oYY&O;
z>&NdSdP59sxz3K()nT5gkehs*{}K7F5~m2sI+%CEG=V~H6CK(ITHHK&3X=K*R)n7M
zo)p#0x-cj4$432)dzZXUUJ`_}>)7?CYlKVg$MsnZCJaNi%>f_vujhCnp8pqfd_dk(
z&GYs06sSXsHT+ZI0N%DW$#_*`DcW&5?xZ1#l*4xmPD-V>xq+70RpQ9>3Ju{lM$6SY
z)^CMaOPp=we*H@RjaN4pdL#&gt1IVB%gwrRhn`g}Y#uxA7y9IwgEM7J%qMZZP+B1V
z!C!TA_Hd*&>3IGdrDx>#-Y8Uj@$P%JY*ggz*=T+D!6JoXCSB{$be(9uO|CA!th(gl
zD5l(%o6hmZ*Hr<$d6)!YRRG6N_-_}WX|JoLiqe9H|Ae)<<!0MT{4vdc36=Cj|8*Pi
z9F|JJGD4ba)UWNZY6SzRu}~Vh(USw{g7gIJxXeTFB`WxY_zD`?Oyg^s*`uM=mCM-Y
z>lX^bS3f|z-x9<dZBw-z+spBCNTJv*GwItRAf)K0dpx)P4)$Hf_AlQn^OOt^aAVN-
z|G(imj83=GljnBqzkr8K%ptGkl3Y`b8ymxBr9n7l|4tRGrNPbTP*%DAsgLI5<;}|l
zw8zx@vmeMxxY_b9J0BLdd2It6Poph+v9|y3woJU&;`Kk;vLT><E%Z@m`Gj^md@H<M
zU92o!UEoJ@pAy}Opbll~!&QTlqG%)eg?_}&>3<>AMJHYJxHmp!`$PrR(qkyhV7B)Q
zq8pEFGM3(_BAHvjG3HOu-qYhj!&wp*ZiUua&Nku@L<1De^&GVqj~?Kw0Itz8T-Y;e
zZ`Vk&C$*=SfL#gbG9)U{X&Au;OdM}Vs`7@lp%hqs&Y9FffYN@_Z&6a0zX`&}yt-@7
zlZvWbcKK`XZo(<0Me4s@yUWXP5Z4e}pufpqc_>gmow`M6G`xV}Z0I3sBD=8}gVm#=
zewTT46wdWkzy>J{dqptmIs&Hb$=uV+!#l(lwohfFae-xbbx~1nTwGKK_Nxz_Ls2fb
zr|bcJeOICs`{^i!e~taaj`ABD=_BgTZtI)bU4b?)`;=}+r+2tRm#%$=`9zb7)}It^
zip`)=Ft5(g9vi3&g>4@l$b=BYpx-S10y_i`&K0fzr9stk%m^7N=v?1P5a?%GI@VF>
zJa}uPARGm<iWVky`BD%*dXDyn24wA`acnU=`2tnZw84~G{;{!_W&Z35hqkX=r@#1D
zXcMj{*Jcml@T*&&Nav&t$YXcqXW>lTtd(#uJq-Vd+{PNTiYZyBHJ~I8FXI7^okFn{
zX>b~>%&A)=#m5q@kpKCSmCsyEboo5dnJ*rzorKdwdv<E$3jfud7#m1ZH+W51_-YY|
zk|}0i;0Cz;N2gw6+fLF6p+iUIseOYhNMdJN_KE$r6zey#V=}HMg71dOeCNr#*R|KY
zp@39j;69!olam@UnUz*>=XeKhD&@=s=KGbY=y&>qb-KELF42P@qT|EJr*8qf#NGyj
zB~TRgHE2c;$4_vD8re-^*Y%5^3zQbV|2EN`R3G=l<e{U`%|siw$p)9#zxYYIC*1)b
z0E_J*BlP|D<ZJ-WLo{zIaKS+6Wt7@BXc1`JP_Pk1)H%+_tZ$=Ywn$s&mySxViCdlh
z%e*m}1veB5%B63J^iSFM^G6arx=m#pXi=LoXTJ;VqF>VATl$Y6DTu8hnv`2MMAwI1
zU}FRtS2h(ge@mbNDLjV+Sq^ITlJ>zzmCsXgUqtjK6K^jRH1qZl1;_}X)yl3h>e_L%
zlHl9ecy)&0M|RQn^}A=@W?!m0qQ$Zq(Wf`vE9;6EAFe?wHK}Xk^9^%_9P){_U-0HC
zV78W)e{@HbKK$_FkS&)4#kno)W8?=)Ag@EDM&uyhm#+WuKC*K7S3jP^_I#njv2~TI
zGx8+ez^VX-Q#Kfi#6|;$3=$=UsKBVUwE|PHlNaG9JwrPP*LZR)T-c;{ObDY`r4wsy
z8h)4V<a$U{5RkHP+2Uyw6V06@!DI{aK(5dg=BSEbLeLS2f8q1N;e>l^ZVBBH;w}uM
zQ_ZcrqVIkEcu!;^ylFN}?;w0Y_JtSTdyfvW1tYPi+1lFjE+0!d7P-Z%a&GbNbL{yc
zSJ+qjUYe#FD(CyvuGTJ4h5QR!$q;(7BoAmYFF|6s{w=UGY`xO+&1q-}8N=RT7pA?5
zQROkdQCMLNYy9wH47CbJo}<xYo{wWep3I4l6LV7!XY)@ZP0X0BG>j#*gXfje+92Yc
zwf+Js`uxW~0haUNfsDhxQX6dWW&avFdCb3pkRG-h)d*z1VO$*f*NF34kD{3i;FR2;
zdqf1e+?AALa2`zxZ_SL4FI}$ak#uZ-WlqVpvonZ&JgUUP++*vRoRUT3Z-K^CuU{%|
zXgv&j03PDw1Z%B$Mg~#!%fJH8sG#t-wI2IROvbmhGq=t@>Tk{Zt*ndbR5EFNY(sKF
z5v8y*7dg))D;%Z8;7R#32HC)-X?31%+}z0q58B=YOlhmuNQ<dyVIi^I@vZ@#tnYqJ
z)KE{|gz%QfQLz-J>@;xM!jymll9KuzA-bDCu$&zN;c<vbXnm@GPkP+?2BJ2=3||j{
zh_zaQm=UYyoC%`}9c`;T5)|YoynpXNbLpjK%KH5C@&SA1zQuBa0t0#tMIpwqZ|$W-
z_Q~b3PfbWLm7WO~m4%RV6Zw3f>G9*rLdN$MQ5!^hBsHj9Fdt5sATy-H0+gO=!H2Xu
zt&)4_PVj_XblPXWM85vmVLow-&1MD5PtleYsr1G#%3AXC6MX!qe$5`v2^g)~GM{MH
zsnQ-x{*d{1pmar%tNevm`yw|me=uAWLk@#GD}3WpiStb$FN6>3hO0+wbtF%z8}^zh
z_bGV<PxJN4NK1RLb#_9ov{9((!M?ooNtRtgQt2>{7`v5KF#+W@f)EoTT_H8u&Lr5Q
z+tZ?@uI4o}OFiZcuLz5XB<h*6e1|Zwn1)vcBh3SFC|!Ca&R01@Z{yU01~<X6QN(2+
z<Id7Mca|!e`QLYVDh>MqPZhS(V-*gANS~URs8FvD{Iyp4O^j5I1@5|F1RmmmM6&9j
zwKqSx`N{08e8u_W$FGq2a%>)B{~27UktWNs42=e_9S3;0P6&a%#a^x?X^8b=(Yfaf
zpi(W)u?NBlnnpwECuTwK53Ly7kDa34w=$|oy+ecaH>V%6{!)n2277_v7v70Uw8U9e
z=xx4d?}UycmaY=lJ5mUXV!dEeX3=X)PE6ZD!_N{96Fwsw>L|GA9|^AXdj7(CM~8F$
z9l}p9pTH(koygX(;h1A2>n9D8tPS}%PY$pp&O?G?IQ^<Zsv483Ro0Sd?&*RrNgBjD
zGKmDo5yEGu$ZSCX4WvahnR*^$=h;btQYg)j`O{7MP|<ha(nSG&d0C^VBfGyVUp<nY
zfE8xvxH&egFBEfclscQZ@;nn94=ozlD}rq`NL*ORxZ_pS-SDjmK=Dwa0v3LBA_N2v
zd*rjvsi-7Z9krjT*dDe&-EW34spe`i`(T`Kb4}{RGaDZJTXqHpuFz$ws9=6-h89cT
z4q%sRSr%)(LVHaMMe*jdlmBAa`~m#{iw1ZArWNh!2Ok$coQw*EixnqgI`dp|b~$;F
zl6l1(2}4WYE#v}}u3R>(ZVr3?OxQ(TKOa>|nR93?u^||HE5=5hbG|E};0WcS!Pkdt
zfc&Jj4bbg^Ofk|n9REPKjfE7<LRf?#41Iev+L)?;NKgNg9<vs3`i>}igSLMCLr*rF
z)(@zy&tt!RQSr-Sdiu-NqWZjPRKyytm#Y03<2V*&9^!ZNEDX1+iLcE(RO=PWzfsDR
zMNfOdMGW!gCRZl~6VtM=D_3CI^U+PQlu}M(pZcFLJ}w`gZ=y4YkuK{1M=L!;9q|w9
z!_I9gQ1?Vd;L*rPE@$f{*PFtvdz`|8NhtW2)3=*^0s-6Y?m7!Cs_%0eVs@<7Kx{Pl
zbys<T&Zq{z@u!_PXS?=gAFz2eb!Dn)#yE=C?-x?~9p8OGNK0fp_a35z@nnDU0YkAT
zXZmLFVErT-x&m(1Pv_WUtl1!o9N!jPYE<r)BA?CN%H7Kfi<W|)u6&=+FY=qqtAB(q
zeuFLw?rirJG|%WxgV}a$rT_Xd730{vJl0m$A9ryC9(BCJ7tw@;Ac+JYU+ZFFqp+5&
zq!40>tjFks6*!$P{1_kq6)P5s3ApPfID<j<E~*;S$i8U_CiC@|zuCwdKk23J#kdYK
z@*js8nwkKtiM2a8-WxaP(47a+tCe6uoz`3!!F~`1p7&tK%Ccidcm18N(d7y1ZR%2S
zJ|wF@>s5cGcg?_(uBJ%Y&!i8SPvwctw54f0rM}Q7*3eOK5@iy|6hO!%r@i?+qPdF&
zM^Xq&W}fuHr6e``>dBk*8hvn9|0UtvJ#mF4bQL;ICE*8Jk36#%o2$>Kb!-8fi8*js
zM+#Ov2kyDwAV+AhH@Ku|Z2`H49^s^b9s!#Lvk0PW`iMC%agS@J4^JaH`iU&aM)1%-
zpl^kfRI=;{yVpo4t6a_IfZt`kK`;2q9W$uGR0#T1FfBZV2<Ec3P(qYIA0u~JNE^={
zJGLP+ZhJ!ZYT<)--lK+^bc>X7YNX5G-+TLGvcF9qv+v0I<F8oDt+yY4UqyFnYM7Ui
zE?7^9(hNFE#+cO$y>1TE25TMS>A}^pB#SN3mc+cN@^A@w$%K6$n|GVoKiGo<KT*Fk
zPv{==qNAsZr>$aNpeT37yen&5bw^Usz5V$I(dwaw`L==IG*U3HE5P|p)F^q7tFXpt
z6&x4$h5_*8N+<}9<(mYa^=8=*_0N#&B(`2$ZHZ#mqy9#n#io#`{;0H1dl!?KIdg_#
zY*`+a=mUhcz|V3=nPD!CK%A8h|5`xLxqDe?LrgqvB~cS<5Kd|1C-2^wT@=5aC}T?X
zH#crTHul=HwfF1_cc+=9Z>I<$f9bC`n(tpA-@Ryi9=(^{-`&!DgY2rG3pov|^VqiN
ziV6TgGH+-U&tw}3K9F}3zz!ii3u}v9Fl;1?W`QTk0Vd<wNBx#kFt5BWh~keemTW1F
zJ-nlO_0%b0k%?z9o?y}wxY{Lsi?h%0C9TXoMU5zN?zJ*7nU%Yh)RX=&+ha!m6!cg1
z7tYdjn#(Sj?KWlTJs^zd`Q+z0`Z@Y&w86fJd+~oCrT<#!2FD*fhOslGE*w{{$US(?
zU1_0m_cr(Dx5p8z7<T?NI$IAbDMMh{tow>%3(1?rnX^01={PbbCMK<KaEzZODyuqK
zowfj(Q$Misu5HB))7X=z!nbb``}x8JUNU6vz!MdN(QSz2xET5qc4G_lXHUMv2g`wE
zpa%XEw;SGIK9J975a9;AP^K~?TFbwYHL8WQg@uH%yi>mil1+GSu5L)*NZ9J7G;v{~
zMfoCf-?~G;yDWR>kuA||HO=|g=aqYeb+r2AwT7$Ag=j+~Z5%w9)jrQxmn;=t-^>1}
zXSYcq)05lGUZAHl@*^DOG8OTSXl1Uz&aA<p+1P5VG*T~?&m86+nTi7JJdF9`-MnKd
zG-l}(3p$vHW5fGq51~n8*b^$F9)hzd?mF3j)OPAc=Y$P1Eec^ry6|k7!ArnmF)TXG
zfMw0dh=(@$m;D8AXwM(Q<Jl)Pa8`zS${Nbrx43@pkcjQ^S?h$g$sgFWOEcf^E7(9y
zdgs!QR9y|M$EN)H2JJm`|LI|D2WbzpKNhkj?ARSzI(o9aUTzD5#ec~@0$;DjT;UOo
z`)r_#xhI?lJVX8#raOgsorSJcsf!Ln$JyRt*U&D_;aDJ>Ps_OxfBI_$HiM<TA3bD;
zzY{vP*~$>u>F)B`0ggm-PppyeVar>R&~NUrkFs;rnOkw#vS8?&{>%~?nF}fErAxMK
zFWB_pOsqQM0Cv!tx#Ia3kRA2}2Rz)Nu{#jWAlJ`sxVnGxC5^an0cnUpn#1+#OJ9@M
zq;LZJ+gJ$-cMph^2ZCoVPKJGDuEP~NF&k+L_K%}rS@s8ecvPU#G~JnYIp4kL97~>I
z;=LMF?r%Q(9>t?`sug=ze?mG>h3viZ?6+>QuNs}_f~JMQ<z&f|?_WWOL%m^1U}7s<
zrDzSSAwnTRy?W~qHgIoODt-NZLH{rP-><LOg+-N85%!pykKp?q%jne1y~3OgMe2sP
zn3ZsG5RTLh$@+uc->QF~X5O3MJTWlf;M4$!P}@4W4&vDd**@{O1$fpNEE7zhMqq)U
z+U489>Z501l77Q}vaO)dKPSClUnk_W*ia*zz*ZZ^+X4Hqxs7g|CY(aS7Vhon2Bd|;
zsw!M8aPGrHv{bn45Gd$CggW-jy$uE1w=7wzPPsrAi21SPGt@$E!0zwtAJR>V1C>^P
z`H8#hjnCK@Gf4lVUQdFV7rZUFmUCbY1^BJ-Pp}?2bH=?(SSYSb72Koq@>YR0U2U<c
z0A8|ohp=Eb27N*i3%YxOdqS8_=(EfVl(e8DW5oX8`}piFWz>8Qy79mgeZp(66YV^p
zX0^0tXxUJYbR-=+Y#%(T$_gDBvOA)r2}KUwIW#mae&`?};eGMi1v2^o93}&fL0GQo
zUs`|Q7@kr%)4cAJahR^W$$n-(BDU)ybk+YNbQQnS@0d;ce^UdS#c;xh+YP=(={EPl
z+UXhKlXHjGQ>(xo8ilndKjeco1+eJh%j2j6eE)a$6FW_*D=C*9xqaS;1<}V-7xy2U
ziW>ZsaB$1(^S0L?Z+yajnf}JyscC0U@wp5!m!WnFuxWwF5ex8^6>hNBz?CriJO-1u
zzQMVieKBt+)11Z0d$JZrJbylfDxd#ef?K-(*hA`nEZ?|#E7h>|w7s&DeSh;1t({!A
zes+P2>nHWyx}9GfsMal*7NH)<=bwPJYQRrO7|3?V+)9Vz!=e(gUa$cQ#M4I4Q^h?H
zY_S<c#1`JX&C9>ImyoZ28mg-~o$uKTGL!#Ym^**|+}R5k&gTEp=@qo++-4+bkIG-d
z8%L+G&*%>9Q`f&yEI9D%$7~-vw*9iOl;-YQxOq0MSeobRb~H`bYyECFb&qXtI;*`-
ztqf8}82IoP(8$K%_u+i62jWQZo&v`LJiL`ESOjpstIPXqa@o%!y-U~F-%FRVf3Lmp
z`Eta=&|y$lzeV-mPjP}N>7TK;_m?TIC%<zcMO3p(1qI07PB-#GKg?szwUj~@DO(kW
zh2~HI87@}dNJ?3FB4upBc`S%Ubw6%R)QMp6$Bu<c7MROHaRl~U)!=D?){Ih@u-{4L
zf>m#)$_(dgG{A`kogTxU$$W>o;4gW|)|cyhK2r#H{5-JBj@Vmajo=Wssw^xK09eZc
z6?z`JzAO8IH#nQRjA`M7Um@L(4~g3pHE%Y;o2i6;zoj#6^%QYOdk!uA?M4&(Hyb}x
z9rK$BVm54CNmDSdt<f5A!vYI~`lrZ-<6AkGp|SSly9+Qmq((v~1X9%rv1u4xA`1ln
zQHTtVjU79deT5(XfPi<@|AUnH)xX%!g5o55gL+eyu!CqgVz|S1R_{3K{L%ZLii2<6
zxhU(&P*wz+%d5)rGa!8P%^iZE4fcjbQhA{@lg8TPh0`Hfh(^~Nc{ph!`*2z}v(D_;
zsgBu$>Kfr|^*WVg9&?g3=jLan@0~zv*|2fz*_5S!7dwLY&an%3SBq5tloqd8L2Nub
zL^}@eWwSn&={+3sPz5+3`>qf~SVee?$S2vVyg4ec0U&#Pa@M$t^#A1MFqM+lpCHBV
zPE<|>#14Z1$o8jG+{OylpY~GS*y`zLw}n~9qm5S6%~{#(M{E%JH0Vl4U`o(^hpcaU
z$XPRJPE3RIToSAy{5@a+e60Z}7CUgr04<i-@2^AEuo&TVfm$FhQoTtml4(SyzxEad
z>EDR`65UZlssG>5$qbtxqiHdh7oK++EO{V94etqdgEJFKf!OlaAF?eBk&l*nz}0aX
ziS0T1jjd((wq86+*caOW6C3gtj;)~}^1JM9VK|*8md3u@H-0NNToz|#v2Q5s@A>^G
zqt(l&g>Xm(F>&i8aToB&^BacyHrTb(;;xz}Vh9r?cTi;C##Z=g+`yTMGZV*sPhX)Y
z-J}&@m~tRTEE{ul$~;m`8kbRJ=X?;jJV9Z4MYK@bncaWwYK8AA@GZHU1dE5nzk!40
zv)TN<x5D^E?r*<M*Uy|`f#=SNe>-yS(33+P*N{NrpUAWE`df&2C|ERCx!F@lBw2gH
z@3G~S21^MeKB3R9pZ<=qlpm&yrt$R(4{-J0cs!bQB2VbE^_}Bq-sj_qCO+6ZM*k4R
z1ePWV7}45r+6%|>coF1apx4t?Zf}bxDlIQf!RtfgZ=6Q)<FDZTP?U4xC(`7<Erc_@
z_SN_ATbjYFvJYk9itcwf9y7Z4jNs7OsUz38c+VNM`L!!=jUQYVHajMJc2vm}PuJP~
z53LY(r4^6qKWGjc6S8j3{4IXV%-r2}EZ1lb`1s}J<mMjO_4=`*`bIzRCU@7^xafo*
z$Z-DO*i%71r2t#a+pgjWCqL24A>;SNWaTe^$J454At`U$@i#^DiScp2Uhh*<I<%%=
zVb;RcX=(HJY+Kt@Tyk)5NlEsg;*vtPXyIx>X&)a~Hg{{6E_Qnzx^^kdi1zbeKC(}R
zHpJ4x?VzKnX-Vmx+STCEqbyfSl7`?+dskRq)QiJKP5e#Jf8uY<hpiG<vQ^ZbJ#KE6
z&~|WH%X$5|e}D$2puriL2G)Gn%!;4$;m}7D-$3KFKTye!TxB+Vg$S1ByhMl*?{5gX
zh5fRrxGFEVraCvbC7-?<JUVw)VC2+{id8`&jrr&H??2bSG0<~nzr)Mv!_HnESIk?m
z)laZ#`iVU}v{&c`{>^`FxmI()&nGb<DV}|=U(UXdiI0hI!}S6oP(u9>p5e7Jw{)?D
z*M=0e(t5#fbmLzamoHho9F6LoDFAIrzr1zt9`+r`WIooGDg??|VROMnKtv`JMoRsS
z1+;w#4ef8B$EdUXAwt|DNPEN*?s0M@E+0bR)vQq&4IHNw9viB_oO&Gv2Fp<4<FU{@
zVl*$h72GuTK$C&5V_TWDQtT(o7IH+qwyB6OVDUf3i(R^OsW6{)qi==|X{=|-qS=I`
zl&zDmU8DI|uj*U=JT`}qq&<>o;)Vsv5W$|j9QDuOO7>~V*Vz~PiNcH@>KeY*PZwr9
z9nJrh%25X=g|4{`&6qc;Nt==z*%Y3U9xfM^%&G)GwFsNVTZ%{ct`lYwUC}Pj-P={=
zF4UlY<Bg5vGCPT#Oq#8j!U_blmb3Tn;mv>IGY{|?GudB94j&4I7X{L~tK7*JMP0;C
zK6~e#$87(@xN#(8O@Bx6XyCsGvg-qH-4c@q^6q*v{wNgVY{WPn;Gwu+c69rM40*YW
zZ3@EE(DfH7MJ{u$baLIOvcbdFttsi-X8`;Ko8?>j_8l;EFDiRUe(a;<-g#M6)DoK#
z8#Z86Wp+`QF5~)-9S42Zejel5N%Xn2GU^u#`gMEb^c~T$cdlK#^Oo@Yl2d0E>n8|*
zzjpi92VxSyqAb8U7jW`@3rHLP!;9(Qc>or(nGK<{`pa!={L}kfK;`Cbu3B-f{xY4x
z+nZUQ;!(@lffNX|;C+8#vA9d|lbivR^_#hlt3c}jXgs5shH7ymTig{gE$ir&tH+~8
z1cwZZnlhz+if>%E`Pj{T?CbXxZT#A)`#3+J{Ra;1wXl3Vfa92u3EC{KHNr0U?m|Y+
z)xw=38mVmBG`6!*@rdoCel2IwI(01GAA<KszF4b)tf*0e=bbKJ*8g_t64t4oJa8bc
z?#knr0ron)Z-L3Q&QRLO{K=)%pd-DgEPQf8aq3eVHD^=wMB)7Go;~}HrJDowA8wsx
zXZXA&=6m}Ee1t}Ga)(5+Y^0^D*-DzckzFh2KrY7Vi~aB<UMpp%0cSEkw-}#8)&qeI
zr$%xky{A8|c%*mWICa49PvZB`BcyTQ+i(`5yNHE2?0;?7{_#!a`^IC?LfYSQR`?rB
zrPF$NulQUPKDP#+Lju6imC_w0qbO<zMK|nV?@Y$<xxx{A=7^r}Nxk|$=D@Z#8d-{K
z8ra1hlPQLinZGI~@sDxa8UTE~23mLGvSTQ`Br9SlWEU@Uor{g=TrjA-prCxvz0K^M
zO`9lYvp9!FZ{6B_YAY4oyM2pJ-oA}-Vgct$z}W#d^`+!+f#Eh2AfI1dG`ONaKYq34
zwVhj6Pgl%hm-}X9<_(yRvOin^QEdrhaNJwToac=EsJl0>Y|mLl7LFGZDXi_49MZU8
zbg%4~$&IAkw7ZgRTU6SAV2R}2Id;HTpB9I(ZDP`t34Lo2*4<9eOv9xo<diV}#~5FQ
zAGpk5SUmd>>0@@6vyp@FwT#1f;AA=80|hW6s_@Bm=y~mSq;7b#A%p41wW|2(9XhGA
zbfKBnom7n;{=UN#6NdZxdx#H_lYBoq#MBl4nTA9OVS0Vz2oF~m7gu*=4l%6BSAgXQ
z%)#vn=Lh^Rx_2h`ucj0apHo{rWl4SG^huy@f4Ts-u?h0<jF|yP$$)J!?$#O3s<)HJ
zP-FQr?40V*2u7CGHs=K~&FfxORoO`cN7A@)UZeYrXxzGCGvyD6oD>m1A+%_Umz`R?
z9UB`KJE6wbk8K<frX5jIQ)`}?<m^;!Z4(gSn8)e!>fA=<2p7p(Wvt+3bdY4RYjcnS
zNbvd}=l-;9ZmQyQ7Z3f9xl^(3g;=*a_fC=aX}4PFCP_B1+%k(c<Hk9a$2P87)fhX7
zy;qpux2ULZzVud(ep&Cppd*_$917a;baKOw{ABcVjCl)V{-+<vTaFm~z!2F2{4f1L
zt+1i{@XWA~h(LBVXk-w(ijX2MCAg1^d*7bPWorBU=!)uTlhR`%-SfSB_4NwRu~X-V
z)s{-OKAPBIUB)A)f{d&pyWEaeR>gfBoyu+P0{nXVmzS0g>6MsfXH%xOboX%coPB`P
zLdJ)Zd(m8R@%z$%SZwoBxrfAUplDv$)URJttK*>f=_`Sea;I_Q!~yd9=|MoRLmM_7
z2@32jR&$<wIi>-}V0B}uOK{Zx3dfYxvf)oimdEV{JZ}e{4SPy3SM5D$!{90dzlz&g
zr}~khladn}!grrOv3~C6aX8<bU)xFiDOju?-QA_i&hGHWwa0djEFM_VkHh@x*xFYe
zM%gp=3N`Q}QpLah_1JIz<=8~Mh2`Q*z}*8JXXpms-U=fAcqx8{XaH-W*33Q|W^3va
z6KaF{4Jaw78B#WEY;8<kQ1n>c_Co{2r>1Gz%%ZNQ1I$c=eBFZj#Pke}R9g))H>(;D
z-4{Bl{hS6j1Ee$>GTx*b*_>B7k~@bt{`)!4|F?63?zBgit&Tje3|_*rIE8HGyZ6S)
zqmgm}R~e{<irb=1L7#%+;=<hb*RBW}8WJ<aZ$P2rz~m{bR!vDNa~>yFKdG;OGTCRz
z3Ny1Rd;5|KMT%B)c=f6yLBV}wo=B(t;(XNplH&$~F6OQ-7?#Hk{n(vvgxGIRoT#f4
zwhHdKxvVEUI}0BJe!`$PH-PWC?*q%GQE>Z=`@LcH6tskWO9@Na^TK+ii2Y~jdp3!Z
z(x1zp^Tg*4fR=9foIy&U{td2t`)`azZG}bF34sME!`%FXJ%@P&2DlF!rjGRvijzL}
z@fyDqC+n)`#3eVf4OBfhmj5f%>D=6bJfadhC{DmU$VK4PWc%LKKr1dUU^0!h9FEzD
z6T-r4W{eMabWBXm^Y<G!uDdoQeZ(-ym5r{Aj4E<>OQq%cxtfr2wpFMr(>Xd!1HVT=
zmeyhX&hojnHg^m)LkSl-WP)i!gqos~lA``4CEt_R=1r?tZIa%bTtBg)VPgH{e*3oX
zXlmNAUB*cf#+rn&cvLOp#Bj;Vz-=;aR8$l&IAm9I^DfPxUIC?%wc{s@h#u%8{b*-*
zh+REoYY(F~?a4G(cX_-B@iQ4V?&E~ObwGJQ&P&!5u?c`Ql=Lqu5kK3$Z{PO%$&>4W
zD|s#AXR=Sk-3{bR<v2-Pw~5{RkM}vB9yHnj=sfNf7^!7gw}(*)(%JFjxdm9cvN5il
z!V0(o6ux8ch!wf78UPvQZ1BZw)Qo`lL$V{Swvh!J&0N8XT45?r-b7~1Trz9;*|UlZ
zM|0VMl+e5ZV<|uPC_X|Zz~Kaisr-4_SCBo<7pjv=#(}u~K-=M|BZi3!u$j`3pIcpy
z+s8}GbYast3?{9@7V!qo`g0imB32WQvrIZs-oI`Hj&WWX79G1(*is!8o1R@$<1jFG
zP?@}r_WW&-)b`LA@cL4t3n_oi-@<o2yvOgP;cUa~c=)f?Yy;<Ss@5-Q<8OE1>yW}s
zu6<!}TFAZr!;k8puThxke-=#jO8^e;>82skGGDB=RH<T3O!PzKXB+S=OqgY<68gV*
zR?_-ZoFI&~R4I@mHogaL5)TP=couDVW`et2sCQ~9=L?{XJ>~VtRYJuOoQG?RO`HVI
z#+DX_6al~WKX1morOW0|pV$23-?R4gt=OKpX1@RW+DqSlduhblz~+S?-@Z*-QTpG#
zg(OFZlL7uak93$?R?03Twf%2)xv+QzUyCtjF;^-eDWKP8<X*K>xshkMvu}v0jL8p4
z%a+l|mXS1qEvM0JH8LP8g_>RLgJsJ|yNiY{TgKMO<7`JQ(oV|m@_7!<c22@eg@HXo
zXj?v_FukPz?f%8PKRjLB(?4kU33ivhptVz`IX0><4jr~RCT5!Y<~!o=%Q0k|4Tnq{
zY`7c;8`Pbw8z3V_<xX$5^OGpt=qCx^<p^W`WWtHs^aPhWnYaET9uz12m7);NLQ#;;
zpeUw}AICL?Kz)RCu~Fd&-vzt1{8p;gpc_><n&}M_V@OsR;!TwjJ2tlPKWx?RZo&|+
zz*5SK(~5&ScsQ4pm+jVRG(o`?nlacxmn7|!vveaw_`b7???x9dAtF%iRJ?XWQBlXv
zR^@hfak1aTNn*vqVKSa%-2*$)O+M++W@(M)4SjG_-l5(o?P4p+j)}ozK`uaOno_rI
z`Lb=>mRQ?#vJS92Y_+CtVeTn)txbqy>7cTL!ZJ_Atcf>Auidj}?P^?Vv=6q^g!+%}
zqYY(0sya*<HFDy_k<mP^{eQCa*YgJ)+M%tB3apE*9Xo8`;F^MxvVMWJ35j*Vb2j9O
zPrLSw9#CawKFCTP8QL?ZPmr5$kg3@K)2>CC+BD4B53)NMYnF8#_`r#0U!g|1qJxVk
zPM#gp>z7}~ojp5zj8ZHJ2oKBEKZN=9uO7sCi>LzncNAow+Y8wPcZCLa$KDnqJoqJ{
zJbCxghAR}cdUbeM&GuE{j!wenQhF~}|BuqnvPpAK>CAal_BXo1@Akk*L0WHPr@jBm
z;cyjg_Q<|Q!MHy;8!M(!h<JbEc(@vqU;C4<@qajb6Tqm7<bQnny*D$tAjgnQ?qqUJ
z$U%~sB$ES3fRKa)LP$752;mC%jhse60lAS&L=F`pA{$W@g~by^R8Uq#!5i^fzaHqS
z>$(b=m;a~wy*D!n;Q#ymB}|y9sjjZBuCA`G*Im8*Y2tYld+g@+ndd!Dy0v|7dw>n*
z23lbKAh&xUH<9m3L6eP2!zsjMM<4_*A$$J(W32m?E8jR@{^plojv2%i^W<+D9<Q!`
zyx~paV;pGAf$R_^RYo=iB@7t!;+(st%tcX_pT9uZyI>Y8u9oMNmQtAkD6<x2lsFGf
zcc>3b=>c$#zHz?t%{O{~xJK30>^-G_%7DKf_)7mG3g%*uoU34Q{kK%=+i%Ia691zz
zS6vPM=o!=F$n#2V4C1SAv{J-gY2-o1W7*(%+Tol@Cl{!jg*Ef%H=S%<GJoD;KZ`wh
zUIh~e^$qn!o7>XvxJ|gtxoJdEe9rw*2@z;5+A$2Y@4&4S)OOG5)gr9S&s)2_Y2kAS
zLu@TAt(!kbOeXixqYUj3<7GUxjGIOXke4SXYJPrHMD&z-pd&8tUp8KKpL`e15DHX!
z%OIOt*hP1IX4##{w34cic3!6VOd@!E4Buy>J~EgHt7GGchh}H}g}1mqq;HSmaq%|$
zm<7}9;bEHBm@su}aPMTrYb+?-FJG?J7`wIqm<WB<{M5gi#})Pczs}=rn;4(S)jmOc
zX)mFAD*+;9nnUGsiG|QX!z|{kgu0lad80-TFDxt_B5Ykeqb_&2uxwmj-s-#LyV;_V
zBd0gG`V2H_RAUbm?d9&^@sdojn_O|QVCaQsqoNDSlDm%>5tEYY7?qKckY%<EOR@@k
z%UQ<AwDg?Z26BDJ<wZvJExAknN4f9t+`8P{#Z;FPZ;I{|7b|*<r8hq&zt^mfrjtH6
zbbn1YK%YdH-`o|}D;AJgdTwGg#N)vU?JT3GBo<6QCTtqwI?gV!q^hc_LHBMSR8{qP
zU3#*fP1Gl+kB}eswxrjMOt<KxhYs8K@KF3byl<G;D`&!loL=(zinLz6(s+IB32`UJ
zQxr0>PzE@@zM(9VRI5=Po9b-mFjE?3dTt|PyDcKDNEl<^$@cG@)U&Fp=cJu-<IWjH
zRaHeZ=BGvU=n=8c7Tu#qwEoeChE4u`h=)G@s~Z~b?ovXWlyn&_XLL>My=ZZ-M7fZ?
z-=%x6#fy4lhZ<z2txbC30}tjZbs=SqCX5Vvy2brpYf>-K{X9v@u&m6>Vs+NEyb&pB
zF)^c)o3pbARjteG-6gZ{_I>m0*~Pt!dezj$Sf+QMKDM-MMR9(f<Q$LrJ2WF9xLc4{
zXllx!5q7(`XjD2fE-OFE-`|#=g8IF>4INOInd#*PR>A9HjK`6XUpIUZL<(u~)i%PC
z${JYkW^7vX%-OxOgvs;LV)|wZTiIwfXySxn=>^UT(oluYAkZQI-a>7rpdW+_TAm}D
z>wt&1A01V(A}?>s3R;<kt<1@F`TY@*qqPCtBST#Qz~|DvBW#oypBGV!2_{+zY}4Er
zpMwsCx#|T2PyI^f^PQRV+2r{P7R*n{b5z{EjC~^SvRbPe9a-Y81{RLzvUoK($L2>y
ztX`oPFb;C*I1ywLD{K&-LOm3hghl69w(@9zmFzqBVX%nG#+|OQETp7n_VL*xikN9f
zdH<vG*H8DYl%8&Awl1k0IdkU7nuYPr4S7oku53AQXU&oV&@P32+yL4XU9)F#TG;Lh
z50v7cMNFwCNwB|F-v8-M>GLMd&*~F9YSyTNOzAYIGh-39t<4#hhqGQIhcw5KtEk3v
zm9+xJHWA`{x%u*^&CL4&VK0^nzY4eUb}4gX03XX1Jg&mL#Vpt?uA`k0*tohwzFi;C
zDEA&ZhP_I38_}n?f!7dx;P~)CTw0426besc574e2933%Rh9_C&Be)RhHNAhM+^a@4
zBEF3vCa^(5BlN=`dKL+4bZM*uCqUqK2Q%8F6&w<8&7>XN$auO<7$^P{+nE{!t2}U4
z()!Kp-7Z~brXeB`WwAtoTn)(YUq7uT#?E-V?6{xhLC_}3HpGyXb!vxb4zEdQ>Q~)+
z>dB`Hm-fq9R<d~6f+@3@KUE_>8f#uW=#DkP-DXBa4y~@J9nC^(XuYS|v#<HtO%gVD
zQ;m8{G(GarxnluhxHN2J-7pE;)*ldu*Nq&GeNAdmV8*ij`<G2#cHn?8`qOtVeDcYK
zcW@>zQTCAz>n{Z)36JA(fPri|t=)8Y10F9myWk}%{2<msbB)yjNq%o|{6rQ03Z8-1
zQ4VrpvyJHV*YM>DbeApQk9EWcT)|i1Zu~te{<EF%_o(;^T*KcWFOaf~(~%eJq^_PV
zKs`sAsQx6i{#WsRqG3`%l5Sx=9(M>wrqH)=x6sCQXiJUKmbVE?(J+EjUXdWBEgW8^
z!q<Uk+%!mS>4*=wg0Hm2jlW05f3_3;9u;3{i-x}xyb^t@a76x9r^6i<;E4DET%mvD
zDnT{;b#jDC|5zvb5i0&ME<+9fHQ-lq{*MJwd$F=s=|@O)yswXSB{<gd9PY+HaSQwt
zo$wb(RmPdnjn{#nMDzm;!V#O+hB`wzWOonBBvBo%@4iDn)G7UtOZC(2MP)GfC98+7
z4N&2e&_C72Ow{uh*R>QC&SM7p-%-a#-tGz&PW@c&K_^v(6a5Gec%_Dq{w(*<Sr<Ow
z5nL~nes<w=`Z>_SmoPFL&_gJp@*iQW3$W^@>5Qx#aFhVN8~T&zQ$K?@v{=D+08aD?
zj-Wr_3jR9e3sU$wu3;<m0ay4@;K1hav*>37=l=x9hl9f5M*%P4{44N*DxBnVRvkk+
zj3EQ%hX$Wl0Y9q1+Y>pwio<Cfob`|ouoZm3k1F!v{Q_(ie~*f<=(`(#kBa|n2mB8}
z=Qf2thx6$W{Oki9@e>+<yj_D;`W#=;2ZHN&t8k9*0pH`o-=or3>UGoKqtaLSbkmPe
z@sD-lCql(n#+imc9CBOIL7rG;fd83*&sJ;^=f7IzN5Oa7RA77H2cW&1xixU%Lk>$k
z<nO`<d^R7)ihMNu4XC%&L(j8R`dt4FDt+`iUpj%$4WLu%LEnWBc!URiH~t<KUy+*|
ze~*f<z}@%}D!w8&H-3bQufR3@1sLxQ#y?>-Y>=DP?`4{~1B|fvI12)P*Wvqe<28&M
zXfnGOczApX>#{^`=WA&H0^>ZIBia|SJ1`FIT)r<M9ygTwgUSI~+X3I*AHep&clU>e
zkKU0kDDvfYI7h)}(*R%TA>Uytoz0Nr1x3Cc@d01yA>R)8iXIcb9;27|!CiB}ciTHX
zq|Eu;Ebme2D{|NP=>@n#Ux91%H$Z+B9{Q21(zyh<LE|6tfu3^uq#qUfpIzh7g%7yF
zgZ~crF8Y+Il6nU^ioUx<Wwbibb138bE(7x0?<!}YGhV#RO2EB5;3HIc259Z~&|4Qi
z;9mL%UHrQ7_o(=aJlyzuRD1>Q#*a|(j}ez{eqdJ>`U+gb-!3=NedwrHvF3RypRWQQ
zAvL<-bt-&2=qUJ#eRkv1xFCE5ej~n8?~V8h+=Y++?1gcpjUe)wFoMt$ltf>=iti&l
z#}SPne5;kuhurTs_E*c(JO>EMH32@;;1B+m=spB=q}rZ*$o+ng{s6Xu5BN-JEbtXO
zrQzdSj3XMSuV5VCftvA*0Q5QB0KY=l?`0#P^#sx2%DBD-{=(uL@w54StYZls>FZB|
z{xr%U+ljv04uBhXy)K>gz(>2(an0rC!Y8;#do})p(B79k^te!^k9k?T+k^fn6|Ueb
zent@YGf)C@;P@K<kiUkX2s(#7=pzom@#!wuyFBPOsPMhO-)fu>`JdAD;C2$vV?h5c
zzynDB!sI|B=#SR$(XOpZ|JulY0$afcJU|++^lu0JJu1F3@4E5#sQAxvxoPxYg}qYz
z8wFme(&yvf@Fn$Q`+nWKr~xC+r4Qk#cag3epqiX{dyO3KM{upZH2-<{m#mLUpU)?T
zIM|^!PB#(lQPxO`zPi^)6Vx@50@v0^9AA|q^f<_%|BchR8+76oIerT{>i?tGr}Pu%
zH^0|)cR~w6AF~_AfFLU6FfQYb`!T<*g`W3B3oxUhy-GdY-=_JCYVoLt)?y33J?Bx+
zYp7rG{~rsYaSi{R<2M7Y`2UZ=H}~-WA)hK^BOmW6-2X!f)JyB5I)elBm+=0AFVEqe
zzS{0k-fl&HoW9cTIBK_3#XpOB6+cyxUz!R(3b^8@DsbpGr@sL329J3M-T;S_KZ-rO
zioSt=%>HhC&wemSZhVCw9r!WmReS^5^{DFaZe<IC3~W5dj|Kdw;<xRDoY{mM@Ly@a
zIex#J;B$H21fR>ZBR<;oC^kpKPHv@o!HvQX;767AcEH~bxH5kza&ylI<hRlMp};kJ
z?u~YxQQNzaw|6e5Zw0&+?X~I_wl|Sxv3VTs#($;#=J@??g0HmqMtleKc}Yin@PEb-
z2KZy`3wgaNKY+JV&Thax`BBD==X}wV^QqW3K3|+8`>&06K3+WLBVfDnVV^-?ca3W_
zO3?U%{vTHLUs)G<(s%2>M!&TEf219h7fAS%s2JW+>34z~y>1RST)qYT`&+<2y9N9Q
zPq^`di=QjEfL~SNyuF<NkI4cV-jVma<=}=Jz2rFrN3Iaa#|<}JcB0pA0{>otw}*Ga
z|IGPs!f!{!z5|^fR5&ak<WKx7{9IA^X(xZ%6Mj|UN5{`eaDHH6JmlXA?vj5exJ&+>
z;hOwA!!`MLhO6>#Uj{y_I6uH7c{;&4+S>_k^itr?^_}o9x9uSO8{pq7aM{=i|FgEw
zIX<M?q23=9xb9WV`w^TU_*5S9=>&JlrxV;IpU!YiJ_L{Ups&fNGhEY8PKWoe!jGn(
zo#Co}wqqWU$~k?slgksH0_52V4ta98v#1mP<+chgpU&{_RrrBU_@A}i!SPAoJnQ{I
zfy<Z&u<j)NRQS2#EFt_G;8ztm!@5U2PyCC_Q~sUdF8RYh5P$Z-*X%=QxGH~!XrUs1
zmA)!}X6gi2<<DY>AL3udSLJ^LT$4ZPt%1w`%Nz9B1MbpilBWmUaJlUXF3-;J?-e-L
zXHR@jefET_`YeN*WZ?2w__?BtqZ{B?6}S>7;PS-C@z8(8-=luvaF_f$!Cm^_8LsJn
zXSk;So#C2&IE#6<fy?t-Ri3bOWFI=hUGiMt5e|8(_MsD8vkwn+f`6vkXX3}R-X9b=
zMMZFDG|2%^?mgtw3GR|lC%8*Ko#C2%I>R;jbcSp8fy23eD*UMWsqpCmSM`&UHmUQ-
zk0ei{R~zPG*iRbo$~?v425r1!w0401(1u79#&0OWxn3#wR~0(CQpjy1mrq~^`E-K2
z<kJc6l22#2CZEo5O+KCBntV8%%R%8slTT;3Hh#~dU2C|${nA0-CU%5F-}pSv=N(Uc
zm%eqxhdj9+%EvpwKU2peyoe6<{-DCqJJK31XN8|DPOkra{CdK*@vHbz6tCm{m9C%a
zw`g#Kpscf$`IzvyAK=2%;06H}6#gBbXL$Uto%+*-r@;-v?}W$9+-`%OVkb2`)oxG1
zI`O}po-)n}kJ}LqPqjP16Y+E#^(y*KcwDbtcpBUw26H^6-wBWRuM1Cu8^jO=5A!bf
zI}Nea4&fhrAsEzC>VjKt0gt-{JpSfzq71u`pvhgMufpL!y6dHWHQ*^+XMQ-`+5w&j
zI(&Q@k_m1&uhMbDyL-ar=`Q?~TfkF2;qBord{74cG=+Y<p%Xk^g}*{@&L^H!xcO<{
z?1E=_!rgwA0qcVRBTg8d;c`&)2=>&_>lX0dw}8W9b)rLll~th(j*4CMJHq?8;1Qhv
zzBkZO;21e>`t1YJF7DqLU=cmq>xTFDggc8|_;`-$#`l1ib$}mm;VbelSLEy@c`EfP
z@Bs>3o<MNUe}yL<4|t^~oa;Ha%ZB*`7yhBp@qjP51srznrud6)4kyZJ@8Zt%RrnH5
zIOqTN8|iR(vnRa$EZWQMtO5R}Tb}I`UGSxzaOZj#eAzAF%RS-paTmTK=Q|ZX<^7%D
zcd76{3C{Uk(SgnrF8E4MIOauK_wr}E1SjjP*a3pOpHH~qptFPQu3;6&?_jT_C7ONj
zWXFI{_TAH-@Oo(-&gTQe1+89AA8^AP9q?hFFs{{j8R%fP;e0CaOnRQo@l|;H8p7xE
z10Yy$w5jXNFcoePP$R_&P@fVXBs`b>V*ip(3148`@<>2?I}-j47p}Fps2Yc?dCK=V
zLy2q}xEPeSmI`0|a?d@#=wFrFn;tlVxhF;+B_2hrjX%xepG(D~#tl4HO+0}EHq>)2
zGpr?EJK7)~E225B6P&jVbKDJZk}01PT{2Z{8Oij0Pkeb3WKqTGz*`|1scZch6>bpT
zBN@qvNn@;2AAYXl!PWr&qY5_&7r89gL6*w1Zo+fPQuiO}6kiKj4ewCAfNG*x4VA%N
z6{q;RhrUD1E5KkhHW54qWsY(^MkGd+)o#FHy|E5+=_}3ZoK7ym-TLZ+^ZDQSp*H^;
zw0b!{;0EC%ULI`*UC2mXPpSH-uBXsvD*RogJ{|dE1`mDwvIE?$k1AX~N%&lbfN)tK
zqI%m&)&w^Qm*}%wRz|NIWM$H1h3^t>CM)t@-Lg`B6}POqs629C#Y0vd;9ORKp#M}^
zsXjZ&>JQGN^6Zt?8r~dFi<NbPyL@TIHzL_8bhWY0;WQppxF*}qWBo^!@6Kagg>(H>
z#yTKewu*it(#36nLHK~n8WvYtz<p?V?X<>Fd|77Jmx^1d-FSw?%VS*5gRT_;{v6j4
zv=E=o(oe$g)K}!qsXp39>QloOl0(P2OTsfU#rNw7Cw%h#Jn{M3gya)QaM!pcA8;e-
zq!9ve<I4y68j!~0w}8{Q-OSr}OobZ+jB||7gJ|y>s!#Z(1K!&z+#r0&+fjjf*65#6
z@m%AUeS*7lpX2Ra2nIUZyd2tSj{Be4&p&Tsn_={h9C@G#I8E$|I8#`Oz3G9+b^8Pf
z7ySlYJe{QrxOg>_b_*gIfVcC%!pauNQ^m!Yhi{FuIy!b$x`5{rqAuXLa9rm^;f&W&
zwC!pp9o&&FT+a}eY$9d&f5r7b2D(I6<;at)C(XaW1K&}&+2?6P6k_aSbXbi97<FUX
zeTgmTgiel<F0_w^F7@T#;I9sOz1ey34KW>garC;-Vqe_>5vL9$T@<!LTx`2|PH7|d
z9h-1H@mp=DcaIm}IM0?L0V{qwl@$-@s4R=pq3l&xS)>n%Hwjs7ukFIEIB&~$@$_0K
zyIuZ5_!U+YdDV}iD3Vbgzg21Wd)sTfC$Nn3N@>q}u^-nIFXjkujo<Z}N*+o?`)S`p
zyJX%jUtMA`9&a7+7LWPywi%-g-adW-7teuBwUIrq+A@`9BE1(HEAFMnB0=#RyR;^s
z*BY+SZc}Mni%s6*0fX+CpSO?NfG8t~UnLm?Tzs2E$f<Kd;2K$oL)4Kt<Q%F)<6037
zXv<%SZCoz6_3If<8nP+w^8ZL)mD+h#b{%<FrDx$XWalA6;f?XTPj_JHZRqs=_ChH`
ze+g$uti|2Dq_=zo-CDz&eqxQD4e_o)=JJ4xJ+GpbXzSO%;Vopz(^udG0G&MxcnX(L
zZ+i-fFJ|d4$ql=%ACN}xqOqdUHR*a5#{?PP(gk?E)z!yO(g|<+t?lNos|oCa3iLI;
zMzI^J0O2<J!>c)M1LP-Lz)!YJWDMdJQDwAk8XL4NQifV1)ynH<v#ubYVaskIW*2J#
z7tSxZ4i~Wt;#SFmwgvs&`yJ8GFr1o0O}Y4WCQhK@V4$+)mK7adddK5WEWP6~;o2RK
z9d5qk@yBQk6tTO+FQmE9IGiS>BL(}}UBb^Y941j$4STknW#Jv=sfsTS^pbS@eGGyW
zrT2>R#z;X;ZKNq#x(sTVEz?9tbJSOLTbpQaYm+CnwXrPuy!HYu{9sSO{h;fQvlmv(
zgGJcYH@~<muJMUMeZ9JzF~yw8I>CfviDy!`_A}vKagxJ$W<Z!&Dimb1WL;!HL3Qcv
z+1159)giY_)d6wUJ#G((tS(N@IDPf>Z&w3;`u!(*1qS5@<>OCaKC$?d?I+vsKgsyU
zrhxM^O;%>cX$<#)au11_ZUMg)etDwQ&DvHzrhm!!3H|zyS@Ou@#Rnf<w4`O=xc>de
z0WxmM!6l0i9$dWSpy)TQf9crqB?{=#M*$KX<Jd!EofT!{CiL$&VO;+uj{xz|LGiu*
z<Hm8oVnRFgs57o?+_*Br;G_;c>LE{GoXrZ;m7w1mbW?P?K##WMQZ5IcNDB9xn4uRq
z+=CpkP!H{YMNN=Gi*MG~{!emv2tj{~_gb@-j9X9b+(vS^zJL9h{yyH`KBW_z`ulqE
z|2J%Cnpo=N?d98_{}0%NiR&f~F378?$txJl77r;XsK&b?>~`&)v_x(8$@N?e&QL{4
zOCG89>)O??w$`sp7r$DP)KGdibf{m~E?tHmY}TZx$x8hn`hHj%D<;4eh|qVF9iN|g
zQ~q2U%NEERXr5sq`2IOO549T8bobFrV@zv@_rm9(J8|1qwelT9yo7LMc<7jCDSFb8
zHf{7z7%qQyj%atFo1xOpxPfkx5nec`W^n38V+K(N-Fn?7F++;SKKJlqKS65K9mcif
zx`lcp2D%NJ9q`-L{7e??&4O8un1Kt))8$kt{-pey{M$*kpPu|P)&d$!G#Yx5Xz1BO
zjBK)f8VybXhe}%5B{>yT-jm|x#u~ZtB+_;IDKdb^CW#~iog|+l`C!`5##dx7e#3VG
z`k!&SD1x37BkvA$$s_Ta(cq7>vpgS{80b)s`v`|$iisULzH#iBDbLNG6=!Lz>!0-6
zTZZ)B=Fq;0Y^(UVmtTCz3pj={cI?9g`}A!X-gjs(=WDX8?<?1&7pA3UjdaA2f1rO}
zx?u1HKky8U4}u@evq+)22=g3#2)Iaec95SRWartTpYbDOul;6c|IN-)xOs$M4}3wz
zhcTuD?DWE2VReLW==R5Fn}z2#3(pfi>a?J}Phszc)$dLD1(Jo|n=Fz@so#m7-)VBf
zcO*kzPLrWl4s*&|n5!m3Kf8b-<he(p9XgzfUtt5%Nnib7)5%TxOW(e9;&NcyQA5n1
zUl?{%g(B_*-Gm%TKO>I-?)?NrJwQx{eBw-W1Wi47Lno}Pbh6KV@GDmc2{p$hnnOdw
zN)tw;rlqBhsH4AiI|kxs$9)x*l>?>NVsl7{Io8rGm_0mf*pVlO;pd4X!-kEVHS>e_
zXU&{B>-`UA&ca!eayqYR5M4Pf)bpAq$R5{UB-7E*XP%iq9|z?x)1ggP!hJCTS#9@<
zoAg(39=3}v=V@P^A2Kt0AN7(9&oLi}BDmPMtDm>8aRjb!^X?jO@nX-@S8Zg~1AgN(
zb|3}-KctD%MwT3JW)T+cpFe-Syp*j((%c~Z73VjzpL=cz+_niMFPi8!iAzx*`VhKd
z30BWLa;YS_(+DQ<+<|NodtZJaJU4R7(4loBcU9b;nO&6MbIP3glkFLqY5FT;&Ut$c
z8n|-Rz=1(Q^TPeRjvqC$$;Y=F{5YIb-6TGYeu+}D$<q-PbcSkql}=C+ikL%0<p{7N
zmkz;=w$^1X>fI~WmQ%83K*hj;>mI)Ena6tc=<!T-Lqm0K3V!tGr*sP$GUUO+$moiS
zb!#ds-udF<XWm}&JyT9hv1OggvhjBIf?V%LI}sm1J8}NV0#zxOpIOQJ$tC(LnQcD`
zUz7e6B8S6$`k!=NvCkcmSq3gWHOAviIx&q~I67#M!-dNQCQKQc-lIoG%`p1=a&>xo
zW#wHfDl5~|t4C+qs;lqWR9$V$%Csg|4otRI4XRAGO5IaacBiJMq*e_|NzDkd*~=yr
z78DdtC_^R#Q(oT4xkbfA#dGTO@?P&3pO6sWucSNy3w4rjCgi&o^7W_v`3xt^NWr;`
z!IH?+cmPJHNZqIEHQg6#tHEG;b!{rdxiPseV{xxuQPWD+mJg^LxNd)CW&Nnb_+IkQ
z&K}*6oo&k+H{O;dKSWZmelV|RMdi9R6%|vae(~Py*<M(%GZra)g8XJ_+}=Q?U~-^~
zmK@<h7Ak)`4O!bm^=W^O`4j($ci@W`#p9Bl&qY8-`Q6S*l6?%dD^eVX?;gQ-@RvwK
z$uCqe2uplrEGwZiyB`XA;hI6<`9t_&ICFdtOz#fi8Xe1=)QBI0uw1_DPWi68o!6YJ
zs9q}bC(4kGvGXHY#(19VlYKaG%;?c$CJwEwH3+MmOP4uUt&o@BDWgmu=+PG3mu}L<
z78`V8SEzTu#ZP-?oU5d}Yz={a0s(rSzIZN^vXZ#6%BZJl#Vzxzsv2i3SkQfL#ge6x
zSvxYToNdip&F9`;?Z1dS#G%NS(c6^=qYlcsUF;WR)FD2s=Ei`97nc&AZoUgvin4n-
z3~_B04^x)7iOL#_U9ckHE#<I2F4zFT9_ICevRW2nK)jpdAts^13X!MdKCuS$5C>6V
znJBxKm+kL@Me2&g<H8o;mAYXpPdv_c0#@dR>0Se#H(=#1*oW;?g=^v@z!3RY>mb;l
z99H3i^#?B-g%!vTf|*vu%K~g4ho!n;1%U13FwD{_UJ%-Ll5&d(%Uv*cS<D_P9wa1g
z5vKrexC@3@qPUB4n&`7!FnlZCA<hCGV)ANPa3vn*^}-H$(xcob#!45gtUXX%&+$N6
z#Y0>a`B1il9wJLBY!G0p#6;AaufQ-@`m}#1ozwr5=f<ZIE(CbwLE-6B9m;A-89l<0
z!qpWoefsH31Me=#Uol|Iu3cLOtjHHkawFR+&t`|6U$Mgu+?gk&up)=!z<{!U$$9@O
z8z7ih%8##<$F9Vf6|v9rpftgdk5x+#exFx}*<pt@3{JArp+hC%o7EVPBp&<^5(hhQ
zIgK4A(|}{Q3}_){F|9B!a#LzTTuy=fS-^~!ht<6{D>O7<Q%GTU+@``H|NZ;7{cO7D
z{Hp4?6#~oaC4ZJ#sQ<ysH1&~?$V)xDU*Fj{=DqTAp=d-<^qOyig3q(bY}(t;cB^cQ
zne%}B;ZOI9Z<(a)JCcLR#vp?7wKNj;5xt80suTueb+|YO*#wpBBDgpQYXI%odyI05
zGFbTc$RXp0jXX13{z^W9B=%8r&x{!M>Z}j`IdAx;jcNBx>>3};LLHWccdj>DGr&(7
zdk}m~VGos+T^iFUzaf7pf3$Z&v^e^KhLMuKHNgM)W1JuSk@~^EK}62v>Kt;+C<VuN
zV!d;YQ0;v3zyE#nJGM+3(JGg>%E$W4Z?Jp}FKW*Ql%Ik2#Nz{%SG+WON|583ktK>x
z>Xu-kNJwvsxq9;C8*jY-ZLgh!2d?dP?|ilfNwGGwtMW^&t*r0n&6~$C{l8<Pj(6|A
z=VCcNQav-<`%1HMj=wuT&?1^HN7Rg34q_mf5Gkz_*j6kYM2NVHPiB#p(slII*I8tw
zE3d2FV(vRl8XwjnBkYs%HnIN?jyzXZ*m$#*Noc2@8cX};u`V|tUsn?6!y0U|B87zo
zt8B&BA-P#ZMRq(1hu&<@5zRU5*x<kCFFVZw-uveCe*DNkt8av${AGg&i$~smTmE(X
zb}`%ev5@5axOscC@<vF)+ve@t<zL@^8#VhN?s*P8c<B%cFlm`!O;BZ?kCLw)RaS67
z8VMKq!CR~{m80?`Hh03*7$s#c&VgHVc<zc>%Ss0gDs2;c7B5}a^ySjx9$iuzUVJer
zzuq<>6A1%{#SW{SJ=r!g$y%FUQj%2>Gp?q2divPh`e{S-8P4<D)~wzppF1;cuJe%o
z(%hQ0bYtXZ=e~7S@i{pohg4Q4`X}sI@!;X;=qHkshYl?sVCkB&Yu(=C@$u}TcZIPe
zUZs6FvxgZL%EjA<bV|$|k9;>C2{)1HmS+c0Vg!HLG;7j^1Ea@|9nDS&8*a}SIcU>e
zETQG$q17o>$puBdi+b1A_nFy!*0{~9`pnO?O)nTxSJc>j>9hwo<oAw5n|@lu40m7q
z(8!kGH{Q8Uf9d@XH$9gSvSryb_OOV*Xi|`uj=VcnUqrn3(WT%noJ_RIY<IBu2xc+c
znZ;o@<Aqx@<LQOOtNb^|PFLhu?Gd8UezoftLF}Vv=S-HJL0>!dEGv3rG>bLA78PX+
z>^E}t$&+2roLoJ!B*+#O^;+qGSqDuC(y9du<TmF{apnRhox;!N1)JOM6c@Fv6Ys>^
zQ_jbnyM)P1!ki3wr$C<`g}l2^#tl=VEl3?yh<|lwaRS|bfd~U)U@7dt+ZT5%zeoOc
zhjfQL4)2$3W`Uda?~3yK@~84vHvH%Jt{r75EP>6ITYr8}U&Ys4&2+}g&@CuQhv#dE
z>(98I#KLrms5cQd!>*fC+_Q`Bf3p0OLjNZu=IPj@kvo$^;*C!mj{58r?~C7+ZBMpl
zbx#is2@p;G=B`P)^sp{wQ&*eS6dhwQr)MMLe%f~RwCyxPN{Arw$dZ}A$)}~r*S}pw
z=;?JE4?fv0A>Nc}3evepfze{LC_WnA@Uf!I7dkQCVb}6t#5>;0WI<PkZm;P3P}R04
zLfIEta;d=ZGc`+o&-}#p!4LE+zjxS|@{egxWG$eCuDDz{OMC{GL0OVh&i5*L=iH2L
z={@|D%(LFQ(69ITlw=mmB4_z^OZN}TF!|1aJW`-5)DPSSQvyLUmRK5a8~n^+q331i
zb8MBoOqlnTbMN8x;!xo(=Q?4LbNOw~7~#A#OZeh8E>}b==<FBIg+#$iOtTKNJ{T`h
zGFlUJj8@$2nkwBUr~k8Be(RfR`OUZ98N{M43=%i72U}a^Uml+Q;oAMPKXRU6&pkZr
zqqX~Ifv#Q`E$2(GqrXC+#p890beMUW)kL{xNtS%!p=2$w(#lp_+tTdDy?<+xKG#83
z3cuFgjDlR0y_T<Ax-tS|F@W?|FjLBVWdX)SgArCdgr;#9CFWX7*lpsZ@xy{F;e+kg
zKHcKN!c#MQL|H-uR`durcp3ZxEv8sMUmtIOqn~fvlSciR(7>QBzTOR8bK;8{raxp$
zOY`p<Z?ahul5NScVd2?<ab8~DzTLBWCnxvMOJcglF22EO5z&$PL!!<8T>=85O69G=
zVcoopUHk&ga(;K=ot;x_W)|4%wk>L!>?n#g+t?q|!X5Fwa*}fsVk2^G`9m|h`T71m
z*(MJ1=@w#%D#)o_no!(4bNqkqn!9nuvi`SaWQRt1`=pzae0<`}L;Lg{JNj;MTic#H
ziX-wu!dB0!xpVr2rqSd2?Y+J)u4`BSQ2(yz3qjWdW9J_9MR#2e#;g^x<Ow_|VGMr{
zsVXbM9A)iAvW3hNJ=S5*ZrDEij^etwOvhK%BiGI!H+1^3Wz*VLj~cLO-ORZaHay?Y
zEQyG>Wn01oY3$Ec)B8RpAFdlaw)Uy79y@UI)atqWD|&9Po40IA=|?k;49_Ym${cYJ
ztl?%{#O3%L8IDYo2{c2REU^@52q6Q9uH{CYJOjKO!Iq?WlLcAK9l2IZ@N4WDwxV(I
z7;mq}c}e4zeewO9qww=4`*hGFPC4xRrxqB!oxdX5|KIrq`L{Kfj&vRp=iPSO{0X??
ztKa<pDa^wF5Og{1qoj4%`H}!V)#1SlhA_E%lye?>L_T4Xm9pAUT4E%+B6Xy{<ZlTV
zHeOkG=+L?=8>fz)(>P}O_~}(e<@t+Q+=Rtb7HqtG@a)-xAK4u9=sDaPJ?kF_V>Yjo
zViHO}7?YVMT`v*>gRE@pLFe+?ltlee>CxC3yW|V<ySrwPe`<wH{>H~-1ivvO2i^jj
z9Z%O9;ZYO31rtfbZnR_|LRrc}9(m^x+?(0w@ZBvZcgyxYue98KxZjapY-R7SPL368
znguWCAI;~Roqy09!K?ZF`SZ;T3j?yNI_Sm)=teF+@DYQKSMMo6<cfEKKbaOSUph|^
zOPAPz0}>0;uNV1vI}UDce70fgOT(|QF2Q@hYdmKa3fdk`Yuz>FAGb}vIJHgwBj|yT
zyuHiUB18WXqj&a%xp((0{D;;0%bChv&7(5BoAbvvuPYhwL3;Y<m#T`JeSHRJV5vy`
zvjPFk!HDN6ce7A;#0R4L9k^?pht;URa(IV1sKdwr;FoNGG<ej|VG}0~8#-!a!^lxh
z&)#<N;*z5iM~`ff*RxUm7W#MX8aAV!)N*NRdiwQW($lBDSDp|j$Un1S^MdzTejw}n
z)_n6f!k0o^{PhFkpXR;`S|6VD%#42ENwb+edn-DI|H52aGNjwCZz5Cq77}t@YF*rV
z{l5~T3M6O5@+toZkEt4woC#L}5T~SL=u&c4c;-2W#X;$tQkg@V>yRHEZf5b0uMCyd
z+o~M7wQqfNbWrnzS1xZYEA(-G>tLS*WLIwaw?luaxq5l?>fw#S-5icb<tc2*!=n!l
zDxTClFsBMq6m%Q0e#k-}^Ndl6+&EG<dM+X2a9O&d)n<W>xufZUq26a!A$8;lTy7t-
zbW5*M%f6jG)ysF?YCoTqj^ebH`hn~a@)XTuJF=r!q!eUUd38OC%V*BL6zEIsm2`&o
z^U^ywmllSoSu&k(S28tqP$R`=ha}=^1lMiz0X-Oh+C?dP+3AAP_{!nKE8|NG(ued|
zcJGdrDb?)FHO|&G!mGUo4CvLfqT<-EYuEm|M!)lDcJ$tRw?7b*{Zw33+l7mNMpXX!
zmMA^AZR<n(SnR$B{<w7Uk3TM6BHlzgeJeePzM!~_37n~Uj_B48?N{9NVq3{e2s=(<
zyVyi|k33o4t)F}C-})}}YI3d>7GFyhK5=4+%ydIRuN*oWjt>}{?qMX-69hivAqXtl
z*PK{`E6qlaSbo&fe1c`1m|uBh{D$4W!g1V*@ps9m%sOPmbBCO34Beb9<Hm1Y5!>iN
zI|{U6tjSJO6?_>(?~GPjnI@X`?2VnTZP*=*I)c<1zWdBq&N`96BD>13h$mj%x}yI~
zs;K;KUW@d2|M7#bzch0E1jt0tAu1u=&1Hg!QX-2-_?62A4uur!EIT1Q+x8^_!v_b+
zC!F<znz$V1UXPK!xRxq?aXkh!B>1d4=?zYUvLR!2r;81UHO1j7zW@<q1oTYwJS&*5
zxkMzO$KJ49aUvTpKlqf*X8)SrIAi~FZp5d<l9a!qpYwa9O~MscviH3#OKQ13L|nG=
zi4(mGuQy0X+E&n8RD-&8x}~sVRmgvo0v{1T7S~lkIwhX+zPEtH!h%(GA-dw?l^%eQ
zGvZnisaImqbR$fecI>`EgDM9en>y{-{gngnJ2rj!$My9MqmF;PZ0X0xM>W*ff1I?v
zrmn7rZnxUDW5>4b3#9+4xbMWYDSxj-wEcdRJ8@sd<ofzipYj4IxOCa4qw4GB6Y_Th
z`t==9J9p;nIr96&H=<S2ZZ0#*gbX=?Bhp9Qvy~L@W(vaNYGqB@|MFP)^N8a+#|pRo
z>-XP({#CwH%qmD7S(l<HsB@Zt6i-c`ym#qi=URQeb5}_B;SW7H98)XR7byQBy#QMf
z!0$*-Mqiuat?;I}F`z#}VhGh8XXH8DFwOCr0}#$`_~yNn@POo><>!!QE0*;?=G-*;
z>S+8M6%)C7b)?W79kF_KM1*|#Um|0VuyIJV`G`D9eh?QB-{WhuNgvp3*QZHCqY{rh
z_Z~}>a;_hVN;ob|IGzB15d%qj5pwXxjF*JC3|S0r2w@-XA}(w)S(GImhA1BexZg_=
z5>Gk@{t_WJ@pzwtf=NkzhA;Ws=jmf}9+x-lFIqS$P<~A4^U?cF-JQR(Zowu~@Li6?
zft3kP+hMkRXJ%H$S^1yB;ILK8U^-pPws*#N7ambWY33qiy@z#Ar@>Eh6ktZSOOwE_
z5gIq8IM?6X$GfYKk9VM#w^x9-w^!f5uHGW^5Awsajt_jibZdhH{PEOOAJ}EAZ{S#y
zZj3Ni8e_<4ldoR->HVJq&HO0{J%7g*gVXq!Sy@|W4A7r71|WkCf9cPTjALqy#o}@C
zMj$)Bf8KuKnRQDK&)e%bh&iTFj$~gqw!?ThUt(YKM~TrwU+|38q_m6cnli?5EsZNn
z*?8gjYtD*#sUJ+l+3P!DlSZq9yy@D%oA4ITyvRn-UMK_YnZoCF_)Ph7w7fdhhqMpX
zpj*Rb<coc*uj|v5+_Vl%b+MSZ?U-j`6EOUO5^#T75Z#uX)6H(N<pk2)PHTbhax0fG
z-{xVx>j%!?f=j<X-?yK|?Y^JI9cZ%$1PGr8<PB=R^RDJWj;{yVhYsyIc5zw#)2z>t
zCt3d|o{*n^(lo$iVsonPHAAuoQ(uX+QWal@eI~1f^%Ap)Si3naxHH#IFJnCGD_CB~
z<)3Y{Ow981d#hGIy?XG8^b^w9HmRveyuWRVc)t+(9dC1l{FOA((2QrN3v_4OhGTE-
zY5oMY8JCdng-n$1H{S65e2?$zsl2hzEz8#%P`=am9n0VN{Q{M~5BR$YePgjl{nL2;
zeQ#O+O};nwah3lPic9>L+@d^vPyBWKUgIx9zG?aYKl;XgTK((~-o6fUhpPA0{Zra3
zE~VUirW|HAV!kmO`?C1@ed3(9E&J*PuNwN$vag<W0?%!r6UU@MgzwGZ)6-&?3ENm4
z$6*Q5Ao+6rzP2smoPG6-rm~K8crz<pUyIejq|Kg)f){;4E%N0X>aj2+$h2d5&4gn4
zQw8fYH-}Wh-41_zKnoae3#tibR`IBFCK0A0!ggW{b+Ie-hPRErs{yD(`#>iVHO5oj
zXrUc#6`lj;XEnqE$|lrMn=ju$cpv9qcLHNNOdQAM>cAR=8DWG@6tKNt3A5%qw=EZ~
z1<Re=<_ojFx&a?kX%6m&#=1!gQ*qc{(JD86#S7rM1={ODA2)H?nFD_U#VanP<-D4&
zWbB{x#C0HKi#;%SGJV2@;bzK1jx^qZg*4bMX(Ac+D{spew%;>BUaB>leRc0W*m!xZ
z=8#LA*J_AAO|OU!TH=6aDZSwUO&0Jr%K#m=Qtgd>a@4)|uqz53r8o8|bVjlb(qeHO
zt-vWwsggkx=8*sLC~OFBy~kpcY@ib1P~sy<Wf~s{$+HCGq@dU^OH6oZcyO1%REs@5
zH!sx|mlirrk2x{af+U}IpRPTkb5rwjdSoWdTn>2%U-~Ty4)XW+iwd!3I=V-g&5_Bu
zh5dq3LrmCuQxKb0V2#3-fz&%cXL}3KAx!7VCluU_KBNT|MFj9m5f^Twu?+U)+@nR}
z<MMxq*vy2?9yxibxzRnk`q;xFBf(*yML#VxEzXvjmz!?4qy}~gMq6SmVX;AzgfEvD
z$W5Q$nHm-v8f7g=i!H$3AX7+cP`|?5<VdqQqPrv08WQE_?;jM5Lo6Npg^zV>ygFL!
z4zn<oLgM@CuidBh?|s+m(Y=7UySL*wq5g%EAl${rNHFf)geMrHlu*XVH4IrHNukQe
z-ab&>M`!yw@ndzE?W&T*lj7wFQ*JCJKxe>>rX-+EbX<0c_<^z^5XZ-E4rt;gPK;bC
zqYPfok5!?pSOwxoNb0~3B0#W)R!`-B;Me+V&aXAe2$2v?7C@eoam$y=qi#>7&jzv(
zscF3PYgc(!TRh|ePlHA@hK|}j;twq?&TLohE3Y}HxT^;19x@;=MKf9$?~o(<Lp4|^
z)*_s9F_GOu;_Fzi$;C8Ako}vE*d%_9U*Y~6>Sbi6xzPmY!5$X#nsC4PHxK^L@rvF3
zhV^73^_8keAcGhRagMHWF^@hY{;9V@T}}8FP$H(v9{arDozrdz`sG`G$T;Ls^i+$V
zVqCh!+7umbHU+{3^$7|HH;45epPmwe)nZy=L1v5-vxPcutn~2?3N(j?MFg9J0(^a1
zQc{z1vU}#`*m@*|2NN%RD)Epd_~;HkT(VRQ0goLLV_40ReNY0p#2K3@^mnysdrW3Q
zVp_N0kdT!0tgPN)=J0?ZaOe|gGKYKgKyY|c4_i)N&+MG!)ZpM2AK!o=b8tjhs5vmm
z8;eTvx49h#FA02Y*HH+#%hau3xH(A?8PA0c#&A18Cn1V6I!I?{i~P1GABIf1-P1F(
z@&m&|g8cowXLpdQ6yHHymoB*kwzM$Y0p7bEK->HyLc*7J6m!QmB<hMFQQnW{5Ip77
zCKR+nwX-hqYK@?+U-XLybhP;kzieWDR%UwlkYHxh#4W$wvhyzl9zEOJ&p#+6T#Cmk
zC^gxUUC5_DavAnry7ZTQurxd*!XL^-?Qq+MI()DbThYj?tO#8RD05ylU=h=7VUnUL
zss>RbRNW!C3N@-`oW*!qFf$ngOxV6D`G%OoBQR4$n?ig=qcJcj&=?IB^4D5!@H2QD
zBZ4D(M?{2#c>%-Q%jD%{G>Tr~!I9y;BS6U8;A>QSSy(9s1jc#$`g;5MrC8zv0t17i
z6RdvNo964C;_WAiF4MsDdY{BDfq_A>)<irR&?BdkkC%U<75AqG2E_U3^-R+MMJ^ZM
zgKp)|QY@m?q0LAZ6O4c&1o5c+ZO@Iif4cO|fKUHbo58NgzsCNgQQXJ6(g(#zak<Zh
zFE&=cgZBKur_)<ShuOqTW|4`bPgKZH4f)sPRku5P?S!-Y>U*oE{HqJAu6S0sC=VBx
zMmw*vR!-yZpb@U0$oDsC?j@XGb}wrBj66YMb&L3hi-+qw#5ZmzXQ5c9+Mb?rY>Ti8
z_zCbQ#W&jWrRg1b_N)(21p`%k#qMQawm5HBD`gLgZ(QG@ReD2x+W4RaeowWkea<^t
z*n?VC`=se@*i!=Cd=Bk1OEuKKM7|kcvE#xLxsNbGL%%FsXldI(pWsWQ7|LNp;?CL8
z%05#MJ|l&9TiVvU_+%%Y4|L#j2&<Fs6#vO><PAe0ULC87-XkonPUozWv4rTJ`4weD
zN0bb76vRfe`%R|A_{?NSe)k@U3Ect(ja4Bhw5qneFh4pf%92|!pmeAsBh#9IerG}5
zk`ipmWoE4zOsDaZf(B`RL#|>itm@bc&Wu+_s_JuMC(CNBu6;saw}iwV-SZvEnemAx
z)BP+uw!ks4WW><2iu|6@2~5aQE8Ax-OSUB>b;AYZCUb%{Gs7{obU;C_B`PX9zp%Wv
ziexHK3`crM3g_!?oyoO&5HX{AtRPlPGu(>^p{N@B6u7<DNt>nj)#uDiUC?1k5oo8l
zBs5lCfPKT4L+6w!xur$ax3rK!b7s?gFFsA*!tW!0O}M}9Ar|kPqWEqAQoqB7NlU~(
z`STAlTl@(l%uxqJYzBa0iTI_dg!b9dlSjod7k5NeBqk<W%S*=8&cKaj<@71BVo`Qz
zn9Y{nCvQt(@2o6aSaiCDJaX~&sEYbglc&@*l=n+Tsj|wEqb5!sHDb_hwqCtUOPXzI
z(P3c`8Mfw<(%$9P$gecN+>=k5>{P$}2Cl4*TQ!39<isrL(P1{s#f4k)`lQ=zVWHWJ
z6o$)3)lHdEJEo-Env|3@K)jtC@~<MT<(#XGh_JBeG|p8o+iinJjG8=g)X2&*Yhq$*
zzw(B<DU(Ny8o<X<Uv`DB!?Bw|U5BfSaCW7c_k}ip2rFsF13f)~8R{zyqD4CTh@5nF
zy)A^OYjogor<@$}JNOD+Tb+}hao<aL9&35RgJ!_>5}qS6Sj1m{+O>ekyyfPN^3}tv
zNSieTEZV4kr41BIQ23*DHyn6vkuR)lCgoCmO;7&Fv|-2zAw=aftu^2cI|YS*D!f^^
zKWP{Ksn8&4h;!V!eh0=0yhm4L!CP7TlYF%5m9|{xO09%7L?h>iSa-hZj&NX~2K4$-
z9^U{>SLDH4l_O*%+FUURDyhajI8RDfXfmcsNzUYh(U?^ER3!r`Cb~waC!cNaD-BeL
zu?5`CfOKAQjYw723Qbz?SY3e|MJsZc?^zcSHI4%n>3vphs4}pzOovWs?d9txigIv8
zP_)4=Own4%izL*DtIm?#czDM%$V0x3n;)~%`Dmh|Ey3dJHz`K^D4n3heQw|<5dlUu
z@}p=8o-mx@;g^<uyvS!YXK&I@P3C<da|?8vR#KdyUIG`mCTvAQ7+#!-7Il;<{pC?s
z8EJT|!xi5(;M_xmj{vNBV$^}4`rL@A1@k9c6#Jk^3i<|%TGhAFTa0E4o68OiAD4Sg
zez%_C3GeW+xnET&b1RFJd)L&kX~LyLg)?hfY7Q36sM6LLH4v1j##fHu$wZ{GkKc&>
zPM)i0&56RYUPRQ^Dp+K>rsm3--9!jYuKFrwW5gY5eO0G=Y|O|0_?jAFWlhcR1f{;I
zdN6jGR&UkEvGQ*%sQiZZQL7N)fq<x`iqnyZ8ZF{jc{H_;^{AH@v*(re@yg*covNvk
z?_--h+NUlnseNu=nby$|6}NVZnzNXi8VuquHP*#w;<?7fC)XoaJb=op+RT;PWEDaP
zmxm^*YFI7V12I|?O52y>oEz#_wU}Epi$gqmLjf@05*e}Yu@*=DiMWAYTNT>_&BF7H
zuz4(^s;1_0$F{U>q4I7S>!C$DM%v=YK#-3svKA3QToWC(y{1LuUJlfR!bJkO+K(>b
z5N(%i6xvo}pxI$^ai}c7h39K)YHEkL_|zl@>D2IA`?%|3|5ED*qq;rquS>b&IGm+G
z+%K3%Jt+!D@y~k@?JRJfquG3xU@s89L>#n0$eBY^wews7joS|8VbLjcNK-c6<%s<V
z-9Af27iI}x5+IxA+d0m+3J~z5@~}g>;vT9$Q3;9~Ej&DG7ysTF{olmTKW52I1<Qr(
z0_Qefzh`+KD77jf(_nT_Cv*f*)#l6*a!?!_^4)q%acCZereRO&YYAp2mBB5%)ArdS
zaaY^qMPeK)QipZTBK&qLPa}$SkN!u`i$TszF>X=YWO3J`w$Frj_&8=oyrk069_8T!
zFuK1GzxH6Gm400-#JdW1-gn=9g_Z{V-8pJ3O@c6n!peS+<ELNCH2QCv%UgH1iD;^8
z3dHB=H%F~PJgT^g_4~$-BH9g>LZV&Z5vx$BwkUP*zIN$h82XCV@akoHS||~_c5qJ?
zT#{?}A-9Cjws`--3oo?HZ}~&3@(+9<-SMP{*cr-F`FK|-P@xZ3L!qZd1Fu~Zx4ifw
zXka<11bhC=32HW$o{cEazg$L0Pt@@uo2nIJ%b#z4UUkEidA0>V;7fGzrP0xXTqdJA
z-eC%kcX-6-u-EYscA$j`vl!Mgipwp_OP_yUe)IX~U3TBi6DC>3D9}b2?8CAPPu`@U
zM?Y|;Zo-php>XYGu!xsO><)(_58zzn6_3UW;E3gdBgkEyi<Z(%YjXKCFuL|mYYYMH
z@mN)KF57W^Lh(+TnUw_z745JBAsZQ{djUT4L3NHdnsMI9V!}C21k72{sZ*j)+wX(r
z4QzqP+S-NRUVU}+IT_cMumxx3L#SKO{TrS0nY2(XPumCVusGPt5|3@A4d)t9vxRTU
zht9D1Vs+c^qR%P$Uv2GpLcc(<&o4;Ny6WazneYe(HRmwwEaccfx5=Ww<_o`#J~#SR
zdBa&&ca{#?cCMFiVTYwby>=$1HJ)oYC2u^#>fXeDt0Zc}DHcdApt6z&&pxnmG&g{0
zqdkm4A!#EHwiSD$4Z_=vr%yGU!$zDs-U76Qea_~bIwfzBf8DsT6bG_)<IDn1{>r;L
z$ijzcVoLyM2F4=*n;6LH5qApBGeV=B0GWW|o6eATg=MEsIah!p`;JpH(@`(zsU}-r
zaEbBFu<@GHgH~iP?2&L&{ru;O1`vI-@s9Gci7vw8?g}C+ENd<+a}Mf29Q?ZJlYbWq
z`U-gy<j+^SZt|u38qP4kQs(z&qrAmU{$CG)y!f}a5vam>=CA1c@wgNhh+U-r97dvU
z=8B@q*=y42Q%#MBRq~`X!dl4XB`D3Q#>Yu8XPj>c`5t`xU?)io^&SZsEL)9<oHn*Y
ztJJwd2m%+)=~FCLt>TPU38ar&<cf_O+3{1S&Y&XH!mE<6@J`_U+81Ml^py82v!W(M
z5ggWFK1xtEt(Jlr2^##Kp>phdHecQ->^$q-e|9tmjr`MD;rp{tU8pcfLVs~$K-wsk
z!Y<M*=Za4dNyHaY+|Lumac$B7k08bK1KLECyMaccGDYKg2X&w&P@Ew*ea#<sF8k*C
zb7I>+UC%1Tr0dTQzzJ?nL(?(7{(~gV4lYQu()n1k2|~lE(~TGjA*#^i^%z=Wwe$T`
zr-YPKrv`JColiD`bV_?>8I7H!*z>`(aE7vF)2;;1U5}^|>9GO@V)fXTh|Phx7xgt$
zcFn@YRarsPr<-hp7v)d3#zq>XA6<5Qmv3NZS&1#kmnF%c`1z++l;i}mE5-Ke!M46F
zeY0!QlIi&!%_z#ss9RuGR$#XlQ(#7B0OYQ%)p&c=RWbZFleTJOY@fP3sz0SIOcPuS
z!Fn-;?5XR~JnVKm7V`RWe0(ZPH3*;P6Qh~_DgLe))M>eQ7C#yxR)mF^x_mo(7Rxb(
zZ;v^F)|DNeGGHkbEJnA;kGLkzQ7u>qUEx!_@)YITH9nua`h#eIGfcRy*$xinQMz5b
zg*CXO+kz<ybGu7?*HFww!;BBEB@s>Enj;g8;E2b}@8MN=Y!T>4)srsSHu7EQrTXRM
z8Sq!I_-<#n;zep`ho<tzy7>e>+N7+JaC1pj$TvDZyvd&IT|=`y+D$g5GhZEv=CBy8
zD;`~)x0*l5r~W;J4;@6%u@<TZI;qXU0;~b8)M&XJh%^eAe+MhG7F$4bFAK(OPLnUn
zkWD%Po1~NpbR?nx#=W==Gc1irnyuyAUxgP%Mu)|>U~E!7N*O)3Iz}@dHR^dm`a|^z
zwWpi~G?v*hqQYxkO>~rs$+uJJ5#M~z74~%DBoyX5lf}faRUAn%gejNg;iF{7g&BhH
ztP8T^sL<AiJNV>gcK5YZ$d%tcg?)hNr=S43Mb;e8?EpW2i5Mr}rnP{1v)}LTYk4y$
zV(<fdAHcuC5kYTS`r;BrHe2|OZF+semI01k@;{vS%m3Kr7_eo+YsAxW>?x1X57fny
z_0i+Oj&{(%teq&x$+asN*9t}hQ_r2FQf`L?zfBD@$4)r9pdmN0OKjN-WwYi_VSe*+
z!io;uDZi4IQC@5>&q)gzxqDSXLe#K{e}C!T`v;_!4{2Ca^?2H$nBV6=K6j;jV(;y&
zwkbD1z4yf0ksmyPUG=0(M`7=yAS*l@aFB<izK#mdI0w>8oZhyhm0fLRKeR$dqV8z>
zeksb3gQy&3!@wMeP205Z-Grj_a@hSD*2LIG7brzJ*GKFQuV24G{(+UOmu*ar*b|wt
z{*rusJ=?6mbS<^9Q6)WgY^xm1esE5gyRoa_OVka}jhEI-2N3_r)X|ecvvxEe8$sx?
z7y=XM8~$9gH!k1|F&oHS(<vmp$1X`TJxg>4rlq6_3)91`R_oxwFI^r}oVReog7gUO
zW1oWm9w_TyP?#SX7%n6yBp-2p7@t&jptO`g0n+{n3-gM{%$Yf6%;2i(<nVNqE$B05
z<{W$;T%8=59vO`Q|Hj(t(&PjoIXv(l=Z9ed(HvG?TWZw_?HEqdNBYfZl|eVSI7OPO
zmjoo_m@0~bek%F^iMS;OGl7d{|76#727Jx*MxMju9Nz|+@%2?Cg5cX9y?(?NNcH9Q
z<H$JdruG&r2ElLv2N^cYTZAw4o3G84UcLSu^>4?zbs|nfIhe&DU2*<#VG5h;j3MN6
z5)3Hm!d>9A8aIxG;{)F$jPV|q1ntkY(>ur)7byp`Os}}K`|H_<a`M`5SFiqdExl`~
zs7i_RLbztlq%kY*Ydy_|uzT2$)2)?*?i@3z6)nH3eXvw*n2Ly2BHe(99rr|1?MBp4
zh;Sf6X*kIdj7^AYUB-BHqFERiY^FLg(+UpsThhNTs%*_YV7=qXEjS!`Ptd}Kipumj
zFV-Xbnpa#x!4p!e--}t7CmjA8=in*Z@>V&%RajG5xdNO_8Z(1@6sB9Ddqf&6jfNKY
z)jjEz@uau?Ngw-Ddg;ffFsVOflzx1YJ*f})>`B4)lnwwh06|ac05I8}>}Gq)AFu$t
z0;L~WW)=(PZUVKa2MfUFc6tY4NmXq>hV+_nH<#5nt5<)+Wp($2ULnH!tpoB$wJ!gZ
z37;-+9hHv<1s&y2`-<W*o@^mO0Rpx(;2n%XE~avEpI0p8FDJ7P75US<hKhk{v0jL9
zWhwH<xr2G~kz30j=f8-g8A6AMQ9~*m4Q(8Y>gE6pW{febaCdMB)sc~&5BZmrK>m+G
z{>@KplV4`@f)+PaRP>1TlHbez(<?TyK=0$~0L}t+0K44kT;kaQp7O^t5jx(%`H5x$
zIE0}#cBN<v={<fmZzvZYy<0uLcZiUt3Qv|*;W6F)@<1scc|MG~m}hl*=3nf~M4gv(
zr(n2K=f%^$;UME_8?p+*4TURf3A|r?c#m_3JkYrRk49tkA73hCU^D3S0v%tS;~8JQ
zpSSKL^QXxSe~qjw0&D@rzIf{GrAH+Okut2E<{Oo9MlyiXav@&}I-gu`{Kwcp;g_}=
zA<_AXxZ4>o_{f*mHHbUK>M<MJl)aF;Iw4(Jf_#%V%YR7oZJlJfent48mF5usyi3{+
zT)q=B2OHoaDlBb*7bq>cenql4_sAveg+uH`xu5u5>-CvzKr0(4KhrAzy}eyG31`1?
zG6s8*gZRGPgSsP9sx%C_g|NDpClU;2Zpy@i;wix9As@lJ99G13i(AF-kq;^fc}$tE
zu>B)xpJ5+n*NozDAFP9QdSAWdWxz2(FQX(1M!n8g&wO#J6dB66bS|EL`Q;$&;5Jzk
zF&V?bix-=^v-nTgd-rC@hULEtmzR!rChAYF{PP7dpYz7+FfOD$!|fB<>L7y`W_7ed
zfltI<+F~~xvUyH-O)`r=qu+q1p7rNxy%-K=QxXNt6?9g_jM0h17C8KD7h3ZgdY0GM
zl$1<kyQ}Z4>bq*_vV#w<YFwMw<KFtbDLwKU3WVm>6Yici^R9)mvuWiW)8BvO@wacg
zYr*o33+`CkMEWA)8TU2m5U<y)%g{NBBNIZsgT*hbmM{Iizeta`lIf>Q2n{kcMF%yd
zWO6+W%*PLuv5n`=qijFW8L*?~F*6u3@NpW1Gj9U7TB1A8RtU%QNA)TjHMF$v)VJ~)
z@UFI`-?U{J+ea-rd|+AaomG8S4O@Ef0W?LpZEe%)8Po4vFkfwmu6@DsPxd`}(bXLE
z=Tc<P9V-0?Ck}LstCKXeEu~dVV=?0UZ5Nes(E$ff%q)Z>hPEQFL5n9Iyn884+K-t|
zX9pUVYb~tmM>goBd|kdS?Z4hA9&Q_oIz8}Ac6tOC-*S@anf|2w^pDd1wxQzT>y2a+
zHM|7)&gv#6b+JY{3e>#>>U=?I3tGa$3-iYen>wwvZ+=whVLu;ZRAt$~;XP}EyGVYI
z3nkx-pInd^8&yzfpV9D>^95o5=sx*f^JAl<yJuRG=43j@cB&JjOWkJV+A&2S7<W=C
zSV#P}JnkoT39juqd|+8+l+nlUaA;J1-_~hUhmFZE3=b0;g%ao3%sEMx%<j?Av8b)j
zXkoweg`XN`*b57yV)F_nk5^=Tm%I*h<R6%m!i)8OT@1)O+Ow@E<)P7U^a<G*m~l1Z
zYNkGrivb&B@%)`LV!-olEKvO#`)pl(&$NcB#iP|Xi%JY})0+Al4Rh!A6ZPBv{LK9U
z6$-i{`3~Fxs7HMn@JWd-Hb8K?qLM|6=q8fbH8|CWR`dG4&hIyKT7AEM1vyN4Hz+e#
zu2$doE6CM=IpAV^!_@rcNj~0t{``!;P4y4lep4tPQ#tZZ=>fy{oG&~pcDFb_&fQ|W
zEzu>3{~cVc$x5GVt4N5mMcC9gk@5>Sfj#H?+V$mf!|0i{$XXJ0PuHqH56m8-zWqNy
zVY{B!t(L;1RRLBn%1oU=|I6>nBLa+GyIHn8g4?$jfD^3X=tO)+IPU?Ma55Q20ZM+W
zTP=L+frIae9xv}v2dAx-$NyA^Cmm((0i7f-tR(3hOm7LWX%*mMjkF5yC_g5iH3Y`P
zrN<-0V2ik+tqrTDwpWDjogvaH`MlgDpBIK;dP4g~pxjayJ*x3ua8Cc<ueM}1KBFFa
zmOKLZb--W3@e5Hu@Th*y2ZJ=Q4~6}LeJDYEox#u8Vz6=JXw2bu5xyZ}Gr7`|%FTo8
z=Z5$Wnrt7uX+YJs+MK3JpOE>ZOV^1(M+zNwA1N-hu=t6dj*wW%H@7ErtOIQm8DF?o
z3e8}p1|A<uves3sD;+&Q#HX?;r*>P_fK7w#lLz^R%&i~1xl#-&>Y3{+#fCU~K2cm4
z8YlVK9cTy9);)oCmGKxLc{bYNVepHcX~eRcPe-&0p;6{+mFwKB^r)(}wRHnZ*HxfJ
zLz-&W3f1sIIP1Q?er!aHyfv<85t`Ipz877_eFB^STq5pAUq!(}qKEWcQk2faU9X+X
ziMtY#g$v74J0YuTQ^nwIHDgyW%ly$L>&5-8El(Ea+5HpDJ^MV-+u`tc^dg^wjRpNz
zK_3+oefAeU;aS7Yx<l|gEKImrkC4p9OSemx=$tnbVRraoW|$i7(K=R^5GBlR4tc@3
zF@i~a<IzbYhxN~yK43^<!z>}ix%mEhBfn!qwhfv+ptPaqsQyDsYgTlLdR>|;e{M>M
z>wDCe93Fl2F}Z2?WB-$=mtvCh4-Yhj2x5*tfWfmu3+r?*qu*$qX2hOa-dYO&->k)?
zdY(ch-|Ge~v{{EMYAAeo_~pam`3^1j^^Q}Nk^DOJA?h_zY#`C&dAqi=;4e8~L;hq7
zHpn`mdCJ_hKjjS@1f6r$<hkO|Tl4cW*x6jui~p7UZq63hW9$Rd_t0g5D>#~b7eI#*
zXby>?Wt)da^X`Jo@SJZ7&W#W1FVAA{RC*iSL(^ujC>XwHh_9cb<uR5#_ONW}FC;i0
zD&0$rU62HIxcd6WhW(WH1>-7j*o*I8cDQx^RoDfGuCh2O${L%MnJVT)GGEC*%y(aq
zE^J>{DJ6Daj&)y;$h@q~NL@<TJo40S-0?zUP~;c=v}YUMC|Pvjn!<I@yqTD_em31i
z?aj2&_pc2Q4P-J+p2N)-rU~Qi)edr3Oq2W$4M88hHU{-R7=-wt@sSA~c~zH(4;~hU
z28DZ^ceXDcJ(IzZAop@+rZVUY%5oi6&F<vbGOI?fAD5q{^hi-f_PkLg>np)|)8v@(
z>)8QcZV<X14e{1&5jIbCmtXYf9TRpWr&lqt9U#BZ-D4bW=luhV`2Q+ans5HXw%=N`
zZ7H;9lD7XZ1uU;UOfshNzXLK>_^!P<-&&X7OdbADs&b=3kic&~i`}}V?8J@wB1Zf#
z+wIX;E}O@&cBNOKIw!)^lDpk;QdE|j*RQB^<8Z6(hRG2Y@34ID;lpA)pCqxdyu&Oh
zz*o2oSzD2V3r_%av57g7*_Ifri`54wSmX3LVwOBdKF;b-Jj;eVli3zFKz{VZv-01B
zkM<tjYdmmNKCb+avSdF?Fn7F!84%i*NRtQRBs^1!YtJf-D(@aOeGZ;C5E9zP4LKe@
zU>sSKgsE96sS&{v8~%lNSj32mnyNuHv0>g{un|&lc$%f4z>*doEXjZS!VnqKP+mK*
zdQhU-_Y1jI42eihxguh}YeC~7TS1?mc6)AFUiP8Jf^uuLSS&?b%Zo-HiXGUi*ly3L
z%IwL%z&cf(Ulrah&^U^)A;xxd?r1y+Q~#0&=Sy7k<8M);^Xpdf)A*dO55t`Uu`a*w
zS%M?);1U;H@yDK3{jz5jzs&g@$Ggh$$g{iG`J$T+vJDcQ5$#u{+d+qa&z|-8ewOn^
zousQ^J)||Fl54`3Vi}ZP9jmH%y{df`SMekDYP&A#+pY_}<)4K|<)5EDe3;$W+Iq9{
zcs_`yi+DZ>2~jXaT7&X!N2s($fd#Ogn2-Ww$6=u_+*M8X<U4tD4--pnvppBdZm^vP
zvmM2j@gE|4!QF(!Z2Q)1mc5DPUBAM5hegOQOBVTTxNt3VKv`yHS()wU*4CoD-i3z_
zg^z)S29I3EhG6bX1d^P|cOu@DtR6OGtI%>UU`0j23DtQ*v?p*tQ`5GliRA?|tSKpf
zyS=&P5IIhLTZO~pOZ$%<yJ7s?)a2x*g4-T`aN)uOWVgsi(^sl>xofgfsvh!~+@yoP
zdFz9ZKm7Dvm0<18qdUEY2aoOq&ng|<3r7AA_E>2gJLpKbFZT44QN`>1@ArSV`LTlv
ziC=|!=Rwvg55IMJlO0F%#dvr59S0xV{M~+~yoig(SgZ4(yM84%EUbc7zX?bCEk={o
zXmXKwl64t6jQM>$?9)$%s!e&E>DqM<w(A~xh`HteByS7trf^ZilL-;w3l}LN;69dq
zb|RCU+f|N&<=cg1=TwLUa_A4)ZZt%3IuY>C9J(^yU=M1+n0;}Y3ftcCi)VWXGKs;S
zNzl}|lM>aTT~$D%&_NOpM;R!8eRfiuiybMuI6iXb%zi~hMI}GV??@GWlgbhjDwD>|
zojz*Fn7*tqE3dEqjeh-ti_!-)Gz>^DI@fb*&z@6N))O32i3xUj9~*0rEa@e;#+H<u
zf_nQ0%o#gj{?yXkK1KOcKX$&;D<OXVOAF#BZ?CQ0UhC?&ZoG{t9&O_bA|7TTAEUz?
zHT|uNZJ|fp=%S$wBlGh54;kqwC>b(xWX!O_!Wy-69_dxEc(#0ul@A^?dWifcE3Y2d
zh^%Qs;xJn#IXK#Q`Iz(IOIba&-Y3~2FrAHTqdb?d%iF=Y<ayWWp^u9X_Ufcb6UIiS
zr$>eL$xR-al`+oVFef2BEz~68X$v1kZ0hneRkl8<X%QKr>5h0yV`SvG!Abp7Q_T@w
ze4@j-ua$_o=`#HBp2e|U{y*Bj1Tcys`+KUoduDQHGMP*WIhdS;D<LOWI3(dpI0VEH
zZaD-*(BR5_2r6=V;3A?zL<K}tK!u3MdZ2))crB|Uc&y@uiY_XU>B{$e)!max0C(O0
zev`~hPj}U;SFc{ZdiCnnt8iF2Ra=ccJTkN<#vbjAjfsp1cf!o+4AG)&GB|LaVdR8@
z>F=^XT6Ebj)k&;52E2o5=M!nrm3-N63m!f!cGq&dKIiO$hYzuSwYpF?v(A(LzWvk=
z@!I6~cbuX&k#mvDOnOLa&|HKhNT9OR8I7sM5=b=C5krCZd6H&<Sp@0r0W6Hk6zlyH
zE2$LMu&*lhSNX~-Ru_LS4h~1G*cMg1lRj(6YSO}A+FsjZ)^@tu(_OX?KIW)Dn)pCw
zV}zC1Tofz941@p8$gU7>mhHM5?1G`Tmfhp*n!;g0|4RMRQRBoyiLGS_&kB<^QHuPZ
zgMfoD7sGo6+K9#=j}4u}|EU7VY|kE6v5l42el0>VAmDWYd|E=YY4)!azz<<gwWWjG
zBzzcM8{oU!N)H*TLZy=CKW<4lw&%OAYsE9$#M8rQ?P^&4P<58N30G2*<Rf_yX2Yyp
zs?R`g2Y;n0eiwz|GD@dGPr^`;-+~1g4Jd3!{f3EWBo1y`or5o+F&k@W*(?jA7H_cY
zMu<Xw?S^@+4vD{xV6W?U-#bTHNV40HMj5;P!N0WGK6b~Z8~OJZn*RxW#lV(b9R5QV
z@{J3y>OgJ8p!3muQkA1^CN#ccSVL%{AI0LJ_BoU+XlIz-^MV(|XKciWuWVQ{cf*I9
zuX>TCh(|trdBaWf*B`6l$6{{Vz1_(c^%o+$@9wM9UXj1WP5l{f*>CscG~xxUwa?L7
zK(oL)2g@kTKtIgzXo}{^KpC2seJ*D4yy|<)8BU{_z~0lv4flR2KKhp3eczT7?AqL)
zXYW}do_k{NVX-ooAD=Ny@>e668lYtrYk-_lsG$}aS^P9xuD=bK;$1d<f@sG%V6v=l
zl^K93)=HQN#<KS?`%A8#X2FaAo=#v)E3TSXL1zU(6I}<;H99P>thc>?K%8Mc$B5Cq
z+sp_1v*zOA0T^}D2JqJU#zC9;cm2BR8@IERrQ4onV+(&6UOVCE`Fqx#+WxOXNe`nO
z*p;aqj}|bh<Wn7rjXGc(!DsAV{qO+3R4*I2x$9HkcM`|gqzW;BoxI_}ch0`8+^~4t
zuAc$&#qGOC?wNdQLG5}ru28?FPZ#2!`VYXL-LSrkz#thHn=Cg>k7TD-XI(Jg3D`^e
z8O-`?qlt`ZFk!X;*HXJ!<@#u6cm_qlv#j!RQGl#Prjj2=Mm}b6F$(X~+n8<TV;bD6
zci#bh`wl6z5GXD4XIl&nB$_9Z2{Al8DH%q@#O4Mf$;r$XU~j@BLY;-SY>hZgwv2$q
z53~(#PQzYcTK{Oufk`>|alz%%Z0Yfop?!N$`!*9>2eC&*+GX)cWXH5-fGrZoY=#+E
z|NB5`6y!&jZhMA}DLhqKJN_56_Yr4Qk(`qQ-^eiWX`%9Hxr_zYfS=rf$cn+dU<0#B
zFcS(Qoa}~%ovj-Sum@jy=8b%IkN#HY_zG#%DlO~RyTYL1pe|Q$z9J=wh*;PuReZ><
z9w5ruH#a=UhxhKhe$lpFwOR^nUCGJap6rlJv`mi>2jENV2$uwn)uxWxGv&L5wfC~C
z3XL}H2VQ#L@ZHUqEhbNJ!B8;FY8FFK`aiXrKnZ3G$rnK|;Itse5v%bH_Nup8z$}hp
zV=ZuySCHA_I<)C7KuebUaI_S3o(%L$>iiC)^P3G^jC&9QH;ecD53wa;Kr?n&zwg@3
z73WyNATggk6ECpgYWn7iU&Y(!S)239$}9WjT)*eG0e5VBS=^U<cEFx0=D4nQ`M^83
zz04-(o$Fs)=|580CkO|MdPy@xFQk}8(u~9dnhN}7^<h@*V2)y?&E|zHOI(%2o)e+D
zi21R7{^kYZDBGMQda!f3`ak$^QSX|<-gHgUcIAnQBeyLXyR!DqO%LvQUQEqp>ql=}
zI%d_LwHs?{pZ7o8A(@XaPDZid@ApBA9P+5bz^XEjEu%1<sk6khIK68J>n5JnGx-VD
zQ|&I+UpY=}{)xS|Zp+;a8>OL_AnzO_ue;EuVSZg`%Sf+eJ^2YeQ#^~ax^{?>YWJT+
z$Gf+z6P<rzqsL*WAf8nv{X@tLID<wEuZk&+Tb7?mH`0sKi}}N!;V`l5PB7=;UAx3_
zF%7E@X?w+&zl%rNxF1;J-upHb9qh35{!jcz)StvV14oGyKOMSfNyjZE3)UT$x<lh~
zRE$9xMHz%;oQ8o(b>I&0<=NuIuEWfEf?X%>();gai9fJ$;?dv5mwT~8>~1mbzJo{n
zpWMH+!@(kD^-qV_EhyR2amhW0eqyPkFkvw2vqsjZxvka3Wn@4^Hm>1CM5VRB(eGjv
zezK9=G%Sni;EPmU()d5bsR=dy04INT18u(EXVB*2C|Ojx`%RNd)aD~Vqpk2%r?JY=
z4;%^woh5G1%tDhZ#fTBA6g)KfzH4iqx#HWGcZ;Jno4365E$jW;_!c<iL))4sw$Hlv
zr=8Qq_p?6u>GucpGkH99VD6U77K!JlW_a92TLhJ(nVJW|kE8J%<*5$01KxM+-iC5m
zD_M?s)+pzZJT^=g!#uJW9-gP4kj1c4qZs0S+e6Ts#~>meZ0MHT9~4Mh;fL`U22TBj
zLn~IUTyYSq#Lq8(am?7;c<DncR~~$Q^~!ZG-L_)%SmK>VaEhfb5FL63eZe~NsFIi7
zHg?R5%dw<gdXV59dT8C)(JO9yY2C`zuOD2wlImPpzaRauD{O8p0FtJ3w6yKOI7EJQ
z(gO>akq1^P_5krk{eVvE{M@0Xgx<pP2Rkyi*ms<#=`VzamTy)L5qhoT??@|?*nV2L
zeVu;Yx=$g(FDOeoH(<Cc28Yvba_MbE+78u#f)fqCpe*qN>vdc|&U;c>tmB1c@jC)#
zNxhOJHpvO7)0dz$iT#UEd;9k78=4T@oKL_Z!h%`C$pNbg(P>h00o@5)6Vgk1v;pmp
z!bX`%oM7x1g%%%7e3&6k_cx<ucsjpAukO96=%1{4r|XAPE9~yQvG5CV>JxTaKR$X9
z+NWgj_U#`OZrZ-1#c<gQM++aMR!}luy6v{HC0?^FjIw>?c?Zuvs|gygpr#0Tgvr%V
z8B#@A+A$BM9x5&1!}RNWZ7TeNHP08j*-gj7!->%{)B0`{&&PuC#>6M62U_GwR@)#E
z+OUq_&emzi3jH04568ws7nfrJ)-ga=jAdvk_?)5WVp7?pKP<7H*)eECmO4koZ@qai
z>>1z8zqL^>8Mlm=id{V}-@g5wsguxrs}2PE%eumeLFJ?dmt&VbrfD-e8W$Ap(qG`E
z%f<zDrcrZ;nkC)G8k+XNs?o`%vMk#y^zoIj7PYtSwCC(}<nL198wh8@oqVSXpFzcN
zB4ltD+-Z}~6+B0p-1e541Cx3jE-(u$x^lbTohG%^=Y!y~oSi&>mzi&;wo?IIy8##8
zifpHvvs25LzKSRYE{UcuFR>_{TcED2JGGs^1i-}Gk-+y1cstD2$F`H_>{J3dcZNzY
z$FRIzPM{cqD%f{AQIsRks*|jOlD|{U-x-!qo|2R@x4mT#2(nNZ6{_8?p4_glrz$lm
zyPs{RQ7iJWM9oku@~}j$OsG3Ub~<n))F?ZQswrJHt!i2*<+i6@A6#Wp52@O<+qbJ-
z{H5FZWLdrf+uam(iMkO!-gG*r&4$GdvqQj+1XnS$KNc6MmOrsfVE6~1`y&CiBY{t0
z?*r?y^T%HtI1rA+(y=&j$rc(8#T`3$Dl;94aoOv{Dg^C4wF;umt!^ANaNrort9Z}=
zTpJ$6C8js=D#SOjyol*KPJF+Lj(l51bZlIY;{UE5Zlc+r!v7V$|DVQN{C(A`CiwoB
zbk~Z#Fl8Zd8>Ggc!&_W7e*dfEUwvi#EBOD@HF!KI^Z$zWDGb}5{}k=pj2H3a|1|F9
zlq;BD$WH|PLOwk){{`=}Z~cDPpJ90=8va3l`;)v5d$83{BQd7u*(!iBu$5=J8LK66
z#-V~3k@<g74L-T}D(vyP|N86i*|2r`fQk+s2A=s-wYoh!D`RYj=^O63{`&iu^}nv7
ze{nJU^3T?i))%aLHp7URMINL$rLgRe`m^Su&1qSg5gc__jB^-@G?y`#Z_6=yx;2+v
zN4yk&O|sQT#dPY`me~<R+?_a7v~Sz1lM5lKqg<WJ+KD=7d8e8WvDLS4SJo-!k{s7V
z9NFM@cT9HwxNcpqL6?i??-lPk+{qndma=yD#>C*k_v_Y`T|S7FZeZ={0o3lGcBM5Y
zAFbC~Yj*z?H@4>U^jqkC<j=Go?|e0@!qJz1zP<i8a`#V<8+qbdw)T=Oaj6kQ^fkwd
zK^XIvs`o<*%h>)IaDK=393O2<w#G5#jQ^WeYJS~Y?7da2gE+WK9Ad@4D$V_0DO>B_
zQr3$DtFUZSL;&gh>;`!74-CM=coKl4RO|f%`S}<*1_b8=H(2@H#Uad#fWs6MB9MQ_
zcoxRO$HVC99FH>>ejCq11K^aj@rb8N55?K>%qe~!&q6MO7s)uysw?Cc4>RjXGU+?3
zZc@)O?9vW!qe&8GQ|9=WZPQf!{q6euuvy~~^rk>Mkgt$jrImO6%al3Wc-!r~?Ro!2
z(tyC+BYI-FxKyp$zP)Zs<1|=}1l4?Q{sLn!U}fWZrm1yXptMvW=E1i-hkvDv1;stj
z!ZngTgR^#%Y%09S;XaO?3{*i9$cV*q1o$y0yH7c!7R%jwSbIWX5v-YFyIT0rAuRl(
zp&x%dMCpL_|Bdw<H)5?6dSI|`9|Ini*T=;?AxV+Ev@;}@)^@PH7j=llT9)Xc&cRwZ
z?dQh2ZZYjjhV`sraYwFbDQUv6%h3|g8+*jl+r%@qUn@H-<D9kDa{;`J2!a=4ns#Y1
zN1fw8uA~t(Xn{eiDsRBN$I7>1S4OyH=)(dJUa&i$ZOML3>r*x+A+kcWj5^C$)G_Rh
ze7Oa|$|rfk%7^G)R5N5WRwRuzCBEFM4EqhsRZZ+#EFH#I&91?k1{;TI)AGOo1i$*!
zU5CZl6W9wooj(PO)(>J6yYhEfv<#z<nh-EJ`Da?D6d0Vu32AU@S`MwTWTnHvp}?3G
zWX<8(pRwuUjuYZ6>}Q6xMjVF)=XZ9c*z^OeTWUhUfL7;XxdTVB)L;V|$`Py7S@vw~
zyl4g5d0{qzIa%6lvK-Q4hY`y#-r!V8s$n-~*l;Fn?mu<tP3wof@yMeh-$4dEaU#X{
z)aHE;z4QB?{P)B!FyIwjn>v1Kr9C_U*CC^RS~f!bIPsC6p1u7+mF#&3J+b=1d_JIi
z^1+Ng4^_2=NiRt}d`-Fs))u0(iC4Oe8f#c}q8OR>ut(7_`E-NJ4a|MTL>CR-jE>?=
zC1dj=8=kAT9WH$r`^)b7EbhV0SI(+h_2_`F?|&0(Oya9!AWrL?YqiuUV5R>nzr~i;
zLq436d$4Fjl)$EkxXDxe>*xHwY{yTBr!JcK6&l7H`$?ozG5D+!_N_VER;*1y0)keU
z^V0}O>%%S|B2l@NK^upEiBl#|^2_wO)wt%jip?xROxCt`!#1k!+r^jNj;pc$b^Im0
z`z2uF@I<-ZOgpQ+7EA*gYsnJy7x}F-#YwiFK-QfifHXA(aQ+gIf}N<VoF9UU*7Q`y
z8Z>9?v;a+0JMmtN!E9_`hJLlaOFcsqy@W|}Qob0-HG<VJ-v?U8^t92;8vx`?)klD9
z4Hz_W^Oq(}lCXw}A7mfRz}Nu|sKFD!3oAVHpwngqc|3yUcwB>bb*HMNT>X@>Mk{9L
zHF#Nfy)EBzvW^RXZ>wBa{%+5_Pc2XD({Ox-{o5=X)*EBh7|V57Q39)zGl#+6jWDv7
zDnz%kuEB-%Y>JY#*t|Mg{LoM)%W6RCgRQ8(<mYl}KTe@FCM}o(n8P;pEH|w50f`b!
zii<g#KYKAlvfIMpLho~X<t6ON;?LmN#KIobTo=JntiRB%{D&A?GBIFYhHu&+_MN&&
zX^sH86iNC!xo^STYaDHNlH6dnYF42RR#rh<f<C|sH5c<>!_GTwC(q?`#e1yZD+qfg
z_Pj!Eau>#pZt8w$wopOxX}dZiwS=&{*im-W|2D4`4~vKSGG3y;s?V9r{>~l~SI9E%
zQo5;KwX?M63IRv(&nL5^4~e(LTMubx_1^4&z&<$Oa+ml;?aFo->1d-ApDbEEg#A+a
z4~bv+KGA_4l)OQBbXC?sR{$Q=Yc&b=eu_oK-n2j~YpTavz!iymSM@fj7gBs5<f6Zz
zoQ-p<w^iTPke{(5;umEW&JaNzAj9DQ#E!6Sr)%x8x1YNfw^$XPbMv`$k5YK;X?yJ1
z6ZW;Y)AQi`(4}yC!I9e2;ulBixohR~;Qa83bmc2tRGzLCzuazL3)=Gx+dB10rKiN7
zFz`{J82$@wetfICTIpFmLbRYZim<KY_gLv9ZICX4lJWSUbUcH<t3IhMY=B3*UV`EA
z#{m%V_`CcbD;>cjMJyPeOb6M=W@7KeXh|QbXhSbqwoMtmL%hts2b^(?tJi5U;Ik-D
zKV9Q)H6w<_C~5|Gr+>|EVmB>cE*6PJ%f-*NwcNp-wYB<Lwqp5mwwNthu|h1wuQNOm
zt6t&ySG&Ll;BPxDfrr)jXnUw?yB}qkzs)kDGm2VxRj??82kcvR)_y%}e=p0cdr5h&
z)k|~F%zcUNWMg+$R_+uv)vwLy-FrIGua*s0<JEYq8-Pn>T!au-R15<dVnMve+T7Q#
zPz(}-3j49g&)&k|ccaEvwkp=ob9-^Cv<h*MbpVVlh#%@v2LTU6SFq9K9e!_0o;9T>
zn+|!(DeC?e%MPsiapRQ2q7NTfH0sUE-@5Fma%lO1Wy@b>F*EXS8L<9n*_)TYIdc93
z9|DdY-gw`tD>RBs&=zy&9@x7y6s(1#5nXT(lYW&54=%m!@(@;>{PXhSVzK^!0~5)C
zEH$%)A#yEAZfv;3#&gV{fmtDK$AnuRoZgJzNWs~WBTM$)bkp$Jvxnbw)7~XVmeej@
zTs3=k)#AmqOT?kF_Bmx`xqtafZduvbGPdc)oU+n!Wo6?^%X0YUcf`S2Rf}&LS+(Sy
zC3|jKTs4b+?ZJ<#k@Snz7`epQvYhq+!aV>{maBhHw*eLvYQ#&%9!==u+mtzMCi`Bz
z3{s#!wdU_C&wwvwe<b^)@{ImXHD95H>#y<0jWmf!v&Bq<Q5Zh6iF`%17GA9n;hhOa
z{Tk&NTmc3cn`SuA=r>kZ^T+kqWEqKgzQuT+&G6WV{PETLjl8oy1UPUeY-)vL8nrUR
z{=9_1{#Dp4+F_(rxF^@enG*iu8-pfvFK(R}A7u}Tp6qf8o90Zvi7V{+p*@PaxuY|q
z`e1kV`~3WRD%Un&B=7@{<p$hXM<_rUo|PE-$XDGRQwX>RE`;k?e*V|=n{-{22H^5*
zSX-`L1GpS#5PqvpQ4fJHF_U#mU5w$3F^_LD8_Dj3xwcx&_=1mPHDauK$baHRCH2J@
zG5DfiwM0Mb3%MVPUJ*l)wMct|3YVrJ)QGp(2ao3FEX$!D7MJ_KQ{tE=-p@LCFiZ4V
zx>U^Q*zw?@rAzs<Vus=q*Rf>rx%h&YJolXbDz3kfvDY;0%Wa8$xm1P|*hNc?5nJ&v
zv%{$&4J9aFOgnh+1Uy#$q2EccuepX`vkkn2pjIos>PB!|+w#~`h(VnSm|l46<iHBk
z+cv~D#&(T7llFGRS=?%S%Jw(gVcS1!|Fr#Nt3$LyHx7%&35={K8^}f=y4Xy%h^=Jz
zu!q=_>^XLTz0dy1eqwbTW2W1ehi#f^zSKfjf!Af6V^x5kZcl7$mRiCJIwN35&~<Up
zwIk>{IL-g+I^+K{{H!4O!FBmxT?fPeU(w`0f#b+aVrJ`63+7*{Ej9VnN2${wNJftI
zmyaw-QJzUo_Lrwji%N;Y|0v^YMN~?3bV^h$-nbeWog9t-TH|Y^@vPxX<}*@miJlS_
zH6_~rngIrBf*y`&^lPLEyAd=h4fieBR`J1DnE6aZ%@U{-{5LMoD&e9~0tHdN+0mV%
zqB=$6H7O=Js;iM<l<}nxkBVZCM@6ZrBL%#=+1`=(PDx>VQ^Z(F76Vd+#L>v|pMT0+
zCh|rV{`j-MtmYr534U7sUtwk7KQd}gR8-f<sN`r&{Haxpikj59gq+2BbR=i<-3pFZ
z_hvxcV&g}aojs|<`M-ntx-E%WRx8dgWswIDb`(X-4oS=I@P7&)=g$#pAq5dPrM%T&
zeU8SKKJZVvjrXH5Ph(_^<dgN!`mhh#hke@ew*Bbnz<wAju)&}}dDs4+p&!x#Qwpq$
zIPdib;jZTIR@s-I(;U~Hg=z|kZLcp-51VP_9v3gtQV>TnD$(@UuD(|HxbnF_#d^O<
zd8^sJ9ayJb4Hy_>n!q570qr!P02%>k7=eHM6)zDV3{ai%n~3>UY?Lthvh7M`Bb=PJ
zaI(a?LtqC+_#lvzyL_)AI_VZsC8CwjMU;qEhtzc@knA-3*`LBc5mjsp+ftX#_lszD
z+W&^*T0fqNX#Tm>I}KcM_8&}<(e{vV)F7A+6v;7>cK62M_)PM|#Oajq&_wx`%O<rd
z)Jnr$)8$)yW-ea8{z{*I<@3I??p=TH`dNJ}toqEt&wFR}1^s^2-(KCj_iCPp&$@K>
z#+b6o%Cgb=YmRI6ZDUGtJ%)V^To8RpY*r6D@-dD!Cok0)Xu~)&%@yZWqcyt&x)5UB
z06Q;G%5VV_pa>1Qdgl7-nJiDdJ+pfK%<8>ohT_G#4;}jJuS3~<{?g9NT<nYpcU`tq
z?~ZGc&HmxKOvwgL?W2@8quO`(7euuu<k}nhx$Oq^uvTi)$r17sFgr-N1=`w9GdRgD
z3{x?aPlo%qf=@OoS4l2;-Co$^T&+>3#`#RHbhv!#VQRi=|JK`NrgOusJWY8Mdt*%A
zgp(wiz{Q%f=G!J~R<he(Vz;qzb+_<|;!PCah^HLTgo0o-W5iPppz{206Q>)X_-A6a
z(p<lfwP)Xo+5B6A6-<Lr;!dl_m?7@K9u_n@0_J<>!C3(@0f<KsE6_7t-i*5tmO&Sa
zdgwwO>7*8uKH__XP5e>z!I+vVV0TXA-_cFIy;7;P_kSk?{S$8c(Qbc-CPon?ZEk~$
znVs2T{YiI4XJqAjiFH+1wC2WqzQ`pRoVd88tC)6#ue<Wfd)JF2%ro<EgN9eG$D~Vq
zebbBLMt1jm;PI~LUth289ivQL<=>rDiAfk6xbyrIxDqwu$(`a`^%wtNS22w>TisjI
zDg(T{1H4QzSV1dN#j&f2lzyDwtN1WgPF$bE4hiRa5yB3&`;D#n?Kkc3Y_!;XzBTNL
zqY-}X?-bijAvHLNUZiWH72RaXC<dk6c(b(GBm}DKI#)w9jNf9<5kJ&DrIs^K_1U!$
z1E>7Wl&}1M0h|Wj!psx60kaHZ14zEYTzDJcoD!e1LY%<gOP07|OOCT8{*>)lU|1$r
zNP$%~LYsU3R_%izylC$Qpt;d@Bt@AcOQBH95FdcknLo`oiQX*Mh(H`G`q&?YEVVBe
zr>bhsmub&|H)7AtqIx!=8zODW*%ZR+;;%V#xp`tcQOtf{&(4bCob|u`wmyh#_T@w{
zlV}b6YSIj9xgkqsHD@=Gq8qoc2mC4EQMJ78DKXD+ZQWL7wf`?TCg%dWg+tf3F${5%
za3DXUAwyZAKhIM2jRxJs!sB8gv8~n`WLqN1rhNdS%^gt{+@2=gs4vO$+k7re+vw~I
z&`tjd{pb{XR)0ZUh4B)!lD*SjcOIveiBlNQW)VqAZW&`AVn=0$zfJNTt$`QW8%X}h
z`)|>Ge!S8BZb(n}9U<T2{y__l@~s7jMvEXgBo~eJQZ8EX?GIuPDN3})mHPVnQ?@Gg
zD{XXiRwzbA+d<gw?rVS}(<cR|H`d0qxah3#caY9*rHAkF2g;pVAM<{PXggs<<&vDX
zZ!zxM)}aQ5q^4(;jP}0<<*|*Ec`9wIo7{(&8}S@E#tz7iP+JSRLgI5vpCXJja>D|S
zELUj39(xtAHxc8G)||mULx0M4eg525E%W+?#g%noQ_B0KW$yd+BX3;qzWvHxQI~xf
z7FMQjzGr^hJa1@!gbipd2J(=w6fM*jQT;^c=8+D46Mx+vn$+!yj?MWTy_=>bU#FjB
zwGnZlsxO=qZpL1j)0hdig6Dy>?zrXp4abqhKtQ4uQ=CEGP>^pDaSY!)E0e_-19>q?
zKx1;x=CBj<CP&4`d%Ypo%@e6}r$l+>HJh@!tT3W^V&MeT<c3kvF6FXbqDtvmwt7vk
zf`~Y8)%B>r)%jlS^!}~l9aroVF;QaY)BE>tW9?lY{9uEgN?$+oZ6ywME9NZYuJ!s7
zaqO=3xW}=dz!wk9VIzS|oCBFi27ALSFUNE;?idkcXl%!LZ-s2=eZ~5eW(`pg+}`!0
z2Owt5+$TC0xA3=AJz@6n&fT7%ATJK(NZr4(5D$gf#OKPp*td>&Z72nHKQ}_~lj%`L
z!7Qfb*a-hv_`@%2y}`5X^;|VeAkyfOebqyTRPRHshH>6O`=DqlFSW>v>=lFr@uyUy
zyZ_F$*Cs68EPh?fHtKZ;CM>OC&b4A<K;cxUH{LxM=$En|zyq?O->@Py`Vn<(v|VA6
zXI~V<U}Knv-_Sb1+r6;QX_b7A`dR%?on!V(J3j|X)BXF=?+cMHGaQNla<?<?8*&2q
zO*uiO1i_*EQcfs<ZkG48il_^a90Zx!5=1+7uk9I(9lpJGJL2rwnUeF#Dg3v$?X~T(
zhwwcPH3z%+KA}i{*aru}Mz-hA53m{RZ*0Z^(T;umxX56~9v7LQx76*`PSB=ZGV-d_
z?=uWLANZhz6<hmpVH%{91RHTnGGfMBQvng5Heys+*J0zQOz}<XGwy~pD^^tuExfj%
z)6~3y9SSqzVghr8e|78Dq1%m<y{*NDQ5_1WjhK9Gba`oV($yaHo}9$NsHYu&AH#ms
z2^f;)DGI#M5!E+C1H;(u(IE0+<RW|Izrm9XV9L0e#WO|6ne0K*`uuw@jp}u&aWSlR
zk$jz~W?L_bYrA$5)h4*Q;p19j8-Z~hi`+obqx{D>YJrr+g-xhVmO-<RQf>HsJQss{
z?$iIK8jDh8i(JK~Oi7*Ccic=g39A@lwh2}A<7&Kkvp=lkf<Js}gFa+u*PyLdK=W&b
zmA5>ci`EGzZeE7=`eWX41S$+8vnQj3mMC1<x|89d<w{>6cJdS|*I$C0-Zksa-Vh(K
zHpW|D+i<NUU!1$F>WH7`teW$DH7i|(Z~TkR)z#1A8~ird)<IpU9<deJy4XtLTQ}5J
zWgCkYO+)Yl`ZH|t#dN+dMkD-z9gPu-{4dFSoQ?vPK4vs%(O;I!L$2)jGj4lbg@#93
zR&f?sIK$y3PrVHj@^eZ%x}$dG?MzJEnYSxCrekSN{)B>dWgTPaCQD3wGH)mDmbEKL
zNy=*#;@Gy$5z;CzX=zF#emS>obK+Ox^N&6n&09VCsH?+adu&n%w|ml+lgb7TDrJ+d
zygJt1At}~=SU!k}opj|yUOH%C8Jl?Jq}UjGa<vxjX%!MOj$QZaxR8)mo^Z{)A?`45
zJayH$b_Mx=9d}jR0@}&|owk>4G-45NMlUs^$Hx?O<$1|GHj*RWs|;^|@sFp{5!G56
zM)0l-I}H^CuT5s&xL(87zH#D>wZn|B#M3Xm{F5U-^~RdrH8-ZlD^(94>5xC@#?)pa
z{_RH`%~Ee1l+Rra$&m}r8SB~PE*%ElSXz4HpbneG5@#Heb;Kgl!fqXr6-T#d0USAO
z(TUh&fJjoz?Xv|V8WT(Cc;WF-jP;*(2t)yNG2`ya5k`?u{+CD)?>54<8Okdt7Eh~6
zN50eL?hKSWyZO7~>EZ$)ld7=(Sf<n)BYPKBE6&NMI77yJ+?`8HJG-ye?;(t9b`Qc3
zLpp~=Pl^!^-3Yr8y|6Gl6piJ_Ci6Vt(~jd%Uz5Oyg?#4|Z?PYTiI{tOu{ZSdGfE}#
zK#iK=GXjJirVP0&ah8Y~#(unqz0pgI8D2vKBQlrHXs8z1{Da5fzzA%Owt-QVaAhoB
zKdsa{ZiS4t;lQG3cZ@sVrf?TK_G-<(Ej7YlwMakxopKNRg6A?t|ChK`|Iz=0%;#sv
zuwDVT59y{A|LUub<-g4|V2W74TrOdH2xJ<<LAwgsu|;bS*SvE_jbr(D{zt@>B34Xf
zW$Z_eL#D7$%~&(w@~nwVVKm~d=Et~WTps@0qAKC9*|M*OP;v7ZHkU^TU4KU;`=@+|
zHJRUZKk_XHCzHf-<toogTtZe8OyEM#sDAk#09DcmDF5x%nmgX9IlOieA@i1gOvH%i
z*nR92dsKn&C%X7ihil1ZM#rjP4fNQnyhfzy{*dcm{SWI;d8NM{JI0RdV;#$XAMk1j
zO(UDYm%bwWSCPhRbieb7SAV-*rs2Oz9Ohay=D&i*bAMYBMB}*<Kde#}`tVdA%Z?+#
z2H?lT_3zY|fq#U=pF&)s4p4GE{Ple^=InzH?AH@ZJL=y#{_^Ra8+T5+@?PjBF5S;x
z2mPUK(k>bt$3m0*48-(kQC!pv%^Z!$?RuwH6ZcIo7j-2iOzA&;-^7;u<rXDtMNj=3
z9?tfT>7lac%Eq&&fWbGS&-yNei--j-w@O?n+NeYYJ7Qe?^^T<z(L_Jg&YR)5_3Ygn
zhE3YJ@%GOh6O8(Y>t}!udDl}L<OB14`k9dRRDWBv{vC$}%z%mhZS56v@i4#?Uo-c<
zIWthb1@~SFn0J19cBKI`O!uoVnRSFXm$mZ7`Jm*g4!f)|LXCdVr6uavpD86JqOKfu
zY{g&pby?49dAxo`^dDdL98-IY5q*JQJbPhn3E?ARfsau~89&w9io?V9&6rn<EfLK?
zZ&dRB&u<64hiw2|u$Cy-{HT7=+c|q(*g}^7hIzbsHUZA}k@2H4jDvwNuk{tuQ9<xT
zSR)S$c$8K8>)B8GD|BMeo6pMwg0ROuip9|BCwwB+nJg7HjPLu6E1Gvhr6ltZzlx71
zb&A*U^tvwWEYWox^wUnzPaU?zy{g?FqS%=;`jb=mZ*P0rwnw$|oGwx|1=9iNb=&yR
zZHNZ2j5Jbxj-+w@DRx@@ijzOCO@Rg#tDa-0ckHm9ZNRf%<TF5^XB+68ACwK^uH&^1
zvKAWjh_BJth35T=2{~g2^>vEVdWO0FLDt=Ts05W~#Pc*YH>thtVg>%6ST^1Tgao~S
z2<5TxF!GR^ZT>02c_ea#phQv$!qLo!6=cwX-Z<BtUO+V5e@1zU@74z>ljs`d1>qkk
z53)fT>!>b>G%nv4$*k6YAD}1YjUuX=r*xR#p68!_>gnB2zhKo+)=`ypJSk~y<pY+%
zf3a4+Mzu7W!=^T=E6OD<wQ3tw<C+?69naI>K5L^-Z6^CjWa;vg+FWf?cL~R=`9&x|
zl(-}~$s>}t0<x9I^SAW(^>vzk2b_=bveNt_Wut7<K$?+aTOA$1Bl)Q@9ClDif_M*t
zLwHMGHOeAftuz5R^{0qu!RtmEbWKq01O6s*R_&0-nb??_rV&178kJQV=fzMO#Tg8T
z9Te$GVpBLs69gxaCIAQW2z?LzMB;-!>H$~sw(PX_;rS1C5N(L>gPs%D;`s)9ySi5L
zXfdKqFbwnx4{<0vZUHgq7Yv7bj+v$b5bDiN%l-^pAP2xZvAj(UcvNe1o}AN&KLgJJ
z!F&#0RF9r}Pd+~_`@ESS(t>>gL`(oOf8e=nXXCjApn(@qUx&fHG((X!CYA}!15G5;
zm^>4d4)B7~5p9TZOuj)nsCuMp5OpZ!AR-XKRI4PV$q(M(A1f{OJ4(wA4g$dqP6Htf
z1RByxJPoJ@MJZ(f(S~#l<x5N(%2$n+lx%)c9FRT;hmq=0vvLivEgWP@s+fU;mCoR2
zi&l`bsF~#YHjsT_d#w$LY>V#$=>RP_9avU9DrLLD`xc!D9tJoGk(zsu3G;kQqUnWc
ziLTTSz*>Q%A5hP0NNdzb!ljf1H3-p$bdsi2deibHuIJt}Y1#w_S+7Po$mDgc(6bw0
zH==0(2a5<Yos>rwuHY1+sd~;}svRbuQrS`_S-5%({v&z9+sd?nIgC<UFn=+46?Byp
zFj~rxnP{wGlCc}o2H_c0K43OVcfZk}01<c+P1SS6BY^jZcpCD`;3xIp;Aym!A(Q_Y
z&!F;y@HAx@>SM?r=pkSc5``pxNERA8fWdcUqm=#AOr^h1YKeLj39)mcNm|g6v>#ug
z0a4GFFsXYqPD^DQaHZrUF-tHhp$XHF)h3RB=rJT1M6HSB1!YsYBuA{2A}tuv#&weI
zE%B6c^SJ+?!H71bHSr|KR{24Qn!Euz(Hx3oo>6}fudM;w88ofiB0IiGSK?7CJwY`j
zpD806*i@3&kiQ0B2l7}Hw&aSLhh&Q>h0OkaK{+VxBIQ__n$*SU5mpZ}h-CJ+fM~Y*
zQ4`!e2H(r-o2=iE<zjhctI57%lygC*2Ha@QMy*VLXz2!7NIi#y9N64oO*tk7XeaZ*
zWNfuNC^5(oHRjl)4htgSMaqLLmGXpo6v@+uo=RLRrAjc}4Lnhv9NU1c(Pypkje2ch
zbP3KU`N*sva#4E)(Oy>0Y_J9#19@c6vn0MTkQ(&3R2y4#Y)X5Jh{S+R%L!1>sF5`W
zN*@2?aspHc<O!}1C!I*jd9sVk*%6&-8IVjgJE1fUbCUokK+9}f=iqIO>5{3VbI{J3
zGXWk$PYdYf{1+nr`G-~27`J#MJzT<N5?f>D(I`3LP^x~VP=qEEPeypE=jt5lIetHa
zA8(^c24}OOw^pKW$aGY`9FJ$qc@WLr%=sJPDd8F87I7JRkfE0wom<<D%KNc+zzC+K
zk(CxQ2Y$S>m21UJnqEmwU#+5cljTdeIFg6zPf!hML+SN=Qnh9x%Wf#+Xgvv^`U|f`
z-3<8DU(nvb5W>vR%atd9%lQE&UnrH(%aNAG5xI=+idCkef)J(zltdrIG_@Pi0&p!{
zkRE>oyH+p2xu7k?4Jd)|KR*CP&=?JU9CQZ#BrXzjP{!0eF<_M1Z?0Qx%vnJfb4)YS
z%3kMTL~FL%P|l5!P141LYvMwXsdWIm7ODMfYxrCIen`{BXi59c=UW=%VX4%|jk-#z
zNS$0tc~%NE)WzrKQ(e(t*lF4BCS8nnk7cV2x)2_CL(7+RVWl#y#Kjnm!A-!1(i6pN
zz)|Yr^B;hzv=6C-27O$%szn!SCA6sizQHn~d6G70RFe-RADTG~>OdwL^dT-V_|a6k
zF(;RNhCCXmZ_aKFD#`NDY6hhw51GU|f1ZGtoMiHcq?y5eCNEift|T0og4ju23}x5k
z5tM0J0VExaJ|k|B<OA~?I<(Ps$W~$YF`}QG{S)n=S(tex)rqxgEIQ&?aAGe5fGkt?
zk%lropbPpl@x0V93-Bq?#Cef+bZk=|g6~l;v>4KxoDW40osf7R1q7I1;%LeXNlVIu
z-Y7Ao+>jjpwGv0_kR(7%91T*M^2TaEncK`OWsad`fCE`22#Hp=c+eXE4X!fU+~h)Z
z38_R`eS&O0Mqi^nL<SwPo0Vv3<|FB5aPVs4c3BqjaiBbsOTdx*6sc}z4?+FtuR(&4
zN@Ve<+4dHr8hAIr3C24>V-p99&}L_%nW9B-*mg`9#1k%fH<+@|kT=1#qH#maG-b~R
zCTPiH{=t$<(BRbftZG_)4{aY#P%YCjwu<oh%SUWubHuXYBfu?VA6#_nj)n96HCCOZ
z9YpE`jqI`U?b;3(x3SsVMqEz07M66|aqH}DGMgbsWdA`~papiOkXS&F%UCvh_=p-R
z?=%Wg^XlH-Hv3j7FAbfUaFg-IC_Tj)`${ZB2{j{z!%5>b3ZN|W7fRgLLgsdryoFAm
z&#qO^?XGi})<b})4|)z?q<pO_9`B~-LC>gv(>6Bv<<e<hNTYwEAK%Rv=u3C=G@ia&
zzZpawU-y94Olwy6fI9yC*9Ki+1DOw6TDDMr2X!4hqPp;2vhEG`PTosfavn%CK0lx*
zVAUKwbv~bBW|XoKwC+VPNv1<4qUfD<gYc7d2c&JVucAEY@-*SV{GRt}YC|;(r1C7C
zgE+}0%QG@cy8!G?W_hIL$@w!CD9e-cQA0~WZ=zYz9ej#@575Qra+qO*kmZ^hij;P+
zf{-S=lj=*Do45yHNzIouBLfyt8HSmdiHnq<z!P&3yruP}5is(f;<4&i_LlH#Le*8d
z@3H<A_U?RDugSJRPDmDE!?u+=SvEa`2NSiE^^Aw=zXhJLs7B9}DF4raXPjb-H{?@e
z>rMrpDa{%^)0z=ufNoTtn%wA_J^9=hfoED;qi2q^vv55#^VwTAdgg5T`-j%EUct|*
zge~ZqvNh<Lvaj(oXYjM;jh^wzLC^U7M$g!xpl6sa1eeEJ1wZTB=$UP$^$gv2qxGo1
zo=+jV$adSw7Z6+6!X>SYdKq?X<80m(_&8@F;#&@?j$S}=+--jUyWh%|8vmD@Hf{2M
zwNXjD*rmZ2#2f5d`AJvP16O}|k8qAP+E>=GG0sK|oNhA8{*~C1bhT{;b|o!>rxbjx
zX#I)mpn$8JezVTtcS>-H@Bi!b6*V;*HwL{~R}iSt>tc6mHf^d2e&Y~CIPns-{)5kR
zUl{4E^i99d9{;~RNBp5cJ2XRFC?8hiv$2n|J@r+P+k6w}7-KI!X+aQUz=iMFjr3wC
zHsK%Zz@QADUsEGq*|dq?fomHv3^qs0H=+OghZfstdyFf6HPiGp4cFu+R)0!MGx`1z
zpq)nd)H3viFJ)hN%9vsp{hv<>k~e$-5*hMF_MMZ)GbzKT1Rg?e@K`>@>T{5Nd;tVx
zkeoV+XJlswC5)$l>ugzfiX@rT;ZY2wG3J9v(;f*43I;#}QiII1U=b)^ta@HwsxP$%
zU>P#ZOv5ONOFd~M`Tau`NTEDNbu`N}#v|0lL>RhaBU}K0pa2(O0(>}XMPM$#hfz^J
z^<<r$k`dXAvfwYV3+tn^NT!k>F+7I{sQc@>P`!hmVf2D`z4T_Zd@0hE&+48qlLn=w
zeTO!8!^S|5;)>2@Et)a<oc$$l_T`uQ*I!n%VZ0d|CbsKei|x$$<(E7j_rJl6knVjW
zwwr#161V8g5ZKh==lB{m2l=c8aBh$<=8ghGF%AB-_7w#7;>i5~@V=Dwte##ywfY+T
zP5mRdS?CkAUp)8?xSvm-{>jv-_&+gi8a@qx%4hx-jo-jI;i5P<hc~Mw$Mdnnxig{`
z_JnjSN93>}h^RjTGIBhmB+k&mp64d-|MfkJrZjtM;PuJ0!0SZdCe_t?eKI}p@+YdV
zDI2DWXRi^p*NA7Qiapa6=YRk6GlQ$(o7bqFUD$`)4E|5>0G1x_9;l)o>{`V)Z9XvH
zUU=W-%Qj~PE5v1d>|gaT<(_{2X%F&$=?`ya`@}n&*Z5QJl8wc4SBkgzuj}+0rhL}V
zKea-+TaUblj}X09vYa(*{JRl(fqVr22#*XZ+G`XKXMQNr@?8u;S_nM!cUG_hJ?yW1
ztUslna!-H%H2$x9^oQBL72=&WYm|WoBGoK^rMQgovFm{CI$*n*|Dr$gAh3P+!8QIC
zghmh#Q9O!B%*4E)h9%eY8u8B{`2AJdM#6V}l5HwRS@<Spc=HRhuy;8t&4mw#ymH`5
zY4nTk$h-MQn!+^ePVhG}7s_M}H<3Q0;Vyp3=v?2Y_e=9%mRjNKpIFf=l|_|RG{547
zvWi|Wrj?Z^@g5arzAN^YS5$mW?~3w@+J5QfY03@dsr~nqmz94}QC|KHo}4T%ulNkV
z`OE#1Qoks#FmCp%sQ4^>Kyo=xFH1}Mx~#nH>*N9HWja@1>yuuQrevj7v=EDuD#}t>
zWLZT53N6$3r<Ro`%2M|N<TrRzq57+`(2CT4dn(E*zA&DYpG4tQC|h2UG}tP&-^q%K
zexIc$m;X?fIyliNG`;MY!LQ7A%(hJVRiQnEwqo?AV@kp@CBc6ZZO4P2L6*`k7aDC?
ze_o`&QLQAL!*`{bmO&DoRu3bb7vNAzV>i=j-bc#hz%#&MfI+*T)ZzXVWAhxlicJvr
zS5sQXO6zwis}0#st-(rpAIbKB6Z9+?pFL*oVBy{bALdi;@y}od%AFFU3vqJ$6b;Tg
z%DCtCA<y%F8fk;^3iKzAo*csL<ceeA74!@va<MN&*`>@7ee{i#C|#NEZy|}@Kx@Fj
zuFhjH0<JcR-9T%cLPHc(LO8pX?f*i|q*UkFe*F!T)bRPS`ZnPrcgFz}eIxa^hVf6r
zK`Dw0hSeGVJK?uKlGU=>x|3Gg#`wU4P&U0Fm%yO5mv9iu3~*R~wqJBX%d@;MzR>Sf
z5{$G&>t$&B2ayXrM7#A+D+^A;Gt>)_iX=Wo{x^V65ST`F!X`s_xno}us&!$VGNeNk
zqSO4<{|}t@hGcIkE$d#8NkJQnpMeWfA~?-VS*?rI3CAH(f-giDP#KlF21EuwH>R(f
zk$M4L?5ZaEg`^9fVpG(2%8a_lDUs--TqpXNNgLyWl%Ow<g(<gj-!kZ{xisd&b^(b2
zkNpBIFH<(6t%XYfMkCrX0|wlE4P=601jYjFu;r3>^#`a<`bMx#1J6iZ(H&wpH{Kcy
zOeu}6wxY_+0kt#0gOmrh7I#SKc}%#bi@UJB`3-hh6gK3RckjX{J$XYEnNSGE4(M_7
z;S<;#dOr5Q8k=q5wTK-&wnqDMZP*)2yBV=D7SBF;eLP+V4$!AK5wtNE2QRdzeYmte
zmiFhe9QH<a$Bxya2%r3V{moU@#$5k-Y?Vb^8ElfRtOO1IBGS~6_P?NJ4qIw>7q{D-
zs@-YFv07*Y&Ebsx;7#LDtv6jAaWrd)1FW@(LgL^P+igXJc9Z{z|A5j_&8Rz8_rBUz
z(zT&}P4*c#u21mZ;-*zl+FcTBW1Kh22*KEzWJYYI*{ZFWJmekZ0k4rmyqEmoah`w?
z^WK|5KeOn8J1!3oQ?po60m9+OIv4`+WEJJXEjt$33yMETZI|Arq_}OTR{V!H>DgHm
z+vm3}9v`@=yW6C<OP$!NQ`_QayUgyAT)wWHS4Tw5ijEc;=5PIW`TKlMW^%KsEi!UD
zl{HIF&F|HtRYnV?Rq)NsoZg*sGg|m#U9MRk4?EUzVaMd&8+-F=`CDX|ztNXTpSEc0
z1@~mYs*rE96*b}#H+E9X&C{rBw3pF7t6~?n(|BnwHLkKUaTQH5hk`gJDaw_Jm+Pjh
zu403lH&4K;`O8^Zk$7c2bM@0fOrt#H|2Q-xE=pM!6&G^-Tyg(g#p7>>W8FSLh{wrM
zUT27cEdt(^`u+3SG~i5oQ7xQ_--~gNoNKZ7ob0cu4*nnWKl`F*sxQ@7T8fX<U2{wD
znm3O=#a(~U8ThyjS+TKM^dah5La(&6Ug9J^*$<cGFp|p_&P}M>gl@r<F~%VypMxUN
zWSINw8*@FMZ0x7kH#Tm9EMxDy|EVBiOZjc#B4IK(N0W$1Z`9@l^9*Rv6sF30ucBJ6
zz7$NSEe`635d^^Q;*Ef+m&;xMXXZA>6Ve>JpL?$oCq+$Tut9xa!Zmki7r7b}!0h&Q
z&oqTAPLiC0qxGfXhRgFvOd5c^E?;BV79l`l;k^_!{!JO0Tsc7*7X{9~xfs|BiNRQL
z{SIXV<UF)C4V%-6w#tSL>%}`Pcm0N;l{<-er27S>Lqr}a>sg0&8%UUMSf|b>Vf{oE
zt;yj$SJ)hl)ioyfqZ#|;NVjC&9-F`5iO1(J*dZRr()am=k3Bwr-j2uoH`=?LBXxq-
z=U_{q{50-hW>(as-)Yn*fhF}xg7`<$8K>Z#JI@QKxn$G_#V!XFS*6NzpBUC$^asnn
zjWrtd2hyX{i~>~be>Tg9eLKMzw!{&&+@E7~Wy6YM1woS>x0>Kl9bh{$;pImgSi>~N
ze8vEp8Jl47RYKi;%DV;+lNm+S(8$NelHG-N`S)H;bOHT&tZXN&5i@EeFEu@8s}PWE
z-kdYw_pv)G=MlqSn4TgHq*3=VT5R5#d9$g-a8w3G2r%0g_yV?8Nc;+n?X1IWBt+{D
zooBEjnzu<>3TBW`{am@1!WGOrGiM$+24OzYMUd8J2YpC~!2V6Q*=Y?t2={=Dnrl?v
zsDXu*SrJpl0k;^y$d!dz2vRHsJHpUW<d3;l+dv-*^iLur(GGIbut||lE_Ft8cF^>h
zrLRkMvPnJ}P(mubjo=~10CZ6GMr7gGAO5a#r|JXm(;8wB?>prAtq389KxAz0^6?W^
ztsFmLMduw0=0E<#g87f}^Ane^9Dmh{<>Ti+wqxG>#~*8|_sJ**;7e%M2%<uIb<l*W
ziH;bst5H&D@<AyZ&q3@oACgY<v!&@RIAsG&Tp=B%Unu@UQ{4r+ro<F8NJ`EhWP7o%
z;~(^CAVQX`fRV2uuN9Xfm`a$bu`dR6=rCYlhYtP4k%mbdo7$m&{|?0i`XgYZHGK=B
zm(<xakQ=nBy>Oxjeh99coD(7v!!EYB>6B2)vb(UZv`)$*=!mB5k@`Smfqspxe&OOp
zi(zNR=R&cBb=?R<J~np043qvwrIY^j+P;0)@(O(VKjbHBM~tY|Q}NkESI2s<v_ye^
z#vfP<F?B#b<uf9rWLv(0)e;@`qo_**4M{gP^HUqp;-MJ>h4S-kw%6Z6=C5XZs`U?*
z&n}(Uu<fF3{ixM|Ji8&c=*L^K+Dnv8c`wKhWd9-h24T<k@K&;XOMh`A+CdW?MxMUz
z)1W4j76$2+)gUsA-hOuUsAF+B4sNLTV<`lF9X%>o(^1Yv6fHbm{o_K&P=wSeiqMZY
zDl_52G7;m)j5UOV)v0KN_p#)(Icb?XYP1n&=vW+2*1zz6JZf}sp;-|{MsOina!~|(
z^52zdL=mDOn>3`6_Umg>=H4@-M)Q=oPpFct?WobmykbajnKFP-Q3Us$MpgaSqt-uy
zHU5)wiL#IZc1$cTLf^eowjT59pN}5JKaTsP33(}OQSaUhf8=QqMdGg03yUJeKq|Ls
z|B|v}wqn>7-o_O83Bw-HBpoK}U|d8*lyhWN^}nGMRg)xclCIbnY^O*E+)Be<#$la|
zP-m#kQFCZBmK=OvY2`m!twt`w_XIVv?ia$51*Mg?wQ*`>g!z!$p0tfneac$~9O_Nd
zw&vq&bVPuyehc3=rP{wn!f8k=;XJ8Sk1(G#!5eT;MXP>6c!$_hZ4V=sY<plG4y`T~
zJIC{|YrKc8FA&Z5x*Ta)F3sz4z#!^K!>MyxUJ4_(4n)$RgRnFop82wHkeTuA$j6Cv
z4*bryz9a-bpo^+@(b&FrujJ}m_vi2j(%3T(m4)72oW8sw@%94!OXk!xaaL32vPfL~
zqIOUw56^i8Hi338<+4X)Zmqp0eu9grYfgLqdi#9`^6qb~tln9^cA#rX`#!4&#r;Do
z(X9WECynOqUsqbRQ(kYcj8w%>8tf>NW_g&uZ({GFrl=n(Q<P8p#1V3p&fEe^c4k=x
z-I$j?^1MZgE#lTb;qj?MJl(?D*S(uIIH^Uf<Er=sWkGgwVn6oo?S*l!p2;mD+eCM>
zUlX6)GnsS8h+?gIS6No7&8|L)8GkoPOHY0aH_8DOGZ9`AffgO;cCOecmYTx~i$SnB
z#GCBKTu@NbvI>ilE-f{RrOA_F3;DQgoD|*RKnjbFjL%NFW}rR(nsMcx9tm7cQ5|g^
zS&{0xlJHPXQ*u`4^p20@*~_;dSKFw=#g>u~dzjDFCq0biv=+_!z;qfLqiN1Q*-7m4
z*4b)EdOLTUa5m|_O~Y;QrW#&<UY)Hy27Szh6$&3>C{)>QvF);b!kjFc#j_Tyg3U&K
z;)?U_j?Aq5IBcgcf=$7WIN$PHF~4a$J;W!r)1!OG8E2VMlnBUFJ0iD$^e`&e9T0SI
zM{SW#+yqcCEP(i#c~RJzo}cFdb?A8-NaT%6OYMe@>uITlXd7a`{5%Co^Z&!N1h#S7
zOM%Tz0r<vAFO33|h<IYP%tDDUMF%Ft-4_)12QdCbT0UrCVl!>=!jSmvXIn9)b(W%t
z@3R%9bxTF*p2?N0bk5(H|NE0qoSi>$Ww)Fj3r3Axaar5qJ3I+%Z*I?rRK&*5xN?p7
zQcM;9ynW=29(P3rug<WuL}t%W)ksI1R*rBxPg7ZBB-7Hl7U9fp<&0FOr)w-Cnp2tx
zN9$}S(%?>11XI(v7U^u&+8L$li5`W8gfKOZ^AI&5UUMoePNh4Fhbd0AS%MnU&8;#g
zlDN6z)Z*e)2Upw*b2@QH;SMz}jxwFgYMm*bZppGU>sq$Xyv}RF;M}PsG*gkl!wCpN
z)hbSVd^0VC`+vy*e!w_@pQ@&#4!|#6<pzFSxmjyfra5}Hs^YEMC`xu)m1nnAlvZs-
z4A00!l<v%plh)q(&O3LmopePDUf5^yq=^$JP41JI%s#p<{x9y)-&`Iao!D#UBM+TC
z`OqUX%M+sFF8`*txGAL|BBCHgi4IX>-AYI#PtJ>qLP&r}r|OPXozW~er64kr5;zo(
zTa^hSBPl_M>h`GiXx7n{6dIc3QbJW85y~T(E7{>lb}@&8hemKUv@SZ);Yf_;4m(07
zam~r25}eM2DDKpF7>u?Ky@F@7%xZOlXJof*g<9ZKy}_02bSAsF)4{^Rxdz#v7!s1`
zVj-#$9>(oX(cVJJ39NyXl9UIek`zKJR&_)}d_fi@*>csVwQ7tDK8y-Iu?{!UcB5^X
zZN2SL+df3y{lxZzO^_^b;AnKjsz&!k-{eJJ-0<R%inwm9D2HV_+&KIbfmW&SLex=5
z|AQM@2-|v*6c@m7G{7*jKwe+6luH2pqb&a(QzHeNR?;piBf9rUS7uUL+mw)ssqOX;
zNKiw=awlY#yW$I`Jd5~DvCh!uA<P}RATCUEo7Y!+<aI)rJ9H)`afBs=A_@0|YsPhK
z$Z9irs5_KpTFF^#=p7CB?+k)2cw9qKZwA5n$VepNzZ`U*z20YOVO#ewEwxpbo>i?w
zNAZv`V<x%6BRcfR7<p}aNiP=Z4GCAhk(w`5@kZIdiwg<Y;v(&-A!=Nd{iHV}OpA-s
zj9;hlOQsA_;v?<)YxIyZhH?CSg&xL7YN-GdX=h90Lc;8EcnCPr+H+>o)DSA;m3Rrq
zE|WU^{gD)Ks7QQnq+cjHjgo3Rydj}ld<2lAGVYOOL?9#m0$W0liBj)T^U1d0_BCfd
z&7GmSJF)FI--09Qx85Qi5nFHO8`)pQHFaXz`Sa{<=zE=PvB=XAdEgz~kgHh9z`@zR
zFy?ELKX(EPVKLXTM6q@91n~$C!@&v5Cb%eZ_-}_;_XBiL72yL9bu|QMt3ne&T!vVL
zr7w186w?S&%!-t^JMs{H0pf>bisH}o<L(}OZJ2hH7o~^mx9De1iVj($d4bp4yc@q&
z2DM}Gv9PJ@w2vs(IK{GV3=p0)7%E)_bCsiA67;Xwp&@Bvz=t9_vOPPXhnM!$J{pqR
zTz^e8|GOwjoyOy$+BMH-pPu)Zm1-k8QU6!qljl&ks5fD5*NjesWwExjR9j&|OnQEv
z8l%Nx4pUgrj<tZ?mDYvAg02kGQhh}1`tb*`YXfuNeg})ax9)FPCVZT=TX9zS&#vHi
z5AD+FimbBUWm&xRN1V|*;K#qR*t_o*Kdd_{-e+x(-uBxqxBPZnmmx#CWR|6;mk}OO
zpxY~261+O&Acbs*%5SL_IKbYz%*>Fg1Y``+6LXoug7g-uJUJMF^eM7FDHw$Xw){LB
zG>)+A2M+AmVW9uv4ub~aRK0;ps@v6T)%fu%OS@h%s@^8<sJD$A+p`p=k=4B-BS*0-
ze>=;rWV@<*bg!!F-lGcNBSzr6JSuij_4PG1*H;hf?VNb)11C;AaO(u6|DZ2xYQ7v4
z6|rE`M`We^=sro$n0lf94e{Km9z8%$8N&<s=M`mGmr$52GD~d;I)zk|P)(^ML6^#u
zrV6P$sg;9@I}R9d{Xo6lfR4oj2jYj4B_8|zSMk`W$jGvl<4~QRV@BHQ*>qd|$Sb;*
zuDojeiZYkGQtefG)m5cs<0$g~I2-^lPPG082b}l*=FyuYU03|_*kiw3F+`cV=F#uJ
zfAsb#Ar-^u&M;5(65<PvxKd2LPkRHlrsk+cP!m88jEg2Fi3XLuh)>+@_CtqmUvucd
zi|&~9Aj3bz+brkfu|rwp24(!gJJuXJwC0Y3oul3N;#`I!h_SkpAt3kr&_fl(uTs>9
zw8JuP2K@X`iad!SQy$3xDitv3g*+{lgC9{A9oQtVV&q+riFGfZI(6ODDSY5PQ>Iju
zPtkvmf3W)c2WzTt7{u6$m`yWh*5LQ$7-m0t^z@_n=T-7s|8nSrXRr>!p4rRTVudg7
zdj&2;{a)O>DJ<LuZ<Sd1^u3@SgrzOpR*07DZyRo#V7tyX&vvWrPTK<*9iIWl`6^Ub
zJI24_qAVZALky8w;6aL=1|`@78wq}uAefC3WUaG$6197l*{kT<6?Dzxuy6%F0FS#H
zF5?g|I+7t=5~4b($qc8&(sfaK5!%E^pV4qx#JVyBeKHccgRc1`jdfYJCbsj@cAk>f
z`tCMeJvm1^$F5n%o-1E8$A8n@g%wrvudJLmud;F;>s!_y$3Wmc)D<2c6B8cpvc9j4
zP(nlF9Zoeg^b3a)7V336a2YSoMT9!y!o$K<HI8-mhT$tL9G~KlH%?VT!^7h+zZ)Ee
zPu%t@YM7{Z#D|8ePJ1(azTxzShA9qtM?Dz1XxYkJoHOIPPq5o3bdQ_qyk+IG1>%LS
z3rcbZd?%)}yS^KcQ?j6|=)U}=mzLl5^2^KmPn*_%z%|$GiAhY1aVI9~-^Mm?9*Yb1
zeM)9nxIN015gsP`MrTBXYObgZ%%w0%^QFgNVL2uyrY1Z!CdOsA``j^FxGTn;>QG%V
zF$e8<<a5YRaWqN`4bO~pX`vArY*(~BEIh*%We*R7<V1hK$q4EpoZsMrR+RzY)nLAv
zZ@bNQH%=aT$@Ve$rZ5esl3|wy_ycT=Uk-T!h;fdDJWkX&@<a9qZk<pPN$rWIN29xg
zt~2atelQBy1&6ocx+`gEcFjr)4#)_)R;;uRdz?Gynj)(;X4)*1qX9buE5+b-ugUAh
z(EgzNk@(7Co;1|OL5g5jW-<F9!8vV;!lq19lUEI&JFoJ}`SX@vRaSOY*@R{;m-T;V
zsOoT{)v2YQ#kGUl-sy-Jr&Mqb@kvBj9P6Ostfx2!eTbLUxbW~$1)pKzth<7*Fjap3
zZ1P|{*zYa#x|zeFw(B$d2LFy5X7{Ph=$27<uq@pHm7pjhA)FQ6a<e17^iU!0N472W
z`JQOsQd_jOJ|U@o>q2|W_D{BGQP@UFD7c}ZWx;+Ly!PYbhJwz|-+aq+&)stK^Q$MX
zn>=~lX9*bz2^k_yez6b3(xW3C;D)G3yBHIm9!*S<9u=*fjq%yFXtyg>v&TFRgQ?w>
zj*sXZ$!Fj$aNCL)muC0HxMJ*Ds`wk2G&(&jOpA_6XDh=Tk@$gIQ5oNLTGX~p?~lYP
zcEd-#+q7NOX<tNTMbxd%9h(PVAIVtc^@BI>aNZhKQ5oU&jYv<Kp1gMPh$*p*#ZDQq
zcy03Zl=KlkDc5J%RP`#=30n|(ZunsR@nyNlDtv?TEsSDbwOpxE9h%>vs>-?E4KbO=
z*X!zZoV!E$U{?vw=>RWd>XK$pgVCc9dVf9`rnqRb$~3L6UK^lHA5)lgvW*%xB&7Ep
z(bZG)wY0Wn*OuZKpE}rVR98R$5@q2GwOvbb=%1~8d(?uFHw<35^a>h>6xby+wL<w=
zmYdMHT+Dgkj^%N{g)uEFgso6sKm~fLeU*H@3a2K9cg2C7;azYtmH1WZ!otNF<s;Q!
z2=mF|QvVA|&q|!z8P-Mo3n%+^VPWF;&JeAza6^YXWE-wJwNe|ro8hQg#PVRd2^7R^
zg)9>SG@P|o9cmSYz!@oC=HhS4NLDJI*Lv!wLRejNl@9-4WjOch-;c!RA&&#nA+g@C
zKBE=N@h$<Lv~3_Ey4q+9Q9jMAFe%Eo;KF<9J3)`U|0lx}OW~gGYBtVKiS41bWb^P#
zYx%fwZ=T}mp=Q6$+&#3G-8rsXiqY9BV+H$@S#(6RtduDOHSg3h{XE?hFeIstHjd0l
zb!`{JOtn0xmp78Pymi~hYVMtmW-RO69a=M<x#><jK9|sS)+h3_-yLcK&wLp7S<7ka
z0P$X7h!&C*)fMrtvNOf7Zc(g@D_T_@-O`(}M>5k@XNxRXW*DnlwsHWp_yMrNE!CFb
zDhlz?azN8E+x6I~aVz-6?)4QF<HQ#`;vD;m=!iwIW>!I3mfb-n90)GDAburn5>BwO
zc1LWSmn?V~eU&(v?0s?YqM=h_V5o|9_|Q(ph3S|W!mQ}cbQR?L;&6bI0jf2Qjiqvm
zWf0}Gt`x(yFh3bePq@;`$vys4ZuA3wAk?03&n`)g<KC8xWoGB5bc{>avYSU#WO|~9
z3cJ0GjaBRs{k;x8=<Tyii|?V2NZ|c<_lZ#b!@;X-!WHppI#(h(-?KVXiT7qsEQueO
zk%P092Eg1>?^JXxqK#AK9a^f6cKr6@iuQv&s`xA(2S`0PX(8*=VMz4l&6C^A?UTVe
zmKH@MWl!xrs5}3yVDaFo6SgcL)2e*Z%(~LJ*r+vq2YW+8LZdqRLL)K%w{t$w6|ROl
z-9NI#wmfdsop)q<daA5-GgnMJ`+H78mn*LB-lK4!uQirup+k1S+~QvCQ)zd`i9~LQ
z8aHe@K85k=?E7xKZmW73`&m?VRQ48$k=mzXR^8KzU9DiZibDSw<v~_XGJv5)xw=_<
zkLGxQg5w{v+_qvqjs1KX=XHNoOWDb2?LB1vn}Xb>Y_T1AGEw$pSO~Zb01P`eG%RRY
zWNIYCBgQgZVQ9oiMn(%7$YLC6MT+$ktq%?`rWsy7_>m4h6O(#g*0W9TR-t9<&rTlI
zJfX-QF|l);vss(mX3a0}^gzn=KDQ-5(0NevX1T2sLOh)(M%arInva~q7oHzlb!9<J
zW#!1!l&eR7J~+EYXk1~D%hfJxOj&ZAFSPlPFT{&K|I9A?Vo38)UtDt8n5=fL=;Fe-
z&=%Q}jybGG-K^e#sJyT_%ULCcTW>zB^>#;URsrm@c^HYYyaQd-k**X#MfW&jy?Mnk
z7^h>w@OfllM*M7VVWv`dMO24dqh8JSM5XhH8~VAU!rOHYIiM*M@+Ud!MVr+8EPLp%
z($JRwyjN|}yCSE!bLTc!hdmpw-k^@|<w;79JKiO9jiaJ8lXdI5zp`NP!3fTLIZh?b
z-J)-3H+FNhy1d1pZqX^FzU=<u<c(eVTC)vVB<e61HYOYM$>Xxn<MPP@4jOmGhNxmg
z`N3UZu}px2f6<W;3lXZ3I$1yCYv*xCMrJElr@Q0hvfRtr{`_38I|{z3Tz}S=6PFpw
zr`j?4v7{C`EV5I}gq-jY1(u1V>}EL$p&hg1b0WfcNXP7i+;~rPQm0lI;N?~@>+;b&
z!-pv@t)~0DK8l-)%ht@BFK>c9(!A*SMuI6Fb6T(@pEttJr^aT+<@oexaW=9m%I(d~
z-_Mr2v*P02=~pY+k&$jsJ0FWwoUJ+~MSJ3N6S6yo@UV!S`0S3M2|3NOlj3=p5)z)1
z&{EFJxh;|<sIOwJ-$%1y=EmI72URuGgPkf4U#k2{!&hhKps#!fS>z=-=?j}}4Kik-
zLbw726?J0gtmfkL)^7c}o;~@DQ1MyMp0;|&(>;5xiO%cU(_7A1c^7qM1!EP@@_HNn
zWEqOSwjX2t_}vLbEH^c;gyr#@lC#_Kk}f4BUAmWa>RQq{p5X|RFm}Zd7Ino?7JkLh
z4lF-iznuF2D%dW{Fo*QnO0iz1(T3py91;(NU0JRI`2~@in#8i`%LAOjxL)uoePQN=
z<x%q2!#oOCXpRi`cEyuk(24i!TT#(xV0oX4^1exI^3@o)@ewoSY8HiyQr@+#e>a=i
zuYC)4RZ*OhHDrj+BiQ)CgT?-kPlpV7BBtArA&Day8(FUIpsz0#)|tM=I+g3A7#rpP
zz}G{pXw|ix)0{rIEl>|wVG0W%=ktv(`jzI(qAxTL8p-ZqxjxBB#7AC}iRcSlV=|9@
z8c*rjGcS5g&z?^^Z1p{RiqAs%jGjI9>)fry=gqU=t-8G=FO}sMCGfkc0ra&B%b+H~
zQQ6N@6RlLc;3v!LT++2uNq1_E65cL5S-+Y;nV!!&4E=w!eFuD-)z!Z4JGA$nwk%na
z_mC{f+m1&(;u&W-&TxXANt`|H?Bz@+gbWfOKnWv(gan#EffB-|j8a-gOWUu77D~&e
zd@Wcn|K~~$0SaBe@1MxhyWcy`J@?#mo^#H4B^ftfLpsKzYsQVEeevbr(HEBz^aOt=
z^ko!uLw}GKEf_|E4g8>Y&_{kRAMk-@V7P^UHw@zvY#{_F74)!LN&K8_7}HcgrnSDQ
zsiBc6E=V2za}wK<UCz|Zo`Y_fJy%b#p{8HVy&WB8#?u`gzm^G4c65-Lsu=0$U;~y2
znURv$m_DXFL)cm69{xG)1ZJ2Mj?hjZ#mrmu_Y~Jie?(YQDWO|=f_ntsMjNo2+9x_L
zI*nEML!#$JFJo2p8`1AYe-ynddSCRh=rhshA^|}=b;Lzdh>xU0J(W+w7)co3R85W9
zToQ_eVG0bIZ~)dgF#<`0)Ql3ES}YewJg{zI+<U@w5{SEsctEGrdI-A~;!(pG6on!O
zZYtO+LHcAcUAlmBfmK9t9WKEKyNEXp(T-XK-3W4w`6d9S4aO3mbqpb3ts;1YpRS@z
zK8Vq@92RO)3;U^AmcE{rD-cGKU#PdDxGt`Ths6!E04_4Yr09|G7&=i?6y0ONN-i3Z
z#Q#F^u#@x{WJH_`g?XGYo6K>c#~&6WO)*N1C-}V*gvO5F9*AF#$mn<+{bQE@X<=3~
zZ{XH=9OAr)F|X#~+;icE;vg3Y?<?NCEpn6JqsS<(DZcydjskInO|qrt^crOC_Gemz
z55v4gDwnI}HqG*a=9(D?ZAQD?Vz6+LlQYM=1ffksY?<<``Vt4}KE^p4f+6OI+$;JP
zYgnu?r9B)|spM(ihP(^SM-Aj<dB8O-oa}qf`-2lHyv<=Mo|L&?Cia*m8UrsO84A`Q
z*9(79|Hk;H;h2eu=-G)@jbW`}qM_I-ET701@N!Lfg<ZXu8K=72ua)I;)_NhtS`3B>
zhU<+=gT~1H`1(mTMN>MO_)LE&Kc^?tY4C|BrD)pa>eS?5clVgKwl-s3SH$O)%iA@p
z#n}pTq^m2$*Ny2q^I)q*xYRv;R9AMoCUseKP~K$APBqF+O%Yewk@XsnPUcM8W2|oU
zo*L_UJnv3b@g{CvowTZdU9GTi9suX1Nd?l5F6|?elT1=hGegm2st&sp{Kj;7&Ujzu
zWWOYRv+(>a%45;q<UOVOhNe+7nv)ie35CW~)<qPlu!5yY{mL{h5D@$Md?uI6#=l@X
zm!?R|=F`%8I8K`r$R1Z=O|rI*DIAxoOc@u_aJQxL*`;ZGnmr&+H>UIHY#Ns?O$R^{
zGL-DgFSw`qm*aZjxZs4q*hY(wio#xiIq8BWDgvPw1n4fvG{k(mY)VFN>>XJv^Gu~=
ze5`u&B=chOcde{V7VF57wJG?Q_cXWeoEf{Rywm>D47T&h)8Rtv&a0WI!(nc7Ki8I2
z3GExjcuOJkJ;OZ)T}mqAhnFHwH-(A9x^4n?5F?4j+kyGx{SbS^CJGXC8!*fOtV9xk
zfPvcCqXsc6#`vd$7TeGrr%<WhVCEB*p@Tb7i3l@|L|>gEe0k$tcHt+#Xe0W=<o@m3
zKYe8OoBMxAOh2xNUgA^pjwN>na>VJryO+M(EZqJlwe}>>sG1q!Hez#lPtFpKRc9Nc
zDL(P299@Z<yCl54_q6cA3oA+S-hCEg_}TnjV?G?Z5lY6z#J*;midfIH!<qFY!)6s;
zsblt)G;^wV&&lP&E9|o6L%IGm6G<EOzoU};#hLc%q-3rn2cSPO*4`4}4RYhQ3l}8p
zHql(P3v@!5C&8UrKV{KS0*ZO8V#E@t2hDL_hDiDeIhSgDz?OjfhYZ6)3Z{4ta4Doc
zpk4uixTqMnS43d4#$%yrf}KwchX9FR%)F5o<?VLav{EIXzbeb3sX80h3uh~XjG}RZ
zG>JLYyduTBd=$wXUsW@yYt{o9CE59T={Y&oSvOo*TIH>0#*E)3JJ_~qYCa#_SeoY;
zeu<sXz5@$T<>PC8f%-ubk!FuuJ8c6=b<K~;xv_`s4zk_BCu@yCNx<@Cbe6?oO}Swd
zCrl~fZL3K|K5{u#)h^qT<VkU^ncrT*Y4VOPUM|U-azV0ilVq-|*bp`^Y&#K~tkca~
zI*B8rXIyM+yi|9!qr_TZ@8!rmK;lF#(DiQSr$O6bfEC0ApYzf1WnC=VB|0cNidp7X
zXnRj13+er$heek}Pl=ury(Ah&tBa$4iy!Pf8i-hEWBUWCSYLYmQPv#r8%&hHhoKn;
zmqycb6kB5ogj3^U4n2UTM|(%uD+iGX36};iFVRk<_rW9(e=t;QxY<B2#RDUlY{UV)
z`tnK4Lr6U9k0R_pU}abgeC<m@cQFTHhO<O`mPnNTj(jCUb1la8@h_<R@O(d(6j1kJ
zKp_J|4i>O+gAYVt&`-$dH6htDW-dR=YYSzI<e3v|#$6Ste@Mw}s@xA1`Yn^3YSP+W
zW^lhDw<co=$CYHH7h)!MGivMn8sSThS&`dz1H$WH!*lbq8<k{Cjc^ac&8eI5tV+hz
z5N>DpA?DBj%ahqvHHXN%EO%2<<TjqUtEQ$#I8Kxgm4$l7)lAF+{_>bud{go4kFgv+
zs7um0o!Vp_IXo}j*12=8H!yKogEqTpWj-lPoyJ%SnUb8`Xm+f@mOif|J>Z=?MW3y0
zXx0=l`86el7REOtnwuket)^`GXJcDPm3b`I6pX=S@&|lolb&S>X*ZLqma(5LW?yuh
z^*up(vf5;+QL#&llC)BNOq*O-?Pj~I9_jEvfwjQz2xXaJ;nf9#(?Z9`D#xW&Rk-w0
zi#JeIovl*n5pHSqM&&y1<b0z+ta0U)w^U%pwD=Aubrv`klB9Is=#~nDO72Q?I{Fpl
zSIebK4Re=rY^m9#cFRL){%Pa%8nrFY#e{V(ZE3kCDO!@{EiiT!C%2}p7^Rz4x4l-f
ztaGSJzGm9G0?RzPH>*TDGr71cuueB>Mddn4?e_Lf@~WX3^DPDIrl0(=_*}jB$T)G(
zLCl26Q;mjHqcPQBOqD~zG&+LfaYvx>gACb?ak7|y4eR+-P`@7pWwu<VRIm~1VIu+B
z3Hpz)&g+-J>4tfQnKzF}diu`Hkuzt{vfRp{8;=~iX=ozN?r{9jksG;RpJkY{dlye$
z(tH0W4D-pQuB(LqjS@lm!_%jKNInGsU3L}T&5Bk-_M6225?gNQ&5%<G-oaF~F?mfP
z9s!*|x=39W2t$<#Z+dSSi8$jMG};pxe)jyyb?f9X+s@oK$lSwh+a_F14z0L#G}Q`@
zrfNcdRB35w)~s75ku$M(c3r<!c%MA9?bs%=_?}6(48KSoth?%}gid1y`0pYygEnxZ
z6gq090`6T$mss&s-cf`c@&-)au!M#mViuh0o-?N#Cb8h1r%&H`>fZZ=v!wgp#|K}!
zm&_5)|BxRLN>;qSV)!BU*$ZdSogcm=91zyN^2%Fpk)31~>P<w?VGic`=i_;#fFHw0
z;x)yQcyZJnaCuQw7vG^UqdYG@BNm?_5s5^2R(xJ8JSP^Dg3~;Intz@@D!x{{NPL7J
z-Ubcm8vY1&t`#4Rzat7;-%+jywqOyVkM^SJpz@?I0M3`blD>upTBA@woI!iz6nUI9
zaNH_#7vIX`BaB-GE6)Xv+aPrC6F6=HPww8paXow|xb<ov{x0zR3S@X{<M1ITR{*Zp
z!1Jrgtz0K)3(<ABd-(vYjkI^6r||~dEGBk<qNCJS5})$JnDOa3WB@Rm0upaH3L0P*
zXwTfnJuG~9qLHYt?*GZU1(lg*;nxq%Aq9ivbB519v9)0LHl|?k4nD9kPxxTx4}>2-
zRG!68H_M6T&gaRBpS1|{&$4|dGz%86XZzs9O#QW__<DwW6jt0;(M;-(PN>98|H7z0
zR7hAJfWH^eRb9};h9X$nhB1v&jUq+)#g`5eC}mJW+ynLvIlcmiA*+O0XvqV#R*<|+
z2^9zw9R-x@CY}(t8fpXN4Re9tp6re2pv$wRIvuH1s(nnlLn0;bPyXTga{s7prs*Yf
zb%lk?vlr&i99=id)qaa(`Ue`;`P1g`f|bmMrsQAFbTQogc|+S9Y*}MI<}Q{60)@Pr
z%QLfH?^wrz0vR{_%Lhp2jdw6-e&>4QzObH4;T&yk7S6*KOeq`M_tJwl?)v+Mcb;OH
zz51OVzOenoV-KGur4LUW_siRgSjN_M?LGdxuC3z5)q9UIB<)GseynIV)|>PAF5ro1
z+#I^@(m-=X*D)Be(6>Tpi~^RaWg)=PRTH%z&^b<Qp^yeha#(!PbrRLp!aWY!fDoMx
zG0$Rf(<M<Z;1ouf8t@=Aq>rA%HZ!+uj845gH}p{7!p#Fqjohm{`WixgNsKa3B92Vt
zTDoU7?2#1vRD0OWG4uDl#2c1AQM_=$L%%X>+8!R@D(z!)eWb%(x|Q#$RWHeC9Mf`P
za&6y={pW9)t2^?Z@V~<EZ%Vgs_hm$+{$FM9tiC!DomaPg!aW`)QgSTGcbv#c@RjRy
zi*9=RP^Px8cKm~9rZ3S|32EDEXKZL%W~nJYIInBnw4$TXj9_dhFb|%%PAnmkLZufc
zD`c{Q06>AOARZ999}*jA9=ef{m83@!VNU({&Q(3vFJ=yIJ+ou!OUwyC@XQ8r*ZQNY
zPfz3zOCEZ&_W?`f*@fM%))_naloNvw-Lrb*(u3X2tT4Y{Y$m<-F<qy7XUTuB<ab@C
zB&`dQf74l-w-!F=4%l4Ib2q`#qX+%lp)(K}MlcoB@E<i=2rCvD%oYcUz|9=ZE(+)z
zr1R6il1}0FzkVv*zG^yYV~z^%4emP3jJbK6@H&~&Dg5O&rv0yEvTz%&xRXr$^uFoH
z+CGyN-iv*-n<IY^Y~qc$|E)=nK28j*a5JSN4wiTxdaxg%BuSz)WQhXjholpv??h1~
zP!a~sUpJ`p1%3}`f#NMjpez&&f)qeEE?aT4aPM313QuVbL#vh^CyVowJ$ZQ^cV6uI
z+^SrBSg&x?=buB$m;sznH#66?<k)Qk|3m79r#|1g@7Vg3+}sp;1N}?M&2xV)+)Sq9
z%9+BAKzleucW~zs2TTneZH=fAa`^<rvzRHGBkDt$LAME-2em^7;E!S<4*?HySU3Vu
zumz$X)##e3Mwd!};2~m&VgZPOkltW}z>$PthZe^+I0cSl3dUV<=f!i7G#KB$_!081
zKXr~T)#nQpr22*Y%*;uqj!}x1%I+g&WqaqBx2dYfnkV6?rn6erRz81kS=pYeE1Fal
z?IyCz?vyQTBAIT>P)ncicZu$JiJoaQ@ULhpV#8YL&vhk?Q>?$KQYHMv?vnR43oo0K
zaV7Is$cKMmVSc}FX<6A&cSWPJyv;H(D{G=|VufN%#q@n;Wjkh7)JrQ8NA=??r1cfk
z_P?u<{!CZ8RjN5wrWI~>nYNDU&9vI3S2YQztZvnU>L0rt+uFM4tEIoNmTr`24wqUf
zUGSjETM>}10Aq;KMIKf{pwWa6Id}|Z&3@2nT+0zB6=cJKaH98d2FT|l!u4f1bIPex
zAANG_<jGT?e01v6iXDR&AKkG-c>mFhgFDE}x0XdTL`gVJxFs-w<+?gB$K{OY_^z=$
zlJkCY>aM%!UAXt7M|SMox#N+?h<0#L_>KHIfVlO-U!Oh0P3qz$6S}yO-~Y1gfMPRz
zDjPDR&*KY&f1~U#-G;Kmz8TYm+DXg5U-*@>=Y$W{1|ol!1pcA)bWC1pdx{>1jpExa
z@AK;UR6{_FMCc<@A_y}sEq<e^NkO?Dn*SPo<(Q|=F=FvmePVw0e4&Ex>EpRM^S{x&
z?+Fi^b)<p$n?g=rnJ*PDnk$j?%}xA@F#ax==^uR@sNUfJ%*z2H$z`gd4mC_O^+({y
zLs^${V<(=-W3Ts;^LNzCuPgNLX?0y2iM>f=kbM4^V+RsW4}6rF+nE=4dU!OK+#0{z
z)oX~%u=(do@|Pq-MJ2os$w<E@k9jKpfhVa0#9lZ+v=}xA>vy-CUg696%b#Dt0V4P$
z>&c}K5K~9)BQF<r=X*L;1+#*ysmzXSCtR3+602M)-MN9NitA4xmS7=?RMCE_x3QRL
zs%R(&<AzXZQJ@S&$806aIl`KI?#|0?CEEV$gbUlcu1O=8g!?kY<F5ZhyHhxI^D+Jj
zVb96OgmtlQwYcT<Q}7_z`9`ajm8;9xOM+8a_Lh|!d+5WiDKb(>NDm#m3|7?=c#8Zs
zQ6`@o$_6coKw*Poz;P2IAJxvHfGA!xOc|yGY8)*DF!rdhLU?};*?sO@UQV0vmvu);
z%iy#_X+j}s%Mwqx>7B7oGWpgUC1my8Pa-)uxk@8xJ^K^kufn3=wQ4!Jx}1H2yhrxG
zV`V!I{dLMTnQ%!MreZeA^zfJ6oRL3;wLi5OCL|Sb;iySs@j~JVB?P!A^siK96i3R$
zaSriqlrXNny-XU=-LkEI&)R`m+n@U>S@Xyv%&ysM*LwUov~7HQU+RMP@!QsVK2Pmy
zA3tG2|EdWS#<z2&Hc$V(XO~Y?KLKUbBNwMUp_;z@?7jUSo5eeDRw`dJzEv!49lu5{
zJv-p-6t|A+U(?>!*1o2H9CeCfMEk!y##Qp=n13)HskS+;7o(^%c<@kpDUz^#qNs^V
z1>%)r@9v(yW&8B$Ki<A&dUtH$uAMudxCAz~_`q-9Vzx6cy+p2K=Wm}nZQ9iB+s<`%
zKDzO-CkA)y7<}TfjdL`wliAEmFVA{i{f+l4X-0Brqs7|ztEpdI6mN=#pdJs<%#D}1
zGc6J`@A9j=r$0?zdI_(5>$e9MgOOf(V&~3Xi<uLhlZ20dG<7ObPwL$E%ULh~jLczv
zshP9!vBzmK9)D~j^fwH=s*iFH@p-_o(s!eSBx2eV=4ixkNGSQj6qN_rk@(=YCDGCT
zWp0_=kNnh=yVk9r(kaz$K2ILlw2|4o>D;-A#4h}10ok-jc)LX+X1$Xs?-mfOc5>He
zLfeK78!xcuH*b`P+liK0AZ%Dfyut_L&Yh)nL=b%=gWJiUj<46kX#0_#fKL#GbjGVs
zW2(|67I|lB8~SkBlJ>T}pWc0T^_tnQ3=Iu8G0CL8{Vm$LOPJH2_4l7XzKk9Ee1Ob`
zLl}V`DueUl`B;&|Zz!(aN78|jM`M_HQPH?VJQf!SjHvJF8M@<+x%+Nkym-q{b=5U<
zXE!tqam$BJo*WVm%wDtl?D*G~Fl!ers#$hZTl-RBdb}^IMO(SOd<WVSaVltEQhAC#
z7IW%XJs77cq)tWJQB)_MR)AIv3-b7%mzk5}c2`bur?}nPU|M;3#pH?W$^)VIzF5Eh
zi}wcJ`+V)%&)*|INpWZAR=VA}+3u8Snn1;*&Weh4os%lk)MT`9WGypxEzLJc|JKG%
zuO)L5ZQO+NZAJOuya(_Z9i0%Bz{rp*6l=2pRSKY(SidIrX~+)@)2~kFQxXKTGcmUh
z?Ay1!x1X#aE7z`E$uMO6sBtUFs)1FjIw~g;Y^`0fVxVVmA4xuXbYO|TxBqPI@}=w6
zEnQyA3``iMWyUO9vVQ%NWwG<xN(z-soNM6j?(Z=y8K7llM6Zf6*w4{ldgv8lJ9Li>
zfD~QAn~p-SDAT26@>_(IaZOKpuP`V)%uJ9<W9iZzB-CG{kzVI*=1)ISKlzJ^+SrSd
zeyNmS+AmbBv5h%as0B?}v3`GmPZ7BhZ9_}(vVgB3gD~|)gG{K8>m~qgpl5VU$@6Qb
zq&Lr~T0Vy;rt=)jPbZ4G%c^EHr%he`Jj1A%TZOmwF5A8A)>v1j*PF?lxD`8li8D4O
z_6h0}{_=0!^}tm~f!+mej39O)law<dlZQdW#wi2>Sb{*%G4cGFP$DyP7T<W|?~dQF
zq^G#5abVB14Lw@DH)YZ9Z@%gGi`}Vu?Nytn?iq@XDq((f@}oQN{ODvq7mQrHchZ-l
zPL0ayS##H2AAfw;U28lxrKXdJChfg80=XV?w-RfW7vh>*I`+eyn<g@c#n_bU=EFez
zMBro_AUT7(h@F{7EJNG34+(#Y9TNVyYjEIU{Nrr;j8zQ{YXXMhI}HAT#>Q1yI+@AD
zjy9Pf>lBEB+zq@2^>sk&1u63iI5`V;Ycm&!H+9gg1(t+dMr|6D#A5QN(#{@fiE_d|
zef@$3EzJvrI{`ia#o8CiGqS7iSiR=X@uklS=H|Y>qkRkBg~Ba!?TbS6@|kCt%>(BK
z2F?jt#GkgjHQC#H{mx65g!g9D*D*WeX9k#dCXlwYH3_G7UAnYuM|VR#rMoiV^{xd?
z$mu8%#WABOpv7#UYzW0-z>8_{pLjp%6CpG(%wZEi7mCqqls|)KM*O5^OOegKsj8~b
zZh!vq8xLRnl3h_Tv3SwUiR*^<EnBoD-RxF-vS-bDCf#Vwp1o|5shw1YHjf%rY`1S5
zRn5%XbN14)6GGjM3)q&5x$|b8A-A1cv43z$cztBz#k$_Kw25=`^1}r^>Dd+JF%%VL
z&lTPUR%AUe=+vtcrH!xhT(EM`qHB30g=Zl}GnPWSNC25`!G#K_bt1k2e??0<Ko}8#
zCL|s)c{IDjwJV%e<e8F}30>dp6)6SF2ewZXGoJKmS@X>{*Lv05`8^$W?MCwPdFZ%I
zz1;dEGrNv&xZ~*buCp%*PyMz2+T?*2zSC5F8?*OgLT<Y*R?J-b3`*kDx5nz(s%x$(
z+g7(P)-7~ALfC8jxEpC5#*2Q)4RG&56XK=g9!f~0UKt@3@E;rqd(pmVc)DB#w;Im{
zzIdJN7M2a?UD&ea{yah>Z>f}JtM6W2rcjaMtz_!9$xCl}^UYh9PTsanp=q2q|KP#-
z^BOe@v>6cvznsM#=bof1WFNW_6N3dJ6kP@dSp7&FX}{G*v^7VXR>yYMmXtDsgG}l6
z>?B^zr1(2CdQ4WwD%Dl9rng!(YjQGL9b1Cw(ce$*CEa`WvfVRFyP1t3SaQz~VjAW>
z!cQdR{xh*8cKOlkM-4Syck`U?I|t9*8v7z%zCvL1uH&Af9ye%-6jMHCC(Oji6%wHP
z>@S4rOwW>wOJWDxnEApq#=wo~A5UUGCQrSDuP0;ECo(tpqg_qV6F!7|(KI$QXhTos
zn#3rhm4rqxVgSPd3zQTvfpCyAKoEl&Vvs-JVS<yYjgyb}tX;l*eNXD_#XHyaOh_-t
zb8X=_F1vcwmK49w(?e`c^S4O&&1<<AV#VwakBwisd%@<j><q$^0u?hTEIrBmlpN+;
z&;R~J{h0pYS6AM$QG;@Il1gqBdm21=6#6?pA16ev__qWi3A!S&E(O>iF=0m$Y70UN
z!~%Mr_SIJxbiO^-E%Wx5r3G}p{$$srmg?Fy<*j=En({!J&ie`He|v1Q9OqlL{{AFa
zXZ&;^&ESjQLC=%Hi_YHOV6eB>_CKl5Tpfwb?+J!_o~b2m7o9ylp-@i`jz4>K6vsma
zz0bl2hlr+Ot*{h23@3KrwJ8DJB3CW3AkVPg5EZdN9_dK{`GJ4-vh$PuL}e9XgtZBu
z?*GL3bH}Iqgioz7^awFKQSSfL!8EbLYr@+|3{13#fe0yJg?EJ4NE)%S!gIn$hlLLj
z%9H@_Nyj`7loQYG<u+hF?*^Y82VV;jR2|?$FlkY~1mi7*GEqb&P0${nX9xxnK`gI?
zl?u&>Ne@gbE)XP41C*b+phipJxp0#%ZYT?0evFzhAwnF1!c~h#RTSyqk$E){>vcut
zm5WPDiUM|6wC-SPVr$*5@Yr#O+scZaR=KL9qphPuDYrUHO4|;P8(Wa%7A6@G1l(i5
zN9Q##@3Ksa$z8srynIoTLM&D!Eh@*3+mynv!l-xN5q?E{a$WkNu^orot&AgIC1%qj
zRaKF6KtA&wNZfF^W9*@Hom}`8yU6G^;-iOS0yV*47Mg$sct3D-^+3Ijg?4EGIG7Wn
z2SIcG08Dl9nu;X`7OK;)_8gcOzp+P+dLvh|1~8?|dtMrdfDc36?_$ujmU#N`M1#{_
zNWx7aL*i(>7u1Q?48g|@BdnZUK1jQZgxKI$-F3MS4I>v`c_zK|&IXw|-HZ>Lbs?=n
zZBDnC(=3d4UrLBr(oEQ8L$1B4mUNRP-7KxDdm_b>X2wT8ra!iTnY~kZcQ;b?+*fjz
z=ha%RL!-9qv<|gc{QjIFxH4-r4z<RCZw+D&HB5rVLhVxHyxO7Fs>EX9{iam4Ql-_}
zHEO3uqgE*2Y+EmtsT~@vU5$ep70a?prrsPdnF8i~tuVmY>mXy|<F&^gXO>!gaN;or
z%;|>ME+(4lPMjO1jQxe|bhs0@)eAQY<H%jVzN;wbX5YGXgmaSv@Q!xi1$eO*FB6u~
z1QU$Z;i5&wSL`t(f~sKCsa88(4k^pT9%9zPE0|u5DrxOfF%vuNCMy~G1bP)c#t@99
zMWB%x@TGG>D-wVo3dLL|lF-7@1eP)+4ui-HgAR;15S~ql2n>^C6km{;aV`Kf7(!*d
z_wk{>^tQG24r_YbVFB%Z=O9xvyomW-eXP8`k~ueuAb+fDaB%Os&4Ost+M%JfTgmX2
zb$bWDxIQnBU9e=_xFxZtdKWF~%_hHQgcQh9zxncS>?hn4SXESu+QDrguf?T|xbRL#
zZhXLhMUGTTr{n=qPMp|`3+~im6UB$zPi=oD1LjcVkEax7VN*mP(#wP>CYNk>u`J)^
zA;jaYv{+4Qy|2=nQt8vF%ob}!s+SON62dv!?1XuH_`Tn}v1iYWJ$tt1`zmTHd<Ewj
zlW?6iD>vI>%{E&zNljL6ex_QPTu?HKttu_|C}e7@+v6?wc*?yVw^bumc*;ww*ij`R
zw^E&%p9lYQ;UR!1^|LyAdpl<d@B2!<l^#!}w;)^i6PKHpX|ZI|FFLL{jAAi23iD$U
zqH~1kC?^ptwkQim8>I$l0|X?{{Xx>Em=22s3KIwp6v7f_Ek=pgQ${fL1;ntVNX%%r
zsD!qsnX>?~!;m1Pjrd7MqR41i>n3}B!+(~OI!Qy0Z-dmk*xm>OiB6t8E^7+{je84q
zVwUHNrIwU?T;<+;V_vGR!8oqP*=Lzhl?4x28S_*!{I6KIuEOWlaICRq#=N=0-(!yK
z+)bYqOk<X*^)~;gcTaU*Wp~Ur&HP=+=L%Sr!h_CCrA?p4q_reZD0H;8KmJI$p}17K
zoZYkf^Vu00gt;EUsO9rZCzZqLkb~|@%!Ro*SckfxPwzrI#aYk@pAkn#_AWCMIvq&R
zT3^x8$i@hJOOO-A?Z$~Iz5(fo&L*^V$<vul>6uL#na$~GP4!BXLTQ4pnnG??lE;VN
zESC-RIg`v<cV)5BY*gq{ij$K{QZy=q(NZ`nS!Z^-`qs*7*}Q`LyJuVo<+03b<C-!u
zn#MJ!r9G=ODilVg0{%<pVHK6|GgrM)tW}y^h2`aolNAz;DXF5!?JlZFGHE1=<i+LX
zg)Wm)Tl~hV%*?B%jh{So=H&4hEK<=t_>auyd|#U*=ZIE|c7j$4zA;mlF#jJWO4_;<
zuKm?yOVKHz0?^~vrdKZ$Wo)V8g>y=a!&>d9J)h{b1;r(E3nO8l6?5sMj6HVB<;ZVt
z+0$4QvBB@Wxw)~qSt&EyBZZB7TAK5mE@6e<t<}4AI=5cy){{&j@0zDn%FNun@!45f
zE)#PXV{&C?<&4YE%~GnK#4ej;bQR4jDxTw%i^X#1oMP;_j7cmb%y{)x;X|U8Y5lvK
zns<*e6MMFbX9B^pvS0vVFS6~#JZ5)u({3OEg%8<$eX>rMtk=1<T6gTuy?YPvQtO1=
z+)23>osGdio6drr+zD1G%}Nu2AJsANvU*VyX!HMa_DwPI;KX~H<<=~VCCkF)T*|1{
zSh8%EOaN7mdZWaeX|`lpnP~DMpC!v|%e2Zyk9o;!&9qoEt%|lyu^MJi>>Se)JI9V9
z&6W(aIm1$*6MC4EF_=Fwo2EKrH!;Vo0ZWF-lwrv-#Cn)czsF23G}o$P&ygQEyouYI
zgh8R0Jb9v`;^WH71fRMVa#|VcO=BR@3>~8Q+<^ic{^bmV9Djd<Fty?N-|hO<w8qA1
z!xN`bNb|H;cQN+ibL_dMrr|$Mp3G&fUAuYt8o{@E`Iarq`^jtl%Qvt6;?LRH^!*Gl
zzGC(R@W}!Z3KWkb@t@2di2Lk^0spJXgPgQWFhQgclH#pMOb`{`lnP7`CbP9Xl};Q<
zxiYcc{=4D7zF~TQ_wMPtcauBlG>}wKJc=DvTINwmH5PY@x6I=y^FqC&l_)%Ar8rd_
zN~Y5Q;_*B{>NDT!oz#m@q77#Q+c=MRLx-1xxv(t3>#^_#yeh%(MbvZ>h>q}kIuTgn
zpaOu*;U<9~Bf$Mf!T}GlaE1^={uZfg9Aok$c+f8b!)FwvPg!>L*r^%QdMp!_853pY
zDP8&3vJ!onk00mmwaLoG5wb6b)brH=uF112P`5!vgja`umml0sM01Xaw{TsfZS{Y+
zzq>2dx6m^Gw`zN)E2B{8G1*i(N#t)We~w+nyn{j`P6*F+Va*9m5cSOd5BTnS*|wF*
zZmZ5yTW+?RRC;e^3R+!{R=1Vars%E7$t$<Z#W}f~-mlattx09oHETRdsm7XIOQ+k~
zWUE%9^sK3=E=#hiw3Y8~%B9LE(FW)R+xb?y;-(tj5ikYTRbI#j2(lCoc<BNw9@9fq
zL74f?XCLF;TeAw*w|HvKj%M8c(Q~h>kQ^mUBg41uc=N5?(N!rsTJ`7Uf9mH4-ensW
z+*Rs7bUP^<Wa6}_#`_-Qo1uTB5*AhNLX}6AycEQN#4ri*2E7Ggm?SLsUJoot-VvoR
zDZ97Z!po;VdRI^Kd0}sm7gSf>TJ_K=vW+FLjXzeB`+A*}FX^~`Xi^g2{QD|nv2ePw
zO8$$7g_0;U=bA%z&+-XBRo(ZX;AP6U4kYiLViEQwn=0?R|C%C7XRryNe3fVqDP~Z3
zPMJg!KZ+#dke=*Sq1vt#`ijXfglXgixlOo(Z;jo^#~yIX7<HYTamRiW`xWCO57TxH
z;yK6h9I6dQ?JPjQgyQy^xH2DjK`%fpCT}333&RN%%UCMaQF~5YFH2Fv(DdKaA!o13
zXUb}|kF^@^a+f^S!Bn5(M>Auey<wd3*+_<TbR}DB&A+FFZ~akbPWP64%WaY19TVjI
z@1?>YJ9&OC(KBz|R+xLSMs8tB3cIS5CnjiUJz3Fu(Kc=@--hv2ny}uG1dN6XN0+-E
zJs*erhNCE)J}QRr1OlNbVcKEzH_<_C2zmkuGj|Rt8GWrYO~0}oq*3R|89h<Ix!TCw
z`9aGp;oU0fYQ0A_v-ObJUNc^^I4r&G;pGJiC9mS!9uNkXEM)GgRNbri<9dGJgO2W@
zNP&X6^$ZD=-YQ&}-*;V><lf@dJ5p@6{U`r2Txn>mK^+LN7F)R|(Z&!5<84fRXlcnH
zt-!xE-lC-B_UT@RagFI*c-I{JDWRDcf;(@m<y#+ZO5ZxE^ZuIB7k(7`jEUTNFDQdP
z^Gg4t_su5aM^B*dZ!8kh<w9@@di?ELMeMkk=~67A?U;{tyosNH{_Y;Z?BMm9glX<y
zbu~1v=w{ZKOiX?>w1z?+;^stX<Ki12gIv0Br}$!ONx-H7J{Vztm|1Y!1k*IVE$Df!
zNp-ig^vQ8d^<9)QesaTj(@&xq?x3yRa<=5jUGhmYBu@v$i-MJRPgCi|Ni~g|c8-?+
zG>e}xX`bD5U3SWmn%68r3qRq`qTB_82L5bL-rZy6;x{G2Td?8G1FGbYw-@DJs+RLp
z_PcMNpb<XUaJ!t9o{6q*PX5Fkp1E+r^>BT;5MZV3qOOY6Lv`vC!+R{PY`dP)83#Tm
z;eG&qr-nS5g_$3#D!^i)oPbz_{}JCeclmGb8saWvi0~0-m58h+hWzS=FpGQ1I>icd
zLaeZC4Jf&tgjcL&Zs!%2Eon-2C$TD4lG}JW&Z*d)se{K32_Fcr3m+UhI>^p18$I|}
zqWWz6=<<17U1(j~yqULdpO(?kyX0ca#r~U){QbH86^oCaZX9*Ick|j8?pzU>vTmQS
zDs8B>WvH!fsHJr%Ev2wxaG<t!V6dVv1r;JoL@Dfa{$xCU4Xozqe#$W8k@Ar1%v2+O
zAUox0JNH!bRDd8(O1>C<G?QKH>bG#E++Ip^w}?`>T-*<92dwTR20yR{+T{Uw69L=>
zC|A&;V<KavwjaE?lyernI??j;@E@KwcXjY5#lBEU)#e>tNx7|6)dAbEeqY9o1Ex}L
zAD%t$%jw)~{sh)YBEq9=@kLL(XgXh_q#!aH(@#fUXLd6`3_WwZue~|;#oh|rPi{&d
zH-<m)2=_(wnzUowN+TO(UphW)*%+2wBU$QZE4V$hj~Uc^fV+rsXpL*Z=u4nUiGr0u
zGXg6wEj^wO1Z0?dn0@7<=3?h4HdZcqiv9VevGoniCBBvY;*)!H+ZQYI!9-s^<=Q`6
zRlqSPH*APMpVWwa>>k*IXe373LOS^Wm@Nz+KoYrBXtO<}A(LZo9(+~rKt|dEvP*en
z5%8PC%m0V{SXkJ>@SBFU!r5sg`3F*3UUC-pB{zQt9Dd|^zBq1E$H%kM`CtM(4-`fT
z!})pP5)&ju#qei%q2UPg#cjYDJbRd{k3A$D*iMn~^m$P{?<k&^mcU_JbN~lHZALMe
zalk1b|CXQ`bY4j~8b^cr5arjWV?N8`7qRT3rDO@8#R(ts0e;OIX4M+}5-pX(>3e@y
z#B7xm3O5yO;3|Z75DA3YB0PYf+@fvbBGMb)TuwAB`?vL^IQD>W{bmA#BmwSN0Pffc
zuWr~pf#SiEm(mkBNeG<#@)kHb)fBj(q)KdI-lZr^+yG26%J21iD3T8MG8xw%ugf>d
zCQKmCV8e|Ema?``pg$0@u}g<;Y{+*q6DG*ad384peeDEuH)%@_W#*T~FT3t|eZGsC
zIFWJX*B`$wepy+5W+=Ih2!qG#gHC$N8LU5!HWiC<zWfkzZZz0ZA*O%>F`a-VM*LYU
z(!=oDqFRqQPR0^qy*LQ(@em|FEclW7h<X*!rlznT%%}J^14&6WAJo_iLG}ehM!K<s
z**Dgho^BL==+E#6O43MLaloG*5I=ohI)A?O{L_6?rgU}nJ$+s_f4&TRU0qYA^mWgg
zmD}6P=A@<h)8cpFH;q)%$8-!o-C@kgFfvE_rcCYXS}1HeFP}G0ex3|0#GO<69=t$z
zFZAw86Ye2xX}dtpxxgvk!nL4&Uhv5XG(64FPOgLx=wU=XIfI@{f!iELejH2;B`p|c
z8AM(>#nG;zy&18X46w^W?#;#cj?#Gqs5i_gSg})&w{SB0wt~(h;1cvkik5^^KE0hf
zBUKP6v_P-G2OA+TTMQvfIKYDorO*ftcnzL{dvIxh4w8f*$V<?y1rPu#2zBiTj?RQh
z3}|X2$<8vDj1hBNfZtJ<?^Svy>c?kTwkg>^u&b4xmyYU=)|)1%G_e;htjR4gReG35
z)Qh<?opYgVNBYX%bSFt|xI6ZQM$#GJxTYNnmg5=S7R@LP)5OhCGn2^5BaEq@{DEVM
z!|h-={-D8rkd<sM7jth;@^RJVnT7^Ve2+G@4LEM0I+v@lyuh_YW@qw$fLhbd{Y|4|
zIr&VV^aIsqG4m=y*bw0(1+!UpNY4Io-Y@!EexmxRTT>iTOFw26KW{Z=hWlr>-&!i?
zvi@w>CUK@e7_orwNzUdt7bj=Lhor_wiA>CH{sTA3#u4q8=Bex(a&{2tC3coe7MLd6
zyh&_s+(9(>c1lL2a4*w2u~a1I4swOCGbTfBpd&P-17Dy(fE0>5K^V`dB_I*Q&;gql
zWJACey{16aL<O7x3w^N3NYKYo80)G1L&63OI78l8J9uE~TIfwTx}9a&r}WwN(1lJU
zX~OYnMhd4W->~}V(R~>Peg1)~&N^Zb_m3{i(VxnycV_1VuI;(UmF6X#B-2o57Isx{
zD=Z2}=h<5xw69I~`NYet#=5H|;l2eSX<Al2A;rQAdAVuqbTWUg{h=27+7wRG@};PV
z1oNyky&>v2MkM35aZbz#`M`Egq;&-UFQ=h+5{6R=b`oYN*jWE%t#hfm{F}Abka(?`
z%8!K|IoIgC_Hc%$p(4`i>003M$ghh1A=y!yb-OOJPHlINCvM@6aJrlQuykPM!Gn9!
z^}5`BGw!y>ezLlzG)s4TW}PD|%fEldDQ8*=DX%K^F4njL2B%NwXwj?diX8cFS@S#5
z!ccgQz3GCzKaiTrFSZ(L=SV~I=LMyK%(~ADg;#QO{A@j(ckLINZ2fLt-1K=N$;h=}
zjzN3WpwIVk8JHu=p!>KA?UC??_h5)p8v&Rz#x8L0bc1TwzG@yS$o^A`_$O`inY3nL
zv9BdqP#>tSDl2O12o*#Ml4{E%t=_2%OJnoh&eH6Yx~w{l-8F%v3b#hmJ*-f+Zq<<^
zdo%R<ylZBjal{^9Q(Ky&zY|TAo$Ws`^KNIl2Y|5B%&G>ts>Q5I^|@24oDOG_TvMlz
zRYrUf;pS*jL1eDI`2qVtTB=XH)M~7qD=k<spAt`<P$c{;FDJlukhyd14>a5RQ+RQ6
ztdQj9T8z-cr$S!58-5iG_&$Q_#U(~b2uT^K*NQg`3(LQ1j_)5J%*HckG~1_4Sta~h
zc*o<a%)M8iGe+x7>LOubs3_CR6^+`u;rQ{xSw=(X=<Ekvu^((`tjsgqn={6hmzQ>I
z&i$^;RA%MlBun^t{elGz!f#4SqeTmy?T<S*XF^fD+Gc88B#kb`+9o4+3=O06XfT-0
zZY2vBIv;O$Z1!-HvBF<VNM+Dwiqk|n#>fH0VRXg00L5IUpprqXVL<9w6n>2~C`J4?
zH6Ixy<XKYxM=n{{yJB@;YEv*;9Vo4?E_Id!g@bNKf>o&PU=;!3rf9l{lYv!Scip}W
zy@9d{d+ZU)Dhwy%tipfrs(U~J%>A`v`SJDj9dbp7MU|VDkt5R!PlIbjDA#bTOB>-D
z^QB*L4N<Z1VqRVVF@NUGwLjQmOK^=MlAjxA8a#N02s}d%KTQDUfd`+87NKaFxWiD?
zG@^CB(mWKe69l^VzaJk{11L~NZtm5YL2LOahObKN=<XRet!MRYM>KZBf6G9Al`}3o
zdtA=NdX2os&%4IfR(C9)KdWCFd*ccVN%JOH$XrRm)!$|zb7oT(vc}CNSV)eQvJmi)
zY~Xfo<t9NUazI{y%^dWCAR;OMvIV|>NRV@6<8ytF2%ihrr?@I|&+2m;HIAfCk|!K2
z%=B<+m7CYzc;mHM27U1Gtn<#;UF+*Bat&v)8(lehf$L`7mz3dUF8YNr@Dg(tmqZHt
z9Bq#}HfHz&;*~aIL!UIdWKmd}p3_LArNWcJ{4{n2S+KzIXuEx*hnKVoe=i}$`8LcL
zEb1mg-Nrx`3Lw^KTsQVlncnwTspY?{$Y614q;P?w?IJ4R_tOg0_er9Q7lmc<3X}*>
z=I5ugD@otgjz`<<n=s|I34bdgCA0!!Q4#$7jvzj&7QP<=M4hRJr5XJbm){^or9f1J
z+l~bLaj`T4-2yC7aS;uU2xd!MD1$Q|UFpO9iO!Y~z>F*vzr2X@oshkti?EW^EL*gZ
zU!fGfY+$do%bQ!>sr#NWF4Fp#Edxx0B59gpv;J_bYXcd#k7YRSu$V11jyc6ZF`H&H
zGl%rn>)3U59QXRfR4m~NE2gG1FKD?m36UAt+EM?zRCCGf6)yf%m(-LcR{mKx&iI-<
z?{CUv6XC4Z?j%_zBMeV8N`x<T6MnUYgL7(kYU&J1pOTTa{s2~0K5(>BjNmDVjEtEd
zpgMq&ulS%-sTD1OcA+8-71W_ahzDx$QXL2UHXx4%qYzp>JfwLlTVe_fSpqyneQJe;
z;0d)EB8r50EM5|_=QI<^exOl!VPF?4T)3z5qy2MSfhor9S0uemWvN<g5Rx7cvrB?{
zv%fyQL{8pWKDp7@oU9mrzN|<(&&-&vmK4t;8)ow}S#Gm4r=8K+KjMVB!FJ<CZb10c
z)*E=?{Jq5_WBuARqPV|j5i|A%MrUQj7gFZvWN*w<Jl?III^A+7``p~rRmIt9(|o$K
zSs}y2p8H>Wgt@PlpRt`$^7YMaNwV5x_BXV>q~LKJd<bX9ZBx0R`YO;&w+M?$f(E0Q
zb1z)><NkZVcbDK`1Ur5l6hmNu_(vB3;V1-uFC{Ao^i&8$OVfryrU6L$Kv<h_z5uCO
zVQL6QO;An1nT(!=P!C}qN=A}@u331q{|4cy({;qZL0CiNE7qqH^<A~XhpTo9zrLfE
zJn`o=eP-EM<8#G*24iuJC1ojdO4SK`*5|Xe?PHe5Zh3J5!;~;<IoWasSj2MvuNwU(
z-FlAi72f_G$K7A%;t4lf_-NaW!lg6S#IpJXsko;i_Pp@(TdD{<aDZgoQ7#OxB>I8|
zH*=kx2|VJGg)1+0D{nFYFLS3&H}k3L3ry-ywMN<VD$~5w7wR?KuOxiMxw+hnTyu&K
zazjGTL~~|YAXP`>asx%{VP5`+*2F3jWQQ0aaG!%=7y(0((jWw50u2Zn@cRCtwK=kT
zL1WdxR?<r%_q7VYS&N+L_cV~qjb!0KRb$^Sh7pc2(}w2F;Mvu)SI(HRdiE-Yn=x-_
z8iN4C>Xn;PiQ)8U;V-NA2(O(S&D34b9J>~I5^oXS+kT7i@Yx#T?7y8<-&Y}Yv)3MD
zuD|Aa^C7YFK-JWhWYZ?Ha%$B9rT9>z@Y563M6&h}$vIUa{4MUM(1x518+jk}E>x8t
z1UX>TpxY6F$pDz5#LuR{A(4hMpaw`-w&_@ct)Fg?-P_0_(?<$5_mP5ZRrD{<;67Au
z5~eE}$pcqief5(I3Y{5VGt;nj{}vx&U8D{Sk!Lrslf=TU-hN4o2@r~l%f4_#7d+8-
zbx%S1kHf_cTN@gx4!{wW#mMKezL}1mi02Cf`GGL$;xn$AMH^Fncfb!1V47Yeg?y>j
zT8wVD$*fhYH5QXQ*<{hGg>r7<a4Oq9d=pa;Kk&_qVjppnzqoCHof%(GU49?UYDhKi
z-}lDvJASz&mT$f!Q4;dfl~P?f9~*zUe54-b)5MFO?8X-USxn^9Z`Ft18IxTuG{!&w
zwRXydc7tXF|K5^QZ=vsM!|yx(Roi}Njo!IZjVo3A)0NFDr~g$gF)yI6u3S%_L8Sk*
z>SENJfIhlFAGF>h`Op8;KJ$G~i+t~M{);{qa=%%#e~%tm>sM4jZ%9yvFy=d2D)GE;
zzJn6Z2n}7iJ0`tCIFfJC&2(st`eD!cUfTJ-7Wq$GQ1X2({{OjU5jEzYu?N=q9pol7
zebw?;#^jauymIV2$LZ7G(N|X(PJHez1+L^EH{mN9UMU(99f02Mdwb#gS{q*4-#N1X
zuX^n=Ct%+G&SuP0YpmeCMmmbGY<)+Ae>WHW??wodd8Nz#=@!ZPj?;qZ%E9mGs4Iht
zsl0OGS6jnxUKvW5t1xrIKD7+m*mzE5f(ZUv1_mcat52m!O&FUlW2LyupeQx$JAP))
zKB7H(2$0;@g%1y12X+0CtsfG}hg)}ixMBUr+nERKIW}vK-H~mzWpm382=5E82p=Cl
zjPPz5M1LUm<dzS&;IsLYO`ATsKA2;(<pguBR*)9vvmDHyKj2o6lqmw5`nOA!3e>KV
zmM@1CME;W^#{QU}W4CA9X_2|r|7LOTu;z{w9pz@e)|U2fm-#ZjFphrxhjNi~)@+A8
z$7-YP^&O2h>#O&mh0teTeunm$hxVast#7r?H{O(r9vlJLdc^<ywXwx002;ualb_Aa
z`-cYjS`k)X=`I3^T>`I*Lnsxpo0(F^a@k+Jd}xUFBlER$lEhgby@K2;G&5`H_o1O7
zT*-(I!B$hkJqW!AZMO&)h4YPH0<k_om0l63fpy|k;QonkJK6B+nI8}ROxspQepUAT
zJ<mP#wlMRW7RHhJpqG4@GHauU8Izf5N*P!fjvXs~rb3`80uYIV=ce&VSeuFr-+t!#
zD)N`AUqAfDPyQ}c-7t>(Fek_2-MXqcHh<LXH3A?I^!@<WwkNr?xPM-N>YSsND55Ei
z{F)5`36>wZz^ezMjPJcIySJpwOy0bE(_h}(yk~Rr40q7_%3s#Kx%uLTbr(1Pjy(Rs
zmOWdOXC`miyXAxTx9;8Qo|)Vx{PB$s*FU=Dt@Z2Q+VW_k?UFGN&Ou$SiLaway7BTz
zG(d8v7A<H5p(OJMB&<b}N5#uTBpV92yF6AQZ33Q);45IV_#cR}0eVPGhTX-<DMcxs
zB6m`8%KhRbH^cJc9bb%ADe5eLAI+D{@0?C^FPMN&DeMhLdWsA4&1RA=ygIgNeksG&
zeQvFjt83RyW50A4yXmI{pD+FZG(RCNb!t_ZsCo<dx-_?#X_}iZQ8;`1W<{g3`g#$q
zD1C11yv&hS$1(-I!Y5&sx-QLyalaAzoi=U(wq(#CAl(BzjU{Fpe#%eq1@kv*2#*b{
z=wRqVWw08?+8NbBD`0_4(~eo91aZA3#1tS1Gl8HJxHyT>$Oi_C7xKRaDtO$$sZ%u)
zcKEDV<11vWKP@!Y8b&YAC0w>U!Y*&AaWw@moDVj+YFn0*+@wM_Z~16Ljj8Y@VV;%z
zk-Tja##_n5oKPTyS@OsSRX$zv>aF4_quzCp=PElTTUIA)Q%76ndE&BMah_a8j=z<a
zJt;cK<hgBxEm@Z#4k~@W{H0GB6lbi9NX?ESW-vM_JL@g-=EB%t7~?_#<{d_>h<(hc
z6|ql+Pclc7qMm%EGo2`tK1_2c^LvU&HAovW^h5C3GVy=G_%j0qOmi^-$MlUzVhA4-
z4<yE>!jOU;8Xb%WC>W;ofB`{OX>hT~*MfubG~Adkz+MJz#`W|Pa&3({^>d}u!<}cu
zH&!Al8l!eTDZC?Qi1s9t#c;y=%tK=4QcFvVu!2+ne01TWX-zYONM7|Z0P}|c#8C>b
zwQy#uHN$Mpuv(4W50f$#UtC+|s?76@8f(k7n)51Fjv^O)3wv^F{GpuA8SS}YZz$Cx
z+=o<P!bUAwZrHhx=Ngi1`hco3l)HSVw#;4T?URsf1!bL9E1hr@XbA)SeSXZX#Fm6+
zdG{%Znf`$jLRXSWU`0*L5K%z;%xV%JLJ08yYal`jTSD~1ZFup;7lj&pF=uYdNZ$V<
zlj_}6H+o||^IYun=b8GAdp7yJ<b~_3nK!5TAD%Je;lSg}g4ltgqWCxSceg$%b}*Ea
z7Y<KHe3{tcg6ZLKUQURa4|uS5*|Lv6UIxBr23Gk&Za#iJl<$3gg-C}m$TXlQ1}_VL
zS;VRG8pta<SETz67dlk#>C^5gw-wLtKREd=_FUccidScoS1P;fxvX+=(m-)pX4br{
ztkP|f*4*Ih(4`43p_IlPiT^zgx?x0(pquUBi7MEqMBl_n8%!Z{B#Lxj)W#b1r?N-{
zkqGPtrb6de%06DqYRkxM%gSlVOmDlD-}>ZXp$F;|Um6IZx%u>K>%>Ljnx^I*`**c8
z*95uri7i=KEfd=^GKATK<c^eQw{Kbb%JoA_*CF`LtIF--WdGpdosEq<4-fj`NJQs2
z;5E2=!T&0-Lc+RG1Pu?yHpctNH^Q-^c`%;ow}y!Ea&Q9Jy+^*G^1(76Jc52#5WO4D
z<?e`9Y!oBoPbA3H)_LtkktyW`!8GThB-M0|o32V)<V*_|luwBi*}XVj9RBXp;bQwQ
zh1cQd9(d`0S{AglEZ|<|HYjZ4eFY0LL#o=wa8j`=(paksWiBZ2jk7A(^Za_Hb=>9C
z5m#|in4ZqMnx0l{_)_#U;q{;Xlmw>qH8=M))B0;LmX+M?d_^3Gr-zj7gkOdq@fh-8
z6Dmfl)WC|iA6L?u0Wtg#BbM^GuYLU|A^fO2p*dlCqY-4jIeX9mespRX3F1dXzk)K@
zM5sa*(+^ZDaGHz<00bvt@-+^v-L7$x`(~tCTGw~GJuP#q)ENa=XORNWc*az~MANfE
zX~X|xNuAN`^(4<2r^`@RjaC(qtg?avgqZ3KWu=Q_c~w<;xz$yzETe^w6w;{}^g8&{
zk?d5K9c>_~qZ@xaI-kq&W)r#5EMc;}*-Wtcw~eDos-aFS_42YLhqka(GaIJgpl*D`
z)#&Rh(@n2lUnS`qx4m4pq;qASrAOw;h^nW$BI8q+>&p5{R!XYYH?5JCZ=cd@$y+%&
zRGpJwRh6Gpoz_Aana4*xs(c<9X1Hdl7pRpSzHP{C*6By(q)K8X?FQRK<^f4+&M1w>
zY1!MxXZOpb7}#_MS8(gOr?6#5ALfWg<H%0POg94Ma1I&sE{UEMA#*YvTc#1=l{&P5
znlaMMQA~d@fTIgw{KlaG?Es4Zp#O1!B;gB6I|%>L8HvuqwTK!7b2Cgt7Ai!ID4#Gz
z(gz?75Dh;O*F=dEofv;+Tu+AR570;_9OfbzVf2Z#4D=20_fp$DeIMSAGvR{x9?ryn
z<7J}vK;eq(nK@dQ_VVXKWzn4Utn{&M14=T;D+b!enoQXlvy00aCO0Fa)1Q`}mKI3&
z(*y?rY^M8Iqmr*Inw6PjGL0K6c!;w*6zX>DoHE@mbLRAsMOhA+{laeI$jd7z$j^1|
zy5A<VXD#Z>a?0!o0ddLf$0PlIQ*CW+V_pbOQ4UUcUBWw@PG@l9>h^I)b52%IQ6(?Q
z$;ikdIlLr4=ybYHhw`MH-RWwmsWtih85usmX*6@2CP}At>U2)6E=hAwW===#=vtP|
zX=rY4$YEKJcXVw>&Y(Lb*`4h6lvphmlgR=vpuC)HTVmUmos;)^Lvv=%*xJ#lsT?O|
z_FsSfekPwVIa;$X*fG7kJ?JxQv$_1C*7o++p&*~FHK&H!yQhy0A;m)uL&`VTH8j+1
zwtGA(s7SPk_g_#D#gE3~&EdGz)X}wLb2FRPCwowY<doCVu+gg4X<=Oi=1Qycc^n%W
z8XFrnz)waZ%7Dy$J8uVu)Cl`)I{d%Z(b(&NVA3w8e`18ig1CTw_K9&YhtMM+IEpgD
zK^Ei%3Z>X0Tpf>7N9hW(Ry@`aPWdSfBphcD{1bQ5`GoQp$ZPR8__6e-fX1)f0L9U-
zE#JxsbJUX;$d<BM?(~c=Mc#lU&p>`4HilW&M?7DOGJL))R+*la<$0&h?riB~n47L`
z2xNNpks(iN8sB)}X2Nu~IQ6X-T`=F|Ov)n4qO5|l4zttQTpZ0RR+8)_r!haM%kDbS
zHTgu>)Y~Rbx=m=<)!MvkOw+FBmfcKn?*UbEXaB(|Hr32~t0$70#@VB)u38jrnpV|J
zn)0rlsc=j=xO{4g>Hw)6>l?!`SI=R@bIh97%$2_&<QFS5Tam454i;WlGt8LOHb>Ir
zi<1J$l{NCb;&emO%9Tk(pHY%0uSLY(Nf#$4t-S9<SJ#RAZtv=<YutTgXLIw;BfA?R
z4SRt7KZErL&8BXGZAk=ZxG5#z6<P2T7D<98crUXN!?*Ycvyf+szt|`iGhwZe#$FI2
z>Znhz4d_$Va9o5pBRm!DT-q1E6GJ}i8$PKNv-LakgeLN%jM&?1n?_?(C%*AQ#7>uT
z4ZLRrF=!&j5NEQ${)AM2UL-c*GL(kc8*OB)WcW!X6PY7Cszz!egIMsFHz><vCk<jo
zsVE<%DW}i+1QYyk5fhZhPKtr%_Bc(JKlG5W>p}iCVaFH8xwt)zAUeAUzJHI#-$`i;
zSJKHQf-p2G5CquFrzMXH{THQA&k;{Y91OTye-_zqcg3X4-;y1BBc=uQ^<)8Li5#+o
z`vLn2G8V5EU59rDDA%KG6BLR632l6Q9*eV3YFkS1F6_p+EY=WlwwGXzaKWYwk(MZa
zKMi%9LbdxT@av58Jlq$@uHvRR7sX`&7A6tH*LUO3_~zxzPY$=OF(xrYBGYSa#w45F
zrq^gyG8wX98I!E`teQ%@Osi5c@TZnZwb7DHyWS{Q%Vc_k*%l1x%`%ltEK@R^)zw@?
z%s(isQwr$^W5sH<PN|kDSxzRAt5n!lYh*IyoRpYeQE81*&B!SQd|7o0jZDGva*13@
zmh9)mNP4E!T67v2;<4-1cB8`%RhbrhdI!TI=_aq!s?@4Ht4^UanCvE;)#)Ts6SBtG
z;2WcpDtVd4&{S-8g|8Ve=6H!rsZ`2zO5_W@yeHQxjpS_!&MA=TO`%cBWr(1|<9$k%
zT!X}LkaB1rPJzxtfmq8+D4){9h;zA>;mH~A2Q)F-6lgqjs1Fky-M`#Naf8d1E~eOh
zECdm02W-tB2l>;E{;GfJgAzAGFiIxA2xRlrue~L1M7sQb|6N|E5^lj_u}bN@vdL7E
zpQVf~Jt4f;y0}!zE953!lC{KUGZ~d~xx%DPvbjQ)%|>M4MGjtLV|B=7OVXMYsJ78$
zvz1trbSAlimzFMWC598FV^fB+uRQx}uOUb9GzGd8+0A6}Phwk6^gqrW)t8bhmy2~u
zgWX~_Xz^mXUSqe|NA_$Iqgt!fXbi}urqmkD^n_ij!&OQRAnJC566xv`IVlUO@}|>=
z$Dd4Jhrf|G(!MDs72IL=99HbB;u_$PB!v#E6goT-of7W`th5rNDbdV`vO>G?@(`m*
z&A&brY4;>nM6@HQ@KZt{f_(KzDqh5IzcSJc-`fAy)yy*o4v^=SwbA3kM@6+Bqgp1G
zDrF{pFyCr67$j1a)TFm%7DY5t8O9f*l9>3U@~TXmHOXMp>SR)-%4@UPT=5+-!#Q+o
zT7`ugxmY3Nc$q}2)T&)_1#%m5a^9fOs_(meO0Gf^BbT#;UZ+s0)N=OR-U6q&sK%;R
zuqvt6V%0kgM!?1;I=#ta(z~!Dhvy(J)o8`MoR=^Tom?u@XwC3JwwOKg#Ew>JVC537
zSS%B3)e5y-DFr9T@KI`17)nwJ&k0tsjMu3Y8o5FyMUrP3#*`8RTqa{Vy3UY^%19%3
zEysd4u7X5*pXg`EfssuL2=!E;QULycH9X>)`mgtjgn}^Ry@U={0n!1ENUiGVrLRWb
zx4CQFZAMHbL;SzocU088(zE)1e)bzw6px2-d9dOc%s)NLUm?Knel_*#i4T6rw%Lei
zM~N~~HVQ2MdLe0atIJiO1nrB<yFPz>QivBK-dyx)<OV6vOU1gvik#$Ro719FsT2-_
z+m+%@a#<ZRBr2X!_TjOLX#uf`#s@Wt)2CD%`><?A3a?UGY|a#y*Wt9dWVp*_@VHWP
z3M;ga7$s70NlXM{Y|tGE^*5D_?0n}Lk4J;31qnW-*8F=rL}{PpfSbCM!z81&n}cSv
zUMB~~qC2*nidr}w^H#$q(m`%^RYndD&r)I>80yM$Y-YP!j|=5Gy&1Q~cQ~m6E@e*~
zj8wXW!Gq8@B0rdzXD@FsN5oP&&q>S*nZ@9;SJ^ENJ-C{}WV5&(MwK|-Hod$^rZh>1
z_DYfLyr_J-EnNc7TZhYt{Lc!7!D{nalATto0hu7hF9IHou+{Mo-a+$x{Xgd313b!N
ziyz*3%l6*0HJfe8X46SR5=aPy9$M(3N(~?=O{9o4rGr-iMX{F)c&`Ofv0eqmf?h8u
zilSn}YZv=fvXk#O@4FiU>b?K(|2*IGd|8%#=Y40+J9FmDnKNh3oWoKA?h0i6c}ecP
ztQ0P$!QU`wF&$}?qNvnlQV9Ne^?6CWp+nX>Z9;^}wpL}<nw@s5#h_QKF@-tpPAP?E
zVg3U*e*CJv*)>xN9d?~Y<yPwq78`i4&1o=c)ks;bHkVmr!3;*~26qYF7%)L!$@9?1
z09yk7l;F9Y6upI;h5hgpyFzg-#_GAz1HO2UG8w&h5J9jK>@dxpW3Mu0W2hD)ZZ1l*
znNSL!E01XQ_}pw7&T&bUUx_JFE(lwO^mHjnQ_{dDOL)YpR~t>1A+x589@)EJI2_LD
z-*fb+sTYlrQ;zI`iM+h{@Ilk3&z;*cY1oi_mKrj3`n>s51En5=*3J#QYH5wA^JFP=
zgU-@IxZKE!`waR@OCVyka2Ot(%4pB>n(U;g0P~pEsdA_idWRE!bwrEZVX+yE>S#35
zr|*c7lc$dyI-plfN{t*jebT6s!b=8EnmTv>^ob(}C-d|3h7OrF<+4krPZ-&h$j>(v
z*D?PLF1>EYeI%kZ<|Rstg3d9+db`Yar!rI)u;*&r!Gb)iPifMH-BE{&2Z@>Wnn)<_
z@u^jY+(dB<{8b5Qy-xTW;=7ul!AZg*Y=&YzdW-SZ%Jkd_1_2)oIA;PEER2`hu)cz~
zUKz#A8d_#Z?F{vN28W2V=eQDEN}b>L@e2xH$c;&)*e&v>ltz;$D`HYU;>pP#7z+8y
zV|j_#v=2CyyO@5X)kWO!kn(zw&A}u;wZ?3A*orVmS=9KmSnP=@<3{)E58uJjetjO9
zHf=0RL?YqF-ea3v7R;PFVi@q7JF02MjD_=OO+hM=$Q?Cg#!ND&vWrgtl+zQ<343um
zmyjAPI<V{jr&ZB)Pbn>3DkmWVjoTZ}iDr$${AaZ}APm?naxEZmf}U+wlZIRqi}ve3
zdi2aGV@CJuJ0KSA-*5EjX){L;AJiuv>z_=F7}_#@@w}OnMi0v`C`b%PYT;!_4K0AV
z4%Q=G6<sg~j$t;KHn@i`19`{zGMorO)He174#Cy)aq`3wmcC&tW=2)GvdLTAf6nZ;
za#xHUaY?uS^Lx!ZTpn?|BjtzZ^_t(m+a)8$uE>3B_MHC3T-N}9*Y#S}zldpWmy5b=
zw;4hP+jd;dCF-}-njLqtxmbi&Z@zFXze76llY=!m>O-O-1d_x@?nlugf({G>5o1`l
z%cKysL@{33J~wxY3~F6S28l|i&r|2Y>9YvwO&{an(Dwm;BYi*=rTado7^9CvgHJCJ
zhH_I*pT_7m=yVVRSH4HSdk<2_kkhA?N(Xqa-l1Ii9yPsdG#O!?6>fbGYFV5|)A5_(
zr>wu?u;OjS=cpxk1{3E>YtF5cWah%Ow(XQ0k7a}h%&K?-=E7`1!C6A`Y|LcA^rVX%
z*iXwWyci2(3@FH@`HW1*(y~lqZ@A4qj9p0qwbBVT&SIz;eju30%#b}|FNen>R2wFM
z?A?{Nia6}wWGHM9$rS=L+{>hk2x$mfjro=!=3Pflmf2@>1`NhrW0%?>rVA{n1g$_s
z#AhsU>xhO^AtDG*cnh{Kx(TXaF5%oJ&c<i^aClAa7pzIUI&6&A!t6_jP?>I>Y2c*;
z2k?klYK420*o1^K>^5UQ<W;#Lttysh(UYXjo>X(LX)#f$BTBeG*1JMFgUy%=Uq5Ok
zuV(SxCJ?QT5Kbi$4dH0B(O+C(<cU#@@F!Y996dwNH3an<gNoNGHIunZ3-UxyV?Yy|
z-rrvmfXpvw9b;}B7_b=2A|At>B2lBs3Au|Mrloy<cI8<8eFEWW?%AdVrM25l-ehH;
zVE4X-Tuo8uG4AATF43UT4GE4}k_RDF)MOPp^NtR!YSgMsJhOgH!16Q8s#a>O*&dT7
zo}cUQ6!mbqom_@&qbL|uiBSf%&04G1Xas~F)K>Do`aJ9XYR#%0&;pfL7U%b^DTorS
zF+u-o2}g5_5g^Q<Qd?{)VVubvFE3OXHENSlBOnT}8e?a>a2MaoER*4FgT-LK5}bE4
zMz~YzToKg3D2EBRi0z31)V>}8<)(#N>^GwC%NSXO5%r7_vP~|Azy!Ei5oN+I)5c1a
z2YBok)We8BO*KmC8SH#PQ5edgYevW}B-v~C*i1S-w;(hiZ1-MV?&@9R>GtGUQCn)a
zb{|zxoRt+Vn4O*QIy7tllI@ENx7Q^f9GJS-?SMZEkKS3gJMK1yf<ErnnC0(HH3hXg
zPnWR;7Pqmfyr9C@Gn5mV6pUCaBB8lC$<!S++6CPP=QxArv*8{hxsvlaolgBJEw581
zdJTQX;Iii2-QXV8Eo9R~mqc={j$IQSj&Uou%^cvl$1~WjBU*>{p4gzGd|$ULWvl+u
z2@AV$IP+rA`G~J9kgZW`1W&_&{>`GJY0BuviiYhIM&H}L@5XXlVaN&BfbsaO-ac&a
zGu`7z#TsFWa1V4@Ug);+utzr(>kqcx09J~y3dAVJS4JVJBN#N5#1<u$B5?wXM8R;0
zJzgg~Brx8{uq};zi784V2oqrN#Kkg|#`*7|ULeIbcQRRHeMZHWeW~1Kx<$)$v)<yA
z+Yxs8tdYzh_m*?CkPJ_XbnIAimr<Yk0!uf84$?2vRj3g~9IGdlP7N7Pt&UD7$296f
zLUc;4K`p4BwbmpHoc3ZO3f#=4i*!pDkup>2Z0eI8oN&TIN036bmK;kBOM3N2a`#v|
zM&!mzi!vo3>I{0ee8Un=$;OaDXE>~*1q8td8NOnQ4}^QU=b#76Qe;csxq5=86$*Ad
z8XVHD!t~^Hu=ZAp<%rbh;wwX#BjS}IhNzH$uOk#;2*LiH#N!y7OmBQ5G%m{p0h1GX
z^>$MvV%o0eMXvSJ9zA+2TgHted+CVOoy)!;Us<zKA8{kX)JsmM79zU{&5x+$P!hGq
zrO0im;;=nSUbbLyA_~neQ|`1}qiZy<r|PnE@Zg<;iDJw5-)%W=HQTHo4z|q8hcu^S
z`UIWcfJ^8d*mp!9tKBS}pJ%l41Zd^G-_Z(M&K75IpMkz-0~T$Fk$8}c!x95QNO4?~
zaduT9Y=Km;1E|2kDTXda7xL63^Lj=%^2|_45M@+FKr0$7q*c$LKa*}7>(7*Dk#5-{
z-MZV2oXGjMr+zc($uX`xz`9Z*6)|<E)On&>rviz9P}t&I3Bp0g8cbvlI$uKzg%P+*
zitWyVWVP*Cm7q3gQ+MhXE!8dh`)wyUaeL}?>bGZF5U~(sbqT0&%vf?asPHq;ph1Ua
zqLR^_UW-K>0Auwhs5S4By%iu@Mkk!22I0kb@Z)frwg)t1o#M`@=!h}}S6W77d<P#%
z^%Zr95mg0Pmlze>B?+dGXCEePh*2RvDfR)m1AagH3Oa+<rPYBzu^K|VkTB>3@+i%t
z<3CtnSxt74f%H3z-CksOFja|KV=+6Buv>_U?xRyylb3$!%a1%(=TPbqB_4}mgVwDz
ziV{4%(%J3k2=3Pz4cv&$Rx{IwnIXNSG!jhQv~3;%^CF^%5{vLR-iz@7xk##ix{XrL
zb`*rAR-z%?XXH65&~8Wa@{W*aNGt6kLK$MrF`9G+(B!!U`Nie^XdE~2z#x9yM_#v4
zuUD#6O1&P-7c*AP=@ja4gW?&XN?0bH^p}~ul@S!<KUjpxl*DL^xO1#wEFgb6R&kln
z=BM}35A3yd`ao_$*C;o*^Gqw*@I#$eZ3xquv`e<qu=whnNRE^BBf%<Rp0HNvF8M>~
z@D7Q|DKg|Ly+oB`&B054K012XB~Gn9_3EtXRmoy|X<gS5+!pqd89VD$oZaM3Ej`r3
zrCYjdVZIL*V|d3(#a!6h)M5Vzem+zhW;Da>Ww?`M{(QQbZk|u@ga62a`P?YFX&y_?
zBMYRbWd1w}MmNQi!VvgXy#NMZPJCa}Pw45diI0BrHSr?JJ<pO}=|AHAnx4iz3C8NS
zuY`fZ(~=JsMt0|zIr@-!5|KE&gjXdm;aB49OaRY}W%RQ&qVdbWq&66h=sx%d+H-67
z1==hRZ*giImWx_8?f2CBg*=VmyyvmWAr+i7>TN2W(dAJm`^>+`COmC0z?YTL;<P>b
z?(GLH8k^m!HD?)&jw|*&LjRS_ah29*>2e5v;;Sot8XY$Gj2eS`{nG9CumitDQ3iX8
zTf}_$D8xQ4YX=)?jJdFIiJ8d>&A?cb8-rgZ7*eK5>E`@#vjm05WmP#fV3Eex|G8?V
z$z#pt^bTLPN2L$C?XH0{Um9StLKDwf%+9QAuUc((%=_D{kv6;0=1O3L+!)i3UGwrg
zS~20Vl@Sqa)*3cGL%)4!iwT~-Oq?lD<}hpA?qPpDeVLOBdG$I^(B#U+I~-Q;jgQ~`
zMR}Gp-<P9zCSCX5`R{*d(PZc#y1}mQFR%gD!9F33c4GyS`LJ^hnGes*&zSRi#0BGZ
z^a=Vr;zaZ$HEjygk3K?s(nm-?^29clxQ<<42WPom=yREjHJKcwKMif8kCMLIq#*AE
z9uHOUYpP`QN7~<J330!WHFO#Mm@Xr0h@aaE)6<P)A+eInz$2?*b8~|*4P{KMREL_u
zF#>mxyh#)LX+Al=|Dk>RxNG*)1bK5mc{8<WAIcVE@pHQ{4=tC<T0$LLNsf{tdXyBC
z+vr648l6aPL-gR=NfBvJ+=dq_Zh~!69_((UI-h$xcZ7_mcO0X4knzX(XO5+u+!x2l
zc)W8t&I$~L9}5#?CG7jbz|Rtj!wDz*bunMatO+b`9pAWmHI6Ypxq9^)h(-;o?|+v5
zMwHJImEc%SpG-Zpn!LQ4G!WIAcZiby_H61QZoso>$u&5GRWBTD??ZTHgEM|WFSEp@
zkOO!{8GJ2c>5D7oHouHl(&vBriPZdb|4%>BDqOv==_hu5KY#PbAJZeL_qZ@Aucv*b
zi$_19H$KF!9{NNYC&g(0?ZRc!IAQWP`>;2r=O)QDhs4gY$LC<rjc~@xL}~V6Q3E8Q
zhbg5cF&cx5ovUZhVW`X%jce@LP+1o8#bUl-d8gjp2aWRuD$4rQ4&`SJt?g6Rx%0R|
z-FtT`53&rQvhrR%8#5VNx62tg!SCx_+PBMae&(<)y(%gKUcl^CQ7XX<m3Cg=IL;fW
zsOZ&YSnH1AUHX<*`u*cC$iUVgy|HJzLHGuEwP1(c1<MaVWH&ZSY$4tj(n%Yiu(}H&
zD4D7ZYII&zCWc)|*eVeR;SqB2BahH+_-=pX5i+ZI?OI}3yLRo!`!|om-vji}{Ubk-
zu7qzeQV!GSr9p+`q(eUc;)~BezhTG?H_*d7hurY_&Yh&@2GCs)e0Co!bs-tRpj+mh
z;8Tn<$@pa~G%X9sxMh#9NMh`^D-)t5PL-CP%D5iYp}fSHL|&-cy?Jc;=td}fB8{WV
z$8L82*#mCOpXSWkJcfaQat<KIY|d&2!T1bO_}ab|9v0RsRwEIU%vL}ZvgNBJvB)+q
zAO$J9isU8)`+Bl-IZ2k0O&A%iNtR4F{Km+I8OGp)W}X8lLzi;37h-yYc5r~sMfIvX
zh}z`Lf)m#|x7&z)8n?R+Ze6oHIu&;ZL_jDbvt3ypPgYhS&^r*wVwYZ@6??ZR3U{iW
z-xqb7)I=((vHH9h6m?~r^k(uaz?!q20P1lEg1rJkH_PVnTeJYH23V;^;o3}%YQv~e
zmL4_2)|FXn@guV*%N-2#3SuuAP@LHSh@!XisF52Q&)O^(Ym6(aHYZ%?Mvb`J)xf`}
z?Q7vtVFP#<G(Aj+P9sDflo@F{Gs#IKIz3=nj?8n0XMAK4Nrn<mkNV79$(~DE8ky{5
z_!#zSJ|T6JTv8GOIsj)7xb7yaPm5VS7%*A<?qoQbAI<anEheN?cBLuXXetXOv$Ptc
zIuMH`3c_)}&uTVXeg1g307sq!YNJLQj75q~c8|tjQw7Ydq&F`zG9rU92UIqL2DghN
z@c;wkZ_H0dVtx-)p@0&LB#Uxlezj3B0SY&%EGN$chrcTSfJ8DH^Shm9v(4*|MU#a&
zalgtam;=#hvB`n0SDP9ZQm~Qo;a%Z8AFHxCptk9?cvmO6$|_VDFN^!Vtjb=0Jd(^u
zm7()sRW3n(o!+Vr1X1HG*769zNHEoCdC<frEQPD>wD7pFj$j^3?{dkKNe4Wl6JcPT
z=_Cgn+u@TQNtuq6I{N%F=Xw_X0N)KAJ38G}EDG>{EhLji$L{YyE$8~1joET3R!c{*
zDqT;!p+lkcYDTKJ)C`%R&T9t(6qjeJ%a%&#UWE5_D8#k6tPZ1zX}nEp6Sixtc9WC}
zvb`HC)Hv#ou(ZI!$7HhGoK72itkEb{NI9}BHZzn{a1m~?+M&R<n^a0<G&pVe$QjjG
zk$kAq8Jt#^GXvUWbXZ(=he^XALAB+u7D#nq2`Ix|E=#6HCcD+?$TjIy9~!hUzkvK_
zw%Q$tQE!6bhFYn%z(9mmNv;HYFH7M8l<G#i4Y9LqCNqj@Oj^T-YG{I`S_D-Z>}#`1
zxS(Wb&(&t5-72g_L(nYf-dRIfvsjbeR$D-$QZW!8sALdvyq?`b^;rB<U=Dw*9ZnZS
zQ;Ui{gL#O<o-i7)si-ouj4mKctNsxB5Ue*fMl<k-%1ZbHqh`28Wm&TT*M^-nK$0tg
zoD8=tr^To>exTA?Eog`IrgYVjGGS+py%!BB1fmVta%=BVn8h%#>?Kl{sy=`P3Tr_C
zFJe8#@F#aE8o*N0{FLAJZ{Z%C$HAEmTd7QA<!R1VmJx9>V$1v)Q-%-CPvpl(4xZ7n
zU_r}_!6V~H4jn#a1_#5);Y}@5FJIU)X;f1Ze@&w=nz3NfwCO{K=OrNvM%zBcUeW@*
zr;fde@jQ&S43%d_PMXiceS$RL{;Vcv8hh4vuJC((p6X5w4Fd)=G<2%=_`Lp#&h<U%
z7Yk-e8#UOr88Wlwvdda#4jGl3pGXcHF=ZxK;PX{hH1rrWpl7%03ct_quc)r;)i|g}
zkBUm4U*29>EN!nO3z7v*&68$cws?BWu;B@8ws4AE_%+)D-%lE5)n$u%iOAccqK)t&
z!fRmP8_FXKj=Vw^{N$lG(On+WZ!PUZCa)t?$kcUYGVQ}{ABQkckB`HtvsGKSlI7gX
zbR12=At{f*5_b@uy`u;4v_&Y#JD9IwJ|yx{{0s3Jj9oAjWrjT0vV<-m-IkDUq#pm#
z1xx2lozOHGW~i~D11C?pWOjRMz?3OMF<tvPUHAFt<nqtS6^Yy-gC<Ryck$G5!v^PJ
zdyAzmxdf?!`3WY&uy%inb{9elWb5w?RkUkl<gSv51mYpFX^4%4xEm(q<>usA@RyU5
zo7XWhdL21HZ(hfcw2t0P4sZu7wqPVTQB;`74QJad7F%{0PHBn~xsjlati1q9h%nRk
zxp1G*1vrYc69DIWLU93>GGrx_8Laiv{S+pbzxq#d`F}k02D;Nj{1@frhUJ=ubMrbT
zMz5z0WcqqCowVRT+Q4lePx{hF$KyQUmDgMYyS<U9D{5X`n4cSwYaYqXFDypQvu$J}
z9Zk<7s*Om`l6wd&2C-)8NJGqLqzi%K;wo(1p>~<RK8M4Wo+lsdvG2hi51wq8N*^Zr
z=|so=)6<8iU4TPgdu-*=mH0<y(8CAm;X{W=^+9s<cev|{v#;CW+l$fgdGGg<kjSVx
z8md%bbyn$u3YKf}4r}oAZ16M;^Q<Pj>E6|JH{G+E?j^fd!DrZOgJ1jC;Mdv|T;Cz3
zgG)*VmvUh``&az?m0b7h-+tKf!w&qzE=DfS{Oy6hhQmIg8mkH;ydEf^A&!cbgpWr<
zDhm(BnIRl94k7Lb6a8Ii>D}Z(G<7P5&v^th@8I7z9ju^#AypOdPkopk-o%Zg<If*T
zcw3>u0=qjAdy+0-TC~B-UL5VSxon{*AA+WtDVv2m=yQwbeMvu>x0pUh)-9epo8(Z%
z1p2R^$N%#4_@C*&xQqWyH%0ILSClOHlq`(W2U7IZetPPmhe&8Y8y`^V!yfr2VU^@V
z6l>3@%Rp4{L}?M@1qkT=^)IA)89glh_X|C|j8xGVmhmn!3rnOoAI3kroy>ap%|{-F
z89k>MiSv3(go(fut23NJRK~?<rHHs`9l&zN=H~s)&GdVEXEPbMpNwy2i*Nk5A2+xo
zH{E>mO*g%~>j>FK=<FlAUdBH<n_TzuF4VOcx}MvGOBi%^)C{$h0}`R4s5+F*AqV$7
z8C*dh7(gGWAcJXyyhrcH#Q=8meuTC#vt$zulXuz0kVewP?!SwSLn`Qfjd(`{eDd#z
z*}?=jFarZN^RT4|(=2T2wR9m9=uhNf_#M*G+q=}jXh;jQ-Tm}uGC^3<e)l%ect7$8
zLe)>KkxHPtkmWyzEPr(eI+E9?;7T~a7>cW)v9MIevFj4TQMw?ps6bXx-hllV9lF1O
zz|i6L_s5XOPn{%H<4=wmLtlKqnf5;Q4t;U_JI&2YNc;+tpl@D5-(IqqzI_FKlO(Pn
zaenUjcgK!BKP#zze=K?8)Vtgumi<J>?2DI>+$&_dC~f-$exwzWzQh*Q5LOEf5xJHL
z<OE$y7Sr4b<7qBgLa!z#gf{BBlRictzmq!1mv@q0r1zbSwt{URVC_3!#^w2K;aWzJ
zKCiLjuh9b|hSLMD0nn1yNFQNdhg(;XrMNYmWo7U@ZC^+@l=|jEc&kXTg*fP!E%d`x
zE9r+V^h@GsAwl74`PQm)x8U3)*uvmN+TKH7w@B1#tK_3FrE^7XaUFC4Vr2n|i@b|#
z8Fd6<F7_iJLL2(I{K%*guT;>V9)b={@et8fyaM+!Z4a>rBSzxE&kxZyLLMU8idROC
zU<Dsy?<s~(;&#XnMM!{95tRqWSfefxDkKrVs<=(XgP7q>5r<qwFqQHUhE1Feajs^}
zs$na?tv^Gm!%#I01GRPz)5B-#zgaPCRr(P<9LBi34-cOYlg{6;M|?I?_pz)moT)#v
zYS`*AD~GTCuG=^C#W1M^jG^=el=-&Xw=0LQ9J89e;9F#7bu9t?-zI#fxD|=t=_?@j
zbQI;~m1j7IePo5Pv~^f23;LO-Y$b!uML0smtjlg<W@A%-S7~ENUVX@mQ&}KD+#)A)
zw8S#8%_jDdS3~UGGVCDRfaL0GBgw+ag~>>*A<M2FSDsy2l5e$CXPE_EpEAVWRcmH7
zX|ba{be0B&fVE|Pbb>jn+G5Qwsm!iy);sNn41hY7%4O3x<MxFRE^g8ayte5NAXJUg
zI9)34KiV0Ss=77BVMEo_t!m12t*En!ou_ok_KEg<U&Ly!$@3SBSQnU;B_xnnZMR1J
z3A^aa?lQd-%%(&`%VZSK#UF}KZZUAY)~f0>T`HgOqkMH<fD|juHnUkQ_UF~0yf0rW
zKdV@@Yj|*!%C>Ld&*^Q<iH~9M{x=zixzm@i4{3w-g&$!C|DaE?JKwQO)5e+qw>^sD
z9Xm8_*P7{VCQQryxg=~jw?Aa)nCR0LJ$+H8r^l8DVU>W;U+8Ilud=RMje6D)tsrQI
z&V+${*Ro!E^m7&ZxwtY|IXctNtazPT>9*=e<94RJuD4viNdx=gA+yvPl<&>xBwfC0
zq{iV^a*s-zQbvmf_THH-s!Xa@+cL4L+mJX;Pz~u;HEEhe0hN=x1pP`IqX1iVp1(+m
zb3+!fIFMUyV;yKy`h#7jl`#U)PoLa5Q@Zoy>3W{iSyW}yIuy?h6e&SJCS{R7uS4+}
za{m)Wr?xMJ9l|NegBLqs!A1)kD>7z(*W>aKW)Iomi^t%V*C}U~(`>kA#wr_n@?ez*
z>N(JroHdqveRD&j(UlW!u5Rodt}cv^?3C=Wp+~aQ$auUyw@3e)=A0atv9b5aYl`CW
z_zh!vu*{KBwSD?zGWYD$jpa_%#u^%{o5NwZsekX0*Cn}WPM1L)Pu7g7sqt9y6GPT`
zT?GYK^dB@bQD2`JIkfk}@&cD@-SAkx#Z!Y!$vmyu<8-+Us(60Qm@c(0b0RV1DzB53
z88|Y(TepJYLwli&Gi&Y8Tvn!bbWMH&WiVa@MF{$t2ZW~}+wD|5sCWsS56EL^!%$*~
zu*nt?f5g`Q3{MxbEJpvb1<Qp`81er}7hU*5D1)U#7GR33H`u%7n!yShSD9-DE%PpJ
zhN~!;mDelJ6D-<nN)Go1O~(G!158>+WUSd*)VXJFd9A5WMM2MA{pt(K`<QAv=QUIo
z+AL$k4vo37roYh?@D5L!&57YYR<fqQMe7WYwb%+Pd&ODF@`8rVJqs%On7ULZdUP(b
zn#V>QTGN1P6wLMx&!?|fS7f=>>Vnb|rJ%EP(r7)AYDa)<?GkX*L_At`C#z0SmX;Q%
zRasdTynawkZhfUa9JW{1=ho0)G#)HW6V>5hVYtRE1Y%9ILuzx6$^8Zl&#S9THVx=E
zxrbRDykuxJD0-^Gg~4!59+pWSjXH}X*?BeLU_qohOAN$^%t5(^$$bY5Pt?^Vh7agF
zxxuW?M!A6Kt_c?gBGrj(!evc^y_U}#w41$FznQmX7d6z>G!$jqc(dQ?HQR$;pS;eE
zfN1_M%mBZIUDJQ%xAAjRmdtNizkvdz-jdmAyV8%H&yzkfg|w^0GD^WeRguYLBE#oy
zy9Ay^^K5pzEe}3MJ0`{z`}6Y>`Oz?fHJMFee}1&s>4<v5U}M%`I2J1`j^_KL226K4
zYj!vqFD#BEePI)nr$OjzZN<?7FH2>f6=o~htj2N{l%#Wte8ldICW?xyDoTnHQKwx>
zl~hy}vy>@MZ?&3o0*P30L2fkSw^;<MClbjkD2^opAt+7l{#cIJ=l5h%@-uj7u?QB2
z52j~Q&KwgK**Q90CWQ(HB9Yv}qL>crH7EADo`9S^2Pb{+RQyA6Lh&O!5&U0bw&Ri<
zETJQ!|650Ltenh2*hp-jkl8H9Opftk#pUtK>_Pw=UOJ@-F*9^KW^jpYaAz_~oCyLI
z%h7H-Cy#k~)I$_w#K5)iIz!B#jFlAS#=;@1#bSzhVop~{w7?$$4y~bBq$pmP=PzX)
zX^Qv@qLZaZ5HysfP$=c+$0BkuJSuTHV;;F!IF?&f5=;7H23^<r#Y&}7rPVm?S?(%#
z7S01`RS4%;?#n_HF-H?r=~^w0q~V#zX4CKE9hT4pmFUazA+L>{oI*j^S3aK9+iV^Q
zf`grcvNbu}(ekW=^Yu7@$Ick&Z2*E|qH03O;&{>T4aWn}{+n}x`SIeSyja9*6U=rf
z_VWr$<N3je(P}j$w7PgnAx^6X?4T_?OB9yGb=m|B{iSlHg>W&BXM)WeiRBd)qg)Oq
zX?q|Z_HtY7Jl_~K`#f%k4M!YwHiz5eGe;YFKJ}HTb4Oj_0XA=z-<OqnZu5{vi><me
zH&y|IPpuB^!I=nl;0t?GXD6WfX)swnf0oxaAnb~|b)OlrDFvmc#}~w@FB{HxaePHA
zx3n5cI<3Nq{hud<ZLp~vqc~0koIagI{zBL~mhECQBD#Q8fI=CKF*1<IBdzAbHZDd$
zW_pm~++$-+67WE#e?Zmn|8hRJk>W*Vw)8F>2^~iXUd#3f&SP!zwgi*mv75&-NaB3@
z4IQrmSZWocY?VAtB;TUU$XOmT7&L4owA<T*(xt&ufz!<lygV_o0U+P5WVzW#LWc^6
zcFs$u-@*oyd_R4(jfHr}M?xjLN~2RH;Zw%2l!1*~_L1Kqv=4L{SVj>n1B3UIb9iZQ
zwcN1tIRP8suwMBS26C=v&f%SG6uA2hDi!P+<zqeAx6r5z_jAH6Ub7?DV$!NqS`*B~
z9A+;!i4$(}8eOmvOW)3Q8ND|N+}{kML6rfZ!HFT!(E6$mXQuR7S;1g9lmlwUzG|>{
zknO7m{5hd8PE|QgI35*91pFQ^j@TKp968x>Kd$6L;q3DY1%06$9FoW8D6)Fv*(ii#
zsYdLj1_%Pj&&DcEtI@F?2^_p31QytWZi7y}*@Mj$4N<Es=3J*6I}JJ`S*%xWyx_J)
zYaC=U%u>TxuOkovlE)%7;NU_a1m}6My~57rsYLZ`gK3CShYbw3GuMm_9HLQKv>u8G
zt%HnO%LTVLs&(shf{H%}#GukD1vT;1dA%+tv)XsMyxxup*abP*8*v=Th7AwaDu>0K
zuf}WeQk><$OEv07t2uGOt%SwWv7nmg3CH6eY()W#9VC=`in9Zn3d|gvDt2%=Kp9}g
z9UM|N+wItA0n=9jmYq47Vnl&vtC<?-JzsVRf9+jyZaY2Qd(NC-*cS`>4SJ8)7YxU}
z!7O-`^apZ6A=ZH~wlw(Sb(wwZx;VB$^#%}1b|@#5?KPs5KM;X2h})w#&`lccM(ug%
z*J`v%hJNE<lMb6$Zs~N13EM-uEOOdl8f4N+ox;wX;I3JlwNay6rxi3@2jnYp22)M1
zGcvkS0^oUcqur=eZ^^=;Y84h<*vSIf;7w$)PO~vfYwmE@ti{_TssUA;10kpc?VWl(
z<NCp%&+9^fQKVeJ1t{9>(9`Qgf+45I+EYFxmL76Myv1k2P8m*a<IiNl2A0XkO(Nor
zevG*ew_Qg6jUxG*L8(&%1TTQtarj%KG(e=pnk3qG3VTj7A!BxdH|vZ4hn!h--oA1N
z9-H2zvYq1<5+^*51%rdR_^8c5cxhXxfY?NC$C!9Lgy@<$<p&e;F|piiCZL%^*}22I
zmsREE!_S5*nGeQXUsj#lo~r#Xr;ZjZq^Fk9_estY5?Xi}2`z!D`u!#J6fan;0f-dI
zf_OY904c>9$ce`bl8{*f)~W8SyhL?HT}@SG5-~Gbs;Y8H=guraEXl<1VeEj>jLA4)
zltgOijOh!o1J>MBkW@;*FT0F>kbY_QW$dNEqe@YVdG%JY3i|x(5V!WP@CEa%;$N6i
zEnwh`761Qdy=Nj8%py#<v#~i@p56$24moAhEL*h0DzL27z)Y{@35!j$+>D&utYE=<
zWB$;rfXUFes=rZV505rm3M+cVI(0Gj!fL&tPhGN8FH==TZujy6t7UYKLu2aSxv$X}
z@C;3uOnFV-pwZa3b3e1jku%z2EhvYNur4N6avj$By^Pfrx%Cx=7W3$^U1RKD)z^Rp
zV^d;9POdvpu$fd?O4Zt|aFsnkm(!OlWpct_Ltny?nBtOrwc6z_Co4z=m~(M)Qmt~k
z%lV09Wz<#EJ6TWP*ZO!8DXfc!%3|HTVkj~C@`%RTclO|6;|hBAEN&h)cy?c_CTB@=
zUP$!S#mYkQZUqs-`?MOA3n%O2q0)GrPcEmn^qoCq*x16JJqyPU8#24EMIBzu%6aNz
zr8)7s!Z6CcNtef*U3w?Gk@e4JTLovhtRMXWSG)sP#PF;wU~%RI0z`QCS-aorV3#~}
zrrFT%J}8cqA|u3QKZS_Y?J9=`7r)T;IuOT{{X*5Na>>7lDH3-ejbD@~hjVoHixM1p
zZFi>ydphlDVZYNCblUw|3sUU&&mM4pUp{R@ua=23w!C^Joi?HOzy8&G!nD-#SGUZV
z*wSmlwB=W_rxRK_KBZT_x&^oJ6yu?|?KkMB9|Erl;oKxU|5gHTR|>=eK+G^!Yt+*s
z)zl)@5w*0SQLgezv<xwsDx>&{Dn}i`J+AXbU%gp!;_I*8DtYrOcKOy<U!TC`h7DhC
z*g(f@+^~T(uE$mLh7A{O5FYw<9X)f!uq)QBTRQv-`tADv{AWF}Trqs<x^=io%<Hmm
z9enFx{2M-a(4fKi4jp{k;M?#I<Cx%7hA12mo{{kW{~FJg7xWZYb<w;bhu*oPPf5SI
zLk^vI`_PbieM|b^@g{!RgA;f3E9ryZx8FL{G_QY2-#bp?f$)!E-8awub@@kY62tPl
zZ@zTd^0}Mq^M~cH{&3kZb2oP%*3^B|+_TF*T%A8GQNLyG70Ylhe^}n?50|%Iy16@=
zfHssucYCXFLa`Q!wAd^$XO#<VSr*MZs$H2*93rsfY*q5L3hA>vbLd~@>at!{T7t%<
znE-CZkn0>U7ldWzrj^~2y~?2*)ABxhqp;rTbVlR($*9Tr+;c`#G?^cd;+88C&(F(^
zIUW3S7IQS2>_4)9G8r{np5q;G_mrQEu}mm9BF4%Y%(;2V{z(Z^$5K(`Y%k}CGvImr
z&B>_z4vl{9T!ff*GJr4*!-WHeTUN`wkCkd?|4}H2|D0;&$MY;!7<W13=dj2^&U9Ji
zXn(*8iW*kX;ml_xHKJTH;&M8%kqb)&=uUTIo>gI|%Y=Pp7j|BIV#b}1-bwqcV;1^c
zC5ggTpM!TxwlYX#OPW>X?qTNU8Tnq4?&WS^J&;-Pbm#^7Y^mJ6l2wG<b=*5W#`Wki
z4mJ?)b|aD0VftP-1Qh*EO3_|YYGb|*=NbvGvy8Op*o8%xO#bfH<pow>nX|T&tHd3R
zx=UQ0YMo_1D_QV|x4CKKd-NFJJ#~siyU~;6aT4xE-}{)J>_(#LDtv-+og5v(IXd~Q
zbkiS#JDRUY4LMF{9g(SFetV@ySalqSO6wW!Lv0^J?>eso?(<<`GnB<M&ETGZ|43i3
zAc8L^VM{`=gih82)<3u>TT`6>AR=|w`S*Co)U8veZl%J<-9O>@PwGETJ@HBRkGZQq
zuKz@7GzY@N!vW@I{?9H_FN}yLyuqM15gidrcmn}%g72TXie;X0%ePFMwq<JS)W`J_
z=#NPRSE*K(T$9Pv4xshn-vJ=6{CO4HYsdJB2DXM@z}9dxd=zKlyiOU;3JidMn2Qv%
z!C%nyd=f2};_-<<Ukwo*BBMOUc}!d!+N82lDX0&JxP=fPc%*|I4t9awS-J>;%voNB
zT|eQ&Jc!(y@$3jVU5Tv>R%I&TF^4mtrq7Z(wcq79JAtK09etLi_#d5iWoyM@(UG0q
z`da&S!0pTqI>o~ktx7vT&IL#5@->auLGv^q=G@a`LXRF3%;^-@CEMkUH$t5i4B~ks
zG^*r~GZc^@h|bnKT-ljxe!R;mN-qqCT3>6w&gS2DIf5#BkkqOI&eTr~dPAy<6Zc3h
zJ&1e2CsE{J-~N8V%Or3nW213Ab9cjrt~BsP$wyJzf;);}GSY2nIP)-z1ImFHpveZ^
z128CELmeaQ@zDnWBxcktWsHZ|WJMs?5(;~Tnm5rcG5E=etF0KCEjA5YWQM(+MIUUB
z@*E`YbeDvZYQwP_!5gk;1&(3cL@GcWa2kBGPweas!{esLMq21etC|(?mU5;ySpmV5
z?d~KxV4P#Nlc>{C7z-)&2P=42cGv7Iq2f7nG^fzvjH)ceKp%F9Wm(zTS!Egrj<)|`
zQL+5xR`YWeLKd>S_=<yirIg?3B6frj?d{NXa%TgF9QN6Ng1)>nIBW<OPj<*l%%O4)
z{A>UtxVA=s1z<w3g0#Xp6NnGiAHG$e|NQwXPGhxxK%cpeDA!u8R?7yWyp}%mk%e=<
zL_a3}msWhXeEDaoiwLRxXfsi5CS)@`yY(Y_5U<61d$v6*Y!WoET!OwVinA3ic5DNO
zECgfgrTU%%*Yhl`<F9GGw2ED}NoBfX@wE+SYud|1**TB$kVUY!PUhb_d#0yguI6{O
zPSN)g%)QQ@VejeOc0kxEWTA{kevb-gMDP}O>zHaGtJm4qYW}X)u{A>0n6s@czkHr$
z?z#M8$Wn<n1X>63U!Q$zoM7+5?`s`cBjoiy`!&{r`H;`<f&BpUt1F$Kv1yD+*z5_k
zm0SY7AWZO5&*2wo+>w5{Dt1>&ag@@t9L75Axl;66ITzYWIB%Ptdqms?xLEsyE!-nF
ziMxKCtK5ntd9@8Y=i*NJS;)fk^oY3g*Llh<cs7I{;a7;W+MivSdR?6L>qO;kc=jIu
z8uz34HZ<`HoDHfhQ<ZT)($BA$RC^i!8gc#b1B3lK{~Slf7t(p)&mm0SAbD5K=&@Wp
zOuzZ|TSZ$NQSh(vN5!|zah*o-o<d=UZmSIj3JN?^{LDYcpA=ufGi~~rR(=NDPH!70
z%oJC`ckNKTO5*sLX_<{bHX9?Dv#g+NKi*=I2PPO|d8H%7V$jO@q+#4X+gDaF!zl7t
zmV^1?fl3D+c5oieY%&<(3`lJ-8*H9Vr8Ut4yYsjGb0)rV-*5AXW8R&CaA`$-x9Sm<
z)sZ}_&E|*&;nQ*SO=K=y^qAewEVt7Q*I)3xW-yq|QHxb)LbNGwq_DKIlK7{O*?!|w
zcjg|M(t5{;h9RA*f&sfDnn)IRs>{tQ2)pdRkxwZ$F*%^+ZT=Yiowy{)y<@vO)Zg0i
zKJWl`bWWH-ocdLhb0R^LdCp&EUc6<F*%S=qHcp$G$dAD5i^Up=<R@4n%FH68k$mB$
zkS-jI=O(5!&D_0v=FrKB+<4G$3AO%ewdbIYrNuZ0kOK`AQu)c^(qsZDX^cIMdEW*f
z!%^u}Oo#eqswYkDm1*A_5)+lSRN4is-`9Nd3Aw&e$bP|q8O}Ka!B}i$G#8fn<~b*J
z{Anw=<gKe4X3ABEf+G;fjUgguZU8XM7C&p=tRAb|6lg>&kt``eBf>T~3JRlvEESWQ
zgn6P+F$4B`CbS9O)0tloCUT!^!Uai8kz7j)J+#f?NaS`ZU0B*FFW2dCI&<@+L~g?2
z*hUY{IQab7Yq~=9k$@{xcYdO(qFc9$ssvNFWF?Z7Rb8)bejY@wn1^`26T~bjCPDhJ
zW`}OAC_BHK*_2}yCLDcz%C7pZHN^!`>bi>xyH+<eRCg^baznRUP+Zfs{+3Cva~m$F
z+xEI$C52r(H}t6LQdH=1BX4m{=bqiGYl@29S$pZVpuKuUmT--*9=3`zP#sAH!A6>-
z)rRxh%v|ZPvjK;w!gdy0w%p8^K9i>9yzTQQLmk`4kbb1G>tyAaVnco;k7uYi4y)ZZ
z92GZ(yEI#(jlHH8N6s!AKHdl~$8CyxuD|__q222YO;2?0(ohx(JN;&lT|d5Y!tmU#
zp>SPoZl0l}SJ#}VCC8Fg*eS=dVBkgN{H9o>Q^;%5JBxgU^SX4a=w8~mZ$feHknpU&
zS1!BipCo7AlFHb|yt=$(An3B0T~T}2@%_673VUREN-KJGD=~WgS!E`_rO+9w^5#z-
zP{tS*rzjz1!fpIvaPNV@592_f43dr3p!F(dg~3_~1c2Y*q#q-k^tddOk;ukHy74w-
zl~KVE35Ve2WzlkHx6%r7BRx7Xp3KhXx(;k|RD?sy%SM|0!K|j*P6ofPw0e+cLAg+p
zlT(;g5*zhEp}lF4MpIw@;#Te{T_A6myQqZT{m;%7NyKCCRX<c;9d_q--B`V#zL+!N
z(6+H^sM{B8$cBnJULP(Gy6Ib2l(<bsXG!<XgQ^$}o@u*@|4>|oxn03re4IyrI8Vq9
zw`6uX%J>hj->~}9*_}Ig?lkw}wHvM<J#66GP<D2xN4KWI<EB<uTzc`^t8du3e#L^>
zRn_r|(&Njo+<wiK%V$ojtYr8+_pTg;!c{DtK?KTx6n2gzj2kj{m&7w5`^>n(P2GAh
z_-h9a8-4wTwHMFrgjdhLboGX*@ruf6GnZd^&GsvoA4kl#>Z;ibuH3NmhO5?Hd`V?B
zdl#A3ww9kIHbI_7&mlOAD-?sPE^8$}^WvE^FQ(rvUW};eL!O}5(e-re<NqLYA9<Ku
z`VXm|WDd$s79*1VV{ym{=>}aLLS4-qnL{*-7S_~UMt_;nscf1Ud7SQg;DLu8dhFqS
z`^d#)vh?mAZCCJH#Nn`~Rfu5?w*UCe$LS`r;5gl|iu;oLD#h3->ezsMo74G_O@ljR
zA>H%_SwJ_XGo~EC+p)G0e4B_UFMt=)5SU6(oC6M$4{-$8xhDhhynHTX(~#H67u1Qv
z!XMILI-3OV)wX*06gYYgp1{-DI1+FNxsHx~n(xi`X+6OD>z{4i1ztSH^2zZ2N$y0p
zYY~ZV{L_3NmJJyRd5NCp)#7CsCkj|`$C>VlYj|$tXP=FH?$F483kUx_@{rWtm*|(s
z$71d&Sj1|kl;Sqa`GiTxdA642BqWO-;17u75!+XRn0q-a&;ZV_vRKEs!eozoEQ+HN
z&Xe)uEaMMczwhz^Q<KSQjhFAczGO<*`ay&0yG}X0>Z%vsS~p`w%he}dShI4_m8UkZ
zaJg4(I(6kBwCz`Tcse1@KzwBd99Bty+2Cz|6<a7l+-QFpTY~*oKBq^o5yK<l9&^g?
zKG?l`BJa|oqDzK#?|$&^R|c>6Xv@khXMO$F4_6Le)zJN=lWRMbubQ#p?Ux#QFkB8L
zMZ$9aG<4UnfesUxih{XZLGS*UC{rfxJNnzl+y;6#QSK#>z>t4|;#y&xa0QdKpvQnu
zfGBTHP1(kcf4pnzF0z3ew>>q57*luEO0e$`mLm=>likE}k(~=EN=3Po#bh~M#qAF7
z4MT{0i82Ezz<m~Q@0H=kVIR%&(^7YA<95;SxUpUNaj7ZWxp9xzrtU)C0&+Wi0)5Ep
zYzxH&Q4lLbg`9l_Y^qPtT>8rj1mF1f`)4LjeCB(p&V5OquukZTSf0=WV8}3*DFus=
zcpxmKq4|pA1Zph@jW3WbO}22cf^kor!aDd7p>OD|mUzfuRKXRVVPk5dE#!rhPPI2=
z<8Iq%fY(Nq(SY;ZR=9RDa))DPs{uvSxXJ8Y-~`36$>_0~ao=OwXt2UhpxJ_F5@e%P
z$D!mA;3_7|uvi`dSG`h3?t7TmzQi5t43`TGQLOEkBfcz))T&^eRgQckT2Jt~WB`4L
zo45Nnc<I>3_IoPGLfGLm4}(m`w<0$VXCnfI^o1nNN|Mj_??2PryrZCi`<A{AoZ~nL
zm&?LJpZo5k2k4`KH<au`{dB;&9`Sd;C`dWm1xHOYK&9VatM~6;O+T)>_ufy258skV
z@Ovh`Gj9AllgPbv__?n{8*4y!Kg#WpYSW>;g~Yc<YA>glNEQfl1vh3rsl`#3hU4^P
zcWU!odY@o9`z?3)$PrlJ-$(BQ8j))$xl0%!MAG?H(Gc>RpW%j5H+_ab*&5|OdG=Z8
z!=9nfu>1u1gUJ7swDtgjk_Ep?xxOL)q@|P*4DwWvO~7SW*a9hRmW-^=5LnIx5B8}r
z8oZutMB8d%I85CT$<Fq84My%bX~Cs8%VgM2AEl3OH<+@#+1WD8jeyxjf|(ZP%F-Y~
zq4+rd4CW7i01+Gs{AmzT@~eaoGB^bdaZ{PuI&<H_S;;}1Bd}3hrcHD3es;p0^(35i
zq9?hJE@otOacUU9e$l6sCx5z#+{JJ@mCO<@7DC9&Eaj0gRE|j@?tl+aoRFA6mE^a5
zWDLD~G24PeYStbyWe>fZ-u=-Yl0$O#d@sQ$5-yhb%zuYrl3?KU!XLmWS3D~0f-f+M
zo^eK}63QWh$g!a)-2JFRs)|>+;gfssO#M33luB`rOd>BYnUvbQiG0hdbKO>YV2k&K
zOpRE(E>gTHT*}`o!?Tr#SiE8cqK=1fW&)=sq8E{OO_Rx~E%jqkC&+WD6Dzsg=DD<)
zyLqW=Dg9(AeePPqAG`MKSqAG0#Yth9FaTCI7D()I@B$!-#VwMsWZ|x>p>z9_mz&6(
z{`A_5NGbg%tvI=82l-|Zy><sy(R~+@Qc}8zZUC%didDiDLahu7)3geWWGi|XFb{Ct
zj%KoH2wl)j%|plo#nepBkVd*+sHOAopz~L9?mIuBGgp#Ec-P<*rDP!X0~TV`V$9m&
za;3s?G!{pjq`KXCDR<RSGABx}ZHlFCi#|M@ld6}xl~?_O%Avabl8wJSA=eMY!(m4!
z1s!)u24-alk&NX^W?=4`7vpBehLQy_x@l<Y(gP#8i%A82Ikk<Odv-vwk#54j#b=*h
zj2WbIF{53?KzT~&Cj3p(=rDm5BK!GbS9<L%)%h>k6@5oHPoFd%rkBxJET^&8*yd@I
zktz$3e={kC|7&$c-&iabZtT<C+%kFW@BwfjiBxHqmGFJDU<Dfk8pSB!W-$*7KZ!@0
z5UVB!I?e>vUN~)3hIq~$zU6VCKh5$~m?PuxCwcD6spsX-y>eb+-imqo(s#sFWW`m)
zxpd>krSyxd=nC>cVs5@aF)!iEpO^2)mvh{k{;PW7g~L~m9e4HN7l<N#3pHAxcntI5
z9qrs!@-oVnHrUf+6Lqv4q`Gg5GQ8lbimI)z71Bkd`BQoi2K#7o-PWp#s}|%aaT{lN
zc9T&>pVGgcW^Lxd$B%;V&Pwy~b}n8nhE$<Sw2|LDXVt1XZ3?jKy<6yrEnD!zJ^tX;
zy?bB%VCU*BFS1B)49-HuN?|PaIWn_BoGm$+NFG<g1rcmb!laB}y``!g6%n_fes7Y|
z^shyqlF^^?|JbU`S-3{7_T^;Mr>LTXjAC#JRy2<ZtKn}0tQR4obJ)tJk{#?|nikkk
z$z+k4quE3*tpeB+_I6>_71vaEsT&Y>(4Vt{p$7PVrJLDt%2*=i_rtEm<R|le@Lg|k
z6D@Ddu2Vi9QP$=dIii7G3CxYi{A?qP7lXklisZ%ubd%o;!=zBaLw~X7463cI*&^37
zLDma@<$FqJaFkL+(NJ0$<OpT>d1l=bYM(P$#ht=En=bR|b@TuXfSs@dq2&gX#~sOz
zMzbSskI6uez%s-M!(q}#r}tgPO&@U0fSv&(tbyzSZ!j7PXSvxPg4>f5iUz#_J1m8a
zft~}dk?^-raX<RydWJvALm}RH&N!4IQW9=}H)%XE%TBC?nbjDA4nbo&Hb+?<FbF?q
zX<>cjqPu-Y#1ioN!tqEv684eN&OopmJTw1n5B9C@TyeE<{rsycs;m2ETYvV#s4JN5
zchSFk5gjBP&++>WtSlMjgmI7F^$TYRR$~qa?Ua)Q`1n_t`|>4!QRq5(&dVT7LZIa6
z4*go{f`pgR&@k0@x((7Jrs2j$BF`WAVDA{_ZVX0H?cQxueRKx9)9dN#C2DSS>Y|^$
zT|GgoQ^y@_&mud(HRzk~rQdQw->#z$I!(-bv(^No8#f$2o6K`-JpmiKNjD`oF<GlK
z!aMb|aN+L2wyDEml0BR0-3LeYL)$oopUe^V^AEsJ47do>?4RRhXa#e3!Ww`GZkc8<
zDJp&KFL!&)+1X)iRhHzfVaKD_6pYTx%PzFSnK0io09n!$81(9^gQP2NYp|%y?1!UW
zt7m9!?NAuhyJ7KM6wD4s^75kL;GuEj4h6%}yu3(Qrr8*ITDX_LhsCnTei(LSWUMlu
zDA=lzEj=VR@vJwb#~>33#~gbMhmHuiCAB6bv1aBH79YtEJiE<YK7zWWEXaVz!o8w+
zh=(E)zPI62(8*jA3IGkCwD2m(_Z48tCMu~>snd$wIG!H|SA@(j9r<1<!U#&}3ym?d
zo<<Qt<apjGKQ|~<{2`Hh%%}%+0j^mEQLo}PL*SNQg3EIPd~06|+b(z{*FydIm}th=
zq{BN|6*$ec%>6b1$^}r8SLyK(?!y6C##NL|1+Ko6_YN8F`TrDISZBE48j=_369U3d
z$oT3l;Y+1d_6HK+^ZX(#dV!eKzY$<V<QH<>@-)6Uk4nPV3?Ar}vcpX#n%6snFQq_w
ziafUumeeABmtg@-hvz}nJ|#K;j{NW@hO<LzK7+F_fV1B^;_USd&M+25m2w|S%LwHK
z`mTt9%|q7E3%4SEgbkhz@)`d@p0G3mK;T7$ZAXzXqYo@x@J!m`#w8xcg<GfB&8%!v
zcU|nSsPHfDs&1;7RYyk*GFn~Psa@Q6L-P$<ts#FX)}&LiT~;GEp>x-%i!B=$dgC$Q
z!VQ)MGrQ1*$wa44y{As~b8G$nsZ)EGl_yXO==U+T2#ZC*tW@tr=MvJH?&EJ%#;~KQ
zKoHw_gpVmCts%5G71%LC`<$?!zfsdt2|opd%oh0Z)dlOyj=xVIQ0a-Usi&Rp(+wp}
z_whds8MMCS1R<~7-rBhJ-98S&G5D2$zcUTL96|RY@fdccFj!P<MpG(OoT$tpmG+)Z
z#HUx$2i`wkwyvOhJPbi+!_#k{$`-nBD@PoC-rdUYzx@?LPL!-4G^ACBHO^3MJYnvo
zVPULtA+D5che#tSU$FG}k?N^|{6KHuj?(MNj8u_w;n|aCUl$7al9al23lIK;J-qMv
zJxV*u0u(zvide2#6*@v>^NaKiZpE21sTJY_zuu#4o-*avd!_(i9LYtQ-R)(N+s1@j
zI1%F;UVL#%3T31cPygrrDJUk5A96Ly^jBJ$jz&@;g~?h1_3pp%AGeC_k+ohb^~HJl
zm{N-GNB_MSs+NBvU+bm(HGFzrYj3jx4v^Dr&9o14!zlPcTr6A%+LKz9c5{aP6(~T_
zO77j=KmD}(v)w=bxSM;6JV_h&!kGbn$dh~7k5uP&81T?$Lz(uE>@tnPlHk3(`wo2O
z&zFAY$>3yI9l%PUL3=wC_aP?kFtd_HEMl}szC%6Nm}BZ1whN`c5%`TrG<tQ1`*Ga=
zo<!L5HVYkz_6;Lf30ENYk+ceymH}iV_kGGpUxLfAe)N+)Oq2%gl_>to-zFTD@?nP(
z80CJUAG4>O`JIwNp)-B)_xYHT?;YZ2tL_)cDGBh4q%+>TQE`g@5I#8YUM%@Y9P9m=
zsV`pQoR`B_#gC~kU*a5>)7~=v&L~a^y)t=K1iO}8F?Lo{Uo0XA_^0H&<gq`<i>g~f
zyqJMTMo6VDr+wtS=heYQunZzR=XfdgCEm=zmAL!{Id29}7#BodPh*ioHj*cpA_X1@
zC3H#3g*`ILI^cqpVHg92Gj!}Bok``MG)iE`0>r^+hM@)Xyt3^<;Yd0*sREm=As*Pi
zod2*jI8S&!Le8Xa5uQ8Sh1KbTytWJSa&~g&?0xCX=kiMWj!LLhJA&muNawsDANHbI
zK4G-{_V#QY-Yvn4YH;A59HHf@TVS?7IdyYC@-lguR&bM2x1?@4udY&l8?k8kTgc0q
z?3|re@Z0`Nex}{!P=Fjc`?~xFR)oBqdBFwswuLmpE&TR#^#L+ERtKw#44y@BIs?|$
z%-3{K5l&kbLV+KJrDIvS4ga$*EGt<wW!OT31GL|TX0}|u&z|9n|Aiy3HqXc3kN4fU
z|ICON=iyIyetz?fNZvSN-tt%GHIqK~-A4vK^iayo9yT}6dnI#+OnPwyyEkv%h!=t5
zt+Y`%DjvuBF%GS*B~&Uf*I7(DLeSSjl24e@NYdEC?$!dWE`mXXx02g_Cd%8d9avd0
z^vK)$1}vTYY_g#Fu~T<9k3RC=U$$I-O+ftN{bSpnaM&v=|4LiP;@iiiW-YI+-8FND
z(wzEc)zvH4GuoPoz0W4`4EP>)FNnmIF|{%&(_&VzHMGJk8~0kw(j3R%c;G<U@DX!9
zT)Bz}A6z<OSnBwI#_ih%4j3?S+xAAWe%o*P&t6<r_1aPF8cZiQ79{D4)ZI7TxN9dt
zSjC+;-H4YcM$i$MPmeR*6<dmeDKhOp+vJwC;SdG+r|Hi-=}(U%N<0Sx0@LW`yI*~@
zxgaUVTfgRQzr8IUXTjZma~+y7b60IG+w+TJj{X~9a?pAxqHutM^&`UimT@zV!{_#(
zpJ?ULIh^j|qx-nl)+X^dT}rN!==HqzgBCEAVHRf%NBbEX6mq+j78wsDr@j5Om9?MC
z@6i5hw~5E)=F@F-C!JQ1BrCWvtoihHdQ@sY+7HAFeNb2I7uaC^;Q*Ume+0}>e+2E?
zwKr9TJcp3SBTSU`6o4R>jVwKIfV-9BQz>C0t=b{;hDP|Dx(Yrcw9;;Cjw55A%>sT{
z%;-tPSVUJsXmX%m*<!cMV&=vAu_Fcy=$+WG=*lZsKKtkk%a$*1xv{>av2oy3{>Wca
zO)cY2y*GKx&1*Kpz0#*UZXi2vB6gBoGuwBkr~mw?PfVT8-A}MSK|OD1JIz0cxgD}l
zC|oYPV}#7Yh}4qa-GG7SgO3&dV|Bx26*Wux{_T+glaIdl(B6}auFQ!%S(rHS3U|%)
zAv^Coz}mwr)`K4V2usm!rcc3XR;ArpTG2^?L!w+ZXC~%s42E<MxhlB7Up;>8+KF^N
zIrhuXwBTp1HT8nh85(=l+A#r#k~}kh-I#G#@g90Cb%-gbxvumh@&Fy&tumf7ZbBde
zqhidd<kL0__a)zARdJB?QcM6LSn%!QUlL_qC|u=&nz)wt*3hqSqF=A!&T^+)pX4#?
zV}7G%VJpTDm^yK=17E-~)-KFxB&65$ur1_^K>iR@)0pW5X;xaZ!O+Ob|2X!s@muei
zy?y4fXV%Pobk*ZK+-0HC34^B<yl?O6pLWUoS6g=OUHF%akB%Ep45vmsE#C2JO_!_Y
zPHqXiOO8E!{L*IY`n&e>)|`goubh=id(m5c8`dwq^s?-%;_(x1d+|H46jsk&sOPny
zIT&Y@m1AZDIk9T;5?d+cP@nKF?w3@Mf2sAyX&1dw(0$0D+#&O_8z(QUN_C%bqwtr#
zH=e!3IR4dSRi$^YB{sP72lyUCe?5!-e-Ch7;Hwyeq)ZAh&uEPe9;Pg)Bk;&7@mC8l
zB9R~$eL9#udeZob6Ivd>WKK?K{HUI>=Z`20YF+N`QK6xAs9GOxc(Tgpn>g|I#`^AK
zM|2<7m8+rjx2MT{1#rh+0*?t9nTN-=NV_aVn5;uy<E!~aph?J%aKQtii@Zj5pE;nk
zZ%sXnTcjD!x%BfeG^1gz-x;#|fOyr`RE#};4YKDV@(L?2LbA1#acj@eQ3tNv%Dp4e
z2Al=)octV^gqX*3bkvyx^!u$`e<q_L7ypZR#;g<uBR@xyNZ&1v0=6*XVZ{!X2lqh9
zy?e=b>%>v(&K8TKe%t*&@(Gc3tyBIF@^NR@rEd5?$VZ-BM_>7)d{I_E2<Pegty_mG
zqIQ4W4lpL}?B2cfF_uee$p6fjZpi=4mu|@a%$IJ+@A9#BggVrZ)ewD~=?nBNo`Uz1
z{p+~J)P(9weVciXo?@lbIo6TySQh#UGM$6*hj~&r{O>%iQ_jnSx?mLrIwSkZcd4}!
z%GrB{fd?%UKVfS$cznhNbQoL9Tx0dmjn~fH)+m1RUXRtO;oQBedq{b2K;93eykWKp
zU54#y?&|9QG;W)DZ6kLB@^bg4h9fV><#M~Y-N-B12Qqp@W>q-O<*rz<LJy|{i7k8s
z{mY9l0;d<`Ws9LOtms_aZaJ^mw59b)atZRbwQ;#9u$ymyZ5-BIX+ByH+J97h1ABgo
zP<b|&{@R=>r_G8b-7-5}LzV^TrQ9H+=Dq_;?VViwPV)R6bkpg{vzfy;hKD(Taf>kV
z4`8^gaIZbgPX9)R1?b;6xME$iRjJ)cmhB{-8|Y`Z3>f_+WfKcgd`XV*KY~v)T$-_u
zUv3ULvdP^G@7l;~QV;U4QhKbAl)S-ZpG0<+UonFJ5%bU==Z7o&O#Y|j{OcjpusPj<
z!W|_UwuWM4WD)u>A?B|TVp4A%Il|?M$J@mh?uAqpoB26;?W;HhSYGfaKVU)9!;~Vy
zkUSMTIs)e>&78Y(<ADPuyXW7#hk<_#;JHVx-}30askKUb>aK~CKl~(BAxlZirMd2N
z^wDV{ZdEeq;5q9^U%nr&OY<ho3+#ghVJ$hxzNGJt9gs8#&N+U_y@vKNo?3=ITPS>v
zIBs{K+H>hmWGcfMXXf{EPa_Ynus(`N!Gc2I1oInTl_<<VK3B}dJnrfHP~bQRwF={t
z>mlPbh{vr;ej;vgiks2yPRbx;iEMCQyDaj?$}M4-CP5;D(g0(`5oU5IY`3_*V@ALE
z+1(G<($9Y`Ptdo?so#D(;OaeatbN(?U2h!Zu72w0EVBBV)*o)WZB73w)K4*tJ}qoV
z{cxla0wQ{a5i^rNhY<z&&!MaLzDw1I#N%hngjat%PVJ<-@aowzlv_eS62^lTm=`&@
z3`Cnuw>YG3;g4<Faes%-;2ueR09R~*OlJraccU)=3%h8-{ip-m0cX}8VQ4&S2<U^=
z1++q%YNzblv;7Ep;m8qMbwn&0d1*<nTOVV@@moG46yQmck(3T-V4@NfNF4H_AYK9I
z{~RpQEKs9LuByvmE(~Njxt2}WT(fEOHP>wZ>_0z$@%hh7O9s~;yaj<Ua-W>XpL*xb
z<0nrZfAgJPgdU|I(GR7~{NU*miJ~nf%eIjnYx_b{;;?E`2#_$)zgdcb-4b?<ld~Eh
z(TbY{?m5Lx!cE$PX1y{?BN!A)BA7G?P1VoV(_!i9G5^@*ldno!yF6$9rqp7sswz<w
zb@}uw`i&W%QlzVj85hEdE`|{{VAz)}%Q{t*@mC%=uxS6}0o-*5X!O8KFYS3qY5n}m
zokONiJ$na#w6%yox^>`z`#?XWy?zcw_ikac%E}wHkEr=giks92^+a%JR2=kOP+Kbc
znR;3bJ)Kguq*}FCiq$DyBUTNmKH$vlwGk>0(BqQ_kSIMV*Tw$pSK?AsW^<+{pzEGg
zFFe3`%`yE4Oh==ChYPeR)AvtvKHPspzE4`&{kE^Do_mrTWsd1SP3PBV?hB`-`~U8E
z|99};CQtn#{I|*F892PJ1N^tirp*2G;HU5Z4*p4U-5<g~N#<qX@Y)XWPm(2>`{%(w
zNp6tgzz6*U{8Jt9Q_05}esKRZf9M>3a5ATW;RnR`q;Po${FwQV<om*DVK(mnKdikE
zTvbK-`2Wl~S0F=0MMOnF1w=(fL`6kKMMXtLMMWh=B_+e6LPNzur9!3BBx8+|id-uy
zbFFShttGWq)M`;#x~;oQt@WYSPr0pac=^6(?!AcCetzH2@AdWg=G=ManP;AvGiT16
zIsd%%)4~4KW9Oiwdy9Siw~M{@k@xjKtv1`m0X}*=xb4_sj`c0}PpkXwzqQyeY_We@
zmD*pm*k9na@0cm6msYmePYLLYB>vKZE9^TR|Mc1?cDl>qwa>h=$A9G4xjG|%skzEg
z+U8d5pEKM2BP-vOcXjiVjxXEz;QvQfvAquar&|0U$KyfBRgB{f<R5$G=yQuC@;!DD
z@=uK1ZU2rI`=_lE$2szK+i$Du$0~K?|BC(7DyB`rRrbTRzS`^9?zJx&wEt)Al>t$X
z>pbmtqdZUjX!%cC?$5Eu>=%P&ldcEXSVyKk7(1V<Wz7lL;mpq?Z*t46c19ki<-f51
zp|xGQ{fhk$t*GX|Ydg&e9{V3kO>6te-S$6JJO2m!pIQB7&#&13OuZ!&jGsXs`=4>&
zX~3`e|Jna&|FjkNtMzjl`%A8{e_EP;)&A+$_M7WmevW015!C-OPy0Dx?Z-|Q_5Y<K
zS+@r((>jcw{Y*V;{Wl#C>vpT=U3!}H7Sgro7n}C{^`+fjeQDeL+cwwv1fr+s{8aN+
z!reJ8=xgqr;h9svh>r0i+;<CeXfk)hdR{2RrFwl1sJs(eeeHjCi=ADx;*WW`u9wC+
z$G<l#_3_V#$M<__Y^Oo<t@f^*$(>X-uU_syrq9^Gm*S$Qju{-jTwS|8b4f`-O33QO
zk-djZP%$eb)5B(sSNENCy*Xmg%$}Ft9Ovv58mjA#W7YuetN(m=n<D&`2`?~hNtb1X
z?-c5avd|{aSk=;=bf!$c)2OR6R=V)A#A`omNk71MB=SEAw=y8-Y|oR=R~~tVku#8_
z%?x+F=(yK9NdDiLy84)H@Rj9nzFp-xNp4kB`eGN?QO$!_o(l4@k59R;baVB_Z-zNX
zJT`K3`nX3%^}624BO+ma=EpBt(B8-Oul&T(;|f%#=k9y%zQYrP1Bd>0$?eYfhR#b*
zNOHzLOSbqS&96Cj+h4NHDiLrghkE#)`>CR2xG<5y*%J4n;gC6J_ii|S=cqn~@5;=D
zxmc?|eW<VV>dR1iE-BJ`v$+1UW|U*+a#zXg)3#RaN?sS>Y#%x>I(F5luAK(P&WM>^
z|F@r}1YdeTg0CzFjT+CZ{&;MwT~N1SA$>RV!8o75p-yM~P(Ij}R5X3qsF(rQ1_Vr8
zIWsAJ?xJh@wtr>(OUM5{t7ng-lre)M;|C7t6B@a$X6d}eL%K{13-2AZ)YO0TYxduC
z`TSSv@|o?f%csA#JBspMT@t?EstfFyaQvT2r82K5L%Vlf;jd4-`>}t0H~FvsxirVG
z_CCQGAMc#^pNpXPBXgW%4vO(<qz|)cL&No3Nr&?4tgIB*Qy)L7dd3WK&Y$m$8M6Ab
z&tBD=(4^7FSUsMM<YN0U{knIPhKWATDSKN>Qa^RQpn@NdiFL-sJi+}u`#$lSSUn`h
zsoO?3*AI@9b_i`F-?ZgI*LiGO)a8vP+~}(3&9fP_`44%6cs*^Naf)v9u6lEP*Ye#)
z&T*Lev}DH-yVPed_SU)eXlq{*j?!VISZ$?u3CZocEOu|Lr*72cZ@EWV-?}{1{(MNx
zis@VK%Us}8sUz?@bHTmta|o5}3bIR^f5b+?Wt(kuAGZE--h`ucu5PJE?-hL1d2hI^
zN7$=})UD?_hy7FNZFK9o&N;pmXNw+EqZjLV&#v^jfL>uMdly>tkQ%-Dj=$I&e0|W{
zbXkvZlnx{H*3BWA$92~)knklj{rnk?`h@RR^ys$&d>x$4sW;tn$5+Vvx+QEg&RCKE
z4*j-%BU|+EZ2r;cH|YKkd0)N()K|Uf)t6NIrJ;@&(Z9{uzf-bYV`&?U%rWCdqaWuQ
zi~bG9{!1=@yB+<g+aDiC(NCs)R%hM68F|rs%A>u}`tCO7n2$bf4FB(JUU=!xv?0^h
z?4{bitD)%}DX0N=e`>iLf7kNnZ(Mno+njDAZn=n&n>I&}DpsxT*LD4HE}E*#$uUW{
zCC;tf7f|%=wpJ?p!Qm6Gi{GSWsM{Qm{d}X|4KlCC$4RcouNb$Vw0gK6_sI3Qy|4dC
z-U9zPK6=KDT<~r^Za=9my6Ri)7v6E{NiJd`moJ*%wtvv$Ql2r_$C?k-YBMhV-jqp?
zOFvX^n{g@U(>h->P7e2uGl~7ZwcR8C($?dy4^@Sw$6X$O*yergb4I?~o^xfLT_HDh
z=C<EzocxhGa@oEaCx4_4TxCDT@mKFSmQiJeJ;%MR*d{gJaV+wO?HK&LdK`Gt+IPh`
zjrz3mnm@pQ#)F=EbB_a0THODR+&d1e_l(oL@+-%IK6;$V`JZQesqdW9vwv)C7LIB9
zNYy4zUjT7%Jk!@gq8OzNi|Fd;icH^x<Tx2UWb?*3V|=FGy8P_4&8qVo^?Uy9Dtl^c
zeb%<?_uaEp1s+oowQIt94oz9)bneNn=x``F?d7KJ*FB-uIhQM|w)_ia{rUQMJE(I%
zXOdFG_S$V1S1#4vnx~JZT>5&3xlu04cNpKucIS?JEtkFcZsFXytL7b^^H|FC$E%ff
zCN*RKv|ZEx^h8ni-!|vuFR^-d<tZ;;A162T#xLI+9KU?R<{oLzlu@f0+j#O}JZrvo
zVTwk{JeLi1HMGh{AJ}=+OS@s+K}O@J#)ak#PfUBLFnaW)eyy^+zQrHgpDY9W&Fp=<
z^T6<BgCe~-_i6FTv{|#w9S3RSY!lk}Np;52-P0C+Laz6rQ?#v?ZBE<Ibfjvz)y{tD
z@-|1_bcNi#&CfM|ZlAMPv!5?D+ng}xjH@M_3UKe_Y<G&v-(k#(cm`BaW=Lh9n-jAl
zWbW=|OFkI1<e^o!-8HB8v%UQiCq4bQ8&l?}4asw2oLjbp`9?YWUo+^o9{sPo{x)as
z)(6Q3|4qK8T;!|EW%-+Onf%@5vbvaZF(*S?)??~qt2cf!mS)?Sv9}c^!33@t-nDV`
z;zi*RdIVy9=M1&mPVIkv;%!^vM!G)b+nM3&wbRnvyR8+K7rJUjjC1UzM;~$)J^0qB
z6b=9_`A~1(vHnT>Iy;>FO@7FAz5au~!aLTFa0NQbt?%$_h4#yJitv}#cQTn7H@(A{
zcH;i4cOdF-sE^)5+*N6A!_q<hhUQ^9W@ubD<^x;Tyd6KjTT=J1NpaH#5Ah3)95dyX
zrPr_P6qs1Gpp9RzK|BuEr+cua0{ZRi)UnHuzJmuwRyiWW``=L2FJ`pgxa`ERDZP4j
zn|Q~XglNl3JFsN^jLhuYK0deQFWagIj82K$u;$4nncr0G>XT;Mn^wK~#JvS7SVg&>
z-qA0{nYFC5KH4xQ;ywCh);aw>lSuufW-CASUSK+gR%_1~&@*aMUrp>E`DB}@umL$$
zV|&dDnmHkOe7CU4L#M{gj`8m@Y4r7z`=>@suIk?9#r#(J@B7W1-q#qn`zQ4oH!>#D
z*=NeSqZPBV(>?xtg+C*3j+**qmHp2i=^|Jsd-WWaUDZFPckiU@M-Lwrlrn2XfB(?Q
zLx)X_j0z5%JSur|{}EwHk9QBs>K|#%*}uJYy=3%gJ9YTtH3|KPj~Le4H40$bkZBX9
zZPO-b+aIanx(&J8hH2X$Nuy~)1C73^U$>lj1>LsjadrPqy?^DA&oT1BMjk*LJ8Ioe
zo73~e79T0pZSH>V&X}TmYF$3hIYlHNu=ey>gB62wTHr8!9o1|z&P3cNCYN_=-84BR
z(U<GhrOl;NS4T&To02o#8WR@Keo#o?(eW!os!KkPiXS+5@X(dhwk+CoeRWP^T;jyY
zq-%P$dq%Zy8=X4jfj!SGUf>**Jb7SbuQfAg#!qS6F2=c}dqHUTfakYv9x#8=ruS>A
z>ne7|^|KwLSMA6dTc6TlM08wH;tO+TQXH|&xyBo&JTX_5$2PlE>ju{1uf9Iq$C`TC
z={eJ8j_<p2$(HE@BF8&B4fHy8$DJ*{xlZ-(GiJLpCN2BcnZapp57xiFX1do0cbyLZ
zU-{6gy8E=QLbo@`Y2Cy654`M6>uSB)twC``t=wv<M%snh{&qZl6x-h%6J}YD(!NYP
zK(3Do4(n0c5!1}N9ntr{!Tgq%FR;!cr%WFCmv)Yk$6FsFXOE(9=8g|Xl^Of3(%VCy
z3vs>?Nc-x0RbA-zWsZonF0KxmTl+li$MU<pDXcO5$3zYsb=|y>O%GoB`OqP!cVo1)
zl3|l4I%jpi!PzGB=k}hK;BE)_LB1TTu4vbtugpttdn@L0ekGTFcDcypzP-9B-qEUN
zFK1vjv^$Ughh_Wx^Z%Q&wW{MN2X$<Ye-mw8_nx{o#~CDSlQAvZN^cW={Bg_2w#f0n
zm3*Aph8s9<c-hgPK7#WLwqY6J3wC?X-r2@O&6DZo$piOG7|hKTo~9e#*9`DD@pTXI
z^b61#@v&L^mc2SADzsfd&cg2&Uf;Rhq;(^b7c4D1d&2ed#l8J*R7=euZ_Xpj)l>1I
zgD2l@so46`xRjAS!upMfA2@JmLR9au30a+!BBPxRn^&(H^Qal>y?(nL<m(?EF@D6L
za85eR@rH5tPmccj-ii@Cwe22b4(-CNE9SV#C(0dk0b?F}cY1tA-KL*EKQeai<b<gz
z+?DBi{Ln(@b-|;vOO@ZI8Bc9%j-T9Xv-7Pgea+Idt*L_u{gg;#%Up%dz&znVujhXE
zKuf1-dCE?IYURB7?)lGeoG?0iS+b`NR(5I^IwK=2c}(8v|9<xXWnQ&v@GGx4qa*sx
zThw=;x77W@2KHS(BP=G`Y0aacJ(n)+sSC=sHruGpWcFjWk=c)LcN|1+wv~IVram!a
zxJlk^ZU2P6-jC6wZ7|C4?#G_7T@RzraR9lQmv$U&nU_9kop<y{Zsw&u`ac@|R`cF%
zOj}Y<T|MtjShv02ocDO<y(P@G$&rtKl>c9h{~ub{IqtyzxB7VGQ0RYX&9rYs|5LA@
z_Bf-@d^+X*P|vQn_^;>BKk>--*vy}cU-LVTeWo9}$!x#J2<v^dm!4r$`koklCgOcv
zglBxJ4}E5wHN4ereyCnO6-RsSrmVneQEBb{lUHWUnK>aLd0^tm#F^7Ng)3|NJZsC4
znC{cJq}{T3)~Y`|`^0BV!0lbXVD0kR)8ZYea~$nMd-0LewjDBV>fiU;jJDmohjLd~
z$lyV<qXwut_c`#!nFEJe*2q++o`Jh=V4tWyOD8H{`vq?s*Yl{lXX~fTEEA6F=QTJO
zt1dhQpv&fdW1xC~@3cLzdr$yR?8UVW%dx(`^z4)_K4Gf!%CSqGIS~<)CaA(OvqPiS
z4N$|6{5v%I+HT>Iu9r3x-g5oJEqUp4_kRC#UM(j#bmqKxqJj^dRqP(@&NVd0`sPyg
z<RG7LYjRLjOj1Vigi$MdX9Wdh{U--5jqBb%z!^NCU%{Xr+6}hnMAvc0bhABg)_zG_
z!g_l~5V&H<>mHxjQ7tpxdW6zVIXVrA88CfI!psgsb2cy8wBq*fl}d7s-yc2ohV&Ja
zLVW_=^*;2vad!;v-G9Eaw`bmV+Z_`EdiUEpQbqG{oco;4{+c|^oS3hVx9+*;=<5Y(
zuJf0USnWS&R#4q`==w}OG3e0eEADj0SNi8joyv@|E>DDnTREw&^RBbsd~W6iKmXeG
zXV(SyyrAPjw_ENy*uuV%Zv8;NoQJ@YDQ4`J&z-dKST?5x?iTEx64nhtk7j8OTr{O|
z3^h$e572l?q&f6j{u@$bx(xH_GCF$D=pM=HXoq%pP5&^j&(v<m3&u~i9-on!lKymb
z`#CGa=0AI&f6&NL!GRea{d*)QM?clxFKuSG>D_0!cB?hdt{l-nx~zCy#FXD9E%Ef1
z%^%qNtu>ru_1C3l4{GT%JqLNc?_KRQ50YeOmDcAa<y7X!#|&r_c+ZmSCQW*+i{sMy
zvHJ#hj&Bn*s&C(6{o*?K#$T_j>{w?+pCK=%CG?#2Oho_tW=!fdY*Ob=+QDASB6XkL
z`~hRzHQZfc`fTdrmp*tJ?yopfxNOHKHznmbOTCVyOn9SXo1sxRWIz0zt5a)t26gt0
zU%9-+nYq6mGIp@@50||O%{J$u?&}ZCDMjh)52nxl$oh^x%zYi=d3WDzbz`oGKGEH`
zSvB;T-fPh(xvQgPj>pLV?zUrf(Q@~kmZj$@nbV?un7J&@C)=96gq}^GOS0+t&P40e
zUc|bY=<dUA!z<hU3+CKxsl)jW+o>YDB!uPNa$wQafl=El5=OmNw?=jEKP2vY|A`C7
z_KQ;|`wlqp-1W0!oI}G#Pwf!9_t`s>^?bj3{-3)>2MQw){XnN~m);8%zV72P*}1P}
zI9hsPy?H!uI&Epq>PV}Z{h#7z4(#B*h;jOiYBRch^t9)<?k#xWdF!Ola{rF;L+%Lh
z?bTDYyJBv?<k}l1wOqcKc=(gg;zzC;b4zYNr%I0OyZzSood-<}?Ugu_<D~Z8)s8mv
zjHxr-YTRc;+I8Pf?voqFJ51)cypqW7HLQ&pTbLrMhR*%7ZcU#)Ey{V#=G@KOCk=W+
zopS|0F=*0ug4ei?s*6$6rl;SU)!&)AC_eArl(nku9XGC+c<ar%&fJ@Cow(x0BIW0F
zu1&c&FMd%f+tkbjTX(ZfnG0r{nmJ(WZtgeH=QrkfrH@Zcs_DBn_~q-P=P*2P334CI
z^l`3hkewJ1JSZ`7V!Mt>gVk+6zB#$u=D9Z<W%s?I_`uk819uEv-PUT`<KXD=3ntwa
z)XteYGA*=U_nryUhetb{s$%op!SkJ|OUrEE-~kKo2^;zFbdG>SGVh&>k5^o?puh86
zv(Tf(*3WqAj>j_v)(1EB@z;zUP3yx`PAGBHJ-NY4Lazx9j_EgJLC=^igOYmp>2v4A
zq|n|0f&GWg%z3dib^Y!Jf1ij$-POI5ZrL)bC@^tojDJM8L1ShPUfj`V`%!20lZx-p
z*pn6{&YgR6_rQpRw==h=<*)AEu480}LHc;ojWMmh&f=K^XFRdc<<CA>h+JQ9iPCf5
zdYmCgja*-M>EyZYvgQB#x=ZsO=8HppzGcq*4%Z$P!#HN0*{75AeH9*gl9AtTj&F0d
zzV8!e?!C4CS*`Dpa~~*n-1>LnCr2&xi+Bb|kM)gxKJbbESIE)lc=<cyPoTcfUomZI
zjtpi}j&~C1{j=jxN9c|bGv0r6_4KTHx0JYoey5)985rrbC%EcApEu=jxHG)mF}Z2{
zfDzlA)^nJ|=2BA@GY-*5eL9gVEnYq@N7>^>Pkr~Xt8Dj9O1ok6^D8^5#Kq&U%AhIv
zx%5Y!KQQXx`skeIbjKaO!QAhrpXlc~1>T0ykq2G%{miCsp=<H+b>IBO(;DV!*PhC^
z%g|v~jumw2n@itVYdd$EoUx>LuRk5h`TdgRhi0zXI(Y1&c|F5?-}4Q2b!}?z>Z-oB
zzi(Rp^qBt9$@4QOj8A>+Xu`;v<ViOz9Fj45Vfutg%lGbfxpcX0-U-jWa*PAqPq7Gh
zNzoy2Kb*N&*JeLdV)4*J(@m<^M{2~~cXx9-9a&9|>}<QdDaS6ig1^QLZIGjaeolht
z$r!~D-cR@z6Ludjc5wgw5Pk2mzCum>HsX0+f^c6Gev9x-6XtGD;xX&UFk$MA@JiCB
zne^0}Cq4H?l74^*zk|My3DcJlzoz+bc8v*}xh0d|J0@)Al;l(NZ!=+fM)c<s=GhVK
z#hUOA!jnyy**@ael7FVjKhA`;ziUnWP<OoRdrv&$7xeEZo@Z~cXXYM6mw%c`KitHV
ztK)GKKf;7}6F<g;6HJ&J3mxSq%rETm&ts3P&V)M==AKCGk2c}U_0Pjy#B;BJW0#3H
z=go2#_WL+CqR%-4@ox~$&|^^E0<FWx2uGTDb1o$t33oE_<{Zj|GfaGnTOa#<P5e|7
z-snnkbTaYNTH?9a6#GmgVc*lv2&bCx5!ZY>z{Jlm;YREoGGQja(61!i)+Y@8Sth)O
z@Xf}4nh75x+{1*;bxiN`9q7+7@vn2wXS#`>Yr@-Ha~xrg+lf!tVYQm{TTT2t6aO*g
z<ytK9v;^|sO1xhi=8j~63G4dl;aEaA!-TVmU*pIkywHTr_A%i_CQK=Len!VHHsKun
z*=)j@Cj1`p0gmOwb3KFn^!7<L?W3~^|46*M{V~!ezMOC$6W_&z^}U)SOgPAdR}z1-
z+1_1E_<rICnsBfQU$)=PgmwEKVd9xx(B(ycrm@$<gzqFg*@QzVno_47-&tSztfa^2
zn8e$gco{3V;MQ>qZhaj$S=xQ9@V9T->$B2T!o9!a+O)TK@orT8T*B<6b`JT%$MS2l
z%%PTvUqF46xpTKZu`w=IrXOsdp79zl{Yat<_TxnNXhO#k2@92$Pe0f$eX)*gKI)E?
zBzGj8lD-V5#_@)wl6T*2^VxgvQJZcb?L}>VB;Olf<WmL4#aiuRt<K3`=j1TPxP#bZ
z%<BPRGC}U~AStSYbWjW;>@W#aVOAKIzXq$p)?nLTM`)oI_*}=AuyyGxk9@he&5y2&
z#*Z+{f2hsZjMYyjg$4z5usi$vDzW_>bzS{C*Y)rV4Nx7#Hz?TmnoxYJukFa4s@%I8
zP@mXDwRG&tCpo*0bXU&wgB?vJgc|=sCDiL*{xuvs_|l6%gIwN)(IKEi#}1u3bnXz?
zp-YFL4qZD0U)!y_@Y(chd;0fm7ur6oLs&pq$FNReox=jdx`YLVbqx#d)j@TzI@lc?
z9eAEz8}cS~7dXrj)+X%QF#oW2-UPwAw7h-L+)mqvduZd#6G_~N#WfD|h?bQ-vRjyc
zpXg1i=0%JdGBT)7hp^~P*2?tWiET#qYJY9qK%eW^1@s7Q=RdTcPxkErY_s*Ws~^oa
zyWvIQkv!e3{(o*W(`xiKzIt1>W0UFasJEfb4ySnh(HipB-oNQBru@t{8{zoQ-rMFP
z&l6vlbd5vWSiHH^#}{AR8>ZH557UHvO%w8^ZM)l}w+RuZ2_g4xqRzUd_&ao4332Gw
z663gr*3!98U*A4f+t)rS-T!21n~Sa=4;`W&F6Vzk(lzW};%m22E&12RdD;WTyE-3l
z)4tlTq%ggG+nVjGw`h0nMGb4C8*zVouw!tW4%aDrXx9-uWYqSf(kJ(qe&qO0wLNsm
zMbASydZ>$zMO^>np6sNyG+xVL32$Q76=G`S4Eud&UR6Id*b#wluJXw>^*GpPqy4z=
z8s@5n=d;3ty7n>cg%@XC`=|=vckS&Rmd%}$?eDX(V8h1S6Gn_2PT9R_+DX_UUtxr9
zCtY)Gd*3ual_u@E(cj%+G}Xq@)0js9N4Q&?8hpEd_MExPI^2HkzMVTC^<6W3<cNgZ
zH*O$nOZjZIKJZP$|4uK<7jy>8=x^PI8qHndmU{nv-?aBR4^bIDD;z<-`aRFSy0pS4
ziv0Kvxi6hnox6`qtkZdO6NDy{eSHJ?-l$uT+2<{J)n|ph-eZF=s`s&bfm-|4-Y?Zp
z{PF72+AKw1Z9m8}BN6&-ii$h+JrA>a&w#jmKHNK>X9j>>^gzsd?#<4DBlt>k|H!ck
zeMcru7&&|K9TTT?2^uqUkiS2-^{ZWbmrt6IzHoHLkg5G69ad1E<j=--Wi+|a^R(Nf
zzWv9zj_HA)Qe%87?A^Yxl)2+e)=NTz^Y-Ud4?{pT#+rZWY2Vl~+CoKhykl7Nesp=C
z=CEFlVNI*--_+e|+KCTw@3o41@8{8ux7=|`n&a)0m*eb{mj+uWO`N5csCxT0`)khq
zINtF}L;YYQFF%YQ9^`p4)5^IuHL7pLUmx20%({7V*3Y-UPK(S+xM}Z0f2}A?Uq2^(
z9od^>&18F*Pk`BWTmirG(BKpB?z``5J*EHf&VxO=41A-e4^N-$L1JmK+G*sz%(4^H
z7yi9x5C1(nq|iEOx!=ddv$b7#$(CDl)1E#2M_KLMlkK*t-1nPXA$p{%uYI$9TW)-G
zPao))=eL|c>Jwcn?8w$f`Z))zU4G}JEei&Y=;`bn+&Q?{^!UL80yDDm0~5xd9$UCQ
zHaE1}h{$2%6UL61z9@TWv@@pvtl5J{;+~n)x5wF^F;Btx)&0^OeP*OT<;S-U+$W;?
zbw=Jfelv6CJ!kD@&F?oMEG9lWT8)VApK|HB|4x5sR$^F(am%*MT<+I(&&<?C6S4+%
zojI*=%`VsPt!@Kmj2_xess8<jrbTsgz1-FRy4bi8mNjX?=J=ShNfB`=D~FbzxW6QZ
zp}og9?xpaPaK6*P*IzuR%KH3S-zv$?g}8V5;)9Q#pK#A;yK5_|uXX(8Zhk=_5m9A-
zalKV?#9891{p$nKp%H<8U0(?;iVNwK5ZpF6G&w1PRf6^Jv^{bCrw*AI*U>q0q_bo6
zj6ta}vG*@%?`#`BtV_=U!;*u#Oo|&6+&#V*^=9Vitp@JxN&4j(zTOG(a)5bbj1TXc
zx^i1~Hg~6*`4rC#yj?nB(E5?PeWG{wTacHqA}-LUyCdVe*wECR`yQ%teY9lKSm)Rt
zqmJdSeRQKEsPo|7eS3Eq*17G-)a=1++qCO5V9hIIx<5Iob6m!*QJ*O1+%*qQo2jhV
zw{O~?b>qWR$81TQt!~_~V0xc!Z9_(ec1w&I9e9nYUvnM9=KcA4hRS`XG%t^7)#_R*
zw`Hq)CNIofmU}kKUFG&|W7fS?xZ@Vr=T?$)!qZc><~`KA=Nv~+&8YY}vv&kI(ysA+
zaPJK_=d@`b&!?|~#&q`SHzcB0L;?@=tx|sa=IKq7dXDN5Q<&Q~<l*UE<I*3D4Bfg~
zIsZI<O<<2HeY>^ome{$|fC-H8^`6-5)3Wbf%Nq*VF?rP?r=LT+Y}(Upk1J2_SY}5=
zUGJ;SKAwG;eYFdFpnhsg@1@y#_tQF#t88}AZ>x3dabvF0H}=dQlggcx{=t#Y$IlbA
zSG+${SubCjYQ5}p_oeR+S)6L=_#f;F-;v&U{bdBZ!si~>nnP;0w;y>)y-a_`_*>6q
z=?AuXiP>2FH4-`j`uMo6DlsHvPJ(8`xFqMeq@;1qq%+YWJrnx%59yI`motff&ZKeU
z$nQbU7ZQ1%tFt60@m>*&r{FpUOz3FYa=7!g548>86&L}06UQ;6V@HV%3}|X>s%?zx
zXr6$oZwzRR<JqU_b2EGc9Pelr@~F9<q;I)ZYnbZT=fPL3VXt_f?z{BfD?Fk0kmH7y
zrw1K3{QQuvQ+I#Hb4NU#<@t6~8+SKyxmRPp(6Oic{&LsXf8Oiv$BJuKZ|r9Em{PoP
z{mn{^9Q_wh|1~~!b<z~JrMYHi`l|%2ns(T#zhcMlXr|KivC%zM>78KHSG7!!s=GFO
zbL)P~wYYxyd*e3THQn83tr)qgZ?8ckpM3S}54O*k^YVPF)BLNtu1lk>mGvrq`osmB
z2M*O8*P`23RyN)DyRBtP{eJbP!>3;TO-l4Zb3SCAz2e@JzW!gRa+g1IYG>VZYP@d7
zd++2yt|9jI|4cn)?olD0^D1-SS{vrW9d|ZAr=JDU_pi0cpGN<4^(NN>e<}Y+rR)2?
z-1_FeuNNKqe%@s|U&m%O_R@#+U*_7TUBEZpISzR0kwd=e_W2a6sl=-;AdUEC%?8*{
zn2Jo}vrjQ8kKFLvLr*?&>jle-a7Gj?+InYtP3-un%N1)52Fe+eI&xTdD?M&bM0eNz
z^r+~58LEr!0d^1U9TXQ5os*h8e@je!S+Y4E>~Otm%B`<`{oA*e`q-?B)lSNHvuR_V
z=NZhisWel!<G=O<gX7-pUp%+ad$Kb{nqRH@#q$cwvwkYyXYzI5hpeBW+AMi4UEjAE
zxtZ^E=()$u&C!?6BF{H+b5Cu{^#}HUu@<!L^ugNCmv%_}r-bQ~29XcOefqq2{qy!q
zs?F<u%qDOmtM?lHkH5ZaTs`SMPX4^TIk3&^9=VA$e;m9MDM$ZeZD6Q6hyCMquI`TH
zy%bNYOy<%u)NYlnzLu48m;A_Fz&3u}&+i?~Q{1V(rVGk2%LVhcg#F03$y>~!tz`WU
z-$dHReAj%WYmu%c<qobQ?ba=Zd8A0GP=Az_YLTSia96Cp!COK$vgp6Zn7KJ3jm*ca
z;rBND+Q!_;$K-oVm;+%pCr93sKha74NzaT}4&rvm`x1%d4~ly*RC~D{|It-r)Bt`>
zP?ObZQm@AE9lT!i0{QhY%NzJ|c@gZq<yqdL6ngP9WmroY^s<NWZqE`)Yz@9&Uiy)T
zE`?qWd6sRa4BIG&UNWeKW1c04lI4*5T`lY&rZwBJ;|Fj33M-MdM(1O5@8dh<dlk&f
zH&K^I$iI>0I5qp}WtxAaMqB3^O!<yc)@?1Mu&>|GHn?AfoAnM;<GR+}3})MS(P@7T
zHXP;D<*i`rc{zs1fwZ<a7(*svFHx3IVn6IXA|<BfY~#CS$GAcp!nZK=_PEKkj3Jb#
zr}5H9!nsa1pSPC0Zd%#LQXuPE{JDm?-f6OzYrMhaS;2iR-FZLpv$SWuep5DCwi+o_
z9OLwM(DkOv{cHYjXxU0!$~QHyYtvgx+S(B#9b@WJ>-bS8-mUwpXA8dS**e~I+f<IJ
zQE!gAMs-bYlIQS4*JLMCSK5wl1>SVtwXV@hSxt%~l)J#x-C&;F?}eTBxPs)z?~!mH
zb+A#6QqNAT>h`&TB~+ebNsxo2-bjsapad&v)4GM;CvRgp18F7aj5#c;@V!KK;@2d3
zn!n{NE7fY+MJ0>2SA*YrS;rRL%JyE$HcR3BAO)*$@-^5^e8uEV&$3iblJ9Wrz02PE
zPo8+zF+JHUhx2~8-^h!6xA7}E%{INCeBV;zS-w)gVVSLBsk4r%k$0i|krzJynPmw}
zKh@8Q;3N{%dX|@1blh0p3^16N7tU8zDoka#9^-q1^VMS2i8L|ZMLtsZ@{a1$SP4^%
zX-$f8<ThVrV7IrLFCQvqGStVsL;E~>I)@5Xr*2bEsDJbI_$6v7zkigM$Y~t5%IRsI
z!<TvTf%eR#HI}KD47r!TgT;@O^Nhw0`X^EUa9GWOl<O-il-~C=eOWj4b#s{O+vc$5
z7hODGpoY_;_Otg!(i$q*25V`v+X(5N*1f;JMJv$lZY?cmEp7iDeotmAA0zEhem%tg
zvW@U>*v8wCH8MMYjCU+Qjx>#ZNcXt=&`f2Pd8<q|skWJvd(i6b%H!=?YiLvPSl>pj
z59{kDk|o8oxrIozg(Jj0&hieS9r$*q%ww$=de`RH@n8Sed-Iy+Z}|=!Jv`wY{_4`{
z^7TTqgOTcTIk4d^oj#7_@UGlWc)Lw*rN;=TmAys!M0~!BHg-}e+Sx{~Qc!A^M%wup
zQ?6siyT6cr1-gaEHen@{u-2O?2h5()hxEtTe{>Iige%$OX`78mv{pFUy4;_lGmmoV
zbq8|NHLClAFj+3QU{&|0gXJ%jC)3c0{7R9%<I!$J`<RxfKM?Oe0_Z-&y^n7oj}0w$
zb>HIcpS}CNyY975mlthO`!gPy_DAdJf455!z7FSa7Hy-5bGCW(D|@*LFr4*b_R`_h
z?{LmWhoi9@#)FRQMLq6Deh=+tDE6kXH+`Zu$Y0cY>ZXPs;boc1HmKt7ANf6jb&Z;0
z@~@HC<Qd}jNe=r{4t?%x+)=TLIxgndN+dP(EkChdfS=KlqMA8k4`JbI2DxObPvmoT
zh}T)XCaKWP@~7YV0w%Hl=;a(wGSsm|umm&*u%+7SUWofAUSd1=$wb*gDZZfQyRjc7
zw_0M^tFg<H$sV|ey11Kd_b%%@SRR+-YB;$+K(0DB@8Zri!{qsr$xX29P5-=9Gt=fy
zKbCJAu4mL#$b0o~qfI@?(PlMQrF7r8g5`Ra0AjL<znK;j$TphC5peO(+vSm_xB0%B
zS?JvgnAtgRwP*V*Ra2YK<7=fn$}w<+SwHGoYuP^YTmRk1@o<C*jX<uM508;zAIqck
z&hB43h`SN_O;X8A!5*abJ;hdS&(<iRjf{gP`KNxDChyNrrJo$dHd#WiIf+l5B(e;m
zpVOy_<D~)FB)0p{Y6{B`mRT%Q)Kp#@8A(q&iavA{%M>+3EtY0veN+m4>tfZ1uTG4j
zC#xhbgPwg9=@!tNP9bihT84!w<Vqi@?jTj9`8CeiTC57x3^}2~8QXP4a|yPGVoUE$
zdOYDp?>TxL<z<uSck40L*XZc6l-`591X4Ttw;mJdJ=;sGk&_uk&8Ii?;@wNVYrO})
zMW3T_kDv4yYK*}<cJdzaz2hgn_KpU;>yfk+&9D8_J&Q(<1iYgvy*_4+z`D=Uz3SyL
zrgtRaEx&inqkYw5sn+QH^$4mp?lGJm$K}u~T)8lkcICQqn|n0-Howt)KkcbyX}+`h
z&PzKk?Qr>Bx`5RymgX7FGcF~uR9)KXTH#v3-Zz{P!9RJ)YG;ndVJ2<Wr7E4)eBQ)8
zmNtKz-}Tsil<!3hy>fAVjm=4};H$ixOq!L(mzP~nxPIbuDY_KeQ@mmfFr1puM?8JB
z{N-|W8Lub_*R-!H%heWsHSf#0V7>Vs`m0Fw55@rh(51gzSFU>*3oLehi+8$ixE@GN
z;jhu+XzKcXa~LtySxY^<PRr9J(OxfR1aT+&<5btnUb*%&ve@7JflOn(@sD3?VD!e>
z`drHWPjO~x#$CHPgZs#{aIDAbIF6;}pQ=_tQsnu&NL9%R&bV}{MI2Fj5#rh@W3&|I
zPpYZ>8m(gaFsWWnv5ZIJK4<&&_(}9Hqv(f*pqW5V9?4qw7y64M8#$WkvpBBZdwS^p
z$RfG#ML)ARh+cS@zWakCgC0ec(%MIHbv~VOQd^`GI8TUV9ZOj6HP?F165Z#DZLbLR
zkO?ZJ1t;Tby-Z+P$kGz0C2l?ax7BhB$4mEeguZq*OB}KK7=xA-<kn_Ag>Zk9PXBfP
z^4MvW|HF*K^wJX3Do)F~$q)Sf;fiH~IkIW_6;_S5PNBz;FVXuQlBv!AZvMAyX4&HT
zTh6Fl`?^y0^HSGwjDYlVgky+4##MQi&6I4Iyvms19Dg&Y)deP%=Scc1zgx#IK!4g*
zI^JXdWefA^ef4rVrB`x!o#D}OOD?DV<*!-X`*G!xMyu9~N0%7{KhN*^ti5@7EqTLf
zW?b}ucoyCEHCCjw(~xo*ZO?}mv!5r&GN{84jinef<RITfYw%%ABt}bX{@N1hk$To{
zZTDZEJn~U|85#}kTcrN$i62g%Fd2D;2~TEhlH##5$I~zP@Fb#Mx>-M}Zl2%4)<0D+
zW3Y~vKYs(PYeCUUm>*}v)o2B)<1Op|a)+&8Ep^M?alancI<57z?*FUB?UyQGUBEk}
zjNSkA`<HoI!CJ=O-DcsJRj6g^xK*gj<>i+tTT84PydekA!Cww}e|u{G$}N1Fb6+HS
z)Y=m7kr89!jNJR%yY^aH+mgyFF>5`Z^Lk^(cKTiEtu#!FX%*(J)3l^tU6#>?pJ(ym
zj4%!sa`rxo<v2aT0M1@IG5Q|F*w&9R?g~aA?=Ximli7yBT&3jR1eW&nz#4x>7=Boo
z$$7_mtkyC13PrLCD?QNYVU8R6*ipe)`Zd0gw2L{7Da?^fWaRTHb34P(iRUbDFyrVr
z^5}v$ONgB>d7J_4B;9JfDU-iqa~<bE?XeKY`P;RuhsYpxE2I9^(vjMJf%?e8@4=GD
zh&`Dr=3`k8WEqKc1f&sjc^QO6FLPM-FsAP-Vf2wTTtx|@_X?$NoddlYQ~!V`T5}YB
z#<NF`k#TI>f%IHaFd9iYDK>MywUr}w626b*Nc1r06gyc@!EOlqYFFwulJljB&<DoA
zAj-A?oe1LN(Cf~xSjshme0uRah$WJkaHQQ>_e0thpCUK{jG?w-Wq{Q~z0dgjPkfM4
zICEJg&GZt3IDZ?Do%3>Dt>n9!6Y=*$miL*{c!#AM=WlbF70?W%$D7OF;pW^Wi=*yF
zeh*i(_^Z!%hOu2YairC`@1i%-sn)W^`}21gEhox&n4w=ZFKd}EiB@;3yNSzS*<=2u
zbHpFQu^n&tOXycx<^62M`B+-b@%tEUgL!Lajr1ID1?L1A-hP-f%a)m+U;UNN8%v}0
z!r0;_`7aji(f5~dQ%V58AE6{0XxrP^27UB#RPR&&w`;DTtTy|gXRS+T(*K7wXPj9Y
z-d45M=y}(}n?Gi>BF2`^zgu&m{>@iQ!S1d54sVEcEX)UePA%$ps)71hq+YT*d(+Xg
zr?!;g3(nTBF4uqXPoIf<&c=<O%@M9s#wYJO!1b01d)AD#0(H1$y+O)M*t7Q5kAyXU
zYvg{-kD2vEYCxykB2&zo@|!ijnl<IoW$~7WyU3GdZu43Co~80TGcwfGrT@)gRHNsb
z{+CxRu=KybQt@loPng?dydB0IqV9it=-EN$4Kw6b_OmgxRUfv{68d8IKhwIX3+^Co
z_3uHpPnh0DX7AAR5--s!3}>r$qo;BI<DO8$mnrA>8Aji%EwC%O0@TDkBQa16#Q7A!
z39ce>KNVM}#h0<aFS^%+195Gm;he~|$Wal0r${^Q7;T5FeFdBq=@1V^P|KA=lmZz4
zck+W%yss2_AhJNcCciE*Kz>2k4MG;w$QAS&AWiULrdT+u=tg|^WFW2w`Gp`4xhT@J
z7+8k|h=d0M`S;>?uXHE{()C8(I|<P3lP7d~P{PHCU^prgl_2Jnpf7QKPl-gQF%g#v
zRU-WliVO&ca*>!AKz|_dgA#$b!Nd)&=7iy*$dCq+xD!0#n;{ZUCh_<%jP)?=7%qqm
zcXG!MwiB{NMkYY9$fyI*D3VD1B(ffp1?5mHGA;(NHx9c=<e79{WIR4haKK@ai2;xV
zX@KqI6d*qNtk5hVTx2rkpG;npGocjFn~a^52si`yHPs&oPbH73>5vP>Pz@(UrV*Z2
z4mE)7>Et^d-Rb#oj^@=UG6UI+c*uqdI4UwTNn{pwXQ4X_yR)z}3%j$3pLJMdwgW<d
zbhA@|w6lqyP5f*fe+n*&%=L!|z|LIk%q@g!I3tptATkg6JmmARKd%gGfw=j3Py*PR
zUk6Ph3j!eqk|7iFp%kj12I`@aNqPr_0D2keA`2<s!f2pO3o`)Q3$eYh5}a@Xs0*eq
zWl=E1LJDL-0qleWa1_pqERKMKBAM9FBtDb)OzdQyfQus61wb?;K?aa^Nt(W>0>Kaq
z*k6kMtV}3^!$3K+8lXvJSs+l>W#q98+sn~kj{foj*a_HNeiTl@d65;^$i{Xy`q|k)
zy<}rE8=Kh;BG(s+tSp0SsD(3dL1dLbL_i{>LoO6U1(1Ff=~t0{Rg*|gAS3`~$#II@
zkO~D*3FzI>D6$%z)!15%t<|}Jt<~6Cjjh$_tj5<H10Wt!ArDFb8#iL}#uIQ(n1+RH
zI3=>C94PNi{($VJdXby6fOTFHqyhGC@dFax8Vva&w*|s+k$lqS7XW2gn*rppE&wvY
z$uv9hx2FR>6kwwu6?Ovp>#?yu1_-Ywydf9Pi)<wA#(I%LbPM@iNIsj;+mr*fB6m0-
z91`IGkoHdUxRd;f1XAFz$Yyjlm%>G+HnQP_$ktdWgL5Lq*eOP*n7HD6K)1LGYM>q(
zMeai9u6Rg=TtMfpYN&%ok-PmN29hBiuyc1QR6{MCfeRw{pm$FM;PXA`-IEK&PyvUb
z4jQ0Iq$ChxfO;vRd?iQW6i_$Y`~aV~B|sYFKoOL~K{yU)fiiCofM`g949J5Ls01gR
zfOC3c2!bINQXmToU?&`aqavlLa276#+#3Lt;ob`(_a#FaR6{LL-usZ>9|)A;e$w5a
z4TXT-{fD6rDC_-{btif4Y!unWdKdXTkO}0mI|GoH;YZm)K=;84IM3~)<hcjkhms%%
z>P5<<p-SX8@lY$WHxID$FzFx0PDM5x7kLEzN3ijzQ)FMRNG0hi4*;^qir|9C<5^HA
z@<a&m`-vKns#quj{I6;dc`^gA@g%nQ=ffG1-zEcjABcbwApR+SKgI8-gW({c{|tFP
zQvk$Q`$H<AQ+-k7*&LDQkUfX&xoW_l=QDt^KYv!_U<#1#1?;|n&I`p*3+Nq6gmPg}
z2Rorr<S;sivGZa$REfNV&P(XOoDQUY`J9N8IA;<de<dE!JA&*8>0iZ84RJMfBCnN*
zydDTgp-JTTSx^b*MULX*(HfCALIB%ultI17oAH3oo2NvM1w%9>0OdGFnq%l4J0VgV
z1K6)^5P2&J@}LL~!coB1TjxaH4ghrDM(6ExK<DiWs0Q-?Ll)GE96tk%BJYsjJB5Iq
zcS-kdHem1Fvm);~0NH!kc`qM|p$w|vFw{c5NSy%r)@1|nb;Q>-LX*h*sgMZ;K-~M-
ze*YAAB%%KSwm(P*;yxhmg9A_l<o!nnL_iLd1M)v2Kj9Dfd?Eu%;4oYeIhh5eA|Lue
zFvJ5oA65eCJ_><6z_<EhpuF`*;RFz0-z4&JAjASbe_RNp{kTr#6Xc(yzyTo5C#3nL
zLF7~X`!pG{0AD`E&ri|$6rE2`!8s9Daw-_GdnyIcJyifZp%M-P`k#dZI-ey$8k`sX
z85Q|F0CIpdpO*kOKffq)+7E((GM}!1YKG|iKEv-nVdGEe>EZkr=zM|QFH#^2u=B-E
zkw1q+8JrL~n-A2<*+!ASWQzRN0eYPa*!^pb$lv^-1j?a7q=7UI<nd)8oDunoJpUdD
zc~B>EE)8;^2uO48ARHI@Ivq}le1rZs8G!yb7e)RnSEP|V8nN3*{I@AUzTaZ&y96kM
zqay!^hn*tlW1s@60loi@hH{bb{U8_!e^0vavG+YXKZHO5koJcIfUO@+iCoA5eEcW+
z|3v?vDUb_=aF$7pL?Hc-wQvS5i2N%8@Z(=KP$zQH0cB7n@)PCx341>^iu@b-zXO4M
z|6Ky*Z~$~%lgQ8h5CYXAO~f}5-$dM{G{BaNco(*s1@bxl4uN`6Di4Zyb|e)VcyBCn
zy9y5TU=ni2PG}O<CJ-W^gind`43kebV8_P^e8bS^6rbrPt#6DdKL?=imjiX8t_g=?
zxG1VEY1%f3y0%=De-hL~qo{VIX@`D0@@$^~DUbmLPy*<5NQ5$|hFUnoqtO144K+{)
z$U2f=M`Rtzqa(6T(SVIk4Lqbmo}IDVnR0hN2<Lf?Tnywu1)P9$qPhsgLKfsfC6GQS
z9MBCq$ZdlGK)5S<T~h$vu17@$M?fwd7S$~TNZ+j#@Ua`^?d}igbdQH*$b@_-hBByz
zS~vq2MD;+w2l_qG?}2^~^n0M+1Didn0KE`D2!?1#0?HUdz9A)02~Icx=S1}sK({A;
z_e=q7^+cy9Iz7?pc^1x#3Pmq80Kx&?Q2YvWKmni^PF~@p3$GK^3!PrIqIxF)dG<cQ
zLq6#C!DfUXWQ&T#R-|6zZxr^Tu+cXHu-o^dsOVg%71gg8(CHro{2qYL0DO$0{4tb0
zra{y|bO#oS8ibueNstZb461=TZk|ek9KcR&H0%U^58?NaQoye`fhr!L35E<PfQx)4
zrUbANkN&VqILA%K<#1Ni2!BWi;zl%zN+3<bc~K(|iW(IHF@PVVE{GbP04b0I=q6@C
z9v2=1Arp$Ann%Xa8H@h7ctAF;5}HIMVJoRZ)OdfO4#p=!I^;qzpf}zLCjcKO2m}Lh
z6G%4!zb5)YDrAdF#zrzWl95kBJ_$RM(4Fjn5Fr1_=uSp=N;njXN<lA$-zg=crt*7g
zHPiw&rtO3pI3;R&4qz)4om6b35|@g9sfXbVTog4U8j7Gv)J)bh8%50`PtM2Hta?#t
z=}-d4fw<Y^JG%g|HTwV@1@f9r-gEqb_&EuX204JuIpuIr)Li6qk*A}R9t%mJ!&#6A
z=S9uS2Yj1HUi0v2zCYB7;+$M%1Ok37bbwRTqEt8~YH<eOUuFql<2ro4?y#sOrJ^_|
zR!a|v%1QvzE+f3`ps3}fU0x$<MIjfmqoG#R_58lRNz_VoRu%xVm1jh)!e7o^)v6j%
zIrxy13Du%*2!L!Tg0rGl7Xo>$MsIbas2h`@N>ncCbJ1Vp2gSnFF<}2D?B5&%JK=(;
zybM5gOFSUE75lel0rqag)@^4+<)^?2QEN%J7MtrrpbQ#B-JT5>MHQe^a9GrO?5uAT
zwILmjirSa}*eXm0r>IS&-Bb$aMcokr`J(P5&7J7piJhWKs28;vzc;7C0a07<X$$GM
zkZ#KbQCrd9O1@jm06WFukOn*9IGhu87qYvM-Bkq0?)HaVAkE$6b5AT(iz<nRLQ&iB
za~t-zHHg}t1Qnuo1VAyMUy6Qd4xA8mFTd|4&AoNdB<j8xAfNk=in`wcDR2-@K_idP
z2?PRp?W}^sK)PLNKzP>$Q4bUV`RvYxYCu+&1;m$~6ZK#Sq(TWah}shjIY9WK03iKC
zb)w1>0D1W-QNO{~Ui9{2XK$^jhhqT!htG(ra6mj10pUkT_sC8-07rrJkDM3vs2_v_
z@sHx~qj^vY`1NQF)I+1Fec0QFkNdE>FBP((5Xzt$YJq(AT@+Or2r-ZhnUD{qPz5zm
z4~?Q8b3h2hLn>rLA(TNi)WR9KAnI{{h=4>$hg>Lz3OEdP&;U)Mo(O~(NQO+vhf=75
z8mNaxQB@8Ifp|y<^s3OSLaz$FD)g$*dlJ1T(R&iTCsQFC3ZV?Dp%%`-1yTD0AO?~l
z6Y`-Hs-Onyp;6Rt9S{QXkP6vQ2o-?dZ_)cLdI!)ufZhT04xo1cy#weSD1&OKg)?wL
z)KmTt0f~?fxljxha2V>K0h&ZT9SAXy44IG*rBDUvK8^0v=su0^Gw41O52=t1g-{07
zPzz_^f~abLh=4>$hg>Lz3OEdP&;U)Mo(+T;NQO+vhf=758mNaxQO`Lb1mYnTvY`;l
zpc-o73|tWPygx)hBBVnu6hj3ZhB|0~CQ%0iAqJ8m6Y`-Hs-Onyp;6Qe4hVsGNQG=D
zgfggxS~vq2L>=;n2uOr<$c194fWuG+4ba3zu|SA{WXObkD1|DhfqG~Zb=UzR5D%%4
z4TVq!)lds(;DV?Z{UHJpAsup|7%Jc})IkF@iFzpzVjvkZAs<Si3TmJp8b!VAfDnj>
zRLF)xD1&OKg)?wLl+zy~AQ935T_?KEQmBH%PzUHc(SOAOArJ$}K$=%_p%^Lv{a4U`
zr2(2m9SH<<kDz-b6Y`-Hs-Onyp;6SU4hVsGNQG=DgfggxS~vq2MAi611SCQ_<U%o2
zz+tF^2590o-av?fWXObkD1|DhfqG~Z^|}K>ARba78w#Nes-YIpeO>D|iTb@i#6l8e
z0DbW9>BoOx2~Icx=YYQTDE-S(`s<?!kPf*}3>9z~>fj7q5cLLj--v)jK=%#&c%ul)
z;UFA`vw+<<IS#yu-8ZrOW*X!Gx^JTUCc1APg;Q`|)G>hoh=wG{fIKLHN<jbEaX|kV
z`nBlS;>Z7rH1xBe6r6BY)LVXlowq2@TLnOQ-@^XefshB3{SPrfx<8QSIC{qmp&ZcD
zyqhHIy<EWVdj|kN-)j(6ClC(QQC&44e?J*Apaih@em!901AidSP{-|t4#<ZyqE2K&
zv8a>eeG(fdFN*pQ|2`!AAwGUsCF&zT2!U9@&PU|&Q7#lg861EbH~|fSje7E|$G`e`
zNP$ei9`jPFz8tFIDAdC_XcF~t07O6n5dR5jK4}#7X$+9hsX!p@X9c1@#}DR-)M;#=
z&JuM7+h?4j{)CM$Dn$Jm8-FHzHWgU^B?GYaSA6;_@qa__Z`DA)4a7Cz%a;x)67^LA
z91!*QBseeXTop9H1yNt4^EG~ajg7C#{~JGuh7`zw5;y?I;hd=d@`GqdfgHg8e;owu
zH3kFn#+`6V)VF>>-rr^evTu=n7Y@fo{UZ;YqRtDD<~;G|Pl)>O0HBQjT>`bDz9;^B
z!r#}6`XNiyg$SVBKRN)rKOTUyqW%>OX+XMv9fgacE*6XWiL(8K{3r7IH|c-&gBVDM
zLa2f|xFD(t8%>F@6B<NaN`N9bF3N>pt_&!HdQr{9H6Ip>JCZEPfO0q`mLjb3;e_yV
zJV=9`K-ea16Sk|MNi0VyR6v7RZDOGSYQ^&5lD$tN6oL~jh~-PXFYiC{B@e#@D2MZ6
zU6Td)!JLoPmNack#kw{INP8{1{vm*lzf-JsydR`p1{?)!wvUDaI4D*Jf55K}^<o8J
zrz5%@i-EXK#C56=t1~`y#(p3+19O3VyF@@5?1W0tvg1JBLD&gO2XuoP#Oitg>fnM{
z!Pp2+2K?%V-EO4qo*;aH65=5P@&S1dbb6c@D<m9}0AE5biq$h4YQ+kTfrDa&QJ%1)
zVuh2oS1O>>8+o59u_DMXB1f#q2q*{Sk*5His9?wd@``E_t1o(eiSK(}tms%M1oG*J
z|IC$G{heYBNQ69~JTd-|3&+J8$nSxvP%YM=04RVuu?FM&;1XyQD>fTgGe2U*B>?v0
z@Ox-7pd0T8NkD$XuraJktl`wj@Cva;I3N{vLX%htIZz|kNPocos6fEpsB>bC#>VJ!
zu@aFbmWjn&h&2|yv8TiuS1MLgqFCc2#F{|-gnF?il71p_$>f=w2M6E;To7wgFko*I
z@=29qP4<HfsD=iyrVu}+2*@{u^;B$5%>k!a)9`s(8q|q3o%M9=rIrEqQ;AO{{frPu
zhFrk@jI(0R6bOeT$bu3$2&crFMcgdnX5~XM92YCiAF{=ooeKCln>=P8hI+Ul)*R$>
zs^E-RbFn$MT&xW8%)pO~6VN2qLgWi~LZeuV9Ki3zfe-`OUQC+B4Ps@+LLt<NbzLS@
z19>dL-jXsnE7nrdEJbH2I!j5j6#H4&%0ixnUKZ)H@}U%}pav*g)_Jj(`2n)!c~CFb
z3eqvJVXY_w<SPzCEu4W1VrBb71jIwJSl5RDb+Qsx;d2h_8*;^39Snq5lXi8JST_>B
zF%3$f3b1!0@?7M(iI4?_Pyr{zS`!V()*xGh4>ytTP1M;<nQ#E=#k!faH{-|6*u9xN
zZ^rh`HE=<!yco!VN;oUlE!evyAMoiGbZ$X*s{@eVnhKQv)-pH@r=Ur!+rl9UvY-g?
z`?fm3em-&eq|3)<K62(&to(~&twp{z1(2_;gyVpGT?C-N4*5Fd>#(y9JGX}b`nMy$
zy#kIxqgVyOkOVnU2FMG}iM1a2dhDz(g2RAp12#5L2OCNNy$$5IF&46+9LTFsARaQH
z7!JZ2u{Jp%29R$;zR3v<V%-q{$&d&5b;k*466?-r$b?cLuOiYHVYes;4gfYc`$H<=
z<7V>Nd|s?A2~Y^9#M(;yR%~z02hwak4&+%J0ZD-U;sPiG(ihjkIkD~{ue+il4M=-e
z1rUE1@pln_H}Q9eLn34VI(P4cY9Noh$>Sb@5Wt^%(jiBz62jZ6#M+(;SwOn&q}xuq
z?WEh@DAtZZAkB_Uz_%Uf?;vgmHcJB_8w#ObEasK0`v~7hy8E%Ui?q9t?IP_i((WSd
zuA@Nw1OAW*8BhcjfZYeMyBoW^V}Q8b*x60oZYK~|Mmfr&AsO<Z6b{1)xG2_x!H^0&
z#o7}B=<KN%>!CWa%E{+9@sJDnu{RL-y|-4Zhq3u^0aOBhRQN$5knWLiNCU#mFIkUZ
z?@{u3G!sbkXc<%kcJ>88BIE!*>~q2eu_}{*yeiSHyeQUV36Kwmf%wPKfBcMCPox8R
zK7p(%1Sn?}WvD6zY*p1mlUPqSinTvOtl#>J^-Qo>&z=(NIetHfo#)Vd9@+Dh<sjh~
zVxdf|L#z*Hi}kV};LpqGIb)z$tXIhU)qJRd^J3MoeyvEX*Rk{ZL9u>M+|fj_-VmUi
zZ^Z-hw~vc;JVdPb@bkT+V%4PpcHc+#ex+C+kmn!s#5zI#C&}w1aUW)h_0b8j>PyA?
zI2F!{^~puCJ|%oA90-4g&Sz)D;ySPOIeDBW?ddwP&J+OhKatO$PKotJ0-P7?&(&g`
zC7-jT{Yw#$=C9cJTLe^!)j;^GMzQ`*S<eyv`mk8vP>#klvA)IDx5R%}D%L;Jp+T(k
ztj}K%>%S9${Jtm6_k@4I-i2hb{uvE9fQ=vd{bLE>&%gNnuNtu~7K-%~`Tv|D7GqxP
zQmR<4e6gCd#Fjj<nN+o{T(RvKu^q8uw?XbxEw*o^*o;4IzXM`3_O#n(h<$Cj*zH2Z
zZr>nwhXSz!&<{Y?F#?hx2ab!~$qx#}=9-`#SS5BBr`SQ*2s$HnSLDIaJw@yg!l5N%
zhxtPW6andbm5SXbTI>k&iLMa4f3nyE&WRm^y@A1E53Uh=2>NlP9a=1Q{6VpY?G$@B
zUw<E70N5Q74%uQSP_B{u9$5+XVvh=dbRgZR2C+x;J24UJ#2$maaeiVaoe(=Y8n8Ku
z_(@K&C#M2-r<9AG5)Ak_)d9Ic{4`|K3V}SPV|)5>u~U(y<^c9)5H~AU?Ab6UPwaI3
znNPk8$!{rkva-Zpeo*Wc#ATCrcB9xUvAyb?*f*fJn*44&A$D#GU@I5h+_Pe@34k0R
z&o$UwQv=9v!sbokKw6H`_RYxh4vT$DERgor6Jp;+nB%COkL~>9Vz2cB;@4(C5gY*Y
zIDXpe&|8-R)naqZv~N#^0;mFX3IzCFPzM*pUY`tQfIsUS#oj=g4M~7(!#S}x1_I%Y
z#c*8gLh7n88xBH~*qhP-dv_qe<FMFw`a?QYi(SOJ2%DRCioGRQ?5%!c7srczSB}_s
z<Hy|rkOwEkzK3-8kk38&Pyw~jAa+SK6hbMGPYLo8Y;FsLM8MXzGB^szw}(SI6hSrA
z1Agv^flMfc8nH{W;EdS!rU7>E<@bI3zAqmt#J)cSa^Wmo5PK)#o#efX^{#R_2>8A0
zyx0!}KrAEy{yeY~oIu*$en1?@CVO`g9Dq7#6uXRcW${2<Spnb&$0fV0N$dxsArVOP
zAo)Is4|^gY4@ke~jMxu30KJDu|4<Gb7rR^_6?TgK8$UQ8_TE@Xfh-`Oy~OR+@}qDH
z&Wrspx(|m#0;E9>6hS#0gyV1)E{a_d0MU>H8IT7hPzg>r0q4YiL?9SqAqBFa0CvIw
zI0~oWyx5QWK{zBp8stC`l*2(d4rk$_*c>zMedzA10qSBOb-^*yuJi}$sFHfCqz)>n
zx5|34AFG1HVsp&2AFlxHJWifZ2n0hcBtZtC^8`9iR6`Ar{)q-?61xifRoJhJ2kcj6
zLOv7&X{yMhst(ZSm}@^72r-Zh=st<=lci7v=stN)?EUz#A0PJP!~PV=f&$nH2jD22
z0{s20AA~~!q(Kf8K{=p%APHDMMV?QQ=TqeQ6nQ>Ho=@T5(+&uMcp(01EyIte>)?#o
z&m0uH8XMJT;iA~j20%0*dzSp33kQ6Ep78S-kOw7D38X!U?m_Z;fqY&dpBKpIg;dA}
z{5VAVLj_|0&JXzgy9B`Q?{c6B$^kpS`#-e31$Z3C(k{F^Jv?KFnKlk5j;$S(a&mGa
zn6Z_ZVo2ifT3SnrMG@F>n9*ToW@fO%%*@QpOq;)Y>Rn68Irn_`|DNZ@Y4y}VS66rS
zTh+BaJr7fQo6^rYapRJdsN5Ur-kYf0n|dkH`J1VXoA;tb^}qS|oVdlMbZJhIe<E&O
zMCo}-pXUU{)WvO77mBHi+b+zB+jpV#bxthIQ96+lom(`X5}jYPJEdbOQ8|n5rt~r;
zy7vy^bw_~`)!~i>l)nGZ>CS_4;?Bn@y-taE-%0hl%cVs8?;1^MQ%Vyk?LeuM(q5Dn
zP&$*+m6R4ydYsbhls>2QdrsW#Qd*VLXiA$>nm}m>N}ZJUqO^e0nUt=iw20E<lwPOw
zIi=ro;vSdMs+2}k+LY1+N;^>Mq_h{M1(eRDbS0%llpd$_I;GDk{hkx|x|CL>G@8<;
zlqOKxfl?=>y(lf9bS9-MDN%dfH-!@A4^X>5K-V60Dbe)@sXrc~c6^AQedsVsk5l?N
zCmyCU9;Wtw_<l-nQ~Et89%-V~Nr~F?5xVvWmG|fbN+0LMV|0#uM)5?BQVpf)lon9B
zlG5Wj@#LzM=$R*}oTupAQ*`dB_bCzm^s<yjQ=;;prapYerPN7@%6#TbN>}Fcxt#l@
z;?kRbb8<RG5SOIgddyr-+a|wMPRpseTyFXNNO@QG-_ALTY-UIK+>*2mg^!h-n%@z}
z^f9|UMLn~7R64!|$6C(Kzl&o%H&PjaW0T(U-5keGZZ+j-9FMS0SdOBcSvezf!5Yt!
zSD05VqVJ@{$N5|#Pg<ItS7?W$X*d>iein{ZIz9=<T8`ck#<8ATHUAZk>3vXzS}`lf
z$!(%c#qo$`)>W>=@yJ~J8twGXQxEy3^XXm14tj5~JvWdm<kqJ*PB)<3%hk|7pN?kH
z9R+%~y@RgzQ|hC45=*pCz-T(#OnacT<i^lZeXf)K73lr2YFYgmRi<ak^vqoP+e&xZ
zxh6W=l}gx}-cc;j)9rNJP5kAZ1v-}H7pRnO`rAwQ%%XBT=)M9y-$Q&$*)=<tYwYQr
z-`COBK2TV{WrKoOQ{xwA%`Y@`4D=85l}lZt3(egvV+!@1orS6LuKvQ*a(}sRZn<@g
z-BjMSwDn-2rM=YMR_-s9`pSil?n3Y2tj>;>LTgV~siT`1{I#ajvU<uoPNaHtQ_7*3
zX{GM|!o;3#I@3U>dr0|m4Lv>d_kU5s|KgFYsm1!J^*XY8$-WyyJs0G1TbKL#J9@ec
z-WZ>#;U!mv`I{(G5*B3m%>~-6KuRq8zd(Pv|Eto^?&+qs9iSG^WjZuKy|xLx1w5Ae
zi+g%5_2L+MwukaQ>dA6eUSHPdW2oFRm6>ZF80g((?ATW7nYn{w`g;cZTFSF~`r684
zy32Gq9ae*?j#PE^-*r>!vD7=MNwes0Cp|rn^jd1_UnTqB>YvnP`#+3|0_nBvjS_Jh
zUgv)wYc{>}`@jDux&M2a|L@1|e?o%cGIwM;BBhr|QOa~cj@dpM6b0&q+4T3{`)fFs
zNXe#TZP-N`-B16jdd+3GXV=QWrM8TV)J=&mvYgp;hI^j5aSyY$$?F4D3yCw`8Lsta
zrAghCcq8|e8lY<uePn9O?vyCSNLiI&fHYm|*6?vrqPygMU8Mh9dbI?3H`kq!tV|_K
z?UcPWYM7Rc%8*w++nVu}vdbL+I;cFBk1?=?#!(kNFQt}Os_iqIjymbQ9Hr~id9LFS
zhXTDhF56^)#sZHa$#JMnWV`iJ>-7--LE<ZGSglQKCV}kJ4r-%8Dnnka@~CS1zjKhK
z%XVm?nhjF9)i#+&NAhWj3DWM!mXZDaSBa|S4_PQiAlZY1SsTjotGy$SWxEXZ^^pDO
zCtmXUf09F<XF11Gefo%!y~Fm5%kCgra%PRH*6P1YU2QqmH`X(jP}(&{Y^ila63xrn
zql@_b&m3f{$|q-2JM>X0l9K%`HHSG$Ybhn^$>i>*`(}~dEmLdB_U3!4e54*rc_m6#
zdq_$yHBt5nYgj+wx*VO;GfuM2X3;&;vJdsaP)}9cRPy?FB#`z~mMgVP$}!Yh)v+?v
zV#6_D_;XS^={;~yNu2+yu5oKfd1U$j=l+y(%4fOnyRw{ViB{D%`ak!!yk~yar?ZI<
zOT_k}+EV}RS&5F)!{Yi&?y}A0Sgs<Pth*d<a(ptzaZM$<N*i14^C3MR@}J~5=XM^X
zQY1Abk$hI7Ya7Wwq}^?FpOmH@=j0Pr43*MxP2~ODvVU(MdF8*$G}PNH!H|YYNefh;
zf3HEccm8ut{>ty~?J^{BwIBMkF(Lb1a*~n^?`b(2s@@LcWFc$&ZfZY?FV*%g&|Q2+
z%FLR{BY}}wwoi35mFb9EYIqOK%XF<ZYw1z{!7h%Xa=EXotz3PgK$fHGX^hJJY95!2
z3KNK%)WfQsk-EjUiAP&Ep#hJF>bRRrd^(0nR^?aD?Vk0xlt}hlFa2XHCP%-tHnMdk
z(hRk2wa(Qu|85nyN2Kj4WFuI%pRA*-vDBWwj)5V4Vd?%8hRZ$~q^G4$4{zcB)T%@N
zifrGZKK$Q~S&6ZoS=-57D<!(~sFUp=^-6j}Joe-)N7hb0G29OGGcDvJl`^kbwg%fp
zsZ~ShS}pPa1!Dbu)DB6-GeD`oY!_!Q*0=GrS%U2O$+REMbUK<wM=2d`L-WC@*)_Sh
zO@aKmsdQy)nlCod*(N$OitdnC<n>Y6XxxU5r{~7geKWGMxQwZEpDcSO-7CwMGtEgE
zwI$s@iOQ0wCwKCYJQ6BRmO7b^W!V$y>;%dsPkEnwqLI$bAX*-eqjL@5H;JB-GRXTU
zQkssMPN(xjT>n}tSu*pJHJeD(R4RWw>ReA{H)rL^`b++4R_>(iDfygiIa$+sN>k|X
zRN~r9CCs3wBqh(zpnMA5H;ta+ddT*ZwVg!wPNFiVX8Aa}E^EL&!EMz@cTFMQ@{Vy-
zujyGWBqu4Iyi?X{I$f`)7Lm_Ou3Khjxn{CWWG~CQ43#41QIa>;L$?3cC{OBulz#&K
zlWi;8aazV9p|ca|9GA<b7N}NI5?OC<jTuBY(Vem#q=d2zc}@0;Y)`q*&hU0)U66fR
zPj^hrYA&CblE@Yr(uU!ZR7?A7@BAn2sA`)mOZJ;=sR<dEY1Fa_^_8p_pOMc?y^?y^
zND>Tb9P7Po@9MqW3bKDDWj(tU^)vSfmnY|`!=;dAZIkuHP=9a_$Qnw$kQ}RRHq`r)
zr>t|eK2n>dmR0*<s8!_nlR73jNiC3+<RHh0)G^sh@>+F#GLLFM&d8pvmMWk7tM*GR
zljEp*U-h~Fh8^5SRo=4fA=#z2%C_Vh%3kKy_@B#VluyX6NekHvyVg%7u*X}S|FNAP
z@^RSq4EH}}YgFyzkQJ$7^f<CCayD4bTCIBD&{^54a`q!_*3c|YmRYsQ|2|KaQgXyi
z-Z$L)t$H8qMe^K8+C;9u^oXRN&c2}Z`FL*2zJ>I}c~&jGf1a6EXDxCzDDClI=X?EB
zM``<IEtpr;<`0!6=UOsSB)tX6O|~%CMsnlU{BIt@-)D$&W-8|)eN@i8?06unRX5S4
z%v#FXq`YSjqN{Tjjt58?hWhG%>Vv8*|5N)*f4rYGi04!tSqn>lat!g3lF6F#{H)r(
z+yb++Ytm<})>5|PkoHL*dz0+h;eM#}m87T6I>nIyc~0_a%Xm`AGR=Z<GM*`8qKjjp
zh4uT(<-)9TXV1J1#uWZ9qMu`Id+1>bBbEwW^5U4Qz43qj&$bue`TsjQJFMCn=MD<c
z76$rCt>vy#-<(3v?4cVt#%tSC%6(lO{aLJ&?rtyll_?V3)>rBtD7TI-%<d!M=`jlT
zQao{VVW6i_>YiWdrRXRHM|)-sP`J0FyN$TCP)J$cInZ7%a9p$0($dq_OSj7#2HL4~
z3K5sP`>BCPWlb__11hYwQ0njRY3V2tKZ+l>40e^f2TB7n_By+xlOoLP%M!B(3e$RK
z56q(;8nr=IlfH6qUr*~`OF1j1wS$7!9kT`p%2^#Ghs6(!rWkcg=U}U>$-It%_MX83
zs!Uf07)cIUIGlp9J%z!35>$#ay3ke5q|Tz-{q3U*Lp(-Ho@0CZ3jJk@lGEKCR8@%o
zH`Y={Dwf)e7^3MiM)TTxy8gYc1!}0-gMHl{{q58u^k8dGp}%Kzp?`4JuH}{id4}7#
zlT=a))Y8-4+94aPe-qoDPNI}%^~^125^#(^tH5F<=<XSyZXm^w)snrERg5)&uNC^+
zOC;2+GFpwQK_Py5YDmtWZqkdsLRSxsm;WSoVPJl5d3K2y(Rh%R`b(n}x=Qn9`CUD&
z9kV;6qLn%aNcHG|3N5v^W|C)Zoc+2`>Z3Xjc9!}w(Ob*?9c}cx0r73?oZs6{M}3)w
zmRhKge))uKp-jjA&WSayl^d+oIjn%c6@nU8>oQa#Rk6Esexc(ps!pxYSMDx#agWJ^
z{sJ|o?3?NkDU;rnS%7&xeXae4QHx<>l;ka|EH4yB$)P(cYc}eg2^cf8$~2l}se{xH
zvhU{hbY$uwpDXV^K%=Hm>g}Z=R+`mGL!bxpQ^|jA`hoV+K%u?VPwijsUfcs&k;HCD
z!&?i3-L0tbP*n?A<qDaE|E*{HdphOFF7#5@$&M-&sQ22axPFXby3#VI)JD)sW3js@
zQ&)N8|Gi>WyEbD*phdr4l{;t4N{vqn>Eub%3)3d2)3>RgniQI+6{bv`ymfO^(o`5#
zKaJ>7qYK+KPai*d#`FT+F|~fu^qGapX`z17%)*w<lbS{sl5M9<O{PsNOrBb3o;YPf
zb3*5uCpAu((bPO?T%m!Un>2ZPVM6o7=IK=E^vT(yD5^Q3=hDK&WNPDhD!IO)c|!B_
znWGD7^Ylrw%#;ePFHEVQI=#7Z#)SH*g()+pPMJI{p)#7N*h$Tk(y7EHnV66eR8ZsO
zDKn=wj~hRIG(9w(PL3{2pIYCPOst=}<!D*M$t3dBLUzj-swI_CNVb*_Pa9u9VM3vy
zdHS^JQ<M6M@?P0G<0eg>DBEbpq^A1m&66h;8WIwvzF~qqNp+)EXq-^rJaKfPseWSp
zI4Mq*iM$Qs3^j**U|cdOnOZ+#bYa?*q_J5ZP&+nHO&Y1TbSJevwFI4|k{TyZnwD%e
zgHF(WRTk7C<C9Dd5}=;`Z_H|zi9d<NmE}yIJe3**RoSL_S~9v&Kec(9?2&ZpWU8+0
zPkKViID^`gZf%}~`pQ0%=j64&Y6smVpGGS-CG``iKvI%P|9&rNSF(FcxtGRTe|2y(
zJZ4bJ_({fz#w3FPY4o^m8n}EeJEZYQBP%m;jBtx_Ap6;skUoQ72_FQJWQ`bpTj!Pu
z1^Xr9)0pm&U^1_RjHxs&eLY=0uzUTbPGUw+ExxPJS}t|cV*o}P<bMT(szL1S>!5<?
z^>qvom=sEbWG4GM_JAoS4w+Pcmq2p)d;R;${k>$VI_8!;=Z_&~ebS!E`VunJ?~+{*
zJ;TP9flaFJ!a$)-wiMYrLX5t)F$HqU<S*<0yI)1eX7Ttr<kOC&#L=zY$=8$7*<L#L
z*ErvQ{|$BQypA~?V><{AcOTQ+-a8hUOzRJFv{EAb@6Ua*O&Ie`4gGb$q~ko@C1?$W
zMk^}}T2*1uF9A-@r9Ih4(r(jB=9Z#;tCz_wOFKv}pIaffBJHKRGVLwBD(z6bI_<Vv
z$gN3np0#po)9$hB(zc=N(=SgO(mIXN^c$$$Gg|Jt>}9`NhqM!GoU5fhoHwDpoj0X@
zmN%o_@HfxqlZ{!FBF$nM&9vw9mec|hX|5@w99z*GRYn?SP%J|3X+M)>**>=eeXVCF
z+WK)9^0u$cU64D7cA~w5_C@}fzFc!OZEJTHeZAtsyplVDwwjXP5BZjMn?8!Z^>kS7
zKH5C$8~W<Y<+&en-_y>{=jX1Xowy&Oy|ZVLuYN4eZXP4g|6%(2%~QF@<<8F8H~gN<
zJx$-|x`sURuW7gD7jw_k_mJ9Y7i9VEiCw7==g>@~lX~)8^4oW#K9s-P%Shi`>gi8u
zPPzxpANHjEp7+Y#nmdp7+1@9&UvB^0=eaL)x991b-gzyr=Z(CX`y*G$TX{S0<X!qM
zOfEknKQg~WKA&HbzUi_weaT|k{Brr_>6;a_7kz%^{3^MhbHC6|`K#qur@eCv`8D&S
z@@wVS&aabSH@_b37`;J$!~90MU+F7Iqw^cn_i4t`cO{B>`WA6MpbxA@wAXHJzAnEB
z?E?NDeRE<{`p(2=v=8s*w8wLU+}oPIVUyCAB*y2PbJyms%Wsk2lD>O0F+YjENi&7^
z#-5s=misODd+z<*2l?srC7P}2OEuf(XVT98+tYW1cFev2whMiUW>&t1zL-&_oqXH!
z?fDMc(|6bWoP1}#EB9gUBico~C*PajE#F693meD}=I7?;(a!Yq^Lym?%<q-oo4#|i
zZ+<`es>1&H1M&yb_bLyjeXtLuFPI&kKZ3p}wt&7Yc69z2`Zn}&`QzyuVJGHK%AcG+
zg}yd+TK@F>8T3W6v+`%>&&i*gKQDiN{sQ{q*+uz_^Oxi=&0j{}b-aSU$#GTw>ijkN
zYiXbJ>uC?@8}m2OSJH0D-<rQIe|vsmei3~W>CXIJ`MdM?<nPVjm%l&%K>oq}L$o{p
zBl$=3kJ0zep2$B*yJ$b1e<uGd?G^rf{ssD0(@XT#j#u)p(vHTj(+=Wq(pRG1&cBm?
zH~(J#{rm^C|Mo}uk7@7hPxGJAx6QuDf0=zj?VJ3!`S0@I=YPomnExsNbN(0llG1Pa
z-}8UuEBQZ_9DRLOQRFA!HAPnp#Z)ZCRvg-)dW14kSwdM-SxQ-2Sw>k_Sx#AAS%LQD
zUrAY6Sw&e@Sxs48Swkr(Ybv9ZwUo7$b(D3L^=K#W4U`R)jg-;K#>yCFtWu*C6;JV%
zKnaydiIrNVPT55Hhq9^iPh~UZU&`i6z0#mGDoskFq{=vDywa>}p=_y4P$nvql*!5z
zWh-T>GEJGT%uu#gwo$fKW-8k$+bcULJ1RRVJ1e^=C1sY<qO>YyWwz3$v@0FTuF4#x
zQ|VH=l^&&6*-hzF`jr7?P?@XDQ+8M8D|;w=($@v{R`yZ$RrXW%R}N4PR1Q)ORt`}P
zRSr`QSB_AQR2C>lDMu^ED90+tDaYqt&b_0Ypq!|jq@1jrqMWLnrkt*vp`59lrJPM)
z2zZ^okNI})mE2p(Im)@pdCK|91<HlWMasp>CCa7BWy<Bs70Q*$Rm#=MHOjThb;|Y1
z4a$wmP0G#6Ey}IRZOZM+LS>P1hjOQKmvXmqk8-bapK`zQfbyX7kn*tdi1MiNnDV&t
zgz}{Fl=8IljPk7VobtT#g7TvBlJc_hit?)Rn)15xhVrKJmh!gpj`FVZp7Or(f%2j9
zk@B(fiSnuPnew^vh4Q8HmGZUnjq<JXo$|f%gYu*Dlk&6ji}I`ToASHzhf-1g6giO>
ziV#8-n$U$IOkoLIIKmYp#7MD(pbry^rNuI0+1xo|IkCK0L98fN5-W>U#HwO7vAS48
z6vUchlvqowE!Gk1iuJ_$Vgs>Z?hLV!7%esyW5ifdBZ|Tkz6eApA`y#PQ71ML{}7vs
ze~QiMOXr)5deI;nMUzNGD#nTNqFHPqwiFY@L@`NB7E{DlVyc)Xri&S3Yq5>kR?HOJ
ziS5M>Vn?x)*jel%N@A915v`&uW{Wn_E;_`nVvgt(U7}m`h+eUq=%X*x4~RiASIiT;
zi}_*?v8UKe>@D^Y`-=U<{^9^}pg2ezEDjNeio?X=;s|l1SRjrPM~h>`vEn#!yf{Ie
zC{7Y5i&Mm@;xuu(I76H%&Jt&fbHusgJaN9bKwKy;5*Le0#HHdgak;ocTq&*+SBq=J
zwc<K)y|_W#C~guri(AC4;x=)+SSS{WJH(yhE^)WGN8Bs!6ZeY;#Dn4?@vwMAJSrX&
zkBcY7lj14yw0K55E1nb2ix<R;;wAC2ctyM_UK6j2H^iIbE%CN^N4zWE6Yq-;#E0S|
z@v-<sd@4Q@pNlWVm*Ok&wfIJSE4~xoiyy>~;wSO5_(l9GeiOfoKSV|RspizYs;EL$
zRZZ1ZLp4=PwN*!T)e-7QbqRGzbt!debs2S8bvbo;bp>@rbtQFWbrp40bv1Q$bq%$k
zuBnbv*HYJ3*HPD1*HhP5H&8cJH&REd8>?f~v1*N4R6W&K12t45HCAiYI&~BEAL^#+
zKh@3Df2o_R^=gCKs5YsInyTZ}@oKZWg}S9WL7k{hQYWiZ)UDL1>NIt_Iz!!B-A3J3
zovCi8Zm;g3?x^mh?yT;jmeg5li`uG|)!AyB+OBq}yQ*{4PPI$zR(sT5bvLz7?N<lX
zL3OS=Pu*ReukNAlsqUrjt?r}ltL~@nuO6Tts2-#qtRA8ssvf2ut{$NtsV-2DQjb=T
zQIA!RQ;%0qP)}4(QcqS-QBPG*Q%_gVP|sA)QqNY;QO{M+Q_oi~P%l(3QZH67Q7=_5
zQ!iJqP_I<4Qm<C8QLk06Q?FNVP;XRkQg2poQEydmQ*T!ns*BV+)H~I?)VtMt)O*$Y
z)ce&3)Cbjv)Q8na)JN6F)W_8))F;)a)Th;F)MwS_)aTU~)ECv4)R)y))K}Hl)YsKF
z)Hl_))VI}l)OXeQ)c4g7)DP8<)Q{Cq)KAsV)X&u~)GyVq)UVZV)Nj@A)bG_F)F0KK
z)SuN~)L+%#)Zf)V)QbA2mecZ@q6tmaG)>nG&D1Q-)*Q{%Mrb3oCA1~ArL?8BWwd3r
z<+SCs6|@z#m9&+$RkT&L)wI>MHMD}ZrZ!4jOIur8M_X50Pg`HxK-*B;NE@wftc}se
zYBgF>^E6)zv`~w*SgY0Qv`w^sXq#&P)Hc)prERX&YYkeX)}$p`s*TgeYt7mg+Lqb`
zZK5_wo2*UIw$i3*)3oW@3~g&|8*N){rna57y|#n4qqdW_v$l&?(q?HbTB}ypW@~L)
zyVjxYs?E_lwJxn&>(P3(-LyWfUmMT{wYl0nZFg<HwuiQ-wwJcIwvV>2wx71Yc7S%E
zc93?kc8GSUc9?d!c7%4Mwm>^dJ6bzNJ61bRJ6=0MJ5f7HJ6StLJ5@VPJ6$_NJ5xJL
zJ6k(PJ6AhTJ72p%yHLAGyI8wKyHvYOyIi|MyHdMKyIQ+OyH>kSyI#9NyHUGIyIH$M
zyH&eQyIotTEz<7L?$qwm?$++n?$z$o?$;jB9@HMv9@ZYw9@QSx9@n1Gp46Vwp4Ohx
zp4Fbyp4VQ`UesRFUe;dGUe#XHUf15x-qhaG-qzmH-qqgI-q$|RKGZ(aKGr_bKGi<c
zKG(j`zSO?bzSh3czSX|dzSn-xe$;-_e%5}`e${@{e%JocD%zj)5t_WN=t5U@P1osj
z-KK8ow(jVzK0+U<FQG4~FQqT7FQYH3FQ+fBub{7}ucWW6ucEK2ucoiAub~(8HT6;Y
zTKd}hI{Lc$diwhM2Kt8jM*3)dV||Q1R<F^Ex~Kbkpoe;-$9k<^r*ESFL*G>Yr@oo~
zFMV^pUT@GF^(H;hQ+=F1UT@a7(6`hl=o9rx`ec2IzLh>zpQcaOXXsn&+vwZsGxhEC
z?e!h>9rc~`o%LPxl0Hjs(OdPhK3i|o+w~58SACA&sdwq!dXL_#@22<Z{rZ4DsL$2s
z>AUOm^*!`G^}Y1H^?mex_5Jky^#k++^@H?-^+WVS^~3bT^&|8n^#%G-`qBC^`my?P
z`tkY+`ic5U`pNn!`l<S9`sw-^`kDG!`q}z9`nmdf`uX|=`i1&M`o;Ps`lb41`sMl+
z`jz@s`qlb1`nCFX`t|w^`i=Tc`px<+`mOqH`tABceUW~Ley4tyez$&)ey@I?e!u>J
z{-FMl{;>Xt{;2+#{<!{x{-pkt{<Qv#{;d9-{=EKz{-XYp{<8jx{;K|({<{8#{-*wx
z{<i*({;vL>{=WW!{-OSn{;~dv{;B?%{<;2z{-yqv{<Z#%{;mF<{=NQ#{-ger{<Hpz
z{;U3*{=5E%UeW(Faz@@z3}L8-Mqg_;4AZa-+i(om7-5VwmN1qymNJ$$mNAw!mNS+&
zRxnmHRx(yLRxwsJRx?&N)-Vdjn#L$&En{tC9b;W%J!5@i17kyDBV)9&u`$LNYt$G;
z!!vv%FhV0TVxyM65psi3XKZ5pgT8}yOYVMS)7*{pUE&9ff6^C7?#&%)Y?iyi_*d>h
zV{@b4XfPU$CL=LYS_^-dG0qroG#gtOTN)FLiN+*jvN6Tj%9v_QGo~9ejIE7rjBSmX
z#&*W`#tz1g#!kl0#x6$5m}RsWtw!0HZL}HfMu)MhF~{gMx{Pk4$LKY7Gy05vW55_R
z<{I;i-HrLi9>$)=UdG<JpNxHseU1H${fz^R1C4`>gN;LsLyg0X!;K@1BaH>dQO426
zF~+gRamMk+3C4-WNyf>>DaNVBX~yZs8OE8p1;$y%*~U4>xyE_M`Njptg~mn3#l|JZ
zrN(8(<;E4pmBv-Z)y6f(wZ?VE^~MdxjmAyJ&BiUpt;TJ}?Z!f5k#UD{r*W5Yw{eeg
zuW_Gozwv<apz)CLu<?lTsPUNbxbcMXr16yTwDFAbtnr-jyzzqZqVbaPvhj-Xs_~lf
zy77kbrty~Xw(*YfuJNAnzVU(aq4AONvGIxVsqvZdx$%YZrSX;VwegMdt?`}lz43$b
zqw$mRv+;}ZtMQxhyYYunG5(|vhv!Yj6sBrwrfwRhX<DXjI;LxmFh`n8m`j>VnM<3?
zn9G{Wnai6im@AqqnJb&Cn5&wrnX8*?m<4mq+^Oa$b1if2+@<C^=DOy3=KAIa=7#1*
z^ljMFa$lLF&5g}5=2){Pcad2%J=4z}Zw6*)MrLf*nsvD|%}vaIn46maG&eK<Wo~ZP
zn+;~8*<>bWYK}9<o6Y7H=9cD!+$H8jbCNmPoMLWePBo{Q)6E&?*5)?mw&qN8J9B$;
z2XjYrCv#_W7qeu}GFx)Tn5|~noSi!{caqs=wwoR1uI3!G)9f<4%^tJY+|BGW`^^D!
z(41?|Gj})Vn|qjhntPdhoBNpin){jin+KQ&ng^K&n}?W(nunQ(n@5;OnhVUM%%ja?
z%wx^t%;U`y%oEL%%#+Pi%u~(N%+t*?%rnii%(KmN%yZ52%=66)%nQwn%!|!S%uCJ7
z%*)Ly%qz{S%&X07%xlf-%<Ih?%p1*{%$v<y%v;Ud%-hX{<|6YB^G@?F^KSDV^Ir2l
z^M3OI^Fi|=^I`K5^HK9L^KtVD^GWk5^J()L^I7vb^Lg_H^F{L|^JViD^HuXT^L6tL
z^G)+D^KJ7T^Ih{j^L_IJ^F#9^^JDW9^HcLP^K<hH^Gow9^K0`P^IP*f^Lz6L^GEY1
z^JnuH^H=jX^LO(Pvts^f<*dA=Si({*&C)HyGA+xpEyr@L5!Og+32RAfDQjtK8EaW<
zIcs@q1#3lXC2M7C6>C*%HEVTi4Xa?SX^pbhvevfNvDUTLv(~pZur{<dvPN4QTVt%T
zR*hA(Jj=HNE3_gjwrZ_9YZL1q)~41!t<9`|S({t+R)f`OHCc(3TH~zoR<pH*wWT$|
znrKb3CR<ait*oimG;6vw!`j-~#@g1JX>Dh1Z|z|1XzgU}Z0%x|tXWoz)oPWk*;bp?
zZgp6@T63&UtIO)PdaPb+H>=O;w+5_1YpylV+TEIO?P2X{?Pcw4?PKk0?Pu+89bg@3
z9b_GB9bz479cCSF9bp}5EwGNVj<$}mj<t@nj<-&*PP9(4PPR_5PPI<6PPfjm&a}?5
z&bH36&b7|7&bKbGF0?MPF19YQF10SRF1N0*uC%VQuC}hRuC=bSuD5QmZnSQ)Znkc*
zZnbW+ZnqX%i>y1WJFUB{yRCbyd#(Gd`>hA82d#&!hpk7fN3F-K$E_!<C#|Qfr>$qK
zXRYU~=dBm47p<49m#tT<SFP8q*R40KH?6m<x2<=qcdhrV_pJ}C53P@^kF8IvPp!|a
z&#f=4FRibvudQ#aZ*#X<-&x;VKUhCnKUqIpzgWLozgfRqe^?dkPg?Gqw-sC1s;$|&
zZP=!5*|zQ2u06sYX)j?fX)k3jZ7*XlYcFRnZ?9mlXs=|iY_DRkYOiLmZm(e%>^1FC
z_FDGZ_B!^u_ImdE_6GKb_D1$-dt-ZyJ=U(Vi?(O`c3_8gWXE=`U1x7%|HIzY{-?c}
z{V#iSyWVcF8|@}Lu~U1TJ>G7%x3IUgC)gA1N%mxWioKOR)t+Wgw`bT}+uPXN+B5C#
z?CtFx>>cf$?49jh?2<jpZn0bKvOU{wv)k<sdslmo-D!8(-FA=NYwu?F+5Pr_J!sFh
z=h?g4^X)zCJ?*{hz3qMMeeM11{p|zn1MP$CgY84?L+!)t!|fyNBkcwDQTEaHG4`?c
zarW`{3HFKhN%qP1DfX%MY4+*%8TOg>S@zlXIrh2sdG`7C1@?vZMfSz^CHAHEW%lLv
z750_(Rrb~PHTJdkb@ui44fc)pP4><9E%vSUZT9W<LVJ;Yhkd7gmwmT=kA1IwpMAgm
zfc>ETko~azi2bPjnEkl@g#D!bl>M~*jQy<roc+B0g8icXlKry%iv6nnn*F-{hW)1f
zmi@N<j{UCvp8dZ4f&HQVk^Qm#iT$blnf<x_h5e=dmHoB-js30to&CN2gZ-oZll`;(
zi~XzpoBg}}hh4G%baGDKQ5@l@j^^l&;h2u)*pB14&Io6uvxKvxvy`*6vy8K>vz)WM
zvx2jtvy!v2vx>8-vzoKIvxZY})^tWWYdLE>>p1H=>pAN?8#o&}8#$w$jh!*hSf|D*
zI-cV@ffG8B6Fap|owJGa4`);7pU!5^znsmTdZ)o@bef#RNu6=dc&FLf!r9W9;7oKT
zIg_0!&Q{J;XPPtJnc-~hY~yU}%yhPMws&@Lc64@fc6N4gO3o~&#c6fQ&TOa6X?HrD
zU7a~jr_<$hJ3UUXvzycB^g9F2pflH*=j`sxclL1hboO%gcJ^`hb@p@icMfn4bPjS3
zb`Eh4bq;e5caCt5bQU;AIY&FkILA82ImbIEI43$MIVU@(IHx+NIj1{kIA=O%IcGcP
zIOjU&Ip;eUI2Sq>(c6aiI2SvYIF~w?IhQ+EI9EDXIafQ^IM+JYIoCTkI5#>sIX64E
zIJY{tIk!6tokh+a&YjL(&fU&E&b`ik&i&2<&V$ZF&cn_l&ZEv_&g0G#&Xdkl&eP5_
z&a=*Q&hyR-&Wp}V&dbg#&a2LA&g;$_&YR9#&fCsA&b!Wg&il>>&WFxN&d1It&Zo|2
z&gae-&X>+t&ezU2&bQ8Y&iBp_&X3Md&d<&-&acjI&hO42PR04t&AEB{bg6JvS95jO
za81{8ZP#&KcZ56AUBX?`UCLeBUB+G3UCv$JUBO+^UCCY9UBzA1UCmwHUBfN7Yr3P{
zwcNGcb=-B`_1yK{4cragjoi`h#_kw*tXtz2UC;I1zzyBVjon(e&fUcQhr6l!Pj@r-
zU+(5^z1!e6x=n84rtUa*yxZ(<;cn?pa3{Kx+{x|~cPn?QJI$T$&TzMOw{f?1XS&<D
z+q*lsJGwi$JG;BMC3lwF;<mbFcedN+w!0nfuI?PS)9rG*-5$5s-OcTD``rO|(4Fhf
zb9Z;=yL-5Mx_h~MyZgBNy8F5Ny9c-jx(B%jyN9@kx`(-kyGOW3x(nQ++@sxN++*G2
z+~eI7+!NiC+>_l?+*94t+|%7N+%w&?+_T+t+;iRY-1FTF+zZ`{+>6~y+)Lfd+{@i7
z+$-Iy+^gMd+-u$I-0R&N+#B7S+?(B7+*{q-+}quS?jrXN_fGdN_ipzd_g?ot_kQ;Q
z_d)j|_hI)D_fhvT_i^_L_eu9D_i6VT_gVKj_j&gP_eJ+5_ht7L_f_{b_jUIT_f7XL
z_igtb_g(ir_kH&R_e1w1_ha`H_fz*X_jC6P_e=LHtAF-DJFP${cN_IxrIx;)ZllDx
zUO%g^Jh!ZuvdpOOX`>&u=NKi<oyL}qK3eKByR*Ez(=v2yH`0$^r50KxGhnwYKGd69
zN>sGo%2^ZfDGeA27}C-n$yiUAVL8j}WbxB>dGVo<pc-Y)^@K|-XPGl@s3K0=(6K#k
zaRGMQ;zM^Ftw-o8ab?}MVT3b&=vk+I=vW;;tJJ5q(;vNgprf<3tkbF$%8X`6(g8`D
zS&|NJx@Oe5gL9>M3#DUMXN#e7on42H-7SYz#GUgOqK(!vb$8OziH;V1LaBuo3hA9$
z=1v%XU*|AFpTG^&nPut(l3wkkKl&tozMG$)H0%+#dl;cl;^(`$fxAn+J+w%vhZII6
z-EE@W-DXUN@bu<v){T={_?|2qF}Z!PyRFnW*wsnD$ByV3PU%y*4t-pQsl(X1eZvTS
zD%YWpvuXTPf0jAZhMLalA3AoY4=cbO7)I#RxtM`0Q>V)=9gtl*gS&K)yL1Mm8iZ6c
zSgOG+(`NM1&(YeT{5xXCaG6F74yTM6==wp<oo$9{=*$~-JagFb{GnrgJC=2iEVH*;
zth@Feix0KV9{Oe680_w-Dc05?FCzDl`^W?2A@T@$jJy_k9rAkQ4aggjHz7}ur<~V;
ze;xSOfo~o7)`4#w_|}1M9r)IPZyos7fo~o7)`4#w_|~P`WcrPt;(+om*P$LV*MoOG
zc-Mn>J$ToHcRhI5gLgf6*MoOGc-Mn>eWK0Ccn%KnY=FEC;N1Y;4dC4X-VNa00NxGY
z-2mPV;N1Y;4dC4X-VKnu0qxz0_HG3KM(}S0|3*C5i02ydToaya!gEb{t_jaIq25iX
zcN6N}gnBoj-c6`?6YAZBdN-loP2k@I{!QSYfPVu13HT?zK8{CcTb6N;Cg7HUTLNwg
zxFz70fLj7?3Am-;mO`o&Ql*e8Mfqu+QJ-WZ%_x-_T_*Q;mS{1Hgj%O(=s2qvZ90IQ
zrSNK43a^G+(W_y8UJdi}YM7r_!>#DmFki2R<??D+F0Y2=@@iNvuZHFFYFI9>hUM~#
z;9ms)BKQ}<zX<+C@GpXYF?Od714Orf7{L-1QIjHSQbbLPs7VnuDWWDGYT}_L9yoj8
z?18ff$vsH!L2?iLJn-|t&jUXX{5<gU!OsUjACmi!+y{Rj{Qbxzyri|b{kyV&J}Tg&
z0zN9>qXIrE;G+UQD&V660V)un0s$BYU>tyPfN}zq6XLlL&xNRXi04B*AL98C4Hu%}
zLex7%y+hPHM7=}s3#<H4?-2Elz&`^22>c`PkH9|y{|Nje@Q=Vh0{;m7Bk+&FKLY;<
z{3Gy>!9NE782n@KkHJ3%{}}vZ@Q=Yi2LBlRWAKl`KL-C8{A2Kkf%Iy@zZU#!!M_&#
zYr(%3{A<C#7W`|$zZU#!!M_&#Yr(%3{A<A<2GWCp^y<JLhSGzf^k67G7)lR@(u1M&
zU?@EpN)Lw8gQ4_bC_NZTuMYg{(f;+2AI8#yvGiapJs3+5#?pha^k6JK7)uYv(u1+|
zU@SctORpaC*Molp_`_g&Fqj?;rU!%R!C-nYm>vwK2ZQOsV0ti=9t@=iL+Qa#dN7n8
z45bG{={2Gs8_|!A=r<Tl4+hhN!SrA-Js3<62GfJV^k5)87)TEW&x4`!VCXy;Ixm5~
zCD6A7`j$Z766hODp9j<D!L)g)Z_yhLbLEQaSypDA<WYugevM~kF6^)~%*BTx@?nU4
z7$U!>c0@aES(B~0ANCaMwhwdU!yNfAM?TDv4|C+h9QiOuKFpC1bL7Ju`7lR5%#mMY
zS^XmSiC^SC@nM8~7$F}<$cGW~VT61bAs<G_hY|8U&n3{$-g_Am3YN)-W%6N}d{`zQ
zmdS@@@?n{LSSBBq$%kd~VVQhbCLfl`hh_3%nS59#AC}37W%7OQaNkEGz%cnROg;>g
z55wfcF!?Y{J`9r&!{oyd`7jhdfZhkN`T$lR!0E?{Hb9#f^^a)nptl$L=?xS~+4Y^h
zw8&l_S|wV>Tkb4(l-#7Zzk?<l*=aMOH&3$b%{1T7j@-#z9dZK5#EfA#+mpM>ZG6*G
z9d!F&cxf3gwV^yv(#Dl&Le5%DNC<xFc63P)KW%zD9jTI`wk5qOP@+k2*R0l(GI3Cu
zG^lLbK~vGJ2FjEUF}1x%o7U0RRT9%ng9d6NrnGm6MoLrqJ6u^#wI)m8hAM5B7B_%f
z9wv!N6=1QY9NE#bgM7XEXm(P|o>ynl?OK}@N^3254wMX(rS3r&guF<Lib*6{m^LR9
zsWTIa+n}LQ=^j*e?=X5;F45QCqtlxsU8SOyWnzG21Aoy=a<x#R>S(kIxvk{NVyo3!
z;&0V-Q6~2mE@p(CJ)9kKHJWPlteQo028+tZ!w2~JO@T_hi+c84^&0dUGX)<r1s^j7
zA2S6XGX)<r1s}laW2WE(Kz#tH4`1F-!6#({>Zc5-K74#1KE4kh-%n8=`1(Hi`f|qX
zrvSN>4Y;4OA@EZ+;C{*m%um^X1@QTU8s;Cs=MUiX2k`j=Ky3i14FI(PeEtAFe*m99
z0LTUa*#ICL0AvGzYyglA0I~r<HUP*50NDT_8vtYjfNTJe4FIwMKsEr#1_0RrAR7Q=
z1AuG*kPQH`fyeD1c-;O0@HGIw2Ef+<_!<CT1K?`_d<}rF0q`{dz6QY80QedJUjyK4
z0DKLAuL1Bi0KNvm*8un$0AB;(YXE!=fUg1YH2}T_z}Eoy8o==n;P?jt<Ol8sm;eNr
z00aT!dl0bx1pynmAYlCq0@lAEVEqd)VF)l`2m;o>Ab|d10uf*W5nuulU;+_f0uf*W
z5nuulU;+`qE(DlB1eibsm_P)WKm?dT1R?li0uf-s5MaU(z=03ozz1+}130(=9NYj7
zZU6^2fP)*r!42Tx25@i#IJf~E+yD-40Eabz!y3S04dAc_a7Y6<qyZe#01jyYhctjg
z8o(h9;E)DzNCP;e0U|O19L)fZWB^ApK*S|L#3g8CS1V{lf5XuX8qvRSGy^!60UXN!
zj%5JHG61#)h{Obl!~}3O12~!i@HGIw2Ef+<_!<CT1K?`_d<}rF0q`{dz6Nkm130Jw
z9Mk{~Y5)f{fP)&qK@H%b28hiBh|L6u%>;<e1aM#j#AX8Ec>p{Qfad}5JOG{t!1Dlj
z9sth+;CTQ%4}p&%@G%6wg}}EE_!a`+Lf}XU90`FVA#fxFj)cIG5I7P7M?&C82pkE4
zBO!1k1dfEjkq|f%0!KpNNC+GWfg>SsBm|Cxz>yF*5&}m;;7AA@34tRaa3lndgusyy
zI1&O!Lf}XU90`FVA#fxFj)cIG5V#QnH$vb>2;2yP8zFEb1a5@zLqp(42>b{Ua0n4_
z2oZ1y5pW0*a0n4_2oZ1y5pW0*a0n4_2oZ1y5pW0*a0n4_2!U52@G68~9KtUS5pW0*
za0n4_2oZ1y;Wvi}ID`l|ga|l<2snfYID`l|ga|l<2snfYID`l|ga|l<2snfYID`l^
zga|Z5@Fybp6A}D~2!2Ea{~?0?kD&Jv>~{pa9l>r#u-g&rb_BZ}!EQ&e+Y#(`1iKx<
zZbz`&5$tvZyB)!9N3h!w>~@6l7Gb<a7;h2ATZHizVZ22cZxO~@gz*+(yhRvC5ynx3
zaTH-3MHojB#!-ZE6k!}i7)KGtQG{_6VH`ymM-j$RgmDyM97PyM5ynx3aTH-3MHojB
z#!-ZE6Cn^6VO&HQ7ZJuqgmDpJTtpZb5ynM?aS>r$L>Lzl#zlm25n)_J(DMj-96^sG
z=y3$Sji9#?^frQ?M$pp;`WZn#BiQ)}b~}PSju0S<U}qx)WFpwV2)G{s_aoqb1l*5+
z`w?(I0`5n^{Rp@p0rwM(uLR>OL46a{GeO`k!8l3~piAJ7B=AQP_#+AYkpzB70zV{y
zACe%@mLSlUAkdZ|(3T*;mcU<0;IAa`QxXK!68I|#{FMZLN&-J6LHi}}Qxf<o3H+1<
zeoBJCS%Sb>g1}jVz*&O8S%Sb>0)Hk!;4Fckk{}?KG_qfsz;8*=ZwUv;iZ$%FP@c_$
zD9`+0%CmU@<(VHuc^25BJoAGo&-^0FGe4N}%nznK<41YsCsCfw!zj<@VU%ZnDCL<S
zT&!Wgg>vv`zlCV<XTODL@Mph;Xz*vhg=p|+zlCV<XTODL@Mph;Xz*wKE!MF9QV#i9
ze~E_ttiMD<e%4>2AwTOc(U70#p+vL%O+3FWHu1cXa;|R^&-02+Jinuy<!WNThG=fD
zCdU0@6XP@GEKd{TbFqnWnR0H&CdOr=xgDDrmx<<fY+_s{8vGcSiAKE`mx<<fY+^r%
zXw--OpJEf^Hs#>UxJ@+pGHw$MzKq*MgD>MY(csItO*Hs2ZW9f88Mle%{%c~~E;cc4
zQ_lU@#JEi~_g@p^HqqRFO+1exn)|Pb{UM^c|C-nzDmF2mQx16;&xwXS>|Yd{*uS70
z^=3by*u*$PIrM;WhG?`S<4m!M1NxMs9T{(k24BWwqQRE~`b480IiOE8+L7^yXw--2
zPeh{~8JCDgJ2Ea6n;4fUM>{eu5sh|aTp}9n$hbr_`0_l9Xz*oRA{u<zeh|%k6OO|a
z6OO}B&U_P&!w}7U6OO|W&3qH~n~3KAOE8`i_MhlH^H121BAWRp9ETwq{CS>HOn9C_
zIrwuNhG>+}aTcOkKN9xGh~|DxFkTak*97A=;W$e%VSkNsl+XSe(U6b*HKHLO`)fpl
zKl^J$gFpLgM1w!@AOQ{}z<~rfkN^h~;6MT#NPq(ga3BE=B*1|LIFJAb65v3>^Pyq_
zJV<~C3Gg5R9wfkn1bC1D4-()(0z6272MO>X0Ujj4g9Lbx01p!2L4xs}V0<SS-wDQd
zg7KYTd?y&+3C4HA^POVC^Bu~0TqZo<DJJaSQO@Hs0Ujj4gM|Gzy3YEau>VFh^pE{F
zqM?60uOS-x$Mc$E!t)x+p&vZ2AsYI@^BSU|AHbaixRbCyNY|kcJdYt7^2DjWP4-KZ
zK993)vR|9@d0A#{Qw=X$^QuQOu3AjkPo$i22L2b(keB^1q9HH;a7r}f<sVLohP)hC
zDkki2QVw}Ju0%BCWj~H+$jg2l(HIZx&k+s2z|jOa3cszG0QcaJ72$tTj{XFW!M~#O
zC?9wRzlzR7o<`J%<3dIFSCpe3>|YU$`{5rY@Q)JsM+y9+1pZM1|0sb!l)xWK;14D6
zhZ6Wh3H+f1{!aq`CxQQy!2e0$?<DYd68JkwTGVH<BFxV+?rnHG3A~*I-c17UCIwoj
zK<gA}odT^>pmhqgPJz}b&^iTLr$FlzXq^JBQ=oMUv`&H6DbP9vTBktk6lk3Sty6eY
zDbJdVDbPCwdZ$3|6zH7-y;Gof3bamv)+x|B1zM*->lA360<BY^bqcgjfz~O|It5y%
zK<gA}ox*!dd3Ie)f!-<5I|X{DK<^ajodUg6pmz%NPJ!Mj&^rZsr$Fx%=$!(+Q=oSW
z^iF}^DbPCwdZ$3|6zH7-y;God3bamv)+x|B1zM*->lEHv3U4iix0b?NOM&Jo&^!g2
zr$F-*D4qhnQ=oPVv`&H6DbP9vTBktk6y943?=9uocroSKIORP0Q=oYYG*5x%DbPFx
znx{bX6lk6T%~POx3N%lF<|)uT1)8To^Au>F0?kvPdCIf<VhXP^1-hp|_mpS%#gu2w
zlrx&9JliLl(KLlOngY#Jpn1x(X}XWmJO!GkK=Tx6o&wENpm_>3Pl4ts&^!g2r$F-*
zXr2PiQ=oYYG*5x%DbPIS*?BPqs;BUpQ+UlOyyg^Wp91Yuc+Dxi<`iCY3a>eZ*POy@
zPT@7D@S0P2%_+R*6kc-*>yg51PT@7D@S0P2%_*!&3a>eZ*POy@PGMzIc*`lQObRQL
z!fQ_9HK*{JQ&^o8UULesIptq3iYfnkK{@)Jf4v|Y{SIrD!dj&q9iZ#zZ;lQS&DJZ0
z^-5vAQeHko*V%ffh!&)X7Nm$4q=*)zhz_KP4y3StDXd=#>zBg%rLcM_q5>(R0x7Iu
z3M-hx3Z}4vDXd@$E0`iGkRmFO!YZb)iYcsO3agkRDv%;7kitr)u#zdF04bsXDePj3
z*?)@Je+v7UR_!BZ|0!nwDQ5pE{|a49`B!LKaGEWjqCE3LD9`$j@@%$8dDefFXR|%Z
zGp~d4%nPGD!zs$Mexy8`6?iplA1N=|vpd=bX&Xyg^(sv}okCH?XhgP~A}toB%d<L1
z>^4a2LgX7FeYC$D?#;TJ*1@7WY@TR6Y*Fv(=$5Z5^wWx^ZrsgAiLQbJ8zrJ+tGs&)
zt%D#gTrQg(x{^7iw5}FU@Faj}h{tAyXo$z=gx24pUJSFe{ua&0uu3$_V^}2`<uR-h
zjq(^)iO$rX^2}+bJagJ8NBua6O6z;kT@15Cqq`VpiAHxZ%o2_6Vwfcw-Ni6VG`fpn
zmT2&2m?awg8D42!G2~=;B^v$0@Jck~W_TqUax=UV4Y?U!iH6(^ue4sdW<*O5tqAI(
zH-iRBee=1u>OHlyqpt)4Eb1e@m%hL@P(2OF7(l6{dbO2aV^EX9z8*Y?Hf89fJJ5#=
zowP<8vN3cL4cQnvi3VeaOrlwqB8E&6LxduV89$2bA!j~C=zWm`Y+jKAY?PxMb_t2b
z^X%ezMRx5d=e{a>4OY2-fL;uu-GP}yP;1KeYVYW4wFc(VHi&f4&zIPL@rvxfP|h7v
z<k=|EU>??6R76>R*{<CkXs6eL__*JhO?wvN*zKpm*$o2ar&g)2uV-FodG>&j9S!!{
zS)T2)%NJXF=5_PYEUFwI4feKXuUB|Q=t>c~QiQG)p({n`N)ftJgsv3X6w~u)XEw!N
zkxen>+@D1@#YA&|7TFXN&HY(qQ%rR1LV(upS^Z^}59(B8drUX6!WP*c6OGP-QWc?8
zMJQDfN>zkX6`@qchF~PUkI>gayS?_62WV?!X2<5)E3$c}oVB`G)ipNHbRN}U^Gr0V
z!RDE0=p378ugK<^a>k1yn`fdKFN%$53pUeq9%{m7nrNsAn`xrKpUpJU;Lm27=#<-%
z09R@TYXlL4y(6+Vro&7>7T+aRWHBMNgxiCI{T@X*L8D%5&gner#pax7)QcyxM5A78
z)`>>DuvzygYR2WVStlAg!e*Ulv<sVcqQRfdI?>?IW}Rs8XR}T;__J9j8vJ?k>(RWB
z`LmfP8vNPJ6Ak`s?uiC}Hupq>Kbw1^!Jo}N(clkrPj=rT8!Rnsi7g?SW2d}3Ez+dd
zD?1jS3(Rs?@4$RQSCi)C6o=^^Flfc5+=krd#hdalt2*JR*+1AqutD!%O8btNOekmG
z9#4rq!Wy?keEK^2=MZ*r2YWm(ri&~HX)YI1Y;<V{*WMo5-nFN@)M?W}yL{uV)Tz-&
zHap99XHOe#>nvYgv~bwd=XTHz?c_YrKC3<58dZkgJ<Y1bvt7^gnk>2Js{9fpk8cmI
zf(KW@<N2%S@%)u?)Qjh@L^l}yv`KnrsgFyBBjNEp)$@3sN;!9=7X%jhCvAO$i`xq>
zh6fkJgKOdOjFp~53-FAUXfz}L-as^~kjFDv&*K>^<vg@Kp1~5$L)(J|@L&NvSO5<e
zz=H+wI37vQfj`G1i3Wd;M-rVn<=qB5=F*<J-7RQEp51yL&u%H_;p*{hmS~1Ck7u()
zqfDN)5)GN)PI+*rJf5|B9?x1ShfHv<Jh)dL+$#_6l?V6AgL~z{z4G8*d2p{hxK|$B
zD-Z4!z08qmAL-H{S%QI)QWYg3|C9$T8UlQQb)YtMNu}tuW!zmQ_-@>T7J%dB!SV9o
zczHaJ^*lIQc%6f2&z3K5c9wfP2m86Gx@aVy>Kg1E=;-a7kJI1)vxyfus08#U%qCvs
zpz~}t@gj%k!EAakn;y(2UgV(b!3Ywlw=CZkmfOx7v=n}59K&#UFa#a|*#jVZ0Avq<
zjMo`xK%(aX$at;6!)pzcV;ljHJpi%?K=uI09sn7yHPCZhu8;YRUsKfR3kR_3K4v#Q
zW;b|^!NY3|lyh79nAP~0)!@Yiy3TGgUR)rW+mc>f7(w$F;1Ov_)-!m0!Ncndl(S5D
zeSv5OdAzPbG-D24Pav8{3tmqkI<+Ox5i)lU^e#S}1#TP>^za@6<!mzW9s<#<4|rd|
z!+QdhLuMcz-V>nn)%zhc5D)JOcs`KN2lC;40XolP)d$Y`m`eG;J0Cdb1Lu6;oDW>{
zfoDGO%m<$Nz%RUyKmd-`0)F|xFCX~j1Gjuk*?f-75#Xa2I1)!RdI4DF1FL+FxY2dU
z5A5=RT|ThO2X^_uD!d;-1_k8;t9)RU53KTmRd|1b?niF}i+oJ=d`$IxO!a(B<$NHD
z4@B{SC_biQKE}U~@$bWJ_A&l_xXnJszmM_nWBmJYn|-*=KHO#>ZnMu3EYIf%7Uk#<
zc+5ULW*;8250BZ0$Lzyp^f|Ia2GlpFQFvYcmkpn=rYKKjXK;dhF2v{!G4To!n+Oq`
z2r-I7jN%ZZIIL-)0x3c<#DSYU#4rwPQh5VmN3{wZ<tJ0iHa0BEI@VCMWAP2#$sy);
zVKJ6B(AxgRH*l+9^(d8;)uDFS4X6YEY)dyVfQ9@+09kkT6hr<Yfat6WbwdSU+=rMh
zh8XuD{}MnCpaz&mhF(^KXjlQL0sj<051<D8QvmrDr~&^JKy+4vc&GsQQdrqaH!$*G
zWh>FB0emT1*(w_;9995ofT#?Xwvs0UO#swjX)B$FA^>Wzw3W`Y`+=pcL^HHuX)Dn@
zlg83kqIqazX)DnT=d`qyDo8H~(0_E`W!*^!v?Q3%Q0MT0pY?;hr+S87rRGcIr}06S
z%W`N%JD>5h?w3z3KFC^Ap2_-!4hXJrbM+FvFu`Yv)pD{ESq-aI4Hn;AEty{P;HQFW
zeS&JqnOO31YG=MDTwKmD4F>LEJuJDCP!Hf9*29u}i7^5k#Cljdk0Ama#CljdkIn%O
zVm&OKXS;*-utY;S;In1xVS8tF_O#4lQ~*w5JuJDmzCrW&Vb{SQAu(DHs|~*j-2{q;
zgrc3ZhhGPG1jIt}*ZKzddglPW&)-_svcE>_9M0vuBScs%1Qv$~b%Y3Yga~zn@YzCy
zIznJ}2+R(F*&#4HtV=EW5L72cO?!6N$CJ`k8ylb<0<=Sbb_mc80ooxzI|OKl^>zCA
zVl54*EDL4ORu<n!Qz>p;pmqq<4iV=F5$6ag&Ou+ADzy#v^8JW&gb1F62%d!qaD)hO
zga~ki6yV67?*l&yaAY)sL?HqkAp#sB0vsU%93cW6Ap#sB1vs+jJ7;r!5a0;mr-le{
zga~kijdeOZ)wmsq0CzTQOtOaIUq5L|1VG|nABcv|^REv?v+olkd=Vmi5jMqENB7)W
z^tmFMMbOc3mhhNEc+4R@<`5oph!92yk2!?L93q4fB7_mbV-Ddlhe>GD<fWULvUG5o
zLpaSLq8K5f7$Kq<A)*)|q8K5f7$KbN5K)W}QH&5#j1W<b5K)W}QH&5#j1W<b5K)W}
zQH&5#j1W<b5K)W}QH&5#jF4ZQlNg!F6XC~;2$9$b?tKIYA%cT|rS9|`8>R>j0+zhf
zdA17?F9IN%wID(yBZ7Yr@ge{(!jBvg+=B@2K?Das;za;-A45+B?;t|tH$w0ug2Nvn
z0*od0^c?tO0uaGBz|wm!f^UE&_(ZcBVhKLctcF;EPc+*_EWsz5p%+W=iH7``B47zV
zooDdF5`3Z=`muzbX8m<mKgC3{Z<|pJX6|A_^bc|bCc>;Cf@zQZRG&?|baiq7ffn1V
z!w5F(SZVKJr9I`SK4uhHX;0@FyRp)qXto?!X-_n&53`Py_8wN+Q_hYJR@xH{{+MxK
zr9GVof6PE4L{K8kK(G>@?gM|!Kq5p?BFsdhFxC2d$zrhb@(KY8nRqIFj&BxD23mWW
zJ`-lNc9iJ1kXD?9-eQVEOZA<u!G0MAlR>$W!;Y&zbYay#m5w&RtR;f=j$pkbL|h_R
z?+6A3tNbaD0~Ln#jxdXfV7>7c0Nn=_g7uCNafx8P@m2uc2Nl9BCxZ2kFw4PP0u(rc
z3gZVYye&ZI(G-{kMVJLeu-_48K@s99c&mT{P#7Zk;VOcKj$ol9Sm+2A8gC)cbI>tZ
z=m-`%f`yJSdx|i7ieMKb#Q$SJR1AoU0Z}m^D#qL;1~kQhrWkXV7*G@gief-f3@C~L
zMKPc#1{B4Bq8LyV1BzlmQ4A=G0Yx#OC<YY8h{wi&q8LyV1BzlyQ({0-jA=>?D2nmJ
zZ44-iF-wU7MKNY6F=i(*ASea|#faR-fS?$YlNb;bV{#H>auQ>562nr*_(?d%+$2Vv
zH^$r~M${w5+$6@_Bu3OD=5<OGfaLKL1HWQkr$hlsHbF6_CNZKQF{UOlrY13dV2*)d
zF)%E~)FcLm#h9AJz_1wD6(i~!BRUcTvtmR^VqjAYOp1X?F`^<dFewHm#lWN(m=ptr
zVnlLdL`PyoM`A=rVnlXhM0R69QH*Fw%<GgWFv}PiBWe-@e`4TI4E%|KKQZtp2L8mr
zpBNF}82A%oyvFdHV~oof<1)s$j4>`_c+N3A=NQqB7~?g@c#YvW$8eluIL<K~=NOK2
z497W!;~XQ}5hL0WBia!o+7ZKVj^Q`Q@SEc*F5q{;82)k$e>sM~9K&CZ;V;MVmt*`O
z7~==Q7(WQc_(3p+zZ}C~j^P)_@PlLc!7;qZ81d8?u3-$<FotVb2bZu8E?OO2w0exg
zdh~le`n>@zR|9aZ0l3xxTx$TXHNfR+fXmeYoNEBiH2}vNfMX57u?FB+18}SXIMx6h
zYXFWl0LL1k$Bod#M(AN9^so_n*a$sqgq>@IoomGGv=R2L5q7N+cC8V!(ni=dtk$P+
zHrqL@wx_T*`xaPjPc+-rgmJANxKDXzZz#{~DdpLCqC9g6DbMhT@+?$AdB&$6c7XEC
zr=dKvca&#*DbMUF<r!bfGoOZXl+QR%G|Fe3CmQ85uGa(CDMxuM2hk{xalJlfyG%Lc
zV7p8-<lu!SL_-d?*Yz<kG^xk9qUDZRebWZUJIXV8D9`v)UcH|2Cpz;FD9>D6%Cq*Q
zJgW!gnY@%|^`JbHm-4J0lxOnNa=8rODbL!I@~k~62Y=QpqQRf>k!bK|d?XtDd7Kap
z{)~@AgFovf(csT|Nz3)XpYf4s@MnA^8vI#ri3Wf6&xi(p)?cE*pY@n%@Mk?H8vNNm
zqh*5N&;3X=p67lf8qae-5{>7%KWTX(o@f7yXw;waoM_aaahhm6&$vp<62Xsgm1yu|
zoT6okkdLQ~v^){ldCEvMmzSVD@s<NE)8qb3(4Kh9fzGoYC1^*y-9YD=Pl9$#(2jW9
zfvz)OyzM|V_@W*0Rw*qD1YeHk6U};@u%Amb__Lo&H0v?mb|9Md7;ife&3cTt9f)Q<
z#@i0G{E+n+Z#xhT{^$q1?Lg<bAMmyV(X2;!+kt4v&-RvR?iakhN;Kq0KjQ6GTJ{M3
zY;TDMf3~+oLw>fmL_>bIw?spJwzot>e&_|>uAuYa&-RvRv_JdfwCs}g5O2E@&3cHp
zU5SSLY<G!<{A_oLhWu=IiH7`acZmjnw!1`wKgX$PxhMFuJti9bc_9wb;LrA%Xz=Ga
z717|&3vq}Be_n_~H2CwcDnx@nN33X>Dfn~5ifHiXh!xS`&k-x4!Jil05Doquts)xy
zIa)<D_;a+1Xz*u0gO;~~KS!&G27iuL5e@$Aj}Q(180UDqgwCV?*)Jg)`p=;%qM`pB
zs-oqz&_51U5e@z0P!-Y8KMqw94gKR#717W?4pk8i{_F=44gSCxtiw%H+=q3zMDu;L
z4p$$fcRa&-nb9nqvm$36XFg{EXCY@1XEA5BoYirL!Wx)r<Sb)E^KPcnEURUHwal-U
z`PDMNTIN^F{A!tBE%U2oeznZ6mig5(zgp&3%lvAYUoG>iV}5naua5cEF~2(ISI7M7
zm|q?9t7Cq3%&(65)iJ+1=2yr3>X=_0^Q&im^~|rH`PFCq;xywBrx}Mh%{atq#vx8K
z4sn`sh|`Qi%v}|y8HbowP_=eW;H|!`rj8Qtai`VG4Sluga_@F+oZLszZd|;Zz1AqV
zsvj|%b|se!ld?^JUHW~1RxuaHw3PbGOw>ffiFi2CFq}x4pjDpTyA8^fpgr9vAjqzm
z*{W*Vf1H<B)4`Z|9j)b&)zf48Db&^}cI_EhilR$g|1tgZyJq!t_R~VW(yWe_ooQ_c
zt;Wj^Jv#2M5`IR=x<^qmW_Cw+DPv7xk1-wH9rVQmd4-6sa%%?@QTo^0<TE2tbXMBV
zi^+`B&ZR1^K=P{I+E$vqGfA=}o&>pb$-xP^Z@NMI$B&^k5i(dN>xVo;pc+J?D9;e8
z1`#L9GbErqL!KH$h@=$!JX?gCh!MXgVq~Tq<u`@5Df{J@yZ*!-wfa@_%hAW61^wNR
zzLL3Yu0qGlWPg{Y&smH7QrYp6+21ATQ&u8BGCLk|{b%E}`gQUn=u^#tKEb>W{dMRA
z)*^3b<yqNXCVd)P<c;iD&+gH(V>LT3vNK9{CcpX2il|h?AA5`6E8@3`_|+4?EEGTQ
zEq?lOf%a2H{B*ba;}0{n9~X!p_fvoPeqHT{nc|1d)$i98-+en)`|elq?O5?mMSNWm
zUwPuoWyKdKi_fWwpI5}^xBmIe=6|Z6jT4`K(yD!WviPJ`d|VM9eYlGDQAK>Xiuj-+
z-k&4htB7|Oig(^#Nqgs4@%BpMt&_!@74b$zy#Cs9+UphZ+H&I6lf^49FQ>gy5icL*
zXfH1(UfNr{xQTdyh!-{y&sW5A&)V8^74fVso~ekZE8?jmmeQVDRXn-8c%mX6KUq9>
z<T~1874c|AJhHcVxFQ~^hzBd;fzwB5_gBPy6>)Dx+*1*EQ+anUEADc|op&tM?yQJA
z7VW6ru~6KxpSoz_I@+Qg#iGsCh3kmhE8@13#jVHGYqwOy&6M5ztGJ2Ey0Ic|XcgDD
zit9#-YnK++RK(Sl&HoTrRm7DQamCW&@`||Z(vjL_p15?Rxa8ucv`f|(7cV6)x^QFd
zqP@k18;c7n;{1v@uOiMpXC>|2R&mbROKRt=B+gz^oMnqME8+}daz;g*K0=&!>KN^`
zia2$QIEDD1a<Vx2q=nka6>$>j)=3M+N&BfM9=ncq;*R3P&D9es;`oX<j_BhSieuLi
z$53M&Q!kDtX^&o39OZ}wbYelPIFcIe$aTaKONqlP;;@Q1v?2~Ucq#3Wia2;FaZp7Z
zSP=&-)u0_PP3&J0`|U3F-DhuY--_60Z?X64Vy}wWbEMd#BIZ@Z+=>_+aJ9iD#Ne&@
z+~%*U1FjgjTkT(3^lz^ARm5%;(OVHc-P5$5lSOye`dari(Y3zltcW?D*tH@$JkkEE
zXj>>|S46oYS}USu*6LbIMa;@Asm)qllqzDEirBd#cG}L-b{Z*mY!y2^EVd_N`(?#;
zjv$TRc3H7aMQmLWGgetio8gJ+6)~+MrdGsOdy6R*F?m@rsUjxkH`XRr#Ds-n%k{+;
z%`0kK#G<)zX{~uhF+N#Q8($IQh#J=_Qlip@B3V&1(TS#5G&U@yH7+e0Z&m)k?#?B-
zX&?y0mOgbrM%GBNtR%{VBw$EvPZB2~4@0o5D%kiMz6MonShD3LEL6pYbFt{6T|NcO
zW~OI)y8HiT_FdO;)GVAdIZYdO%v#i`EF6nA_-$4_Poz$%+u*BN^CXse!n_UYdKG<C
zo~(qYKYUQ$pD|M&4e;ZNhiN4bOYW6BU&x*EZprOcCAUj%Y`Rgd&GA~9+VQmFs^ZdC
zm%CiVrCj{NPx|5ud>gLQPO@AkeJ1O2e?;TaP{zv0JV!&$!<n2bXUbdUjbm6gGW^7A
z$1CO3IXP8Mj=h|G;n?$X$&qC~QVx{^V|$?N+pFyFQ7L=MuCikhc0N-Myp#=tB9noq
z$mpA2zhK+$Z!5Ve&l@t!kmY0>b}miCIoyU_+UrW1kZ#!Zj9srw&)EHpl9*)ux9+1C
zO4pQhmAK@2#xrHhLT@QjfQhq?#G!43GXg6h@N_b)d;03z_h9`0jLttU<*@S?esQjo

literal 0
HcmV?d00001

diff --git a/pd/nw/index.html b/pd/nw/index.html
new file mode 100644
index 000000000..b8f71616f
--- /dev/null
+++ b/pd/nw/index.html
@@ -0,0 +1,489 @@
+<!DOCTYPE html>
+<html>
+  <head>
+  </head>
+  <body>
+    <input style="display:none;" id="fileDialog" type="file" nwworkingdir multiple />
+    <script>
+        'use strict';
+        var nw = require('nw.gui');
+        console.log(nw.App.argv);
+        var pdgui = require('./pdgui.js');
+        var port_no = nw.App.argv[0]; // fed to us by the Pd process
+        var pwd = process.env.PWD;
+        pdgui.set_port(port_no);
+        pdgui.set_pwd(pwd);
+        pdgui.set_pd_window(this);
+        pdgui.set_app_quitfn(app_quit);
+
+        console.log("Hello from " + pwd);
+
+        function app_quit () {
+            console.log("quitting for reals");
+            nw.App.quit();
+        }
+
+        var chooser = document.querySelector("#fileDialog");
+        chooser.addEventListener("change", function(evt) {
+            var file_array = this.value;
+            // reset value so that we can open the same file twice
+            this.value = null;
+            pdgui.menu_open(file_array);
+            console.log("tried to open something");
+        }, false);
+
+
+
+//        prompt("hey", "you");
+
+        // Invoke some functions to create main menus, etc.
+
+        nw.Window.get().on("close", function() {
+            pdgui.menu_quit();
+// stop-gap to shutdown properly
+//            this.close(true);
+        });
+        console.log(nw.App.argv); 
+
+        document.getElementById("fileDialog").setAttribute("nwworkingdir", pwd);
+        document.getElementById("fileDialog").setAttribute("accept",
+            Object.keys(pdgui.pd_filetypes).toString());
+
+        nw_create_pd_window_menus();
+
+        pdgui.connect();
+        pdgui.init_socket_events();
+
+        // nw context callbacks (mostly just creating/destroying windows)
+        pdgui.set_new_window_fn(nw_create_window);
+        pdgui.set_close_window_fn(nw_close_window);
+
+
+        function pdmenu_copy () {
+            alert("Please implement pdmenu_copy"); 
+        }
+
+        function pdmenu_selectall () {
+            alert("Please implement pdmenu_selectall"); 
+        }
+
+        function pdmenu_preferences () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_next_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_previous_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_parent_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_console_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_audio_on () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_audio_off () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_test_audio () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_load_meter () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_about_pd () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_manual () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_help_browser () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_l2ork_mailinglist () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_pd_mailinglists () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_forums () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_irc () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+// Menus for the main Pd window
+function nw_create_pd_window_menus () {
+    // Window menu
+    var windowMenu = new nw.Menu({
+        type: 'menubar'
+    });
+
+    // File menu
+    var fileMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+        label: 'File',
+        submenu: fileMenu
+    }));
+
+    // File sub-entries
+    fileMenu.append(new nw.MenuItem({
+        label: 'New',
+        click: pdgui.menu_new,
+        key: 'n',
+        modifiers: "ctrl"
+    }));
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Open',
+        key: 'o',
+        modifiers: "ctrl",
+        click: function (){
+            var chooser = document.querySelector('#fileDialog');
+            chooser.click();
+        }
+    }));
+
+    if (pdgui.k12_mode == 1) {
+        fileMenu.append(new nw.MenuItem({
+        label: 'K12 Demos',
+        click: pdgui.menu_k12_open_demos
+        }));
+    }
+
+    fileMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    // Note: this must be different for the main Pd window
+    fileMenu.append(new nw.MenuItem({
+        label: 'Save',
+            click: function () {},
+            enabled: false,
+        key: 's',
+        modifiers: "ctrl"
+    }));
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Save as...',
+        click: function (){},
+        enabled: false,
+        key: 'S',
+        modifiers: "ctrl"
+    }));
+
+    if (pdgui.k12_mode == 0) {
+        fileMenu.append(new nw.MenuItem({
+            type: 'separator'
+        }));
+    }
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Message...',
+        click: pdgui.menu_send,
+        key: 'm',
+        modifiers: "ctrl"
+    }));
+
+    if (pdgui.k12_mode == 0) {
+        fileMenu.append(new nw.MenuItem({
+            type: 'separator'
+        }));
+    }
+
+    // recent files go here
+
+    // anther separator goes here if there are any recent files
+
+    // Note: there's no good reason to have this here
+    fileMenu.append(new nw.MenuItem({
+        label: 'Close',
+        click: function () {},
+        enabled: false,
+    }));
+
+    // Quit Pd
+    fileMenu.append(new nw.MenuItem({
+        label: 'Quit',
+        click: pdgui.menu_quit,
+        key: 'q',
+        modifiers: "ctrl"
+    }));
+
+
+    // Edit menu
+    var editMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Edit',
+    submenu: editMenu
+    }));
+
+    // Edit sub-entries
+    editMenu.append(new nw.MenuItem({
+        label: 'Copy',
+        click: pdmenu_copy,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Select All',
+        click: function () {
+            document.selectAllChildren(document);
+        },
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Zoom In',
+        click: function () {
+            nw.Window.get().zoomLevel += 1;
+            pdgui.gui_post("zoom level is " + nw.Window.get().zoomLevel);
+        },
+        key: '=',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Zoom Out',
+        click: function () {
+            nw.Window.get().zoomLevel -= 1;
+            pdgui.gui_post("zoom level is " + nw.Window.get().zoomLevel);
+        },
+        key: '-',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Preferences...',
+        click: pdmenu_preferences,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+
+    // Windows menu... call it "winman" (i.e., window management) to avoid confusion
+    var winmanMenu = new nw.Menu();
+
+    // Add to windows menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Windows',
+    submenu: winmanMenu
+    }));
+
+    // Winman sub-entries
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Next Window',
+        click: pdmenu_next_win,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Previous Window',
+        click: pdmenu_previous_win,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Parent Window',
+        click: pdmenu_parent_win,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Pd & Console',
+        click: pdmenu_console_win,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Media menu
+    var mediaMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Media',
+    submenu: mediaMenu
+    }));
+
+    // Media sub-entries
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Audio On',
+        click: function() {
+            pdgui.pdsend("pd dsp 1");
+        },
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Audio Off',
+        click: function() {
+            pdgui.pdsend("pd dsp 0");
+        },
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Test Audio and Midi',
+        click: pdmenu_test_audio,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Load Meter',
+        click: pdmenu_load_meter,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Help menu
+    var helpMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Help',
+    submenu: helpMenu
+    }));
+
+    // Help sub-entries
+    helpMenu.append(new nw.MenuItem({
+        label: 'About Pd-L2ork',
+        click: pdmenu_about_pd,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Manual',
+        click: pdmenu_manual,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Help Browser',
+        click: pdmenu_help_browser,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Pd-L2ork Mailing List',
+        click: pdmenu_l2ork_mailinglist,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Pure Data Mailing Lists',
+        click: pdmenu_pd_mailinglists,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Forums',
+        click: pdmenu_forums,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'IRC Chat',
+        click: pdmenu_irc,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Assign to window
+    nw.Window.get().menu = windowMenu;
+}
+
+function nw_close_window(window) {
+    window.close(true);
+}
+
+function nw_create_window(cid, width, height, xpos, ypos, menu_flag, resize, topmost, cnv_color,
+    canvas_string, dir, dirty_flag, cargs) {
+        // todo: make a separate way to format the title for OSX
+    var my_title =  pdgui.format_window_title(canvas_string, dirty_flag, cargs, dir);
+
+    var new_win = nw.Window.open('pdcanvas.html', {
+        title: my_title,
+        position: "center",
+        toolbar: true,
+        focus: true,
+        width: width,
+        height: height,
+        x: xpos,
+        y: ypos
+    });
+    return new_win;
+}
+
+function canvasNew(args) {
+    console.log(args);
+}
+
+
+
+
+
+    </script>
+    <input style="display:none;" id="saveDialog" type="file" nwsaveas />
+
+    <pre id="p1" style="white-space: pre-wrap;">Welcome to Pd GUI using Node-Webkit
+      <script>document.write(process.versions['node-webkit'])</script><br/></pre> 
+
+    <script>
+
+
+    </script>
+  </body>
+</html>
diff --git a/pd/nw/package.json b/pd/nw/package.json
new file mode 100644
index 000000000..de61b251c
--- /dev/null
+++ b/pd/nw/package.json
@@ -0,0 +1,8 @@
+{
+  "name": "my-app",
+  "version": "0.1.0",
+  "main": "index.html",
+  "window": {
+      "toolbar": true
+  }
+}
diff --git a/pd/nw/pdcanvas.css b/pd/nw/pdcanvas.css
new file mode 100644
index 000000000..88baa317e
--- /dev/null
+++ b/pd/nw/pdcanvas.css
@@ -0,0 +1,50 @@
+@font-face {
+    font-family: "DejaVu Sans Mono";
+    src: url("DejaVuSansMono.ttf");
+}
+
+body {
+    margin: 0px;
+    font-family: "DejaVu Sans Mono";
+}
+
+.noselect {
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+
+text {
+    // fill: red;
+    cursor: default;
+}
+
+.selected_border {
+    stroke: blue;
+    stroke-dasharray: none;
+    stroke-width: 1;
+}
+
+.selected_line {
+    stroke: blue;
+}
+
+.broken_border {
+    fill: #f7f7f7;
+    stroke: red;
+    stroke-dasharray: 3 2;
+}
+
+.xlet {
+    stroke: black;
+    fill: gray;
+    stroke-width: 1;
+    shape-rendering: optimizeSpeed;
+}
+
+//.xlet:hover {
+//    stroke: red;
+//}
diff --git a/pd/nw/pdcanvas.html b/pd/nw/pdcanvas.html
new file mode 100644
index 000000000..9bd9af314
--- /dev/null
+++ b/pd/nw/pdcanvas.html
@@ -0,0 +1,1009 @@
+<!DOCTYPE html>
+<html>
+  <head>
+  </head>
+  <link rel="stylesheet" type="text/css" href="pdcanvas.css">
+  <body>
+  <input style="display:none;" id="fileDialog" type="file" multiple />
+  <input style="display:none;" id="saveDialog" type="file" nwsaveas nwworkingdir accept=".pd" />
+  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="patchsvg" height="1000" width="1000" class="noselect">
+  <rect/>
+  </svg>
+  <script>
+    'use strict';
+    var nw = require('nw.gui'); 
+    var pdgui = require('./pdgui.js');
+
+    var name = pdgui.last_loaded();
+    
+    console.log("my working dire is " + pdgui.get_pwd());
+    document.getElementById("saveDialog").setAttribute("nwworkingdir", pdgui.get_pwd());
+
+    document.getElementById("fileDialog").setAttribute("nwworkingdir", pdgui.get_pwd());
+    document.getElementById("fileDialog").setAttribute("accept",
+        Object.keys(pdgui.pd_filetypes).toString());
+
+
+
+    // The right-click popup menu
+    var popup_menu = new nw.Menu();
+    pdgui.add_popup(name, popup_menu);
+
+    popup_menu.append(new nw.MenuItem({
+        label: 'Properties',
+        click: function() {
+            pdgui.popup_action(name, 0);
+        }
+    }));
+    popup_menu.append(new nw.MenuItem({
+        label: 'Open',
+        click: function() {
+            pdgui.popup_action(name, 1);
+        }
+    }));
+    popup_menu.append(new nw.MenuItem({
+        label: 'Help',
+        click: function() {
+            pdgui.popup_action(name, 2);
+        }
+    }));
+
+    document.querySelector("#saveDialog").addEventListener("change", function(evt) {
+        pdgui.saveas_callback(name, this.value);
+        console.log("tried to open something");
+    }, false);
+
+
+    document.querySelector("#fileDialog").addEventListener("change", function(evt) {
+        var file_array = this.value;
+        // reset value so that we can open the same file twice
+        this.value = null;
+        pdgui.menu_open(file_array);
+        console.log("tried to open something");
+    }, false);
+
+
+    document.addEventListener("mousemove", function(evt) {
+        //pdgui.gui_post("x: " + evt.pageX + " y: " + evt.pageY +
+        //    " modifier: " + (evt.shiftKey + (evt.ctrlKey << 1)));
+        pdgui.pdsend(name + " motion " + evt.pageX + " " + evt.pageY + " " +
+            (evt.shiftKey + (evt.ctrlKey << 1)));
+        evt.stopPropagation();
+//        evt.preventDefault();
+        return false;
+    });
+
+    var last_keydown = "";
+
+
+    function add_keymods(key, evt) {
+        var shift = evt.shiftKey ? "Shift" : "";
+        var ctrl = evt.ctrlKey ? "Ctrl" : "";
+        return shift + ctrl + key;
+    }
+
+    document.addEventListener("keydown", function(evt) {
+        var key_code = evt.keyCode; 
+        var hack = null; // hack for unprintable ascii codes
+        switch(key_code) {
+            case 8:
+            case 9:
+            case 10:
+            case 27:
+//            case 32:
+            case 127: hack = key_code; break;
+
+
+            case 37: hack = add_keymods('Left', evt); break;
+            case 38: hack = add_keymods('Up', evt); break;
+            case 39: hack = add_keymods('Right', evt); break;
+            case 40: hack = add_keymods('Down', evt); break;
+            case 33: hack = add_keymods('Prior', evt); break;
+            case 34: hack = add_keymods('Next', evt); break;
+            case 35: hack = add_keymods('End', evt); break;
+            case 36: hack = add_keymods('Home', evt); break;
+
+            // Need to handle Control key, Alt
+
+            case 16: hack = 'Shift'; break;
+            case 17: hack = 'Control'; break;
+            case 18: hack = 'Alt'; break;
+        }
+        if (hack !== null) {
+            pdgui.gui_canvas_sendkey(name, 1, evt, hack);
+            pdgui.set_keymap(key_code, hack);
+        }
+        pdgui.gui_post("keydown time: keycode is " + evt.keyCode);
+        last_keydown = evt.keyCode;
+        evt.stopPropagation();
+    });
+
+    document.addEventListener("keypress", function(evt) {
+        pdgui.gui_canvas_sendkey(name, 1, evt, evt.charCode);
+        pdgui.set_keymap(last_keydown, evt.charCode);
+        pdgui.gui_post("keypress time: charcode is " + evt.charCode);
+        // Don't do things like scrolling on space, arrow keys, etc.
+        evt.stopPropagation();
+        evt.preventDefault();
+    });
+
+    document.addEventListener("keyup", function(evt) {
+        var my_char_code = pdgui.get_char_code(evt.keyCode);
+        pdgui.gui_canvas_sendkey(name, 0, evt, my_char_code);
+        pdgui.gui_post("keyup time: charcode is: " + my_char_code);
+    });
+
+    // just left-clicks for the moment
+    document.onmousedown = function(evt) {
+        //pdgui.gui_post("mousedown: x: " + evt.pageX + " y: " + evt.pageY +
+        //    " button: " + (evt.button + 1) + " modifier: " + (evt.shiftKey + (evt.ctrlKey << 1)));
+        // tk events are one greater than html5...
+        var b = evt.button + 1;
+        var mod;
+        // For some reason right-click sends a modifier value of "8", and canvas_doclick in
+        // g_editor.c depends on that value to do the right thing.  So let's hack...
+        if (b === 3) { // right-click
+            mod = 8;
+        } else {
+            mod = (evt.shiftKey + (evt.ctrlKey << 1)); 
+        }
+        pdgui.pdsend(name + " mouse " + evt.pageX + " " + evt.pageY + " " +
+            b + " " + mod);
+        evt.stopPropagation();
+        evt.preventDefault();
+    }
+
+    document.onmouseup = function(evt) {
+        //pdgui.gui_post("mouseup: x: " + evt.pageX + " y: " + evt.pageY +
+        //    " button: " + (evt.button + 1));
+        pdgui.pdsend(name + " mouseup " + evt.pageX + " " + evt.pageY + " " +
+            (evt.button + 1));
+    }
+
+
+
+
+    // let's handle some events for this window...
+
+    // closing the Window
+    // this isn't actually closing the window yet
+    nw.Window.get().on("close", function() {
+        pdgui.pdsend(name + " menuclose 0");
+    });
+    // draw the objects in the patch once we've finished loading this boilerplate page
+    // We could probably use the window.onload here, which would make it standard javascript
+    this.onload = function() {
+        pdgui.canvas_map(name);
+    };
+
+
+
+
+
+nw_create_patch_window_menus(name);
+
+        function menu_generic () {
+            alert("Please implement this");
+        }
+
+        function pdmenu_copy () {
+            alert("Please implement pdmenu_copy"); 
+        }
+
+        function pdmenu_selectall () {
+            alert("Please implement pdmenu_selectall"); 
+        }
+
+        function pdmenu_preferences () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_next_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_previous_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_parent_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_console_win () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_audio_on () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_audio_off () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_test_audio () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_load_meter () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_about_pd () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_manual () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_help_browser () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_l2ork_mailinglist () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_pd_mailinglists () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_forums () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+        function pdmenu_irc () {
+            alert("Please implement pdmenu_preferences"); 
+        }
+
+// Menus for the Patch window
+function nw_create_patch_window_menus () {
+
+    // Window menu
+    var windowMenu = new nw.Menu({
+        type: 'menubar'
+    });
+
+    // File menu
+    var fileMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+        label: 'File',
+        submenu: fileMenu
+    }));
+
+    // File sub-entries
+    fileMenu.append(new nw.MenuItem({
+        label: 'New',
+        click: pdgui.menu_new,
+        key: 'n',
+        modifiers: "ctrl"
+    }));
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Open',
+        key: 'o',
+        modifiers: "ctrl",
+        click: function (){
+            var chooser = document.querySelector('#fileDialog');
+            chooser.click();
+        }
+    }));
+
+    if (pdgui.k12_mode == 1) {
+        fileMenu.append(new nw.MenuItem({
+        label: 'K12 Demos',
+        click: pdgui.menu_k12_open_demos
+        }));
+    }
+
+    fileMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    // Note: this must be different for the main Pd window
+    fileMenu.append(new nw.MenuItem({
+        label: 'Save',
+        click: function () {
+            pdgui.menu_save(name);
+        },
+        key: 's',
+        modifiers: "ctrl"
+    }));
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Save as...',
+        click: function (){
+            pdgui.menu_saveas(name);
+        },
+        key: 's',
+        modifiers: "ctrl+shift"
+    }));
+
+    if (pdgui.k12_mode == 0) {
+        fileMenu.append(new nw.MenuItem({
+            type: 'separator'
+        }));
+    }
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Message...',
+        click: pdgui.menu_send,
+        key: 'm',
+        modifiers: "ctrl"
+    }));
+
+    if (pdgui.k12_mode == 0) {
+        fileMenu.append(new nw.MenuItem({
+            type: 'separator'
+        }));
+    }
+
+    // recent files go here
+
+    // anther separator goes here if there are any recent files
+
+    fileMenu.append(new nw.MenuItem({
+        label: 'Close',
+        click: function() {
+            pdgui.menu_close(name);
+        }
+    }));
+
+    // Quit Pd
+    fileMenu.append(new nw.MenuItem({
+        label: 'Quit',
+        click: pdgui.menu_quit,
+        key: 'q',
+        modifiers: "ctrl"
+    }));
+
+
+    // Edit menu
+    var editMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Edit',
+    submenu: editMenu
+    }));
+
+    // Edit sub-entries
+    editMenu.append(new nw.MenuItem({
+        label: 'Undo',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Redo',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Cut',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Copy',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Paste',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Duplicate',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Select All',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Reselect',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Zoom In',
+        click: function () {
+            nw.Window.get().zoomLevel += 1;
+            pdgui.gui_post("zoom level is " + nw.Window.get().zoomLevel);
+        },
+        key: '=',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Zoom Out',
+        click: function () {
+            nw.Window.get().zoomLevel -= 1;
+            pdgui.gui_post("zoom level is " + nw.Window.get().zoomLevel);
+        },
+        key: '-',
+        modifiers: "ctrl"
+    }));
+
+
+
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Tidy Up',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Bring to Front',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Send to Back',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Font',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Cord Inspector',
+        click: function() {
+            pdgui.pdsend(name + " magicglass 0");
+        },
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Find',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Find Again',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Find Last Error',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Autotips',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Editmode',
+        click: function() { pdgui.pdsend(name + " editmode 0"); },
+        key: 'e',
+        modifiers: "ctrl"
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    editMenu.append(new nw.MenuItem({
+        label: 'Preferences...',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Put menu
+    var putMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Put',
+    submenu: putMenu
+    }));
+
+    // Put menu sub-entries
+    putMenu.append(new nw.MenuItem({
+        label: 'Object',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " obj 0");
+        },
+        key: '1',
+        modifiers: "ctrl"
+    }));
+
+/*
+
+proc menu_floatatom {name accel} {
+	pd [concat $name dirty 1 \;]
+    pd [concat $name floatatom $accel \;]
+}
+
+proc menu_symbolatom {name accel} {
+	pd [concat $name dirty 1 \;]
+    pd [concat $name symbolatom $accel \;]
+}
+
+proc menu_comment {name accel} {
+	pd [concat $name dirty 1 \;]
+    pd [concat $name text $accel \;]
+}
+
+proc menu_graph {name} {
+	pd [concat $name dirty 1 \;]
+	set xdraw [expr int([$name.c canvasx 0])]
+	set ydraw [expr int([$name.c canvasy 0])]
+    pd [concat $name graph NULL 0 0 0 0 [expr $xdraw+30] [expr $ydraw+30] 0 [expr $ydraw+30]\;]
+    #pd [concat $name graph \;]
+}
+
+proc menu_array {name} {
+	pd [concat $name dirty 1 \;]
+    pd [concat $name menuarray \;]
+}
+
+
+*/
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Message',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " msg 0");
+        },
+        key: '2',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Number',
+        click: function() { 
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " floatatom 0");
+        },
+        key: '3',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Symbol',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " symbolatom 0");
+        },
+        key: '4',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Comment',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " text 0");
+        },
+        key: '5',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Bang',
+        click: function(e) {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " bng 0");
+        },
+        key: 'b',
+        modifiers: "ctrl-shift"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Toggle',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " toggle 0");
+        },
+        key: 't',
+        modifiers: "ctrl-shift"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Number2',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " numbox 0");
+        },
+        key: 'n',
+        modifiers: "ctrl-shift"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Vslider',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " vslider 0");
+        },
+        key: 'v',
+        modifiers: "ctrl-shift"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Hslider',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " hslider 0");
+        },
+        key: 'h',
+        modifiers: "ctrl-shift"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Vradio',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " vradio 0");
+        },
+        key: 'd',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Hradio',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " hradio 0");
+        },
+        key: 'i',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'VU',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " vumeter 0");
+        },
+        key: 'u',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Canvas',
+        click: function() {
+                   pdgui.pdsend(name + " dirty 1");
+                   pdgui.pdsend(name + " mycnv 0");
+        },
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Graph',
+        click: function() {
+            pdgui.pdsend(name + " dirty 1");
+            // leaving out some placement logic... see pd.tk menu_graph
+            pdgui.pdsend(name + " graph NULL 0 0 0 0 30 30 0 30");
+        },
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    putMenu.append(new nw.MenuItem({
+        label: 'Array',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+
+    // Windows menu... call it "winman" (i.e., window management) to avoid confusion
+    var winmanMenu = new nw.Menu();
+
+    // Add to windows menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Windows',
+    submenu: winmanMenu
+    }));
+
+    // Winman sub-entries
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Next Window',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Previous Window',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Parent Window',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    winmanMenu.append(new nw.MenuItem({
+        label: 'Pd & Console',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Media menu
+    var mediaMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Media',
+    submenu: mediaMenu
+    }));
+
+    // Media sub-entries
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Audio On',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Audio Off',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Test Audio and Midi',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    mediaMenu.append(new nw.MenuItem({
+        label: 'Load Meter',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Help menu
+    var helpMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+    label: 'Help',
+    submenu: helpMenu
+    }));
+
+    // Help sub-entries
+    helpMenu.append(new nw.MenuItem({
+        label: 'About Pd-L2ork',
+        click: menu_generic,
+        key: 'c',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Manual',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Help Browser',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        type: 'separator'
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Pd-L2ork Mailing List',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Pure Data Mailing Lists',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'Forums',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    helpMenu.append(new nw.MenuItem({
+        label: 'IRC Chat',
+        click: menu_generic,
+        key: 'a',
+        modifiers: "ctrl"
+    }));
+
+    // Assign to window
+    nw.Window.get().menu = windowMenu;
+
+}
+
+
+
+/*
+function nw_create_canvas_window_menus(name) {
+	// Window menu
+	var windowMenu = new nw.Menu;
+	var windowMenu = new nw.Menu({
+	    type: 'menubar'
+	});
+
+
+	// File menu
+	var fileMenu = new nw.Menu();
+
+	// Add to window menu
+	windowMenu.append(new nw.MenuItem({
+	    label: 'File',
+	    submenu: fileMenu
+	}));
+
+	// File sub-entries
+	fileMenu.append(new nw.MenuItem({
+	    label: 'New',
+	    click: pdgui.menu_new,
+	    key: 'n',
+	    modifiers: "ctrl"
+	}));
+
+	fileMenu.append(new nw.MenuItem({
+	    label: 'Open',
+	    key: 'o',
+	    modifiers: "ctrl",
+	    click: function (){
+		var chooser = document.querySelector('#fileDialog');
+		chooser.click();
+		chooser.addEventListener("change", function(evt) {
+		    menu_open(this.value);
+		    console.log("tried to open something");
+		}, false);
+	    }
+	}));
+
+	if (pdgui.k12_mode == 1) {
+	    fileMenu.append(new nw.MenuItem({
+		label: 'K12 Demos',
+		click: pdgui.menu_k12_open_demos
+	    }));
+	}
+
+	fileMenu.append(new nw.MenuItem({
+	    type: 'separator'
+	}));
+
+	// Note: this must be different for the main Pd window
+	fileMenu.append(new nw.MenuItem({
+	    label: 'Save',
+	    click: function (){
+		pdgui.menu_save(name);
+	    },
+	    key: 's',
+	    modifiers: "ctrl"
+	}));
+
+	fileMenu.append(new nw.MenuItem({
+	    label: 'Save as...',
+	    click: function (){
+		pdgui.menu_saveas(name);
+	    },
+	    key: 'S',
+	    modifiers: "ctrl"
+	}));
+
+	if (pdgui.k12_mode == 0) {
+	    fileMenu.append(new nw.MenuItem({
+		type: 'separator'
+	    }));
+	}
+
+	// Assign to window
+	nw.Window.get().menu = windowMenu;
+}
+*/
+
+  </script>
+  </body>
+</html>
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
new file mode 100644
index 000000000..825bafcca
--- /dev/null
+++ b/pd/nw/pdgui.js
@@ -0,0 +1,2695 @@
+'use strict';
+
+// Modules
+
+var pwd;
+
+exports.set_pwd = function(pwd_string) {
+    pwd = pwd_string;
+}
+
+exports.get_pwd = function() {
+    return pwd;
+}
+
+var fs = require('fs');     // for fs.existsSync
+var path = require('path'); // for path.dirname path.extname
+
+var pd_window; 
+exports.pd_window;
+
+exports.set_pd_window = function(win) {
+    pd_window = win;
+    exports.pd_window = win;
+}
+
+var nw_create_window;
+var nw_close_window;
+var nw_app_quit;
+
+exports.set_new_window_fn = function (nw_context_fn) {
+    nw_create_window = nw_context_fn;
+}
+
+exports.set_close_window_fn = function (nw_context_fn) {
+    nw_close_window = nw_context_fn;
+}
+
+// Global variables from tcl
+var pd_myversion,    // Pd version string
+    pd_apilist,      // Available Audio APIs (tcl list)
+    pd_midiapilist,  // MIDI APIsa (tcl list)
+    pd_nt,           // Something to do with Windows configuration
+    fontname,        // Font
+    fontweight,      //  config
+    pd_fontlist,     //   (Seems to be hard coded in Pd-l2ork)
+    pd_whichmidiapi, // MIDI API, set by pd->gui message
+    pd_whichapi,     // Audio API, set by pd->gui message
+    pd_opendir,      //
+    pd_guidir,       //
+    pd_tearoff,      //
+    put_tearoff,     //
+    tcl_version,     //
+    canvas_fill,     //
+    colors,          //
+    global_clipboard, //
+    global_selection, //
+    k12_mode = 0,         // should be set from argv ('0' is just a stopgap)
+    k12_saveas_on_new, //
+    autotips,          // tooltips
+    magicglass,        // cord inspector
+    window_prefs,      //retaining window-specific preferences
+    pdtk_canvas_mouseup_name, // not sure what this does
+    filetypes,         // valid file extensions for opening/saving (includes Max filetypes)
+    untitled_number,   // number to increment for each new patch that is opened
+    untitled_directory, // default directory where to create/save new patches
+    popup_coords,       // x/y for current popup window (global because there's only one at a time)
+    pd_colors = {};                // associative array of canvas color presets
+
+    var pd_filetypes = { ".pd": "Pd Files",
+                         ".pat":"Max Patch Files",
+                         ".mxt":"Max Text Files",
+                         ".mxb":"Max Binary Files",
+                         ".help":"Max Help Files"
+                       };
+
+    exports.k12_mode = k12_mode;
+    exports.pd_filetypes = pd_filetypes;
+
+    popup_coords = [0,0];
+
+    var startup_files = []; // Array of files to be opened at startup (from the command line)
+
+    var pd_keymap = {}; // to iteratively map keydown/keyup keys
+                        // to keypress char codes
+
+function set_keymap(keycode, charcode) {
+    pd_keymap[keycode] = charcode;
+}
+
+exports.set_keymap = set_keymap;
+
+function get_char_code(keycode) {
+    return pd_keymap[keycode];
+}
+
+exports.get_char_code = get_char_code;
+
+    // Hard-coded Pd-l2ork font metrics
+/*
+var font_fixed_metrics = "\
+8 5 11 \
+9 6 12 \
+10 6 13 \
+12 7 16 \
+14 8 17 \
+16 10 19 \
+18 11 22 \
+24 14 29 \
+30 18 37 \
+36 22 44";
+*/
+
+// Let's try to get some metrics specific to Node-webkit...
+    // Hard-coded Pd-l2ork font metrics
+var font_fixed_metrics = "\
+8 5 11 \
+9 6 12 \
+10 6 13 \
+12 7 16 \
+14 8 17 \
+16 10 19 \
+18 11 22 \
+24 14 29 \
+30 18 37 \
+36 22 44";
+
+
+// Utility Functions
+
+// originally used to enquote a string to send it to a tcl function
+function enquote (x) {
+    var foo = x.replace(/,/g, "");
+    foo = foo.replace(/;/g, "");
+    foo = foo.replace(/"/g, "");
+    foo = foo.replace(/ /g, "\\ ");
+    foo = foo.trim();
+    return foo;
+}
+
+// from stackoverflow.com/questions/21698906/how-to-check-if-a-path-is-absolute-or-relative
+// this doesn't seem to be needed atm
+function path_is_absolute(myPath) {
+    var ret = (path.resolve(myPath) === path.normalize(myPath).replace(/(.+)([\/]\\])$/, '$1'));
+    return ret;
+}
+
+function set_midiapi(val) {
+    pd_whichmidiapi = val;
+}
+
+function set_audioapi(val) {
+    pd_whichapi = val;
+}
+
+function gui_post(string, color) {
+    if (color === undefined) { color = "black" };
+    var myp = pd_window.document.getElementById('p1');
+    var text;
+    var span = pd_window.document.createElement("span");
+    span.style.color = color;
+    var text = pd_window.document.createTextNode(string + "\n"); 
+    span.appendChild(text);
+    myp.appendChild(span);
+    pd_window.window.scrollTo(0, pd_window.document.body.scrollHeight);
+}
+
+exports.gui_post = gui_post;
+
+function pd_error_select_by_id(objectid) {
+    if (objectid !== null) {
+        pdsend("pd findinstance " + objectid);
+    }
+}
+exports.pd_error_select_by_id = pd_error_select_by_id
+
+function gui_post_error(objectid, loglevel, errormsg) {
+    var my_p = pd_window.document.getElementById('p1');
+    // if we have an object id, make a friendly link...
+    var error_title = pd_window.document.createTextNode("error");
+    if (objectid.length > 0) {
+        var my_a = pd_window.document.createElement('a');
+        my_a.href = "javascript:pdgui.pd_error_select_by_id('" + objectid + "')";
+        my_a.appendChild(error_title);
+        my_p.appendChild(my_a);
+    } else {
+        my_p.appendChild(error_title);
+    }
+    var rest = pd_window.document.createTextNode(": " + errormsg + "\n");
+    my_p.appendChild(rest);
+
+    // looks like tcl/tk tried to throttle this... maybe we should, too...
+    /*
+    after cancel .printout.frame.text yview end-2char
+    after idle .printout.frame.text yview end-2char
+        .printout.frame.text configure -state disabled
+    */
+}
+
+function menu_save(name) {
+//    gui_post(name + " menusave");
+    pdsend(name + " menusave");
+}
+
+exports.menu_save = menu_save;
+
+function gui_canvas_saveas (name, initfile, initdir) {
+    gui_post("working directory is " + pwd);
+    //global pd_nt filetypes untitled_directory
+    if (!fs.existsSync(initdir)) {
+        initdir = pwd;
+    }
+//    patchwin[name].window.document.getElementById("fileDialog").setAttribute("nwworkingdir", pwd);
+    var chooser = patchwin[name].window.document.querySelector('#saveDialog');
+    chooser.click();
+//    chooser.addEventListener("change", function(evt) {
+//        saveas_callback(name, this.value);
+//        console.log("tried to open something");
+//    }, false);
+}
+
+function saveas_callback(cid, file) {
+    gui_post("tried a saveas, and the file chosen is " + file);
+    var filename = file;
+    // It probably isn't possible to arrive at the callback with an
+    // empty string.  But I've only tested on Debian so far...
+    if (filename === null) {
+        return;
+    }
+    // We don't need to use the codepath below because node-webkit
+    // let's us specify the allowed files extensions.  Lo and behold,
+    // nw just does the "right thing" whether the user types an extension
+    // or not.  This should put us on part with Microsoft Word in the late
+    // 90s.
+    //var lc = filename.toLowerCase();
+    //if (lc.slice(-3) !== '.pd' &&
+    //    lc.slice(-4) !== '.pat' &&
+    //    lc.slice(-4) !== '.mxt') {
+        // remove any other extensions
+    //    filename = filename.slice(0,
+    //        (filename.length - path.extname(filename).length));
+        // add ".pd"
+    //    filename = filename + '.pd';
+    //}
+    // test again after downcasing and maybe adding a ".pd" on the end
+    //if (fs.existsSync(filename)) {
+    //    var reply = patchwin[cid].window.confirm(filename +
+    //        " already exists. Do you want to replace it?");
+    //    if (!reply) {
+    //        return;
+    //    }
+    //}
+    var directory = path.dirname(filename);
+    var basename = path.basename(filename);
+    pdsend(cid + " savetofile " + enquote(basename) + " " +
+        enquote(directory));
+
+    // haven't implemented these last few commands yet...
+    // set untitled_directory $directory
+    // add to recentfiles
+    //::pd_guiprefs::update_recentfiles "$filename" 1
+}
+
+exports.saveas_callback = saveas_callback;
+
+function menu_saveas(name) {
+    pdsend(name + " menusaveas");
+}
+
+exports.menu_saveas = menu_saveas;
+
+function menu_new () {
+    //if { ! [file isdirectory $untitled_directory]} {set untitled_directory $::env(HOME)}
+    untitled_directory = pwd;
+    pdsend("pd filename " + "Untitled-" + untitled_number + " " + enquote(untitled_directory));
+    if (k12_mode == 1) {
+        k12_saveas_on_new = 1;
+        pdsend("#N canvas");
+        pdsend("#X obj -30 -30 preset_hub k12 1 %hidden%");
+        pdsend("#X pop 1");
+    } else {
+        pdsend("#N canvas");
+        pdsend("#X pop 1");
+    }
+    untitled_number++;
+}
+
+exports.menu_new = menu_new;
+
+function gui_close_window(cid) {
+    nw_close_window(patchwin[cid]);
+}
+
+function menu_k12_open_demos () {
+
+}
+
+exports.menu_k12_open_demos = menu_k12_open_demos;
+
+
+function menu_open (filenames_string) {
+    gui_post("menu_open " + filenames_string);
+    var file_array = filenames_string.split(";");
+    var length = file_array.length;
+    gui_post("file_array is " + file_array);
+    for (var i = 0; i < length; i++) {
+        open_file(file_array[i]);
+    }
+}
+
+exports.menu_open = menu_open;
+
+function menu_close(name) {
+    // not handling the "text editor" yet
+    // not handling the "Window" menu yet
+    //pdtk_canvas_checkgeometry $name
+    pdsend(name + " menuclose 0");
+}
+
+exports.menu_close = menu_close;
+
+function canvas_menuclose_callback(cid_for_dialog, cid, force) {
+    // Hacky-- this should really be dir/filename here instead of
+    // filename/args/dir which is ugly
+    var title = patchwin[cid_for_dialog].window.document.title;
+    var reply = patchwin[cid_for_dialog].window.confirm("Save changes to " + title + "?");
+    if (reply) {
+        pdsend(cid_for_dialog + " menusave");
+    } else {
+        pdsend(cid_for_dialog + " dirty 0");        
+        pdsend(cid + " menuclose " + force);
+    }
+}
+
+function gui_canvas_menuclose(cid_for_dialog, cid, force) {
+    // Hack to get around a renderer bug-- not guaranteed to work
+    // for long patches
+    setTimeout(function() {
+            canvas_menuclose_callback(cid_for_dialog, cid, force);
+        }, 450);
+}
+
+function gui_pd_quit_dialog() {
+    var reply = pd_window.window.confirm("Really quit?");
+    if (reply === true) {
+        pdsend("pd quit");
+    }
+}
+
+// send a message to Pd
+function menu_send() {
+    gui_post("message...pdwindow is " + pd_window);
+    var message = pd_window.window.prompt("Type a message to send to Pd");
+    if (message != undefined && message.length) {
+        gui_post("Sending message to Pd: " + message + ";");
+        pdsend(message);
+    }
+}
+
+exports.menu_send = menu_send;
+
+function menu_quit() {
+    pdsend("pd verifyquit");
+}
+
+exports.menu_quit = menu_quit;
+
+var nw_app_quit;
+
+function app_quit() {
+    nw_app_quit();
+}
+
+exports.set_app_quitfn = function(quitfn) {
+    nw_app_quit = quitfn;
+} 
+
+function open_file(file) {
+    //from tcl...
+    //global pd_opendir pd_guidir pd_nt
+    gui_post("open_file: " + file);
+    var directory = path.dirname(file);
+    var basename = path.basename(file);
+    var cyclist;
+    if (basename.match(/\.(pat|mxb|help)$/) !=null) {
+        gui_post("warning: opening pat|mxb|help not implemented yet");
+        //gui_post("converting " + filename);
+        if (pd_nt == 0) {
+            // on GNU/Linux, cyclist is installed into /usr/bin usually
+            cyclist = "/usr/bin/cyclist";
+        } else {
+            cyclist = pd_guidir + "/bin/cyclist"
+        }
+        //gui_post(cyclist + filename);
+        //convert Max binary to text .pat
+        // The following is tcl code which needs to get converted to javascript...
+        //set binport [open "| \"$cyclist\" \"$filename\""]
+        //set convertedtext [read $binport]
+        //if { ! [catch {close $binport} err]} {
+        //    if {! [file writable $directory]} {     set directory "/tmp" }
+        //    set basename "$basename.pat"
+        //    set textpatfile [open "$directory/$basename" w]
+        //    puts $textpatfile $convertedtext
+        //    close $textpatfile
+        //    puts stderr "converted Max binary to text format: $directory/$basename"
+        //}
+    }
+    if (basename.match(/\.(pd|pat|mxt)$/i) != null) {
+        pdsend("pd open" + " " + enquote(basename) + " " + enquote(directory));
+        pd_opendir = directory;
+        //::pd_guiprefs::update_recentfiles "$filename" 1
+    }
+}
+
+// Doesn't work yet... need to figure out how to send command line args (files) to be opened by
+// the unique instance 
+function gui_open_files_via_unique(filenames)
+{
+    gui_post("pdtk_open_files_via_unique " + filenames);
+    length = filenames.length;
+    if (length != 0) {
+        for (var i = 0; i < length; i++) {
+            var file = filenames[i];
+            //gui_post("open_file " + file);
+            open_file(file);
+        }
+    }
+}
+
+function gui_build_filelist(file) {
+    startup_files.push(file);
+}
+
+// This doesn't work at the moment.  Not sure how to feed the command line filelist to a single
+// instance of node-webkit.
+function gui_check_unique (unique) {
+        // gui_post("pdtk_check_unique " + unique);
+    // global appname
+    return;
+    var final_filenames = new Array;
+    var startup_dir = pwd;
+    if (unique == 0) {
+        var filelist_length = startup_files.length;
+        for (var i = 0; i < filelist_length; i++) {
+            var file = startup_files[i];
+            var dir;
+            //gui_post (file [file dirname $file] $startup_dir"
+            if (!pathIsAbsolute(file)) {
+                file = fs.join(pwd, file);
+            }
+            final_filenames.push(file);  
+        }
+        gui_open_files_via_unique(final_filenames);
+    }
+    // old tcl follows...
+	//if path is relative
+	//then join pwd and relative path
+	//else
+	//use the absolute path
+	//(no need to check for existence here)
+
+	//            catch {cd [file dirname $file]}
+	//            set dir [pwd]
+
+	//file tail should be the filename
+
+	//            set name [file tail $file]
+	//            #puts stderr "********DIR:$dir FILE:$name COMBINED:[file join $dir $name]"
+	//            lappend final_filenames [file join $dir $name]
+	//            cd $startup_dir
+	//        }
+	//        #puts stderr "send pd-l2ork pdtk_open_files_via_unique $final_filenames"
+	//        set outcome [catch {send pd-l2ork pdtk_open_files_via_unique \{$final_filenames\}}]
+	//        #puts stderr "outcome = $outcome"
+	//        if { $outcome == 0 } {
+	//                menu_really_quit
+	//                exit
+	//        }
+	//}
+	//        tk appname $appname
+	//        #puts stderr "this is unique instance [tk appname]"
+}
+
+
+
+function gui_startup(version, apilist, midiapilist, fontname_from_pd, fontweight_from_pd) {
+    console.log("we're starting up...");
+    // # tb: user defined typefaces
+    // our args:
+//    console.log(version);
+//    console.log(apilist);
+//    console.log(fontname);
+
+    // set some global variables
+    pd_myversion = version;
+    pd_apilist =  apilist;
+    pd_midiapilist = midiapilist;
+
+    fontname = fontname_from_pd;
+    fontweight = fontweight_from_pd;
+    pd_fontlist = "";
+    untitled_number = 1; // global variable to increment for each new patch
+
+    // From tcl, not sure if needed...
+       // # on Mac OS X, lower the Pd window to the background so patches open on top
+       // if {$pd_nt == 2} { lower . }
+       // # on Windows, raise the Pd window so that it has focused when launched
+       // if {$pd_nt == 1} { raise . }
+
+//    set fontlist ""
+//        if {[info tclversion] >= 8.5} {find_default_font}
+//        set_base_font $fontname_from_pd $fontweight_from_pd
+//        fit_font_into_metrics
+
+//    # UBUNTU MONO 6 6 8 10 11 14 14 19 22 30
+//        # DEJAVU SANS MONO 6 6 8 9 10 12 14 18 22 29
+
+//#    foreach i {6 6 8 10 11 14 14 19 22 30} {
+//#        set font [format {{%s} %d %s} $fontname_from_pd $i $fontweight_from_pd]
+//#        set pd_fontlist [linsert $pd_fontlist 100000 $font]
+//#        set width0 [font measure  $font x]
+//#        set height0 [lindex [font metrics $font] 5]
+//#        set fontlist [concat $fontlist $i [font measure  $font x] \
+//#                          [lindex [font metrics $font] 5]]
+//#    }
+
+//    set tclpatch [info patchlevel]
+//    if {$tclpatch == "8.3.0" || \
+//            $tclpatch == "8.3.1" || \
+//            $tclpatch == "8.3.2" || \
+//            $tclpatch == "8.3.3" } {
+//        set oldtclversion 1
+//    } else {
+//        set oldtclversion 0
+//    }
+    pdsend("pd init " + enquote(pwd) + " 0 " + font_fixed_metrics);
+
+//    # add the audio and help menus to the Pd window.  We delayed this
+//    # so that we'd know the value of "apilist".
+//    menu_addstd .mbar
+
+//    global pd_nt
+//    if {$pd_nt == 2} {
+//        global pd_macdropped pd_macready
+//        set pd_macready 1
+//        foreach file $pd_macdropped {
+//            pd [concat pd open [pdtk_enquote [file tail $file]] \
+//                    [pdtk_enquote  [file dirname $file]] \;]
+//            menu_doc_open [file dirname $file] [file tail $file]
+//        }
+//    }
+}
+
+
+
+
+
+ 
+
+/*
+    // Some other menu
+    var fooMenu = new nw.Menu();
+
+    // Add to window menu
+    windowMenu.append(new nw.MenuItem({
+        label: 'Foo',
+        submenu: fooMenu
+    }));
+
+    // Foo sub-entry
+    fooMenu.append(new nw.MenuItem({
+        label: 'flub',
+        click: function(){
+            alert('Foo flub');
+        }
+    }));
+
+    // Another Foo sub-entry
+    fooMenu.append(new nw.MenuItem({
+        label: 'bub',
+        click: function(){
+            alert('Foo bub');
+        }
+    }));
+}
+
+
+/*
+function canvas_create_menus(name) {
+    // the "File" menu
+	
+    // The menus are instantiated here for the patch windows.
+    // For the main window, they are created on load, at the 
+    // top of this file.
+    match_linux_wm [list menu $name.m -relief flat]
+    match_linux_wm [list menu $name.m.file  -postcommand [concat pdtk_fixfilemenu $name.m.file] -tearoff $pd_tearoff]
+    $name.m add cascade -label File -menu $name.m.file
+
+    $name.m.file add command -label New -command {menu_new} \
+        -accelerator [accel_munge "Ctrl+n"]
+
+    $name.m.file add command -label Open -command {menu_open} \
+        -accelerator [accel_munge "Ctrl+o"]
+
+	if { $k12_mode == 1 } {
+		$name.m.file add command -label {K12 Demos} -command {menu_k12_open_demos}
+	}
+
+    match_linux_wm [list $name.m.file add separator]
+
+    $name.m.file add command -label Save -command [concat menu_save $name] \
+        -accelerator [accel_munge "Ctrl+s"]
+
+    $name.m.file add command -label "Save as..." \
+        -command [concat menu_saveas $name] \
+        -accelerator [accel_munge "Ctrl+S"]
+	if { $k12_mode == 0 } {
+		match_linux_wm [list $name.m.file add separator]
+
+		# arrange menus according to Apple HIG
+		if {$pd_nt != 2 } {
+			$name.m.file add command -label "Message..." -command {menu_send} \
+				-accelerator [accel_munge "Ctrl+m"]
+			# these are now part of Preferences... on Mac OS X
+		    $name.m.file add command -label Path... \
+		        -command {pd pd start-path-dialog \;} 
+		    $name.m.file add command -label Startup... \
+		        -command {pd pd start-startup-dialog \;} 
+		} else { 
+			# Cmd-m is minimize window on Mac OS X		
+			$name.m.file add command -label "Message..." -command {menu_send}
+			match_linux_wm [list $name.m.file add  separator]
+			$name.m.file add command -label "Make app from patch..." \
+				-command {menu_makeapp 0}
+			$name.m.file add command -label "Make app from folder..." \
+				-command {menu_makeapp 1}
+		}
+		match_linux_wm [list $name.m.file add separator]
+		$name.m.file add command -label "Print..." -command [concat menu_print $name] \
+		    -accelerator [accel_munge "Ctrl+p"]
+	}
+    # update recent files
+    match_linux_wm [list $name.m.file add separator]
+    $name.m.file add command -label "No Recent Files" -state disabled
+    #match_linux_wm [list $name.m.file add separator]
+    #if {[llength $::recentfiles_list] > 0} {
+    #    ::pd_menus::update_recentfiles_menu $name.m.file false
+    #}
+
+	match_linux_wm [list $name.m.file add separator]
+    $name.m.file add command -label Close \
+        -command [concat menu_close $name] \
+        -accelerator [accel_munge "Ctrl+w"]
+
+	if {$pd_nt != 2} {
+		# Mac OS X doesn't put Quit on the File menu
+		$name.m.file add command -label Quit -command {menu_quit} \
+			-accelerator [accel_munge "Ctrl+q"]
+	}
+
+    # the "Edit" menu
+    match_linux_wm [list menu $name.m.edit -postcommand [concat menu_fixeditmenu $name] -tearoff $pd_tearoff]
+    $name.m add cascade -label Edit -menu $name.m.edit
+    
+    $name.m.edit add command -label Undo -command [concat menu_undo $name] \
+        -accelerator [accel_munge "Ctrl+z"]
+
+    $name.m.edit add command -label Redo -command [concat menu_redo $name] \
+        -accelerator [accel_munge "Ctrl+Z"]
+
+    match_linux_wm [list $name.m.edit add separator]
+
+    $name.m.edit add command -label Cut -command [concat menu_cut $name] \
+        -accelerator [accel_munge "Ctrl+x"] -state disabled
+
+    $name.m.edit add command -label Copy -command [concat menu_copy $name] \
+        -accelerator [accel_munge "Ctrl+c"] -state disabled
+
+    $name.m.edit add command -label Paste \
+        -command [concat menu_paste $name] \
+        -accelerator [accel_munge "Ctrl+v"]
+
+	if {!$global_clipboard} {
+		$name.m.edit entryconfigure "Paste" -state disabled
+	} else {
+		$name.m.edit entryconfigure "Paste" -state normal
+	}
+
+    $name.m.edit add command -label Duplicate \
+        -command [concat menu_duplicate $name] \
+        -accelerator [accel_munge "Ctrl+d"]
+
+	if {!$global_selection} {
+		$name.m.edit entryconfigure "Duplicate" -state disabled
+	} else {
+		$name.m.edit entryconfigure "Duplicate" -state normal
+	}
+
+    $name.m.edit add command -label {Select all} \
+        -command [concat menu_selectall $name] \
+        -accelerator [accel_munge "Ctrl+a"]
+
+	if { $k12_mode == 0 } {
+		$name.m.edit add command -label {Reselect} \
+		    -command [concat menu_reselect $name] \
+		    -accelerator "Ctrl+Enter" -state disabled
+	}
+
+    match_linux_wm [list $name.m.edit add separator]
+
+	$name.m.edit add command -label {Tidy Up} \
+		-command [concat menu_tidyup $name] \
+	    -accelerator [accel_munge "Ctrl+y"] -state disabled
+
+	if { $k12_mode == 0 } {
+
+		$name.m.edit add command -label {Bring To Front} \
+			-command [concat popup_action $name 3] \
+		    -accelerator [accel_munge "Ctrl+Up"] -state disabled
+
+		$name.m.edit add command -label {Send To Back} \
+			-command [concat popup_action $name 4] \
+		    -accelerator [accel_munge "Ctrl+Down"] -state disabled
+	}
+
+	match_linux_wm [list $name.m.edit add separator]
+
+	if { $k12_mode == 0 } {
+
+		#if {$pd_nt == 2} { # no key command on Mac OS X, conflicts with standard
+		#	$name.m.edit add command -label {Text Editor} \
+		#		-command [concat menu_texteditor $name]
+		#} else {
+		#	$name.m.edit add command -label {Text Editor} \
+		#		-accelerator [accel_munge "Ctrl+t"] \
+		#		-command [concat menu_texteditor $name]
+		#}
+
+		$name.m.edit add command -label Font \
+		    -command [concat menu_font $name] 
+	}
+
+## jsarlo
+    $name.m.edit add checkbutton -label "Cord Inspector" \
+        -indicatoron false -selectcolor black \
+        -command [concat menu_magicglass $name] \
+        -accelerator [accel_munge "Ctrl+r"]
+
+    #if { $editable == 0 } {
+    #       $name.m.edit entryconfigure "Cord Inspector" -indicatoron false }
+  
+    match_linux_wm [list $name.m.edit add separator]
+## end jsarlo
+
+	$name.m.edit add command -label "Toggle console" \
+	    -accelerator [accel_munge "Ctrl+R"] \
+	    -command [concat .controls.switches.console invoke]
+
+	$name.m.edit add command -label "Clear console" \
+	    -accelerator [accel_munge "Ctrl+L"] \
+	    -command [concat menu_clear_console]
+
+	match_linux_wm [list $name.m.edit add separator]
+
+	if { $k12_mode == 0 } {
+    
+		# Apple, Microsoft, and others put find functions in the Edit menu.
+		$name.m.edit add command -label {Find...} \
+		    -accelerator [accel_munge "Ctrl+f"] \
+		    -command [concat menu_findobject $name] 
+		$name.m.edit add command -label {Find Again} \
+		    -accelerator [accel_munge "Ctrl+g"] \
+		    -command [concat menu_findagain $name] 
+		$name.m.edit add command -label {Find last error} \
+		    -command [concat menu_finderror] 
+
+		match_linux_wm [list $name.m.edit add separator]
+
+		############iemlib##################
+		# instead of "red = #BC3C60" we take "grey85", so there is no difference,
+		# if widget is selected or not.
+
+		$name.m.edit add checkbutton -label "Autotips" \
+		    -indicatoron false -selectcolor black \
+		    -command [concat menu_tooltips $name] \
+		    -accelerator [accel_munge "Ctrl+E"]
+	}
+
+    $name.m.edit add checkbutton -label "Edit mode" \
+        -indicatoron false -selectcolor black \
+        -command [concat menu_editmode $name] \
+        -accelerator [accel_munge "Ctrl+e"]
+    if {$k12_mode == 0} {
+    	match_linux_wm [list $name.m.edit add separator]
+        $name.m.edit add command -label {Preferences...} \
+        -command {::dialog_prefs::open_prefs_dialog .}
+    }
+
+	if { $editable == 1 } {
+    	$name.m.edit entryconfigure "Edit mode" -background "#7dd37d" -foreground black
+	}
+
+	if { $k12_mode == 0 && $autotips == 1 } {
+    	$name.m.edit entryconfigure "Autotips" -background "#7dd37d" -foreground "#dddddd"
+	}
+
+	set ::editmode($name) $editable
+
+	#if { $magicglass == 1 } {
+    #	$name.m.edit entryconfigure "Cord Inspector" -background "#7dd37d"
+	#	menu_magicglass $name
+	#}
+
+    #if { $editable == 0 } {
+    #    $name.m.edit entryconfigure "Edit mode" -indicatoron false 
+    #}
+
+*/
+
+
+
+// From what used to be canvas.js
+
+// Global canvas associative arrays (aka javascript objects)
+var scroll = {},
+    menu = {},
+    canvas_color = {},
+    topmost = {},
+    resize = {},
+    xscrollable = {},
+    yscrollable = {},
+    update_tick = {},
+    drag_tick = {},
+    undo = {},
+    redo = {},
+    font = {},
+    doscroll = {},
+    last_loaded,
+    loaded = {},
+    popup_menu = {};
+
+    var patchwin = {}; // Associative array of patch windows
+
+exports.get_patchwin = function(name) {
+    return patchwin[name];
+}
+
+// stopgap...
+pd_colors['canvas_color'] = "white";
+
+exports.last_loaded = function () {
+    return last_loaded;
+}
+
+// close a canvas window
+
+function gui_canvas_cursor(cid, pd_event_type) {
+    var patch = get_item(cid, "patchsvg");
+    var c;
+    // A quick mapping of events to pointers-- these can
+    // be revised later
+    switch(pd_event_type) {
+        case "cursor_runmode_nothing":
+            c = 'default';
+            break;
+        case "cursor_runmode_clickme":
+            c = 'pointer';
+            break;
+        case "cursor_runmode_thicken":
+            c = 'inherit';
+            break;
+        case "cursor_runmode_addpoint":
+            c = 'cell';
+            break;
+        case "cursor_editmode_nothing":
+            c = 'pointer';
+            break;
+        case "cursor_editmode_connect":
+            c = '-webkit-grabbing';
+            break;
+        case "cursor_editmode_disconnect":
+            c = 'no-drop';
+            break;
+        case "cursor_editmode_resize":
+            c = 'ew-resize';
+            break;
+        case "cursor_editmode_resize_bottom_right":
+            c = 'se-resize';
+            break;
+        case "cursor_scroll":
+            c = 'all-scroll'; 
+            break;
+    }
+    patch.style.cursor = c;
+}
+
+function gui_canvas_sendkey(cid, state, evt, char_code) {
+    pdsend(
+        cid + " key " +
+        state + " " +
+        char_code + " " +
+        (evt.shiftKey ? 1 : 0) + " " +
+        1 + " " +
+        (evt.repeat ? 1 : 0)
+    );
+}
+
+exports.gui_canvas_sendkey = gui_canvas_sendkey;
+
+function title_callback(cid, title) {
+    patchwin[cid].window.document.title = title;
+}
+
+function format_window_title(name, dirty_flag, args, dir) {
+        return name + " " + (dirty_flag ? "*" : "") + args + " - " + dir;
+}
+
+exports.format_window_title = format_window_title;
+
+// This should be used when a file is saved with the name changed (and maybe in other situations)
+function gui_canvas_set_title(cid, name, args, dir, dirty_flag) {
+    var title = format_window_title(name, dirty_flag, args, dir);
+    patchwin[cid].title = title;
+}
+
+// create a new canvas
+// todo: rename parameter "name" to "cid"
+function gui_canvas_new(cid, width, height, geometry, editable, name, dir, dirty_flag, cargs) {
+    gui_post("canvas name is " + name);
+    gui_post("canvas string is " + name);
+    gui_post("canvas dir " + dir);
+    gui_post("canvas dirty_flag is " + dirty_flag);
+    gui_post("canvas cargsis " + cargs);
+    // hack for buggy tcl popups... should go away for node-webkit
+    //reset_ctrl_on_popup_window
+
+    // local vars for window-specific behavior
+    // visibility of menu and scrollbars, plus canvas background
+    scroll[cid] = 1;
+    menu[cid] = 1;
+    // attempt at getting global presets to play
+    // well with local settings.
+    var my_canvas_color = "";
+    //canvas_color[cid] = orange;
+    my_canvas_color = pd_colors['canvas_color'];
+    topmost[cid] = 0;
+    resize[cid] = 1;
+    xscrollable[cid] = 0;
+    yscrollable[cid] = 0;
+    update_tick[cid] = 0;
+    drag_tick[cid] = 0;
+    undo[cid] = false;
+    redo[cid] = false;
+    font[cid] = 10;
+    doscroll[cid] = 0;
+    // geometry is just the x/y screen offset "+xoff+yoff"
+    geometry = geometry.slice(1);   // remove the leading "+"
+    geometry = geometry.split("+"); // x/y screen offset (in pixels)
+    // Keep patches on the visible screen
+    var xpos = Math.min(Number(geometry[0]), window.screen.height - width); 
+    var ypos = Math.min(Number(geometry[1]), window.screen.height - height); 
+    xpos = Math.max(xpos, 0);
+    ypos = Math.max(ypos, 0);
+    var menu_flag;
+    if (menu[cid] == 1) {
+        menu_flag = true;
+    } else {
+        menu_flag = false;
+    }
+    last_loaded = cid;
+    // Not sure why resize and topmost are here-- but we'll pass them on for the time being...
+    patchwin[cid] = nw_create_window(cid, width, height, xpos, ypos, menu_flag,
+        resize[cid], topmost[cid], my_canvas_color, name, dir, dirty_flag, cargs);
+     
+    // initialize variable to reflect that this window has been opened
+    loaded[cid] = 1;
+    //#pdtk_standardkeybindings $cid.c
+}
+
+function canvas_map(name) {
+    console.log("canvas mapping " + name + "...");
+    pdsend(name + " map 1");
+}
+
+exports.canvas_map = canvas_map;
+
+/*    
+    ############iemlib##################
+
+	if { $k12_mode == 0 } {
+
+		# the "Put" menu
+		match_linux_wm [list menu $name.m.put -tearoff $put_tearoff]
+		$name.m add cascade -label Put -menu $name.m.put
+
+		$name.m.put add command -label Object \
+		    -command [concat menu_object $name 0] \
+		    -accelerator [accel_munge "Ctrl+1"]
+
+		$name.m.put add command -label Message \
+		    -command [concat menu_message $name 0] \
+		    -accelerator [accel_munge "Ctrl+2"]
+
+		$name.m.put add command -label Number \
+		    -command [concat menu_floatatom $name 0] \
+		    -accelerator [accel_munge "Ctrl+3"]
+
+		$name.m.put add command -label Symbol \
+		    -command [concat menu_symbolatom $name 0] \
+		    -accelerator [accel_munge "Ctrl+4"]
+
+		$name.m.put add command -label Comment \
+		    -command [concat menu_comment $name 0] \
+		    -accelerator [accel_munge "Ctrl+5"]
+
+		match_linux_wm [list $name.m.put add separator]
+		
+		############iemlib##################
+
+		$name.m.put add command -label Bang \
+		    -command [concat menu_bng $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+b"]
+		
+		$name.m.put add command -label Toggle \
+		    -command [concat menu_toggle $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+t"]
+		
+		$name.m.put add command -label Number2 \
+		    -command [concat menu_numbox $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+n"]
+		
+		$name.m.put add command -label Vslider \
+		    -command [concat menu_vslider $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+v"]
+		
+		$name.m.put add command -label Hslider \
+		    -command [concat menu_hslider $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+h"]
+		
+		$name.m.put add command -label Vradio \
+		    -command [concat menu_vradio $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+d"]
+		
+		$name.m.put add command -label Hradio \
+		    -command [concat menu_hradio $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+i"]
+		
+		$name.m.put add command -label VU \
+		    -command [concat menu_vumeter $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+u"]
+		
+		$name.m.put add command -label Canvas \
+		    -command [concat menu_mycnv $name 0] \
+		    -accelerator [accel_munge "Shift+Ctrl+c"]
+
+		############iemlib##################
+		
+		match_linux_wm [list $name.m.put add separator]
+		
+		$name.m.put add command -label Graph \
+		    -command [concat menu_graph $name] 
+
+		$name.m.put add command -label Array \
+		    -command [concat menu_array $name] 
+
+		# the find menu
+		# Apple, Microsoft, and others put find functions in the Edit menu.
+		# But in order to move these items to the Edit menu, the Find menu
+		# handling needs to be dealt with, including this line in g_canvas.c:
+		#         sys_vgui(".mbar.find delete %d\n", i);
+		# <hans@at.or.at>
+		#match_linux_wm [list menu $name.m.find -tearoff $put_tearoff]
+		#$name.m add cascade -label Find -menu $name.m.find
+		#
+		#$name.m.find add command -label {Find...} \
+		#    -accelerator [accel_munge "Ctrl+f"] \
+		#    -command [concat menu_findobject $name] 
+		#$name.m.find add command -label {Find Again} \
+		#    -accelerator [accel_munge "Ctrl+g"] \
+		#    -command [concat menu_findagain $name] 
+		#$name.m.find add command -label {Find last error} \
+		#    -command [concat menu_finderror] 
+		
+		# the window menu
+		match_linux_wm [list menu $name.m.windows -postcommand \
+			[concat menu_fixwindowmenu $name] -tearoff $pd_tearoff]
+
+		if {$pd_nt == 2} {
+			$name.m.windows add command -label {Minimize} \
+				-command "menu_minimize $name" -accelerator [accel_munge "Ctrl+m"]
+			$name.m.windows add command -label {Zoom} -command "menu_zoom $name"
+		} else {
+			$name.m.windows add command -label "Next Window" -command {menu_raisenextwindow} \
+				-accelerator "Ctrl+PageDown"
+			$name.m.windows add command -label "Previous Window" -command {menu_raisepreviouswindow} \
+				-accelerator "Ctrl+PageUp"
+		}
+		match_linux_wm [list $name.m.windows add separator]
+		$name.m.windows add command -label {parent window}\
+		    -command [concat menu_windowparent $name] 
+		$name.m.windows add command -label {Pd & Console} -command menu_raise_console \
+			-accelerator [accel_munge "Ctrl+;"]
+		match_linux_wm [list $name.m.windows add separator]
+
+		# the audio menu
+		match_linux_wm [list menu $name.m.audio -tearoff $pd_tearoff]
+
+		if {$pd_nt != 2} {
+		    $name.m add cascade -label Windows -menu $name.m.windows
+		    $name.m add cascade -label Media -menu $name.m.audio
+		} else {
+		    $name.m add cascade -label Media -menu $name.m.audio
+		    $name.m add cascade -label Window -menu $name.m.windows
+		    # the MacOS X app menu
+		    menu $name.m.apple -tearoff $pd_tearoff
+		    $name.m add cascade -label "Apple" -menu $name.m.apple 
+		}
+
+		# the "Help" menu
+
+		match_linux_wm [list menu $name.m.help -tearoff $pd_tearoff]
+		$name.m add cascade -label Help -menu $name.m.help
+
+		menu_addstd $name.m
+	}
+
+    # the popup menu
+	match_linux_wm [list menu $name.popup -tearoff false]
+	if { $k12_mode == 0 } {
+		$name.popup add command -label {Properties} \
+		    -command [concat popup_action $name 0]
+		$name.popup add command -label {Open} \
+		    -command [concat popup_action $name 1]
+		$name.popup add command -label {Help} \
+		    -command [concat popup_action $name 2]
+		match_linux_wm [list $name.popup add separator]
+		$name.popup add command -label {To Front} \
+		    -command [concat popup_action $name 3]
+		$name.popup add command -label {To Back} \
+		    -command [concat popup_action $name 4]
+	} else {
+		$name.popup add command -label {Properties} -state disabled \
+		    -command [concat popup_action $name 0] 
+		$name.popup add command -label {Open} -state disabled \
+		    -command [concat popup_action $name 1]
+		$name.popup add command -label {Help} \
+		    -command [concat popup_action $name 2]
+		match_linux_wm [list $name.popup add separator]
+		$name.popup add command -label {To Front} -state disabled \
+		    -command [concat popup_action $name 3]
+		$name.popup add command -label {To Back} -state disabled \
+		    -command [concat popup_action $name 4]
+	}
+
+    # fix menu font size on Windows with tk scaling = 1
+    if {$pd_nt == 1} {
+        $name.m.file configure -font menuFont
+        $name.m.edit configure -font menuFont
+        $name.m.find configure -font menuFont
+        $name.m.put configure -font menuFont
+        $name.m.windows configure -font menuFont
+        $name.m.audio configure -font menuFont
+        $name.m.help configure -font menuFont
+        $name.popup configure -font menuFont
+    }
+
+    # WM protocol
+    wm protocol $name WM_DELETE_WINDOW [concat menu_close $name]
+
+    # bindings.
+    # this is idiotic -- how do you just sense what mod keys are down and
+    # pass them on? I can't find it anywhere.
+    # Here we encode shift as 1, control 2, alt 4, in agreement
+    # with definitions in g_canvas.c.  The third button gets "8" but we don't
+    # bother with modifiers there.
+    # We don't handle multiple clicks yet.
+
+    bind $name.c <Configure> {pdtk_canvas_getscroll %W}
+	#bind $name.c <Configure> {after 100 pdtk_canvas_getscroll_configure %W}
+    bind $name.c <Button> {pdtk_canvas_click %W %x %y %b 0}
+    bind $name.c <Shift-Button> {pdtk_canvas_click %W %x %y %b 1}
+    bind $name.c <Control-Shift-Button> {pdtk_canvas_click %W %x %y %b 3}
+    # Alt key is called Option on the Mac
+    if {$pd_nt == 2} {
+        bind $name.c <Option-Button> {pdtk_canvas_click %W %x %y %b 4}
+        bind $name.c <Option-Shift-Button> {pdtk_canvas_click %W %x %y %b 5}
+        bind $name.c <Option-Control-Button> {pdtk_canvas_click %W %x %y %b 6}
+        bind $name.c <Mod1-Button> {pdtk_canvas_click %W %x %y %b 6}
+        bind $name.c <Option-Control-Shift-Button> \
+            {pdtk_canvas_click %W %x %y %b 7}
+    } else {
+        bind $name.c <Alt-Button> {pdtk_canvas_click %W %x %y %b 4}
+        bind $name.c <Alt-Shift-Button> {pdtk_canvas_click %W %x %y %b 5}
+        bind $name.c <Alt-Control-Button> {pdtk_canvas_click %W %x %y %b 6}
+        bind $name.c <Alt-Control-Shift-Button> \
+            {pdtk_canvas_click %W %x %y %b 7}
+    }
+    # button 2 is the right button on Mac; on other platforms it's button 3.
+    if {$pd_nt == 2} {
+        bind $name.c <Button-2> {pdtk_canvas_rightclick %W %x %y %b}
+        bind $name.c <Control-Button> {pdtk_canvas_rightclick %W %x %y %b}
+    } else {
+        bind $name.c <Button-3> {pdtk_canvas_rightclick %W %x %y %b}
+        bind $name.c <Control-Button> {pdtk_canvas_click %W %x %y %b 2}
+    }
+    #on linux, button 2 "pastes" from the X windows clipboard
+    if {$pd_nt == 0} {
+        bind $name.c <Button-2> {pdtk_canvas_middleclick %W %x %y %b 0;}
+    }
+
+    bind $name.c <ButtonRelease> {pdtk_canvas_mouseup %W %x %y %b}
+    bind $name.c <Control-Key> {pdtk_canvas_ctrlkey %W %K 0}
+    bind $name.c <Control-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
+    #    bind $name.c <Mod1-Key> {puts stderr [concat mod1 %W %K %A]}
+    if {$pd_nt == 2} {
+        bind $name.c <Mod1-Key> {pdtk_canvas_ctrlkey %W %K 0}
+        bind $name.c <Mod1-Shift-Key> {pdtk_canvas_ctrlkey %W %K 1}
+        bind $name.c <Mod1-BackSpace> {pdtk_canvas_sendkey %W 1 %K %A 0 1 %t}
+        bind $name.c <Mod1-quoteleft> {menu_raisenextwindow}
+    } else {
+        bind $name.c <Control-Next>   {menu_raisenextwindow}
+        bind $name.c <Control-Prior>  {menu_raisepreviouswindow} ;# needs Tcl/Tk 8.5
+	}
+    bind $name.c <Key> {pdtk_canvas_sendkey %W 1 %K %A 0 1 %t}
+    bind $name.c <Shift-Key> {pdtk_canvas_sendkey %W 1 %K %A 1 1 %t}
+    bind $name.c <KeyRelease> {pdtk_canvas_sendkey %W 0 %K %A 0 1 %t}
+    bind $name.c <Motion> {pdtk_canvas_motion %W %x %y 0}
+    bind $name.c <Shift-Motion> {pdtk_canvas_motion %W %x %y 1}
+    bind $name.c <Control-Motion> {pdtk_canvas_motion %W %x %y 2}
+    bind $name.c <Control-Shift-Motion> {pdtk_canvas_motion %W %x %y 3}
+
+    # canvas bindings ---------------------------------------------------------
+    # just for tooltips right now
+	#$name.c bind all <Enter> "puts stderr {%x %y}"
+    #$name.c bind inlet <Enter> "pdtk_canvas_enteritem %W %x %y inlet %t"
+    #$name.c bind outlet <Enter> "pdtk_canvas_enteritem %W %x %y outlet %t"
+    #$name.c bind text <Enter> "pdtk_canvas_enteritem %W %x %y text %t"
+    #$name.c bind inlet <Leave> "pdtk_canvas_leaveitem %W inlet 0"
+    #$name.c bind outlet <Leave> "pdtk_canvas_leaveitem %W outlet 0"
+    #$name.c bind text <Leave> "pdtk_canvas_leaveitem %W text 0"
+	
+    if {$pd_nt == 2} {
+        bind $name.c <Option-Motion> {pdtk_canvas_motion %W %x %y 4}
+    } else { 
+        bind $name.c <Alt-Motion> {pdtk_canvas_motion %W %x %y 4}
+    }
+    bind $name.c <Map> {pdtk_canvas_map %W}
+    bind $name.c <Unmap> {pdtk_canvas_unmap %W}
+
+    switch $pd_nt { 0 {
+        bind $name.c <Button-4>  "pdtk_canvas_scroll $name.c y -1"
+        bind $name.c <Button-5>  "pdtk_canvas_scroll $name.c y +1"
+        bind $name.c <Shift-Button-4>  "pdtk_canvas_scroll $name.c x -1"
+        bind $name.c <Shift-Button-5>  "pdtk_canvas_scroll $name.c x +1"
+		#if { $k12_mode == 0 } {
+		#    bind $name.c <Control-Button-4>  "pdtk_zoom $name 1"
+		#    bind $name.c <Control-Button-5>  "pdtk_zoom $name -1"
+		#}
+    } default {
+        bind $name.c  <MouseWheel> \
+            "pdtk_canvas_scroll $name.c y \[expr -abs(%D)/%D\]"
+        bind $name.c  <Shift-MouseWheel> \
+            "pdtk_canvas_scroll $name.c x \[expr -abs(%D)/%D\]"
+    }}
+
+    #dnd bindtarget $name.c text/uri-list <Drop> { pdtk_canvas_makeobjs $name %D %x %y }
+    after idle [list dnd bindtarget $name text/uri-list <Drop> { foreach file %D {open_file $file} }]
+
+    #    puts stderr "all done"
+    #   after 1 [concat raise $name]
+    set pdtk_canvas_mouseup_name ""
+
+	bind $name <FocusIn> "menu_fixeditmenu $name"
+	bind $name <FocusOut> "pdtk_canvas_leaveitem $name.c"
+	if { $k12_mode == 1 } { pd [concat $name tooltips 1 \;] }
+    after idle [concat focus $name.c]
+
+	if { $k12_mode == 1 && $k12_saveas_on_new == 1 } {
+		after 1000 [concat pdtk_k12_saveas_on_new $name]
+	}
+
+	set ::scroll_on($name) 0
+	set ::hit_scrollbar($name) 0
+	#set ::scroll_was_cursor($name) 0
+	set ::last_scroll_x($name) 0
+	set ::last_scroll_y($name) 0
+	set ::canvaswidth($name) 0
+	set ::canvasheight($name) 0
+
+
+/*
+	if { $k12_mode == 1 } {
+		# K-12 menu
+
+		match_linux_wm [list frame $name.k12frame]
+		pack $name.k12frame -side left -fill y
+
+		# ---------------------------------- EDIT BUTTON -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.edit -relief flat]
+		if {$editable==1} {
+			match_linux_wm [list button $name.k12frame.edit.b -image i.edit \
+				-command [concat menu_editmode $name]]
+		} else {
+			match_linux_wm [list button $name.k12frame.edit.b -image i.perform \
+				-command [concat menu_editmode $name]]
+		}
+		pack $name.k12frame.edit.b -side left -expand 1 -padx 1 -pady 0
+		setTooltip $name.k12frame.edit.b "Toggle between building and playing an instrument"
+		pdtk_k12panel_standardkeybindings $name.k12frame.edit.b
+		bind $name.k12frame.edit.b <Key> [list pdtk_canvas_sendkey $name.c 1 %K %A 0 1 %t]
+    	bind $name.k12frame.edit.b <KeyRelease> [list pdtk_canvas_sendkey $name.c 0 %K %A 0 1 %t]
+
+		# ---------------------------------- DATA VS SOUND BUTTONS ----------------------------------
+		match_linux_wm [list frame $name.k12frame.datasound -relief flat]
+		match_linux_wm [list button $name.k12frame.datasound.data -text "DATA" -image i.data_on -command [concat pdtk_k12_show_data_icons $name]]
+		match_linux_wm [list button $name.k12frame.datasound.sound -text "SOUND" -image i.sound -command [concat pdtk_k12_show_sound_icons $name]]
+		pack $name.k12frame.datasound.data $name.k12frame.datasound.sound -side left -pady 1 -padx 1 -expand 0
+		setTooltip $name.k12frame.datasound.data "Show DATA objects"
+		setTooltip $name.k12frame.datasound.sound "Show SOUND objects"
+		pdtk_k12panel_standardkeybindings $name.k12frame.datasound.data
+		pdtk_k12panel_standardkeybindings $name.k12frame.datasound.sound
+
+		# ---------------------------------- MESSAGES LABEL -----------------------------------------
+
+		#match_linux_wm [list frame $name.k12frame.msgs -relief flat]
+		#match_linux_wm [list label $name.k12frame.msgs.label -relief flat -text "MESSAGES"]
+		#pack $name.k12frame.msgs.label -fill x -pady 0 -padx 1
+
+		# ---------------------------------- WII -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.wii -relief flat]
+		match_linux_wm [list button $name.k12frame.wii.b_wii_connect -image i.wii_connect \
+			-command [concat put_K12_objects $name wii_connect]]
+		match_linux_wm [list button $name.k12frame.wii.b_wii_buttons -image i.wii_buttons \
+			-command [concat put_K12_objects $name wii_buttons]]
+		match_linux_wm [list button $name.k12frame.wii.b_wii_hit -image i.wii_hit \
+			-command [concat put_K12_objects $name wii_hit]]
+		match_linux_wm [list button $name.k12frame.wii.b_wii_accelerometer -image i.wii_accelerometer \
+			-command [concat put_K12_objects $name wii_accelerometer]]
+		match_linux_wm [list button $name.k12frame.wii.b_wii_speed_xry -image i.wii_speed_xry \
+			-command [concat put_K12_objects $name wii_speed_xry]]
+		pack $name.k12frame.wii.b_wii_connect $name.k12frame.wii.b_wii_buttons $name.k12frame.wii.b_wii_hit $name.k12frame.wii.b_wii_accelerometer $name.k12frame.wii.b_wii_speed_xry -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.wii.b_wii_connect "Wiimote Connect: Use this to connect wiimote to the computer"
+		setTooltip $name.k12frame.wii.b_wii_buttons "Wiimote Buttons: Use this to select which Wiimote button should activate objects connected to this object"
+		setTooltip $name.k12frame.wii.b_wii_hit "Wiimote Hit: Use this to detect when the wiimote has been shaken like a mallet"
+		setTooltip $name.k12frame.wii.b_wii_accelerometer "Wiimote Accelerometer: Use this to monitor Wiimotes acceleration across X, Y, and Z axes"
+		setTooltip $name.k12frame.wii.b_wii_speed_xry "Wiimote Speed X, Roll, Y: Use this to detect how quickly is Wiimote moving across individual axes x, roll, and y (requires motion plus)"
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii.b_wii_connect
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii.b_wii_buttons
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii.b_wii_hit
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii.b_wii_accelerometer
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii.b_wii_speed_xry
+
+		# ---------------------------------- WII2 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.wii2 -relief flat]
+		match_linux_wm [list button $name.k12frame.wii2.b_wii_speed -image i.wii_speed \
+			-command [concat put_K12_objects $name wii_speed]]
+		match_linux_wm [list button $name.k12frame.wii2.b_wii_nunchuk_buttons -image i.wii_nunchuk_buttons \
+			-command [concat put_K12_objects $name wii_nunchuk_buttons]]
+		match_linux_wm [list button $name.k12frame.wii2.b_wii_nunchuk_hit -image i.wii_nunchuk_hit \
+			-command [concat put_K12_objects $name wii_nunchuk_hit]]
+		match_linux_wm [list button $name.k12frame.wii2.b_wii_nunchuk_accelerometer -image i.wii_nunchuk_accelerometer \
+			-command [concat put_K12_objects $name wii_nunchuk_accelerometer]]
+		match_linux_wm [list button $name.k12frame.wii2.b_wii_nunchuk_stick -image i.wii_nunchuk_stick \
+			-command [concat put_K12_objects $name wii_nunchuk_stick]]
+		pack $name.k12frame.wii2.b_wii_speed $name.k12frame.wii2.b_wii_nunchuk_buttons $name.k12frame.wii2.b_wii_nunchuk_hit $name.k12frame.wii2.b_wii_nunchuk_accelerometer $name.k12frame.wii2.b_wii_nunchuk_stick -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.wii2.b_wii_speed "Wiimote Speed: Use this to detect how quickly is Wiimote moving (requires motion plus)"
+		setTooltip $name.k12frame.wii2.b_wii_nunchuk_buttons "Wiimote Nunchuk Buttons: Use this to select which Nunchuk button should activate objects connected to this object (requires nunchuk extension)"
+		setTooltip $name.k12frame.wii2.b_wii_nunchuk_hit "Wiimote Nunchuk Hit: Use this to detect when the wiimote has been shaken like a mallet (requires nunchuk extension)"
+		setTooltip $name.k12frame.wii2.b_wii_nunchuk_accelerometer "Wiimote Nunchuk Accelerometer: Use this to monitor Nunchuk acceleration across X, Y, and Z axes (requires nunchuk extension)"
+		setTooltip $name.k12frame.wii2.b_wii_nunchuk_stick "Wiimote Nunchuk stick: Use this to monitor Nunchuk stick motion across X and Y axes (requires nunchuk extension)"
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii2.b_wii_speed
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii2.b_wii_nunchuk_buttons
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii2.b_wii_nunchuk_hit
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii2.b_wii_nunchuk_accelerometer
+		pdtk_k12panel_standardkeybindings $name.k12frame.wii2.b_wii_nunchuk_stick
+
+		# ---------------------------------- ARDUINO -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.arduino -relief flat]
+		match_linux_wm [list button $name.k12frame.arduino.b_sarcduino -image i.sarcduino \
+			-command [concat put_K12_objects $name sarcduino_connect]]
+		match_linux_wm [list button $name.k12frame.arduino.b_sarcduino_digital -image i.sarcduino_digital \
+			-command [concat put_K12_objects $name sarcduino_digital]]
+		match_linux_wm [list button $name.k12frame.arduino.b_sarcduino_analog -image i.sarcduino_analog \
+			-command [concat put_K12_objects $name sarcduino_analog]]
+		match_linux_wm [list button $name.k12frame.arduino.b_sarcduino_hit -image i.sarcduino_hit \
+			-command [concat put_K12_objects $name sarcduino_hit]]
+		match_linux_wm [list button $name.k12frame.arduino.b_sarcduino_piezo -image i.sarcduino_piezo \
+			-command [concat put_K12_objects $name sarcduino_piezo]]
+		pack $name.k12frame.arduino.b_sarcduino $name.k12frame.arduino.b_sarcduino_digital $name.k12frame.arduino.b_sarcduino_analog $name.k12frame.arduino.b_sarcduino_hit $name.k12frame.arduino.b_sarcduino_piezo -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.arduino.b_sarcduino "Arduino Connect: Use this to arduino to the computer"
+		setTooltip $name.k12frame.arduino.b_sarcduino_digital "Arduino Digital: Use this to detect on/off states of a digital sensor"
+		setTooltip $name.k12frame.arduino.b_sarcduino_analog "Arduino Analog: Use this to monitor analog sensor speed"
+		setTooltip $name.k12frame.arduino.b_sarcduino_hit "Arduino Hit: Use this to detect when the arduino analog sensor data has rapidly changed"
+		setTooltip $name.k12frame.arduino.b_sarcduino_piezo "Arduino Piezo: Use this to analyze data coming from a piezo microphone sensor"
+		pdtk_k12panel_standardkeybindings $name.k12frame.arduino.b_sarcduino
+		pdtk_k12panel_standardkeybindings $name.k12frame.arduino.b_sarcduino_digital
+		pdtk_k12panel_standardkeybindings $name.k12frame.arduino.b_sarcduino_analog
+		pdtk_k12panel_standardkeybindings $name.k12frame.arduino.b_sarcduino_hit
+		pdtk_k12panel_standardkeybindings $name.k12frame.arduino.b_sarcduino_piezo
+
+		# ---------------------------------- RPI & MATH ROW 1 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.math_1 -relief flat]
+		#match_linux_wm [list button $name.k12frame.math_1.b_sarcduino_net -image i.sarcduino_net \
+		#	-command [concat put_K12_objects $name sarcduino_net]]
+		match_linux_wm [list button $name.k12frame.math_1.b_rpi_digital -image i.raspberry_digital \
+			-command [concat put_K12_objects $name raspberrypi_digital]]
+		match_linux_wm [list button $name.k12frame.math_1.b_rpi_analog_out -image i.raspberry_analog_out \
+			-command [concat put_K12_objects $name raspberrypi_analog_out]]
+		match_linux_wm [list button $name.k12frame.math_1.b_rpi_analog_in -image i.raspberry_analog_in \
+			-command [concat put_K12_objects $name raspberrypi_analog_in]]
+		match_linux_wm [list button $name.k12frame.math_1.b_math_number -image i.math_number \
+			-command [concat put_K12_objects $name math_number]]
+		match_linux_wm [list button $name.k12frame.math_1.b_math_netsend -image i.math_netsend \
+			-command [concat put_K12_objects $name math_netsend]]
+		pack $name.k12frame.math_1.b_rpi_digital $name.k12frame.math_1.b_rpi_analog_out $name.k12frame.math_1.b_rpi_analog_in $name.k12frame.math_1.b_math_number $name.k12frame.math_1.b_math_netsend -side left -expand 0 -padx 1 -pady 1
+		#setTooltip $name.k12frame.math_1.b_sarcduino_net "Arduino Net: Use this to retrieve data from arduino devices connected via network"
+		setTooltip $name.k12frame.math_1.b_rpi_digital "RaspberryPi Digital: Use this to read from or write to GPIO pins in digital format"
+		setTooltip $name.k12frame.math_1.b_rpi_analog_out "RaspberryPi Analog Out: Use this to write to GPIO pins in analog format using PWM"
+		setTooltip $name.k12frame.math_1.b_rpi_analog_in "RaspberryPi Analog In: Use this to read from RaspberryPi LOP Shield's analog inputs"
+		setTooltip $name.k12frame.math_1.b_math_number "Number: Use this to assign a value to other objects"
+		setTooltip $name.k12frame.math_1.b_math_netsend "Netsend: Use this to send data over network to another computer"
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_1.b_rpi_digital
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_1.b_rpi_analog_out
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_1.b_rpi_analog_in
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_1.b_math_number
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_1.b_math_netsend
+
+		# ---------------------------------- MATH ROW 2 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.math_2 -relief flat]
+		match_linux_wm [list button $name.k12frame.math_2.b_math_netreceive -image i.math_netreceive \
+			-command [concat put_K12_objects $name math_netreceive]]
+		match_linux_wm [list button $name.k12frame.math_2.b_math_tag -image i.math_tag \
+			-command [concat put_K12_objects $name math_tag]]
+		match_linux_wm [list button $name.k12frame.math_2.b_math_routebytag -image i.math_routebytag \
+			-command [concat put_K12_objects $name math_routebytag]]
+		match_linux_wm [list button $name.k12frame.math_2.b_math_add -image i.math_add \
+			-command [concat put_K12_objects $name math_add]]
+		match_linux_wm [list button $name.k12frame.math_2.b_math_subtract -image i.math_subtract \
+			-command [concat put_K12_objects $name math_subtract]]
+		pack $name.k12frame.math_2.b_math_netreceive $name.k12frame.math_2.b_math_tag $name.k12frame.math_2.b_math_routebytag $name.k12frame.math_2.b_math_add $name.k12frame.math_2.b_math_subtract -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.math_2.b_math_netreceive "Netreceive: Use this to receive data from another computer over network"
+		setTooltip $name.k12frame.math_2.b_math_tag "Tag: Use this to tag data to be sent over network"
+		setTooltip $name.k12frame.math_2.b_math_routebytag "Route By Tag: Use this to filter incoming network data by tag"
+		setTooltip $name.k12frame.math_2.b_math_add "Add: Use this to add two values"
+		setTooltip $name.k12frame.math_2.b_math_subtract "Subtract: Use this to subtract two values"
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_2.b_math_netreceive
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_2.b_math_tag
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_2.b_math_routebytag
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_2.b_math_add
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_2.b_math_subtract
+
+		# ---------------------------------- MATH ROW 3 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.math_3 -relief flat]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_multiply -image i.math_multiply \
+			-command [concat put_K12_objects $name math_multiply]]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_divide -image i.math_divide \
+			-command [concat put_K12_objects $name math_divide]]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_random -image i.math_random \
+			-command [concat put_K12_objects $name math_random]]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_average -image i.math_average \
+			-command [concat put_K12_objects $name math_average]]
+		match_linux_wm [list button $name.k12frame.math_3.b_math_scale -image i.math_scale \
+			-command [concat put_K12_objects $name math_scale]]
+		pack $name.k12frame.math_3.b_math_multiply $name.k12frame.math_3.b_math_divide $name.k12frame.math_3.b_math_random $name.k12frame.math_3.b_math_average $name.k12frame.math_3.b_math_scale -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.math_3.b_math_multiply "Multiply: Use this to multiply two values"
+		setTooltip $name.k12frame.math_3.b_math_divide "Divide: Use this to divide two values"
+		setTooltip $name.k12frame.math_3.b_math_random "Random: Use this to generate random numbers"
+		setTooltip $name.k12frame.math_3.b_math_average "Average: Use this to calculate average from a stream of numbers"
+		setTooltip $name.k12frame.math_3.b_math_scale "Scale: Use this to scale incoming values to a new range and direction"
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_3.b_math_multiply
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_3.b_math_divide
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_3.b_math_random
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_3.b_math_average
+		pdtk_k12panel_standardkeybindings $name.k12frame.math_3.b_math_scale
+
+		# ---------------------------------- LOGIC -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.logic -relief flat]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_compare -image i.logic_compare \
+			-command [concat put_K12_objects $name logic_compare]]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_mapper -image i.logic_mapper \
+			-command [concat put_K12_objects $name logic_mapper]]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_metronome -image i.logic_metronome \
+			-command [concat put_K12_objects $name logic_metronome]]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_counter -image i.logic_counter \
+			-command [concat put_K12_objects $name logic_counter]]
+		match_linux_wm [list button $name.k12frame.logic.b_logic_sequencer -image i.logic_sequencer \
+			-command [concat put_K12_objects $name logic_sequencer]]
+		pack $name.k12frame.logic.b_logic_compare $name.k12frame.logic.b_logic_mapper $name.k12frame.logic.b_logic_metronome $name.k12frame.logic.b_logic_counter $name.k12frame.logic.b_logic_sequencer -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.logic.b_logic_compare "Compare: Use this to compare two values"
+		setTooltip $name.k12frame.logic.b_logic_mapper "Mapper: Use this to map one value to two different but related values"
+		setTooltip $name.k12frame.logic.b_logic_metronome "Metronome: Use this to create a steady pulse"
+		setTooltip $name.k12frame.logic.b_logic_counter "Counter: Use this to count events"
+		setTooltip $name.k12frame.logic.b_logic_sequencer "Sequencer: Use this to map values to MIDI pitches"
+		pdtk_k12panel_standardkeybindings $name.k12frame.logic.b_logic_compare
+		pdtk_k12panel_standardkeybindings $name.k12frame.logic.b_logic_mapper
+		pdtk_k12panel_standardkeybindings $name.k12frame.logic.b_logic_metronome
+		pdtk_k12panel_standardkeybindings $name.k12frame.logic.b_logic_counter
+		pdtk_k12panel_standardkeybindings $name.k12frame.logic.b_logic_sequencer
+
+		# ---------------------------------- OTHER -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.other -relief flat]
+		match_linux_wm [list button $name.k12frame.other.b_preset -image i.preset \
+			-command [concat put_K12_objects $name preset]] 
+		match_linux_wm [list button $name.k12frame.other.b_comment -image i.comment \
+			-command [concat menu_comment $name 1]]
+		pack $name.k12frame.other.b_preset $name.k12frame.other.b_comment -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.other.b_preset "Preset: Use this to store and recall up to four different states of your instrument"
+		setTooltip $name.k12frame.other.b_comment "Comment: Use this to post comments inside your patch"
+		pdtk_k12panel_standardkeybindings $name.k12frame.other.b_preset
+		pdtk_k12panel_standardkeybindings $name.k12frame.other.b_comment
+
+		# ---------------------------------- SOUND LABEL -----------------------------------------
+		#match_linux_wm [list frame $name.k12frame.sound -relief flat]
+		#match_linux_wm [list label $name.k12frame.sound.label -relief flat -text "SOUND"]
+		#pack $name.k12frame.sound.label -fill x -pady 0 -padx 1
+
+		# ---------------------------------- SIGNAL ROW 1 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.signal_1 -relief flat]
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_microphone -image i.signal_microphone \
+			-command [concat put_K12_objects $name signal_microphone]]
+
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_netsend -image i.signal_netsend \
+			-command [concat put_K12_objects $name signal_netsend]]
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_netreceive -image i.signal_netreceive \
+			-command [concat put_K12_objects $name signal_netreceive]]
+
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_sampler -image i.signal_sampler \
+			-command [concat put_K12_objects $name signal_sampler]]
+		match_linux_wm [list button $name.k12frame.signal_1.b_signal_player -image i.signal_player \
+			-command [concat put_K12_objects $name signal_player]]
+		pack $name.k12frame.signal_1.b_signal_microphone $name.k12frame.signal_1.b_signal_netsend $name.k12frame.signal_1.b_signal_netreceive $name.k12frame.signal_1.b_signal_sampler $name.k12frame.signal_1.b_signal_player -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.signal_1.b_signal_microphone "Microphone: Use this to capture and monitor microphone input"
+		setTooltip $name.k12frame.signal_1.b_signal_netsend "Netsend Sound: Use this to send your sound over network to another computer"
+		setTooltip $name.k12frame.signal_1.b_signal_netreceive "Netreceive Sound: Use this to receive sound from another computer over network"
+		setTooltip $name.k12frame.signal_1.b_signal_sampler "Sampler: Use this to record audio from microphone and play it back in various ways"
+		setTooltip $name.k12frame.signal_1.b_signal_player "Player: Use this to play WAV files in various ways"
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_1.b_signal_microphone
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_1.b_signal_netsend
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_1.b_signal_netreceive
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_1.b_signal_sampler
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_1.b_signal_player
+
+		# ---------------------------------- SIGNAL ROW 2 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.signal_2 -relief flat]
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_sine -image i.signal_sine \
+			-command [concat put_K12_objects $name signal_sine]]
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_saw -image i.signal_saw \
+			-command [concat put_K12_objects $name signal_saw]]
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_square -image i.signal_square \
+			-command [concat put_K12_objects $name signal_square]]
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_triangle -image i.signal_triangle \
+			-command [concat put_K12_objects $name signal_triangle]]
+		match_linux_wm [list button $name.k12frame.signal_2.b_signal_envelope -image i.signal_envelope \
+			-command [concat put_K12_objects $name signal_envelope]]
+		pack $name.k12frame.signal_2.b_signal_sine $name.k12frame.signal_2.b_signal_saw $name.k12frame.signal_2.b_signal_square $name.k12frame.signal_2.b_signal_triangle $name.k12frame.signal_2.b_signal_envelope -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.signal_2.b_signal_sine "Sine: Use this to generate sine tone"
+		setTooltip $name.k12frame.signal_2.b_signal_saw "Sawtooth: Use this to generate sawtooth tone"
+		setTooltip $name.k12frame.signal_2.b_signal_square "Square: Use this to generate square tone"
+		setTooltip $name.k12frame.signal_2.b_signal_triangle "Triangle: Use this to generate triangle tone"
+		setTooltip $name.k12frame.signal_2.b_signal_envelope "Envelope: Use this to shape sound loudness"
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_2.b_signal_sine
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_2.b_signal_saw
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_2.b_signal_square
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_2.b_signal_triangle
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_2.b_signal_envelope
+
+		# ---------------------------------- SIGNAL ROW 3 -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.signal_3 -relief flat]
+		match_linux_wm [list button $name.k12frame.signal_3.b_signal_noise -image i.signal_noise \
+			-command [concat put_K12_objects $name signal_noise]]
+		match_linux_wm [list button $name.k12frame.signal_3.b_signal_pink -image i.signal_pink \
+			-command [concat put_K12_objects $name signal_pink]]
+		match_linux_wm [list button $name.k12frame.signal_3.b_signal_add -image i.signal_add \
+			-command [concat put_K12_objects $name signal_add]]
+		match_linux_wm [list button $name.k12frame.signal_3.b_signal_multiply -image i.signal_multiply \
+			-command [concat put_K12_objects $name signal_multiply]]
+		pack $name.k12frame.signal_3.b_signal_noise $name.k12frame.signal_3.b_signal_pink $name.k12frame.signal_3.b_signal_add $name.k12frame.signal_3.b_signal_multiply -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.signal_3.b_signal_noise "Noise: Use this to generate white (harsh) noise"
+		setTooltip $name.k12frame.signal_3.b_signal_pink "Pink: Use this to generate pink (softer) noise"
+		setTooltip $name.k12frame.signal_3.b_signal_add "Signal Add: Use this to add two sounds (signals)"
+		setTooltip $name.k12frame.signal_3.b_signal_multiply "Signal Multiply: Use this to multiply two sounds (signals)"
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_3.b_signal_noise 
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_3.b_signal_pink
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_3.b_signal_add
+		pdtk_k12panel_standardkeybindings $name.k12frame.signal_3.b_signal_multiply
+
+		# ---------------------------------- INSTRUMENTS -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.instr -relief flat]
+		match_linux_wm [list button $name.k12frame.instr.b_instr_short1 -image i.instr_short1 \
+			-command [concat put_K12_objects $name instr_short1]]
+		match_linux_wm [list button $name.k12frame.instr.b_instr_short2 -image i.instr_short2 \
+			-command [concat put_K12_objects $name instr_short2]]
+		match_linux_wm [list button $name.k12frame.instr.b_instr_sustained1 -image i.instr_sustained1 \
+			-command [concat put_K12_objects $name instr_sustained1]]
+		match_linux_wm [list button $name.k12frame.instr.b_instr_sustained2 -image i.instr_sustained2 \
+			-command [concat put_K12_objects $name instr_sustained2]]
+		pack $name.k12frame.instr.b_instr_short1 $name.k12frame.instr.b_instr_short2 $name.k12frame.instr.b_instr_sustained1 $name.k12frame.instr.b_instr_sustained2 -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.instr.b_instr_short1 "Bass Drum: Use this to produce short sounds like a single bass drum hit"
+		setTooltip $name.k12frame.instr.b_instr_short2 "Snare Drum: Use this to produce short sounds like a single snare drum hit"
+		setTooltip $name.k12frame.instr.b_instr_sustained1 "Air Instrument: Use this to produce long sustained sound like a sound of a woodwind instrument"
+		setTooltip $name.k12frame.instr.b_instr_sustained2 "Brass Instrument: Use this to produce long sustained sound like a sound of brass instrument"
+		pdtk_k12panel_standardkeybindings $name.k12frame.instr.b_instr_short1
+		pdtk_k12panel_standardkeybindings $name.k12frame.instr.b_instr_short2
+		pdtk_k12panel_standardkeybindings $name.k12frame.instr.b_instr_sustained1
+		pdtk_k12panel_standardkeybindings $name.k12frame.instr.b_instr_sustained2
+
+		# ---------------------------------- F/X -----------------------------------------
+		match_linux_wm [list frame $name.k12frame.fx -relief flat]
+		match_linux_wm [list button $name.k12frame.fx.b_fx_filter -image i.fx_filter \
+			-command [concat put_K12_objects $name fx_filter]]
+		match_linux_wm [list button $name.k12frame.fx.b_fx_multitap -image i.fx_multitap \
+			-command [concat put_K12_objects $name fx_multitap]]
+		match_linux_wm [list button $name.k12frame.fx.b_fx_reverb -image i.fx_reverb \
+			-command [concat put_K12_objects $name fx_reverb]]
+		pack $name.k12frame.fx.b_fx_filter $name.k12frame.fx.b_fx_multitap $name.k12frame.fx.b_fx_reverb -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.fx.b_fx_filter "Filter: Use this to make sound appear muffled or brighter"
+		setTooltip $name.k12frame.fx.b_fx_multitap "Echo: Use this to make sound echo"
+		setTooltip $name.k12frame.fx.b_fx_reverb "Reverb: Use this to make sound appear as if it is being played in a large space"
+		pdtk_k12panel_standardkeybindings $name.k12frame.fx.b_fx_filter
+		pdtk_k12panel_standardkeybindings $name.k12frame.fx.b_fx_multitap
+		pdtk_k12panel_standardkeybindings $name.k12frame.fx.b_fx_reverb
+
+		# ---------------------------------- OUTPUT/OTHER -----------------------------------------
+
+		match_linux_wm [list frame $name.k12frame.output -relief flat]
+		match_linux_wm [list button $name.k12frame.output.b_output -image i.output \
+			-command [concat put_K12_objects $name output]] 	
+		pack $name.k12frame.output.b_output -side left -expand 0 -padx 1 -pady 1
+		setTooltip $name.k12frame.output.b_output "Output: Use this to send audio from computer into speakers"
+		pdtk_k12panel_standardkeybindings $name.k12frame.output.b_output
+
+		# ---------------------------------------- NOW PACK THEM ALL -----------------------------------------
+		pack $name.k12frame.edit $name.k12frame.datasound $name.k12frame.wii $name.k12frame.wii2 $name.k12frame.arduino $name.k12frame.math_1 $name.k12frame.math_2 $name.k12frame.math_3 $name.k12frame.logic $name.k12frame.other -side top -expand 0 -fill x
+	}
+
+	if { $k12_mode == 0 } {
+    	wm minsize $name 50 20
+	} else {
+		wm minsize $name 580 407
+	}
+*/
+
+
+
+// net stuff
+var net = require('net');
+
+var HOST = '127.0.0.1';
+var PORT;
+var client;
+
+exports.set_port = function (port_no) {
+    PORT = port_no;
+}
+
+
+function connect () {
+    client = new net.Socket();
+    client.setNoDelay(true);
+    client.connect(PORT, HOST, function() {
+        console.log('CONNECTED TO: ' + HOST + ':' + PORT);
+        // Write a test message to the socket as soon as the client is connected,
+        //the server will receive it as message from the client. This can be removed
+        // once it's obvious it works...
+        client.write('I am Chuck Norris!;');
+    });
+}
+
+exports.connect = connect;
+
+// Add a 'data' event handler for the client socket
+// data parameter is what the server sent to this socket
+
+// Pd can send us different types of data:
+// 1) The old style tcl commands with "\n" at end (or "\\\n" for continuation)
+// 2) new style commands: "nw selector { param1: 'value', param2: 42, etc. };\n"
+// 3) raw javascript (not implemented yet)
+// Below we separate the wheat from chaff, eval'ing the new commands and just
+// printing the old ones in blue to the console
+
+// This wheat/chaff setup has the side-effect of stripping all newline
+// characters from pd->gui messages.  Because of this a newline is added in
+// gui_post.  Once all the old tcl messages are removed we can parse solely
+// on ";", and the side effect can be removed.
+
+// can be removed.
+
+var nextCmd = ""; // Build up a command across lines (or buffers)
+
+function init_socket_events () {
+	client.on('data', function(data) {
+	//    console.log('DATA: ' + data);
+	      var dataStr = data.toString('utf-8');
+//	      console.log("The whole buffer is " + dataStr);
+	      var arr = dataStr.split("\n");
+	      var arrLen = arr.length;
+	      var cmdHeader = 0;
+	      for (var i = 0; i < arrLen; i++) {
+		  var prefix = arr[i].substring(0, 2);
+		  if (prefix == 'nw' || prefix == 'nn') {
+		      nextCmd = arr[i].substring(3);
+//	              console.log("nextCmd is " + nextCmd);
+		      cmdHeader = 1;
+		  } else if (cmdHeader) {
+		      nextCmd += arr[i];
+	//              console.log("2nd part of cmd is " + arr[i]);
+		  } else {
+//		      gui_post(arr[i], "blue");
+		  }
+		  // check if we end with a semicolon followed by a newline
+		  if (nextCmd.slice(-1) === ";" && nextCmd.slice(-2) !== '\\') {
+// console.log("raw cmd is: " + nextCmd);
+		      nextCmd = nextCmd.replace(/\n/g, "\\n");
+//		      nextCmd = nextCmd.replace(/'/g, "\\\'");
+		      var selector = nextCmd.slice(0, nextCmd.indexOf(" "));
+		      var args = nextCmd.slice(selector.length + 1, -1);
+//                      console.log(selector + '(' + args + ');');
+                      eval(selector + '(' + args + ');');
+		      nextCmd = "";
+		      cmdHeader = 0;
+		  }
+
+	      }
+	    // Close the client socket completely
+	//    client.destroy();
+	//    console.log('Connection closed');
+
+	 });
+
+	// Add a 'close' event handler for the client socket
+	 client.on('close', function() {
+	     //console.log('Connection closed');
+             //client.destroy();
+             nw_app_quit(); // set a timeout here if you need to debug
+	 });
+}
+
+exports.init_socket_events = init_socket_events;
+
+// Send commands to Pd
+function pdsend(string) {
+    client.write(string + ';');
+    // for now, let's reprint the outgoing string to the pdwindow
+//    gui_post(string + ';', "red");
+}
+
+exports.pdsend = pdsend;
+
+// Send a ping message back to Pd
+function gui_ping() {
+    pdsend("pd ping");
+}
+
+// Send a message to Pd to ping the "watchdog", which is a program
+// that supervises Pd when run with -rt flag on some OSes
+function gui_ping_watchdog() {
+    pdsend("pd watchdog");
+}
+
+// Schedule watchdog pings for the life of the GUI
+function gui_watchdog() {
+    setInterval(gui_ping_watchdog, 2000);
+}
+
+// Text drawing stuff
+
+// Here's the main API, structured to make an easier (inital) transition
+// from tcl/tk to javascript
+
+// Gobj container, so that all drawn items are contained in a <g> which
+// handles displacing (and in the future, possibly clicks and other events)
+function get_gobj(cid, object) {
+    return patchwin[cid].window.document.getElementById(object + 'gobj');
+}
+
+// Convenience function to get a drawn item of gobj
+function get_item(cid,item_id) {
+    return patchwin[cid].window.document.getElementById(item_id);
+}
+
+// Similar to [canvas create] in tk
+function create_item(cid,type,args) {
+    var item = patchwin[cid].window.document.createElementNS('http://www.w3.org/2000/svg', type);
+    if (args !== null) {
+        configure_item(item, args);
+    }
+    return item;
+}
+
+// Similar to [canvas itemconfigure], without the need for a reference to the canvas
+function configure_item(item, attributes) {
+    // draw_vis from g_template sends attributes as a ['attr1',val1, 'attr2', val2, etc.] array,
+    // so we check for that here
+    if (Array.isArray(attributes)) {
+        // we should check to make sure length is even here...
+        for (var i = 0; i < attributes.length; i+=2) {
+            item.setAttributeNS(null, attributes[i], attributes[i+1]); 
+        }
+    } else {
+        for (var attr in attributes) {
+            if (attributes.hasOwnProperty(attr)) {
+                item.setAttributeNS(null, attr, attributes[attr]);
+            }
+        }
+    }
+}
+
+// Most of these map either to pd.tk procs, or in some cases Tk canvas subcommands
+function gui_text_create_gobj(cid, tag, xpos, ypos) {
+    var svg = get_item(cid, "patchsvg"); // "patchsvg" is id for the svg in the DOM
+    // Put objects on half-pixels to make them crisp (look in to the difference between
+    // this and the object-rendering 'crispEdges' attribute)
+    xpos += 0.5;
+    ypos += 0.5;
+    var transform_string = 'translate(' + xpos + ',' + ypos + ')';
+    var g = create_item(cid, 'g', {
+            id: tag + 'gobj',
+            transform: transform_string
+    });
+    svg.appendChild(g);
+    return g;
+}
+
+function gui_text_drawborder(cid, tag, isbroken, x1, y1, x2, y2) {
+    var g = get_gobj(cid, tag);
+    // isbroken means either
+    //     a) the object couldn't create or
+    //     b) the box is empty
+    var rect = create_item(cid, 'rect', {
+        width: x2 - x1,
+        height: y2 - y1,
+        stroke: 'black',
+        fill: 'none',
+        'shape-rendering': 'optimizeSpeed',
+        id: tag + 'border',
+        class: (isbroken ? 'broken_border' : '')
+    });
+    g.appendChild(rect);
+}
+
+function gui_canvas_drawio(cid, parenttag, tag, x1, y1, x2, y2, basex, basey) {
+    var g = get_gobj(cid, parenttag);
+    // probably need to add an id for xlets below
+    var rect = create_item(cid, 'rect', {
+        width: x2 - x1,
+        height: y2 - y1,
+        x: x1 - basex,
+        y: y1 - basey,
+        class: 'xlet'
+    });
+    g.appendChild(rect);
+}
+
+function gui_message_drawborder(cid,tag,width,height) {
+    var g = get_gobj(cid, tag);
+    var p_array = [0,0,
+                   width+4, 0,
+                   width, 4,
+                   width, height-4,
+                   width+4, height,
+                   0, height,
+                   0, 0];
+    var polygon = create_item(cid, 'polygon', {
+        points: p_array.join(),
+        fill: 'none',
+        stroke: 'black',
+        'stroke-width': 1,
+        id: tag + 'border'
+    });
+    g.appendChild(polygon);
+}
+
+function gui_message_flash(cid, tag, state) {
+    var b = get_item(cid, tag + 'border');
+    var w;
+    if (state != 0) { w = 4; } else { w = 1; }
+    configure_item(b, { 'stroke-width': w });
+}
+
+function gui_message_redraw_border(cid,tag,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14) {
+    var b = get_item(cid, tag + 'border');
+    var p_array = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14];
+    configure_item(b, {
+        points: p_array.join(" "),
+    });
+}
+
+
+function gui_atom_drawborder(cid,tag,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12) {
+    var p_array = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12];
+    var g = get_gobj(cid, tag);
+    var polygon = create_item(cid, 'polygon', {
+        points: p_array.join(" "),
+        fill: 'none',
+        stroke: 'gray',
+        'stroke-width': 1,
+        id: tag + 'border'
+    });
+    g.appendChild(polygon);
+}
+
+// draw a patch cord
+function gui_canvas_line(cid,tag,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) {
+    var d_array = ['M', p1 + 0.5, p2 + 0.5,
+                   'Q', p3 + 0.5, p4 + 0.5, p5 + 0.5, p6 + 0.5,
+                   'Q', p7 + 0.5, p8 + 0.5 ,p9 + 0.5, p10 + 0.5];
+    var svg = get_item(cid, "patchsvg");
+    var path = create_item(cid, 'path', {
+        d: d_array.join(" "),
+        fill: 'none',
+        stroke: 'gray',
+        'stroke-width': 1,
+        'shape-rendering': 'optimizeSpeed',
+        id: tag
+    });
+    svg.appendChild(path);
+}
+
+function gui_canvas_select_line(cid, tag) {
+    var line = get_item(cid, tag);
+    if (line !== null) {
+        configure_item(line, { class: 'selected_line' });
+    } else {
+        gui_post("gui_canvas_select_line: can't find line");
+    }
+}
+
+function gui_canvas_deselect_line(cid, tag) {
+    var line = get_item(cid, tag);
+    if (line !== null) {
+        configure_item(line, { class: '' });
+    } else {
+        gui_post("gui_canvas_select_line: can't find line");
+    }
+}
+
+// rename to erase_line (or at least standardize with gobj_erase)
+function gui_canvas_delete_line(cid, tag) {
+    var line = get_item(cid, tag);
+    if (line !== null) {
+        line.parentNode.removeChild(line);
+    } else {
+        gui_post("canvas_delete_line: something is fucked up because the line doesn't exist");
+    }
+}
+
+function gui_canvas_updateline(cid,tag,x1,y1,x2,y2,yoff) {
+//    console.log("cord tag in gui_canvas_updateline is " + tag);
+    var halfx = parseInt((x2 - x1)/2);
+    var halfy = parseInt((y2 - y1)/2);
+    var d_array = ['M',x1,y1,
+                  'Q',x1,y1+yoff,x1+halfx,y1+halfy,
+                  'Q',x2,y2-yoff,x2,y2];
+//    gui_post(d_array.toString());
+    var cord = get_item(cid, tag);
+    configure_item(cord, { d: d_array.join(" ") });
+}
+
+function gui_text_new(canvasname, myname, type, isselected, x, y, text, font) {
+//    gui_post("font is " + font);
+
+    var g = get_gobj(canvasname, myname);
+    var svg_text = create_item(canvasname, 'text', {
+        // x and y are fudge factors. Text on the tk canvas used an anchor
+        // at the top-right corner of the text's bbox.  SVG uses the baseline.
+        // There's probably a programmatic way to do this, but for now-- fudge factors
+        // based on the DejaVu Sans Mono font. :)
+        x: 1,
+        y: 13,
+        'shape-rendering': 'optimizeSpeed',
+        'font-size': font + 'px',
+        id: myname + 'text'
+    });
+
+    // find a way to abstract away the canvas array and the DOM here
+    var text_node = patchwin[canvasname].window.document.createTextNode(text);
+    svg_text.appendChild(text_node);
+    if (g !== null) {
+        g.appendChild(svg_text);
+    } else {
+        gui_post("gui_text_new: can't find parent group");
+    }
+
+    if (isselected) {
+        gui_text_select(canvasname, myname);
+    }
+}
+
+function gui_gobj_erase(cid, tag) {
+    var g = get_gobj(cid, tag);
+    if (g !== null) {
+        g.parentNode.removeChild(g);
+    } else {
+        gui_post("gui_gobj_erase: gobj " + tag + " didn't exist in the first place!");
+    }
+}
+
+function gui_text_set (cid, tag, text) {
+    var svg_text = get_item(cid, tag + 'text');
+    if (svg_text !== null) {
+        svg_text.textContent = text;
+    } else {
+        gui_post("gui_text_set: svg_text doesn't exist!");
+    }
+}
+
+// Not sure whether this is even used anymore
+function gui_text_redraw_border(cid, tag, x1, y1, x2, y2) {
+    var b = get_item(cid, tag + 'border');
+    configure_item(b, {
+        width: x2 - x1,
+        height: y2 - y1
+    });
+}
+
+function gui_text_select(cid, tag) {
+    var g = get_gobj(cid, tag);
+    var b = get_item(cid, tag + 'border');
+    if (g !== null) {
+        configure_item(g, { class: 'selected' });
+    } else {
+        console.log("text_select: something wrong with group tag: " + tag);
+    }
+    if (b !== null) {
+        configure_item(b, { class: 'selected_border' });
+    }
+}
+
+function gui_text_deselect(cid, tag) {
+    gui_post("deselecting text with tag..." + tag);
+    var gobj = get_gobj(cid, tag)
+    var border = get_item(cid, tag + 'border');
+    if (gobj !== null) {
+        configure_item(gobj, { class: "" });
+    } else {
+        console.log("text_deselect: something wrong with tag: " + tag + 'gobj');
+    }
+    if (border !== null) {
+        configure_item(border, { class: "" });
+    } else {
+        console.log("text_select: something wrong with tag: " + tag + 'border');
+    }
+}
+
+function gui_text_select_color(cid, tag) {
+// nb: this is handled in css now
+return;
+    var rect = get_item(cid, tag + 'border');
+    if (rect !== null) {
+        configure_item(rect, {
+            stroke: 'blue',
+            'stroke-width': 1,
+            'stroke-dasharray': 'none'
+        });
+    } else {
+        gui_post("select_color: something wrong with tag: " + tag + 'border');
+    }
+}
+
+function gui_canvas_displace_withtag(name, dx, dy) {
+    var pwin = patchwin[name];
+    var ol = pwin.window.document.getElementsByClassName('selected');
+    for (var i = 0; i < ol.length; i++) {
+        var new_tx = dx + ol[i].transform.baseVal.getItem(0).matrix.e; 
+        var new_ty = dy + ol[i].transform.baseVal.getItem(0).matrix.f; 
+        ol[i].setAttributeNS(null, 'transform',
+            'translate(' + new_tx + ',' + new_ty + ')');
+    }
+}
+
+function gui_create_selection_rectangle(cid, x1, y1, x2, y2) {
+    var svg = get_item(cid, "patchsvg");
+    var points_array = [x1 + 0.5, y1 + 0.5,
+                        x2 + 0.5, y1 + 0.5,
+                        x2 + 0.5, y2 + 0.5,
+                        x1 + 0.5, y2 + 0.5
+    ];
+    var rect = create_item(cid, 'polygon', {
+        points: points_array.join(" "),
+        fill: 'none',
+        stroke: 'black',
+        'shape-rendering': 'optimizeSpeed',
+        'stroke-width': 1,
+        id: 'selection_rectangle',
+        display: 'inline' 
+    });
+    svg.appendChild(rect);
+}
+
+function gui_move_selection_rectangle(cid, x1, y1, x2, y2) {
+    var points_array = [x1 + 0.5, y1 + 0.5, x2 + 0.5, y1 + 0.5,
+                  x2 + 0.5, y2 + 0.5, x1 + 0.5, y2 + 0.5];
+    var rect = get_item(cid, 'selection_rectangle');
+    configure_item(rect, { points: points_array });
+}
+
+function gui_hide_selection_rectangle(cid) {
+//    gui_post("hiding selection");
+    var rect = get_item(cid, 'selection_rectangle');
+    rect.parentElement.removeChild(rect);
+}
+
+// iemguis
+
+function gui_create_bng(cid, tag, cx, cy, radius) {
+    var g = get_gobj(cid, tag);
+    var circle = create_item(cid, 'circle', {
+        cx: cx,
+        cy: cy,
+        r: radius,
+        fill: 'none',
+        stroke: 'black',
+        'stroke-width': 1,
+        id: tag + 'button'
+    });
+    g.appendChild(circle);
+}
+
+function gui_bng_update(cid, tag, flashed) {
+    var button = get_item(cid, tag + 'button');
+    var fill = flashed ? 'red' : 'none';
+    configure_item(button, { fill: fill });
+}
+
+function gui_create_toggle(cid, tag, color, width, p1,p2,p3,p4,p5,p6,p7,p8,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var points_array = [p1 - basex, p2 - basey,
+                        p3 - basex, p4 - basey
+    ];
+    var cross1 = create_item(cid, 'polyline', {
+        points: points_array.join(" "),
+        stroke: color,
+        fill: 'none',
+        id: tag + 'cross1',
+        display: 'none',
+        'stroke-width': width
+    });
+
+    points_array = [p5 - basex, p6 - basey,
+                    p7 - basex, p8 - basey
+    ];
+    var cross2 = create_item(cid, 'polyline', {
+        points: points_array.join(" "),
+        stroke: color,
+        fill: 'none',
+        id: tag + 'cross2',
+        display: 'none',
+        'stroke-width': width
+    });
+    g.appendChild(cross1);
+    g.appendChild(cross2);
+}
+
+function gui_toggle_update(cid, tag, state) {
+    var cross1 = get_item(cid, tag + 'cross1');
+    var cross2 = get_item(cid, tag + 'cross2');
+    if (state) {
+        configure_item(cross1, { display: 'inline' });
+        configure_item(cross2, { display: 'inline' });
+    } else {
+        configure_item(cross1, { display: 'none' });
+        configure_item(cross2, { display: 'none' });
+    }
+}
+
+// Todo: send fewer parameters from c
+function gui_create_numbox(cid,tag,bgcolor,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,basex,basey,half) {
+    // numbox doesn't have a standard iemgui border, so we must create its gobj manually
+    var g = gui_text_create_gobj(cid, tag, basex, basey)
+    var data_array = ['M', p1 - basex, p2 - basey,
+                      'L', p3 - basex, p4 - basey,
+                           p5 - basex, p6 - basey,
+                           p7 - basex, p8 - basey,
+                           p9 - basex, p10 - basey,
+                      'z',
+                      'L', basex - basex, basey - basey,
+                           half, half,
+                           p9 - basex, p10 - basey];
+    var border = create_item(cid, 'path', {
+        d: data_array.join(" "),
+        fill: bgcolor,
+        stroke: 'black',
+        'stroke-width': 1,
+        id: (tag + 'border')
+    });
+    g.appendChild(border);
+}
+
+function gui_numbox_drawtext(cid,tag,text,color,xpos,ypos,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var svg_text = create_item(cid, 'text', {
+        x: xpos - basex,
+        y: ypos - basey + 5,
+        'font-size': font,
+        id: tag + 'text'
+    });
+
+    var text_node = patchwin[cid].window.document.createTextNode(text);
+    svg_text.appendChild(text_node);
+    g.appendChild(svg_text);
+}
+
+function gui_create_slider(cid,tag,color,p1,p2,p3,p4,basex, basey) {
+    var g = get_gobj(cid, tag);
+    var indicator = create_item(cid, 'line', {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey,
+        stroke: color,
+        'stroke-width': 3,
+        fill: 'none',
+        id: tag + 'indicator'
+    });
+    g.appendChild(indicator);
+
+}
+
+function gui_slider_update(cid,tag,p1,p2,p3,p4,basex,basey) {
+    var indicator = get_item(cid, tag + 'indicator');
+    configure_item(indicator, {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey
+    });
+}
+
+function gui_create_radio(cid,tag,p1,p2,p3,p4,i,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var cell = create_item(cid, 'line', {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey,
+        // stroke is just black for now
+        stroke: 'black',
+        'stroke-width': 1,
+        fill: 'none',
+        id: tag + 'cell_' + i
+    });
+    g.appendChild(cell);
+}
+
+function gui_create_radio_buttons(cid,tag,color,p1,p2,p3,p4,basex,basey,i,state) {
+    var g = get_gobj(cid, tag);
+    var b = create_item(cid, 'rect', {
+        x: p1 - basex,
+        y: p2 -basey,
+        width: p3 - p1,
+        height: p4 - p2,
+        stroke: color,
+        fill: color,
+        id: tag + 'button_' + i,
+        display: state ? 'inline' : 'none'
+    });
+    g.appendChild(b);
+}
+
+function gui_radio_update(cid,tag,prev,next) {
+    var prev = get_item(cid, tag + 'button_' + prev);
+    var next = get_item(cid, tag + 'button_' + next);
+    configure_item(prev, { display: 'none' });
+    configure_item(next, { display: 'inline' });
+}
+
+function gui_create_vumeter_text(cid,tag,color,xpos,ypos,text,index,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var svg_text = create_item(cid, 'text', {
+        x: xpos - basex,
+        y: ypos - basey,
+        //  font-size: font);
+        id: tag + 'text_' + index
+    });
+
+    var text_node = patchwin[cid].window.document.createTextNode(text);
+    svg_text.appendChild(text_node);
+    g.appendChild(svg_text);
+}
+
+function gui_create_vumeter_steps(cid,tag,color,p1,p2,p3,p4,width,index,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var l = create_item(cid, 'line', {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey,
+        stroke: color,
+        'stroke-width': width,
+        'id': tag + 'led_' + i
+    });
+    g.appendChild(l);
+}
+
+function gui_create_vumeter_rect(cid,tag,color,p1,p2,p3,p4,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var rect = create_item(cid, 'rect', {
+        x: p1 - basex,
+        y: p2 - basey,
+        width: p3 - p1,
+        height: p4 + 1 - p2,
+        stroke: color,
+        fill: color,
+        id: tag + 'rect'
+    });
+    g.appendChild(rect);
+}
+
+function gui_create_vumeter_peak(cid,tag,color,p1,p2,p3,p4,width,basex,basey) {
+    var g = get_gobj(cid, tag);
+    var line = create_item(cid, 'line', {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey,
+        stroke: color,
+        'stroke-width': width,
+        id: tag + 'peak'
+    });
+    g.appendChild(line);
+}
+
+// change tag from "rect" to "rms"
+function gui_vumeter_update_rms(cid,tag,p1,p2,p3,p4,basex,basey) {
+    rect = get_item(cid, tag + 'rect');
+    configure_item(rect, {
+        x: p1 - basex,
+        y: p2 - basey,
+        width: p3 - p1,
+        height: p4 - p2 + 1
+    });
+}
+
+function gui_vumeter_update_peak(cid,tag,color,p1,p2,p3,p4,basex,basey) {
+    line = get_item(cid, tag + 'peak');
+    configure_item(line, {
+        x1: p1 - basex,
+        y1: p2 - basey,
+        x2: p3 - basex,
+        y2: p4 - basey,
+        stroke: color
+    });
+}
+
+// Think about merging with gui_text_drawborder
+function gui_iemgui_drawborder(cid, tag, bgcolor, x1, y1, x2, y2) {
+    var g = get_gobj(cid, tag);
+    var rect = create_item(cid, 'rect', {
+        width: x2 - x1,
+        height: y2 - y1,
+        fill: bgcolor,
+        stroke: 'black',
+        'shape-rendering': 'optimizeSpeed',
+        'stroke-width': 1,
+        id: tag + 'border'
+    });
+    g.appendChild(rect);
+}
+
+
+function gui_create_mycanvas(cid,tag,color,x1,y1,x2_vis,y2_vis,x2,y2) {
+    var rect_vis = create_item(cid,'rect', {
+        width: x2_vis - x1,
+        height: y2_vis - y1,
+        fill: color,
+        stroke: color
+        }
+    );
+
+    // we use a drag_handle-- unlike a 'border' it takes
+    // the same color as the visible rectangle when deselected
+    var rect = create_item(cid,'rect', {
+        width: x2 - x1,
+        height: y2 - y1,
+        fill: color,
+        stroke: color,
+        id: tag + 'drag_handle'
+        }
+    );
+    var g = get_gobj(cid,tag);
+    g.appendChild(rect_vis);
+    g.appendChild(rect);
+}
+
+function gui_mycanvas_select_color(cid,tag,color) {
+    item = get_item(cid,tag + 'drag_handle');
+    configure_item(item, {stroke: color});
+}
+
+// This should be merged with gui_create_gobj somehow
+function gui_create_scalar(cid, tag, isselected, t1, t2, t3, t4, t5, t6) {
+    var svg = get_item(cid, "patchsvg"); // "patchsvg" is id for the svg in the DOM
+    // Normally put objects on half-pixels to make them crisp, but if we create a
+    // scalar in an object box we already did that. This unfortunately creates a 0.5
+    // pix discrepancy between scalars created in object boxes and ones created with
+    // [append].  Think about just using shape-rendering value of 'crispEdges' in the
+    // places where it matters...
+    t5 += 0.5;
+    t6 += 0.5;
+    var matrix = [t1,t2,t3,t4,t5,t6];
+    var transform_string = 'matrix(' + matrix.join() + ')';
+    var g = create_item(cid, 'g', {
+            id: tag + 'gobj',
+            transform: transform_string,
+            class: (isselected ? 'selected' : '')
+    });
+    // Let's make a selection rect... but we can't make it
+    // a child of the gobj group because the getrect fn gives
+    // us a bbox in the canvas coord system
+    var selection_rect = create_item(cid, 'rect', {
+        id: tag + 'selection_rect',
+        display: 'none',
+        fill: 'none',
+        'pointer-events': 'none'
+    });
+    g.appendChild(selection_rect);
+    svg.appendChild(g);
+    gui_post("made a scalar...");
+    return g;
+}
+
+function gui_scalar_erase(cid, tag) {
+    var g = get_gobj(cid, tag);
+    g.parentNode.removeChild(g);
+    // selection rect...
+//    var sr = get_item(cid, tag + 'selection_rect');
+//    sr.parentNode.removeChild(sr);
+}
+
+function gui_scalar_draw_select_rect(cid, tag, state, x1, y1, x2, y2, basex, basey) {
+    // This is unnecessarily complex-- the select rect is a child of the parent
+    // scalar group, but in the initial Tkpath API the rect was free-standing.  This
+    // means all the coordinate parameters are in the screen position. But we need
+    // the coords relative to the scalar's x/y-- hence we subtract the scalar's basex/basey
+    // from the coords below
+    //gui_post("drawselectrect: " + x1 + " " + y1 + " " + x2 + " " + y2 + " " + basex + " " + basey);
+    var r = get_item(cid, tag + 'selection_rect');
+    configure_item(r, {
+        display: (state ? 'inline' : 'none'),
+        x: (x1 - basex),
+        y: (y1 - basey),
+        width: x2 - x1,
+        height: y2 - y1,
+        stroke: 'blue',
+    });
+}
+
+function gui_create_scalar_group(cid, tag, parent_tag, attr_array) {
+    var parent = get_item(cid, parent_tag);
+    if (attr_array === undefined) {
+        attr_array = [];
+    }
+    attr_array.push("id", tag);
+    var g = create_item(cid, 'g', attr_array);
+    parent.appendChild(g);
+    gui_post("made an innder scalar group");
+    return g; 
+}
+
+function gui_scalar_configure_gobj(cid, tag, isselected, t1, t2, t3, t4, t5, t6) {
+    var gobj = get_gobj(cid, tag);
+    var matrix = [t1,t2,t3,t4,t5,t6];
+    var transform_string = 'matrix(' + matrix.join() + ')';
+    configure_item(gobj, { transform: transform_string });
+}
+
+function gui_draw_vis(cid, type, coords, attr_array, tag_array) {
+    gui_post("inside gui_draw_vis");
+    for(var i = 0; i < arguments.length; i++) {
+        gui_post("arg1 is " + arguments[i]);
+    } 
+    gui_post("coords is " + coords);
+    gui_post("coords is array: " + Array.isArray(coords));
+    gui_post("arguments[2] is " + arguments[2]);
+    gui_post("type of coords is " + typeof coords);
+    gui_post("type of arguments[2] is " + typeof arguments[2]);
+    gui_post("arguments[2] is array: " + Array.isArray(arguments[2]));
+    var g = get_item(cid, tag_array[0]);
+    if (g !== null) {
+        gui_post("our parent exists.");
+    } else {
+        gui_post("our parent doe not exists.");
+    }
+    //var ca = coords;
+    switch(type) {
+        case 'rect':
+            attr_array.push('x', coords[0]);
+            attr_array.push('y', coords[1]);
+            attr_array.push('width', coords[2]);
+            attr_array.push('height',coords[3]);
+            break;
+        // we originally treated circle as an ellipse because we were manually changing the
+        // aspect ratio using coordinates (with glist_xtopixels/ytopixels). That can probably
+        // be changed now that we're applying that in the parent group transform...
+        case 'circle':
+            type = 'ellipse';
+        case 'ellipse':
+            attr_array.push('cx',coords[0]);
+            attr_array.push('cy',coords[1]);
+            attr_array.push('rx',coords[2]);
+            attr_array.push('ry',coords[3]);
+            break;
+        case 'line':
+            attr_array.push('x1',coords[0]); 
+            attr_array.push('y1',coords[1]);
+            attr_array.push('x2',coords[2]);
+            attr_array.push('y2',coords[3]);
+            break;
+        case 'polyline':
+        case 'polygon':
+            attr_array.push('points',coords.join(" "));
+            break;
+        case 'path':
+            attr_array.push('d',coords.join(" ")); 
+            break;
+    }
+    attr_array.push('id', tag_array[1]);
+    gui_post("create is " + tag_array[1]);
+    var item = create_item(cid, type, attr_array);
+    if (item !== null) {
+        gui_post("we got create.");
+    } else {
+        gui_post("we doe not got creat.");
+    }
+    g.appendChild(item);
+}
+
+function gui_draw_erase_item(cid, tag) {
+    gui_post("baleting... tag is " + tag);
+    var item = get_item(cid, tag);
+    if (item !== null) {
+        item.parentNode.removeChild(item);
+    } else {
+        gui_post("uh oh... gui_draw_erase_item couldn't find the item...");
+    }
+}
+
+// Configure one attr/val pair at a time, received from Pd
+function gui_draw_configure(cid, tag, attr, val) {
+    var item = get_item(cid, tag);
+    var obj = {};
+    if (Array.isArray(val)) {
+        obj[attr] = val.join(" ");
+    } else {
+        // strings or numbers
+        obj[attr] = val;
+    }
+    configure_item(item, obj);
+}
+
+// Configure multiple attr/val pairs (this should be merged with gui_draw_configure at some point
+function gui_draw_configure_all(cid, tag, attr_array) {
+    var item = get_item(cid, tag);
+    configure_item(item, attr_array);
+}
+
+function add_popup(cid, popup) {
+    popup_menu[cid] = popup;    
+}
+
+exports.add_popup = add_popup;
+
+function gui_canvas_popup(cid, xpos, ypos, canprop, canopen, isobject) {
+    gui_post("canvas_popup called... " + JSON.stringify(arguments));
+    // Set the global popup x/y so they can be retrieved by the relevant doc's event handler
+    popup_coords[0] = xpos;
+    popup_coords[1] = ypos;
+    popup_menu[cid].items[0].enabled = canprop;
+    popup_menu[cid].items[1].enabled = canopen;
+
+    // We'll use "isobject" to enable/disable "To Front" and "To Back"
+    //isobject;
+    
+    // Get page coords for top of window, in case we're scrolled
+    var left = patchwin[cid].window.document.body.scrollLeft;
+    var top = patchwin[cid].window.document.body.scrollTop;
+
+    popup_menu[cid].popup(xpos - left, ypos - top);
+}
+
+function popup_action(cid, index) {
+    pdsend(cid + " done-popup " + index + " " + popup_coords.join(" "));
+}
+
+exports.popup_action = popup_action;
+
+
+// Graphs and Arrays
+
+function gui_graph_drawborder(cid, tag, x1, y1, x2, y2) {
+    var svgelem = get_item(cid, 'patchsvg');
+    var b = create_item(cid, 'rect', {
+        x: x1,
+        y: y1,
+        width: x2 - x1,
+        height: y2 - y1,
+        stroke: 'black',
+        fill: 'none',
+        id: tag
+    });
+    svgelem.appendChild(b);
+}
+
+function gui_graph_deleteborder(cid, tag) {
+    var b = get_item(cid, tag);
+    b.parentNode.removeChild(b);
+}
+
+function gui_canvas_drawredrect(cid, x1, y1, x2, y2) {
+    var svgelem = get_item(cid, 'patchsvg');
+    var b = create_item(cid, 'rect', {
+        x: x1,
+        y: y1,
+        width: x2 - x1,
+        height: y2 - y1,
+        stroke: 'red',
+        id: 'GOP'
+    });
+    svgelem.appendChild(b);
+}
+
+function gui_canvas_deleteredrect(cid) {
+    var r = get_item(cid, 'GOP');
+    r.parentNode.removeChild(r);
+}
+
+// Magic Glass (aka Cord Inspector)
+
+// For clarity, this probably shouldn't be a gobj.  Also, it might be easier to
+// make it a div that lives on top of the patchsvg
+function gui_create_cord_inspector(cid) {
+    var g = get_gobj(cid, 'cord_inspector');
+    var ci_rect = create_item(cid, 'rect', { id: 'cord_inspector_rect' });
+    var ci_poly = create_item(cid, 'polygon', { id: 'cord_inspector_polygon' });
+    var ci_text = create_item(cid, 'text', { id: 'cord_inspector_text' });
+    var text_node = patchwin[cid].window.document.createTextNode('');
+    ci_text.appendChild(text_node);
+    g.appendChild(ci_rect);
+    g.appendChild(ci_poly);
+    g.appendChild(ci_text);
+}
+
+function gui_cord_inspector_update(cid, text, basex, basey, bg_size, y1, y2, moved) {
+    var gobj = get_gobj(cid, 'cord_inspector');
+    gobj.setAttributeNS(null, 'transform',
+            'translate(' + (basex + 10.5) + ',' + (basey + 0.5) + ')');
+    gobj.setAttributeNS(null, 'pointer-events', 'none');
+    var rect = get_item(cid, 'cord_inspector_rect');
+    var poly = get_item(cid, 'cord_inspector_polygon');
+    var svg_text = get_item(cid, 'cord_inspector_text');
+    // Lots of fudge factors here, tailored to the current default font size
+    configure_item(rect, {
+        x: 13,
+        y: y1 - basey,
+        width: bg_size - basex,
+        height: y2 - basey + 10,
+        fill: 'none',
+        stroke: 'black'
+    });
+    var polypoints_array = [8,0,13,5,13,-5];
+     configure_item(poly, {
+        points: polypoints_array.join()
+    });
+    configure_item(svg_text, {
+        x: 20,
+        y: 5,
+        fill: 'black'
+    });
+    // set the text
+    svg_text.textContent = text;
+}
+
+function gui_erase_cord_inspector(cid) {
+    var ci = get_gobj(cid, 'cord_inspector');
+    if (ci !== null) {
+        ci.parentNode.removeChild(ci);
+    } else {
+        gui_post("oops, trying to erase cord inspector that doesn't exist!");
+    }
+}
+
+function gui_cord_inspector_flash(cid) {
+    var ct = get_item(cid, 'cord_inspector_text');
+    if (ct !== null) {
+        configure_item(ct, { fill: 'red' });
+    } else {
+        gui_post("gui_cord_inspector_flash: trying to flash a non-existent cord inspector!");
+    }
+}
+
+
+// Window functions
+
+function gui_raise_window(cid) {
+    patchwin[cid].focus();
+}
diff --git a/pd/nw/todo.txt b/pd/nw/todo.txt
new file mode 100644
index 000000000..9946e7abf
--- /dev/null
+++ b/pd/nw/todo.txt
@@ -0,0 +1,80 @@
+Problems to put off until all (or most) sys_vgui calls are eliminated:
+1) gui-side parser inside -- pdgui.js.  Currently we're splitting on newlines so we can separate
+   gui_vmess from sys_vgui calls.  This makes it very difficult to handle multi-line msg and text
+   boxes.
+2) Semicolons -- currently the parser can't tell the difference between semicolons inside symbols
+   and semicolons that end statements.  Again, this will be easy to solve once we eliminate sys_gui.
+
+HTML5 which may not be standard yet:
+1) mouse.pageX/pageY -- exist in Chromium but maybe not in FF et al.
+2) svg 'overflow' attribute -- probably doesn't work in other browsers
+3) document.body.scrollTop (might be Chromium-specific, not sure)
+3) document.body.scrollLeft (might be Chromium-specific, not sure)
+
+Node-webkit stuff:
+1) popup API
+2) new window API
+3) window menus
+4) (probably) present working directory
+5) command line argv
+
+Everything else:
+* packaging as app, setting correct appname, etc
+* get -unique to work (relied on tcl [send] command)
+* check if patch windows with screenposition (0,0) get stuck underneath Ubuntu/OSX menu.  If so,
+  Node-webkit has a "screen" interface to retrieve the "workable" area of the screen
+* choosing the same directory multiple times (see dialog API page)
+* figure out why there is a "pd_opendir" global var
+* pass k12 mode arg
+* implement recent files (using Pd's prefs loading mechanism instead of reimplementing gui prefs)
+* implement verifyquit
+* save and saveas dialogs aren't defaulting to the present working directory
+* create a loop (maybe every second) to check bbox of patchsvg, and set the height/width to that
+  bbox for the svg.  That should trigger the correct scrollbar behavior.
+* change canvas string to a single int (and investigate any side-effects)
+* destroy (or, more likely, hide) selection rectangle when not needed
+* change gui_text_select to gui_gobj_select
+* make it possible to have the inner cells of hradio change color with the selection, as the border currently does.  Tk just uses the non-hierarchical tags and appends the word "BASE".  (Maybe use an inner <g> to do this.)
+* make mycnv use its own selection logic
+* abstract away appendChild
+* font-size should be set as css property for a class of text, rather than per each gobj in svg
+* remove the "fudge_factor" kludge in g_rtext.c, and handle fonts in a sane manner.  In doing so
+  we must decide whether or not we want to be able to fetch the bounding box of objects from
+  within a Pd patch.  (Currently [canvasinfo] and [objectinfo] are the only objects that can
+  do this, though there might also be)
+* replace things like gui_select_color with css
+* find a better approach to escaping characters for the gui than escape_double_quotes kludge (and handle any other problematic chars)
+* look into using <def> and <use> for scalars.
+* use Atom's selectors for standard OSX behavior (cut, paste, about, etc.)
+* in draw_vis, make circle and ellipse radii attr floats instead of ints
+* should stroke-dasharray values be floats?
+* once garrays are drawn inside a <g> we won't have to individually erase each child of a scalar
+* clean up svg_sendupdate -- put a single gui_vmess at the end
+* svg_sendupdate -- make sure there aren't arbitrary %d's that should actually be %g's
+* svg_sendupdate -- need a gui interface for stuff like stroke-dasharray (and garrays)
+* ibid., for path data, points
+* make pdgui function names more consistent
+* in draw_vis, move tags to front of function call so they don't have to be an ugly array
+* in draw_vis, remove all the coords logic and let svg_togui do that work.  In svg_new,
+  leverage the "d", "points", etc. methods to do the same.
+* remove the draw_vis warning/code about needing 2 points to draw
+* might want to clean up dead windows inside patchwin object (on close)
+* make gui_menu_close filename less hacky (currently includes patch args in the middle) 
+* figure out why -nrt flag causes Pd to bail on the GUI (it wasn't doing this
+  on the amd_64 virtual Jessie machine)
+* make dialogs with [yes/no] instead of [cancel/ok]
+* make a gui_mess interface for the edge cases that don't require args (similar to sys_gui)
+* make sure we're breaking down the socket properly from the GUI side on quit
+* nwworkingdir isn't working with the saveas dialog in pdcanvas.html
+* nwworkingdir only works on the second file open
+* implement the stuff at the end of saveas_callback (recentfiles et al);
+* make an "export" menu command for max patch saving.  That way we can accept a single extension
+  for saving (.pd), and the native save dialog will warn us on potential file overwrites (even when
+  the user neglects to type an extension).
+* draw graph inside gobj group
+* merge gui_text_select and gui_text_deselect
+* in function gui_cord_inspector_update, use parameter "moved" to flash text
+* cord_inspector_flash doesn't seem to be deterministic-- if you move among several cords very fast
+  it will try to flash a non-existent svg item.  (Probably want to either make a permanent item in
+  the pdcanvas.html for it, or hard-code a separate div.)
+* for data structures, change "" to 'none'
diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index 2194b67c8..312d1e51c 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -496,7 +496,9 @@ void iemgui_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy)
 
 void iemgui_select(t_gobj *z, t_glist *glist, int selected)
 {
+    char tagbuf[MAXPDSTRING];
     t_iemgui *x = (t_iemgui *)z;
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
     t_canvas *canvas=glist_getcanvas(glist);
     if (selected)
         x->x_selected = canvas;
@@ -504,6 +506,7 @@ void iemgui_select(t_gobj *z, t_glist *glist, int selected)
         x->x_selected = NULL;
     sys_vgui(".x%lx.c itemconfigure {x%lx&&border} -stroke %s\n", canvas, x,
         x->x_selected && x->x_glist == canvas ? selection_color : border_color);
+    gui_vmess("gui_text_select_color", "ss", canvas_string(canvas), tagbuf);
     x->x_draw((void *)z, glist, IEM_GUI_DRAW_MODE_SELECT);
     if (selected < 2)
     {
@@ -941,11 +944,19 @@ static void scalehandle_check_and_redraw(t_iemgui *x)
 // IEMGUI refactor (by Mathieu)
 
 void iemgui_tag_selected(t_iemgui *x) {
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
     t_canvas *canvas=glist_getcanvas(x->x_glist);
     if(x->x_selected)
+    {
         sys_vgui(".x%lx.c addtag selected withtag x%lx\n", canvas, x);
+        gui_vmess("gui_text_select", "ss", canvas_string(canvas), tagbuf);
+    }
     else
+    {
         sys_vgui(".x%lx.c dtag x%lx selected\n", canvas, x);
+        gui_vmess("gui_text_deselect", "ss", canvas_string(canvas), tagbuf);
+    }
 }
 
 void iemgui_label_draw_new(t_iemgui *x) {
@@ -1023,12 +1034,18 @@ void iemgui_draw_io(t_iemgui *x, int old_sr_flags)
     //fprintf(stderr,"%lx SND: old_sr_flags=%d SND_FLAG=%d || OUTCOME: OLD_SND_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_SND_FLAG, a, b);
     
     if(a && !b) for (i=0; i<n; i++)
+    {
         sys_vgui(".x%lx.c create prect %d %d %d %d "
                  "-stroke $pd_colors(iemgui_nlet) "
                  "-tags {%so%d x%lx outlet %s}\n",
              canvas, x1+i*k, y2-1, x1+i*k + IOWIDTH, y2,
              iem_get_tag(canvas, x), i, x,
              x->x_selected == x->x_glist ? "iemgui selected" : "iemgui");
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_canvas_drawio", "sssiiiiii", canvas_string(canvas), tagbuf,
+            iem_get_tag(canvas, x), x1+i*k, y2-1, x1+i*k + IOWIDTH, y2, x1, y1);
+    }
     if(!a && b) for (i=0; i<n; i++)
         sys_vgui(".x%lx.c delete %so%d\n", canvas, iem_get_tag(canvas, x), i);
 
@@ -1036,12 +1053,18 @@ void iemgui_draw_io(t_iemgui *x, int old_sr_flags)
     b=x->x_rcv!=s_empty;
     //fprintf(stderr,"%lx RCV: old_sr_flags=%d RCV_FLAG=%d || OUTCOME: OLD_RCV_FLAG=%d not_empty=%d\n", (t_int)x, old_sr_flags, IEM_GUI_OLD_RCV_FLAG, a, b);
     if(a && !b) for (i=0; i<n; i++)
+    {
         sys_vgui(".x%lx.c create prect %d %d %d %d "
                  "-stroke $pd_colors(iemgui_nlet) "
                  "-tags {%si%d x%lx inlet %s}\n",
              canvas, x1+i*k, y1, x1+i*k + IOWIDTH, y1+1,
              iem_get_tag(canvas, x), i, x,
              x->x_selected == x->x_glist ? "iemgui selected" : "iemgui");
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_canvas_drawio", "sssiiiiii", canvas_string(canvas), tagbuf,
+            iem_get_tag(canvas, x), x1+i*k, y1, x1+i*k + IOWIDTH, y1+1, x1, y1);
+    }
     if(!a && b) for (i=0; i<n; i++)
         sys_vgui(".x%lx.c delete %si%d\n", canvas, iem_get_tag(canvas, x), i);
 }
@@ -1061,6 +1084,8 @@ void iemgui_io_draw_move(t_iemgui *x) {
 }
 
 void iemgui_base_draw_new(t_iemgui *x) {
+    char tagbuf[MAXPDSTRING]; 
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
     t_canvas *canvas=glist_getcanvas(x->x_glist);
     t_class *c = pd_class((t_pd *)x);
     int x1,y1,x2,y2,gr=gop_redraw; gop_redraw=0;
@@ -1070,6 +1095,12 @@ void iemgui_base_draw_new(t_iemgui *x) {
              "-stroke $pd_colors(iemgui_border) -fill #%6.6x "
              "-tags {%lxBASE x%lx text iemgui border}\n",
          canvas, x1,y1,x2,y2, x->x_bcol, x, x);
+    gui_vmess("gui_text_create_gobj", "ssii", canvas_string(canvas), tagbuf,
+        x1, y1);
+    char colorbuf[MAXPDSTRING];
+    sprintf(colorbuf, "#%6.6x", x->x_bcol);
+    gui_vmess("gui_iemgui_drawborder", "sssiiii", canvas_string(canvas), tagbuf,
+        colorbuf, x1, y1, x2, y2);
 }
 
 void iemgui_base_draw_move(t_iemgui *x) {
@@ -1114,6 +1145,9 @@ void iemgui_draw_move(t_iemgui *x) {
 void iemgui_draw_erase(t_iemgui *x) {
     t_canvas *canvas=glist_getcanvas(x->x_glist);
     sys_vgui(".x%lx.c delete x%lx\n", canvas, x);
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    gui_vmess("gui_gobj_erase", "ss", canvas_string(canvas), tagbuf);
     scalehandle_draw_erase2(x);
 }
 
diff --git a/pd/src/g_bang.c b/pd/src/g_bang.c
index 4370ebe4b..3ca7b2e71 100644
--- a/pd/src/g_bang.c
+++ b/pd/src/g_bang.c
@@ -24,18 +24,24 @@ static t_class *bng_class;
 
 void bng_draw_update(t_gobj *xgobj, t_glist *glist)
 {
+    char tagbuf[MAXPDSTRING];
     t_bng *x = (t_bng *)xgobj;
+    sprintf(tagbuf, "x%lx", (long unsigned int)&x->x_gui);
     if (x->x_gui.x_changed != x->x_flashed && glist_isvisible(glist))
     {
-        sys_vgui(".x%lx.c itemconfigure %lxBUT -fill #%6.6x\n",
-            glist_getcanvas(glist), x,
-            x->x_flashed?x->x_gui.x_fcol:x->x_gui.x_bcol);
+//        sys_vgui(".x%lx.c itemconfigure %lxBUT -fill #%6.6x\n",
+//            glist_getcanvas(glist), x,
+//            x->x_flashed?x->x_gui.x_fcol:x->x_gui.x_bcol);
+        gui_vmess("gui_bng_update", "ssi",
+            canvas_string(glist_getcanvas(glist)), tagbuf, x->x_flashed);
     }
     x->x_gui.x_changed = x->x_flashed;
 }
 
 void bng_draw_new(t_bng *x, t_glist *glist)
 {
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)&x->x_gui);
     t_canvas *canvas=glist_getcanvas(glist);
     int x1=text_xpix(&x->x_gui.x_obj, glist);
     int y1=text_ypix(&x->x_gui.x_obj, glist);
@@ -49,6 +55,8 @@ void bng_draw_new(t_bng *x, t_glist *glist)
              "-tags {%lxBUT x%lx text iemgui border}\n",
          canvas, cx, cy, cr, x->x_flashed?x->x_gui.x_fcol:x->x_gui.x_bcol,
          x, x);
+    gui_vmess("gui_create_bng", "ssfff", canvas_string(canvas), tagbuf,
+        cx - x1 - 0.5, cy - y1 - 0.5, cr);
 }
 
 void bng_draw_move(t_bng *x, t_glist *glist)
diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 4c6d9372d..10a16bc1e 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -248,6 +248,13 @@ void canvas_makefilename(t_canvas *x, char *file, char *result, int resultsize)
     //fprintf(stderr,"resulting file = <%s>\n", result);          
 }
 
+char *canvas_string(t_canvas *x)
+{
+    static char s[MAXPDSTRING];
+    sprintf(s, ".x%lx", (long unsigned int)x);
+    return s;
+}
+
 void canvas_rename(t_canvas *x, t_symbol *s, t_symbol *dir)
 {
     canvas_unbind(x);
@@ -650,9 +657,32 @@ t_symbol *canvas_makebindsym(t_symbol *s)
     return (gensym(buf));
 }
 
+void canvas_args_to_string(char *namebuf, t_canvas *x)
+{
+    t_canvasenvironment *env = canvas_getenv(x);
+    if (env->ce_argc)
+    {
+        int i;
+        strcpy(namebuf, " (");
+        for (i = 0; i < env->ce_argc; i++)
+        {
+            if (strlen(namebuf) > MAXPDSTRING/2 - 5)
+                break;
+            if (i != 0)
+                strcat(namebuf, " ");
+            atom_string(&env->ce_argv[i], namebuf + strlen(namebuf), 
+                MAXPDSTRING/2);
+        }
+        strcat(namebuf, ")");
+    }
+    else namebuf[0] = 0;
+}
+
 void canvas_reflecttitle(t_canvas *x)
 {
     char namebuf[MAXPDSTRING];
+    canvas_args_to_string(namebuf, x);
+/*
     t_canvasenvironment *env = canvas_getenv(x);
     if (env->ce_argc)
     {
@@ -670,6 +700,7 @@ void canvas_reflecttitle(t_canvas *x)
         strcat(namebuf, ")");
     }
     else namebuf[0] = 0;
+*/
 #ifdef __APPLE__
     sys_vgui("wm attributes .x%lx -modified %d -titlepath {%s/%s}\n",
         x, x->gl_dirty, canvas_getdir(x)->s_name, x->gl_name->s_name);
@@ -681,9 +712,11 @@ void canvas_reflecttitle(t_canvas *x)
     x->gl_isgraph && x->gl_havewindow, x->gl_loading,
     x->gl_dirty);*/
 
-    sys_vgui("wm title .x%lx {%s%c%s - %s}\n", 
-        x, x->gl_name->s_name, (x->gl_dirty? '*' : ' '), namebuf,
-            canvas_getdir(x)->s_name);
+    //sys_vgui("wm title .x%lx {%s%c%s - %s}\n", 
+    //    x, x->gl_name->s_name, (x->gl_dirty? '*' : ' '), namebuf,
+    //        canvas_getdir(x)->s_name);
+    gui_vmess("gui_canvas_set_title", "ssssi", canvas_string(x), x->gl_name->s_name,
+        namebuf, canvas_getdir(x)->s_name, x->gl_dirty);
 //}
 #endif
 }
@@ -753,14 +786,22 @@ void canvas_drawredrect(t_canvas *x, int doit)
     {
         int x1=x->gl_xmargin, y1=x->gl_ymargin;
         int x2=x1+x->gl_pixwidth, y2=y1+x->gl_pixheight;
-        sys_vgui(".x%lx.c create line\
-            %d %d %d %d %d %d %d %d %d %d -fill #ff8080 -tags GOP\n",
-            glist_getcanvas(x), x1, y1, x2, y1, x2, y2, x1, y2, x1, y1);
+        //sys_vgui(".x%lx.c create line "
+        //    "%d %d %d %d %d %d %d %d %d %d -fill #ff8080 -tags GOP\n",
+        //    glist_getcanvas(x), x1, y1, x2, y1, x2, y2, x1, y2, x1, y1);
+        gui_vmess("gui_canvas_drawredrect", "siiii",
+            canvas_string(glist_getcanvas(x)),
+            x1, y1, x2, y2);
         //dpsaha@vt.edu for drawing the GOP_blobs
         if (x->gl_goprect && x->gl_edit)
             canvas_draw_gop_resize_hooks(x);
     }
-    else sys_vgui(".x%lx.c delete GOP\n",  glist_getcanvas(x));
+    else
+    {
+        //sys_vgui(".x%lx.c delete GOP\n",  glist_getcanvas(x));
+        gui_vmess("gui_canvas_deleteredrect", "s",
+            canvas_string(glist_getcanvas(x)));
+    }
 }
 
     /* the window becomes "mapped" (visible and not miniaturized) or
@@ -1008,8 +1049,12 @@ void canvas_eraselinesfor(t_canvas *x, t_text *text)
         {
             if (x->gl_editor)
             {
-                sys_vgui(".x%lx.c delete l%lx\n",
-                    glist_getcanvas(x), oc);
+                //sys_vgui(".x%lx.c delete l%lx\n",
+                //    glist_getcanvas(x), oc);
+                char tagbuf[MAXPDSTRING];
+                sprintf(tagbuf, "l%lx", (long unsigned int)oc);
+                gui_vmess("gui_canvas_delete_line", "ss",
+                    canvas_string(glist_getcanvas(x)), tagbuf);
             }
         }
     }
diff --git a/pd/src/g_canvas.h b/pd/src/g_canvas.h
index 90574b3de..d6bdecee1 100644
--- a/pd/src/g_canvas.h
+++ b/pd/src/g_canvas.h
@@ -480,6 +480,7 @@ EXTERN void text_drawborder(t_text *x, t_glist *glist, char *tag,
     int width, int height, int firsttime);
 EXTERN void text_drawborder_withtag(t_text *x, t_glist *glist, char *tag,
     int width, int height, int firsttime);
+EXTERN void text_erase_gobj(t_text *x, t_glist *glist, char *tag);
 EXTERN void text_eraseborder(t_text *x, t_glist *glist, char *tag);
 EXTERN int text_xcoord(t_text *x, t_glist *glist);
 EXTERN int text_ycoord(t_text *x, t_glist *glist);
@@ -561,6 +562,7 @@ EXTERN t_gobj *canvas_findhitbox(t_canvas *x, int xpos, int ypos,
     int *x1p, int *y1p, int *x2p, int *y2p);
 EXTERN int canvas_setdeleting(t_canvas *x, int flag);
 EXTERN int canvas_hasarray(t_canvas *x);
+EXTERN char *canvas_string(t_canvas *x); /* canvas as string to send to gui */
 
 /* ---- for parsing @pd_extra and other sys paths in filenames  --------------------- */
 
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 58ff2c21c..0bacbb29b 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -430,10 +430,13 @@ void glist_selectline(t_glist *x, t_outconnect *oc, int index1,
         x->gl_editor->e_selectline_index2 = index2;
         x->gl_editor->e_selectline_inno = inno;
         x->gl_editor->e_selectline_tag = oc;
-        sys_vgui(".x%lx.c itemconfigure l%lx -stroke $pd_colors(selection)\n",
-            x, x->gl_editor->e_selectline_tag);
-        sys_vgui(".x%lx.c addtag selected withtag l%lx\n",
-            glist_getcanvas(x), x->gl_editor->e_selectline_tag);
+        //sys_vgui(".x%lx.c itemconfigure l%lx -stroke $pd_colors(selection)\n",
+        //    x, x->gl_editor->e_selectline_tag);
+        //sys_vgui(".x%lx.c addtag selected withtag l%lx\n",
+        //    glist_getcanvas(x), x->gl_editor->e_selectline_tag);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "l%lx", (long unsigned int)oc);
+        gui_vmess("gui_canvas_select_line", "ss", canvas_string(x), tagbuf);
         c_selection = x;
         canvas_draw_gop_resize_hooks(x);
     }
@@ -455,14 +458,18 @@ void glist_deselectline(t_glist *x)
             issignal = 1;
         else
             issignal = 0;
-        sys_vgui(".x%lx.c itemconfigure l%lx -stroke %s\n",
-            x, x->gl_editor->e_selectline_tag,
-            (issignal ?
-                "$pd_colors(signal_cord)" : "$pd_colors(control_cord)"));
-        sys_vgui(".x%lx.c dtag l%lx selected\n",
-            glist_getcanvas(x),
-            glist_getcanvas(x)->gl_editor->e_selectline_tag);
+        //sys_vgui(".x%lx.c itemconfigure l%lx -stroke %s\n",
+        //    x, x->gl_editor->e_selectline_tag,
+        //    (issignal ?
+        //        "$pd_colors(signal_cord)" : "$pd_colors(control_cord)"));
+        //sys_vgui(".x%lx.c dtag l%lx selected\n",
+        //    glist_getcanvas(x),
+        //    glist_getcanvas(x)->gl_editor->e_selectline_tag);
         canvas_draw_gop_resize_hooks(x);
+
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "l%lx", (long unsigned int)x->gl_editor->e_selectline_tag);
+        gui_vmess("gui_canvas_deselect_line", "ss", canvas_string(x), tagbuf);
     }    
 }
 
@@ -858,7 +865,11 @@ void canvas_disconnect(t_canvas *x,
         if (srcno == index1 && t.tr_outno == outno &&
             sinkno == index2 && t.tr_inno == inno)
         {
-            sys_vgui(".x%lx.c delete l%lx\n", x, oc);
+            //sys_vgui(".x%lx.c delete l%lx\n", x, oc);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "l%lx", (long unsigned int)oc);
+            gui_vmess("gui_canvas_delete_line", "ss",
+                canvas_string(x), tagbuf);
             // jsarlo
             if(x->gl_editor && x->gl_editor->gl_magic_glass)
             {
@@ -2177,16 +2188,16 @@ void canvas_undo_font(t_canvas *x, void *z, int action)
 /* ------------------------ event handling ------------------------ */
 
 static char *cursorlist[] = {
-    "$cursor_runmode_nothing",
-    "$cursor_runmode_clickme",
-    "$cursor_runmode_thicken",
-    "$cursor_runmode_addpoint",
-    "$cursor_editmode_nothing",
-    "$cursor_editmode_connect",
-    "$cursor_editmode_disconnect",
-    "$cursor_editmode_resize",
-    "$cursor_editmode_resize_bottom_right",
-    "$cursor_scroll"
+    "cursor_runmode_nothing",
+    "cursor_runmode_clickme",
+    "cursor_runmode_thicken",
+    "cursor_runmode_addpoint",
+    "cursor_editmode_nothing",
+    "cursor_editmode_connect",
+    "cursor_editmode_disconnect",
+    "cursor_editmode_resize",
+    "cursor_editmode_resize_bottom_right",
+    "cursor_scroll"
 };
 
 void canvas_setcursor(t_canvas *x, unsigned int cursornum)
@@ -2203,7 +2214,9 @@ void canvas_setcursor(t_canvas *x, unsigned int cursornum)
         }
         if (xwas != x || cursorwas != cursornum)
         {
-            sys_vgui(".x%lx configure -cursor %s\n", x, cursorlist[cursornum]);
+            //sys_vgui(".x%lx configure -cursor %s\n", x, cursorlist[cursornum]);
+            gui_vmess("gui_canvas_cursor", "ss", canvas_string(x),
+                cursorlist[cursornum]);
             xwas = x;
             cursorwas = cursornum;
         }
@@ -2305,8 +2318,10 @@ static void canvas_rightclick(t_canvas *x, int xpos, int ypos, t_gobj *y_sel)
         isobject = 1;
     }
     else isobject = 0;
-    sys_vgui("pdtk_canvas_popup .x%lx %d %d %d %d %d\n",
-        x, xpos, ypos, canprop, canopen, isobject);
+    //sys_vgui("pdtk_canvas_popup .x%lx %d %d %d %d %d\n",
+    //    x, xpos, ypos, canprop, canopen, isobject);
+    gui_vmess("gui_canvas_popup", "siiiii",
+        canvas_string(x), xpos, ypos, canprop, canopen, isobject);
 }
 
 /* ----  editors -- perhaps this and "vis" should go to g_editor.c ------- */
@@ -2380,7 +2395,11 @@ void canvas_destroy_editor(t_glist *x)
     }
 }
 
-void canvas_reflecttitle(t_canvas *x);
+
+// void canvas_reflecttitle(t_canvas *x);
+// This should replace canvas_reflecttitle above
+extern void canvas_args_to_string(char *namebuf, t_canvas *x);
+
 void canvas_map(t_canvas *x, t_floatarg f);
 
     /* we call this when we want the window to become visible, mapped, and
@@ -2394,6 +2413,10 @@ void canvas_map(t_canvas *x, t_floatarg f);
 void canvas_vis(t_canvas *x, t_floatarg f)
 {
     //fprintf(stderr,"canvas_vis .x%lx %f\n", (t_int)x, f);
+    char geobuf[MAXPDSTRING];
+    char argsbuf[MAXPDSTRING];
+    sprintf(geobuf, "+%d+%d",
+        (int)(x->gl_screenx1), (int)(x->gl_screeny1));
 
     t_gobj *g;
     t_int properties;
@@ -2408,21 +2431,38 @@ void canvas_vis(t_canvas *x, t_floatarg f)
         if (x->gl_editor && x->gl_havewindow && glist_isvisible(x))
         {           /* just put us in front */
             //fprintf(stderr,"existing\n");
-            sys_vgui("raise .x%lx\n", x);
-            sys_vgui("focus .x%lx.c\n", x);
-            sys_vgui("wm deiconify .x%lx\n", x);  
+            //sys_vgui("raise .x%lx\n", x);
+            //sys_vgui("focus .x%lx.c\n", x);
+            //sys_vgui("wm deiconify .x%lx\n", x);  
+            gui_vmess("gui_raise_window", "s", canvas_string(x));
         }
         else
         {
             //fprintf(stderr,"new\n");
             canvas_create_editor(x);
-            sys_vgui("pdtk_canvas_new .x%lx %d %d +%d+%d %d\n", x,
+//            sys_vgui("pdtk_canvas_new .x%lx %d %d +%d+%d %d\n", x,
+//                (int)(x->gl_screenx2 - x->gl_screenx1),
+//                (int)(x->gl_screeny2 - x->gl_screeny1),
+//                (int)(x->gl_screenx1), (int)(x->gl_screeny1),
+//                x->gl_edit);
+
+            canvas_args_to_string(argsbuf, x);
+
+            gui_vmess("gui_canvas_new", "siisissis",
+                canvas_string(x),
                 (int)(x->gl_screenx2 - x->gl_screenx1),
                 (int)(x->gl_screeny2 - x->gl_screeny1),
-                (int)(x->gl_screenx1), (int)(x->gl_screeny1),
-                x->gl_edit);
+                geobuf,
+                x->gl_edit,
+                x->gl_name->s_name,
+                canvas_getdir(x)->s_name,
+                x->gl_dirty,
+                argsbuf);
+                
+
+
             sys_vgui("pdtk_canvas_set_font .x%lx %d\n", x, x->gl_font);
-            canvas_reflecttitle(x);
+//            canvas_reflecttitle(x);
             x->gl_havewindow = 1;
 
             // check if this is a subpatch with an array
@@ -2507,7 +2547,7 @@ void canvas_vis(t_canvas *x, t_floatarg f)
         if (glist_isvisible(x))
             canvas_map(x, 0);
         canvas_destroy_editor(x);
-        sys_vgui("destroy .x%lx\n", x);
+        gui_vmess("gui_close_window", "s", canvas_string(x));
         // delete properties windows of objects in the patcher we're closing
         g = x->gl_list;
         while (g)
@@ -3289,6 +3329,9 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                             "$pd_colors(signal_cord_width)" :
                             "$pd_colors(control_cord_width)"),
                         (issignal ? "signal" : "control"));
+                        gui_vmess("gui_canvas_line", "ssiiiiiiiiii",
+                            canvas_string(x), "newcord",
+                            xpos, ypos, xpos, ypos, xpos, ypos, xpos, ypos, xpos, ypos);
                     }   
                     else
                     // jsarlo
@@ -3309,7 +3352,6 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                                      "-strokewidth $highlight_width\n",
                                      x,
                                      x->gl_editor->canvas_cnct_outlet_tag);
-                            
                             //sys_vgui(".x%x.c raise %s\n",
                             //         x,
                             //         x->gl_editor->canvas_cnct_outlet_tag);
@@ -3591,6 +3633,8 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
         sys_vgui(".x%lx.c create prect %d %d %d %d -tags x "
                  "-stroke $pd_colors(selection_rectangle)\n",
             x, xpos, ypos, xpos, ypos);
+        gui_vmess("gui_create_selection_rectangle", "siiii", canvas_string(x),
+            xpos, ypos, xpos, ypos);
         x->gl_editor->e_xwas = xpos;
         x->gl_editor->e_ywas = ypos;
         x->gl_editor->e_onmotion = MA_REGION;
@@ -3686,6 +3730,7 @@ void canvas_sort_selection_according_to_location(t_canvas *x)
 void canvas_drawconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
     t_int tag, int issignal)
 {
+    char tagbuf[MAXPDSTRING];
     int ymax = 0;
     int halfx = (lx2 - lx1)/2;
     int halfy = (ly2 - ly1)/2;
@@ -3727,11 +3772,16 @@ void canvas_drawconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
             "$pd_colors(signal_cord_width)" :
             "$pd_colors(control_cord_width)"), 
         tag, (issignal ? "signal" : "control"));
+    sprintf(tagbuf, "l%lx", (long unsigned int)tag);
+    gui_vmess("gui_canvas_line", "ssiiiiiiiiii",
+        canvas_string(x), tagbuf, lx1, ly1, lx1, ly1 + yoff,
+        lx1 + halfx, ly1 + halfy, lx2, ly2 - yoff, lx2, ly2);
 }
 
 void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
     t_int tag)
 {
+    char cord_tag[MAXPDSTRING];
     if (glist_isvisible(x) && glist_istoplevel(x))
     {
         int ymax = 0;
@@ -3768,6 +3818,11 @@ void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
                 x, tag, lx1, ly1,
                 lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
                 lx2, ly2 - yoff, lx2, ly2);
+            sprintf(cord_tag, "l%lx", (long unsigned int)tag);
+            gui_vmess("gui_canvas_updateline", "ssiiiii", canvas_string(x), cord_tag,
+                lx1, ly1, lx2, ly2, yoff);
+//                lx1, ly1, lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
+//                lx2, ly2 - yoff, lx2, ly2);
         }
         else
         {
@@ -3777,6 +3832,10 @@ void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
                 x, lx1, ly1,
                 lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
                 lx2, ly2 - yoff, lx2, ly2);
+            gui_vmess("gui_canvas_updateline", "ssiiiii", canvas_string(x), "newcord",
+                lx1, ly1, lx2, ly2, yoff);
+//                lx1, ly1, lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy, lx2, ly2 - yoff,
+//                lx2, ly2);
         }
     }
 }
@@ -4371,7 +4430,10 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
     int xwas = x->gl_editor->e_xwas,
         ywas = x->gl_editor->e_ywas;
     if (doit && !glob_shift)
+    {
         sys_vgui(".x%lx.c delete x\n", x);
+        gui_vmess("gui_canvas_delete_line", "ss", canvas_string(x), "newcord");
+    }
     else
     {
         canvas_updateconnection(x, x->gl_editor->e_xwas, x->gl_editor->e_ywas,
@@ -4514,11 +4576,17 @@ static void canvas_doregion(t_canvas *x, int xpos, int ypos, int doit)
         else hiy = x->gl_editor->e_ywas, loy = ypos;
         canvas_selectinrect(x, lox, loy, hix, hiy);
         sys_vgui(".x%lx.c delete x\n", x);
+        gui_vmess("gui_hide_selection_rectangle", "s", canvas_string(x));
         x->gl_editor->e_onmotion = MA_NONE;
     }
-    else sys_vgui(".x%lx.c coords x %d %d %d %d\n",
+    else
+    {
+        sys_vgui(".x%lx.c coords x %d %d %d %d\n",
             x, x->gl_editor->e_xwas,
                 x->gl_editor->e_ywas, xpos, ypos);
+        gui_vmess("gui_move_selection_rectangle", "siiii",
+            canvas_string(x), x->gl_editor->e_xwas, x->gl_editor->e_ywas, xpos, ypos);
+    }
 }
 
 /*
@@ -4744,6 +4812,7 @@ void canvas_displaceselection(t_canvas *x, int dx, int dy)
     if (dx || dy)
     {
         sys_vgui("pdtk_canvas_displace_withtag .x%lx.c %d %d\n", x, dx, dy);
+        gui_vmess("gui_canvas_displace_withtag", "sii", canvas_string(x), dx, dy);
         if (resortin) canvas_resortinlets(x);
         if (resortout) canvas_resortoutlets(x);
         //scrollbar_update(x);
@@ -5254,13 +5323,21 @@ void glob_verifyquit(void *dummy, t_floatarg f)
             if (!glist_istoplevel(g2) && g->gl_env)
             {
                 /* if this is an abstraction */
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;}\n",
-                     g2, g2);
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;}\n",
+                //     g2, g2);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(g2),
+                    canvas_string(g2),
+                    3);
             }
             else
             {
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;}\n",
-                     canvas_getrootfor(g2), g2);
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;}\n",
+                //     canvas_getrootfor(g2), g2);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(canvas_getrootfor(g2)),
+                    canvas_string(g2),
+                    3);
             }
             //canvas_vis(g2, 1);
             //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 3;\n}\n",
@@ -5268,8 +5345,15 @@ void glob_verifyquit(void *dummy, t_floatarg f)
         return;
     }
     if (f == 0 && sys_perf)
-        sys_vgui("pdtk_check . {really quit?} {pd quit;\n} yes\n");
-    else glob_quit(0);
+    {
+        //sys_vgui("pdtk_check . {really quit?} {pd quit;\n} yes\n");
+        gui_vmess("gui_pd_quit_dialog", "");
+    }
+    else
+    {
+        gui_vmess("gui_post", "s", "about to quite seresly dood");
+        glob_quit(0);
+    }
 }
 
 //void canvas_dofree(t_gobj *dummy, t_glist *x)
@@ -5305,6 +5389,7 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
             /* first open window */
             if (!glist_istoplevel(g) && g->gl_env)
             {
+      post("opening menu");
                 /* if this is an abstraction */
                 vmess(&g->gl_pd, gensym("menu-open"), "");
             }
@@ -5316,13 +5401,21 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
             if (!glist_istoplevel(g) && g->gl_env)
             {
                 /* if this is an abstraction */
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
-                     g, g);
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
+                //     g, g);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(g),
+                    canvas_string(g),
+                    2);
             }
             else
             {
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
-                     canvas_getrootfor(g), g);
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
+                //     canvas_getrootfor(g), g);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(canvas_getrootfor(g)),
+                    canvas_string(g),
+                    2);
             }
             return;
         }
@@ -5359,6 +5452,7 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
         {
             if (!glist_istoplevel(g) && g->gl_env)
             {
+post("opening up the motherfucker x%lx", g);
                 /* if this is an abstraction */
                 vmess(&g->gl_pd, gensym("menu-open"), "");
             }
@@ -5366,18 +5460,29 @@ void canvas_menuclose(t_canvas *x, t_floatarg fforce)
             {
                 /* is this even necessary? */
                 canvas_vis(g, 1);
+post("fuck you canvas_vis x%lx", g);
             }
             //vmess(&g->gl_pd, gensym("menu-open"), "");
             if (!glist_istoplevel(g) && g->gl_env)
             {
+post("farging...");
                 /* if this is an abstraction */
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
-                     g, g);
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
+                //     g, g);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(g),
+                    canvas_string(g),
+                    2);
             }
             else
             {
-                sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
-                     canvas_getrootfor(g), g);
+post("dildo");
+                //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;}\n",
+                //     canvas_getrootfor(g), g);
+                gui_vmess("gui_canvas_menuclose", "ssi",
+                    canvas_string(canvas_getrootfor(g)),
+                    canvas_string(g),
+                    2);
             }
             //sys_vgui("pdtk_canvas_menuclose .x%lx {.x%lx menuclose 2;\n}\n",
             //         canvas_getrootfor(x), g);
diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c
index 6c1b05bdf..b5771002a 100644
--- a/pd/src/g_graph.c
+++ b/pd/src/g_graph.c
@@ -881,14 +881,32 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
     //}
     //fprintf(stderr,"tgt=.x%lx %d\n", (t_int)tgt, exception);
 
-    if (vis && canvas_showtext(x) && gobj_shouldvis(gr, parent_glist))
-        rtext_draw(glist_findrtext(parent_glist, &x->gl_obj));
+    sprintf(tag, "%s", rtext_gettag(glist_findrtext(parent_glist, &x->gl_obj)));
+//post("before rtext_draw: %s", tag);
+
+    if (vis & gobj_shouldvis(gr, parent_glist))
+    {
+        int xpix, ypix;
+        xpix = text_xpix(&x->gl_obj, parent_glist);
+        ypix = text_ypix(&x->gl_obj, parent_glist);
+        gui_vmess("gui_text_create_gobj", "ssii",
+            canvas_string(glist_getcanvas(x->gl_owner)),
+            tag, xpix, ypix);
+        if (canvas_showtext(x))
+            rtext_draw(glist_findrtext(parent_glist, &x->gl_obj));
+    }
+
+//    sprintf(tag, "%s", rtext_gettag(glist_findrtext(parent_glist, &x->gl_obj)));
+//post("after rtext_draw: %s", tag);
+
+    // need the rect to create the gobj, so this should perhaps be above the
+    // conditional
     graph_getrect(gr, parent_glist, &x1, &y1, &x2, &y2);
     //fprintf(stderr,"%d %d %d %d\n", x1, y1, x2, y2);
+
     if (!vis)
         rtext_erase(glist_findrtext(parent_glist, &x->gl_obj));
 
-    sprintf(tag, "%s", rtext_gettag(glist_findrtext(parent_glist, &x->gl_obj)));
     //sprintf(tag, "graph%lx", (t_int)x);
     //fprintf(stderr, "gettag=%s, tag=graph%lx\n",
     //    rtext_gettag(glist_findrtext(parent_glist, &x->gl_obj)),(t_int)x);
@@ -898,19 +916,30 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
     {
         if (vis && gobj_shouldvis(gr, parent_glist))
         {
-            sys_vgui(".x%lx.c create ppolygon %d %d %d %d %d %d %d %d %d %d "
-                     "-tags {%sfill graph} -fill $pd_colors(graph_border) "
-                     "-stroke $pd_colors(graph_border)\n",
-                glist_getcanvas(x->gl_owner),
-                //parent_glist,
-                x1, y1, x1, y2, x2, y2, x2, y1, x1, y1, tag);
+            //sys_vgui(".x%lx.c create ppolygon %d %d %d %d %d %d %d %d %d %d "
+            //         "-tags {%sfill graph} -fill $pd_colors(graph_border) "
+            //         "-stroke $pd_colors(graph_border)\n",
+            //    glist_getcanvas(x->gl_owner),
+                ////parent_glist,
+            //    x1, y1, x1, y2, x2, y2, x2, y1, x1, y1, tag);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "%sfill", tag);
+            gui_vmess("gui_text_drawborder", "ssiiiii",
+                canvas_string(glist_getcanvas(x->gl_owner)),
+                tag,
+                0, x1, y1, x2, y2);
             glist_noselect(x->gl_owner);
         }
         else if (gobj_shouldvis(gr, parent_glist))
         {
-            sys_vgui(".x%lx.c delete %sfill\n",
-                glist_getcanvas(x->gl_owner), tag);
-                //parent_glist, tag);
+            //sys_vgui(".x%lx.c delete %sfill\n",
+            //    glist_getcanvas(x->gl_owner), tag);
+               ////parent_glist, tag);
+            char tagbuf2[MAXPDSTRING];
+            sprintf(tagbuf2, "%sfill", tag);
+            gui_vmess("gui_graph_deleteborder", "ss",
+                canvas_string(glist_getcanvas(x->gl_owner)),
+                tagbuf2);
         }
         return;
     }
@@ -926,12 +955,17 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
                    "-stroke $pd_colors(graph_border) -tags {%sR %s graph}\n",
             glist_getcanvas(x->gl_owner),
             x1, y1, x1, y2, x2, y2, x2, y1, x1, y1, tag, tag);*/
-        sys_vgui(".x%lx.c create prect %d %d %d %d "
-                 "-stroke $pd_colors(graph_border) -tags {%sR graph}\n",
-                 //REMOVED: -fill $pd_colors(graph) 
-            glist_getcanvas(x->gl_owner),
-            x1, y1, x2, y2, tag); // -fill $pd_colors(graph)
-
+        //sys_vgui(".x%lx.c create prect %d %d %d %d "
+        //         "-stroke $pd_colors(graph_border) -tags {%sR graph}\n",
+        //         //REMOVED: -fill $pd_colors(graph) 
+        //    glist_getcanvas(x->gl_owner),
+        //    x1, y1, x2, y2, tag); // -fill $pd_colors(graph)
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "%sR", tag);
+        gui_vmess("gui_text_drawborder", "ssiiiii",
+            canvas_string(glist_getcanvas(x->gl_owner)),
+            tag,
+            0, x1, y1, x2, y2);
             /* write garrays' names along the top */
         for (i = (y1 < y2 ? y1 : y2)-1, g = x->gl_list; g; g = g->g_next)
         {
@@ -1380,6 +1414,12 @@ static void graph_select(t_gobj *z, t_glist *glist, int state)
                  canvas, rtext_gettag(y), 
                  (state? "$pd_colors(selection)" : "$pd_colors(graph_border)"),
                  (state? "$pd_colors(selection)" : "$pd_colors(graph_border)"));
+            if (state)
+                gui_vmess("gui_text_select", "ss",
+                    canvas_string(canvas), rtext_gettag(y));
+            else
+                gui_vmess("gui_text_deselect", "ss",
+                    canvas_string(canvas), rtext_gettag(y));
         }
 
         t_gobj *g;
diff --git a/pd/src/g_magicglass.c b/pd/src/g_magicglass.c
index bdde53081..22cd07fe0 100644
--- a/pd/src/g_magicglass.c
+++ b/pd/src/g_magicglass.c
@@ -5,6 +5,7 @@
 #include "m_imp.h"
 #include "s_stuff.h"
 #include "g_magicglass.h"
+#include "g_canvas.h"
 
 #define MG_CLOCK_CLEAR_DELAY 500.5
 #define MG_CLOCK_FLASH_DELAY 50
@@ -116,6 +117,12 @@ void magicGlass_updateText(t_magicGlass *x, int moved)
                  x->x_y - (int)(sys_fontheight(x->x_display_font)/2) - 3,
                  bgSize,
                  x->x_y + (int)(sys_fontheight(x->x_display_font)/2) + 3);
+        gui_vmess("gui_cord_inspector_update", "ssiiiiii",
+            canvas_string(x->x_c), x->x_string,
+            x->x_x, x->x_y, bgSize, 
+            x->x_y - (int)(sys_fontheight(x->x_display_font)/2) - 3,
+            x->x_y + (int)(sys_fontheight(x->x_display_font)/2) + 3,
+            moved);
     }
 }
 
@@ -137,6 +144,10 @@ void magicGlass_drawNew(t_magicGlass *x)
              x->x_c);
     sys_vgui(".x%x.c raise magicGlassText\n",
              x->x_c);
+    gui_vmess("gui_text_create_gobj", "ssii",
+        canvas_string(x->x_c), "cord_inspector", 0, 0);
+    gui_vmess("gui_create_cord_inspector", "s",
+        canvas_string(x->x_c)); 
     magicGlass_updateText(x, 0);
     clock_delay(x->x_flashClock, MG_CLOCK_FLASH_DELAY);
 }
@@ -147,6 +158,8 @@ void magicGlass_undraw(t_magicGlass *x)
     sys_vgui(".x%x.c delete magicGlassBg\n", x->x_c);
     sys_vgui(".x%x.c delete magicGlassLine\n", x->x_c);
     sys_vgui(".x%x.c delete magicGlassText\n", x->x_c);
+    gui_vmess("gui_erase_cord_inspector", "s",
+        canvas_string(x->x_c));
 }
 
 void magicGlass_flashText(t_magicGlass *x)
@@ -155,6 +168,8 @@ void magicGlass_flashText(t_magicGlass *x)
     sys_vgui(".x%x.c itemconfigure magicGlassText "
              "-fill $pd_colors(magic_glass_text)\n",
          x->x_c);
+    gui_vmess("gui_cord_inspector_flash", "s",
+        canvas_string(x->x_c));
 }
 
 void magicGlass_clearText(t_magicGlass *x)
diff --git a/pd/src/g_mycanvas.c b/pd/src/g_mycanvas.c
index c3254df71..bb1389865 100644
--- a/pd/src/g_mycanvas.c
+++ b/pd/src/g_mycanvas.c
@@ -33,6 +33,15 @@ void my_canvas_draw_new(t_my_canvas *x, t_glist *glist)
         "-tags {%lxBASE x%lx text iemgui}\n",
         canvas, x1, y1, x1+x->x_gui.x_w, y1+x->x_gui.x_h,
         x->x_gui.x_bcol, x, x);
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    char colorbuf[MAXPDSTRING];
+    sprintf(colorbuf, "#%6.6x", x->x_gui.x_bcol);
+    gui_vmess("gui_text_create_gobj", "ssii", canvas_string(canvas),
+        tagbuf, x1, y1);
+    gui_vmess("gui_create_mycanvas", "sssiiiiii", canvas_string(canvas),
+        tagbuf, colorbuf, x1, y1, x1+x->x_vis_w, y1+x->x_vis_h,
+        x1+x->x_gui.x_w, y1+x->x_gui.x_h);
 }
 
 void my_canvas_draw_move(t_my_canvas *x, t_glist *glist)
@@ -67,6 +76,11 @@ void my_canvas_draw_select(t_my_canvas* x, t_glist* glist)
     sys_vgui(".x%lx.c itemconfigure %lxBASE -stroke %s\n", canvas, x,
         x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
         "$pd_colors(selection)" : bcol);
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    gui_vmess("gui_mycanvas_select_color", "sss", canvas_string(canvas),
+        tagbuf, x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas ?
+            "blue" : bcol); 
 }
 
 static void my_canvas__clickhook(t_scalehandle *sh, int newstate)
diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c
index b120354e5..6459ba4d1 100644
--- a/pd/src/g_numbox.c
+++ b/pd/src/g_numbox.c
@@ -140,6 +140,11 @@ static void my_numbox_draw_update(t_gobj *client, t_glist *glist)
         sys_vgui(
             ".x%lx.c itemconfigure %lxNUMBER -fill #%6.6x -text {%s}\n",
                 glist_getcanvas(glist), x, IEM_GUI_COLOR_EDITED, cp);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_text_set", "sss", canvas_string(glist_getcanvas(glist)),
+            tagbuf, cp);
+            
         x->x_buf[sl] = 0;
     }
     else
@@ -153,6 +158,10 @@ static void my_numbox_draw_update(t_gobj *client, t_glist *glist)
             glist_getcanvas(glist), x,
             x->x_gui.x_selected == glist_getcanvas(glist) && 
                 !x->x_gui.x_change ? selection_color : fcol, x->x_buf);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_text_set", "sss", canvas_string(glist_getcanvas(glist)),
+            tagbuf, x->x_buf);
         x->x_buf[0] = 0;
     }
 }
@@ -171,7 +180,10 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
         canvas, x1, y1, x2-4, y1, x2, y1+4, x2, y2, x1, y2,
         x->x_hide_frame <= 1 ? "$pd_colors(iemgui_border)" : bcol,
         bcol, x, x);
-
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    gui_vmess("gui_create_numbox", "sssiiiiiiiiiiiii", canvas_string(canvas),
+        tagbuf, bcol, x1, y1, x2-4, y1, x2, y1+4, x2, y2, x1, y2, x1, y1, half);
     if (!x->x_hide_frame || x->x_hide_frame == 2)
         sys_vgui(".x%lx.c create polyline %d %d %d %d %d %d -stroke #%6.6x "
             "-tags {%lxBASE2 x%lx text iemgui}\n",
@@ -182,6 +194,10 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
         "-font %s -fill #%6.6x -tags {%lxNUMBER x%lx noscroll text iemgui}\n",
         canvas, x1+half+2, y1+half+d, x->x_buf, iemgui_font(&x->x_gui),
         x->x_gui.x_fcol, x, x);
+    char colorbuf[MAXPDSTRING];
+    sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
+    gui_vmess("gui_numbox_drawtext", "ssssiiii", canvas_string(canvas), tagbuf,
+        x->x_buf, colorbuf, x1+half+2, y1+half+d, x1, y1);
 }
 
 static void my_numbox_draw_move(t_my_numbox *x, t_glist *glist)
diff --git a/pd/src/g_radio.c b/pd/src/g_radio.c
index ca476b526..aa9fb81f2 100644
--- a/pd/src/g_radio.c
+++ b/pd/src/g_radio.c
@@ -32,6 +32,10 @@ void radio_draw_update(t_gobj *client, t_glist *glist)
         canvas, x, x->x_drawn, x->x_gui.x_bcol, x->x_gui.x_bcol);
     sys_vgui(".x%lx.c itemconfigure %lxBUT%d -fill #%6.6x -stroke #%6.6x\n",
         canvas, x, x->x_on,    x->x_gui.x_fcol, x->x_gui.x_fcol);
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    gui_vmess("gui_radio_update", "ssii", canvas_string(canvas),
+        tagbuf, x->x_drawn, x->x_on);
     x->x_drawn = x->x_on;
 }
 
@@ -44,29 +48,55 @@ void radio_draw_new(t_radio *x, t_glist *glist)
     iemgui_base_draw_new(&x->x_gui);
 
     for(i=0; i<n; i++) if (x->x_orient) {
-        if (i) sys_vgui(".x%lx.c create prect %d %d %d %d "
+        if (i)
+        {
+            sys_vgui(".x%lx.c create prect %d %d %d %d "
             "-stroke $pd_colors(iemgui_border) "
             "-tags {%lxBASE%d %lxBASE x%lx text iemgui border}\n",
             canvas, x1, yi, x1+d, yi, x, i, x, x);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            gui_vmess("gui_create_radio", "ssiiiiiii",
+              canvas_string(canvas), tagbuf, x1, yi, x1+d, yi, i, x1, y1);
+        }
         sys_vgui(".x%lx.c create prect %d %d %d %d -fill #%6.6x "
             "-stroke #%6.6x -tags {%lxBUT%d x%lx text iemgui}\n",
             canvas, x1+s, yi+s, x1+d-s, yi+d-s,
             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
             x, i, x);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        char colorbuf[MAXPDSTRING];
+        sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
+        gui_vmess("gui_create_radio_buttons", "sssiiiiiiii", canvas_string(canvas),
+            tagbuf, colorbuf, x1+s, yi+s, x1+d-s, yi+d-s, x1, y1, i, x->x_on==i);
         yi += d;
         x->x_drawn = x->x_on;
     } else {
-        if (i) sys_vgui(".x%lx.c create prect %d %d %d %d "
+        if (i)
+        {
+            sys_vgui(".x%lx.c create prect %d %d %d %d "
             "-stroke $pd_colors(iemgui_border) "
             "-tags {%lxBASE%d %lxBASE x%lx text iemgui border}\n",
             canvas, xi, y1, xi, y1+d, x, i, x, x);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            gui_vmess("gui_create_radio", "ssiiiiiii", canvas_string(canvas),
+                tagbuf, xi, y1, xi, y1+d, i, x1, y1);
+        }
         sys_vgui(".x%lx.c create prect %d %d %d %d -fill #%6.6x "
             "-stroke #%6.6x -tags {%lxBUT%d x%lx text iemgui}\n",
             canvas, xi+s, y1+s, xi+d-s, y1+d-s,
             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
             (x->x_on==i)?x->x_gui.x_fcol:x->x_gui.x_bcol,
             x, i, x);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        char colorbuf[MAXPDSTRING];
+        sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
+        gui_vmess("gui_create_radio_buttons", "sssiiiiiiii", canvas_string(canvas),
+            tagbuf, colorbuf, xi+s, y1+s, xi+d-s, yi+d-s, x1, y1, i, x->x_on==i);
         xi += d;
         x->x_drawn = x->x_on;
     }
diff --git a/pd/src/g_readwrite.c b/pd/src/g_readwrite.c
index 6d31a8a2a..5dd095180 100644
--- a/pd/src/g_readwrite.c
+++ b/pd/src/g_readwrite.c
@@ -776,8 +776,9 @@ static void canvas_savetofile(t_canvas *x, t_symbol *filename, t_symbol *dir)
 static void canvas_menusaveas(t_canvas *x)
 {
     t_canvas *x2 = canvas_getrootfor(x);
-    sys_vgui("pdtk_canvas_saveas .x%lx \"%s\" \"%s\"\n", x2,
-        x2->gl_name->s_name, canvas_getdir(x2)->s_name);
+    gui_vmess("gui_canvas_saveas", "sss", canvas_string(x2), x2->gl_name->s_name, canvas_getdir(x2)->s_name);
+//    sys_vgui("pdtk_canvas_saveas .x%lx \"%s\" \"%s\"\n", x2,
+//        x2->gl_name->s_name, canvas_getdir(x2)->s_name);
 }
 
 static void canvas_menusave(t_canvas *x)
diff --git a/pd/src/g_rtext.c b/pd/src/g_rtext.c
index 4e7ba86b7..961e07918 100644
--- a/pd/src/g_rtext.c
+++ b/pd/src/g_rtext.c
@@ -330,7 +330,12 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp,
         // add a null character at the end of the string (for u8_charnum)
         tempbuf[outchars_b++] = '\0';
 
-        pixwide = ncolumns * fontwidth + (LMARGIN + RMARGIN);
+        // The following is an enormous hack to get the box width to match size 12px
+        // DejaVu as closely as possible.  A better solution would require a fuller
+        // understanding of the font logic here and in s_main.
+        //pixwide = ncolumns * fontwidth + (LMARGIN + RMARGIN);
+        float fudge_factor = 0.2;
+        pixwide = (int)(ncolumns * (fontwidth + fudge_factor) + (LMARGIN + RMARGIN));
         pixhigh = nlines * fontheight + (TMARGIN + BMARGIN);
         //printf("outchars_b=%d bufsize=%d %d\n", outchars_b, x->x_bufsize, x->x_buf[outchars_b]);
 
@@ -357,11 +362,20 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp,
                 dispx + LMARGIN, dispy + TMARGIN,
                 outchars_b, tempbuf, sys_hostfontsize(font),
                 (glist_isselected(x->x_glist, ((t_gobj*)x->x_text)) ? "$pd_colors(selection)" : "$pd_colors(text)"));
+            gui_vmess("gui_text_new", "sssiffsi",
+                canvas_string(canvas), x->x_tag, rtext_gettype(x)->s_name,
+                glist_isselected(x->x_glist, ((t_gobj*)x->x_text)),
+                dispx + LMARGIN,
+                dispy + TMARGIN,
+                tempbuf,
+                sys_hostfontsize(font));
+               
         }
         else if (action == SEND_UPDATE)
         {
             sys_vgui("pdtk_text_set .x%lx.c %s {%.*s}\n",
                 canvas, x->x_tag, outchars_b, tempbuf);
+            gui_vmess("gui_text_set", "sss", canvas_string(canvas), x->x_tag, tempbuf);
 
             if (pixwide != x->x_drawnwidth || pixhigh != x->x_drawnheight) 
                 text_drawborder(x->x_text, x->x_glist, x->x_tag,
diff --git a/pd/src/g_scalar.c b/pd/src/g_scalar.c
index 02d2e78b1..baebc17ae 100644
--- a/pd/src/g_scalar.c
+++ b/pd/src/g_scalar.c
@@ -412,45 +412,56 @@ static void scalar_getrect(t_gobj *z, t_glist *owner,
 
 void scalar_drawselectrect(t_scalar *x, t_glist *glist, int state)
 {
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "scalar%lx", (long unsigned int)x->sc_vec);
+
     //fprintf(stderr,"scalar_drawselecterect%d\n", state);
     if (state)
     {
         int x1, y1, x2, y2;
-       
+        t_float basex, basey;
+        scalar_getbasexy(x, &basex, &basey);
+
         scalar_getrect(&x->sc_gobj, glist, &x1, &y1, &x2, &y2);
         x1--; x2++; y1--; y2++;
         if (glist_istoplevel(glist))
+        {
             sys_vgui(".x%lx.c create prect %d %d %d %d "
                      "-strokewidth 1 -stroke $pd_colors(selection) "
                      "-tags {select%lx selected}\n",
                     glist_getcanvas(glist), x1, y1, x2, y2,
                     x);
+            gui_vmess("gui_scalar_draw_select_rect", "ssiiiiiff",
+                canvas_string(glist_getcanvas(glist)), tagbuf,
+                state,
+                x1, y1, x2, y2, basex, basey);
+        }
     }
     else
     {
         if (glist_istoplevel(glist))
             sys_vgui(".x%lx.c delete select%lx\n", glist_getcanvas(glist), x);
+        gui_vmess("gui_scalar_draw_select_rect", "ssiiiiiii",
+            canvas_string(glist_getcanvas(glist)), tagbuf,
+            state,
+            0, 0, 0, 0, 0, 0);
     }
 }
 
-/* This is a workaround.  Since scalars are contained within a tkpath
-   group, and since tkpath groups don't have coords, we can't just use
-   the same "selected" tag that is used to move all other Pd objects. That
-   would move scalars in their local coordinate system, which is wrong
-   for transformed objects. For example, if a rectangle is rotated 45 and
-   we try to do a [canvas move 10 0] command on it, it would get moved to
-   the northeast instead of to the right!
+/* This is greatly simplified with Node-Webkit-- we just need to get the
+   basex/basey for the scalar, in addition to the bbox of the scalar.
 
-   Instead, we tag selected scalars with the "scalar_selected" tag. Then in
-   the GUI we use that tag to loop through and change each scalar's group
-   matrix, and add (dx,dy) to its current translation values. The scalar
-   group matrix .scalar%lx isn't accessible by the user, so it will only
-   ever contain these translation values.
+   This can be simplified further by using a single function on the GUI
+   side, and sending it the "state" parameter.
 */
 void scalar_select(t_gobj *z, t_glist *owner, int state)
 {
     //fprintf(stderr,"scalar_select %d\n", state);
     t_scalar *x = (t_scalar *)z;
+
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "scalar%lx", (long unsigned int)x->sc_vec);
+
     t_template *tmpl;
     t_symbol *templatesym = x->sc_template;
     t_atom at;
@@ -473,6 +484,8 @@ void scalar_select(t_gobj *z, t_glist *owner, int state)
             glist_getcanvas(owner), x);
         sys_vgui(".x%lx.c addtag scalar_selected withtag {.scalar%lx}\n",
             glist_getcanvas(owner), x->sc_vec);
+        gui_vmess("gui_text_select", "ss",
+            canvas_string(glist_getcanvas(owner)), tagbuf);
     }
     else
     {
@@ -481,6 +494,8 @@ void scalar_select(t_gobj *z, t_glist *owner, int state)
             glist_getcanvas(owner), x);
         sys_vgui(".x%lx.c dtag .scalar%lx scalar_selected\n",
             glist_getcanvas(owner), x->sc_vec);
+        gui_vmess("gui_text_deselect", "ss",
+            canvas_string(glist_getcanvas(owner)), tagbuf);
     }
     //sys_vgui("pdtk_select_all_gop_widgets .x%lx %lx %d\n",
     //    glist_getcanvas(owner), owner, state);
@@ -617,6 +632,112 @@ static void scalar_delete(t_gobj *z, t_glist *glist)
 
 extern void svg_grouptogui(t_glist *g, t_template *template, t_word *data);
 
+extern void svg_parentwidgettogui(t_gobj *z, t_glist *owner, t_word *data,
+    t_template *template);
+
+static void scalar_group_configure(t_scalar *x, t_glist *owner,
+    t_template *template, t_glist *gl, t_glist *parent)
+{
+    t_gobj *y;
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "dgroup%lx.%lx", (long unsigned int)gl,
+        (long unsigned int)x->sc_vec);
+    char parentbuf[MAXPDSTRING];
+    sprintf(parentbuf, "dgroup%lx.%lx", (long unsigned int)parent,
+        (long unsigned int)x->sc_vec);
+    gui_start_vmess("gui_draw_configure_all", "ss",
+        canvas_string(glist_getcanvas(owner)), tagbuf);
+    svg_grouptogui(gl, template, x->sc_vec);
+    gui_end_vmess();
+    for (y = gl->gl_list; y; y = y->g_next)
+    {
+        if (pd_class(&y->g_pd) == canvas_class &&
+            ((t_glist *)y)->gl_svg)
+        {
+            scalar_group_configure(x, owner, template, (t_glist *)y, gl);
+        }
+        t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
+        if (!wb) continue;
+        //(*wb->w_parentvisfn)(y, owner, gl, x, x->sc_vec, template,
+        //   0, 0, vis);
+        svg_parentwidgettogui(y, owner, x->sc_vec, template);
+    }
+}
+
+void scalar_configure(t_scalar *x, t_glist *owner)
+{
+    int vis = glist_isvisible(owner);
+    if (vis)
+    {
+        //fprintf(stderr,"scalar_vis %d %lx\n", vis, (t_int)z);
+        x->sc_bboxcache = 0;
+
+        t_template *template = template_findbyname(x->sc_template);
+        t_canvas *templatecanvas = template_findcanvas(template);
+        t_gobj *y;
+        t_float basex, basey;
+        scalar_getbasexy(x, &basex, &basey);
+            /* if we don't know how to draw it, make a small rectangle */
+
+        t_float xscale = glist_xtopixels(owner, 1) - glist_xtopixels(owner, 0);
+        t_float yscale = glist_ytopixels(owner, 1) - glist_ytopixels(owner, 0);
+
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "scalar%lx", (long unsigned int)x->sc_vec);
+        gui_vmess("gui_scalar_configure_gobj", "ssiffffii",
+            canvas_string(glist_getcanvas(owner)), 
+            tagbuf,
+            glist_isselected(owner, &x->sc_gobj),
+            xscale, 0.0, 0.0, yscale,
+            (int)glist_xtopixels(owner, basex),
+            (int)glist_ytopixels(owner, basey));
+
+        char groupbuf[MAXPDSTRING];
+        // Quick hack to make gui_create_scalar_group more general (so we
+        // don't have to tack on "gobj" manually)
+
+
+        //Not sure if we need this here...
+        //sprintf(tagbuf, "scalar%lxgobj", (long unsigned int)x->sc_vec);
+        //sprintf(groupbuf, "dgroup%lx.%lx", (long unsigned int)templatecanvas,
+        //    (long unsigned int)x->sc_vec);
+        //gui_vmess("gui_create_scalar_group", "sss",
+        //    canvas_string(glist_getcanvas(owner)), groupbuf, tagbuf); 
+        //sys_vgui("pdtk_bind_scalar_mouseover "
+        //         ".x%lx.c .x%lx.x%lx.template%lx {.x%lx}\n",
+        //    glist_getcanvas(owner), glist_getcanvas(owner),
+        //    owner, x->sc_vec, x);
+
+        for (y = templatecanvas->gl_list; y; y = y->g_next)
+        {
+            t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
+            if (!wb)
+            {
+                /* check subpatches for more drawing commands.
+                   (Optimized to only search [group] subpatches) */
+                if (pd_class(&y->g_pd) == canvas_class &&
+                    ((t_glist *)y)->gl_svg)
+                {
+                    scalar_group_configure(x, owner, template,
+                        (t_glist *)y, templatecanvas);
+                }
+                continue;
+            }
+            //(*wb->w_parentvisfn)(y, owner, 0, x, x->sc_vec, template,
+            //    basex, basey, vis);
+            svg_parentwidgettogui(y, owner, x->sc_vec, template);
+        }
+        if (glist_isselected(owner, &x->sc_gobj))
+        {
+            // we removed this because it caused infinite recursion
+            // in the scalar-help.pd example
+            //scalar_select(z, owner, 1);
+            scalar_drawselectrect(x, owner, 0);
+            scalar_drawselectrect(x, owner, 1);
+        }
+    }
+}
+
 static void scalar_groupvis(t_scalar *x, t_glist *owner, t_template *template,
     t_glist *gl, t_glist *parent, int vis)
 {
@@ -627,8 +748,17 @@ static void scalar_groupvis(t_scalar *x, t_glist *owner, t_template *template,
                  "-parent {.dgroup%lx.%lx}\\\n",
             glist_getcanvas(owner), gl, x->sc_vec,
             parent, x->sc_vec);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "dgroup%lx.%lx", (long unsigned int)gl,
+            (long unsigned int)x->sc_vec);
+        char parentbuf[MAXPDSTRING];
+        sprintf(parentbuf, "dgroup%lx.%lx", (long unsigned int)parent,
+            (long unsigned int)x->sc_vec);
+        gui_start_vmess("gui_create_scalar_group", "sss",
+            canvas_string(glist_getcanvas(owner)), tagbuf, parentbuf);
         svg_grouptogui(gl, template, x->sc_vec);
-        sys_gui("\n");
+        gui_end_vmess();
+        //sys_gui("\n");
 
     }
     for (y = gl->gl_list; y; y = y->g_next)
@@ -727,9 +857,26 @@ static void scalar_vis(t_gobj *z, t_glist *owner, int vis)
             xscale, 0.0, 0.0, yscale, (int)glist_xtopixels(owner, basex),
             (int)glist_ytopixels(owner, basey)
             );
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "scalar%lx", (long unsigned int)x->sc_vec);
+        gui_vmess("gui_create_scalar", "ssiffffii",
+            canvas_string(glist_getcanvas(owner)), 
+            tagbuf,
+            glist_isselected(owner, &x->sc_gobj),
+            xscale, 0.0, 0.0, yscale,
+            (int)glist_xtopixels(owner, basex),
+            (int)glist_ytopixels(owner, basey));
         sys_vgui(".x%lx.c create group -tags {.dgroup%lx.%lx} "
                  "-parent {.scalar%lx}\n",
             glist_getcanvas(owner), templatecanvas, x->sc_vec, x->sc_vec);
+        char groupbuf[MAXPDSTRING];
+        // Quick hack to make gui_create_scalar_group more general (so we
+        // don't have to tack on "gobj" manually)
+        sprintf(tagbuf, "scalar%lxgobj", (long unsigned int)x->sc_vec);
+        sprintf(groupbuf, "dgroup%lx.%lx", (long unsigned int)templatecanvas,
+            (long unsigned int)x->sc_vec);
+        gui_vmess("gui_create_scalar_group", "sss",
+            canvas_string(glist_getcanvas(owner)), groupbuf, tagbuf);
         sys_vgui("pdtk_bind_scalar_mouseover "
                  ".x%lx.c .x%lx.x%lx.template%lx {.x%lx}\n",
             glist_getcanvas(owner), glist_getcanvas(owner),
@@ -742,8 +889,8 @@ static void scalar_vis(t_gobj *z, t_glist *owner, int vis)
         t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd);
         if (!wb)
         {
-            /* check subpatches for more drawing commands.  This
-               can be optimized to only search [group] subpatches */
+            /* check subpatches for more drawing commands.
+               (Optimized to only search [group] subpatches) */
             if (pd_class(&y->g_pd) == canvas_class &&
                 ((t_glist *)y)->gl_svg)
             {
@@ -756,8 +903,14 @@ static void scalar_vis(t_gobj *z, t_glist *owner, int vis)
             basex, basey, vis);
     }
     if (!vis)
+    {
         sys_vgui(".x%lx.c delete .scalar%lx\n", glist_getcanvas(owner),
             x->sc_vec);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "scalar%lx", (long unsigned int)x->sc_vec);
+        gui_vmess("gui_scalar_erase", "ss",
+            canvas_string(glist_getcanvas(owner)), tagbuf);
+    }
 
     sys_unqueuegui(x);
     if (glist_isselected(owner, &x->sc_gobj))
diff --git a/pd/src/g_slider.c b/pd/src/g_slider.c
index 08fc5c511..1be19a1e2 100644
--- a/pd/src/g_slider.c
+++ b/pd/src/g_slider.c
@@ -33,10 +33,20 @@ static void slider_draw_update(t_gobj *client, t_glist *glist)
         r=y2-3 - (x->x_val+50)/100;
         sys_vgui(".x%lx.c coords %lxKNOB %d %d %d %d\n",
             canvas, x, x1+2, r, x2-2, r);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_slider_update", "ssiiiiii",
+            canvas_string(canvas), tagbuf, x1+2, r, x2-2, r,
+            x1, y1);
     } else {
         r=x1+3 + (x->x_val+50)/100;
         sys_vgui(".x%lx.c coords %lxKNOB %d %d %d %d\n",
             canvas, x, r, y1+2, r, y2-2);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_slider_update", "ssiiiiii",
+            canvas_string(canvas), tagbuf, r, y1+2, r, y2-2,
+            x1, y1);
     }
     int t = x->x_thick;
     x->x_thick = x->x_val == x->x_center;
@@ -59,10 +69,22 @@ static void slider_draw_new(t_slider *x, t_glist *glist)
         sys_vgui(".x%lx.c create polyline %d %d %d %d -strokewidth 3 "
             "-stroke #%6.6x -tags {%lxKNOB x%lx text iemgui}\n",
             canvas, x1+2, r, x2-2, r, x->x_gui.x_fcol, x, x);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        char colorbuf[MAXPDSTRING];
+        sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
+        gui_vmess("gui_create_slider", "sssiiiiii", canvas_string(canvas), tagbuf,
+            colorbuf, x1+2, r, x2-2, r, x1, y1);
     } else {
         sys_vgui(".x%lx.c create polyline %d %d %d %d -strokewidth 3 "
             "-stroke #%6.6x -tags {%lxKNOB x%lx text iemgui}\n",
             canvas, r, y1+2, r, y2-2, x->x_gui.x_fcol, x, x);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        char colorbuf[MAXPDSTRING];
+        sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
+        gui_vmess("gui_create_slider", "sssiiiiii", canvas_string(canvas), tagbuf,
+            colorbuf, r, y1+2, r, y2-2, x1, y1);
     }
 }
 
diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index 08fba1d1e..32c415f50 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -1472,13 +1472,13 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s,
     if (x->x_type == gensym("group"))
     {
         sprintf(tag, "%s%lx.%lx",
-            (in_array ? ".scelem" : ".dgroup"),
+            (in_array ? "scelem" : "dgroup"),
             (long unsigned int)x->x_parent,
             (long unsigned int)data);
     }
     else
     {
-        sprintf(tag, ".draw%lx.%lx",
+        sprintf(tag, "draw%lx.%lx",
             (long unsigned int)x->x_parent,
             (long unsigned int)data);
     }
@@ -1499,8 +1499,10 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s,
         }
         else
             fill = &s_;
-        sys_vgui(".x%lx.c itemconfigure %s -fill %s\n",
-            glist_getcanvas(c), tag, fill->s_name);
+        //sys_vgui(".x%lx.c itemconfigure %s -fill %s\n",
+        //    glist_getcanvas(c), tag, fill->s_name);
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, s->s_name, fill->s_name);
     }
     else if (s == gensym("stroke"))
     {
@@ -1516,79 +1518,120 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s,
                 (int)fielddesc_getfloat(fd+2, template, data, 1)));
         }
         else stroke = &s_;
-        sys_vgui(".x%lx.c itemconfigure %s -stroke %s\n",
-            glist_getcanvas(c), tag, stroke->s_name);
+        //sys_vgui(".x%lx.c itemconfigure %s -stroke %s\n",
+        //    glist_getcanvas(c), tag, stroke->s_name);
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, s->s_name, stroke->s_name);
     }
     else if (s == gensym("fill-opacity"))
-        sys_vgui(".x%lx.c itemconfigure %s -fillopacity %g\n",
-            glist_getcanvas(c), tag,
+        //sys_vgui(".x%lx.c itemconfigure %s -fillopacity %g\n",
+        //    glist_getcanvas(c), tag,
+        //    fielddesc_getcoord(&x->x_fillopacity.a_attr, template, data, 1));
+        gui_vmess("gui_draw_configure", "sssf",
+            canvas_string(glist_getcanvas(c)), tag, "fill-opacity",
             fielddesc_getcoord(&x->x_fillopacity.a_attr, template, data, 1));
     else if (s == gensym("fill-rule"))
-        sys_vgui(".x%lx.c itemconfigure %s -fillrule %s\n",
-            glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+        //sys_vgui(".x%lx.c itemconfigure %s -fillrule %s\n",
+        //    glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+        //        &x->x_fillrule.a_attr, template, data, 1) ?
+        //            "evenodd" : "nonzero");
+        gui_vmess("gui_draw_configure", "sssi",
+            canvas_string(glist_getcanvas(c)), tag, "fill-rule", (int)fielddesc_getcoord(
                 &x->x_fillrule.a_attr, template, data, 1) ?
                     "evenodd" : "nonzero");
     else if (s == gensym("pointer-events"))
         *predraw_bbox = 1;
     else if (s == gensym("stroke-linecap"))
-        sys_vgui(".x%lx.c itemconfigure %s -strokelinecap %s\n",
-            glist_getcanvas(c), tag, get_strokelinecap(
+        //sys_vgui(".x%lx.c itemconfigure %s -strokelinecap %s\n",
+        //   glist_getcanvas(c), tag, get_strokelinecap(
+        //        (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr,
+        //            template, data, 1)));
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, "stroke-linecap", get_strokelinecap(
                 (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr,
                     template, data, 1)));
     else if (s == gensym("stroke-linejoin"))
-        sys_vgui(".x%lx.c itemconfigure %s -strokelinejoin %s\n",
-            glist_getcanvas(c), tag, get_strokelinejoin(
+        //sys_vgui(".x%lx.c itemconfigure %s -strokelinejoin %s\n",
+        //    glist_getcanvas(c), tag, get_strokelinejoin(
+        //        (int)fielddesc_getcoord(&x->x_strokelinejoin.a_attr,
+        //            template, data, 1)));
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, "stroke-linejoin", get_strokelinejoin(
                 (int)fielddesc_getcoord(&x->x_strokelinejoin.a_attr,
                     template, data, 1)));
     else if (s == gensym("stroke-miterlimit"))
-        sys_vgui(".x%lx.c itemconfigure %s -strokemiterlimit %g\n",
-            glist_getcanvas(c), tag, fielddesc_getcoord(
+        //sys_vgui(".x%lx.c itemconfigure %s -strokemiterlimit %g\n",
+        //    glist_getcanvas(c), tag, fielddesc_getcoord(
+        //        &x->x_strokemiterlimit.a_attr, template, data, 1));
+        gui_vmess("gui_draw_configure", "sssf",
+            canvas_string(glist_getcanvas(c)), tag, "stroke-miterlimit", fielddesc_getcoord(
                 &x->x_strokemiterlimit.a_attr, template, data, 1));
     else if (s == gensym("stroke-opacity"))
-        sys_vgui(".x%lx.c itemconfigure %s -strokeopacity %g\n",
-            glist_getcanvas(c), tag, fielddesc_getcoord(
+        //sys_vgui(".x%lx.c itemconfigure %s -strokeopacity %g\n",
+        //    glist_getcanvas(c), tag, fielddesc_getcoord(
+        //        &x->x_strokeopacity.a_attr, template, data, 1));
+        gui_vmess("gui_draw_configure", "sssg",
+            canvas_string(glist_getcanvas(c)), tag, "stroke-opacity", fielddesc_getcoord(
                 &x->x_strokeopacity.a_attr, template, data, 1));
     else if (s == gensym("stroke-width"))
     {
-        sys_vgui(".x%lx.c itemconfigure %s -strokewidth %g\n",
-            glist_getcanvas(c), tag, fielddesc_getcoord(
+        //sys_vgui(".x%lx.c itemconfigure %s -strokewidth %g\n",
+        //    glist_getcanvas(c), tag, fielddesc_getcoord(
+        //        &x->x_strokewidth.a_attr, template, data, 1));
+        gui_vmess("gui_draw_configure", "sssf",
+            canvas_string(glist_getcanvas(c)), tag, "stroke-width", fielddesc_getcoord(
                 &x->x_strokewidth.a_attr, template, data, 1));
         *predraw_bbox = 1;
     }
     else if (s == gensym("r"))
     {
-        sys_vgui(".x%lx.c itemconfigure %s -rx %g -ry %g\n",
-        glist_getcanvas(c), tag,
-        fielddesc_getcoord(x->x_vec+2, template, data, 1),
-        fielddesc_getcoord(x->x_vec+2, template, data, 1));
+        //sys_vgui(".x%lx.c itemconfigure %s -rx %g -ry %g\n",
+        //glist_getcanvas(c), tag,
+        //fielddesc_getcoord(x->x_vec+2, template, data, 1),
+        //fielddesc_getcoord(x->x_vec+2, template, data, 1));
+        gui_vmess("gui_draw_configure", "sssf",
+            canvas_string(glist_getcanvas(c)), tag, s->s_name,
+            fielddesc_getcoord(x->x_vec+2, template, data, 1));
         *predraw_bbox = 1;
     }
     else if (s == gensym("rx"))
     {
         if (x->x_type == gensym("rect"))
-            sys_vgui(".x%lx.c itemconfigure %s -rx %d\n",
-                glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+            //sys_vgui(".x%lx.c itemconfigure %s -rx %d\n",
+            //    glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+            //        &x->x_rx.a_attr, template, data, 1));
+            gui_vmess("gui_draw_configure", "sssi",
+                canvas_string(glist_getcanvas(c)), tag, s->s_name, (int)fielddesc_getcoord(
                     &x->x_rx.a_attr, template, data, 1));
         else
         {
-            sys_vgui(".x%lx.c itemconfigure %s -rx %g\n",
-                glist_getcanvas(c), tag, fielddesc_getcoord(
-                x->x_vec+2, template, data, 1));
+            //sys_vgui(".x%lx.c itemconfigure %s -rx %g\n",
+            //    glist_getcanvas(c), tag, fielddesc_getcoord(
+            //    x->x_vec+2, template, data, 1));
+            gui_vmess("gui_draw_configure", "sssf",
+                canvas_string(glist_getcanvas(c)), tag, s->s_name, fielddesc_getcoord(
+                    x->x_vec+2, template, data, 1));
             *predraw_bbox = 1;
         }
     }
     else if (s == gensym("ry"))
     {
         if (x->x_type == gensym("rect"))
-            sys_vgui(".x%lx.c itemconfigure %s -ry %d\n",
-                glist_getcanvas(c), tag, (int)fielddesc_getcoord(
-                &x->x_ry.a_attr, template, data, 1));
+            //sys_vgui(".x%lx.c itemconfigure %s -ry %d\n",
+            //    glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+            //    &x->x_ry.a_attr, template, data, 1));
+            gui_vmess("gui_draw_configure", "sssi",
+                canvas_string(glist_getcanvas(c)), tag, s->s_name, (int)fielddesc_getcoord(
+                    &x->x_ry.a_attr, template, data, 1));
         else
         {
-             sys_vgui(".x%lx.c itemconfigure %s -ry %g\n",
-                 glist_getcanvas(c), tag, fielddesc_getcoord(
-                 x->x_vec+3, template, data, 1));
-             *predraw_bbox = 1;
+            //sys_vgui(".x%lx.c itemconfigure %s -ry %g\n",
+            //    glist_getcanvas(c), tag, fielddesc_getcoord(
+            //    x->x_vec+3, template, data, 1));
+            gui_vmess("gui_draw_configure", "sssf",
+                canvas_string(glist_getcanvas(c)), tag, fielddesc_getcoord(
+                    x->x_vec+3, template, data, 1));
+            *predraw_bbox = 1;
         }
     }
     else if (s == gensym("transform"))
@@ -1607,39 +1650,57 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s,
             x->x_pathrect_cache = 0;
         }
         svg_parsetransform(x, template, data, &m1, &m2, &m3, &m4, &m5, &m6);
-            sys_vgui(".x%lx.c itemconfigure %s -matrix "
-                    "{ {%g %g} {%g %g} {%g %g} }\n",
-                    glist_getcanvas(c), tag,
-                    m1, m2, m3, m4, m5, m6);
+        //sys_vgui(".x%lx.c itemconfigure %s -matrix "
+        //         "{ {%g %g} {%g %g} {%g %g} }\n",
+        //            glist_getcanvas(c), tag,
+        //            m1, m2, m3, m4, m5, m6);
+        char mbuf[MAXPDSTRING];
+        sprintf(mbuf, "matrix(%g %g %g %g %g %g)", m1, m2, m3, m4, m5, m6);
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, s->s_name,
+            mbuf);
         *predraw_bbox = 1;
-
     }
     else if (s == gensym("vis"))
     {
-        sys_vgui(".x%lx.c itemconfigure %s -state %s\n",
-            glist_getcanvas(c), tag, (int)fielddesc_getcoord(
-            &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden");
+        //sys_vgui(".x%lx.c itemconfigure %s -state %s\n",
+        //    glist_getcanvas(c), tag, (int)fielddesc_getcoord(
+        //    &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden");
+        gui_vmess("gui_draw_configure", "ssss",
+            canvas_string(glist_getcanvas(c)), tag, "visibility", (int)fielddesc_getcoord(
+            &x->x_vis.a_attr, template, data, 1) ? "visible" : "hidden");
         *predraw_bbox = 1;
     }
     else if (s == gensym("stroke-dasharray"))
     {
+        // not ready yet... need a gui interface for variable size attrs
         if (x->x_ndash)
         {
             t_fielddesc *fd = x->x_strokedasharray;
             int i;
-            sys_vgui(".x%lx.c itemconfigure %s -strokedasharray {",
-                glist_getcanvas(c), tag);
+            //sys_vgui(".x%lx.c itemconfigure %s -strokedasharray {",
+            //    glist_getcanvas(c), tag);
+            gui_start_vmess("gui_draw_configure", "sss",
+                canvas_string(glist_getcanvas(c)), tag, s->s_name);
+            gui_start_array();
             for (i = 0; i < x->x_ndash; i++)
             {
-                sys_vgui(" %g ", fielddesc_getcoord(fd+i, template, data, 1));
+                //sys_vgui(" %g ", fielddesc_getcoord(fd+i, template, data, 1));
+                gui_float_elem(fielddesc_getcoord(fd+i, template, data, 1));
             }
-            sys_gui("}\n");
+            //sys_gui("}\n");
+            gui_end_array();
+            gui_end_vmess();
         }
     }
     else if (s == gensym("data"))
     {
-        sys_vgui(".x%lx.c coords .draw%lx.%lx {\\\n",
-            glist_getcanvas(c), parent, data);
+        //sys_vgui(".x%lx.c coords .draw%lx.%lx {\\\n",
+        //    glist_getcanvas(c), parent, data);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "draw%lx.%lx", (long unsigned int)parent, (long unsigned int)data);
+        gui_start_vmess("gui_draw_configure", "sss",
+            canvas_string(glist_getcanvas(c)), tagbuf, "d"); 
         /* let's turn off bbox caching so we can recalculate the bbox */
         if (x->x_pathrect_cache != -1)
            x->x_pathrect_cache = 0;
@@ -1648,19 +1709,28 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s,
         char *cmd;
         t_fielddesc *f;
         int totalpoints = 0; /* running tally */
+        /* start an array parameter */
+        char cmdbuf[2];
+        gui_start_array();
         /* path parser: no error checking yet */
         for (i = 0, cmd = x->x_pathcmds; i < x->x_npathcmds; i++, cmd++)
         {
             int j;
             int cargs = x->x_nargs_per_cmd[i];
             f = (x->x_vec)+totalpoints;
-            sys_vgui("%c\\\n", *(cmd));
+            //sys_vgui("%c\\\n", *(cmd));
+            sprintf(cmdbuf, "%c", *(cmd));
+            gui_string_elem(cmdbuf);
             for (j = 0; j < x->x_nargs_per_cmd[i]; j++)
-                sys_vgui("%g\\\n", fielddesc_getcoord(
-                    f+j, template, data, 1));
+                //sys_vgui("%g\\\n", fielddesc_getcoord(
+                //    f+j, template, data, 1));
+                gui_float_elem(fielddesc_getcoord(
+                    f+j, template, data, 0));
             totalpoints += x->x_nargs_per_cmd[i];
         }
-        sys_gui("}\n");
+        //sys_gui("}\n");
+        gui_end_array();
+        gui_end_vmess();
     }
     else if (s == gensym("index"))
     {
@@ -2421,16 +2491,16 @@ void svg_parsetransform(t_svg *x, t_template *template, t_word *data,
         }
         else if (type == gensym("skewx"))
         {
-            t_float a = fielddesc_getfloat(fd++, template, data, 0) *
-                3.14159 / 180;
+            t_float a = fielddesc_getfloat(fd++, template, data, 0); // *
+            //    3.14159 / 180;
             argc--;
             mset(m2, 1, 0, tan(a), 1, 0, 0);
             mmult(m, m2, m);
         }
         else if (type == gensym("skewy"))
         {
-            t_float a = fielddesc_getfloat(fd++, template, data, 0) *
-                3.14159 / 180;
+            t_float a = fielddesc_getfloat(fd++, template, data, 0); // *
+            //    3.14159 / 180;
             argc--;
             mset(m2, 1, tan(a), 0, 1, 0, 0);
             mmult(m, m2, m);
@@ -3429,6 +3499,10 @@ static void draw_activate(t_gobj *z, t_glist *glist,
 
 static void svg_togui(t_svg *x, t_template *template, t_word *data)
 {
+    // Hack to send parameter as an object to the GUI. Not sure yet if
+    // we want to generalize that...
+    //sys_gui(",{ "); 
+    gui_start_array();
     if (x->x_type != gensym("line"))
     {
         if (x->x_filltype)
@@ -3437,24 +3511,60 @@ static void svg_togui(t_svg *x, t_template *template, t_word *data)
             if (x->x_filltype == 1)
             {
                 t_symbol *f = fielddesc_getsymbol(fd, template, data, 1);
-                sys_vgui("-fill %s ", f->s_name);
+                //sys_vgui("-fill %s ", f->s_name);
+                //sys_vgui("fill: '%s',", f->s_name);
+                gui_string_elem("fill");
+                gui_string_elem(f->s_name);
             }
             else if (x->x_filltype == 2)
-                sys_vgui("-fill %s ", rgb_to_hex(
+            {
+                //sys_vgui("-fill %s ", rgb_to_hex(
+                //    (int)fielddesc_getfloat(fd,
+                //    template, data, 1),
+                //    (int)fielddesc_getfloat(fd+1,
+                //    template, data, 1),
+                //    (int)fielddesc_getfloat(fd+2,
+                //    template, data, 1)));
+
+                //sys_vgui("fill: '%s',", rgb_to_hex(
+                //    (int)fielddesc_getfloat(fd,
+                //    template, data, 1),
+                //    (int)fielddesc_getfloat(fd+1,
+                //    template, data, 1),
+                //    (int)fielddesc_getfloat(fd+2,
+                //    template, data, 1)));
+                gui_string_elem("fill");
+                gui_string_elem(rgb_to_hex(
                     (int)fielddesc_getfloat(fd,
                     template, data, 1),
                     (int)fielddesc_getfloat(fd+1,
                     template, data, 1),
                     (int)fielddesc_getfloat(fd+2,
                     template, data, 1)));
+            }
         }
         if (x->x_fillopacity.a_flag)
-            sys_vgui("-fillopacity %g ",
-               fielddesc_getfloat(&x->x_fillopacity.a_attr, template, data, 1));
+        {
+            //sys_vgui("-fillopacity %g ",
+            //   fielddesc_getfloat(&x->x_fillopacity.a_attr, template, data, 1));
+            //sys_vgui("fill-opacity: %g,",
+            //   fielddesc_getfloat(&x->x_fillopacity.a_attr, template, data, 1));
+            gui_string_elem("fill-opacity");
+            gui_float_elem(fielddesc_getfloat(&x->x_fillopacity.a_attr, template, data, 1));
+        }
         if (x->x_fillrule.a_flag)
-            sys_vgui("-fillrule %s ", (int)fielddesc_getfloat(
+        {
+            //sys_vgui("-fillrule %s ", (int)fielddesc_getfloat(
+            //    &x->x_fillrule.a_attr, template, data, 1) ?
+            //        "evenodd" : "nonzero");
+            //sys_vgui("'fill-rule': '%s',", (int)fielddesc_getfloat(
+            //    &x->x_fillrule.a_attr, template, data, 1) ?
+            //        "evenodd" : "nonzero");
+            gui_string_elem("fill-rule");
+            gui_string_elem((int)fielddesc_getfloat(
                 &x->x_fillrule.a_attr, template, data, 1) ?
                     "evenodd" : "nonzero");
+        }
     }
     if (x->x_stroketype)
     {
@@ -3462,46 +3572,124 @@ static void svg_togui(t_svg *x, t_template *template, t_word *data)
         if (x->x_stroketype == 1)
         {
             t_symbol *s = fielddesc_getsymbol(fd, template, data, 1);
-            sys_vgui("-stroke %s ", s->s_name);
+            //sys_vgui("-stroke %s ", s->s_name);
+            //sys_vgui("stroke: '%s',", s->s_name);
+            gui_string_elem("stroke");
+            gui_string_elem(s->s_name);
         }
         else if (x->x_stroketype == 2)
-            sys_vgui("-stroke %s ", rgb_to_hex(
+        {
+            //sys_vgui("-stroke %s ", rgb_to_hex(
+            //    (int)fielddesc_getfloat(fd,
+            //    template, data, 1),
+            //    (int)fielddesc_getfloat(fd+1,
+            //    template, data, 1),
+            //    (int)fielddesc_getfloat(fd+2,
+            //    template, data, 1)));
+            //sys_vgui("stroke: '%s',", rgb_to_hex(
+            //    (int)fielddesc_getfloat(fd,
+            //    template, data, 1),
+            //    (int)fielddesc_getfloat(fd+1,
+            //    template, data, 1),
+            //    (int)fielddesc_getfloat(fd+2,
+            //    template, data, 1)));
+
+            gui_string_elem("stroke");
+            gui_string_elem(rgb_to_hex(
                 (int)fielddesc_getfloat(fd,
                 template, data, 1),
                 (int)fielddesc_getfloat(fd+1,
                 template, data, 1),
                 (int)fielddesc_getfloat(fd+2,
                 template, data, 1)));
+        }
     }
     if (x->x_strokewidth.a_flag)
-        sys_vgui("-strokewidth %g\\\n",
-            fielddesc_getfloat(&x->x_strokewidth.a_attr, template, data, 1));
+    {
+        //sys_vgui("-strokewidth %g\\\n",
+        //    fielddesc_getfloat(&x->x_strokewidth.a_attr, template, data, 1));
+        //sys_vgui("stroke-width: %g,",
+        //    fielddesc_getfloat(&x->x_strokewidth.a_attr, template, data, 1));
+        gui_string_elem("stroke-width");
+        gui_float_elem(fielddesc_getfloat(&x->x_strokewidth.a_attr, template, data, 1));
+    }
+    if (x->x_type == gensym("circle"))
+    {
+        if (x->x_nargs > 0)
+        {
+            gui_string_elem("cx");
+            gui_float_elem(fielddesc_getfloat(&x->x_vec[0], template, data, 1));
+        }
+    }
     if (x->x_strokeopacity.a_flag)
-        sys_vgui("-strokeopacity %g ",
-            fielddesc_getfloat(&x->x_strokeopacity.a_attr, template, data, 1));
+    {
+        //sys_vgui("-strokeopacity %g ",
+        //    fielddesc_getfloat(&x->x_strokeopacity.a_attr, template, data, 1));
+        //sys_vgui("'stroke-opacity': %g,",
+        //    fielddesc_getfloat(&x->x_strokeopacity.a_attr, template, data, 1));
+
+        gui_string_elem("stroke-opacity");
+        gui_float_elem(fielddesc_getfloat(&x->x_strokeopacity.a_attr, template, data, 1));
+    }
     if (x->x_strokelinecap.a_flag)
-        sys_vgui("-strokelinecap %s ", get_strokelinecap(
+    {
+        //sys_vgui("-strokelinecap %s ", get_strokelinecap(
+        //    (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr,
+        //    template, data, 1)));
+        //sys_vgui("'stroke-linecap': '%s',", get_strokelinecap(
+        //    (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr,
+        //    template, data, 1)));
+
+        gui_string_elem("stroke-linecap");
+        gui_string_elem(get_strokelinecap(
             (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr,
             template, data, 1)));
+    }
     if (x->x_strokelinejoin.a_flag)
-        sys_vgui("-strokelinejoin %s ", get_strokelinejoin(
+    {
+        //sys_vgui("-strokelinejoin %s ", get_strokelinejoin(
+        //    (int)fielddesc_getfloat(&x->x_strokelinejoin.a_attr,
+        //template, data, 1)));
+        //sys_vgui("'stroke-linejoin': '%s',", get_strokelinejoin(
+        //    (int)fielddesc_getfloat(&x->x_strokelinejoin.a_attr,
+        //template, data, 1)));
+
+        gui_string_elem("stroke-linejoin");
+        gui_string_elem(get_strokelinejoin(
             (int)fielddesc_getfloat(&x->x_strokelinejoin.a_attr,
         template, data, 1)));
+    }
     if (x->x_strokemiterlimit.a_flag)
-        sys_vgui("-strokemiterlimit %g ",
-            fielddesc_getfloat(&x->x_strokemiterlimit.a_attr,
+    {
+        //sys_vgui("-strokemiterlimit %g ",
+        //    fielddesc_getfloat(&x->x_strokemiterlimit.a_attr,
+        //    template, data, 1));
+        //sys_vgui("'stroke-miterlimit': %g,",
+        //    fielddesc_getfloat(&x->x_strokemiterlimit.a_attr,
+        //    template, data, 1));
+        gui_string_elem("stroke-miterlimit");
+        gui_float_elem(fielddesc_getfloat(&x->x_strokemiterlimit.a_attr,
             template, data, 1));
+    }
     if (x->x_ndash)
     {
         int i;
         t_fielddesc *fd;
-        sys_gui(" -strokedasharray {\\\n");
+        // inner array...
+        //sys_gui(" -strokedasharray {\\\n");
+        //sys_gui("'stroke-dasharray': \"");
+        gui_string_elem("stroke-dasharray");
+        gui_start_array();
         for (i = 0, fd = x->x_strokedasharray; i < x->x_ndash; i++)
         {
-            sys_vgui("%d\\\n", (int)fielddesc_getfloat(fd+i,
+            // Should this be a float?
+            //sys_vgui("%d ", (int)fielddesc_getfloat(fd+i,
+            //template, data, 1));
+            gui_int_elem((int)fielddesc_getfloat(fd+i,
             template, data, 1));
         }
-        sys_gui("}\\\n");
+        //sys_gui("\",");
+        gui_end_array();
     }
     if (x->x_transform_n > 0)
     {
@@ -3509,24 +3697,48 @@ static void svg_togui(t_svg *x, t_template *template, t_word *data)
         t_float m1, m2, m3, m4, m5, m6;
         svg_parsetransform(x, template, data, &m1, &m2, &m3,
             &m4, &m5, &m6);
-        sys_vgui("-matrix { {%g %g} {%g %g} {%g %g} }\\\n",
+        //sys_vgui("-matrix { {%g %g} {%g %g} {%g %g} }\\\n",
+        //    m1, m2, m3, m4, m5, m6);
+        gui_string_elem("transform");
+        char transbuf[MAXPDSTRING];
+        sprintf(transbuf, "matrix(%g,%g,%g,%g,%g,%g)",
             m1, m2, m3, m4, m5, m6);
+        gui_string_elem(transbuf);
     }
     if (x->x_vis.a_flag) 
     { 
-        sys_vgui("-state %s ", fielddesc_getfloat(&x->x_vis.a_attr, 
-            template, data, 1) ? "normal" : "hidden"); 
+        //sys_vgui("-state %s ", fielddesc_getfloat(&x->x_vis.a_attr, 
+        //    template, data, 1) ? "normal" : "hidden"); 
+        //sys_vgui("visibility: '%s',", fielddesc_getfloat(&x->x_vis.a_attr, 
+        //    template, data, 1) ? "visible" : "hidden"); 
+        gui_string_elem("visibility");
+        gui_string_elem(fielddesc_getfloat(&x->x_vis.a_attr, 
+            template, data, 1) ? "visible" : "hidden"); 
     }
     if (x->x_rx.a_flag)
     {
-        sys_vgui("-rx %d ", (int)fielddesc_getfloat(&x->x_rx.a_attr,
+        //sys_vgui("-rx %d ", (int)fielddesc_getfloat(&x->x_rx.a_attr,
+        //    template, data, 1));
+        //sys_vgui("rx: %d,", (int)fielddesc_getfloat(&x->x_rx.a_attr,
+        //    template, data, 1));
+        gui_string_elem("rx");
+        gui_int_elem((int)fielddesc_getfloat(&x->x_rx.a_attr,
             template, data, 1));
     }
     if (x->x_ry.a_flag)
     {
-        sys_vgui("-ry %d ", (int)fielddesc_getfloat(&x->x_ry.a_attr,
+        //sys_vgui("-ry %d ", (int)fielddesc_getfloat(&x->x_ry.a_attr,
+        //    template, data, 1));
+        //sys_vgui("ry: %d,", (int)fielddesc_getfloat(&x->x_ry.a_attr,
+        //    template, data, 1));
+        gui_string_elem("ry");
+        gui_float_elem((int)fielddesc_getfloat(&x->x_ry.a_attr,
             template, data, 1));
     }
+    gui_string_elem("display");
+    gui_string_elem("inline");
+    //sys_gui("display: 'inline'},");
+    gui_end_array();
 }
 
 void svg_grouptogui(t_glist *g, t_template *template, t_word *data)
@@ -3535,6 +3747,23 @@ void svg_grouptogui(t_glist *g, t_template *template, t_word *data)
     svg_togui(x, template, data);
 }
 
+void svg_parentwidgettogui(t_gobj *z, t_glist *owner, t_word *data,
+    t_template *template)
+{
+    if (pd_class(&z->g_pd) == draw_class)
+    {
+        t_draw *x = (t_draw *)z;
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "draw%lx.%lx", (long unsigned int)x,
+            (long unsigned int)data);
+        gui_start_vmess("gui_draw_configure_all", "ss",
+            canvas_string(glist_getcanvas(owner)), tagbuf);
+        svg_togui((t_svg *)x->x_attr, template, data);
+        gui_end_vmess();
+    }
+}
+    
+
 static void draw_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
     t_scalar *sc, t_word *data, t_template *template,
     t_float basex, t_float basey, int vis)
@@ -3608,6 +3837,15 @@ static void draw_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
                 sys_vgui(".x%lx.c create path {\\\n", glist_getcanvas(glist));
             else if (sa->x_type == gensym("circle"))
                 sys_vgui(".x%lx.c create ellipse\\\n", glist_getcanvas(glist));
+
+            /* cheap hack... there should instead be a gui_vmess style function
+               for incrementally building a message to the GUI (possibly with atom 
+               arrays) */
+            //sys_vgui("nn gui_draw_vis \".x%lx\",\"%s\",\"", glist_getcanvas(glist),
+            //    sa->x_type->s_name);
+            gui_start_vmess("gui_draw_vis", "ss", canvas_string(glist_getcanvas(glist)),
+                sa->x_type->s_name);
+
             /* next send the gui drawing arguments: commands and points
                for paths, points for everything else */
             if (sa->x_type == gensym("path"))
@@ -3616,75 +3854,142 @@ static void draw_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
                    the bbox */
                 if (sa->x_pathrect_cache != -1)
                     sa->x_pathrect_cache = 0;
-                char *cmd;
+                char *cmd, cmdbuf[2];
                 int totalpoints = 0; /* running tally */
+                gui_start_array();
                 /* path parser: no error checking yet */
                 for (i = 0, cmd = sa->x_pathcmds; i < sa->x_npathcmds; i++, cmd++)
                 {
                     int j;
                     int cargs = sa->x_nargs_per_cmd[i];
                     f = (sa->x_vec)+totalpoints;
-                    sys_vgui("%c\\\n", *(cmd));
+                    //sys_vgui("%c\\\n", *(cmd));
+                    //sys_vgui("%c ", *(cmd));
+                    sprintf(cmdbuf, "%c", *(cmd));
+                    gui_string_elem(cmdbuf);
                     for (j = 0; j < sa->x_nargs_per_cmd[i]; j++)
-                        sys_vgui("%g\\\n", fielddesc_getcoord(
-                            f+j, template, data, 1));
+                        //sys_vgui("%g\\\n", fielddesc_getcoord(
+                        //    f+j, template, data, 1));
+                        //sys_vgui("%g ", fielddesc_getcoord(f+j, template, data, 1));
+                        gui_float_elem(fielddesc_getcoord(f+j, template, data, 0));
                     totalpoints += sa->x_nargs_per_cmd[i];
                 }
-                sys_gui("}\\\n");
+                //sys_gui("}\\\n");
+                //sys_gui("\",");
+                gui_end_array();
             }
             else /* all other shapes */
             {
+                gui_start_array();
                 int nxy = n >> 1;
                 for (i = 0; i < nxy; i++)
                 {
-                    sys_vgui("%g %g\\\n", pix[2*i], pix[2*i+1]);
+                    //sys_vgui("%g %g\\\n", pix[2*i], pix[2*i+1]);
+                    //sys_vgui("%g %g ", pix[2*i], pix[2*i+1]);
+                    gui_float_elem(pix[2*i]);
+                    gui_float_elem(pix[2*i+1]);
                     if ((sa->x_type == gensym("ellipse") ||
                          sa->x_type == gensym("circle")) && n > 1)
                     {
-                        sys_vgui("-rx %d -ry %d\\\n",
-                            (int)(fielddesc_getcoord(sa->x_vec+2,
-                                template, data, 1)),
-                            (int)(fielddesc_getcoord(sa->x_vec +
+                        //sys_vgui("-rx %d -ry %d\\\n",
+                        //    (int)(fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1)),
+                        //    (int)(fielddesc_getcoord(sa->x_vec +
+                        //        (sa->x_type == gensym("ellipse")?
+                        //         3 : 2),
+                        //        template, data, 1)));
+                        // These should be floats...
+                        //sys_vgui("%d %d ",
+                        //    (int)(fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1)),
+                        //    (int)(fielddesc_getcoord(sa->x_vec +
+                        //        (sa->x_type == gensym("ellipse")?
+                        //         3 : 2),
+                        //        template, data, 1)));
+
+                        gui_float_elem(fielddesc_getcoord(sa->x_vec+2,
+                                template, data, 0));
+                        gui_float_elem(fielddesc_getcoord(sa->x_vec +
                                 (sa->x_type == gensym("ellipse")?
                                  3 : 2),
-                                template, data, 1)));
+                                template, data, 1));
                         break;
                     }
                     else if (sa->x_type == gensym("rect") && n > 1)
                     {
-                        sys_vgui("%g %g\\\n",
-                            fielddesc_getcoord(sa->x_vec,
-                                template, data, 1) +
-                                fielddesc_getcoord(sa->x_vec+2,
-                                template, data, 1),
-                            fielddesc_getcoord(sa->x_vec+1,
-                                template, data, 1) +
-                                fielddesc_getcoord(sa->x_vec+3,
-                                template, data, 1));
+                        //sys_vgui("%g %g\\\n",
+                        //    fielddesc_getcoord(sa->x_vec,
+                        //        template, data, 1) +
+                        //        fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1),
+                        //    fielddesc_getcoord(sa->x_vec+1,
+                        //        template, data, 1) +
+                        //        fielddesc_getcoord(sa->x_vec+3,
+                        //        template, data, 1));
+
+                        //sys_vgui("%g %g ",
+                        //        fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1),
+                        //        fielddesc_getcoord(sa->x_vec+3,
+                        //        template, data, 1));
+
+                        gui_float_elem(fielddesc_getcoord(sa->x_vec+2,
+                                template, data, 0));
+                        gui_float_elem(fielddesc_getcoord(sa->x_vec+3,
+                                template, data, 0));
                         break;
                     }
                     else if (sa->x_type == gensym("circle"))
                     {
-                        sys_vgui("-r %d\\\n",
-                            (t_int)fielddesc_getcoord(sa->x_vec+2,
-                                template, data, 1));
+                        //sys_vgui("-r %d\\\n",
+                        //    (t_int)fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1));
+                        //sys_vgui("%d ",
+                        //    (t_int)fielddesc_getcoord(sa->x_vec+2,
+                        //        template, data, 1));
+                        gui_int_elem((t_int)fielddesc_getcoord(sa->x_vec+2,
+                            template, data, 1));
                         break;
                     }
                 }
+                //sys_gui("\",");
+                gui_end_array();
             }
 
             svg_togui(sa, template, data);
 
+
+            gui_start_array();
+            char parent_tagbuf[MAXPDSTRING];
             if (in_array)
-                sys_vgui(" -parent .scelem%lx.%lx \\\n", parentglist, data);
+            {
+                //sys_vgui(" -parent .scelem%lx.%lx \\\n", parentglist, data);
+                //sys_vgui("\"scelem%lx.%lx\",", parentglist, data);
+                sprintf(parent_tagbuf, "scelem%lx.%lx", (long unsigned int)parentglist,
+                    (long unsigned int)data);
+                gui_string_elem(parent_tagbuf);
+            }
             else
-                sys_vgui(" -parent .dgroup%lx.%lx \\\n",
-                    x->x_canvas, data);
+            {
+                //sys_vgui(" -parent .dgroup%lx.%lx \\\n",
+                //sys_vgui("\"dgroup%lx.%lx\",",
+                //    x->x_canvas, data);
+                sprintf(parent_tagbuf, "dgroup%lx.%lx", (long unsigned int)x->x_canvas,
+                    (long unsigned int)data);
+                gui_string_elem(parent_tagbuf);
+            }
             /* tags - one for this scalar (not sure why the double glist thingy)
               one for this specific draw item
             */
-            sys_vgui("-tags {.x%lx.x%lx.template%lx .draw%lx.%lx}\n",
-                glist_getcanvas(glist), glist, data, x, data);
+            //sys_vgui("-tags {.x%lx.x%lx.template%lx .draw%lx.%lx}\n",
+            //    glist_getcanvas(glist), glist, data, x, data);
+
+            // Let's try to get rid of Ico's tag
+            //sys_vgui("\"draw%lx.%lx\"", x, data);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "draw%lx.%lx", (long unsigned int)x,
+                (long unsigned int)data);
+            gui_string_elem(tagbuf);
             if (!glist_istoplevel(glist))
             {
                 t_canvas *gl = glist_getcanvas(glist);
@@ -3696,14 +4001,25 @@ static void draw_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
                 canvas_restore_original_position(gl, (t_gobj *)glist,
                     objtag, -1);
             }
+            //sys_gui(";\n");
+            gui_end_array();
+            gui_end_vmess();
         }
         else post("warning: draws need at least two points to be graphed");
     }
     else
     {
         if (n > 1)
-            sys_vgui(".x%lx.c delete .x%lx.x%lx.template%lx\n",
-                glist_getcanvas(glist), glist_getcanvas(glist), glist, data);
+        {
+//            sys_vgui(".x%lx.c delete .x%lx.x%lx.template%lx\n",
+//                glist_getcanvas(glist), glist_getcanvas(glist), glist, data);
+            char itemtagbuf[MAXPDSTRING];
+            sprintf(itemtagbuf, "draw%lx.%lx", (long unsigned int)x,
+                (long unsigned int)data);
+            gui_vmess("gui_draw_erase_item", "ss", canvas_string(glist_getcanvas(glist)),
+                itemtagbuf);
+        }
+                
     }
 }
 
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index 84a72926c..51ab8316f 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -709,6 +709,9 @@ static void message_click(t_message *x,
         t_rtext *y = glist_findrtext(x->m_glist, &x->m_text);
         sys_vgui(".x%lx.c itemconfigure %sR -strokewidth 5\n", 
             glist_getcanvas(x->m_glist), rtext_gettag(y));
+        gui_vmess("gui_message_flash", "ssi",
+            canvas_string(glist_getcanvas(x->m_glist)),
+            rtext_gettag(y), 1);
         clock_delay(x->m_clock, 120);
     }
 }
@@ -720,6 +723,9 @@ static void message_tick(t_message *x)
         t_rtext *y = glist_findrtext(x->m_glist, &x->m_text);
         sys_vgui(".x%lx.c itemconfigure %sR -strokewidth 1\n",
             glist_getcanvas(x->m_glist), rtext_gettag(y));
+        gui_vmess("gui_message_flash", "ssi",
+            canvas_string(glist_getcanvas(x->m_glist)),
+            rtext_gettag(y), 0);
     }
 }
 
@@ -1559,6 +1565,8 @@ static void text_select(t_gobj *z, t_glist *glist, int state)
             sys_vgui(".x%lx.c itemconfigure %sR -stroke %s\n",
                 glist_getcanvas(glist), rtext_gettag(y),
                 (state? "$pd_colors(selection)" : outline));
+            gui_vmess("gui_text_select_color", "ss",
+                canvas_string(glist_getcanvas(glist)), rtext_gettag(y));
             if (z->g_pd == gatom_class)
             {
                 sys_vgui(".x%lx.c itemconfigure %lx.l -fill %s\n",
@@ -1578,6 +1586,8 @@ static void text_select(t_gobj *z, t_glist *glist, int state)
                 }
                 sys_vgui(".x%lx.c addtag selected withtag %sR \n",
                     glist_getcanvas(glist), rtext_gettag(y));
+                gui_vmess("gui_text_select", "ss",
+                    canvas_string(glist_getcanvas(glist)), rtext_gettag(y));
 
                 if (pd_class(&x->te_pd) == text_class && x->te_type != T_TEXT && glist_istoplevel(glist))
                     sys_vgui(".x%lx.c itemconfigure %sR -strokewidth 1 -strokedasharray {} "
@@ -1608,6 +1618,9 @@ static void text_select(t_gobj *z, t_glist *glist, int state)
                 }
                 sys_vgui(".x%lx.c dtag %sR selected\n",
                     glist_getcanvas(glist), rtext_gettag(y));
+                gui_vmess("gui_text_deselect", "ss",
+                    canvas_string(glist_getcanvas(glist)),
+                    rtext_gettag(y));
 
                 if (pd_class(&x->te_pd) == text_class && x->te_type != T_TEXT)
                        sys_vgui(".x%lx.c itemconfigure %sR -strokewidth 2  -strokelinecap projecting -strokedasharray {2 3} "
@@ -1651,6 +1664,7 @@ static void text_vis(t_gobj *z, t_glist *glist, int vis)
 {
     //fprintf(stderr,"text_vis %d\n", vis);
     t_text *x = (t_text *)z;
+    int x1, y1, x2, y2;
 
 #ifdef PDL2ORK
     //if we are in k12 mode and this is hub with level 1 (global)
@@ -1675,6 +1689,12 @@ static void text_vis(t_gobj *z, t_glist *glist, int vis)
             {
                 //fprintf(stderr,"    draw it\n");
                 t_rtext *y = glist_findrtext(glist, x);
+
+                // make a group
+                text_getrect(&x->te_g, glist, &x1, &y1, &x2, &y2);
+                gui_vmess("gui_text_create_gobj", "ssii",
+                    canvas_string(glist), rtext_gettag(y), x1, y1);
+
                 if (x->te_type == T_ATOM)
                     glist_retext(glist, x);
                 text_drawborder(x, glist, rtext_gettag(y),
@@ -1688,8 +1708,9 @@ static void text_vis(t_gobj *z, t_glist *glist, int vis)
             if (gobj_shouldvis(&x->te_g, glist))
             {
                 //fprintf(stderr,"    erase it %lx %lx\n", x, glist);
-                text_eraseborder(x, glist, rtext_gettag(y));
-                rtext_erase(y);
+                text_erase_gobj(x, glist, rtext_gettag(y));
+                //text_eraseborder(x, glist, rtext_gettag(y));
+                //rtext_erase(y);
             }
         }
 #ifdef PDL2ORK
@@ -1860,6 +1881,7 @@ static t_widgetbehavior gatom_widgetbehavior =
 void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
     char *tag, int x1, int y1, int x2, int y2)
 {
+    t_rtext *y = glist_findrtext(glist, ob);
     //if this is a comment or we are drawing inside gop on one of
     //our parents return
     if (pd_class(&ob->te_pd) == text_class || glist_getcanvas(glist) != glist)
@@ -1886,8 +1908,12 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
                 tag, i, tag,
                 (issignal ? "signal" : "control"),
                 (selected ? "selected" : ""));
+            gui_vmess("gui_canvas_drawio", "sssiiiiii",
+                canvas_string(glist_getcanvas(glist)), rtext_gettag(y), tag,
+                onset, y2 - 2, onset + IOWIDTH, y2, x1, y1);
         }
-        else {
+        else
+        {
             //fprintf(stderr,"glist_drawiofor o redraw\n");
             sys_vgui(".x%lx.c coords %so%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
@@ -1921,8 +1947,12 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
                 tag, i, tag,
                 (issignal ? "signal" : "control"),
                 (selected ? "selected" : ""));
+            gui_vmess("gui_canvas_drawio", "sssiiiiii",
+                canvas_string(glist_getcanvas(glist)), rtext_gettag(y), tag,
+                onset, y1, onset + IOWIDTH, y1 + EXTRAPIX, x1, y1);
         }
-        else {
+        else
+        {
             //fprintf(stderr,"glist_drawiofor i firsttime\n");
             sys_vgui(".x%lx.c coords %si%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
@@ -2018,6 +2048,7 @@ void text_drawborder(t_text *x, t_glist *glist,
 
     t_object *ob;
     int x1, y1, x2, y2;
+    int broken;
 
     int selected = glist_isselected(glist, (t_gobj*)x);
 
@@ -2052,6 +2083,7 @@ void text_drawborder(t_text *x, t_glist *glist,
             outline = "$pd_colors(dash_outline) -strokewidth 2 -strokelinecap projecting -strokedasharray {2 3}"; //-strokedasharray {4 1}
             fill = invalid_fill;
             box_tag = "broken box";
+            broken = 1;
         }
         else
         {
@@ -2059,9 +2091,11 @@ void text_drawborder(t_text *x, t_glist *glist,
             outline = "$pd_colors(box_border)";
             fill = "$pd_colors(box)";
             box_tag = "box";
+            broken = 0;
         }
         if (firsttime)
         {
+            /*
             sys_vgui(".x%lx.c create ppolygon %d %d %d %d %d %d %d %d %d %d \
                     -stroke %s -fill %s -tags {%sR %lx text %s %s}\n", 
                     glist_getcanvas(glist),
@@ -2069,6 +2103,10 @@ void text_drawborder(t_text *x, t_glist *glist,
                     (selected ? "$pd_colors(selection)" : outline),
                     fill, tag, tag, box_tag,
                     (selected ? "selected" : ""));
+            */
+            gui_vmess("gui_text_drawborder", "ssiiiii",
+                canvas_string(glist_getcanvas(glist)), tag, broken, x1, y1, x2, y2);
+               
                 //-dash %s -> pattern disabled for tkpath
         }
         else
@@ -2078,6 +2116,8 @@ void text_drawborder(t_text *x, t_glist *glist,
             sys_vgui(".x%lx.c coords %sR %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
                     x1, y1,  x2, y1,  x2, y2,  x1, y2,  x1, y1);
+            gui_vmess("gui_text_redraw_border", "ssiiii",
+                canvas_string(glist_getcanvas(glist)), tag, x1, y1, x2, y2);
 /* this seems to be totally extraneous  hans@at.or.at
              sys_vgui(".x%lx.c itemconfigure %sR -dash %s -outline %s\n", 
                      glist_getcanvas(glist), tag, pattern, outline); */
@@ -2086,6 +2126,8 @@ void text_drawborder(t_text *x, t_glist *glist,
     else if (x->te_type == T_MESSAGE)
     {
         if (firsttime)
+        {
+            /*
             sys_vgui(".x%lx.c create ppolygon "
                      "%d %d %d %d %d %d %d %d %d %d %d %d %d %d "
                      "-stroke %s -fill $pd_colors(msg) "
@@ -2095,16 +2137,32 @@ void text_drawborder(t_text *x, t_glist *glist,
                 x1, y2,  x1, y1,
                 (selected ? "$pd_colors(selection)" : "$pd_colors(msg_border)"),
                     tag, tag, (selected ? "selected" : ""));
+            */
+
+            // coords are a quick hack to separate gobj's x/y from the polygon's coords
+            // which of course can be greatly simplified
+            gui_vmess("gui_message_drawborder", "ssii",
+                canvas_string(glist_getcanvas(glist)), tag, x2 - x1, y2 - y1);
+//                x1-x1, y1-y1, x2+4-x1, y1-y1, x2-x1,
+//                y1+4-y1, x2-x1, y2-4-y1, x2+4-x1, y2-y1, x1-x1, y2-y1, x1-x1, y1-y1);
+        }
         else
+        {
             sys_vgui(".x%lx.c coords %sR "
                      "%d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
                 x1, y1,  x2+4, y1,  x2, y1+4,  x2, y2-4,  x2+4, y2,
                 x1, y2,  x1, y1);
+            gui_vmess("gui_message_redraw_border", "ssiiiiiiiiiiiiii",
+                canvas_string(glist_getcanvas(glist)), tag,
+                x1-x1, y1-y1,  x2+4-x1, y1-y1,  x2-x1, y1+4-y1, x2-x1, y2-4-y1,  x2+4-x1, y2-y1,
+                x1-x1, y2-y1,  x1-x1, y1-y1);
+        }
     }
     else if (x->te_type == T_ATOM)
     {
         if (firsttime)
+        {
             sys_vgui(".x%lx.c create ppolygon "
                      "%d %d %d %d %d %d %d %d %d %d %d %d "
                      "-stroke %s "
@@ -2114,11 +2172,19 @@ void text_drawborder(t_text *x, t_glist *glist,
                 x1, y1,  x2-4, y1,  x2, y1+4,  x2, y2,  x1, y2,  x1, y1,
                 (selected ? "$pd_colors(selection)" : "$pd_colors(atom_box_border)"),
                     tag, tag, (selected ? "selected" : ""));
+
+            gui_vmess("gui_atom_drawborder", "ssiiiiiiiiiiii",
+                canvas_string(glist_getcanvas(glist)), tag,
+                x1-x1, y1-y1, x2-4-x1, y1-y1, x2-x1,
+                y1+4-y1, x2-x1, y2-y1, x1-x1, y2-y1, x1-x1, y1-y1);
+        }
         else
+        {
             sys_vgui(".x%lx.c coords %sR "
                      "%d %d %d %d %d %d %d %d %d %d %d %d\n",
                 glist_getcanvas(glist), tag,
                 x1, y1,  x2-4, y1,  x2, y1+4,  x2, y2,  x1, y2,  x1, y1);
+        }
     }
         /* for comments, just draw a dotted rectangle unlocked; when a visible
         canvas is unlocked we have to call this anew on all comments, and when
@@ -2274,6 +2340,13 @@ void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag)
             glist_getcanvas(glist), tag, i);
 }
 
+// erase the whole gobj in the gui one go
+void text_erase_gobj(t_text *x, t_glist *glist, char *tag)
+{
+    if (x->te_type == T_TEXT && !glist->gl_edit) return;
+    gui_vmess("gui_gobj_erase", "ss", canvas_string(glist_getcanvas(glist)), tag);
+}
+
 void text_eraseborder(t_text *x, t_glist *glist, char *tag)
 {
     if (x->te_type == T_TEXT && !glist->gl_edit) return;
diff --git a/pd/src/g_toggle.c b/pd/src/g_toggle.c
index bb8b3beb1..f91af52f4 100644
--- a/pd/src/g_toggle.c
+++ b/pd/src/g_toggle.c
@@ -30,6 +30,10 @@ void toggle_draw_update(t_gobj *xgobj, t_glist *glist)
                      (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol);
             sys_vgui(".x%lx.c itemconfigure %lxX2 -stroke #%6.6x\n", canvas, x,
                      (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            gui_vmess("gui_toggle_update", "ssi", canvas_string(canvas),
+                tagbuf, x->x_on != 0.0);
         }
         x->x_gui.x_changed = 0;
     }
@@ -37,12 +41,15 @@ void toggle_draw_update(t_gobj *xgobj, t_glist *glist)
 
 void toggle_draw_new(t_toggle *x, t_glist *glist)
 {
+    char tagbuf[MAXPDSTRING], colorbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
     t_canvas *canvas=glist_getcanvas(glist);
     int w=(x->x_gui.x_w+29)/30;
     int x1=text_xpix(&x->x_gui.x_obj, glist);
     int y1=text_ypix(&x->x_gui.x_obj, glist);
     int x2=x1+x->x_gui.x_w, y2=y1+x->x_gui.x_h;
     int col = (x->x_on!=0.0)?x->x_gui.x_fcol:x->x_gui.x_bcol;
+    sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
 
     iemgui_base_draw_new(&x->x_gui);
     sys_vgui(".x%lx.c create polyline %d %d %d %d -strokewidth %d "
@@ -51,6 +58,10 @@ void toggle_draw_new(t_toggle *x, t_glist *glist)
     sys_vgui(".x%lx.c create polyline %d %d %d %d -strokewidth %d "
         "-stroke #%6.6x -tags {%lxX2 x%lx text iemgui}\n",
         canvas, x1+w+1, y2-w-1, x2-w-1, y1+w+1, w, col, x, x);
+    gui_vmess("gui_create_toggle", "sssiiiiiiiiiii", canvas_string(canvas), tagbuf,
+        colorbuf, w,
+        x1+w+1, y1+w+1, x2-w-1, y2-w-1,
+        x1+w+1, y2-w-1, x2-w-1, y1+w+1, x1, y1);
 }
 
 void toggle_draw_move(t_toggle *x, t_glist *glist)
diff --git a/pd/src/g_traversal.c b/pd/src/g_traversal.c
index 49488dd16..4a29f7416 100644
--- a/pd/src/g_traversal.c
+++ b/pd/src/g_traversal.c
@@ -582,6 +582,8 @@ static void set_set(t_set *x, t_symbol *templatesym, t_symbol *field)
     }
 }
 
+static void scalar_configure(t_scalar *x, t_glist *owner);
+
 static void set_bang(t_set *x)
 {
     int nitems = x->x_nin, i;
@@ -618,7 +620,7 @@ static void set_bang(t_set *x)
     else for (i = 0, vp = x->x_variables; i < nitems; i++, vp++)
         template_setfloat(template, vp->gv_sym, vec, vp->gv_w.w_float, 1);
     if (gs->gs_which == GP_GLIST)
-        scalar_redraw((t_scalar *)(gp->gp_un.gp_gobj), gs->gs_un.gs_glist);  
+        scalar_configure((t_scalar *)(gp->gp_un.gp_gobj), gs->gs_un.gs_glist);  
     else
     {
         t_array *owner_array = gs->gs_un.gs_array;
diff --git a/pd/src/g_vumeter.c b/pd/src/g_vumeter.c
index fd42b1e0b..d86fbc31f 100644
--- a/pd/src/g_vumeter.c
+++ b/pd/src/g_vumeter.c
@@ -71,11 +71,18 @@ static void vu_update_rms(t_vu *x, t_glist *glist)
     {
         int w4 = x->x_gui.x_w / 4, off=text_ypix(&x->x_gui.x_obj, glist) - 1;
         int x1 = text_xpix(&x->x_gui.x_obj, glist),
+            y1 = text_ypix(&x->x_gui.x_obj, glist),
             quad1 = x1 + w4 + 1, quad3 = x1 + x->x_gui.x_w-w4 - 1;
 
         sys_vgui(".x%lx.c coords %lxRCOVER %d %d %d %d\n",
             glist_getcanvas(glist), x, quad1 + 1, off + 2, quad3 + 1,
             off + (x->x_led_size + 1) * (IEM_VU_STEPS - x->x_rms) + 2);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "x%lx", (long unsigned int)x);
+        gui_vmess("gui_vumeter_update_rms", "ssiiiiii",
+            canvas_string(glist_getcanvas(glist)),
+            tagbuf, quad1 + 1, off + 2, quad3 + 1, off + (x->x_led_size + 1) *
+            (IEM_VU_STEPS - x->x_rms) + 2, x1, y1);
     }
 }
 
@@ -96,6 +103,12 @@ static void vu_update_peak(t_vu *x, t_glist *glist)
 
             sys_vgui(".x%lx.c coords %lxPLED %d %d %d %d\n",
                 canvas, x, x1 + 1, j + 2, x1 + x->x_gui.x_w + 2, j + 2);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            char colorbuf[MAXPDSTRING];
+            sprintf(colorbuf, "#%6.6x", iemgui_color_hex[i]);
+            gui_vmess("gui_vumeter_update_peak", "sssiiiiii", canvas_string(canvas),
+                tagbuf, colorbuf, x1 + 1, j + 2, x1 + x->x_gui.x_w + 2, j + 2, x1, y1);
             sys_vgui(".x%lx.c itemconfigure %lxPLED -stroke #%6.6x\n",
                 canvas, x, iemgui_color_hex[i]);
         }
@@ -141,28 +154,56 @@ static void vu_draw_new(t_vu *x, t_glist *glist)
     {
         yyy = k4 + k1 * (k2-i);
         if((i&3)==1 && (x->x_scale))
+        {
             sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w "
                 "-font %s -fill #%6.6x "
                 "-tags {%lxSCALEN %lxSCALE%d x%lx text iemgui}\n",
                 canvas, end+1, yyy+k3+2, iemgui_vu_scale_str[i/4], 
                 iemgui_font(&x->x_gui), x->x_gui.x_lcol, x, x, i, x);
-
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            char colorbuf[MAXPDSTRING];
+            sprintf(colorbuf, "#%6.6x", x->x_gui.x_lcol);
+            // not handling font size yet
+            gui_vmess("gui_create_vumeter_text", "sssiisiii", canvas_string(canvas),
+                tagbuf, colorbuf, end+1, yyy+k3+2, iemgui_vu_scale_str[i/4],
+                i, x1, y1);
+        }
         led_col = iemgui_vu_col[i];
-        if (i<=IEM_VU_STEPS) sys_vgui(".x%lx.c create polyline %d %d %d %d "
+        if (i<=IEM_VU_STEPS)
+        {
+            sys_vgui(".x%lx.c create polyline %d %d %d %d "
             "-strokewidth %d -stroke #%6.6x "
             "-tags {%lxRLED%d x%lx text iemgui}\n",
             canvas, quad1+1, yyy+2, quad3, yyy+2,
             x->x_led_size, iemgui_color_hex[led_col], x, i, x);
+            char tagbuf[MAXPDSTRING];
+            sprintf(tagbuf, "x%lx", (long unsigned int)x);
+            char colorbuf[MAXPDSTRING];
+            sprintf(colorbuf, "#%6.6x", iemgui_color_hex[led_col]);
+            gui_vmess("gui_create_vumeter_steps", "sssiiiiiiii",
+                canvas_string(canvas), tagbuf, colorbuf, quad1+1,
+                yyy+2, quad3, yyy+2, x->x_led_size, index, x1, y1);
+        }
     }
     sys_vgui(".x%lx.c create prect %d %d %d %d -fill #%6.6x "
         "-stroke #%6.6x -tags {%lxRCOVER x%lx text iemgui}\n",
         canvas, quad1+1, y1+1, quad3, y1+1 + k1*IEM_VU_STEPS,
         x->x_gui.x_bcol, x->x_gui.x_bcol, x, x);
+    char tagbuf[MAXPDSTRING];
+    sprintf(tagbuf, "x%lx", (long unsigned int)x);
+    char colorbuf[MAXPDSTRING];
+    sprintf(colorbuf, "#%6.6x", x->x_gui.x_bcol);
+    gui_vmess("gui_create_vumeter_rect", "sssiiiiii", canvas_string(canvas),
+        tagbuf, colorbuf, quad1+1, y1+1, quad3, y1+1 + k1*IEM_VU_STEPS, x1, y1);
     sys_vgui(".x%lx.c create polyline %d %d %d %d "
         "-strokewidth %d -fill #%6.6x "
         "-tags {%lxPLED x%lx text iemgui}\n",
         canvas, mid+1, y1+12,
         mid+1, y1+12, x->x_led_size, x->x_gui.x_bcol, x, x);
+    sprintf(colorbuf, "#%6.6x", x->x_gui.x_bcol);
+    gui_vmess("gui_create_vumeter_peak", "sssiiiiiii", canvas_string(canvas),
+        tagbuf, colorbuf, mid+1, y1+12, mid+1, y1+12, x->x_led_size, x1, y1);
     x->x_updaterms = x->x_updatepeak = 1;
     sys_queuegui(x, x->x_gui.x_glist, vu_draw_update);
 }
diff --git a/pd/src/m_pd.h b/pd/src/m_pd.h
index d36eee4e0..1d939d6c4 100644
--- a/pd/src/m_pd.h
+++ b/pd/src/m_pd.h
@@ -667,6 +667,15 @@ EXTERN void sys_vvguid(const char *file, int line, const char *fmt, va_list);
 EXTERN void sys_gui(const char *s);
 #define sys_vgui(args...) sys_vguid(__FILE__,__LINE__,args)
 #define sys_gui(s)        sys_vguid(__FILE__,__LINE__,"%s",s)
+EXTERN void gui_vmess(const char *sel, char *fmt, ...);
+/* some more gui interfaces for building incremental messages */
+EXTERN void gui_start_vmess(const char *sel, char *fmt, ...);
+EXTERN void gui_start_array(void);
+EXTERN void gui_float_elem(t_float f);
+EXTERN void gui_int_elem(int i);
+EXTERN void gui_string_elem(const char *s);
+EXTERN void gui_end_array(void);
+EXTERN void gui_end_vmess(void);
 
 EXTERN void sys_pretendguibytes(int n);
 EXTERN void sys_queuegui(void *client, t_glist *glist, t_guicallbackfn f);
diff --git a/pd/src/s_audio.c b/pd/src/s_audio.c
index 1d6588000..33586c2b2 100644
--- a/pd/src/s_audio.c
+++ b/pd/src/s_audio.c
@@ -501,7 +501,7 @@ void sys_reopen_audio( void)
         sys_audioapiopened = sys_audioapi;
         audio_callback_is_open = callback;
     }
-    sys_vgui("set pd_whichapi %d\n",  (outcome == 0 ? sys_audioapi : 0));
+    gui_vmess("set_audioapi", "i",  (outcome == 0 ? sys_audioapi : 0));
 }
 
 int sys_send_dacs(void)
diff --git a/pd/src/s_inter.c b/pd/src/s_inter.c
index 78f115ee8..2ae0a9912 100644
--- a/pd/src/s_inter.c
+++ b/pd/src/s_inter.c
@@ -752,6 +752,124 @@ void sys_gui(const char *s)
     sys_vgui("%s", s);
 }
 
+char *escape_double_quotes(const char *src) {
+    static char ret[MAXPDSTRING*2+1];
+    char *escaped = ret; 
+    int i, len = MAXPDSTRING*2;
+    for (i = 0; i < len-1 && src[i] != 0; i++)
+    {
+        if (src[i] == '\"')
+            *(escaped++) = '\\'; 
+        *(escaped++) = src[i];
+    }
+    *escaped = '\0';
+    if (i >= len) fprintf(stderr, "oops, you caught me statically allocating a string "
+                       "in a lazy attempt to escape double-quotes for the gui. "
+                       "Please call me out publicly for this regression, and/or revise this "
+                       "so it doesn't arbitrarily limit the size of the strings "
+                       "we can send to the gui.");
+    return ret;
+}
+
+/* quick hack to send a parameter list for use as a function call in
+   Node-Webkit */
+void gui_do_vmess(const char *sel, char *fmt, int end, va_list ap)
+{
+    //va_list ap;
+    int nargs = 0;
+    char *fp = fmt;
+
+    //va_start(ap, end);
+    sys_vgui("nn %s ", sel);
+    while (*fp)
+    {
+        // stop-gap-- increase to 20 until we find a way to pass a list or array
+        if (nargs >= 20)
+        {
+            error("sys_gui_vmess: only 10 named parameters allowed");
+            break;
+        }
+        if (nargs > 0) sys_gui(",");
+        switch(*fp++)
+        {
+        case 'f': sys_vgui("%g", va_arg(ap, double)); break;
+        case 's': sys_vgui("\"%s\"", escape_double_quotes(va_arg(ap, const char *))); break;
+        case 'i': sys_vgui("%d", va_arg(ap, t_int)); break;
+        //case 'p': SETPOINTER(at, va_arg(ap, t_gpointer *)); break;
+        default: goto done;
+        }
+        nargs++;
+    }
+done:
+    va_end(ap);
+    if (end)
+        sys_gui(";\n");
+}
+
+void gui_vmess(const char *sel, char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    gui_do_vmess(sel, fmt, 1, ap);
+}
+
+void gui_start_vmess(const char *sel, char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    gui_do_vmess(sel, fmt, 0, ap);
+}
+
+static int gui_array_head;
+void gui_start_array(void)
+{
+    gui_array_head = 1;
+    sys_gui(",[");
+}
+
+void gui_float_elem(t_float f)
+{
+    if (gui_array_head)
+    {
+        gui_array_head = 0;
+        sys_vgui("%g", f);
+    }
+    else
+        sys_vgui(",%g", f);
+}
+
+void gui_int_elem(int i)
+{
+    if (gui_array_head)
+    {
+        gui_array_head = 0;
+        sys_vgui("%d", i);
+    }
+    else
+        sys_vgui(",%d", i);
+}
+
+void gui_string_elem(const char *s) 
+{
+    if (gui_array_head)
+    {
+        gui_array_head = 0;
+        sys_vgui("\"%s\"", escape_double_quotes(s));
+    }
+    else
+        sys_vgui(",\"%s\"", escape_double_quotes(s));
+}
+
+void gui_end_array(void)
+{
+    sys_gui("]");
+}
+
+void gui_end_vmess(void)
+{
+    sys_gui(";\n");
+}
+
 int sys_flushtogui( void)
 {
     int writesize = sys_guibufhead - sys_guibuftail, nwrote = 0;
@@ -805,6 +923,7 @@ static int sys_flushqueue(void )
         if (sys_bytessincelastping >= GUI_BYTESPERPING)
         {
             sys_gui("pdtk_ping\n");
+            gui_vmess("gui_ping", "");
             sys_bytessincelastping = 0;
             sys_waitingforping = 1;
             return (1);
@@ -1145,6 +1264,16 @@ int sys_startgui(const char *guidir)
                 "TCL_LIBRARY=\"%s/tcl/library\" TK_LIBRARY=\"%s/tk/library\" \
                  \"%s/pd-gui\" %d localhost %s\n",
                  sys_libdir->s_name, sys_libdir->s_name, guidir, portno, (sys_k12_mode ? "pd-l2ork-k12" : "pd-l2ork"));
+
+/* SUPERHACK - let's just load node-webkit and see what happens */
+            sprintf(cmdbuf,
+                  "/home/nu/Downloads/nwjs-v0.12.0-alpha2-linux-ia32/nw "
+//                "/home/user/Downloads/node-webkit-v0.11.6-linux-ia32/nw "
+//                  "/home/user/Downloads/atom/atom/atom "
+                "/home/nu/Downloads/test/ %d localhost %s\n",
+                portno,
+                (sys_k12_mode ? "pd-l2ork-k12" : "pd-l2ork"));
+
 #endif
             sys_guicmd = cmdbuf;
         }
@@ -1179,6 +1308,9 @@ int sys_startgui(const char *guidir)
                 }
             }
 #endif
+
+            fprintf(stderr, "fuck %s", sys_guicmd);
+
             execl("/bin/sh", "sh", "-c", sys_guicmd, (char*)0);
             perror("pd: exec");
             _exit(1);
@@ -1332,12 +1464,19 @@ int sys_startgui(const char *guidir)
             /* here is where we start the pinging. */
 #if defined(__linux__) || defined(IRIX)
          if (sys_hipriority)
-             sys_gui("pdtk_watchdog\n");
+             gui_vmess("gui_watchdog", "");
 #endif
          sys_get_audio_apis(buf);
          sys_get_midi_apis(buf2);
-         sys_vgui("pdtk_pd_startup {%s} %s %s {%s} %s\n", pd_version, buf, buf2, 
-                  sys_font, sys_fontweight); 
+//         sys_vgui("pdtk_pd_startup {%s} %s %s {%s} %s\n", pd_version, buf, buf2, 
+//                  sys_font, sys_fontweight); 
+
+        gui_vmess("gui_startup", "sssss",
+		  pd_version,
+		  buf,
+		  buf2,
+		  sys_font,
+		  sys_fontweight);
     }
     return (0);
 
@@ -1387,7 +1526,8 @@ void glob_quit(void *dummy)
     canvas_suspend_dsp();
     do_not_redraw = 1;
     glob_closeall(0, 1);
-    sys_vgui("exit\n");
+    //sys_vgui("exit\n");
+    gui_vmess("app_quit", "");
     if (!sys_nogui)
     {
         sys_closesocket(sys_guisock);
diff --git a/pd/src/s_main.c b/pd/src/s_main.c
index 1949d76b1..1336b0a01 100644
--- a/pd/src/s_main.c
+++ b/pd/src/s_main.c
@@ -309,36 +309,38 @@ int sys_main(int argc, char **argv)
         // let's create one continuous string from all files
         int length = 0;
         t_namelist *nl;
-        for (nl = sys_openlist; nl; nl = nl->nl_next)
-        {
+//        for (nl = sys_openlist; nl; nl = nl->nl_next)
+//        {
             // for starting and ending quotes plus a space or null terminating
             // character, we add 3 additional characters per entry
-            length = length + strlen(nl->nl_string) + 3;
-        }
-        if(length && (filenames = (char*) calloc(length, sizeof(char*)) ) != NULL)
+//            length = length + strlen(nl->nl_string) + 3;
+//        }
+//        if(length && (filenames = (char*) calloc(length, sizeof(char*)) ) != NULL)
+        if (1)
         {
-            strcat(filenames,"\"");
+//            strcat(filenames,"\\\"");
             if (sys_openlist)
             {
                 for (nl = sys_openlist; nl; nl = nl->nl_next)
                 {
-                    strcat(filenames,nl->nl_string);
-                    if (nl->nl_next)
-                        strcat(filenames,"\" \"");
-                    else strcat(filenames,"\"\0"); // ensures proper termination
+                    gui_vmess("gui_build_filelist", "s", nl->nl_string);
+//                    strcat(filenames,nl->nl_string);
+//                    if (nl->nl_next)
+//                        strcat(filenames,"\\\" \\\"");
+//                    else strcat(filenames,"\\\"\\\0"); // ensures proper termination
                 }
             }
             //fprintf(stderr,"final list: <%s> <%c> %d\n", filenames, filenames[0], length);
         }
         else
         {
-            error("filelist malloc failed!\n");
-            return(1);
+//            error("filelist malloc failed!\n");
+//            return(1);
         }
     }
-    sys_vgui("pdtk_check_unique %d {%s}\n", sys_unique,
-        (filenames ? filenames : "0"));
-    if (filenames != NULL) free(filenames);
+    gui_vmess("gui_check_unique", "i", sys_unique);
+//        (filenames ? filenames : "0"));
+//    if (filenames != NULL) free(filenames);
     if (sys_externalschedlib)
         return (sys_run_scheduler(sys_externalschedlibname,
             sys_extraflagsstring));
diff --git a/pd/src/s_midi.c b/pd/src/s_midi.c
index c850097c2..e9e6ac0bd 100644
--- a/pd/src/s_midi.c
+++ b/pd/src/s_midi.c
@@ -565,7 +565,7 @@ void sys_open_midi(int nmidiindev, int *midiindev,
     sys_save_midi_params(nmidiindev, midiindev,
         nmidioutdev, midioutdev);
 
-    sys_vgui("set pd_whichmidiapi %d\n", sys_midiapi);
+    gui_vmess("set_midiapi", "i", sys_midiapi);
 
 }
 
diff --git a/pd/src/s_print.c b/pd/src/s_print.c
index 8df706ae0..620711a51 100644
--- a/pd/src/s_print.c
+++ b/pd/src/s_print.c
@@ -65,6 +65,10 @@ static void doerror(const void *object, const char *s)
         sys_vgui("pdtk_posterror {%s} 1 {%s}\n",
             strnpointerid(obuf, object, MAXPDSTRING),
             strnescape(upbuf, s, MAXPDSTRING));
+        gui_vmess("gui_post_error", "sis",
+            strnpointerid(obuf, object, MAXPDSTRING),
+            1,
+            strnescape(upbuf, s, MAXPDSTRING));
     }
 }
 
@@ -118,7 +122,8 @@ static void dopost(const char *s)
         //if (ptout && upbuf[ptout-1] == '\n')
         //    upbuf[--ptout] = 0, heldcr = 1;
         upbuf[ptout] = 0;
-        sys_vgui("pdtk_post {%s}\n", upbuf);
+//        sys_vgui("pdtk_post {%s}\n", upbuf);
+        gui_vmess("gui_post", "s", upbuf);
     }
 }
 
-- 
GitLab