diff --git a/js/app/components/stream-list/stream-list.tsx b/js/app/components/stream-list/stream-list.tsx index 019eb9b1..6bfe068d 100644 --- a/js/app/components/stream-list/stream-list.tsx +++ b/js/app/components/stream-list/stream-list.tsx @@ -100,7 +100,7 @@ export default function StreamList({ f={1} aspectRatio={16 / 9} width="100%" - src={`${url}/api/playback/${user}/stream.jpg`} + src={`${url}/api/playback/${user}/stream.png`} resizeMode="contain" objectFit="contain" /> diff --git a/js/app/features/bluesky/blueskySlice.tsx b/js/app/features/bluesky/blueskySlice.tsx index 83743a0c..badac686 100644 --- a/js/app/features/bluesky/blueskySlice.tsx +++ b/js/app/features/bluesky/blueskySlice.tsx @@ -1,4 +1,4 @@ -import { Agent, AppBskyFeedPost } from "@atproto/api"; +import { Agent, AppBskyFeedPost, BlobRef } from "@atproto/api"; import { StreamplaceState } from "features/streamplace/streamplaceSlice"; import { openLoginLink } from "features/platform/platformSlice"; import Storage from "storage"; @@ -11,6 +11,7 @@ import { isWeb } from "tamagui"; import { PlaceStreamKey, PlaceStreamLivestream } from "lexicons"; import { BlueskyState } from "./blueskyTypes"; import { LivestreamViewHydrated } from "features/player/playerSlice"; +import { ProfileViewDetailed } from "@atproto/api/src/client/types/app/bsky/actor/defs"; const initialState: BlueskyState = { status: "start", @@ -33,6 +34,27 @@ const initialState: BlueskyState = { newLivestream: null, }; +const uploadThumbnail = async ( + handle: string, + u: URL, + pdsAgent: Agent, + profile: ProfileViewDetailed, +) => { + // download the thumbnail image and upload it to the pds IF POSSIBLE + const thumbnailRes = await fetch( + `${u.protocol}//${u.host}/api/playback/${profile.handle}/stream.png`, + ); + if (!thumbnailRes.ok) { + throw new Error(`failed to fetch thumbnail (http ${thumbnailRes.status})`); + } + const thumbnailBlob = await thumbnailRes.blob(); + const thumbnail = await pdsAgent.uploadBlob(thumbnailBlob); + if (!thumbnail.success) { + throw new Error("failed to upload thumbnail"); + } + return thumbnail.data.blob; +}; + // clear atproto login query params from url const clearQueryParams = () => { if (!isWeb) { @@ -296,6 +318,19 @@ export const blueskySlice = createAppSlice({ did: did, time: new Date().toISOString(), }); + + let thumbnail: BlobRef | null = null; + try { + thumbnail = await uploadThumbnail( + profile.handle, + u, + bluesky.pdsAgent, + profile, + ); + } catch (e) { + console.error("uploadThumbnail error", e); + } + const linkUrl = `${u.protocol}//${u.host}/${profile.handle}?${params.toString()}`; const prefix = `🔴 LIVE `; const textUrl = `${u.protocol}//${u.host}/${profile.handle}`; @@ -325,6 +360,18 @@ export const blueskySlice = createAppSlice({ facets, createdAt: now.toISOString(), }; + if (thumbnail) { + record.embed = { + $type: "app.bsky.embed.external", + external: { + description: text, + thumb: thumbnail, + title: `@${profile.handle} is 🔴LIVE on ${u.host}!`, + uri: linkUrl, + }, + }; + } + console.log("golivePost record", record); return await bluesky.pdsAgent.post(record); }, { diff --git a/js/app/public/linkbanner.png b/js/app/public/linkbanner.png new file mode 100644 index 0000000000000000000000000000000000000000..ff098e36021b62d25ce7f2010abe1446e97bcfed GIT binary patch literal 80350 zcmeAS@N?(olHy`uVBq!ia0y~yU~gbxV6os}V_;x-arvM#0|NtRfk$L91B0G22s2hJ zwJ&2}P+;(MaSW-r_2w?;on^^)%|9f+`Mpoycv|8Nox?YTj8BQ(TeH{6B}Bxv+h&^j z)a4qJG^U;i*64TQ3Vf*PGmT5K_e5C7CT)?IbMK#gJGE!$`|O?XU)w$V{kP^_f7+~S z>-Dd#&VRP5JO2N_e4y9QbVdd+NVqZkq#~Hbz_6m3K?1^DAjFgaVKsPhG(eSVDKdb3 zz`($;qGeR!Xz+kTU^G#TW(9CUU>GeaM$5<1>I0k?Mzg|bRv66+qgeqI0;3J2k=#I9 z;Jf*Zk#}Ux$D^_w3<)pZd&@9^5=Fyxv->rlr%qIMHc~932UN+@w zSoGP0Obl&PAi?$^mCx$M0;8%gFX}m~#3K?I+1VH*#N2%T{#bq(WD>)NrsHzeYtGpJ z|HJ%mPjuc+S5^ZCgC}POqN~<0&-8ZA=Bc9LF&lNZUJ2p@^%foM&pZ-fU|?`geYf+u z9>}lL`=3sWez)}h-Y1j1rwJ;%O=;%0+aXhar;ra+WF9C1^*0+FH-0*$J^k;u+wbF@ z?zM`?-Dm`LLSHB_8Za;zXdLU4jkf!7klzYqGDB<%n*lf|7#vht4lwX|7oW4MHWn5F zi~ab&rGYIWVn+J8ou^*MZ+DxyB&YI)XeXqqV?~ym&cE;%Qng5^i#b(wY+;msk zEYt4M%Kf&%>t-A6jQN|SP;+<6?9-F|?Vl!qlqlIkGU3=c~$Mh+zrQmYT=RGB z_9?6L_8pW-1nX&&Wi()romh7Iv0J~U@HLtHTT1E~`_kb(JvKBv=hz3qp%uWo#NO;dXP#h4mxvdeSI@})EHtI> z!!~KZ9J@y^_y1iRQ~vsi_^OuteHWo_W$R^-XmDe?f6-h2caZmUmVMp2J0>t+Zn8|D z|2OnGhq-Z!vG@T5c@pZhTS^RUD{frs)(KPVi(Z~HN$dW~|Go@9`KM}9i(3+p znSzR(rPHET>1;Zol=|=IbN%9TmgzH7r-|oXonQOy=BF#c{!`WGRV=dkbVB)QBfFeN zzwNgf>ll45#}uCp4U0%@eP%iJdDuMf|38k~pNjwYY5FtElK+3do6G;)9cS|SjPdlP z)8lsO?0hmQbz!TR*5@i`Mt{1 zN!_|(VsRA@pWT`C{Meh#=i}05WiESG@ojFrT>YPqpPt+Q-&q;=i@UZzRzSPT~Chd z{(h&}|Fd<#dK>+<{6&3ld& z&H4TAb&=k@i+%omzU!9PotB@N5!J2@S5M*&?9ZW?xv5CZDhv&f4^RzPMsbbR`;P< z-sHMw+xM+cdGjlrZ{}=18&@T#(($T4C+&pglU=XZY1{w4d4ASsk3)`C(Pr$r+wT;e zHBEhUW8>Mc6-PzGYcd~uIc;yOc(?QUsk`O(W0(2N49eT}a@n(AbDldjdH?&mb=x_s z*L%MFOW1lfEW59|{(Y;`d&Z)*?{=3xuX|y>|EI6%^>=q}f4QsOCvU&6N7DG&(zEQB zCm;B;Zuh&ab!%(CciI2{d4BHX21%zd);-cmKyn)B87E?;_{_OarA?f2Z5#pkWx@A>pt{{N2T{l`tO$6S_K@8^BMxbV>t##%qQ z%{o53A!3j0KQ!`B`TOnm`jtYNR~NR+MfF)eo8ed+n-W-g-uAmre)a9!vs};l{dyh$ z|CUYozTbD>PkUeczWVI^?1>)?)-P@;j$}FORJdyI?zi`<-{&&zEk0+toU^zs`f4fD zM^Ml@%%9BgZCZ3*=1ZBKSHq%BpPyX2{a)3s#`j-rzFcsAy8r+0{ii$C=iLYiD+@Lg z*z>;jz4q?6+oFR_@2z98jsNpVeD?K6#cs2==*+ej;^943s(LNH{_m#qcE3%&>oVV6 zV5WO>N7=(x@oC2AEEfOy&~7hdcC}(Qemr}EJ!8Gxcb4qGH{V?B zi?J`_FZ=iN`Si`_?RM|nccvrg?CkHXJNZw!EzFboo^$HtYu)2k&s!dDv()=;{=VY4 z^(npGZ!WRyn>&T;RZf`I_dCV2ze~K_!V;j&XmG$_lG#ChmVNpmKi64hRkF8E|8iDv z-j^hWoIV4dwOcm$8f^c5ui89RxLG&XW%GrqTbawZ?&0{8C6x9hs`^scn|;6E`995F zzV~(Pd#(82x305&v8;Z(HT>r>^L-cJ*U$H5WtS;%_<2O#?&76GU$j-%cr8u5e!r$q z;$lvl#ghrnr=HEux6|k^jtZ>%Jo~;*{EtK8vsPV8{N7gk%FtV5`Uj)XikmSPyh8KU zm#+G}WU`;u@_ALSHgI0we!uQ_8e@$@pT(n&Pb>XvSKa?_cQ9Yhr%SE_z@1 z>*aF(7e8lT_cUW!DztHSkYLrDjmOQttM8TbxGKhQ-tf3g>Y)}+-_rVZnk&D|jXORe z&r71_qO17S^R@4apDwrm`;zDLzXu1H`E%kH&%KdxIew+Ux!+CtwJ*J&e!HFj{$=u% z=P%ste_d2lkmtF%VA6LM^*IGj!KS*MYF|H^{@-qgIg;KOnIe;ZdHw{CP2tJu84JY;>d&O6mB zr`KGHn|3{7)!(ukiS5hQmdkyPn-X?W{{N5Tr!|+)x%Bz!+_fwRIPV1U-j>gd{Wo=e z&C-=8-fcTmb!OQ_zY-S@iIOK1-KX`}JW+PDpX6Lh6XMayUcuVC+)}@zEJ{;!P-~apW z`4eUhZg&5@z=fo^y%~D{gHOx_wi4ktCn-?Ob?rtI(OE}1*iV3-QxGA^@DlP&4~h< zxzWL~h9QhG>t8Nyo$D$dyCwd=9{2W{vDZ$1Fju_C%x`mH>;2q&mCtim`5LhoY0R&# zlwI=5dTIw}V|&rZuc7y6oHq%sd@OxGV&AW;>&+5t#17s6|L^U=1yH_ML zFnadCl01)$Szdq6?3L~Lu>JjWFYWU>0o#LjPCu?=|Goat@p>MwAJX~tzi-dJIVF?P zzx->ujziPI91Sn&D+l@Nm7j0l66gEi(*2uPykc=*mYF9bPq|hDW7~y2#pgoJVsc}Q_nYg^y&je6Gc&VguO-jC z>E{LKnfzQhoy&PAbq2bx(wDT>`vVK^;&k_vx74Ntpg%c&dj--b3-C4^YBc`^_kq3 zF{#ty4z(Gdx7n;-zb{OyLAdXkrHwAk7|Vo8KvDmhPy_SjuFvFe_@3zjs=n+MmdrjYq2ZnYmj$m$FsPN(u;*} znO1&!vg!4@-Ddw;CDtwBVQ9{HXZcKLc5nQCnXTXdJv}A7KTgi#|EHpZ%l$Ouf9R&ic7D5+ z-EQ*dZS~yLeWmsNmH%R+n4i}eO_|!T(&p^5$#F3s)*pS;t^aRT{ro)U%-??x%m3Su ze&~Kg-Os194Mm;*&RTWQ_`Hqrn#1=c?CWYSTc&)y8ZN(Wzq46F%H~M@_Wg$EZ9bcP zetNkw<;jVO&A;}3zmeSk>GS;md(zjl-aIn#`9rbEcePN_BeyjXN=8_<&CeK{IA~O$-V20(&zm-@IRyaoP;$ zk|%qu%d~r{@ORmp?~x;7yiy# zznevfbCpoU*Cu8@iv@4?|NnRSZ#ifE}_o>Y=TeZkGeSU43>G_A+>vk;ak+m+1_5QvX^t`)N*rck3s`c9};{n0UNTRWVp)^sUTaCHyAs-7B@n*ECNRua&HFp=HmhzHE|&AZ zeI?WOe826t8_T}d>w9+03%hbVcl%sH71?j67%Z+&jPc)gD{J+=y7z`(W9Ar&uCM?5 z`gDHXXKDTv?x2m6bLVe>uLbyixBUATo}d3t)m~7Y9&>5S{b7spPex!=J&mi zedRo-AMZWD#61Pn+wk>%alYo6aqLey&J+GtFPEg%94sh0V|aYZ&gb)X&+^SX(Bu44 z(m`72U0U1w#QgiqS5B&Vu;=vY{{G)ymP!5P(|g0>y?=Pun)4~AX=V4uEq$~9@9k5O z?lQ6O?0!EodMf>VdN9A;rai^0-=3P0I(_xBugZI-ov;7*IkaVe?WTm%FBjdXpEbW< z(^m1P&6#0Nab_B){_Z!MVt?_1Z&ROBaA*T}{qK~`Z`|!Z393sbLh!v^mWRxo0%n)*eI4t3&uE+UIs5;A)b7j>{1V0eqVoCN z@AuOT)64GgS--h(_5Ezi3+L^A=eX|+yCwT>@ArF$e^pMDtZ){caHsTotnbw@)9+_C zpNrb}b#4A$5eMGzTE>F9ewLuScP3n1cSfsbtLxXhWw+N>)_&U*qOQJS$z~&Vi^kI{ zm(PpZcCYGn;@8dna<;qX)O{qju z=k!f&KW29a*aS#OSon zlT+FZM7wS`eX^bDtN@Xo5|bIbXD6)SvZy8LWYuw2!Ph0kt0t@-q1vcH+={fUpK zK99I1{oJBVdr55N)2XKyw#!+qxvlz*^}tP;3#Zn6*>h~&u2-v`{h9ati?F}V#W~k6 zyBR(Iy!Bet>YF7KlCN^Q%M`i@fBU*O?pkd5-A|xK<$?I;`t?7(f8PK9_kPjeuh*yF z&fmW`bMLI|AgvFdew{wQ`{Oa`>AKr)Ji2eTeoN9sSFud3DO<0-S+k|_99x6!w;PL} zuAf+3;Kur8Zujqb>?_Zm{rR|beRXW{xi?2XKbTr}xAc0^Im_o$K-od=4CATfY1OCv z=0=Sn_RJm2@)S^if*c-_D4`@XJyx?*wP zs~6YL)E3|0`>2`U?ncb+PjPDJPwvS-wQQ|n^06tV*CG}#e!ilI(X0EHX7DnLn+&%4 z;hfE33~?r(ub3NTuh~#E(;}}%_{YA)uZ5}mc0MahSkP?b{^NT2oqs`~UejS$v7Mj} z|E7m+(q&Ix->v`u*LU@fGq=2+-gnS4{JeS1jz?Xo&AetB;Bkx3v+v&t`L#t$lshuz zZNJW+vQ=3n8Yv&G9(r#-^e&`hdFf||wR^waI;#}6Buf8aa%_qQFb$RdYa&_*h<@H*?iwV+a#Wn|M#Jt zvHsrL?f0VUzOIg+Iy-;g&d3Qq3DdvzR<8U0JjST#$%$t_x1Us-ZSuCl+S2^f%=CGg z=Rz&-^Dce6{r~a+e#@DU7?^`Z^^6~9@&>+*<=W!($U42g&*jDacI!jx3+3mX?69P2XH|jk2y#Cwm z{Qb+c@)zv;vQ*zR^dU2EM-ktjXXg8FhV1>G>oep_CK8#J!{pUgDXPN&*dB5|z)123Z{;7SK zJ8usAu|C<`cjl+9@i6NwDVlt7`~JUg(}JD#PnH^g|0G+x-{xz?b6a<-&oR|+x1QZ< z%lKSdzWL7N=l|@l-)xz4)8*ST^Svu?CYS`=Trj1&F|Xw0$zxY@G*103-(A!{+46K| z_Wb!cF(f#Zb9$k0TsPK+e>LID@ z>AlPAbPUe#;p5@iwEJI0{7g{8`RWttS^w{qy|*>?QB^wZE;ffvh{?yhX+lV*>YukE z2c{gorjwJRS6Fv0+(3pE_!9yPdcD)7|%V+n1jAJ@8@Y z`Py~L$F)O6?q14b*zA8p${Su^UnXoh=lfv#f#snq?L0rsIQp|}iI=A65l-n_ zmfxR0ul&CI{@p$MZpGd?ef`Ik<#whop3l_zp;j|*TFA$^;)c7dFWxP`zqjVgVtL)gZoRKgT=zL}M|>ck@r*pI?2gG4Vu7qFuM|+ijP;8|Juvd$Z~Nv^VR{Cq+l?@O}T>*ZR1Q zz_QRc2^pp>ouH|q$dGrXYuOG|p853W#QPZ^au;mcQFc@`dg>ZyxDNrD#~%ke-&j$&g(kkt+#W@pEv3D+Wxj*uPpeZBdqS1vnnSj@=9OJ!j*2X zo>i`&{e0d(kEtnXOl3)Z#pmw6%_}=;sWDsem$L4n;G?(Sebx%i;G6&&DWA6At?9U5 z>CF|M+nFDP+)U#+!e95Hxo_`tzYkO9?-ZUrvxx8H*X#}NLgVr**bhw9Iy(Ko%*~1! zuTOv)&^ZO3sV@_9cKN=Twm@fgOw?VM8|t%NKFxa3`kn2j$>g&oZ@pg3`@OJa?u#c| zjUHxe#TCDae{JjN^qjxu0duUS-_N<5R<4t^oSwo~qW->qljXx7kNfjimzK+IZ+Tle zm+^}hqd~xT&%9T&&rh8$`8CMZ<}Rz>n&w{sbBZ8``MpMtF|=0yRvbOt2y(7ki7SMzu!BXbI~ul{_oe>3k+u$ z-I`jxqRe?o7|(YGi{m=7W<~t7v%SoOc%P=t*`j`~bnX7{mX~*ZKe^`N!YuB4>Gx~D z>&E{)6@KfV)y{fv^?6&W-c8%mbx!BQ|6l9>S7mOioxdf`?|J{fEq~=#~t+(|IcVfQNebZyp zkBUd#Xly+7<*cCJ?iZ`o?!O2C}zIB&6S#=o~* zp4w>{zWmpoxf4>Vf^zFVom4OX^I9$7+|OO1oXY<8e@o2e^e?Yvu$X6o1QJ3bS1M z`F8H#IlRWVb2gt{5c~Q0%=CH7z7|^frYz2wcmE~Vd-YwRQ%Hb49^B|4j0pZoB=?wmEet)KAH#$402lugm*+$+3Of zT=SbwKe)HvJJ2&@WskJ&vOW2~=blFC#$4w6S5f&q?DkZ{(|XrGCE4$}l(YHlwLKg2 zL&Zuj#TBn8Yg>Nl)0JTV+^GFauSVXQn))nyd(_^Gvvky!%}S}-)G_;kU3ZeR;6Jyh zyW6Dxx!wA~>-IzX=8Fk8o7YNp?VP+<8wa09?;6FF3@w%?}& zE_U1dZ2!qav9~71S3aHU{O$KrE2XKv$;Wy!Uw$@DF53NeoAec4!N@76AKlw_JMZ=< z%LTL7O15`1^V@8gQ*ek=x4tgw5`Wl-`zMRfuRi&#JE!TzwL_ID--@2umq$J0P8W7F zPrYbYd^URG%q25@&;P%ElIy{if9KWa`JMg!cKsP)|I%{nOH%fa+1V}^tY>%^`qFPQ zA6KT}ovxN;-Z~qPOvqU$V_Q`+(%{eP`{}+5@9uhk>b2?T z!sx=EPp5-Atb1Nc7|+<0X<$4#dg2Cadvk~Nfs8y~_AC{P-127E%dn@bw#MJg`SU9k z)Ha^*V*1C&$G3m|nJItQJ8#d&V~U*hmARL>>w`B=eNdut_`XNS^{gMWy_SSn@_%c} z-51X^CG5GJ+K(kB#x=KBmgO#QEz$REnC7r^_QQP89N^iXyCw_$N|nplzI1BZ>Pu^t z=9<6Qv+vvQX4!vkX0ltNb?5)y7{=^e<^3+R&+gZYY4-Mug*JJnX)GzNvVNE!RrG$x z<34Ape{S0k-9M3bH0<#G64{e!r$7U!va_RX{XwnkxEl`sLJZ8d>bbM;e>tu73-TQPv(^1j! z%5xj@c06obC4al@o#^Ga%Wq4sS@!f{yL{d)%k4^!n~avrEV$0m(5Sfm#2@ZybJcR9 z{A&IyLPjR%{5|}s*STNocg|jC$-Q4T@d;d*JA1+Ovx0V?Klo4Iy|4D7cX7-2dsV+T zo$@GdsdS7wvo&jln8AwEtl}{jHh!D`)D=^%^m_xsFQZm$YBs*&6Zz=j$|K=|HoRF(u z4}9FreOmAIB}WH`T@9CX8oIc;_PX@OzPT77wCLiI8EGcRT#|(rUp#Ve_rJGZ>@W8= zo4mYTJ^$v+xp)81%QomZaBiRZ)3eq4^X)!g8n0GVd3qnU|J$PV4V?@65f+kfQ#({Ol~#ZBd#kO^JuwPTts< ztSh@(_4-y{N1IIP>1)=kS+-tRMLjyNmVx1-3xkBinas#*-2OJMa=%aNryMQL_kLC# z{G|8(U)Q>te@Bfrr0277INZsY+Q_+lzViQlpUpSD`dO~}dhg0l_x|>uISJeU)Iun z-*sZ9ef_?*J$pPZHq5_!*2lS>FSWU$`$ndx&}*R!nVFf}en;G|{eE}ZpRKbqf2OT2 zne4H~OiQ+7+KakZE0^oYRv#4&F9>2TkYPH&uxMSaTlVGl&ljWX^}OfR9cBr+x9`2+ z&bLjcpLE34N-8k)Z7r97XxU%Cz5m0@<8touiTxWk-@U=wy~q46 z$HKkJYcEXNJS*@ai~hbJi z{@w8infT+)=JQWpE}!4`b4DhA^6Fb#G7lfMcQTo=NHu$F`PSfd2g}R@=M)~3+_O<{ zW6jT^)5pKPxTw5reQ5Rm@)s8le)_meP zn@hWOBDP0~t%+CtEd6h0aL56Nojr5c9Nky@dsg)V;Z5cfE6U#A%QZ@$`=E(iZ^Im3 z`_xk+C(oWOJ@S5`*^n`?E z>)8JJaClS2$44{%$DEyUWzvkdx3+FB*)z@N`kB8KcbebK`TX+b%R3B8F2CQsyS4Rn z;P!yTzq{^l z)#OfjeN|P}Y0L*eD)5mNAie=UB+zzwL*Cc2&)LimZ|9EVdOKR%U z%+f^F*ZXUKe>1F}TgAI=a^<|ab90}`FH1Y`8w=m)7RB!?Zb0#sx;nGV4mtw z_U=yR>mS^SFuUErmKSphNKR2y3;_J`n^R2UT($CGwd^u;!CV>}j zM~@zz)}MQGQ|h6=`>N!!UcRo_c*{Gkzxwss?LzNL5C1jU@af0n{%E_nYKHQ+x2_sa zRZZv*)7l`!(D(GO%Vw+KpdcOj|Hq{BXM{23UE5PxZ0r|isq2upHD-HWo~NJRwh$*N zhDAlSX&ekDYHMA&C2cEK^vD*j>5;DM>5(yU37S>>lcAyD%}eDq{7+Y}oVZl_`pG|E zSNpboc(neSS7oUv^V5V`e^ZYi=@fq2sXosj)uyo^^L)&5mHklBTh_jIn!(pitF&H!U-OLfhpf`Q?j2jVZk^V5`IYj=H4aH% zOAr6umU}zxR8Y3U^;OAzmd6TbcPI2--Pt#{At!il@j1(Fef976evkQY*C%Cqs_19> z+9_L-kMp_zwR?SSt+C`QNl8gxD?j7Q?0hmB(q=gip0GXOa4BG@@z3(&mb84~A!+_- z_M~%*+4v3r^D-pJ*R}}vf8)ODTC)1@o2@)wg8gk%tJ(wkWF8g;)jR8^r(eCZvsl)A z+pX}>-xvBM3>Td|p7lO@J$u95c}H0kemy%oTRl9sbn4T`?fmk73^!Eg?2B}H{(t%0 zvRO|bZ{^vYXH#r#UF`by|LY?=&#ekw{p5(S{}z*Q6$YLInj8$w6U5F2`$#_Dc(~uJ zwx-`YX$EHi1H+>H`r4NACuyhuY+e0A`Heu-yON__qH4E~XvID`bLPyH>i2u6e;4Y# zv|weLhh=LTL-f{+i%RZ&8`H`nI2p1pJUq;A|HPS#!AvJ|(~&TSA19RiQv?KsXPvD) zq1YZ_S9fbm<~$Adob+`&Dn2G1KPS4DrJ;1)k6YR63qLUwurM8H5cmI+cJ|2%#^%&H z-#*CJt(jwxvg74zZia%kd$Ihc{eQm-#(laP6>KN9@oWA6@Acc54!oLI{cfUN?XMHM z+wUl;s;cs6@p)7qwRFwOS|tM-Yv{jzR@iS#>FY4>gtw!2L_*BiAxFSqhu_V=m-F@g+yJq!j9oTB_nBK9*bt6%?ZhE3s%z)Rag*_fFb zIG3zh;P9Uwuqd1`b*k$7J)is57PVGqNLs#qzv}6N|KGOn zpDC0Gs;P~7Sh>YK>gx6-$MsL!xH;?eG~K?tPbSQso&D0{?4#>-4O5EP8D4X7b1&Vp zCFIuD?DUrvw(D|lZwm?wJC>lds?X|`#_8j)+$@%}na?!}zq7M=`HvdA@Ux=))^7|l z@9nXau4S}vGID0vaen@~e;aE)zIK1I&wKrJ<9<2c58@0$4z-8>e=7cza`n?xqvTgS zGp*|zb8c_-*80ZvZ`S_lQ;sAYJ;}^(BXCjw)8F6Ur!SvhcZ+5E{EA1M!AVw~->-k( z_u~<_`(8Qg)Hidk9IuFXb#KA=%BQ!B+jnlL&E9f z`FC~%HXU5>`uNFnF@?Xsy z+Bw#xuT*5MN(>IZ?&;z2^!A=SWr~P*>f5)|4zn<9t^S@DZTpPh_DewI{yJM`NoOg6 z+{?>)cP@W(@{pguzxi4vlNYI}Ygg9({?_-mc6a&vyq#M%UaH(HZV-Owe~h8A@#Jo{ zh8@ZbJUcG*?RoS5&;I}gjnGD;m0Fs{!r!J$%bYar;whGv;Gk%O1O@@;e_8uA-_Dsm zT|afIXi#|g^(BvAw=^W!WQu*bnLa;v^_80kd1NdC>i++}KfC?g+)FtDyd39dnV!C; z#3JNeSh$h%k9Fr>Pl5umktRc>p+>k}Nk+WYV8i^tb&)QQ_;@yb#3t$gY0wcBU4 zr?u-xZgN@XKVL6+nUCRrzhgUopP6gD{p4(?MV`%Fw$y+Vr)hBBmcFy84&u4$$e?gXhXVkQ; zO-|1(^t!Wi(cJe@e&=%7ALxSo@rj)|@&DajZJfR9*W9t0a+2>_L&0HXRomW!EDYRR z=I1;5%}Yst?vYs7`6D|^>D!&sucbT%b8_$Q3O#52-bT3RDo^JOpIfud%^Brt@08!K z4GIcUnqU8KXU&g??M9WKQdX{8_pGS|~d{FS&lS9{;TU$37Xj1gp5)C?*~|2Zfq zonNfVQTuf2vxPxH!K$WItmb3DuWS1K&F1s7+9!LjQZy`ib*0ns z2ETRWMc<9;AAVnO=0CY1@vuY%!@8iz$js`0%^xxk`~g*A*6(&S=iHY#+x#Z4C}G`+ z7(s?Nixx6JaN3vP8#2#4B3OB<>(Zbt+TKOxxsxB=y%`i5qqS9#%YxZKNkd?& zNtVXXPxMG`PI)|S{n8z4bkZ7c-m=WlcU3BgpWm3lyCDBv?|mins0G6m{womumfMy_2_h1)nP7 zmiiYhdNY$D#`X8lXV0IVeD!p7%C9XmjneNi-P~2Yd`ft@XRS<}{{)5&k6%1G$7_Bk z!RTw*n;Q>1t}oerE`QfcwVPWqC-3=ii2KrFcm8`CCXuhNt(9z%xZGN$dwOTt+bGM= zXN)BU7}kky*qL{6kt;XbM!~t(<6HPOGiQq(<6sc*hh(*^q<_ZF zjSE7iPVxNsPUht8J+WNnX)|*kCh*=o$RO1J?epEe$t0M+q9VPVfYu3uRbX}t5}F=^jx$7{deRnN@K+!M$l zJ%9QQFMt2(=J#uY|NVVmKlvux0p`!S)x}XpZ}{@AtO(px^wi7p|DVs2Jr-x1ndDYX zJ02s*FsBz3nEw)L)Mw6;m09u4v$AfXNX~85ozZ0;o@M)foYG!m=kiR7p*_y}uiedE zKeHnZ$`|^~wTcZ}AFaQ$wKeGVhSy;RE(|wL*4WMe^Hjec+%}T`_kmqA=Le5vBim%T ziU*95TeGJ2$l1;^=So!E{fgoG!vupz=WlLIcAsgQJuRm2s3?yCga3-u;N&ZR9GH#|0`M1w!Po1gC%Gw&VP<8I>x&LP|>r7K^nKVi0=VST*8vS;^ zR=nI@_ImC1Q-;T7guh=mEqLGn>hS-0SH6F;yIkdwoLfwMDwZ?<9{Rml+Eyvk|3mqU z3kw5l@9r*tKke=9?cQNw)1Ewk?wy&rG9)a_%h%U;@;X-axh0cg%5J9C2rv}%7cS`5 z-xqPO^0{me2_LjuLzvWBVq&b&*%=sO@ zTE~o3x8=;txw*;JNpRJqlFPp4 zJIxq;W)?l`Vi5RVE$Ga!BY4kg2lJ=iv)AvrWE0|*)t%3DXl;~d_ZO2gVWtgh%_Jtx zd82dk^vTJKE?sJQzwq_?rQ53(UHWwT*N>z6b&Be93Yuan9=0yizx}XXUT*sJ;+IRO zdrjAieR8MxylG^^fqfeB+v}e`eJWVJE`465Tc7p29UZp!_f&p9Q(X7uqWhfd3^Hf) zDr4`yX!`&1>gwrx{{QUzUm2bCRf3kFX+@z)6)2lXR_1vut=yINHr1UFx z_N$P<`PxhkvMddZ(?78b89NB9;hf=~8n}}4-?D94H$VJPbKYTD`+}im<+10}&)l6k zX?nOq>eE!AqKi$g3LXp=7hgV8=e_j8x%pu2?{8C$&sjM8S-&;0{CXvLDY)CMt3JPG z6Q>BMhbP4G;pQQ`>(X|@zn7}sQ-1hr_4;Yq>vpOsonIOmx&PPI^(hw@x$bdf5ORu| zwYMxF#Nem=*&kOE)@~Eo@Yi&EH-?vwE!nZ-#^uMWmacpJQ_{cV{oR}+9j`z| zx)KA=jw$*ReoQvFoA_$|8Z-Wr**}6VD;@p9d#$0MJ52YbB+CQqQ>Ra|L!_f?`bo7J!hNerv)6Xle{0cHp(zOr-jYyZiHTBbux2Rwhk`-ML*)ytjv!;D{5nrE~pta&4&siP${-@Q!!H}jiKWyWupFZ*lt zweWuJchB?lY@aUb)|=$5x6{SX=HrnSTiteiy%wE%YfI**gY5Dj)E-2aoxc9^x!38y zN59|g|6lj=!oudY&o9jDnYDL+-d!s;5r;#Wx3{fb``FvtTk;6o+gn>Fv&+|9`1X0v zpHHXNCir~qKT&(^%ihFw6$RyYOQ-*Q!w9MJgYx(VGTNLM+)9_56t8mf?CjZR9&G8E zrsi$2GSb+NrGY!s{{EdeIVaDaEOoVy*It$Vr$)fWh1tg6=3`4`hC#)l7S5u>yyh-T z^FM&P>P-hyt|aj9UMg>TTJ-+%=b!rP|0GABpEz}Ds@IP9H#RmivQC)rW}3F1j!uez zbcQI$Zt1Rh_5Uh`|6Daw{UN_QwdU8eAPq7&b7-P+T7cgx>{$>_JC!+bJbQ~TQ~X6At!&f`q0t|JPGSB zC44x{Z?DtL#%uJqN!@pr$i?UHZ*5(Dr}q0@9+Q2c0RaiGf8^cWW!Uli}fSyGdG|7!Mky>^Qylo4ApbP4$d%4Zqxj`>TlEYGc$!ZKHvBGoVBX5aE0!v3TwCiU*DCDL+3wQxjbHP z?^nIudfjWSyZJRUx7E2vJ{!;D=<4cHk>D{3XJKduJ9qv*-TSM!TaSdtX)e9_bJFjx zWtum(d7t{sy>!{CTRMxF3m7h+H;=!zCPLSE+1V*KKR-KtZLal_MZ3Cm{?&$Doxs@h zKXO;e${uO+b5ka-UAJ!A-s}0? zwUv?{44mil9;9Di7dub>u=ctghpv6>xBI2>_{Is_>wR&1t9I7)m=xO>8&BS;#9$#} z3o6`LIRs=pHmD`YO?6#5Y04Cpm20DB{X4i)a_y4JZV@()j)?)e9!1~2eAd;HE1Cn*;zShMj+ zJeXPd>hkjbrOBXCt&=BDPElZQ&`@NSDA25*!1JKs#iE_?MxWow?20K*#X9yc>f+Q8 zU^U(M|J&!ey91W_%+*_cZO!C6O-@bweFGk@PZQV>zdC&Vw2zOEdq+mjT>ISe<&w!h zY6c5Hz3HD3yfU}netcoJd`?l<(`4s`6ZU+&mCd8n(6W50fK}O>jGsSrqqkN3`~7R< zaXIa^QCm0F{5dXPuXFV1(HaT_j&){n$uo4 zQxXH0_A?mpd?eBZ6_!7t@#s2->?)S5bE|m4iSWaqe*_d@zEBd&6{hyCKkLr2lY;J6k z-U^q1M;dL_Yp$xJBCK`8*-HwHt)bpWh|^tn0XJxs1FCLx)fm1GAnh zTfvj7SKE$+hb79ba*dh=8VZS8U6Ogv$Tw%rb4E`8(?QQNp4H^76PY$8;F4vRRyGI2 z;|C?omyOTcBx@VD+*^Ai`R1n7ZGH0AWjf72;{X2szPoH zH>bL*x7w?+a%W0f+9yYz!$m@SL^$=-6wP&Vi>GRb&w3Si>-2O`PT`h3 z(BS=(DTTp3`oR0?U5Ao1Z_L!JoFzMFs`k~?r$OQ>))MzD*|+8Y%eTL;c{%m!t*w)S z0~|h>&l29gB*iOTSqIcNUi-NE>#L&*hb~Myd@K8+)>($U%gcC~Z!U1}m)q8NJ+6ge z!iz0Jhfb=`&v|Y6Cd{gkSyw;j>bberXWJZ2@*W;)-PR{>U$^J=@fE99oeEp_<)XX1 z?p*8gXNTDs0v#A63N+&<@H~h>Epmd5cG>I?$Xd1PXA*0;rvB;)z02mmkC|!p*E@3m z%({Jsb9b07zQS;5^7QHH+M5q^|2-wJ@8;(8Xgf1iRo8P?uXWfqI=1u4=E%m!#GFxJ z@~Al6&c9vs&CLyo%-5Y~f1k2wk&<0U;-xp&PMz{PeLQ>HZt-VV%bs=Z(tPsg^ZDm+ zhuKRWC=^}8>5&?^QsnKaX?J{YFR3Ws79u*`Ggsln1BHzl_V@oVMQ$!STmSp#xykE& z?c@Inoq5(a!#n9!+lSoy`|f_)xHf8Q62r%}nU|N{wE71s1qGA~;;vpX*v~%U2WUhh z`uO=dmXjTGCd`|6?ym}4)4>I2W|^M;^f5~8=OJ$W6makMQB$bPfu%1P-^k2je6xPd zv`u@MPTt=Y{7FhKbtmhi^(&OJh5AHRaeH1{cXw0GN2B0dl@}+aZqnBFt}(4+Q$N@7 zf05>!l;auK)Hby1y}Ei!<9+?RozFonQ5*Zdv$IS$m-Blp;$mqyQhqaa`c12QZ~ulQ z7y56!wfgGnH`~H?KAV*tWA7GU_jBow8oSfSvsb>kx3~IpB69=B<39c!Q|1d@=o95) zS-NV8PnU7AO8)0E%{x<7r@E@DWlMBSm#TNzmVZ-?`?>BU&B@D7pE7;@;`wU_&qI&w zXBF({jC}7YpP(%HEhs1`N&B~}xyYTO)4Fpeo1OEVI&tE|j{A!%KR=rz!k}|8ZoYFn z-`1Kv_us2C|JeT~N3A?)>2#MJ%WFQJRNod=-79My#>Ol4Q~ghU?)JI=;EwL?r7G6`HBUu@@{1=5WcZ{; z?#zkV@A$07GJKiue9hP9xsw)M5?Z-h-T3at>pYM4XE0fJS3iCFwC{H&AgLc38oI5|{>cRANBbKl%+WEwQ^2gw!r+~^`>k2@@$80^@3vksz5g`l z%hJ+Ae_dqD?-Uk2ndoj+x2CwLDCOK7%Wd;Oi#*cS-Qc*Zld*ieDMNz&{reJ32j$lcR_DrhV*ZEoOlbvEs*{KyzpFekhYMLo;x*9ZzI$O&9{oe2M)?TWcYgIaF_q$!E zFDGX#*V+B*@^b$>_3g9s_uWkSz?iqRHng2zKJV1TSI+} z*;u$F@?n{=bxGj*{QLXn$sRs)#wYqXzoe1My7l|r`{h2JQ0^}c0XBe|2OjxYjge2)A6$wY!e2J;A|D0aP7Mrv(FE= zu&`-s&+nOAnWXaP&vSeK6}+zR_x)bCmdi5gY0M zQ+Pyh&I1MkMV1D}?S6ZhSjz7#(-RSjuUtCi*%R-3(`1*WlvLI&yb=;RS+wK*jmziD zFYakwHvfIs)oj(}3h_)iG9DF*Mq34!aqI0k@a58`SF6|W>pJy%)8w^}o*q~jZ1eGm z@V37Eo12z`27L<8TXjue8@>IO)xRZ^{krZSaxB^eYUE$qmKz;?{_-MMZa)=^Q<=-> zs!5yWOaP5%fjSg_w@F_(|Nq6s#ZTk^|C(;uufOxjq?Vt5+4y8M`tAQ!+=*|`OW67K zT6C`Maq0X$iK~TLZ`b_&dY!Y{U(zgR259FrXQ}RAN zv|`V;H*a!IALo;`x)K&3{cUZ`&Y)$!v(sK%f_nS>c0U#<*YAIKclYc!KQk`&ik6mM zdw<$pwseZ-ZApI6o>L#onBBLwW*_flIex)s^UC1mW-IqpP1lR{@vJ%9=0Bx+Qkwby zC+hZ{x6fa9IM=PeFQfXiztU9hzSh#$*KS(<`}6sH|LND)jP_UY-Q<1n>baNsw4;|m z=asD7x^v~Po9XkXGBUI6_*T3#^Rn8{7mNFIY>%%9Tr4wNckSQJU+oweI-3{_9t4@P zG}yY9NBq)Wy;Ntt!>8@j9N`DNL3dMV|E6eNmnqnK(7=x{Ef$8p#7;r=MqXzBt&- z{@Jl-GrL^Hfp5iseqG-`4YY2l@8?{Tj>UU_mKervu3jX1<>H%#TeGjcE8!Q<4=z4@`=js zx2pO;s}QoTdMQ6=udIvReI|{~+JxcX z&Gh+4w{GoZJ752Gb^OhDCuN-i8e0I{)?&&A5 zoV=WRanjOF#@61evj6b(h1)SJnw1>sPFtJt^5Ek>>vy;RFWbvdD)?Z}=X1qpUSBz| zUN7VJ!h^Z{?X9kh-rcZdsoB~~4kC}T|NZ%y_VCg=(8QXcW5V4KgXCj8!Fd6jgSXl| ze!Km?+}8Q#+1GTUkNUNPu?E0A@tyat*@fiMsM%?l^wmWW@pH(v-_`Q7=%^3 z9RFmzV)mMIcE8_r*rwZ59nC7ZoTpjD+mPM=u_9$s*2>?hr>C6+b!z|r`@Vnir6kwt z<=G4FuLFf=9|zO-_xIyLGk}$^*KYSQ)yS03cgySn)ue6^~E7|4X+xzB6)oh(v`!BH6hOdcJwq#`$TCw!XcJZs% z3eO#De)r?rq0$TX^E#%&5sW|_WALy$aHcd-Ef!3`t|0frlv{fEB|~vewkgOaH*rl-3FnRulv63?kSawTK%Q` zTHHOUA2;LIKlZp>{jL7rXZhRb7dK9Cw!ypRVu!clF!n7dFnDcO-xPyRiKIJ+%hQ z@^^RgpIhu&_~vSOeD5inH}|UF_nv4A;$?bWqbq0IXkGF`0W?m#(r$s|=jz{==l@Ho zI?UYg`1w8_#s_gz8jtlGYC1YaHKJ9-3z9h2VX2|cvp6PUfOY)VxKedk5#9~BpDgM zO%qB(7A_OdRC(bvsZUz<&Md#*yEFfv_PD@$Xr^(xn<{f^ z{g(3E^Z)-zzqu`U_Q_>;?=M=ecPsl@*RqgDHozIJe6!S`womH6is^Ys!0<>?L6jz>`V;PvedcpMo-WwSouIG8y=B6)M zZyxvQ(aRUg`YO z&!&6Rcx5aM)ZVXWt1I0+_navImwPWP*FBFnIWNo5!4hW8ApV&(OM=Bj>%n(#*Tjt? z?@mmyIm>tM)YMm(ia4(dWppiF)Z`SoJFEB1oOOR|o}Zfb_V&x?-S0Vz;*QPHoATn^ z`+`h|z|*TTCj^V{S|sRjYxXpi>i>Vg`#y-Q?z*`&(y`3gT6(eS`&YSdEPlPsuh#}` zSbzH1)H!PNB(uCb8OPqPTD|U3b6#VbUB>x49u_~JOg>xuGAY_b?2-w?!oTYCtKV5} zR#<7np zy8^UM>CyR_9p44d9*f_c*1PkZ>n5JJH#R2wW+w68a5)t0Z!5a7x>xkJ^uEcFrH^~f z-Tr>f^k&;VyQ|OUlgH)c$lD4ow_YxvucsZp&g3o2qJ`Dp-)(!=5|+uC@ptD}!5fb2 zrPaRdZkyNtYp=4<&7W5O7Y?kOR(oCHS?>0`WfvGWpWDA^W1^$>DxKI}CQ9d*F8y8F z^JRAzTgKwVBOQWj5&NpY=YjTmNzI-7?d4^4CFxiOg;}81_%mf@3EvQLuFmy)g1m}9 zspg;NgLnCqKRsppzj$xV=JM22T}Mx+oO+VEso-PK&6zV*uh#wg`RKq2hCbccBUg$_ z!!qjEUXQEx{q*^>ui8RAi)=O*l^2I5e4BUa`BjCqCBGhJr8TgfShRM*f&(dzw?01V z)}N&?OYcwX*QM%~k$x5rS%j}#(n*h9b8~XxDsIoR(`nU#zP`OaGYk}y{w^}T93p|8bB%1vIexbb9=(h9s32e}8@7|Gzfoc*fsfU#In7Wk|HJUG%o5tmJZ> z%CE@m4FSxhQYqamcNeVq9FpsMX|a3%ihb_&zi;1vbcws--k!>3i#(R_NST~Snexib zRM&9rebrf?ZeG~AhV9nZh`E>ty|Na*UXK(`g@-C zthH;BzpStSd-{y}n=_(ctCpW%czx#8)#04u6x3vDwc6Zxll0Wg#0+YZ6Y6_9NjaBu{Yb~`Lg z;rpIXD$Ih+yCy7AovJ*ScOiG@t@qxiU9%UYzP`40(%iYZO_{$JcbnaE&pXh-xGZI< z-nmzg{Eqj@D*xJ5GP(a-;AZI=yw|^8kJs1V`(@JG=NEIl&T3p^O@DiSDPy^;_t|9^ z3NHs0Moo&Y-`>pnK)&XKqi{_R3$IZW?~?f9v!-c`dJ|nF4&j$E{m;QFUehL_Kq!EuGq}~_r~K=j=Zk61m~^` ztM^X1U-?{i^3*FLw~oh%>y;kd9KAiy*D9>}l~l@huk)5?Rr-&rIlq1Q?_s-ql-0NC z`~NKEG&s_IPk+r6opq~LWtm*Qo1MH)T6R`dU(4$chxw=LMsIU@x>Nb8x4Dd!`o-7l z&V_Dq-xc@!+nwmCdDkv_F;?xBHA?B=44PYbO!Csc+TR`f#d6mhrkAbR5A%0dbRfKakO|D(}eCIUfz7VzTY>HdouSzR2fBI|9 z_a}vqkJaw3T%|div#Yy%>5?TbzrMase`%U6_Qmq~oaA-WH!f)m{@XLJ>eb4?%DTDl zU#OYw-Inn_aqi@d_vx{-FMf~R&kyPZ*7#q@o^W@Y+N{5;bQP3*?fIih)ul=vFPOL3 zO8w%_MR^&TI#Z3bt}{UI2+;X+E+(+~u~qn$%5(dQk9x%H{!+KPF=cK)W5Z?8)XAHz zx9gRY+4vF_1VqmU1*zyho(-AxSy;g^RaA7+UTg19pSYLoSvAS-^oG>rz-@ot^`=X7 zXk0$Z82jVOyhy{{VIg5&k&!ba6Rs{;miFc4p}uJr-ABKEUDz(y6_J0p;04nrJ+0SD zn}lB|O-ze(Q9AK_E5n9Mtx0darL}i0Sl%CT)>cd>B0-DkirWUB{dsyfHzYRSTp@7s zb%$P47H3tg!L{?7^;W%p9xd+hokg}J`ADFXJ1`J2T2+;^Wqy8HTAzrRsF$efTtUZw8sF27nx8s-`t0-{5o`^m6Yb)-zk(K}{CUV< z-|<%F=yT)l-~Be9I+X7fpXIuIebL_Q7fPhoTs-jT>GXKH$@7VBS+wa%yuK93~U2tz-#sy#bi%T5ibziP{dgtq}#N|AD(|%+s#QYY?ip+Q$%Hi_% zx3`AK*5`ds*aX$Po|=Z6Z_Jn(u72TX*SDK{-)uU)=vT2xL-qH&<ed!Ke za7z8@PuHLgwcDTM-PBXPSs4@?r&zjG@%sONx6YfZ8%KxfMCt{9|ML0lDU~1H9jg~^ zulC8fc7?zGhx5+=|9;2b|6g;gM>6f8!L05_?29C&{J6eld3i|So6B!Jbhpp&F!}xZ&*$_1%Mv5RZ@j(K#V++HT%`%%%r5a+jSx zd$#n+dzrUyetBFDI%dVrZIyBP@#gb((qHErCLUr5_PcTJd*R+btFOfs3bQhIsoz+y z+E;2kA@9i4DEo3jrcH)`wUnsDm%lrHKAWxlNzS@=o6g0ecP#ac z7J`fk2af(>G-?o(m-_N`YN$tM*gQ@)@x1d>x|)(WfBade*(mej`iXDrx1WCWlRNd* zmCQ{wSF=u@J3qbQboqbfd)G_NM320&3JXu)Bw#XGDe9@xW8Y?fsS}-H_D9_8&)4n$ z^TOS}C}hIl`Tzf@>+u{zdYSV!ajwAk1#QLOnz;2q zOA70M-``@hE$#TtrH-ri&KK{vwm0_oEw@>0wR5B@E^k^L=3RJv78?U-V_ucX;cVWwb#-i8nOycfEA?Iaoqw+Ro4K~@rz$83{;B`}_j~fc-)rLc-(z9i zs-CM9y)7s5iWc+Bwu9O0_lC`@`;~e9PI$?^)uBmScq|w!1XoKpbpJdd((KIgr*5T& z&a^|aGbb&-d2r^=px7wAg)H3Dvh44ljnAF5bMy0)TO^HB{~qfN3JA(FYG|AhbA9C- zf#O^K!KWAO%-p_Y}(WOjdhM`_OZg~>=Ue^TRsHFt`sqGdYZ=S@E?4_U9%t-LIF^3iz2NZe zW1#uYDZbZMSyx~7xz#RTcjMdV7RtoOXdDs!%t+OH_*?-PDW>?o`CiB@^w#eit zU1psd>~DLO<;9#$FBUOAFuzxE*f9CabNm01QQPy*vfqDIyYFG~()TObxP{k>B>DRG z{(0$NZ&Z6{ncrNg>1tw}aM%zm$LBGHa@N*_(*TtlRB(CDb36Ex++gQi_2s>EY7p zaa}+DzTf$LUh$u;zSX6#-@kM5o~AQV*w5nNMcV^kfBpIKxZnM2dPZyOx3{-%*U9Ow zULzW}YV~Sa%W3(0zfR-)m*w5~_u}sjb920S_Z=%%ZVcnQbe5;{$|FbS>s9mjKc829 z=Bv`JlDqDwebkeds@{!R*!bySGrM(NGB1M$(}9NWpG{L5+?ae8WHSXthG@C&-lST7 z*-Z1^T;aF>g=nnKVGlj9~W2ux72-)Tx>_z5vDcQUow5!ka+k>GrwKI zpX{rx9(P*|GA=0m{QJIMe!A=DOP7Lze_hE`-LjRdDec($h>edH)W84ve7?Erm9-bn z?4PO~UUW%8t>o~bZvA}{8=ucMO6^KE&#!rI9d3|uOE2SC-P-0=2AP@>yf&&%@1uD8 zT#Nap&YG3wrR4sqc;(DF*5&U?uEd1c*Y8?+seZ!yYrnqh?RuefdcAGj&HdGv@4r{K z|Jiv`;Hqzk-_p;rbH9Vu3_UwHSNijO`{ZLh#^F9wyu5cszU@%%Gq~QA5#GVr;GxLC zvqM7ifQQL0hS%%YOoC0L?7OE4nMdi#S~lzD^WCNE>-Md_UUT{U^@mG0Kd{{=Wu|mw zww{;m$0Nd*w&%z1{QYis>i2hd`|9>qy}fea+PtG(wcc+nTlL(s{Wtu6w_88&s)C8| zQ}O*jT6^Sdtsef~ZrQ5$BKz7+%ja{HrOk2*?!3Ni)H17ciL^E7;L#n^<*u?O-{pDO zQq)vs=QGFRVu;;|)2F$!`If5&nJ!+wQsaM5#O2?KD(gP)DttUGI?r>(`>0)k&fZtt z7K;}JXZ#FVD^hqnce|{K#EUJK3({Vmn{RKQW$*mlY2qU3>@DUi?>&FyySd1{PbSl@ z{$b4f?UkB^U^ zo@JUXQ+fA_FKd(mkpu{EdnIa%oc^XkGjM|9{{2y`Me3 zV~hQ=w2BvpzJFew3)~{?X=p>wVtNZzMdU9Rt#RWUk zKJ&>~1k9`XbW$z%z~$?!Z2xY#pW*50dEdW+91P%Z498qwxm z-ItxVKkt@?o?hR}^Vil`?!Ern)KA-0W!9%pMZw$5qSk6}5!uG}ROx5r_1|}Hrq7q1 z{(C*!FVoMU?4Ms$;BTJ!BCYj$T=iPd`MGPg9&S0`lV^4Dd#LffNFA^t1D{XK&A)zRBy? zPo=_;NsMnSq;#%4Xq}e#_Uh{CoOL=eI}G#=Cj6aQ{OpY3O^PnQ4x``!Efy}f78du`ctuhVU_Z;4>|=?SlYemZCU{)oxrBhNq2 zEV?pl;+@6r{Ke~zSwH@s@MUxTVP5kYzB0GA8{bM^DtUa@g_Yb_%fnzd5YQH1IN)$!u7)(!^i^%AqjkAoIKU)J7b=%?|&Mxm-N^Vsjic3HLW_o~S+{RPYQ!RG5;EHj=fpQTW7XGdY$VppBpMHvPE9{1auIliz>c0H!w;4=Nn zhlHEb1uH-I+r`Q4&r@P%^v{?$O>L#*%V!fWeR%KbdB3Ld#OZTW=gf)G)X`hE#8~Lw z-uJfZ@y}C?1UMHIKR>r@%1phu471}C-Q_e-o}75UdZp?L(}Y#FTTD(H%?VoD>GJzw zX4_P~E%VB5WlowjDe3jkl8?T}J)6JXI)46D)02Z+vaX&g;!ot&Qu(x~A~-cAWrjkR zT}ffMd7w*IUdM$qakcZeiZ4o=c4YDP{3S2aUrqAXGprRf&6s-4;QB^yj#->ubJwdp^1q^JNEA#Lwznd+ro-bg_fq{!aktY`z)W8ZPk0{{MNtUPpHI^Lww?@4xrr ze)hFBGiPqk2o=^nduMBQ`0e%4&sAnUUH$z|=H+FUtG*Ygy#Ki?^VzrC`P=90Ts`~i z7N5`D`g;;Gots1txAU7HOgP(ez1MBxg4Cn-zuy>x_KYl^q`UI@b5HfTDaU>v;?_4Q z?x@W?U@5rj-kYDbUurLGdNeE4F6)X$=Dj_YF7u+-&)=mP!u)@J%_mQ%?Pi|-{^oBr zO4hBou916K*mIWT`uj_l`OVGJvbuO%yx}&u|G7o+_=(Nt_s=>UD4sOibn+*u`8jvz zYA)O*z|3_0$II3J9(kF9%o7_*J~|o8mrnE*UtaPNv~Mmgaldmr-=$@~(!y`Kc zUBNdnaH8hrWjBj<3D@4;Rl00@w25)bTsQGwel{Ong82fD2Z=|OmhbDkfA3)F-9L*P zL(ZCAGHSSG?`OQ%+z3-n-?zg?RXMa?YzwuF%h82vnw&mWg%NK4<+wih_ zts@(6N$%}!Z*PB(KF_ba`-Pj-pR0wJjwaoWS#*8MJlpD7g;{rZeJ%gDZXSQsv#|A| zQX4KgH0xc`kK1#D<;3iuM>q9q{YyWFc{gU2_0Kze>#^aSHF^rSzI}PA2)I^y!T}eZf55<`yPE(>grkPDBZ^socRoA2Y%z5^1izF zV)lk<`LSCvCjKm6f2X+A$E`;q(awIcd%xLy#ktSl*7{y!sBm;_oOwF)g6Ho?uhf=S zglAv;y(Ta0%Ii)0-v5ewot=Mu-QDlcmPPd@ou3o(Jmgn(#)k0K_m6Cv)U|J&Ve+vV zz0+<*M`#~^ksk2AxARY|<9+78GB2OI-#+u=_lDBoRvo5ZF8~o+h zmZYOxpKTSTX3NZVFkha*SzUYnd(7;Te>>9Gt(YD8ZLan!)2#C`f%e<0&b=)4dfrtQ z#mL~`bS4l~*F`0>@lCv*_n()U(f^dT=Cn0QOsNIaU(c(ISd~@7)8hTI$+cTd_l$k% zMK|%XJG&}`FY23kdZyheN%Rq~EV;w+Y1id>-*0Yd&8V1vcZP4;bheYFi81Sy{p{tx zY<-pexTaP3?a593sVjdmca}2j*jT+TF4-h_Vs+l*k~t-NO6-=;{w0*V=F7a*-|xBX zc>l^)b=vG%k3Pn|a6a!?tKSr2Zv7%A(9n|XV&VfRa?xQ3r^9bY~wUlikhXHP)?k>@Q3)(5}e+2i}eBw^Nx*;7p_ zrfD#mY`-5Y^m1>)Iu3?&6VC`RybBdhxy1Z_760OP@d*Kww>?o=xjKEL4Cn>}28II% zL5=txA47(M{v}V+c)&MCFfcT@frW)Gd@!jBJeWIqTgs+e;JXAE7)<&=4TygVk_SE* zJlbC%%X9!@5`&aGsFpKoU_9X3@gHgq2Qy>BfumVj%{)vttLG(1-f25;0#V*z0LrLq z_U((SVLau)+z`F)B}9VZf&|lnhSNWrr!=;?3u-r?zGBD%l{o}jaAXOxLH5-N*aag3 zY!KyN7~9-c1$CNtU%5J&nFpd{K_O@%wKB5=!yUyC@g(qV9SjT%CZLTRMgJIV8y*IJ z_3UAcS!(72yTYU47|7@6#8p6=7EI%TUPH-{sKCIpV@^L$LWQVp!$YHk0*o-3UeKnq zIrHTXFg)NoxGRbc8cq(2K||%wxhFC5^eZt+=n1b;Wk7M(=ZTCw{j2*4D;m$3$QPlSsES&PHAX6eMJB!1NDE?lm<2i^A!shfp6?! zV1R`0Id?XLJ*(!4B<$#(&ua^{0uqez4GoM8I~+@SuNOnb!5)#ZZFm^^)zg!QDW(;n z!;wLvz_N;gxxqT*`VUE1eDs2roPsn&eqm@k9l~CNntaarpA29qXw|ZpL`fo+poIh# z!nzF)&8FHJH9&(4oUDrMm=1i<&~iAOtM!)!F0;} zeLISu``z4{J-u>G^!7eSMh1otpf1+wpUf!?hZk!w@=jm*0UUrIHr=^%C%<`jHG9?f zKh=eW8?OX&aWXJ4I59{R*v3!bNnr3O@#Ou#7!-C5-$8p7jB0l5hOr6ZiCbCdJ3V@W6G}S8hv+n6*}=*G z1_uK)GB|`86Am!{nZn!3e(@Jq-lQpKrtm@n-Jv4Fm&N9QxB{~TgOD^lpbj}RNPJ+h zS6%SX)pH5MVORO|Upr9Ds&VvkV0KViEp7(QPYfLV5IY*$#IH^^724*=2{)7r4%>xA!9dxBDp-yc9 z`|h6tV*-Omis@E_OTiXsF!K6)c_r~YkZMer;0Vjsub%LPW2^^B*{f1;GXW43#Q|!>aO6RVGTUdkAqm zBpf*GRTnTS7^-KV^tlcdZ|N6xJ)m5}=;d%Y`jsa`o41M}Ea_cfS);)u_i%BI#vZj! z#fE6RQ#CW7#Xw6xgTVvA6b5F8Brh)|Sb?cf19mmLfla&6g@V)WGvU#urog~c(W37G zik&4YWyVm;Ipi4=4k*{8FdWY2m~~L~hYB?FWN4%hLv}dF*2=;II|pnziwT3uvH)2`%2tNh%$ZTalUn>xs1zPxCX67<|A0K< z#C5Gz0#;lmLUcH=8SGhV*C}_Ppgjs+dCqD8`Fo#&;kAZ=qVFTFB?)(WAyrK&p3N;2GQn(q|mrWoSD6QfYf`z+)9a#J%L)-BH zMyWhU$PHf%3=Y8p3~V-ssUsvlPaFoBWn}$tK^;5&ZS2;Rb4l$EIYP5C@S_O1Ea$X zqf1ezbRVCezPOry!n(IsC;FOVB6mF1uB<$lvXZw|LV=+`lj%T1dxm@h(}53Nzp7?2 z9M-*_2hKM(uFazB@BPb`ytw-R_Wx_oE8czb<8c2JZ@2k6=C;4hBR6MjGqW=EzPP`1 z_nxBPdoQhxJ^nt%-{10+#?FiJ3owom=pdDFK{5#teIka5}kB<<7p)%m~uK9uJ-@BTi?KCX(HnUz7$ zl|kZzfG#6%g`1FV!$ZDMQ*g=k-oxK_vUZ>S(*^a*-z(nr$;@Cl(AfLR-lI+K+V=(Z z&*um(=9f@lV^9G_aQhGDl!=TEi&lOKH|AhqIAF|H_FB=?vv+&3EqJI6hX$P4aJYxJ0|EXqZI08CSXU}1G zHUpa_c0Fqt6$C@VCNs)#&&s^Aw^lt^DL3Q%zDv7{#WOD(?R|LBD=0W<$)RxF)T^OE zF`a`xt&UH9o3er7fx?&HUKVBr zaF5tKfHJ%kuZ>dGu5GUs#O18r^rR{`@w~XT*YkMWD<`As!%{yhZraS;m&Yo-_JP&k z-6hjc_uISH6`bL`w9|LDn*4rMbMJi-J3a2jSpQ;VVBV~66YmsWJIemY`t=#>fVX2lFh6PdZ4O7Abvt?W`&2X>4J$rOkV3rEZUQ3Qj&Yy@twu*q@7=O6i&+7 znB=heNm|jXiS9Gq16_Ci$v(yY=~~mwJ?S15YonK))<3^HMyR`zS!*k zx<&rP>(9$hUN*Kfe9py?elh3Yx3xy!ey2-jW)@cZ`uqO%;LE*!@y_z^TdSUj{rs8j z56Xt-{0w}H_U(&%SNU18^3ku(qL}~6`@TP)zcxmr{_mGuHZF!3P4PW9c-bI)0baEB?QjQvBqU;p3;Rk?|)c2iv7AW@%`?By?ea)$7R0{Es=3#swW; zUfu~U^7c-teOC4}>1tBb{vUF4ua{=uzqsYgi+c+vpNvyqEhtbd7xVXtbJ4L46O9&y z*T1~AZtok76O&b=%}+I*eGSU$hM=q-FiU8j6L-Q6haw~SCmxp+-rBGKxiZqDZ`wRr z>(j68|E~R0eChY6`I+*Y9eR)Kyr-gi^1a?Jw{`N>VOQ$hs=7mFRy=ckCNt;9CE-cI zQAZ9iTdYXEZ8npAgZ-|=mn-i5U0VJ7T-vgLL*H1sW>V1Zp;laZ9 zKY17*$bu?Hh6w?aI2hc$*89aixg7t`a@E26`RX@#-`|dX9;4MCZ+>w~C!5g0{KYbV z?%uw*m;FTg_dl+Fawa{E>4ZXe8CB)q zd^unKTBaY#;B0j&y8imVny^G)*};v;PudKc_D`+5zy0~~YkPDw*RC^4jj}eKBQI-w z%d5X{?vs|o?I%{$H7{}fJf+!g`Zwv?l0$2a{w>^n_A|II*Kh*VlH&kX^Bb?2|947- ztpx}^eP`RYmusJVo&U#e*Vfk+7xr(rOyB7 z;`HBl19qr>-~HVEwAjj`PY)7{erJlGxN!K_yYH5z$wz(9|LuLC53YSc`%yj!)Hm=X zRB%WhC}>u(JF%@zU(@qn$<6*J8~kGVev~_vDpnSqa{u%`Q{LMkMEYCt^J!wU9j-6e z7CRNcZbzh_jK!CR`tQ3YpP%w`_O+8=N>5h?Kd`WutKY}TB;S$Ox8t9EzeiqV;f?bv zXY(yz6Q>n?UB@_eUVY)cr$s6K_wHN1&#QlE7`Z!JIv?bsnE!jX?3?%g8$(jR+<}Jn z35+}polE=PcWnDp@Wiv|UEp!q59duERR6u)f8z1v|LZ*u-rt)lDt@Z;e`Q46JlmfO z>fcXXoi|Z0_x9&y2LflAXRA%`ldC>pufIxT`s#T#D?sXBI$eLmyZY&(`af~==6p&# zZ2ER~_buCeJMCh#bq_(cctdvP>B+PGEW?-mf0o}HwuGr+Ma}bc4uFst^vAedu*GT7+t~{XszkFV8 z=bvA1pH~z=khpa^>UXsKiN*8x>K>i?bX$GjH_mH9m*Vpxbes8Yee7barXOTyU}$)q zvF&}}UiK3$hL6vtJrO$_e5T$$`-ey6%89;*83Zy}8W{N%LA@Vu*{x@EFVDSp>;HF$ zf8TE2HmdwOspIdSfY`ZrzTVpZ^ziO~8tvt;ci!J${Ic-zlb@0EPhZ=Ub5FtIP{%!H zz8~pQTjq)!EOuFYW8Y01P~e+iXn4Qyt@SCvyVWzdIjHl?>Fxb?x#`84hoF9Whb5@& zxWFtC7ZgALh=RhytJfwn=Cr1n+^aZc$^Pf_+}6rZht_xs{@=Ol;;V=L_a=$w?@Zrc zKX1;IluZrl`~J9`IqqUSfxYy-YV7T@317rk28G3{{(Pz$6cCtpDuO+$xv=(pNzN~s zOJ~1i=iS~kb&Hqps6dUy9MsLop7ne6bRxGNxE_Z2N;+$xce7&Wi zQ=fg!KXFTS>D8%yw&A}@-c=p2za2M0TXf&6mVIJN%xn7CWUFSBcBKyo_jZ}t&N%g7az!h? zytr{Q=fg>lT+L9^y5hcnm-(|V( z%$)gCpY7YR*x-7O-ls)!vR1Pn1pMx~_UwQ7&%cvGgA`^L87UG^!zE`Sa0#gsmtWW%x^8Dx9jA?UnyzYI=*^##0&)fX_!)Ys5K3cuf@cJvG_^CVd ztbbOm6m4aD{by$^`{!S!zP|DAXT{z=Q+xbfWlhF!Ki=fan-cq^4W56z_9w?!|9jWD z+*>nG8OTbnOSe+9O21KTe_ltg<8-!H=CwO>{H@&c?rusw{MyU-y1DK3FUE7{Ov$km zmo>U&ViR>*k$1oIe!aVA%cmccxm~{C=Unbn-aBV9cHEWeRb<$67~EfU;>_6LAj_EG zt!MvEWOGM>0)PFVWl!hr@4Z;J+uiMiClj6^x{gbob zv40wG@&eVBrk{WOV04%HP+6K-aBP?8r=zQmetOy#8YJA~YY-tG=qF`zW>5Ta(>?o| zQ**K#st!K;YV>+_s8Q|PqRj_nJ;i0L-F}t-tpE0o*`{mNYvv!GPTT@sFZO;{+bdk< z?&>g0Az^(3@9rj15m6RLS63F+C7x67S+`uUX5kQU;#J&R`+5JqkIpw{=59Wj_w9f6 z{Ms+2lg_?-b7t<%>UWmQkJSFJecE`p=*6MP?)}Xt57hbI_PW0;x8%2VvXI>V{VEl^ z&)nK|>}}JH%Hn6&?zVL%`?oac+np~neeKzL=;+m!x$h)a*V*M}s7vfAG zW^9XEdfNMV6t7O6wV<4u_qV*_S2Bkd3E95Lf9J7*mGRCu)7SU^SLw$G9RF0iJ?55O zUhH4S%3ZnTnM-HagMI1V$3&iOny%RFH6VK=|F_$j6B&0CM#-CQi2EGanQG*8>scS=8t zStIV4WuKNh{O^fH+83=N1p~`KYx^LdKQRVB|L6Q>FWs(xcYCaEO99I_$MtS&pB(&k zHpGDI`98TflS|vbt$dt+`lGX6?1R?VWdU2+m(;GU5(?Sc$MWO3$)CzO|5q?={Cp*_ zG*9O0x$x+O{jXTVnTpw8{JZxcZ0?$S`H6uK_RN*et&+X_+H9)U(f9Vt3iw5f-d(Bv zZ(DtB&86Li6L@%EDLpMc*7NtdpZEFo_cmwmPd4}7i8uY0$aY3X^v1EvYrU)F#7 z{;Ik9$)VEgELRQQP1g+xiDmw21U;i_g=J(FIZr5yktFZB#z>e$2)q9TY48C@# z$^6duC@Z$YI@ZwD%FR(_A^)#5pRalL?CPiM_ts|lY<7+kG}3vqIOctd@KH ztFhLw_VIn8^dM<-orda#j}PykFTi7G!41KaASrbbJ4_2UhRk@ynFs{ z$!<9@=G)re-%oQ+{4c-c2+QRO3-pW@dFzYXY-AHQw0&hB% zUKe&hy{L1LMX8Rx|GT{8l2glTcNZYt;%N#oXRh)YUPV{&zh!_{;_hqjD1BsgG6Jy z|8LusxBuJl8l8H}`7dcrwU>3eK*%@qhzrHpL zNo+iRo1Zr%dC6KWQQd`d=QAFc6}<2)eJ5{I-zJ`E&6{yA&b**4duLz(!$FV5pOYV7 z6e#VP!RjcmcYnLX=k>G0ZvCBO!5{bLO7Ogl%U2&U8F&Z0Om_HO_Nwq-RZGpTf@N#$ zwp_omKq~IK@mu+j=ju&!zWtFqwfND;tnKcp$5$$Uy8P?urhgyo4ky@%F)2L08P_j$ zhkx13?ZuPNGCt@lm0F?j;qPaikKb7v1Xuh|`@nt6BH+>o%l;b@EdG~wB$-Oyt?qdD zsI6LYLTiGuT)zFE8GkmGuC3Wxv+mTXGO>Bm>z8}aJ$5N>ce|6?66Fm$*!tb2wuN-7 z?29pTXT5s1Y2)tDtGB-YEe~0`!QTK(I8GDTJL3#@vznGU=t&VE^0XkVJoAd!6I#Jatq z33sREM9K*7n5G=?=kc!8PiMO-{bEn+9(-M~wmN?6j??oto{@~;Im2KexKy33p>t11 zC{8tQ@$lJi3;!P^Kp4xzEAekCayG}sI4b-jhNO;PkG`R z>BMs7j%~3ZV=I3(|I~ZE(UyN>A`&ia%F=!NBVIFJ|NrH8IaklTyJyJTcyXrw9%a!k zk?p^ByX&>xvg@0^Ugy5uzfGq$mAl>DB$|3^!^BOmzZhO!{P&XY@6%aI-Cr)(`QJ2& zT+7}qEVlR4#54Ey#j!RS?|QOtdxYR7Z`M-i?m=GJK(Y`=cpxbC$oZDo;B{B3dP zWj#}wpTDg`omepJ8z(ePe;2m89%T}^k- zx4JIiFnWAL;^S+T%kR!^s9?N5Ghm*r?Sey>-WeYc*{Y$m=*tlXgNfpuk5$A3C%Sw3 zB(ZJSYhakkB3Zt!ZGooOsaL7<6e61DZPdt3Yg4NHH#6m6%E$ck`*VY@tv5Z9=5XWv zVpe0H+xjPX4la?~lz6t`U(@9F-U)&G>-9gE=N6qzul&w(tyorW()C@oSrI`u#FTe` z3#^q&&ySz}@OgKj1JhDl>1pd1HKo7fQkC6b|0#5;Zn79l_k`T`&zU#AKfa;-L$7># z)X}8A`1#eBmp#yz;pE=>^7({T<7MXqf=}x!No-EK^8C}g`S!Qx6!w1pv((R)*E{Dn z^ZE7zz90XvKG`{c-?Kw^N*e4Y&F+^C;kMRsyxLyq{m~AwmCdKnt z9o*7ml5*!<-Ah|Zi=V=r`=3^5hTgeebMJrVWqWOwvS#2M^W!^LpS#~J zx)E;A?>~O{c9{9CRU7|pfhP_pqkP`&TJ&A+ z*n*(4l%EMnH`Y9Oe>XtwhkEXsZKf73=OU%n$X6VF)cPr`%JMc>>XXkeSj-I`_RqVr z&FO&DL7~m3CqA-EJa<}tg_mNVL*>2mzigjwI{#`u&zW~^jV0k6ri#oG+?N<4cL}%e zN%{Pm)5mHTUfeC(=xY34`tkx%_HR3t3u5%Izx1u``6cbO76gVE=SYtl?cAD1VALX#vJwy`srhIUWCcK6+@ecQ?pPp?&;apHIJ zakk)pVZA}AOT!!{#!Iq%{dE^#9Vy3|?o;|o z)C&4KSFb$mCdJl$VR^~rjm(?AU5LBd{v+&*tmqlHZ|==pp&`q};-X;cvc{1!W6JVBKQ1PI&vlMG)Vh27sW#=`PfCuccJ_2m%c+YDQ4`)IVoJAQhu{6tReXS=WNoM#`NcQyTX6z8QGKP(~_%LZ#` zOBMc}_DXWDeR;z#+nRM6-`9l8i3P0s@I3wg1iSk^Wtoy*{WEPY^rg?4-n!*;k;CS) zvcK!L8ZDpu%4ACaFP_bHu|8f?dfoXwUR*u>%J}Qok5`ZViwRnlkoa}xtEuV7Ro-1O z?ar-Q`$D{vRo=}ncIOJUR{nU7zvh$WCjaNqdbG#UnrZLJ)Gsq?_PX1L^396ju5Btj zlW=A$OX}?X@w<<_+~0gY=KM9`_7Jm8x&k_mH`5pY`(*KMdiL>q?~IR!dZwq$Va>W; zKgG~jJ9+*0y1+Kk#wG6RJ!WrqR_n9$PW+jzo6t0G--)K(C9ij#GCB5Db$?lYTS9>E z+qk70%laPKzOv=F)Aybl70{`;`&{**8B4y`>|l%F-ZdkzS9L8*$@w;2p7+l0MZ503 zxRrgS`Frb|^HsMh7O}tQw@upkUN5G5g7mG8Z44&I4plwX@~nO<;jUR=n{Q{~z&FQw zv7L3b;*PHstNnJpf9p~)W6sW^$W*&W#z%I}Fs|nNdaFR@L7d3{q}l5MJ9Eb7mnueO%A`rh`{k^Z_0hkwgj zKlqpP^L60%r`OMFr?!8yWsKZwck91b_I3RbgF~gE@AnBlR}i!Qx9MYkzhwRD={m~y zd8HEz9gkdl+#Zt3662hI%*E5oYgN|6%TCh!e`Wt>{9ak*R`Pc3-TM5CyvL*te(&5a zCzVif|Ht87OO2{;TbW+F$Nl}ZM6#fR+yCd)?~@JK`XfKA{4)Eh>hnG98|6W?Aizm!q*Ddoq}l4{)<4m)aI@5;NdsqtXSyuCWUHj7Q< zPiZLqK6&ZM^F_ANPbRzWUzsB}W!9Bu&y19Vy#K#Ox5vw$@-$x?<6Lgd^f~|E$L6ZD z(-N9Emabqo$zSiaE%KDofxTy+GtZkg@9}+e(|~ZD_yslJk97QgH+RGTeUXOuA07Gl z^R?inUk~DDZmZjQ>eRK<+YY73t34L{aPEX*n(GNa(KXkM_Y~`gZu;|>b^pn=Gpr@+ z<~^2i_YYgFW5yzTOn0VkeNOah>%M;*%2v)wkXa{tznRzQuHnJ&KD*z2y8CLs#fek) zOa12O=35rC3E!LDFB>rV){kNXx4cuj`^xOEc}JUrNEO3vp$~_$f8J0K=xvpg=oiaMZdfWbC7Yjhb@FPr zlbej(s^z{YZeuwvb8Oq*biWS^iWFtqU-P%G=&ba%x>9Dx(DRtjk=52M@;CY?)7sYhZrH)Ock)H&n?fls z>UL#Jvsq-z&$RdZH!Z)5I#yl5NCz9yLBzw7FEZvM^<* zeaQZud%j+9xa(kWj(bb$f!_wwapqMA?(ue;7W{8`bGG{Z{EwAut@rp(Ep z?cII(|L=_NzE{rtK7GgW<6HkNJ=edY`bl;FOaEVXnx40w=U#J)S5ithWbk>Cnj|db zqs#B<;<8S7{+UaEzd5|rRbGC{kb&pKzN_2}(>ZjOs0AA?%r;B0>HASS=}5%P6V3{c zTjSMEtdRT5>&=ifiFIbNyX*{?qbaAe?|w0UX<*s;VAEC}*_{8mpS7lL{Pny0edHM) zho4*3ZWgJe!btBqpW`T@ROhM`zE%ouUX<1eUJP9+T7kM zzVG*qxy87?thj!rph$kHeRSAL)%)vWG`P!hH&x~A6jJN%-IT9)Z--j*@|v{ZYgSBr z^56FHS+;{#T31ssPuxId&JH@tnC>+xBYOsw2f;<{G%A z{*NlQ&tL2mAWK0MN zbd-2S1j6E@M~Q=#c%ck5|j0uX^d0pj+Ra(%y)B zKbv6}_GsVpch&OI$A8Q>UlR~2_oeCc38sDJ_Ip3wPMK<$%W}1OUyN0_?t=@vm#>T1 zvP8@G4d*-Fe@Pcl&iJ`M%GNLM_^}lq^PWb>zX+?!j9+WfaJ`~qoqxU&pDi5`MmDet!E6fYAS*|Him7wb?Hf)ZrqzM9eMK3DO`%$ z=jY9f;5cCW^RUI;&MWG-ONu@J2OK!^xO>0P2F)L{*$%GYb$2S+zI)N~`Fkf^O!Cf* z@p0>aX&kbxcc#u_xi|IqUCOH*8opi4>wlGZe96NLE0f>qMfR-;mFcc3@VOZ@?}l{3 z|NCz{(WomgN-NWdz8Q3$~u3m?rE`` z_o`;jktm+`>!J7Vb;=z76b0G~4+y2`ZZkh2qguS6d~w{&Se8fcd9U3#t?^rYEw4bt z1~%^A38pL3&otf7;re%vm%HqX(S?9XqLBx-Wd!eCm*<%kBYuDG@5#W#7e0`7OL2j10C%ukZ*uUz3U%LHq=~b=Jb4%wdYI*bgduKfR_z%z3VmE8% z|2?*5Wmxn6OaYa>=FUIzcu$9aJW-tTYL@D%w~cF$bH01NOnS=hyoi0PV)srBlze#b z*IAxpHzdv2>)*Gz3Ww`X={lBuSjoiuZDmKtC27!LnVQ+egDgr){({GaE|h5|3ry(h z>!19(Ja75y*N*>Ww%8GSpWR7E?y?-7m(C+XNCI0qu;|9OnBA4 z{P|z|`a+F_E&5-koVmI2-XpV=qOGd~&#TUVo^8B*g^zmmTB9FxU#Xtnb#&+AQ?0ix ze$G2?zkJq=dmrvy-}Gav|CRlZH~aC|&SH_AR_A86elfT0gkHP!-&J?tzIYkF)d#kSax1!4GTGoRrpUVw?)JC7Sx0k!(S@e?SK40tHsrR?9D}3?e zf6d4DyO#d0HqT4F+@!gYIZF6X-$y3vqTJ`-#2W#H>e_y5^UK=xk(|WNgH*7_>OJW?Av` zxM}}bIHObYz=?eo+22gs?<+T5UCsBxe?l^AwXOAUvBg^!$6b)Hz2bCkZqbjwer6~3 zym;Nzz@@f4_w2nL?>Fx(i7UT-_vun&A*S5*XXj*nuXfoVn!=o4Q{SX@zhhs;_i2BO zxz*mWNv5n(ywL6{aL(b_oItm!7hCq2JDK$xAB^`&SzNwbE=6C?xBcJT2BCeqSy!&^ zT<$ZqvtGa8$4>q^_G>pW>ShKmotF1A!KnY@jca?neA|uW86#6oOO1pDB^*-28Oo1xq&X{VlTod(+fYA}j13 zp4fVLg?Y)on4Pw-Y7XqZd7Qhx_{DF}8Qbc=t}=IsvwpX5cF3xAyWhV5yIW>e(uB0l z2Mcd+PW0yMa+&fF6bD9yXBgD-4{{i!GHv`Avn82-vD|mbi<__9x_{>BgO<&z>(Bf- z_tK1ie|~iKj=jyYOT8}M|90@#+0yOj?{7W1@_Luu`rUr=n|G`Y-Dw0CYSX3iUGrhdIpmpW(Y3k0)t~gnrS{Qw4^~8TiG??N}`1tGF@_0EbX%zmv zR=Rv%{QDh;4z=~M*{(e)6Wu3!MfYgWrB7>DT`PN0*~_%zM8=kF0z9+ARxNDWI89-9 z+2M-<%kTZ3lSK#5t<9{y-m%~}li4WqW=;6E zptibY?mR{Xv7uh#GxwbED}C`#@6)n(W^;bOaDRW|@0F<@e}5nQV`;0-(6jUS^kx1f z6?{V9O9aJEX)oWXE^(rLZWnAVK-}gfb(|mfru$ocwc~G}d-ZPHDFzw!PL0KoCe%&; zNgXGWk8H?lj{U>iiWifsc(8_f0|al z{l9E#_KD|z=TFmJynpJ%*xxIHYR|p;)liq|<+EYkWlOm?TW=`{%ROIX{Ux`IeR7y? z$*NUMO!M!)GP`=Wk5w+5NA3FAw2)sSPY=#bEwQ_*7u&}^rCafF;nBLk=QlPt@14Qz7EIM(Yv|nL zqtnd!M7N}Bk3i+59*(H0cbe~$B^dh7buet0n!Rr3&53CTxc=T<-v2speaMm}XV0gK zs91}Ly$Z=ZV&b+mQLw?Rd-LS?oSvR?<#r4C?{9d2{N#m|$*J#W3iH|Xd&MkX|7sfl zzN!3Gw(qViYFC^3rGMqz<$bG+-lsWe+An_mxzR{;Z{41w`{Jrk>~xixAz;cSv$kl# z{cVdcEMLDXasFjtzyG`}W?$51=5ijI__^nl!}hg-=ieQ*SYdT(O%U(h_jk7Gl^ALH zW*ytOeBJcKY3rvyd zVVj?QK5Fs4d5Q~{`&6z~KXkZcduj@scUsfDidwZA4gR{HeL8pc-rQinZsMEB&8Hr( zwL1C9+%8yE?QQF(({7GN>8HQnI2y<#RN|7)^BIkFI;py(-MzJfo+JWm`y} z#uWAWr+!@78#mARc~#|`P5)+uZBB`NT>SA#;^9{cFXr0*Uiw`|>bCLhtL)#c{>t!b zhnViDx5_>D_wrNjyvqMa`23!5T@y>1^|AI$g`m;of)0&jaQ2+R=yOkL>U{-G;f}s! zwhe37tle^cp6OrjWs$Q33XZ!*R;4Ok4$+9Zv+TK{*1?)qC9b1X>|Ueczx{RI_4lDVQHM5!Z`!QN_P*50 z$^Jq6q~-hK;!;!2Dn4(PG39CU(|B3?EvsVJUirmGSr^`V?P2(G-lt`b&*lXROgPhM zn0?dk@1`?vc~4nJCxw_*z1;WKFJ8Ow&fMK%iKnXfi`E{0_*zxW@yv}qr#_@_c#(bY z#Kljajq^P=pEBKRrhKDk};DF%T#QAJznau ztd`S@optJyPk@9xIq zpDVQ|pKWFO6j{s1vakCY@0Gjnaw?CQL|p9Gaq*UnV6>d!`b8u?(erzMK492cW*sE<=3dU__fs@8?%2OA*|C%Hfiaup{25QQ1tx@> zPd3=>Tu`>S`R~H_VXG1n|NfO1%=5bGZXDMg`FN_-XWmm)M$8tqI-K{^oSUqo?_Ap$ z#{9G5VZNEJ($Ui8rC)dLn*aHj^6%U#+ojwuulymqzy0y*==?@!!vt`6OQYppup%uC-6-c4K>@w&^K*%{_S3WiP83*g+OWn~>GtQD(Oh#_e*FI2Qec>p@PA|O+^PjV zna{0yQxZOxf$G@Vb^ka2^IzHX**3i|`tMC6Hb$!*HLu%NzSn)U?W2nIubq|I3>DX3 zK3?|awDGBmy#=;PvG*qj3h>?RPwNf0V-r47xg$e0wq=gBZld`*uagIUuMbvb;`X}w zXesaS)5{%a#_iqLr@@?)-O9f>L4H%&S*ve7s}|hY^n-!%?(%vW{o=O$`4O*7eE-Gl zTw4BE;p>4?DaQw2+rMY_3j~XY?hrQKRL}k7T=I_kz_-WNBr7Re20phtAKx3=7jpSf zVO!lT{%iSax~r}P9gI^d-w-eT`zzA{-PKp7t<0Wg@#oH2?dw;Ca!Da z5p!2JI9bQh_HSF|)H8QBMWxo;-d@+9DDQmY)pXZoc7{Q>YCo-VIVPcBb~0O4TSM*O zonp;nUi-J%#LZbNnHa)x%GQ-Q8iASl4lSH*Y_^ z`K|nx9kP)Jwy`u=U%8_HKPM#Z*T2_G|7{FkTA_Kl6}Px#o0E9&lE zAOEoC*443?+|K^Z&Htu;i@=P{wR_jtio7X^uPje-E6ZbSe$1%GQ+M&{d*-)dA7>((cKkwqXl?xr`@_IiMN)-uFesO=z+M~I?+Sdaf>o#ru=JYJze(v+ut?kV_KX+;z z2KSQ-kJmN3=pD4IKgF^rDH)XNLaOu?nAMi7@okFTReAUAx5PD5H(lA55_Ef#?31h+ z2hPk>)%NfDvhT~XWvg`7*WIsMQpFY>{X}4fb$_11v1^a{YK;QbE9eOj&-5_iFmjpyl&;{!O}ltLo2!IVKt6M$5hje7$=xu7B%`1<@B-zAvwTd-Kp- ze;3I1a^OzorLSM7=%(D+{^ieB?Y!;$kJqL# zRJ$=q2u%{I3`!ATVH10IPv`EjeJf9`m6E)%XK%`8p*7~SMEbou%xy1QpF8!ph(Uel z+@?4A_VM<2-@cS%I5+EK@-*`=9;M>P_2y2$Y*o82dy39#FGp#|nHhWMN0t`!$6lBF zpL5gZ-3@2U%jW-oILiI{6dNhH>GH$s&@J6RsxEME`Y^SB%{~3fZkfEI|04O14SVWt z1<#Xs84#JJqL#2`|L=o^6Jl5o-Z12@3;n-^B{bXajp>nf3I&@_nLd5n&i*QI{_fOR`Q97o+ zHq2&U5iKKpZ8F=utlP2osxlg`&bOA7Qv)q}X%;_sqVsfOk*QXY?ww5~{nwTxmHzy@ zwEQRI1n(T%IuEz=|3lrr%Ow^5J|OmXX~jRLPZtl}SNW2)cCuaHT)>UkcmcM&6 z=f&)QUq4medFk>*OoBn}(ODZo!JW$SVp$unM>gxf4hUpz=wEjG^~wkrdxn~KQ7zGF z717!sbG+kU-OjtP`&Ka1)q4!KSL9IX_f)tk4}<%$I~VUxo93JK>}Sea zo^+mm{pBjE>Z@y4Y@dI5H;>jao$T6WvATWtFJ2NoazFASS z|GM1tz`Oz*1%vFh=EYluQlIq7{pG1w`|*bJXT?JwPRsHxX1<-h_s!N%GGgUEz2RD{ zZeD)y;&oeAg}HB=XQ48?Uv|QV*Wsa8nR^0X+>F~FBWij~l;_0i-{uoe_8sjH-@0*P z#|c>j&}guQqSw7c?K9(_JiH-%w(hr+zeL{pkS!^@_KHpMGSlkZ{`-sJ_B-v@nDhe+ zul){kKjtExC;#oQg{6$xt4rS#bq`OtbbU{(^wX#3`d9qxpLRtf^4N#(Ygs)n_+LBI zS)9$SxaO;w+UvaIZm;{yU&gxG8GY-UGRaA7yY9W+p>~lb+Ogl*m(JfTI6agt`|PBr z?`~h)kyN@>;lQP>Ya;eBiPf`Dc-nE4w@kL0?Yei0pPkvy;OXzVjgN2s5N)1vZJOz; z#?R8KLDg5XwdTGu*&@Yr%xT_9=XUSg{qcd0sqbaPd)Fr)uKycWw&bvr+v06pD=vJ9 z+^^27ZJNM%)SWwRgAn&l)tJlQ=i4v-^)D*wPir!0EzYY%{Vfa*UPx~F{Sin+7J^W!E@YMj=bbL|&n*p0+X|$-ysF_5_vXt6vwg4brzd8H6fpz*1T?D@ujuyxaZ#kSzm=xmy{e-dig2J>RMjH z4qIFAz}t&s9xiITeOP(zcinAbYqSL;Ca|v-@9NmIayM^nLvO_F4|>rnW}JN9`0umg z?!zzkPRP9=e}3ZM_gvd~j_K@m<$m&W8r$pduir+T{$v`n{{Q=4>+M^A^Z#D|+Kqde zfW}rcvnsAT;(zue?%eYGhv@3sy5A;zlNw6mSRU!+9X}?;=I1ST;>X7oubF*Iwl6F( zsaj+7!+V~BLAjh}`k}wdr~dm#?F^9n^GTMizVn1GxVvzJdB&bL{{0n`j>{jp!^#&? zZ*iocdb(9_%s;7sV;f@6{@Qh$f1dr~Q!2ZZ7k5s0GDReG(j_UM76svG|EDE7M}6NN z);Q5teC))(&&zqYhie4gxpF;f;f8;oTjO}sBfW)X3}>jgUNE)&%^>Z2W13!s#a-{9 z;9m}E|L+-3J6*ySx?1_>=6~B$44WoZU9}Bsc~i84f9KW&$F$vXNe_>EUsjj;_Vei1 z18aJ0{F{?s97+BAd(Ek%M*k`L1+gIL|adU;%-F;;`QU024 z>C1n)VLRKNoL?IMsNh{6Z{F_zt3>tJ?tc4aYPZn*85x&9zu~r3Ju0^$rfYZM(pNSC zdj-5+zS?;0zX-RQ!OAt^Mmts=EX>yb62CrZ&y;uH?k?~DeAvX%CIK3KF6FV^VJx{ZX*r;*;U|!E9yxzE8FPWtVmczPVfQCt@;vDfzr$39AOQ2HcshC%I<(Z@H8K5q9N&&0N1~C-Jwp-ue@BF#W6g8gFrpGn-b$ zu|0SF_=mM*dwl<{+^?43+F!AIU05&N7;St-GuUw|>y_lR|9SHI>%JuD?znxf_3@Xz zd~@uRcWA7Ld^*df(|F}mMe9=akJfjB*`n6}DL(QxdeifsWNzmT32%Llq~3jdR{Q#i zDZgdE3%gBq;$nUB`Bw6!7ymf_UR*t0XLjQHwGQw0wB25RFRhxTs9xUQ>dd3sd+nc> zt$v^%)7>@2_c-5)M|-1Fk39=DDn6a{_V?|wn`{1VpZri<@{g)g{~-p0iPJk%8D?~x zP+pR9;nlx055BL>=2icE|E1-NeV6*uGUGSTI~8+rbHewuowCx8r~O`=x%AbftN!~P zCfLsGKbY<>k@x=U3Q_(L{iaP*-6EaY_2+E-CF9n3{ZQp6&$pLEeJa<=X1)CW-tF0~ zZNlwuq)+o6Q%XO+FiX{|`i)`X$7iOZ7MCx7Z9JCs(4ng1(y^4qpT6;%XRMq3({mp0 z&F=jXRlnwr{>GvC}%FXQRoq#WuFuwE}@@M?pSK*9!2Mm-~Ie%X)FiE%{$wtluqrbN~HyF%P!=UYmc}Y}aj}$&*u#*4;jBC}&Y0 zbxtb9lsD_9V^PZ4W6f82pIqvT-rTgjs>;k@-iCYGsfVQh-P(M0154%qwA{IMb1l@W zrF_cWuCzgo44tc6EMScD%4hD_A(hG|B>D}FacxQ5c|G&xxhA$Hq_{}WZFWvh* zGqS?$uD&$O{oGvb;r_I#0%hM~S$9*bj7F+h$_Dkm+lP9Sw z1D5P~cmB_=%%!hVUvX6})yxfDT~e8uA5c_!_hId-kfm!4I-80zs{*Rt-u%Y@$>D6m zi68Sm9r2iHU$n(ay+CI6+N6m>Mr%sN@4mhGv2fGJ6LqW47i&N3)7roM`9!z1OJW`- z`R%>Nc=on*nwIsY{nnQj>@S?z^`=rr?6wPZB_Xkn?=7orFy;HzKhM{c)m4o{a5XY z+olWk8A&8}OZ7Z|_h$RqU*G*-L|bjjp3hSmYyR%ewxYe|e=LsfJ#=E-FWr!c*2Xgn z%I~-Qe|L5&dxu7GGQ*4$ryrbNd$GkLaM?lDIZs|bHuZL}e){Jt$IryOL5Ju6OnR{S z(!~XLRV0h1XeB?tac1XCQ8Dvei>#j(E({X$cg8VP%q%-&G23)nR_Z|!En%OEKdQk| z;ZrX5CA*9DiSV4zme2YwDY5y?g?(YRU*}Z$wZ?CG{rPgR(uM`@a+59AZFu2%{_$EX zNxfT}|Ngt`f0y}&mX_W%1CBd~4zA+ek=I}U#`5Ge*Z&gyXQsM$%&~h`tJCgiaIXIA zjn8ez6$B?9uY3PoPvMiD4zsVzlYaq4)8~9X+f~_?`bEIN>D%Mow(Ki=xZD$zO22u( zm!9T-?8%3Y`)WJ4eAid|xXkWj*OpaLxA*BY+u41p+`pXn^gCHT?y08i-*5e$^`UO! z*PJigm)m}w^~&~*220)a{$DX^cK^+q50puLO{lM2;rRLgpY80YLZ*b~*D5CewqNVD z)SCI=U;FlYji<{ZumwTKR{8Qd0t9kD&nwtA-?)&RHW_!LZvat}8w3s!u=Ygb{+`~N%1~c!p$CWas+*>4H z`ti>+=1%YC@)@7LKYx2?#iq`$A^L%Cb#-Y|4lk`2ba9*7J~h90@=53R+oC?l{$AX& zJbv;)UF%b?w(k#l-e}CN*!5IfVKJ}RTt(sfuZp+dTlz_{bkD6_E6Lius4imnkq_x= ze3d6xzS94CDs0lx^|d<2^XgAOJ32vPb?>hwi)Qug?G`Mo@s%_S`nyi>i~PBhT0Bpd zaGS4tm6sj7cwO0f15djbUw3@Tz7?js=|K4uHPQF=CYRn7PTbnJCedFex#Ps{l!u_` z-FQp9tAXd0wDXj>pxPNsKJ#=nI~fy}e@_HmIrCa2^4G8ByKaX4xYYM)%L`7^#G^H! z-g@Hsb0#MiRqjaSu3Q$&zj|-Z{d z+|8Mf+3nIz3#`%(@*I|{cH4LHTjp)4(xpX)rV&lIuhZ_gw%(PB;h#`D z=bE})GOv;8MuW%Cd9_3G%c`S%9?r7Od$2huLi+rdHI^bdmun+t-A(U%*(bk3>B92D z33)&3Vm8mpyw0#^ed_PB9ak&AKi>89(!wz3mC@T49eumw`;kNTA-jL(eT_GJYrN;a z+O5JCEur#sfqJ_KnU)6MdVH^+*?Q~w=Y+q{cHQ21;_1Zo_oinDP7IsR-JP_|_UkU+ zz4ae&RcC#_yLsE1hrTkFcGu)@X`e5zIPpME$)R`pw*!YZURWKT()&%esI|<#y>;`- zH|jnvc`cwJERo}&F|6&=5AY-eD?}KioO-Tx_@G8HgYcIbTYiPyem}cUZo=Mle-D=@ zzB`M4FXLLGG$FvkzfRPIcU2sC+s)nZ@A6&ZJ=ZO4v!=kG+qJ)DJU(6+v}li2ahFcjSLM5FET{Z)w%^@& zD?4se`Rq0JLQ2aI9e(m_u7;`W{teyt7J z(&D?Gk+DaUZ;tf!#d)Wzi|eO(I=8?6$8&0{Zgm-dr?%=nuGm z*;{v~Z*8ybII4Q$&F7T(^*@4dU8!(j&Hl1r%Zp#-`-75=nFKiYxn?{zK4rORxy33& zll3vd)@-ZqgdY-2-3Hpg(evvu`|90aCCNZ==&R`?aiSL|6je0 z&SKX_l+#%62OvLRxj=TfPxho|=1y)q7I+WNitoL7ML;)iqUj72&G-KD-)M>Y37ps0rP*>Hck%qW z=6-P2Mi#N-4}NWUeZ`Qof6u}=?^|^TE4r`u6f=sdOHEmy^tD)G`w#xz-=x2>zPtS8 zUAo=-|66|T-XS+NaJBwblGQ{@Z1nq+FKA zpZnPxmiyd%sXhJ4-ktWAf1@@C$<3^u|E>1Yhxf^o{&t$hUR8c;suM)1zW%h2v2ICxueBD&J`3 zj8wKz3*7YoyZC)$o#wv6mBn-2UQJ{RRe$r+vA0m_@uLGL=T|(nD0%4C61{ic((3Ke zJPfb@?eV*rk=_&gr#)&(tI%S%4I3W33)=lnuDXFC?{&Z1t8ML04O{9rZ)-c>_)&!W z)Q2Dci!~y34G#Sc(aX)*{9Nka%SAJ_Dw6nnUPq)fpAxIOBxWo*w_9U<{%NI&Uqn{L z^2g0L4c#aCrz!E}&n;_??lu-ToTk`(JIrF`NB^uXo@6=c;$-6>iJi zE}VO-_}Pwc=cQkLouU;G5qn)L`?{0&ac!|nJafKu{;_=I+|7Mu!wvS^0WaA?lQ*20 zaAKXN(%XBl*50%~b?2e{pJ>s8IT0n_?rsp=^w6WD#^Am9&Vs*Mw#nd&Bup zi97AYmGe*2zQ_j0-JkRJb?TA)$#1!SJp6jgxUh%e{tngp6Q63WD-YaenEYn%{(lbJ zzb{>#W3wxst^WJW%Z^vqPy4^JNp;&Vb!)u?&ptEEJl5~~@5+Y#OV%3jE!d;oWOA*q zG9^^;Kxaa*{pSh4OZ4BJybkGb*BxOMfX)=UDaiXWEvR+@%5Q{=AewepU>m1DbhZ)eV-sqEiweA(>ntM|XgT<2QdyXWh#9@5;rP)2{ixGWdTdGl_)^?EefG7(GNJkfJP+ig>Td3Eisk>3(8#j6{-k6C z%gy3Hzd!w(zkkIxjde|S*Nx}Z-`?=vQgGtxjVvY;#k-O@Gd?k`Vep-&H!pc>_PWMS zPNTGgJU??!XMskpzO1-@Wy*8c%Jurw&xOsD(v&n<*}MP8&qwwl$8N2V`+K#eSvf5? zcJZ$;MTdu68V7GZTP*k~X}Nn!!D+rWRo>jjf6Iff>xE5TthwgTgBu$czcv3-aHs6i zhF1%%7G>wJ4Bs{>^L#(&(@JaelP#j3V=l!DI!@|!|91Md?JuwMZMt)-^nBL&|ES(~ z%BlFM6Vsgd?T?e5oNhe7swbsd(c}N0^Y{Ox+ow(Ad0@iP@$JVW*_YS1^zON|w*Sx>I<4 z(hTpW?Vj(CtzGkP&em1Z=bWb5i)}x1du!mm*One%Bg$XRGcpYPcW0;LvbE7^<(;W> z-1GnZ+k5Iq&8A%Q+&Q@qFZ@V-dF#XFU!q2-XXE|CTNu6s$k{wKo@tV@<5g>pe$VQ@ zG==5tIzCySKYC34+Z87H{hQTx@lEpkuOBS~-uvz@v3WbwRv9o2l_T5yr`P2q#lD^vAYc%g|)|JVNelq3$t4-Odd+FR``|_NE zn~&N}PPEt;yxYR_{*t$J`K;Sha@*ca$$UM1<@Jhu$(OGKe;r@9`1rNCKO*iv-y`_; z*QUJ^-iC_Z33m>N$zCapSYE<9+xYW@i{Gx_TdVcsb0rEWEkPKzU3 zl|$d0UG~lQj;=c+v0Hjw;fk21j}m|1Mu)9k`)l@XD?WJ(&7M2VVb&;yLk5V?KdUY-rjnC{p%ZnpXQYDx45coWAXeL znWT6zM*3L&6y59A{z)-4Zv&ExW7gDcEa}@7FMVUt-Yshb!?$nWqsmc~EdO`qUF|&k z${R0r%Kq4$GF@-C!CjY6V!_?ZPfyG``|7=7b@|_i0+Ac4Cxd!PA4?y^@pm`QyEIRH zZ|~pDssF#LExoq#b?7($9j~_n7y7#%Oe2)9WT?@bO312J|?a}T!X`RI5_eWm7 zXEqkIdN|{1bzSx8Mbfgzf5c@>DP6~Y@PXM?`3cK!mrajadiwRhn9Zk5uRc2U;KJlT zLVhkU`R*^+5i;+@Y0w1Ir;f>zLN4##Roq~m?*B+==cQH2zn`>+cJENWBzUU$sz#{a zS_b{t4INQ`d*hOCZcdrJVuyt3%x2F|%83iJm_EBy%(yylUYgaHqxzFR*9#|n&-!!k z^D34{^?6@vYnHTqi;D_fyVgi!gV$b%cMPHej+MbIXZ>RMCiA*G8QEww{)^CEb#0Q+ zt=Bpd6T)pjJvpPgeQRxA9jXn#=W}# zk*nY3ZB@g@SGV4J>|C{1EhXnYx9!oOr72P=k!BZ;b+d0V{P`|ffA#$NTt$ity6Te{ z`A$vWT_xkzu(j;vr~murIlP_Ya?S3XFUt$VYxnwkr*YpZ{k_2KUecM;uRmw9Mb`Lg zg-%x!UA>ysu_E@wi`|mKOTP&otDCcU`IhWy>i2`E@aU-M7XDxI*Z6J4f$F1m{?=** zy|)WLbcP=H27eR=ZoFj zPab&ocBisNa5BRTo4bpcZ>K(M+rLx!Mf^9mhRzNUIPvuuZ$;SlUWQdhS0ul-M45QH zOqo}+le=RNe>KD8@C5#ZPX&e_{}g$+fWeb@`=Zv(pZo6l>(yHA0)k7;!R^L3puM)7 z$)?6PAcl6lY5nwYnh~>sdRN@(H17SS&QoLDGt0aKgywc=?1eULW-|KBl)vpfX?gd# z1OH}%O?Ppbm-TbS#vqmaf4~3zZrT6*bc^Wc*iYuYLU|Fr6FZEUyd8uq7gm7We&^m? zi!=sdK`^-azxLLrrdNw9nPWeFuc@h7(s8i3-TmH!b|;sY;1w`Ogf2W0y}>-gMg}x5 z3-WizoAQ^>OuPT@joay^6_IUblP~vwj@b64OO~CQdSdpUfDVnj5O+qFwd`Tcc9`7W z-PQZhPeBO`HeEjX!Jzy9-k^(@RUt zN?xpLr5BbY^hiZdF>q7rNu`^c)27DU{JS*bA5)Ohh6Pu&LjAg)YA1X(RZ&qr^+9s- z75mN(BPP(QH4U?gk_Vo!)_@{o`ug?q@K9-9wl-Q#HtXti_ERAye=Jizu!XK(ESKiU z@N4SK`zse12?n|)@+T4K(#zb+b1?32DScU3^b-=J-VI46v&G zwoAsMewOw84kH+b8H%>UeXdSrCi=?7tRpDg@!R<)e3{_?#4 z4}Kbh8UjC)Z(Hpwd~Q~5A-IzloECJv9VUx=q%!o{NcP8HlD-`j9O}8T+kE{=Q1|81 z|9_IA(ue0dgDqI{IOT_HW&XSKMpggT2knnZ%?#SOD?}?SNJ~sp?`ILKhXY^z$Me(f ze%Ku`%|at#L`&zvM~E&B|9Rs_tla&!5l5!v5rh=D(Ypy>n{zxTqiT?D^)u zWTujmF*rL+3Z8WJNnw~hALEqHkMri(L~t25oNU@49llc-oU1xwSPnj%eX;yXbH|Cx zKa0c#D%HO+swox4YieqOoB^@c<%s|&L_~fw1TTAjSR~<7jHXYbIwWx`DJijotXg_u zdy|H-w{I$M?5CKMXJBa`E*B(f$S~uC_t8x(CV~@hd--@h zft3SFN=oezV?m{vOfC9tHfCoa604Td?fe%N@(^l+EHi4vCxS>bo4orEuk<*}ZgGJv( zxKp1ffI>E;Mrrfuj*dH_J~qq;5ONYAIT3G%;I!$l4yzq_ax&QjLpmf!shNAq$&D-~ zl^bTXSiECFxQGMnqCUw3E-rZ|^|Qq+rR!!|H-Y^EB4j4D?ru0?y>X95YLyRz8o%)T zIV$z?cT_iTUpLj|?fuS<4x8@&A1Nml_tjadm|DgKO?tfL_ePO-VqhB<@f?5$hu}o( z9cAi4&vN4RXZO9I{zSxYim>2B>rWGNDo=ZVV=`6Ec947<=(Xw3`}uV@KXv+FoAYS) z(fGf2?gmYMq@t?n_B*{tMg7jSCD!69AHP+4_E@QRzPj(M`tX{kr?2M|JxDQXBna|O zm*jydH<$h@ke^U(UH`Z1%>BKQ+veJ+tb7yc>*Dh6$Z`Ka-6kUclYEcvFK|8?xMSas zryN`UXKs2TVE)0S6@0S2d zJsa5#1Oty*$QF7&dw)*@GzSrKO-o%#$^7Bt*`a^Bw@+v&x~p0~bKRro@dma3^2F*- zMy}aerLj^|sJL>q%iK7H@^gBr29VTqV&eO#LwcPqaheD0m)G3-?)fri`NSVTe-*U{ zEGzyIv*L*Q#yJW*`;(`iTYcdDzT)LOj5|6`Y zu~GhYH_IZ!Db~#$9e3L5FRD%2f6Z9yc6iO5ddCc>Cz3lWA4Ko0En2rkZSyQhx}7M< z*3jv3a;EO?FF7}Y+E_}bak+LCw@)~3UGs0v5p}gf_kgyW)!$mq+}<1L*VbN`E+9DZ z_K9ixSBYfVL={cVdOdNyy{1}Bp4<<=JlUU}jnJGT%fldivHr)eA0DSyZ4FhhSP>=r zPT*4n4@0neTi=^{WCi!11&|iezjnq1rA=D# z=k8qEo+&MPXVqen)8P%)EjEW1eoj|ylsxbx$@ApNO&=pVbna|+J*1pp&@Lc2G5X`# zY2jTa^4g4|)v2$(&zvNo8*a8=DR8;?2WLoeDa6*$d4jKQU)`mZWz3S-c6DFT4xee= zaz~2!z!R^|lb)NNU5NXsU9mc*yXy&`qLR|~$MH)Rie!IZoN_YsQ1-pzCl}*YlYU!I znk93dxdD`kJN8I1A8>gx!75ej#DxXtF0IWI7L`ydGS^}BT_-SohJrT#yJ@NiZ$Ak; zBl}K3NvX)2@u~c@MY(F-{rP6o|Mp&4V&U0iwOr0~W4NlRpyMLs8 z6u*_I~EC zH5@OFxxSftL)%)_tfrl7liE=i3xl~2lp~A8roCa!^8D7cRW*I%vPbbtI)9{`Onmj) zw~KT7hSa?(53g~`2|*mN^gf>?gPM{sXtk`|n)^Oe+t?L-O;=-J#=QAQo760 zV<#p}c&qh8diH^$NiHr=?!~|7Hvb>dqd9jgpfd=Xu=tbWf=MuL3_WIPHBpl;6R_AUttqb60=A$;yz}HrCRK z+e}}r`tLtQP=Y}%{Z3Ecq@xFKr(8XFSLnP?k&@Dfj~|}rlFo(*SeNh2`*eOv>*FAyJntJ_?xEj|z*%x)d98N}!;FrY zB|Zn0K2@yt`;;;H+9cy@zIOs%;q2$95WTl&;8Y%G;7ks_nOi7K26$x?enDNryQ>O-v~Tec>U?0MSiQo z4IwsePXO7ccffx6m&`j+tj*q{8b@TEUN$i%Y&!ll`g-cadAgfE-l+5R^Lz$Mt^E_X zze>=&RJ7;t{`oT1zU$uo3CNp2=k>J9%r`%UPIB_KpBSTh+v1PR3)Y%{>(@=1Byf_s z4U&jKZOtipe`;!%#`abjZ7CJcjM*qv&av~#!V8-x9pLfX^ytr54p0w2$GS2i=#Ike z&W?@~a+X}?6M}4~S?f0OoKD>nO^^XP3rr`6sASN6}}e{J)v>=Q31{?_|+LVuD>{pDx#*9R>Ugnt0!FgT2U4E+98sOQzk2c;t6HDk zf{)e;2&Qh*ue7t9WZk}Bq6xH*d0e-F&Ub z)BY$j&)z=0QTLYj!G=9|3{z%>$iHLWb^qgO@sxY(dN;klC_gxSH?bUCi&@w zw{Lb7yj$RN(7kKRtOo%f#Gg*kUn`}|!_603?w>oISKk2gnb&b2$ zdwlsBDpYQIM7wX2&D38v{%qbCS?vAp(p;5SXX0)4+Blq?q`EYIf8DEzbLQw2KRYu~ zf8P%$Cnu*J#h|qHVt#cE$iW`h7b&G4y8n6U(RTgQ*~ZIHJlqiQPDIJ*?!gV4KRs-E z`RUyJ%MyQ77y0OSJ9gTglKB)StFrTS+1B6RAFY?2!0laCk@Det{7Ox&$>ueWy>IQm z75Vn)asO0--zg_2zU&vAa_U^3OxbtH3wPSx6nb}V4tNk6Ku)|}b(j84u zL3M;DL8*wJ)3b9^!uPbu9qHXB8u6~6VuNq1bjN!B%N8dcSL(d>R;qUPUlDX(T`&H@ zIR&LfJ_q&P7l`D1S$B88xcEl*Lt$S&H`MLlwzD>An~H0@cjvjyM~<7%KD&RqZhWd{ z!28mj+g>mBshzXn&*r^*7Zy*;S(0mRJtOPn;xf~#@z>%b`qg#2>(n1UGvti^xMGQlOX{jx!Q#T^ zmi6@qpV@8C{B*r0EKl~Q>!f!rska`h_%FTp?Y`abw7|y4(e8DRI-eb6VrEYL_vh!Q zU$57n{_*kg)$*KE70Ji@rpE29lKkg$xQ#dU{5;z`kuEMSDO}SU)ReZ1mOWlovnyko z$=?UAKNIeiaPB=duheCUzN)FKnY_J%a=PC%{psfuKTPlFFq->@HOpgPmh+ombD!*x zE-HL_z(@R#uW)JF#F)E37sl>?{CK)A*ERX6nf;U3RG#weJH#vVE7qOq_>*}TgnwN2 zw}09P8c+BX1nP@y7Z;XS-=7<&x_R50X$xNQgKOVKUb^ojjE+owcTd?;HPTGxu0Hqo z9ME>yJBltYQ!+)fY@{-0mE93gJ-zg5zjxA=pFVrzK`o>rk#+ivPpfYHv98qmK6N(x za*sc~$}{uopR9aQAt2tE%rZeZfBsX>>709hKAT!(*OT?VKt$mI>?G>mPp6-nlEg=f{ty22W!}Gyhoz zZRf3j=61q-l1TBcRBpbztJK@APbTy8`QN{Od2P$N8FK$d&{8kYv$IS?J0Hkc zzPY_zSlw@mZuGVl|2Ba#%@bQtdh9QG^og~y`kTqmq?0l)udi9llXo+)>&e;kvd;he zbsLP={y4%CSy|Ap!*@?>d(yjtc7ciRKOQgrzNGMI*0k-p(Z^+7!k(`GJE`{i>Dlg2 zkL_C@^J`Yk=4aE^RG#vh7ISnoiD;~e;DyG zxX+DR&{th9Dl4mddAWc2E6YEB|1OQ*o@bPFgd_9bo}IbJUHW7`-7UZGd3#%Kq$;S@ zd7|5Z!N*1JZCc3`pUA({|Ln+HS+er7N88qSTBWB#9`q@mYDp4$lydZ6?52|YWu0B! z5BU_8`kUUwE4eE!5D!?lJ9d9@>f-`WUr&Rtr9Xb8PM@P1<@wGiRyFUZ=`uksCV|NcmuXcNk|%O+sn zyg6t8`C8u-@aXHlaeDIkvqz2{JGH0sbIQLzKaFaB6iAxq%}Lq1P$}&7wY5u=kN0gV zdg}Gg1=L2;KgeJpn92oeDXUcMuDYTd9oV+*ol@*86EXYv_;)h-M~}Xp=@ydHqr-c1 zUDJLJCSgIr%GrOm&fB{Bd;XP|tU~3b^DBkfcY0^7e`t9!I2F@v)NJ;0_&G1EUhml>x7AON1hUOyOfdhqYVs_t`!%0?bMEd671NDUIod70{g?G( zx85WMP%jP=J2TJiyAZr7|JU{)o%`>NR;04OyuW7dle06st=moe%<2?@57fdT@IoJ}gM zjKvJaDc57m!;hM-*_CFP=%?Lgn!qqc#j@kcoZ@o^OA?FD-Jf&od~NK~-K%!5ZhtrL z|NFhalHzyoTK#I}D}&nWmj14locd1k+tSWT?fiNzI`v=^tB}Z(8ooJoe}8#)i|MAk zzqgl1hJnGs)FD%*p`p~q*f(yznO~Jn`F@+PfA^=pKPket)M_Eqjr_UiPEM-VpQBj+ z^ONk%U3HcZ^%)jKT`n+ES+wlw)6HeQrqAwuopP@KcFKz)&y3>jx)0y4fB9K;%f8K@ zeujI*Y+miV@6y!WfBw9jZC{cbFU`-@QGC?vclugB{j=6;tjEKxV*Q#^c&9x44T{P2 zd(+-7>X**j(a6Zmz_3D%qk)lSPtzkM$=x;kcxt}N7d>}hf9lX%X-Sa->~l}}Ob@j8 zpSZub&Oa?bPFFQ`DGwLJf?M6WWox}pr|12?a@ds3GwHedlR1owRZXl;uKq116u7uZ z_T)M7RRw=n?OSv?dWlBu?yrVsOb-$4^|XX$6Y^?Rv}~FV za=JK9Vffv>_~lBY!m~+{+p1Sj37=xDz`*e5Q>mJTPtt6jZF_1So-_@bvhQ&7*H*8) zcJdOR_y0OKy`p@dbcn~dcN>G2|K{-ael2rcu=Ba(+r@uFb0%x6XdL-@-}LA4X&#Y| zt3K{8{^mb*iQM`yxi138&)=-rAgD84{P~BZFNLkGtwxofQb1R8&(*uWx4N8@mv`!= zpwHa8=WV~oWZv4c@^b34v$LOn*m-M9rm}Mz&%}FstEJC}?k>yK)Ydj`%G#TIe_w1H z-`3|!%^NltB;WsXZCh@1=9Lu_udEDqPfAYiy>^3@m37jzX=?8Ma#QD8m!G<|HM{rJ z%Q-UD=igR+edXECCws19{?re#(=QelJ-e{bc~kOnzT4*&We>~QR(WjCyZg_&ZI|x; zp2WJkfB$MvuD4qJx_bO?bXimk4ME%|9n1Q|Lkn@=}(@dboTd8pD;l{ zQ&V$dPY;i$r{_f5>Tf50eSMvJa+2z?|L?gUJ$kgnf4&{)M&8GzmlrrPd;0iHS+PRn zvAM47`zu#MENgyj$hp1EH*8&urgqqx4PR!lF@)H&9AH?r^zZV%)5XI3CT&men=ZZk z`(*3tShcU&SJM(2v`Q4d?hyR5?$&N+trs_W84kR6Q7tcD`M3Dlx%IXY(GvtYeuey4 zeP@q_PW5}1m6!jzZj8DqefdGqe!hms(Gi*d|I~->Pi@VdG=0;KqW!YlE3Y|3Ha~rH z_i=^cug1d1$7Zq}m^g8wo5Hs2>w1@;?|we7`pL)R^5wgF+Cum9GMMhD`g%3|=_PM{ z+sDZ!0c+y-?{jgfC{x_VR%=`RZOZMu-Df#woo%{&|I&q;V?B~aWp5&88l`sWGR|Tv z|5fu&%J9&iMN_}utM-?xdZ8G7PEyvH_eCks`u+c^lru_N*=4<>d^8eL_|2dg= zc5J*;cwF|_oEuUMvoC)Ba{b!cXmwBl+aqTiWn^r;y5zQL&Hitig{{A}^ zb9Xs0KkO7%KehdSo%ZQzx{uEaFnovy1?bi_e{6o{{44pH^iW6g!oJNsudO5Wa?13W zg*mjEB$(y5{{A62b3@w1HTFB&4>Igg(NPJBx|*%5^d#XG zXXL)>)iR#mPaAH(m@{kZ(?`X(Jzp0~d9J--!O71%`OKe~lPAtjysO?9*7wuQ^Xxer z?b~9qf|{~Y=F_>Qwi}%5mAYssBqa0c{^!X5cWWy4=d8C`e_EUA@u5X4o~*mJ|JRi1 zUhfV{=B-~H*3RDZv#$1?_T1Tw1(63cHNEa@3U0j>5oNdN9BWg=OPTK63(h+9(&Av8k>!QfbY15bzrk_82A)xZ<)bJ-4-Q`W2T=QRDT|HfJ zTGoSCdb~GF{8IL2s=naX-;>btBHj4N8ZWCd{k>l%1!}(jmL3u^PyVhgh z(`nH?g_pUF?<~Fg?)%;H`GwIN5*lqjpD|`R$k6b=#y**Y!C}doJw9pqQMq@%9RF1P zi)YemtFIF-Ob}o@9)FSP*7F?ODhIW7aVpVT|5+cjZr{5=;jz-P*So(=I<5aAjb&fh zoD*Kte@2_1IMcg2<>Z+06kD>m-5;l3JfK zSX}C7ez4=&_3p@}#s4n;3<~?QUp)Vb+#F5Oz4s<9cu>&Ze>owN`PrpCk83Xc+VSN} z$>P0hBRQr`N%?>0-ou9v-9D6my&7I!DlaS~^yDzV{gm7J`|nmv51RR< zu5PIQ{*L#?=Ou2vQbt)yBSl7th22hJ72~3e7nDO201qj7Ask)sU6$* z{qhcr%2z9w_hkLD|M#)qsQO#Z`kZ=DO@3yE;r`Vw-$M4+{Y`m!Y3Zl0*W*t!^V=xg zym@nvC6j}x8v_r+{*7NxFjhXf9cWbaDq`o`M~p?$=e?JP<=8MY@5ns7(AFsNtJ2NV zKOD`B6`gT=z8tx_-J?J3ZA@KGk(2Jut)Djg<#(6oO%t5FZ(6N-|IKZ=o*zwnyUyM} zrFr82-TLex^~ihsUo$4xugRKu=Kx3C^|$wRzt?`;w&dxYz4E(mUCGxuJL%QVKRd)q zU(ePn{_(|geNOS|C%-<$J)Mz#bbaXDS=%P%|NG^yTvGpKcmL7_J5FfdzP6$)w(?)w z?j`Rl#dlPkyJ~PKXYbh?8-n8I8oBkQ&iQsYyljGtTIseuCHE%IzZ>oCvE$0y-;I}d zCY)cz^z|vp=kRBhZ6}}l zopGN;O zCH@3!_B5N{Z#KIv-7;5v&r4UfU$ZtE@A$XY`u(2EE2dn3m9zRTBLhQYJA(v+ z%!OAI%hUR%_t*WpxPtB4w+rk3SafY(-Nf`@v-Q8J|F>7&_nWyRZKC0GGlusZd|Z=$ zv&X3)X1|-@z5D3Bwdbeb^zWH+{@M8n=F98fU+s#@efT>&ymXgG+}@vYi_fmNwldFF zoh&b>xV`?zCK*3#(SqZ@9A0ro&-Xt+{dU#2>C4ycja9mnGt=TnQ{JToVX`}mudF_{ zMXF5d%EHxqYLCaO8tL3w{Cwx48p^=zP@k2 zc0GFh_-VU*ok3FxuhrYScQcLCr9Rt-w~EKtT$~~O^L_pQ-MWe&K0G}9^lth6wUcu5 zZ*5t5Q7G!UXxye0&in}s0lb0?%nhB3CJD{lkTvn5+lJ`RW<~z@4_?|ItG@nxHp`F2 zpSp@bjXj^J-7bAB2@K3Xgm{nHNqw7e`s&2A62Ggzf5qprZ22$od8MImlex-YErz-u zpBB1Jc&o{)Y%gOL)3)#To{v9eJ@{_PFuZnU=I7gW@A31@`zvPdse4^pbpLt&?J!y6 zHSeE(`ck_6_OGbQ=Y9L79KZjV%Ki7b={qOyM_rqeG|%05`N?X_ukB&&?6Gxo&aI!l z?O*B1dw=%|GFeaF^{TRS-F4?zF<&ORsO-A8^uT1U2bcCFAG>qH@!++(UmV@G$KT(R zeiX%H7_0XELyo5Y$>M_hF^?tK+O7CnO%kpx*r`#=F2B!C&(iYdpZB+we(y5N*!|M{ zUd7?nzn45*zwP1GpJ}TvvCG#aoVmD4x9#uTw*68I++AEkURK%v`;nZS_oDvq>3Q59 zTWmky*;x$gV~6gNm%6oV*|Jlo_4mKI_}S*u3FS}EX6J{!-1eH4_t!5;lMDex1BMW1 zmIDk46aTH)S@gc_@iJY`_isvPUW_t0cGgR^Lh@(L)JqK+7ti^+eW+G4p3BI%N5{s* z$L;UK_m`IYvaetJc$eN@6)hX5w*G$sUZ=cr>;Fkz+~}sTeCqylhvL`j_@4gjAN~B7 zY4+@})!VW!gvd$R9GP)Sal#ErhS%T4(;vQnIY;N@ne$UWObA#Rzq;?G&6#6=4&MEJ za);<=+k4v-@BWJ5tMB&qR$0FyKuGKS(uB#}pT8X1J8}D;lRxa1i+}ssyy3^OY14JR z?(2y@T^IjF;QlAK#X;9aqZF%a{>@*y=EAGzwXIL&hWi(2w_o{we87=!V_oJvg558DFisG5N=&JrF z#y5wzYzkhjeD+1m!LptIe!bp%Yf|Lx4}LQY4lez$ea)IP8IF6huj?sq(bm^Df5w-0 zZ_mz>cXw_s)q1r3eqHpo{QG+Lf4@v#`n0&HsORgvlRKZ!%YJDoWBX5hx!=yRiEHKL z*B&cX{iCa^`**(KmGgdct$$26ELmFm@%Q`v`nR{`PHyEEuliON{?qc``}+U4pMEgc z*FT@}y7tG1#Klf=#~p7ki7zYKNe5%GXy{r=4%TFJ)1%;Iz2+i*4(pxBGp2 zds}_x%$dg|uB;3`ZZW;&w`t7wU-uTQU+g#6%G1k>D}Ne8K(7D;bAxn=+`j2*^~&$h z%}V$aP+9)I(M^LV#9WH&?EP(VYU`u3SlAd=9qU;5eMZ}U_02{p$J#`V@=sSSRxQf< zR$pgv>1W_7ny{yZuhft zm0|tsjXhibhfT}+uy*ad|Cjz}?fh})8{hozeR0!I9{;@T*1c&r&K!Cxol<@3pz*!y zyGz+S`>l#w?{?YVR@J@!v-$<&>{~CtXWfm{%li4dY@_?-;HQTzCqI3D>id`Y^NVGq zB~#~Q^YiTSi@I7Yv*@n*gDlDYSrgqwAB&q=U(aBEcV?07?37EhR5z787gJtxt=O44 zYi{<<@nro;7bKpCo<3%? z-~E|otXlQ`l*Y6&|aRoJ6yX@#xm))mFa}yl+)96kI8KKwf>xMOi)l# z%lfacu1-!nJ4-URbneAhNws^};=*Js3LN6<|Cavz_xru7vhw4e(=F}o(o-k&+kTr7 zQ}glYvh$KLKYxPyE-!CvT)edKvR3roxt(kUxAbn$)QjD9!zzAt+uU9EqPAv5M#VKB zo2cwA^>|(5;>FKpY$`VVc`X0m;F-uaqqZs^lMOa?cmBRNs{i{szV~O&+F53~vjQt^ z>i^X|zVlmm?YnE1MeAI*Zl_J!8Hv-ePp0Wc zr?ni7+WC4#Qap2|Z2xij`a2c2Gd;b$jPzJu+}{3P@;EbtzzmKC#skbdTUkF{U3Bx) z*-1Muz2DPUAaPi_w)Eq{xp9htDcb7`)tpD9(8rw`enz{&*vjvu08J9 z{A2$1b<@AUt2(gao9$$`PS2vu+kHmm-PQIn*;{`~Z@>F|!>x$Jf7FlFX%(BT|9Q7I z_36_h8)M&n@f#iLB6e;lvbK_REJ}*`BYFMvsk8M{tnI3;K-Of@LoaPuuTuIMuyb#lq&`$s1RU&rSc6?EO>WTj2HB^jt00&0N9$nHQE$ z-TeCc`tL7l!euV&nLRsrwcx|L-S3Q|L}rH`%L-VV zyI||BoA)zztQ6fHmQnHV&F1s7wsBnlUH|8!JE$A|=VO1piPJTM$?tTe?Dl=V7G3mu z?e<+;<)s!x<<717^u%-L&u6oJwfnXP#Z13=J2X5t^~~>_Fvs;%58vYZH8ni0F!T4< zKO2P(z5coS`QPyP+SFgSE;jtT>~BBy;$rvHtJm+#Iun?)%)MXk)Aap+j;=Vx#t_1P zkcW|>!mqw!&i2x|cfPHk{`AvCe~Hhh=e~3=KX6}EMEv9u)9$DH*58|W(fgUeKc-L} zJ*_CWI~Hdi{*_wr@8|veldmryi~J>XO7Fz<-D&iyepT~Znc}st^4=_%-PLyGdyUPfo`>&ep6iX@H#t-F=gcn|SN+z#x^nn= zzkkG>uUrYa#cx*4VEfx6b|`G=`g-qETtT+?^w)a$-v80}l|7`wjK8vSf#Y|dG*=&=fBlv@)uTad?I78Kf&#`!{PF~C6|4dozD0%d+O7<>uhh{yjgTw zcl(Ll?RV3*to^F;=jy8a;&BxRFKv>lv;Fho@Un;R^X;`wQZ6qDh<2HMu^{&O#jom7 znSZ}r_K%JVJ07L&89P%x>iCDv=j|q2zuR&6(#C7WhrO!@` ziwfmu_)rgOp=_ReobUAGWc#Ud=WP}8&&%X*x#M#6^Vd~!^^=2V=sylSH~sg%n&@L| zenb{=eUcP;ptEE9ebHlgcJ|p=|Kna9bU8F$ZeJUV?yGHRYEm^>w(sdt@6WOG zm93O6Rwcy8&C-wDy>Dyo_f6k>w%ep{Tz>zh)+w(TiL(Ehlf-VnFyiFvFaBp2IYW*0 z__T=M>z=2~dk~-T`rU#H9*yrWURWJ#{rUQrCRXk}o9c2qS3kVBqwsM~rQO$(d(N1-oYT^eqVC6`)<`e*4t(ldlVK0UkRIKeZSvs@Tki5T#eZ)(I(zdTKBE)4=}1QU>zA%dR_j-9n_#y1Geb6a zZ2bbo`*X|hW&X3=nb2tS<3Y1r|H8Hti`{ySV*R44qH{g}a<6{4sqF|mzucD$`z>>~ zZfi12PCb`!b#uCZ^1EbXsh;}3U$4)ry_PAy!2W+^*qVsMU2FF3OG-+r_{`Ff)xaRZ zu*WA_%P(@b&$`OjnUcTmeKyK|thLxxeb1Txb?3ghE-&8n^`!l3p ze=1&L{A^q4ld~`FE50z#+js8%eA|l;|LVTFHhtaM=-d0^FJD_fp)-%IX64lPp;qQ= zlueV8EDO&$SWj7V_x(MY3Fn+1cWf|7?u)%{x2`$GW4j&S`|Cd!*#5ltWX-17=bhhf zt~Xq`ZmZI@ZKu|Ct+;sU(_?)P4s)6V)#_x1ENTqW~%*}9Z5xHU2W|hBg z+e@>*YvgUC!q&yS{Al;$dxrM&sbP1b6I0{2s_x#lW1Dkk=E|kp?nlM0UvJFd@IaY? ztwC#1z0aE4`=kGTds=TJ_R@=bgE=S-`aHYrWNE+{lLrSj&ZGkdqaPxd^Q*uDO95&!j+zkiQrZGCf7?Dm%|PNS7! zdZ1|^_3Jyn>NbF=*F2|^LrVU ze6e$dujjnGKWC0ibhMPbUCj-P{c}L`7lEm7zw9+qJ7y7oX3y7a(UWFo-rtfKbv5_t z*2JeWj0`{a2edITtcvscm06klN@DS)SG(5jeKOCkx%a1N;(UcwYhsH`Y(v%7#wKkE z*8TpYJ&d7jwWP52+}T@;D*pRNU%RzQZf*_Abl& zR^eBezV@ZF(~f&zw~K}M?Nk@tTJ`3u5~I8BZ0FcD3-+w}+sgO;@_7|ob=$zOIJN9= z@25D*?)vv`-?P%!(!VFZZ@w(e(z;8`AY!in_xS259h4DwkA^f^|iH|-{0x$H^0R)ThcJ8Kg*qS?|sI+;BuWi`wk{D#HjCUyRv$s#&ILR-)C-2nKr$! zDa3HD^NnrAyIUV`dnCwc^6>hb%c~G+P zhnO>G!|EC5x^HjGjedE1`}#o9m#=JA_1pj35#A)XdBVxi=`lr}nH!c}-Q_)9Z)`iS2^zw74%&rcdG|B!l=L0l{flRc^saByPHZS(V~^YT`$(YjkJxnQ(-92! zt{**lXLr=Y9j|`~-oCa~`DkVIwLagdA0Z4p|CfGd-JbtqM^*0Uhqc?*q~AZ8%=g}U ze_-)^o`$oxe*dfc88CfSLo8oU^V|P^S*9)Dwmf$5Xwhce@IIX3_|_cIJAeD98F?XQx>Q8%Q& zy}h0O`g7#Ue^)1L+jGZSw%cTaF?Yk-oX0m)Qh#spEohytH|?6C2}mgU_qVsc&zsJj zK5cxCz21)R-h#FFN@LdT`Q)|y^w$>`n;9e+m}D3Y7=Fyys~-Ghru@DM+n4=UF#rBS zz5JV$#!1r|>8Dde{?EJkZAvqEjJzhrzM1idVESbi8LL_^uhVZ5RF`xA-huS^3_3uM51aetg-UD_gf+IVi}fw>5K}hPD|~@@mIo zkB~)ge@h4j9)5JJO6*I^(QDiHFEH)5sY ze%&(sa@_EW*pYdCiL=deeWqXBS@qVAJ-2c>AJ?WW{rBwn(ik_apMRQx;k==y7{iYh zXa2qNB*!J%;S+}hN z^*1hCM)JLXzDVW9QpY6O_V1Yy6K74%JYDr^4$Fa$frfULW}-{io$Y<=HTCuX_-5~` z>mGhQn{(ei{qvcB>lLYytnub)dpbKikJ;?*c{p=z?CxtOQ+)mW z%+|i!D#TEIYuU}{Ns}h2C?5Rz=d+}wLd$CurC%CMvD^y>>+ z=P$fS@jmVLYR=|p`;DdY%0joJqx3A!{7qhxxN_U^Z8mB%_t~1d?GfB%6+UHOY?pCa z!*`)@hdk=j7^X0O?QOXH{^=I^7ZMDDO)U+h?^0H;8Wi5-2 zWZzz}c4=u{%;thkk(<+serd~0iqSH+6QW@{^5zir=lx-@9# zLZR4*chbr1X(u+GG4W$kaBy*VvDj;WpPO;R=I39o9^m<>u4VIRO}?{B#0>vF z-%8JQ-o;_WM%STvzCR9n^4qUt(mv&x2OJ3njM?Vaw_b*?{UZDho62mkx8hv zF)H(R&0KhXU)-YC-=|GD;llm+YLJli|HF^JzWh9+GrMl?l65uL)+RGoPn|O5MEU(% zb!E4n34ee8E#4)*df`m-)oN3xp1OA<;{G0v+g=PYqEkrf`0XlJx%Tr-QyZ>b z{?3wX9J@Kq_j2L4G6`M=i)xMr#smGL(?m{x*A_d$uPuJcRrj`(;|JATYa@fJKAw>) z&)nbVSQoSV%C?_Ej6eE10-iGl1g`vRzen7<^4yCK4?eD(hun+>b%hi2`TSgGPI)4; z&E)>-qSSe}hWL$~=#dAMJHuUzT=>|-U}Uda%54+V)7!!+$IpzD+mWvPoamuIlRcsh<~XJ$rU-!c859YlUhIY>-w5lyH8Z_V6)U*8^+Wgb5#%_Ab+wC$8?pHFNe)>H9*;0?hS8knaiW`?cHGQ+X z{ABthqvv8PHHx>#rcAi<_GeqmQS-u=frV%D3oIG>a*J96cjip(YhBO9*KPXkxOk>? z22;Z8O`A5wM8&O+EiNwpUu|9RpyAD(oxx>qZYXw(>wo)w;d{NEu+El+y?x*6#D%mE zE?&Rw%+*!r9VDH#lXJxKiu8WJ-^s(Uft}HSfn`SXO7$nLor|B&o%y&|AmZ=?wym!W z3>aMwPmi1(e)Qk*}z=d8R`=*6&%h`Cq(s!qQ)vAUw~{5+4j;Dt-*!w14+**b@gi5k>G_WvmS1?Y-2ev@8?sC*?)Tj0|E}r=4W6rU`k-%D2Q@2 zPX8?R_}Vr{VP%eeyNdZaxjEnTH*|F=a86;dFt)$G;@jN4m0Jzp8#laC*S0?oX-%(v zeW|N)*T=r-SF(1sUCd0;7O#^8<)qX)3pppvimiRVP2VT>{iRPAzgF#%VVEwS?)mJS z{u0o1WYwI&#M_@uSKj@adD7Y_p38sjR8Z?LZc5vmGe?x?xP&2~A;Pu#kG$DVmTXa7%X3ERFa#PByaZ`I>jvAK6vIk_Z7 zXO`TxQ7$-lebwDP$x5QBQ*Xz)E4?l;Sv7g0^~S4a)z0kO z-S&Rz&l23d;Uwz^=`R6 z51Y8pEHA&X^9UnDqwWkvhK5(}^#!&0-&|h){KNd|#rDN1)u$FV+&;cQ;s4rywlk+H z&Ob9>tzP=?x{L2-eh@!!thrkD-ty0T+-Gd5D0bbvq{{F8{o+R&>@3@E6dn1=|KqKc z+1hK5g9GEVSk=R$?$jduby<}bE)T> zFEfsqym?>rWA&!;-l?0E?(e;zui!g(wmr_%ikwRUijz4$;XvcaIR@e&*iDdlQ-(z-0FHtJL4$Jga0`; zPb?U&eSfo!ch;$2%)4_V!`qLYmA$uos%rMPkI8~>7GB-!emS_eTjJc3^wnjb-d>u& z>Z^pPOuU{U@0$Ms^4I@VdEWo9?ey!DH|<@MX2&TOo?W*#>~VD59Np#D_r2PDTRiS_ zOy`Q)eJ_h<-nO6q##VUGHrcQ2b?S-}&uRZMS#j>hAHn>b4=0|To$Wh)qmaR_(_R_d zQcsH=yKvZW%cfpw^E{JSHABNdtMYd`tHalSJNfv+rd03cr@y?t9j@jxb@Gi98us@z|KGgQyxjl95!3F}r}y3-+sM#x z|JD-~hOoc4OE>8X0l9X@53Xx(c|~}vm@;K**zJ!e z{UbFlJ=HvY`uKJkt(VgG3Lkd|w9bk6($I3$Y|4ox=dPyJT)x&jWz!*(`FHK+MqmGO zVyfuLmsj;YD?7hGbMcM+I7Q{V^wW}=9Y@N90yp=Hq+SRTc{kg-eBDcxY}k-g^F_?(IE+6zA`3bH(=sUk>AYKYw#3FZ*HcRmG2cLx0P(yM7G3 zSmb*A-PK=rG<@!=sNTHxd>4;@hN2yl0Wq&#IF# zJHIS#f7(BPpW^AV+^?(OuK(~*{&MNLr-Jr%y8iz@%v@u;p?flKgX(?V;y=m}pLad? zm~SR)6L(zxSKPY-DTcissh3`<%5a!l&OX1_%_nB7?DUndr+L>EPCWd({i}4&>7%^= zRy%F_?pN|s&{SXI-M3q(xPqRZ*rMHg?Q-Z+gVN?VzrWdNdad7e>f)q1%9D&=hq z|9DebK6Lx)z=^qP>GxCC=X+Or&U+$f#-H;jn$NH)`@q}sJ*VDF+5h{o_+=5l&4&gR zRn?o@;&@%+D;~05e!4{|^ss$CCqMu8RG#HNGn01RIm~aLvn5~~XuF}!|39CXon9NU z(aCS#ma>UImv~P0nVxxV&CEi(8>&V|LF;xtlUjZ{B|Y8S%d6{hDxa)X%F5oa-uin} zUVooce9qGS-R}2xm!EzqJ;wTiLEy)aG(LucReL`5H~qYAc0yKuuTpbdb zm3~^0CdGcp_gr6W(9;{?;X7MdjVgN|b93J^&Cn|UE*G)({Mgi?$@-dy|Z=h z_LtwkOo};a{b};~IqeG#zp7gORJ!-!;l#kjZZr3vcXdB)|L-IJ?Q1L7R^8s7pTFyl zyL@H&yzJc5IqcfECB?jdDJ>2Hw5#ecCi$JT3?&UBnkWye^V~E)H`-kAq=R4}X z`=7s?Zoa%;UwyMtO?k3*O{%e0%GrOhpN@Q=FBQ7qx=;3z3)6#XhbATcOnl1J{(bw( z`w^hkKWm@!@p4Ywp8tQfORM$2gD>Vr3R`f+xN+iiVuaZpRo}* zVQX=C2J;TBC$clsS6(fd)A~TF;FtOHcXy{nvGB{=#pvz-Q`CQbdGXS^4+q(oolZ?l zJ2k^F`A)rlxl#NZeXEie38y8pq+cBE7N4!RJoLcy*s__&UuR!l*1PBPIqPMomo8g& z>c_{&YwN{ALr$pAuSwc9=iK$xr(0WFE4Rqsx>k9lLvY#Yvoj12U;6y==c4DmlDu78 zC*2GVk1d`0=j-}<(^$XT!LMKQFbMnrRULY#Pn@3EUpGr>Z(Kz{Tm9dKmn$__YyV9y zz4>nKrxWFiQ=WV=-1I$#tC{IQvi!Nffqp5=toQu?*LeM;>|VX%l~ZFPJXY)}J3W8N z^PO*H^o)}ad)=&h!oYrj`P{Mhzt-(l)zjK_tFJdM!7TA=((>mow%1pm;wZR#aY2}@ zUSG85$ zc0Ti-H3q(y%=c-tAB)wHoc({P=jZqDu6I2MK0SZUpZhP%>Wn9^iM@Yvq37Qv7N@^I zx9Q2WaA-O#>@&T1tJR&wf;!qpOzFmjzU!wgn83kklc?HqdD>ynhPb%BRXg|2`}Os; z^yf3P&OTptujaGw$@AySt79`WpT&mc?faRwSaz#yT+K(<&+i)&6OAfArM$eiclYhr znO9a!6uc3gscu{J#6wf7=-YWg;*+<_*)`|fLz}!i7Ta%UxVySaJ}h~AYwKLS z<&OXO?f)dawEX<()04H^?-|AVJ@>t4=;P;C_S@piySuk*zu9n+$B`o6h>wiB^aO~XI{aD^Vc(d`-ot*K8KjfnJUjO)K znW5msPoI424gT3qe$o>4>BCd!r%R>(3v767ob>5>ko>i)vu0{d#rcBB4`-~6KK#);R)0O~JO8`73lAfHzsdgpz(@03(c7low_@i{ zp5P&Ut21nhciz)q{Qi4m_-gKl28G+Iv#N(lg&qo&F`CtD0^h;BH zY2Ep<>(~1jZT}n1*Yi3jg!A>|yZ65&oxEr5$mjb;TV32fWy|(&?8jnurQNsWzN~7$ zH0yclb|DM)_T!#8i%+wBIC5#Jcdx>dgSHB7@|>);?6jOk z!GWL&&(F-Wtv<7V`qu39EymjppSS;?lWCWlyWF<;na|5hOS@0M&bYB*q2L1Zj0*=! zZpQ8|i(Iwk-`b`orpiAbkL&7I|NVMhS~1VZr^oyC1#X5fF&l~u8^gZNvnoCHsrYqe z@rMOJpGSOtcD6V7!skn&RsZ~Fo1Lw&ogrymw&vq6CWa9Hg*=Q52l%A<-c99=uT}V( z)nmBoeBR5#P8FBqA+!JLYigS|-9MQ<{lv;QK7Jewahp?~r~S;kX|r=}dVTw8o;Md< ze{FxCQ=&9ud+OXJDRZV>S>waW%{$Sm&~!;=kS%Dv?`1EKy(^wR%(tKP)4b5Sc#Bqx)29^!&>nRa^7)6%YPj`C`Vl zx}9r^gw%d(@7?imqv8A$<@MF49vVr#;(K|`eckIz-q+sT*X%COnY1`_`O^}=X)Wz- zUT1Gucy_JV6gSD!i=DlF;*lLcjP3j%-zt6jQ?dMX^8KF||CEcSPTKgAdFAcjv8VYj zelXv8zI~F>_cG-pTc7^+`^I?k#-E9W++2K$;48%U!gr+j?~K zw(q5G@2{5~m(tt!@7L?1KR*hWpUz(TT>k$L_sWN@;!D!b&YHH(^|r6Lm{`>od(i%* zEq6Yjx7U9@zkXlMx0~sk%HBpTE{f1D-FhjE`8q4NSVY`&<$fC_W;PxJUYAmtlDONT zoj&&}9`jmOUi#^J=2y-4d)4bVuI1$9oVM-hL3a5qSJ;00?EC+(`sd~O|5X0|`f42e z?bYh_({gWblXTo=ckZT@slndo^QwEYGB=-!UwS@u>84-TO%7c9oPKJG=CaeT3h(bK zU0s;>>ZAE;i|bv9bB{;Pzwh-lzpQNA+TwI(h8lTB1BL@($Bi#P`I?ywTHW~MmY(?O zyR~ed-MhZ7E>m7r@bCVjOF}cZm(KNx+~3o{;xM%`@lnQOC23w>Sx!#AY4_HiH_yx4 zJ2foig!28qNvXTH89gYgF$wK^{+v5a;_Wus%qcTe4*#;6fBwVG*YBsSzF(uIV4b(- z#@@3l3hKW;t5&_?DP3&4efM^Y^E-B~uHStwXuaE_k9&{Cr@WWd-)d#6l(>;s*IsSe zMTV6(|E-_2@u&0e^DjRMX`Z{2duPwzqkhjF{_U@v(5#}eDedXnZ7l6>q5HO-TDoY> z1rD|Um(6w^S|888(Rcl%1qq+UmfifV7XJ5l#8boT4=fj+y?gHb?zX?Z6K>oyySE~* zPsUQI{9fhqrCMRU`$1c;cK-kOyZ6*}*KRRM(dAapb0Q;WURe=%ct-NqMcsOnwAbx8 zRFtuD%h%0e;Z<38ca^$nC-WAa%}`x^ug?3h3-2CpZ*SeT#sB~PHOjeRpv+;qSa++b z!L|RR4fOQRecHGG&!^MVo|Tq;lYO=AcHZP(X>+fjph+)3 z^-7yhTfhHb)VlZ!ihbR-!}Ke+QsYHZQpz6a{7eZ#ou@SVNaUy{d!=)&ic*f>&rd;B z+9e;eZRP!lwzAjSkHgOJpD>i#U$pRvnAnNx@_YGPvcI*>-?nD*^7At77J^^Y;$Cm3GoUQbr-&^XU3R_YMf(|K#@he8V4MH|ckq9h=iPGeoRD zoIE>DH`03FBT&{|<;lxGzv`8y_vvg2vw{Z>kJH$Bo#xkk@{FG6?R@3?{rdYHQ|>Ok zdiw3{?bCUs%_8c0&T+3!T;8@jEMx1(1&+- z3S1qgt88&?_Hq+}`ma~R@7Dbh_P0@-YgIaFU+vo3{Ob$ipSN6_Eo-vpnt~KVz+MA( z1BL^uzhuSchFiUvd_DDmcK@mE-t|U@g6pS-hbY*uiBkAp`?IfRdyU*f{f5nM+79z& zzR&ELV|8uEi(`81!Tu+{zPHg1z9#hVR{fb%DL-EDKe>>3{#m=c-4C|)t&8_1Tssz8 zbp81HlZpJtUvBqHOFeP;evQia+JD>bx9;D6!q&q3Q{SIAx0;)rp3FJDZ{i87xfO!H zc5K+u<~BRq*z$MXmbGiQuQsW;#&FB0=JZ0DfE!NHKeN83gwD3F-xpK;cI&j&xodx1 z-~TUli~2X0@9*x$*7a=rd$ly&l(&BU?sry;xo)pZ2F++`YOcKX?YnjPJCkd#PwrfB zd(GRG;(9R=Pmeo3SFHPXGriK7u_3F2L4qM5_1jz^oI^?A~qTk2hL%fO+P&X1Ncil8;%g{LEaPbiQ-(r+!0u z@Au+ur~9*~ONlT4xt_~%>mSdR8s)iiM;~0sSZQA|r{#Li+3pMNM@{!1yi{cQTW#*q z;0=H58Mkz<*cGd)v(AuRbl&`;sqb(0+x=Q$ct0ofqSs07^?QPfii>k=GmMgtbeWbaX07G-Tl4Fps7%Ay`3(8^S}Ku{j)ZX zfk9Hm)5S4ld-t3d?Ci+^o%@ZaCN>g$X&8zwKx#VZfL7km% z{&4qxy8v2XuD(6=`PZvIYwK_A^6T>Uwy0pJnG|Mb_v@|3&y08dMhpJ77J1(8yR`FD z?bVw$tGuFZ*WcRiTozV_&);3yn`2+~?7**- zw6^ngd|Bx|anH9+|IHSo8#`;O*|V*sF3yin4kiEE_wNw5{)tmlwNt;mxEQoOFLwQ!hlEvX*~s;R2FN||IlFn|6ed;MND&`O!hsU?2b3LhT}eOZ?IV|C&N zwqmR2>tjtquKfMF#dULNuaxPe^82;dIhbQX8`nL(y^E{wo;-Q-)1z+vQyUTws~kC| zsakR_ZSL!^XtnT@ztdb=1kJKD;upK|-kuk(y=CjGnCJfAo_$~c`Mmvoj>fmM@*^`> zXY$_Pnsje+@ssUas$!4do;X?EU+TFi!-3=fazvOC7#jFJyVfgikF{~g+rMM~m7dPx z&yjcd8@B3xU9#0X<>b1v$NtP>U|`s%p|WY3$-cVAmSb}sUwdr4twv}0^*t)0sjfWB z_*Y!6ZCSeN)@I3~e^GDs{5{ul%NfPK`_Mn#Gw~H$|8;kUn6EXa4F6m&FZ1nv@P66s zyh*c6vv+-!IePS{QSmdM%D-Q)rylJRO;5GoqWa;ozkTkOGCrf1cRqE4ni4ni{I_OY zJS1^=p>z8#*#%iwzkGRlxmTh1>@3stRG!k?pgjvn-X#V z;H6)4-1Kb2^e^4rP~Y#}Z&~tdiBHt-h-vR{x=j^jVEDitSi0MzS$nxhz=mpFm2Ts* zlOI{@LEBPzo<)kqu3ygLu43`OFFH=Evi>1hvJI&15*s|=~%-rTG!_S=?wJ1lBj&dZXSTeGiMnap1+Yhv*F z{{H=j_j9hVi+#H1^SNS)ke4w#s=vQ8-B$hX&dyJd`|Z8L!lwE6Y@g>W_2%2#+t)cR zZE-D5N?MeXl5%2W^6{SA`)Yrue0+4&Eh088dAgRYbFO#o)zEOy?Rj^Xl)k>kcRb+w z@6!^mey;g^Gc7&+_YsM#hI>oB#UIC95W9Fw?pCD6%Fn;@Zf!X!5xkZmet+HH$iKP{ z&2O^T?Q~<~lhK%KU2ewoD}g<@<;CxleX`amS677|GrSOXKI-plU8`jW{g!E8-egUq!m~<|yX(uJvMb4V zGB6z2f5ddR+pE}LH~;_te6LhWEA6d}ZszOzQ#LhS=Fwo-zf5szTiq=+ODn5eKmM2A z3tczPw|rM0etmVd`o@hLkJaq1`eVAm zuJBRI`Ii5E83yZbuPb&14M2z+JbC`yJ1c8dU}3c1aU+HXPEZE9pAoWq-JPq|3+~+5 zyZ(rai&czY^BrC_-38?`)+(R{*1qlE4L2|_99XZqWnb{CZ&jxkKiAMd37Yx!c((2Q z(lr{N*SzZwn?6l6&BL{llU|F7*^8erWR{7`K{{9zd z$X3|%?m*t+N8!pnxp)qS!?byuA%D}J#wvoJ6)#l>u1t-ABQ1}7Ki_OF%RpZ&cauG~6xdudQWrS{2N z>PuNyT6J#Ns?NbR@xza0LUF6Nx?IUo2Iakwy>f0GHEN=%M>qZ7y)AvOtSQLqAIeM# z3=R&SJ>Ao9SMyEKI~xT$`(jG%@;*Zi28IPu7gyaX*8A<|q?A=rYAgEmXwanM5U*g6!WWN7ydz0|$CnvUOTh0JUK3J5{2BH}n4g^iAcIork@8-9@HuSgV z@27Sd6|!RYTbemR@_Jk=_t>5{05KT^GPIUFIKp+(J5pt$=Uf$&Reks0I#vcQ6OoBO zw~z&-MEnAi6o_tc`2X16B19z}xX@`#b>#W{}>1x2?y_ChS-i?isT= zTg7N)@ziy@7wrk*3cl|B?_%quz0cV-Pg)*f1RHNI2+`BbYM(Rwr>kp`dggKToSp7n#%11~ z?*e@rB_lvi|8VSn0W`2cTm}Y4#Tkka7Km&(0Ls!J78o-&F-U+JV1kJS>K-tUg@Y*p z%m5P{0xSo>3@{;}0Ln&SCIbV5f&(<%zyb~ppwUh+lYxPufx!_Hbr6A33nAeEB1eN1 zoY_D@!7!R=hIu~xzuwk*0;s^0c#>b+zush)0IWC>W`cS>!3k25GBEgXKuewmPDXHr z#=u~p2&pp|7}QuGg(ky+76vwO;$fIEYS?I)F^nb+P;MB_P7I@^2E%CK$iTobTA_^A io1h|bw0SVlO)3t*i&MKc9rv6GiVja#KbLh*2~7a%`g0fn literal 0 HcmV?d00001 diff --git a/pkg/api/api.go b/pkg/api/api.go index f5c47700..1a2c8420 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -29,6 +29,7 @@ import ( "stream.place/streamplace/pkg/config" "stream.place/streamplace/pkg/crypto/signers/eip712" apierrors "stream.place/streamplace/pkg/errors" + "stream.place/streamplace/pkg/linking" "stream.place/streamplace/pkg/log" "stream.place/streamplace/pkg/media" "stream.place/streamplace/pkg/mist/mistconfig" @@ -80,6 +81,8 @@ type AppHostingFS struct { http.FileSystem } +var ErrorIndex = errors.New("not found, use index.html") + func (fs AppHostingFS) Open(name string) (http.File, error) { file, err1 := fs.FileSystem.Open(name) if err1 == nil { @@ -88,15 +91,8 @@ func (fs AppHostingFS) Open(name string) (http.File, error) { if !errors.Is(err1, os.ErrNotExist) { return nil, err1 } - file, err2 := fs.FileSystem.Open(fmt.Sprintf(name + ".html")) - if err2 == nil { - return file, nil - } - if !errors.Is(err2, os.ErrNotExist) { - return nil, err2 - } - return fs.FileSystem.Open("index.html") + return nil, ErrorIndex } func (a *StreamplaceAPI) Handler(ctx context.Context) (http.Handler, error) { @@ -117,7 +113,10 @@ func (a *StreamplaceAPI) Handler(ctx context.Context) (http.Handler, error) { apiRouter.GET("/api/playback/:user/stream.mp4", a.HandleMP4Playback(ctx)) apiRouter.GET("/api/playback/:user/stream.webm", a.HandleMKVPlayback(ctx)) apiRouter.GET("/api/playback/:user/hls/:file", a.HandleHLSPlayback(ctx)) + // they're, uh, not jpegs. but we used this once and i don't wanna break backwards compatibility apiRouter.GET("/api/playback/:user/stream.jpg", a.HandleThumbnailPlayback(ctx)) + // this one is not a lie + apiRouter.GET("/api/playback/:user/stream.png", a.HandleThumbnailPlayback(ctx)) apiRouter.GET("/api/app-return/*anything", a.HandleAppReturn(ctx)) apiRouter.POST("/api/playback/:user/webrtc", a.HandleWebRTCPlayback(ctx)) apiRouter.POST("/api/ingest/webrtc", a.HandleWebRTCIngest(ctx)) @@ -169,7 +168,23 @@ func (a *StreamplaceAPI) Handler(ctx context.Context) (http.Handler, error) { if err != nil { return nil, err } - router.NotFound = a.FileHandler(ctx, http.FileServer(AppHostingFS{http.FS(files)})) + index, err := files.Open("index.html") + if err != nil { + return nil, err + } + bs, err := io.ReadAll(index) + if err != nil { + return nil, err + } + linker, err := linking.NewLinker(ctx, bs) + if err != nil { + return nil, err + } + linkingHandler, err := a.NotFoundLinkingHandler(ctx, linker) + if err != nil { + return nil, err + } + router.NotFound = linkingHandler } // needed because the WebRTC handler issues 405s from / otherwise router.GET("/", func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { @@ -194,6 +209,73 @@ func copyHeader(dst, src http.Header) { } } +// handler that takes care of static files and otherwise returns the index.html with the correct link card data +func (a *StreamplaceAPI) NotFoundLinkingHandler(ctx context.Context, linker *linking.Linker) (http.HandlerFunc, error) { + files, err := app.Files() + if err != nil { + return nil, err + } + fs := AppHostingFS{http.FS(files)} + fileHandler := a.FileHandler(ctx, http.FileServer(fs)) + defaultHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + f := strings.TrimPrefix(req.URL.Path, "/") + _, err := fs.Open(f) + if err == nil { + fileHandler.ServeHTTP(w, req) + return + } else if errors.Is(err, ErrorIndex) || f == "" { + bs, err := linker.GenerateDefaultCard(ctx, req.URL) + if err != nil { + log.Error(ctx, "error generating default card", "error", err) + } + w.Header().Set("Content-Type", "text/html") + w.Write(bs) + } else { + log.Warn(ctx, "error opening file", "error", err) + apierrors.WriteHTTPInternalServerError(w, "file not found", err) + } + }) + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + proto := "http" + if req.TLS != nil { + proto = "https" + } + fwProto := req.Header.Get("x-forwarded-proto") + if fwProto != "" { + proto = fwProto + } + req.URL.Host = req.Host + req.URL.Scheme = proto + maybeHandle := strings.TrimPrefix(req.URL.Path, "/") + repo, err := a.Model.GetRepoByHandleOrDID(maybeHandle) + if err != nil || repo == nil { + log.Error(ctx, "no repo found", "maybeHandle", maybeHandle) + defaultHandler.ServeHTTP(w, req) + return + } + ls, err := a.Model.GetLatestLivestreamForRepo(repo.DID) + if err != nil || ls == nil { + log.Error(ctx, "no livestream found", "repoDID", repo.DID) + defaultHandler.ServeHTTP(w, req) + return + } + lsv, err := ls.ToLivestreamView() + if err != nil || lsv == nil { + log.Error(ctx, "no livestream view found", "repoDID", repo.DID) + defaultHandler.ServeHTTP(w, req) + return + } + bs, err := linker.GenerateStreamerCard(ctx, req.URL, lsv) + if err != nil { + log.Error(ctx, "error generating html", "error", err) + defaultHandler.ServeHTTP(w, req) + return + } + w.Header().Set("Content-Type", "text/html") + w.Write(bs) + }), nil +} + func (a *StreamplaceAPI) MistProxyHandler(ctx context.Context, tmpl string) httprouter.Handle { return func(w http.ResponseWriter, req *http.Request, params httprouter.Params) { if !a.CLI.HasMist() { diff --git a/pkg/linking/linking.go b/pkg/linking/linking.go new file mode 100644 index 00000000..e6997fca --- /dev/null +++ b/pkg/linking/linking.go @@ -0,0 +1,180 @@ +package linking + +import ( + "bytes" + "context" + "errors" + "fmt" + "net/url" + + "golang.org/x/net/html" + "stream.place/streamplace/pkg/streamplace" +) + +type Linker struct { + BaseHTML []byte +} + +func NewLinker(ctx context.Context, baseHTML []byte) (*Linker, error) { + _, err := html.Parse(bytes.NewReader(baseHTML)) + if err != nil { + return nil, err + } + + return &Linker{BaseHTML: baseHTML}, nil +} + +type PageConfig struct { + Title string + Metas []MetaTag +} + +// Define all meta tags in a structured way +type MetaTag struct { + Type string // "name" or "property" + Key string + Content string +} + +func (l *Linker) GenerateStreamerCard(ctx context.Context, u *url.URL, lsv *streamplace.Livestream_LivestreamView) ([]byte, error) { + if u == nil { + return nil, errors.New("url is nil") + } + if lsv == nil { + return nil, errors.New("livestream view is nil") + } + ls, ok := lsv.Record.Val.(*streamplace.Livestream) + if !ok { + return nil, errors.New("livestream view is not a livestream") + } + + titleStr := fmt.Sprintf("@%s is 🔴LIVE on %s!", lsv.Author.Handle, u.Host) + outUrl := u.String() + + pageTitle := fmt.Sprintf("@%s | %s", lsv.Author.Handle, u.Host) + + thumbUrl, _ := url.Parse(u.String()) + thumbUrl.Path = fmt.Sprintf("/api/playback/%s/stream.jpg", lsv.Author.Did) + + // Define all meta tags + metaTags := []MetaTag{ + // Basic meta + {Type: "name", Key: "description", Content: ls.Title}, + + // Facebook Meta Tags + {Type: "property", Key: "og:url", Content: u.String()}, + {Type: "property", Key: "og:type", Content: "website"}, + {Type: "property", Key: "og:title", Content: titleStr}, + {Type: "property", Key: "og:description", Content: ls.Title}, + {Type: "property", Key: "og:image", Content: thumbUrl.String()}, + + // Twitter Meta Tags + {Type: "name", Key: "twitter:card", Content: "summary_large_image"}, + {Type: "property", Key: "twitter:domain", Content: u.Host}, + {Type: "property", Key: "twitter:url", Content: outUrl}, + {Type: "name", Key: "twitter:title", Content: titleStr}, + {Type: "name", Key: "twitter:description", Content: ls.Title}, + {Type: "name", Key: "twitter:image", Content: thumbUrl.String()}, + } + + return l.GenerateHTML(ctx, &PageConfig{ + Title: pageTitle, + Metas: metaTags, + }) +} + +func (l *Linker) GenerateDefaultCard(ctx context.Context, u *url.URL) ([]byte, error) { + if u == nil { + return nil, errors.New("url is nil") + } + + thumbUrl, _ := url.Parse(u.String()) + thumbUrl.Path = "/linkbanner.png" + + // Define all meta tags + metaTags := []MetaTag{ + // Basic meta + {Type: "name", Key: "description", Content: "Stream.place is open-source livestreaming on the AT Protocol."}, + + // Facebook Meta Tags + {Type: "property", Key: "og:url", Content: u.String()}, + {Type: "property", Key: "og:type", Content: "website"}, + {Type: "property", Key: "og:title", Content: "Stream.place"}, + {Type: "property", Key: "og:description", Content: "Stream.place is open-source livestreaming on the AT Protocol."}, + {Type: "property", Key: "og:image", Content: thumbUrl.String()}, + + // Twitter Meta Tags + {Type: "name", Key: "twitter:card", Content: "summary_large_image"}, + {Type: "property", Key: "twitter:domain", Content: u.Host}, + {Type: "property", Key: "twitter:url", Content: u.String()}, + {Type: "name", Key: "twitter:title", Content: "Stream.place"}, + {Type: "name", Key: "twitter:description", Content: "Stream.place is open-source livestreaming on the AT Protocol."}, + {Type: "name", Key: "twitter:image", Content: thumbUrl.String()}, + } + + return l.GenerateHTML(ctx, &PageConfig{ + Title: "Stream.place", + Metas: metaTags, + }) +} + +func (l *Linker) GenerateHTML(ctx context.Context, pc *PageConfig) ([]byte, error) { + + root, err := html.Parse(bytes.NewReader(l.BaseHTML)) + if err != nil { + return nil, err + } + + var htmlNode *html.Node + for node := range root.ChildNodes() { + if node.Type == html.ElementNode && node.Data == "html" { + htmlNode = node + break + } + } + if htmlNode == nil { + return nil, errors.New("html not found") + } + + var head *html.Node + for node := range htmlNode.ChildNodes() { + if node.Data == "head" { + head = node + break + } + } + if head == nil { + return nil, errors.New("head not found") + } + + // Title tag (handled separately as it's not a meta tag) + title := &html.Node{ + Type: html.ElementNode, + Data: "title", + } + head.AppendChild(title) + title.AppendChild(&html.Node{ + Type: html.TextNode, + Data: pc.Title, + }) + + // Add all meta tags in a loop + for _, tag := range pc.Metas { + head.AppendChild(&html.Node{ + Type: html.ElementNode, + Data: "meta", + Attr: []html.Attribute{ + {Key: tag.Type, Val: tag.Key}, + {Key: "content", Val: tag.Content}, + }, + }) + } + + // Render the HTML to a string + var buf bytes.Buffer + if err := html.Render(&buf, root); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} diff --git a/pkg/linking/linking_test.go b/pkg/linking/linking_test.go new file mode 100644 index 00000000..00d98f33 --- /dev/null +++ b/pkg/linking/linking_test.go @@ -0,0 +1,135 @@ +package linking + +// import ( +// "context" +// "net/url" +// "testing" + +// "github.com/bluesky-social/indigo/api/atproto" +// "github.com/bluesky-social/indigo/api/bsky" +// lexutil "github.com/bluesky-social/indigo/lex/util" +// "github.com/stretchr/testify/require" +// "stream.place/streamplace/pkg/streamplace" +// ) + +// func TestNewLinker(t *testing.T) { +// linker, err := NewLinker(context.Background(), []byte(input)) +// require.NoError(t, err) +// require.NotNil(t, linker) +// } + +// func TestGenerateLinkCard(t *testing.T) { +// linker, err := NewLinker(context.Background(), []byte(input)) +// require.NoError(t, err) +// require.NotNil(t, linker) + +// u, err := url.Parse("https://stream.place/iame.li") +// require.NoError(t, err) +// sp := "https://stream.place" +// ls := &streamplace.Livestream{ +// CreatedAt: "2025-03-25T00:39:49.121Z", +// Post: &atproto.RepoStrongRef{ +// Cid: "bafyreiczmyne5jd4lpax5ttyb5p2fbcageyt6fsthdpyymecokcsmyh4a4", +// Uri: "at://did:plc:2zmxikig2sj7gqaezl5gntae/app.bsky.feed.post/3ll5zuomua22x", +// }, +// Title: "We're back up! Once again water in the firehose. Link cards if this stays stable", +// Url: &sp, +// } +// lsv := &streamplace.Livestream_LivestreamView{ +// Author: &bsky.ActorDefs_ProfileViewBasic{ +// Handle: "iame.li", +// Did: "did:plc:2zmxikig2sj7gqaezl5gntae", +// }, +// Cid: "bafyreib2ohz45jileumnuwa3wdoo3o7caikfyq467eanleqcscouh5wery", +// IndexedAt: "2025-03-25T01:16:14Z", +// Record: &lexutil.LexiconTypeDecoder{Val: ls}, +// Uri: "at://did:plc:2zmxikig2sj7gqaezl5gntae/place.stream.livestream/3ll5zuop2k22x", +// } +// linkCard, err := linker.GenerateStreamerCard(context.Background(), u, lsv) +// require.NoError(t, err) +// require.Equal(t, outputStreamerCard, string(linkCard)) +// } + +// func TestGenerateDefaultCard(t *testing.T) { +// linker, err := NewLinker(context.Background(), []byte(input)) +// require.NoError(t, err) +// require.NotNil(t, linker) + +// u, err := url.Parse("https://stream.place/iame.li") +// require.NoError(t, err) +// linkCard, err := linker.GenerateDefaultCard(context.Background(), u) +// require.NoError(t, err) +// require.Equal(t, outputDefaultCard, string(linkCard)) +// } + +// const input string = ` +// +// +// +// +// +// Streamplace +// +// +// + +// +// +//
+// +// +// ` + +// const outputStreamerCard string = ` +// +// +// +// Streamplace +// +// +// Stream.place + +// +// +//
+// + +// ` +// const outputDefaultCard string = ``