TA95CHH!^vr~c&o2mQv((t;o;(?M>m`pritIXH`2|PCM
zldlvR-?Oi3nVZ}T3#?iL6iAU@4PhbzS9z~_c(XSGLV1A%VD3uJ>;WxBl1+#4$bSvS
zpDJS%zxm8h)h&t5Va=&ee~3#};OwNNC>&X2(2Uw!WvTkN__4G-x}E2Zt))rYK#UvD
znTNY-M%Gx)A<=e}9PJDy#1iSn_m=3+sun%@vzUKSI|VGPEXLG{&93AXHX-j>>zLd+=lI`;#6*RA;wkXINS_k%O_8kkOKrjLYly9Gk>nunce!
z0qX+T0`}zJn}p8OGEf)3@N$i!uSIk-{ZI0jL1fK@i7(Txx>(VAm>PFlsTwTWyOOJlnjihsw9Jx%NgQeU={P(Q9XoT&ibm(Wn_v0r5J5^
zuQzGqy$AMR2#n|7Vy4%?*I^?3UHo;yFf9^Ag=p$w!+gf|#2xFcJ!Y>7=WJuV#GBrc
zG+)10dy%YvoCamdK@S?H&%uZ19mQyWEp)C4?gi11wgKAj7?O^89nb@2HgAgFQZ
zC?Mr|2yqCccKL_22?YFhzkIfL_4*;G2}t3l+Kb=U
z3D6-McvIm}heBHRm;Q>$Oa5-mJYW-`9i_~uI83Axrc9_9d}<1=9>yJsq)JSa^uZG?
z@ql355rpFj<>jwjR8VoQu|_`Se=$<|($Xwjb8aD-=r}i{{m`R6o!|QFCyXN`RppQk
zCs-m`DN!B1jOrR;HA+`Q5%CYsum;#q5H?B}}%$>~W
zY>`pU0wd3vekMY=c&KoZP|Q4`*cry8)0o0r3tXlQZjvq*Mb&nLkVia%Bz=V=No}mn
z9Nwa&77G;XJlbm>jm=*^FS{k%eK;rLeDB=d5zSRChQBnk@_f#I-mE}L)hcz>Fp_yg
zdyD2d(UsUN*|V<%lVn&donDo>(-rNMtL{DDId(5;2S)r0l|%vY
zcXHSx2z&Uds=oA)OZYl4hc8|=W^2@{2XY-ML8PZm%|lC*vd#T((Xj!&`8k2+Dj5%@
zJ>mgPvJLNdl%KLZlsIuW=@#iZ4@I{`U|u(YhKCXtcEnNqCx^Vz9SgjaZ;~wXnVNlf
zz=er6{hkLBm?hFfgIh)F>~ksw$UsI25O0=hmTZDaWSrfl4pOkE#r6=%QB|
zTYy_Y-9&*qN?o~$6@Tp1;Y_hZ{T!-vq8L^H-JcFp2Na@1n+ws2&m8v@G`;6~%BY!c>e`I%#`hOZB
z@!;GDPl;xS^Q447-Sh4RE`FhhWvS#X<+0{96Pb~o;>@<^>BcwWG=Vyyg|+SwtlRy1
zhd1v9xnd7{!k+a3`!_H6fNa|F`zH_lcPQ_loZ#`v3M=EM{_HnMc>P%dj39_W28^J7
z0ys#6e}&6f&n+6{{!tGf&9lY3>Gx!gK-r)=cC@lPqL0L_%3Ab`~3d#4_$1m7lup-lE
zdCb4I@|Z=YwdKjnU|Hl2Cqbtmr$DmFN_;T0A^4=gb9HaeApQ|lFOU9G^nXO{Kk^s<
zNB-h}J^vYx182O>2s5B`wKdTE(E?NaQX&BVd_F*D1>+sLPT}O)Po?9T(HEi5L8p*8
z8-F!s?v@2Cc=ea#X07*^%lx*4Ds}l+{v&@e#DCe;
z)wHY8v#ZgvLm<93$*mJr2DbNYKx|LO_n^Jd`@e(dP}V8rsp<1s;V>lH$Khh$Mvpq;
z{`h3)2p=tZAky70f&89mhfoxaV8o^wEUq`@a3y_&zLAiPi^u^_%^{$Sy~
zj&$n*z+0wS-T{YONA5dnr;zWLJg<-4!E$H|D5e@m&;c}e5WJCzYmSKmu!uPiQO~@W
zlyb*Oq>jhNSj^FxkZUf@n!RVPZ!)}ZGDsgKaXw1&z2)M)5t=QI(!*K@U
z>}hb2fzx@6;*dI&UnnuY^Z}S8mW4UE^KNa>2k*s<
z_0sMcEH_{Jre_lBCj%#mv)b4_bg`OVW7j4M?Z^%~5_&IpnR
zM&8J!?swtsrV)oV;X3t1NVvv9ZYoqYMB8x@&xCxOsA3;At7)@M0^WwE*4E~lldJX~
zX8cC{mx5GeI-#njt_Tg_GaX!^zK?d?jK}S7B{+CwH9h5(kqs*%*$NxrRv$&-
zs0C=P+GL<{H>g7GZji@EqIWg&yLV4KSE5MvIQjCLhhcVg!Su2+E~myQdxh+=Iv|{@
zXR>~$Lg|+G93{6&_Oz2vDxi;UIt`|=&?hOf(E$*-`-6GKyOXCS27Ts1?y}Umx{>>RrCf>(VN%(w
za(%gnrUL-(vJzW&5lhD{VKm`pq%d9SeIyZ~2H1C*wjw=gPPn&J+kmKDM%8}j
z;(CW)++1=HW!fYwPA7QeFdCQQlG{4c9~cKk3RQ-`h^R=_FwB5dP97XHwih&-Bl`62$kEW?6}Qk
z#2-?KN=e5HvgQFB++&*WcKhD%UQRo+_}vJ+locZQHqESxjE1M>#F={Yjyqe8qqQCH
zT^%F(KKA^T8y&$*kEw_GW)P_lwP#{8t6O)ahm@1DqA=w!%RAjeImBmZ9w86Xy+Z54
zWKY^(h}ncrW?vvj--1I?C%@mJ8#;Q%|WOlNF<4@H1@@{V++tSr?M*MGio8y01w?7Ac;j1|-+*2g?@NHFR5Xw`4
z<_hN0<{IYS=0>N*antyQh?;tIo|)Umc9eFS&mB)4{BS;dOjFLZiK^SBJ<|uPSFbKgFf7iIuHMlby
z3gOovst>L%?zt_`>;P^!lX-OlD(%5K>@`uAY7(5(B@s?v9PGhDG06=y*$s5b^?#A`
zTh8gr->Mlk--_OIZykmlaZEG!q5eVAsIaHLUT?J5{oReiT-B0d5dst5xmH%Q`}*2e
za|_pyueYwsiy&4Lty(B8so
ztj1VuxH3(|`Gcs$TCw<_N|XLBfisq+KjOxU7(gAu$BLpOID0Gj#vhi4E`(SRA%e;A
z7WHs$<<2=jjZ!#?d5LKUlk(?KAtJyMrcI}s)~g$))plv)oJdCo2=0wv18L$Eu#6#=
zfdr)JwFG=>+Wj5no>9#doJ}fgFdvDrh*Xn%840dCx^#JMjOz@
zK2K?Et@cw>rbnoIe=5$`JGd+*@pVMq^R(l_SELrav<9bMZJdBB+T3ys$f7=p5|W>v
zu(9|U?d1%;Q>tpJ#>8=?yU@a5SN^a5wEp>iIpprj$QVh>l@L)9CKjJetx2YJhaL`t
z?G8k#N3wMo>4pzjYM3V0{4**ts1=nh1vv84!9`(I1SFUu+a2QBnkxz`N~O(9@JyqL
zRSZA+R_!h7%|xxWZ01EbWHT3Sjo4Pw(k1*g8auSa;d=Q_KBFpQYW^kV0Xw;Ho|3FcUwh
z53KSOPsvV3)qQ^j
zS!%|Vh9rHTtf@4G@=WW_1;{a`6KgtF{5;9IGw9I_$;0&e;Q7(K6si_Wllxi3^`dkh
z2iGXPnwzv6FVe`M(a50kPuvD&j2hz(I1MB`?}RBzCTzRwjEOB!2)x0kChrkT2vpQ!
zz;eDZ^^mvU;-VMq*b{1E`chL0+sqZg$ppb|fnWmW43^tY@m?D0P?-{x7)F{UeQux~
zsAR_}c}g2HD*A`S={cUW&yS43C$lTt$*yCro$wqgrzq#BII~g#%K$YMo>aaHkETZ(DkZ!z{G2<^-AbIw#m*25v{TtJ
z{X>}*!J{#2C=<}zw_&_@Z=w#3`W7$Bre$dGUAOx4Em`J7Ol>&oJ%cq->Zrp^T&{~DK#9o`p|9mA1&_GIXmnx4BHQU$f3JFSF#Rz-DBHcI
zahi42C28EXyLrHZ!etfLZ*^O=9o`OqKRQ4)EwmJt%!3mXQe1Zn+vVM};`Q?tC3gk=
z&ce&mqS`LbyJ%qM39toeYeZ#>WVx?MW9euWEdrmiWZlFNOKKfYQ*)krEmtvSX@I(y
zFqrJ;yUhW|y>=Qv8I%~W2|Av>t_$b8jlt{X*4xatX;WF-x>O6j7aMN=(Tv)4e!l2J
zfGU&SPUZ@_F&-|)C{#&YHy3AwAR+dRs~wBa($bY+vLaFIK|%q}AU9*rDneBGoBgh2
zv1t-_90UQvIE}SJ9_y;8!;cCxd(ue2yt@JyJ*YD0f^`@O5solC^Nvpiny!s;=)H{C
zHyv%_5aI_~;v7IVZWO0*&-NQUHvPMXLM8+DmvyA9c?CAI%{#0k!^XSKTz&KAPK+-b
zD^@nw)d2`66L8@`Rhygb`#n>a1{W+F8HcLpLw5+kIK9dI4BP>;z+mYt*zHVTNk4k{$
zvM`X{@XZ1>{RpWG*AAT7H0tN;-;1;7<)ysoj?mxcr
z%Kx=$AKFIW&w8p{BS;*+n1j=%w`TWuLQ_46B{W3taFFH}O&UyIeOAU=(MQnU4AOL3
zz^Xyp`PsJUaiqVa-d^R?;*^vJt+(fwMAwjpsc}y2@Nru$0Zna%v4-DEQ!P$wd;~96
z?d7VS@ltv0Gu3HKhHj%WVQbWCal^E2(KF$oc6?klMK{P&uCig7m9kAcH8;(clVgiv
zM=P6%JKVr%B!9jsdX2*^xO6$!dU0}L(mlazt8<=p`)$O6>!}^80P2NoB}&E?!VxpF
z2_$n|S6tFVlyG91;5g~W1dBRs`Y_zsJSWWf@HekbMX^Rh#|f1Em;{wQALMaXkxx*a
z6yDB`3Ry>AV9!VAjpyUiyUUGP>CNXwNwn|B#fXe=@^ln_)K1H*1)6cc8QVYGcMi^o
zb8lAd4;gZRhUSYic?u9HhNu+>PX+Iw2_uD+36k)I+E*n}$WDDsf7m5EhStBPWAVlx
zkK`VYJ%p6iRd?yB{d5|H^H&M&!-oD4^bUIw+;_FdYqPczx01W6*y>%EY*x3A$h3Dl
z6l=S>i+``czpg_Utf0b`jBSuSQ(~jkLR}y;Nd;sOdA84{z&A)x?wCJ@IX<|%vgbyP
zfX#gj)?EVO3^5d88tJl%Qz93=TrGTZ$Y(OiFC@2ygK2ibk`BRPH57CW_QoUzQJXq4
zO}tYbsSyI0NqiZPi_q>5%tC$Whn)89b5pLouX2lXGTHUsE>3D*&yFtm477G$Lipc5
zdGEQfX7F3z3pkZj0bfDiF}M8FVH)|Z-vwu?)TwhO%O0Oi76%f~u*b@#WFcFOPuoHC@8!4g1|meu=~10K*DcfrZjP
zL}15Lk|bmawyiau#dd;}IJrCaB-M#oRuOk^sEuofZx239c8Cp+;V9rTs6Toq;dbf}
ztY{`9rHDhJ=~XFvOzT)jhR-$C2JY6pB5H3fvltAp*q#>H*tphYHS`QQZ$6Aeh35Lu
zeY#H|+G>(Fvn8oTnP``V;By_6gv%5k6t$1i5a0*$7fsK=uI{=N40&1>qE16nq7bfS
z#JcI2>hwF9XdFBLVNI7?(>3m;e&J>=W-L@u+HG2H^eCQQ*Jox}GPk~_*-bDyVq6+a
zU<=B%_BFzlSwpA~G4)rbgNQNmtO`KlZh%kBo(`TbGOg4YcpO*6EnMEPquCNo+0A+y)sWYh0?kRxwC-RT#cJCs@V5-=r8NaFCB0UP
zqxi5{@*BN1j6WUVWvZuAP0F0%?tVNnnVk;BjGX@Vn{46%Fh6~g$A6YkrvBdIwtos^95502g%s@uG%puxCmX*fpMe~r}+;Q
z>db09ZmzIS_%n;^7@|C7w86pBdR~eMRay&O=d>O=yr|Gz!`;z|v37>RqDNy_Cj88W
zF5r6ZYQLI!BO}3U|rnkh(Mk;zN7mB7+3P-B%@7df+0l7WgPWxva@od
z%wG6p>2hRYrE`LzB(Cp_*|*Dnaz)L$ug1oT!|7v|ZOc9Di&E_a=TuO7gfI`|PFrJ<
zLrCc2XeJsip$y;+W^XY{*YAiWUuEz6PumN2H52sJt?0|S0A}YCY#+YHP&y5twXS+j
z6~~R794ty&@5?IcPwUz$a|)K&%HQamNi-|o*a!DRnf|&bFZ&5RnYH;5MMI~GRf<8H#
zBqMn7f=fxN#EP=Q4$3kDF`9-{O!9!VV6CsYYY^P`8KY4|sgjKDx{XlJ~dJ&5625jpgUu4;^VaR}0MDyEd#MkH5{qevckkxImeBHWIJ(&fxvwOUoWx
zwi`EHBVKCI$rnk5;rvdDn35QCd464#7{YJ$VL7?7iWKZQP$js5k-M7ING09V$#VK=
z5zSXUIw%?at+u9bFd*co+@D!J`(acT=O>X0Mdhp%-6Y-p6_ip4V3Mt=Byo!haq*|1
z1YHsgP_s8mF&vi~wKit=ra$_aNI=6YoPuf^;5)dXUx@Ro#ce%y<7-TEAK#1PK4v_$
zt#uFGfp7-1t-wzIg0^+Dx_QKkiu&ND>#6f4Uf&}5mYwd$D8H)?UZhUP+i_<8*;HI;
zW8Rs&@|aIm2Bb~kQ>lYbY9XT|7zZnRuW5bL{3rL8R!8?!cMYO5{u;l-hZ0x8d+Al#
zhh7f-M+(=LakjCRf!-d^gm;Qr`Io9iq*>w@(oFYft+s``M|D<;M%v8KxN}{8NT_8;
zWnRh5ZH54s@h^}GpMjLxXyb^!K?JR;=!b5BALF*uwvW+s-#AC6oMW1v6(sqC&N!O1er;2E$dQyoOujJv}=bA
zP)ViFpm#AM9siMymcK(b;Gck`b%$urkl+Chy`V@)z{5$%c~|}n;WdvUYev#pSL*5YIM~&UT?}qm1Bdw
zeWw{xe-n0w$4r+^t)^Zc-+WI}MIv=N=<3|uDo&d?
zVN`!KGr#_~@6Z>m^pZD^@3}evp&?WmmOB9oOhHr8u$hW1HSway(44(NWn?t!J*r`D
z>la^6I#T$93X>dZrPER?y%a7)xLxF}hIY0#WCHdoSSX@!EWVyAxidZX6USo=+oK9h
zXmg1=+;uBJtO+1?o=j`DmRm4y}ER)QWflh#&HnT;>|)%~|#%%fsX_F%86
zp#LX!Wtg7drK6gmrDY4d;wtJn`j1ov<(CH3u_4y6V2QSe54Wp9YjHZcxOPP2k23})
zpIMq{9NUdX7oYp4jQ5SvuknLZiCLU?wYWlAk^x0!%T!~FP!@Eo7AaP%iG*W>I#^b(Hd+l0UC*IyqtvUKF861$QLV0kA9h~Yg>y@@@$!}vh(_s0wI9>$
z5Q>)!N_;1O*T(4wC(kk}uVvjIF2IDnl6YF=cj+kjgD)#xN0^ZjiHoJC#4eis88<*T
zmA6%`<)Im)Xkd75-;BzZYA}8x1+XvZhR3sRXOV(#Weki=ukChJD!bEn1?-A%e8KBu
zvVLj@qMW?^_=Z+L&`Kj&b85-PF^9((2cT~^5L?Fs8of_2K`ei|KgKnIzJ4I7Od?x3
zK}|KVGd~>f`)tADRY`Hy;Le)^L`GqH)Ds>=Ew{%S%gvZsn)?%T_zTy{xsE%+kdd>2
z(OM28is3-?4q;v;Q&BoH9&^hGFixD*SWrMe$zy=#vXotxrOmB|kFS=Wt1TeMAz|pH
zGcDmhXt+C!DWRJElA@$~Zq3B{w3FYwRBnU5!Sl5KL_U)-HAB&Qk6b)(o1Qq6!&%UP
zWX4S&Z)Y7XtUA+4>T|?+*4Z$u#8g7$Y@T
zb!^jbb7}+rKKvamn`%Urkn`}d+}iq34TzQGr&w`!*fl+Ji)3j5@U_V!_1K;Cpr8%P
z$7rgkv%RSw7txdV-bh4o`&LXyte}K=xnC34z}`Q|>Ll0xAR{bHd)NF7Q+srAGXYTP
z*1G1ZA>T9AcG8^~wr(616wDCq!Q`XWEDB8CBoiLxCCEQ$y{t*u{27&OSC7VL0i12n
zld-si4tiG)z9)nIA(uR;Kl2J`t3CQGsZG|?QTjRgoQj5u0&yS7TeXfzaTmn13Z@+W
zqE*OKBW{vMp{RVcq6|6U0|$i0ORcUVB5&o9k4FYrO*kmz9LT1SXVcYRiYCzS5NliG
z-dat(Qa{5W9BuAY@5XUapwnr(?shhHb5S34K||s9X#UAX-(Cku4VBN@jD9o;DP3pW
zaZ$Tprj)MVBwQlfW%!tkgHMb5WnU8m7~w1-u>&VsoMyQt2**+srVq%x4couWrFKz>z&
zrJ51XHU?1EgVdXLwoMI((-j(;H8^FgVmf8(Cw2JKFlE^u9eH
zFzQi{t6>t3J;HSxzv>K4YU%+Ds%qbfKHQM{N#;I29r#C8k%uONgjz8~&nmv!N3m*v
z6d#Fz!@{f7TwOiNzYXp0=r?j1_k3O&t@cZq=pfdcd*`u(hhC~rPN1Kb%dbjp^Nd<_Jk~^F+
zHURg@$dd2$^K9Udo~9gL4o0r0#li6?HA(*qkZHZn!nuVZ8_O|&dFCz~JAqrzs-5j3
zbokihI*5tC_*J|&QFrNFC!Q}}Ur4bpEYIUBhU@R6?*j~<|5u>=ynY`JKhkGiwplwECSV2*;5{iIAR4MFi
zE6G=oWlx7JPPViv8o&!z9_wNBkh?glhSD;Tvhu7vv@ofz;Fn*hSYB%B;q>t;oX$T^
zTH&BmCa`<=VtOs$8-Fg@P`+#|Egxb>l_?Ern`w5jwcC*@d|fNsbi
zpOWiZQM#^$Tb@!mY`S<-Tkaxbv6Hs0EX_aJ+e*^Y8_6n*!-A*2)y+TDTa5%$t+9p6
z``boTkFC^Y^Vf|Ca3hFeB4`vyaCli
ziD2$2J`ob@2F)~!av?D>7F}Ii!76Cas2=N^lAb)3cyN#MDJmOsJen;XxntT;e)8bB
zF00|*u@-($J|&mSYJcrz(j1L!PBKaF@UFP6+e_>7i%KRC5LRfr*cu;k7_M@{rpqvn
z{P5JXUT-)RfW3XOj?;{?N;I4OOGWghV!@V+RbI>U3%$|Qxz^VikQ|-f6Sb>8%uU9i
z`W8N_WGw=PB4um4n}T`Ll6^JKZYI2;xlvH8LRxIHHvO}8>Al?;P4Vv6kY;*aBv(x%YCD3f-~8+JuzUTE&C+-@RKH
zn&MrZMDl4)%#i><zF}OT!2|vGTI~
z55M5nYN#OJK%LKOu|ur|25hamD5_RTQT(1}9Zv#NvwIRxiN30R2a5-~hSOzVJJ;h;
zd{q*3qNPIswXcV>v+g*Dor#zE+;sMUY%_EvNeZ)tnU{oPO6~9#2Guxh>y9g-XAZjU
ziOGgij}4#bx$LWGl_F$wpK@G0CTqnvr4VkTV2j{q$J!PaBkPg30>YLRK)eWh+Jji{
zhqLl$2th2aUaG8<0qi7jOudV$u2>iGRt+-cVNPmUi#QWU&!=3fl>N1h+KLHp{JFRk
z69&c$NYN))xoTvMpZHpz#C_-1-4V)}pj{B;s0Yy%m7h&+G7&@YGtxs#R$#bK?B)4a)B@PE4`Y*vmk$%63JV;1^Z
zp7M+9shfEPPCy{Wn&w;bEp6y>14UYA`CCv-@L99Y#9Z2^3$?v|%&Tt6}M
zjb*AVD}KAclbV+d+FNkW5*7z#hBegyt0_!%!T~CGdzeaN{l(sU-1ZLL&nAQ=3whZ1
zFo%2+p+AO2mwrtX;j+T0ig?J~KNOO?`*N%v2b))T*O5#L3UZ(xU@EX-*NXt-Ij8Xe
z<0gqeNf{hGhGKxasA^rg&*)94VAI1d;#&ZUO<;nmjUbLT!jJWRNzZogm0nM8_UO
zAyTpo$U1OR6bGZtNm=0@gI|3Gq7x7%VcWGYB~(PG?UDE7^Lw+Y_L=SkyYt_(#d1Yu
zaRLz`6+Zzc2P>87f3DZEBzt{jRo$IVZbM-~>zU#8Jp|Alrguxs&W*8`LnvpTd
z7G>Hz#wt9~mVc8B<$Xw9E@l8iQ?@;cUQ`2me5ok}>W3)FW%<~fp3cA|vpNPtg+M;*
z&ej~sR;VmA@}gZ?PNq~>sLB^U^MnFY{OS#5rj`_GdFW3qrQq)dFWTE4VHU$g&`*M~
zx@^7{+lPZxIO98_M{!~~_(k?m#HEzuSDY02dF2QYY=BwpBt`^$bvAk7>3aaH$~hx^(j7`
z7c>)?+9MnbB8IvT7{sp~AgTK#QO%Y`@fe8+=CxUY0`TL-{EdDrdNgU&kC%Y*_x7H#
zp12Y)!n;-6BBH`8{_NB@x>PAzRBSUW1XGS_XMxg_fS~!!`!zZnw{XyUoJM|E&11PE
zX5t2G9s|y&56EHnc1h#!^+AVk$!$q1w)doMg7KO6l#lC=Bq_C9AahAm)UWGbW!9K`
z4nhzHfP!n?ra9?C)~_j>?;1ESplG70w-HOU%3j$UVvenB(==$LBG*8+)NDA%(c}Ci!OmlC;7Lzy|p9oQUtyPMjiN`v_>y8E{zV(`7(W*X-C#D
zA4q5&t{RHDDw|l~r4gKWobz<8hclwam?|=#k&-Nmbwcxd01Bbn_w!Elg44!N-*#LJ
zMLal6zYfJW->T!+*<53^9gbXP770DoAEHsF;X&CU9_d
zzcQuyMFMq7A*ah^(;dy42Cl20C~b~w^)WTp)B__jbd{9eam%ngXkxeJsn>9h9o~A`
zFIBU;X=Jw5WlWq=6!b;#Mbj5{x7E*_eyzUDp^k2AoK-r#Y#95rPHq$4qa7qB&h^Tp
zDQceGG+2nH`<@i6ht!`bgjq6VN@S5JN@IGLjTwn7M`djvRazP}_eq(wR#oPOC(Z@%
zzwT!h8-J;pma~BL*d;GX-Ns^R%d24JW@)9*jm$`pa+1A{u@B;(#ZxK$>9{?Y`~Y8z
zHVk3G);KpiTUf58(JK~T%Gm)-1DKI1J_{&WR=ieI!4djo%G@XawBc#D~sw750S%
z)hA&?Rjka^E^llxv~MLX>O+!~C*T6tj&rq#vb1
zc}Lj?)i>xGu+9-zc1r0b6EpYsysFN0A}Af1qAKi2-y`?3lbMU5q~jOqOw1)KXAnJU
zND5^WnJXnTr3v#l)Ac5385L*djb!RAe_$h~OJj|Q?6e`MFSv=g7~;Xm$YU#d7Cg*S
z(-7DKB!ZORC{zQmzH;KuflYiBE9>vhG!+YTb^)~)(@(ZDRpqDEa~+jrViOj__RHOT
z*JJP8c)lL(Cg>qZRK&wgs>>FF8*3fPRxR@XvkN73GT_Su533I20dGDy8X&O
zr=SnlPyw<$WGWgPv%%avFl>p!)t$2#623~YN1e*LO*kV=mM+gzZrropOKj4rSfXeO
z5Tul256owEEIf#{9eT7aE~2OxNFjs37~?RM#Vs5I-cmNbJR7CvyxTQkV$XAu_u~Es
zeHNwdOxe-8(B2lEr^Y<45#?EQER5Pfjw%4^;N7;IU*&dy4&aN$M%r=zUk86WAT|UKTFED|MH6es90&d)YUAG
zBm0k2M;Y&?)bromMEL`u>HI^Lyw7Et
z_M*}wp2h^IbJ9)-o3gpJQY>OdlvPFpSr%o7{Vrt)iMZQ#8GiBAg^!K#TO}>&
z+0pyz1scy*$NJEH<=)hdO({GD*XiNfeJMA7Zru%H+2ze;HHFT2Z-60OQ>fOffs33H
z^z!I0pzI5Sa4VFKSnpD**+ZwwGp`=U8muZG*?f$1<2#YYfMq>vykgZ;#&y}!wEifn
zsIKw%yBVRdyRzw$g!YU^R}Hi)Kh?b0B`26}mBtq$$6BT%W0=(uuAtDnwGWQ1(H>Mw
zp~Tgn4IRlv)5Vp%d!p6}&f7M7SVl0rmzg=3#$XV)5ijYH6E-IH#42NHE136q
z(YxbU(Q(X8noasg#7Efld~0+Y5AA1Oe5wP3C}Vi;uw;)!mwEIDkFOcoJ)PO*QpQgZp}*c83XK|d^!@*^m5ILjS770vQw??*F24wHDNv%nhO&;CpOe(
zHH1tz3=gZ4R5OU-C!*{Soj-INN-S~F`jV?nR;V4>*1eWa7`bD|cN~2}1$GfSduT(|
zOcd9Yxu+?o%P#GlluJ_c7sJ0SF~aOscQV5=SE(NAU@hN(Dt$Or&Sz@ZiE59Kov^y>
zD;v^<>x`BolXp8{D|Gs*`vFQ5DGg-mMDJ1Fq1yNZiZ7QRcwfZde)vfDgPVJVbANbH
zvLpU7o;%zm|NMK~BAW!hxK{VqxSyK!DTcAL4P#_eglp!aiy@AVSloFF#Cugxd(gIN~NYg?aB
zLD!`{Z*YqS)YfbdvSem4CjlYs>MR!|vC?{pt4t~*DPz|jF1((8+=Cxh5SE6vbqH%@
zR_Gg%*TnDf*?YTO0j9THI^(o^M6Vb;>9U8;USK`Byo0_ox_g?h_;us>_p&d*TL7e5
zBx8fLG9*=gBFQ0&+g3O64`nZ6mvGu4z==p7773-yP%#SmLNazzS3A>*d4x^L6}?x@
z+0Lrco*Rm-6Y-kji+D(|B%d@kgI;`*Pq_K9R04>WQ=0Hn%k)ho90AT
z%1f>w<$B`)w~%=V7M?8lJLdi&@JJFWy!RKC_B5Cix**)
z$y>n15y6uWjb@E+CaE1lrS)%akvS%y^R~XZjTK}6WVuNjlL!dw`W%LAO=zp;?u3E#9{2L
zQe7N?&GM`IqCoZ)h)3r^pO<`1V3xdc0ZwVGTVKQ@rs}v_#o!5ImGuK?i`3VY
z;`(>Xy~Y#xJ7eS#9*fXJvCJ1qX3$*GyekJb;~m!p5%qAb>6kmVlg*e65VP@;fA()o_|oAY7@Yi)
ztCy>|_KQ&&SAbBv4rKqt37g!Sk
zcU*42mv6clK(FVL)xJ~hGg$tl7QJhi#%={~ci?#5IyR$q*kIu2Db1>76|X2pya;*K
zEb_~Mr~vp&FZDoCt&c8}wtnv{cp(-k%0Mw-CMiZ4M0;!kXh1F!Qu4^U!*11N(Oghs
zYVl}sw&cZxM>S`F>fcF!2%g%2sQB|4;pbe2O9Nva$gOL~jnDLNUA3u$4X4k&h~9(|
zoM0Dp4O-dEi#`=b*f!iol1>24?Bb3W4LFek=Y{C2)eXA)tvqj}8&xr$h1ZSTXKoB<
z`KJDQc<``x3V~t3)x-$|piu
zo|MzgW)ZhhwKzRow
z__nKBtiIldCFkhc%w2W|kC_xDwrTc)eS4^2hx^`vT#tq}STz-&FSEHErT~My
z5pWC$&q)t-*4kWkkIAlAWMng^oNoG$+8B2>Qw8T#`Cx7zQfQ}tkI)=1y#DFt>$IA~
z95ZX8*DN!Dg@dmBKr8e=jhv#wKSvtLA*MvgXNnMJk8##>ugsTt92)9NyH!5bcv8fBKpY=OAWYkm#IkO8Dr?WmZx597St3&hP3dXa<
zzR#*$*L4%noG%bKzkOOFOwT!7Ug6f?Z3d<{;-0%=2OVf?X0+5qw>YaPaF068r_3Z|
zuj%>t1N7;zIgKJno7!4%pZx1uxg;hgj^6%Mehd&=*lI^Ma;Uy)rhR!jLi%j~$k3|w
z4<{$7O|6xNMO1`sAwaPvfft5!4qTgL9!>Y|ayWAe0edAghmi&Rn$8B!XXV8v>a^@d
zy%vzlZUoDQ1x9uSBn=v+q+(WDFb
zb-lx4<&SR{HKtmW#txDZB_a1o9WGLPYDRK9z^mX
z84nzfv7+oMl=9}+kPs3SWn-=Ey526X{pKhLMjulT78Au`mhP$Ap+&3)BBEc%bo+`#
z=s#dJ1ZcP`>W4oXMIt;2b@cnmQONS(Bn%7*qBf|l3TjUh!Rm78ub^G-P%gKe_le;_%a5{
zIDByaR%WdD;BeOLzkC%uJ>3ASU%po`X-{R294Wi2_2gcbXli>1HioRGchxe>n@a9&
z;Y5#3fq&G#+yT&+w0Fn7>rLjgEpw`~-A7JC&Lg;WRJF34U*%R_f{9q~K*OumQ>QW5
zy{p{&_B2gpSJn31y|(TaEZ>NW*&Ur%W%oK*xSDBC(z!o>Dn^(2C6?6$1s4!T4hsecD
z>7X07kS3=*=1<|zrqV*!P*5HeYuOptMlq~dz|$xD&;p+X=^f3)W?5W%o(wI%4$$0M7t{w?zL-Yc5S!)V#!&QlyUgJKK+m6o{IQn&Ed&8(9sCrXWewG=
z7BF>WUBC*)pR;DV99ooK<&nuV_#i?Vv#)FOx}Rh0sV;@K+`nFjzeF|BaN()sW;FeG
zE)GX9z)CgqOf|z{0RZ6oR*ogHgm0Js;8z7H{Um{r+!lbCf%r%x;v}
zv|#{ABxp9SY!MIh{#APR-07e5>KGN5(yMt!R-FxZgv>6P$*YTtR?K^+x|w9C0-YR*
zHqAy&`((&42ya4;VhMy140NFowf$w4Wm%iW{b05Pa!JlunPzkidlX?}(XpB0gKQtg
z$O50qTl!V*{lx*V`ud23wC-dlwMO@RPyz3J(42YP!&1RP<6AhVgz&{dkah;4APyv4
zui*W%Kr(qTaz!U_P!dw&p@!C=!6FQ8svJHPTy*RT@;#gN-gKURDeypU4i*Lu4wm&C
zG;Hfb^ib%I9g6DD2HeK6-|N5YQMcB6gK62g)>nM_Y&0Kq3*4Rj;2zR1_~)9deoKS|XV5Uajg__*)t)-a%E==GLCrjGR|_;VE>8qec1Mrbxg$iPTu4th
zj!-I&R@Z5DW5~k?2q%fxZf`sbSslZa6&$gs&P=jWkT9+yGO=CkGug+dys4=V5*l7D
zE|NoDHj-&FpHWW}rl<
zA5f&wsW#qdjWcPbSZKoa(I#H&0~>FyCt@Jsl26(Dih^?j4g-uu)vJytSS<5Pe>>>c
z>zmReA~JB3{rXAkbx`Y8V-5{G;$61K&Rerb%J3
zNf#UiN`5K~{27ks_asE3>1_{ojT1nUR+^Pn+nyd4nTtcu)4gOJ@;2w5HHFaEC7O2u
zu2Eg~+n=}JtORd}&K8-g%L*zf`!EELM&pg_Rjx7>#Di^)Drll%)(;qaq=V1D?X5sA
z!*EhxrE7UO(=;;+_l+y~?&AnI)4yJ|(^DRzvbcvx5%UVeaL{*DB+f0C5>nC~E7?#`
zVGVTugplu`T<)RP1#%^ri#l3($W*w=S6a~2hN5iniEgEvUpae=>J_|$+`?}xWo_7ev}(={+*D<3
z@sBCWlcZvWLI;hNA(MrmDcaUz`socsjKO#wgnMjpvw~9E#km*?KAnZLqt&nryID}y
zXRym_0c{s~tZQx#fg0?JpM7KKaa|NlWZmGojnpj>B<(l|p!ZTelzbX3B(Ir9TOdq*Cp$tbOM7$s
zmJ@(O)mP5(&d~tI1N{I!3?mf|gtfHoPJ7&?PU3ykm^gO{&te7KR@dOz#8a2nin&zDImUF$dIl)=~ZB1t#~D-BUs)Vu4X4b3Wo|ODDa^OhSDw
z>%gy3ke0-~lU-ac#KfFZr_;$uCZ;2{WwpqMOl1~G>Hhht0!ue+bv0(2DI=v@fvpEAbQq`wEgqcn7F;?{oFSocPx53@Zaqi
zJ6ug3C8>%Te%sH1XwMw&++y1K$dMP)?!carAn|q_&+OHY4F=l88YudifK9
zNEkOxG}k{j^n=`C0rh^uVUEV;$W~!=>i$#dxlx`^yqB8iG$>_1Dw?&sIBNGM(DZ440OZ8vFc-{@&^O~W)SCjyGDr8atx+LGl7Rj|Va#lo9YSySS%>rMEwB=%KenVXWAxMtTD&EE%b80rn5_~pP`
zt5&=h@N`M=eouN0-o7jnJPqEuPd@LeYnB)It)N+5X5W#XrQW5Kd49LWR%0n$Yev
zP{}*KOz#x$-dCcRuC8M?V#!jheCg5MknfLa^8&{{p16Zj_R}r8OC*2C0it$m{OVYd
zw*;7{$;m|jGIk)}h1V7?1vjIg5-zfz`lc%`z+4u4%<$vdw{wn@yp1`G?;nVz;E7Hz
zts0-lZ5nk`TCzXGVJm^>_9vJs=_VN`>7*Ewu)RXO1bqcV2#4aV!k9v^tA>9Y*3Jd7
z=5Li@w8clo13TBu6n?tVE7&d}brt0QxmS_7V@TR8-88xY>uCHBHthu6n^}-B}B{jv&Y9>y*er=5r3wu&(-_oKnHJN4YGC{PwP-JYO
zY|;6)m3XF4_vWP1N$w73QQg>;Wh@~BI^{wsx)?x$3M*X>NZ@)it#63z?2PQxN;v+I
zdUAWu_cv8=1GsV)huCi0SRHPr)Nk|uK`
zdVYNMwl47b1qB$djN=sEwYsq!pasJ`bnHj%FICX|hghC;f2lW%qV|54y1yKk#R%7P
zSDh0Ls^Hc;$hT-xub}#4L^Il3u;dlytA-FS&ApwJ}GR
z>wDl~+Run7-Opy08KrHyNQVaU6faE|#G&qhw)Sp^Te-JX9@Es8P_CBJDAl`Icp5_+
zX)qrZY`D!Q0{P8Yjrar1`N@K~&J3KkGd50=U>n6?
z31R3^+`z9(*G2Eg;X8H7>P(dWkf7imgC50#;-u$@(4i)cAi&(ne
zi4FZB`TOMtNCpX2OkbBFG9$Mm*8YV4X_7^23DC<+finc;TAwXWzb{RhOf-0^h@*$HD^!;DxG!PQEEqG
zgL4ZjS@@+#tqg1`mL-n76v!0$*T110+^uPlok^TK@6(&5Hl_sVcur}@E2HG9)FT64
zi@=_62?Tu(cE=#2_^OZuDRtgzhoK$I4Q@)lr@)egrj%pHnF*m4C)~6R0!PMyV&y^OSVQqaD)?ze=Ry{S-|OKkkK~3YbU8(jQ@gjpbreGfE>=K1|xk0Q7M3=M|rDB0Ke-Ph{-0=SdWPx;x$oy%=VP_S4Ro=Mm
zen_ew8sDI-OHKV~7aGn+9-wcK*ZHGITjm@`zx{JWzm&sk=3shP%#m+m4^(*zc;yq{
zRNokxLAUeJb~2H+3#QIOA6U8|y+UFL?G6J)rNbJaoUodkf;1*)Fs^5Y}dYL4U~X
z$-hCmMezXp(B49TU@y>5Aww$0`f`5U&kbVkz#_>vf#`6m5
zf^eQt>XBW7{%zFt-e=AI+WuGSOXU5=I$!Eb?ftg$e*^q@p3ks{Q_&(>-ap=Nh^Gs&
zV!1v-Zx2NCrT8g4pS2ICp~bSiRNildrwa(;xjtfV4}w3UB%aT_hf|0j5xMu<Ze
zA1%JO2hbl;9FKR;!|8jm>^80Uo6qUOvv_W|?AwF)eCc%}&nM;SLQlf~4J3b3Kc@b_
zz`N$*)bmG;()&&4M@=lZTlDRL`$sLF$2<1nwBtwg)AXzFK%UPpo7}HcTb|FKj(u0j
zK7Sl7_}-s>TYJ5Mey7NOAN(h~TJ{?uN7a7ue*%`U{1;%!{|n^9!2I8VB-(Nl7DEKT
zH{VekI<>VHiwQ3^dvbr#%E~2T33u>t)3XcX;`^vF&bHJAq2mfw9
z0Nr`Y#d&uD(p*`Tr_BSu@X-563J}fWR{2joRqONvh%M3o^?w>h*8iWw$jr>j{NDgM
zU76Z7#BJ6g*E2O`=RjAe0D1gg16r3)e=Ur#M6f&1fJ%S8WxlL$gadDJW#>~TY1x^J
zx)r(-1Wl4U;xk0ydfSZ9?-r7eYuA>AT#W-3r}rA&?XTx(-M?@hk6A7BZ_*al&7Yq=
z+h6y(%{}@4Tf=6?jaQ$QzWJdC_+Ov0nqDvOy4&6Fid$cAzP7wyA5WV-*4w_{o4LMk
zE8F{-_&zVU&%9mU&m;BX+df~1(gL(=LN-;A>naOR_cgZLrAiVK%L)>_!^aPzAH4gF
z-=C+Um&f1k?*qBM9`6G)*WmH!;PDRZ5nVhH-E^_W
z9j``w$A&a0*IB6F20Rb_VR**|xYIgV)x1An{AwP|>X^-}n5uY1*wni5bzVc2_u1Fi
z*-I`b^$?ZQdui(nBFQMK4)E7|?q^kxln-j{Sk-ow*OY3KuEl4!s%zU-{gw#lO&jM9
z_3QEMTN#IKM+_Ur{S?VzgntgP?*M#G#%H5+!x|vijJgQ_*1*`K{5#_
za@F4|?UXO}QgLKuGoSnLNo18h2=^PYDDDF9?`%Dva`9wTQ`FKh-(8ZQm=zAm@jFkbDUHaVm{pxe0H`x9RzY%hBm`|0`fr!Yj&Jzo7nPk5A*mT+ai@O?MY4jcNj&EB(Q>Jd}y>ps{)Y@Jksvosjyqp)79sFOn
zA{L9*Tm$ct?F2MBigScu@CuYrp9~&LR`;sfYX4ysIX47UrHv$&WV%SYH~3f
zm0$(sYK2Ko{${~di+96YKgtz<*Q2j1y<7TTEQw~y-g?TzGJNgCbonHF+jYy=;;Dj
zY?2zvn<#@TDnvnmKJpj{n4R<*lW@#wtkOqP8q5uqv)om~XpCL-#)WCD0_nmc1*Szd
zL^Z3Jbq^Fju*n$e7z$kXTMrQ@Co)|DQlJt@tkOsOb$tY*o@ag8Wm5~)K&1$6%}8CQ
zk4B9Cz^4m(wkQ0yeCs?Q*$y8^p<1es6p?%dlb&x=p#(eQG^Pkm?TGJwp7u+PMk;Mn
zU=t*8i^BxiG4V5)aOk15uNfC@-kXGRQFy;zAJh_SdDDUM0nl^?E{Z3z`bj<(kx!l6
z?kok$G+qr_lt)h0V2G8V7orXA9V*8t1-eBoqUdA_mbm^7w^?$LQXvPqJm2E4Um;=d
zP3XLEod%9^6b7Gng`ou7u7pjW!V3`g3vjilo@z+UG
z0B~smOxEg4ybO@rjyO7(I22E?G@e%ik{`t@EIA-GC?K4@Ktty@2?++Oi94MH6#=S?
zJD40YK(FQST8jRdXM!r4E0wP;Drj0CNf!n!Ycm8516
zL`|O^qINJq%@{akkwArNO@^vY(nubGfl{U>P+b93Lm16W9L{15gqo#0FJ-Y;W%aq4u=YHNPIGOfg6ViajXAOoOotYE?Vzyh#N3lGLV+;iwG*-YYE4z%P=-6
z;HG&tS{nbfgyXci7mmlE*IGaG%xDAC+U=BYLx5$LaJ1P^nz>g6t=c?COS86wqpn#l
znu2W!txVr5R6{+jggwm!W`1=!zWFyCo=U4O%q$bc?07%pR3D?JT?xA#3tEPG&eaMC
zq6IRnVeKIJL^GYs^C_
zBGwgW@!ToLmL$=HwNfIZk)XsDK^R3HQ5Bs&GPp-Y%T{bv4|)t#2gzw3PHxnaC1?tf
z1^chYqH&6icODYZjb|@i>1Vv(9b9g3*nc~fm2P3RL01_u1AL=PVXJwT>Nz=8Bt(&|
zR9MRR_E7bUQNt~%mwKFeTI_HV#Rgf;m|90u?(>
z;VK^K*AON-UBzS>A}oH!tIYvZhW-9Rny4RUT(4maC3qDWW@DMzVm$-_61?I
z-o%TKZ3r~$Fr(qRzLfYi+|V{KNB4n8iQlBc&W(uxvAyWq`PVmv?6c1~<1IE;158mk1bw;Nrgl$7lps%klL~PFJ
zX~zQRi>u4m^z!uwZpIpG5}BGl143--I~H|)4M27$(BM7M)4iYK^X={zPffmTkE&i)
zQK?Sw_|Dap&-f?8HP}71=X+sd!;M@Orp$2W2q9)0>=ItkJ520;@WyHIh+qwE4HWIL
zbxSWZx-J9}am0j;PwCT2jE%YHcf?S(3n%Vu)M{^fo0VFEMrIa$`p(fb_WvAgW`#hf1ww4{%%qn=jnIc
zB-BV1G4>}GP*>N?1J7d77ZiqC!9vJ`;_wJ-tz)28=1kBg17mrNo~qQbID?02QI3Y#
z`<>KpEQj~*h@h%DFlmy0Lxr0P3ZepZWA-Xbh
zewt0Tw=0vwtbYtw?(~pWE6K1W8UgDz?h0q%R5krK_BbAuV=fPWgh-l+n?@fbi2CR3
zA0K6z8g>O?5sBoIr|}ETj05Cwffluh+m4PcbAURQz@!U4wIcA`U-}J_DJ6eZr`~3-
zE@%^z#uA;m{5E4pdd#QD;OVF$wO?)h
zT!dB7iT768n1$2uvwwu;$IP&hZQR_m{2#>hADx5T`=rI2^mC>Pji@gY<5!@OO*ZtS
z(5CR9xn@LAJ(kgqhOm++iP;N70#@vu>76c2H=ggwY~I^MFB?VkIV!u{%%%Todynf%
zrp(-@X~plGZJ0muq190~(jiMWyEQ*dqovyuTEl1!R-g1YUV`bQHFxbqlDXpp?*n#4
z`{`gV!_+YaZ;6c9_P~tET_zub87GZ&{X$OdVo8pJnXE2%PwMlAQQeK;7Iv@o2P(PD
z_lHPb*J}ax`+bX?Hf6&^wrb#Zz&IvPv|$6w=%e|6&?oiNLGp>*^WlfkS9jyk|Jh56
zM3`OTa#uRrJ)QL9(YgS6eHd}>3=9{^(!h9^h3$)?e+aD&gZg&bfC4$dbc2p+2J)3t
z|0?){4rx#v#%M+bYj8V46x3OH5HCny>OpA_Va1QfZJcsxUCVVx#
zPz)WVZR4%?PfdfnA0mVk)@3ngjfe9z^f{xW-uTcrb8kX~2uHvn#ai3ESsAP$>tt&P
z?2}^9TBf4p$ge2T=ad{eGDW(;$*pFWiK)aT6o##}+DK-kDVe`nnDx9Z12#gk&bAt)
zdJbd~X;E_={Za(dtF@cRv=s6O{qTI}57pG8K*+aD@{QIq=!OEh`HwUoaLP~-bher=
zD!49$_i8A!5*!1wlA4v(9ubDk)X3CyE+$TCNq^TI&63cDAGqIt37#~7t|F0HnnwVV
zxL1OkNs+07jbmws%X-Uj4!U_Y_i){*IY{ZuBJR!H^9a0nv2D<
zK{A=w_o9QDHKiIri1c44r<;C7ZfqQd`wb=@Ev9H@n_@f_n(D$-E6<_XW_iRG+2Gkv
zV=#)110qYhr`lfaJn8`~wo^GTgYbqjoSyTsR!wcrRYo*eHsE;$YfdP&GsMmA)zsCb
zflzfv?7VI$M9nn42p5*zH7=%`}ZC47mGk308DCx}y#e8}Plk}ZscFpi&_$lQb`P6~B1Sd&0-iXo*zOdD^
zu?D*(N1p=rPWVoE_?1!2dM%@#46`DL^nVRF8~$~ENohsF_o4f2moyME6wB$g32@f;
z7y3*l*J*c>p^S>Q_J0{%{NTuKT0WSOa8MsTK&cJS=t_D-09@T{U22(rjKmZ$^G;AV
z90}T>43$#kbkZALR)wB6EmN1VfEy6Fbz6Y-lONbV!tawF{y@LzTOfn_&fg@(5CbQX
zcY}s&Aw~4V|Gt9+907UAK7XG%(1s~`U{6+i`WL|zvwftL3^e>xlx7MBoA~dCee$a*q0X6{38+jG?IyYj39edw
zoH+6UiV07r$FrzcIt;&JEj`e$etT%%PP%5}L4WYjzQ}vk-`wmdpd4;SfblLZbO4j;
zn^qcwgmXb{b*6n<=ab}6hNu)O}S))`qT|H
zReYCfNh+Q74~tg}liS$nV2T$dTXvi*ay~GLn^c4J)rsgph(h$E$t5a?C=vjd@-TgY
z(w1!IbOv(eqQ&avND#kR6Y%A^u6B;zPb0Za+3*G@F8_w83XVW}yEozB-5I>y6d?U$
zf5hUbt)yLI?6f>Z9Ax)VykEOP=?uUO=Lp7qu24T_@W(X+{ta1;Z_lc@7Xub6@C{yV
z;S9aEINZo&tKFA|_=SYicHvw@MRL(F?oV8;vlPK>;0>i?^rlamBV}-jX2SjB8G}cD
zOUFRmIB$K74)WKM5Son4s#S?q&glQc(&WxeN!x%B
zHMK5z;t%)det38KK-xfmZ9jG)(TFua-n8m3dT%cb+ESD
zUYCHEQOl*Vgv@v#G7fTMnl3mpn1qp2^>jN7Asm;-5HAffn3q>8N--~OQWCp$<{Z=s--bQ_{|iRp?U#~}zFQx(O_2zME?puU*JmiP
z5NYHLoi7{Msj7q%T;_;#t=oP`q}}qGD3Pl+;{IW!^pSr-XDe|IL?xL^r~jYy7RLy8
zJ{enzcj}6lIJ-LstOn!(sC=5?c;v$jBO|1qVT1BrJf-M7WQ3AIOK$DE#X_oZHp9(u
zH_K6xNft>Q2!OD3>-;Vh`q#-{Ah;WtoBDeixstqBXrq+?Dc94qv(}x9A`nVu1B-{%$=2fJK{)qQ^@(=>x|HOY{ZcOY^}*Ga%bgFxyP>
z#&o4DUb?f;3d;kBz_Y~s;IxS8!y%d@6C6?6yD;iV&6~Y1L$oJj2*)`kA)MXPAI342
zF!=fr#U35Te(Bne>2St)&?u4>b2cP6*+(__z;PUo^Gz
zWH1HKd^4^s7p*O?tSeDRY14%=Ei+e9?v7-73}ZTdm^aBQpW$1;GUZ5C&gqvb1sPXN
zDxV==_z}dFi^iG5(NAeeX6C30rJ2+nT@_6MDdqx~xaVfx7W3>&TDqB|SsrcLN1V)4
zO==BnDD?$OE<9$`6{FP^cZa0J{F#<59i5j4^?;^qny6KXtX0q~l#mDI_$(nRLpjVr
zRuq*g7nT|;VPq1NuntLD4pZoeB5#@qQ^-UtzBIIizVBKs?xscSYeVY!%E5G+$uYHK
z9_qO(nyx6Cd6s;BavwPqAGv#tk$g)SekwBj^ctbtrghTFb;{!1w#U}Zh-g+J{W!e*
z28OeC6aJq(!tDRWBdp|ZXG}mVY;9m{WMpjg<7WT4CR@?j!0CTy>)Y8`nH%amncLbB
zF^IU>7|~dmI_TS((OA2g{O^)-`VRWmjs*X?e_PSq!5bKThQT=l$CZEG%^Y
z&C`6TZ5f-%hVr?k>tCkiT$~Ndk|w&KbY{3wy*N^~DeBszBxQ%xNL&<@K6X)~3+g{+
ziDuQ0tCKAuNMO=?toM%hj+ZmDg1k~VKdBo`w5CG?5o0L}>e-D&WkxRPxNT2H<1E6U
zQtJ^ioBsDBrtDv$FSYt-`OVaAnQ)eG9I(ACZ-%4Ua7mBvwF_0
zMxGX_505^$_dJs^olB3ip%=P1A)su{Sc~yRwkCD$y&}B%r2G86J#TsDew*EJor}+l
z^gTx)a`Q#2t=3n=TaD)X?c;rWwuCuf-J{zXOYyk=RJ|I^d)vP|s2em-(P_+jcQBHi
zd%>nz7vVul=-7rw>X|DwkdMpLFGnK@dCqP)cDxUv!27L9W{KxV@7Ah1f{J~O1q!!xMI)6(V5;x_}Sh#;^Z{&
zb2Z4~J{1Ja+SwJxbOy}tX
z=jVqP&^M^s)|5RnnX%$Qhu_LYQ*+4$yT!rAR(_rIyJI>hio;n`Fg!P}nf0a52e`Jk
zG1fa9&bjb$b2`-|HeCEWdUnq=~iTaMvbaqrNCJ4
zO9~l*7J1Cj@ho3o7GC?_y`Nx}m)*2^GBgAoV|f=3zF?KuwO>Q!q66+9KpEQKKj!rb
z_dL%nHYOvGS0)gv+>0~gjPrW)dV2liU!WHrDoP1Y8m|K7a8_cu4KFwe?H}3RG(Wlo
zn({YqHHM!eIDm-f8oxkbRGn|se(;XlK{#$B#)?8%<}k);Rr*)U_G-1;eoZ_B!Prrz
zv&X}fbz_sufNkb>rfpr-f#jUXLpG-oo~+nI1L&6FL^G8ntfWMdLuBxQ3IzGDz;E6EMoP&?LS6i&;oHo7gXwZAz>=p
zaJc35J`tbfBn9$CP~1b)gf`B$G2FqRRx!A#>VETY;!m*fW#TSWogl^74Hp@}ToW;z
zlp?#GVdwyFlm=bX4+ka9)dcjrKNz?5;`*>?Dho*lR{YM!k~Wi({D(|SdnOY){E*Fy
zqB4vlPF!2YFv_zeG%VkPQ)pc(3x7@_13fhcgBDKhy%!rZ?7@WGhs@=swyS&3iPChX
zHux2lagA0>4`op&=`85|7s^xy&(eXnO!NwY?PLDlJkx@S6bXyAbWjnMh)|wMFXEV_
zd1uz?8kS*C&Ytx~1?Dx`W!9NnDfQZiP*7R7M~ay@Z%|v62o788H_RV!>|V70ikXn<
ztxM#U2jKLdI*)NlbvTkKuql?e=$Oe1?7==i;P%}GJ5m-KI!PjSD@mMGMSatBO=;r|3k>@
z@l%Lh$WVjOHbpag>Ytb7E!f8h*E|`}i1qzFqYOEIG!EYtYvG`wWM5>VN
zd5F-vD|QwvNwM6m!XbC&{G<6?yQ86tu~^u+c+*`
z8T-g&Y-vVFg&AWlx{Ym^EMpr+_GN6v3~M@ePD<}dSfspGp0
zgR3N>DZOjJ6qKMK&iaOG0^x|32XGPp99o6C2eE<#6B_s?O;UWqTmt
zbPn^0foa&yhu`&OltCt5iJdR#@wKOI_Jv>H6Dz18mF5raqpRJT2fC#)kjP*q>pXQ>?RLwaTJFiVd
zdam5h=}w_%EkAt6MQUzm#;5PkL1H93{Kk8?cbY2Q&L_?fDya8^@ym9Qr)w-(J7Y=4
zdk6WWr76CkPl7$?D=k7L&Rj^eDA&|ih~@WFq!z8w8Um}hWK(5179Sq>1$3Cv>yOZ+
z%J9WW;;dB_tRY=zncqtVRZ^;I;;QS~hheAZUR7}KNuFCebOGyd486NCdNVP^s_4lJ
z0pkrTTpFmnet>tfF(dMnoRp^dX!K$_2b#ZE0_05h3{;-0f+cqjeS8J9%`uS2_3jWi
z@~UOT%HZFpo!8EHHw~f{Qe@>c27-q7LlC3$&-(Rp%d{P+$=^iX%>5b1ngeyCV|So|
zxj^&jdcBxf*S2ZwM%emL+%NuVMywCz}wQWq+eh#67dfVJ_KJfAqWabUv(oB
z30Ee_j=DUWTD!!Iolu?IPX!m_JasQ
z`)&s8lJ1F#aLCu%1L^JZ8tb;fLdD*TaHdn!`tq>K@YLvQ>!XzKlR7oob$g~q?~F25
zR^CRLJm?<$M28j!N&+$5XntQ
z_Suydsub04Cd@EPRQ<}FK1s*X?)_bvgj=1y>z&(^U}{~`nORlfWbOBRx<;Di$>PC}
zoz>?iaN$oGO2hkiDh0x~DHSsTmU}o2-xhN2o`qd18TslDZEpOYGojiYg1y!#)bb~_
zHAK5#nD~mNo(JxV!vL{eV`4j@p)<;@Uq1Cd8?&nh&+eX?D9;6mXRr%iHA}a3PNY}-
zjeo-d4nJf2C@zrnL1@I_^$Ynr*tF?xq2u$f&E>TvXux$^OjgayZm(4_)vG<8R=>5S
z7ID~txr@q+GCTNU@I_<1%kR`oGHl99xutEUrfk!&$5yH-XG@5&SB9=dWtQMOmimJ3
zijrE?H@rdd*ACRX`i1mNxoT8)s+|tt0|5i92i#)7P)R2wnA~^F*jEjsdzscf-j;0O
z>aJ)g$`O*$xNlE>E}1G?Y^&o2hUy)+9TY)lsuhS@itUPV(sk;2m9~S^BuaEnyYKUs
z>ifEMs3ksx#9J8YE8R+{@*nu}WK8<5Pkkhr9X_BD$vOP#iVewbDNl;@ZOjQ^lrx!b%mdNFL`x;}2yotw2(Q@0iGM
zmKOk9ipM3aS5GdDweb}#h(Q>rYmfXsDj2SdvFfbr^io{jKzv6nIA^U{cWxW*xR6}}
zKmRII{wb#V_eOjupn_WwiDW49Fm0@O;g|p~B2@L~`Tv9t-iqM$--yvt;f32l9iS?Q
zMUYUZA4NO~l*0!E6#3(RxNrYQkVVP!aCK!J6yDUmK|5lAhyluj+WBShD2}s2m8hGGVJMkVuuNYkeqC_!>DMDSs}1@2*{YOzu)mlw
YnCuorrUV`Kr>d@Y4#6uYXNX1r3-Q>OSO5S3
literal 0
HcmV?d00001
diff --git a/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex b/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex
index 751b937..9902615 100644
--- a/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex
+++ b/src/fundamentals-of-ai-and-kr/module1/sections/_planning.tex
@@ -40,7 +40,7 @@
\item[Correctness] \marginnote{Correct planner}
The planner always finds a solution that leads from the initial state to the goal.
\item[Completeness] \marginnote{Complete planner}
- The planner always finds a plan when it exits (planning is semi-decidable).
+ The planner always finds a plan when it exists (planning is semi-decidable).
\end{descriptionlist}
\item[Execution] \marginnote{Execution}
@@ -777,4 +777,252 @@ The steps the algorithm does are:
\item Checks the pre-conditions and post-conditions of the action it is going to execute.
\item Backtracks the effects of an action in case of a failure.
\item Corrects the plan if external events occur.
-\end{itemize}
\ No newline at end of file
+\end{itemize}
+
+
+
+\section{Graphplan}
+\marginnote{Graphplan}
+Graphplan is an off-line, least-commitment planner (closed-world assumption) that
+constructs a partially ordered set of actions through a planning graph based on time steps.
+
+The planner is correct, complete, optimal and computationally efficient.
+
+
+\begin{description}
+ \item[Action] \marginnote{Actions}
+ An action, as in STRIPS, has:
+ \begin{itemize}
+ \item Preconditions.
+ \item Add list.
+ \item Delete list.
+ \end{itemize}
+
+ \begin{description}
+ \item[\texttt{NO-OP}]
+ Action that does not change the state (to solve the frame problem).
+ Can be seen as an action with the same proposition as precondition and add list.
+ \end{description}
+
+ \item[State] \marginnote{State}
+ A state is represented by a set of propositions that are true in that time step.
+
+ \item[Planning graph] \marginnote{Planning graph}
+ Directed leveled graph where edges connect nodes of adjacent levels.
+
+ There are two possible levels that are alternated during construction:
+ \begin{descriptionlist}
+ \item[Proposition level]
+ Contains propositions that describe the state.
+ Note that interfering propositions can appear.
+ \item[Action level]
+ Contains all the possible actions that have as preconditions the propositions in the previous level.
+ Note that interfering actions can appear.
+ \end{descriptionlist}
+ The first level of the graph is a proposition level containing the initial state.
+
+ Edges can be:
+ \begin{descriptionlist}
+ \item[Precondition arcs] proposition $\rightarrow$ action.
+ \item[Add arcs] action $\rightarrow$ proposition.
+ \item[Delete arcs] action $\rightarrow$ proposition.
+ \end{descriptionlist}
+
+ \item[Inconsistency] \marginnote{Inconsistency}
+ Actions and propositions can be inconsistent in the same time step.
+ Possible causes are:
+ \begin{descriptionlist}
+ \item[Inconsistent effects] \marginnote{Inconsistent effects}
+ An action negates the effects of another one.
+
+ \item[Interference] \marginnote{Interference}
+ An action deletes the preconditions of another one.
+
+ \item[Competing needs] \marginnote{Competing needs}
+ Propositions that cannot appear together either
+ because one negates the other or
+ because they can be reached only through mutually exclusive paths.
+ (i.e. two actions have mutually exclusive preconditions).
+
+ \item[Domain dependent]
+ \end{descriptionlist}
+
+ \item[Plan extraction] \marginnote{Plan extraction}
+ Once a proposition level containing the goal as non-mutually exclusive propositions has been reached,
+ the algorithm can attempt to extract a plan.
+ A valid plan has the following properties:
+ \begin{itemize}
+ \item Actions in the same time step do not interfere and can be executed in any order.
+ \item Propositions at the same time step are non-mutually exclusive.
+ \item The last step contains the goal as non-mutually exclusive propositions.
+ \end{itemize}
+ Even if the last step is a superset of the goal, planning may still fail.
+ In this case, the algorithm has to continue generating levels.
+ % Loop detection can be used to stop when a plan cannot be found.
+
+ \item[Memoization] \marginnote{Memoization}
+ At each step, if the goal is not satisfiable, the result is saved and
+ when the same state is encountered in the future it will automatically fail.
+\end{description}
+
+
+\begin{theorem}
+ The following statements hold:
+ \begin{itemize}
+ \item If a valid plan exists, it can be found as a subgraph of the planning graph.
+
+ \item In a planning graph, two actions in a time step are mutually exclusive
+ if a valid plan containing both does not exist.
+
+ \item In a planning graph, two propositions are mutually exclusive if they are inconsistent.
+ \end{itemize}
+\end{theorem}
+
+\begin{corollary}
+ Inconsistencies found during the planning graph construction
+ prune paths in the search tree.
+\end{corollary}
+
+
+\begin{algorithm}[H]
+\caption{Graphplan}
+\begin{lstlisting}[mathescape=true]
+def graphplan(initial_state, actions, goal):
+ graph = PlanningGraph()
+ graph.addPropositionLevel(initial_state)
+ while True:
+ if (goal in graph.lastPropositionLevel and
+ not mutexPropositions(goal, graph.lastPropositionLevel)):
+ plan = extractSolution(graph, goal)
+ if plan is not FAIL: return plan
+ graph.addActionLevel( selectActions(graph) )
+ graph.addPropositionLevel( selectPreconditions(graph, actions) )
+
+def selectActions(graph, actions):
+ new_action_level = Level()
+ for action in actions.unify(graph.lastPropositionLevel):
+ preconds = action.preconditions
+ if not mutexPropositions(preconds, graph.lastPropositionLevel):
+ new_action_level.add(preconds, action)
+ for proposition in graph.lastPropositionLevel:
+ new_action_level.add(NO_OP(proposition))
+ new_action_level.findInconsistencies()
+ return new_action_level
+
+def selectPreconditions(graph):
+ new_props_level = Level()
+ for action in graph.lastActionLevel:
+ for prop in action.add_list:
+ new_props_level.add(action, prop, "add")
+ for prop in action.delete_list:
+ new_props_level.add(action, prop, "delete")
+ new_props_level.findInconsistencies()
+ return new_props_level
+
+def extractSolution(graph, goal):
+ plan = Plan()
+ actions = graph.lastActionLevel.getActionsWithEffect(goal)
+ if mutexActions(actions, graph.lastActionLevel): return FAIL
+ plan.addLevel(actions)
+ graph = graph.popLastActionLevel()
+ return plan.merge(extractSolution(graph, actions.preconditions))
+\end{lstlisting}
+\end{algorithm}
+
+
+\begin{example}[Moving objects with a cart]
+ Given the actions:
+ \begin{descriptionlist}
+ \item[\texttt{MOVE(R, PosA, PosB)}] \phantom{}
+ \begin{description}
+ \item[Preconditions] $\texttt{at(R, PosA)}$, $\texttt{hasFuel(R)}$
+ \item[Add list] $\texttt{at(R, PosB)}$
+ \item[Delete list] $\texttt{at(R, PosA)}$, $\texttt{hasFuel(R)}$
+ \end{description}
+ \end{descriptionlist}
+
+ \begin{minipage}{0.5\textwidth}
+ \begin{descriptionlist}
+ \item[\texttt{LOAD(Obj, Pos)}] \phantom{}
+ \begin{description}
+ \item[Preconds] $\texttt{at(R, Pos)}$, $\texttt{at(Obj, Pos)}$
+ \item[Add list] $\texttt{in(R, Obj)}$
+ \item[Delete list] $\texttt{at(Obj, Pos)}$
+ \end{description}
+ \end{descriptionlist}
+ \end{minipage}
+ \begin{minipage}{0.5\textwidth}
+ \begin{descriptionlist}
+ \item[\texttt{UNLOAD(Obj, Pos)}] \phantom{}
+ \begin{description}
+ \item[Preconds] $\texttt{in(R, Obj)}$, $\texttt{at(R, Pos)}$
+ \item[Add list] $\texttt{at(Obj, Pos)}$
+ \item[Delete list] $\texttt{in(R, Obj)}$
+ \end{description}
+ \end{descriptionlist}
+ \end{minipage}
+
+ Given a scenario where:
+ \begin{itemize}
+ \item \texttt{r} is a cart.
+ \item \texttt{a} and \texttt{b} are objects.
+ \item \texttt{l} and \texttt{p} are locations.
+ \end{itemize}
+ and the initial state is:
+ \begin{center}
+ \texttt{at(a, l)} $\cdot$ \texttt{at(b, l)} $\cdot$ \texttt{at(r, l)} $\cdot$ \texttt{hasFuel(r)}
+ \end{center}
+
+ The first four time steps of the planning graph are:
+ \begin{center}
+ \includegraphics[width=\textwidth]{img/_graphplan.pdf}
+ \end{center}
+
+ The inconsistencies at $t=1$ are:
+ \begin{descriptionlist}
+ \item[Inconsistent effects] \phantom{}\\[0.5em]
+ $\begin{cases}\texttt{NO-OP} \\ \texttt{LOAD(a, r)}\end{cases} \text{for } \texttt{at(a, l)}$,
+ $\begin{cases}\texttt{NO-OP} \\ \texttt{LOAD(b, r)}\end{cases} \text{for } \texttt{at(b, l)}$,\\[0.3em]
+ $\begin{cases}\texttt{NO-OP} \\ \texttt{MOVE(r, l, p)}\end{cases} \text{for } \texttt{at(r, l)}$,
+ $\begin{cases}\texttt{NO-OP} \\ \texttt{MOVE(r, l, p)}\end{cases} \text{for } \texttt{hasFuel(r)}$
+
+ \item[Interference] \phantom{}\\[0.5em]
+ $\begin{cases}\texttt{MOVE(r, l, p)} \\ \texttt{LOAD(a, r)}\end{cases} \text{for } \texttt{at(r, l)}$,
+ $\begin{cases}\texttt{MOVE(r, l, p)} \\ \texttt{LOAD(b, r)}\end{cases} \text{for } \texttt{at(r, l)}$
+ \end{descriptionlist}
+
+ The inconsistencies of at $t=2$ are:
+ \begin{descriptionlist}
+ \item[Competing needs] \phantom{}\\[0.5em]
+ Consequence of the add and delete list of each action:\\[0.3em]
+ $\begin{cases}\texttt{at(a, l)} \\ \texttt{in(r, a)}\end{cases}$,
+ $\begin{cases}\texttt{at(b, l)} \\ \texttt{in(r, b)}\end{cases}$,
+ $\begin{cases}\texttt{at(r, l)} \\ \texttt{at(r, p)}\end{cases}$,
+ $\begin{cases}\texttt{at(r, p)} \\ \texttt{hasFuel(r)}\end{cases}$\\[0.5em]
+ Consequence of the add list of interfering actions (mutual exclusion):\\[0.3em]
+ $\begin{cases}\texttt{in(r, a)} \\ \texttt{at(r, p)}\end{cases}$,
+ $\begin{cases}\texttt{in(r, b)} \\ \texttt{at(r, p)}\end{cases}$
+ \end{descriptionlist}
+
+ Note that because of the mutually exclusive propositions at $t=2$,
+ at $t=3$ the actions \texttt{UNLOAD($\cdot$, p)} cannot be performed.
+\end{example}
+
+
+\subsection{Fast forward}
+\marginnote{Fast forward}
+Heuristic planner based on Graphplan, hill climbing and A$^*$.
+
+\begin{description}
+ \item[Heuristic]
+ Given a problem $P$, the algorithm considers a relaxation $P^+$
+ where delete effects are ignored.
+ $P^+$ is solved using Graphplan and the number of actions required to solve it is used as lower bound heuristic for $P$.
+
+ \item[Algorithm] \phantom{}
+ \begin{enumerate}
+ \item From a state $S$, examine the successors.
+ \item If there is a successor $S'$ better than $S$, move into it and return to point 1.
+ \item Otherwise, run a complete A$^*$ search.
+ \end{enumerate}
+\end{description}
\ No newline at end of file