From af446e60d03867ff7b01a15f1695e398397b326b Mon Sep 17 00:00:00 2001 From: Andrew Mikofalvy <5668128+amikofalvy@users.noreply.github.com> Date: Thu, 20 Aug 2026 20:29:51 +0000 Subject: [PATCH] docs(visimer): re-record README hero with a visible cursor (PRD-8185) (#3706) The README hero is the first thing a visitor sees, and its own alt text says a node label is double-clicked and retyped. The recording painted no pointer, so that double-click was invisible: the label just changed, with nothing on screen explaining why. That undercut the differentiator. Visimer's claim is direct manipulation of the rendered diagram, where every other Mermaid editor makes you edit text. A hero with no cursor is indistinguishable from a source-pane screencast, so the clip could not carry the one thing that makes Visimer different. Not a stale asset. It postdates HeroLoopPage. It was recorded from /playground, which renders real Mermaid but paints no pointer; /hero-loop paints one but is a different surface with different chrome and a simpler diagram. The two capabilities had never been combined. Re-recorded from /playground with Playwright driving real input: a real double-click, real keystrokes, a real commit, and a real click on bare canvas to deselect. Everything in frame is the app, including its own caret and its own source-sync highlight. Only the pointer is painted, because the app paints none. At identical 2400x1350 the asset goes from 245,184 to 96,334 bytes while going from 11 sparse keyframes to 204 at 30fps. Adds the recorder that produced it. A binary asset with no reproduction path is arguably how the hero ended up cursor-less in the first place, so the script ships alongside it. Playwright and img2webp stay out of the manifests on purpose: this runs about twice a year, and neither belongs in every contributor's install. The script header carries the two setup lines. The pointer is copied in from openstylus openstyles/scene/Cursor.tsx, whose DS declares distribution copy-in and does not publish that tree, so copying is the sanctioned path rather than a dependency. GitOrigin-RevId: 0c8aef914c540758f3a41d06c5203d8f1bd39482 --- apps/site/scripts/record-hero.tsx | 166 ++++++++++++++++++++++++++++++ assets/hero-loop.webp | Bin 245184 -> 96334 bytes 2 files changed, 166 insertions(+) create mode 100644 apps/site/scripts/record-hero.tsx diff --git a/apps/site/scripts/record-hero.tsx b/apps/site/scripts/record-hero.tsx new file mode 100644 index 0000000..a495909 --- /dev/null +++ b/apps/site/scripts/record-hero.tsx @@ -0,0 +1,166 @@ +/** + * Records `assets/hero-loop.webp` from the REAL playground. + * + * Why a recorder exists at all: the hero is the first thing a visitor sees, and it has to show a pointer. + * Visimer's claim is direct manipulation of the rendered diagram, so a clip with no cursor is + * indistinguishable from a source-pane screencast — the double-click that renames the node is the product, + * and an invisible double-click proves nothing. The previous asset was recorded without one, and there was + * no script to re-record it. This is that script. + * + * Everything in frame is the real app: real Mermaid dagre layout, a real double-click, real keystrokes, the + * editor's own caret, and the app's own source-sync highlight. The ONLY painted element is the pointer, + * because /playground paints none (/hero-loop does, but it is a different surface with different chrome). + * + * Determinism: the playground animates nothing on its own between inputs, so this owns the frame clock + * rather than sampling wall time. Each frame positions the overlay, fires at most one real input, then + * screenshots — so frame N is reproducible run to run. + * + * PREREQUISITES (deliberately not repo dependencies — this runs about twice a year, and neither belongs in + * every contributor's install): + * 1. playwright pnpm --filter site add -D playwright && pnpm --filter site exec playwright install chromium + * 2. img2webp brew install webp (libwebp; also provides webpmux for inspection) + * + * USAGE: + * pnpm dev:site # serves /playground on :5174 + * pnpm --filter site exec tsx scripts/record-hero.tsx + * # then follow the img2webp line it prints + */ +import { chromium } from 'playwright' +import { mkdirSync, rmSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' + +const URL_BASE = process.env.HERO_URL ?? 'http://localhost:5174' +const OUT = join(tmpdir(), 'visimer-hero-frames') + +/** The diagram the hero renames a node in. Seeded through the playground's own `#code=` hash. */ +const SRC = `flowchart TD + A[Open a PR] --> B{Tests green?} + B -->|yes| C[Ship it] + B -->|no| D[Fix bugs] + D --> A` +const TARGET_LABEL = 'Ship it' +const NEW_LABEL = 'Deploy' + +/** + * The pointer, copied in from openstylus `openstyles/scene/Cursor.tsx` (declared `kind:"asset"` there, and + * that DS declares `distribution: "copy-in"`; its `openstyles/` tree is not in the published package, so + * copy-in is the sanctioned path rather than a dependency). + * + * An OS pointer is a faithful reproduction of fixed system chrome, so these two ink values are the + * reproduced artifact's own bytes — not themeable, not palette. The silhouette is drawn twice, a fattened + * outline pass beneath a fill pass, so the edge survives WebP/GIF quantization over a busy diagram canvas. + * + * HOTSPOTS are in the source's 24-unit box: the arrow's tip is (3,2), the I-beam's centre is (12,12). + * Position by hotspot, never by the SVG's corner, or the visible tip sits several px off the thing it is + * meant to be touching and the shot stops being evidence of anything. + */ +const ARROW_SVG = `` +const IBEAM_SVG = `` + +const ease = (t: number): number => 1 - (1 - t) ** 3 +const lerp = (a: number, b: number, t: number): number => a + (b - a) * t + +const encodeCode = (code: string): string => { + const bytes = new TextEncoder().encode(code) + let bin = '' + for (const b of bytes) bin += String.fromCharCode(b) + return btoa(bin).replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '') +} + +rmSync(OUT, { recursive: true, force: true }) +mkdirSync(OUT, { recursive: true }) + +const browser = await chromium.launch() +// 1200x675 at deviceScaleFactor 2 — a 1200px layout shot at 2x, which is what the published 2400x1350 +// asset is. Rendering into a 2400px viewport instead reflows the layout and shrinks everything. +const page = await browser.newPage({ viewport: { width: 1200, height: 675 }, deviceScaleFactor: 2 }) +await page.goto(`${URL_BASE}/playground#code=${encodeCode(SRC)}`, { waitUntil: 'networkidle' }) +await page.waitForSelector('g.node', { timeout: 15_000 }) +await page.waitForTimeout(1200) + +await page.evaluate( + ({ arrow, ibeam }) => { + const host = document.createElement('div') + host.id = '__hero_cursor' + host.style.cssText = 'position:fixed;left:0;top:0;pointer-events:none;z-index:2147483647;' + host.innerHTML = `
Yr9gK!^-}1`a^z6&%@R_z= z^_reQOh-zMa_?Ba`@cQw1Sv)W6KmNr0^rbmtW8( z;9;2T_Qn=Iw Aweur^H>f1D$#q)H_dIaW~J%( (tHm=|%qzWSo?KJTsHjEcXL; z^5~A)iXQ>1IkQ YQOH6qwae{?+5@eu6WYI3gj4={|cJO11;)aCIg_) zu66tq-mu8YF?67vpt*86J*M~<>`j4>p~Zd&nAr+0K&$u2pD^}dn3}5PNi|RTGw}G5 z8$xL$2d03E;&)&WufGC5ex~>n7 FsOkDmNh}3 zth$@T$%>jmVn(jhIX(Tio4SP{nlxK$<9C-v>x$z_M#sO*1TGMQJZj?bM)(FaDq}Un za9duU9~kH7tOIeDMz*m##F~D2X!hP=+$<2BB|b<4*dzBxPG= b0dFtl}{7 znb8dbP*M*TLkAuy(0M|iX_3DSa2`NSan*@vE8d<(uv5pR$8Rmg(lyhicn3osL$7}{ z3Me&ab$^V{$ky-se(5ux)M_T%lw09qb=+dti9RwHQPy=g^o`wlo5v*k8cm7=$P`m{n@{lo*Kjq@{@K`%!AIhjhv_c&TOz?_fRrxTE%3u9kVzi?epxrz>0& zZxb5eoC3@+UU$#B^Rd^`PLu9iM_n^jWsHX;;}`&b2m}+<(-kRPx89lp)`V~EpvQG{ z7S-i(F`3H&NZc& z7KP9?z*nFgWy!S>-Lh#G_kfKyN8jy3(@t!e}! z-$Xl)#XEMFWE?SZqP~Y;K!gy=C3fjk0m82I-WD;@ri`4+Ai_g-_hC4Br9Q$aRsCT< znchEJHpbsI=66tuuEScQDe%NPFif1L`_C#rN6QZDZ^EwK=bbX{6=u}uFox`Yna}|}Aeu#u|lJ^tu?#!!HT$R$vzM_-S z8ai$P;e+k=%v%uLX)HVTEp`UM6HW4K8#}dpFOX|v+Ey>rv7jkfTkHw26Z2|LWfRB2 zZ1$^P1v;P%nb5_d_K>{dW+~%7;Yh($zyw*hzb=C4c|-Af;Yv`TBE~lCM{zD f$>+4>I&Nks1_ zwyz~#j|iCISb|ga7YD`lGGEPkQLoM5_$VB8Q8{6arj8@1&QhgN%D8hnw<&v}NK%W* zpKPUH)J_a)S;&k{y;X9I`43Th3Tcht;1S^T$qki_gDRdWau7%#@F@3skNS`Y=HbJ= z&n~onSa~tS7-m$)$~$JsLd${&ee(@4g8MX=T`?#C4{3$xWLe-RwBb|g{DmH(9oSEz zwS?ivjEp#Ft!{BRft~ae$jt!7)OCJa{A64E)Oh+7=g Tcs2#u!{qG> Tw|)j!<2X4aCAl*i zz2W6%6R{ a2gh =1ZT$FY}+aN-<*)gT8`oD&%GOVs&E5!Yl}RQPe=(B$Xmh zmfC=AqL|@!CBFczG4tTzq9thUCFFT?zV!wUC#<7>LcS&f$aveKuck{L#m*`@A09O> zl9;&O+78K;@U~QCVqHQx7l`=+eE5sGdW{3Cxfc_h4exjZnQ`esg4z6VwEcCx`Um)H zwvj3eHVi}#0 GsP0RdUbSKm6z~3crZgp2ZhtBpra5UA(4LkkilNiE=Wf;6Z^x=7F*>rf0z( zdLl|K0}+`Ica6F)>LjMn?(T 6qrDJF$aipwVZLzkzd&Qx?;Jll{3);%})BL zkp~?x93?qKjo>NHc>Uto;*sq5y2|Phy7H-Et`L2MfqtDkt5?!I=5%zL;Dx3MTA z{&{SjdZo(5h-^CB>NQk_Ui9Tl_7|64z1P+xPt a(LE0O`?y_XC*$G z?{GHk+ak_Z=BQhJp%bL{;Cf>y)j<#})}0Gh0)F{UnATy2OzYK~nPLJaBb?1vpIM|o z%PRh4jr8m)hF_bXT91sYg3WW(%EI9>*PkK&y71Oj5S&6ZeyE2;^HkRvPIl$aS0NZ& zlT-jZxdCTjt9po4in2IKU#p!|J}La+SB=O(<*Ybitl#S^wOd2pbTy>c7PG?D-F=(# zP;h+E?oqD^e;woqk}{-+;lLAg0nQs9Q?W&fOq%|wq?OANxuks; }J2eKk-2G@ZX zlbW%fFO$NUX! ai5DU^qRW>K zxL#fa_k*da!}CCp#?jl8O@|XE zT5ZmZuTwIp)~*=Dq{*Fu=Il`YPuRHSESmi~s4qz%sSY3TNIYoS9}<#8* aJ;B6UzA1NCUN8D2e&&%OZlAzd6p~Gf440riINP#-RvYeaF&|KS z060I|jGVH`5r)i8v4)H1S%%(ZOUU3LLa9}g$M?K2OI$g#T(cjMf=iJFy$yOZ2jO%4 zJddD0X@Q^4A5v1z9K=&0HNVC0z|jSEm&^+jQXRt^1V?ew^l7d563JO9_+Xf_q*QD- zq%`atgwI)8f5CXtg0K^>qotfVgr`EZit0Mb DsiS`Q zwfZLxN xexn#$SN|di=ZO?m%m8h>9-OioPe*V@8 zf%n)&t4A`r?*sU88BH~Mbn5(0+L5L0*2AMrw!$WeCmq2oLvw~jCaVspSNJMXh+F!& zV-`iUrEKMaQ6EdW&Wmmb={5B9=tGtAC63h5p^T=_64IhY7HpP=+GCF>ZDjr{YkJ^| zD+54%vI1VQ19m_CT?cB5Eh5%MCyMPZyt$OEx(dz#a=#pPCaeXsyV`*+nDj)UdoVxE z7?NdCezQS$pHjFIqVJ)_NpW&H66fSsN{emQBNU=&j~2qMFxiyMQqpm5%V~wxejW Qi y^gj~z7QA~_P*!OL9Zw$5-i1@}AiJ+my>-}AH!W|`e3=JYilECJY~;|q@2Z#_ z^>aq*@mG|-Nh8i40vB&}MLc#zZg2@n4Qf3*N`hNg5d#&ZppOWRe^2l?C7yFe8K`)% z0ySLk$adWWLi#@LaSrjk)#I2v?NMT}za{$#V4bk-KgF`LO+ml{V8-kQrX!U7l8<6x z(Xhy>TWZJeAvrsT11> 27{*?L7^*Nx7**bFVr((yI2!v676^R@w>Rj@L8?(!IOW|G$q z#R@$u&nvgezu^b9y3GX-H&hr;P4G)A-5JD~c|y{!xL`ikDh8Wzw(%dl6)S2w+Yob0 zBN5Z_!xxg3)Gw<1A$AzS;>Om5lXG-au!{x;^+{M-s{?5h$A;sUU(DX*pmmx{ub|VG z`%?_ZI%*Flo(kI0Y~p-2)ffi7_AUqlqU<)Rn$4#D^v*hrOB$x&KiBxKX!q4kmcAxC z9v4s6&{KL+t|a~7OFj@>=q1!|pr*ymcq$Pm(ta5NlL-5g>4-@5+5~so<KRjFVew2$pF =+n9X*_R5% z&?^a# ca)zMtSiE$6g$Vb3fF*&owmd?GUWD+9jK|BHo?$Yx0CA;$m7ZyP zOv!ht^#^>@82h2bPvOggI+c|B#>RQo 2lGnB0aAgL_X1`5g*o0br4e($nd}!9OePMd5~v_)$o;Qe7$N^ zU74Xnen~!pD*=N@k0s*wa+;qTz!7|D%LIGfXo}^C)ofJ=5zmER^sT!+v2I4=wQD_h z{U!8L95AX zu0SRADq;S>t72*v6*gg>{=KCKC9u+>6!ZF(N&jS>fEsQ)Jt}?1HrACGP&ScI?;7|{ z)u;$)eLM9r+RpKwyVkPbpMin{T8dm8juPw>gNH6@D4QZsE6ydvh55(N4cjn;aT{WM zRvpVI`mo3??AH?u(GGpX+o+TTh3kR^1m{I12aFS)hLgXz9{wx=VQpN_26wQ&Xmd=t zx9{;z=B2{_bUP z&*AnE2-id_b*j~7I1GRRN>OKb^0A0AIP)NIv`zX2KdgO;HPwC(0ldER_^NqYEENLv zS%wWVG2a8gz}h2Hf$KMI&qVw RYNRAC>Iteb2W>`fx0w!2O2Dbl z7sgmVy+$YtPb805Dlv~$$drAu!Bg0@Z+wR9(x%2S*bqK~XAF5ZXwSIb+wfVacjaEp zXDSHA#8H)xLTz0Rgn`Fhg~UXSRDP{vn1~Z6gnWNJeaLhqBN#gQUA-161V%gU-X~8T zvQa;9!}Invojf(4(w^oDMI*cE0neO7`T44FeX)pTvQl9IvIiL=p-?y`?p|aqmv?2N z_vsx|?S4|E`0FM%12WoAHm~|(ykox}wCFU12w0O>p&hoZ3N3jC|EcxYfuB&|&+%^d zQCUs>97mg=(4 G@Mz(&{zRB3?=2ROIE)ob?&fbtrCvnoy6oXbi2^rJg) zw#|Oa9)moYElFjv-Ww%#^AlDrn)=V2gy#k>zE&^ )evOOuz<;e_*IZ7hkr`~F>*;${_H7wWd>CsXaS_IAbxU$823$s~x zyDVBYV&ANnR(~NxXAQ&@w+7^9!8s)_od)TeA@e02kT;1u-8<3bKoaCxyf>X*aHGWJ zZ&yD&@NP3)k}ExPpAH b9+YRLlynJcUeO)D<~|HnAyV!j z@1Hm`ePo6*?vIMC9ply%q_9FK%}&!K68=tH&e;6(@+i<(Hv|^> @aDNAR_`Ndy@dr#VVjAy|gvpt1ta1By)$=|wuc|P(>zLFTbiS5AnjFyNxwcKa& zq%F-*)~VaxNxu!b@F~Z{NPKp_K_CBQJ6+e#F6_&tis4+gmKW)KY#wyKrhud1Q*Q7J zFqhxS1 U}jac$3!SC?Lkb&Tw3@FY3h%mGS~Oq#ZDVGJf`$ z47H!P!B$BXH8xO?^Nu3~tAn1V7xL>z-7#V`s(#?D `~ z &9WP%j2S`l#u_pgZsv1y}9oEH9$ZST-aL;m`NO?V#VyX5ajsG>F zZGQ7xF#v@(xiGDlZoLjVsh1Pw9N+i~9;i?yf@uSq`gIjqVM5k?Vu*k{7BgP@UI8e| zQs7H%F|&h8C&jVzK$4SYh^gFOX_@pMd|B)p7TMi`*}C0=JzlOzbm`xw(Uu|T1+*Y( z7i%4g9w+h%u(=RA!J$lqzsA!@8y(%viny3m7Qtv)`4ea^PPS135DtmY?U1gFSE9vS zy-vY#tn#!$(Y JeE;5sB1!X(c^bD8|jK za*%cn#;9IgN>j#b!P;yP(|)#S2S3_sUlczCCaHCs4cr_Z<@2S-R=pKXvK1~#OX%A( z(PCKx@wo2JP8Dk5_%j<7Lg}#3osGEgB{>C)Z0Nwm!juVt(+Xl^kqp~?eu&0-&k+xA zUT@3%1lly8Y(!5^x1`t&-Cu+|IV(>~Z9Y5MgK!>y2K2qv-D5#!g;0;sI~-Z(SCT)s zqX?VL4L@5Q757p6!iL&lyUas9D<|(~Zzqts2--T8+~BZb2PJL?zMST{*Hw|}4_uS- zeL3Q|=mlU9Hd4b*X@XWnP+T?nn40zLTtAH&HiIi*c ~o;$$0wUG7IWr-V@Y6>mk_@Lu8uWd z7UBV)O8b$zoTBbC3R&1x%a+u-!}jfv@P4-tpeP+hQ OhnKQbrss zavv>m{(}wFgWOaHVrImvn;QmRS$Vj)8!5o7+9Hm6XEFLFmXa!QJv9EyJ&@>=a?n+j zVjcC%o6`#u71!%FjFI@;^r{3;=-p}wiTGJl={!HKHyL55j;itv#g28V0d!kFxAsAX zYyrl862y$YZ`u5Ye2vcq0OjWc0Dwc6$TQj-#A8iT0QBN8WEI6+N-0G3#odG4)&Gl< zL6CE={->#wT@X!-pQBprUgDA9+C*1w&;~s*{hTx>rPzE=G1G%Mbwe;`FF$cg&5()R zsh2=qok4Feud#H _Z1 z&Oy# 5Jo~v)`poy9V|7u?i@Ny6>-@SbcCEfQlb)R8%7a$`OF**1WJ!`{ zkBJZ=g;v;wYVLkVsWKPhjZDdSc7)Z!2fb!qW27dSmV-#lYl0_5!vjNf6GvlJ@~WVw z-RFrwCn@>mXRj}I^B5weh%~_^=yDRzyCoW_!wE@nHF|{;=~( c zEuoxY+%ki3D2ouvvfAQh^n^8`ndmn^ookN9GiBbsRM8z?175-DD%wAa@&Bc8Jh6p< ze)g(sPz?=$O+L-nEQNK@^l8Wi1$xjH4nh*7yr}G}TuZqgIvKC}-kCWkBO9t+wyFn` z*51krJ41Uu`u?m60Fq+xHOo?2jqIGmZQq(uTbLGfFVuZqYT75NhJEG>$@+0)kNNy- zRP8glEe$uJYsK;a``l?AGimDrP874c{d5H=zRV&X9ft|-u{liR3CPwCVj^sU1>QT+ z7WAw-98&S(Ix35B#p9ES-jJR8CbvaoP5i=G9zLl|^i{($xhpR#HhN=U=k}ZdPAT8Y z4AyEP^o`LG>vbIHpfjOY^J)T3H6_qT@h1<~!$}L2SLBNkG?&A{8oJUy*i8P7lfASM z1tsZ~$$p9o%n9Eo1ZGOUWJEfcX0sWXRzdwaI+oF)T+)@oPN0X#Tg2qu9Z8o-vlFk^ zj5{Z$TYb_3`5O5={!IcnaaQFD&M}$3i;9ca*TNK=V5j8l3s|WGVCziL(8iCuCM{&= z?9$St!k!lzD^k)DUz$Zi#8=SP+n*28FlGD9WY=a|6!x10% hgaeYLf&>p5kQ+Ig$JB&RSl*8>PY8byg9CqY_~l z9W(>$jcy(nWO2wL50BKCy$7+E;Hux8o`J69`JD3G*EOfkQl+hl{_?Bj^xe$venZE% zO^(;wv6zObfwcUU_p}>@8>6+JAutdjp>X#E{{K9OoDBfbFL%edP0z9=5b_weA7(Gr z$;yZXc#%rz;hsXAL0~a>Id3&jv(siw4{R81*>OaeNI2TIn!)ze4foe4xEZ0*2T$u7 zZ(+AAZ#k6;zC5E9l(14-;uoinDCh$Ie?k`?rD{qEEj>BmVrC;rQfrwnst+!PUB?aM z5@W(f$dnM&wS%q~v4u-f#1te8ztdPx;++3CTtj3y?^C&u4Vr56tn~1eo?4+;v&6TU z(6uP2)!Qli){5#T;P@*mpmcv4Y!)@)cfcrAcLj2MP52X1u11&`TOSlk FT!q@isL1&OH6jSJSl5A}V#@Q4{O-kRf;UOCJkv(PXc5pX?tW5C2~8a3iee?}<%U z?sk~+H_(%FuToLl#ntmamAy?%@BP{X=A(tSmB;Z!NegcAgzNX6N{TGFbI_ao71Vd6 zpt@^$YEU+Rh)1i&Nb6t36F2%LcNTcoWgzshr;D_^@IHMsy%?<6)S%TYk4Y2ev;2|S z`NoZfFp%+%f4r#vUZ0@_0EhpN)DymM>b^3v_}_{^=S%(7!3muNdsdBb%FgDx(7x6d z!}Ot;9}Q>VM W?--aX zt3W-tg8Kelx?Ufp>R$U}nU}?9FJ3kz^bg^7 OUUAC^svbwM)m zuQa)rq+mxJw}iZxobE)(kAL=cN5?I%h?5o1jeDVbdN<4T!*96|D&qsd88Z@ATS2{e zBN=(2a!&*}v~D&o7Y)^&5Hu`<5WgG3yG*AO__{6cU;fOGlZqtLEG>&oo3?QR7wTSJ z8b1h!pkhj3Ivw*lA=~8C)L`SOoCW#X)3M^G9Lb+Q9TGpH;|OXe8eYp9rJ|oNNIw_` zx31b6Gz69}#3_oWHQHHB*mT*JAZ`P0EN^vTI?tyuT`wEOC>an>n@(ZdkW77oltqWu zXW(R~E>$BR TStqAcbVU_9JMs;njPg1UhoiKgcE^6^b!@k&-W>=; z)^gzBUE>Ph6@V4&6hroF4#0V#N?f1eV6%RJGTIkrE`%I}VLV>h1(%Pa1Bf|%x9!5f zQn-aNen`VK$sR0!USRvwa|M-<65mZkuWz|Wd>o;&aqTFGp7S^FqVx|XE9Cq?WM=ie zp%jpgMfjTh5Q%%_k7pP+YnxQz_~b#yTdvl4=Wtd25A9`x06;-XFZuD8#J!P@R6UH` zdR^8GatU-r<;Txs%q-IpuW{vhuyDSg2vwu&v+>|UnIZ+$gUXGLS#mZ{V8i?xs!Dr} zEimmBn|!Q2WOoT?j&iVJ+`s8%E-?D#&l=@6agczZuqletwwzFQG5g^-!5rwb;6Cmh z?9Ty*EUTpHzGg|ql+TnFp<77VBq=HY&`oRIEd?>Of|mAi=7_%b3S7B*a!{p;FpKow z+nI@)=9+wL1&BAgQe*)iGVFh~!+x(%R?IMSq{%TF+vwIF{M$Kk{A>9s&9!Zb3=L>u zsa#D?v!Opdm){&=9t&RKh`lv{Sl7zpq&n@}AZ`-fzT#Z+`pB=S3Q=Z6P*_NpgiJT^ z1#IQ7HD?euqFg6M49GmCA$3UA>LY_ylWuJhnB!ZX;_cfPJDVn_SbsYmn%?|*>Pq){ zgT=g@)Ln4@Hb0JIFkmzfx0BoN=2)4y)_(ENCN|8yNmgk3n}q!D5!dykbgsFtbZ;Ag zh>|aUa;TiNFmnZC#3!_fJ9_j^J)9f&`T-ekQGWO%-!OV^KV)LDFQ*%wIq{5iS&fn4 z{tFjtw`N_yK?k!T_YQn<8^d}?;vy>AHAccV36ZsqL}W_jhj{<+Kh}e1d{3M!=B(8b zNeBd{9P}M{X%2)7@{d(>n3wZ5A^`oAC^k0y>@s@M{V)+z?oAYs^cap3;OvYzP(lad z(Y9CYrG(+)uZOVoEcxL8pRy;@>c H-P;_g@?RTh8|H&{4)0fMKcIlFNnb%sicnWw5-;h%H^&p+6eFMS*23JE^SJ(Q+&K zh<+7=3{x~+r0_9T#Oi2ZeK4K?j}m5b@WswDsI+pu5&4bRmUDhleMKp%Slei4WQIGC zj;}Gns~!o (N?&I?@n{V3UZ6h;PN6fR>yQk&FE3G l2^8FWR)zYtJrSa7EgDY&QVl!g9S}kNk}FFpBDWIMzs8 zR=WS?BV$)mcftICiSzG=0*({`(SzzJAhaHs;T2MU#pUjGi8Tp3(f6kB!58)G=)JN8 zrq~6j=Um}N!Bq1F(n@n#TKjXVm{UB|vtW9;=goK@n_HLJXbZq@x`Xs{DQo1jLeqDT zZWWVdexoTl;m4e8+c=-J34~lq`pI65Wq1gxM7Bek-pO9f2Cy6(7f;8_(tI*Lhn~Aw z29&OxSS;3LjK6#8H#LMIp`yS(nl%Q dG2QRnG|&~PH4eJ+!cAG5Rn%RD zv5%b2XS_axx?dS{vhn;`JnIqcrf7%FH8x$HSO*pIfnHoTQjNm)pi`T**Zkp5R47S~ zhbeBXi{LC%;q`txYu{)oLr_ex07=2DZeP4>MBxBOqHyC#UHIf0457bwC|1;@lH|n& zXUe7fVjKB(D%Vk26XqmFF&hO*T4zXp6Jlx7xM^dfwB89FCEC&15$o@2*u7U6D$U zIO+?+Rsr#zfZ72aItH5+XcRz!@2QAeb4&IL<3| $s;h~+>>@Fm^u+c&I4nhCyqZ`v z#t9CFdQ9E&TCyqxc$C9P^dd3muw<#%tVfa(z^{e&(p1pW1Tm}Bb;|h=JPDjBIOO!e zE0ObPCPyn;e}MTaCa6XhTaG5g12%+^8Ypp+iA-MILJYL=;lwMwmFo05u3t7`!B3nB zpg4tmy=A!B szT93lGu=9281u1!kTqBQM@Y)3LXQ%Dlt^VCx W|)E?-qEHj!0 zEK&CM2JGy%luvR)JNW&nPvECm`8 d!kJ$dgJ&8jih=la`pFT1SqW6m8va#(qcW6T0PBl2VF!!Y-b!c{%ogQ6za_w3 z?-=EQK!LBDc{RGF^?t)<9Y{9QA|$!E#DFefy==MsN{`xm3u==+Y-<=8&1E*ifmKT$ zNCnKEl6s?$46iaum5uq9Woakf%mW^8-dR+5eAy>k%O1vz@iQ1iD}^XQHu%QQQC7!C z`w2tkj4G`7ucs)#_9Vk&P{Ofgn*e6bLF{(31^mN(b++C&V}X`pyGFZ1Z1ntxYiD)X z)I*;y&E}i#{0GBarLJMc{jHZh2-`nT)OXPo7QGT6?}z U&(Y* zfU7_!;Ao2RVZECSl*&pq_a(zgI#xHciEkA49hq~nq@$EP6285*!IrRoM}dikNsXru z9d>10F4Ij1<9*izAmR2-3F<=r1(lj+i5bm=VMq{<9}Mkqz=qL@Eg+J|38QQ^u@nue z1z`9#FCLD!l)j4VYAoyhme)sle{YfarT?HlWrh%;u+#OQUd#V|-HR>&TFjds0ftB2 zq@yM}H;KWmMmX!e<93E4@SxhIa+j!o)#*p-hy ;cfM!w%r+`V-vXo<#Dk1%* zw<74>pA}BoloxlN2Hd~BwGZTN#2-iQdfk?G!@poRszJrbRk{P~fF*BO)@HB!O&2O^ zL9A56)s&Tbr33jU=J`p|rE5f+#F?r<@h9-%hm}dLTBC7h6k-`!1d}_4>d1B{* %0M71^{Ac6-N}dAZ#$#}Ct@LN4tiMehy*J*B#_Cx8*15N}mo4sO6N z7HHgSQ!rV1Ih0%Sn4#<6?5Qz$Cr8cYx4 `8@+Z4XSF|S?g>ys@HgPS#ERMO{k z#>pm_IVZ`709DAE!y-1u $7j*JFj9|jRWf^Y5x{rBzjNc zU6h$xH!^)83wxN$y2UloFwHCwcWu^fk*=`_^CIrr2_@q_YE@%-Od*K`MoMI#t@FG= zvj(1av{#6;qIB6zEK{zjfFdy*s@B1&j}p%x)9o~8Cs@WK2&iWS2&lEIAfX~~w#~RS z5N5>$rE8r5)RPL!C&~&K+~gO-0j{4gg<)AB`?2Pi!4kJpD}qbA=FVDYg#Uhuu*pd8 zcWRR!h(4%1QOd~CsZcgfUtVY}$Oc%`G$vC+2pyb^ukP)G)O~RiEvb_=d6;w{vPT z10-Sr-+Crpo$zJPn+&nIKNoKQlwNYWDJi-Txz rWAjxCp zcOx;U=&8jaWWcSc`hd!f&6dS+xqUov@Q6?v%S;eD9Yhq17wxwiDgge5ChXvjC}W}U z`HDG70H$3~phqtN05XvsT^5`2@5r^k z4fU$u$h}gqEpT3K<=hWe#FZt}bgu-I>P;EbcX1V27yz8>M5Q%R`vog)q;KbOW_(ES zMr(E@gEOdnjOT3 SiovPPv*fiw-9rS% 8FOGI}E~5a?iQg=jY%~oefw*YG|@6UleYn zqUKm+(Oz!v;EnS5Rbr;^Q96cxNv>aqwIIu>hMD%0Ojd`1Lgtbnnx?Yr3ZuFPhjV0} z`%e9x!v5tSGh~e0mwcRkXeifGbh^qJl-i~k7o0*VLY-`z B#`M36@uQf;s5J49^vjhe|G;AYhXD8so#5>Ip+oBV z%Jcl^-f)FGItQV7u%herW5!r=-tdfE!Vn`)W~@_gmI9zOXg5fI2r8d9{$-h#5C!uq z)XgGELY;{yR(d|}CakiVcX4nCup485Zvj#!`fUmCs7 z77nYiG(s{C5R))1Ia2+(lC#uexm7i!KN Ng2;eC*bVCn!o!)L8o81-?PY%2@y{Uc*1Z=!IEQlD-r5 6#aM^bR2Uc_M>(ny#?qOf!~D*kvIy3o |^RQG6d(egPO=}0}S_EXdCM_U;rQ?hq33tLPELsBrDpy;l^#u3=fMD1_ zXH`GQK5zK{MCmwmNR*x)WQk)q*%cTItEhVaiLHo>Tm;g&15J?@rlqK($N);=jOmd0 zdH{i27Jz0Wu@J0<0!|kUlEj+lUh!S65uS(+ECEGA g&Qo$wrAYDSYR;T zT}^Xb0lO`ik<;OuL0M!@LU9q&`L+6)B4&n4z}I1tj3W${AI6=J{o@>(%jvHP{D1)X zDbFy??49@j6)63sU`3c>cGq!Xk?neGqPkcog}ZUJ9(fA#jA~CGF9Mll5H!!Dx-X;n zl0?o+wh&>U#ya#+h`BY?{LNb^$({F@uY0@GvKs@P JW Yky%a&X^MNKi-)U4uPjdt^CjHR4U$5`mjomZBzY401@eCg9db z^#!%W{mc&ksI`w~C;x4Qw_5NM=<7U93`}jkINs}hAN6{e3hK<8Qk)>kvk2M!4Gu7O z0xLtn(SGMPeozQ=YR%K$S_CO|1w@qNYupEGrIS6`75vdB a8^oS(*>u6dwQ(^uJ{` z|1RIi0ah{vtO*6$oZ zDjG+8d<@WoXTXAdQYXV?^^cB5_yJG(An|--l~h6ppY|w5*J{LDk;%# z(Uw{Js&8NPYY7heokT>9fxI-VqkN7wb?W~1ozStZU*9C_8Lcf)Vcsj7`E{yQS@d`& z#}jRE)r=`pu1e5Gp34dpxi*)l@zhM|HesRl-p-BW{|^OYm@pi|Glb)FrF``EKbo(` zN57i?Ozi!qebvj|0Mz&g;X}uMv0bLj;$`gD>d$mAuS)+q)7Vl6Dm*jDB$d@J{Zved zk)bwg>p9bv?KepZ7%T2jVW)&+W%G$fKZj7Z(>|+#(Lm2&&De+syc9hbc7t K@oaDqw9|V4Me9sQqE2qEO238HEpy{^kQ}jl^a<8_qc=9Nwg~; zNrx{(rE1m=d-l#rT#}DRmdqk=lu P zxV&^=GujV+u?xb07v;lwVK}R*b7rzfDYutRzg%1SuOPO0yi6-2)MB+nck`)ezGkP7 zfLy_{K}^;Ph%*E@8O)pcGp2;)wMpK{)Bw2ew3ITIBZwsex>@Klxb6-p*hp;hP?5TA z3&=-bQh3M95a*Hr=#>y*)C*pUx
2JjK1b{aZqf1PXDfx*OvD+W;sVTQR3-K zp75{FL^#E15hed_;D4cC2MmFWYUI8}ongf~MG46NQ+15h0BEY2LMMkZ@spzmu-Y7A z3wR?(pCm)s;kOT?UHeBLAj1im?I#X~W{6z9QNe6uLq6Ru>ioxm*amOg#F9@79IAxh zX>R!q-WCxIOxMNGXu*Ij&+78{>&s%pAR70i1-_O4UegF65;e43jc6b&PAX6q%=+Be zNxCxC>+x7wO2oq)Y@*l(BVd*Gif24zttJ2^mE&Yzi?oj`yr{UTG{i12#y 2phYZ`_5LyazvO_{qXD Vu~>FX8OR2%ka7augG`Rv&B#4{VmMX&=@Kr z{~>@s8cp(#?L74272qMFML|GqQH6>|n}>yTvk>%V(KM)?RSk)HBHC *? z9PRHD5c=Bx$|0h99*>e~@I#j7`kSotFJqzWYG;-z)hcE e +T z#(1ADWSEg;MopT=0U1YCZ4akK(Mr*r4%aQO#J)J&004rqH)o}QjsY*0Kn(8VKek10 zd_!2LX`9j(QQlgvs?3~=m`yc7nFTdeU3FvbM@#e^IN4ory$?LcUw^$HrmNb}`TtmZ z3!pf=WovkF3GNbt1Pz*?!7W(OU?I2%cL+{!cXtc!8r+@W?(Xh7^AF@buiXEfy7zu{ zDXIo2o(E=iuio8j_wEOoplp=!?+x5%cs}SpWm$0D!efhcDfwF~1{T$=+>Bl^v%8B) zv_6M|WbC6X0h|_*-xN1L!P{Q 3&l&SL*N^w@QYQt6T zGx*%O3vGggdDBoh!o&?~opNEPPt#un{F;ho&c+)yEd@Xgm1}rdubY!K{k?NftYkiG z|02R@FiPe4tMkuxClwtdtVy&ILG+RTHl%|io7D*b9^ro!qG}&uu`?5zSotw?;W`nI zi5VDdbrx3t!Ruwsaiam!=*clh9b1Xs#v-T{*N+XDI^(%~6hf>H@@{rv=dy$>8gIy0 zhYO^0WOkxbYhqE0P*t>JV}|WgDAPC}+4au!vlZe>5XPA@=ri-E6q|3%>H6&lR$)JC z|CG^KDN~`OokQj*)GyCJX2)f|r^HP1HvqRT!{_+)NBSb*w!=pV1hK2fdlpzh+YjnGOI>U)~*n)URt(K4qxH%yk %ZrVmaN_F@S8HgNL(3t z27k;q-{U!t&WcZ37q)28H%m$<01ejjM*e^v-fN=afrar!5_s|Y(&ufLe4IGO7Sd&6 zx9uw ~8)%Hz>U zWP|2rDO g|tY>Rd5t9=IP%Sh^qL?qZ@89OxJCd4kbyEkNOv7 ++AlN`mRDipbkfrB|9>Hj7@238ANa&s?cBwxV8 zkrpLfX3)0&QWj0}w(gQqckG{m!McK>^CP{|ZxPp0C*mL#d)(pv2;VP0sI;FGQy34m zGR21RvKz@~Q0Xg-{}e |CZT=FMOG>+i6}uB?f%f`p#wVd0-OZm(deUkDd3=K%wnx!@n~b#1pHH^ll2x2u z$9dnK!*;3dr1wvmN%TutYX_AR3VX_YxaK@YhwOQyTlTBsh%ac`+s!@jdU}Cl#IUVc zqQES)zPv46ovTO}CLO8RtAwUA_qYrp#1$I!pXC7q#JpU5aGmAxyXne_J~+V)(+a~l zB%*VFpvo{w`->K}MaH#%1LvT_QKB{h%IwDE?Q!A#?~{f#e_u9yq`ppbvqg4$s^n>^ zP7rD3J0nWAI!tILbZ%o`^vIFhiNP8SJTFf-zdNy_e=kow|M?8#Ki8#y3LClrz^9Mv z6$Pax?l`*RD>cAtW;8JntnIFU Q~kb)+e;4m@SM=8 z!xX_9rgaJL+$(3>vGpa;G@yUPU>uxxp&FQf5zMDFF!=frf9xyzO2sjKQ|=-J3L}zM zAYEkCg72{F_s7-{wU>m$tpEVe|Ddnh0^G55K<`zC@!F2!S63Q2PlYYy>e5pKCt4q4 z+stt1^1qq^uB%yMKUrEWK-d*U4LPG|c{jSwcy~tYylj~{bE#L9aGE(0M%i@vqlf$A z9AdAe)qv@PWcp8g)n@iYf1I)$P2}t{kW&^#v%(R>fvj4^f0(iHzZF3L&>Eh0-EVqI zcC+kz?s>B0m#k?2<0uU_g7@NuFAgMtfbkFbdymRG1vp;>Joy=R3`2*bp#=R;)c$B- z!j7Wju*cF<;$CMJWSbWRsx91X3QfI`URDp#=x t7QI#afE0EJZf5w;J)K$r z2slRngA&*Q{ls`)Sg3IK7>=4jn2{SEGisZt-X&tD5IDzrAIX`nR|w+-WHzX$Qgk=J zFn+1OZH05YoN9)YREB~ XH|ECs! z2c_y>Y`h}jb?|)XQCdlOQc&MpRb`sljF-oTC#C11UE&HaOz_n6LK4S|ABUH!qiu1W zs`lOOwL0a= T8?$|+T8zN8qIR4=JP?Jz59&9%)YtViuY&w- L~W}sHw-VHPf!bO!e(X+6+bT zH*!BLZD0 SD zdZ1`U&%tDI %-vT`FEAn|7|n*KlO!lu%?X{?u?~)uG*AV z0}U}09ApVNf?H&^V35D7={F8*6RzxZr1)3>5cnx+RA5aZ3x3v8PHW;vxRd`9DxSNY znyOETDjI3P@!$`g@nemt{fYE<^xVzg-A~}F{;L-G-{gGFB!m&Vw 7ieRmeH5G{h1k&FBTO|4xug2S8`H@TJY=V(^F^s0#GG4q(^xOds-i4@b$$L?eR4 zWt?`*Vc>M?CyT33#y=g8Gg HOzVcq`$ry^sBc3e&lx3Fgsme=M5}qR x?jLBV>~q2P9kJnQy*^fGcCB(m4Ui+x8K zH8#wYYGMddfsgjPE<>uNOuhD16th)7_s^xXT?!FAC>fAR4rqrD1wSJAiurv@AT>L6 z=P1yp>pCh^U#|ZN8~FAxF?2H74u0`hV|QZlK0Jb%*lSY+4~9s8k=-9|C+$)*3zHHJ z_uqD6YDQ9n-Q@TmzMd9yu4BO}N*=doe4&PSDV#gwe2*wuFtah~fHk4r1Z5?^bk%%y zoLNq&lnyT+2yY?O?-T*gZtGNYg+;(ipnh>AP^|p6Os6nbS;Fs9N8uNmft#nlU(B&E z2f`MW{@5P+g17KS&sY+`laqu^SULZ-ts$q&jLL%f&u}wr`JdOw8BSh4cnqc%!`(!4 z8e>crLxIU4)9MB4DxVkD(5Vt}2}wc;_8sj9Ja0#isJ^YqJzk#gLOQLl0?O?i6y3b2 z3t(yvLw;f+1w;mp$q#$0H29Nt*?ma~|Dal-v9Bx+vSxGeNl{`7&-TPy(h@$Ur=$_dgi=K&qiKj;bP$9v*9~B zTr^~j{mvEQ7W4&Ez;pyfK}aMD3!TNxS@fq5c_$@RkWtFfy-uoP7|xrHBh}(}ESz5z zZ(Pq(Y1dclcnf9c=`{)Jw?xGt1J(mdVs7+u?-mBGhT&)Vl2c2QepwJ1pQZs_uq}eA zHHw?}O>v7~y!VYwHquU(KPKZ@l)1cde1s#Zc`Rq=YS}{Go-BKnP>*OAZ*xPyU^*i{ z^LnjKDu0DTR@0288zjW!l(ln|9P|+Z!OB4OTjce$dP&Z4+U744bx(z>hxhAxYKiy8 z%9@j{t!~hrHv1=TsEd Vbn)Me_rYVeGQh`;8vcHKB`$oVcT{mYNN_=zx71JA z442V*MZPew(qTw{SOkm0EAbKeCW20=0gd>gPxC=xAQwkf@`(0A-%`S%h1ZR2%cK@Z zqi~) Ow)v)l*1cm7T8E}H=LhTDd=JS9-EcYZAdNv^xEKDPx4wUQ#nQ)< zd qv67SkPS!k(Uf79EcXx(f zY|f`BxCMiL>fCQ(PL#NuOEpd5j3scWKL2|3>bTW{tA4igqI#j@BJm|#QD))$b!cx5 ze-jsrGBSz<*ZCQq2a3KbL{=ZV^>B)%K=Ig}@j0^dmaajXSM$dI1|G~$Vy7@slvniR zARcGO>!i<3?k^Iv!+^Lo+tjPfb(dVqpF}&ER0j?T0)^)F$C*3jU6N 6$LdO$)uY-sQX5iJ86KGs zv^nP+*P;j0Oic8RGO&~o3onb4n<$S~QU^wM1OS3}O$BaXT2A?Pb!QdR_ct%whl zHnL#wsTIx_ApayM9jDe0@w@fDM+>{Rz}4U^tLG=5Z3W7CNlZ9**&sy|Q_*VHc*~UE zH8_^*DI328O%hKY)U7v;X32C+aOG%FLAZpL#dDp&JVI&mV%hWVH{1wy;0u3_RuE5x z3Q(&})Nvw}?DFxvC;A3kVf8ZTB}0+Lu}6--9KoY!xi>i|ohVb7UNxy$4#F&+RMA4( zhd>98V=KlyY4Z^-Hra6X8b~ w+vcR)RukobtRs0 z 7kV3CyImF{22 %IW%60 sN~ltIC@T>N%>rU(&%5A-$Tg8 zpXsQnPGfVjyo<+o%TZ*?@~s!KhC3_VCu8iuFqlk*C>+@Kim!u&6zVR8SmJzb_~YU! z_DTK6`3cS@D_lkr^nZ>w;6>O#{CC~lzw?<90F-_a6QXF_zdgkcuTblIL|aSxQ(x#s z#-ArbGdSvPuaklj9-|O`bu#~R(-Evj%dY@n=JAnksC3}(3leVI=j1YDF3Ij6M+URh zvt0s^4fqv1*0#=U8U-)OBLukKTZ0cNz`W3AAv~x=-I9pC@1o-hGA`UnyB#FnCTjEn zl-)*l)y3FEKP2sb(kcGogbnF?2hVW0C23-Whtzvl&ps!^xWMhOWVkKSeJ{Rw?-zPM z_^|tV*@(Nv@^slTErpiwkSgxz6&VBuUAIqfc^G}+y{&7>&nc<)2AjH;onKu@5l}ge z^i^n0nrbRg=9T%&?^{LZJVO=T{jO&&DNhQam;x&C7V-Dyk|W*3Wbe4$gy!!!$80B0 zw|EDy_i3&6ip--9zt3X1M(iYivinA)SwVoW;NScGvnWK@yP^leWcA@hy>k`%_82JP zOTzR6a$0P?)bHxEwqfr?71kg^UH_ZE4>_qFY#w}RCN0iKPVM@NkM!`7$cWPzeEuk^ z;CVFBHq8IBiNT<<@qZ~9cxU{ZDd*+2zx9W5_2 E|1Ie>~jR;=iy&!tIqfj z!&Phn$Is{KoNk^s4=~1lH(JO(zciqb9t`eZVCNi=2#F1TEv8mGDi9wdL$V(X>|nb* zL)4=V__zV!f*y{m*|1NK#+r{&r+t0mVUp?L;H&9jpLD$94J)sLjEoW-y39?oeeh*{ zTTdFBSX8&omcph%xz&I++pT-^efuF!pphxN@rAJ-b5>iB4<+qDC#7cnxj?H_s|mxG zDV#^*G20w|A@s7OQyy*Z{5ev8Ip;hnsIk-ro!rjLly7LvR%1p1_K-we2$g0F0UPd(!YV2s@WpiB>mtd-k}zO353EIPocfZY{bmo-!J!W?M+ z#vXLW$EWg3sGK=0-C}nlq^oat3rC-5*ou6P?JhOWeSg>&n}A$?#u69iwau&5gJvZ* zQm!z)JCu+e&z`8tl<0nGvBcXqQNv!D6s%b^TdLfc`yph6q|xJ =BsGHq5&FO2fC9-GqELO`|_t=77csa@6ZZ zTvmzSVLZ^H8?s2Sc-d!MoF#N#qqDN<^*|qPqi|QeW%XcgSi7WAIF`(0DM>Ekm;?Gv z&&63 ju+@UlsF0hN zNriIF`p(s|(;+atdK_6{kG^}#-{v(iRpI5rZy5nSGM >`iW7xEKfe4A+Ux$NE 0gIyO~=LlQrv6+_FR$ck)s0Dudy@(BJAkd_kRgaQDRp#d(C05br9 z82})C`nja6*c 9KZtL4d6}s=*g}a<^h2g8;)#(m~`rQ0i14WP)-9X&nop1 zAF7TrQMp3(sx>4uJEe_Q=7(i!9snXza1%_~9{qTh&LU)xoDZzNgXW#t7iO L`QMrqZXVDp peUeWGj zdkeQM%C@LF6$QjrWjC+9(O^Z*nOVF#FPN=+`+fACPA{@W%~Zid>e#7M<#95{BuCJv zO2v|UfUOxCuf=^+1AFw*1=DGZKp2AID@IV;qH9sj&OkdFD`UA$Lp!<4SArtRVwaCl zF( -vb=V(UKaNf+eUj}^RAuLH zU+HFt+hY$2O;`RXAs`aXJXFEgcL|bS(a0>3`u1WD)WZIY{=2 zWg6GTA7c%PB(U3pYoerZaowupM-U(M$7%-++$~&>LB&2p62$CKW72npKrX*&dyuWA zZ#DNO{@5^i%|l}40*``f;SYCs)SoQ8 ?m0en8T;5C_SQ4rcS)7JsZv#e zzcq|6uoAJGaQjL+1Kmrg@d&w{oFw(|-2>_!r{KcjyV9% Q={8~jIqSnF zG{lF+lW-)7sx((9X*LlV_`(-pAE|PzR&Vxrco7e=h{Dc@+V8Ad_tt?BZL@Qc=;+i* ztBSr&K4#Sj1XM>r )yq7M5IoS)N&}B*isIJH4A0ZB!QIFi z7BCw 5pY|9%p(LoKH3?lNvoX}O^Z@=)M|) KQ%CA`h2OFT9H&!}b`LFTC7gNibR;$VuGRSmJ$k!f0n`5Z9^Sp$@xALZ)=3 z^$wF0o? &5Zf;bOxua2H9U<>e%F(gaECl z^z@R?V%cgaQ;OA~@{s)tU$H|;1Q$e~b{*O_ya~6s5I5qT&?qG6hV-@1lpZbDd40>F z!(+ZGEfxpb7V>w9<3K}6K&`h$U32~}sM}_3W|yFa?mcPp;hvwCmj$w4(XysC{f=2Y z{LaXa3$bAe8)bQn2S5wrEyNU-*$rsS+|A#7HGqV=cV6(Z^9Y|BM19WA@8lvb+f@?C z+#zKn)MA%PjGe%Bfg+%pcXJtWCv&8De}en TfMJ3@ou^f*=6vt5T8q2{O|`yqb*M z&9{UryiY#!1$?gy_$Qyye)bvuBne3ImLJbP1K=gugBbN1fw}?^c$S8-iEY%NDqE33 zyNKa fH1r _`jv=&$w zK8fB&A_-Vx-524}uY@C4=bHZ$CC$WBKFyrb&5rA_A%-|<$O@I-;fdW`T0>1pi zT4aART+oP6e5m5MMaNwSU*v)hAR9}C(AP|Pe~&lw;>kvl;5#TFKG{h1*+#rcVxDb^ z2~TUIC9>F@_wBTks9n+sz>z74N|2A^1%_h{;!Yx$@ypDG*pAuVh#yT`bXkB0sEfNp zT$Bpbj);}0xbLko@WI}T!@A&q6Zo)}sJ$9`v *BHDM5#yVi!TvJm zt_K|&wCmsI8)s-0IXoVvej6*p-B*T0e`@T@KhK#u;Og6C>V}+}pzoYDHu52s_G-yD zyGfr^V`P=_myCYPtfuy5NWC$LWZjF2c}CYon$$O^Yw$1^CdD@TQRO_gS%UZMv&-#O zSe;Zq_JdU(>d_Z+Ar0a9@U;8l4ua7(0w6hGPg*S( |IV-1V|I)rfNRS;#YFc zXGCdKz;bE(;i}i%XJSex3;l up!T=<}cb*{6G*Lj~_ubmx$9B^%ze+ubr3LZ4@9IVDXez95dR zd`}=FMIH}xSr)y%03#6&Hr=yrYrvLSfC8990+jz@TdKcoYc V|@188=xqz3tH!OSNMK66y*kNi~}vXDRiw*~bvUff})`)aOR?ehA# z=jhUu8^C)L@gK9uS2aigj5n>3kwrN8Qe4*|rE+0zXK~1~d4E}C8R?4#5Rl}Goa=sV z6XNp#06}=dC|;|!!JuMI_j}BZ)W}h~JnQoQhn2lFQ)E#S!_JH7<^`Oe7WVv ( z8=no!frc6mWG^xdZnz&KChZb=SC?`gpt@)jl^u&Li`(fG-!4U$B}`FRQ<33?tXskn zo`S?Q#H`I|c8gwJO}fceT s7eYrzOI=mcPuS9>?CkGiijru48v`IO)ZEa z(|K=LU7~U4Xlji3voC!Qj~lt7ea_(i#dJt6(E&q5XUCgeL30aK?2p~Zsb&2$Gc=OZ zSCaTEU!ycFY7mb&KJ)+PYz5d-MNj}^NPrvw@b0gS>u>ScY@RLB 25=|+&DIKdg>{j@))#vOn@!Cu`h2;3F9X8j z-gKB}&Z#~I@*>Q3wOP{8zPopRL)T>SXfzU;hnUk9&^WaM2e$CT{;DgpE<>o^Kws6k z%U;X+0yTY1AimY>4(nwcrsK1UGxsUFGCunpOqa=um%Y$;^6~J6*K1Pza`^?n1nO&> z8sN&wJ*7+{5S)M2maKKgDz;g$Z?Qys4Y}?S1Mei>(+PeL4m8EjbC<@=bbvuvRBv*S z2~arP8Kva*xI)eCF>7=~2%UD0hTFuOInI d)`}3^LroPjMd#j|0iPo=Ed}&-w}0 zBgysc+Oc#nR>_qCnoB6q_=SM_a2RQTg@lGD!|Tdm19#kx_xwLn$bT3?V92}gf?j>7 zev9q>ww&?$s+X|U@z#Z|<%lfjWzP%u3Hog&Il08eWslkig7QJyau_q#YKc}~9)RL& zNKFfPRT&RHo->y8y;L77Fkc5+Dr#y#32^fALjNZeC>U9rdI>Q}h5yX;Y!A=!H8Z zo-!J%mlK*^dL%!=t%DZKGhf5O_lkbDp$ymwcmwzo#UTwne*WgGtoj&xexkB0DnIHp zDRt>jzLzz~C2DIG95O3dPP$IIU-c_q|J2Er6UFTr*v_?#IFBxnLrqFNw61pc2OBYV z0%Jn_BmlHEzuKp`{`gLg{#=O;UNDOPL7e?F!PcfZ(x7bl)K!XvuX~Tm!#47dAKe}W zRZ*jcQu6&U-srGBT)UP0JiFhdqdY4GbktuMC-C-OqVlDIhhq$EkGv %N zmTXhLllUG(Ta^2&M5cLxE+8>tdK;5jcUL9^^acW0*@j1>ht*f8aRcFhbh~0Ri;#*b zA6H<~B__h+66<2 -I-_UL698vC$K_jw ;FXg>i1DEH+G>fx#(pOM)7^s2*H}UiH z5jiF5dSNeC$UrH1>e$2v#2Ne2$x04C4S&3#zJ3*kb)typCp`#=06;Il?9+#8`3a7> zPuWsC*e+gB00T&X#6N5d&MN;<6g 9 z&=W&l{ SI$V;R*fZhw^5wABUd;0f*_Y&hv_k9+x*A3s zr(c83yqzX#?h +R2HSE7rCZsnF{!BnXQ eBAjZqze#P7@|l`W>Ic6_pD(hQmY|C>X}| z#l0|plS1yX6aLNPw ERB|)*3P+?y)-BRAEy}OgRd+W7q z1Gxc*9nBArSG?VXT|cF ?+nE0J7QWQ$l7F@dkVr7we;!A)@%ON`ucMG;=Ka>s~ z4^JoULwL=uodzQ+=2_ch<_}5I6tTXQeq}0)!NA0t{-IrD=B?EXPOpJ8?vxK$bM&Cu zmmh~iUqwireNjk&U+ku<+FO7r5-g&9(Vm~;e3fyHR%&wabN}=4{Pp@~TpmA-7ZWT` zxb|bg;2r3trY~ygwx4)pSp(IJdGrrU&hDqml9)`!?>Gcr4{V{``p=BEQ4Ri5iBV~} zL;=E`3fz^RIke4yez|+y9%6dicS@KwnH)FEUDQoicbsCc?0z)ME!^~#_A6@^Z!|vq z5cyhVg#}Mm1ZtY6Qdk7;if{AVydS`1^`rNsl!n Mpa79DcMVigQWtdN{pOZe9sHYVf=?Jj z0dyb%oB#mhUrc-TmyL|(#m34GTXfbJoBWj0|{5W0qmpm +g864H}Td>Wjz+$Iu>E%SvO zk0P Gdl)!-JaTg+5C5$d yQysJA&!6->@XMWT9!PjRz zkJ#teq;i8LN-t74Q`~*Cd-x*B(e0kI^4+AiFy}+zx-(DBs827#wifEvtHT1P>PwB| z3aRc=k;`xpL}A`iO(wxbQ~#Ps$%`XHCA-rb+mW@+9qQjm@`JGug#u_p0@%S*Y5zj< z m4)BpIYnt7ml`YPdIXbjR3|GtiC}M{Gq;S0Bk%L_79f4 ziHqA=^cg->%4QD=iRy_u$R^I-{K~nQG7mRXD^DVpz%K&;6Mr(%`TjKBB2-{)F%{MP zA##?NyHI#NRcd>+T7UV_0$4C4HnvU{ukNDs<(HxDm5nbBLbga{*|;3>@7QnQA|K09 zIWrkYT(Dot-s@XtgmY* zZ3n8BP-Yh;Osg9?2n3n;%E?H5VNy*-ckk~iyLz?uId|%{xbse z4fa|R3SYWqc^!5{+?kur#7#ChMg&FhzO>bv7q*qRGuxDMwOgURJW64~s_hfPPh2@# z5#5L#;R>2JVMQo?38UYo`O6aZ1nmr0j@y7E7lmH)-LGa!LoUv2BE#2WJeCb4#<6Ol zVfAYd)@_Q-({MLDH!;?gpJUcPSaQ$P+AvH@t~Zyn5irP)ZsblfEF-N&!w5NheugI} znuNCTD)bh*BBw+jKyrUILrR#?3o_3Y%77p9tg&p906cj7M$HzC8WR*i0}`wO{GG?d ze?twto5G