@@ -29,9 +28,7 @@ MCPHawk is a passive network analyzer for **Model Context Protocol (MCP)** traff
- **Responses**: Success results and error responses with matching IDs
- **Notifications**: Fire-and-forget method calls without IDs
- **Batch Operations**: Support for JSON-RPC batch requests/responses
-- **Transport-Specific Handling**:
- - **HTTP/SSE**: Full support for MCP's streaming HTTP transport with Server-Sent Events
- - **TCP Direct**: Raw TCP stream reconstruction for custom implementations
+- **Transport-Specific Handling**: See MCP Transport Support table below for full details
- **Chunked Transfer**: Handles HTTP chunked transfer encoding transparently
- **Protocol Compliance**: Validates JSON-RPC 2.0 structure and MCP-specific extensions
@@ -67,11 +64,11 @@ MCPHawk is a passive network analyzer for **Model Context Protocol (MCP)** traff
| Official MCP Transport | Protocol Version | Capture Support | Details |
|------------------------|------------------|:---------------:|---------|
-| **stdio** | All versions | coming soon :) | secret |
-| **HTTP** (Streamable HTTP) | 2025-03-26+ | ✅ Full | HTTP POST with optional SSE streaming responses |
+| **stdio** | All versions | ✅ Full | Process wrapper transparently captures stdin/stdout between client and server |
+| **HTTP Streaming** | 2025-03-26+ | ✅ Full | HTTP POST with optional SSE streaming responses |
| **HTTP+SSE** (deprecated) | 2024-11-05 | ✅ Full | Legacy transport with separate SSE endpoint |
-Disclaimer: TCP direct traffic with JSON-RPC is also captured and marked as unknown (should you have custom stuff you shouldn't)
+Note: Raw TCP traffic with JSON-RPC is also captured and marked as "unknown" transport type
## Comparison with Similar Tools
@@ -87,7 +84,7 @@ Disclaimer: TCP direct traffic with JSON-RPC is also captured and marked as unkn
| MCP server for data access | ✅ | ❌ | ❌ |
| No client/server config needed | ✅ | ❌ | ✅ |
| Interactive testing/debugging | ❌ | ✅ | ❌ |
-| Proxy/MITM capabilities | ❌ | ✅ | ❌ |
+| Proxy/MITM capabilities | ✅ (stdio) | ✅ | ❌ |
**When to use each tool:**
- **MCPHawk**: Passive monitoring, protocol analysis, debugging MCP implementations, understanding traffic patterns
@@ -163,6 +160,22 @@ sudo mcphawk web --port 3000 --host 0.0.0.0 --web-port 9000
sudo mcphawk sniff --port 3000 --debug
sudo mcphawk web --port 3000 --debug
+# Wrap an MCP server to capture stdio traffic
+mcphawk wrap /path/to/mcp-server --arg1 --arg2
+
+# Example: Wrap Context7 MCP server to monitor Claude Desktop's documentation lookups
+mcphawk wrap npx -y @upstash/context7-mcp@latest
+
+# Claude Desktop config to use the wrapped version:
+# {
+# "mcpServers": {
+# "context7": {
+# "command": "mcphawk",
+# "args": ["wrap", "npx", "-y", "@upstash/context7-mcp@latest"]
+# }
+# }
+# }
+
# Start MCP server with Streamable HTTP transport (default)
mcphawk mcp --transport http --mcp-port 8765
@@ -282,7 +295,7 @@ Vote for features by opening a GitHub issue!
- [x] **Auto-detect MCP traffic** - Automatically discover MCP traffic on any port without prior configuration
- [x] **MCP Server Interface** - Expose captured traffic via MCP server for AI agents to query and analyze traffic patterns
-- [ ] **Stdio capture** - eBPF Integration (Linux/macOS) Trace read/write system calls for pipe communication
+- [x] **Stdio capture** - Transparent process wrapper to capture stdin/stdout communication
- [ ] **Protocol Version Detection** - Identify and display MCP protocol version from captured traffic
- [ ] **Smart Search & Filtering** - Search by method name, params, or any JSON field with regex support
- [ ] **Performance Analytics** - Request/response timing, method frequency charts, and latency distribution
diff --git a/examples/branding/mcphawk_claudedesktop.png b/examples/branding/mcphawk_claudedesktop.png
index bf475321fe37de120dae59acf3ffaf68687b402b..7bfabe7b2d2da2f9843aea7e553c111bfca9d678 100644
GIT binary patch
literal 363360
zcmeFZbySpF-!~2jNJxkvigfoNh;)OL(w$PGq;$86fOL#BBHi7g0#ef5-Q5lE9?!Y&
z=YF0u=d5?V>-X1hJ*+j%#mu#@z4y1{vk6d;lf=Rx!azVkz><~{S3*EQg}ublP{Aj$
zKNF1+5bnsm5ff98784^^u(f{m#=-;vK`J0x{kDd3`~4(sB?@FTabcO&7r5bg!ZK(q
zhau#Q6zI4zpU_2GLYNC?$0d+E0}GV!CotL!#dIA^6gNGJQ&RJSHVoCL-yzg&GR?&A
z#Pi);t^5*NN#Hx_CP7%$b?lxQ< zYZK5XX8684%Q0=<$#IfpSxd7&$6hrxOWoV! b~c|&zjD|gi;Tg#ZZBiN#_7@1TLQjg*S9Y6 zaZRQ#$l799w8e4c9nT1$(vd%d^9L#|Cs+r_5-H?`IJNuxm6kkIw}A#TD_X5|>-H;Z zu8}?r2_j{*SW?%Q`T7iNh)oY=f4{S^ErKRltI4-qrQQb>i-??#SRX%7;COUlfAm)? zi9E!vz6`KeT=Q^GG&lI@y*&w`$9}*nDHn@&MVM@@Q{{SksO9Kxt$lr(TR;-Si?}B- z1WXNKuL-=@mQIA8b^tkKbUWFMerj3~ZeGx!b!5nEhP9I6e`i2IHSjjWbVKQIFw+ (z+CjgtSkQB4#!I-{dZzFE itv5v^_os}EE7rfiT_TVW5EeY06 Bc*oY%RlJ!_%-%#~A)K}0`*!1C3 V ze=>73imffuZC=>GyprS=;*l)qx#hr>#b%i4k&Nv=?R=$bUd2>Dpi1H}nkGh9e}|M` zeA?wiz 8 zFpC1xc<7s8*FB~dJ4f|Qv*`!V^aamQ ^PJSQ;O9Js)1)cqa;BXA)L>S%HXgu9PUpVoBhFT+{)|6a#y_c zj@yp?dieYXkJ4e6J3*So^r1gBb#v!& e&axMJ_m*>*BN@E#PeApXnZ6KH){SN$6>Lnm0nIpBI*~ez_3$wAeQeM6IRWBVMaT z&-BH5M)sDVOp7tv)|F&T<}H0MSBviM1HTo`y%eP^r`D8oC1k%b;+5jQ`~4Dcshj`c z`PplOzH50wP0EwWiB7#|LMxCQ(_qq{&wI+}HN4y?%I6<23w&LcjpZFWs(T!=GCB;R zo*J$W93l5iq;g(0`3F Tec4mJs|IOzlaUd9zhslDUGa#o%8Yml!PV?A?#7uNB^YMJB*4q@{L zU+QU}N9yKO`dG&Dx+KJ5rWJ608mU589%{_#DJF?1Aan{(?+g@tu#pH9(4D7j#1}`X z=)}8M%ytcTVZ&i#ldN$IXX#bTWAW9&>L82hx)zi6mSlJ4%tXhWqq_~72QhL7pGRFE ztUAr!IhqsTg7hqLZr7Fi^K<9FeqB88^FB%H`gp>synDdTVsx3Xub$tc$#spCm{;l{ zcS;tQ?1baiR@0|)koWv@yV2cncQOd+l*vvELFFZWyBR$1-2F575w+rwBqTFw_!%}a z_pI}%)`(9_MSgsKuQX2V(3vmhmPy=GOGa}wFB8kgv*n5XA3>0@P@V#D35h@}bpiCc z%r9ZJ >VLcsNI#Xyeg)#{jN#M*cv0^XNJSqj0MaY c=JR FWLOb*W$SmVbH3Vevd2@~qRHs4!~?PfcPjY&fp@M6CIwInGi8 zA|Mo$^znKW6>IUJ2dcHgbDR>(Yf^H!>5@q>ziR9HnSG$;Rf<2h`C!$X02dL95zPko zSWd5iBn4gVYVF~iX+Bpu0)bz#+qy>DtegE3dTv`L6B&Iw`h1R36BS#*9qXdozERzY zeC_epb+2?+0yO124%av)^$vW#`>7O0+|FANa6ODNN%nY^kMp2c{#nQatNfF7hh+D< z*WnZ9?)8r4tJ5q6u4&E}-8J=ZaLLG}(C2@CF@r~TK^WOz9y)~W_xjyiI#px21M--( zW?}~AR#^egGN@(j#icBx{pobY+Tq3qxyeEX3%l8&c&3|ksZBNpH|>jr6k2}k*<*HD zs0S?wk17SX`R I)sC ze(kI1^4!xRb=TJgM;ncbmP+c!TQd;L@dQg0q6&lh7+83?Y6EpBAf?Qc2wFD#oTtAO zVFk^>rF%Z?brQU8pdv4*es5@|fHv>M_%WwOg?&JRy^=X}&U@iXEnkPCD~?1Rq|i34 zTl>9Y5>57N0n3;en8fmS)p{u(hRmktoh#?$_97=y7@Q_O }7Zk@N(2$Sf@w0XGEmK``RPTj_$xKKwpiZ6GMqz72>yNb_x+V5!-74UqhMH z+9OL>@Ee2GCtM%UU(IRB<4@ 8??6zl%*s&Dxqv+zj)nFa7*&s`_yuD{la zL?;BUhBXfnGlaZ9OgnJhKNA)B8QIid1WE@sms0)$)A )ItRzg!rE*VWb>jF~3b z)T}G+>gQ(q3) !(PlzGqAJq^4;i4JIM}dm2dHZp7v8LMSMOX_{TfS#Z*|Ka7ZR9AqpM>fOLOa&=jq zlLW=yxc*EhNb!do-X(kK7qX=xvDXG>vzB4~d72!Y;TKS~ay_>ztcQ;cquvk%cUEI6 z5${|zV5FgDz3iA`w_Cn**7Jf(%OA388*VXK)vo1aAtb;YPny& q}hlR|eOc<7{IIPB*7eXC28f+Ld{8!IkO=+2bESai3$@)_3d3P$(usuRP zeP!x|H@dt_9gzMJH3Ne*5vLiw>uCw!&gPm*w{g?pw+V6@P<-ez*v|zKjP2_b7cjr9R*juWYu!;tur12K3d|0YH^Hw5@XJbdvi!h~!S^>Q9LNaG6 zP<=^R*#P14K1eg7KCiy^tA*+|Kapafrw@CB(;e36cxl;~1@VirI8r=c*5 *nggNFrdxgWfB2`fpBD&U_K?TVIsEx0K`-xUK0fMLU4|1>_7kbjNd-sjipB zHeV;57rJa`zaeJ2a(DL?J8tn-Z=XMcl^cNfraC!Vv$R|f5n -cjEvyQJlWx$w?l@Us7R1=EH3y zPLrBiM~NXo-s~wPOV17n+rEkT(SRnfX9Ko&lCyh;j@#DIa6@cpPsBqG(o(V!5h!-k zc$TmPBvkPHGyion^My@)D&6Osx7W9a-8o%rox|pXoYeFyOISdHlHZaAftR3U!V(li zg1c#VNZ5tP%LQ6zw@nBc%tP>7nKo4on$y~GCT?gNAS+UurN@tA_dZ{oF%WMUlx&Ya zTHI;8`CYZ}RJ04S7%P!@(KapGEpS52`EHOcK&^>oDJOIpR5e1B+YE>(LG-@rDtNIu zU^^78uAw@7^!Z})VE>?}Q7VzQd Rb@LJ3WVf+6B)4{TIbxaAzC&+ zSY`p0n0rG;nZca$pGfb^YEL;Yco}z%muG~gy4GD9b_IRismwZ`w!6|L{V!24jZ zGp<~}vv#MBDSoK7U#XsnD`&0_(4>bq!wtE7r&sz&uf43o(rcC6_`APEQ{kG&!EzV$ zJ*H4Z{l#%$(ybNX`_mk^jB~kUEi5bo$R&~&w)k=j702%TMs*Au4if%V{e{0N!+HS4 zfoT8k0aUq-Ni>|=rpFmA+}N4guk}mkWP9!HSe-46V3k--IBpb?@^+}-n-RKh9w@Pm zKJ&M6Ix5{7akzLn?bcs&6i}gS V9e`o>e+`tTgY-vk#A&iu zOeUC^M`qfsG3z97;c@E`r@5NU0PTxBU9#MOZntdo9$l7-mttggoR`pCJDn{K&Z4P8 zXGqZeh)%ifdkoi*$g2ySwl|rT44xY0s^-6IE0Z=aWQj|+dMP@}-r#hU+AWVeKD>$n zT*pjs-*4Z)Jg`fXUifKMnCVxfSAPMkGi;Xp`sQu z(T0$*+kdtgFRK 0M6nz`Pe^T*VQ zVKUFm_9+CV>SVK_oc6)&$fXilNcl2V@sJ{pX~xQjhXSt>+;6T C^qg ?|AEF@-dP-Vgj+UP2m5F6T6gfo|pNy1|*p5)>f!hbZ# zv0oe~yYy*5zI54}XYO63j80R$Q$=$N<9BROg6fr0xeHImm|!y25Qw2 =OcF4^bB#8Sf$=b5NMwEu@A3e38&rEU+JW9Gco Vb21 zdvp;Vcn2* hzTUVaU(Pw9Lic{uUUs8BQ{%~g+8Q%G+qXJ@I|SEJysvNIR14i z@+Yuv!gzJ6AHME;!Fo5Dk)YZKgS5_p%(@jiAb)%8%qac>cUNil!$x6bu~93`6X@zm z-&lYDT)bfX-S<6fsQ G)f9|Yh^m`v!to!#^9xYn3*Us2^!)vS?f1}Id-y{Vq5(X@^sruvT}GW zb9!yiPq(1jQ~%vFkL7o<= L#|g t%4!0&uwcacRUyvb=)wBlCa7)?=iu#A+gE0VNT#x;Wm zRO~vT*UQiQ>{5Tl9o=bic~}R*7a@-VOcTv6cTt1KP#F4PTmV-jFkj2V^&|>ZSc)xC z7oGmZA0Sq9aY-Qf%z_FH`u6b`M|hN&hPC`3pt4K#4Q+sy>7?gHmnYe}EY8vqC||Y% z@xzLu2k53R^ul3yf%)AWa2n2EV0fC|X&-DQdxEcDzb<`vR1mXKP~D&MbDA)g%j-+s z$+Uk&WaPqCOBE8p^?-I{6yro0{{uMT&$mWc_){n<(_z5C%>0C2b5G(>vU7V15>r6v z5Du^}g7pS~MVjYhwwiU$vB+Z1iv#`(h5+ !5g z2F5;?%z5QU(*2D|yPg=19)4XzmC)#Y=CPdC_VXj5jv9v<_IK(o2t2p{@3AhjvXPUM z{C*KWOu*}-_m@c6z3ER2C$@X;AuU&6a->m=!pzIoCm@HN<0Ah*5Id5yj9rO$g;SI; zK_MyUCQ&+Xut#|5uT~0}M0!~u{LB;%{Qqy*A^>Dk`5a-T5CK%gTX+?X8uT-tKR^3G zaEF8jE|e*y1STM5FM%&6=CN%~`4<8zORv60T>PDX_pO68cydJnz;1@4o7vfKBA|qm z2WbxkF VK2+vJvEzl#(5CO}0g;Ju7E zQ!ukkB7oz%z~Y*m$brpf=P2dp51RkIDcp}iLD5xJRXKZX{3viYg$mOLsg|I$j0|Z# zJ-xjt3z!0`YLSEFFCqdj_mE@%Ej;q0;R6TEz-m~O2!%qjv$IiY7=B|ENnjYofKQ*Y zcyXE|;liR`0u->J_hOEeqhm-~W@asKvmmfMDIMs4h>Cr*8!IVX_@7S+uv8s*j7!dH zY8A%D#!*VXVz6B<5&p@#jvI1*M7X ITxYv36XL2pP)D{^EB971rsy`U#?ykxT^8=@n tB{B zOar!*?ft9+U@t-ExxKr)z&qDY8c_1v3DV=okIh8SGy*=Nom{n4Q^FYzKw}y}&ygM# z78NPHXW#+mvnfoUVD(ozuoCV_u4sjSAcSLzii-Ai- ;M zPjc!F6MY->@=_GoRfQXZ^K8^ffZ7#R751k#Fqq4!l>YqAUoxv&o-+St)dMfb8o37^ zW_=b0Euzzkf>$~DJtqkL!tj8*$zEPIfNQ`0xa-?Jz!Uj0`XG3;`|~pj;8yUIy1JU+ z@#Rl~d((j}CcRd?4@cwvRooE;hJhw6F5dqi7L6zmWS74$l^HHC{$TIBC;(fN;^e~l zr$r~hAjhc^ntyfH|5^?%8Ut{EVP;mO|Fmd+7|KjMsN}Db^>2#dDuKOI3{CR?)1sXz zfvyDHH~9x%kf*^SjGSs0jel75t~fAY_gFgqffvG3=m1%$Vs}vV4~za^0s3D7`a2!_ zUjh1G3k27Z{q`CEA6p=kC@cW97#)28&e?=#wb287YgkdyE_?Sp+uzEk$$b!AhSg2F zw|8|$Z*E$&cXY(~`ucWUN)1kl0Q-pewJujtQBf&h%eT3;RaWg)hVjaxl$>0_;?mL{ zG`%h>0bUXbi&<3g5U)ZvsX%1R%PV7;`jzG>s~k98v$)!4-`>@gPc1LPIR&h1RpjGI z{d(63Q1XXms?zd3 aCsZO{9|`a*y$xJXj8Io4E0+-h @f{@=L~AKbgW%3{ LCLe1Bb_;qoKG%n-oS4#Us)1`ULq3N z#hJ0?Z{3}!hVaSrfY2bQ$Hj?%k?4|}y)Qn__;Yz?vitX0{c*^SXPE>4-p46WE0jLN zVxVV!iF7V=C<+pzr)qs+dgUfPN%hZ}tzSQbok01wqyKMLricQF9#`i_*Cg{yBWL8= zBERz^W`Ls(tE=OemgO^ZM*W>2!G8ihL)d4H7qHZc=6zqN%sTQ6DM)6Y_My)`ZXJYz z=27pXmTy6ne@nM*l+)$SY1#*&uw+ig-94eX6@VtJR#!iq&b7~c$t?q_1Q-At7v3Zp z0< HrN(K__~W1p$a%BTxKWOn*N-iX~-5 zI$OW7U~{}YbMr?OS{8^~5pRlHpN1v!IX#R@L;E`=M?iXo %Xg;!R%seq zg{1bGyu~{SI))JN_hcqT-`yIcD)1(tm3o}A^8erE`puby1O|fhPsjm5K~Pxw15R6J zRbNn^ot=U7h$=P~w3cI70d{p8(++mt>c6SqzyAETg7h8GYXwIY1tJCHG0Vq27Bn4b zcz85()a6TjL(9sZ 1=C^4hNT#kOGvySB2|;6&Kqm73z@ySD{w_ED#CbZ#^dWBep6yw`jaGeYNfxyHtZp z2k#unZ`JsWiM&2h>Vn0P4XgA``w7?m;uYsP9yJ1<;Sd8y(E^$GdA1shh~xI;i_eB) zbMQJ^zf(bSA7OX5f)vT@ekcuCnVwhUFK|BRSuoLgI-Sg3Yvs}Nvx^ )CYDx&-31v}$&YZ+Bk?0x(a&Ktom*J (Nq=P$e&k=`FZIVvTYMcsNn>VgC%2Uh;Q(pqgI2 z!66~&8rJxaB)7)f)ku_-uqPb%Ht2jV&L>$+D|mE4hk%|+^2OnRuI^061Px&aN+O@u z?bc86dA{ZDBPh4(DveqXmNFg{go6`+P|h>+Rv~tib*f{du6V9Uy_4gxMXmD9i@-vD zUZa>hk9d2>udeHGOxiP(2_Zk8!j(2X^wWchQgs5Xy+~ks^bouneqj+k3A?efw&NPS!uoRcquCWeb0E-jEz9Jd> z#3pJ`g+g-Aq(4e>arV1di&JhAjm`e-pv|#Yu{BfC!j6~mPoq-HcpA?meuj81YYHg_ z3gu#O)`S0GYoxL=!E?M_NkM_!&;L`*q5Vn{O-tc0fCkxqB|?1;DNXj2^E_XJ&P(KN z5pm|of-^<=M*!NVTfrt7C`;!EFF=XX|E52a)TuAlJqRlq?)Wt7y|VU;YLSfzAPvbn z?f>GT-FIWwcq$sEq(jYJ0fH`be?= 9inDd#)g$ zG?;eS0=>G8odeGC2JOV$Mm>toc<~52dNUHzxCDB0(WBNAihTk~KVWvaI-~h#bH^N& zBrNvrL(PyiHhwpl6P@QeM_jfX{a8RA8Wa+u)bw>ILX5#5oSYwtRPNM$%D~Xh%f-oA zK4@NrsWiW^z?}T+SDsSO$&yHG?{_l0w5Uv73z3dw?aEFu93i#k1@%FWH69SQcAf~v zXuiRK7lv@7uOh(uQzdT(Ud0M7NM{;lJgP8fzI^>yB#=StV+<8Aqo*mDN|SfC(#cGg zL9gz3i*HjtIzdO4_R}MS8Aly-mCz^vf^Sn*cZ71t38~tDHUvoekdAfE4RAuVN4Hzk zfXT_T)-GKZ+T9Nh8s*J(?C&3#tO(WS9SnPvPOIfL7dDKfPt|r*0|5cY;KFx{-ZCiM z3nt@@qU?lv(Ik6Zr*rbF?A-&$ahR^Q8%M^kU>K#5nWs|z*jtMUr4t% (J|D3TJWlON3Z40glpm8PAJ?+GECS z^~w-}wAHzZ2ECI+_rpEI&|B1*9o3_~h*PsZ9$S)lk$5!4TE6ArxD=^_*9C>SNk`dQ zM7%b>_?wZ=8p0RPg$@ETqfEZ&xGS21qs-3c^fg&ouQw7Tl9|J4l0B^&!!oz}mp=_G zuII8=ChONavJiZd$Q5Rm#3p`wtW)lq?|w0L^0Vi#r#o?f@&KYeB3Ga)i;7* iH+*B9HxNMU&IheAGmx)aNBA_0yyJ j>!y9)@?;3tCyA^<=N4_ zaM3tFT+c?zt)VG6n)8(ahofkQulLJ>tZw++Cbi~k3LKfw4mr+jTNoEi`!fbe;|z3V zZohW5qNuMsKcCniQqRqIm>`>*GqCL%QqOACC#+7Ce0_By)Nyd*p}D`mZ<)CVuVOk& z<+Gp~8fB1U8mPyQu1qWzC8=s16P%+in{ppm670bP)o5_2@IhG`uw?qk4B+1%u$%od zb_-*3>3^NASYOkbc}F~qT^a?iHRq-1390kOmP?8Bi&usIHT@U%p&u}Lor>0Tn%>8T z^5O6e=TAu3*00BYf%ZTP6>dDzT_cGjcpV~^_GN1|S2m2S>#u-|E1ZY{ZSf9G( qBU8>L$%jt^H{f4;fG5y~OuzH2*=p05%bC#Saa z{t0KoSk<0#o dflSgK!)`%tbCKysAWE)fm6(Ma%+e03etVII1%95^HMqz)3) zG~*lEn5nAbUK`wVzi^NfJQL@cJ5?L5Xix`jx~tE6eLcB!E+aukVTN}70#?WLD^32& zL)9*7)ns0m5}wyfT;}!sTd6mKNvS`WCv3l?kcgj<_6az^P)?SWN3{UdG`4plw_wU^ zORYNWc@^wnr70rg#(C14=rm~ 4!3Nbe$Ias_2(5BnH z4aaeK7kg(K$gsVqKc~1l+8TQh<;w~JTAdQ^ox|U5g8Nsvt*{6Gbd^o%>Rf?Erw-?n zJ^)a+@@OM@QuO*YrH93}KUuDq$juE!_@#hk;I;?b#-4w^SN%=E`D&hjJ7dGDK}6gW zE9Up>HvrUzS=@D7=>-<#sJAR2)xV?vOY??xo${s18qD(+bPL5Lv3_lRt|TDHp3jbs zj?SLqWnE56JClX5WJeH#ufJV=fz7isS(^U^^yG;Q8Vgxh9;B^qg%Wx&20@w2Pnvr# z0wFcfA4eku?*(^yE_&b4GwD{ilxDEIkCL0eE&)!r9mJ{Q5Ccr5Lu?Xm{-Z;?<08?W z0lWO?iR^0gs;lAPUtQcn#d6{;=sY#sGZwttN>0NCk=JvcQ|%LApX_p5u&f W}LrEO65pKRyegoR_% d5S@@{WGJSP_Fzc#+cRyyRrFW==k7#F{onf!m)d&{smmo5wRgplBY;DJCO zKuF_|;NFk~cXxLQkl^kFcLD@=*TyZlI|L8z?tY6iGxyGX=bUf;-XD{ve+0Vee!J?e zUAxv=du_MqDaroI$;<+rIn$N3grf3q!T8KATP{*Ji3a^4k;7!KN^G}Dt52M%vqVR; z#PxPIQWXyUh#l1KZfx>z
^a;vntDfJ}=r#* *wmjn+s(t1^{pIu^>?XX zBi>tTa>#b|zNwz=2M~-{^3gJ9|HR*{e(e{>*3|R&tUy9@v@`B_y5Z;n-6(rm^v&X+{^6P89d* z!#3$(_QvK3Fn98!O#@%SV5jw`cwhE5V4Z RqUc+eZ0H}v2YcjuR7&DDI*K+WR`jo{>noxCP{AK0{7P!0Qfhc2fH+X8D zN|02TQo^^l&)K%?WSURb^mk*0L;o8;hHb!QY4bo6M|1Rkp#|ij_impiddL8goU&FN zJH;ks6=$X~h{7oR1kz3!eJ_u;`}Iheayof$(=e%O4Ib&sgOZ2)1-o^Lob0_y(?yye z-w5|R9_4y5*IRS1(M5zY!NWpHu6bikV?sxvT*LKxEqaiN+nDm8C`KmFpxoA_IUN^h z+*Z0&>4q&8oqIHts2Brr+eYZMqr>GmtNu9EWJ{=gbNee8$!b_Umi|T8A)Sc-%Y{6j zcp=l2uVw=_^xbv~F8gJPRh+$q8A15W(muKfz4Z;OyE=9DB%V<%UROQBR8gE!)=Ivi z_=fq&e>)bBaNiPVZEQsuLLJ?>eZe}r-gd~_asfwol?hGya#ntkviSEdKdYb9C9mbg z4><=BXizbhsx&)gY#?vd$keJ^rzRG>L7l{^^7G3rB5#jb5)jxN;`2j*_@Vcf>1$$B zt6R&u{f7CV002~xg{*LWP>~z)Zn{yxRWWjk^I0V};Ik(+Y<#|^j(A2bHOPz1EBn2q z-MwGF`6*i5Jze=BGPaIt+a#G*h&{#AKb$J;b7h6uu-Zq|S9(OqJtX=W1g_%Z?=`2F zK=>&l@+WCO;~{2CnKn8RRF(hRvmGMbqfUl)g&!kp5~a~dZN=a_BP>njjc|igsmkb| z-}#$s5GneJELJ5e)uCXr+hH_~Qi)LiR5(61|2N$yKrr-B0U%RsLBxJKCOZ};Z>YpC z%Fpk?T;-pnD@b28clC<7V)AlgWeXf3Y&bn?mMhJ-9fcUU-^Xb@oJ@guZPvEyjt~or zOmZ+u+uVsTW25``=}U;C^1(3WQ8 X{vd^gp__KZz8XL;uXdHtByt)Z`jzsFme$~i}S{KlPN zT68cxEjEN`Fm}7RVMN95X1T@BuqTPzNfaJ(mt;0yDzP^)Q)Ow2){+^@d;gQV%wo zVK{J1@A&@GuFOGlZDELV!TR`gWYtq5ZT;m71|x4hLqpZcFE;{CJXc-Vrm;Y|-q;mc zo+VlzpKS1ODBi00L}aP2ImzvvmX=m<$qbIRJJ((iAuF-{SNI$%FSm`051Ode={9l- zEK6V?@lS*fVd`e*=z?KO7d$-dP9Zlpy_T@8Uv7YT7+a_zH{}G5LK~^uN`D8Q-B6}9 zng96g9GHS8UE%$3b4xau%m)AvNB#Dci4Xxow s1XeEoGeOa-K};e^Fa9aLKudm$FFYUGoecG2={g;fg= z$z6%&v{eXpWNO1nKrM0XmxiI*j&d8#u+wd~3Qfu4_r|kIX#LDmX+Wmdi<7@{$~s^A z3O$P?Qym<`)_+tfe@y@h^`%5jttuCqOuadtDmUEo4B&cj!n2hm#z8ac*7*&AqQPm7 z;vp@M4|BcnKeWC$c&-}#r?=K$hOHU%0Yj*6zyfO6gX78G9rLiXS0CK!$0N07V$kvE zB365w%2*x~WjvIrMhWW{@_pjnhBEI&Ct }EAeH-4)E)Yo7IaU4^`R7V6aq+} zz7zK5{H{*T-U2ZzhnU0t?UOP9Hwe0o@$6N^mw{!%+1FNCMYYT1{` zwvWM-E~an>*8AxdeQE8nzTtY#0YrhWb_1?v>B!=&Mg^A3E|=uG#(wR$e*_P?svXS= zDt9Db$xUL|&n0bdR2(EAeoji6G$c|~f5eoV>DaQeveG4Zng}E9`{DxbId)hJBa`&0 zJ2DDNWM3bR^5HmDuRP)Q>WpPm6}suFaTtgxN;pz(@UMl2&-W(8eJm$&eJsJQ1KH0# zx0)
?R_!rU>-Y4Ocq1rGJ0YRa3)$ybGng(}-$c8+>$yT=vP4HmM!+=1bRP`?T@ z1ytO&*r|Af_z4kbqGhzz4w`Hd$p_7qHms0Xo`(GhZ*TZ(7b3+IDc#~cL$!u0)6O}5 zaGd_Od8vQm{H7?T@zyUVb;P &5s!6>MxMtGbROjP1WKV8Me8JQMgs45eY7bvT~zlk *8`1}8U}Kn(3QG{(7Bte+@i-@dD{Xx+1Bt4B2Rs_9sA LJ0cE%KTQsZC zFzbU(QoUS1ANR~~TpOJF>*S?QLRL+S` hS>3Rm3&?}}_krHTiq6(OC wbbn+AL@NPNAax{yR z2#%=Kp6&3G*PZW_`qq_2Lv|Gh6Gnh3Pg-l3x(OZrTzO`}2R}IGF)1xjtsY&GZVVLo z8r0raT*WzdVi~nb`)?2?Nfpw4(P%}9F5 5P^w_gpxu@zZivgxS z^dJ6c|C0-SfUV@^9&o?>x5*2{fq*QU1}ov2j7e^4))#-P-+WrUZCf1RoqAIRAUL=g z_(QV)#Ej&W!QEY*sp&tuJ<$UA;n1IGXWBZF@pMJNc qOC#JB~*ksnv{b`opoYlv_Q)$msS-m(qjt^C7PiWb5n^a8NTkr%XH~Q@48=NB z5l2lyKZqmow}S&jVOg6*c%9(}X`s*5UueAbe(PcM2mKz9ooX2m*DKc)9dxBjcCGch z#cZodK>udv29(d>pYZ+hw3V+ohzxI}dy08A4S>KJBNK$di0J6ubA}IoZ%a!V%XB+= z72=?lQ8F4qBwQIz>1`by(fJ0PW3#jXYFOonjr>bA|ML@@Z63L~I-S+qCTfGIUMd`Q zw7nmz><0lQ7z&bc>7Pb#akIdusZ_$}p9kNiNchY2h_;aa7ytAx7u_uS$j!~^tgM#Q zi33 n)sXDvl21PjjZ!Nw2&;Q|VQWD|r?#|Q(Onh&Q z!Q>V5k!TpG#$gf@(^Z;MiUQ PDD(s;wvpt%0rPuH~?9jJ-kfVis4Lo zfm}WCAK$+j<$*prO9Pil^>CR8Tlz2`NbR@qaOsFBIq_4O06Zd3K|w+Mv00b!n;T~! zca(0BWFlui%>mMfX%wuqUl66gGfaEn=%~a cRcbo9%xhomN5Eq-8da7`Qku~ zG<)%`Cx1T=e>@`d;B$3i$s_T3a0K?kBgNNP`}Rx@Q3_Q9{vWAT9&AKkKtDMrQaL^F zyIE+k*eS(S2oN-~oY< zCK@bHwEyMr^W;Ut0D~wj%&zwTsSW_8Ku*V^@Qhf5@vZnjPZ7Kbo=}mzEK_+IIT=~` ziRVkSYQRnLV{MdfJ@|L-%s2Qs$e`B$8|l!_zX^Vj&1w3jHKD1H69Mc$jleZ3K_^Y4WzbA-S+s 0N9UyIX!l_~9QZ-8-Bd>2zOgT->g3vfMZzWdf2K z!aTsfnj9sgvOB(?Ykda^`6pQfMi1P09tFU8>Ot`@Z`2E_xpJ%w`(Ju6(#B`mFT;cS z#Lx$`*!~7m{PPX@-XgbkwhITxkG~kn$7JCFf+Pak|5uPiz%ARe*a`VN)B^mD?=8|s z5}4-z>x18 QS<0l${+r^NKQAs?oe$ydRh<>k z8(di=4zwLb*Yg9@z#;cqyKm+ZDKyNMBDNAC `0p;7JcisK&c4@84UM2W!v zR)t&gK}Dv}?+0oqw8hcF6A}pf IDA2J`>!%zs{R|F_KlFJ}H@g#Z7`2BbwA#$v8= zxp2=D0~`rOkMz1%8a9Sk_kM6%A5YLeIL !&3;3nB0NUM|%GjN$a^T79 za?v|g&g6Py&u+U@tvXYpap*c*&E$CUcA2O~Z&OCO+(2FF6-(!zfBWCJN>UMbsEGg4 zTDK6%&2xA65tzAYcl5jL&KAw;&-?_;7F3GG8kH5)YSm#C#&aqGuOYOjMT7v82@fIS z6#dSWnW?$JQ&hM5yUH&EsCkZnQA+Ku?h_=o=kBF8EjJDkuRkCcb_2~(MyaEOW~1}w z7sPF0cX**@G7mrsDFR2VB5@i9)*IkLo$2cJbWuhOqS=^;x^W+E%N~b4+$cafmHURV z O%7 ztuW+<{i4OI>1SmN?CZ9|NQRZJ!!~UbN`u{fV}VMg3R8w8{fl=72Q#S?t~ZCDa#ad_ z74S%*@ZWh{^7Q&6+DD!yQ36l6a2X0w5inac*K2)0C>hq;zP%WgDYhK59Fhuo$)0EF z+ry+#5ckaw$saG>eVBL o2XNY&=V9SYRfbG^o+pJ!)LZG5IlFYD z?MIjU#ZAOLfq3+A)`&B{vTy-dl;Ih|V@-O( (z7&ICf{_L%#hG`n*d67zCM}KX z=nE8|5wP*~#L%Xr9q%_Ki _uZ{sY2VQ;cLbydEz47A&U5vUT;{gtSn%M# zV=UHedc%8jkS->p9oLr{e`32i;zAmTOE<*&xWf5rC09*){+VKwmd)i64!g}-P=RI> zsZ>Y7Jn&r@r;>;Ja@YL+8H(?Ha}Z(YN`K@hpV9aYTl 1Rt<_F{BjV4glUO6& z>N`@TPN+LG6OBu&(%op;cnD*k@p%Uq7baD2&zLJ)2g4m0vbY#bZVJ=yRm?Fo`!-t# zY(WBaiIT+emw?)G@fUBSq+}8oB!99XrqXnB6l*ZtU}I-vt}gb9Fs*F2+cG~a77Rtn z9Nq*qW4B)S(uXali^t|Up~T!1TxJ7_myiPVAIoHqFiHOV!$XS_ETLb|uYZt`KzsUC zSu^=Opsonl AP2>g6QaZ)uQjf= znDe71rOkSc)slN3-Ck3pN0fae#K*H)>C3E_AAwj#ZCa$wto5sAiYhiK*U!K#!pVg( z2|Hi$x tw?3?XRfDNH010?gFh|k9#xZw#%#<)p zPdjddK71L;+lvmdCTEA^JiQr9CoZR&Bb=zk71mJmlOL7ip=U+voZAU7QSb7p2GdZI z9dEaQm~d?8kv6N38jo!J4CSHYmS?XpXr2=w_+~?WkVWdxm%k?%Zx1Hj76v)&>fL)h zp0?$}Y0Pj8-ii=8O{Uk>2z__0&Cq0Z>x-NlA?Glifr)?qqvw^Inv~hL6A|*0cjGqe zJ*yLQr-ZC4GhTixH#2M@ zOLLY|b4u;%GMUV8Fb9#o)H;S6u!H6gX$A*TE5n>?Q1KarD9(uU3{>%0w@z`q_kaak zMI!_SuP^pQ r(JK3Um46eyf< ~RsmFZ$`cp^-TDDOsW>4V0wGzHcSn#9QJ@qx^ z!3XXb1RAXDERB&L-%7U$cYP(e0kJnzVV9$a@E9TcjfzY7YajiK5^YS }Uzs|G>Mnf@O=^ImB0#x- zd5g-e`cdNyd+Rnl^07~WQll8p<%-+K@oKAO{f<864i-fruzmjbM>8Ihln_#8U5IjS zxq `zchM-fv+F6zZg}zXf^-tv0nSP=%Vq6cb{xmD;fF=HHwX<@+x=c>LeG& zP~W&*ov@%9c7)t3z(oi;9;SUbYR6M(g&et}zToK7g7+|5MZRW`5h~Cq8_Q=~VsrV1 z4T&yc8aFp<^$U% =?mGG4IAGN9X|n_)5M_>ntku(ot{s@$;5YWWR6 zVx~N`q7hu=@Ig~_?r2tTTR>#c)=iHVKK(qkz!(lr5!%uV_>YKQXoSo|Tsj!pE} PeXK&1#6h}d%Dv C44BM4h%n4RlSw-q|38zfWxt)Y_b|u@CB N1; zKcFf?Ee?!}8H&Zk5fnBCErQ7QT_G -vYj;tiL{?CnB3 zZRmjhYl__Xkh8s=cbF{sSR}xYp9%H(cE$Oa*Wn1e%wg1VvXyp5HcR4|YUjh&ST6i) zuQ@R%e+~@0L}bkFVx>koo~sQqQ7lT*CrEYA-#~QQ5M$1+eDlLR9lh~YYjnOBW}}`- zCh!Qn5&Jy2?cuUkCjFvWHcL!fj&wn!U*#*!r2^dRj1)3&+5}$9Bm=2o&a;@hd7c6q z!@f8=_A)~o!jSy1r3pUy-|TGG7o35t?(+lkLc`lXVh)ymnwcvu4&=HBO>$cOWMeV= z^>)tb1a*`2^5&9+9E8j9pQ%Mh3Y=N>!d%g)FPOSKFKvhtu&Fg<=+tXhs(ER4-0>MK zW|ac{J*^sqp(2>k7cOT7-($ku!6ZGG2`e@}-HOKDhZB2wv0G&`Z3pLVUAHfoIH|^A zxA{gDX2z&!yv?Z7CY9QxFym;>;Zn>IFs0r8ZgBUtKn|SS;~--0k=JRz$5Kf%Hez3b zG_F4oNkhO=q{aK`%@4h2{8b>o-JCAGPOuKBfA&AO(npwx3?TJ+^bz+90*xk2kit@O zyR;S9z8jY|aWk6?r`1##&G*S-z2Nv#O(O>vkc~<9@r!b;Ug_0h;%wnmizRw4{AvG< zxIGG^cIr{H6hVM=qBk~h7r!=DUB*0{LW1NBMo ub*^~{w289LMUH&iN z?A{iP)%i=kPJ)}=YRS7aINBW+h$;D55&{d=?E$^2$>%{dfhBQo}#}#KomjZ>Ri=Y|6Jza z#%#W#WmicKUQVcm5n~p3tv@#BqHMg^s0Y@zCvd)2@)yw{NExN|jpr-E&%fiB#>mPR z4A6n8_a`**eGI}kuA_fT4G8{%q;PEO^SuU=WZIy0B;Ref``b_4Ua?+5gg+O_#iFD@ zbf=yy) H7o4deGqX!J_MO(ER%lkix~-Oh8WA~>H*^_$Kn-Kmi^b{tZtePZ0+)k zD6hEeQw(65mHxFMURRc%JmHZ*$1U3}Wg2aV^R3Q?qA<_>r$Ok+6!xr+%TqbYGZq1c zEXE_`RBiI`=D55?Q%# 4k0bX{t(lxS}9M5o4Loq-l=gIcWCk(pbO3-USp!)}9@$PZxko0xa;c?gdSA=8p z($(l!$9C6e=As(!jvX4*JMBzk3Y3}o(Jy; kV zpfkU^? TzXlMYKLg0=?e)2EK^!A@h*oFFkC8?Jgiv!9 z%W0$U%tn*;Ek8dnnZ;?wJ*{I&g3i1*`z6>YtMPO`YD#3KE3fTY1AJwer>lB!=2cBe zfpR`9k;|b+Z58Iabivq)^>pb2n76rU_>V%uiEII&;A!|kgg+ ePu)XwDQQQN=aj9)=f?>xMocK1Z*)3~&hT&~7y=6Ub0 zlDpJ?!K77@>ver;w>!|*C)cuX7q5EO= 7W_RLbpcoTnfoMMrhGDHzp5R=fA7>hVt1W8|S z4|K~r_#j#N;@5uOOX2-SLV4BDG}JliaYw%pB3jbR&l30prg^hMppGR%PdHK;b@Be@ zxR@yeEK&YKwHg`Q-Ra%pmXS>k5;1`kme|bRm~KEj_she!?~owM<*SG#{)SGk<&n}q zul0S;aIUfL2}@E%(KfU|nb11gE?(E0=$o>>=+Zv6&?Q=edObbObe*fk&HCtduRy0! zPfo8 )6 zf5XgRc+@P*e^2%aHTLy~Z$_`X3Z}}5C{f*8dvK_O_Mc6 3%g)+qjlOvjkK|85#T?kyCb_P!o*(Su)ND&z4S0_XFnxo zKbf;*k_`|r;P2kU#(;a5F-THloxfl4lD)zXYma{ZQ;qdH<1^tnhE$+R6L;#2qhxB{ z{tT)Gn8a4IJ*u} MU#+7VV`zWTy&Qa!b z->xB1#{Fja+|0L}h_6e8Gl5yNc;b0ZP{gTvR f_SBCFJ&;DGU z<;)qtpCTy&xt-#F^Km{7tr5T%tFo9fW6avPrq7?nVVJ%_*-paC6p8M6aD-0R|BMJp z{}>XM_8|~|ouL@CqmaX;FC~!ezt(o !A{I~`yOrWI_tYH3Ex*tO$e)^yo&uz{! z<~Ny5G4*ss$-e8W2R4>P+3&ou@dd&XDCF~^Vp!rRxLtgcDW3(s1nWQQ7u8||>yvqo ze8u7zeyU0Td}*A{SMt#Brk=W%SM70HHy@Ldnz8+rFv`E-P-mg4vPWrCC#V*^XwbCu zjvC1n73~b!rO|dgSyqp|a1JJ5p4POaom@WI4a1c=%2z(_!oud&;Br9>5yh{^qfyK0 zFFNmdi~v ekF&_q;}q$gA|_u&Qqu0i 5jNkhpwJ772~Ls@CWI(d^_8p!ds~4V{R?pVB zX@;ccweI#rZn|~Pdpj%x^}%I`Wz0M-6i#q)sXfr)^ks{e#rYn0Pisc;+K)&YWhU{& ziEETDOgNcCOp04>cqpIk>HMX^y{p>{hePb|=KUt#%!q+W*vX?9P(oiZwn=#BllGF) zIj%$8(ozGUek1vZ@u9<$&!3&-7hmPg5`RCT>ZI`YqEoLkhGy41Z`(p%?G=4?Ixvt2 z|HZku7PmYME;Nzu2d8OTzA2{*A(YcQ)MnjvG{0hXQgi>{>Q @!9JikqBl- Uj;aKTY>+h&b=vDivxnnVU}`xj$W5uCRWRY~gHG%TgZZDWx@ &S=#!MMilOSYT}9TLWv$GCc`{X0*gaOn*JXq_j{@pUiFZgU(n>B&r$xwN)Drt V+Z{D&*nM MnxX44~hyQLOOoeD}iQec_&-Or%Yq$ss;7NPpMO<)eh7*$dxKg z<`e+mt!rVSd`|w8Mzs<8^lfN>JFfE^0H^33`nGfGfQphMC5m!CKf$XLO{H3J3t1XZ z)Ykyh#Ic<7liM6t(weOP<~DRGRab`{)haF}8y;Qizb{&d_N3@k$3O3>gNb$29|L zFMhKjLXsh&KtaLPlyI_doo(}EoO|dRec*ft7#T-jM2Yf7!wMEs!X0r#l(wq*|8nx; zdq|w-Rxv5Q^&V&oRF=2;GfKW7yw3Z+X1n^(%Bx2{uXfjS7^Q~h 3w14@C{iy3V{Ol!f#N}`${9ZnZ+cIwXRC{? zej%wpxL$mtdz x-Jua#;{AnlU6O~7aV5ZW;3 ~#xCTFnHaILN zSe{Kg)?QF{rG~yY=8;OBR7j|MH^Kel{&zUjmoBZULjr_+97!m$Hy@(sn)TKg`iNS8 zfgisly}_Y$vD48?fZkv@bu(!uxVKuw_I*&+dOKgaWuPmn&bxiqTvg98u!l7F8sA)4 zMeu5Bh;o|oVMFp!M{Paf>eV_z3A2;faRNK#u3W|!Fh!oFhJFks&^96UY?~A+3BEy2 z&MQ#?Nzn(G#S9%Hso!Vze7T&Wwt!pj;D<(fJ&HMcn~(Py`|3M`Od7yW 5^1|ciD#H%N^@+?fk1C8ZRM#Ff106pMme>CB-`Ze{F=~1Beb!6)lRmT z8scEl#-I`2SQC?e8n4Keoi$jp+nSX}qEijlEtSbP5NA!d;iMRFDQx4l@gTJiLC(ct zwuJkOC;&%GNs`vuf`;xV9v<2dL%e>^Z2r};lDQ^$377li?hoQSTHBYEM z4vvU-X8$iQ04n*SCC1pNTyH-HSD<%qp4fR i<}6;S=k^8Ir|baTf9aL_VHv~ z=8mAZBo;+SJe4n%!C59k8te}5c_%kWt809-@bt=C$~(;U5k$g)jmxF#B9@H8Fl2}7 z%ZyT|lgHtrB|<&5-?JBboN9=W^?} DcVZR->@j}t=GJL!#w$Q*S0}3L?T`U2`F+s2FqK?mo{&4y-6U_ zX%#)|hi$(-aAy7H>g;L* }_XPZlHlk^Xk zepOk978 b$hHon_X%PF@J$v{}v+&4VqL#QtXq@Z{6I?UnaIXW<`q;2zG0d!+AHH zG8zUbvbE8Bi?N}R(-0!f{Fkz4+R-#<;~zml#Hc-9D<#M|)abmPQ`;$ea=qC8c)3p9 zL7nu;M-xO%gZgr&^bo(~czX zsFX&8mfNKMZ0}29EXs}8ELzLi`dsUBoU$>izofU$9)I{mN!9im2#jIk1Ue0+km?lK z5XJlmpPkiUmD>B&I8Iv;JRd9j^WuhTr$-P6v_omeKoSu89My~ni5srbAN}}A*Xda_ zpF* W~3FSQ&^^OyYIhs})6Y@H_Zyo2lQcP-eHl+CfKo z_(zQ{Q%;y@Q9H!YOC5R+NK~O)#|dWADX4Tkj_=D$Q+_VBq`MdPdF}{ybaB8wv24 z=Xo2^-ztmJp=DEgd{lP4(#$B-^K7~1;eOE{NL02+{bQTe$OvgYBN@+=5_(sSyTT0k z-a-W;(5`wl*lOtY5U 9(Zvx^7>j4nc zxZ{m*`x5lIl+kd-ITf$Uq|4Ak5ZrEXva74)_W>d4 HBB=ZqX)oSo)vdY@U0aD lX3Y$Ulr3` zzz9XVZzmZ(S~Ry_w?%(GQDZ}ytC|fPPHwaYmha4jP2P>Uv{sUzE&EnCM-4{`o$UID zF6ebsz9SnrblwflfZtLAFphgv<6iOkUEkL?HE!MY{SCg}VN6E9|A44Y5MW}6Vb~6< zg-Po0-QTTI>CSau+;M==wvS3^(!cA0;f`Ux6Z9Ji>rGU#o!PsNjN(4c5-DGFH=H|K zz!6Z9&vCiLmd;i>Rn@{g9t0EV5}E 4CnR++^BqHkMZ zA_o1{>rc{ -DkV3@2DBhY0|3u{Hl*&_U#b?f_E|2JF**T%9 @3lN>Seo;%c#=yY7B#IUNj~}Z_cYeygqq;7%>Lv zlh==-^J4|ltxUbjulm{pW98_+Q&H`AlQnEr#*orxG;i?Q?WrkO*avVqu3Qp?y(c0T zw%ePH=DlMpzPnA0@Jyb-lu4kU78ddd$L>&7)P=bgTwacCmwaJvOE}-$P6|?=w?_oX zZs~EY$3YyWB#(=bMQ^4kE@VG>Fv!u~xWZ(7I^1t~NS}huCkmfYr|Zu0Y|3}*SnrQ^ zj9qV*F@d_SB(m&7XJ*TJF%_6mh lYrl|ZeWu#`?Gj+7p`o!RJV>?B(B-I>tK;gzY+QIhPV|I{#NHxpHIm3 zn;pSK`9YP^V}_faH?DVfr&A3nT&XOof{!JkfS9P1Upkk)DhXQM2EmiG6R2m&5bX>V zwXk`tZsKOjjd5)bL*jWYL*^E#>PKy+ihp7e-|hLoWV4qNrLvqE0xi;fqFzpw8%N@( z`BDh@qRQ^?wik^rVLwGhdmc}%?zqlHXcWoiU_DiD{8+&}uu2$IVzqJ(R#wRE*EjTF zjTC_)l8I+FUxMX32FGvJts#hl_<=2%%*we>oH#UU7w86BXFhVmlp#rJCVWb4RrET^ zwZ0KGCk#{V&tO-o(>~Vdcd|VZJI~|f=tTFgC+XkfBq003-g^y=BkA cs;8;TWwXL8>agQQvL0_ zL}iJCg^!<+AwI}BV@K`3epKDNKPq#+6sc2JnJY;Z7)QNaf?fCfULfQ2h~5`pO~Jen z67whjfci26IY!}a0M>%&F2{tO&;v%WLF^<@U-Q^r&)I21Ra|Vo-oZ5GXZr&N6|cRJ zxbS#=W4Jt)rF_ ecjJw|rb03V zzhMg>KeIaB`pk5t+bo|a7Xe&NW;D>-dgw YdQL(CH5=Jwv5W&w-pZUj6jQi|$5{?AQ@hZeVYZC0$q6;7cVW!hflU4DlCKK~O! z0l?q;hdpjF1Q=Ikmzm`*?2MaD-5U6l>GhnMtIoMr=)}dfsFY}FI~*R>>_{(4zZSIr z)cYi&sX5m7u$0dO4z#gXn#qSkmC0ki(%v~_cq@cpPg+fz3-Bq!bbOElSQIVh8ucg1 zhrTXK3$^SF1FSEfe7l_@vd8N1Y{rsZ!!4#@iirEs&%iKDX`e?Njw>Y;{48`AE8U|q z tut?E$@*>62Yno-R0K40z#R@A;E zu4YCPCvB(0YX>$mnTq>7A+OEAGSge}*S45URn!}Z=x5OkYUBkJirytt)5@M>L*skN zpF`U_F$XJVvpK1AMSo0A1)yQe6yWc^`2au3jTmsgV<)l^f=ipX`q~eTkQ7DEUj_GH z$-o1OKj+ILq1AfIhXiyr{YK(it^R`9B#6uPNC{->xw{{AG|4Z ?Uik k#C6~K&rAk)gVfu z64$%SX$RZ{ra@XkVN;1&H80K1gxdvVdnUQ(29JGDUc57O7?m^in#Ji1C5rZcPNo!6 ziseOvCPoPMC#@`2Xflpsjs9;Jy}QH*U_htC- P4eb)>b$#+rHp-Z*Ko7P5tiXQg6xoFzH$8oZapf+G@Y_2NZQ93k($~a?m(p zWDfDWbQ*<)01&yqUh^;$ 7J}zL0qR3 zpV2$V6Q!0qCX!WP%p$kAF`)V^HB6^PJHd?SKUU{3FPBW;AWsoYbkc%~d=Yos$0qPE zi}UlJll_!zk8LS5{XsA!r^wFRm-(MmzD;y#h~BTb+yqhq$HF3huMTUa{;o+B13X>d z#_doI7q>_HYK@yZY~2Zzp(Gz0Ws!t_8f5b%ZgC?)F#MkpT}g0aYfJ6TH{|PV-|vpe zhfVr@C8gl^gqIQZxzCkqtZ%OlUO52(yTUxYX=ZSbp>&p*u_{XvCXpW=Y3AoeDBR;R zQxE?rMp*-g!zG{XB9ggh5~L5JO_^Mo4>O1H4I(=Pa?%bFS2@nYw)zu0>`Vqh$&&<7 zhW=z$#a`au)2=`T0vr|JU#_o;ZqC+}t5%l)U=C4d_5Q$%+0b(y9eULNgY(nUO{}0s z@wp|^ejUfxZOC9+ Jy=*fw_0{PQ!9aiMPI~LYDdTc00cyyYj@*?$~`r#6xcGq#HDvjcOD)cN2vulF)Cm zbbnMyc;>#QL4n{SYl -$S#;D&H)o!$2OJ9!&NfP9 h`i3oWZihEuZV`kn1Jcdea&YTtx$vWZ}&OH~)fwS}Y;Gk^(tly97KNvI9ITXRp z95h&PiC=fR+$q@ww)mB{04&?OV2%~cjVuFt&Q&u;g4%+YJl28)Z^Jugm?Q)EzcZ=W zNc1H#t9IluI?8&2&x`xPF8gLTDl~dXZ!MBk;Aww(3r$K2sgmv1><5e4>Qth2$dvPF zR(~b@u8P2@n+J}J^=cm}uq|RfJux{2`CkOLUxQ(Ws;(Q=1Gx@P;9=*>jr)?K+ZL1i z`GD;yqfXTs$w0ycfSb8i7i1(?mXiHqmvo!&e&%W;J@oxxnrya&DI5Y }Djaa-}*SGL?p3M*wB0pMvW+q9tGqG@6jzCVbI|w%$yT;Gx#r)kF9xGTwu1Ulcdg z2FhhIUGd%45wToUK8J?;B#Gw@{`&D+ujM6;Bc==x)tZ=gp#y2dAnb>x<)ojkGEf5n zfx)G$XBwXvAL2WEwY9FK)?lwWcHcjlqU%*G6k*aQ$xT+v9R#m?07Hbx!(Vcw$8+ zI9--0TDi^SC!WZtTU$GC=J>9+44lHsOeg6?e>kM`-#Shkj;Li9lU3j!Avwrixs6K( zWUS7`6U!4nIgK)G*~SHn-_sT<@_FI03q1dAlFvn*)}2~|lX(C`{=vmb2Vsvj3G4r$ zwE)FMlKAJ%!1{Tik^5s#0*}jeE`ylq?8n3ZJgL@ zfrIig2(>conp@!*02<2B)IKw8>C@Q2#ZuMzxJv!`LM&|pt8kQEdi9>n$I4WTMFTD* z$mWRQ`y Y rKjXzI^#e3dh541tN)e%*% KL3*VhPdaXMbwgCm|{POD-~( dHNk9_4dM!=6oCW1y^FHQ>9pNIR)hIyf zmE)lvs&b7^jTUaXI=j u#!oS!}BAw)^pCf+fSka?=)N`yi zmQxy%gofxhRwemLICjsbs>o)&oBDij&Mv h&F}{O7p*K(SaM|V{m*=>i)Cu38vfNrzHxJZlFS& z3mK-y%|GwJ({#?VREg=Td@tm{!{u@{25KfqUNCcgCz-uH?0f=|uML7x1D2zQI UK%F+)*r06NsCI>d0f z-UzB+YbjS*G%PP(pav^A#Gecjwsna_=i~2^j_u7?j$%v(5t*#kwfaT-&-_x;S6-;q zFMq&vWc<+H8CLyZ!AYv0*~^*L-JSj_wYVBG^YStedA~CN>y44yE07I{!_201j0thQ zvHjKOYU`X#RG#Ls03mFFAd{12qkH{5hRAk;i<5fYBy6{_*XvK53Fd>Dt@<{6T5WA0 zfu8JB?fRQ{Rf`<|ih9-ufMQnf19c!{C}c{cV;oS)`@*h|&2DLyplFguegdcsW zrvR0-Y}i}26pEA%yvaMlvEt(YhrPFq>gs#fy`?(^ z1nKTnKsp4ZySt@J>5>L%q&ua%yFp4iq`SM@XY$`M&iU goFR)E_iUpyYByvt#n;9+LS(q z?>JkwBA=CsXf%CL1)M4paddfko@->iTl>@W@!ZYfv9wCGwwOCTt6UD-RW9cZ*U enOUG2t<3-T@!g0~=M}EiMr)#!E6eUE)joKA%bxUReT0=NRHU?T&?;1_ zZ~OGo^+>Ze*HX>dN9P1SBg>#WaHw!HKbGb$K{XA?MUI*V6PRuN%h NWG*--aVw7qv{@{D63?FT*MkSj{qm(~Vv9RT+bGF_KLvThQTp|L` z*K(kP#JgtL8&=rLgGjeVDSJ34_G8KYx@gR1rozo>HW2FcIe^6C4H*IviTjP_$J0G( zgn}TmsR9L))_W@oX>`4luBx5~+v673K^~{lZ54mZe)r8uxk*Ve?D<0b4Y7HSt|QMo zlQsDZ@y>VkCe^Js!{B)?ZdXVZrG4`KC?$?i=8nF2@(1WOq;Rfu%$cT(W~bWZMjW-N z|5q!@%ir~0%3J;?4%0;{xz6S3eHtL1DLp4mWvd&ZXEo}Rf2ZM$w N4Zr`;ni zT{3$hC0FePjP8w_!*L7tPWGU*UaO7ZrnkNIVrCHwpC6=goz}M2U Gw0Y@Jqn@)-&)SECw-sF^{l zE)4mtS;ox Nvlm878%!=z;6`Z zf$onh5=n{Pv;{i@tP26W(P{A7$8i43INR%!gzb@1-^uI%Bx^pQOQRN@u42Q~!K+I^ z4Z{x_PI@PWx5{R@AeX_f1ZkrpR6vtoW%Qsr
{Yz z{4K4)0{_?FxdTeTXHdA^U3o(c%}TGE4gkm0nM {VHY zL5&{`M0q%9Iy4h*Q@px5UQ#MjJ-e_PNAsVX&lDm@FiYf VhEM9|{ zrb=~yLZvE5S}-D9qxwN9wXa!v6~|@C0lHjsu2Fj^oYwOU=-+jagbN4-oO-Oa&4PBy zHLvzTF7`RRdliC!&rMoN@e&y1Xe) ?vGX4CL%W=QPTZZw$fIzR^rq-0A z_VCsg%24a-ZSCe_ ?@trR)muzk;IY_6X| Z4TzoOY)w-8zVzQ?^#Y@)_a?OZQLT3lfe9UyvyXp8E_#j2?8h6TW1tkv#+-+ zh`c)YS4RieOI!25Q;tCDH58WQ1sUUo?BBFE`4ey8;L2^&fle z~Vj~UIY`3D8=`uQ!*$=|FgQ=|->ZT0~yX{tu zKX9VT)5EWQ*&fD=dt><1q>gG{ABWd)fwMplEu{{o&&>t4qv8jf31Xbl+Uxp1bN4=Q zs9y9SP@Cj znkzf?zg!=3F+woAaAWr@F)RJ7*;F#n9$pL8Ug$1>?WXZZoc#=8ZEw3OdV06>jNdMo z@vQJ#9G!o#-8V{KZo09UHnNa;y81iblq^i(oYCN~kb|@m(|!TBOFCX$WFz=5aY_Nm zU)WzIKL{^FY`T2#I`m(&_y61=8XEsyj%Xoi WGDQjANo6B{JFWQ4m^7XHu&VTv)+rHWX@qYVh{ZXq7E*5;zP`k z4Z;`QaR?}!FO1nS1C>n4l}?$JMtv$G{Loak3H<^AUa4lSV%GTE<}188M3>SyW<7-= zOTz>K*k$uCJHMyXiGwZ7V^5 M8kvWZuD;q_9Fz>pmN(9u0;=vdZC*B`3n zlVDb!&ewX+E(mJPD^9;C&uZQs#P%hF2V_cN +RXtCEL&vp$!3Ms?BvLq%U@w}a&O {hO@c1>ZuGBmL0{yXPr7 z-B4V4=F+Fu2&w;b7i87O{kx7WKOZmV`R3U>Dg$EVorSu>C{BdeW- `ft*)0#Jv9PJ1J5{l14{;#I9-*IUze7 z7x%<3sxIzjM11b%YhP05-5-z>BmW*=eBG8YA|zGl7-PDOUxq(h=W#wRaZQ@T)4X(2 zKb||Q^_XsNS5` =&J|ii@l@F>>AsbP=9v=v4%jJ38Ke8yW4fL2e*$* z8ZEyJac!4=rU8`M!cmkM3O?QVT=HmFsR9Z8YNziauba<@Mvp&=^#n}!UJPeRW-D2K zn6%z8z+r)4I?96`Tq<5>&0+JgL{yjJFQWe`P!$(e#859Kci|h3b@&kV7ZO9Wnr;nF zv$_02=aeIK(Ip*KvySs$rsWJ;j&wzU^?dNk3n|@p^CVoB0uF5zfStOeTcB(s4?-a> z+j^|DKGn-p;-``8cbVUzH71MjGn*~9wJq-|*xL~*D1d;1ZI*ExyMZ$fkq`bw3p0-A zt#_-oN;pxkC%`xx*;tzI!M^Qu&)r2pwn+LryhU{x2lse1?P0`>h}BSJ#F7>G2gK5r z5SJ;DrgHtx=r&iYKaXx6lsiN3a(x|9%gZ3oT-kE+HUfIxjzmze4Xw~!sI#t=rg>34 zAmbUHC=_3;#r&UZ^sC2i58Vs0;+?0%)qVBW3rvJOj&)(&4gOe96paqsFD3{JB6cU% z eV3G4!$Ers6PbkkPA_ zyf _47V0gj6Yr3H#6(r9ur^<* zS6ajkr?O6R49DhG0*Mb0lefk)x}&DNyH_C iRG| z%^&LZX`!6-4P+Nxp43gFr{AlYCbu6Q@3MrRnqru}bwluXJnJ8Pj`dnx3Ioo3-^5$e z)Vxa9wd5B>@DraaOZY)8Ck1p8moi3pslwlNaJhqNSt!($?hJ>8U-9aIKqbFxa-=4B z^H!R}dVXpG=f-&;W{b^nUzzg^@(pZODF`)egyBWdHZg=6YJkhyQaBr;%LGPD*+0WC zLA*%0aH)ly<(=nATdOaN>a(l3puA7N0!myvnd3ehL2CnxpZD*>MqdK*=Mb}jANf(o zOU(s0dNv8sp;U)tCvyekM$`A$^-pEkLX5fp@_f>sNXWrJiUEmJjh)pma^p8RNI$61 z<1ME5+3EHk`Q?^iEQs4ewQ9`D0$i&v+IpT63x#9Xnm0iS$z}(hkrW0>==cZ7HZ1NI zwfT70#sf}uCzWw)fdldF2C9_scm9IeRya2Sb=WKS8TJg~XMRSFsv0d9@eAAr*?;Q3 zZMlKH)ApVab^YLDn4ABOZzXrUBuAJ=J0Mbi%cjOdU015&L4#(gW(TgyK_1GY !l;K#Mpc)0F`gO7@KxChmrhl(hJuD2V+2gi;#O$@28_dUA=(J)vf z) i^snc4*n?>A&ejUoWxS9tGf0GlC8Bv7-8j|(4&X5hK{+vrcnp#h z`UH3Ln`=qe?UVhQ9DATt#Ku**_hL#99h&rdkAyNY^ZW6&Y&Y0p-T3FLtdmGkQ>9Rv z4bDC1j9vSipy!3)9H{Hx3%Sy;&)*-0r{m7N(&VTWqTB9{)%+D!s50y|b)5&mwCrny z 5=d3M=2|Js$2K@+-Fb-N_MC^l% z!+(4OLTjK`ocaTdb<*Z*f$2`Rk9MRnIZX23!42y0u?!l*uC(`C*uLMiO5MU=Aza3z zHvSizfb9zi#r9YDrpXKNK~NALXw22P9ryJKFcWWYK%r~0D-18KAkOKCr@#Z6XGA5d zDuTrfz8F3yQ AIog} z2pD`Pi|NveIZ? zB7}{DnPO(pO8&}Cp}e0X5|WK6Cl@D;_s(qRlfzg4LZ5 @!EA5w}_VzBKVSTDc40}i1lf>3IvM1xY?)P^ZIsNL~^gUf5(ALM|a zz^jKonoKM{vC>eSAa0Qd*xS!dd>~^uj;Q+#5*rsAl|J8Hk2#C!sB4B0J@M_$W%&sz z3;oFwjyzh#yI?!X%FXBApIr1d?1eFb)hxmzD--r+%EE294Y_o-9-9a{ccGTS2pz zUeUbsx1E==mybNztBpVCampV)U0eCQ?F7{-lj$P%Dyu!VM%M$?%==ZLe{Sx7G8oZk zUSJOg&cXk}x%lW)e9Juq_a^~#EG5zxxwd}DO%!Pi*#1dB+xwC4u(6H8^|v2JquHqx zOl##C-uzfe$U^^5W!ZoFwMgJ!k|W6A!+-U k9_6TK}ARLui>v|h3vt!=K3vQ zW&o5VJ=;N(bMAlEB>wY%>aYZzkQTAt!2jz){$oXLV&LGGFWKud|L 6RU2dwrq8Ek#ILM7?{csI*m z*qN5jsk2i5 36j#iDKx&q)jUpK6o1;@PqR(4 R1Rceae97$0F#3hPp%c)pk|AmLjsYWFQs1U^(GYndds$Ap2L %tJ^jpSvoZatXmyJ_6?xrGoH8 zw&(?R(3go4jW1xBhIiM<9G5&MJOU)}&jZ{?wfGXyR4+EJ2(QQT!oA!9|CetH={KUl z)A?Epm_JDz*2@fNM7&Yu?aNfGMm;r`_&5O|;A9)RG@qmZ#h^a*4F0?*!;aI6^W)}| zz?6r>HMRzNT!b(@K1swkOu1=mk9PvOUz4gjT{xVcxS{oF!f&1*Y;;Q08-<_m53;mc z^S=X#m&88E)slh0QY4+ $$jJAvC(C(3Up>AUT==3 z@$9%IzKn~{771BbwJo~^5W%g!5&WVIdWX9S%0|bBx=auc`TBOG-2RsOu??lsY+CD+ z|0Tf&5c6=1Qs^mGhoIkbTF`(ZY9+}xXAxk{CB5SZ%Pra*OzL(ZG*A$yRVxd-{9Dux z^xRr~>Yf_nu6j@5@4cUSLkK9Vl*_b5fezTx?yLrk0b~hzBal7=jX_Q&lYCfshhNDo zn>wcmYKang&-^km?<*G@ygs^WKQY0z^HB&qqMyI!18F+RNy|kYP$96X-@#5h=8H!w zet*MENBmQQ+ {rLA%vW#pz_8GANQD4%Eio90|>*&Oi_w7fY)sZsjQV+;W=# zLUcO6`km$= ~A zI&GVwOw{}U5O5}I*`hYqKmw5MI@5T>qQdKODbGhwFU_v~uP>`RhzAZEq0OxUyvBHE z_Sm50`EEyV18JOrt;OX`@f~+7kh{+(v>)he)>$xu3C};|`0p}aCNBZqoY`aL%Xz6^ zc9S~oovo1|zdNiRtr^OST6a@RtM4B2bZUb m^ZZ2$Tm;S>O zF5;D!^3F)gr&FVD?Rn>28XhMP>#}oaPvAU^VbD;_A#CF$`KDZ~+nqz>r_p*8D}-2W zFkP%c|3WQvzd50c-kC=8YMs>C4_eryRoVilf4tauxux;E647?e4MhwpB@T#G2mC`` zn*d}-YOi^BkO~C(DOKBregnY={cjM4%a1T@hCSl{eq2bF)r!;=_6sW{5nlJq%0tIR zVaA-ime%iJS1#0+U{OG%WI&{Sk^O+DToTN90kpWD?AxL!-<1la?a_qGy>`%i1gfK; zwn-P43*xSCj=N*JmiLE$Rut9o99pprTJ{7=YR%_!E8i=RN>3G(r(0j#vLu-PIX7W5 z9sb~Yxf|`OR#7@zsH4^Nb&ui&E 5<3^Q~Go1 <2d=BR=u7Z*x} zp1NHi>q!U%R?@xASKtNQ+Duk=E|TebVOsT)Q+YqP s7v zsNnT H8+vp^FdUuk8b%t>FFhor#3kjYs2`R>t^P zya4S(^nxvrMicy;Bp7LY eMYHL-l*6D)B#FZ_P^~|(UaU;l z2pwX*FU0aO9JGk2c5BQZB(*0Fe2oyA;dwhwZ!Ca8M#z2%-n$L-FeK9M UyCdq-3xHRaS=i&-;Il8)FPk<^vDF%}9;2jJ0`k^Vofmc6>hkA-7}4$F^un|O z73guf6N=p32f%9m_@Z^A5)LEa(tP)A@8PFh#!qdQYReP@9q~Kha5;*kL!`Z5y70nF zKd!z}>y3AU24*QT(DG4!*PQ&zIp`_l3D$_vbgsiOoiz3^IIy${C?5t&G$zA^_*~CL z5Ir>HiTE#V;)zT@82-%BWvRAW?dSwdv#Nh*)>^NeZBXZ0H#@z!85inqSvd@ES**8l z-hOZ$ei1uV8UHT1VzrpUO?u~CR%i2!CV+nCN2%0@tO-h0s8Rq|b7$0x9C83bg-*2W zn&{c~^$%uaZr9dysn+O 9BW;4%E;SLf4A|#NC#tGhE?!|T5r>pKshz}Gwu>4MB zl`$PoEkq9eQIa-i6>#~GE3qLq@l(dqn!-RsT WE3 z61ij@KE{8r0D?X 4*?fX(-cEm74|C2|tLA;veF3utc2n`E6<0lf z1==VtmFE$VrC4#}P{akTZfLR liKxt8hM7?s*DF}9+AL6rim`a8mm8&BOUh( z6Mc^4nl)xshIfiv8ZnCs;y#}wLomy`C_f<3?!H;3wVW-P;5De=(_baIB6sEj;)~UA zidRqsVMGAZltiG^mB%SOh>zg=Mif#=yaS&UW<>*VdZ)q)l=5Y6B*hWBNZqEfK_1K! z;FbfTWJ{tZf#TDjamqHa-(rF2r?7pxZYXWR`Ms?kUy(>c*^=?aHYfF8Y>{7g7MLU4 zCLTd>zC`BT!*n*OALwchU`LuEuhK>2FYJ9Zg3Kyh#vwbQm0O{MqA-vA=+At+3}#Gx)QDYh_A 9%)91^zZTE^VpcI3u^?j5+ zofr>I3r2$2nj0tA+$|^l7`QJ3)skA?_3E?o>jG_SRfywX-4Jmq!98uBx~>-|bCpU@ zs(Y(hwT@~}ZdbWR{c7n7FJ-S~&wF)zyMGyD9!bG>f>= nC(3P!Bdaw4JTS`A zWMPJ}%IQdRFF)qhe(w(-LT`C}Q?X0HQI8b(4M)dec{o=&B^{&epb+4D#{4ympDN!( zKLD#Cp+EGET4*C);#|?KABXF?@jNl;3q4z;gyDJflC<;zufS3uS`Pd