From dd192b047c08c90c92da9abf298d9cb5e0dee216 Mon Sep 17 00:00:00 2001 From: YuantongLu Date: Wed, 16 Sep 2020 14:37:49 -0400 Subject: [PATCH] Switch to YToke dedicated backend and updates #19 (#20) Endpoint switch Add tracking for impression and video tag Display tag and finishing percentage on video list --- .DS_Store | Bin 10244 -> 10244 bytes YToke.xcodeproj/project.pbxproj | 142 +++++++++++++---- .../UserInterfaceState.xcuserstate | Bin 296597 -> 341869 bytes .../InvidiousAPIVideoListProvider.swift | 89 ----------- .../YTokeBackendVideoListProvider.swift | 113 +++++++++++++ .../StandardVideoStatsMutationProvider.swift | 66 ++++++++ .../VideoStatsMutationProvider.swift | 18 +++ .../DependencyContainer.swift | 2 + .../StandardDependencyContainer.swift | 11 +- .../VideoListRepository/Video.swift | 2 + .../VideoListRepository/VideoTag.swift | 14 ++ .../StandardVideoStatsRepository.swift | 27 ++++ .../VideoStatsRepository.swift | 19 +++ .../VideoList/Views/Components/TagPill.swift | 54 +++++++ .../VideoList/Views/Components/TagsView.swift | 55 +++++++ .../Views/VideoCell/VideoListCellItem.swift | 7 +- .../Views/VideoCell/VideoListCellView.swift | 66 +++++++- .../Views/VideoListViewController.swift | 49 +++++- YToke/View/VideoView/ViewModels/.DS_Store | Bin 6148 -> 0 bytes .../ViewModels/StandardVideoViewModel.swift | 53 ++++++- .../VideoView/ViewModels/VideoViewModel.swift | 13 ++ .../AnimatedCycleTextView.swift | 0 .../Views/Components/DualChoiceView.swift | 108 +++++++++++++ .../VideoView/Views/VideoViewController.swift | 66 ++++++++ YToke/en.lproj/Localizable.strings | 12 ++ YToke/ja.lproj/Localizable.strings | 12 ++ YToke/ko.lproj/Localizable.strings | 12 ++ YToke/zh-Hans.lproj/Localizable.strings | 12 ++ YToke/zh-Hant.lproj/Localizable.strings | 12 ++ ...ndardVideoStatsMutationProviderTests.swift | 66 ++++++++ ... YTokeBackendVideoListProviderTests.swift} | 77 +++++---- .../Mocks/{ => Data}/MicrophoneProvider.swift | 0 .../MockAVPrivacyPermissionProvider.swift | 0 .../{ => Data}/MockAudioDevicesProvider.swift | 0 .../{ => Data}/MockPopUpAlertProvider.swift | 0 .../{ => Data}/MockVideoListProvider.swift | 0 .../Mocks/Data/MockVideoStatsRepository.swift | 25 +++ .../MockVideoStreamingProvider.swift | 0 .../Mocks/MockDependencyContainer.swift | 64 ++++---- .../MockNetworkResponse/MockInvidiosAPI.json | 150 ------------------ .../MockYTokeBackendAPI.json | 63 ++++++++ YTokeTests/Mocks/MockURLSession.swift | 9 ++ .../MockAudioInputRepository.swift | 0 .../MockPrivacyPermissionRepository.swift | 0 .../MockVideoListRepository.swift | 0 .../MockVideoStatsMutationProvider.swift | 25 +++ .../MockVideoStreamingRepository.swift | 0 .../StandardVideoListRepositoryTests.swift | 4 +- .../StandardVideoStatsRepositoryTests.swift | 40 +++++ .../StandardNowPlayingViewModelTests.swift | 6 +- .../StandardVideoListViewModelTests.swift | 12 +- .../StandardVideoQueueViewModelTests.swift | 24 ++- .../View/StandardVideoViewModelTests.swift | 72 ++++++++- 53 files changed, 1291 insertions(+), 380 deletions(-) delete mode 100644 YToke/Data/VideoListProvider/InvidiousAPIVideoListProvider.swift create mode 100644 YToke/Data/VideoListProvider/YTokeBackendVideoListProvider.swift create mode 100644 YToke/Data/VideoStats/StandardVideoStatsMutationProvider.swift create mode 100644 YToke/Data/VideoStats/VideoStatsMutationProvider.swift create mode 100644 YToke/Repository/VideoListRepository/VideoTag.swift create mode 100644 YToke/Repository/VideoStatsRepository/StandardVideoStatsRepository.swift create mode 100644 YToke/Repository/VideoStatsRepository/VideoStatsRepository.swift create mode 100644 YToke/View/VideoList/Views/Components/TagPill.swift create mode 100644 YToke/View/VideoList/Views/Components/TagsView.swift delete mode 100644 YToke/View/VideoView/ViewModels/.DS_Store rename YToke/View/VideoView/Views/{ => Components}/AnimatedCycleTextView.swift (100%) create mode 100644 YToke/View/VideoView/Views/Components/DualChoiceView.swift create mode 100644 YTokeTests/Data/StandardVideoStatsMutationProviderTests.swift rename YTokeTests/Data/{InvidiousAPIVideoListProviderTests.swift => YTokeBackendVideoListProviderTests.swift} (50%) rename YTokeTests/Mocks/{ => Data}/MicrophoneProvider.swift (100%) rename YTokeTests/Mocks/{ => Data}/MockAVPrivacyPermissionProvider.swift (100%) rename YTokeTests/Mocks/{ => Data}/MockAudioDevicesProvider.swift (100%) rename YTokeTests/Mocks/{ => Data}/MockPopUpAlertProvider.swift (100%) rename YTokeTests/Mocks/{ => Data}/MockVideoListProvider.swift (100%) create mode 100644 YTokeTests/Mocks/Data/MockVideoStatsRepository.swift rename YTokeTests/Mocks/{ => Data}/MockVideoStreamingProvider.swift (100%) delete mode 100644 YTokeTests/Mocks/MockNetworkResponse/MockInvidiosAPI.json create mode 100644 YTokeTests/Mocks/MockNetworkResponse/MockYTokeBackendAPI.json rename YTokeTests/Mocks/{ => Repository}/MockAudioInputRepository.swift (100%) rename YTokeTests/Mocks/{ => Repository}/MockPrivacyPermissionRepository.swift (100%) rename YTokeTests/Mocks/{ => Repository}/MockVideoListRepository.swift (100%) create mode 100644 YTokeTests/Mocks/Repository/MockVideoStatsMutationProvider.swift rename YTokeTests/Mocks/{ => Repository}/MockVideoStreamingRepository.swift (100%) create mode 100644 YTokeTests/Repository/StandardVideoStatsRepositoryTests.swift diff --git a/.DS_Store b/.DS_Store index 9c4028387d9ab20f584c9da10d0f5dd7577fdd21..dc324f3bc2dec18fba8d038164b2ad9217332153 100644 GIT binary patch delta 120 zcmZn(XbIRLEY1}CW^$vrl2C5Gi%U{Yei8!%1IOe4W{+GuC)bOsOwJYOVS{sxm=-Wh Uj+Ic`d{f+tpB#;oZ;ERJ08&OP)c^nh delta 120 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≫P5CzjO-?24BZaebVEt(fPirw^pM6hk)!5?;vwdR+BK2eng=A;q(H_d zCcg6I5~_)6YSIbMBA3aX<#M?KI1RWg;Ie^pS{K@lh@qD$_ljx4W#R#?d;DpP+@zHw z_cJaixk^LLD^8};X!C&NDovEJ>9MOMpD0fTP6y6i*QIsOuPZ7)etg|{Evm0 zm0T@P2hIbW54arQaxL9v5qXAg^K80#iEcf&{ImT%M9($cpy^klk`q-x4~ za^2R->*IBkUXeG_>I#_EwHePMpDmvwZ;{UhE(lx*xG->-$jZ1npNOHCNwBdVj~IBD z8P}0qldH`OO{Ph`c|dYaZjtvSXo4MN_z2~jn%s?Nk?)c3mG6`92QCU+E8q?XuC=Af zLqrU{O!={xCfs49a(etYJ!Tc;r;H0quF`(06shM-r7DeD@!lO3aQWSIM$tNmNp}L#m{x zN>;o|O16UL>=@t*@LB2==$rB2Z2TzWWbGiA^O(8W%*A9Ai_m3po<2`p;h0k;j>ro~$M(n+GJmD$Q1Y~{F~zzx8wC21FaW84*)lC7$`Ha5=HxZevlf$Ifa zAK>stV8V`JU6f_yQVjhuLE5w~TyLt?dzfEkX~oPP(I1m^(EQMYxxVB`)ZP7_b>x|* zddc)BHZO_gG%ovmoCis{0Jwp5mz_|wytt@nO2rhxFLW;Ot|5|jj$Bo8B=_>O>u;v!IP`pVq7h~NioIA9botHE>oRk`aWnL zki5R1P@Yau=^3ihC{v~9@GQ!H<$2`=mmA*K%O5ZC#C8+cZRp~fWrQeB4e<*({e<^&mX9fVS`lFxFEbenA%D`Ty3o$p|(-msz<6vsqNIG)%NN!YJu88 zEmVutVzor=sFtdo)H1cRTCP^`ud7|vZfbY6huTx^rS?|)sD0IbYJYWrI#3;?4pxV# zL)BsGaCL+_QXQoptBzL3sAJV}>Ui}yb%HukJzhOQourQZ%?x?EkMo~*7^Pf<@*Pg74<>r_xz zsb{FG)ivr`^-Oi0x?bI&ZdA`wH>sP|v(J92{^+xq3^=9=J^;Y#Zb&qtQh-KRdQJ|`?ypI2W{ zUsMmMFR3r9uc)u8uc@!AZ>Vpon2=Tp+!WxZ0ap#&4B%z~HwU?*jKea32EqF>s#%_Ze_s0QVJe-vIX=a6bU| z6L7x(_Zx730QVPg{{Zg*9_Kp{ftP_-fzJd!8+aG+Zs5JZ=K${qJ_vjm_&ngFz_$Xv zHSleKKN9$Mz_$m!0Qf@Si-GS5d?(;L1787rSKzw?-xK)W!1o2dKkx&A9}N6Z;D-Z0 z68K|*9|Qb2;Ew}-BJd{we|QfWHNBC_jHY@OJ_kw?7{Edx5_n_y>W182Cqle;oKHfqxqKXMlee z`2E1Y0Q>>+%)X<(tG=hcuYRC@sD7k=tR7T9Q9o5bQ$JU~P`^~aQomNeQNLBcQ@>Y# zP=8c^Qh!!|QGZo`Q-4?gQ2$i_QvX)}(K0lL#%a7JXrd-*vZiRNrfHd4mX@tKHJ7Gq zZq1{4HJ_HFb=GJ4$P(9j&$3j?oIV z4qBmBq!nu=T1Tx^>!g)wowahULhGV+)w*fjwH{het(VqY>!bD6`f2^O0op)qkTzHw zq7BuCX~VS<+DL7bcC0p98>5ZY#%bfV(Y9#kYFoAQwDYwKv3BunXdO$n^#LgfN0r4ad7lF7M z#0x;Y9>n`Vd=A79K>Qgb8KfXc1t9eXX$(lyL0SRQSs+~j(rq9;4jAB&z69xSkli4+ z2DuF6K_E{Ac|OPh@>Y=Q3hHoBr+``u>Kafl26Y#x_k+40)Q>>@88ij75NPc|>kisT z&`tua7PPg1w?(@Fw1+@D0NO{O{Q{X9WJVyf17!Aw%+Zip4VlXzb3J5U3Yj-T<|B~# z5@dc1nZH7o23dKKRR~$VAZt8i&4jFzA?qy2x&pFpg{;RQ>lMiQ0y27MXm8$iDl^xdF80Qw7{e*pSV;FiE00Qb@0?gs7=;64f53*(}-+LcDs zi%fYqCe5+J_C5xq9}(vZrBf}FJVA4oWuvRg7D&{tVWMzxj#2+Y6zTP|q%`ajv&-4Z z-tHFcCP^vS*qiSmF!K+%eK&6L0^M z?6f%h#_@+f?Wmfn+QKpYj;o$Zr{uQ(O1en#Z@Pc*$lhc|4;%$S()$;6m}kFN`BS2PNP;x$B>aEa>6L<*X=N!%y3I~7LF%Vn&D{T!rq00s;A)P<8LH^ zcn}T%STf+2SO%(N(Ki13fawW&1x zm`OaPQa>r(ilcTenTDqLIK2}!{hY}?tx~T{Q?6kuV#-(vV2x=?4^9;O4HH{esZVK= zSgNzB8-*u6i`=rhNd*7M1ml>`bWNjWw_@4e37!A;=i)aeVs)iHJx$&0+$3b)96D{q zF8yyNeQl*aDP8HtO=SZWXf5Kr%*I+3*m~kh5A;v6;0if1p*AylCUae-J|tb4ht89- zX_bl7T9c$8ZbPL$FkK1pv%!&(2z0y>n_H~be)?>7dYlM1jb_J~a*p0KdUxm`4hy_m zyr|+`aA)(|OV5T(EnSLhcoJxIux;M`DXeYvGK6?q@#7ZS<8(~** zZl!)^x>rH(Z<5h7@z1<{fJq}J!S;3I{#a%!c6sNe@7EemCYfu3TxTo^*)oRaS4l*+ zWg;)A)E`Q`Bc^Wao+iOdYuncv}0D)Sl^eQ4`uRst#*B$Z#5T&P~VDc$SP& zHn!b~gcUKlmsILg6Ypp2KH8^?j3X>&=jiVEKV$WqD7h1pd|CQWGQG*RWXpcl3oug> zS7lg11R+!AxHkKp?ZV{XB&1}qgR~~ZOkcw!nD%5sufnOm(-oSQHvQO%w^!=5>7F=F z8*2c7VFm5u=}1GBus3<@HJDw>HI@48bT5S>+k1S15wy5X@m(T9BiI$}sMPN`-ZYAEl2~1Rd`Y+QB zpTAV@T;_@F{5PbpiqSYw6T*y%x%gZm^`wk#qAF9Fs2eNwaV7_cn)8+lh`j{FFL;&8 zZp~oAZf=5J2KKh`t8tH6ToSL{bj@X=ZcX2NYgk1%iGT?j9r0^F{X%y7J(c?8G;doY zu+cWnW=6=3rB;z1n^;*(nbbR)P+5(bMr?f3F#ao`$$Hc^%hRagak#=nd=+28lzAe3 zi1|^BJb~TgwRHa^R-omt+5A!W6-s!boW#V@y5q>=rzBhdq8`}67i7_*k z2+D3IXy1SKuHN7^JylD2E0g%#zwxWsOfoj<~RQRb3*HZhJ9jsCf>J~nV`4Qe=jYJ%}HK3qJ}I=W-Ou6KDIwm&Kpb) zj!JpZtoi>R8E$-ITVSk26>q}dWoo_G)VD(VxF6VgHMACV zgnCj4E0_SG3Go=y*2U%wBd?hl9KOp?^(n`EwomFy<adt8Qx-+$4l4$icwdGyVOf>>v^1~YsA8KfYVgFczNgp$NuHO{OtiBJ zdd5y_oAtoBqN1Y;EkTspj%l#kl+eu9)J{xn`6$F~_%G^j8I`%lG5u(mo zz=Vb>_3>#wkhYkYtzEWdYL1;UgD&ZjsNxbPEt39gw3RhUQz)&sbu+ONmk(*IDLI)5 z%1@sj!_Lr$(0uf0vuGvNq=?gGozCPP)`X7in4@9$*sa- z_2bf|BhlkYIZLXoYa?qr6W1aA$F8Bjjp}0RTBD9|BK+4ec}11_$TZcnS175)SXeQ+ zhtDP`;Y%v@RcVSbjAUY4L|eUon+TP71K0#8d}*bAnt5f-8*EupyQpy1{AqJ>aqhy} z6}5%6cn_=NJ5sXPH8Q4tFh+QdO$6bV&63mYjzHkI;jc$5woYH)z^_7V&|TmzL7iRgFrRI;6vk2LzGE8 zsi|Rl@|J)@0dd>dJFUI@t&yRy*+($3Q=1TAp~PDCWWJXeZ$>Gj0om=Cw5s%@0R||; zR}39HJ_!dM*h#0SZz&T;KQ*z#D7zyQIZ}&KCUnD+a6SkmI z-||1x=#V$kxwEDg(mv0^+L^O(TrY`14=00XMlP*hGC9@!@`IVY!2H8XXVJ*RimO8SYZpQuzd z6Lw0a{-{ZH?Dgb-FTdKb*oPYU6`w;9pH`hco2ho%f77KRsojfb)-0NJGVMGk&@8D< zm5`QQ!!Dz)QlFT3ha1nYPBe%OlWl5~TgAmp;HvZ+W`iH2mFYcx3bDiqOGg4Zn#ze1eLQ5JmbnLeVLt*HXLwiONpOrJ1ymjfD9{YnC zdkm@1#h%ed@*)x?uVa!oG_^_%7mwmZex)_c29+cSXcLomR{9}0!_Xy0g{>G><6(#F zbD5~kP4E_I#hI~7TR4;KkNuf=6E9@4&S^q|0lrmQ$$$yyU&c;&?!OP6S)9m!u{D%fMX4F$D^Bj}5 zBmJ9akYRs{S#-zt)|3>H15Doa>B}=Ji<(-~MQ_A;rAH-J)@w{&efoFPh9nhAHVnx_ zJ!fw-X*Zn@GYLGcdz9iz4v|b-D$u~A3eh}lLVNR}5p@)j1XMe(k-kkpM zA46R;i!E+Su*AyylAZt7N_|ec{;Ex>gs0ky&n0}5l-KXrCG1I`*F?85aZgftKQnoE zG>@G@Xps?LbQOW5T+mws-21II9R#-+0}6Y%_h=FBkn z!fG*+JQdxTv=^HYPNB_$bz(|xeDKzsZZc(GoU=C*{ZbR&#T!A^-sr^BYAhn>?B^Vr zadf@2zjJ_dpmUIOuycrWsB@TexN`*XuK@ol@UH>?I`D4*|0eKn0sl7e?*RX9y>nDX z8}cIro#UM2IXFvj1i(XYv=`qp6ReaejLNF(gr;b{6LE);4w) zjM>*LSsWX|+SpkZ*UXqP7pDiEIc5F~a+cPKa_DldB>Gt0p=SE@+G>oxH*&?cqvql? zPRW!uLYgQj@t#aWg$LBkB^jD@jS1&;e)TpdPFnsxt`K1CnT<;baJ=z@H=q9CmuwX& z=R)V=jNI))H)kz4x&r^n{27a9y150dAN)3h z{%4jy#d$g@Kg@X=IQjtpNviT@nKjOH2x4oUXFAt8*E=^jH#*O9ZgOsR;*9B^0slGh zUjY9l@LvJ{HSpg6|1I#}0snoybBl%81q?Bqe)|U-V!v33(RD;x5L;9;cdh~Ae+#ke z2x8X*|D%Q2E=0_EgL60e0RI#4KeMgFt^4&Xv)cDK?=(=uC6*AiUkNHW$vvX>TO+7l zWEOkC`LIFQLzJ*TQWZ1HJn4Lq5cZVwY3E+&GtPa^XPwVE_dB0=;%xbU0slAf|A3GI zf&&B&1Rewd1Q7(O-g&?x>@`N%TOi0W!UWAEOvr9AVra6P!H9iE2>Toa#UhL>sOS7z zc#3>LP{C2fwn$iKv(kTZ{%Y`r>#=kNA(McD>&0{jAuEwDZK7H19~VdYaybZJf-_Yy zR>q~cd>KdYa;YxOmFdcIWxJd%mrHlKT^^Sg1RVr72p$mdcOM8jAmoDJ2O$7L5QNY! zSB?pp5OjrI5m#PD8&?#Ba11kSE(P4v8iXUTy%ccmuK#!1%cBPO>u)spqZU;!Wv?K; zm*B*dvv7)Q;~Q$S{!cZnt^%ae)d2)+5jz)I&C69HJmo5Jbpj!eQke%rK4Pm+&?`(> zy107as#mVAu5P%bfN&THtw1>ZYR3r~ZKPM~s)=tz+o~{~wUgbF+76>;&7WUg#s0*$ zKmOY>=nN6ZvJaVl4_yOK{MX0hf|sp(6&X#n-p#y{!LDHj>bM{jqTUu!cj4kucvVLx zJ|UU&%wl6)lhK;G#=6G2#=DMlO>j+g9q&59HOX}%2<<>XKHGzE386pB-R>ut`*2_a+lCm=Q@Mh zQP(PJN6QE$YbYh16De_QFe%yK+GN0W7KN)KRWY;7R@W7Ttn*ywyDo5D=(@;tvFj4o zrLN0dmxF*Nyc-C}W)Bd0g3t?u-XI{geL?6~@4C_=>l#MZ^&s@Oku}&NYgh|e&C*W0 zZYN~j0RpbtXS{5<$ZDCcdtCRD4+sN67{s<{5f#0aS?!Ow9ybWX6*IA#hY(brq=XGk zAWYwGmfGjqZvgfj1#Eb#Qf8T#UAP=(z3Ua%tFG5vue;uGz3F<(^|tFB*SjE$1Yr~i z$AT~#gfSqD1z{Wr<3TtMgbDSo_btEy-L<_K!S^#Svz^)vq6{x!rXej zwMm$Ml=KRTm+07r&a)A=kaz|pULq`RA*@*l(<_iL9T)7HZxW_=N5b?TdQb8Jp$3En zY>R~D=svUB2k3(h!Uj>o77gf^ZrLr-M*euUA`y&DQ7WbCIz5 zAb^dqwIHkqVFN*IV+&%k=uO{(S3R#fHo8cHCs1;(YxggSZPRac8AEg<0kbeJ3IA zO8qK*o4#GYTE9lWR^Optr=yRx8HBSzI0u9+Ae;-rRuIku;d~G-0O7)Vz1|}3CjDmp z79{RA5H7M2cPR*0fN&)t?y45znuj=Cl6;%~FbEf0#63ocdz|B4PjWm6m(*bu48;wa zv~6ac@6)Mw)lEn53VpK62q!O4)Gkjz&6DA{{k_(`TCw-bjpjLC)88~$dxNsJE!8>9 zGVkkO64pM@Kh!_cKh_WGpXi_JpXs0LUx08m2-kpcEeJb6xDEuQZzl-#AnXF+hI;)g zi?#0!4^96WgxxmQZniwM+gea-7S!B4qUIJrxY0z-EhB3DR<}w%;K&ByCUfi7C06Nf zm)k?_n%hlby9GgU`zUO;Ccx&_&DPT$bVn#(?l9$RPpV?3sKea_$d|jd`v`X%cU$+7 z?xWo8+(*0HyV2Rgcb7XsxC?~4LAVEmdqKDlg!@5w0E7qY-5pH6+#LeF(MbdNUZI+oJ)D8XbbrR%Xo zy0~JKl!@+123@$kHu`2yq$*~Xnd+WL=$huPa#y>jyJxs(x@Wm(yXUy)0*O>V4Z>a! zo&jMW2+xA>90>bCcpiio>fQ4#x@s9+=*zumqw6J$u2);=Y96{)6S~%baKNH#9nzIN zH0D0reXc>)7E0F31d;P7S+69L<(O3goEbRt>>GS{yg@}liqmuiAck zAbbPDw;+56!uKHj0K$(T`~UReSF_;d5fLws1j4T- zULG~2;qvGnF9plvptR-lz2j(JW7@aJH4<;{3}&4vrKDG2PDgL zgr|+Ct>;M3QJ!|5qdo0C$9M`r_y@!c5FH?LAo3szAc`PLAj%*r^`1hLEKjLHmZuy< zHAa@0ZIUJGEo3zhS^WuF13=U)vIZkro*|y0CjxO(uki?o`E0QPrLWgs|zJ8J?M*S)SRRIi9(md7k;6 z8W6o8`asM9F&9KXhyf6TAcjB;gBYpzEVKw)$_P6d#5@~eQH!v{TL^0&!po3m`4C*6c7}PhmmP_wB*K@u>7kXPr*I@(`3}_);trF?tZ#GG}%yXqd z7sfh}uGXoFnPsl^+)U`&;knLpy=SMV-m}YdgJ-wrM$b(kwgIs%h)05W6o~CWJQ~FI zARYr^0f-&yJs9pHKSI!R2czpA5DRT|l~{CjYN4xn=z5aS^%RIj7G2K}y7oE0CLa(n zFF|Env|j`> zpLjm?eCGMw^M&V2&sUzWJ>Ph~1rgi33J|-1h}X~!M8vxXh&@5<1!C`d&-WHzzc9Z3 z0I`paul^QagIf4%7QVa+^5sQ>`kH)svyd;nr`Jh7q_;@y$F|6q$|~LK^ZF@Y-dxJp z00hMwq)6gZJX( z7QmVZFm$)Jd53^F-U4hm0wxr3ymyor16t)6w-=8CaRPp?_th;_#(O6kgy9!xJ&q@+ zU?2-k$O(yrg@(88bp(svA7O$s)mv@ARz+c}Omzmc%pC7h0^3~gJnwvOjdy`}p?8tD z*1Ood1jH#IP6crqh*cm~gE$?;86eICaTbWP>%Ge?*iJEwnYRwaIX2klS;lNZ3v128 z+9tx% z(oT}MNxHQheeY{t+J)H7i(QCl#_9+rZ&SJ;fiC@C6O<3U9~*FeMBzFkRVlN~7v7%< zTwi*>@_z08#`~@JJMZ`2AG|+$e*$q0h-*PS6GVJZSr6g{5I2H&7Kocb++6Sd#e(Zk z11=v1HO{udwZ($#ycW2c1ukDU!sT;;58e9$zA!agz7PfLTtvi&DcjgS zZcPBo&6|T(e24qmP_leSP_oWXRg974Yws&VvV6z*3Va=Wg}x$Rv9H9}(O2s01mcAt zUIgOBAYKCEr667g;^iP>i+&}DSJnGEn`HUAF|yF}-)1B08jGwQEo3zhS?F$U^Pzvd z-6HE)B+ECN=K1FPYJ3ZP3w?`xwZ6qZYzTLPSP$YZ5N`l+H;6Zah!KmMLA(XTTkCzx zEVP)v$Vf>!gOMf@$_W)SySXc2$Qx!boDKj)KvZ1Hxw#SwCDy+9vi zqH>Ava>ICCM)A6fSfMMa@w&Sa>A&7hVj}#jn}=YikW40`|cuy-RQf?ceC#n z->tsee0zMi`|j}F3F7@AJ^k|C!VXZvTz@)uyZ)q^5+|^&<#YMo@X`LmZa(ZkMB}xWV1fZH zY#N_Qq{|U8N%_e4i9r|kWMXjj*;K{MGGFpc3z8`!)`hN2L?E3}8 z{UG9%zX0NkARYkmB@kZ*@f8qX1@X0d-){z8zQ25b`~DFk8EtYn5MO6>iEo1V7KnJ! zy-0B4y%xNh1+N?z;+3O=h|akYyU+0=UL-g{K1OhYMkp+}azZ)icU^T=ooUN*@^ffR zt6L7nw2-#9x91#=gL}kxz|kXtHrhXsb0oj|Diqkd7tSU@{$nuZw9n~40n90&0KT8< zOlFzVoSq0^PN$r*oX$DrITblwa=PYp%jure1H=zO{0PL4K|BcJCm?%QSB}{e|23tq9;?5WljSx9`9)6LZ}NfIqeX*gOD^CjcG?;@1{{$0LBQdvhk? zXEGUYBx2qIZokC?bXm_d>wQ|zblQUER8#7{M`M+PwS_kBhXm@}nV*=&=H)Cf5UZhx z{gkShS!QVt5X6?{EYDeyb8^ngoKtd6%{eXS^c-}!(9Hb`;%^}S4&omm{t4n=ApQ;F zKOkk)=d7|2JJV=Eb2ftHh#@BNW(z8bErc}>VHXj?E(VFS2)hgkbG**+YN=0S=SP>Bmog|ypCkyVGSqHFpJ!fbCW?8rp@*NNlK&0?Kuw-sP4$QGv}_H zyL0Zzxi{y&ocnVg$axSX1tb+D4WvwvvOvlP$qAARBpoDoea^!cR8KId_JZWGLFKcc z^0z?MJW#z#pn44?uLaecq}|+u?IwOO#7c;w8w;xsa%f1aTMmY_5UU(wc|IWqOUg~) z%I#=vqV;9YHwId0ArY-Ws$yoDpK>z@TR-RglJjfMZ#lo`{E_o#&R;oy=b%*zffNQQ z0#Y7G`5;9>It-*%ARP`;>-t=W$yTl;+?K0kw8=#ZkFc?IBxw^RG69g(z6Gvkfh*UK zaODO-YGcBc8%DTtBfj&=2c)(j-odumCYtkJL-~Kq>^O z2&7_=N>NbA4`K3$a1DgT2QhV#7cxw;_htj=tLjf>_TM#F_`Oi3G9Z zL8`D2JCPtZ84<$|NSLvJh|w(~*50i3>fD(IVlyaW-3TeODPr9d5mO&+-77@>d(*+s zU65OAkhX}D)+<$cQ|5}?)r7Q@b64h`l6z|IX}PE8*5yL(s@yX`LR$NR)DNWoAPoR% zAV`Bi8Vu49kcQUhuCYklU^JAun?V|8BMoOjGv+Uoj%@+0c|g0AfOZ*3!!6LRM9`9l z^>cUR?lcg)o+37qAhL@hHYyP@#}g(cH|O4Fkaa61Yjmn&W|_NlA0uSllY4LOeYyAN zK9Kuh?nAi`=RT7AC`e;L8VAyNkd6as0!R}#^^vYLl1bhx(Vz6DaHMb^8-guUn6N z#{7pNU;b7cPd*^kqKi*ANSB!u;XlgXp3>#VNubb=S%R4OF_?u;{?Y`x^p6-Q{t|yD z3YWi>!nHhADYHyh{{V!`-_76M-^1V2-^<_I-^btA-_MUt;mIJa1nCrzP6g>SkWL4w z4kQ3+6-Z~)`v+QZ4P$VP0%^4kt}`vTHnhOiJaD16waq^nq%{^?QxGnGtA85#kO8*R zT5}s4FYBM>pKIVXhvK!4fHI%rwLSqax8n?xm0JH&gRdo&uZ^jSnPpD#pGo*S)qk4* zbbp;6{Hy$D_*eVa_}7B82_*ES&IaimkhXwyE=Xu^&jSe^#|!HH>ny%DF~0Da3vGN| zZ1Htj3t!E{*A;}XD?z%*;%j?Kx68lNe}h35`dVnXE+L3uFbfUWr3qx|FPV_s=D))L z>vjs(<*7=UW$yDoNx-__|A7BN|3m(V{g3z`^*`o+-2Vhfc*R$Nv<;-~AYBd8H6UFJ z(hiWW1L^vD|5FB7zQ6p>`k(Xc%V^_&0i>M_EbK9oc7uf70cjRL^nXM?AngL_2DZh9agpBNtoJYcUmJvdMG3nRJ9qrwl5QgDrUb&=x%I7k zwTpXq^#APt&0y_U%G#}|%9}F(324Y#AS2)iZ~;Cb1jK+8kON8p!>fBhLjMroa_tbtP!_15bOp*OU5}+I zW|rw07((dk73dx46X+Z07w8`t5EvL36u<}s8nY)sdJ3ecLD~z_Ga&5)=~qU#Mms{v+9=g!s+7_4!(hC+{)hV0Ez}!HMK^A&k*hC&6h%BUJ zy_86nW0XnB(!dIXtmTxfS5g%-%bXtAK**{KKwwqijKJ!^n!wt?nSphI^&nxd!|Ncu z0TMQN`1<=cNN7UQAioFF`}Kj17Fp*6w)jS8vG1Y?&;8EK%^^ zpYJ-bji7}t%!d|Q*CJYh9jfz>|Te0#66_ z2A&C^!TJiMuR;0-q;Em`4y5lv`T?XLLHY@#pX&q9S*#skR_s-fY!e4a*2Do)%ftcA zgxW_0wU0qUr^tv>1U^O7_^ljIJ|ueuJ0j`E?1&6}6ZqbM>^lk>nK~fwBZaJysRJDK zCMUlI{xsP7gR(`Y4oF&zl?igeY-B6Q2Zf**l!9_l393OYm>J9h=^v0YKz4x4fy{#} zfGmP6fh>cp)CZj=TS2eER?rW!ZR!9y%WNTKS4#`oEM_ct1hN%u1F|)BK=3GJE7;C^ zEct+pgFPm&Et;{QS?NW=j+C!p3E@l5Mo@yC2w$=@(TIuFX0a~8?v$@!H^P^!rz&Qa z=^GqD`05wz9~=-I7#tKF92^oH8XOiJ4zdSiFUUTSb3o1o8Sx2#90WN8a=1P?(&B3@ z;|o=Z#M((Y-{PxP3t!E{7y4VlIuOq+N*J zf*6-Yx}pRV3~M1>hb7XbJa3Y6a`04xu2U#oho>rLmN_H1nb5U5xF)zZcxG^2aD8w? zaAWYS;3kld02!Z*wjdt~@=+kS1Nmr>+k<=z$OZMmvn{&LV{}~vat9k-#TH$qEp#;x zUFdRc3+@29(4uQ6(&cXz+(kYZx(69k6zCSM*I{O*-xAzoSTFRukgpN~3TE#kUmX+q z5+<0%?hQU*@O3}st5d3CW|_x=`w3r<2cHN&8GI`EbZ~F*nc%+Qv%%*;?hJA{$Q2-W z0U0l&8_0MCJwWaWazqx(22y z#>#|*kPGPwi6JQ@hm?>S(n6V`tWb8y3G!f&hk!g32@VF+VQKWB(I9#EAq5h!(p@E@6p~0acp`oE+A*ASdkWT=4638clJQ?Il zkWT`63dmDIo>m{S9IntpsWgsuF51ngSt_wpK`CB1mmx8>)2H8rGu|vF;Kz4cyWX%KF^#rn=AfIeO zb^}6|`<`1RAHb9x4BH!9t6>b?7NR|g-9p%thz;W@gp<1{V5cSmCLi0n*D-OCuh0Xb zhYijiqMVUw29lOHIeRih78MLV6?!_fH}p(sU+CG;bD{mA=R+@myb9zqKwb^<8j#n5 zd?v{2Kt}tt0pyMKp#v6YY*E3`TOglh<7~6lLT+inta&i|j9~UT$eS$8zCz5rPMlW< zKWNA>@$bJm{VpuVBxe&6m2_(N!$j(WGj5EhYhW-vaC|ltS$`+YvAZaniR#*;u zkgc#1R>N92Gn^I94m-oHupV}Ud>+W>gM0zV7lMrMg%^W-3CL)uE(7`U`monzD;zMq zuW$rpTr`IKkX3i(t1PyzZegog*b28pw!+v(TxqfuEY(?avehvep93u$aEy27R5 z&Xlfj8KsLXmJr7LYV_^5C(`AZZ<5j@+}oh57p3c(RK?6P1H+>UU4z1d!$ZPD!^6VE z!z02Y!=u9J!0!P0I*_ji8BK6K$h$zk0p#5v-w5(e_2DrVT@x5x=&;>vqw7|SuG?Ga zY96}K=h_yY4e~7(UGtEx5N6F>-uHo5&=Pf3>xUzk~c2 z$bXY)#6K-?H4j|G*^0~t87+^|$rvHdR=C2mk9^QKCzD4T+ZbMpBZk8jF&wTxuyu>z zY?Nq3{!GNHYn#@+it1=M!tF3;MTyi!=%UNRBCCk=rDUW!g^Akw$aw^{4UvtJvm%=! znPn zPasYI)dc0C$fMM=k32%*@}w$dmU%kz5`k-PBKsrHM_!1$7&!on50o5G zazXKf5&$I#N(huNC=pQd>LV{(aJ|9cdIywz8(fE3aJ6oMt9ju1g2449C{YWpZxF6v zJKt9Fp;d6{`xdD(f+JXfBc=g#xwc|mCl%8{TP1xhjipcL8YDzWHlS!AJkvIz6qBVBn|Da9sTd4))q-oted`Ox)}aqagSlD2Bm zl~>-iW-Bd86`<%^RIJ29$D8DnRK13KHH86ok76C_O>x1xoMwym1y?$1}PngJN4^ zLFs4FHL%5YHH+=an?vZD3rb&$t{S8(`I}?j(ma|n-z{%BC96L{WF;kQK%(8so@7!| zmuI+Kd4|h1C{;1D%=*0Z2w5BQHs+m`w<&LP-r0HQiHUsi2hCy+=RIavu1BfmIw4gtv&`PS zmkD3bs?T0*!Y@d@zs(q(M;{)mxQmcK*5OxjhDx~Z;`K@NgPi;nBYbF7|ABqD*lr9 zyTKN|aAJ!zn?Uj>Wou3XTlz|dNxmarplIdu6fKe_k+hUqM$6AZwDL3av+}d^o%ybO zJ>Q-0$@k`?H(vwF0#Fu$vIvw~P!@x-1eB$qECXeEeSWTqR({w(D?bW~ElomMX`yvm zi|J|>)0KY=qLq(Mu$3i|Uxa8mcatAXe#Wdp<9`uTpv|yXe&_ry6s~-Xbs=0NOCleW zx6tQlBuj!bC%w$?o!`%(t1qSN^i;)6x`yPBBXkYTAC^Bne?@XMnOAlr^BN1?5ao)`7AflnwRynA=5ugkb&&j4m{B8*PT`Y>TdQTj**Yy5E8i_2bLEjSlJSs_-H2$#u1#Rf zlff-Gt#vOW*(<}XtT5?$GJmf@+|!h}ovBV@mU%w^O+wrY`7h=l$bTvS<@{IjU(J6l z|MmPgK-mQfI+D9Vxe*l9>Sj=G0p(UuZUbdceg0b}aYB&Uw2wi#Jw_bn<**J&<<1u1 zng_V=32;Ava)$-n&j_5b$MHJ(pqr1KM8?KyFaL^W7?Au!A-M}7iDFO-No#DGh3^WsRgdejZdy`bC&%Ke}`0Lp`)JOs+apgaP~qo6!iAGNv@ zqpUkIiXqg;W1J{YTAb`{;iOqOiIVQbC|dp}OirStJF(G;yUYqNjT+sFQQDoTJViJ` z7YjLgI>938f0(6uM2+6WDD6#Do=H{8EHf}ldK06AqJyJDqC=y@qQj#jq9dcDq8L|r z7L?~e*$>L|pu7Oei=Z3; zZDFf<*do1&(b=H9X0b(j6QlEUCr9T;7lMK_Ghih0bx_EH3i^$Dp;_-sqee(8YJ{}j zBCHr8t+x{hbC+DIUuzbG=xS=hqGwPO_Fk%jW|AAs^9C?A1>4cI|YJ^|%ZP(B0Yb5Ophk6vK5bJ0tUb}o7)C|}wj``WT!-?cE- zJd9zs{I)1MB41gI-HeO{+i^VkU?&g88|cP*FO1$9H3C}EyQxR@4S~c6XnmVV7k7cl z$-_}2pcQ?Tvh{tcVrH4WQ4-LKJ`>#+eKz`Bbbs{u=nK&oqX(jBsD1?HCs2L{s|8wrmy@X#N z5ASdNv(~%b6~}WFCOf(1lfA!ppMB2JR48m|s>*DYhAo=V>b(~oh#ry?TD@sPtNQhh z9Brs~f~Flb?V;%ajRqP98Z9(BXjo`CX!xu_&1o5WwAkqq}Hp^tqly$FOqK zV}?2!;*th3=b!M^iGX5AQT3(iT*#NGY{6|f-q25qj0Qq1;j3#gGv%WO8b(mQ1{qE< zoN74DFxW7}Fw`*2Fx+rDG~J--4oweedO~w7G`*l91R0<)LQ|79oS{TU!x%X-8qR{o zl*gAv^mL zprLeCk1wE0!2||bbQvy@(4t!@{8yW+4ODa)t}$F|xXy6B;ReHvhJ}Wk42ujmLqnX7 z6B-vZ!EfHeD39UNp#}%kZ+qR-%}hV)LefiY~)jhPMsx7~VC! zXL#T6f#E~LM~07~NkT(BWg40cG<~2s4jSSN`$BU9H2ty$RdgA0qRa3VG$-b<)n8?6 zV41Dbuti0eVJ|eact+X)&p<_2=W*hjw9&22s>ud*Qh(5G{brCwmq8X?11Ki4=sLN8 zF5$BrD8@>othtO;5?q6dSt&M*k!miZ)~GYGM$X6^1*2%x8#@|_<~kLc)1Vm)%@AmY zLNg4S;n0v+IRct9vc{a|>U6-^!`QQ%y~1K75tD4(LVrM}{Afl)Gmbv15dSy6Ojk+h zGE&iHByr_Tg)So%T}D6uG;Pp~qTA=mJrP}L<*vt!vgk6(qH7GPPd1Xx^S*>;Yyn?l z^^c}L9ytfE*!MM_D5)=FKZ&%nirFhRgN$cT(oQj+YCO$2*f_*E)HuvI+<3Z?;4}f6 ziO@7a(+JHZXeL851)3&krb06n~aN$Hydv;-U`iZXy!mO7n*aRnFq~$XwHS^ zJZR2`=7OwI9Zxjgm7{AZG#BR4wLqook}_STp^FYD8Xth>B9$&WoLITBV}dp^w9|I1 z)RA8+H~dMXwAyLX__U<#K_PigdTzY9kgdvJ6|w9Pxs&J9P#O1<6#-C|JHF@5; zDc6%2X;bd{e&Ye@(a}hRR~X| zeP#_;(~Xc;!`BEkVvWA0V@;=;&NW?Xy4D;6&7IIJhGq#gcR_PEG~}r7g@(AQ`=D8t zt?91B$eP}=7ppNrvpmm>tyI0(nlfl50j-8eucbBQ!G47TT1|+6cH~m$n!1{_gjfwp zcoD=_5oc6Gh7-vX-Rc6wgp~>;{c8HlV39`(^0b#NW~JDiT5~1^>$IA|HA8BK)(oo| zUUPcQh?+BMMnba=8uILWKQzPvKM2i3(EJOUhoN}{nn$xWWUP_?RClWxFH93P6_y&J z)E>(N>j^sYSp5KXVNaLIDh*jPC|PGi^SDaZY)O3``%w4kq|}+{E>h|&_iBW!Ij`nI znXU^Yx}Kz*ERg7Ws(>!B!_5jRm(^S;<8_6E*E7Y;6r1a7?x1+xP;+C=!kU|E7S-Hb zb4$&wHMiB=4$X7WJP*wa(7XuEOVGRw&A*{}1)5i(c`aLWr;67-Ilr|Gn%DF2dQTrJzXQ$an(q5TpC*cP$SiG zY2GfRtNj@YDX-MLF4OgzMAy5;%oLk{8S$>I?%7(S34koR{nu)AoP6Fk3#oi+Ku_n>fldxven>w00nL3-gn7W#d zF?BO_H}!yKD>U1n*$&MPXm&!g3!2@~?16@4_x5E?$11FuYGhAlvO@EH9&10Up6ur` zY9&F<6eOsbLeTu6pk|5^)G9Z2v(rW%AxS!tcI4N}4Nse-Ig5uf*AZ z3OTFXpqTYH4V2kBSz_y#VrGiX5YrgS)=<+h({R)2rV*wyOe0NannsyML-QLnzeDo} zH2b0X6PmxEIRMSy(EJ0YB5N9}vNa*c)+8{M2ian(6tr1D^1tP za9vH|V%iroQ*0KRmQc8EGA%OQY`VpCtLZk=?WQ|ScbXQ1(STvVXu;^fuwXbaJQx9t z2u7bZ-KD~HUkm@-_Yf$L!k*CSv$sc=0`;NlPH2hv7Iw%h7*{Xy6D zoasfGE~2{#U8IU4V|rPlt7{=$v3&|DubbYI>3UP5t6MQM#pVOkW=hwGrjJY?n?5mZ zFnwzJ%(T(;xoH!a9$ZocBba*- ztjwZWZ|-RBWbSP4V(w}_#@x-^9gGW%8;l2x7mN>#A4~vD5KIV6IBO=kRQglh&1{sh zGF!kz^011jSk;xWDhXER0Kv*k?nqR@${e9i>#wRsw9#6eN;cQ4PRpD!_mR=cNNB|g zCT6l21PO_WLZ?-&B)!ZhnNODK8X(b?EM}H-TIRv#(Uh(s=Aq_c=Hcek%_Gcbm`9q= zG>-z429p8P2h4F`2(5j=oB*aDm=nRAlr@i0>8j7s)d;449$hD^be&SBt2A_x@x`U) zSzyQwm-Uu;Zc(RYzQ8Q4HlH+;Q6v%$2U0}HVi1I^L4{7e3N;R`DXJi=3C9TnQu4WVZIa0U@$|#3v@T-u>_JM zuGFPK@~Zg_8LZbOu*M&a&3oq0DOm5DKQMo2{>c2X`4jU7^QY#|%p1YfgP8zkBA5m+ z#2t|*z{y~yfN26VHEZ6ag7tL{tSw;3h8pyT7T7atkpxpNk|@oJ5#}E$SU-VjR>As( zfMp1nf1{1oKQq&FJsD{{O#$VAMVhFXH2)*PMav{C(nLk(Fl7=QR^`kr?Jct4vdDsq zmPs7ZOtBFxRB%~Di{8@F(#g`<(#6u%a*U;$g$SW$SE$1l;UD8D`u$J46%%% zd=0e>vkbSKZW&=Y!!puxre&06G?**ETnXkXFjs@Q2F$f!t^;#Dm>a;{n6;=WF3SYV zM7npeg*do{dH(BWFt2sjfrQvCl$1*)#BMD>OyqZ&`t&@cRKjw#7^<0P`T2hrs*`4AGL0fO!{_vlz?W9fg!F%R%F&X0-7~hbro%3-a#dk>q)?@Rc?A;t5iRqwDyxw zdyj(BUqbEuLe$!^irFdF!7^W`Nql`+%uKNvVXdcponakmJ<~eMI@&tMI@UVQI^KE~ zn2*7H0%il4Pr-Z!hCE|_4rUXW&0xOBS|_M{P0sN(4a}E$e0{C*Rj!>V%@d_{9_5QX ziG8K=bw1&%*gj|0ORQ4$eA0TE#MUkSUJ?3)oU1xz>7v4A%7$ShP~&zuMel zy_bS@tMxYP?bbW2cUl))msszz-fbm{Yb%&-V77xHv2Q1sU0`;D*#l-Tn0;C6QWdO~ z)ejr}6&7n2%=dX<{e(&~|6>#lk-wBZS7|&K8DCs#eFBVHDq($^dah^MRM7_JNAegc zb;NJYP&j$nDpk)XtweT_5cwbKfJkn7`F>lfB9tzTKc2J<_ZKfvq<^Cy_Uz#IVcH<*8*t$?;NYyDQmYrAzv zud@kWyP<7!5HD>twC&0IcLXnOhcaHJ!RvR5*B{VUsgCO}f>)Pu{9m-ug>uO7kld>Z zthTDQ9pxlhOJr9av~39|wH+v4+IEF_F{4anAOG!X0-`uyC|5|rU+(LS9PCG6&Mv?q$)Zm!IYA(+7oI| zk}*3`!t5A|2^nP~m~|_}EcT&7%Bi(OWV!}RboD4^rr4ZOJAu+Qvi8i{QMIFM$JCCk z9alTP_N>}^Xpe=q7qq>hH9$*XtAW-8tr=PiwAO6xM3t^7Il7vmt<9s$uF~Zy(^VR} z=2N=Ph1RChbpcghL&z?(q>&kqBt}ZzK^Jyu?G-XxmrHEXDu`M#ut?Z)7O*9pq+oJ= z?Lrx?8zr>d#jF&Y+iLHlXx(0WN9~=pi))wE-c@^d?LD>k)-HwC3#|`YKePd8gV2Vc z4MQ7&HVSPlTf0m}Yjy3Kj$DPMb{(|wJhX`KP1EgjNr23h*(wcNB;U2P_9cR$>F)Iyb`zdCBLVJpe+1~^+ZXH=^oHSas zN>>_}dew>9+S;V4i%DC13A57(CLCGkB!#L!3NXuIV&iPG_Oi*^Ysk^qbhT0KWjn^! z&DP!4!`9PwtgV-=x6NQ9;cytV!=XJL+7Zy60qsa=&xCdqw4Y!S~f|0EwW{*7Ihv&6ZqQkv~T-8d4W)+fYQ$venxrKsyQA$DiLF@_lB*@QW*4&6 zp}S&sgY71nt%VX>bBmcNHn-cBQMT@|-Dz8FTVlJ*cDL;w+r74>w)>!+2km@liEt!G ze?GJqKzkvy7eTuKT4Zg@RkqgT*jf+m#d&O9sd|rro`6eg=|$`tZ?$4O_p3XS#n)j%uKQQ%tj@b zZKLgT+a}v)+ZVPkZC}~GwtZv!7TT+!y$0HAp}h{;>!G~?+8d!=2<=VKF3Q?e$z{t) zF56ycZ_Z=uR+X(g%50T}Eh@Qee?ohU$`+MebU$Nm9brq_&$#LrsY)kz!|iSDvf#4I zg6lQ{iJg(yy8SS0ZB)#7yI%5Jc2V+McNQ~KY>u&;2wV1U_U`r`_MY}*?Y->1?FPHi zUIXnCXzzmdZfNg;_FibogCucg%b;Bj?TW13toSXvUG`gcH?%AB*jl5qwXV!oN!YR{ z2wV0#Xjdt0+0%rrt`qHjXhXZppsPZ+nW8B_cVX+e}_GBJk&!FuXXrHHPi5JR%l?Jf$C}2dh zJf#A55dqA;fPacMXrHFrfXY3YuHEKQ<+fj8m#XNKc9QHOggr}9A=O+&)jwBA*m-WT z&3eW1Ci^WiWH(EYy;#gru~}?iNg-Qezsr8N{T}F+HC*A{-ymZ``7kw?BCkIvv09)h4vF@H$eL-w4Xt{5!%n8-30AsXup8= z%dCC7%GRD7TR%YiRUTX4sBC>#W~(%89iVLe4ei$oTaHS?R`(HYs%S&|X@o7QQ`vHK zaA>9A=pc%Vu=Op0L};dLRbO4eRt^$}=;$PY?ykD3!r~wa z{vUE+k!9qxWMib2WSEOa#$U^1m4qxul91&f4(CUetUiP+{#eKHw4s{Z#h-FLkzPt} z!O`C#RnaFMCrfnwOqPLjoI;n8)BaLGm)QOk1+bxx(`CShOMv}W%uKNv?U+OX8{-)3 z80Q%8ILlG*nBbV`XmB(_ONQe2L;EMRe?fZyTJjC~2f7OADxqtWbxc+~m!nzsT#gyg zRUPzPy0(hv(v>SFN>l3PxPbC?A#~L$Um$!Pd6Kr{O2;*_-@2NTrE5ogkmEY)w{-0b z$!b%tP;!$))>{rqZ|P`}#1YLDo5c>Qw;W3xcRB8M+~c^{vD9&&W0_;QV+C|t=ycGr z&~ec5&v|Bnydnu*SLnLSu1nXW?7B+hx~SlCJO`ax zCE<_-m;P=2$@;g6)*|bcV4cV5Po|A7 za!*NYkUj?OL;UCz!DU7liQicL>v zEuqVKth1N1x6|M>I%}LJr`c(75`=uv`JoFy7lbYZT^PCubW!MH(8aS(n?jeHvqbmvrbibIh&o+oh=m>ClOu)^T0X{x}newBg$Skyi8VU$fC;2 zNtD+hl`N{foENvLa$ZWF8Fi$rvsP@gPGRM0r!;Rd=_Hvh!q;Hxgl>?0 z*N{Trb7ZY*@;pc@a}Sy|^=)sH=x^J9-dSD%O5MAeT?D$`aP z+KBX8>U;^h2`X)`5ZbC1i5l9ZC37B7dexJ??R-!6WF%)sNTbycPBNfKqGV$sX;u9d zQZ_g@%5;4u(KWf4nPT&ma~GxSYv(u4Z=K&cw>Y;tw>h^vcQ|)K*96^E=%zu}4Bd3- zTA*u%j(DuIp_`d??pEpgAxGEG(9O!DYmQ3SyfR%Sq03cC=yJ7zZni>~tF5HLxb;MX z4W#Oe)O%44raKrXT{@REZ!zg2!i&&F>mOWXNRiNWP9a^D$}a4#F0O78U9Mv!y5<)% z%hBcP?Q#&hTn3lXRpTZ*0wTz2TrgYJCjE`W~s;)|eL03D#a7`jWKyEN-^ zDs;JgGF>jB(=N-S>k5^wtIKqihOXl%T|~~1;%2#M)zy#C)oG~X_)bH)ePne8ngb(! zHSuGL?{W=tohJD%*QpX+v;x94M561eLb`;gLdpo&nKE6Z43>Q4HO0&noAIuxl&-T} z^{xr7iLM4$qid3DvTKTqIIioUyB@k5pt}*eh0xsu-6H62hVB;VZq2%;sdUZA(KQ>o z+w$nTL#1m;nXb~%MO4>P7x}&uDU_q@GD277M)6JBh`6ubCUtpiUF(u2E+$>qOKi~! z2-iZ1t;L0GRqa$bxz#1BE*JSI!q#2I%oLk@TvTUEjI3xVE~sxwgA@xOTdBxpqVM zFmwbSa-@$z_c(M51(>+fY(W!ob zlJ-)Ww33kKt|FwltDz&iQOR!1-JX!v>umln+Q`IHI`vWR)gbBS+*0{`(oM?ei3EFr zaN;Ioi$sFGco@zUJl)5*dq{Y>Ne-PjvX_gQw((7g)XYtX$8-5b!o3Ef-Jy$#(v(7l^=yA{0L0XayzNs{cnJiIguPl}l-HudgiO4kJUM0bO`(LKpM**(SGRdlIuzRSNn5>I_1XS=w3u&NxI46VZ?)Nqp*+?SmMF97ci!;Xk$o< z?OPSw#qPUh(C(5z+f~d~v03hZfP%Kdz0$qPz1qFToprBuuXC?=-w)j$==MUl54!K6 z`vJNiq5BEC|3LRMbiZWX52~O&YMDsKB;6#2{+b6GSzq9`+?eE_Wzb3k+N%^a5@>!? zL3@*c)_p{$p|p`29r_$8_Xnfo2kwt$#y*l5`-5__L1Juw0b^oSN@2+Zk*ZuwB6(1GZb%<5TGJgk`!saj@O<=<2D` z)w@hrY3MqU(sdHp9x7cY6S_Jr>b90P`XJffm+KGGHN-Pq@?9Pxya-*#QcOljboDBv ztGz)XWwd9UOxIY6E<-Uh#iqg2O6h9!O!7?jOz|{%rh2A%nmyA!EnsWFn!uXDTEJSt z)`GQxwS#qlb!I&?WV$*X@XYBLr<=Na=7V+R=pvPdtcTX%OPjj0{xV*r!RvC0*A-yh zDqdF;yo~-fRYrervJ2!WG89P`VeLRt3W~z_EcDzg)3r#V%S-A7J-5;_L)KSFSM_#< zl*JxdczGn@#RiI*DK^VJRCsw-cvgB=c~*PYc(R_go^_t}p8LUuz=pv_z(&Ewz!KM# z08403f=y*Ts_^nW>YUC$Md*4GY&y?(^`WEP)h7{!&-N|TRT{de@bbI{Hlxx-g;(cs zbcBek2%wG-k#VAfczxiJg_lPXUhHwy3rWI@J^nCwU8tb4$s-Fdk0iX<6N;HBHd{PY zczL#Zwt2RDc6fGrc6oMt_IUPs_JKVSEOER2!43d>GT4D&2Z22W?5SW+%X(Dd<;e*z z&mUk1=ixO}4UMOl=_(0bUMjr2?ZJ`(9$9#KsqpGPwfhL#$dqlW>E&Lf%PV?i;pLTu z*D!*KR~BBw3+ZY%Jx7YShgTL}URijJC}yVEn7veZc`aV6x7KU(+Px01)9doOy&kY5 z!JY|r6xh*V$ABFRb{yF8V9x?upY^K3%bOEkUgF&*?!ploMz(kcU zD!hu#?(h!r%CgHV%dSQWi7dM&6|z;iM&V?%SC(B~S$0h+W~SIQc&Y62HhL#{Cwr%O zo4ixK)4a{z>E0HwQ^8IH+YEL(Sn|hKurt7(4R$8jSy^vRc2#%t&XGmEcRtwJd2G#9 z*_vNwt2As;)#bec>>QOXs=B&QCo_jgBkRb~nM1TY=(iSnWzpr8Mb|kLl3OK7Kd+Fj zs;t7vVy`T^yt3#zx0sn?v)oHXmv@DCrFWHgwRep->s{+z=Uwl;AME*HF93TX*o(j} z01L1egS`aorC=}1dR5WoeKg0`lVC5;W9v$lt!v6`m4+>T!r(}#L6EOQZ{*I&E=If*R{pW6q_wxs=2&d zz1zIoy*s=+y}P`-y?eZSz5Bpk5B3JIH-cRV_9n24z}^h@7O=O1y)EliHJ3N1xx9aX zy*-bvJ5{>wD$`XGx_ne~`H1GaL!rw@HCOc``hm2evPr7;l6&QW(I@(3&E=Cd*J6T+ zPu5&Z3Vj#%Y>pIP51*{Le6r@cyO^0`WA;(a<+J##zFMEnXZJaLPM^!?_IbeG3w9~k z`@k*(yBzEauq(l?0=pXQnygRNT)v#<@)6CI&7*6bO4kErx=KSA)m*-lz^+y4qMD2U zi(AkC)pa5r%O+2XbTMCA6sFwrAwF4k`DE2a%O-rX>N-r>gfK@j8|{--mrqt*4;C|1 zY#Mx2b@>{7lYEnXQ+!RnslI8xX5VyQ3)p{weHiQ`U>^nh7}&?bJ^_}5zo)=Ho%N}z z%a>DKzWHFE$)oEzm9Fx76Q!B;=%cF3cLmsIRl2C^5;AS7XhZc3BDkdPAX^K4vg-25 zs*CQjam>$Db+!Amz;h{(-08bZ%A)#~NLf_6$i#oOS?0T+g0 zWuG1O~q%YRn%3;vE0T7JER7F}h+Pv$NXw7x6wTA~&?PW;{d$4YGZ zdrE9=EoP?JnEW2Xmf!5R_^tk0zs+y=JN!<+%kKue9qbOUJHhS(yBq8tumm`w^1lcB zL)PzA*z$*jY28OuSo|@tKjuZm|IiW~vVMjGY&OcM z_y_x?WxA67p%Pj@Q$|jg&^p`_6U4=_6>>ptFgZ&fiUtkY_{Tu8*;3~jXf@_oYx2kB(_RpcEss4H3 z@|Kw3+JfsKm!@)>vfnC=-@1&VbvZb7jS2r%1g%bss;;7q4q4MYgw(5g%YUO^F6{E( zMDgP2Iurg|C|=xQ)|t>{O#fq74*z1mobK}9MLFY`V)hDW%l!{f&Q|zW`d9f^``7rh z{or%b!bk`JV*W<)91Wx+$Wb>siLE zG?>wJm;W_zT~!Z8(_P(1_}`|DjsS7TJDxw)%gdd~Ne@_wVrU^zZWT_V4lU_3!h453V;j12`kN z8gM3XW^fj8R&cf8Y+3)0svrARmS6t;;Ou#PIaR(qWxh(nSAf*hFAa16N9Huh>C}L> zXoL*t1Dz%D73d_9>S>9r1ij5`UBV+}vf!csA zU=KI~&VVc64tN4yaDH$Ba6xb(aA9x}a8YnEaB*;nY=CTpMt`ci1tKz8fdsg^JhI68 z`&$>>O|%!+r%YC9$Rf4$O9TDEB~`Kp7AI?HKw2&$85k~+m8OWCA(53SB&$tGp=3;8 zyiC?Oi7Z-AaYQr4rZF&sk~JwXIWQ&A6qp*A7HAGk53~eY!Sw}q0=RzQP6T%nIC2I9 zz?}?kAhO%P;7V|(s$^Y5$g14fri!)& z*O4zaY2=s6?Y=2+i|n&*mdK)uOH^(oWRaKkAJ@=2anAI{mf3?ETPDw*qL?fW$Vw|9 zE3KhNVX{0xg;roiU}a!cV0BJh*HwxTnaAUxY z%?4DV703y#01;Z_@}N?;;NZ$zaFpgzF+hb@fCw$J&qgi~QlZt&-lmE+TBk|ItZ8=; zs}BP5sA51GRpjca=aEJgxx;L~(Z-^nwJGqW?6AI&92Q-G;)rI7&6dFTl&!6SZGr89 z9f6&JU4h+!J%PP}ec&d6n+$FWxF&E@!4XB+3~oBO7I3ZEzz?d!`X%sd<;Dt2;16(l z+i!3)!ObCG1QH78mK|0}99FO$VJp}k+}R3SL58qZ{Rp?7HaesNxC|y>h9F8C6`}?E1H9qmvoQ+JthiIQgZd2*HvrJcM=%T7CNL1IYDqXVb(hscMs2@mH zlW41xx`P2ScvDc;T|rrQ-A*C7O;YrC6tdN(TH$0#@E$2Z21&3bSuR>naYQr4W<~Hp z%GS!@s^IG2nqW4#Hn=XhK6rod0dRMLyBpj+;O+&t6x@B_mVsLiZUwlN+2BJ;fDAq+ zEBfG5;8x|arS8SSmG|N(jra<_M%j8D+-jArw}|Hw(q!nGG*q_|-6eGg{nm%UPb5tr z{8-ZTbRUl3rxII-*@vTDH-(eU!LMYtzLeOa)f7iGQ*5>df1qq_3vLhY2<{B-3hoZ> z3GNN<3w{rd;PoK5hrs;{+{54=0rx1l$G|-f?ul&hN0qH#b8PJgm$wfG_q6J_o-6yU zlK8Dqd%{+z1GuLYwnADdDjr$bhxDP&5?i585?jv@NJ3pDww^tV--_ip3H1!giYp{5 zE?P}-L^H+45~7MLWDV7ZY$1Ed5psrHA$Q0V@`8I2+)LnI2KR4puYh|M9CJRR1l`X2c^aHD|qD`t5B!fU?eK_V| zR16Ib$%-o^E3S7bCbHssuaK^)vlLRsgk;4Pk`>nn#mp3&#t>Cpp-G|1p(&xJ(A3bh zP;+Q{s3p`2?jvv?gZl*B25_H(`wZMhaG!(Q1a5OSq$;jZPH~0K1@}cBU0EuRcLi+O(+{$8(J4yAG$w8g5p+i+rVuHw*%ZxaJ#_m z2Db;?UU2)eAyspQ9&5L)O;v>@^c1-7^XU2!l?UYf{Lf{&N<$abTpeT zO#ljg7?L$tNY-3GQAlLX^`AnvxETs3n?thZ3K5Wrp8utonPRgwL^W4vTWEV|M`&kg zS7>)=PiSvwU+8;qzk&N597$vC2lpqqzrY;;_cyqIz*l5Ls^$viG*@Up_{xK9@l}fF z;@g$kDhXR*s=2})z_(G@3RBJ1d0d+++Q{?_qUWVf^;=#-T0LL=NaaS_NOqnix8zRA(1#a>2AIW1Yrm|I6W~(%8(XqwwYv7|QTXbwuUMHfY(Z%rA@V4;w z@Q(1#@UHOg@SgDA@ILTq@EP!Zz#j*m1lYddPXON!{E6UC%7)d^#qckdi5-VjSi*mR z@1IB4$#ngrNs zBd&-$LVVU>@I$~41wRb@aPX&t9|8Uh@FT&WnT`0A{Ana?nMjN1BXRJf^6(l%@sf(@ z`SE4EN`u#l6t9!Ok5=(Inc&qiA^)K5*n|Hb#A`@oxRgST43k9HSjx!=39oU5c(os) zpfWll>#m5byUr?Rrr0z@sP2k1MkYljN2WxYB2y#NBF&NMkrwb1z)u9<0KO6YB=D2L zPXXTqek%BB*@&vUB01d^A-bzM53d$AHlAIkt2A^`-4(e4{B)Hrs=F#T@_*4r7pWgD zbq6D3WMM?sT@hJ#wNglA-8G|tEn&Zc$>NACyCSmenpw_&MO`fe0mYZ5e=a(IHTOUMZ(G`(J7sw)Rkqvb1H~!)R zw8S<86izlpWYHCoMc1Xp%oLj~5h}VOTO->d+ao(7J0rUyyCZuddm}`2T@IdnC9VX2 z75J;cUjzPH@YjLA9{dg2h$^}wzsRGCkw3uSnCG@`QrWtt%vMR*ic-xLZ4aL8kRfLw zqEvHr9@l9RZB){exj%BR(iIh>vgV4)nrjhpK~Y(A-CRglmGUGI?GcqVS5($qw-z(Y z(G@jEspg7WqSk0_)E2cz9Z_f06?I2F;BNtc2Jwe+3Q|b@WH6$uauBa@z zRuD`&5`UCJTNKcxU@|HyPh5;j6BqeaM`JTFN+&Kx8={TTNzuvCDbc3r)abNmb96fR zHQ=-0*MeUMem!^+CLaL*Aoz#C|0^3+CoV>3=g=a7^Wi+S9#zqLqKsB)(4zAeqa?mO zqM}9TEpqGWPsapJM9BXVS$`0%8>8~P#i%rIk$;SOAZgwr|9AmfVjHVM*PYS3q=&`m z66s;_$zo=T&9dnIl&3XTU!T{yFf^gMR`1i{M`Z z|1$W0XQK}&4~x;dGrgJtj!WxZxu6BY`%-`qhxJ~ zZjEk>ZjbJW?u_n=?vCz>?gjr2_;=tXNw@R;(TP&lIv^8bVgLwfxhx(G^Il`{#PqZ^eXIM~SYOUZU%B zf=R5iMAxQ5x-`G!NQrfi9V^il>nYLoMKLqQ#uW1qx?<*-C1#D)#%wWr%n@_OTroHJ zufTr|{u}V$g8vTu7VulaZv(#_{ElqQtI!n-#lq&_DlD-W_?>xl?FPRO%ygPV{l1J> zY4GYt@j4OwE)}l<1h1~&xv!!P?bg!GTIBv9UV~%9WW0t-c;5{AA0~oTL|qSw1?0Ef(8Nu zK?^|#frY?jV-Km0>@iv1$DV?~9|TMgl`tuED)UtuzGzif>~#o&%GZCZ>WY0BldHO7 zA5$+T=qV&pRhQ7Qkgm$>6iznB~IM&9t#kR+G#CFDZ#dgQ` z#P-Ja#lDaI0HG^{V<2>c&>cb#2t6Sj3!xW;-Vh8BjB8^*set_!`(2n8+fRJhUl3~Y z5Hmxlr3)(wPU^;7|1V)?8*oCuehp2tTW1cQ**LeU@tjjy8yb(BGq0(+sea~s`8UI6 z*UxSoFPMh4&Y3x}u`hXn{P&(&6KA$IH%q_vv`(5dt8w;t!C3TF%}p)joq86&W=iWh z$IY2NrFG`4!~J?9`OFhrn;V*1CQG{o#YtXlX`HwTlR{*iBOXuuglt4h8mf2F^giuW ze;4l@KSqkHaZ&(Ah_n#2;@xRn6|99scKba?SG;%JRN+__H^hzc8VEKBb_kAT?KV_c zD#_T@enLqjkHzEhM7%DZjHlx1cqZNlf)|1hf*(Qv zLJ&d-LKs2>LKH$Q8$Vw8HpEYo-EDjzgm~U}p-y$T>Hn9$2md$0J(9wGCInizA>%%V zz+JV7TVF*s!=;NN(wV(1-3|93-V@`KWV{e2Rp3su1t0?-Wv|$7jfNwMukl zikT@kbK{_NofDrIpC3OreqQ|i_yzF`;}^vjKsXKp(FA=VoB*L8gcBj01ff5K0T52k z#xGXsx*|u{H4p~o(RHdyS9zg}(oBns-%jbe1HvGct|f#n{;&Amw9%DE>G*Aww4<4?t( zjz1HBHvU}v`S=U*7a_jDkQ8c?^WH+4##UU$5u*dK*ICniqn) z=7msR^P)t2ZKQmC4nbY>BK`&8%k^sKF|P38~ zMAuq79|%_xK<2{qaBJf5i{P|BnBYs7O>o zm;_-mgeef3AWVfY4MH=7=@42Vv}O}zN(ud`?w05v)0H4kDS4}22s2ghHK!aKOY$g^ z=tk&D5Gk*&dXYGm(4{}wGM_d&g2j-5QmI#CW5S%MmFP-XCA#RU7YVyW*I`z@Xs@`u zgeT#b=t}q`y5<%$%h8pHCXOd`C1QzqB9W*|BonDbI+02ANsz!e55jy1=R!CS!ub#` zfN&v%iy)A&iEN^;N>~5HfX-toEQvu7F3yXMmqNILd~4_X%%95U+;BWErnX5?+^4PMRdVE-ws?x;>^o)iZh&wjgoO}p zg0Kj}&Dq4IGH0C*B(AD{xcU*o8F{6$>;)+z5^kdzJ5rTSIJ=|l#!BPH?xdV8hCmW- zvcyl^O*pH5y}BoDAiKm@_ECDJWFxU6v0CPAmBiWYq#&sJV_HX4Ik|u{g_HXevi?fQ z`s>c4v3Wc}^;hDF#FL4q5>F?dNj#f)F7bTgg#^)GOCa0@;cf``K)4seQV91!SO#G^ zgcaF@s=pFB{grqd!pb}!wpxvlYs+Yr1}&<;5=4IyNOEXV{bfzIsiFJB=v zEeTnDC1mxrhB_cwePs*4603(RZ0$?P>MJ3uuXV-D6r11bsQOC$p7s0ksms4MLM14Jx$JSFSThEl) zDhXS4RDIPE_4TB}RvlGeT_=*spw8&Bn`^ltu8WP_tvsD_lXx6Ka zJkP(WvPH9Abz?gYp$)=Ybi#?;lf1+!3MmbBviPc##n(H8lsZ{_y<0$+$Zl55TI$Z0 zG*{gWNpsPiM2={t*ql>$F$HX1-Tb<9>&~k?zwUy%3+pbbTTllGA42#D!p9Ikfv^F> zrw~4aun_`r#GA5pmnho4?n?Q|v5p9|&3S-*srs(3%Y2oFuRADTcS0c5i*j77yNmGU zIKJZ$+MxZ3@+J2Neb@53Rg&bYTPaDduLvg24 zwRRiYR1)9y7KFWdXp!K&pHxT@*Y%$=TBSkjGl~}ZvhP#T+Du*77gbl$27zR{m|Ra> zm$I}|-IluTGF;mvxPGKQNS0kc6~HBGJ1BhZtCM9{oh-ZPb|ObKQ*3@qQrT7ad)*&( z`|JL!`>XCi-QRWpBrB3ccKr(BHweE&_yfXz2!BE#!=DEr{0-rsY*Lk7)!mYssznu+ zqz+=mLB2?hhe%drUE7=`lr2<%z>aOaZy&j>BJ}Y*(Pw7QdAK{Sv zLei47Ne(GlOC6F(SHVb<;+z!3!>oeQ;kX<#NpCVim`VDQ{$wB-Ooo!-WF#3)#**ZY zw};pPq6Q)ZvKf*{kYFKl5P66~Hd&|mq+}mC+$B$dC>~@+?5Ko0u}c}5(jYU0A~O^s zDN>ZfUGj8-OtF=Cl4FwNC4ZD0NBxo5iE>geaniZaA9ej!;bc;>Nydw0jR;;{idc`92A zlA!S}c_~Cw9$OZOwNktjZDqDf!`4E|)=d!2DqFV@wk+E^CTIimESi!`Ec@)15S2r-mRKCLqLLe78v8)7(*v8d|5NX~V<(7mvp zrLnnj;_Rl@mcv!E%p!Flr!=)RO|PGE*m@cAYg%N}w{>pg%=*csUZ!{9`;*rUXqnqI zt7$@WBPk^*th#BgpWixXcE5SE8(U_P;~=joe3#j+lP5PfHuRlR-!hrL%l}115XlcH zV;@3{sEmC=7(4QcJju;TsdOxvB>7OnSB$!$ZzS&(FZ5oOPb-vcOYW4(+98ouSIkVY z`98UylJ!IK$K+4R|0I7-{*wGP`CIb$X@D(b>CFr=;FfJyX4<(3t8a!F4i8qo<5C^)3!9gsZxL4wRHNWtZSe*(A75DQ2eF zcvDn%rFQvNE}yYt2As;*_9%9XOzkom0jYSz0RhMY&uH5+__#2jj1syS$L(! zNpy`NJ}4y%ud#)6Ro$$RGAShsuhbNYuJOgp6r0u*6<(c#0N-dCsV(L#HA8#-K16Af~Ikgg>uS$L(0S0jP3g<#_8LIWeKE1*lkWJO9EY8;dz zqevu#%{UsH`%_O+v>r%3n0hGnuhhe-M^cZb9!ou*dII81h_fKhhByb}T!`mDoClF0 zcP_;9vZ<#Oy_I@Cht|sw&(A~aLKQ8P(JBpE?^CosfOvt5*2e^`sztfgHA#Z!f3B{X z+LV$Os7R(rN|k_h5%oW0$7P~`78HObR<2dp+M3!S2gU6YTNf8IQ*8F7$jYrtQ{O`* zNBJYf%NHa*s`{sbudZk_sJcz+*98@*v_rgXym0)arsl?k*XuofR^!ZB-sbtUy(cuz zZES9x(Kyq4=J3{Ojk*5#`dN*h<{2|vr+QDRZ))+(A~o>yC$!ejY*0S*kJR54j^(NS zsXtSHr4B&60^*eruY!2>^3*@61L?|i8;IACKSI0?;*FHdZo?$u-`H?UN4Q?zV$70>t`MM3#m3ZO=c`EO_MatwdBT)@=coVZW!*KkHTm?7&uD6xJ;l^#nn8N>QtZ2=kF9X5Om|HmlkS%8 zp6-z*Pvr|C5+}3>;>{3mfq3i6b{o>YD=cYax~3h;W$uS~8x^p(L%fSFxtth9%i&L~ zpGeMhbYF5s8fOk}ZE7Kt1v;KmKat#>riqQm*UuawKh2C6y3*+djSa(FXAGiuE_W$U zAeYd5+Jvd(xoW@(!&}uekgv?()>%#TdFvGVOx2bC^0;R5IW1)7!od$8bzV5?GPpzG z;05xva}&hVp0qdZOZy?-0r5_Viy@Mk<>IK3lTLCs4{^uOIbqb4mUGn#jfb zATEQr9O4RyD3*FjCQW=oKb zoi(w!X(E}-;jW+ASWj%_cXBtA7v%nmZzi|!M6!$Ctj31p$cx6(hvB(|Qt9{d-J95^ z*U~i6Dr*-k883A5c#oSgW5C4L7Ek?*8BOHB&q~jscbY`Fe=SXu2=_3(a(v^w8TBm0-~ZC|6%~&A(wC(#he+b-Q}?B> zOcPJ^48&&-W$OAIQ%{Z;67$^i=&Tesaeb5A(;KG~2S+^P%*Gk5GiPU->*usgoHDF& z7EKQfZJd;fPMQ$$MH=J22|-_;b4@SGz2npWi+8NA4+QI@p|D@s)jWM``nE&Q?9TM! zL;vFL^eT$-J(|JkrRn?9%hJo!E7FAB=h5a_h%Z7U;@}mCuR(kR;#;fJtJ7=J+4S1< zy7c<={b_>lI}ksHxC!D{5Vt|x1#ut5Uk<%YkK|73h4Dh4qy6fgJH_3}iUe`|A3*$w`hs3$qTTqxg9Z#6 zKEB@x1BRbAbo{V>gZlLyKH#)d#}Djx=HXt@Z{*!3B!P*_9>> zSu9KMPVY(Yh4=}?4G=%2C-Ou3N9jb!>1{l!6Zx;lc@*c`>EN+OBB9)&%BS-?J-aaH?(>BviI*-i|zg&=z-YcUa@0B6i>5JTZW!R&+Rv9tVnS4e@ zpXr$C1o3N#-$4A9T&qmi%rVkukjuaIsIFBZ75}T7p6NwTgbb5xQBI^LcOqR5UdTWo z=yw_X{zyQ*>ltgtarmp{%DAO7*$#21aDV zt9-`s^fUTG+@pNPiAVJrCudHjcVu8@Q05ef-$VQX;*a!>49*OZKI12dQu#yS1^*vk z!~Z|%&Htta!*Q1(67pRjOU}$ldV*&{{8>4{G13X<@Xd_ROg#L>YRpWMPUKgJzbhB3 ziN4oVh`%ZCHT|eA*4Y^{F!F%VKQl8kD>FMYCo?y5PG(+ae&*cFd71Mw7i2EXT$EXm zLFVGjC7DYzmt`)`T#>mlb5-W*%r%*7GuLIV&)kr?F|#mpQ)W@-=FBabTQj$1ZqMA2 zxihmkvm|p@=I+crnR_!!GxuedWtL}FWL9QYWmad_WU`sHnRS`CIQ9?v|Hc@iRda`+44-_Tb;-v;_>=-WZx0eS{{9rPUZ0`z+5J3-$C`eUH) z4t-DPdqHo2z6N?T^j7F?&^w@aLGOXy2Ymqg5cCn~W6&p{PePxDz7O=rLw^GFCqmyJ zWc4%sAm~qpelYYyp&t(Y2a* zLq8Y#dC;E={rS*e2>k-+FNXe7=r4!{v+tOLH`>%>d>(lI(pHu4@gN= z$BF284mw_ij<=)ZI&^#v9p6L8uhH>GbgD+D&gf)Crzkr0N2k%~G##BTLZ_S1X&E{_ zf=;iX(*|_fiO!YitVd@PI)~7?A3Bdf=gH_i51p??=eyAPesq2joj*k9@6h>YbZL(+ z$DoTHUFy(f5W0*-msWIHfG#(p%Tjdt7rMNRE+3=IR&@CVUE85+S9G5DmvezOXOo4+i5gUo`I}vYe*Y4Y7E5V!oX2qstxCf$_qH z|J#F#*9T)0Clnl%-xrTXLZLt`bK_~DMKAvz%%i5zlNV(zH^`QIN^+SeFNi@8hvqpyrJNz z;$a^-qM$z>j`_p>m_HZ`6kaM~T^|XD!iOAGkK933{jU$I(bwRM1p}dig9?RX0WxJj zOrDpb@jyHf4Ibv88YVSH8tQ%Zha8k4cTjErw+GeG5RXlY_#+bw4(iY=6^W87R&b?= zbvzhoi1`jVC`<03+K(5j)+nq`Z*7<(W$2C@aUxv^p`NB~Jme3@&1qaS)2qCNWzuF^V38*N zKE%oA7uByUnI9=MV?aX)cV^C7P*{bldXz4X%qf^x9gY+(t}ZMtt}LFtpfo(vSW{A3 zI1g&2S&1(aViYoJp8pSjS;pm|ax-!T`f`9F8f$tLrZ@|sXhe#BW)-SD#YWhsP< zedUE!BZC#;$~mQxXpI!}_4OaEj_8#UzAc^ISLR);HRMXJXv)M@fG*_jA? zX(W?BiX4(_tHlru{s|PODZcHD@t)I-OP_k2ExP*-@ps{BuQ>ug;I? z8Wxp4s#VvP7gc^?c78$j`Pv0NdP9k&DY!s|h51SqCU59$jEyRl-r}OdR!Cb=s6LCc zq0pkMp;9Wbfz>N?N{tHnulL=ej+sWQ(-lSXiyBa6ifTo*SgXQ_URR)2oW(IyDzr)s z(xg!6RVrOJwv}gX*cD;5P8VsQl|8Bzlb5z6)`b3RJ}i2#iUO6su@9?KXjRz?txhFZ zXJav;7u&d`3X2K~!`O#ypp!eQ6Nl~kyD_EO+Vz+V6K}6awzcd3?d>}6Z=nk?5}QkJ zu+0%Tmm?5}-tygBZXAok@5)oXti3d(PgW%<+^O8Myb{|Zb+~%osT_4eZ#)= zq^MRGw6t{#N919(HmnLKUQy`aV^<6RY#L6_%J@eKwn|(W~V7+P}4K;iy)9T3l3xMM^~h7DuC^YS=;4 zYZUs%9YpNk6cvOu=r$$x?~9^J^=)xc75=+XhkR9jSliHNniJKkKQ?diHaFh9naV41 zfkeKmN?z?aVPpXgWB(6!RqJzdmKG~9Z*4u%Xg|NcYxsZG%^um-6Kz&cv?6*_4s5CY z!mfy-D2)F1dF+=4|7+}=V`{k)Ltokk_NykU)ZmsYrPoJP;iAT^Vnd^fIyKNc*1OW- z3ZL5ihK=Ils8U1Ge3do!&MPX=-O2Iw$xH!=PEzDAcAJ$@0LO(SE}XNI=No0&}-Bf z=98bLYleMb9Qe~V^dh43NM(u^cg-|7mo%)!9{b;w!ce19hsr20jIPhd$)Os3;~;w& zlV@Wuw!vJ~@zJ@cGF6MU(&npm8l6hfSSy7R2VHeIOG>9u$dwAcUUQaVYHfa@QWMT^ zI841ZT7l{oS72D72rG&r=NqQRf;wB^I4m#H7ibg>!`XL4mD09UDQrQo3DJem+y0y* z@~_9)0NO}?1BZEIR4ILn>+j$0@P}1}5p<>#!w`2zwHnpZqQdA@SeIQ;q-jJ|!=@Ss z0nRoYQCOr4hqZ+bZ@~MaN{wl`Qjv&St3+1+ego<>I5eVBs#L0MjZUvY197&}u4v;K$-8IGXP-v<+|LpP!(3>s~QA+ z5~?q*lty*dnOOOXLL7o_7-)Yps+6g5Gwg5KYi(r6TN9S$a` z<#G%o;z-xohe^VE94Kq3)Q3@}{QrP&N!Dd>U0M*m9+cvT?SG{Cw4?KWjji zpPH*iyV{`ozKSX}0plAh8u=&uuuTXjL*a&|Ty;sLs`-u!|Kwxl zf5UV`GENiAQsao|Su)uc@o0;9{L>MS@1nQqq!!zbutFY===A4uabj&Gnc#GmaeJKC ztx@UGP$!!HAEQd)vv@6gS^)hneB4!mUEaT&{)W9kjTSpz35Ue}E}Yk0plCS4^h;E! zX)RR>+anzH%Eo?N!WGZbNaC>lSsF>SvKT$eE@~L>I1^Rs!j|{q|J}(T`fR;c)nHbk zK^)a8uf_}0gqEe`{^-2sH>G9z?{8MT1b3$=O-9e3BE6>i(Z{T?uQleVn zW9}`Z3abEFFTm$D60Uf*3dFcpV=sp^lS+)VHSp#QouWz=v{)&P8VjT-yRlMQ6^0t+ zIKdJ9LVR=+@6g7mV{9*9tt!lKfVv?qs#K)K^>@x0DvIXKzl;)g=scsNQGxUgRRq}6Wg)VuvwsFr#q15Z;I0TNpR=rZ8QKMaG+)3nnb6Nx| z(SjQKM75gJVyw4-XBw_3ia{^aZtm6s8VzD(vvQ0e7^P*YVovb4M)TspF(te~`}F!o^2fA;Yj!_cU0DsQR5^YN<%Gk zqexIxqYmSgh=g|IEN+yBJld0RNX$9UR~4#oe6B%zr;938)ACjrA5T?9)Q#OJVWuyR z%Bt~U7KJ8TfqrKrtrLKvT~MIxIS}j?eBkI`}@x|eE-M*n86mkEiY=R ztsv9PFhXz^3-&i#pMCaOwK)A%jpITMY=tYT)Wt1T>femPN94F1fL_}$y5Ns0bxF%@ z{lD7}#3m>o#}yLI>cps4keA+NWTVavZ;NoY@3;c;9DOE6g7BI8sxfAZae{52%B(c#8p@`g$MXEg=+h6RyJH(npsv}marzpe^&K|YgEK~Z>?Cdf4gA)S``UqBr9$) zV^944=M-x2_)x=#iTQaSVRnEm8xv+{wE0*BDuj>DTj?u;(7tpPY z+Lcyr&RbHfQ4=^TQifaI;F{0;koteK{j0$B!tu$729`Qn(({X|NOOZ5@B9}QG_l*L zJ6Yc+uKS|!+|ohKUSWx!tJ%PXjCNV##;=vL-Ov)ZqJ3z1p#(espSxxQtKRUk_0vTY zmM3blyC}Fx|A4y~g+~YhWtL&&c?_SQf2JQiE!vN|tmR!!962mfE6+R3ey&kkr2@zP z8%#?#%#12^MT@(fn(P8iB#hnbgwP=$^Hlt8O}=bg2QT56*noC+M6D~p2hb9`oRO$j zSGHKIbFRtPXqZ;nV0bdB6`8!DA=45PwVEB(>S~NH);8`4#~yk$kX_fvf^+<0a0~w@ z1B~Z>`t|R*Yl|?pMHv5)sb0e3=!Ut5g}5V-q0CTjs4&bkR2r%b)rK0we8U2eT??}1 zAiEA^D?oNV$X0^v29VtdvYSA*s?M+|wj+>XsjwrE0hiOoO{~cu;FiO(HL)FmWVe!q zw%c}KBzwgKtI>zfBKx_VYuiafO?7cO*^H)V{Zg7_x0UkBEV5ICwY;j$M>kxL z8_O85URL97D8e^4;dUwM9VAjBkhBeV1ma)fTTK~mHQd2(lV`vkR7QbpEpF{&SVxwv zmfg~LN1%@5ql;b}HXHa|)?J1zWJe&`ZA~SMrMcg*o3QnOVVmJW!$XGch8>274Lc3H z43B{94v^gmvUMO^53&s)+X%8vAlnSGyFj+3&afxW){{}To(0+632beRvvpq^TdlI& zl;KUn)>|OEC(hOZWQ*%7krIKFDrAd)sb}k5!v_LexUT}TRYxHCh-d5G#%v|8jB)ar zf!}1^Wx$PzkgfZhN)}7=o#9u)*7t@V495*83_luvGW={fX*gy01!UVm_8`a}0@-$u z?Eu-sAlnJDT_8j3cGnqxi?j7-+8m=uG|(sk*`5Tp9)qN-LG~nCG1*gXaJ33t#;ypL zF%4vo#^5qi2v?sniIfPmKZ0=aFLAhxJ&e70xQsn{xE@DJjD2{xo@fl0D=#gEmvNv` z*jwGm@2xI-x~YUwyo^~!+$O5dIMOILDvU~_%9w3b8#P9)5m%^3Q}i6jo(I`pki7u1 z7eV$C$X*87DRw*%Eh+C5sq~Nivsl7H_!rH%;{qe@O>huohd_21WN(A)9grOX*}EWn4`lCy?1MVv;y78C zjCiQ`!)UlJ1KEcOWPJ>sw?X@j#BhDqhF0sKwUVHPZZI}$g2!cCg=iUXmPm?m@@ zzlhV*T(LU8-6(ADY2>%}lzl=t*}&uVX=A)HzKkW?Via~%H)0cv?c(Q6C5xrmX2gv{ z>WmK>A2Mz??l3-V+-clpe8jlhxCdlkg6u1h9Ru0dAo~Vn--7HrkbMubA3%1z&KTcO z-5A|b-H0acL;_wv#SIs3)YazCR~7u9`}0P!qq=cF$bO8|MRrtg!f?HB{75idAM%Fl z=jK?T&yB+7o<@FiPuZ#Fr1{?X8^P)a<8k8&LK1eCbW_jjL9%TBbDQ z%9IY2G{%*QMy^Z@eSRJVwY8za676xlhULzWt-F{jY(_Lne?U{ z6Y9_fs8pc30+j|7=12w<1r!Yw0~A|l8WW?M) z1k_-lhSZrZjC;Mtp&0W~y%t>Li-lFDpDt98)A@YV*?DxlDqMA2H)WCLls)3iar zYCVtD2!hDDJo^|{cbn=2thVx4Wi=uu$ z%JhrrSJQ7m8Gynz)dZ9oC<{>7*4cov1LXiJx6X7rMwVG57%X!VP|gIh+;M~DZ3C-S zz%r*JSY~umTrsfBOp^x7+|w+$TxP-L@-)Nvm0MtaFCIN-s;S`{z0yVA99FK6BqY*AM0ysSZs~K^u z!fjZ!4pt<>Wk$yx<5faCXeJRZW`;yc1d@-Vi^adhV_fEGW+BF9=3`t`9ztT~TS97P zV_#mYFnJdjz=4x||dA@mpc_C1RKt+Hm z0%{ge#Xyw+H5;foK$QYDx6ZscZn7}OWd_ke^JPGlC9pM*#JH$x;=k9l!PPo&kr{kd43-)RO^^E{hD|vQR+X9D~ckB3!*krvVXY ze=#Io9(|4DW$9(f;5o5i$N@d-HOR?116@&0EQ2fxJ zV1Mrxpl$`~HlS_?>JFgLUakXbJy08f+E`~%#yGKP)8<(8$O&4^P4%2mTS%9W+DbU7 zYvZJKII$B>u%om&&WQ^-vA88tB0$|mS~>E9t=!I7orf%w_)ec?BHzm0jhtAf@Mh?q z#%9RcGi^;QVV;E#Z@DZO-a^3cZ7N|bO|hkl09Im|ZJA>!wam4YS;{RHmU)&+pza6i z0ie(odJw3GfZ7h!4xkMYf9z!nKTKMOX4k0b!LC+?y@-o{t!@O2I03mc2w zalTd{UtJ%SNQpp_4bkFX>aEbtmbC(1Yk0aIC6L_8)Ad+my1I;tak9>`Q7~TUZy{Sx zG?grt<{rxq!q!$xo#kH3eU|$z4_LNY9<)4UL6V*V>S>^!0qR+xo&)N6pwLHp0jL*& zda2HW1JC3ysk>!Ql&vR#dO3luSL1BG-o{qzu=NUI>s6p$iL>_ zeXXbKkmVhLuD5x*UPDaI*#V4U@}cEp0j;AvT5mKb&6k!R30hxSj#<98d}I06@}1>- z%MX_0mJ>j|1=K#E_5+39-$9@b0d*Ltw}E;Gs3UcjpW#T8i%Zlz6 znek^uck7!3tiG#{u>a7;RqJp?+$}4*Ti?dHBJNgG5q4|PI#D2N0#DZWgc1Y>rz$s| z@fS5%*6G$f-e6g0@CNI6bJ9et6@;uJ>nv-rwZuBxI>%aSoog+#mIL)8P(K0nGf*di zItA1(K>Z37M&7Y6c)HFyFJ`ckx?2}m7b000cQ{i|7Iyfkzkn8@BTtLl$Z8$3t|Vk# z1=JsLvaUt4tjn1h*5w0nnC(xDgp${ewRk{!O27W&lcKW}QaZ=5x!KBlUM?$oUPhoL zh>ex^yl817&r2qftXdaKxXxNf*jaDgVBKilWZi7N%euvSxAh+DR-luCP64_d(CvZl z0CY#7I|1Dp=q^B~)>-e3v15HuXzZ*H1KqWr9XdVM*wIuQI<14wGX$MyfliB~vlr1} zrehc#1(JV2ADw@Rdr{WctZxcN=?!9(XjyZbu0vMd^Kx0y^Fq4l=A`-1dW?Yek@cwc zW9ui@PpzL>Kev8i{nGjs&@9j#(A|LU4s;KoF95nH(7k}}4RoJ6>(_Cxeu#qg6VMq6 zVD*cGHJ}ZwRsqW$avL!X?McF#pQhBUwU3jeeHv!+{tyMguq?FHHgv>)g|oo&5<75xXAqAj+& z(G;P#6^vq)j6GLGaw5=^h$))f##QTZwTp1|2+*N8SC1lBw#S$mw#Q^xa}$UuBCnnC zfV8Uqqvvw=^oPHt!#sONXaN(_gZ5*y@gv(wd zkrDxVIl{%iU~@M&R_9CXmk4+*l@?M`;}O-W%jEDysqN$x}m9Lu{77) zZzXuGwBKOA(SDPCmHlS>YWo`dTKg?P-vsn3pl=3xHPCB-UJEpSc`MMj0eyR&{kAw> z>!YS?GthS=;I%Gpx;C`Y)jD)NMCjTMG?{O}FXdt1iFBQN+{OO5{V9R0Cwa2gBO>P; zcd_raza(JwB9GO^=A?PUPTVc~oA$Tt`|SJe2kZy!hwO*#Z`;w`LQL)gdJE8Z1APzB z=!Mq-eJ{}W0eyd+J??JVqwbddQ=lJ6!0N#`R@>XKY8|YIyJbgrYg-&E;%+s8)oHun zYuN=~>!D^K;z)9|v%kB@MEez*5`T_k^0#?t&hx6#?+PG>Jt{fwgD~BBD zr(;|>RLE6R!+DMz#~9vVIY#pa>sdm{d4}^GCWloZ%fgfOd~?#c9FquHZimO=b@&{9 zN5Bzugd7tb7!r5^=of*03Fw!Beg)`Pfqo6>*MWWm=r`*eljCGvD71qP>_EPiK-T`a z!8+ImR_lOOM!>>u*1kAcl}#Ef$0ElP0jrC6tPV8C_+0AXLtHKghPW_teyBNVu63*? zSS@#4=UCym-m%hggX2cWO^#I#^s3$l8e797K)(z0dqBSr^ans=9OEOPkJdTX#Id@) zZ_nP9qJfU}K!2Qo)o0LQ2DD#6y!S8LxN04)?k8M505nb-7yK&+dR&_w+a*#WKz~ZS zck+VXdw$fVcIW7@w(#;$D59~9Qz#mb>BJ;Iu1DwJCLrgf&K>QZ-M>}=tZV`>PGK)&Y%pTn?<4lX1|9$K^Q5 z6*x}zm<{wP663gl-!P@ zVViQ><+ji50Q6~~&j9_$rj)~?f#PZSFbfh8A$2XAOqLJyRYvBQL>5$KO)W2kphzhOfoPjz_bIVJun@B=?F}xy4?6cWNwzw zO6Mwp>0A#wlNxKKnY1>@TLto5G7gzL9vB?07OZJ58Ha3Ya&vBOuAApO7axTk1x#0j zNce#KShUE~e3`FF7VUXM#b8qI`=iF61R{ffj=C<4|1gqO~@5sF~cU|uK+zq)K zb2sH~&bqCajbCa7tWjLF`Eb(sl?`3c#RJYqs(=Ieg=#h7!5F5V06Iffyn^|H5m=e z7+}WM<$e)I>zgQAKL9f>0WCuuEmIp>t%KGXg4Q3v;GmJv6gqM8R}&F7XFF#{9xG=D z9xG!rtdBFzN%2@YWjt2q=A`NF9DrCkdpIv}_H_1g_ICDhW;pvg`#JjqV+FXLz!U>h0?ce+<^WR)402NjOgS(Wz|5<2Zi<6-PZX^CfT>IX zt2z$W{5E^lI`(Q00qap_e*V{JC(i#uucoFs*5`HSTLM^b@?b4! zPMX8cj|o_BJKu30alY$(&-uRd1Lud%kDNz=Sp>{tVDN@m0?ft0ECmKTAGN>$FqhUj zKZ%3&W!Ik0W1@l1Z-BWh0jy<^gsth-7*J!bX(Ow3$oiF#^&2o4tB*QZ=yGj#{vnYP z0pq_Lrh5i=0%~v&wrlk*J(k8_cc6G^kz+CA( zVAnR4FqWp9t3Lwf>h9{{y1>=b)yvh})yI|L>g(zU%yq!50OopNRswSaFgF5o6ELfQ zxfz(%b*=$1z+6KGz+9QYtVsaumU_T$YXhuR0CVLaU@nAYZ45Bi*mD6Et8t5qpZ+!4 zh10(<<*m)3#N+Y{WZ{&1bhd79PMS%sd_vY_*A&-O*EH93*M+Vbt~}RFR~Q(iejPCD zfx-51BQTqQ*$fOuBeno@cb%&sPFAtdCc3cQ#0g^Lk4%te>f&u;+ZHOgw@xc8=j~cV zz{2JQSGE!?m+N8#>)ewsT$j79B#4Z5E#t8wtAv~{nB}_8wNk+9dLApXd&+s!tafc6 zSgmobb=~5+)peWecGn%QJ6-EsNYgf8Fh2DVFx!FI0nEd|>;z^PFpmJUyUw*Sh81}V z$hB28&~+~`3A?8VPXRGckQVXDHiOkVT=P% z{8(ms`;XJxf0Ew*<(TDq!S%9$%S${iPZ2BhD&H_Z-Kb&2Cta@?9!vO^>pjBEKG%NN z0oOs-A=hEo+pc$9M_lg$^DHpW0rNaCdx3cYm=}S037D6Gc?FnP>s;^0m~nj^HASBT z^IC!_if@U+yw!$G>mc(ZLFOl5UXPoiQ%#$qKine06#d1Uq9(UQi6Y`oad+U^a<}K% z+Sd$IlUWkyZNd1EZI8coT*}I-f$lwbiL_*%e~LN-+jP+(0#~#*!{Nq9bnr7+X2{) zz;*(*Gq7ENO$D|quxY@i*SX_U?cLF-_U=!Cl_k(c$BY)sw!zgpaFK~$?i0XLak$9D zucp@IcAs_&lkMI7WP6rDNN~AOj8Y|+H*&_Kka&_jd}Pbz!N`^oSgtu~x_HQBdrzvT zt0&Eq?vZ&Y5A9(*tcL@(JFq=~y#Uyr!1e;RH?Vzx%>cG9u>I;h@yYg{-a>2W=?858 z1h59i!5Z8KR;z&JA#?3La$pCroD%sY0nNqM9voy@R&TpOnVPM z)1DpDoHQ;EnQ8BFdpsVm$LH~T0-m5JZ!+{+EY$mW-z>WkKbD#iL39PEl z6Q61CiO#h5gn`XYz)BOxO5cW6>tID@+Iz}@RmZU+Gwqw2!{=G#5$4)^___A179sI0 zCH9KdHL_Rf(larWb(v=w-!JrB!JDj{rjo_dEcdJ-Y+dJB;kn+k(sP67M$b*2Ri2wY ztAQO2EM9Ufu;YLo53B)LG=wH#&A?jfJZoc~mgf#(4*|~xV66#k+2eZ%u(@q;wGLbl z5V*Dhi(NLs)ADRbxX!wVK&;01c!bIJ9)7Yt>p)7*xr0C~&9k1p0$I=VWI3CY=2g#O zLe^`Z*FA4|-t@fX+2`5sIp8_yIRva5SP!sXV12;)feio~1U3Zh1YjrDdESnb^}g`r zndd05xXK9mBQbS$O8m()c3K-*twYv#gsks@og63Y1d`R%lV_e^J*RmO-t#-}!B0g> z&iCY*SL{vV$?{5hvZgmDO-C<-WO+MzJA1o$Q@vfiY2I|N%u9J`U}pfE2kcB>v7yTc zwgA{dU?ad50XwVC%f`s^ULd$xUUb5W6Udq!Zx83Tfz>Ktc}E~vUi4NeYI4c(A;*Du=O83r^trHcDs9{zwqF{xT3&2-PCUXR!7^?Ci?fH&wx>r?^kJYXwpHcoHSQ^R}rkP@m}j)?!C^t!h5}UrS}H!jozDp1z;})_A+2E z2lfhJmjQbvuvY<#VXABDyf??NO6nfP3S%eN)?>d+)%uauW%xP~ohrA|zfd|Ae+2!3MV1hdnpx;cEB=Mrlg+{CKk|Z*b zSeF}1__X&`!pbw=XT8sPpZD(dzTkb)`;zx%?<>IG0PKyxA~dUjy%|_^($@gH7T8;W zy|vE!T8tI%z9=i`Yu#4Q3VTPKm33{bv<@qu5LPfMczc|cFPb(%-+7McuTLp zd?S1#d8~X{JXYJ9ft63~)A3mOv^-W1H7CtjpMzjE&Ntp?@ELt3pV?>eS$#I29oQYf zJ`C(mV0Qug2(Y_>-2?2Sz&-}-<8{8=I9A>$RzYBKMhp4lyLnH=v3jNrtJcA4Ccz53 zN>9eIDr_37IleLhtGPT@Pd5jVYTp6@tNA=u{E8&!ak6|D`>rBbE%jaEtM!5JQr~61 z%Y9e)mif>(dLG!lz`g+Ni@?4F?90Gn%lIm=uL1jdo$u;6Rx6@dVT<`j0#j~eJzNdUo`=0SV>wC`kyl<}$c|vdLFtBd}ivxj2fPEL(_kevL*bjjHu+H~V z9IV%)VC@6;qXe)%j)V1S8(6Ia)`tYFkAOWI2MhhJCW8mQW4><%u)g8JBGXz7>-a9- zEscT)Q5W3zqwk~u*3UdxpEW1VX@3d<>x}OY-=Ds}{35^DFY!zLN&aMDzX0}2V7~(P z7_eUh`wg()0{b1X7+?FL&fhKuR;-KXPXqRNJy;1{ytb(@tuu$%-wVO=>wahfSeXDEE*m4XZvM$lI!*pOKff#GXn&ZPAdXCJIbW2? zU+kYFur-^o#U(c<%{>1Sf>ouz%3tlT@z3`!@GtZ)@-OyZ1YA4d+5^`CxQ@Ve0zwjRuY}QviS%Znq zI$xR}{J#^jj{8sefAs(4|Ji@if6D)h|5yKSzzqd%7;wXZ8v$GHI+7&MiCf|m<5ypRUkW{4rl_}fG(g9sEsslBF`GEz2g@HwZ#lU%h^8)7s&JSDw zxFB$t19TfF0yn8Huq2KZB<&!(r3S75ZgK)vQ$bt|vL}i4n%>4$>u_}=;p!&fro_2g zeV%qPa7SRhK-M~*tZ9Uj^R#h+ErG29S@-Z{UD%v7+X9agvK|aP6xbfv5qLPTGq5Z0 zNMLth4{&+F%>*tCTt09Gz!d@)0j>zRS-=(71s;o&^>pBwz_Uo!^T3rPkTnOmxxkeX zvdY`YY8|rn5wi9JhrKt!mk%65vYMKh7kEGLkw6wc<%Kqj?4xteiFy6Uv(asyZj7~X zUk1JwAUnoGR?$@QSeoO3(*&{;fgb}u1%3{k44ex568JUnTi|!#DuJs4t{S)+;N}Cj z0Jw#~EdmZL+eLMOGcm|wF{@xQa7*eTtB+Z6m$Wg~DvSkX$XJj94j;x67z?t<*uXE+ z#tr-;*aJE~0k}UQzH&HsI6ci1t@L2;U|$}TUgPOBl9Dr}diG1aS zRU^qu!pTHkM5&^#!JObY(Xh?IQNhu{F+p_ot^)3A;I0Ag+Ref7K||0OM2BxVaMuC1 z0=U(L*Gzs%UX>43iWF2^3QMZXEBO_9%WJ9{d}%5TSK$)ABbqoq6t0{ViJqg0!-J7h zyi}ynTwYK!H&RyZDlZ6Emz0;`*$18F?0Ld>i6_rX>n?n0tSKoi3`VM}OUhxSKWxr-|+WZdI+SHfN%s!9?N8=TKy?=!IZ@uplq3 zSA)F%y)ZTfF<+ur&UaW|8fBgs`g`J-va^E4qG9XTBeqdM<^;=eZRcQVaBdK@xfZxv zfV*{5up&4wh-UCM;5Gwy7s29e)!anA{i_rWZ;Zyg0Zti0)hD*(Pw=wfGE&o*2hm?$58Q^0!7GD! zLu~|ZQ*F+q=)DoG@({Tn^U}C;WZ~Su#42WG@P>vpwJM0)18fN14BXutf@^@=+R*mg z9yJ;FZsIz41vXzQVqfucnsTD?(O07$@w=YG{^gyFCX>^KgrBS8IRBCnd z%xsfFo2fIJ&6x_TTBS2ti;R>P&+% zTdh~iEqaYfk$9&4(KBstbS8~jBbO`XhD^Oeg}JlnOn4@BcBWRN(OCR4UWp;crj>hyl}OuHJL$*5CXENZhg z)0k~Qovd0NYNuCc>NQ5AUN5&Av8WQy^l|h|yBnQJXOwHTI-@qzpt71Wv(+knra@}^;QFZROs|Zqt%M_ns}y@(K9{W=u8^3MvLfZGObFj1#^cP(`V~c znP#=lVz8Rca*et{IsG0z)3c4vq*I%-F?*U!vsGb03XBSbQinQOuVvuChq=g7V5anI+{-wqW6~QWe(X z?Hp^tLNi0*1}#{qFjORBH-s=)@cxDn1`9r@wO{BkTRh>pkzjQt`ic{HpFCD@rJ?yE zc57&Es4P?-stC;sRfeiU)gkN;egxc6;64WK6W~4t?la&%2kr~tzT6sGAQ~bX7+M^< zD6}MWacHS%2ykE3vLx1U47jg>`v$mgf%^`>vQMez9pj+cIklw9Qd%;rB)>G0m&OWT zV@IK+AmXT+R8ol^DDkn=;>S-6SC)j!s`Jw5#A9O)GkTc9*M`c1;*x4~s%t9oywNX( z^IF4mOG+2zr7?*oaHG3WYQmRBN|?&a3MwPjk!f?o1?5!>74j^FdIJAGFRfqU{OUqp z+00UO*-JAE%I8+pR7Wav_>aZqRn-$0>NI(pY~KubxWHImJ_o%dg<^y8AJph# z4K(#tmXudwuJY1`H+`TnTrejXsR&nwu}7AdHni!Zg=U7mqKt-!?+ooZ zi~7Cq3_XS=-+l{l7zn|V_h(GvS(+b-<@=e?-m@ee-68a1=p{&(0QU!Qf7a#%a{hL~ z*F*cxk}lY!q^epjKPZ++laf=~ zb(}n4KK81y>Zc3{6VmZhXh3y&#pD6y`J~rcg>z1ptIpg{iz0>5EL84m-yu|4 zUS3@*-j>#{Q)i0q-6vz%@R6fNj~P2~oXP2Od%P2-Or18Ppr~TO!X=kX7*JMIT6&;M zYS*-M*JTBZXENY8h=Cupcf+mVmJSJg^t`_@XQ1ZxTkB9X#K;Q@wC<$Cm*NnQU?wiJY*>T z5-eF9!Rr=TOT)9s1mPq4#;gDMK|(Yv{i?Lu_O#`4m_ z{i!1|v+~kD_}EGbMpOSjlrqKCv&?`KoT z8#fqg(`s3wq}kSMqs3aAUMt&Zchpj~bS;A$2%!S8i<2Nid8MNeZ~u~_k_g@-T>RJ2 zqKZiUFKME*l>I(`AUIX1%Q7s=$->(RU(O|HYRb#dsB8>`umZe1RhVMpq#2%|yQVsf z_S#Tc8D6w$;^Yw49seGA6N-ZrKA&5(vcfl(xfR9XDl9$Wdpy(h3;9xwp35A+;HK$; z5dNGu6RrN=D{fObKXjI_@hhQv>Z=&fP#B4#wXraCXjXB_?9@4>bIZz6*-4~nK$?gJ zEiWU+lK+781uMb@q`ko3YO1Qs=kiGMUmE2ilRQI_CavvNn{jYnWmRf*jeCB`6Lgp- z;ETzG=j9ubv<|hsYx{W9(~Cu-^x|+uMX3Y{om*C2X$u&pOrA0|quu+W_99NyRfKnV zxS*=S;Pbf%#AT?90CVE&sly^M`FtRgoGbB{X1q@>#2W^Wdm3d?VO7Cgkw`pRBx?6n zK}BV?NYr5fe&2sVbp?5E$M^J{P{4%mr;9}GJ4e&v*P=eQNLi$^q#(nFRi0rBV|$aK z%u;4xYevFz@5UDezNR-mAx-vx4qHZanq7thE-&^th!s1Fh z`5yC|@?=FR&l#3U%9+ZV0LeS%v7I$iHi48O;i5KNX|dsZEUR{pizbT0qKK$ml#j0k zqB7CPq6|@$s6;fMe>Y1M7R^P;Kn+Hq*zl+_luA6JN;C(*pM~!~kN-|SlN2OP1^!Yl zD#9a6FV21}27fOWeT%;r<2$$LDF4ku z)Nd|+HsQB5_}eUepLi7|a-G6U!@B#?N4R zRpXgUF^6T*@~J{?&Y<3NqN(dklfUB19yLQMDps%XJ7#R*H70q_xU@2_q~Oi#k2g_k z^|ckddS-)q^Coh^lTz4-3%pkH{^YlkKTJL-%D{g=OFoqR6~22f`F;F564%F;O%%3qf-Yv9j92%C#SYBs{xs|~Lo z#`>tj(yl>H2^*P6Ok&*$S4p@7UR?5cH&Mpn6V zCh1P;6Vg4>N2RZcGVs%*(r2W5_;>e7AIHCk;^`U^F5E{A2`9W2M2RMOtd263$bLc& z`SOaD7CAmvQ?sLYY9f22d=rTwHP$?h5^J=fMG$I-zw1)_rz%q0r4CC~ry5elseSQJ znK~Zd^-t}W>PqGCS9|K520@R}t%az>iWoSz>8XQ9` zF|k5Oq<9)%hiADHl6og8k{oE6yrPUGLy|gaeDpoBR-^Hc*ebz#XC{rqU&khylXS$6 zCFTInE|eFsXlK_x@y>{(g;*^9W7fNPH=1CSyE|;v3td(q(+$Y&3c}DW8`WrAwvPNLNcYN*_QQ@S^m9^r-Y(>2FCXNmNos zQYO}-J!wKxLDIaWrAf<^ZcVx;X;;$oNe7ZXPCB0SXL6V1p2@?LbCMm&laps9FGyaN zygGSH^3LSFXrVt(K9!P^!eaesvEHVn%ucx|WqHaSDce$>PT808Y0AlV?b>y3H@w}L zcHVa3cGc~cwY#O=eeIrVx4+%z?S5_FsePaJ%J$awQ`?udzqI}8_I2%_Y`?$#m+en? zNb4}LLrw>8hr$kvI$YmjbB9MeyxHON4yQY&cO2YtOvg~i*&U(d+Kvx&+}rW}jz4wk z)Tv)5eJ6jXl1{aq)^>WZ(@UK`?(|z{S?6J$O`WHAuIap@^WB}F?tG;4PhGln8PsKb zm#JNPRh2y(IOv)Lp6jQ@`)pq3gh|hORTZF7CRz>yEB( zcKtT3L)xG;Q(8D}Y1(aRd(z%cJDE><%E0kR>+a!BV z_9-Q$`co#VfVzy@OzovUr&H*`w1b{aUrXOlzd;{oWK1?Qky*&x#yr6sWu@#O*1?vt z*R$K%!|d-|FV4V4xU0Dbxc%HO-7e@hzFVZ*HQly#JJjv>?it-J-RE?_q5C7Ez1iO5d(ZB@s`rzXH}o4`h1=yz$qZT&vz-?6{0e^LKc{h#fBd_bQ8?g2{%+&kdifgJ|w1{M!oGw{WM zzYH2YXwsl72R$j-W)C&t{Gl3{Ep%KMkJ5Wk0=|lam3r1oih!Y^E2-L^PrpQ%Xs(4iKqjH$CKzW<;psEW7;4e|_R-MQmo*l`)Gy5Gi zrFN^YR6nc!L!;GHY97!W(+<$i)ZVUrTSx1By5+i;^vQao{u2G;`rmRiIn_DabAA|= zIcmX`SRZ73(NOa46j&LadckJyqo78uXI*!sS;ORShc&F#t!CdHA8BysQGyQ*!j23 z|8>E{1v?g|FDzU5+M;2Lu3q%zV(a3&E=szn;G$=j^j!i=KEBv+@rI@1rTI&ry`=vo zmtXREt*!PR=m>M*^-JZK-gxQHmrc6t(aU>XUVHhcSJOZe3yylf_<=3vh_RR8v<*!_)xNhxrf2}B5@y7L<>+f8dva)RD;Ty)? zaLY7zQ-<)^z%d4|juUpe`P0gC4Yh7!1-!kBqmA9O^wfNRU zw;6BSc6-m;ufF}4I|}dEf9Lo+A6VCG-L>m}UthBRoej1PyEYEmxO!8{rumz`*gSFb zi+Abn+PbC3mTR~Cad+9>NAC&T^ZZur)~$6t>#o07a&OJO$L^bc-&^;a@8A7E<^vnH zvD>bFQ1oEUgI_;1^P$7ro!g(?q1*Am!vi0_eJ8c^nqA^ui*_A3@6pL%J`OOL;t^YWfobgw+}s^-;Quc=?#`MUb`oo{H~*!8CN z&E0S5-+FZ4=zUM_AGiOR1LgxS9CRFf^^oV#zQYp^zw`F=w~xM4_|8{HN{^g)cmBJl z->XF@{+bWcK3M%>&kr|#H1wlwM>R*E_}KjMYo7!^dGFJLPrv!B>a#PSU;agxFIIoq z=gX~MDZhIBnDy9OUr+n`^KUA?IsNUj@6x}!{re%`Km5b^A6`2?`S|B2Do_0NQO(LbGkzW>+U zzy88l&!WW*A~+i_3N`qQM_jx#7Gd0YF^MnL0w3my$Jz>o*yhGdF~Ef3pTB>P5u0>T z5A0tL_HFWHPM@*eWC-R!=iUY?~2|R zeTrVhDbXL|6!af@i2I8NiHC@XiARXF;?d|kOcP%yE)t;y)!KiA2%?y@ymunuL-t5>C=xqLuh1LCFNkR7pfqCb>wmRC1+c zx#Tvy5)Fll`!_qS8WzuEnLoAoBkgk;8 zBE3_(S$ZFO6AwzaGrgJqjGR$1;~5L%W_-*9W;TP-Bl4d_Ec`3FEc$Qs9|l)Nf>@ON zz0fD3VOwx?;DgYIp{=2#AsjOL8M;ZKTM`ZvK(}P*ma@e*QhX%zdFTuDj*j4v0dA_% ztsQjhPT^Bfr}Ap>T3?JB25qTl@VYoYNHgDfBZ&Aj!EmhJGRwm(oJzg%~~yS7#`5RPqd; zJMC*>#N}7_XX%@&w9L zD9@rikMa$kQi9SI1p{A-3>3VU0s~eG41OtwpkUxjf!9`yLK%aC*H#!%%qSSlQrJ;2 zc%{JLmtq>q?I?Ruj*CP}843mml^FO^=A)FO)S_I9ayiN}6x3OH4a#zq6(}oFHlS=m zxeMiPl&vWDqTG*yc~U-vvIFG>lp`qLibN{RhYItd!l0T8%SM%lG7|-F4;5Zhh1XQ! zHC1>`6<$+?*Hqy(Rd`JmUQ=}=3SLiz*Hhv3RCqlVUQdPBQ{nYgcsJ*grC>>Ecqu}xCG!!fwHI33AWgyC6l%XiY zQ8H0Rq9{;QC`Obp%0d(@U-gS9m~Rc9SA%t?>5Gzug2!v{c#Q@HgPIy-MdL!5f`a;K zkP{7_M}t9JO$22Q3Z7E~C}=h`SD;*pay1H;hh`PZYLvAox1!*+HOQ7`3ksHr2J@+T z9_3AxeJBS|4xzk_LiGC#H*>ZwINweO*PfP(sJQC}_Ut3`dasIM0F)QM2KpkSTpu+DTW$^|IBP*7(b z>Z}`#g8J$7D5FqNPaW2q&WvJ3L7jC06y#D@gi?$$8>JMb3Z({R0m>p2%#Usv%1tPk zA06gLhxyTMK-q+XdD3B?blXuLLwOqIbrj5#Za)gvfe!Pg!@TJ*Ke}Tm-=JXG>#*!~ zKcf6466x`t(I=s_L+OBm^`OUk&|}{8m^VGLrSFF_07Zd<`O|AqFpql7qaO39&qZ;f zxKKPO(@-#fdd#05^QXuB>9LOV6(|>>T#RxF3Noih=Jd#%{z??AD?QeY{tXl?d;J+S zb*NKLXOvWwbQB7OLBX=lL0xjRD5y)$Xq2%i<55tToXIHVDDzOTY;&+|bFgf4uxxWs zhaA))2X)9n9db~I9MmBP%Qpvg$XSoF5oI&V7LQL@Oc>v`>6fF0ghf%Psb3Q}) zK_nU_L&5uP)N~X)_ozEiowP&$3SNIK=KueZbmwt87HS{B?J{8{1jqRNQ~# zmwAO(d5w*@o5pXlmABc>JG_Uijb&{tYvUjIkrVvPDSp8Y8{1Q3vot=(U;qDqVw>oz ziCr~m%>bsO^CmvK$v%8m6T5G619La|&p!{c=cc(SfajYQrvzqhs@tXwFl*D6^kF!Y zn8GxCN7Hy_GMjlUAj~3`unc=|YVS?o#f(j5ZuS6rZKl^|b!kKsn$ZHiHq&b}y*BGe zXGSoez1VNFZ}54|bk^)Rzwr-dY<@q!qq#jc*GqHv(%ekV?XS7Hnm42|O)*<@pWS>i zW@&Dg=7}U@m(9)8+)T~Q)Z9$X&D7jX&9`xclU&7JwQxf%3gbIln5%`)Z()`e-RRFi z2IJjmF%+G)7>O=hEJRN&*0PTEY+x(9aN8}++~OGLxy*k-&@wwEd5rpWqC5SVNfJJ* z<=cG39`>@2&-sD__}rFyZ21#rYI&Mp`JFRC&?+~+qm^C#?;j$zn#yWkMb1{Q<2zdE zrPU6;#^<&AgR`9DFD`Nk*<0P=o`2RDA{+MB+TL0}N(~}$Ypv5*%raKsdt1MRu3G!P z)*oZ8)}Qbx?xOWkzUN0y@H2XAEko-IcpqBd#`m}J{cZHvCI>lrh@upuIPRxSW17)| z*0d#p(YT#9sic#^T;`L7y|$6P%~FXXnRE5&DfNLs`mGk=it%A!dze zN*mf?4-rww7ZHn05pkF?!cHRA<7ZpMn{34$M93B)Tf_&ry9oP<_=aQrfgMErjhqp3 zM*J_|ZSDqvuL~mYLr;;iMpi-RkvflzpgkSvNN2jzou2ff4}Iy+3&TMK-MT(qXsgVkvzv3#xVgiL?t6<)N)p`nwRhnM!m*H zHX~Ei9=_xhy6zCd3?1yhgG?Q&QjB){-C z-j`_K9eo|&-_iH`WurmIhbd1r%+~QKd~e6u%wY}dc^^L~I$q+M{})vsohswGPM+)J zxlW$zEup2-Sc-d+(&2k z(76+1NMIgsu!XnT!F$Nt`9t;~cjq6`NoTw5{40NOmVdZ~PDBm5WJ5Py?50am++~-N zl*X>R#Lye}*JS{sF-w>6Ohj*8+&~xaOP6%!vx=86XO~wnV;6VPWgnmOCHB_kdt~hL zOAvH*dtLKWj*95oU)Bz~R;LzqsK+xjrWxIlud94rW9f&!yAEL(?x*W>$lF!kuDa{G znZvk^Zf>Dl1NxJQyxsKIO}=jObvwkj$k;5Qa>Tag)X6jyrr)fh%>*Vfm3U?$WA|h-Sb?0~Zv;UP-SzN& zJxbv&do-dOy)bu=8F;Qo8lLT;haQVrhR^A-8vE+;8k=~Nt=L(Q-F(Dpe&Y=1xPT6N z=%B~H-1Lu8^HY!_6yp)xQqKxhqbBn8G=ERM_ms1zcc-U!r>8D@c1GTw^7b@uPxJP4 zS3MUZZ_lO3+j9dO@gDTt!VW%RAN$cuOd(4180D#i?~Z9ldwgGv?~Bn>Oiy~#mjMiB zDASQ8MwXZa+<8nYbC}Bl!pIgQTg-O87ADX$ld!P9;O6#+WQHrQ;Rz2uD9-bH>Ek9=t?a87{xfAXENsKZI0fv(P?j)d%umn z_Liyl0SzUx1x%Y|P1*l8cT>?2PfdHTrHrv>`$(*d{LrwiTa z!9=py&et5rclGgIeSB9R-_=JyeQpOqtnY}`No;-!QiP(|X>57yGgdFLRjH5fj@3nM zOIqWmVts#XXMBIG?~m=za3&FlPGapg)^20d$z&cf#x7(vukvOPJgd8B?f==itmI|v z^x1d#g0J|7BYej(PH>W6_#JogtbIRwC-8TQu=k-kFzZmW4lO_-%sR9RZIONGC|+bM zdK-F*|AJsxPV8ZrK8ERIm_CL*NeyaK7u^hNNE7rktQCD3z+eO!HiG9E%LMc@Y%0^y z(J-?QOXO|rXn0X{JNyOS!ki|;L% zILKj+@&j&i&&bfr5n^a+Bo_BZw+itz}g_=cZ2iMtu=ZpJNP9ln3uYitUF@%_=k_%V!UVh~KI zOkL{n42|*LPPl=)n{X%a_pf-15BZqAd=>-~#}bEqPqgoeNkK3vf*!~_N#05Qf?#qU z9!B2D@=h+p5%e`#-pTS#J{ts6R$w1fUgr(A`1`@`W2)R!2Qq|VK`_ndOsje8CQ<8)mw$r`y5wWYU5l&b`H%KdwFvXh=KE5*JAnz37dZ z;@no;NJgR0IDN)VM;CGN%p?>0jGM;-R`Vh+v6eS6U!06_?jugdINiqWLBDZ_IE99YQa&Yh%~5pTXzP*2ipp%+|+j-!(PiSsa9qS+G7 zl=v!UO0=iMEtoCQY>A&>Ux{W)w6DY?e8(}4^BWiVmz&(?UJxYR$Nl7|7-mW`Q<9mI z%#>uNB=2ETJBsZ62rX({ZnJLLkNoGp2r=$eTlw_tPGbNcR z$xKNvvJNvPnJMW_-eNoN@Dcktz(Edklpi?FIn0z~S4meeTaww5&6J!6GbP(oauLjy zY_?=GC0E5v$+f71*^=!m*=)&XN;XrnJtcR?Y{~YOJRCD6n?y_VrI;rPxzSWz3dhwv>k0SBjZZ>?@@`(R8LOu{?{pQbsX`@k}J16wH*8$$ZR~Vzv}B zrEFj;W=b(rikVW(lwzh7`%1B=6f>pRQ;OS5Ft$tq1)vOPU$d>?LgqW=XT3v{|HMmNYY@*-P45 z%#vn5X>Kmfe$vd6W|lOwq?skne$ozbj8pu|AN+|~(ym}XY4(%$Ul63rpDus8{OR(i z%bzZPy8P+#r^}x%f4cnX@~6w6E`PfG>GG$`pDus8{OR(i%bzZPy8P+#r^}x%f4cnX z@~6w6E`PfG>GG$`pDus8{OR(i%bzZP`cdp8{Ww1%f4bc1|I2(g2}1XfPI8)a*vA}m&9RR;x49Pt8E!2j4@EFjhW90-6lTjXTZWl3>d+W7Wtb_$ zOc`d%FjGc%`eCMwAq>N88D`5cQ^ripl#xstX3H>JhCOAh!Au#ivWYi&3%km&s|-8J zFjvL_4ssZ~%J`Wxm?`4|ZY{%X8D`5cQ)W&IVx~+pWtu6|OqpiNw5QBkJcF4s&6H`T zOfzMgDYFZGFjJ4}rc5(sy1BX6xPjZ4>o(?v$j$@gCLa${n4%P?B&8`!1sNpJcxfWZu91kW*+2~1)t)0x3+l1OC^b6LPbmav>v zyu{0_=QZqRp54r|n|a%LmtB0o$L!@ZzThjq;RxU14(FZVB){-GXF1PB{^2Uuxy7Bp zf7gL*<+^2AnXpp?jY<+>;s7+nm zLD(IH-9gwLgxx{d9faLM*d2u3LD(IH-9gwLgxx{d9faLM*d2t2GYWSQb_Zd15OxP) zcMx_5VRsOA2Vr**b_Zd15T1`A!i#YSVRsOA2Vr**b_Zd15OxP)cMx_5VRsOA2Vr** zb_Zd15OxP)cM#ss0o*~@9fXhK4#Msr><+^2AnXpp?jYtDh3;UXJ6Pxr7P^Cl?qH!iSm+KGR;DV|sYM;?@eGY=MoZcd zK@=V7LU&^5Lq7&Ggkg+iG~;-l$xI`TnIw=*8X3$Zi$yGD1*=)ZI$q^<-e3!FvxE0| zpAXr?r+m(re9a-g<$HeQCrK(Mdn$w9iO{sFQ4&65G;Ni zJuQBk1~fwE#dg0~&c$*rmUHo)AXt){ycD1iv5a68V;GNnSn?GIIn2=@SXzwo*wIou zT53m2b+y#ZE%jYX^|Mqz%X%=FXBm#qUFNoyeS^<*edf5Ue!UN;kH$AZ~2s6p~0GolK5%mUCR-QV^_i zGppoXH4JyM%AKq-|0?@gb%K-F&+6(l#2v17hpSsM7qhRHVf9PA9Qbd~kq;fesN)wO z!e_rYk;zOWj*I-qognaN@KQEpe925Nt;7etv^EHwT(HLHt?_wleBK(Lw?>C+e&-Bk zS#u!>)^;S8ehg#?U+_K0Fw0uAyj+VWnBiqJyxazN^71y^@XK!a<@W=Be;?nw&iAhK zz3Y7Mx;ZRG#&u?1C-^J=%qx#jlG51IE57HIzcAw~Zu%8By*>i>v0mTn`_PZqc?aLQ z-gmD5FbH1tJ+JzVSIbk0Cz#DV7O;>dnEBOP+~!^oY`Bm1`1}pM>B|82aF9cMi#}ef zPDAYSH9fqhhu4;|o(;Ie*ER>i>-O||IvM!>*R!y*jXBAU**Ch;jjiZRSIoGv7oOj^ zi`{&L_h6IT-1I1AD2MlH)6bm8Je%C(rYk}4hR=CJ_BRIMHsA0ry&?Y_{_Gp4_?16` zU~>cPZ*x1$zB!sr=yS90-uwX{2f>?pDNYG||C^67j(BF0Kr-L(6ZZG!FSxNS`rq<2 z_0iduCcKF6*yj=tL`gR@a@d|I@``&(sok6h8oouT~ZR#TDwu{))wmU(vJs=z18HD#@yZ3SX zNIvH%@@)SRv+wYoI~rlm9nG=Z9rnJ%%sb@V;lJcg_CpZa!oWp9aBu-i7zdV#fC>VHfXZu#6R~My8$F zkz;3Jic%a|cFM9-mYuTflx3&S-YLV*uQ|lGL9nYbdfTPnUC+=M_poa|=H9gk@BFU+ z{n^v}ird@uXAr#Kj1F|93p#%Pea!m)m-wFdea~*+vDDD?YLXS(qk zJ9w8}d=La5>+9o+JWds=5#}Y<;_g0{^J6(azQ%QKaVH4&_{=>68O%`R+N0+^dfsFH zJ?7t|yH9G-1f6}-68ryTE584ekNAXrL9n+BPf{Jv?5%@c>|Mo+$g@|Ty)t~7ogCyM zFAG?W+@HS8`XJcnZuUKe{`b|#JG@T^`*g5R2m5rePlnHm@EGN&h@E|w&JyhEvz7S% z&&>b%efaLrA0Rhw>+_k+CW%z^v){kJU$*_S?Jq!o+~a;b+drO(LGVQ{hBBN{`1igH zk)H=COi_m5nJ=GbGSm2;-}r++`6~zxw8kwSu$Kcp>CFL-;g$~kj2rpN9=_^;+x^O) z|EfEi(Z^T2`3O7tdKPoBgRjFZ4uXR@d5B^>LMhzsL9-uBL2m~$xyXOGlWzjD5kU`P z=tDoeGvDmzOTNa<9I8!In$wE5tU<;@TX-8gJoIl69QL_~??suS&qnZ#AhBc_mNNe9GSi?M-ANLw{@t8PQTUZw?6kijKU_JG_TEkA4^g-<78(X8f)$^~qovD{#Z#nf1GyLGXPJ%=NvwzR!<$ z>3iSx{jb>j_xAonZ-y}f_w~bAj_&;31zK)yggdR`W z?TMDibRq(?pV+|byup?r_$e>NDZ!&W#&pt{!(0~d7e4o=|F|0jKZoeb00!|a!`a2> znDgha_$CNW+QrGnxVMun@D80^gIQ0?aMG=vbQh-r%zVnbe5w%Mfm5S-0e5!Fot;WR z->1%VflHYCbO(A9OMhfK?H*3=$Bmu-nnOYGi+lJ*hF@CImPj`8E<4%HM?vsw9v(*j zzm}p5b6LSEUgBkR@tZ&Uo7}%WNMZaO`E3TXNW`vw*Vpg)@n?SbXMQh=xqeT@9)Hhd zKDUD4j|a$w-Ta}8KSnT_so2dQKKqX&oZ=UL=WGz1nZQhD<3`T->@&JLa~@rt(bbtN zL2$Mced&*$&f4ACJsdIk;^9y0jf8j+ov6XGS!~1-Q&M)lc2y$My#tr`CZV+5_ zGZ%Gs(LG$uO+Fq(e;4(A(S9!K`(kx!@)S>FUl+}Bu`$hX?-%Chq%yKC| zvR|_MOLl+hQ68f_6{$mWdZ6n|vB-VNjb3u2mxiPFOJnekU7AQbnapDWX1JvHOUp3J zrPaKIxi6XLlFl!k4uXH~rxJGj&vSV0A9Mcm9oLZgvdowDe_8*R^?q6A%OxpISt?); zm!IHi8qx$aTy8@IQAE?10gPq>lbA|8vq;2UUS7mn-s62fMCQw%qVLOJ;%+Y=;#+io z`A7cYD*xh!F5kl4UkS)Y4sv1VSM1@6d9FN3d&c7ZyRw5Hg5at@f3-5QU)A^3IV@xe z%UQ*G-sCN|^Devi05@_~=Bo$M=hb7Jzo7u`X?DN`A-0d})u6=^}uKC$;?I+~9cADRCv)5$0 z_7@k?=QZX1tEYdf(}jsF!<_$m?z$VgUY-`nd_9`ZbVK&*Ly`OXNS;IX>*JY$eP2%@ zoq1$o_t$lNUANa?!#=M2uIoCz{xSR5&jH-Pbu(O-`TD&exN#ry+{lR?->~Bw1t~%? z9-$PqsKe9L=NTH)jFz;fEs@y&jS-~r1_#l}&4=*Z&3?qQ3Yl-pd~*|T;vR0wd~+|K z@daP;4Tt#_9p3zdKhgV5o!`95b#4a1EwkLpjr_N~cehGYmP$OqlT=6kTk_uO&mf*< zIHMSY&Tma*3NIk@tuTvOikrT*k{4Nvd%E>1=DB5_TW;#smz)cN|MdD_4Z1Q3&;94N z{yWLtAh`ViGT+XJ+qqpFnQvF%ajH;_n$*TFZa1e55k%3MZuF!VX1Q&a+f$MK_AK1b z?KCo&#{ypB4fgOUpCk9}uQ`OyZ-38^xSiXlxW)}`aT_z-36UMM+{r~A%zei^cXWQI zJ!8qjjo$eI&)qfW-DcRsU77F7d{_T>^?z6IcV)htLOPku#~$u3VhQVbjZM7CHr`<; z?_-v`X1RMD+3)^}`?-6bi@2Y=?(^P#6renncmlca)j;R>>QbMEG(rFOdZ6ojedvoB z?zyFVZt0#`?wRG@XvQ%C+3(4C?+DlYqO{^X!vK<4$0r=%Acr~1&z#{L7r4X~{^chB zaVH3ca#H}mTRQX*k5Gy-l%*z5(TJu*(V1@aB$oaRVhGPOi^VKsB`>m;SJ=QtHnWv& z>_`64*L;H+LS_j4z;VnHI>oR29)#|@kH=`mQ0DLkN4Oq@vK6HcjcGl;Ja>>=ABWX`7h?DA&6pPb|& zKLsg5F?60?=h@33clLTTpdn_+-V8HjH$(PzMA8BCWPgqfwxGA{_Iv-sc<%mz%;F_p zL+1P6^sm9s7S&e@SJ`0SiL z8OjJ`&pDkL%qE3&GMR@AIc3fH5#H0B``FI`4ssZM=llV;p7Up}V2?R(pzEBsxfg_T z-G@8M^#EqcWtLoSDOVLD&}pvuc&BoGhv#yap$UDFIk(KYpJOajkvVrF$+-30vgejP zx9)R$Z*#BZ6<+5Jw(u4ovln-s+jr$Y#tC$t`!~+;CuYbabDl?V<9X!CQ;v#MrYdeF zkG=|F?@4~)cg}L23+O)Yy&#lN@A=G-FE{ykkU~6$S@QX=e6r`0J>N69oqR25 zO^doI7-C1!OLu{{s3ip!WhY7idHinjw1u*$cS$0zK)C`zbI8ofjC+ zNOW7kJ6j+f-&G)sMJ#6(FR>Og6p*=qz6-dO0`e5ldjY){_yxTe(0c*B7r4kjLFmC8 z_+bebzbmuzT_*+QqU{~|3dbHSGmq@?ggPj_mQ2#=)X`M>Y?{S zau?Ehp_a5Ef+*a7A^jH`hOP_QXQ45eq0sY8#w>-V6OXwInWvD>3w_A1L8$Qk*m2=V zJXhG9g|}f3g=H=*b7B1#)_-BW7nZs3E$#%NA_3X3haz$p(Rq;)JW4q#;#j5Zm z)u}}t>S2~*4QYb8i^*Orjx~J3nIQCVEe7sj&ynID$<;g@(BKXV?I`Qdlj#Rq)M zUhLuFBmBT|%<%B9{K21`=N5N@Q1RRpK-a||;t@(whO+3tcw=NK?q_uI82ZqUfegXj z7az%J#-Z!tx-LG4Oy-frB9^iOvlKT=@wI%2jF0H_k@B=<1oQC@JYtqdF7qFEgHVYO z*~v#yic^9|c?_RX!X8RIj^0b?yhJ0K(h8qnB9bV~Qo<}H%uvF2mhi5Yn9dAl<0ea_ zV~!H$D6yK2e1v_K&~=IZ9N-{_Ig0K}=)Q!xN?gJHl(>Q3OWfvO5GrZjl5VKv1K4@V zytt#1Rfs^JC3R3z2PMD5bEWL1R1^9#6q!ps$5^H!bEza!(SNDAxSvvTmvT3y*7F*h z*^19DwS!Oj9NA0#$WNT&cg}L23&`-OtdBm5t{>I)qm_7qC#gYg>QbMEbfPQW=}9kQ z>CYgBV3tSC^5`hi*nmzSy%>Z_yUo&1;knZBxSi7PBXen)OMl7Ne2>hf-FoRi_>;f* z8@bE4n=FCa^qStOD|I_{*5 zos|i*m}Tg?jIPVP&34{lC%gHGJ?!N(_9Oda_fwfj#$bn!dG0Yc_1LW-RJJ%}k-6;S zR6$2&WiIPJ$~L0~vX_;;Y&Y~*HkSSjVHhKEKV_%m=F4W_yUH$P2`hP#wXDMoWk155 zly&1}RDoWre@y~LFuR4ylZ$cN6$6-4Lditz{~aZlwQ!yd{tr5_2rf=`Q^x6UheX1kh{FQFE4xfciF`Ue8N6_e)%u?5&6rz zneuL?{AI3li#yy4LKX5;0(V}aHtxKFJFn1?CNxLq6?9%9k`4^Q%~a5L1vg${6n0u+ zJQJDBRLoPsO;uRIPV`zapggVdTt&B4@lC$wdt|Qo6Q}qSnJZqy&zg$=aW@E63XzTb zDMT?Ip%iYYQUxC83CvQ-ES1_Jd!|B2f&-YL(jmUZER~LN9CKGPPbHl{UK024_&}1`fae}JXJz+L*&Zs(Tv_JI`me12 z%6hLXbLAfNB9{KxLuI)u>%8(5USK8(`0UE5EMYmaSKfrKE5F4%>|{3|B12_aD__Em zSN@lq+~!^odg4Cx{X|akke_l?XT7W{7K>n&SRMmY|??6?#t3E?x?5b)svR56)^Gs$Map=3MzN_lHY8n}sp{jeS zs`IL^u@N^@bqnUGYL2S!VUDUFV2-Lkq3b8hVCPRhi~T*hnZuZ&+Jh9QB&8`!6`ta0 zbX`r?)nu;Lf>yM_?Np1w4AuHEn4yed6fY3Z9Oe^dF)LV&9aMW6cT?>{zU6y8nJk^`fm)YpB`sbVrLNz>B z!<;p`Fdms}$XsIbB<1AXG~)we(TTbG6dgz-N5J5x(OXzi^(5T;dAXkh}K%=)ZP8 zbXfZ#9!BrAeSU4T)HX})hR9x9_S&-7Zcj9w>5BZd<*l8ByR7Y2YR_c>a@Ssh-fOSo zC0^!TcCj0GQ~P7~VuspZ@D&F+%(v+LDH)%7itbFq9-rES-PAElo$@?M4Qf*t9o1<| zBpv94%yoJYgLkQp&g!yvbW^=NQ>?j%u?4Zb!$ zG>;*3y+(AV8$IbwUj{Ikp^V@;#^QGBxt)6HWH6TnEX1t!%usIyt8qj1+)X|C{9}wz zeZAFhjoIsauD+erH%EP$>)%A?`Z{WGA9;|uK~da#gGZ3Pf$R<3dxM%hg{~VkqzTPw zNf)}~-W&L?2JWW8XzZhbyYYKiLw*lysDT+8$lPEPZlr-c4ctfrH{W0vAK=~_?Bz4Q z;3U8B8-H*XH`L%F|DgK@*SLW@dZrk4>BV$(^2{DQ*DxO0Yjb(5AHAu#wGd!96wE z&O3a|l_1o#81;$89-Dfusdu{R*&x*H0Uku=W<@EEo|?(rtQs|Wil=EnL)xMDW_oXC zhGsGJp&tVn%LHbUL@N6BJ6A)^!YpPfud)qUnjPREhdGMQo9VpS&z$Br&TyN1L8y5M zKPUZu)==}DF4a6c{n2|_L1Ov`-eyJZC) zrwV#+srQz$x72$}y|-*cQ@YWUUg*4KUv%DbFy?4E0{7I?J+&OiT;AXiSAtM0owTZt zUA0PJEgvIutFQQmBb?xO&T^iM$lU5G|8gS;wbo(l+?b)Y-dpRu^~02)6jiBCJz5b# z6df@~Yjd>jjk|0ub8Ee~mbdi+7P5rptl}l~-g-T+u?e|b?`0pKV}{mdXl;hpW@vqs z@A(n)w7waH+Q`?YA$n_L$8FZ(xi;o&YmT-ux2=QBZJ(hrZIHQb7rGOJ?%V3Ht=w(( z-1d1UGo2au?6!%7aWidYZ|i2-x|z0{c^fy=_C4H8TN&EQ+V(HpN88I>;|Bk6Hwd*0 zk(~#~O=;XtyYf`T{j_sG?W$3e+L)!CS=zawc0HJcPTRfDsUQ?_AD)Y7&q&gdIYQ=$ zWvt{CWRBQ^pDz*HkUc{72;E0~$=4j>JC1RJpSi##?gXJo-xcX*B6Fha$OkFRLzp2_ z=E&BxL!QWJI@67wxRpqIi*)aigPDrHBjcHg&LfjZWe#(hk9i^&A$z2Zk=KGy`(oH{ zd$-r#d(i$>%+mgMF7gjIXun$V1nbfFK! z8O=D{O_VvJ%n{{oqGlm;l$(!|H)=cY;zpuA;A8gk8Ez)Zy+?h6+)-yahZ~AALzEe! z%n3D)lt_S zExo$dzySNX_J4j$rRD)0nPQiD3w;~5&! zo)~25>`prCytB?bPa}?*xZBRjq>+KHJL|ghdN%MnZ?J{8F-zxn*onD2%ij4$5b}Fm zLtPqUzg-gXT$iu85QMtsMdq$DcP+uAR6^#iwW&*e8sgTw%H6dSUD0>fKDeE(KD+B+ zCNK%vyQbnj?K+n*i&@4BWauhu*8?2nFh}`;XDmb$kL-awWvcqp25y~G@~VLh(Omp zblqbx&oYdWjAk5W=`oQhn7fDUJ$CRTw}Vhm?^e&|c&=v#8~Fm6d&=DN7$@-arl-t3 z|KTdvxy79z6eD+xpOZ0uj>PCY<`GKavt!Cqlc$h9rZw$oPba$4gBWCpku@eA?_vb*& z_0GlP$lP1z-cQqj7RcPY10Cs%?7e00t^3}?8O0c$XEIZH0rT`;g8aSZ?=64tS9zUH zY{neDzu+Xlpzq#iaVx#`-uoY}avi<*)_Wg)_tAHsViczY-dDeaHPoj(-rGKvsY*2> z8NpoqjOg<%{|2Ghk~GCF#p)wA1({>*Al43IbssBptj=R~9_vP8Wscp-+iXYwv7cdv z*snOuQFI>rBY*N2W{Gv{{#s$EZ#Hs}hx`q3=xm%;}p<8X1_o?*hV@zpwk~dnE|<(_z2*^kx?3?B|yHd0+d<-0yELbB((} zsQ&}xCLa$XbN`~0!|n91LN#hr7oXk#8O+h&9R20*KZs$BWHb|)#8h4&9XHc|6L0bs zdhY)&yZC^Qk+Z+v`+tGk>HiDA@dxgw|9LLre)^lWzZv@9zzq#>Hv{Aw&J1ephpL+*ic51fMB15?Sw-3$z~lohPT=MOZ?K(h?| z5ZMRHK2Y|7b}`V+3_QyB$UjitK{?4oe%!~PBFH`H5&Vo9R0h2ds>m}mrYX&7iTfF3 zhCzBC6ip|(VxB>=56WT(KX5w;4Sp2Q4IV}c>yde|%!Bnm_+9iqSmwcB@eN1#j$_C@ zSm%RvK3M02|K%qC`|P_xXh=TX%n;d!l%)cX^CUH>O&w$yBI}T6@v~*fD8?|JiRgQX zzK6u)W``uQjFqfL*F)CgmWOO$BX3}qA!Zq}jYC`tLeJ{-*}AxcXQ$)2XZP`Y5E_~t znTN_ev@k^}jm$%zpeogneW>h1bw9KfZHc5KUFc3vhBAW5_^zQdn2oN7rjyA$%rI2u zp&#)H@(kV20S^$$Oox~=SEIv1v`;>q|77rKk@*2A1U+5Q~bhj$Uai`k@_F` zA9sV$s1P~O`KY|;e3ZK%rQ1#;t2?0(EK z)*NHyA1nXZtK8%^_kz&4>^y)O#+hMU2_B~r?qi($7-v`G+R+|2KTghZ-RMbg#xjA4 z_&GC9=i{a`1NSp7k!0*(oEsXq0r|#x@5bk&CSCB{_*Ix=yv*Ze9xwBFosZY~c(*=Y z<_Y(q`w6U#WS-cD2y`@2=864q=M#r8jFHGa(alVBGZPa?Wez@j;(T6YEwWGC#yjlf zL-z0~b}~_hiLy?-!GHLASUva?AKQkbIXdXlau)u0wn@iYx^N0XXhmPuxr z)S5xeMyHcL=dU0%IX|A8+!Hr6c`-6imU;3kY{0EgmU;4SKH?Mhu^+i7yP3(}*U9>x ztn0~t^1si%$ekcGB|!Emg?NaEDMcB|Q2`mI$U3DvZe)tSr}SeW`ktciDf*r=nsGc& z8X3$**Hf}s#8OtU3bRZx%anC|%&8zWRi{%cVz*OA;kl_hILcLIo+k6OY~;YtiD@!V zdxVlaitN*5pQih1b*RTPG^GWtX-f}!;m)V|u4!W!kFKXpBaRuEVVca-w(vIcOnZ;_ z`H(%hm1*`i?MuGqSM)vYEa%Yqw7KI7UGO=r4cmN@qm*9UXQ$sV_y4>%Qs z;@v`gMLZWjmU(PO=6IRock>Z$-S2r1#UDlPc)8@%MtzjQjBU zGt4sMA>^M?i6?lHTGYYq%xFM6-2V)BK4UcQe1t_7i)dY$>*(zTX>rt?82QTe9R}9CBZBSzaV>pt`jbBnQPqORuD?m ze_~OpP>q_%o%l5FB(V`qX@T2M)PG`Mbe%YeA($a?1kYiXM6)DLWD0I6QT9X`6Msa9 zNo8oxFfuSp(ia@zJC1RJ-?_*?T;)14C*27`$pQCKfFcy*5lT~*3RI#lZqM%;4<)yu zD{dya4{j!TF!CqMpFD~ea5KrPc!`%;&ueVrP2OTV@1pnQZ;(A%-^t%2f3p0^cAc#M zWcQQ&2Y+%t2&K506xmWD(OHTer`ThP=Tgj;S`wL4WlohjHG(L*BXjCNLC)I}ebXyyT}Kg{eU_6IjH191lY2o=dlrbTg&9n{=7e$1onZk}i9C3hBt5E_b@z z=?htd9i-bq`X;urjd$?*>1Ij)0{PSRp04+Fy{Dhy9PU2-Z|(-6Ie92UIVw__s#K>I zb*P8_=QO4ZdY{viUbve%b}+{d<_uvNBe2Ig=9we=oQ)jhpCFX+5Kj|}-DKE9#)rt9 zq5lm1XBQwixr^PHA@gJQ@)`QiJb-yJ&69bA zOF?LE0cz6?H#&C(o}2r75b`^rL-Wc}6`AMhf1dv5>3yEe^CFOYp4{^~A@{riJj-xK zF^=b%jL)BEmU(8Gw-nju$v#i^c^lZsX1oLQzP{&|!Y$1=!+f_i|8eYKz8%ar&wSbEk7OQOIm-1Qw7_!<1K<5i|zCh;-4ssZuz2JM?&jRK6~*Z z)*<`i9lXc;e9T_l&Eoz1fOl~5E$#%NB>~yUK`z{h-?JN9qVFXS@i0$P16?n9in`Rt z&zdDoXhsXnvZO6TNJOVgzTjdIT55+&J-5_NEpTVOo`47=ZVDAR-Nt zk`j{AEg{{K55+WfIl7a$~l2XGk#1I1vJq#@=At@m#DIp;uE&uJoed6VQ_p_dN z?awoZ8aR7)U0TwLuGqKPz3Iz91~Ux1Gy4a^(e-RuW^Y30vvofEC-$(PgZ#oVbUjc`k8{o80CuGKVK5Guf~o;qEFtF9j$>QA$vn z4`@JRKBgHh_=Gl?HQWs0o#=uc3LlMp;kpdh+q{&ReV*s$xs!S3m?!hR-N-yoNAnJI z3Yq6!;W~ey`+4?!p4<_7j<7Qkb|xY*$#8bW+hivfvPbw$j3`TaDpQS`)JBE~StGt? z2*Vl4D86Src0FPW)0xRiRHJ8uM4BaX0QRMefL3*po=R9%_7o^1u3o?M(kaI*#9&s8gKfJm!efebhB>aw`a1k^uX?q!!)K$&%IB zy(KS#u%+)%2AP*uqb7A|LMz(Ro=(WTv^%FO_@g zW_GZPz3fMZrLr!4#!FrYVar13d|5*Dy-eTBQetnHrK13aD1xq+xzA;#`G5+1h*_4I zWtn|irtf7Vh~j7d48oQt$8*bD;0~70K<4E#FW3F@rRaRQ%*(g2lilp&0CF$a_i}wN z*Y|Q=FTc%yXW!@FAS^lz*`s}@(P_y*7TzT%?;%69tkKQ*ANr1NOMCPkt?y`kM}I+Y z`eL`E?RNA;bR9i~>C9vf^O(;<%o45dXc<=|AP;rv!BpJK3bU;E2i>m>q5GA(U#atz zc4K8`vXULSSLP-kr6@;5%&@WswW&vaTJtGg`J90a0uUPJD*%ezkd4 z%f5Okhq)hwt+AVHO5nLQLkVXqGOv+&jsDjhLGNp1UUQ9`+(zy-|DEwN2wNLQeBLAp z$w`H8cCB95zDF@i^8pp8LUn54_hzmAU)vd7ua#x3Jz1;swWAr!1b)EYuARXwR-x;) z>)3#OUb~rX?8Gju-NSwkAp5!mx9&VIg0S`PAoF^e*XN}GI$AID`bt!# z2DPzE>*ZeGhIVwME4p6q?Df4F&PZfmKONuc`Z>&JAyK%K^)jrN)&EmJZ2bi;bCnz1 zLf`B4z5XvA^E3$CkdzdpLf0G8l7URvqYdw3mJMdvV3#&jqXRnKu#8`L5QJ^?+{Uul zp^g2Kd85o5NAW$rm5nlQv>zM&PHv1u_KmV{)cwXyY+*aQ*~bA6agIOulmFiJ2-!F4 zdgH%ASZsiOiIq9lj>i_qj>pOqYsX_hqzcusE3xh^wm#;F?MxT!cdX81bspP?uP{gK zKn7!_aD+3+yy+spa~qjA{lha}@;V5M3n6!$-s95o z4q3^Lv*U78k}}91XUF3{q9IMub=)VkMus?9<0fJsqlLLX+Z37u?x9fWQ3 z+_qYL#wcXoCiAxG%*3v5lX=@p~n%^KH)GW|nQwkbS%C z+hyPW7D=!>+f$May>G8fHT1o`4j-ZS?Q(C|`S$^Bcb1?uWzp--y0oA*pVEOYbmt4~&dy+q3ebSwxZj^*@!YNu@A4rs?~-{}eHzgcnRj(Y z?p<>4>Ve$5?9(pUcYVufbiQj6_Gg##cl}5d(b&0N+tBr{-TcfUj&O|2{27GpmSy)F zBqTA(NJ(na@eY~EhOT$(dbh53m!kres7eiLW0u`!+1(Jick6lgYEJMZ2-}kZ-}#>Q ze8YT}v4R-ZvV}eD=ODiz^PZEO;wpcj?>+Z;#6Q^mJ$7iX-Px=Ey=n2S?#)Af3Q~-c zl;Hzp-fQ3Y>UppI*z2zL_N6~xGlb!cWE9^s54*E>A&XhUa#mv2y=K_E9{0W14(&aS zeEW2{PjCC$V)lKW+viU9nPb1q`` zBqS#lsY!=fe%ANTGX6Y(*=*9-obbmni2XubG{v5F52c|F` znGeiiDf&L3?*r@D#1@==U?=7{V2%UwAMni`(D8u>JmMc-@NW=yFpPM}d@w7;(ept) zAJp@~52=FxrXH+CUG#oX?*}{6mG1PQCw=$|vmP|V!NCl}eIK01HgtJNZ-??=_CuaK z;ACs_OK2Q>-um8GGT_pImt~v3h)6Hs6zu9 z)0CF9=2P0E|HDI(<*@xYJd3$RumHP$Snr3US;ZRmaezbo!ck6einEyI@C7bo?!&VG zl7-52U^L6{+%JCzVMpGkC^8?B`A8+IQV*Grv_S47avy1n+(-0x#NPP(E@4N$M&Cz9 zVDFDO|A<+REJXGrvLBKC$T~I>hrKy+kTdA|$O9gs^CLPxqVpqiAJzF$ogYm|VzQ9~ z-|10(AI*!tj~2oVM@wLrj@qT8<&gcTj7R6N4SgJok9#`y5uY=TY5d4+!ige=wX7!= zxsPpSJGwu1jFX(^JeTO7Z~}aQ4Y6nB$~5PRf6>8}{X7AHL#i zhA^BFOlBVT{sWHbXnNPJu=2JR9rSntv=6{>vci=~U?Xw4P6ABn$776T5yoAMaC`YSg4QcIWg* zG^7d5Xn|Qyo8@#{1~Uhpp1u-=VzYrZxD7ijQBYJtXa;cL;kbA)3XKeot`aDDaulgI@tHKx<1fWFWAR?jXanpLb}JsYu0XU%g~_Onleu-`IKfp(01_pKHb^w87cuI$(}-<~S$+ zxpCThj~P@khQp*bH8$ibLjb;p3hywzMs3ze>orUC znDx9F&fB5$IrtFy&im%h>+QU~Jbxz$yWqJCB{0VYnJ)}N<_kK%pz{k8kokf=zhKWV z=>CH4FDypx3$biw8@uqmUU2q>gZzf<7w&SOzj(rP?EHn-LDCP9}<%@mkhyA%|mWxA}O&mJC6p)kZc<$09?9C;6aOpHM zU%J3$ZXxrf$Jn1sFZeeIyKK)d$0G%4urrsrM?B@W7IKpv$#VnW4avpPEmi_m4s6bmrvKY_( z{vZgulAMCbd`0Ff<@u0W$b7|qT#@@q3qC>aEBd?Ai!bSizOM|$?p$&H6|-D1%asMl zens{xvR|<`S2nPT&B%X6-Ya*xkIt{?{EE)6$bCiUS9N|hK5vqUtYpVsUe)(ieP7Lw z8Lk$=E?q4_Y0Ps~_N!kpi!Hd{Yau*$tuEd89+|Jnd`)Y6&Y|yX|DA7^Yi7CjItaTi`*qo`%YI$g*HdA4uBSu(>+)W&NgY0-Av(V< z_x1l_SFXFa>+R{p*9>78`o6C3>!UEk_3=#P2c}}4>#|=z&Obrejr5eGHJ-b%gnisV z<{L8K(Ep96LD)^b-<0{L-$ z{={zIG|wNh|51=ee94c*;kjG!$w6ggz9sW5{oiVW-fzi#s|)u1))(}qFa6Nptuc(l z47a8-gIUaBIV-U*w|20Ly&U8hj&Xu3+z-NT%W~VE+}8PRo!?Hu+oUA}nXvn}v!m(}v)oxgG^<#{dbVLd?i}DS zN0Ir?DbAwvJNmwJkB8W?JO7>il7EA+yXLrSj=Sc#n~hxf?(XKNFvTcIX=cL>9g_wFe4e0Lu6k^io5_O6}2tNXjUzZ-*D?waN9Mo#i52>UY~ zWpKxT4#jhS{>&din7>~Zc2DMeGT+nvy$tC5p3L_OBKJMH@0CFAd)25-JsR*a&9VFU zoPWZJQJ@DLvTvVk!GCz>{f&L%#Meh$} z_V>%e9?1PbZhyZl?19`5bpK#6ONnMR>(KWD=RYvZgI|&Tf$R@te{daLKe)r6*q4WI zk%f23NpAA-K5{?Q`9r(%(7in@M?;#>6n#JZANqdS7Bf8T#AkHlb7X%gW0&{z&JKbp9w2$w@^T?AfFD$cyZc zKA-}Xs7@{F@)5E>>WVCnzTsO&GnNVH`;opM&0rRDS;KmC{Ycl3HnWYL?8YpQ^#8~% zJu>$r+5div_o}fze5|Wr?q#!Fgf2!-JRnha) z+SH=~jj``f<$U@HZTOOY4B%@9qw}XD_ztr^HN(^KOe7llp570_p6Tsb37X-#XY(<~ zGnt?Lfy~cz?r)uiJ$oL6J(u};0_@Op-9Oj;bG!ar?&mqlO+E@y6lXs#MRn}UbJ?G_ z#J)WLlup=}=iTXn49{hKJ`X+n+h$?Um$00btY#e>iDN6r`IXbyo#*Gc$nRX^24;C~ zmgj#4VJ{Mq7oEQN0(bjjJ)V2oZ>2Wc95uZ1a`&Clx$*Z@q zv#;_~kizKuRdMwF$}Yb$!>bRejJ~)AYNJdKZ{5l8k;XYoQ<8=|t z@VX>2zivcly7DBCpp_t%3M$~Sz=EaqZ=UeCu2ug&n<46p6|>y^Z?7I*&I?!0~& zgn~4bq9ub_z&>sSp|CedMoLnXj%?(m0EH+@2})Cq+SH=~AJZIXhqa@Z1|Ch-4=+zajG*M>)ZHWPalh?r@KX{2hc6$ekboZ=vr5x=vtk z5;!|S2J(;}*%OrKL#j}dI($R}WJn-ug5lVa1o}?!J>$`L0(~dYcY>MBVIJ$)$R>21 zU@JS=#a{MfmIP)=aD=--=*`6F^v#C2+c#(6xi^0gLJ0%1B6C8S6BeWhWsx~yHRMiM zn|jEdQ11zKo>1orKjU+H(g)`!G)qFWB%F%u31v?xd%}f8v5aWsPbhD~3)t_3SMfb2 zyoKBe?_*CAKE~cBd=Z4+O2ONtLEmrb`>jlv;jQfCA~*RcKrLi^YaA;%jyp{B4t6S$ zSrQH6TShaM3Fs(M1PfTqQe;lFiq&jG=ZSQl=x2W67$-T!b^hQX{|2GN@kqd1BqJrM zNsG*h?R(-H=-J;j3nkWb;>Otb#4Y%QHt0QZM+P#Oq1d0qBlwOnm^JZ4e!v|hwnK^6 zV)n%U1feA9DMxGERgxv_;|4lUqVps=Pondrc0Fk#lA`;hx=$)|QoSdA4?B~zAVnxi z8JwL|w@J;B)Er55oK)_lawl~cN$pG0p7g=KB$XkltVtK6=cIa0s^_F@SWhf=C8^Gn z?qoM-InPDxPSPvrJgLr;-r-NolGH3o-FGs5Co4=7zG4pQuwliQo*&Q3mu<*Y>Zvb1 ziuk;VzWpt;P>K}jJB7Ye=sQIw?0Jgpl%g!<&~=IrsX}#XQJ0Tsh*?tTJB5rX*77UQ zf>6qgRKmTaG)u|_=sx8tbe~f9DRrLGZlpZGVU8km%2T+5l;_ZSN`0q%z$5HU$`||_ zgi-}0CpGEFNnQ$2h~k(fm041mB~=}o^Eoo7>Vx}AHGo0b_f+5TEu$Gr1hS`EL=<)? zl{r$GBb7N)nIqLk;@E=RsbqXR6S{l59p-;~8Sdq6v!qT!8q%Yu)LF<)VTw_bGRT~| zB6ZPq>LxVf6YNfEXQ%FfIZ~S=^$6rnEqCe(Okp}RnT-soWlepEBOJ$lr9OkMQ(xqF zu5pvwybeNXLd3@|r%6a+l97_PF-sb=qF-{_T+8f;BE)V&eCp-&6 z>10SJYr1^AkG|6tqa^xHr|)$7PFI;~)Wq*gy0)}K*XcUZh3+zzt3Mh<|%ePgWMUCk^+5a&~*lTlfl^; zvQdbl$ey7pHKu4mMJ#$xC`qwX{6Jfq#n_z?|gOjDeZ zQSOZ0=z+d7>N?{9>`lfYjAs(EXN<(RnsEs$h+!@3kv*f{Gv468Ec(uwg%<5dvKoCEig*({mA zMfaI?pIP^rb)Q-1ne9gAXjZWXnKQ?tyUhB|tnbW6`IR#`JM#t1k=Y!XUk0Hpa%Yh{ z%bO%2IjKmE3|VB&QjMDEJBz-vG^7d5_#drkOMCkBHG>(-a7Ho;`#@%dnPiOX*fT-S+biY`vzpsE_-&_v+w0+4)F`}XO}no>mZaP z#2X|eF>>cfi9N}Yj(5mRQA$t>edo}3jtZC|M^&m*6T6hdJUL{~F@_Z!;ZYFEnFi10 zY{L-dB6CiebLv0mD)gRH=A8B;r`$Q^&Up~IbLu|lW$aDP8{FX@`p)V6TxQ8-mRzZj zJ(ujcWY4ART)D_YKIG3OZ?2ZK=2JS*8M$-mJeOU`<=%3A#Q-Mo15?ms(ox35v)!gloJ$GMxv$?-!7$f+O(a4Zn*4&%e!ghXQ5Bt$~ZhhxI z#z{_dm-{?K*SR0_lo$LPgz^NKC68J1_iDL_9 zDPWcYySU8jAoRXY->-(deSa*Td;eGd4nhUrM&^Pt7tBsB3L>+=T^1@RcR{%eRzmKA zdM~K+f;unw37^t|&N#oISqgrO>;+{nD0{(a{K#y4s|BOkgdHh(4EybGmxcW8vQWVb z$X)O%_N3q~?0umy;*$V<7fOV_3#Gseh0>6YcQ8+(GBjrp;rzt4AXM0Mh0RyE9^KJ@ zVVMi-zp(xb>%Fkdh4t-kmxT(?WDfI?yRhyG>%6ee3vXdN&Mv&06X><@6>f5yKlzKt zJmq;1D)JU-$&V~WiclP#7twi<@_a}Ys#A;B=(6)UHP1z_-2cINk0Z4dy(~= zVAv5!=j!mY6prg<7bW|bI~)LLq|nrF8Tnui^^T}333;ElO!Z373t7-vCKHX zm|2RMrC0@IFD832*^7NdLz-ZBipgJ0-eRNpp7H3sn9hsIT}rqh$9^1B&T>3go?{pyd?IZxIHLt4~n~|;=bb&W-0L=g(yl1N~5C^wW*8T zB^uC(k7-?AJ4)=J- z-{`!A&P%)sLjG=9sAL+_qwkWL$ilniBscjefO$$5LH3d|mi&RWoaR{&D&?L^xtmgE zDK#AZm(qVJ{g={zDZQ7{cPYO$rIxc2nMCps^s^HPU6hQ3QVyOcdEWsXwjC?$XC zFcR<`dtl?ZSh>0WtgLk%w--Ta~YkN(RtZ;$Xqr#cBriG{mrsa z*^Jorvbrv-=d$*utQpFdr92-}nT9msQ##Rw?)2hI`Z0jfOhcBkD~Q2emEFK5wqW1O z{=^>kbAiiT;Tku%#a-@Wma>od2XlWQ`v=8o&Oq$t2RrawxkTipCNh_kxm+{;M|)&0 z*Mpwe^>VV8lf9ho%Z*_idM`JX8O*}|l(RSG>`l4Ncvm^!YPr1}7rBZKE9kz$Js$Emdaw8f3DJE;@2Y5L zDrO@WdC1TEn4zM~6|5faJ6&+TYMZ!3i z)w3aUbsbkPL21hKAyqI(b(yQXo9bUNfI;ZFx}K|l%V@?TXZ0VL%2Mog^_9f1hV{ha z_olj8tDB+vPweLRAXG!X8oI1e9p6@sad@tVJE>ugnljhSjLbE2VApFFLgtzuP=QKR zMfWx3uGxZ5XhR1&oTLH3%Hn8I{s6V7}VAVW=AYo0{UHT7Kc0++dpeXnWX zYu@EPe+8jhZ<2^4BqIfOxmH>-kP)-gGE1%ORHQXJt+fz$TkCcZs_nVj#c51$WUei9 z?ct1MJTlk*5xHy6B?7r?>%F$lYwNuBW_GX(J73%Rwarr7EVXYUdu`ck%U=5l&w0h` zAXG>GI`Y;jOfgDQhH}VVr!w}WPEG7=osVcwCq6^pb@W}wF4r+boxb$LF4eJ1b<9&o z_BwG~3_^7Sa#9`7)t$sDenIBCGS}6A-OK2`uFQ4qM_sw=%3b#*a@W&+y_DFSdg;hS zR`gxZ`Sr|F&n)$-AbUO8>&aeE*Y%oWcj~o7{(AD(8^=T@GYy^Ble=CxcBP(ss~5#G zw(}Fa(RV$4*E@(A>iK5to#0o_V4ixif0UN8e8Mmy@!UsugHZj%o-U4`ns?GIX&q^f4)ZF^_^eeEcMM&e;%^em%YC1^>tl;4eQy6{PpFn z{|9%t$3y-`?)o~fZ&w<)w+8V@Kt{5V4ShGzcZ1xRp@H9<28Aes-ELr>2C_Hk&2(Zp z&%Z&aq30Ubq%+?kb3>UM>c8QS=)IxL4Od{_8?I#on~=Mq&Kv5yq0Sqg;w;W?c#%JO zfb5Mzyg@>el7hEMgA9#iZB!k<=l(8Ps8M|y@iF>tr0+(p`IHU}U=Tylb)#?aTiIwd zV;PTG8kwchR915ooi0AJzPWP#xgg4#6Q^cCNej%A5D^xlGLO_?k0ID zfWDjPx=AUV-J~3Kuscm;Z_*auY?DrOqX)g{gA7e%ZL$zM(nQ})RuF@}o9MfVzME{p z-Z%M))BMJHblv1KSGj?2w#gmL(!?xH{t7}LC#N7f{rF4V?ZQ@NY=MDC_~Z>saAI&V6bNlaln&Tnd#rejizLY1EEV>oS$gb!vn&*&B&E@JGkrI!h#8tyqXxCGOU=yFO!j8qvy!9y z9fX>v#dFQuGL&#+ZZ30k{Wp(6@6BayZab&J+p7P%uFL@n=J_$qqPs;NtBZ%T>JlD$I zv?_{yZ}mT9Ze<@@wWm8Wx9X4Ft>kWHPg=>{O8>2N-)aW4m`5Z!Z{_?}W@%-XR(p}X zmF%r#Z*_{ZoaZ9)x01JYa#Er1*6Fb;t>te0E;?_Wn|!=aWvWpFeYdWIzFV82brYJ> zoR*lUwd}2DvXx6gsEs>rlMBza`GN`9_ck)Ok-3fj+iXYgZDek962CWXe&Yg{k-Lq~ z+vvQF&fB~SLTv+_-S!PqlMdP2=EcsnEktojQI>MZ&{o#ApVN~*e8m6;q3^c(Zu>2x z8A}8UScIy_1#v+Pcu=0c8tV#@u_?H)GY0ip!;^|(S1AJx6^sM z!W5$q<9p2)7%+jG7 zU(yfz(qS;)F_Fnk<40uf5YBS^K6Y5k1~#(|XLs0zIXal5!xiN2Aa@5ncle9PJmq;1 z>L^1;Sv%&ZAVshv9ZO+HI+o`{s!*L;wB}RV(~-_}#SV3}Lmhi#mX2oWH~@WjT+dlv z1ffn@sf6b`jl~^w`Wcx!$=pfzoz9{2PBM48kKCR9<_U6leiJ*>IXS6F$2(-k`JK(u z+3s|fzjI}(QImQ!pfMj~S337X*PX{O4xM+N%rtb~S?8T~-g!O?*@V6Btnbb{_=!F2 z=OBkUf_XZhQvJokA7+qsC$pUeFDpFH4M5b7aw5Bt$0A&E&wO62a5gZI#P4_)^tg0p*+q#CmK zXvY6&MLRn38C@BGz3-vt9^u%L9{TPP#WM8WL*G60-D3mxzQ->dL)ZRBS*XWpe&Yg{ zxxzKf(&JVT`XT|j(CHW5aJOHq#&ci12tqyWP|q?{M&_P1sY4TF?%5Wz>Z;`2#xbxd7RFt|ykw>|hsru{S+s=qYQ@XV{URcBGfSd%c0ad+EEE zzI&x4HR&ioA&O9p5|rixD)1p@>1CE)HR!+yblU4@+->jVc&>K~>`?C+$lP1z-iuj^ z@1(cPy|-dNdhbN`-m>@BeeW}z<04nN!7c9aoL51pPa?dlPb$)&>pq#uMt025N9I0_ zv5$S^>GKI~Xh%ovN+0*urw6_G4t@6-%XoC&XEM|Hky*@P9`>ovHZBCAFT==zPQL7d z=e}IaaULS`mooPah({7+?wg*BWZ_+MB6nXq-nR_ps6s=+D;- zVHh&>m9_6`*0GT|wz30#_tkgbpE<-4>`UL9+(OrV-Dh9lYTrlvgI((Tf`5b1S7!N2 z-(Si2Ra?GcF?R2(dqJq5d+BGEehtulzfaJ8Ki&7!dA~2|$3O-nbH5QxLf`%L-ETG# zEWp|QmSB#4=IAGXzoY!h8P0K;tK8rZo&=%(@yS3YvSK&-=OPdJDTti?i&Kia)TbeK zr~k+3ynjnt^C|7=#AkfVLiXeLZGdlTKw<3M0J9C4Nh~|r%{~rrg7aMB3fGZ&fZhi@ z#l8#-h(|&aU;oClAT%gF z?;`V{+~lJeG7qYV+=JvER2{ho>2HwE2kCs!r|5f77rNv8L1r0bmO;MLL9!2$eUR*f z<`TgI79sy2c?X@rjtsiU?_9&K4{~RN?D?Pv*z-aEAn#y34}P08q$2~F(EVWD56*>o z2b*K?`xL_N47S^Y^*MMozhVc6`1gm@MD`(LS;kuQGeoaL^g3h@zi^BboI>UyG7tF! z8HdO?M8+Xcd4cb6s2v%a9N*he*@nJHUJ4-7(2|tl1InZ8p-t$+4@^N{Lv=ND3CoFL zE%FVG#m){r$t~`3pTBsFEJI}(D$B4i?7^@%(bX_{hP_J;^fgRh!}3#*!W5+hzPn*E z4U=iu40JN=0Y;+8NQMAn;O)n9t~(rQ(Eu|ZD>bFd~e?jW+=lM!FP;d z91}3hH)i=}8f!R)PDiA}eT`^^=SD=am+QzpLgo>F^CSq3bpIn|9+?DtFftWsNY6Xu zrT}(fq!~t*qAca9$VW7!HSOs{7kbc(FZqgZnT#wW?eEAH#ITkPxU-S=c;t3|Vh_3= zsq2xK@Xd|9$_;LD7qg6fz$484t?b_x;bZzSo2_{6yEl1{YRLSZ%-=Pk8EujIyY75J zZ~D?7xxf3K@#y=zY5a(@zne=mtC0P>o$O{Ghd9D zqBzYNh~KC0-OKl885=_PW0Rr#vAQ3t^RaegY+edb2${#0pfdU%tM9S(XvD`jd+h%( z$5?ZWm4ECvjN*I7Gnr}p$Sjs(*T){@7mi^!#-8RkE^wLua@zB;xA5CCE{u5CopEoX z^KnT@!P}%EJ?~J8rVL~bJGc^r#@o5^W*c9JuJqw61~7Kvi$udvY|KwumeX`7xYhphpe?&u?AopaQPuBTlolow?mpFU! z07fJGWV!}NgVi__| zjbRPCo9ee?>OKyj>#4`FV^i(U)EnGF_Ng!UHwaA&BLQ!b1bZ`0_G$T$WtttCrtfL` zo~G|<`ktomY5Jbl40}JV6}{<;uBYjG+Sd$WI3qF3H2qH-i@B%CKJ91z3_{bB<8G&a zjOV7$V;dKcdAiKg?{c4~L1>1|Gvf0miAYKcnX0DJ}Sf zPw7Bsy3n6*u_H6)Vn=2yU@=RHW)=FLv7T5Ca}-_AILRr_a-K{4j-8%imKlEpp&#EM zCp!JHD-&>sKYH%R=Rs&@21-*2nP=9ZHjR;aW*gekkh-(ZHB-!q;`OlCd{ zSzb& zqgiH|WtLgB=!A^3bUN!G?sm5CXm%-DVwTx6iDVH=Sk5}OvV&dhMdsOu_?0W%Pz_$UDb-=ai*9A5w+t$U3JkpV9%j=jeQndz+*4IX&q^U+n%I zx#tW*_BpYf$9Fb2JLaG3xw-Cp?h0g{EAw1^&ppRQWS{$hN60-_?zwW$br0c*(0jPv z!_)8%naPIp!_5+ImT-F$E_=A_;j)J}qzTPvf&Ag}hJVj^>__+%rXzRw9Oj|>aNURN zK3wPFIuHK|yArPVaJ`3{A^Zr(IDs7wH&3|i^HNiq|KYb_UId<-cRL70xQB>5$Q&Va zg#IJSqW1`yBkI$Lk7$x%=Mg%O(0N3E{9Z&jJ7O3U`4O2TmZ9T_7}gWZX3P;G zbHrKh@sPiHf}SJvJU_s`&rg7y^ONu{Ie8Dc=jY>n3R8>{m|?yd=G*!CdY&)ed|l4p z#+4ux86VF@euOz9$1x3=BWDv%6f#GyVI98HNZBK0kKE5;j-u@uYjx1 zn2dQA%s}=9GA?)$gcfF?JZ`DR>*X7o{f``dg&; zMTIFrX+FUDi|oxJd$Z^he6Nc-(3$RhL2tff1oAGjCySQgcV*E^RwMVKjl{8)9qdBa zi*&u{0+;xmYnWltZSHap`?SbBi)CM2h{p6~CY$kG)Enfa3NlB@9My=AX^qTLU9lrk zJ?X<&$Q?DBu}okJ({XmxY?iSC*`v1OTaDVo0S5D3?HEDB^9YmHSE!n+L&dDS(ezPB|R9APM4g(9xTm(=a#m|4lSLJ%u8in z8pB$)AoEiDvGgFnaEz14z4QjR(DzbZFa4YU&VCkzmL){?W$%!gY~&&j`FS7T=CWGo zdD*Afk!AW`)|JoE_cDDi)AzCg4B`i-qU&WpGK;xHuz*EGVU}gl{LCLgXt_?87sTBz z{}RtF--aDp{xS$fzk$rriAhE}WRA{(+|hDJ=R@x3vgj^a=h4-uO+6am{Aja8n=^AJG_6z9M)sr6+79@KJ4F$OI+bPe{hFCgV4&iuzxGF;yo+9XJt`J;C(B- zZ>9IGtiwk%q%lot!6&q)3w;@jSyvvy-mHAc^B}Y;9trTiRqkk&yUF`dK%daGbI3B6qO&>pZ{C^XrRH zfojyG4j=I`&1p$%+A_ke>u{GFwzGquID&U=ILmpwbHfd8ahLl%$@@#yMVw6Sa z8$U#E8|B#Oo7>oc#+ZNOSIi)eUF_v&-0?+g+)HhN!de9Rr2h@_Z1*4(l0 zkeRIb4r23DkiwKfme_JM;Zr`N8$IYnf4*i2?jUvq?l*QKb|iKxa|tH`-({>jiamtR zVvi$htj=O}7VC~;uX8g9ZAyqdo9fa5cd@A_edvpKZW@aBZkoU}e#BmF^1e;(Y||2! zvyvEmf17-No3^u)103Wq-n;3qAQbm4qZx~H<9@&#ar%y%g?Zx461RZGEG3#%tYJOo zjN8mMyeDoq`|!Rv?}|Ih3G7UqoryDlocZI-A16oLAKc*{_9pIcp70#^x!L|~jzV!MHi#^(6kG9yOE%RAO6w6pa3~SlI zCbqDhpV-5G-1U~zoaH>1g3wkOw{}Oat#WOZYwP16v`uf@;`1hn7>f+sW-%B0wq0lb zPFiTYp0?|0yPmeM$2+(0W*^?Uqc-kphhBE*Wrug}wjaAQU?+CliQRT$cOySuSLME)WOf>?wYfW>`z-?y*VrH{@z@6Y@D`R(CXwy~2v zLBvNjX-acmqBUReEtmM7pMr>wo&CqJH3t8PW^xkr>^o#5b>3cz8ZlH zU)i~@?A)1qk>QNF&*Z_moLRv8$Z%#AYlDcdo%7c<@EiErxqR)LUmxak%>A|9`r0?o z`u5pG`Z56DJbQyXLBu(8pSzp;n7~ZTeeP|1^P7AW$K2nhq>PZ#u_Y0cO0V&s+Mu(+Z@2NAbRV8+|}ysgjM&hhph%y`?kZXf4l5b|fU(+8Pz$(&37xl+)3E}3&p zL+)I1=W@om{9Mz1~Y`2$e8;Sw}UW` z^UdQ7^Yp;(<}phi`o_pHaL^_AaqUb+T=1BcV>OWHNkupcxk;tYr zNA^hBBfHR(MEdb6gV1@T9g3XDo7kC1-->*P#ppY7IjdNM86stlwC9m_CGx*Kb|vx( z*U@|AA2_?nzqu2H`Ert*yy!fi&htf4m|_&CB<9Ii2HEq;m~SfUaK`zZWBvlv#w__q zF^M#$FrE1<;XU4G1#;(K%X;>3kRyD+r|3Mt_vil-v*b5R{+r02U-kkK+=u-s@Cc6~ zM*(>Y)FhUAG^7bSFYpqriKjjGzra9V<8}PD3;4|z7|9q?nSgl;n5RHGIxldHt3g=s zah!3%Hh8Y!J2;1eXOX#}%mwvd@H%>rk~!*b>`B!9$Q~to)YBBC5cVgk1f?lMIcm|2 zID9MWWn_=ica-04l>LbsjLcDUn1@}7k|)ZpxHm71(tDKNqgLbWqBdfVsE_!B&(L|4 z&ZACqhI81bDEk!kT@XGKBI7gl=#5UEagNV?jy))3mkL#+2DPb61MGUCc66jO-H^FZ zBK;W32u3pweHZfXLQ|NAISQGhko<+@FSLWb9N;h?VunJ;k)_bL=-gd-VPQQNeuzhT z0y|$=&cZq`Y~KqCOVxE6J&Pa~Sr96MCF6|XXt4d|@!pFvn8ALcG%wjy?? z$P!kvhV^V>H%GANMRZ@}Q{*mkl2csd2Y%)nzj2fQ-v4(H7Bx%JJjh;D_M)=8D=#cs zk{HS$f6*p%p*y|kLw}O6^F?1n??qD>$xP<(Hh!-~7ozu~dM~<+EV40AQD;z8=S6=C z!eWn67Qd@vL-1TNXH)DO?gXK`^1^7DqxB!H|7g8O%N%XbqoXN~?9sAE>p!|CvDmTb z#x$cPc0al+uP_MTiXMjS(PPke^aN%jbMzLrvkQ5m4{#VeAFcOjy+_;kXlEB~j_9jg z=LR~D)_JtfqyGuQX9FUzPtV>*5oCO}7k2eoowzSAeD?PsES?v;N_J74@LAM+WXbDA@p<2>>gm$yU?p2D7# zh@=3|Aa{vqN>G|I)TIH9urnp}T|(a_T44rv=7lBN(+TsGc!LG(;X)9Wyq9P3TuJkl zoW>fqB6G>z?BfGuE~)R5U-Ca>FDZLTyI%4a^j=c$CI9A55SG$;sk?cSD2n1+rAi`u zsq$1r-=*p!b16NS>W4ikB~PirypG=8n-{t_FDx~V37Df)2ASBIQaX2cURX-!rB-2% zQtQ~rX5=sRYY>*sO%*ya63>-(Hl@E0!kGJb9GPQsk(WZq920}wF>=RLK<*g*$LKz$ zDJ^JCJUWl@{ur~wm?b6!*<)mnkv%4jDNJW3^2f*-yuZv2%u>cIWj;mzG8ednzRO(UI?koc??G5r{<2RX zPub#>;yKEp^RhZG`vTReMIG#T*$&w8vUa>|S9;K!z6`)TWzAD|FtV3j%SmnqVYx_N zq#Mqr+%lX)Iho7pznuQd>A#%b%l*L5T;&(!F84Ae% zG*ziVZS-B0!)MN#B*?XoJ0}WN#|?UNf2DUZi+l6JN}G_slFlpXywb;<;0sRk74lcIbCu<({1`cSiabP8fM+N|G$pVv zm1|?yE9<{<0~*temYAn+YBE>Tf3-a5y_(F`N>hgNRHO=WSJQblox4LXtkwqm zQ_Z`pb)rAAR~yL~Qkl$KOl3NLtJPLvN8FPaRi%$?kQ*`>`3^sEb&s8r>ZMx70nX4x;kQ8LDJ^{bg>UN~M z?A2wjZr9zN7gk?N7Asl9dNy)^&-eo0s(uF9t6xOd)qlXgxGyiP@ih5~LY^AMC{8J! zqa1dnhI6Z7jv6g^iB{;mhR$o~yhZ|D=}s>a8IO!Lj`C9w*3?POvb1G5^VrHh4q_K- ze!%B^%{N@&5^~r4k(>OD{%S>VA3Cq~2;N_-03|7deW_KE7pP7xVv)a=ytV9jEjwPz zp455+J6>xna@U$f8dI3gdt|c$J5x*F?$8U}p%=PCFLZ}qSZf!1*^lhCWUQ^z+I7)K zZD&|}E%vJRZ$TLQB>5;vA&O#OVk=RV7paNNvGr((?6Ixsik@TbO>BRX8O-aLCszL0 zbmk*#tgNxJ#>yHiYwT|Jq4!w5$Ligkd136ge8>0bJN9R;af9E{f9!3XLF~UlSSJ!$ z>vTeYb^NC59Kv&TALlum(Ux{}q%-=cD|20$>pFwFGS^LEBzmtqjhW100U5lD_t!N` z-95-&SN6KH*Zq_ee1YF=UHej3$MqiIVeCe|96UuHyWdKe2;N148cQ0nE|#8T8(?DE6gk2})Cj z@>HNQRcVWiP3N%#oivN!S(?z7$;@CjZ)0DY*^_3gSjz@BBXhHz?B)o^IK>&xq3dRs z`H?GJdC+~!5>%oZHK!62OHOP+hlnZI-=2;&MMbDYd^r744s;$)7ii`;Q? z$2CFjxDIr|Zzir6`i|3gTr%DtXO=j##LYnVIN9T5k6X+#-e)=T$H^OahI3p%=W#lZ zlRHl5adtn>?#JEa&me5|7&*v^zFX zUS7m3t%u|H*?Iz#c?%u2&fr~^@E&rvUcoB1vxog0;sf;E+WT9dz$~rJ()tFnx0b!N z-))-+?!oS~aV~A-Xd`c%7pRUMZ&Qc*=)8?xY2)15#Le?sqVWo~On;_o6v_ITOjpW}R@vV?OUf=Nv*q`_$WRADz@%B94uEfg|Z&%_o(R;k!*~AtOBXc`v((Y%j z@n4?bxy4`n8-(rk-u`ax!yN4k@(hL1d3&9=*LnLG%2J++RHijDwx5eLZm*LL0rstf z-Rh9YM5Zy5In2ZFw1YkGu$r}OK<*A(Im8F(ufu12fzCUe;lKA^;ZN=aVaEvW;XxkZ zadIGkM|nHOQV)C5u?fw23AsDQ)1FRr;WdUb96Qrd-yQYcF%>g(oJ<;1Fi*!-e8ew7 z*y%|s@iLz4WWG-OIM0vB-03>M@^=s>$ef_>ga>#C*%M?>uALf;9mBXfeD6Bc4m668r(#{1|!LGKCc*vJ;lk?<+Uu`>xePtbXS z&J)gYfs0(`hal{HFEVy+NMCf)c`be)o$XbZr>R11>e7J5w4x)O=}Hge?$U>T3}pnP z8OJ1a-o^X7=)8+rx|pTQ8f5PxdzbC(VLx`K%Ms-0B5#-fviuu_UGL&@;&qae>v7`b}L<(|B-hg?0%P!9Qe_`US74?PAlhpl|gognP#xt?~bXKyAT zb5EIj&gO0O*;D48`s^upPq}+;MDCskIfk9?`6(y)lCSXoo@VKJ8`*ow-b?mg51`Lp zkD=3EQIy8H_o_<+8qO4{B ziDxlK;sq{oISBj6-^YIRsZSzru^P|yaW;MPP>Gtz+_xSLc?p^OcA^X2=|vyp?yL8{ zBN@X4Cga_Gr?3dw`>w&h^tI=Gx3ddf_ubEN&hZ;J`4hjjegPpm@Am-ub`M_IF9*?- zK-c|ZC_{OiXTK`Ez>AorUu_Z?flm7!;QJu#?+p8UuD`wNKalCnN9O*SEWy6?m%0BI zwy^`*`^(<{WAxtt3r=&E^IYUReh|)j$sFvH`|!d6&Uk<`ekGC`bis44 zIGb0F@dG!I`ITGz6@*E5BXg3@lb+y7WKWVksVF5VjSiD4P#L`^={>0lFVhL%O6rd6 z?!*g|Ug1?nA#;*5NwVij_B=_RBzvB;mJMu1?@2q^gE^AEy6TJOk~^z*OGn1Fi+(peOL$AoC3x#@pzBkj#VhKS=+B z^gc-DLHZsf_aM0k9Y*d!r_lQ#zt=$*xXh1S;lKBrW$;7DK3Mj_vJZ}=0JD`?d)PN2hjNtoe%klPdS0VTSIkq52=H|Dk#x`Z~jTgHgymG?nSh zVIB*4m!;UBq251qD~I@ikNJ!*IL#T(BL7f%hdo9Po+1x+Wmo~^9#({CN>G~G)TKW9 z9;WYM&1i`khP5G{_L#>VdEqd-F>EL2f^fK97+w_54L9F#do+9{n~-_<4tC==I$Y-A z`W}9gQ^-DC_TfKp6}=DF`|#WRjm}f(#=sTqjGN8##`QZ#+dMbn?a#q9RqOMh%)^h7o!n(UuM*&=tEjVj$)ik%~PTu@JdO z`2L7xyw3_&vksX@Y~ds9`Uv?)e2%>tq5BbMILCRu<-h#j2jNIFjI<{s8_W}?qtXB9lGvNkWzhd<{f{=s=&HPk zGZ-!ZXnQg`gS}h|!ZG*ZxiQXWOcGO=i_Bx}&X`QHk$H^H$82URvX7B{%m;kR33NE- zE6$?#F?t_!gF8Vu_HKM@?1RWYHV1ZXtQ{I#44KC|ld*nlW1At*Si3UTu8eI*NAy0n z8$B_{*b$6k3_2e>0iBP13v-N}#!O}-|5!UR_KzSOmxpR}!gJ%C&A7wZk#X0MdED>Z z3c}R8kU3T7sdhj0ab!=GJ+%rDxhK5BtBhbQC{t0$w z!VY$GfWsW)L*$?EJ^uvZM0qCK^@;cL01sndChB~m&L=v%iIJ4S&P>$z#7b1bnNF-h zZR${uhS;fzy_tYsCw{~)K{)A2JU7X1O-f-tOOSa|HY?H7B$+4eL+(j(PdbX+lTM@e zNqV1jkstUOJ2c7rC!1yRBgj5k_Q|qO&QBDDDa!NI!k$cinGPhN_sM#nEcfKT3_$0T z2Qi5>^gVeh)0xFw%rJQ&8N7>mChz5&Abj&~is6jk?1$&xG~b&i`3?Q2$(*MDH2tUP zJx%7cr^!bFWKWYlP5)`SPpixe)Fc+2r!~OuHmy5}_*R;oNs~Qo2*c2K+MCFnrsuRZ z_>HE?leU!|=sivEX$LvN2bd%6TP|@Kou}zMP3LJhFh|-S+~%(!d`tef?8jT}d4o*$ zo^Ly7R0fFZdGq)8(D=01u<@DLJq!Q{Mh$AA?Q&TIMo?Wbxu?Lp50>?PR(L18`#V?bmVTjaOx*~#^=aA^)%n{6Ib~K zeNWZ*)W7lmX?mUZGzBR{QA$u6do!&Z@=ud@S~qk(Es=ice45Uu$vy3LhBJcE%tqJK z=3~dF>3fyUk#jMH^G{dx2;eHia>fNz6vMg$M>C{K`+{1l@& zC5b`q8Re;o&S&U+Mq^r_?-}}@;r%muF^Hkql^G)$#{?#mhWs<+ov{-;GDFuh4sjHn z&yah@aZd6jUvZsZ`JJ2SdxpMe+zG;&W|(<5_woSdnfWaB>C0O<- zmyty_I-jfax$D@7Ip%I<2fL7e?w>*Ub^&VAo$+|?ZD;fLwIH1LD7le&o_&}XMR8=F zSAojBKz009=gB=!@AK^WyqD=j7rfiOb>Y0h48y+6TR;ZyvJ|=JEoT+>WZnj3p0|xp z(D}U2`GPNzf8JSiKTr4bF7Z7-2I2hsC`KdtF%><`_uTxygK$A4Rf(k@4QYaNUm)`W zd$PcuERcJF+zS$M1`CEWg3*j;5^3mv!9w)DK<5j5Yk|%e$i84F_GiI9K11dOc4WaH z+~&VLcY<(X1ov=1_GF>%7e0YG7V3OqNlNn^`d_I3h5BD;j)m2*Hw&G?LircIK_>gT z9E6J=z;lb7&7x$cF%Ov+y@TCZS+{L~4R>s4~?jE}^!~SICX07;BQ=1gajxrFzSCvzoh zSkET(p1FhFm?QHPr?KmqI?vR3rp`0J!yK7Ea)oO__^$l#+L3pg^D490jOP|Ro5fMs z5qH;xi)CKijFz-R=EXgcd$HV$`y=;a{kyX+T%5{8-eM{`U+n#h&9ZncvM-i>vFwZY za)86=d$E04Y)2OBdGS9%xFkT|OYY?Xc_>X8%AxNi6{&*0mzZHmEn=yM zd6w9hCF98A7*~UE>En2Asri-;WiI+(D)UnPFV+82y)Tt{slJ!Wy;Sa{hmd>e7wCPd z-|N!ze8&&`%zy7U%d!WNeVOdbWMB3)`O)>VLX^c0E{mfLFVlep?D;aem+5?&&X?Jh zWzKEccqZ{C`d&7L>F9fz8J5js0U4NQ*)F~g!uRf?F!f2qbMKk&z2p3X{@;^1OaJb# z3$yf|C3BX(vmz{9(%H~3if1W4dh-~mj*PZ8Qthf zZ|uxUeXrE_%4E#2@^yys1|yMurHt;o3s>ERK2|xyRsFG7tJd%dU-A`aIgfo=^(%jH zi@%V2wVhx62s&S_^VNCCkG@yyd$sqk_IGA=E$U%c++P>2Zb>WJVsBQvg(b7jiET@Gy^2glJ@6SCZ0{p*$5a$GWP# zNDbs(H=GRiaw!Pc--qYcJD2rIOhM-LGOxGm>-Drg8=2Q{WHVcleZB1K?fCjnIl&iv zh23!RZg3|EH{6YHZP4`w**Dmm4bEgkZi*rEh6dR04fcD3JR9uEhPJe$Bb~AL z8+u}n4I>zZzBlN5!vyTnhPRl?bY?M!4am6RW)N=7i%vEskjncU;WF3x6+5%>b`Wlg z;351*H$Bdi$h|2Kc6?I_^tY)D70~&n7x4Z~_I;Cm+0=kwjL)$%TP|@U2)EwHgFJ$+x9WOpE}Ylad=y01t$N>Tuea)WYYk-I8cRJI zqW7)MFvnJNY;BFqTc@#+Q~VW#+w$YNZM_(e{~-R$K6hl6mBIrcotWBC4_92BG~ zFH#d{yT>>8G(>lMbhpR1_p~OS_H;srds5Kho-w2{kvFjid+fm;8TZJyXC4cAhs7*K zzC9b*%r>s^H~$9VUOD&bd#@h$%Cgs;9whGrUTCMU|;ld@Kt0wDAU2A*tLUZ zJebB5bbfFqnJnQw?A$>+cW^a3*v&o;a)e`?!ucHh8r>ZH7Wog}K-ULv@fXhiP=Nf0 zoY^6L9n#k!eI2SmCF)S0M)+MEGSi`#NT4e{=#7~U^+&gdQW(h?_VX#9ah%UN&qXft zBUiY_KS6jnxevK{^s-#>B>1t>uoTI0Nqbfh27=ZI&IjKw(}aZX33;%~zdJ9)%AkJ!m0 zAM-;H9*y83a*-DuAGIS#3sID4p2r+V&2h9Ax<1;NW|-@!xsICas4kDL)8qx&cJ?6W|+M>H-Iy+`hkG;wu zhBJcEj6)B{-opInYf~4yaXx{r^uTVM_n!0KbKZN-d;YxV&+GBL=g;f${F`{s`6+C` zoEOY?wPw?4f{y zfD_zI5pduZk&S}mf1ji&ApYL>_x{PJw9j+bx#ym9?)RK~a)*wpuWN3xSWZANgg_`n zfQV2Ilnasjs>dXon(G=H`l+j%YDUz7r%H88%g~p*U0yC7_N_ zC#W;j1?mcQgStb*pyAL6s1AArdK9XMMnVlxBlI|gK`Ceo^aS)IG!=RZnhre&&4K1Y zi=g$;252L+33?HF3EB?rfc8MILVKZo&>PU3&{60^=p*PnbOHJT`V#sI`WpHHx(xja z-GpvIx1m2_7?!|NSO&{s1+0Wsuo~9DTDSn#!Ft#L8(|Ai?j7JeF@22Y1)z%$`l@H6mIcp1DLUID)VuY}jZ>){RX zi|`isRd_G_2K+W$1HS_wgFk{lhChK%!k@us;dAhL_$&Bp_#*rbd<(t}{|5gK-+}MK zf53ktC_+G}NFG8%M2Hy4M5KG3s*oh|DAI^b zMjk^RM=&IXJdHeqJd12Wwj$e*?Z^&fC$bCKjqE{QL0(1nBKwg2$RXq{d#`5ZZioJTGoUm#y1KOjFMKOt9;tH^ESH{>t014=^4C-$sw3C(x7VDfBdY20e#4RJVe1hJkt zlGsdaAxzp<{EPyxy899x#8T7xjl3Hjfl6yJ#X6_$A zy!@mvDMBhIB}iRJT}eGj6{J3-zNCSqL8NNZP|`5caMGisdeSJ;Xi_U_3~2&sBI$7w zMtYJol{B3+gY+zEHfb(t9%&J2F=;tz1!*;D4QT^uBk5(*X3}=j4$>adE2RCT*GO-W z4w2p>y-hkwI!5}4^fBoK=_Khh(pl04(ifzQq;E(+kbWfnLb^=4M!HVAP5O=W2kB2T zOh(8#>#_z9&#zUj2t3|$#HTy zxih&7xd*u?xi`5Fc>sAJc?h|hoFoq;KSF+#+(;fpZXvgl$CD?JA0t0beuDfYc^Y{- z`5E%Fa|q70$bQj(N9$|IBpN+YG2(n1+W8Bdu^d5kiJ@&x5+$~4L>$}^NXl;!DC;RNQeL8LrEH_@qU@&ZrR<{|pd6$ep}a|Xm+~Iv1ImY#PbtSK zrzvMB=P2hXUs1lMd`J17@-yWUrPB~Xb}5|vD)QR!4Rl|vO! zg;WVuN>x%-)B>uGT0}KctyCM;Np(?u)Dmid8l*<4G3sDy6?F);nmUwPL#?GIsl%wl zsUxWM)Mjc6wUs)V`WW?bDn^|~oladvT}@p>T}xd@T~FOW-ALU;eUbVSbt`ob^%d$t z>KoKU)Wg)H)MM0()NiQYQoo~qPyK=VBlRch&(urQU#M59zvV%Ba2}FJ&ZFe1^3-{n zJZ)Y-)O(n?$GYi{-FIy`-}EB9ikKH6gr#Ep>ydHx|Hsu zyXbDZhwi2O=q2=0dKukM56~m@PV~<7N_sDPZ~9<*6@4sy9DO`}0(~NV5`8lLG5X_l zjGm%TrO%>2Lw}aOfWDBvh`y4(ioTb=kG`M&8vS+p0s2Au8}vi;!}KHcchG(G59z1q zr|DGJjQsOfiY5yDU2r=Pco)5o?<-B zn8ujJn9EqoSjJe+SjSk;IKVi_c!P0>ahP$0@h0Of#@mc{81FLPXB=mI&N#<7&-j+{ z9pf*?-%N-JGZ7}rBru809A+-F1Cz>RGdawBri7_sYMEtBKQq7#GDFNTGs28AW6U_S zoY@)O&#YipG6ymTF$Xh;F^4lBXJX70a|-hb=9A2+%%_-7Gp8}9GoNA3V=iMZXRctb zXKr8~WWK>X#5~MA!hDnY7V~Z9JIr^P?=e4Mo?xD2o@ZWQe!={n`2!1L!7PM@vIs09 zD~FZK>cAqg$SfL*%i^*4EE!AAQn2(a11rP|vm&f0E5?em%2^3kM^-0RXI6JsA66A> z2x|nZj+J6fVLicmk~Nj}6zgf$G}d(14AxB6Y}NwS3f2p(m8^}dO{_z#!>l8$H(777 z-e$eSdYAPc>nQ6O>m$}F)@jxktS?z#vA$+qWc|###3rzb>>PG3y91lVCbKDQDm#x& zW3$*owumietJrF`hOK3r*k*Q|UCvIhJF+{mJF~m6yRy5nyR&<+d$9+yYuQQmFm?mG zk^MA#8hbi>274xZ7W*0Yv+UXI=h$=D^V!ST%h~JL>)9LFTiM&#@3P-xA7vk7zt8@F z{UQ4!_Q&i`*q^dbvCp%=Wq-&1p8YHP3a0~y#36Gi94aS|L*vjn3=WgS;_x^Uj+CS2 z6mWDL3&+Yya5{22aXNFlaJq83ak_JQaC&koIDI&SIm0-^IU_iuIHNh!IWssjIkPy= zaGvGN<~+xl!+D-Fm$Q(wg0r5pfwPgbjkBHe9_J|M80US?2b>Q%A8|hBe8TyZbDVRU zbAj_6=X=f%oGYBGToRYerEsa-JT8q(=Q6lVE{n_N^0`v3j4S8rxO%RETgbI@9o){` zF5Ir%ZrtwN9^9VX3T`F07q>UJKew7&$9;tRD7Ts0!kxu^hWjjcHupL19Pabnx!if& z`P>EECEQiqP23l`FL8HrcX8k6e!%^Z`w{nJ?kC(&xyQLDxF@-%xM#Uvaew6g#Qm9j zoqK~v<>m2cJUWlTWAa!$Hjl&O@_0NEPr+0247@^K5zoOZ=5^t9<#pqA=k?(A$%3IBQk@pgB zCvO+;eclJW4|yN)KIVPG`;>Q_cY=44cZzoweVz9e?`z&qyq|fOc)##2^KS8O^XYsB zpUG$O*?bP4%jfa=d;wp`m+;m6BEFGt;+y#{zMJ2j--F+iU%{{B_u}{F_u=>D_v82H z59TNNBl!*dM*dj-IR10|IsE7ObNTc5^Z5(-3;B!qi}_3VEBNd9oB3P#Tluf>U*&(y z|AhZ3|2Y2y|0Mqu|1|#$|1gS^M4aC1WW--z!q=>TmetO7YGDG zfk+?~Xaq)qNnjSZ1a3ihK@UMsL4}}F&`Z!;&_~c$&`;1`Fj$Zjj1)8o8UBDgBJCb%QGD`X2fLavY}Btp-?0g3-g5%p+cw=T7*`i zP3RT+gcZU{VJ~5CVIN^%VLxGi;Q--4;UHnPaD=csE??x zsGq36Xn<&-Xpm^IXsD=8^oXcQ)GTTdO%hEO%@-{YEfg&hEfy^iEfp;jEf=j2y&zg6 zdQr4Pv{ST8^qS~((Mi!M(P_~c(PyHwqR&O=MCU~pL|=$5ihdIPEV?ARA-XBLCHhPB zx0o*$h=pR2SS-#LOT<#KOe_~G#2Rst*eEU*JH;-sTkH`B#UXKj@c{8a@gVVFag}(8 zxLQ0^TqCX(j}SMC$BM^^$BXBPpBK*+&lArVFAy&jFA^^nFA*;lzaU;O-Xh*A-X?xk zyjT2*_*3z5@d@!s@hS0X@fq=F;Kb3zv|4ja8`DgP#&p(&{W&Zd1zvf@bzncGh{v8QR!j^C(TnSIYmk1<6iAW-r zXER-ygES4;hER`&itdwk!Y?W-2Y?thi?33)59G9GsoRplBoR*xCd?q<7 z`CM{Na$fS40;>; z=~C%3>2m1`=?l`8(zVi;q&ua%q`RfBOAkm-Nl#19NI#RFm3}TgCp|B{ApJu6rSu!= z&(iDC8`3|df6BNro{TRO$b>SHOf1WnNn}!)Os0|tGqTTQXJwzu&dJWpF37%?{V4lM_OtA|?1t>7>`&QWa-N(o z7s!Qjkz6d#mrLYQxlAsXtL26ABDqmsEO*LXa=$zv?Vz8o0F+@?V7^O0tX8a1tW~U2Y*K7fY**}6>{IMl98tWfIHx$TxS;q# z@ulJ`#n+09ifwaRtM^~w#(my|n{`;_~YuPNVDzNI{`yrBF-`K9tJ<=4uK%5Rk4D!)^H zul!kgO?gLoSNVsEpdzXyDyd4QlB*OdrAnnzt28RDsz6n!vZ?GUpQ=Pvs*0*&s==x% z)eu#+YN)D4RjW#>hN*_DMyTpl&8imFB-LcqW2(nhPphV>R;pI1R;$*i)~eR2)~hzC zHmWwMUQ}&S?N+_6I-okJdPnuH>PyvEs;^ZSRo|$-Reh)WUiE|ON7YZN%c`5IKUIIJ z{#NIzJE-Mqg<7drsnu$YTB|Nl>(qL+L2XhOt4q~oYQH+JE>{mxSF4ArYt*&sq*>H3p4IQ><}nTpGV7pb2V1ny{vmrn9D2lhh2;4A+d%)M*~kJgTYJjMOw} znl$4zDa{nk6PlTtS(>$)b(-~>4VsObO_~=qFKJ%ZY}Rbi?9lAh9MT-t9MK%pys!C2 z^R4DP&G(ugG(T#7()_Hsr1?d2S#wSEyXKA-(V|*{mZ;6s(zIG_fmWy0YYo~$ZIRZf zHEGRSi`Jp_X~WuxHmdES?W!H79j+art3-%Q3D>zi}Ucu3VV+F?xP83`!_@&@-!LJ2Z z3a%DhE4W^8qu^%2t%5r`SVz*4brc<2$I%t(j5?Ffth4B>I-Aa}bLfh7PMud5)FpHs zb)9q-x=LNWZltb3*Qgt%8?9^7HS1b*t-3L~3A&VSx^9MUrf#lop6+GcX5ALuR^2w; zcHIu$PTeluZrvW;KHVYRd%B~#W4hzI6S_;fUv!sszv`~&uIjGouIp~-Zt8C7?&x7X zNl(_Z^lW{hzDRG>oAhSAMQ_#H^me^NU#$1&1Nxvoq3@{gr0=Y+)c4Yl)HmoG^`rEo z^-cO_eT%+TKSn=RKT$tLKSMuLKTAJPKVQFDzeT@QzfHegzeB%Mze~SczeoRye!u>( z{;2+#{(b!k{Ym{V`pf!X^;h&)_1E;*^*8i4^|$o5^>+=3foz}{s0NOKYcLv22D8Cp zuo`RzyTM^7HaHC~gU=8$bTo7_bT(8PdKpF<8VrqwQHIfmCPTBK#n5UPV;F0gXqaM{ zVVG%{YnW$v*|6EL#jw?|&9L3D!?4q^%dp$9$FR?E$nc)wsNtC5xZ#B1lHnJ_Wy7zA zD~79vYliEF8-|;PTZTJ@a3QIXTu3RT7IF%?g~mctp}EjfXf3oA+6x_p#f8p7SD~*k zRM@ewQ(@=A%EDfSBMTb}8w*DjjxKB}Y%XjmY%Ls9IJR(N;grG|g)<9h70xT1U%0t& zOX1eSZH3zlcNFd{+*P={a8KbYh5HK+7alD_v{E;v#2}tH@UrD(YC&si<>N zWl^u9kwpzfjYXr1Mi(^|H5auMwHA#j8e256XiCwHqM1drislu~FWOwRrD$u>wxaDt zJBoG|?JC+`w5RBmqWwjOi;fl@D|)}^MA6BjUy3dl{aSRT=xWimqU%LBif$I&D!N^C z*N7O&Mv9SY z%`nY0%{9$4y=>ZS+G5&j+Gg5r+F{yh+GW~p+GE;hI%Im!bkuarblh~pbjkFK>9Xlp z(-qTI(>2p|(+$&2(=F2-Gi)ZA$!3a~YUY@^W~13;Hk&PGtJ!9@n;qt2v(xM{`^+J8 zM{_50XLF^wm$}hA$~@ZKWNtRMm|M+b%wx^t%;U`y%#WF;nx8U1Yo2X>&b-9D)V$2R z+`P`b-h9A((ENt^komCri1|(PTjsaT@0i~;zi&Qn{@i@deBS)6`8)Gp=D#hF1-2j- z)IzWjEjgB4O9uEPhMC610RYVN1jkwZtrOOSvUs>0+t0473cg z47Loj47WUP!7M4u6w4EqCoNMgPg$O}OtVb4JY$(>nQvKcSz&p>veL5AvdMDDa@caj z@}}i2%iETBEbm(0vmCV?vwUPZWw~Ja!t$l%2g{FE*os(DE5S;%=2&yB9jqiP*-Ej} ztvsvLDzg??b=H72XboAz)`&G~jalQ?a%;lc(c0D8%i7yI*ji;BVjW?vv!<+5tWQ{< zv`)1?WqsN@%{tvW!#dMC+q%HI!uo=BgLR|z4eKH6Ve1j=o7T6iZ(HB7zH5EYder)% z^`!N@^@8;~>-W~bZIBJNAvV-Tun}!Jwp?2W8_AYu(ss&r+V+L*OWSX@-)(nn zcWr;z{Y5(_Nn$+_IdXC_67D8_808y?3?T_+V|LB zvA=5HYu{%-U_WSo%l@|g9s6nf8T)7Uv-Z#J=j`Y07wq5Kzq5aD|H1yF{TKUn`)&Jg z4yq&1L37X@3m2JH8yp)Q zn;e@R+Z_8G2ONhShaK-bK5%^K_{eeGamsPp@s;CS#}AGl9oHSV9d{gei;2ZK#ks{D zib=(J#f)N6v9wrGtSo-Hcw6!I;@!o2iuV=oFFsiOM)8})Zxz2+e6;w(;*W}t7oR9T zQ~X)+`Qi)3Ul(62{=WE!;!DN96kjdAR(z}YcJbZfKb(*gb`qUAPO_8Yq&pc-j+5&Y zIz>*YQ|44T)lQvL?=(71PMg#2bUEG55@)G1=nOey&bYIav$M0ivxl>nv$wOqbAYqT zImB7(OgihFk2o8gjm~Cgi*uZFymPYiG3ONL6V9id)10%M&p78epLZ^BE_5z+E_1GQ zu5zw(u6MrZe95`hxy`xDx!bwdxzBmPdC+;p`KI$-=X=f%oF6(rbsl$~cAjybbDnp8 z<^0k$V&#rAO;AdWt>Er3^>F4S18Q>Y{8RQx4sqzf* zRC|)1dQXd|)ic@im}h}!p=Xh2v1f^Asb`sIxo3sv1R(q4)dT)!j)jP)fnD=q- zLhmB)V(${~QtvYFa_pm%W?4yS;n7A9_FXe(e3k`>FT1_k{PP_muav z_l)S^ zue+~@ucxoVSLy5J>+S2~>+9?1>+c)vOZrCo8hm4XV|}xI&-v!~p7+i5&GXIoE$}V$ zE%Gh)E%&YUz3kiU+wI%q`_T81?_=L5zE6F}eJ6Y;eW!e4H``!4xz_->Zu zmC#D)C5#eg39E!%!YSdF@Jje4;u2+vszhC)DKVCqO3WqklJb&7Nym~-C7nyUlyoiW zR?@wsM@g@efhDyi$&!&J4JA*NJY6!aWO~Vrl9?s5N}efswq$n6b0zaimX@q3SzGdQ z$>x%`O5QGcr{vv|_ezeI94mRhynElKbKr8C6p3Nb4qhdJCu@2 z$)%K1YH406t&~+NELD^$OI4+XrA4KY(r9U{G+tU>nkem9+Nrd2X_wNjr9Dggl~$Jy zEv+eiw6wnT$5S5urL#((DSfu|`O?Lut4ddwzF7KF>5YV_B!NZe_j82A5Tp4KEu}hLxqtrj$KV z_GH=AvZuWrxZRmmMj4v+S+1x69rsd$;Vp zvZH0k%04PPRd%85i?Z*_e(*zn*pK*8KfzD*=lFB|9sDFe*-!Ix{Sv>_uk{!B{r-SI z=nwhB{)j*7kNM;Na(}|##b4M|1baF z0Vn_mkN_GW1c-s006D-62m_*kGN20h0wsacKv}>a2n2$GP#_$L1fqdNpnITipkJUm zFf=eBFflMGFgfs8;PC(!NCl<@o(Mb{m=>5FcrLIgusE;p&%SYf@qKsBnC-AMoQpxOM<1rvYpmm5F;cA2}9P9Eo2WlLd79x$Q5#j zJRxt$7xIT1{yF$A|dqS^-UJdOH?F;P>9Spr4`Y`lS=yd2z=t}5n=vwG{=tk&f=vL@< z=(o`Cp*x|!!o+Z1m=>mo`C&oW61IkIVSCsSE)F}xuCP1o346n3;b^!^xNEp~xKFq- zJSsdo+!SsOw}e~6W5Q#@!@q_9h@cTlgc{*QxDjK- z6fs9E5o^R2u}2({;)pZiiufX-NXJO0NasjxBpDeN86FuCsf#=kc{EZV85wDaG)2Zo zQjsZ<8IhThHIcQEb&>Uv4UvtJO_3KPFGXICY>sS?yc&5Uawzg%Jvk#8g4 zMZS;x5cx6kQ{?B!rO1`Y?a1FzDB2-PiYlVYs4A+CYNFa`K~xvjM-9=!s5$D4mPP&1 zc(gn^Bw8IE8m)=eMw8KD(c#e%(Yoj((S~SibaM2u=u^?Bqc22PMps2wN7qExM%P8x zM>j+_MmI$_M|VYEi@qK`5Iq$=9X%8MEP6KjdGuWLeDp%}i|CipZ=yd(uSai0|A_t> z^@{b5^@;V3^^5h74Tuel4T=qp z4UN^sM#q|B6Jir%b7S*j^J5EQ3uB97i(^Y-OJmDo%VVoz8)KVd+haRoJ7c?Iuf<-E zos6A|osOM}eHJ?#`#g3oc0P6?_C@Ss?5EhZ*!9@m*dK9DoEzuG`Efy97#GFG@%*?X zE{!YW`nWZ2i+kg~ctyN2-Yeca-Y4ES-Y?!iJ|I3YJ}6!t9}yoFA02OsH^(Q&C&izP zPm52FKNEj8zAU~xz9RlYd}Vx9e06+Hd_#P5d`o;!{FV5t@xAc_@x$@A;~&RAiGLbD z9zPvF7e61r5dSXzef)>`kMW=4m*Y3$zr}x#|5=Wf=azRUr(L`%vOk#XudSXUmW@1+2 znZ%sLyu|#(g2a-<%Ea2lhQzMKtBJjd*AoX4hZ9E<@AOhPwAR-jhw>mAM28p<8{+lp zT48!LIlj3+_}!Kl+FM;yU)|ii8e&2$48hRV5C`I7gcLj+b5$|a4p%H}cf~?Rhc)6c zIsjfYdV)c>5g3I?vCZzbIf|`S3{D~v?bF!wX!EG*nq;K0rgdbpp(Q)A2vS0Z4Uibh zha`{`l0kAvff2DBEEns5kuWkw*#M~^HKc*Gpo$LCU{ov*)1}}fsKdi_m~k-PeO*Is zCD+kbxU;>Lk6k_Yg$0+Z96L-B#j}wH)>;J{m|;BM0V6FhTvXVnxgxPcoQdD zisY8bMe>QZVkh|1>ae;dPtNk!0hL0AjZiVZTYm+80UZ=ViQ~Tsiog0TYS1~N@r4@~>O*P3j+3S_KuO>cEAVcBCQGoC& z2D2hr515s#ZSSj!QP|$igM)+s8y+3iSl7_foT&|jtcoG|5497`&8_$d|B2)n(3&bn z{(oqlUYsh1{67>|v^2HWw6r#X@&8l*l|T`)D=`Wh3mMi!qoF3K8ES!Ap)r^eQ(xR{Vg!w9l@*geQ%mC=V<=)_& z8em+iM>Rjtw!^1s!}>HdZ6#*-6q*6egl0j{^v~GS24JW9X8uez5AIsgrL_e&7r~~c z>hWtpy=S4>z!;|=`*yA9md??yVsP(iy4~&sif;4RCr{3d^Zb3|%!d|KG1%?BM(Tjs zX>6!&0$tCC7DBTJcCEPgF1tR9p%);-I%o;B6j}x?hgM)_%z{}l8)jbzt%O!VtD!Z} zTFimDF%Ra&O7L~T?RqrJwU*?_=E|mI61T?paVcZEz(ORuf;o4uZUM{I07M7KKlr)< zsGAjjylut|w6F66eTS068k>@t6$Op)>RHlXhPFVwRnTUvcono2bK*M_-gEEjdLaG5 zG*#KEJE2{WVdYB9m|2m9&?~EPj{FO6?Ka!w$=$Q<_Cv3?4{-qVVXkb!A?R?X!|aQ< zpm*A9zKfOKt9cB1KU4F+P^oNZA48|`Mfn8!6gm!_fKFloEQp1$Fcw({olYyvS?F^t znpT&NSSNf@9_DEQ;Ke<=(azlrE4wvxX{@co#T{4z&Hr38+JFmb?L#Y!%RxA+0$Dl8 zPT?Z-Z96}{!(#XN@gwvzWLO3LgvD1um#}io*stCGXWL$ZuHjX#VhJFBK<>cwSRly7on`eOZFh8Zvu1{so&2LFL{umJxHW?}uY z0oXwB(WQTQ*x>YE12d520VUxA7G^b}-LT_(!~LwS96t)T=6vujs~TYOlJyz;07`I_ z5XBkOt|o0umMLmqqX%2zR`Gs&3AC%dSw1MkxBPJ9$WcwnW?Mx%g$==~SHm74K0`ACBpltEY#QIa8i$I& z7B$}khl7TtHz8MN*_9?{s?3_vF%A7JQ~Xm#`W%Em+kfGgnZR6TGi!Z@}bkR}L+hK&t? zUFoL^fS!O()>Pv!84zF&;9{t{rDg=aWmhK0wWQlu4g*i8;GS>=TnYDrdjszDf%`&J z;r{RdcwoQkhMEzLxTWov?zA%5G_v1FypwQsbFx3a2i2zO?4K@96N8Py9_@fZSR*$2 z1n6xrTm=t-t3iJ?Ft86?ut(O{)zq~_>Y7K@SC7xw@xFkKBXI$!YypH}4H)nyu=-Cy z^I`CCctk(oO*E$sJ~nb-H2~o)BdZ�Rqe{;Uh3mVDP=Owk zrfLJ+_zzBGxB!M<4UbA&@%!1-Uignj_t@9a*pSS0-2%5(F{BT*eqbF|!(;F<{+C)= zxfusP4)6{<9-aVCgeSq1;m5FMtOaYu#$aQyaRBeYDR>I76;HxbfmIlfO$Ug3KDGdt zBMG1bSEFtX_2Ux_fV%)jfmOsM6-Zac0HncLWm9!Sa~*h>#v-_Bh=k(p2EMI6uIw58 z&-Mv)vjOxM0(SJ#v=TpHif|*6R`RUQ0})JbrP-N13(o_a51@M7$7FdrWF1U3(!5iY)IinDerfo~I;4JZ9RSPv|D?RcERhFD`$ z*W}pl)vXz8(*mfsg7)RrW0D!|sjnZO?I+y5SGxUhoIfM#>T8>l09^q6%B)km>><0_ zHaLzM!>vuAMN8-ER-h{tz`%jY_Dl`~EN`eu0$i8|SMVx$?P_>6yavOt6gH)Qzskl( zlQ^~oGoaslkZUw@Yet+l!kYld%8GQdWevO$H&B`0UV^5rf?vj-#0)3lt?)LWC)?p2 zK*e^!yWu_XE5NzQ`pBIdGZtX*JxmI$(};A9k=1n#_g+^4?-794aovVx+ukb!>iiTo z7n_Pb4;a}F=G%7}oExU-xMWQ$Zfv3rW9ph38*mRj(uj|dp?M#Ca4ozaehq#dK7c)q z&BUI?W@B@X!-wF*fc_)!6!@+F_eSiMrUjb@gnC95BVdu&)HgN*PeHD-%Ig~BV1XKH ztD9=OfbMa3F1;O@>VRd`)h0(J!8{sj#^cfp%9BlAeTJv+!tVh~3f3(1<tsoOAN~M-3!8;KgU#q$IRY0xxs^f8mafJp1Xdf+pM7;I{pz{Q zl%yrKxEm{P&Pa?LKvVfWK`2WT3_S~fz8XjJ?8pDk{L9Sa0{lfLaPYti+?!O-WZO29 zHvX&OFY!6yfrkI8{y^8T>S{}^E$OiiwE)Gt=Q3nA)ikVSAX#1h7XAf9UjX9y9{vIT z5&jAO8NLK?&LV6vwgg*>EyI>?fG-1Ebp;2T@OAhGwgOnI7r>7Wdj;Ez>vkF<*RDc?L?yFjPKiB&s1KSsK5cX=jKY$EDh5~m3$-!2yN{?a8k}wPz(cYpC z+jp-;Ju>nE4+0s5jKMiN8fikB;mJrV_8Rs&b^z@72iGBEk#Ud)nE)b~Z(yGQ{W%VP z01N(uf;=qIIPi#71F#GLAlQ2z))ySeSJaG1j=bk4w*mR=M5Z85woha#cIe(jrXe%% zsZYlauR>;GM=;}ka+Ym88(9GvwgB$VL7qqEBJ+^>$O2>`vItp>EJ2nc%aG-O>u+Lj zVQ*vaVDDn@VMnoJ*!$QA*oW9h*vELo|M*ESC@$^)_PL)H;5%n`kKRB`8Ue;@O}6hL zZF{mfTcuq<(mPCBsito@(yy_#rFAH12)Y0WGYL#g!*HNtW5A21fA*5D_0KULB%?F9 zcHurH$Up;4mW&67d8nSEtsV#fHjeEMU^SrSpTj8=U|+7SYiw-}c2A`H!-xC_#iHzh zS*5yv+Vpg*``<{j)gvG{gzx?T98{LA&_3XUHL`;78gigrst#hG-jk}s$dPQw@(~v_BnPAJC9w!3{{L^2Ki*rVzLPYWbw&lA5HBM z>+DFTHV+o?cogti(ve!n|Fw^bx(NV@y4pY&4&{e|Bal!l0IJC*JhJ=nu)q*DfaoHa zB0!hfX!3v6GBcR-|1wyx1vq9yTU&7dyKQo5hvR>xGLa6Fwt&d%|EXCB_^Uv=!Dy;B zGBZ*1huHwETQpvSUW7^?YA=H{r~^ zPh~Phj0!x^i57K0hRtXJszddt0WCy}P$OzW&8P*nqBhiy-N0^Qx3JsTZ`kkH9qcal z2lglS7xs4whBl+cs1pG3DC)r-O|%4_f|j9vGyrK*FmR~J0G!?|X1-lo>s#tZfg?Nokg0o9-AE8G?_50|Y!p=tTLvMRw5iy+5@NwgMWIEp9ts zOE(4z$_6C04Vfk+Lxt{tw#7PO+kC6U}P0qnS#;(L08be(6rTPKeT@e z1}Dt9?V5rPLaQGVyP;tDYf~^0U+5gn)vsM}Re?F@9+0;>bmT*=8$jz(DYygPnv{j} z_cL4-7>T8O0T{JS3_2%=wNy6ttQ$U}lKxd+}&}YzR(b*}OnS$9Vn45wH zDOi+(#qCZ$`aJG2r$AI2xXj?_AM6<|Rdvlk97oor!zPIa;01&5BG|dg>uSONpwqYc z&geqicTT~ajPv|I!Lw|OW$1Fe1y~(EK3Wzc)&2{jGc}K`8`i=gv^7PP=o;X=zm$T7 z*bD}meanIc;Ozzwg3o&N=t~)@@^Pv%zSLQC8@e6cf$l_iL3DICx(9s)eHGn{?nC#3 z0B8;R8u~iiAAKD?IH0yIi=kJ~&H%wTw^Rd!fJf-+TSqo@Z5=rjkNUDeB;%o%%$gA( z^bAgWn|f9^3{L`S0oo1%acRCq8^F;rXaZhk+I9v3kW6>|@Mt<1XXGf*ady0W#XtuC z(Q#u<3YIcR3}XtGF;p1DZVN*EUB##v1~ykO_*w*Rxth)O<6F#;zVy!{nMBl=L8ULvQ?p^k- z{AaU_q`m`!X6U;qSaHuP978|C_4 zI|1AQqInM(Wp>8!l>=i6fF+n9@Q(50v$pD0nc~dopW&mQO~D1=C>K2sWa9z~f;fVj zO!V-9j_~#=804pPKZAaSevMv4zXA2XMZZJ8N0*^LqCcTOqnFU<(aY$sAZVABqX(20 zKPd$=kFOH$PUE5Vwg~z^jW-=gLQC@AVJ<)~4e8_za88F4^3VFr2TJjA9+YHpmY#b! zI}P-3{E^m1M+z=Z!TJ>34OoH{Y)ipi@3&4@(Q9ezG$jRFQm`Roou+4acpHQe(cjSD z(L3nf6kM2si&8KUPSZUL^MKN4759F1&c1tCnF-{KGMn!y^Kle}R)GrdB`{#HqexS* z6$9s};2@sBCUE{;)>ad^xPbnf7#=6^!Ob-SxIaOJ?!_~uhJr&BV75(7$$Fr?W0Dw@ zg6&|O%n%ZS6r4-}^RSvANq0G_btpJG$ta7lIh`BQX6OkDLJ?$mk)R}~2x@|cpd}O# zbOb%YKmbf~reIeJcBf!Z3ihU8UkWZs!KEp$ z6K(|e34#+H0K5OS4(_|Av!{T5J=_a$cmc?27dTMo;a*xAhl7->+VBY6W`Y{3hsUYG zqenoCTau>6VZ)k}0Jc3mR`Y$e>Va+jPm>O|wt$l}Fwnz1!IOVtjrF*hPRlhR3?E!Y z0IUvTb22aDK+p;0garPRf7sqn=#+K>0-5Y2}y8Sbl58vhb zr4b)qIXl`@gqiqgPZOpQrW0nQ;65q1Zwdx$)qgDrl20M@g>VG~+fR9$N7);A3;1~j z@ZOSR)9z)@>am&hlq!bk!O}KQA$>3lJckDg)6E;3T0lx%O;g<{ux|mj@gAs>?j7GT zvcxVREXum7gvBWsBp+l1W*NZRgyn=4DR@u{9@4(65>^q`{Sz${)?Q06q!RX};M!I26ky45 zw;Fiw&5iYK5lwtOJ|(;X4DlhtVcZDUg8i`@v%|Te*_%&c1SJr2a<%`zH=cgMpm!jV zDbzd~oxxxh}AXW(Zl9Zjo{>~32Z50JS`vt0vPSR zW(2Ys6j!v2uTOTVZU*P(AjvB;W;?)7L^8w1n?|L_0Td)^$AJ{HOuY=4#9$1?aypPO zgai%;30N+J4pMHt;3Bl`TN%Cro!(GbWHd!Pb?#Epr*FSOgR5$4lXZ_g+Bj-->zJ_< zCry6h$*I$3Ju~O|xeFI9UcTamHEY*xdhw;L+qUn@Bo%`bY>V9PmgDKDa;x3tkz2qg z^8|8J<-NhAyjC}Ep#L{m3BWF}3hlGYOagcxv53Q2Y;ik{jz}zMba>pw#vsT!Hd>ug zyFFO!juyKd8QspBt$POy$ITY2%@@JN=h1)7cHU@r6gypRj~8ShQ$e0A3*&-(Q86an zSW;T%4+KMDOo3@I00uE5NRqRIlrzuq82GMiq9Xu>V1a5ta#}-X!Fu&dL^3%HU@8w5 z;qkgmhBH1PhZB5b(PlMloV>)pdZ*Q|& z+@Vm&YAgm{1u@!f7LU;q4myptaIrgB>?tmeMS_56k1b8KJJZ3C>W=B0W4wcqGg9mh z+dw+D%M~;_ZI-Cf4i*+W(Ba?g!0M5jTKxuHP0;AzM>mJAWApXzxW z&^LYh6p+@d#neCv?;SyBB+2c<)6+qvXJ=0V`=lPP#0O*m8jKkd(gK&R2DZ2Rnzsp3 zaa;R&^QT~ViZEz@f2}qh$xPt>f`2q$vUCc_?>7JcHeb1FN;*IG!O^plf~Vj=K-T>Q z_~h4bm;$nCi~sA%XC=t#$uRHb%~LQJ$j1HuVIEkx9XlV$0$#nN=U~e?*RY|(s;xG6 zt;b~nH-9rB5%}VT9W zaKCmjNV;>w9@q!&+4h5+xiCnSi^Bcu8N`k4Xn$}c^+>c49gQ}F+ov~x8>hE{P|hy&bMy!FSM(}+9lZ(emDUq1z*lk* zoZ#l@N5E~-&EUT1v4jENDcJGklDMeI#%1-Ca(C(a_y z1@|^DBrYayC%y{qY<`V+fOv*@72ME#2i(#8R}MeNlHtJ<4!)U(UIib35nvoV&T)TvM(+H;^07z;y)9{DyY7{cih}3$X04 z3`%~J@D@NHZCOQlWMB>9O~TvIY=A26J9a0$OZXIg=YjAZ;V9u4;eEmf|Bt=*0B_>x z`o592&C05lEXzfbWkDbz#uNi45WuFU5Yiy^#-Sw;YA6AcQ2vnKdv8vUAU&j0QXmQG zz4zWbslaz;c1M;GR^vr`l9+098=(!3dhlK zOoL-O95hZb6OLJM%)XU;v{%*F)YsKF)Hl_))VI}lxVv@?Lbo8a5}}6?dK00y5PAop zcez^@Y6>WxD^|5oziSftvi69v<;IKN*jx(dqHgfq!>z?H*8DUjVEvOO*~potu`@CL zMH60oQ=}vxU!P9FnUk8vx-GGK>T*vKf>Y-$qOlEfg=xe_T6jzUkw;u={f&puQ+H8> zGVy2~K0rx7mt*nipGT}Xl;*u0US#P)f1%QB&nopx^(*yj^&7(DJN0|@2lYqwC-rCb z7dYm?F&B<`aLk9}SU48Iu@H_$a8O6&csNdgWAQ5WH+8f6yZVRvr}~%rxB8E|Mct}y z(`d+G2^=fojKJFn?<4TO2JgG@6(dxO(0>pbkI-cPygTRWkkOI``3#z-46TW^=9OwT z<=G_Cy53&Xe5RbcYd)>HeRuHyKD;(z7R7r}7*nol)KPfxJeqzTKYbRBfNnR}x`Te` zi1G7}nry8sYN|`l2emIh9>IDf4gTG7mBsGk?lWs9pNKqQ5ly(vXzK8$AAv}s7fliK zLlh2}KbsS|ef^vLCLMt%=Nek77Y}T-$Cw-Z{U^?v(QW)}dMUb1n%8aA)VULdxOf0_ z`O>1v^A^yWqCG~7PplWCNqW~@73JeM`_ssY{JG6M>AxsV(rJDzpcQICEuyQ5;uJWjyL$#4XTd>}2amj63Op9w3T0*PTl3GWt zleUxAS?i+htnC5^bw{s&<0?3=fuj+Q>)^N^jvL^(5ssVSxEYRH;Ycm3${2ams_jv> zWi%e;updsWSl9(}87>xWX`VtDUfwL^w?uN~T_E;FTmc1kB^ zrBpj)=xYq_T2HGD>*{OBJMKQLU!Ng8GE*98r*v{wN`0s+)xBr; zx~hIXdQt6$)zZ4f`rb8FwBbo@k3PMJ_UJvlS?z|{DV>^?5_L3&59hU`UIcZY`u6Te z&xst*etr848#1J37%h*i$t=@IJ0+Th+3q>j*Y+MZtoP92RrR#bOjXVBzO?wWN59@x z{rc3`_v_bvcs)I;%#=piDV>>>Qf+znjhS*OtrnKV^m8i4ISQt`pE2W-8>xTE>g{U7^$J?%FpQ_rv^tSXKPVZ6g`nsAPb-krh znW@dD0UnJ!j>{WW8Zx6rKh%qn23e{gIbS60FZo}zbg)q)(|ToV#7@wbaIwX3T-_S6 z71~K$>_j-OZH?IJ+L_xIQdaw1?fmTvBEPy=Le@c7IFdcvxH0(pQga&vn>krS_Qixb}p$LEET3sXe7V zt!>ht(Vm546&$z2aVH#i!$D(%_rdW195n9t2pntSSie$xUVA}%QF}>yS$jo$ReMc) zU3)`&6OPB=cn*%&;CL5~PvH0(jvwLp1CDKQ>Tm{{+lu#WW^bcqoYGcI;*Ma|u`~=j zmuv>bO84nKd1Alu6OQbjN&CmPX8gp7H8qnm>#4hJ$#pp;dsAyp znAq$I={{TX(cF>~`b-)>f!fpBO+hczizr}C59%Q}9*5(J>(pL)G0nt*LJ+DBJZ{#k z83)gqMN?HY?Is4}^>Ugr(xZAzkLwk1Y=q-!IG%yyS$j%JPx2|HUV10`(^;hRBpmeL zQ_Idv%HCpf&7J=vh|$rIU2-&-H0?*qpRa8PIT6*yj%ne0d3 z+w~hGi%OZiNTpq0uTnx)UlsuuO}C=rTJwI1>Up2$Ld5%u$_qxS|JZ^7|49Ph|XmeBWhwP;4%Y5^+q zn^f9C<}p-OS*?>rX{?`SR4ZNDv+UBgRGSO!?^~|T6*^gy?U1}yl<7TLo9lTZH|RI& zH|aOS@je_M!toItAIsXL=zF_1q`cF$`G9IO@Yf?VYICM!Xp>qOdTaC`yBmvDR~Yx6pNZ`X#JEM1$=d2P1b`sESn zws~KarsdjvW|y|5+I(w&-*Rn!(Klz+hKw4O=^I&_zj-46=v(xyI>kYL3&(eGd=JMD zc5MtNeQ(!>a8K7p0%Vw?5G_{1@Y{uKp%O;1{e6p-Fk(icc_oZWBMHY(aQwWiDmm!; zehr^(ICZReZ;Z~An$gAB+1SOP5Qksj_zjNDaQrT7(~Z8j%4+n?sLikZy*Y2&bsx&M zG5UyNwOp;;?P9l7t)ce!EmvzVW1r^LQhOQuiZcCaw~cWCC1M(EW38FMD*Ji3++LmfF+y1`g+AJ`R%c{)@yiCpx zvNlU85o4JFW4W;cP6wO{oGP4}tPNLHc5O~?s*Tf`RhzR#X_0L_Ii zKdk%09^Jc-@6~%!O?T_dd#Dt~y~b+eKI48k3*hv?=>shfvVuJfzA(~$9OSvm7tiVD zkK;ocK~FdCW1>3zrv}+~vI63_PA~m%aEA_o57R%~WY@c;=kk*Meap|~P2-)cR(?-B zjY8SVA5tR5N5;p-C&s662H`A%GYn_3tkxIwy!(fC zO50guvt8PjYO}@uzQx)wl{I$Q$619_D2}=4Sy`$bu}yiddKx zvj{6;rL2sVvnY$PIICa@R>_jABkRO=Vx3tRwlmv>b!EG&bet8rGZj zVSQOG>&JFu{n-GvI~&LbvB9j4)w3aNC>zFxvk`10+k@@N_F{XpQEVSJn(fQ>WBaoM z*nw;e8_N!22eU)iq3kerIQtJ9#~RoXY&@I5CbCIvGCPtT#ip>S>}WQPO=mOMOg4+n zX2-BOY%ZI}=Cfnj0=AGXV#l%L*$HehTf&yIWejXNTft6bC$W>+DeP2s8athx!Omo7 zv9sAZ>|AypJD**^E@T(6i`gaYQssMgIlF>g$*y8ovuoJ3aF)PX24@t`IGhPMlW=x| zvooAK!`T(iDmbg*>;Y#lID5m{7tVfg_J?zKI0wO52j>tthru}l&OPAV3(iq+j)rqT zI1hkx44enSc?g_`!TBFJ8{ixd=R`Os!+8{(Q{kKj=L|S!!FddvbK#s1=K?qv!FfEK zi{V@fC*WKG=Sg&|DV(Rlc?O(k!Fdjx=fQaaoEO1)37nU~c?FzT!Fdgwjc{HM=Z$dQ z4Ck$Iu7vY8IPZY-E;#Rjb2Xgz!}%bb55u_z&UJ7;3g_c+Zh-SiIG={|891MV^949x zg7XzPUxV`vINyTv9XQ{E^8+|Pg7XtNKZElNIKP7P8#up%^9MM8g7X(Re}nUPIRAw6 zZ#cKWxebZ~iULK0Vn8vW6hQGn@j(ed2|_7?QVgX8N*Rr4GsvD8rzPfU*aay`YTZufuihdUgZ5k=?{@ zX1B0gS&FS>tJrPqc6JB5likJcX7{jr*=lwlyPrM49%K)(huI@+4O`3BvGwdx_85Dd zJ;64xjqFMG6nmO&V$ZN=*>mi9_5yp6y~JK-udr9yYwUIQ278me#olJ`uy@&e?0xnD z`;dLaK4zb=PuXYebM^)Ml6}R#X5X-H*>~)F_5=Ho{ltD|zp!7~Z)`LBo&CZ7WPh>0 z**|Ox+sd|?9ZZMmG!;`dHB&bYlbNRJG7C(%=`p>g&-9xCv(OBhA+yK~o5g0tEHO*X zGPB%_nlUqOR+tI1(oC8i%}(Y{W@odDxwE;8+11?DtTMZq)n<3IhuPEYW!9Lz%|2#d zv)1fq?q>Ek2blC!M}rm)C<~#S4&`bn_k!YzmG_|h09An+hS~*cf2gCOPJp@q>KRb4 zf_ewkN1?t3^$VzfLGwb3L+b%;IJCo{&49KH+WF9Kgmyo)r=h(A?MLWNP#;j=33@;1 zdqF=O`W)ydLB9n0t5SU|N9tm?1%rjwL z4f8ITkHdTo<`*#kg3Ak61zbJh8Vc7za7~5lIJnM*>pHmZh3hG}-iGUY6gW^2MnM-8 z?1qB9Q7{e#vr(`d1s9^=Mie}Vf@e_h9twVd+W~hW+#TWW3-=yy9|rdfxR=6x9^BW% zy&CQ(;eHG5Z{Xenj}M*-czVJ!6rO|NnF5QP}bbZ;xl^%CSQQr?Pyy2 zlQ9Hijo6eR^f3_~+beKJ`hPlF;^U)%(-GvQ;m)2ALMhBm6@KPd9ij$fafS&6ZB`jrj- zz4A=oT9IJ4(^LxPojrw~mRts#U4_H!EGS4~P@Y*-*UhJOw$);xiFMCT_6R%Kof`c2 z$zQUn-jy~YvZnTw-_#opq2MpaS z{q@{Q)2gi*$m+ePPMAaM(yB!W51;bm#LSs2irno;zNHcWuzDOBu&CD7(Zunw<($JFxjq6m)62d`|!=1HG`JwS6g%GqpW>>n*S^N=^bt7w@ZVc zHZaO-B}z4))3kONu-hkH?LB7Bo1SlA=#*nBZpS~ZBDXJ@>`&bVj(?{E6$ znrN-Mr}ajorl$X%oy7_}3yS4DGS9kYHXkkHJa+uVMNQSJ&iW)*i=Jxd-lxHTc)q!d z7PWVnfen5l&(0r2@53RW=6gFwD^~m^E2Wc3yD|Dru z5f+Mur&T?dfe|>hHq)l#GLMh^H$e5G%nLJ6noMKUB)lmy3&0RQk`t;)_ zPn&qmyz!GK9XD^%lqqwj9KB%r_-e5!1ie}mOhxtX?VFwR6L!w~5?YEV#*1KUSy#dxyj3{=XgV;5;<{e%|&kMNTKqj)`y{-U=UF;3L$G z{WrUpI=5Qv_+;I)8^;c!aE@#6kCBb@FN@r*_pZqYZ@vdpE@fiJT{w?uMZGK*c@NXZ zy&3y0x*m3*hI2yxKHK(9L;=mR^~Ht>nTEiQ=5SJk?zlW3o0YuvmfMTC1YsF(G5=Di zD)HN_#&X$_AkHIO(O5gsS7Z^h_KeKV%nlxL(&m}_=UK(folbC;cy9cOLY<`_hRvjnR43Ehy#2^ZbI-wLhs8Lj=hZLco9|hiQ?zsS3_j?Q z{^!4_E&itP5b4YT3s=ZC0@+3mfroieQ|$h$L= z@nH6yHG9nLI=*jvy1(4?QA-|+YmA*KEkMY-I+JJSF~H2Jci0a9HlXWj zurs3d3VDw!HEm;3z0WLuij1|fQ`e@?v)gBqoe!;MSSMTl|3`|Ox>2*O4Kkan@TqpS zXlX_3x@zKe&l*Ok{8c1eQlj_WqLq#I%v}24*)=-F&hN?w|4_-mzd04tX4#rB_h6{& zOgrtXTamVS{1)04#n#whmO(ntPW##h|CD^oo$;KqhFh%J&a97Hv>+GT`Cs>6xqxDD ziNDOYnjl? z-DqcUODnp#S)Ca{2lcozIyl)#r|g_kt$s*y3aO=sbcdbtss?|*e4)!V9p$>$PVn|t z3^E8CAOj@QPLKS6f7?R;;XymII~)8H^DMp9#2N2Rvpz%G3O4;f2xK?OT085zTT#!Z zM5~)Tx{SZJNZR9eX7{#2g^GvTG|VQe*?hRIh3EQ|o!@=`4~)5{0}t}(*UESczHdQu z=jb`RMh~?13Cf;klWUUxTdp41%XWSb{U30JcuQvk`i5PCM_SPf*}=$O)9aYes2?qe z5+2~%{QC;&s3ktAUY+ie{EH#}$j)eeE2gxB?oFGd^lU`Vo&K|*>*sdPk2Uyr&r|1A zr`?N|)bKZUqEFO%o5O8EN&aT%^i+fY zsC=K5$RyoLVvuPrF*06k?aL>x(%)r#xZ~cyUv~DJ8vF<4n|-!{-fpDUG7*#KWRtPY z&hFU;|L8ok+rAN-%!0%-E1Lq<&gS_B|MEPuv4-lhRhe);{@Z|r?2^&ucH-@SvBAGY zmaJ_%*7N7ish&D>;&j@Mzk2SXxz%%N!gzA?q0IuXU8NFul!Q0w`E*Rfj_qba z(9Y`BR=Cjr3f#Yqbr(eJTwl+>g4=T^-l??n(=vNeJF7SInuo9sV504YD7dyMo=_@~ zte#2JZ+5Is3M%c~-)`{Fl6?JJ&(6|Wtsh_DaxJuSXS*2hHu(3+vl!by@22;>C7-Wg zS38&Y8~h*3T-x?!YB}ch-{-wE0%YmOLa+Rbzm}<1oB3)5J?xr)*x)}$*8G3c%q=T8 ziDGU&*a8N9>|%c0;NLsXVs4MYc4Hga8nwTj$EW#E9awn?t&-ETY2h6kZ0GoSYi(u| z(rK5m>7y1YA7*FwWh-L*{@Yi&#X*RIJ?&C_oxiV~@tFT@ptOZ2J=)In+Xnx`lAr%~ zU+{EX``97lXY*6&t-;ymZ|;G1mA-Fi>|F2;|o?d%CNDDdJp znnUMXvD3bILl#Y(P6v=K6j8C+`Hi#l`?(dPf=7?fYs9f&qMi1y`FA%gG)FDk>%g%s zpf|-%baVc^XGe0ka(uC1hMnmjt!NdYm@~txtG5rFXwe-nm}BSnS1UAGlM7-E)i$m6 z__x`sf(3SV|FmM2g~fhL(Mc`4VJFymZOy-G78I81wBv`;9Vz~)Fmf&60xLVELxcak z|1+A3`}NbOPN)`xf#1FLvMqBY@Qif>cUdLbz{eK6_t)v zlPb3bZE>ren?L_S`ONNNR<|(Q^0eqp-fm}I*a{OPUdZN#U+6*^`6|8=u|(PL$~|^| zq5ON^Ee*w_N0nRXZ9HIS6>f!j5mnp4CPpyjfB_jd@A!F(ySJ$s;TRj$NW~oJ9ai5^M8EXH&>S0 z$YtX`wDa33|Io7P=9A93=0FQRvy<QhTM1WmZ^Ny7rl`5@)VutlS>EIJK?lzUMhl=`OU>-mR@? zz04qZQQd|Uv@?bJEOr3{!{-q z5c;pih;uNtlU=_0)~=e(MqEDsH1s>xj_$5@mP1?NWaaVf>D;WDbk<3`qYUod?BeX1e_+{m-b3!- z2KOL4gT3?j?zVrhX>;0S|FU1Ap>{s|w4zV317b28u{kW(hPCby?)~Y!P4`Im9_~He zd%5>^k8s};|*K{xB$7?DLbPT4OHtih=<%nf{w>wfZ z;QJ)G?#B+|e^MUq6U8x_?iKtPO=V&(c`0+c`yvk78SXRPXSvUIpW{B)eV+S#_XX|? zp-hHyB$T6|Oo1{L3RP$tl<81rK$)3xUz`T*3O5~#OQ2l?WmX1gbD+%Uhhr0I$F`G3 z*5H5tWLNhpPTFlyW=qoUKDvFy)Czt~^nT zD-Ugac~J&em!-M7vYo3o;mSk1Xg7MQp^UWd3t$j_yy$>D3@AyQeVuUkd5Bo zGf?p5*I~o9Gn89WockjlP2 zjo01nc(n~)wA*;2=NKp{iPt=i*L=^h{DQI)$|~zlc!m8@+31TsOPZZ~?tw=*R%1Nm zSdqcJ<2uhto|B>63FWRV-o&2Vp3|+f&Xx0JnrC~?v*0^dz;{osB&5tGp6fV#mwGPq zT<*ETbEW4h&()r5JlA@Nxz$kagK|HV2cSF%^)_~;0UMh~^idI{ee4&PeOI(|WU6v|`Po!~3-hh(E~^gM0p zwxK@_g+11j^G;HbHp?%Ck_OgYrC-7ofZdw74#Wbj2^ z-CI!J=DzVfp_4Gh`Y;Z&;A#EfS=?n=1_|Q||3dq zm^bdN@Fu*K-lVsqx081#DDOl00Lq6@K7#Tw6k_jFD4#+39Lg6dZx>0Lx5_f3-X2iC z%pmRSv>E-b9kez9%{!1l^A3U{52o?f6KE}Z|K2^kds~q0B_R8T142hCkp}xV3$lP? zoMhwx?^uf~I$mjSDBtH2lQM^UkK$bY$2-p3;61`S-aElN(L2dI*?T0EAEEpNIz#FrXK^A&36t8MtAL%JHhbRvRJ^7RDgYlCMkzo7cL`z7wg zms>XZv)&ghx}N8Bsf8SqmjqqGY`UC1q}c1;w=BBo2uPxPjKb)3a&bmdGiIhRa84=bEW)fGvW*TN(5KF zh~TPoE-@(+_w7Pl`6_$~U!^bU>*(v`+sW72*TuIpRQhihs9mA%3bhJqH>lN6yF={( zwP(uLRdVI)ZgJ(Sf!ZsBt3GM2`n7Y_HeA(luIi!INUnwvSH9t%WBCP@&fi&O-AQYe z$tEA=+t;FNw4kdm$7Fv&SM3hyx>JfBkvWLZn?yy%n`n6oUZY{3BHNGNxsRx zBYj8true4%j)pn_>h4enLLCHkFw{DzRFNT2he92e@=Z_Eb&O5de5k`S=-M+)*Qj>7 z+J-K2u^N3VppKAq@x$_br}$3g7ii8%-NU*QT@im@+34r^&bRnFPw=%D2jxP+*WTHD zIj@vrm-()=__{*ywNEZFDRZ6gHqO`ez8icu`fl>w?7PKxt1snS=_Bm-g}NWq{h=NJ z^+2d&ppJ!l5a^(8^^lbBc8f31INv=sU-v_mQ{Ob?s?w~hHTA6?(au-f@I@|Gqi+LL zIrZ&(ium%Z^KIf6AM#QUx9;h~d3`VVUbfhJNw77JTqobF!sBY#0b82nO`oMpiYK*B-EpzPJucVD(SRo zP^YJS-=}rgFTP*ZksUhueup|ELw6kmm5$!6rx7o8emh)k0+(MUxct=VnrSO9KO?yO zrenFkfDT<(XVHk4I(yk!q`C(AhuCfI5BNg@FMm+rHHUPNKP*(&+-$r`MTytyhk63k z#ZZ?(T?%y>RHXbpqz?1V!H>k^P&bSUcIjzG^Ysai@FdM-!BTKkKVzw8@Y;XT4 zenCAE>Pgm}K=b(Hve6IpA7p_xR)BU2DJ1_PLXVxA4VqI%{rJcE$6I_IA^18ymzd1z zC_f$io$^odPxT+|pXQ(LpW&bBpXHzJCoOa))U%+T4fPzT=R!RX>iJMFfO;X+i&Fl% zQjhr;+I$g%7iZ`(nsBvkdh(tJ!!Nau+e%1>Ma>)rP65K){a)& zp!GCIYZKI4C0frBS}hLM`(O3HVPW;Uz-lE2JzwiIZ;_5@e)$O^& zBv)Vff970$>Ho_Awf`IcxBl<^-}`^?|LFe-Dh=HdU3WvJG17aXu7-LaRPx;)fcjv{ z|4Z5={$X?V57dV;Od`#B+bU~aJ6CPORlp>!0xqZz+gt@a#8trSSk5n~k8sb6Ze$RB zc7q3s0ujMhpjfcAmh4)K1F2Fb7Dx!N0u=(R_4&wj4)i3j0$l<-2X+Z`4eT1I3Umup z2f7D(K&9@+<4~V~x&i7&s82$D3hL8P=?!@%73d|w3e;L)1qMKUHUli0@3z5ur5&uc z0c#Hq)}BzGlVFV^u)G@rqv_g@kIt*li~9?N)<}uTn83jnS_cWVULs5ahYC;Y3m6V1h;0ctO{zxx}Q*l)zk0*VMq#foXy1ff<3Bfmwmsfnx%5puP_E4XAHIeGBT_ zP~U<2F4Xs+z7O?-RA8Pohk->lUF7P2m|+fSvfHNXvv#`LhAs-jY7Eff*dIx{&K7ie z=FQ1;jMrm;g-^k~8)R*|xyt!X$p0&6cBFa&k@JI*YAF!Pe)w z#H7qEfqOVxw+2#ym4Q`(+XA--?g-o&xGO-G@Jpy)LH!!)H&AJC;yb9{L;V5jk5GR~ z1@292t_N+l)nH2jl@QFp&$AYdubBRfruL8evy1ov46Zkgp zUEuq`4}l*8KLvgc`~vlFsN_R!fw~pyHfSB7IiNYADbUnZ;I}kgf7x_xg{C#prJ0g0 z&D~B{o6uEQKy($lq3JeVg+8LI(Ch3SJ8@(`6SSBoEVJYWJ za}g+oQO=iEkj+=Y7gDUUu#@1cup{S7^W+kfGF=P%5MPD67FHE@E37W;Uf83sXJN0x zn!?`De9-*R0?-PfQE5ZailBv|6+?@p3j0dSSUAAqt8g&1k|xWjm8JQLw)53Ce36^g zShx?gQpwkT#FryNT}8T}=Aaqrk@TzWSEflm#urYq zn3^bB5$VvZx9;k`k=O!W%5Gt`}f+&m|^hQiZEISt|=y72Z~O zd*L00cNX4Ncz5AFh4(`139T2j8fc`r`atUotrl88XuCn{pDMgBP1eJOj})%y(5Y}8 zv;i4p4T4q=Z3s>LXhYl4Y8$kkcv49oh(J1os}$_Jp< z_RDa)#y~rmX155mL)t-W6VQU>WinoC~h**(~wKnwN= z_6+t4)&zS8`vm(2YlHoQq_+--_8(~Dpfx}{0@`?J6QE6mHVN9~RB(V)X~87V zN=A+f9&K?oRd6*umzb299Xy_Mbxd$haBgs3aDMRE;DX@7;G*Dh&}KrL1#LF8W1!7} zHWwOsX7iyP3vEFvctV;h*j$|iZD9siw8YyQmC%;7bJaFnozJ=1tx=+gI5Q|JmHui%@dOPI)P(C&K23J#o2T*8Brg+CAiX}D<$Y!noCU5 zbyx5aPS@SRdxG}{R|oG4-XDA*_+ap%;KR@WZ8@|R&`yL#kw~dWF;VDzq~tU2hOw?pcoI{Gwe=$i?Tkw2L2n zKPYAj#{_AnkjOflBl3wL>zpjI{GUolz6^e2f%UZj>%3f2Qs$@NKOC%|gTDlS4gMC~ z9Q-}_NASAw2Po!4DAwVmqNP?+U3x$fOcgnxJ7~$a#~=8bZA#)fJLjk zZLqFy2dhoM3Xz-D7z#nV+6F6BOkjCegi83u7XfM4Sa(ueQvZbFp-N#CLkR&_BViJv z0W4Bm*JZ&KaICON3GE!(RnQgcD(Jc)mzb348QPub3iS%rgnEbig!+bRL;XU#h5CmE zK)VUr&CqUvb}O_Lw3X0SLAwpw?a=N>g$AbS8e-E$y?{G2=(;;i*Xnk<+J>$JIbGCy zx=Ye^a4u&n)DRN$gkwT9Pe@AZ9uCMP!PUK4T=`#>h)fMlx3HQfu(~gol$4nhTFkMU z8=4oIA38R)Aha;FD0E!t_|OT^9)R{Bw1=RPWqbtM8fa^w(b&U!Xpg2sODwEB<3cNJ ztjJbAW@ANhg4z>lte$Mgs%@~kkYhzw<#CDCrCe!kp!JJ%iFrkuVWBz3Eoplgx+Wy1 z3CDzJnvl@iKpnjhZ5%@5^Bc3!3Mk7YC%1-HS!}HoY(14rOv>CHTEp48Cv9=F+g656X7DvMV4 z+XnHicDCAvtyei)uR(iFvh`+8mGwdBW6KnNB)H-W`$L}!m6g4)Kj7F`GV)dETZ^l2 z1Xpk85|c7NhqiF8ehK{=`Yp6M^n2)!(4V2dLVt(;f%Y!6_n^HG?E`2ZLi-5X$Iw23 z_9?W_QlYJqt0JXH4R||rDl(vbp25}E&}gFj5kA88eLGlf0#;Foz$z+&_Js{rQG~!M zD)ICxDk&<5_9fqMiSF80Cce4?$ zqFsxs1!+ay1Zh9yl9ze*E*eav74<3VTU1-ruV}ZT{zU_db}t%OL__XBLHilnFVKF4 z_8YX#&}e-14`_cv`zuvcC#_@Aa7%*~?FsGg4C_b>%PkG2cW4K#Z9qGSgLW{qepwveAN$as4DJFY<*nxnZ*`4T*Ou-S3qBIy`?9!*{eE{^`p$~*U2s(XO2fZHpkW{!{ zTE*}Po36c}56!TOv`>#s*BQop!POz8dMH*{1E=xQeHm^ z<#kN16r{`_#R@0w&+uR2zr+88w}iKbw-t9Nb`(3I&xJk@`h4ieLSF!VA@oJikAr?Z z^b=CWsx*tmX0gjXt3#(^5A?+uq%DOmrcH^o744+832DWpL|QR*vzFMT6~~CQ;3eJ@ z`Nd-)cqBc)r!8Y~r{XSxv*ONzvt>j{@h*ZhWOHWhmmIunv%#+7?!~&sJTB@qUO*PFm`+zAxBkLx#GG=OS@G=RxfWS-1X&m75|d;tDn5~ubzJfB z#U~UmE?!c+w0K!DikBC!fPN`-GVGT_zXJM|(654iHS}wsUkkl4ReVyKtkZ3>h`8%A z$fBt$o2;AL$!Z(2uHa-*(_Amfx`xOKm4rXw7Y~cjkGAejY~56RtHstWf~^}lB(&E( zv2{~6TaKBMlRJy=vDms>uyso=F)8z4@e`b_hl(FAex!I!@!H~b#p{b7Eq<){ap)=N zE1|D~ejD`Lq2B?WN^lqSyP@BcD&CN`jhk$?o`-&KhHbnr&DMkMY_$zr=fBquodYd z*m{~EiF6fgZOUfLJJ#kT(mi5%S`o|BdN!Asl<61Yo>pYHNdL%y$nKGWkwKBck-A8I zWC(Q9K`%gm5&BEeUxxk)^jD$32K{yDZ=@o&r=|9Y*q&BoALwspu=RGDt@qm5Y8$q= zrxiII`dgAM?rF8Cvm!@EEI%t^`C0F9K&A<<-p%I9^^#;{cEs|tB9@=^el9U7vnay- ztjKYZ<0B_T7DtvumPVFE5Lq5s0sTYhA3^^Z`X|soh5i}z&!K+-{Y&Uyr6OrRD`NXu zk+Y$Ho#AJFo960=cCOlnEAD4Su7v)Lqnd z-p|l~f&MG>-=J@X{yX$Pp#KT|FX(@#B55xxvMKUR!AaW^*&5ka(xJpr;w({0 z)Do>khhe~AFiaRO7zHrgFg!54FnlolsS+mrt`d*sca;QS1e!=Qf>MVW;dap41hf(w z*=j6_!zi>tE2-pu*DU2Ke$mPdIEt-%+V3jaxkLoRk0~K%i!cijBqiMhW<^<;`Twvn zDd|GTcA~(OG?TNC>cR$mF!+Juw+ol;F7wM`jR0fLraF0P_`v7N@0}2D2EY+ z5raXssDP1xQJE?knMP}rjn;lJk{M|2ltydkcC^|Ct#KT!1{fVBS`!GZl8J%Q{DRSm zuPYOG(qSdC$&W6XA#_;DbO9GXyr6_;4M~S}$$~4O+#$v0l`OF6I#$rNOD-`fv$*6` zPS=u>r6tQsP_n#aMahXJCzYIBate%HVN}8B2BR8AcNjfj^n}q1Mh%SKsglzyx;*1b z&bH|~A4Z=h=gX)~)78J7uC}3ze67ZkYhm=2bX`w$(K&g&_(jv!;t)`NZ&F;TlG`k{ zRtdKHksnoZ2Os1zcFSfk_miyD!ibWrkx&{;b;>A-WiWaQV9-z}~- z3$FM{2Q7+8nJuM^bG5Z(TWN<P z7{(!~Qd8=zQm@5TX(5b^lMamkq;*z9yUuD8u1e#?RVn!>@}z^(Byr{6yR;L(c#NPy z<6Qhs7O|7vX&-^s5&6jMUOJM{DjirlsB~~? zU1@#kkkX;0!%Byjj({-%#zYvCU`&Q_B#fhAOo1^K#?dgQrAqfmqqUEX7C|^Y!yL{^ zqcx`;t+qj{funTUj=NF8bG@Hn81ePHonN~W}0&9i8UX0!#Ebk z0vHQnEP`>-;YdMGHPJz~nEVKenxu;<1>e2@+w(b{fos>&V zvbDDKY0lQV()Fc}mOfVcc+w%UfR4>?;O!8l*C^(j|dpOt>jFBtT)UufM)ah3ZA z%SQjM^hb*?aHUq;&<1D`8v(<7yb!z_=C$y(ZVexE{t0sWP|Zt1M7fSQhNi zsjLXbjTwC10%IkNReT_|{d9x2aplWsIIFQN3F9Uku(F*9u(Hm97x)F^X1?F9xGy^| zz^;{z-mR>M;H#{=;OkZbrL33WE0x7pVF%~zCCS0oP-=$&TO_A1-EY!nRYr``qQZW#B#xEIE1827=rAI1YP z9!!;umb9roENxase!o2Oz%dl`pB;E(JkqYs+C-a`P3EwXe=LtYD4R;K(N>lbevxNS z(?R@}wv%PE%d9!WGBIaptl@~v7o4rl;w+&2Bq=$r>?BUf@nt8JEiPM9wzOrp?+S> zB_(AZD%-%pdbsS7vNdIE%hr{xFMG7?v9ia@h@_Wckbm?ljMrei4&x0NZ^C#B#@jI7 zNtJC(gY}FJ7HQXaGr)R34c15PV6_cc?{cu-gYljOi@YluaCa={7Y()ZJ|Nwi)Xx`X z)`Vf1HDUMxM})?(2&@mYzzR4omX!Qd_NztKFM_O(bBRfrzsfaE*576Slx->7TDGmc zL%E~eS+10;Fg}Ix84PmwzJT#1jIUsP4dWXa-@^DVRjylPdB&9&SY(y^V0>?rMcdXG zKc&g~wVkXsA*;Nc$SRM*_`xQtyn@IoPxvsj7g&{bX|==v>}n3U;XKAh+(A5gw~`M~l)<%7%X%InLA zln*T*2IF@af57+?#$Pc0hVc)KEiksi*ap@iRX#%Mt@6EXy7mQgH0dp-NV=HbPFLH| z^&d{xI54NAYkY3KRX(MBnnl*poGhl20xG9LtdU?^Hd)TFq-0L{e2XkPb#-qrBbS(z zIlla4PSy$Ki_4dkFD+kIj`HQ@E6PtSKMBkPbAc6rxxqYOUN9e+A1nY?m?}RdP1cz< zS?7WUGsr4RlND(vt8K`-ij#FUSV)r9$X%_w!cl%fIfgHv7WcGGEWf2(>`*$UJSEr) zb4X|ui`Xj8V$1)g#N_Vs)fQU!3baacNlBT9%Qteg9w}c_zP5Z_`TFul%O5L$y!?ss z4Pa$pwU1D zBw8O4T7ehB@A8X}D)0q~{N9Atm*rxQ(lO;<3$(g$%k~{Nh-~L9v;wL;NWJ{$^4~1B zeidwW%_Sz;`a7y~w*D#KQogl(TeL&e5p_nDs2bJ4s=&H|RfBa0>jBmitQS}fSZ}aC zsi+~%$!04dp z;Ama6J~|{iG&&4y5ZGX_I9$gVVF?tf%eqj599RPM9*ch;}U}K^U37i)(dc8*$D>a~H$*prO#+(?b|lzQU{k=Rf*lPu4Qx8tj8v4ieBgi79?|FA zS4LkT!d?QKnL*ewQ09Zp~{g!vAHCr%+{F60oxYq5Oc(w zF(szPw3r?Wty0cj_O(@4ogvWql$DsIv^#=6F=(5x8wTIA-OM2N&_#&9Iq z$=Pr@UbiWU^^VmFvSNJ&S*PX_lQIKidk|T%L9xNHx>$W|NNi|qSZsJ~M2s>!9qbIS zGr`URI~(jAFfxDVft?R_K`OSVMV4n=Y_v@lnb8YvvS|F2U6Lm2@^-S?hO8qvS>wSj zl4MOHvSO1O zi!8Vn3b?MwB_?H-#!lyOEsG(xJhmcsV(g^Y$+1&nr^ZO3UIj)*{Ti@q!5YD?1G^sV z2Cy5!Zc4?@NUN=LZMZH3yE#K`-I|7LRXbd50~h&OjWKGMTO?dJ5?r2R{iFB=WtCVu z&F|^{Vr*4RY@RhHMw@4m;!1H1beB+EE3?_E{a$i%U+h7Ptp@~Kx8)L(GV5ZSI9uyu zkH#L0Jsx`^wjs7L_GIj-*wbKlfDz7jf!z&u57@n6tHJIAyC3X=iR@<=k5ohaTu!kgDpK+7e(wSqiZ)0ME(lN2`1y_#{AQV!{Cls?oN+lq_ z#VkK7X8Bob^O4ya=YCdfTf9Tu5qHLwxEj~udfbSUpS2$BQLx9r9tV2@Yy%j1_fLX7 z1@?3*p7yiiwx1OzKPw{uf~5l>SbG3O+r(tWxt|p$KT8Hc#JQj4neSb}FIqLtkL?ln zw8Dyaja!~p-14+|2t?fSw6a4W0_sgRTk+m;%hQTmo)(XRXi-ec42*M6D?TVbI9?a8 zj}M6tjSq_tkB^9xr}Z+}D`2FCUITj_>WpAtV6>{GDMz&;220_;n$ufV!R)=%Vz(<*7c*f4vQv_$0IxV6$SE>;?{U-FSz6Xz=p<7?yV;_Ks&#vhA6 z9)BXfA-*wAChs?}&0xQS{Q>qT*k53OgZ%@x1#D|7o?dAfw^tg*Nxf}r@~_Nv=!4lF z`p`z|imx<`e+aXK?O(L|1~d4godv9|0L{{NwbdqSt0F;sRaC;1 z0T30Ph_8yB9Lp=Z(7=OPL_?-#Sd2S#^Hihi#k4{JEg2w_qoqTkJutlnW^ z2S=a#rC@DEf5BJ9Zi26}T!K=ju3~S_SAE5hilG(5Du!2#s2EwXN5!5Md%=vtjKPe< ztbmz-N%cs=>(U~%+48nb%ogt;%q3hx*f2#0gRRzHdai6 z*~M016-RNvrc_Mj7tEbu?qc0ZferNUEL(kcg$R5fQ$d06gxIc}6cPAtR%Ia;@O_;e zT;6Q)L$;&)XtT>00c2dR36{l33T5(#%=@n;GoLO;J#n~`>!t4dJ z24-)VePH&5Sqrlt%-vx2PgR^N9k7avY)y6<%mGafm^m=5$?DocYa7sR;-K9Ob9V_^ zia;x(!(RC%4k4q%_+1qu0)9*dMZgnegUFq#pe;i0ggH1HGPm5RrsCm> zwH8}z1Y7mF#AH@aRJ_31+EB5v;>n7qDxR*`RPjv3vlY)(JP&gy%waI803%?Mh28_^ zo-j$fkp&)=s(3NY)@wFfZ^7IrgROnjY#q?fR@<=kIcMt&n4=|IUlUsauR4-nWI@CU zKK$Oq)=w2827XKh#lTb3?#Ch7EZEvVn=K~e1S|fo*lMx0MX+^XE-{;}gqrXXTL~?p zCyWG3m*+hKQPC^Y)B>i(n2PREVdFQFptQv zkQ35uO=@SWP1s7%dc(#6a70D;xyd}M|s_)^2f(8RFB@WhD3$iyCrJrjE+_D+m~c@)ekFv)%&4RadI z=`d%&oC$Ll%-N|#dZ}UJz{oR+u^l=k2*6`9u$s$v2sDqSU-2WI+J-LfZ6$7oNpprGm@C1(E#<242g+3mnlq&1 z2q_-080N|3)_0aoes@9y!H-E$5Ikuv9@mh#UyMqemd#h~%Tnx-#5!RU6KjR?IwO~u zl-ZDYk<+y?@nqtu#M6mQiDweeCZ0*uBx+)7Q z-Ibn7ZzYXuT?6x4n2j*6gLys78(`iD^Cp<|mfVu63`jS=GF(~g+ti^`Whu;CZLBED z##{;WcD`RL*~B~AxoQ)xDmxQbmGpp9HdmEhiL3I2<2ioO0!50O=eM*)tn67S0^r9~ zQUE-WwTj&F%D%#jzb#v1xoVPwJ2e}IsNB7BuwblmkYMc2T=J5!;g$Pw#zs_*tlXn= z&&s_j_pTgOxliTj%6(zp4f7tD_rhEa^FEmO!+ZedgD@Y0`EaUo|1@I-=cmcK#3t(sn9paB^le<2zVmvC634gf~=Rb$zr9Fk~Nj3x>GlCFWKZZNwGQUm?UjZN_uNEIp)cJ!kzy; zn=aNM#Rewp1YJoQ45Oj*KXZvmnGwnTIb9=@dnETv?v>m-IV!nNa&&Uv zRls?hlw6ivVIj7hBj)ntl9V#1B`@TNot``+d1msgI@gDqMhL)k=LZt zm3-UxtK&IRUhl)zwaMvnRgv-<=x=ED;VON zj?k95bk`1OVrz3!glCOOQg{}z)s6h8DZy8BG~Ha6m0d#B_?Ie zjv->JqpM>R2S% z>R4)Nt&TCccF$mIP+Du%x3kqIY;~kzt;UYK!Zpxlt7A2>)nbry$37kVaX`j&tQA}h zCO|s&7hKh4bLAW_85!Jhh{aXC;A%)NvHy>~^MG%v{QiFnWtiNJvJsFbO|#d{Y}%v@ zML|&ZENPQMrL@?V<>UZvam$|KjELgi3l#@$1rfw8iVOGF|9S36lW$7xx8GmBy4*#T=d z0jm}?qgAl#5iE8XdjZ*?Km<|_LH0?fRXD$Jkqp;D39eHyvK5{w1;jC#aCN$HP*_My zp%y~nGMTca5@q9CvsWp*xbRv+*(HUS7A`Nmtnl)}D+;eHysGf(!fQY?5j2xPGZ{2f zK!cKf8fcKC3ed~|O*B!sBI&)>D&A`&Xev{@S1jqhX67Kv4rG|u+FW=WXsT4m?vNrQ zJB-@S4wE9IDDRsgyRYy;8L|f?$l}BmJuG>!>P*P;XRDk%QTUY1)((lSS*@9=HqRHn zN!WU!a981rg)bGpT=+`itA(!>zFznSXmBVp8#H)-%mGauXzD>T7c{4XrU5jKiNf7U zw)QD(y$hPA6t?Ck*;<%mD?4mqW@~fdm!O%avUQk5#-3Ci*)V_FajLviQ(c8W6-raW zk1PB|B5MI6a>P`Zf(Xt7A`32^EVvf6#pWm-5nMWrPOGDIw2slSI!?#y1RV;lGeL6} zXwC-BIiNWgG>bt4pjiT%rJz}s&?$nez@h7{>!a(Nr_-U}Ixi(KUIdy;K_jX8%W_<0 zg)1FVTskvou--wchtLtlrL*TR(K&IPsJQ^giJA+^IFavgE8k(ON{UY>6~vFzVL?1< zpNlcL=|WO)yd=|aT{3M@_-Hve@*NhcUok{?yyU}l!z3Sed23&x+KkjqB(R;V8>Jhq zJ4JV@Zj5fMZk%qsZUSho1kF{Txf(PWE3XC33eaEvgJw-aH%V1ty6LhH(^Z0I zZ3=9-CZzn%hGtWawd}BlnrpKT1Is#wJl=&8?ZKHp_LZ2wRuwF4tY5yHayh_oi;QZVzbg0nNRjxeqk=gXRIy zJP4YHK=UwY9s$jx3Ekc#TL*e*bnju1`~WnMrLgrRbVfh@G#NcUlY=WeaD7eSIt-e} zRk*$*LGpX{d9s1#2{KE#w8y7G>MDr3-*i$%{5Ty}#3NoikQ05Lgx6DT^t@ischeuOKStkO-$UP1-wQO)fd(7-0%&%D=0(uF z1e%vY^9pEQ1j%irOOKh?*A>99zDx6F(s{j=<0~tC=^eJ$f1=Tv`!~z;V}La6|H%QmVQ1zifo`c zNY<*B_UO9I>NP)GFV$#`)1%Zv*Yz3kKuaXobtn_BE~^KH2c)IG^cU(ckvY3q;_S=T z?A2plsb5DpyGnnx{u=$Y`W5<>`c?YX`ZfBsp!pg!=zYHd&9|WW4m96`<_FOH2%4Wj z^K(LvDOK{Pz@fjc`_5if$Qi1%Us5>x9Xi*MIqs0NzjB;qhclF0oAq~t=2w-o`;fDN z+w>2R4a@04gJlV1kDU3{YyO!2N!g7(A#wHx;p8cavp-wlEQ#lH`du^}F?Z^l$0+>fhGy)9(ju2her|Z2@RIfwnVfyMVSUXpaJ|2DI9Q z{y;K7e%O7d{$s@JAZV%P0IB5&URr$rAGAm3@X8Ke-xIuk04=TJ^)qo}zvzD@8)zBO zvhp4i6cK8IOWFe~yRW<@^G9;aYd6hzFr zKg%;@!-5I&%B-|cW+;lvi-yXC;Yx%^SRp#2qT`7V)9Nw^<2!~_P(~DulHod8f~%-C zGu38X(F_9D_@W6#6N@GlO)i>JG_`12(e$DU&=!Lhc`zX;23l7NT=-x@&QNH5IkvLH)&j!TLeRQZw$4Phj`(c5Xi3p|GFQtat~>;g z3nZ?*nOxC3R7Nf>x?JY!GKnjHYi6p=wMClq#y}efZ8d0Tf_7HIkd#^my-bz? zLuXA&G@P9zt1d@YR>(3CrDZ^+b(%t!fha9%d&l);Bl&uK30vAXvsG@8m6kzPTD2J3 z46@RilgU>8VU?2+23cttWTjQ#nwe@d&OnrwVZ332VWMG@VX|S0VX9%8VY&gqIvunP zplt+g6KLmwc0OnqfEMHWBG8_ZFeH_hK~Y);R9a`IuyuBlt;IREvcncpS_Zr#XQ^xv zrNxclMv@H|swVS>OZ#TFmKbEUWmqQpt#b$@vf4T~lP%^Em6J;ivf47pY71I3Q*Ev_ z5Vd7kVOVKcWms)kV_0igXIO98VAu%SrJ!8~+VenrK4>oh?S-Jd2(%Z2_7c!unlL2Q zmO)Wlh6HG_Jc9fIOx0^IPqKAYj;-vlMbwtze$ZZ~vPIMuzH+vNY~+=*i=n=V7qr)cb_Hlxf_4>XSA%v9XxD;v9cb5sc0fRlC=W18ZQlwf!lXzztiT}bNmz8qIs;i}k!Torpk zyItX`IDlLg2lJPZ4YYS6S7e8I`IA*j%8O;CRXju@>uwBd#j?`6Cxa|rYZ??jF75eG z@yO!QGG(JA%In})xS|+^{DYu<2(%A__7TuN z3fjj&`#5Ny0PT~Y-H|A+Oj0&emh;84LHkq+WzQs?*K;|@vIE&d0vRgcr&Y+#BF<|* z4ix(l=e3m#6kVy#YiaTM(m=8JJP9#U z>yl*M)O}}nTq>^^9o+5|vfd((e(*gy^k4gOXk`bj`w3bPfOe0H*29R_5%Z?SJBpu? z!FpN(YcC<>SqZGSGr{U&S0Q<^_!SwfmnE?Fw`Qi=>@I$vfVHRit>V4KZx`$->L(qN%+K)l|31|-{ia$t#bx?6xpM&<(6tE5@UDlU5 zuCl`wK0(}E{0nG5Q@Q%RHLi>ujh!W~jGZK|K1V=|T_vu*$mA;jdW8`qZR8}bjI6}f zSFM?;Hrg{1MT;q#Ydt)g7zoS zqHz2rVLVReik@yPlDRUPK>Mr06&WGo`ZLONo?InFc2+(x`j9K5AGBEMAXU^GOIqb> zuyL5o)liA6KTweyaY|Ion6^*@(ZQ`UGSVnZETbf`sJzz9RGaZeBC(7Uj1!HMjFXL1 zj8l!%jMI%3#u-3$0IDNU1weHIsxwesfa(g=Q9x;c(k6^aiDgtImT@*vY7GQVNkTCy zR}`1?S6T5_Mk29{i-1x~AdEy}<@dx$h}+`nD6Yt+mIxY`8fAfHlmr&VqT|W$iT(;d z<((d@ubMX}Ue`1tUN^I8mdeMaMmd{hl(JbA-v*OwjU<_6Twz>kTxDEsTw`2oTxVQw z++f@YR5zfG2I?4~x&ze%sGdOe0;)GqeSqqlFe=Hc0*6saW*HMe^=l4+RR1JW$K{a9 z4pJnUWxOA#V^vp0l3BPa>=Lq(in)uVT{Bcq8s%h`QA%b}14uO6NrE6XFoP<-gH8o& zmr+h;8Kq1gZq65KyH+l>rq7Dv~fI zm6l0SS|&uWJO#2LN%wVp4zjF3W+F<@Ewc15+2oan<$W_`gH5v9GD&KS z8cHCM)D|@?6SB@XsGN*6$!g0at1VJ6aYQrKX1s~0Ez<1 z)z*nXodnbfphg09GEk#{8V%GbK%ENIn1m^*woHoJGNIZUn-UtwC)t{mV=Fss5w&GP zwKYyB*0j#F-n7BA(XhL3op z$_KJ<_F6kk&q!lL)6-;(NYxNXo|V`-Et9Rzy;M$KG`%9T^|HhkDVR8-nQF7!^gdy0 zkLfMbUenvAeWv}UcT5LN@0#8Nst%}npymQ~I#3NjH3HQH)I6Z(1GOMw`XI^HL4~c) zfm)ct))`5*&d#xw9kzZZZ2bb%B9*P*ku9not7>qAj?*Nz$Ue!IxudzW#Fn{}#MYSz ziMgx9)>)ZsbsVU0Vy4Zq+A_;(ixf;8(M+}JZYFBW+{4_{+{@hC+{fJ4+|PWhxxaY; zP>X>Apq2o&6sToDod?wUKwSXTg+N`DFelZPxu~-)e@ULsYy#@y6t#6Jj03C~TRD+G=G+LGxg@9D$t-KF%QDGg=Bkv8G|O7cENd-N zFmXgP)n>ezXf5*u^F;F`^JMcB^HlRR^K^5C8AISzKwS;gH9%bp)C!%xjSi<~4k}O4OnLh{W@f5P2Op^6-YqOwQI$C6< zWs#NE4ur(gRbs1!2_ZWCqHtoNEwa+G$V%&(*349!?iQl7EIlkeExjzgEqyF~E&VLV zTKZcC0QD?T&jIy3P%i+r3#b=?dI_kPfqDg~R}+@w)Octq8Zd^;uxl{^^;$|id;?!Y zlxEna_T<>g3R@PUv@Cw0URT(%5T%91G%u2k6w@r1c1f>g8Elc2mPJ-tZ(?AxoFHlV z-I-pi^L&+(krr8LS!AX4R%>Re&3Fq@T9yfxiIz#0$(AXWsg`M$>6Qu$Dy_GH+6UBr zpxy!M08p5yM_2YfP#*yGVZxGBT9%mu#*ktf%WR-NN+IhL@`9^WOhbK^Ln}LI5vgTa z1k}eWT109UoFM-pZ;Gk^Hp8{lB8x4HEVd33N@TJ1X(n7<#;c$#x5#44B8#m^M%W^AFKc<94T;)S9e4u{Iv6UURh}g2AVEIX9i-@iKo>&-<8!9bnJr>-lDO1Z1 zi!8P*ve^2CL^fG${hC1*_p1uYixydHSzea1TEDkurP}Pa5Upj|V|mN6*YdVypJl)0 z9m@gByB2g%e**Ov(0M@T1Kk1WjzAXx-3jQ1 z?0`kImgN_qk5a*swH7~$+KzMBkh$GnlJ`lptR1bg*0M@ki`F6}R!M8oR0djnM_%E? zN?T>EWn~FlG}D@yYSZ0Hw3fApwWqb0wYRm8wXe0G^;m0v>j0oRpn0GLpt}KmG|tV`?=4-Mcv=(tVR`<<`l_PPLYmXf3NB=spTtR-(1o=W$wa z+{nCcWL9vpZ)R(-RaRS8No~>nFtTy0iP|bylfjk>$q4HxDHU%$SpthJlkvAUHyKIyo6{y z4d|3*GH6Q@tlTmgSpsVT0c#=9>M|MDGf6aDl7F65u65Dk6=~&K)+N^Sq%^#B8A-#_ zWQh#x1!QnYx3EM;_s3PPF15-fTUM!LizZ8C9MMd*xz#ZBC8vz#|qTN7?Kzo4p0__7D?~MS^L7+<#)@03=RjJvsCV*C#$iOl{I=Ms!om(O! zOI(qfE$jV2t4m~9NzK*~%i*n0TIGr@t5mT?htcs^rHU=Og(WiBt|}wDta8PcRjSyc z2e)RX+PrBc6xBu)YiQP@s|O$@LXOXor zj%cXbbhiPo1(L9sI%0yF^Jnru8l$G*2c&VT{fb#Y#2+_wJ~f&XSMS5&^Fj6t1O$Wvf>00 zDW^rZv@*tWm6DOR(UQ=zjgo}ctk%p_oAI{FJmaml3ATy0Nw&$hDYmJ$X}0OM3fl}@ z6lj!Avw^M!dJfQaK-U937wFT0ZUDLw=%!n3IO8PwQ{b@8vei)Q=y`cM8-8|PijZFj z^qJ6c9vK3o3p@A!r-7nj_>iGPV>M0n4Wk?4^K0S@M%KsTk$DSiYHOkmi{#&oX^J+* zE4V>p>gP37#RuaD#M69<4qOZz*aw1TT_SM)Hm}pv+5T_<~7Z# zZ)j}k*Hw7TVfD4Kn!1_NOBps)W1DSf0X<*Q{kC(FN9(6HARC4npclw{d@pvG3d#kx zizSg}yGRmgiwIm;d4T@zj11+^_xf2iyV7=To^gxqD%;hzYkUyX_9!cA%F4y%gwWK%WQn`9NO) z^o2lQ1oXu~Uy`uhmAo77mj|`Bhk?E{ii@ewUW$`yJ=~Z4Tvc*!IY1@0QRet8v)&N@!n^iFU^iRZb4r-j~^WPh#t; z*349!gSKx8Tc6rKvmLU1Zu`RarR^)**S5p9Z-B=8<659s0KF3ERY0!>dJWKPfnEpn z`h@MfBwIf#Z2b=Oh7`7v(^Syc=h(_hGR}S!vSrr*y-{JyP9t0NJUdG^3~)eilK1F1 z=vJU_19}_Kw*!4g!tR#oqNm&aGF|o%(AyQd z@a0MRuB7L>H%C`?=sJBkRxAyPs-vj+F(C-2LKF}Wk{UOjF0sS%1p8$Oj=uZ>& zACvCuH-)Uffc`ASeSMxJ>&qNjSs}|oAz2O@=tBxw4i3pWx>v{bWWxekQrj=>lWaM9 zIC@KLIeJNKeSz-hh|9z%kT?c721#H!j+4Opsx3Cf4mX13Fgi>Qv%})BI&2QR!{Kl` z@NvRnpi$R<3-otDBWFJV{Ugvn0gai)UlI;cbyY3kRwt|=sX1Ic=|p^S z0n;W-UXHBnkaZFv3zPBcj1`ViNS0%C{)=P-`gg21BRdR?>eB3v369A!S(7BP{zUiV zm@0X#%(>@ydcO)+)De^6sv>YP`K_6$Hm5n}5x8bMY8`VNb&h(+T*v8-21lc#37C$+ z6ado+n9jg-0j4W3M**V&Mhgs;aLiA_b*AjK9OnWC^C3S^6_%YTtx&synNBa^k7ki~F_$Prh3R1w+a*dk+v=`_SjXp7A) zj=Kp~3CFFDt&ZCq+Z?w$?r>~(-08Rrn4^I?2AJ-^^Z=$OFuj234NMgdT>0mr&w3P?W1E8^Gk_%ZRuGqUTn?-3VD$pQY8Np5Rjgh{tgwo4IN78k#=-Kw z8LZuoy)syDNnj1cz*c}$$ln3^nUmhDV7=@3KnCl539LbFvH8^T9Rcez$05h(jxQWv zI=*sz?KtfC#_=sMI$-p`6aj;56a!-f#srKR7z;4ggyVY^tOAGd7qb+>`U9Ahi7PN3 zcAALkJ3^KtM^;wIa%zw)C&mwT<_af+WC`8)m&pd5x{|dNqauzyuPQA0pX>cMLA}}6cyukQ?@dFb8 zCJ0OkFd<+{6Hb#F*qnAbusPkpl%)hVTnkVMY(sLKWQUUo;iMdxu;PK7Ly?nK9%wp8 zIHeM>aZW4&!@yRKLCSdwkxb0s%z<8y4^&FVJ10pl$T?AhYiMg`s!fISG(y%4XVh8g zta8Sjac8x2rgN6F2AJc4!9xxQ=0spl0tR^<3CzjBi~?qK!Z}-YLC(3((@AV|qRKiY zCAN(PW`Z2sCg#Y>4p~6RS^~_eDp}_tSsU@Cx_0ZbH_N?@vhi6xx3B^}tEiUYeBn0SfoOBTz%mD(D{+`W9KK%gU(N#pE(aXKL=(GFm=Gx12Y$x(}8IKrV$wQQS*SA zpKyMebYI^pT>S{lf)w|)D9P2CIj*w8m8&Ci<-$?%+50{kNin%big+c7Bw%81CnGh`3K-Y1uL9RlV z&ZT!1xeTsi7YgxnfWhp*VqgFmbiPZ0Sq98`z?=`v1qqi~byzNk43-NO+Jz|&>*6F> z%X4652dr`e)?i>Tc`nuPxP~EE$Htkb$p&3lkg5i0-wf7BmsAZl&V|)rsJSjd@8ddE za$1*WfW>!MrLr}_C1tl_F3fHrTbH$FrrOMK%_eL`U6rmXSIiZ6Rl8=oX1QuyrvY;X zFjoR|6);x=a}6-p0Wj;-vlwS=&R_xxIw zt@DvBW@-KsYCAr*!67#;zHxfWV;k3Um#nv3vff%x5V=YsYeObk`M0W+taM4)t(Xh5 zTS(TX*349!O|I+mjGJAXfw^w8YYQ+~+VXlqk36=ZXa3}Z-maS$=Rv*;m@O4td38-~ zJYcig#x=$p8f~?UnruVj^W(MkbK?!RNn`70$CZ6~v@ve2o!d}!S@Z^`N)9?#MG<@7n6R&9%*SJ1{o@b0aV}0dw>9uI;YdU3a+70GVIcWb_u=J(qjmG6jp@ITJpk6eZ+1NlOk(kslkL@WEU~ecc@Bqq z4v)K@BpvqzFk3gfb^vpm)XEXj#-@|%>KD|Fn%6|C3CZ_PsEIYr8Wf&AKoZ5O{j;u@ z^NcsTo^w6#dcn2J^`h$~V6ZE2T)!QdJAuJW;oUbDxLmL1>0Gb7-sr3&&nlRENO}h4 z>_cQqBFkh_#y2clg(o^?Fm_11VRU^>9hNzE8yT&_i&Ik-FON2iuW78Qti{5{9;7fb z9vfRfcLcd`N>2{K9xNPHc^dZa@F8RClV>1z%;@^YnkMYok~2JT0Bl2)?79p zeDay1*F3=D7F}n{UH2{m?t0JlzUu?mhrrwi%>BST0L+8flM}0tx740u@h=!Mc~;#5 z%fj&%`x$kU%Y8#E_LD8*f-#flowCR>WQgU&Aq{F*9ddo1XWX<2$;_kkm^{|?mFqC+ z`>%m{WV7oVU>-|{_D2QUM=LmQTcM3KVtr_%bzxOh`XBX3zqmW(8EiW&~yXz0v zpRT{$dG35*9tQ@m{FA`ol}DNTG%(Kqv-4(mM|Xj{le@FKi@U4)D7OZfXMuShm|eiU z2n=4~mw|a5m^TP3JsK6Fhd0INr0_hYQ7U95KgBD<#o|rTn%Y!od(Lf$SH~L~;xV~U zbwo{Llf>Ax#;V$yDy%}aL>uB!w3WZfQi~r@e#F+|6&!{WG&ja$5&Y1!`uXvO`3R}> zd+Fl2kIBD&v%5Pm&n;e3!5wY2Mdr>OUR7Ubjn180ga5^Tl0Vm*d=3-WFC6i66t~Kq4%K`vgTl3sr`{Cqf$rnduC!a{F2XDA)&uj(W;de$D(N{kzHn}| zE*6hTJvXFLZjL$Mw%Luj&es-CJH2|uYek+9}x5w?zGhXNRx-k{D z8<@AQa|hg*40{`xeQ8X&!wOS-D!9Nx%R*92YeC0XZJ86FgYFIeVncjxeM3`OZFF8; z)vPh`#zwqrPK{TGyw#N+yC?3qSGw#euGKwM`NqBN_{M0|>56*YqC;I`!hM2!c>0-* zaF0y?!D#m+MA>~xSDSl`d#rn$d%Sysdm=FJKnEQ6ybH|xz~IgLF)#;#`Rr!*WcL*J zRQELZba#b&hC2!j4v;X*{0lID09ycTS70e%yQOziwQ^DiD!6c4Z@n{SSx$)7H7X%v zcwKe9buK|RwXHZ|H>{4%j z)1s}O_8H1oe)3OuXH%=+d#>`mpCWs0ZK@RFtt9L=)yB#E?v1GzXqobjhyIC^kJn{3 zQugrf3*47rRlEB__eJiDf%yWMFM;`LOTk3YqQC$;o}p%X_(P9Br|z<`Wz7(aZ>@bVEuPsOhx-yyq~ zYlyc)aea9468Q(K@-E!8*jT|GbLN?L^8owV<^g9q9B!X^fYwx=R=}bBS+ePiI56D421h%t!kWbpwTZi0VwS0`j?r)@H90jaaJ;wLs z7(W23QIGL+n~w3jm`9HBhx<=AUJDvn23Quah}c2wC>?_XR;q8v?C^iM5&tjvO}*D# zqTf8g?xhd(ZF_BI!o+BzN;^=$Ee@c zzb&054iabP8E@wXi-n?2)Qd%;K`a)HqDeH17SSr&M7!t^ouW&0i=yZey`oR_ivckx zmWUy-R4fz2Vni$#2a7|*q2e&{c<}^rxOk#?k~l&fDV{8j5=V=th^LBU#IfQyalAM| zoG4BbCyP_Wsp2$ox>zC35TjzHSS7~9xL6HrPhfiki|27HumgZS4%k9q^}rf{H3Dk} z)(Wg0SSPS^Z?&Z_0K1O#=q#~DJWZS}){1k)Ic>C zI8U4}E)W-ri^Ma;GsUySv&D17bH&9Xh)cw!;xh3(@qFA5;u$2iCe_$#T&#M#hb*N#aqM# zup5BA1K1~l-3{!g!2SxH7PtYxxqur2+&JK>fm;aNrNC_fZX0k<0`~@R9|QLz@LhoK z4ZI2X65vMyUjh8-z%K#*YT&O2{vP0;1%5B^hk*YL1PX+HAXq^t17QpZF%af~a3Kh* zK}dk`5C|`U@Gc04p<4&&)(yH9LN^a|J07}CfNry(+al<8F?3rC-L^uvhoRex(Cq+p z`x=h!2uB|cN9)o=n|Qk%yV+h9+}WzOjny=gkFE3D(0>9dOT^ZdO&GazxKB(Ug@r^ zu6AX%%IkGH-A=4*^om&D=<&OqE%jBr$}U!7ho*=x@lmB!{o8#3{nc^1-{FsCw8}4H zu_eYgzvy#_4xhv2b7poGT1P$T)Y2NYLuu5&b~h?+kJ)`Lr#qujZqeuT`TZh}f4qLD z-|2O=(5P5-+!Kr1qiKzLR%z6r_BJXO^ZTkj4o_7^qtbiIhXW1{|>F2iCHGRC+lX;i_VOP zq&GILa$bPE3Ohpig>}q=n(8LKk`N%0KSaj$m@bgMx6vjW;t=0PhUY}xr)2j=*G8MF z>l@}YVnVNK)R>7lK9hft@|iJ1PEvpEuv;CXwJ|o^HfB*HrZH?IYAPG>eO;U67Z%hv z%x<)$ot5NR$j|@b6Y{Ax|MrA<6q9?zIOXK6v-FMR{HYW;KRV5|wHLniH1N z`C{`MYUamdLoh)hCoe5C7sMLz_2Swy;4i#%8?Pi(41&hed9t2M&+kX(T17vrqDv4r^4g5Andhq zi}We-A-BG%zP`3<7N)ElLsj*2NWQB!ZjCirlRvjg)C`GNN9Wb1rYFSLlsmZSKNuFO zoj#8<&9CfHT2wZU0m>^8cOX=SpuQ8(}m{gV&fB~QMPt>6-FU%RZMI_Y&g6q zHC#?723Wtt=k&Oc|7Pu`2s4k@=c|raR;N+*xzZ{}yIU2D`+ZfSqXl8+bay50yCW+4eDSna9adW9s^HF2L+C%JVNtz0s$Bj|4eN4vU2cch=dz1#>?TyP znLQP&u8Ku*M4Hy7ACxwU7}wuc8<#D8q*gZj|QKz)GQOGL7>Wls@=|@Oz`0;^< zH(r_M6O@7~c1*jW`j<6L)D?@PzerVDN>LU&uDxA__g`G}Ix90DTKGJeXz@5*E|=Tm z^Ly}CY$=Zr$1H-^o0i+~oTyyC3GHsw5uc>sBWOjwyPbAFK1^{sQf|@Y^EszIip@>y zsZmO!u*9al8MA1-GA5$bO*vwU`}AYd#o@#Jl*exuQ$C{l^k}tRjC#|Oi=MGcqo%aC zQF!_A0y-R-w_i$6xqM!)2mMw?qtLp_7j@$RES0HAN~5N=zfslBDlf+5BlMK|bk2iM zS5rUIeEFQQ%72J{)0IY5w6{@2Cqx~UuC#cYa`}>t^0-=j5LW4kVFoaLoKvMV3Ts!B z1B!nxiRZz>2bU+F*{HT8@yIi~xWf}myLz*fHdVF1qx?R6;)nmH@X|s@ksGWfLFLEi z!VVnyry?~+X%rT9x9{ddQvLQS@_h6k8|Cph>^@SUVz;A;!$d>NqtvJ$^AzcgYET+A z^FP!mqFuaI&U8VwKxtG>`x{m5#)k#=zq@??7WJ@H86l!yO}l(&DUF(qBj?L96T@Uo zIToKqRn{-GN<-*zbu~@+)Di2An`+{X|ARwl=`7S!I>IPA{Umc^>D*Yl`62s%OD&{Lv8=}9@}r|pb^YfnjjC^Nqhc}g_J9NB_&>V- z^kI+3i%K=+BT3zbWi?ff^a1`QN~2D1Z=*0CVbZ~k!Z+oJEd)u-nzj%m(aYk%)?J-e z73H}?X%xOi)9wnge=!&Dcl*7rw1>K$Yn4{bYj>;gscco1J6@g9RSwbZclr=2tVG5? zE-(H)r8^Zl=<$2)Zg*w6@>-*`YC-!iU^TK{h2?T7M{MZ=iZ}*J`AAZuVx1SN{WR1! zDvesy?nZe;?2u}AW~00=%!1hQ`7-K4555HCuxFxS||twWQ}3rB!FQzg7S06M`zc&nc#l@wX|hI`>~_6-siqH*@6UaQgjr z%s}F()$eq8MDz=pgG6aG=S8s6u)0fW6|@_xBNi~Edr+?fU;Ju`b%!hFx2NZ5?pGSM zw1O{Knjs0BA3;b;N`06@-f;RKRD;cDa|9`vdVV<}_}?c4$@BlnzrA{NG}db3YsbS# zak*4P`k$*Z{5N&Lyv7DwZGBa=)>czjRXZ=H)>Zy{s~bI!D8A{u_Bu={e~fwU%xput z!^EtpFVkTXYac!wNEZiBDvi3Jy^X@wpuF}}W~Tc7p;7n-L#n7z6brF-$6V>DzMV>= zE^2S1P@Km-ViX??rNoUEWE8%H zfsu%{gbt6}fx0uL;Yo29_v2g8zO*R(s?w_E?d>Wlwel~$bP{*s%ynsv+O0I|a!kx5 z#|+7mhO{h3WZdBTIdkjluvGqkFa)QaN()iA`Q&o(_rEXx{^tVUehN}P0ucTtTgJ{_WSyO zbsUHxs1lzmq~@#+DXm&r!PB;k!HwjLu(q_UioC{T!Auao($p9lGPHc$@jBNK2a2u1 zqXv(Pj2<;)4EeiW{#?>){afEJNiTiP;(JB^6R-QIm+qe~3zje8f8hO~EMC9iWCEr+ z@mLKGQW~vwI1^JWzEFOx%vveEIVQa@mi80*%{4L!PXo?d)o7hHCp!1PtclXwUFTSE zPAiN2{**<&Z2!%Tjn>v$>gwxKUJ3m7Ha-0nL3Q+&#S8ln2W);-FvX2nlO9uj;o{%d zptS1E^jgk;YqQ#Ok18*T$}iP6B3BJ_a6~S@M3}`M{MVcMztBb{nB#n84T@jMayV~K zw<<1hX1p%mfX+Q;Aumw>H~YW2IQb&Z=a=TGm7bno-AKYsZFJFpVMi0cjcq5dS0~%P zC_1NB-{u$Gr8mLTB&0HANjkqQpLV(@&Z2)vKTwLF|Mwj;&8w#$w)qu+l()m%Ef-~( z^dFFm3OsTO$Wn)y=a6(h|Cw>{*UC6*b^C{$_~fu!bpGvQ_9H!|bvp3be|pL6_e!JI zwtL9waaVcbQ5;^Uqz)YL`BTk8u z@tD?`_IOfh6)E2Ekg^120xHk%-Yz(Yv*!=bpPs+GdER_)2X9Ajfwz;lGq4+h-307r zV6Ovq3$WJ%djqgH0(%p%Hz&MZ)j6EKv^pgugO#*gGt!H$tNnf{w;oHc-?$?qFJoB z$ov+JH}&(HhAzaZMaaaM_?gUaX{w(&vo;X(V{tNIZ+~EMGGJ+j zJMVF14(Db0OUMQt{~&WX<1RTnxVPAAmZqKen#k{gtN*=v<18oMoX4rfhRp~UO* zdZZ-{yds&ynZ3O=Gu5WVdpwfm4S7qwW!|ti;w|?M_73q5_2O~21A8a1cL94hu=fCa zFR=Fkdq1!b0Q+FVdqR?|kqTL-0Q*o1S&t;idYnwVmm`bJ96hE9MWB^T?|h`&DKf8V zRy~=Tx^KpTz~(+{o&bNEYsz$*S?z%4E%! z$a<6@QYVr1SSDGWu23my^v;*bnkSL{Gx#4eT?(?gaK(V4nl_d0<}vc2~lCVUn!n-FJE~&(nFY1op)gvR;ACI6K_y zIG;5uO^2LA>;E3D4FoNWEib8PU599Sx8yG&8?Y}UT4aYy{cKaOc*1*|4A)i(u2%^q zw@YxnmI>F03NDG)J>L6eyzZ0mdb2e{^|S8s26i8?`+m#HqzbCHpgWKZi$Q9YHR4?}D-mhe`zLd!N2-j5c9wzIsupeiV zmCveXKX`wZx%x@s>R@YTs?DFiqX<`j`SN`Ez7D>Qz5-t-UuRzzUsqs11NIQGp9A{^ zuwMfE6|i3edl=Ynfc-Y%)2MFC$Lgc}%XvCqH(KT*349!QXkH9SNnntTgnsOA%>I89q@&h}kMpgPBQu5Ymqd`o;wean33`Of!U z02~Dz4IBd;3mgX=51as8H{gy2?wEw{q9jz8`7ZZef&S_$;JT+k)eE@3!1Y6a#T}cY zDmzqdBvfqzu7^t17Np8|eg2DN1Fk17Lrr#zujKPV#pG7sHW{tkB(!=H-*X2+i|do= zvMxP-P`FrHC?k*0R~NJJ-RFByChY-eJ>Ewp71^C+u?i4_q6XB-%j7N zzUO?;12+)3{4 zX~_p|RenXO+Xww$e5DM#|>`zd70-@)I}U*PZL@9gj5@9ICwukqs)*>2!O;5@*2 zf%5_92QC0y5V#WHLJ2>uvgH@#(CF_DTxkkh;bdqm&pENIpyeNgX!-HZFH_L+7qu1| z{Z_w2!pe_23$cn2K>j8);`9Om2`ax|f@*MEY{LGN2viY&xqq;Kh<~VmnE!bH3I5^! z6M-8F93J|3;LvLh2M&L75^xxEM*??p!apJj)hTiY!jIFlk4k~+lw<~i88xTotg?gEW`fmqz(rN8ZfMn6ZS~(SL$ytUs;VuH=N`YD&+<$8EH2&_n@9a5pXGnd z|G57N|C9b5{-^v;`=9ae^gj#SOyFh#R|DK>z|97(7PvXUp9Zf?S_0LNz}JRd%2v`7HnYz%{5)k$e_eqElX`6IbX=U#8RlxnIs``K62&*Mx}p zr5MP~%hd24x~eYj2fv)r@=F;lZb55is?DDPlF{=2703(Z2RZ~g1_}b50-Xb00$qVy z1l$?GoeA7oz?}`;Il!F@++yGWxFv}|GNTp1j8=fp(*)mL)!-p=uKj5S0~(1j+-0149Bs1H%Hx2TlkK51^*P!Ruwf zT@Kt8z+DL(<`=F84ny9xz^zCGk}4~3N`b3a72<^|Yh?;vxEAe+&_ze^T9?BsJ9rV5 z6+o4>O2vz)EdBiaC1eB5L6R`VT{2-Bm=lmyRzOx+YX~C^5?pID;bP{im@EjKAqlO( zB1veGb%~E?rrInH;7Wdp00fo>+;$bSei8E|d=3)*M>dK?|Q4ZVuqJQR^N8 zHzHcS?+DyXHt4bxxLf5t`mQPJHQyH4E^~5+#K~>Q$q|!Vs?B`?Tu(U>xIgef;K9H{ zfrkT+1Rf1M7I-}H1aP+lcL#9Wfx8p9yMVhJxO;%R7r6U?yFU@wp>h&xhjV2WTpap2`6s@hf6$5WetIMNQ66p5e_%t9wHGAcSy-S>J|Su z@TnZ(4oVU35#mh_Nlxg|OeZv~FSk-PJRJB=#_L-NFH*^HL_^i)mtX({_5JqO(Lz`X$6u0*htidRr0kN1L@j8Ca# z;9gEj^Vf1-C@Wql*aztf;&TkOkRjL~>7rfvOUMQtR}yKCyJUb1>Vw4+TS0@w)+>le z5DT$R0PfXHw&L?E&sB;PwKC_s2fq_5=40a0e2>p-Hk%RLD9RxOY<=*ZWDbKFpDo9kQknvM{~# zp5nKH6-XBQJnbeM6ikJVtK@w%Th+lDnXOq8TOS}KM;!L4kkkhoWUx+`!1|~yHVcDG z30RAQX9Uj-o)tVhcuw%#;Nl!NOv!BUi@+ZwTHjLv@n`)prQU-{sST+k&#p z3d%C;hql<<7bG$(cz^JL;Df=3f)58D2|gNpEckd3W!6u?{S4eM!2Jr`Z@~Qy+#kUG z3EW@6=OuzknH5BtMJoD&yMWJchKlc)%%}66a#Ur9Dk8IjZv)>!rHaU`R`Th=kAeqf zu0A1L@dbpDBR&38oz<7Y!?Lsbnm8-Ib6aeFEXgNa{S^E;_)GBD;BUd-gMS474E|M; z2YgrHj{;r;ycT#0cp7*HcoujLcs^0mL3LIIj*_k=N9E~C@MA(VS2)b$j{zQw8i4PS z<0>m$mGnfeN_qj`P2sAfFLG7VkJ?_+Z-5^7qcQVI_D3CqMGT#f8x$^3su4O<3N$79 z5=n8zN>FhjG(8cT5=n9Ky)qP+kk{dwjjEx&B#7jcI7*x)t`c{NSmG)1miS8iB>~|3 z0N)q*e!w3Ke1G5v06!4;p}=FNiTnYAO_3Vr_~INm*#YNN z0?ruV^(r{y5uDz!{3T?AE_JBP$u6m$N~V>}kQ`D;h2)S7Z3tQ=)g_YRij|<^Lbi-; zv8gXPgJ3nc8iQF3My ztHlad%YgT!VC73<706+g9jvY-SX~9YSHS zq+yAY2a`}era-j=_~TQc8lHseq#RV)f$9|k)vLgtphERVt5EGLIUqyzjs(?-Z2{z? z5=m~wN>FYgR3qAA^JU4;1gft}zAiaj@=eLNCEt~NU-CoAk0n0=e=_i+fFBL~DZrl! zJUZI3z>fodJn$0|CBG!0`csA~)B*U3DNs#LLNzT1RaT%1u?STNmFy%1s!%tC>gZnG zj_&>}2Ea}mq0<=XT%QsFL%l=&B(6ezC9b9*Bcc8zH^ooQP)d9!M$t*3!cY-0i-q(O zTGLxIQ*A6EAEFhqhHN2w$PsdeTp@Qz40%Fc;Aa3I1-=saD&S+l$APZ~ekSmBV1!h3(Viq;rJ%lc{l60!k37PS@GCAC#(a%h@N z)>MhCIRp`uSx8o0CRy4WR7zr@nKD_`5?OOwGgEEmgccIA>O%FQxuMfT4WY(RQ)pgj zerN&k4Zt@7-vs=g7(qS(g*C zt^odQm8`2m;tuML_;8IThLxx>1Je1_>%?i_O;1eFUo8Lfb;Ohwcb% z58WBMD|C10p3uF(F9jZD_<6ve5BvqdUkLm~z+VjfCBR>r2;DD3MNbbsqCoWo@XHmb z@O?o3@+4GO=Ag2!kz0^_aEOnJ)3gHIeZv_4(;BN;07T^=W z-wOOz;L!_hOO$$4s7ix!8od;UjJKyiwY@owepimF>`*m=P&E?xJ5;JhBUP=W(MuO;I zgW!F@W2WH&;2#A3A>bbd{t@6G1^%%_>AWOYXY_ob_a}L}(sO`+JcX+r(4_-(xrU_C zpUH8R9j-1RTwMzM6Dn6Iw5~6`B7X_lfPWGdJK13sOr;{EOIMbzk;%eB$zi}hg_M+{ z%tFonbf#vv>{QJ*mtHT!wMBw!XKQAvO``N30@tmjTT5>%-Bx;g=^drpOYbbbtMqQ* zp9B7R;9mfK7w|6v{}S*R$zK5;(H`U@x7uR!S?Tu#t3#!q zmwr+DW$9O?UzZ*({igKW((izO8~A;|?+5-J;12-*F7WRG|32^^0RLg4^oJx?zbaV$ z3H(PXSbdVj>eC!nS;4AIi&&LWz<;b@RfY+zBiAXEbua5BK~>gMg6bdw@^?eQvi@bq zNl=vyl%V>oEjETS7eZB5TxKjYm6^*dW!5rVnZ3+WhEHlf2mTA-zXbj(;J*g`F!0|1 z|1I#y+xLkww+dC6Uxum-GxI;BK=o4+s$X(YWe2Jg2~;Nm|Dy`k$p{s-z59N$k!Q)B zYvg@0cU3m7Y@!U-1PQF4+u(W1rk6!!ux3bL{n{3rnPm+GtXX9>Wv7+RE~_n@Q&v}2 zUpBYwbl`sn{tw{M2mJ*?9tim$bO50v2n8T?N|ZGw!CI(*bruMno52#gs$dD499Y=_ z>mmZy#UON1!CKy`x4Ncmr3}>y0+n!7TRhMDvQ08n8wpf`wk zvRlixmfcpit?c%)J3yd8U_f9&;6UI(5J2b#!qFfc148#i*_}zK?o*(82!tLfQ1wbe z)h7p4cA$EeK=m95JyobsYPAvqUoYD&L-nQv6`8u@Z$sezvUg>u4oFb-ZHvvvWrqn= zpOhUe`?Tz{vO{H`mwi$8W!YC{UxRQg2>n4A0Kz~Jjssy32!$Z%K+uCwlqmZq3Du7Z zRKJ2CiFH}73&tc=<{VU6fhybup$c~ep;&<`j6$omce27l_!tSR@X-=hCPd`#UakuF z2_GwA749ctWoe5|Vc3RPg>_+lxF~E07l(~uQ`j7~gsmXhK(K@00Ko}@3j{X^A_yK3 zydd}zVY`Y|Sd_5}`$6!h_^MzMt56QB>|iyFV0AnQ0TnBhTCLSvg-;2Om9ZKlVO7!w z&l8>;mYyTV!uT8!LttrJY^uU_1gls$9X2jL`@ zD^yz7hcC`wLN*XaVCIVKFmp9e$rXgJ3|}LYb+ts+$w)~UbrxRKQJI-5{W07G)o@){ zs@95yv04l9B6EBk(NMLyA$$kH>&Ea+;hV#^gcIRg!&}3*g|~%o2VpD-<3Jb>!UPZ| zf-nh$$skMtVJZmI65;JhyzW)-dJu%^DR|9j#;Y=iS9b8)N$`3WgbEd}7mk3Jdc9u@ zzbV7@h6Go%EsX37O9fl8FcxefS7e%xzvb$q@YjT^kHepY4~9Pte-=Iz{yh9e_{;ED zAjCna24N-$vp}c;;WQ9tgHQ_sdbGMk_;8Y|ACzeL3kdZoT%DebhK)I_vVv8lGh!9# z0>WGctB3}%I^q)i6;`!(odLo!5)04EQI#F4h7zh!p@2%&aHJ}7Vt&ua2oei%ZetLZl32)heV_08 z0pImG#cM^zM8*@qVv%tYEaxLEk%>}BydWba;!65+=aj7T(68L5iI zBJoId1icSNUd(u00>Y&rEC=B-5H1Jd3J|UY;i^QWMka=y9;uVvP^1Bbs}*9f@4sM3fXNOp=MrERgK&)s%+glf(8ZDEvKzWoaziWHP{k6tIspDdRc*0Z7rBW* zwLY>TvN5tLvN>{HWJ~1w$PJMjL0ALAS`gNOupWdBAZ!F-69}6@xDJFZiO9{W8;abf zK(!r&>zmz>aAOjxn{!ZQ2dYO2RF8phg9_D?twQx&WS0!p3ldZ}wIxoy7Li0&EP^5n z1=B5UvDp{-gg~`F@=oMH2krgXPk%dq_*cO}K5% z9tYtG5S|2K2MAAr@N}YFuR>LB>b|qwlBX-j9M&@_P(4S=se~7ZVA_?VDl1f#mmpQ; zArN+|RE3eM@<{#?vVrg{Ngm)1lLz-If~Wk1@{?q;PL#-c9w|BE94_1{)#}vpaZ(g4 zA1kr-Vry2a&6M(L!q(LCY30+)E6Qh-N6RbAtIA{LIJ|oqgjYa#6@=G7cpZc{KzI{` z-5~4%;jKjZ%p_a2vcoE$3&P$Mw)Q0*);l@0vV+#y1g&#Gcw0pa5Uo}wWh}q2{1O?g zizTr3BO*ADD`uq%GUv@x5xKHl%4EgLF_VQZ>p)v<)|B5suv%Nbu6%v@hVqT&o60wr zUst}R{CW`H1L1uTJ^bpF|3oSOlTx0mPQT;?JSb?Y&-0p!3s_GJHPx^A zO(lu{n(E(as;6pGJyXg*%WtaZG}SA9OO@71Tf*8_+Tzx>`i&ORma<+hc>dDmf^zoH z@(x#87p-LNENywUvn0){R?A+w!WHZ?W@}K z$Y1>+gm$`imaVU5TKlT*-&tqAHe2nh1=@w$x3r72i?vI%OSQ|i%e5;MslFmLP^5;6 z)JTyUD^e3hYN|-h6v<7In&)U&7WCEIwr4`^21RO7sINQ;N0EFLsg)wNR-`tH)K-x=;I>z!4vOTbNd7t6 zdj*~KFt4+|P^6B9I!jy7S^EDv>)+|DpViL#MUevXJBuq?fBuS}&Oukq+E+R!YhUTq zL(gNium0deC-WLaS4QVzZ7N+^Yf~Bi&N>x!wP`9{C0%7*6ZC}W6^YZeu8I_>NI{AetVrE*banEZ%E80dR5}i3-Cr~nulU)AbM1sZZ3?~6{(*hy{1V0 z6={GXg(=cNMGDW+^~vuP-GIDK;T&twi%yXu3pyq0zfSpgIweW%lw?JU$nTWYR~~+b z>qglQKO?P&pTF}VGP>7w6KtI|-r8Bwf9LQsRX1O4s%g6Ex*58ex>>r}x;eVJx;J(6 z6e(7b1}jpWBE>5bXV{5~l%zfdRqO=?qZR;0B2rh4azvSCQk&|e z?jzkP-D%w!-C5l^-Fe*w-9<$ju1I{>FjA35Dbi>~8ly;AilivgSVek0M|Zj4NOdEx zsctJ0?^#j*s6Q?$O(Fupe^~T>>r=-3DO{FiTFRd@5ch;BHyXed5%j+dQ7Yn8+(o{v7rbyEj zX@(-rRHRvoG+UA8DAL>8!vC7;Uui0RGnz{8rbzSh zno93ZQ@!H1ed>MnZLG&CeQRr5EucmI>UX8<{qfZ)_2o)*M}(5Vnte_NJ|xInIbJ$B%a^06=|g+tx}}bIr<(2ZPhogtvKge zQ>d-pE@-Qq|Jv%`X{$K3tvEedo8MNPX1(fifj&cT{lv!}dOq=yqm}iID|}8C-_~t> z>Fhi2#9Kc`Ki1Y(inXoQt4FK9T4$1ej@njl=qKx^=%?zZ>8I;w=x6F@={YKKZnQ~} zc-r2gNLv-@9YuOqk=|3JZHlx#M?W{et@6LE)6;`HUbI!AZ|nYhv&+BpnKb$wwXN1G z($4(0;zVmzS%dA5;^1BIf5EqP`fYmKr#|X;SerzB^NN1A_1n7lUurDAt!sESzq|J8 zkE@-sPrqM(Kz~qwNS~`etUsbZsz0VkA1Km?inLde_9@bSMLM8J2Nmg%BIPR5;T-*m z{7%uI$vXgDP^2R-Iz>8GZ~!{--vQ{~IRM>JJLRq-9nJ5Q2d_F=(tn}<+V-sWmG$tW zzIo-Zt}5w&(Az%sQUAo+SttL_I=>mzPkq!sHwc5qU}vy5I2araPKIKJ;)--ikxnbp z8AUp)Naqykydu#yoS9!zq{}&mf=_)kl(qfPi$PMPD}|csTEP#!NH_lLs(+=c4C<#o z8fq)j)x54UsGs`yM?X`QcMvf&H8i*OmBG#0SJ&y0zxn|dLra6N^=ZxEW9_S(e`lTc z1`~Z{=wR?O_!~MJ0t{M%&Y(9K3`Rw|rAU0Uc1Mxe9quX8eMNepNS`Rur;7A2$6(Gs zSQ!FsFWMQpE7E6$`s&e(7wx|Mudn`{zTzW_Ru~2<(&zbo6+vIU;zc{dU_*kfui~wJ z^@V!u`HSCPW=J(;*!n8n+E-uwopnYUCaQfk$}rk6#*k%D3}X$i8^#&N8zv~yV@3K# zk-k-=?-c2KMfyRJepI9QU$~UcWPZZ+K!m za{Z_txn$|@tn;g}xY|^|8J-)3QDd|-+8Z5=jz%XVjZ{IAD=Km&MXs#KRTR0ZB3D!7 z>WW-Lk!$7{`M@IekAsKNx%?jWW3i0o6}eWSrmC%eN^MzwS)L--{jaP3m98?@qN|Lq zitL)#RmQrnenvDlF}hg~TE=GTK})Wq_Q+p6BO1MoKGwc6dRzOd-rrfLozX~N8QU8> z82ya?#*W4Sqt>W1>WvKAK#?0NGHuaVk((%TQ$=p3$Zm??)fi|D zqOZCsvU^@%@xqMksmLuA*<0-^pa1&m-|4FXYF~vZvPXVj@k!gSdfS~b));T=t2k?4 zdGR_6Z@aVS(~Dnz_jz6aindSDa+#g?+-6KO4z;ydhPB0fU$uJvI-`tPqDi)Kv~i3g zw^rn~*+#`UR*~B)a!{7rd521(tV3l@Ux%v3iCIF?cqww5Fc*)g*mz5u7A;!zNVTM- zwusM6YoW7bSmKkCEh#PfgeJvVY=1W&7LgQbNlr-`TzErM^ET8j%*Fe!Hx!%{nc71A ztI)WsuV8|+M5O5>W7CpSf>SIRu}SHvMHXt~!&6hkT$;V&@uA@< z(U!bzyyD>@mUxD;MCy_v(i1F+Xc!qZ}t64`pgKiGPhZCOZcbYg5`v@OCgmj-|S z$iiWSxm2+|Fd#iPJ~G6Tmc}+x^EXo7c3u%Fqc1!W3rfH+--b6%%w(=RDWN!mBu~B55$bWdRUl?r0W^_`<3&9 z-D}(@nk-*Vr|0$5LF1vK3yv61h$btIM~%mf#}zqPkvWcbUuisP{K$ApkwX-@pCZ4e zHq;+A$SY?2pY~tVBE`s?$Rf+kiBUK{m^6wUS!8IFQ{K=KVJ;nt44r668=907=N6mv$_T>4J-xzxTY7usM_?*p zDp@1~QyCNQ%-`%%(d29@YjQD_GnF?(@-?+GwKj2_ zn61cj6q!Txn~FS7k>@M&0!3b^$Q+s%De_`PUZTiL6?vH=FIVIhikz*;D;0T_B6BcW zqsVKE*3~bsuF+vGoAT?b&TC3ie0-a~dRA%?oD!Q69+4SrNlA#cPWQ`8x`ro)M_V{6 z7#bUu=9iilo|4ujHqp}F)3br~3vE(-`_>ICiIMqBxv4Jm^lp$Ep+;d{?wRxw&ZFfYCCAeI2FC4FKvO<3rTm#5I+AIxD$UKUAVF6;jJ99pv|+pkM@dI`Dy&4ej1dQMtYdb)_@>9&g(06#$G%F`EW=t z+*ckxMW2G=^AgDnbIJMtG9!Oy-|(Qi`At=57xyhl;h!9%hU8^1;(xSj{K=DO!PBWW zDKSlbI{$-H0q;VGT2Jfo)z&%%hg#44CbFF)mQ&f14AN)6@R!0Oi5c*&j@Tcm5=J{*y@9P=1FMdJ1H5{!?K7lb$ud-yd_mi|!zk^YR$~f1Za=p*_XJ8oV`L z7U$=Ye~`5B=H|uy z#{c9v8)`{SOKs6LDI(7H_e(qTiv!p{Kc#Ky^$&K3g?VXA33J)=&&&TJ%$L7qe0j-> zN57m@p?#y!Q((caQS@2-FQ#T`UQW}(T-N`uaZ|d^<0NSz#{A{_!mQ zeg}EwZvDsKTG%GRdM^8y&kweXou>7s4Mi^|Z8q_1k_%l9HN9(kujqmurkzC>yl>i5 zbirOz(MzhPgQlXFR82=rM~kjIVa1vzgedb=PdDk4xrOf6Wqt|%Ib`sOO;s^)6u>gF1PSNXPO zRa9T><8tf{Mc%2%yA*jhi+ua=9L=j2A-c|eV^j6W=cSCY)By<$_i z`meqa;!^PVp5ZC6;fZNsE^^_==D(`J)qUIIjwul_v1z>Wk)FbK^A_5+YY0z>jpuuh z3WYady*{Jm3e`(Na5f&1Vo9^~O9+ohN*(6m-rU2xhxK-tOP$D!v`Fh^FSmGJSBZCv zNJ`-J*OJo4`ejT~YFf`>t$f0KS_Ti`+uwksq&O}~dw4YS%rCUNxg}Tn%^qe?vzH?8 zQREL4`NNfFZ?litSCRKB@?}Lns$S`LXSO;Js}}H zCDS&MA(m+MbsmaV`K48YlJj2rsrb@ep|NT47V9;9b9*sqwYh`Y&+KpRXbw>1eTsZo zk&h|zNku-L)g(W3z1ggWZZI3oCPm(_$Ojbp;K~})%$?0$)Zh3kA5!F8HS`8A4OS#l zo|ltS$STaG>8l?Y5FQa1Vo4593Fn)RFqg)!eza|jp5gK7mI&cm-%hv|ZShbuKh*kC z_|?jr`%?L0>lOKkwesCuds%xa!;+u(Ky&0DtXTfJIm#TZIPw|Tn>aT*bEsCC77B)!qGq#?Ics(WzL; z-t{tg5tOO#Q!iZYbiN9$mzI>=yI#^D^`*sB-snAHd6-Mtz>va9`zE_yE(6?z7S82E;lNAfh1lyb3lox1g$>o;iF zs4@41#16MGZj>QDJX#%4XW^TW*ktCPJJo|%UH=Bc`d_(8E?LF1ie**n+dRY&7~&R? z6d!rcxtUw@Fqf)5%<2d))-4ov)vOX~sP5ivR(W`OwahA+RVu4=R+&{kzO7nkIcJs4 zs+3hZs|v5@*`ieADOfwq#g(8#)omLr;p&kl|0T~qdPom*k5n%22QgJCTtF}MkjnX6 z$$Ln_UFRw~`v>q_dR?+AszK_EHL~@Fta4f9vrXnKDND|(5av>i0P+V{U+GOsF-Nld z$413k*heZA+#8yiYCTNMGArCQ{1Ywwo4fontxFBqefC$?hJ?1O!>T ziZy!n8W0%LH9aky<8{ZBl<>@zJ$r{Tch=kVo2?vb@vYf%l(j9=L%BO_AV>Y*Pu$AzL7{)Jm_@efc`?OoA<~l9TG^4I7o%fh2Rp~b zCnP2jY%lexfo@Wdph=19!P5E#-4~J^9-%&8a9?_AT2g|wC9Mks+=bTN)x*U;t45aV zg&`@a&S~jgGeQGH%(@=@rPZ=s>ywB}iL9DgwSvl(ixHw+On7o~yd4diz$G1H_l|vf z_v!0e?1m^Vc#nfXv4;`KDQQBKsK@fUL(`Jg+q|kM#|tXGFlQX zDX|f*MyA}=7|!#Jt7mghSDww(cT=bj`TzT0LVUU!xB6c#lunHc>CC^)iGN&VxK6#@ zireo*gzH1{ZhxK;+cS{c{zBN*Nlpvs&h1Xz9+V!}qa(MQaeG5lilGO$J8=6-Ou9+E z-BJkqio;_u>c3Jl_Q8*ax$q-y(eyAijuV=QKMo~W7q@z^wTD7P8U{;QOv z?&{;42;tB!(xTJbmODhnC3RL~sKfI2QZqu-<<^*o$7t0!8O!0);P6ht+~y$W@VzD8 zs6L+UI95$g3s$$u*N(cx_&{}Be{RpSq+0XkYsX7zF`??5c?#iFCoLsZU6>D|@b$+4KhlGsD7q1qQ&;VF6}x2aXJJ));3 zTv$Ys7{uQZB2nBCt|C>$iVW+mXb~^(%F|53Spc$Q!RY<7sQI7U|p{BfjAN7;beHx2;Qt z5nlpdYgwAkebL-5Jc=iMy=;Q{nRUs zEyt5#VqSexiRKw`$K|d4qMFtbXI4#bl$<zC4JmdJW;|1Z$zxN$4IzHsqb;le0xmplUaG`!sYp-@r zEPuz6V}1wNIxE7uM4gLx{;2cva-1*b%(k81Z9!vi9artyj@GTH9hLxfW-ZovH8OrU z^N~um)9F*SH{9r$!gFUErO+O5WaOU8!u8VBeaD3B2A5q&t)p10ebHg(Yv)TJ85xy0 zvubkkfHfnZT9RMftImUEV&IQ~Vr(<_E$&~quX5ku{+;{BFCO83+5JoRi|#A9=aKy! z`)&3g*zdC6ZGTd@^3`tp{r0=8w>H@C;m_8B^@?`5Z9gj7;cCA{*Z%-}Udun|PcZ@n?e=nlKGg|bBV4EH5Uguob*~7V*a}#H8=Z?-A z=i2=7boS>~UFSN^U7Ra%ugSTgv(C9%K|O5yxEhDLzpEXVe_VKR6zjvi`JJHV7egPU zSdUrZdHMc6N7o`*szAZ;54Ml~^Y>iFd>fu}AC|hs6nTMqCuvc|Lg{9*M`|NAXmn(G=5^(MXyqnp&Fr znx-00O)E_Yjb775(_Pa?Gf)$)Nz|lkMrvNyOwr8Nyro&8S*O{m*`?X9Ii@+QxvIIN z`AqYz<`+AAyV7>DT@AYib}j5$*>$w*Y!_?_*Wws*5{Wv{glvhQmjWuIa{+J3VAJo{|>O&kM`*q^t*ZU2S+ z&kjxwl7p**8?$I~=;09IFvMZB!&Ha29Nu==?r_NAyu%%b#}2vYfQhhoKw zRVmiASo>l@#lnlF6`N3OVX+Ox_7*!=>_M@gikB*0tGH)zL-D@F6N`^6KCgIA@ehli zEBzm+e?~K-uAC z=aqf8?CG*!xRh{d;G%U2cNy)n$YqzyWtShyN##7s1(i!EH?>?&xnt!XmM>PmL3w@o z$nxXLuPlGC{5{EDsw-)w2K%2#Mvp=X6*6&6+a zpu+8n_7xjcG*^tTIHTe_6)#o%rBaPb9V=NXy-{gXrE`^@RIXOpzp|zBtr(O{#XQI<)H2s<~Cas3uoyTP>p6=gKN&M`C-k^YDu*^)QYV&x7OZTpSxCY?dTfs zy1@02>*LzhYny7P*IrTkRPCpA8rJDiXKbC#b#B%zS+`Z)sJe6O9;o}cUafjv>y50p zzTUO^CF-}TA5(vR{Ui0CG-%kMSA&TSb~Jd{uyR9l!{H6rH@wlPOe4QWLmFi_y3p9E zajV90jh8e&)5NZccaxYVi<+EnYS+}KX>8LaP0u!SY}UG2VzcaKm)%Ocb#%*cTkm$K zdBx^knvZS1qxn}Y>b2)FIJ!gG=51+Ow* z2Cp$*JH5VX*|epl<n6->yzTM$>%fQdcFgF7yDjrCASK0HMP~z z){dIuQTc<>rV08 zUwY`@(tm8IV~94aH#|0a8%G%TnH)`>O|wjw%{9ys=5^-BoqRiu>U5}c>CPdY-|Bp~ zOOq}sU3Pc1>)NU7oUS(l>jx$V?g$b==Ab!2H-j4n4+(z1n^U*oZi~8o(%qx`$nHl% zq>!+XoRA+w143tnUhmPUM|zI~J?O)PkQNk&F*!(cZ=SmdY|Z1wNGrHoqdb- z?b&xt-yizv`@Pxk!E4^HO?d56|AzgC^*=VC>VWtGAB2?+3lDpDpyR+^19JvG3l9p< z4*y}0dC=lPk0Z1Z^CKQb`bW-<{LIqcGTZWLRQsseQ4gcrN6(4=EXFTpUd$J<+Ss>Z zzZq;Ayln83xS+VTanIv>#cxh1o-i_{>;3(`jbn%uBQUX1zVT-0b1A@6G8tXZu{&xs&I9|7O^m$L6)1w`_jN z`RVg-FX*yh=fZjmXD)p9R?J%$7X>WZytw+}Hx@rx61n8uQvao!mep7`W!W#wW0zl9 zVO+62yFvE6l};-&R(`Uo=c*&CTdiKVrs|q0Ykpmuxc2tj-QPa6&Uf9qoa#9<*4wR5 zU;o*L*EXElsN1-6liQ{hn=5XfvPEo3-}3p^fm<)V)A^kP@3wk((|h&bTf9x$HhH^d zd*=4XJ7RX+-q~m8*9oXG=_qO+&zrS`*?LCV=sPMsz4@-VH?!)JMhwuGiU-G^$ z_DAo(cOdM*^@F_+UO3e4(5c+cxknEh4j(+y@yOnz?T_v`*5=r*IDQx&6T%-JO$nL+)O`7jf^={nY!< z9*p~>%qR0ct@Y`;hn^4jd}jFU%;)_+fAA>z(bF#`d|B?x#a}i0>b&IBLW_LOBSwwRzrvV3O1-|6#hWX*%u{f!Ez)*vGkYu- znEqfnS8U3Os(gRl*m`DR7F|R)5h8|((PF%q&RIk@=MZbe+nht};tb-XI4#bK^Wu`Y zBCd%W;vQ!aKZ;*9PMkkf)zsBA&@|FC(KOTeYT9w`&`;A}6RC;S#Ay;VNtz*=49zgj zaLyz~YqB)+ID@#Md7^oy`OQw)+1Zug?7`X2#ZI!TU{}emik+`rH@gtK9(H~0EOv=@ zBkV@oO|+Y8x5#dp-CDa{c4zG_*?nR6m@|mt_NDD>*?Zdi+IO(;Xy3&?)IQuk(f)P& z37kVrwV!T3(|)1-Qu|f*8#tTTV*gHsnic9+aIfH1!M}pOLe~nx6?#+{T!E`c>VI|` z+rQ%VynpllsW4X2MCD&4A8uAelQq0LFw#8AY%-5A^R{kYBRHeTXL*@Gkvjw0Vv>~a-5MX}fOn`B=6#FcqR-Yd!mQV|{oK``yrC`sT~q~cY%BC8 z=)yzp$s6)^n9I=r<&cHn321#IdVUPQzvFjrNG}}D{=9JR{?iI{4UbJ!xBKG#doA*Z z&%f(WDsVV&$opX~!GE&?zkl&wXG!LrL6*dbOm%o7$$$4CJ7;lJK^<^qPk4YUf5H#l z&=XwoVlCR{yi(g*5&12G8Eh($aS@g_E47mngMPT~~K;2bXC z5+2}Fe1=E(3XkzEzQ>P3G<5`5FPkReE$qP+d`I}DK`za>O4_U$n!_E$+^i*hz*W{} zbE2+)Mvl&-8n{m~%8CQCnkyEpN=#OM@ENeCo2x!Br1V1 z-5Ar2G2Ix`jWOLA(~U9R7}Je0-MEVC#&~Xw=f-$$jOWI9Zj9%~cy5g67KU(eh1*TR zd!TM^ROsxQL&GXu;Ly7R1*g z80nabX_$xkScq(F1lw+ri<7v3oA?30;kgj*9RJ;^iMuNrf_U9Kq6-4S81CH>ik=7u zxw>0G@3_-D?r})KILrb0x$nc*cm~GtU>py=z4veeJ?v2xjOWn^jnNd0?a><4+k-JZ zsI3P*>JbUX@?b0v#_|}3Obo|Jya8(9F&(o&3?6TS8hEV4Dy+dVT*4jP1O4mqDL%s^ z{0Qpn@e7FCgBsBm!qW~iIv@(v+>`Mw1OT3Fc8$piyC#!4Na38<%LQ548Q%m}zWfDeXHh6r? z_d&n5ya94-NscWaf;zXP&Mm(OHE#J_2yYF@+gm~fR6=!718-{JT?ZXNKYI58xq6eU zH@SL~t2eoNry?Cgk%Z4b8X8v(ZK%iQ=b z#d2h071rQw8d;bE zjvuY)jaH1`ir#2NKCR|sGcF6!x)i8W>+a|W`mXgLM1r|!Jp`|VTC`pW;%`mgwB7*f z(RvGruQhYf`cqJgHWk4fw5bZ_yiHBGA{70>cH1z=ZJ6UW@km56nA;bV3)f{dR1>9ouim_S>=Tc5J&H+in*N=A#|Q%y#TM?WkQldbk~Vw4-M2 zKEh8zv@eO)=mzGnJu$XtJMF1U`xsD{_RM4ZH$W}g&jj0O&%Cu~4%#om608LAw`X5y z{~`9_01n|WPU9@dul+?($M#oo4fpUBzUPHU4T^)fI+TVpDxeaopc-nRE*ilb{s@2$ z)To0A)Tl!b^gLw|&U96JofSWLuRkVgmd=)gR5SOIeBkOO+F!zOG2z14xbbs**r zw{Qo<-r*rW#}^=v4%F4p5#-=U4u0g|CxJZt$it63{OCi!rf3d#c!6B}d_f+5MwrnB zfnc8fh~IA@*eCp$XFulIk9qcEpYtOhzhM{-a`I!2{K(6X-tt?3x3Cy%!TkHJ$40R4 z`EA9!IF1|ml^2hRQGKh7e`64*KXLjKr@trsK)wBm)1Nr~iPOI`dLjZ@ptk0}`eE!7ezYFi<1MJ0q90axZKZ0X80p`J@7mIEh6~C=MnzNx<7?U1v}|8X4mvxuMGDqIUB*1< z=r7$pJizDp0*s@3EQFqM^iAN4HfRUtMc)xxgd-6{kctcp!*EOoIq8>TIkK?|Yd|09 zcViF8Rlg6^T~FQh)Ll>A^~9&Y31ZSyPXjp`=odo+xS<6+;00nc5SyU`{1Jd)^g$F7 zkObm15T}9o3?nfbSr`lIWFS_y1zZC2Y`BIS_!!jD@C?s| zFxtTZPAGv=C$)Sf_b1vjnu@*7)J6pG1n$fbizRJIMV`f zOfeC+X$7dSX$^LR-r?QF!gK<}&-;jliF)$ZUt#(L4?%5B-{5=vh@bIP2;P<}%+4S_ za~;$}12h74HxmbM5fx_o!rU625eoJLa|R}336_IiGj9VinGfSUsG<2HE`xqEe~oWJ z9Ofq=j!sR%7@g>~PC9T5=tS2gu{$w#r)*G@P6u!r=fJp~ z7`GF7cA~DGOM=>VE{k%I;0p5YOx~TzyEAjs*$1uA2L52I&gqy6YTtPqsCVb81J0Oq_)Ra8fPjKDZBe_d8%FNm)T{nUki>T(~UVkL6g04PcDGcd!jRa0v8u;BlP9RZz1)at^$WFQLXm zUj~wQkO27xIieWKfEotXfGe1%AaV{O=O6>fIfz(;hF}!NU@XRioP*|KA&4tz56^clVYF$Ft-7=lZn6o@6*1rjQP`3)wvU}6iVmci}N55y3>0=f8< z%NwlM%>(ptwM z&fy}ifV{eqOSd2J8=mtfF6O&C`E)0i?!?@kc)L@}?)A|GZg7VuTEU2+AinO*arebw z?C#XCJN4_%Ja+#EY(In=g_H!_4xv6F)F-4m7$bx+Lh7L*8iVbJbV3h=fgTG<2Q>+y zCLz=$M8RZC1#=iO3v=)$h#}+*z7ry}G^&8HLTjQn7%Q{^TA(F-(FW~c26LdkOD!}M zJ<%TnF$fk!BN>^PfN7WkVhAOM(6_Jz%a9G`CUg^a;1G`BI6lH@oW%otg&&3Je+ksC z|6M%B6Hvne^w$7#7(fmK$YB8W8qfsH%K&$H!3V9;1%c=W@)*zyeL*e*$YlWg@PH`9 zUlCa}h=z!e)XRgw4Z3yn}7n ziTCj#_JcZvQHL<<5Jnxs&fq-AJ?x4Q1MT1q>OGJ;4&-s+8n9o76LUCq4d=0gWM~nL zI3!{S(l8XmF$(nPpx42C4Psv!MBfZz&IZlKMr^^m*p6M;gS|L_TpYy-oC5PT=mOO7 zIVKEZ?gl-?BOxMO!F)ut0DT-m4iSSvED@O)3F;m39;idaK^(?0FvpRlPzElLU_uWt zf04{zB=Z+Z%#qY2as^glEpFg55JMz=6#0!1mIm+wF<4rmEs{Y!EW}_Li}BbE=E6b@ zmXn|-qa08U#1K^xRX{&Q^#d_P(L+%YSb)`d8|$$NTR|rLT$81Cv*k#8Xbb3=ndvIS^<3*P2WXN#xyXO(ThP{qO(Cv(Zm#; zgB>8p=np`DM^p3YT%5y2&~MS#@iA`WOFYJR_z^$jsSq*6!TiKHgWAN%ApV%Tpw=;s z(G1Lej0cE6hB=F&UNO`whI++BAqMFfh7n+2iXo?%*D({!XAE)2Y{V8&%b4xhg+17d z10aW(qoBSq)HjCu#ykW)5JL~de1q@t1i#={!P~W9hq54tSaOK1gmy5aGnnVtZpZ*J z#g4}$Oabx4QpZ?gh$V(tVu<}5j1fznVxQr;5QFQ18VvS=4_adY;*fx3q=Nn#yc*;@ zn4AZb^I+y>FgXprgZubYh`7?If@-LV+Atsl>>qLTMqEE+VH(&+;@$+?k6VJ}SP908 zW1Ki@8b>YTh(C@R#+|?^oW*(EzynavxJRI#ao^xOkYl_foI&m4tD**6Q5W^m9KP^} z7Q`A)edD_z5WO%E5uhjHnV9%^B!ZrZ&%*1N0O}q;9kVb8i?JGSV?8!uE66FHoZ@pq zPVwXve+uLjPfqdV6#oEUfn4J0jd z+JoE@$SpyS?jWaxzUYrZupkD5k&2NRgRvNoNtg_BN?43#$i`}rTLSZxKu!sJkPC83 zAg2U!N+72Ma!R;?2Y84_Ah!f^OZX1Y_*n%<6h|qLTVgp#Ag{#wXoRM4hZpG8#8&8t zPUwnYgrFzrv&3+aQ(^+>R*v=_DtVMP;ymB(Z-a)du@uQUkOAIVH742XurE z1_XhelEM**XpmbHxg{lmoRSob!$go<(lpG#0<6F)u>U5JThc~s26-jz#~~cSNt_1z zcG3mh#3%R+U*Kze3wko?S0R$gDY*nnqb$mUV^wkukW+GFG(!t`q9xjcoRZDxf*^E9 zDEcD`v4}?!QjiAnOP+u?Fcq^f7xTgVCDW71>+v3TU^hO%J{-UaT)<^q!%f`AT|C0~ z_*IA@0`_o136z428lWGCu%8WSfW~NwmS_)uu%8Vvz>Lmd&W7~IKtv!0aYzI`IV2Nf zF&>jJ1=BGTvbuFh8kNzcI^@ zAfGhyN%KPhbReg+p6G+u5C(Efiv&5PWnc`*DUF=c$SIAS(#R=o9+n{+t3hsQ>0$K;fDa|VM1pFq8mcd z3w^;pl)*lf!9J7`g;;QW$l&;p!SNv@9UKEQMu2|H;8>9{4imw#FoXOuW?~M=Gh-nZ zgM2f{H-mgL$Tx$0GnmVat#}VRup1v>9}eO$j^QLu;~XyH3a;a0+`)a&qZyy$OFYJR z_z^$j8J-I<)DDg)j#8j^hcf>|ng5~8|In(a0aw%o`{+=PJwuzJ1w7%6R%nY3pudOe zU_>W$MKD6p6ZFSW`eSGq2El?D#32zwkcOccj#0?M>zIHyFcmW}8*gF(7GWt?U=`LP z2OF^k?_xW4VGs7=0CI5@CvXa9aRHZc4L5Nc_wWfm;|CDyp&^>U4es!Q4_c!g{15;= zOz4b2bVDe5p)dMlAR-WjSkPaY^j9YRl}UeP(qEbMS0??HNq=RI!$eHRG|a>t%)>$~ z#xi7MHQvU0Y{FK&haK3B53mmhaTv!ye`V5Nne%Ln4MC4MQ;;qmYHyF#&IY{u)ky4X3|`(_h2sui=ZZ z6!h2dRalE0Y{VA4i|yEjJ=lu_$i-2dz$u)?1zg58+{A6%!zcI*U*Kzeiy!b4ei33s zF_b`Qltlu_VZ=y`!C0`p5zNa7wlRWjj9?oh0}zC62t_YsV>7nmJ?s!-6mvDIJY-Zt zRZz=Ov7mmVsNX2+H@XRY(HiaGhqpjYMz6yLunDTapQR0_|72C@qN)B1BIAS7w+(cH(G(7oA5Sruo3jxL~1#)4(g#HnqU+r zgYhQLz-)XAVxOde1B!uhCo%3M#+}5tlNfi>CD415h;h3u^7wngAh~fz?f4Qb4p1tms6O_Da_>*=5h*kn(`5tzbQ9x z3wMQ>+6-)eYFl&w`})*u&`VRd;yvsTVp>^LM@`fQwV0L(>OO4}reL}d)5&o<@lTHj z<4;e)b&%)u&%sO|DxhX_Yher+XD&I;orSr$icdgo=F$UmzY^lj z00e=t-V8-AH_Msi0v+-2Ntcw8nFFE&xKg5fdlCC#pJL! z7I8?#5Nro?y_k7ed=&J_5+1umMn#a*66Rz{8Wg;a2_UZ}U*j2m6JjajEM=UfjIoq4 zmNLdt##qW2OR3FL=5FbAe2hCnEF<1!>#-4A@U9Tcoly-n;EKAK3Hp2aGO(X5UoFH6 zM=)nAh;cZ!ie4ks55I z1{v)LI@g*J$ zv2`5S=2rS<>pU#PcY+^V0e$n1BZ&Wsah;JM5Z6m&I#J7!p+OB~;nD6bZ zx1Cs(+c$W9wR!TD~Mqa zbGPR>KEfFxKA;{S@YoO9pgsJt8|*h99K%VR7UDzZ=fk?Fk49j<58nhe`*0Q3B1ee5 z^vzyswpT_akmFwFW-s~e9fd5sF2p`(R0H|%BmaGDdmp{JZ#u|*AM?JCdEfUfo(r*` zdEf7VV(5n$3`PQ|$Ntap1V7^$SmyxqaG*E(qCW=WUF^dFm6DF zVmfpS5Ag_J;W5Z3*ACP*w>V0H+U2@{I_Fa7+}daW`a73Aa_Q~dmheSum_RLZLlKTB z#3CL;KrXrDl1nbR#GT8$=H_4{wt$-DZpSX{!Cp|mTY*Ws^{5-%p$D}-+6i3{h;9f4bA6P2kJ7tG2VfwW`=i8nl(|1j?T$I25m@gS z`5hyVW5j%H7l`>7bw5U(jvdE&T*PG%`?2d_9*%tuYJTin{D5CT9;_mc+o2p}ki&6$ z=6GW?g9lo|7p*}a$9rHf5|E5kWFQkGF$QBX9+R*H%aM&$Sc7%gfX&zn>VKSGI=&Oc zfBbtPPEgwuZ9rX4WP$Zg5b%l5gg99o#C(#NPgX(|)In1;2XUVy?vuoQlDJQ{MSFBY z5W0grPSQUo`(q#mVF<|QB;%bV{*%OiatdZ*4(4G2*5W9|`splrob>^{bhaHjpeuqw z|C}8J3u2IfWTYY;<1h=vbC$ZFrSH#f#yi-Cop>J~Vm}VyDsJFo+{Rrzz(X(xXTJjZ zoF$*LN0N9Ekfoai32?8ZyB1 z)_H1wp4y+EjyafzgH^w4>7IZqDf>7nyS!2WRlG|u5NuHh!=-SfnK{;3cbTtK}q zR0OrYP#v{U2ldei)c!(qXkmZ}oj@O52ts#|?}c9I1Lpn00F1y}pq>|~-9-nG|3%ij zNPZV*U=wzLm@iVNi}e1*qd1H6xCmmu$UI!Uj)(XX)coRi_zC23@i!qZ36uqMaETl) z)k8xxK?``o8@?cqOCg8>HNTXIA)wxuhGIBIf!@DF?JrHhA}qynWMdW9g4$o&h|SoF z_plwrf9YExE>qjftw3Eaj|S^qCdbR43US2=#C(OAuT(%KxPs%#m1ZFBE5v<;xUUfR zmDXqr6S^W86?*2% zZP3G4KEYE^Z>B_CwSxnSp(M(He6E&*406Bfh3?3}0_?%ZLR@3LYmHz;6o~m6F<(o^ zP-Ni^Oa*aYBkpU&eT}%UEd;S&TMv5Z8g;)$&9ChO+rRc9KEfFg|26j8YwWkz9^y;T zKi9s)4?oZZ#2m~6 zb-%e7Tk#&K`OTf!jSsL72a$^-IF6Gb{*Q};+I}1e>hkeiu-?by`0=ko+^P;@zD3Np zn!*h}@IwHI`xbHEBJNwneJcpWev9XnfquF501xp9UxAw6`W{d4ix9WVqC8|!@7tA84K-04bwNJ2$>(+x z7!d{PdV2$y=iA>3afkKpv_n4(2Ql9v<~wg-3aHbaC0GvPzC+x1i2Dw4-`R-G*n|C` zhwhNa9cq5(G|u4y?%@;A^LKv2Q~V~xU3)m81WKVQ8iIK4Qun*m{VsLCOWp5w26K0} z8$!_weL=nNQt!KI$iOg+z-Z7X#=s41;xNbXK5y## z<{8f8hMQNohCSW9#hoCy6$2S>RpA>Z;2qxbd%yKM2yVOOc2UYwfy(Irw%%{ce7iYv z-*qa5cddKWpk6CHiu z(f1wi>`r2mkpg+|q~#+DQiNiZz>e;GMtLgX<~!A>i7nmfgnW0_puaobaac+`7uE`Q zgvlJX44K1pAEv9YE!cb5UgQpwJ525{xx-F!8oh_IVw^Go!_sG z-`ahjf8Q?7z2Eol?(6*iIWF)B ze=qOr`~C}F@`lJDcn}bc7`W$wO+Cm;CG`4W9Bc6&A9(JeZ9TN5hfVkjnIGEw!;bV| z06Kp-1lb=BXC&UiL;XMenRzV69S`;Xa3$N=fg2tk=M;W}4=-|sYh1@24|V@2IVt&& zblA(IOngFia*>DpRHhm=_#C}I()*)^G^Q!dXi012e>4}}KDrSE;d%+rf#<^A7(SJC z$Q&+nxJ`ub;V}N*gr7(6;g`9J?BTM9hvPRDuE+2Sn^ zE=UoIQcQ}Do~jk)S@o+k>jPjFNb62FUK;0$xP!%bpCP<_WyDbo7u+i==WZ`|`HH~Db;o7#NKR5tQAZ-U^h=iXMN4MUOnt;}zyFpW9b z$=hZ8itKM!vzFiS_x0^w4sZl_ygkWjt`p94Uh?1f$^TCNcQJ@X3NlfY68IbQt}GR( zOf_mE|GRqV{#{49(3S4=pcj1^z#xV&j1eqC&Ud$hATl<(iToVTMb2asXSvG1cn^`c zkv;MiZ}GS1eSqxmWq+TPlzfPH@IE71$cFyk7sLMF+s}L7^}Y`EY0Q_jpcQU-FY|kS zzn_jg?`JcY1uSMMx_`flwd_UT?+uGC;8zY49)zN~Kbq&FeMvuN zu?U%?EoTKA_?=zI9Zl|Naz~Rp+7XU%iEG@z9ntRdh$lP?LeZlUlSHKDV=|MKT(~8= zTcW!qy4=xg)0VI4NEdV-y$8MM%K!#56n#h6cl0^TV*$F4z7+RHU&(5I!@G!n9Qk7S zkLJWEL}T0^!*enA;*OXy$Bd86G4&KPIqCR>Y~(=pn7PSIDQqXE&SUC4W=-4?vmOm- zgLe?q4KeK|W`71TjFF6C9PWs@jNj3D%suElrp{v?<`^eA!+948hkEEc&KESH87*mzd*Zk!P6tNt3wn)nF9^l;p5x}jb8-9Ow-9#=GRKuU?g0*= zr?{86$~A6q3)$o9KkjSZ5fy~u#UM61kC%Y7xF=pt zUi4)EgBgnK@kXQfcoUhzQhsG6I*+%O_52Ta#M{R2?7~g)nG<*i2{Mt3LioFpK<)%`Cy+aV+zBcodjcIM(0u~kC(wI>w)p%6-_VEt z$e+Mw5=>?qKk+m3Sb!V}?!?*AdEz|ClvwwPb)Q)GiFKb? z_ldo~#FcSNV!KJ)im%XnV!bEsNEh6axH~qW2_vPa<~`xs%A9MDC>CK~nuEwfCfn`G8dDJ*m%6>XxK#Nm>%wlgge{ z_M|naMP2G6e^Pmq4rdf&v6rOwl2q=bdQUnFohO~oA~v%PeJ9KGAEZgx&D(Eq!g8?LN#Ph{yDX2hRr9}VRGFk z?~FT=e}~?a4`U>5NNzXDe`X$wS<0`h#2v{Ga2Z=kejR^jl814hM?B#7=?F`VmvdDIfdU$ zieFg93Rba(-`K$({H9VIMDHo|p5ioil;S3LcuZsvN*Rrq#33O`NKOjmPO1BpmC<*~ zn&>)ZJsQ%OFKL19Q?{iq0~o{*hBAWDxHshlCNY)itV6z(`b?#}R3&hKD$k|zUQ)Ru zmCUIgB6BJ|rFy~pAe1^b@koGokUA-{r~a5v$d0~K=c6D+C`J{k(+J;{x+P!nH67_f zSKN?V=F|(YlhpF0wv*KQPQ8}({EsbcXD6pQ$KPD!GIo^uI=9e$>bpF^mOhM6PHNE& zoqV_n&!q{-KpA9CBXgS1sg3T_=sb)JaP1-c%r2vJ{ciLi< z#0_c7QGrTS#XV_dPdkzo9KkzImkiIPYes)&BXc^L)9F9mN;YEa>2@P`I=R!yolfp_ ze{+Rv+#rnm=sVqipYN9RZb_dQ+0)COUiS35PM-RA>h8)PALGKy#oi>*uy>!qVo*LILR6A@_>2f+aRxu}GYeRZ&ND7&Gut?T@5*?b zQ|LS6MXvAgZ>`>Z}cYg62k)h$`wkhM3%8N+z=oz?EM&cu7kItRJ4 zZs8~=(0SH#=sW9W{^2^e(0$hXLCF6!6Ur8ynE1_Ri%S9$p#2SQuej1=YMQt2fOk4+3hF0 z-)#0P+#{T)yxfC0+%gPi^AUk~BvrpDxC8pFRvix$P%+ zE@aLvbM6w9Lif3Ko?GX+<<2d4Zn<;Io%E79?WDb-f^C&Ae7g0d8^TZQOKNEX8*2wDDO`!#Mbk!VhytAUC&1TU_Uy{tNXn6 zlh+-2&!hLeVcf?Jc_V|6{|P&kFFJ9EPa=}wj(nd|4qM4rh3b4x9qRK1P0)M3mh_}I zI?vaifec|7ez*BXGZvf5HwpRk9Y(kLlcJaWjqqH4H|Dpe{Qn?xewp(>;xVs-PyxTu z0x^-hfZPS-E+BV-^khPZ1+tTyd=$jz7jR1fw-nHQ0oe=4UO@H&ZTXsxbVmLH@)nqj ztrW1!0!#T7xeKgC=LP=nZk5tG7I+9ljirY0D5v`E9q@GH4pgaAr_mXm#l)I$dCFL$TgW1ew0ZUlUN_>7vx0Kw8{3ZQ%OP=N& zm$=Hm+~6sCFQxBN`YxsKQu;3SF`3Cq4n8F>1*n4GYpI&lq7L=>f+l=PbKFzvD+V(U zy_UKegi6ODC!Q!{C>;mwv5e}k-v=Hl*vyaic^ZuD2E(n?bS8OsDFqwg~M zF0+DFtYIA++00hlQ^q}Ic5{VyLFhBRepVju__NV??z21mAkC&%j&(X-pe+j1+8g|&oAqivTi9m0@=&TURL(9wo~>eer7K6`*+7f zWsh-^Go0rla+ke^&dc8BE)RlGxezgkg}%$hBOz`mmz)&XQ#pGo=bm!1mut)b=3xuv zY@xj8%ID#8IwNy=nak_H{6I!Bi7D8Lf0H~^ekQY6ioKWDVR_w`--J8L|Bl|vALRsY zD1RNBDIdl|9`lSBL8yW|DkLQ6!Y`sDO3R8@dltJ$mD$;~z=)8iRSNMu{bf6Pm z=!#8Mu<;7=SNILxR)`2f74=fF6rQW-#)|e-aW67gl)2(*&T^GI+(Yh)a#xhQqTCf< z2BAu_SBgsl67vCiujKP9r6U*eS1L_eDo~Xg*iWT8v_$uneqcDZUddi6O<*#5uk<52 zuQZ4GY-BU~u4LzxcCZ`2+e-U6$X~dp(s3RHp~~^mYvsCpkM~&FbCv%M{J&YT`6}6w zxr$9x$wzU@Qwe`}s#K>YvR9G4N^^8rMfX*7U!@D(=z;I3;+`t{t>T6%KVkD#=CPQi z{K`tUae&MG!*y;E#(f^~gy-nJ%9|imRo_*Uq4TOKNljWlA|sjk1UFU9iTqXDquZ*h zIKk5(RLyhMY@ynh^kWz@R~y4PrZblX$X!kDYI0YTyV@3XSWWlU{^THsIfl=#=9X%1 zsTPjx)nuT*}tyMNz2R9)xQ>+=Pj_!fOv zxAW>f>5Utz4`eVlRoy$N?w;zhSKq_!AXFm`pW;2%@LY|b*vvU(t|4;`{nxm|V_x$P zxogT@Q|_8_*R=hb@zG(;^n8pvYU;dZF7l9%&nQoA8qkQQwB#$=@in~|hCDTGrKYXa zT*xmhV+E`EjSXx<-!=7J^8}|j!+9=pg=@H{rh96-=kplI_<0q+VFGLMd;i>>wcJvx zC}pWYWvb$LQ%mMr&1pp&+S38=qE;XDUTX+$s5P2#Ok^_iaYrrrYsp`02YcAZL5|{v zTBnhv)=g}_b}aN&RS3<~lmB^FMZSfWJ7xaZVz8oond2 zP8j!j%rhc*6@==>CLXDU$UU zk78@dtbH9_qWJzV}f77~VsDH`SNFL1GHhkiPtk=NfoF4P%fQ@1UW~ z4ZVYgg(yvBs!@Yl)Is)!-a*5*d`(BX@*R3_*qf1z;YWN|!+9)ZDZjFcHMpUn%nkqH zI{)RdmxlLw#1o#Q_l7pvFfs^zk&G0iLg!zkMdx2+Bnw%|PAs8=JGq2khzJ>P44jkJvDhBgqntkPAuXedsF>4O-BYY zk&T?_yr~^EEkikK;k%lCK@;@dv^8yMj~klG+*IF9ZM~^HP4(VX?@gDY_ojMp>fJS6 z&;R%feK$Rhoj28aQ@`D&7r4w-u5kmK`Z5~!@nt2xMkimc#&ci33_{KPew!6W=4LWC zt4L*Z-%RJtblyzvW^y-^yP4e0df;zNv;GWX7$ebnGoRngEzRa2e>0nDwvLT#Mc>VK z@dq~3>XCWTIjvS1+MZh zH~H`L-O|D>En^~kOW9k>-ZBNLNlSXx(&+|Wkmw$ZSaw(_)%Pa=|{_qKX(n+AJn`!R*lciR$_Lg#JEQIRTCrzY-cTNl~e z%Gh=tr+FEK+If%dKEt-!xuxAgR-+m2lZoh#Oga@IolcT?{o6sM3f4z^JL8wD?5|Ef==)Qx_JIL(6XAtTj zcL%vU2CsNaBvFC?AUQFJO+4K5O(K%w_HShWrZ#&0W(M~8jd$76a~(gS zB5jblqs$$@qbCCy$!Nx5PaP*Cd&l|w!ZKE{mi7FP&FshSJNjGM@xSl7%D>#^E)RHw z8#>9{DFd01r&D(H-bwGB?4?s7iemenN>dMgcWQ)p>c4vs>ePbPw52^A=!8vm8q2R7 zB|Hdq)=B5Wc&@W;b+)C>JCM1v%$<+m9dy=xXPtM}d1tvh%iZ}t5BcwN-Ua?c@aVpa z?z`x{OJb7o0h!54LHu^Rl%xz5s7y6#U^895##Xw>)5X^P_W?p(^xkD06PdzvW-=Rn zchPs3jcj5I+u6w<{E1C$?h0NV$?ymptqnOMrer7JRcVEb2e#73o>#)1-yYI#w-S?yS?&onscf0BS z0Gsje#fQ4TXjGE8i8NIHmZE@>HTKdjC$}-?gC~U-J!}>B@KX#4X?T zr9VHh8Qp#t8H9T1rH4Lxc&^6;R&kg!$n4)!5B0E#9=Fg@k0;38L+&1O_mI11T=d`5 z-Lw&xWG4l76x91qfV=F!FvgZus?y2{l zexE&c-t!lh@jJWt1AX`0hrWBdq31D9aEi0Ir>E@SC#NV)7>M`yz30Ba8-#krAsaIH zlDU`udljP`)u~A>Wbajv2DGLUU#tfUiRMWG0%wLHG1zA6@+?!Kq_?JJ1yz?n9SIE@9g-U_qM6td6D10KOX9> z+urNYOYfIKsE_CRxUr8t^%;!JePr%4k;%-$@3hYn^xkI$tB}3Vc6OuxKK9<{FvmE_ zX|5BF?)&`rU3Sw)_P)`GNo-Ogb6;KeEs4L4edXy}kt*oE@8{^fZ+&d0uRHpFOE+x2 zug?4Gyl+3e*S_xXZ-|Hd8{(n9Bhh)^J=_jL{o?Q`weXyO_d3*XGw1jRnfu+sJLsqT zemd``^L}#om%G2*{pId&`~BmS8Xfl6eSdfK*L(k5x488YX&2MaA6Z-D2@BSyS_5No#&qc1_p8o%0Q~ljOAUc_-Ob5oZ z2G0$66@&(+q6jh%lzCt!s!)d}G@}KrX@l$oWglq&1LYsspF!w;pxy_L!FLRt$Xph& zmW}9q;5K%#hkYF295?tc&s*LHp+O;H5Sw@;Bnin$iM|Kvdr&?KP>71|s6|~G;PZ#NWvE+*evj-!Wgja0&=HJg921a#sJugW@&|i4 zfUbwiJ@f?r&J4Agp?V*BnI}9a0vj6ohR7f^%nifzJ}f4&v7=$`87BL%s&r-|>p6qx zhJQq9?0&e+!(|?>|KVNe#bAaa_i(v~%ROA~;j@{~B9^d%)#!V;&mZoV;cgjz64{5# zK3w+Ux*mR$JKRP75%P{mLwY_&=Oc7JLhcbdAEEOR-rES<9Z`(WsY5;VJ>m?Tji*ZDbzRou1hFD0xQN%BUd>VbW3>B5+tQdMd`LPnkdd6o zJf;Z6DaB`$!`8>tM}K3Q&;p&0X^YPvWAkJB;Fd9?kbR8oW2WM7&Y0QEWj=C@k$21q zPIHb6T;?CHqw_Ig+~-jc8XKKh#6jO<^*uH*$w)ye+%wiaV?RRYW1BLF1$f6}ZwH}q zo*U=gjPoAGeT)9b$vjT~;|8OraZ{L%+~edPC-*qH$1Ozmae5!8_i7VSl%O}bLfWS$`NgiBmOPZPqilL^m|eZos#2ce0v zh)*Jtk`i}J)cZuePs~kTN>L8qH?a!xPt^IudNiO7a!(wA&L{dCGf}3Ax}T`~iMpSt z`-!@r=>1Jxj9Vt!&BPt-LhlpxKJfs5ag^iO_{1~FKPd^ion*I@^fGAL^VA>tiG{4dMy9T1JsXjI>Yp6sFvmE}IWAyBQ}6MR zH~6k;(TGVr5|V^uxM7;i(<)FId8X-mn!cyiqals?k`}b47k%l^Kn63E5sXIn)5bFi zTbj0pqu9dqB)o+XXt)L zZt_tOz0asf6?8wtcg<)wP-sr#8a zpQ-biZD>yiWS`la0qAh1?q`l-EECZC%y}$C_cMLhOq-dxm7V;-UiRaLnKI9OiLK0( z=cj<^#6s^sB_J{O@>2?OqVJ#bk{_M_RD|M`q6}rJKqbE72bOREoy>3o*lv*ey7_bj<*9Ypq77rDYUZV|?RpZ}0|L>M}D zdC438yCo_J%?;u1x%Mq!x8)KqH!9PxI|*ek%qthuvHcLJM@VAUmF0@Evxv;5TGmAoGG<{DJNl z=zM|B7s$Op?ger$kbA)+o)N)o-Up$DA#}db=Pz{2LbojZ1lbqLzEJjswzIGpB`J;k z3*}w-E#2u!Z*0YXyCk%52s&Rlk}-^DA-}K`eJ@8GB!>!^OH^Y(I8hbBU|yeeq3R^A4T=5)h4;#34S3 zNJ4Vl^h*I`{N;OQvYjhIXi0QzYl&Nyw8J}C(jD($NiPN?^OA8)WD3*yk;UkK$x7Cs z_a&RyiqBtSJ4=pojvIt=pGQ0+0(UHV8-$j|BNd;b@1^oCEsUKkEs1xwv>X+wLUmf= zJuYoadpghwH!O9-(jK^XX&-E9sk@iTxAY>qTlO*K@!T?-TIP;rGA}!g%*!rt34JfK zk7bXMdzswJ|qa$PUi^>VqF&t@(Q(EIYGY-cCC*~4BA;D+UTUv5LoPjUwLESLS)WE7z>1DJ>B zehmvkD`JxsnODfXLjNm@QkH7epcZwgkL)Y-zv62;(uMEP`3jw{(D@3#*A+kVGrntu z-|Y(7SNzH<*02MaSNOZK;ySnZFVB4*@r38R2TjFTUs@UQH*5*llTdlSN($AtK?p_lGXT}RU6R%s(l>f zFef;T&R6}-9qyt3Rlakz-`wgr#3vESNr^jFyJK}u^uD?#cCxx2x?b&_t^Sf0w5Bb( zU+u2dgBi+jMlzalxOcT3t)9jV+_T!2R&PeW)%skcgEcx><6W-t+#2s?jXT!Jyhi3V zGOw}sHE)B^+887x339KMd#&7S zIL;}~aE=>81~P&!VHnja1Cpe9Jw#)vzjK3GA5w`ie4gUTocY@Fkx9s?Y zJmjYk`ro1V9Ww8zK`rXifG=pmmvo>D-ROb+?C|+J2I056!!0|eGZWc&{K_iUvXRYf z!#z7>-|;sOdCW5+(D#maLxp&IA za}N63c|8d2ih=#@a^o(y?D7tF>3)~)cj?5-== z(60YJ{|V27&~Crg-MZc#mjrkxyFVZmACet;cUQ+wcH7BrJK3%8-E!}4hTZS}igxIJ z_dxW#dnm)PquqA2+YP%XF@ z`rea}#K^uUIVs45?)T_$Pj2+S#~pi$q4z!2sEHf)w7~CnPg}mBGhOM9JN8Uq5ldLk zO4hKBjo8bcZRmZ^ZqD*II^T1dtNhDNYbW^a4s-YfTBx%bMwcM!wS;odP!WD3*q`Fq{6*DZT>zgPCXvhS6B z?>-K4n4`$QSKhtvgU~)(*=LvgViOO!_a#B+`%+>r`_hr0LKH#Y`$|w6H|(oGC8}Uk z``oin_I;yS#W9`+q5U7=x&1A$r~Pw~dB4p2^}l~Lo7lx3_Huwj$i83y`>$|~8-$_r z{W{;T^ZkCe2XuSDZVvda1NMF(4H?M9CuGA72V_3b7=K$1$aBC}4%o_pujxn^y3vDP zj6>fCCNmYCADGE(<}#m!{K8WHn%a?w}nUJWm8NACmb{Ok$(^LpndC z^FwkUlKYU{hvYs~h~kvuGb&OAogeb~hum_=Er&WG`yts6$$qFmgZP1A$bU%QLmRR4 zL)+MatsIj3(0+7&=m^I-#U1YP0DT{N%ro3@=rwPN3_^bexaTj~|0=^*497eE>n}Wa z_yY=3519|kd|3a7+t8Ws>4V&d_=?l$WH9_XbiIAxue~f#2REiD)UkOAKk@4PI88GT;LM2AJzZSaGvsl zH|YGB&X4K*SW?iE~L^X7HLiZ;c(1@n!{e<10u$vPD@m(iu=7j7g#xaq}%tz)E zf3O!@IU&!9qnzM0dOxA}6PNi1cbs_1YwYHP&QI$6WOQN?m-r+i3AvH+WH+Xwlaqh* zJ_wz1->Gu6;u|{CmG1OI=2Ih)`;^?LCNPO9%wsV+JoPK~b4u^0HsU)@?c*RPxylW0 zbC*Xv!7ZmEg3#%hBqJL+k@<8!^nJPr#VN&Sl&2DUKHZ#_w5AR1amQ(Qoc|i&4vY$g7 z#yw|GAp1EP&*h^Yz4(cpTn|F$-E#h8a_}j6$&cU5d701a{CpLvA^Z8y@ea<*e*P=k z(UC56<2&4Q-aY51Apd#!&&z*)A-}MUU)h50&tK#U*SNuL?(%?e^nU&YuY%Cu2}wdS zbpCfrbpCfbGLVtXWW{^GMW|WC)mw}*SsSt2we=}j*ICjfWI#ni&2s? zl%pcLzgQi;U#vqrI-v85wsY}Yy3>>1^rb(87=rv4e@C~MqM?^dRq@;G3}&PMtG@55{8#0_ zx`I_~=O91|sEO|Xtw%#TqVIpZ(w!dk zLg)Vuz`Ol-2*Vh`BL3i35V{^4om~GM&t0F%Ce9-Bb(yc<ETb>eHAnX+ay>^9`Nohu&|@!Om~Ud&5p{==#P= z*07F^=>5hvbbR9!XRz@be{%^p+;GE<8@TsI825tEO?Tgv?`Cy6<2QD5J)XPyE(qOn z$1Ry}RY2xjdcReJ1~jJ?a^I5smfW}GzSW0;==#<$Ml+6y`21ULx#brB-L%jx*>A~y zOZHnfb88R#u$x=*-;(#%E8e2(+q%B3>)UeQjz>c5{J4~LiFR_)d*0kkoI%4->-57zs z!^Yyb8m9BGDNJW3v-p{LEMNzhgV5c8Oz7lp2RwJz4(^`hF*4tk`EFDYy5}9-)BQc2 z-_!X$x$nt+Pwsni-^)Wmicp*~ltbtDeEvPR+;hvlcF2BD_ItA5`<_1ZXCU(5llR^l z?EKzFHe)OIuh883Lr8{BhW_WQ+X#vr`o`+M=+ zgGA(}CNe*e`GNi)G^aiO&OG=IxgW^=K<)=}KN!m-rZR)s%thZ1eEtKsJaEf{Kal-_ z>1NkpF?a595)LB@1!eT?TGbz}_7k@=C#kM#d&D|zhU3u$9WWl9w(y^I(gg=&poz-$2Wq|lW55NMCK<+ zNsjKH==_P!pX9_&p5#ULC-(lN0y=!6`zN)iO9S-&#O|MTK=)64*Att0GK3L~W*if6 z!xNdG?8H`{$n)d?e{mGOKhgV>bJ)w1%RE8fPa=4Q&YwgEp{D`SiAikYk$@ajr85)J z$56gpXb9~o)@78`hH%Adg%OlBbw5j zmb9iV?HR@*_7fI_Ug+dS9z6G=5BBt86EeS$`NcjCp!*j(f1&dia=(!Kh1@UXe({{w zydx?IMZ_RBI*;)A5pIcaOGGYYkB~h=_K1>{p&S*EKSJJ!p7f?41F@9|xg$oR^N8_G zVk*m6!7B6}@f#a(L&R3LvxD8ZCqnj!_d)1oCMx0`zZ{F_UY_Au5PFpinP18LO8>7i z^C^WXMhQyu8M439|Ev0ZK@(b_^H(~5rSn&I|4O&7M&P?%+4`%=%-|<}W-e}cCG)Fe zoJ5{iw(`nWUR~iDH@MAR9t5G+A@uz^7IDz|>x3jBIVnkvdtRqU_SZ7L9>{$D#Cv=b zAHU}}Zh2$xZ+g*}0SsakGQXL|kIZ5Y^RV?d`g^m1P3Zj1PX55>zd6NOZ03!7z`mL_twxJzg(-Akk?Z$W5(_4Fb z>z=o=zx^KU2WJF+hI`HHR#N8gcSnSkCS^&TmEq~0U-9_igh zE@Cs=_#K@`+Ii%k?8hCEhdIg#+!Pregx)8j01fEFY&`e=W)O;sj^9R-VtNlhBkk%3HnLN;>nDS4Ab-rX=r(3+^b&I!o{Q%&}ySRfe)uqaJ#X^#!uWYDzP{;aj@XlfJkk)?j{MGShHFtR*aGCBLzOO>Ds( zvCeRp2ZZw!n~C*`x9C202))OSO*%55^VpgBgzV(P)???VAVqLf?1sn~`zN+>H84H0 zQXRL%8I5-kXFA?N9J`3K2$|!oVI3RU%vScJ`#8rqiQeN};4=Sx{zD$)mN-#Cw79az zl|61e5|fM+q(Y9k^2W85xHYInT^i5`oyToXE85VW{tRLWwjOslqww2}JAp~KC$4+q z{)o=wo+2WM7B4lWXo2VAc{lOAhj_Qqe>|Dv=|A4fAXj9@flk-6YRsZ!`i;t>4f=}GRa7V5;REE0k}t{*qrPV(bC{1D zQF27d5%n9ZSjz@BvkhHE=_*Q|D0`36SCm{)az)7%b%R?$Sm+KSNF)O{SV$*@%v@+4 zo{M%5(KUIDmdG6a953)1`iy=LxufNdmOEPR=spZUuhByp#gFJT+TV{hOSD;{S0j70 z?9sAE?_@WBq0?yjqvb7Jn4-i{lG4asI2qqr;Yy@YjU1YC9}m!shcQFpCwYozXoYzS z%U*a0OE?gOF}X>>b1`q?K4N}C<`|h{^zXm#ER0!$Z!hL|aZk+1RZM3Ekh z#tj!4kG_jcW*Re?&0Ne=#5_e7v5TugSX8e?GjIz<-9k~%72SmID7GLn$I2WVPXc<1 zy^9*i9V>UN+_7@U>ONNQv3ievk`}b4E&hJ2Sz^r+>t+rqBZecrrAb0FubRK&M|JKDG=T;CFyMqYyT`VtmVuoVT#NeKaxu;_0DJFZdCwPw` zxP@YFAhUNc}JXi;>;6g zj<~=1hcleV-NaqvCT^#A6s6F2aeWt;xwyWI>$|v}70;##_oDma&Czr5mw1Ktbf6>V zC~l78?_lQQAMg=oFD_s4zk;wtKsoNgb0vCXjuJAL_yd_s=)S~0{F_ta92dC6Rjwm@ zNxhdWL=3T%q%?_?C7qgN;aw%~<3S$basJ2Cn4zT1CBMU+l$59B_vpLiV1_aRw_noj zmz=;NmhvmVv63~cXA`5^4@1gT}e?Q(V@joDYyzKF^$4_D^({VTP%g}qg8;?KA zasJ^9ZY5ss_$%l<{#Fo{cKfA^Q35wpTHmG1P?qwTp|ra$T?O}4x;hUbW9h!kMjxfG z1!00cCHOZr!7U|xMmKuW2mL4LJwfIKeJ9ABAa}w~%wQJ!Pgucf*0C9#C+IxEI}+S| zf^HKobA#JKSSG}`SLRL%Qiud(E|W=P?!m2;aVuqHFY_o*@Dwd*&D-d^%)7jg&dYp^ zIm&#=*L+KN%v5GFYdIZ+iP6|`;*)qT(H$f%;V)!PlsWMfXSfoCNjgu;MIPKqQhsDl zDv9osbf2XAq*SV)_awb1x%;H%Jcf5AxtS!{liKnE?kCCJC&`>N5Vw*v40)2qFph~# zLGMX3nS(i!Hn52;=sZd1Nq@2jb0qEO5J!Trtj^0O(S(=j##B64)^3uEQHw^%oa`o& z?I2nA$vRKgd9vKeawp53EO)a0lXaimm5=zGuh4n2zn^TDU>QbMEWY7{B%Z*?e z`Y4|ldn*43Z_tZD3}HC>FR%CVGMCqP`T6|9VwR%&@>}_xo$N*5<@H_uzrTM0y;g8D z6?~@^;wghWsZbu-D^#W`>A1xTb$Ae+SCFg1V?4oAv_StAp5-}S#2zbr!5CI?JP1|6!xfO&JBgjJ}c2Kb-rO|yw z@2aTxinY*rMV(j7BpWkSl)0iisn`X1Dt^Gne8!i2gIlTClRk_??-eKGJ}dr&9aNmd zd={{fCD>)fzqlEMm6B+TPAYwi=PGUEd=RDHr2alu`W1c+8S2cj^juv6uZELf5Is`G+(7 zm-QmLuWXN%{Tt=KA1$n0lwy=19(PpPyp@xwfLp5E1oTPicJ_!Z1c4d)gSrG84Cxwtz+aiaFBUPnv&!(*9%*W=K2DIoy5PRc>%Q z2&>$IIjWSVI_{)OUGAn4S>(`^`)S6*yvQrGrvtC^CY^YP_t1ZpkN5=nt1LvfRYUYr z^A2U(GDl+)Fjt ztI1wX_G*vv1W)k{?dXCVuhtW{Qmr2Y`2o4BjYQ|w#xaq_EMqzPuC|J`Y`_fFwz8c+ zFi$nv?~0`!E%=yGc%<1}1cN6K2@$XIgL&%*jce>o^a;LwH-qSns z7CKLVpAYf()6J4@mh|Dso-TX3?CI0cb^2`PB7eHP>3^f^^i!Ng=jn2%>pWfO={m1& zZ`E^C68BQQ4EnB~jJ~Uzp?Vrsxr-W@r@HLb-=shD*v-u#tl_yDO?ingk-3J*%W1+w@`(V=;HFIn3u5++Zyo)cOsx*D`x8v)3|vE#FVAeH`R4 zXSg1OwF^@j`>5RkH&ffUS^HbM<9)UJVo$XPG8%K%_RiYN*^GD9-ir6tK7hYp+wIhL zJGD>YUA5gy?OQ=u=MHkw2=mryNgJNS%yrCM$INxiT*u6HI`Jjn&<*!crw@9sBTtxopoR13x33mbr+!5x(m^5-F0ll zymhyu+q$}~dy)%W<{D5 z^lqItD2#p@B;vbh;BPc|o;P?4&o}UVgSjkcEgRU(Hg>U>{T$**5H`$%4jSH%85^3h zp&1*t;04Ur@MX-?(5*N8o&gMIC}SAMM5ZteGdDaRgpG<|zDBjEi#;}SUybgeDfi)h zjau<6W@+>iuVJP}Z_@=cHTsk<_?mC&i!6=$GZlB(Xc@n;3bQxTdn3I!(t9JbH`>F^ zAk5HVhFi)ob4D}lH^V(;m^s64Gg@Pp8Qz!C4c}8nANnzb;f&%(%%1TRGnvCYmLf}r z9c1k07{2ceon&0(3b%tWGsI11=HpKEm064ul%gEvNg;y=c?_Lp+EJ#gnL5kVS!O#r z@H)MaCvzLVyG-9f=4GyNBM7s+Gb<0?n-xnuWhjgHW!YI)HL6pKI%LwAd$^ZJc$CNS z-mLe6Fxx!Y{&u#%o1LF1+-!DH;wVXJ5=o{4mGHi7@5}bSZ12l$jb<_BNJcAo={4Dm>_$BPCvEKZ5uZ4}@ zqBHKiaaTU#Q@-G9zM}`d`JMp`W+)>V%~&QdnQ6>mHuG4(B9^k8m8@Yso7l?l>|{58 zae%}8%?VC%mVdd#Rc>%Q2y^T`$KG@7J;&a2>^;ZcbL>6G-gE3d$KG?wVAnZSNv9?< z<}5?59JzAjYGTh#^wz{~o7ioWHta`+CTBR$#UQ*#XZL)Dp6=1pJ$h<-C*Ik#1o3!h z(-BNTFHQB*)H@$&%j>+s+jQY_5I&fTJVa7}?&$hK_wb;5cyLq@HY-at%+SmX&FV0Z z-!MZnGc;Qtgw2~__sz}F+zid1;}CjmZieP&XnrLKA9@EfJoFXc;+>DR$N&7X_xOO1 z1OF>$3Q~v|V(HIle#DJFJ}C&Fs7zhz(~wN;{)r9P_Y?O0#P31)H0-7WOcq8urt;@vIu(BfwnvLpywX7C`*d4$LD z?v@8RjQeVNA_!Zx$Gok~+seGH%-iaA5VkHr6on~DKkT6O7{)O%2-|pfn>y5^0p8hW z33kwCBU{)WgwJ~Sv-bY1nV)@$b{xk&KWpY^uX8I1+xq_6cEikVeRFMnbI%na5i>tm zo{IS1o|}W2pId-$?0N5h{yrYS%+H(odGCMTH}(8}?Em?rLHL6Azu@j(=*+wL?qBf! z7kxu7-ibZG7>)P8IE)e4^NYUoc4lpt!##LcJN>pZYr8+$jd!&>5QOc`+WvLkz`NSJ z@%CnYH3Hx3tKRi$e!4T5Aq;0!5Oy$U2RGg!otk)O2Xl7#jg_pyJ74qe*Pf;Yt?|y+ z?Dn-YoZ|wQgYb1TzWyb?)7QU4w;k=ZV<}3b+m6YMVLCI>ZO8dR*vURSc~2*OcG71j zd+f9wGj`HvCw+FZ$Ik6AV`uN`+?9{G6@*>P*hQaR^x4H8yY$11UA(KyI3@<+JC&$S zUGAn)5Wc^Z4ftl>_szWTZo59gbG*RIxZAELFk{!N+~9T)e((uq{J=N!fp6x6{z3Td zYW$6F|6mt;gYdgn_#5AKpd)YbZxD712(hPb_SEfL1~8dv%wRTl(#`F4TZFvbmSaEN z*6ZYS^NARt6lhyC1hJHUa>~@|D$lgu%?!~BueRkJhcQ@C48J_E*!yc*J$D`<> z$5TAR^T^*r{vL1A347>a4?XO>$9L$WM{o4dV-Q0a#uR>HA>P%)ef3zydN#3@?UFIuY7N#h1l%zC?Bx9F7?XqV>+>qZ+4gGd%*t043^B``jr<>~e7;n&v zS=dugo%AY&=X$-!7mPvXUNZNZ$!v7rOXt0G-fJBj*^KPH_Hh^;_R@W?Go0rldheZw zNOa%ZyLu;(Lq!7iCxo2T_a)5Jw=?qhmA~&NxSzh?&e};_xSMYZb z4#-axd?N$g*8sB&n1dY*ScV-8Sji@297)Qpe}dQh)mqgK-~{??*ls_&p`Jw@IyX9?*qR==L5Ubiys+}z6VZb zD%0_u51h+<7GMVhm#~NHK{!aSgR;=cAbT9-xj|bv8-#-kA@g9F2Pcq7C90$I!L^Zn zaD5tZANn8s2#@nL<`~?Dw!DEE2J3$CmwZDHdhcLM-zCAmb06@$beDzhIX`B1qvL^fBah-oy@u zbm3!U9?}iDhsZsoFa7X$hR8ld|3lpSke`^%JoG+fA?w)4AME09{^1Pgxy&_gaytn9 zj%qkm_e1Z(oeb6Y(0b^4Xa?Cd;a(n~IqrMtOT0pRI?$1~Fz?WJc^`Z5TdLvEp_qT@ zz996Qr{S>jH03q=Fdh95)B7;J57Yaw{TxT;VHc5mnB2qcV3-{Yw}asYi9z4Pi&Gl+ zGdvmZ7+w?e3~!A5!{r|?|M16n61OwF1!frj4&CWRU-~nMAq-~}x*tBCNi5-4e#0FN zUybgE>wfqaw(&b=8g386) zxc`y5A9*_nM-?TG5|l#kqx3#X@1rVEiON*PU5%1|l#HW#Gm{-$3Bu6{xUbP|(Z}d- z>5d(Yb{C_6K<3fokbAV;qo?u{3t5K#N3X&Rqc^dY?Hoe>(HHseUDtzfOh5#A$cGum zltb5J8jyiJW8C|gdwBr&GDh!X9!KY6%rQpSW8UO#I`b}F`3Q52`HV05njcw?UVn_F z3J>AA9|tp^KiH4VKOW^6=eUN>e{}C-Wgi=oi^902vHBkyPZH)Bn}Y7g*2N5C???Az zAI8m$eTo*e!W?7YqbGgn$3S#G*1e1!$ryA$b|O>I_t@W9$!gZJfz52=cg!+&7kjuG zgyV{%+i|VY%Q$_E^W3=8K{&o3Y1BgI@psdZd(hGNN74Iuy^nty*~h=aYrKK}$G?m2 z$LoH)?#K7S_d9+B-Zg$allTd@H+~NDFvED6$Lo6hN&d^D^YItBjPA$Z48jR|pWtRD zFwQOG=T zDsoShd*W>7GM^RbaN-7ZKT+=!cd{GrnD`H8FwaD{GfDnQ@=tPqlcI1xlZxVoCduNr zRKrP4xu0e{%ws%>-Y2!B4bSl+@ADxa^C_S672nbwJDB9ACiTNilV-7%OF=lfIPPJx zdzkzM6IjJjWS)GUi`c;w-A|EuN&)1aBKMRc#G?Nxx}T!^DY~CxhADcVQkVMZcglmv zKgGMIwB-fb(SeSLt^gm7i(;mgWPm_7t%e3b; z-ry}dq5ElipQiU|-RXnQr}_KS24j|Kb6Cp;+{(0V?BGvipY~sdgB;-)H-qpez5f)F z3wQIA9sE>)Lc~y%I7(2PCwPw`EI}93^HLczP1pH!nWuN=UEI%fH#1%4>AjG9y4=&< z%Jf0}z<8$c6Em@c>2@&P4yJp@^o?x6Jk$3h|8)7M`J_>T)-Yu!9*nG{w!&XhU0`$KB6(g;#kUdzfJ+zpWb1cnA4s%;FEO2I0)oWZ=1( z_A}EiX0E~xX39L%4rcB|S2Is=iZh(&0aJ={$x`W)H@5vkwK~9QQOQ37O}}Jm)T|qx(5JpQH0Ra?g=_j@)zP zp3?^RKj&rI(~-B(`5b?Lj#=h>kL+_~pCkL6F^pp(lW{Y1^ghR}&)LU8j&KaOGDq$? z=g|3_%Ulb>xrKC-ZAk2e&f6A(=Gh9`55o9zx&qU#13krxi2%&$IpMV2Rr!r04I?7=S#@_v)n)5hcUa`DG+4G2g;SDx&{|`d_I3h4sir=7r69gva?GPt%eYc?EaA z(A_Nj5M3|)l5gln4~8QD!fD96(0doI!F?>;#8!Ss)`h$I3*9f&`NFH{e4)-4>U@#i zEy_(k?!*ojxt~S$u&64&%SCVUJ@c^7MV?!njCmHfr9JLtv3ptk7G3#*ud#>4_OQ4o zy>T~-M>CcQOl3N=n8R;uLD!4DYw;drUwoLqInI?JTq5(5l9VP9d6u}rC6!2{8r7+V zJuNZE61TGCQS`pVy)4oD61^{JgE^Kw&r8_B5}hw`A4^tar%R)_3(qaJo27%9&oX3Q zx(Yj3s{5rnU%Hol$iDOtM>x-AuA%>Bx?g6FWx8Lc`(-6C!?Mcgepx!TsYe4EVUA_b z(2=)rE6d(R=gZvTvQPN}-7ou&9_V}7SjIDv$xLGgvzd!omi@vac5yWbf7R`;8R+F# zef;XVU)|TQr-N{LL5d;s@^}(RK}XB0(i76d5A}G_sh+(ycPOi{yJt@ z?%tPw&R4ki6GRZ_&h1jppd~w|?m5H+`(|+=_BE<~d$P<`r-9HXop)72hED3b|MGrY|G-5&f^2 zgc(-M#J#WZO|4jo+gTz13b(W3FWk+Fqa5cSPUB`)x|5Y7SqGi3 zY{;WLfxcHhO$%DnmKS)5S1`}Y*Kji{-N;J4t~?WjtBT+oTIIP_A2Xaq$h=DCRqNTv zAMEE4M>xg_WMAc$R_T8A9poaC0u-V!i6rB8R(scKH?#U~GST$+IX zvaTfY)Z;01yUw21>1CZh)_ZQf`&!?O4s=H5^vg|=FyolaG-fat zbF5#8{?~874D0uC5Vy15-K;;wSD3EQJq@U#m#Kc{e~>`z2RwE z(26!Z$BVo|d(5(-BX81^spxjYzd^WBFB|o-(Q_L=XEe)Li_9B0vz6WGXyZ|iA^S$% zZ#>QQAlwuXK_2pBj!lKp|E98-VUurmQytvTrVO%aLQ~AK>3Q_MsVg7xDPQn4-_Zj% zvq|@x2B7av)0oaoW;2fkEMh6YvVv8}zgfo3DY*H~uVJ5?=kO<2f^dsIwj`2_9c*#) zThftvOGD(|BKMXY?%^?>LjPM@V}>m+;oi5r%KON_r90l`_e{er1NnhrjKBVum$}A`Al&X|w#&S|3U^V1+PKZ_vTx5o@7tSjFAwl6`riH`FQfDA9WclC zx9CI{-os4W2QiP`+zi6slW2_Re(%8))*#X-XGd?oX8?oI`;HNe z#vD5qu#m;*e230=tYi)5*s%dOwPPzf|09a(JkGoPfam_Oo1GDqr7|+_bQ3%6V5jbP z>U?KY?nCyS&3K5GwB-f#zf<=+&9PJWJ9WSFbIh>Q?d;V3&LNCs4C9!9Id=Yrd*8W- zeH=vRJKg)vlblBPJ1=lK2>;agpM@w)5#0Nq#VJJsiJ0Zj@}!W%^XT@^iRk4|eeCkw zF88(TDc<1|WZv}^-_Qpg?HY#MyX4*__b$12x%XZA-{szSEoB9((fclcf0tQy9Y^+E zvhR|8*HvzCI|z5*K{W1Ux1H>+MP1y=?nY!G_inxKz8{_MewY_|h4$!s_v^fgzIU5p z_j`2ZBh0f~_T3BFAB1~CDsV5J+tZgBxRE{j-y`!L{qH%z3I63GI^QGvp6lEU!o7E* z|GhEjaBoS>u{ROD?@h-HdmD2P?q+Xu9^rAG#2kCw$zD6z`yD-SD|_AhUiZFtFhgd+WZqYk z+GL=kefRSqvhUOVzDH?;d*Amm?Q!q>%(1UC`rr2zX4vQ6_YGkGG^IdkyM)U61v?#1-)s4^MlzmLH7qAK<@`1!5jzM@hY#O^Mg7+sPlvG zVvd6!@G+mF^Mi{x5QK*!NZ~#_cgSuI&14I^kok~r;Kdkq|6EMf&rTmJ2ClBlVu+9(b{O~5WvYkKplS@H(M8+fau;U{-IWh|OcEo&s zmoz+DiR#p%F7;`Q%ts$W?xS)aeUhhmhL`Dp4v)UYJLvuBhj_=)p7g;yM@J(6QTdNf zW;(N&%Y0-xD)Z6f{KFZ}bCD}tNAG{%K`!zVPZ^TX`QJMKyCRjTN;);DjhX&_f=&!# z0e=PIF?&2#f%|F4H^_Xf9|N(2W4b>k^Ra2jeN66SbC`$zkLmuH?vLsIm>G`g{n#${ zpxy~Mj`v~;>(J|o!r1eP|KYh4ZozMph9~xM44F@y<}6o(@MMV2Pv$}P zlkVkY0ZNd7{!f;}4V^T{$!h5SWF}@f`6#+S`4p{qmgjj9bDaE?0Sv~ypB#bCPr8?r z6PS$dPtIUA`aZdyjcjHszq6Cw*z3vt9O6h2{v-cCGXB#9H~UXFrm~I8L3pYd`Z(2y zEbPGVkcNJLG(08qDc{T~xlhS`>N#G(-#OKu*KqTvKISvNMDM5ceyTTp8O1o<&8gMc z!ztNMZNa^qaxbUc%c;G{eM;_AM{)C~ZUy1#05hDngVXN*wEj;Qq!4y_x+rEiT?1X8 z?!q7zqKh-0J5v#Nb><~H@)n(OLuWqWTl8{9?lZmU!}pBD9?sZ<-y#kD4rzGC9B1Y- zpH-OQ%%8aTGj8b2VgBX>|6q=@`6x{y$yC6-oOLf}t5F?0I9r#yd6>s|0(W}$Y25zV zHrT;gJ2-2Wv+a15Zy1km&z=gxb9y{eM#<1-_xIg{K!P~f9WT5e@XY37T_J1+}S1bT-t^F zm*l@B|D_Y0;w-};gvUrlGX@Sl!w?XHZU*r|q z(*ZMGwuj5|U!KYq{tdz_aoFV*&t0*fE2CM49bA$5iXB|p%5L2ImA^U8Kb%JPD|T=- zBscjeNHj%=r5x$h#=EXIK=!LS==|z^JcZ0x-{(VgepQ~U?&a#Ybf*`6(fd{VyK0WB z)0v6Rug>LXbbfUS=D50?m8?eR*K%Rk*Y4+adgHlkc604&5MD1%5;9*;!49tL{<_Yu zHzWhu{Vr*Ey$O%%k${`md zj*V>QR1k58jCb6{qjX^qi#ZrXgm;igCDN!yI`xq`ya%~Mxx;2WL`&N80xx5Rup@8L ziO-Qg?2mVaLm0^z#xVgi_+KLe~+6DMBp8DMbS2 zh$u^WQpn+X^cpdd4V(!ga(OOSJ)YtnKH+n|;v4$#1H;gHuF?F6?73z!AKmBDVXoz@ zMDMxuo@*C-Il+JLI?qL}aWja>9S~xM+%o5`L2cy8-GB_TX@cH!>pi!7$^8f~(T-Pn z4V~xKdG5}<%lmx5$GEB7!*L(E4+If;BG5^m`|w;Ix0PomTaY=A%z5^65Z&j|d7evL zLH0a1xD`a?%}+G?&sz-L=QT&(B$BC)8S?5rZ&U8)As*!k{)aj8zKyQ)cB3ac&)biI z{J=0qG6ucp)py>-Eag|+PTp0l#a{Dn!Yp~Wvx9$whmn-^q#*na_4`Ku6)RM^rA2Qv4i~P$Ul8yjw^E=4@syz~zS9ErX^5LCkVRwe!43-8L4oF&rNCp@ zLxH#GgKi7_fnEygqoC&szRXvQWg0RUoXuR8pre9oS&!@mbzg8R`#8+soZt-RD0mV5 zN9Dl`QN<}m0?AaM5|uGWR8#aF)rRMIkym(?*Lf2+qTEcBzN7lmj{yu~2*Vl0 z7|aqifk~|5Xb@3Iw}sNsOCfy}@?4>X?B-e!5gmcd(UIh*C_0KRLlUw_>pnV#n$)8K z8RTG&==;%sbPLQ7?cbZ|H*i1E@6wfz_yluA4@KY6vzf;N7O|A&ti;Vk>pprD`i}ma z)T;ac2ZgM+_C>+n-=(g~u=%uhe3VSZ5Fn93~Pa$(mYkVIu?a)z7XY?MU z_m~fmJ*FGI`5yhp3_f0!42Ss&XROdx?Uevu8-NH6xFM5!_Ie`v~p64QZFRJ(0NQzMk?}~Ld zv9iZj!tKRYr6DrM+DWW?k9F^{^2EN1dyjpSPUt;W@39|Zj@bSTWH369)p@MWV}HaP zu@jigRCFGDJcuY(kZL?eXFONTZi@Yd8;Q$<%y9*KlRHlCIJx7-vk;l$ma&`_tY#e> z+00gc=MOFf5ygv8ho{j`@ez2gxS31jBL%lzq6W38OBQ-B@gQ=Sc$i0VFD2UY67A@K z9h5LfiFbI9Z!klN9~j0+d`l&CUP9+3bY8+7CDx$Z5(hYpTPfjIO1PC0XZe>)T*W<> zEKE_{Ov&Q7`;w)xgOYYo(hf>iq%u{Izod*Md*E*U)@Ve@i$O%GQe@B?eU$o&Z?S_? zJsF71rN$t4DY;8cVhTUA82y*}4KtKl&nC98ANfn2=f8Kk^-?#3i1>gAa$|=0By=5L zj|Rx&cT6MVn{Y4gC0_6G?j>I5@#cuvb^PnR!CQ3ZUApoSpYSFdayAa_DYF7%(E`-Bq2V}^usxSxbd)J6UTy(f5A zf}2Trf~ROfE6kAa9(wj0rV$DKkSD>dBn)FDdQTX~M0B2Djs#sNtYkH7*}!J(G+_rj z+09M{m5V5&6M}9 z^3U-y?Rkxkn4x?(bX|T7eYs%~BKSlQ` zpYs)FNa>0DN%@}9OlB(XC1nY}vVyg2z}=*5#jT{AM(-(lPjUMxw}Oa@vQ>0974uL8 z_foMqr7%lHy;f{ZTV7x&x~pi{70p-Cdn+ztDa+Z&7Pj*Tx~r&zin^;*h(_2;rGa>+ zl3pvF;~F=Eh}3`(SyD@rh#N?)Kqac9$J88}azApWKFZ@fNh@SceUH!3Q>x6VYmmcl zi$?I5DEJ}O6{hst`WtcS`8l*b)bw&TiGxr;XRVi7Cx_babQ z2bI02@Nj%y) z{?qjDcSs}BygzLT-ks*%Y5Gsof0ZcYuM$sb%HaJ~s-ed!wWv#dbXi4?Di5O1D!m!T za7N($Ri?3*{T$*b$N7gdoaZ7}xQa%Jt@^U8yiN=1b7NZ36Rh6x(`KvyHJy!i6 z&(Mlzd7hVOM+Z9c7M*#Qu6)F&e8JazM-R+WwJ+wVYL2QptU5l3sHW#?zPoBK(;jzu zmrm}=CWofDuk;#Z;(wmr1mCdV=!~eIhkWEm*VXN!`YP72o=rhSjnC*sANt|$YwEeC zJFV&cHCxa+h^Q5V4r(P)judv|c50o#z1BJ#MAWvE+LM^VPs|J=>b$_4yiFI}P2I9o zBb}Pm;YJWqFA{m{$y={5i&%@i_2jL$HHfJHCHkr_Z+&^|{}4pn-3Z}1j&=y&=eGAf|!3_HlE z%iXxQ4D)CBelq^yG}kdp#!YSq5t#)jh?z3oR%U4u&}XJTGpnMD%)6*g2KJemMPnZ3 z5gz4n+G4&;88h8Sri_`o&FqAJGe74G^pyEEddlq200uFZag1jobD76{+(@Py$y|*) z$y~=ybe6e`Jsii(nP$$k_snaUIn&IUw}OZ)`^z$OmYK5(5s#U(%$$`-70jGv<}CZq zYJ{1y%$$|YLzp?s%vq1|EN0E}ePy+y1F!P|pV5oam@8`nlbOa0W@EN2b7d`JGu!x` zKQL3)UiNc{qqylT^JQJY{<4cx8QHS`hxcdeH+vZR%l?V&xT$RYWa}mS3Z88olAC-K zB8FJ}&Bi5Z#w&cvci2bG&V=$r7UMH8!%U6b2T`%6<0;zk zB5owdcbB8HoR864&bM?&e>r_|Cpm5;$9r>hm@|_(%;y(=Wd*BQhxg`qZ_W;Mm!q?s zQ=H{ru5mMnXc7>C9-0)u{4JL88(a8`103dW{GAs5P78mhh38v(zNH>pdcLI|Ti%Jk z(=v)0n6ssMT24XUmilSAk~M6_?Y8uemglk4mi}fdf3uap*(w)>DM~R);9grLkU}bH zxYt&7s7rks|Nnd6>i_ru|NsAYM4Ko64?yyGrvLx| diff --git a/YToke/Data/VideoListProvider/InvidiousAPIVideoListProvider.swift b/YToke/Data/VideoListProvider/InvidiousAPIVideoListProvider.swift deleted file mode 100644 index d3ce9d0..0000000 --- a/YToke/Data/VideoListProvider/InvidiousAPIVideoListProvider.swift +++ /dev/null @@ -1,89 +0,0 @@ -// -// InvidiousAPIVideoListProvider.swift -// YToke -// -// Created by Lyt on 2020/7/27. -// Copyright © 2020 TestOrganization. All rights reserved. -// - -import Foundation -import os.log - -enum InvidiousAPIError: Error { - case unableToGenerateURL - case fetchDataError - case parseDataError -} - -final class InvidiousAPIVideoListProvider: VideoListProvider { - - private static let endpoint = "https://www.invidio.us/api/v1/search" - - private let session: URLSession - - init(session: URLSession = URLSession.shared) { - self.session = session - } - - func fetch(query: String, page: Int, onCompletion: @escaping (VideoListProviderResult) -> Void) { - var urlComponents = URLComponents(string: Self.endpoint) - urlComponents?.queryItems = [ - URLQueryItem(name: "q", value: "\(query) ktv"), - URLQueryItem(name: "page", value: "\(page)") - ] - - guard let url = urlComponents?.url else { - onCompletion(.failure(InvidiousAPIError.unableToGenerateURL)) - return - } - - let urlRequest = URLRequest(url: url) - let task = session.dataTask(with: urlRequest) { (data, _, error) in - if error != nil { - onCompletion(.failure(InvidiousAPIError.fetchDataError)) - return - } - - guard let data = data else { - onCompletion(.failure(InvidiousAPIError.fetchDataError)) - return - } - - do { - let invidiousResult = try JSONDecoder().decode(Array.self, from: data) - onCompletion(.success(invidiousResult.map { $0.video })) - } catch { - os_log("ERROR PARSING JSON DATA") - onCompletion(.failure(InvidiousAPIError.parseDataError)) - return - } - } - task.resume() - } -} - -private struct InvidiousVideo: Decodable { - let title: String - let videoId: String - let videoThumbnails: [InvidiousThumbnails] - - struct InvidiousThumbnails: Decodable { - let quality: String - let url: String - } -} - -extension InvidiousVideo { - var video: Video { - if let thumbnailString = videoThumbnails.first(where: { $0.quality == "high" })?.url { - let url = URL(string: thumbnailString) - return Video(id: videoId, - title: title, - thumbnail: url) - } else { - return Video(id: videoId, - title: title, - thumbnail: nil) - } - } -} diff --git a/YToke/Data/VideoListProvider/YTokeBackendVideoListProvider.swift b/YToke/Data/VideoListProvider/YTokeBackendVideoListProvider.swift new file mode 100644 index 0000000..012a6d5 --- /dev/null +++ b/YToke/Data/VideoListProvider/YTokeBackendVideoListProvider.swift @@ -0,0 +1,113 @@ +// +// YTokeBackendVideoListProvider.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation +import os.log + +enum YTokeBackendError: Error { + case unableToGenerateURL + case fetchDataError + case parseDataError +} + +final class YTokeBackendVideoListProvider: VideoListProvider { + + private static let endpoint = "https://ytokebackend.appspot.com/videos" + + private let session: URLSession + + init(session: URLSession = URLSession.shared) { + self.session = session + } + + func fetch(query: String, page: Int, onCompletion: @escaping (VideoListProviderResult) -> Void) { + var urlComponents = URLComponents(string: Self.endpoint) + urlComponents?.queryItems = [ + URLQueryItem(name: "q", value: "\(query)"), + URLQueryItem(name: "page", value: "\(page)") + ] + + guard let url = urlComponents?.url else { + onCompletion(.failure(YTokeBackendError.unableToGenerateURL)) + return + } + + let urlRequest = URLRequest(url: url) + let task = session.dataTask(with: urlRequest) { (data, _, error) in + if error != nil { + onCompletion(.failure(YTokeBackendError.fetchDataError)) + return + } + + guard let data = data else { + onCompletion(.failure(YTokeBackendError.fetchDataError)) + return + } + + do { + let result = try JSONDecoder().decode(YTokeBackendResponse.self, from: data) + onCompletion(.success(result.videos.map { $0.video })) + } catch { + os_log("ERROR PARSING JSON DATA") + onCompletion(.failure(YTokeBackendError.parseDataError)) + return + } + } + task.resume() + } +} + +private struct YTokeBackendResponse: Decodable { + + let q: String + let videos: [Video] + + struct Video: Decodable { + let title: String + let videoId: String + let thumbnails: [Thumbnail] + let tags: [String]? + let percentageFinished: Float? + } + + struct Thumbnail: Decodable { + let quality: String + let url: String + } +} + +private extension YTokeBackendResponse.Video { + var video: Video { + if let urlString = thumbnails.first(where: { $0.quality == "high" })?.url { + return Video(id: self.videoId, + title: self.title, + thumbnail: URL(string: urlString), + percentageFinished: self.percentageFinished, + tag: self.tags?.compactMap { $0.videoTag }) + } else { + return Video(id: self.videoId, + title: self.title, + thumbnail: nil, + percentageFinished: self.percentageFinished, + tag: self.tags?.compactMap { $0.videoTag }) + } + } +} + +private extension String { + var videoTag: VideoTag? { + switch self { + case "OFF_VOCAL": + return .offVocal + case "WITH_VOCAL": + return .withVocal + default: + return nil + } + } +} diff --git a/YToke/Data/VideoStats/StandardVideoStatsMutationProvider.swift b/YToke/Data/VideoStats/StandardVideoStatsMutationProvider.swift new file mode 100644 index 0000000..48587bb --- /dev/null +++ b/YToke/Data/VideoStats/StandardVideoStatsMutationProvider.swift @@ -0,0 +1,66 @@ +// +// StandardVideoStatsMutationProvider.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +final class StandardVideoStatsMutationProvider: VideoStatsMutationProvider { + + private static let endpoint = "https://ytokebackend.appspot.com/video/stats" + + private let session: URLSession + + init(session: URLSession = URLSession.shared) { + self.session = session + } + + func reportTag(videoId: String, tag: VideoTag) { + let parameters = "videoId=\(videoId)&tag=\(tag.queryParameter)" + let postData = parameters.data(using: .utf8) + + guard let url = URL(string: "\(Self.endpoint)/tag") else { + return + } + + var request = URLRequest(url: url) + request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + request.httpMethod = "POST" + request.httpBody = postData + + let task = session.dataTask(with: request) + task.resume() + } + + func reportImpression(videoId: String, percentage: Double) { + let parameters = "videoId=\(videoId)&percentage=\(percentage)" + let postData = parameters.data(using: .utf8) + + guard let url = URL(string: "\(Self.endpoint)/impression") else { + return + } + + var request = URLRequest(url: url) + request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") + request.httpMethod = "POST" + request.httpBody = postData + + let task = session.dataTask(with: request) + task.resume() + } + +} + +private extension VideoTag { + var queryParameter: String { + switch self { + case .offVocal: + return "OFF_VOCAL" + case .withVocal: + return "WITH_VOCAL" + } + } +} diff --git a/YToke/Data/VideoStats/VideoStatsMutationProvider.swift b/YToke/Data/VideoStats/VideoStatsMutationProvider.swift new file mode 100644 index 0000000..d8a87aa --- /dev/null +++ b/YToke/Data/VideoStats/VideoStatsMutationProvider.swift @@ -0,0 +1,18 @@ +// +// VideoStatsMutationProvider.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +/// Report video stats information to the backend +protocol VideoStatsMutationProvider { + + func reportTag(videoId: String, tag: VideoTag) + + func reportImpression(videoId: String, percentage: Double) + +} diff --git a/YToke/DependencyContainer/DependencyContainer.swift b/YToke/DependencyContainer/DependencyContainer.swift index 8631932..9d27f8f 100644 --- a/YToke/DependencyContainer/DependencyContainer.swift +++ b/YToke/DependencyContainer/DependencyContainer.swift @@ -15,6 +15,7 @@ struct DataContainer { let popUpAlertProvider: PopUpAlertProvider let audioDevicesProvider: AudioDevicesProvider let microphoneProvider: MicrophoneProvider + let videoStatsMutationProvider: VideoStatsMutationProvider } struct RepositoryContainer { @@ -23,6 +24,7 @@ struct RepositoryContainer { let privacyPermissionRepository: PrivacyPermissionRepository let systemNavigator: SystemNavigator let audioInputRepository: AudioInputRepository + let videoStatsRepository: VideoStatsRepository } protocol DependencyContainer { diff --git a/YToke/DependencyContainer/StandardDependencyContainer.swift b/YToke/DependencyContainer/StandardDependencyContainer.swift index c70e3da..554ccc1 100644 --- a/YToke/DependencyContainer/StandardDependencyContainer.swift +++ b/YToke/DependencyContainer/StandardDependencyContainer.swift @@ -12,11 +12,12 @@ struct StandardDependencyContainer: DependencyContainer { let data: DataContainer = { DataContainer(videoStreamingProvider: XCDYoutubeVideoStreamingProvider(), - videoListProvider: InvidiousAPIVideoListProvider(), + videoListProvider: YTokeBackendVideoListProvider(), avPrivacyPermissionProvider: MacOSAVPrivacyPermissionProvider(), popUpAlertProvider: StandardPopUpAlertProvider(), audioDevicesProvider: MacOSAudioDevicesProvider(), - microphoneProvider: AVAudioEngineMicrophoneProvider()) + microphoneProvider: AVAudioEngineMicrophoneProvider(), + videoStatsMutationProvider: StandardVideoStatsMutationProvider()) }() let repo: RepositoryContainer @@ -36,11 +37,15 @@ struct StandardDependencyContainer: DependencyContainer { microphoneProvider: data.microphoneProvider, alertProvider: data.popUpAlertProvider, privacyPermissionRepository: privacyPermissionRepository) + + // swiftlint:disable:next line_length + let videoStatsRepository = StandardVideoStatsRepository(videoStatsMutationProvider: data.videoStatsMutationProvider) repo = RepositoryContainer(videoStreamingRepository: videoStreamingRepository, videoListRepository: videoListRepository, privacyPermissionRepository: privacyPermissionRepository, systemNavigator: MacOSSystemNavigator(), - audioInputRepository: audioInputRepository) + audioInputRepository: audioInputRepository, + videoStatsRepository: videoStatsRepository) } } diff --git a/YToke/Repository/VideoListRepository/Video.swift b/YToke/Repository/VideoListRepository/Video.swift index 3d9f39c..d36863b 100644 --- a/YToke/Repository/VideoListRepository/Video.swift +++ b/YToke/Repository/VideoListRepository/Video.swift @@ -12,6 +12,8 @@ struct Video: Codable { let id: String let title: String let thumbnail: URL? + let percentageFinished: Float? + let tag: [VideoTag]? } extension Video: Equatable { diff --git a/YToke/Repository/VideoListRepository/VideoTag.swift b/YToke/Repository/VideoListRepository/VideoTag.swift new file mode 100644 index 0000000..f2837b5 --- /dev/null +++ b/YToke/Repository/VideoListRepository/VideoTag.swift @@ -0,0 +1,14 @@ +// +// VideoTag.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +enum VideoTag: String, Codable { + case withVocal + case offVocal +} diff --git a/YToke/Repository/VideoStatsRepository/StandardVideoStatsRepository.swift b/YToke/Repository/VideoStatsRepository/StandardVideoStatsRepository.swift new file mode 100644 index 0000000..1938d30 --- /dev/null +++ b/YToke/Repository/VideoStatsRepository/StandardVideoStatsRepository.swift @@ -0,0 +1,27 @@ +// +// StandardVideoStatsRepository.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +final class StandardVideoStatsRepository: VideoStatsRepository { + + private let videoStatsMutationProvider: VideoStatsMutationProvider + + init(videoStatsMutationProvider: VideoStatsMutationProvider) { + self.videoStatsMutationProvider = videoStatsMutationProvider + } + + func reportTag(videoId: String, tag: VideoTag) { + videoStatsMutationProvider.reportTag(videoId: videoId, tag: tag) + } + + func reportImpression(videoId: String, percentage: Double) { + videoStatsMutationProvider.reportImpression(videoId: videoId, percentage: percentage) + } + +} diff --git a/YToke/Repository/VideoStatsRepository/VideoStatsRepository.swift b/YToke/Repository/VideoStatsRepository/VideoStatsRepository.swift new file mode 100644 index 0000000..f022976 --- /dev/null +++ b/YToke/Repository/VideoStatsRepository/VideoStatsRepository.swift @@ -0,0 +1,19 @@ +// +// VideoStatsRepository.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +/// Repository for reporting video stats +protocol VideoStatsRepository { + + /// Report video tagged + func reportTag(videoId: String, tag: VideoTag) + + /// Report video played, with the percentage of finishing + func reportImpression(videoId: String, percentage: Double) +} diff --git a/YToke/View/VideoList/Views/Components/TagPill.swift b/YToke/View/VideoList/Views/Components/TagPill.swift new file mode 100644 index 0000000..5fb7165 --- /dev/null +++ b/YToke/View/VideoList/Views/Components/TagPill.swift @@ -0,0 +1,54 @@ +// +// TagPill.swift +// YToke +// +// Created by Lyt on 9/15/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import AppKit +import Foundation + +final class TagPill: NSView { + + private lazy var label: NSTextField = { + let label = NSTextField(labelWithString: "") + label.maximumNumberOfLines = 1 + label.isSelectable = false + label.isEditable = false + label.font = .systemFont(ofSize: 10, weight: .semibold) + label.alignment = .center + label.usesSingleLineMode = false + return label + }() + + init(text: String, backgroundColor: NSColor) { + super.init(frame: .zero) + setupLayout() + + wantsLayer = true + label.stringValue = text + layer?.backgroundColor = backgroundColor.cgColor + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(label) + label.translatesAutoresizingMaskIntoConstraints = false + label.setContentCompressionResistancePriority(.required, for: .vertical) + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 6), + label.topAnchor.constraint(equalTo: topAnchor, constant: 4), + label.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -4), + label.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -6) + ]) + } + + override func layout() { + super.layout() + layer?.cornerRadius = self.bounds.height / 2 + } +} diff --git a/YToke/View/VideoList/Views/Components/TagsView.swift b/YToke/View/VideoList/Views/Components/TagsView.swift new file mode 100644 index 0000000..a2a082d --- /dev/null +++ b/YToke/View/VideoList/Views/Components/TagsView.swift @@ -0,0 +1,55 @@ +// +// TagsView.swift +// YToke +// +// Created by Lyt on 9/15/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import AppKit +import Foundation + +final class TagsView: NSView { + + private lazy var stackView: NSStackView = { + let stackView = NSStackView(frame: .zero) + stackView.alignment = .centerY + stackView.distribution = .equalSpacing + return stackView + }() + + init() { + super.init(frame: .zero) + setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(stackView) + stackView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: leadingAnchor), + stackView.topAnchor.constraint(equalTo: topAnchor), + stackView.bottomAnchor.constraint(equalTo: bottomAnchor), + stackView.trailingAnchor.constraint(equalTo: trailingAnchor) + ]) + } + + func configure(contents: [(text: String, backgroundColor: NSColor)]) { + let arrangedSubViews = contents.map { TagPill(text: $0.text, backgroundColor: $0.backgroundColor) } + for view in arrangedSubViews { + stackView.addArrangedSubview(view) + } + } + + override func prepareForReuse() { + for view in stackView.arrangedSubviews { + view.removeFromSuperview() + } + super.prepareForReuse() + } + +} diff --git a/YToke/View/VideoList/Views/VideoCell/VideoListCellItem.swift b/YToke/View/VideoList/Views/VideoCell/VideoListCellItem.swift index 6aecd66..ddf8ca3 100644 --- a/YToke/View/VideoList/Views/VideoCell/VideoListCellItem.swift +++ b/YToke/View/VideoList/Views/VideoCell/VideoListCellItem.swift @@ -23,10 +23,7 @@ final class VideoListCellItem: NSCollectionViewItem { super.viewDidLoad() } - func configure(title: String, imageURL: URL?, isAdded: Bool, onAddVideoTap: (() -> Void)?) { - cellView?.configure(title: title, - imageURL: imageURL, - isAdded: isAdded, - onAddButtonTap: onAddVideoTap) + func configure(_ config: VideoListCellConfig) { + cellView?.configure(config) } } diff --git a/YToke/View/VideoList/Views/VideoCell/VideoListCellView.swift b/YToke/View/VideoList/Views/VideoCell/VideoListCellView.swift index 48e24a4..ffb69ba 100644 --- a/YToke/View/VideoList/Views/VideoCell/VideoListCellView.swift +++ b/YToke/View/VideoList/Views/VideoCell/VideoListCellView.swift @@ -9,6 +9,15 @@ import Cocoa import SDWebImage +struct VideoListCellConfig { + let title: String + let imageURL: URL? + let isAdded: Bool + let onAddButtonTap: (() -> Void)? + let tags: [(text: String, backgroundColor: NSColor)] + let statsText: String? +} + final class VideoListCellView: NSView { private lazy var imageView: NSImageView = { @@ -23,7 +32,7 @@ final class VideoListCellView: NSView { private lazy var titleView: NSTextField = { let titleView = NSTextField(labelWithString: "") - titleView.maximumNumberOfLines = 2 + titleView.maximumNumberOfLines = 1 titleView.isSelectable = false titleView.isEditable = false titleView.cell?.truncatesLastVisibleLine = true @@ -31,6 +40,11 @@ final class VideoListCellView: NSView { return titleView }() + private lazy var tagsView: TagsView = { + let tagsView = TagsView() + return tagsView + }() + private lazy var button: AddButton = { let button = AddButton { [weak self] in self?.onButtonTap() @@ -38,6 +52,17 @@ final class VideoListCellView: NSView { return button }() + private lazy var statsLabel: NSTextField = { + let statsLabel = NSTextField(labelWithString: "") + statsLabel.maximumNumberOfLines = 1 + statsLabel.isSelectable = false + statsLabel.isEditable = false + statsLabel.cell?.truncatesLastVisibleLine = true + statsLabel.cell?.lineBreakMode = .byWordWrapping + statsLabel.font = .systemFont(ofSize: 10, weight: .semibold) + return statsLabel + }() + private var onAddButtonTap: (() -> Void)? override init(frame frameRect: NSRect) { @@ -61,13 +86,13 @@ final class VideoListCellView: NSView { addSubview(titleView) titleView.translatesAutoresizingMaskIntoConstraints = false - titleView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical) + titleView.setContentCompressionResistancePriority(.required, for: .vertical) titleView.setContentHuggingPriority(.defaultHigh, for: .vertical) NSLayoutConstraint.activate([ titleView.leadingAnchor.constraint(equalTo: leadingAnchor), titleView.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 8), titleView.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor), - titleView.bottomAnchor.constraint(equalTo: bottomAnchor) + titleView.heightAnchor.constraint(equalToConstant: 16) ]) imageView.addSubview(button) @@ -78,6 +103,27 @@ final class VideoListCellView: NSView { button.bottomAnchor.constraint(equalTo: imageView.bottomAnchor, constant: -8), button.trailingAnchor.constraint(equalTo: imageView.trailingAnchor, constant: -8) ]) + + addSubview(tagsView) + tagsView.translatesAutoresizingMaskIntoConstraints = false + tagsView.setContentCompressionResistancePriority(.required, for: .vertical) + NSLayoutConstraint.activate([ + tagsView.leadingAnchor.constraint(equalTo: leadingAnchor), + tagsView.topAnchor.constraint(equalTo: titleView.bottomAnchor, constant: 4), + tagsView.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor), + tagsView.heightAnchor.constraint(equalToConstant: 22) + ]) + + addSubview(statsLabel) + statsLabel.translatesAutoresizingMaskIntoConstraints = false + statsLabel.setContentCompressionResistancePriority(.required, for: .vertical) + NSLayoutConstraint.activate([ + statsLabel.topAnchor.constraint(equalTo: tagsView.bottomAnchor, constant: 4), + statsLabel.leadingAnchor.constraint(equalTo: leadingAnchor), + statsLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor), + statsLabel.bottomAnchor.constraint(equalTo: bottomAnchor), + statsLabel.heightAnchor.constraint(equalToConstant: 16) + ]) } override func layout() { @@ -85,11 +131,13 @@ final class VideoListCellView: NSView { button.layer?.cornerRadius = button.bounds.width / 2.0 } - func configure(title: String, imageURL: URL?, isAdded: Bool, onAddButtonTap: (() -> Void)?) { - titleView.stringValue = title - imageView.sd_setImage(with: imageURL) - self.onAddButtonTap = onAddButtonTap - button.configure(isAdded: isAdded) + func configure(_ config: VideoListCellConfig) { + titleView.stringValue = config.title + imageView.sd_setImage(with: config.imageURL) + self.onAddButtonTap = config.onAddButtonTap + button.configure(isAdded: config.isAdded) + tagsView.configure(contents: config.tags) + statsLabel.stringValue = config.statsText ?? "" } @objc private func onButtonTap() { @@ -101,5 +149,7 @@ final class VideoListCellView: NSView { super.prepareForReuse() imageView.sd_cancelCurrentImageLoad() button.prepareForReuse() + tagsView.prepareForReuse() + statsLabel.stringValue = "" } } diff --git a/YToke/View/VideoList/Views/VideoListViewController.swift b/YToke/View/VideoList/Views/VideoListViewController.swift index 9f4687a..04881bf 100644 --- a/YToke/View/VideoList/Views/VideoListViewController.swift +++ b/YToke/View/VideoList/Views/VideoListViewController.swift @@ -321,13 +321,19 @@ extension VideoListViewController: NSCollectionViewDataSource { } private func configureAsVideoCell(item: VideoListCellItem, itemIndex: Int) -> NSCollectionViewItem { + // TODO: The ViewModel should direct supply the things an item will need. + // This ViewController should not know about Video let video = viewModel.videos[itemIndex] - item.configure(title: video.video.title, - imageURL: video.video.thumbnail, - isAdded: video.isAdded, - onAddVideoTap: { [weak self] in - self?.viewModel.onTapAddVideo(video.video) - }) + let tags = video.video.tag?.compactMap { tag -> (text: String, backgroundColor: NSColor) in + (text: tag.tagText, backgroundColor: tag.presentationColor) + } ?? [] + let config = VideoListCellConfig(title: video.video.title, + imageURL: video.video.thumbnail, + isAdded: video.isAdded, + onAddButtonTap: { [weak self] in self?.viewModel.onTapAddVideo(video.video) }, + tags: tags, + statsText: video.video.statsTag) + item.configure(config) return item } } @@ -341,3 +347,34 @@ extension VideoListViewController: NSSearchFieldDelegate { return false } } + +// TODO: These should be in viewModel +private extension Video { + var statsTag: String? { + if let percentage = percentageFinished { + let format = NSLocalizedString("percentage_finished", comment: "%.1f%% user finished") + return String(format: format, percentage * 100) + } + return nil + } +} + +private extension VideoTag { + var tagText: String { + switch self { + case .offVocal: + return NSLocalizedString("no_vocal", comment: "no vocal") + case .withVocal: + return NSLocalizedString("has_vocal", comment: "has vocal") + } + } + + var presentationColor: NSColor { + switch self { + case .offVocal: + return .blue + case .withVocal: + return .red + } + } +} diff --git a/YToke/View/VideoView/ViewModels/.DS_Store b/YToke/View/VideoView/ViewModels/.DS_Store deleted file mode 100644 index 79dd8abedab8b91310553155882d985b1db17d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPfrs;6rX{jyG3OA(}K~%#>T`14sGyHI1p;VXvKuW5-b5MyX{amZg-m9Efs1_ zKY@4o4Bou>1w8l(OuYC7Jb3oxn?IF8f??IeqSa&??^yR96Vn8wQ_c6fU-66Dw8i+9Md4E4Sb zbow(M7>o^Fx~ysOczh(jYaP(071>cE%-O*<`&F=`14sHBlzP8>+u3wUvt&#zQ9rU> zp9H+vtq@4rdFJ{R+RV|0UkQ01OAKh5uInXZy4A|0)3fINd+k}Xm6@BLn>FX}X4-9C zo4S=*$nVvTj$5zVuipw*F>FCxMkRLP1e~5Fy5&Q;MdA0|C4M!G?jrU0@RgCPqsG|y z#MtCmB9TZ=C6d>Y*GtBPW0zl41NL{9s7HgG*C0i=Onu8eCdG)njF?k0#?R%glgjhc z(8f_6awbm$yw{_E5P!QGxRurY{g6b(k}(>V1L}DN8oH57{jHwSt(_29&qt(|_xCBx zcnB=7)>&G(NrDitufDkJ*$(km{Tz)VTHCUN!1k*ocf>MTH&{p^AgmLg$*S9B*RQ4) zzY88y*+SR3EgS=-goBW7V12{4YeY|FS7cB_Gw1<&f-H1^n&=HWLGRE9^bvhQ-_Q>n z!%2J-&)_?F0WadmIFDEGQ@n=PMfE`UVczIYArNl^_B_l(EATz)S0UQ1I9s58UCe-F zOdGy9MU5y16a)V$18jdVK^bNxb_DXR0}Q_c0LCE91$=gwU^S-1ti+B$7y-ee6i}36 zdBwn@9O9@^pl=0+m$^C<%u4JC Sgb0ZG5a2W@qZs(34EzM2M9k^{ diff --git a/YToke/View/VideoView/ViewModels/StandardVideoViewModel.swift b/YToke/View/VideoView/ViewModels/StandardVideoViewModel.swift index 2e47003..d8efc7a 100644 --- a/YToke/View/VideoView/ViewModels/StandardVideoViewModel.swift +++ b/YToke/View/VideoView/ViewModels/StandardVideoViewModel.swift @@ -11,31 +11,47 @@ import os.log final class StandardVideoViewModel: VideoViewModel { + var showDualChoiceView: (() -> Void)? + var hideDualChoiceView: (() -> Void)? + let dualChoiceTitle = NSLocalizedString("has_vocal_question", + comment: "Does this video has singer's vocal?") + let dualChoiceTitleA = NSLocalizedString("yes", comment: "Yes") + let dualChoiceContentA: VideoTag = .withVocal + let dualChoiceTitleB = NSLocalizedString("no", comment: "No") + let dualChoiceContentB: VideoTag = .offVocal + var isLoadingSpinnerHidden: ((Bool) -> Void)? - private var currentPlayingSongName: String? + private var currentVideo: Video? var cycleText: String? { - guard let first = currentPlayingSongName, + guard let first = currentVideo?.title, let second = videoQueue.queue.first?.title else { return nil } - let format = NSLocalizedString("cycle_text_title", comment: "Current playing: %@, next: %@") + let format = NSLocalizedString("cycle_text_title", + comment: "Current playing: %@, next: %@") return String(format: format, first, second) } var volume: ((Float) -> Void)? var streamURL: ((URL) -> Void)? + var currentTime: (() -> Double?)? + var videoDuration: (() -> Double?)? + private var isPlaying = false private let videoQueue: VideoQueue + private var currentVideoId: String? private let mixer: AudioMixer private var mixerToken: AudioMixer.Token = 0 private let videoStreamingRepository: VideoStreamingRepository + private let videoStatsRepository: VideoStatsRepository init(dependencyContainer: DependencyContainer) { self.videoQueue = dependencyContainer.videoQueue self.videoStreamingRepository = dependencyContainer.repo.videoStreamingRepository self.mixer = dependencyContainer.audioMixer + self.videoStatsRepository = dependencyContainer.repo.videoStatsRepository NotificationCenter.default.addObserver(self, selector: #selector(onSongAdded), @@ -69,6 +85,10 @@ final class StandardVideoViewModel: VideoViewModel { prepareAndPlayVideo() } + func onVideoPlayedHalf() { + showDualChoiceView?() + } + @objc private func onSongAdded() { if !isPlaying { prepareAndPlayVideo() @@ -76,18 +96,39 @@ final class StandardVideoViewModel: VideoViewModel { } @objc private func onVideoFinished() { + reportVideoImpression() isPlaying = false - currentPlayingSongName = nil + currentVideo = nil prepareAndPlayVideo() } @objc private func onSkipVideo() { + reportVideoImpression() isPlaying = false - currentPlayingSongName = nil + currentVideo = nil prepareAndPlayVideo() } + private func reportVideoImpression() { + guard let videoId = currentVideo?.id, + let duration = videoDuration?(), + let currentTime = currentTime?(), + duration > 0 else { + return + } + videoStatsRepository.reportImpression(videoId: videoId, percentage: currentTime / duration) + } + + func onDualChoiceViewSelect(tag: VideoTag?) { + hideDualChoiceView?() + guard let videoId = currentVideo?.id, let tag = tag else { + return + } + videoStatsRepository.reportTag(videoId: videoId, tag: tag) + } + private func prepareAndPlayVideo() { + hideDualChoiceView?() guard let nextVideo = videoQueue.next() else { return } @@ -104,7 +145,7 @@ final class StandardVideoViewModel: VideoViewModel { } private func playVideo(video: Video, url: URL) { - currentPlayingSongName = video.title + currentVideo = video streamURL?(url) isLoadingSpinnerHidden?(true) } diff --git a/YToke/View/VideoView/ViewModels/VideoViewModel.swift b/YToke/View/VideoView/ViewModels/VideoViewModel.swift index 9f9294a..6dadc9c 100644 --- a/YToke/View/VideoView/ViewModels/VideoViewModel.swift +++ b/YToke/View/VideoView/ViewModels/VideoViewModel.swift @@ -15,5 +15,18 @@ protocol VideoViewModel { var cycleText: String? { get } var volume: ((Float) -> Void)? { get set } + var currentTime: (() -> Double?)? { get set } + var videoDuration: (() -> Double?)? { get set } + + var dualChoiceTitle: String { get } + var dualChoiceTitleA: String { get } + var dualChoiceContentA: VideoTag { get } + var dualChoiceTitleB: String { get } + var dualChoiceContentB: VideoTag { get } + var showDualChoiceView: (() -> Void)? { get set } + var hideDualChoiceView: (() -> Void)? { get set } + func onAppear() + func onDualChoiceViewSelect(tag: VideoTag?) + func onVideoPlayedHalf() } diff --git a/YToke/View/VideoView/Views/AnimatedCycleTextView.swift b/YToke/View/VideoView/Views/Components/AnimatedCycleTextView.swift similarity index 100% rename from YToke/View/VideoView/Views/AnimatedCycleTextView.swift rename to YToke/View/VideoView/Views/Components/AnimatedCycleTextView.swift diff --git a/YToke/View/VideoView/Views/Components/DualChoiceView.swift b/YToke/View/VideoView/Views/Components/DualChoiceView.swift new file mode 100644 index 0000000..8cb683d --- /dev/null +++ b/YToke/View/VideoView/Views/Components/DualChoiceView.swift @@ -0,0 +1,108 @@ +// +// DualChoiceView.swift +// YToke +// +// Created by Lyt on 9/14/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import AppKit +import Foundation + +final class DualChoiceView: NSControl { + + struct Content { + let title: String + let content: T? + } + + private let title: String + private let contentA: Content + private let contentB: Content + + private lazy var titleLabel: NSTextField = { + let textField = NSTextField(labelWithString: title) + textField.font = .systemFont(ofSize: 16) + textField.alignment = .center + textField.isEditable = false + textField.isSelectable = false + textField.lineBreakMode = .byWordWrapping + return textField + }() + + private lazy var buttonA: NSButton = { + let button = NSButton(title: contentA.title, + target: self, + action: #selector(aSelected)) + return button + }() + + private lazy var buttonB: NSButton = { + let button = NSButton(title: contentB.title, + target: self, + action: #selector(bSelected)) + return button + }() + + private let onSelect: (T?) -> Void + + init(title: String, + contentA: Content, + contentB: Content, + onSelect: @escaping (T?) -> Void) { + self.title = title + self.contentA = contentA + self.contentB = contentB + self.onSelect = onSelect + + super.init(frame: .zero) + + setupLayout() + + layer?.cornerRadius = 10.0 + wantsLayer = true + layer?.backgroundColor = .init(gray: 0.5, alpha: 0.7) + layer?.masksToBounds = true + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(titleLabel) + titleLabel.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint(equalTo: topAnchor, constant: 8), + titleLabel.centerXAnchor.constraint(equalTo: centerXAnchor), + titleLabel.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor, constant: 16), + titleLabel.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -16) + ]) + + addSubview(buttonA) + buttonA.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + buttonA.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 8), + buttonA.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor, constant: 8), + buttonA.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -8), + buttonA.trailingAnchor.constraint(equalTo: centerXAnchor, constant: -4) + ]) + + addSubview(buttonB) + buttonB.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + buttonB.leadingAnchor.constraint(equalTo: buttonA.trailingAnchor, constant: 8), + buttonB.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 8), + buttonB.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -8), + buttonB.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -8) + ]) + } + + @objc private func aSelected() { + onSelect(contentA.content) + } + + @objc private func bSelected() { + onSelect(contentB.content) + } +} diff --git a/YToke/View/VideoView/Views/VideoViewController.swift b/YToke/View/VideoView/Views/VideoViewController.swift index c864ef7..783222d 100644 --- a/YToke/View/VideoView/Views/VideoViewController.swift +++ b/YToke/View/VideoView/Views/VideoViewController.swift @@ -13,6 +13,8 @@ final class VideoViewController: NSViewController { private var viewModel: VideoViewModel + private var timeObserverToken: Any? + private var startPlayingObserverToken: NSKeyValueObservation? private lazy var playerView: AVPlayerView = { let playerView = AVPlayerView() playerView.showsFullScreenToggleButton = true @@ -33,6 +35,8 @@ final class VideoViewController: NSViewController { return textView }() + private var dualChoiceView: NSView? + init(viewModel: VideoViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) @@ -72,6 +76,22 @@ final class VideoViewController: NSViewController { self?.loadingSpinner.startAnimation(nil) } } + + viewModel.showDualChoiceView = { [weak self] in + self?.showDualChoiceView() + } + + viewModel.hideDualChoiceView = { [weak self] in + self?.hideDualChoiceView() + } + + viewModel.videoDuration = { [weak self] in + self?.playerView.player?.currentItem?.duration.seconds + } + + viewModel.currentTime = { [weak self] in + self?.playerView.player?.currentItem?.currentTime().seconds + } } private func setupLayout() { @@ -108,11 +128,57 @@ final class VideoViewController: NSViewController { } func playVideo(streamURL: URL) { + playerView.player?.pause() + startPlayingObserverToken?.invalidate() + removeVideoTimeObserver() let item = AVPlayerItem(url: streamURL) let player = AVPlayer(playerItem: item) playerView.player = player player.volume = 1.0 player.play() animatedTextView.scheduleRun() + startPlayingObserverToken = item.observe(\.duration, options: [.new]) { [weak self] (_, change) in + guard let duration = change.newValue, self?.timeObserverToken == nil else { + return + } + let time = CMTime(seconds: duration.seconds/2, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + let player = self?.playerView.player + self?.timeObserverToken = player?.addBoundaryTimeObserver(forTimes: [NSValue(time: time)], + queue: .main, + using: { [weak self] in + self?.viewModel.onVideoPlayedHalf() + self?.removeVideoTimeObserver() + }) + } + } + + private func removeVideoTimeObserver() { + if let token = timeObserverToken { + playerView.player?.removeTimeObserver(token) + timeObserverToken = nil + } + } + + private func showDualChoiceView() { + let newDualChoiceView = DualChoiceView(title: viewModel.dualChoiceTitle, + contentA: .init(title: viewModel.dualChoiceTitleA, + content: viewModel.dualChoiceContentA), + contentB: .init(title: viewModel.dualChoiceTitleB, + content: viewModel.dualChoiceContentB), + onSelect: { [weak self] in + self?.viewModel.onDualChoiceViewSelect(tag: $0) + }) + dualChoiceView = newDualChoiceView + view.addSubview(newDualChoiceView) + newDualChoiceView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + newDualChoiceView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -38), + newDualChoiceView.centerXAnchor.constraint(equalTo: view.centerXAnchor) + ]) + } + + private func hideDualChoiceView() { + dualChoiceView?.removeFromSuperview() + removeVideoTimeObserver() } } diff --git a/YToke/en.lproj/Localizable.strings b/YToke/en.lproj/Localizable.strings index 8a81547..413d998 100644 --- a/YToke/en.lproj/Localizable.strings +++ b/YToke/en.lproj/Localizable.strings @@ -49,3 +49,15 @@ "audio_permission_information" = "YToke~ does not have microphone access. If you want to use microphone stream, please go to system Settings menu and grant microphone access"; "select_input_device" = "Select input device"; + +"no_vocal" = "no vocal"; + +"has_vocal" = "has vocal"; + +"has_vocal_question" = "Does this video has singer's vocal?"; + +"yes" = "Yes"; + +"no" = "No"; + +"percentage_finished" = "%.1f%% user finished"; diff --git a/YToke/ja.lproj/Localizable.strings b/YToke/ja.lproj/Localizable.strings index 2fb6a92..8330f4b 100644 --- a/YToke/ja.lproj/Localizable.strings +++ b/YToke/ja.lproj/Localizable.strings @@ -49,3 +49,15 @@ "audio_permission_information" = "YToke〜はマイクにアクセスできません。 マイクストリームを使用する場合は、システムの設定メニューに移動してマイクへのアクセスを許可してください"; "select_input_device" = "入力デバイスを選択"; + +"no_vocal" = "オリジナルの歌手はいません"; + +"has_vocal" = "オリジナル曲あり"; + +"has_vocal_question" = "このビデオには歌手のボーカルが含まれていますか?"; + +"yes" = "はい"; + +"no" = "負"; + +"percentage_finished" = "%.1f%%の人がこの歌を歌い終えました"; diff --git a/YToke/ko.lproj/Localizable.strings b/YToke/ko.lproj/Localizable.strings index 40fd17f..a07cb94 100644 --- a/YToke/ko.lproj/Localizable.strings +++ b/YToke/ko.lproj/Localizable.strings @@ -49,3 +49,15 @@ "audio_permission_information" = "YToke ~는 마이크 액세스 권한이 없습니다. 마이크 스트림을 사용하려면 시스템 설정 메뉴로 이동하여 마이크 액세스 권한을 부여하세요."; "select_input_device" = "입력 장치 선택"; + +"no_vocal" = "오리지널 노래 없음"; + +"has_vocal" = "오리지널 노래가 있습니다"; + +"has_vocal_question" = "이 영상에 가수 보컬이 있나요?"; + +"yes" = "예"; + +"no" = "부정"; + +"percentage_finished" = "%.1f%%의 사람들이이 노래를 마쳤습니다."; diff --git a/YToke/zh-Hans.lproj/Localizable.strings b/YToke/zh-Hans.lproj/Localizable.strings index fd1fcf0..0a0cf9a 100644 --- a/YToke/zh-Hans.lproj/Localizable.strings +++ b/YToke/zh-Hans.lproj/Localizable.strings @@ -49,3 +49,15 @@ "audio_permission_information" = "YToke〜无法访问麦克风。 如果要使用麦克风流,请进入系统设置菜单并授予麦克风访问权限"; "select_input_device" = "选择输入设备"; + +"no_vocal" = "没有原唱"; + +"has_vocal" = "有原唱"; + +"has_vocal_question" = "这个视频有原唱吗?"; + +"yes" = "是"; + +"no" = "否"; + +"percentage_finished" = "%.1f%% 的人唱完了这首歌"; diff --git a/YToke/zh-Hant.lproj/Localizable.strings b/YToke/zh-Hant.lproj/Localizable.strings index c67ba43..2fe2bf0 100644 --- a/YToke/zh-Hant.lproj/Localizable.strings +++ b/YToke/zh-Hant.lproj/Localizable.strings @@ -49,3 +49,15 @@ "audio_permission_information" = "YToke〜無法訪問麥克風。 如果要使用麥克風流,請進入系統設置菜單並授予麥克風訪問權限"; "select_input_device" = "選擇輸入設備"; + +"no_vocal" = "沒有原唱"; + +"has_vocal" = "有原唱"; + +"has_vocal_question" = "這部影片有歌手的演唱嗎?"; + +"yes" = "是"; + +"no" = "否"; + +"percentage_finished" = "%.1f%%的人唱完了這首歌"; diff --git a/YTokeTests/Data/StandardVideoStatsMutationProviderTests.swift b/YTokeTests/Data/StandardVideoStatsMutationProviderTests.swift new file mode 100644 index 0000000..b4e63e8 --- /dev/null +++ b/YTokeTests/Data/StandardVideoStatsMutationProviderTests.swift @@ -0,0 +1,66 @@ +// +// StandardVideoStatsMutationProviderTests.swift +// YTokeTests +// +// Created by Lyt on 9/16/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation +import XCTest + +@testable import YToke + +final class StandardVideoStatsMutationProviderTests: XCTestCase { + + private var sut: StandardVideoStatsMutationProvider! + private var mockURLSession: MockURLSession! + + override func setUp() { + super.setUp() + mockURLSession = MockURLSession(response: nil) + sut = StandardVideoStatsMutationProvider(session: mockURLSession) + } + + override func tearDown() { + super.tearDown() + mockURLSession = nil + sut = nil + } + + func test_reportTag_SHOULD_call_API() { + sut.reportTag(videoId: "videoId", tag: .offVocal) + XCTAssertEqual(mockURLSession.numOfDataTaskCalled, 1) + guard let requestURL = mockURLSession.requestURL else { + XCTFail("Unable to get the request url") + return + } + XCTAssertEqual(requestURL.absoluteString, "https://ytokebackend.appspot.com/video/stats/tag") + + let parameters = "videoId=videoId&tag=OFF_VOCAL" + let expectedBody = parameters.data(using: .utf8) + guard let httpBody = mockURLSession.httpBody else { + XCTFail("Unable to get the http body") + return + } + XCTAssertEqual(httpBody, expectedBody) + } + + func test_reportImpression_SHOULD_call_API() { + sut.reportImpression(videoId: "videoId", percentage: 0.5) + XCTAssertEqual(mockURLSession.numOfDataTaskCalled, 1) + guard let requestURL = mockURLSession.requestURL else { + XCTFail("Unable to get the request url") + return + } + XCTAssertEqual(requestURL.absoluteString, "https://ytokebackend.appspot.com/video/stats/impression") + + let parameters = "videoId=videoId&percentage=0.5" + let expectedBody = parameters.data(using: .utf8) + guard let httpBody = mockURLSession.httpBody else { + XCTFail("Unable to get the http body") + return + } + XCTAssertEqual(httpBody, expectedBody) + } +} diff --git a/YTokeTests/Data/InvidiousAPIVideoListProviderTests.swift b/YTokeTests/Data/YTokeBackendVideoListProviderTests.swift similarity index 50% rename from YTokeTests/Data/InvidiousAPIVideoListProviderTests.swift rename to YTokeTests/Data/YTokeBackendVideoListProviderTests.swift index 093fb47..e8531c3 100644 --- a/YTokeTests/Data/InvidiousAPIVideoListProviderTests.swift +++ b/YTokeTests/Data/YTokeBackendVideoListProviderTests.swift @@ -1,8 +1,8 @@ // -// InvidiousAPIVideoListProviderTests.swift +// YTokeBackendVideoListProviderTests.swift // YTokeTests // -// Created by Lyt on 2020/8/11. +// Created by Lyt on 9/16/20. // Copyright © 2020 TestOrganization. All rights reserved. // @@ -11,88 +11,83 @@ import XCTest @testable import YToke -final class InvidiousAPIVideoListProviderTests: XCTestCase { +final class YTokeBackendVideoListProviderTests: XCTestCase { - private var provider: InvidiousAPIVideoListProvider! - private var urlSession: MockURLSession! + private var sut: YTokeBackendVideoListProvider! + private var mockURLSession: MockURLSession! override func setUp() { super.setUp() - urlSession = MockURLSession(response: nil) - provider = InvidiousAPIVideoListProvider(session: urlSession) + mockURLSession = MockURLSession(response: nil) + sut = YTokeBackendVideoListProvider(session: mockURLSession) } override func tearDown() { super.tearDown() - urlSession = nil - provider = nil + mockURLSession = nil + sut = nil } - func test_fetch_SHOULD_callDataTask() { - provider.fetch(query: "SongName", page: 8) { _ in } - XCTAssertEqual(urlSession.numOfDataTaskCalled, 1) - } - - func test_url_components() { - provider.fetch(query: "SongName", page: 8) { _ in } - guard let requestURL = urlSession.requestURL else { + func test_fetch_SHOULD_call_API() { + sut.fetch(query: "song name", page: 3) { _ in } + XCTAssertEqual(mockURLSession.numOfDataTaskCalled, 1) + guard let requestURL = mockURLSession.requestURL else { XCTFail("Unable to get the request url") return } - XCTAssertEqual(requestURL.absoluteString, - "https://www.invidio.us/api/v1/search?q=SongName%20ktv&page=8") + XCTAssertEqual(requestURL.absoluteString, "https://ytokebackend.appspot.com/videos?q=song%20name&page=3") } func test_dataTaskWithError_SHOULD_returnError() { - urlSession.error = FakeError.someError + mockURLSession.error = FakeError.someError let bundle = Bundle(for: type(of: self)) - guard let url = bundle.url(forResource: "MockInvidiosAPI", withExtension: "json"), + guard let url = bundle.url(forResource: "MockYTokeBackendAPI", withExtension: "json"), let json = try? Data(contentsOf: url) else { - XCTFail("Missing file: MockInvidiosAPI.json") + XCTFail("Missing file: MockYTokeBackendAPI.json") return } - urlSession.data = json - provider.fetch(query: "SongName", page: 8) { result in + mockURLSession.data = json + sut.fetch(query: "SongName", page: 8) { result in switch result { case .success: XCTFail("Should Not Success") case .failure(let error): - guard let actualError = error as? InvidiousAPIError else { - XCTFail("Should be InvidiousAPIError type") + guard let actualError = error as? YTokeBackendError else { + XCTFail("Should be YTokeBackendError type") return } - XCTAssertTrue(actualError == InvidiousAPIError.fetchDataError) + XCTAssertTrue(actualError == YTokeBackendError.fetchDataError) } } } func test_dataTaskWithNoData_SHOULD_returnError() { - urlSession.error = nil - urlSession.data = nil - provider.fetch(query: "SongName", page: 8) { result in + mockURLSession.error = nil + mockURLSession.data = nil + sut.fetch(query: "SongName", page: 8) { result in switch result { case .success: XCTFail("Should Not Success") case .failure(let error): - guard let actualError = error as? InvidiousAPIError else { - XCTFail("Should be InvidiousAPIError type") + guard let actualError = error as? YTokeBackendError else { + XCTFail("Should be YTokeBackendError type") return } - XCTAssertTrue(actualError == InvidiousAPIError.fetchDataError) + XCTAssertTrue(actualError == YTokeBackendError.fetchDataError) } } } func test_dataTaskWithResponseAndData_SHOULD_decode() { - urlSession.error = nil + mockURLSession.error = nil let bundle = Bundle(for: type(of: self)) - guard let url = bundle.url(forResource: "MockInvidiosAPI", withExtension: "json"), + guard let url = bundle.url(forResource: "MockYTokeBackendAPI", withExtension: "json"), let json = try? Data(contentsOf: url) else { - XCTFail("Missing file: MockInvidiosAPI.json") + XCTFail("Missing file: MockYTokeBackendAPI.json") return } - urlSession.data = json - provider.fetch(query: "SongName", page: 8) { result in + mockURLSession.data = json + sut.fetch(query: "SongName", page: 8) { result in switch result { case .success(let videos): XCTAssertEqual(videos.count, 2) @@ -104,16 +99,20 @@ final class InvidiousAPIVideoListProviderTests: XCTestCase { XCTAssertEqual(firstVideo.id, "VideoId") XCTAssertEqual(firstVideo.thumbnail, URL(string: "highURL")) XCTAssertEqual(firstVideo.title, "Title") + XCTAssertEqual(firstVideo.tag?.count, 1) + XCTAssertEqual(firstVideo.tag?.first, VideoTag.offVocal) + XCTAssertEqual(firstVideo.percentageFinished, nil) XCTAssertEqual(secondVideo.id, "VideoId2") XCTAssertEqual(secondVideo.thumbnail, URL(string: "highURL2")) XCTAssertEqual(secondVideo.title, "Title2") + XCTAssertEqual(secondVideo.tag, nil) + XCTAssertEqual(secondVideo.percentageFinished, 0.7) case .failure: XCTFail("Should return valid videos") } } } - } private enum FakeError: Error { diff --git a/YTokeTests/Mocks/MicrophoneProvider.swift b/YTokeTests/Mocks/Data/MicrophoneProvider.swift similarity index 100% rename from YTokeTests/Mocks/MicrophoneProvider.swift rename to YTokeTests/Mocks/Data/MicrophoneProvider.swift diff --git a/YTokeTests/Mocks/MockAVPrivacyPermissionProvider.swift b/YTokeTests/Mocks/Data/MockAVPrivacyPermissionProvider.swift similarity index 100% rename from YTokeTests/Mocks/MockAVPrivacyPermissionProvider.swift rename to YTokeTests/Mocks/Data/MockAVPrivacyPermissionProvider.swift diff --git a/YTokeTests/Mocks/MockAudioDevicesProvider.swift b/YTokeTests/Mocks/Data/MockAudioDevicesProvider.swift similarity index 100% rename from YTokeTests/Mocks/MockAudioDevicesProvider.swift rename to YTokeTests/Mocks/Data/MockAudioDevicesProvider.swift diff --git a/YTokeTests/Mocks/MockPopUpAlertProvider.swift b/YTokeTests/Mocks/Data/MockPopUpAlertProvider.swift similarity index 100% rename from YTokeTests/Mocks/MockPopUpAlertProvider.swift rename to YTokeTests/Mocks/Data/MockPopUpAlertProvider.swift diff --git a/YTokeTests/Mocks/MockVideoListProvider.swift b/YTokeTests/Mocks/Data/MockVideoListProvider.swift similarity index 100% rename from YTokeTests/Mocks/MockVideoListProvider.swift rename to YTokeTests/Mocks/Data/MockVideoListProvider.swift diff --git a/YTokeTests/Mocks/Data/MockVideoStatsRepository.swift b/YTokeTests/Mocks/Data/MockVideoStatsRepository.swift new file mode 100644 index 0000000..7089548 --- /dev/null +++ b/YTokeTests/Mocks/Data/MockVideoStatsRepository.swift @@ -0,0 +1,25 @@ +// +// MockVideoStatsRepository.swift +// YTokeTests +// +// Created by Lyt on 9/16/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +@testable import YToke + +final class MockVideoStatsRepository: VideoStatsRepository { + + var numOfReportTagCalled = 0 + func reportTag(videoId: String, tag: VideoTag) { + numOfReportTagCalled += 1 + } + + var numOfReportImpressionCalled = 0 + func reportImpression(videoId: String, percentage: Double) { + numOfReportImpressionCalled += 1 + } + +} diff --git a/YTokeTests/Mocks/MockVideoStreamingProvider.swift b/YTokeTests/Mocks/Data/MockVideoStreamingProvider.swift similarity index 100% rename from YTokeTests/Mocks/MockVideoStreamingProvider.swift rename to YTokeTests/Mocks/Data/MockVideoStreamingProvider.swift diff --git a/YTokeTests/Mocks/MockDependencyContainer.swift b/YTokeTests/Mocks/MockDependencyContainer.swift index 91aeac3..5d71c3f 100644 --- a/YTokeTests/Mocks/MockDependencyContainer.swift +++ b/YTokeTests/Mocks/MockDependencyContainer.swift @@ -18,43 +18,43 @@ final class MockDependencyContainer: DependencyContainer { var audioMixer: AudioMixer = MockAudioMixer() var videoQueue: VideoQueue = MockVideoQueue() + // MARK: - Data + let mockVideoStreamingProvider = MockVideoStreamingProvider() + let mockVideoListProvider = MockVideoListProvider() + let mockMicrophoneProvider = MockMicrophoneProvider() + let mockAlertProvider = MockPopUpAlertProvider() + let mockAudioDevicesProvider = MockAudioDevicesProvider() + let mockVideoStatsMutationProvider = MockVideoStatsMutationProvider() + + // MARK: - Repository + + let mockVideoStreamingRepository = MockVideoStreamingRepository() + let mockVideoListRepository = MockVideoListRepository() + let mockPrivacyPermissionRepository = MockPrivacyPermissionRepository() + let mockVideoStatsRepository = MockVideoStatsRepository() + + // MARK: - Init + init() { - data = DataContainer(videoStreamingProvider: MockVideoStreamingProvider(), - videoListProvider: MockVideoListProvider(), + data = DataContainer(videoStreamingProvider: mockVideoStreamingProvider, + videoListProvider: mockVideoListProvider, avPrivacyPermissionProvider: MockAVPrivacyPermissionProvider(), - popUpAlertProvider: MockPopUpAlertProvider(), - audioDevicesProvider: MockAudioDevicesProvider(), - microphoneProvider: MockMicrophoneProvider()) + popUpAlertProvider: mockAlertProvider, + audioDevicesProvider: mockAudioDevicesProvider, + microphoneProvider: mockMicrophoneProvider, + videoStatsMutationProvider: mockVideoStatsMutationProvider) - repo = RepositoryContainer(videoStreamingRepository: MockVideoStreamingRepository(), - videoListRepository: MockVideoListRepository(), - privacyPermissionRepository: MockPrivacyPermissionRepository(), + repo = RepositoryContainer(videoStreamingRepository: mockVideoStreamingRepository, + videoListRepository: mockVideoListRepository, + privacyPermissionRepository: mockPrivacyPermissionRepository, systemNavigator: MockSystemNavigator(), - audioInputRepository: MockAudioInputRepository()) + audioInputRepository: MockAudioInputRepository(), + videoStatsRepository: mockVideoStatsRepository) } } // swiftlint:disable force_cast extension MockDependencyContainer { - var mockVideoStreamingProvider: MockVideoStreamingProvider { - data.videoStreamingProvider as! MockVideoStreamingProvider - } - - var mockVideoListProvider: MockVideoListProvider { - data.videoListProvider as! MockVideoListProvider - } - - var mockVideoStreamingRepository: MockVideoStreamingRepository { - repo.videoStreamingRepository as! MockVideoStreamingRepository - } - - var mockVideoListRepository: MockVideoListRepository { - repo.videoListRepository as! MockVideoListRepository - } - - var mockPrivacyPermissionRepository: MockPrivacyPermissionRepository { - repo.privacyPermissionRepository as! MockPrivacyPermissionRepository - } var mockAudioMixer: MockAudioMixer { audioMixer as! MockAudioMixer @@ -63,12 +63,4 @@ extension MockDependencyContainer { var mockVideoQueue: MockVideoQueue { videoQueue as! MockVideoQueue } - - var mockMicrophoneProvider: MockMicrophoneProvider { - data.microphoneProvider as! MockMicrophoneProvider - } - - var alertProvider: MockPopUpAlertProvider { - data.popUpAlertProvider as! MockPopUpAlertProvider - } } diff --git a/YTokeTests/Mocks/MockNetworkResponse/MockInvidiosAPI.json b/YTokeTests/Mocks/MockNetworkResponse/MockInvidiosAPI.json deleted file mode 100644 index 4c78f2c..0000000 --- a/YTokeTests/Mocks/MockNetworkResponse/MockInvidiosAPI.json +++ /dev/null @@ -1,150 +0,0 @@ -[ - { - "type": "video", - "title": "Title", - "videoId": "VideoId", - "author": "Author", - "authorId": "AuthorId", - "authorUrl": "AuthorUrl", - "videoThumbnails": [ - { - "quality": "maxres", - "url": "maxresURL", - "width": 1280, - "height": 720 - }, - { - "quality": "maxresdefault", - "url": "maxresdefaultURL", - "width": 1280, - "height": 720 - }, - { - "quality": "sddefault", - "url": "sddefaultURL", - "width": 640, - "height": 480 - }, - { - "quality": "high", - "url": "highURL", - "width": 480, - "height": 360 - }, - { - "quality": "medium", - "url": "mediumURL", - "width": 320, - "height": 180 - }, - { - "quality": "default", - "url": "defailtURL", - "width": 120, - "height": 90 - }, - { - "quality": "start", - "url": "startURL", - "width": 120, - "height": 90 - }, - { - "quality": "middle", - "url": "middleURL", - "width": 120, - "height": 90 - }, - { - "quality": "end", - "url": "endURL", - "width": 120, - "height": 90 - } - ], - "description": "Description Text", - "descriptionHtml": "Description HTML", - "viewCount": 123123123, - "published": 456456456, - "publishedText": "Published Text", - "lengthSeconds": 999, - "liveNow": false, - "paid": false, - "premium": false, - "isUpcoming": false - }, - { - "type": "video2", - "title": "Title2", - "videoId": "VideoId2", - "author": "Author2", - "authorId": "AuthorId2", - "authorUrl": "AuthorUrl2", - "videoThumbnails": [ - { - "quality": "maxres", - "url": "maxresURL2", - "width": 1280, - "height": 720 - }, - { - "quality": "maxresdefault", - "url": "maxresdefaultURL2", - "width": 1280, - "height": 720 - }, - { - "quality": "sddefault", - "url": "sddefaultURL2", - "width": 640, - "height": 480 - }, - { - "quality": "high", - "url": "highURL2", - "width": 480, - "height": 360 - }, - { - "quality": "medium", - "url": "mediumURL2", - "width": 320, - "height": 180 - }, - { - "quality": "default", - "url": "defailtURL2", - "width": 120, - "height": 90 - }, - { - "quality": "start", - "url": "startURL2", - "width": 120, - "height": 90 - }, - { - "quality": "middle", - "url": "middleURL2", - "width": 120, - "height": 90 - }, - { - "quality": "end", - "url": "endURL2", - "width": 120, - "height": 90 - } - ], - "description": "Description Text2", - "descriptionHtml": "Description HTML2", - "viewCount": 123123123, - "published": 456456456, - "publishedText": "Published Text2", - "lengthSeconds": 999, - "liveNow": false, - "paid": false, - "premium": false, - "isUpcoming": false - } -] diff --git a/YTokeTests/Mocks/MockNetworkResponse/MockYTokeBackendAPI.json b/YTokeTests/Mocks/MockNetworkResponse/MockYTokeBackendAPI.json new file mode 100644 index 0000000..b6ee3b9 --- /dev/null +++ b/YTokeTests/Mocks/MockNetworkResponse/MockYTokeBackendAPI.json @@ -0,0 +1,63 @@ +{ + "q": "query", + "videos": [ + { + "title": "Title", + "videoId": "VideoId", + "tags": [ + "OFF_VOCAL" + ], + "percentageFinished": null, + "thumbnails": [ + { + "quality": "maxres", + "url": "maxresURL" + }, + { + "quality": "maxresdefault", + "url": "maxresdefaultURL" + }, + { + "quality": "sddefault", + "url": "sddefaultURL" + }, + { + "quality": "high", + "url": "highURL" + }, + { + "quality": "medium", + "url": "mediumURL" + }, + { + "quality": "default", + "url": "defailtURL" + }, + { + "quality": "start", + "url": "startURL" + }, + { + "quality": "middle", + "url": "middleURL" + }, + { + "quality": "end", + "url": "endURL" + } + ] + }, + { + "title": "Title2", + "videoId": "VideoId2", + "tags": null, + "percentageFinished": 0.7, + "thumbnails": [ + { + "quality": "high", + "url": "highURL2" + } + ] + } + ] +} diff --git a/YTokeTests/Mocks/MockURLSession.swift b/YTokeTests/Mocks/MockURLSession.swift index 48a8ddb..20d6e95 100644 --- a/YTokeTests/Mocks/MockURLSession.swift +++ b/YTokeTests/Mocks/MockURLSession.swift @@ -14,15 +14,24 @@ final class MockURLSession: URLSession { var response: URLResponse? var data: Data? var error: Error? + var httpBody: Data? override func dataTask(with request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask { numOfDataTaskCalled += 1 requestURL = request.url + httpBody = request.httpBody completionHandler(data, response, error) return URLSessionDataTaskMock {} } + override func dataTask(with request: URLRequest) -> URLSessionDataTask { + numOfDataTaskCalled += 1 + requestURL = request.url + httpBody = request.httpBody + return URLSessionDataTaskMock {} + } + init(response: URLResponse?) { self.response = response } diff --git a/YTokeTests/Mocks/MockAudioInputRepository.swift b/YTokeTests/Mocks/Repository/MockAudioInputRepository.swift similarity index 100% rename from YTokeTests/Mocks/MockAudioInputRepository.swift rename to YTokeTests/Mocks/Repository/MockAudioInputRepository.swift diff --git a/YTokeTests/Mocks/MockPrivacyPermissionRepository.swift b/YTokeTests/Mocks/Repository/MockPrivacyPermissionRepository.swift similarity index 100% rename from YTokeTests/Mocks/MockPrivacyPermissionRepository.swift rename to YTokeTests/Mocks/Repository/MockPrivacyPermissionRepository.swift diff --git a/YTokeTests/Mocks/MockVideoListRepository.swift b/YTokeTests/Mocks/Repository/MockVideoListRepository.swift similarity index 100% rename from YTokeTests/Mocks/MockVideoListRepository.swift rename to YTokeTests/Mocks/Repository/MockVideoListRepository.swift diff --git a/YTokeTests/Mocks/Repository/MockVideoStatsMutationProvider.swift b/YTokeTests/Mocks/Repository/MockVideoStatsMutationProvider.swift new file mode 100644 index 0000000..20ae0b6 --- /dev/null +++ b/YTokeTests/Mocks/Repository/MockVideoStatsMutationProvider.swift @@ -0,0 +1,25 @@ +// +// MockVideoStatsMutationProvider.swift +// YTokeTests +// +// Created by Lyt on 9/16/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation + +@testable import YToke + +final class MockVideoStatsMutationProvider: VideoStatsMutationProvider { + + var numOfReportTagCalled = 0 + func reportTag(videoId: String, tag: VideoTag) { + numOfReportTagCalled += 1 + } + + var numOfReportImpressionCalled = 0 + func reportImpression(videoId: String, percentage: Double) { + numOfReportImpressionCalled += 1 + } + +} diff --git a/YTokeTests/Mocks/MockVideoStreamingRepository.swift b/YTokeTests/Mocks/Repository/MockVideoStreamingRepository.swift similarity index 100% rename from YTokeTests/Mocks/MockVideoStreamingRepository.swift rename to YTokeTests/Mocks/Repository/MockVideoStreamingRepository.swift diff --git a/YTokeTests/Repository/StandardVideoListRepositoryTests.swift b/YTokeTests/Repository/StandardVideoListRepositoryTests.swift index ed90745..0cc3ef4 100644 --- a/YTokeTests/Repository/StandardVideoListRepositoryTests.swift +++ b/YTokeTests/Repository/StandardVideoListRepositoryTests.swift @@ -46,7 +46,9 @@ final class StandardVideoListRepositoryTests: XCTestCase { func test_fetch_SHOULD_callCompletion() { let videos = [Video(id: "id", title: "title", - thumbnail: nil)] + thumbnail: nil, + percentageFinished: 0.5, + tag: [])] videoListProvider.result = .success(videos) repository.fetch(name: "Name", page: 8) { result in guard case .success(let resultVideos) = result else { diff --git a/YTokeTests/Repository/StandardVideoStatsRepositoryTests.swift b/YTokeTests/Repository/StandardVideoStatsRepositoryTests.swift new file mode 100644 index 0000000..222a2db --- /dev/null +++ b/YTokeTests/Repository/StandardVideoStatsRepositoryTests.swift @@ -0,0 +1,40 @@ +// +// StandardVideoStatsRepositoryTests.swift +// YTokeTests +// +// Created by Lyt on 9/16/20. +// Copyright © 2020 TestOrganization. All rights reserved. +// + +import Foundation +import XCTest + +@testable import YToke + +final class StandardVideoStatsRepositoryTests: XCTestCase { + + private var sut: StandardVideoStatsRepository! + private var mockVideoStatsMutationProvider: MockVideoStatsMutationProvider! + + override func setUp() { + super.setUp() + mockVideoStatsMutationProvider = MockVideoStatsMutationProvider() + sut = StandardVideoStatsRepository(videoStatsMutationProvider: mockVideoStatsMutationProvider) + } + + override func tearDown() { + super.tearDown() + sut = nil + mockVideoStatsMutationProvider = nil + } + + func test_reportTag_SHOULD_call_provider() { + sut.reportTag(videoId: "videoId", tag: .offVocal) + XCTAssertEqual(mockVideoStatsMutationProvider.numOfReportTagCalled, 1) + } + + func test_reportImpression_SHOULD_call_provider() { + sut.reportImpression(videoId: "videoId", percentage: 0.5) + XCTAssertEqual(mockVideoStatsMutationProvider.numOfReportImpressionCalled, 1) + } +} diff --git a/YTokeTests/View/StandardNowPlayingViewModelTests.swift b/YTokeTests/View/StandardNowPlayingViewModelTests.swift index 2353c43..8cbe301 100644 --- a/YTokeTests/View/StandardNowPlayingViewModelTests.swift +++ b/YTokeTests/View/StandardNowPlayingViewModelTests.swift @@ -61,7 +61,11 @@ final class StandaredNowPlayingViewModelTests: XCTestCase { viewModel.image = { imageURL in imageResult = imageURL } - let info = ["PopedVideo": Video(id: "ID", title: expectedTitle, thumbnail: expectedURL)] + let info = ["PopedVideo": Video(id: "ID", + title: expectedTitle, + thumbnail: expectedURL, + percentageFinished: 0.5, + tag: [])] NotificationCenter.default.post(name: .queuePop, object: nil, userInfo: info) guard let titleResultUnwarp = titleResult, let imageResultUnwarp = imageResult else { diff --git a/YTokeTests/View/StandardVideoListViewModelTests.swift b/YTokeTests/View/StandardVideoListViewModelTests.swift index 7075c8e..1f2d4bf 100644 --- a/YTokeTests/View/StandardVideoListViewModelTests.swift +++ b/YTokeTests/View/StandardVideoListViewModelTests.swift @@ -45,13 +45,21 @@ final class StandardVideoListViewModelTests: XCTestCase { } func test_onTapAddVideo_SHOULD_addToQueue() { - let video = Video(id: "ID", title: "TITLE", thumbnail: nil) + let video = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) viewModel.onTapAddVideo(video) XCTAssertEqual(dependencyContainer.mockVideoQueue.numOfAddCalled, 1) } func test_onTapAddVideo_SHOULD_updateVideoList() { - let video = Video(id: "ID", title: "TITLE", thumbnail: nil) + let video = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) var numOfOnUpdateCalled = 0 viewModel.onUpdate = { numOfOnUpdateCalled += 1 diff --git a/YTokeTests/View/StandardVideoQueueViewModelTests.swift b/YTokeTests/View/StandardVideoQueueViewModelTests.swift index 2a1fa23..d290348 100644 --- a/YTokeTests/View/StandardVideoQueueViewModelTests.swift +++ b/YTokeTests/View/StandardVideoQueueViewModelTests.swift @@ -31,13 +31,21 @@ final class StandardVideoQueueViewModelTests: XCTestCase { } func test_onMoveToTopTap_SHOULD_moveInQueue() { - let video = Video(id: "ID", title: "TITLE", thumbnail: nil) + let video = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) viewModel.onMoveToTopTap(video: video) XCTAssertEqual(dependencyContainer.mockVideoQueue.numOfMoveToTopCalled, 1) } func test_onDeleteTap_SHOULD_deleteInQueue() { - let video = Video(id: "ID", title: "TITLE", thumbnail: nil) + let video = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) viewModel.onDeleteTap(video: video) XCTAssertEqual(dependencyContainer.mockVideoQueue.numOfDeleteCalled, 1) } @@ -63,7 +71,11 @@ final class StandardVideoQueueViewModelTests: XCTestCase { } func test_onSongMoveToTop_SHOULD_moveToTop() { - viewModel.videos = [Video(id: "12345", title: "TITLE", thumbnail: nil)] + viewModel.videos = [Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: [])] var resultIndex: Int? viewModel.onMoveToTop = { index in resultIndex = index @@ -80,7 +92,11 @@ final class StandardVideoQueueViewModelTests: XCTestCase { func test_onDeleteSong_SHOULD_delete() { var resultIndex: Int? - viewModel.videos = [Video(id: "12345", title: "TITLE", thumbnail: nil)] + viewModel.videos = [Video(id: "12345", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: [])] viewModel.onDeleteRow = { id in resultIndex = id } diff --git a/YTokeTests/View/StandardVideoViewModelTests.swift b/YTokeTests/View/StandardVideoViewModelTests.swift index 44d64b8..b25d385 100644 --- a/YTokeTests/View/StandardVideoViewModelTests.swift +++ b/YTokeTests/View/StandardVideoViewModelTests.swift @@ -32,7 +32,11 @@ final class StandardVideoViewModelTests: XCTestCase { } func test_onAppear_SHOULD_playVideo() { - dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", title: "TITLE", thumbnail: nil) + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) viewModel.onAppear() XCTAssertEqual(dependencyContainer.mockVideoStreamingRepository.numOfFetchStreamURLCalled, 1) @@ -42,7 +46,11 @@ final class StandardVideoViewModelTests: XCTestCase { } func test_onVideoFinished_SHOULD_playVideo() { - dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", title: "TITLE", thumbnail: nil) + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) NotificationCenter.default.post(name: .AVPlayerItemDidPlayToEndTime, object: nil) XCTAssertEqual(dependencyContainer.mockVideoStreamingRepository.numOfFetchStreamURLCalled, 1) @@ -52,7 +60,11 @@ final class StandardVideoViewModelTests: XCTestCase { } func test_onSkipVideo_SHOULD_playVideo() { - dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", title: "TITLE", thumbnail: nil) + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) NotificationCenter.default.post(name: .skipSong, object: nil) XCTAssertEqual(dependencyContainer.mockVideoStreamingRepository.numOfFetchStreamURLCalled, 1) @@ -60,4 +72,58 @@ final class StandardVideoViewModelTests: XCTestCase { NotificationCenter.default.post(name: .skipSong, object: nil) XCTAssertEqual(dependencyContainer.mockVideoStreamingRepository.numOfFetchStreamURLCalled, 1) } + + func test_onVideoPlayedHalf_SHOULD_showDualChoiceView() { + var result = 0 + viewModel.showDualChoiceView = { + result += 1 + } + viewModel.onVideoPlayedHalf() + XCTAssertEqual(result, 1) + } + + func test_onVideoFinished_SHOULD_reportVideoImpression() { + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) + viewModel.onAppear() + viewModel.videoDuration = { + 300 + } + viewModel.currentTime = { + 150 + } + NotificationCenter.default.post(name: .AVPlayerItemDidPlayToEndTime, object: nil) + XCTAssertEqual(dependencyContainer.mockVideoStatsRepository.numOfReportImpressionCalled, 1) + } + + func test_onSkipVideo_SHOULD_reportVideoImpression() { + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) + viewModel.onAppear() + viewModel.videoDuration = { + 300 + } + viewModel.currentTime = { + 150 + } + NotificationCenter.default.post(name: .skipSong, object: nil) + XCTAssertEqual(dependencyContainer.mockVideoStatsRepository.numOfReportImpressionCalled, 1) + } + + func test_ondualChoiceViewSelect_SHOULD_reportTag() { + dependencyContainer.mockVideoQueue.nextResult = Video(id: "ID", + title: "TITLE", + thumbnail: nil, + percentageFinished: 0.5, + tag: []) + viewModel.onAppear() + viewModel.onDualChoiceViewSelect(tag: .offVocal) + XCTAssertEqual(dependencyContainer.mockVideoStatsRepository.numOfReportTagCalled, 1) + } }