From ad89aab19f4e332094d71c77821cbe8027380bc8 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Wed, 19 Apr 2023 23:12:08 +0200 Subject: [PATCH] New Extension: Kayoanime (experimental) (#1519) * Initial commit * More stuff * More stuff * New extension * Fix bug, add preference, improve naming --- src/en/kayoanime/AndroidManifest.xml | 2 + src/en/kayoanime/build.gradle | 13 + .../kayoanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3555 bytes .../kayoanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2046 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4758 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8451 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11810 bytes src/en/kayoanime/res/web_hi_res_512.png | Bin 0 -> 56939 bytes .../animeextension/en/kayoanime/Kayoanime.kt | 472 ++++++++++++++++++ .../extractors/GoogleDriveExtractor.kt | 95 ++++ 10 files changed, 582 insertions(+) create mode 100644 src/en/kayoanime/AndroidManifest.xml create mode 100644 src/en/kayoanime/build.gradle create mode 100644 src/en/kayoanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/web_hi_res_512.png create mode 100644 src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/Kayoanime.kt create mode 100644 src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/extractors/GoogleDriveExtractor.kt diff --git a/src/en/kayoanime/AndroidManifest.xml b/src/en/kayoanime/AndroidManifest.xml new file mode 100644 index 000000000..acb4de356 --- /dev/null +++ b/src/en/kayoanime/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/en/kayoanime/build.gradle b/src/en/kayoanime/build.gradle new file mode 100644 index 000000000..191c40fd7 --- /dev/null +++ b/src/en/kayoanime/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Kayoanime' + pkgNameSuffix = 'en.kayoanime' + extClass = '.Kayoanime' + extVersionCode = 1 + libVersion = '13' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/kayoanime/res/mipmap-hdpi/ic_launcher.png b/src/en/kayoanime/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2a7bc549d586f66f2fce9104ca1729fa9c82ab GIT binary patch literal 3555 zcmV<94IJ``P)@kPKvA@k`3*dpyPCR%sT}$Dj zP&%DnG-uA7vqp{_`6vEPm%FhNK=#R#C)bW2KYpgi<2lOAn>V&=lF8)%rcIl6`j|0e z)|9iPN&vZ*ELk$5PoF+d*zNXi8{6Q`^f!~q)GuGYe01NweP74*$x`=}1Bl;ySFc_@ zu1Aj^6X9ALyIYmSE1S(`{`%{$TQ}c)^V@Mj3?Gfa3)hze$WAg|xpL*Co;`bxH8UF< z>ou!Zt-7~YuU6?k zMlhv!@7@|fEy%hOK-BBx3~^CK%CocC*HHpQdZTLE%V18(s1_Kl3KJV z_gDbL=04^a2|WI|*!&xozgiE_?Aa0?H%_wAsMvx*al?uN)24|yNMi;qotA72!GnCl z>op$Z;PIO{n}TQZ!w;q5j58$L*jNCEPq%Neh19(IsyKJt(dca@f43f>S+gX3?X@|8 zd_HmQy|)COc}D%aQsY45FTX6Y=bslxuU_J-s}tugyCCt;Nb0-qB)x2zct(sUJR*9} zJrce7=4RGIE3#Eri~qj+#Cysq8{}q|1EhFi!UP2n8-b|-k-7#ADvJ-Vje)lsAAM9Z zfB!A6efAOOzWa)!e}Bn_LLx4gc#b_*?3-hWo>rrk7%ky4*vG^xX z-k_*vJwVSsE0OE3&$&vzkrO<}9aj<{hUn-WcSsCYmW?p=0I0A6Ng|QOVBJR@C4N|n z0w?cs8Ibb2z4nsKpD3I1+@o&H|C^IRvbOi=vEFWGEkNjC3>}M1oG4j@V6DSJaDwaL zgIjc#(I+}(io^h*{(1$H+pR$LPn{|@ueaH~$#1@q`oj)W?pJ6!plq9NDzyj}j-7Vu zgaAGDltf_OYQXsx1aZ3#Jg`}3X)WZD7_L{AqaPpu@tl6TRKZp4-MhCKWDKqt9zVXM z^(aHary9We&Og8N0o3^9lL{b7Bnq7)2f2q0Yw9e(i_opWJH?hmxAKh|B|b#LQs5BC z(0S)c{I%CgS`X?e^*!CJ_MLY+A3#xrbQN95A$eX1z)DE6>Q53f{*K;tSB}W_mJ?QR;rP+>JL9$Qa}FK^fPiSUe8FV0mQ$%|L}v@5fRs?S003a z`^CGSZq_~k-Gov`vmkUh08rdRhe~A9B#EPLQV~vXIhbufEXs4zNrw4SoQddVm*v8L z-aRWD+)Z)bwd-28G05otAw&?!kCyDZb%pPlM=?OC!r5eNe}FIu=l0u6>i6Gs z#I3U&Re>XC@?fT=4Cm;_MgC!($Beu19FThLf(5Gfst3=dfBUWQn+dP++m$CNh_SIJ^+ip1L z97(+SX44~3yH#CzrBtEfFGu>t@3S7DC!SDT(*huU#*1FL_S;YK5~G&c$~*n*uTqb6 zfk0`^J$$&-pnjuT&>6D?wY_vZ>MZoC!$A%;@@X$j-GBxBM z42D`$=(N+CC87S?ZWG_-mn-6r&zU3POE1k;_;~`i_w6e|d{5cMOtT&!%vSV<8=BQ( zs$(EzazeHqYjYZCn00~^AjxjBiDCbv_ueZ}y03PBRh7_9RRlv6Odv6Y>fS66P=*c6 zm{GPCY+o0{+hXX9Qu%bnD#I*G4JLqL%r;#`n_-f3^__Q$7yMDtiU3N(nP(O_h6y1> zIUllWN+f9p0nURq3EIeUofpw9013p5m0D{-1PE2Rk~?%}?%ZP!sfH^tn#G@cE~gi1 zzvCV|!g1}}Z&%EEnPjeo_?G$Qmpry8DJY;(snqH|S}CkbiTFBz96RhFwV!+O?1gw)}UXWa1RjlrVufLuX<0>@k z0YX%Xz+Ds%Xwn0?Bgh0!x0slq=#JV;UoucN3_y`|?Z1E15Kz;_ac>wRTxRLgf)(n= zNbBAIMl;1vR6G(I-xNuZAQPcL0uV@ zb^^7MzWiXcs{zO)TUP9ia7`)z`r=drhY2RHuSR{wP_MPjs#UV?$Rj0<`cHedDm(BT zstO%yL2;OI7_voSK(HOD`2(N5H8vdhx!F1?Y`8Bs^wJVYQQ;VZ9Z6|9!C)0i=pg z5PF=Yf{uJi)U57fC|lAx-KS}^HU*;Z!V6n~u3Zy{6>?!wHHLqzu5=E7=FZKf`^=d0 z&AI#T5`>u5Vsim3f+ANKx{INK9+pVlIWY?~hHQR2h zCQ2}>G_gN%mIYqWuV{C9g?WC*i?>#8K)G&oJj#q?$YT$_C9^2JC>a3 zHkDe#2`5OL2`Cgt7bb~?ty%`J&@3lu)P3?4~pH61?au^nv}i#%$Iesd{3FLtcCoM z{`uz|U%-V3mRb!#ia?Di`oIH1x8d)Ke;~UWwbZxY$~qLobWm^l$r1SXZuc!FV{^%x@^h*pVfNDGXra_zYUn32o_a6I5P zqx&oeh@}A~3HKp~7)@5o-}5<8sT=uRR`h<9AC>kRwYV40Lr&aLS;BGS=%j3QC-<0a7Iao0(0UMk8y(-?MTMQRWz6$GYe5Q+3TcFf*MA!z6Qs7G0P&zj_2R{guNg34 zz<8WEG;yxLL~lCTB|K2Kbm`K&`t|F_19jZAZTdKrI#4%n-n@~62M?a=bUK5bY;0}P z9h_MW;q-GI#)w6{^*c~UfINc+4ccPHj2Tb$@82J~!N0HJOzy(Ey1Mgc&z{W%I35*f zaYVe*nN_aY)C?UubnB^8r%u7a*InFhw;#Dh+n#f3XWZ#lsZ=To*ZN_?gbCvS4i?h{ z2hh}^Uejk**=_O;&pg%)95}Gos8OR1g0Bt$A2mNG(9Q#F?dxz}zH!;IWlN?{pFSV% zwLA|Ft*7MKd831-8c1AD;Q1!*_U3m+_qBE$R^3kvArL$kz-?*#@C-%M>Os+)%?y+- z#glE?$ILxe4X`bqOOObN_G#7snnLT)zvX{yqK$_jX`hOqZ|v6478cb7P-{@^vLFNW dx&Sf&=>G`(=CUOlnhyW~002ovPDHLkV1lD~zd8T_ literal 0 HcmV?d00001 diff --git a/src/en/kayoanime/res/mipmap-mdpi/ic_launcher.png b/src/en/kayoanime/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c51152e26f161f9b467cae62b2f2688297b13d GIT binary patch literal 2046 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 Z@$;N;%jDuF$o}UEAT6#SRv~KO|38idLO%ci literal 0 HcmV?d00001 diff --git a/src/en/kayoanime/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/kayoanime/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7227be5e019e34fce6d5abb4e7f2044af1b9f252 GIT binary patch literal 11810 zcma)?RaD(fxQ4TFcWZHHANXY62 zoQy-cz0nu&wCJ=Hcrfr%=NC9Gr=4R*qvJ<6kHVhgE;mPMe7mEgX<0rKm#@A%4Yw!R ze7k~g*FqDo&mv|dt?!1;(9q1ijvV$J5TaqBre75%ps=FFDQoDfpzd?gV#{t2#q`K2 z!YQ!sMKR5_4#e+odj@#|PJ;3K@0@_4tBbZC0f3im=n9P&F#B@9vQ7$+V48hFAOSc# zo*d3FfLKIMA=n@|sMwbj1um%^gs#Ps-A2Dr3-%QYL07Du#SV%3cYCO!4+GIJyKp%R zHJ&mbpHB|_M@53C_fX?iHrb7(bxY~9UnQ=6;eez*F#56Uf}*!uuH z2?#|yip=SIt|W6!2wvJ36cktrgnCkhrw6*U`p&L+u040+Dhr-7DN+D1m`MKE-~-KX z0jIRUSCjGDY~iO#3Ct|Fy}U60ArAj7-5;nhT(zcyu?-l!>rlO`!_c=k&PxyZ4)KAn z0$t`Wmf7Ar`F=MGyH&CGZ3ZQytLwk%b9^uVR_Te9B9}fwC%Le$V1QL2K^+my%e8>l z=NkTl(gFvk(Hx!C!UIqF$}hdBY|F31Of~KFDI<#RSJEf) z4hXuV-S}Fc&o83bI`2jlvEcAGV|S{E0XWY9v)5i&OhKn}>`x@l-k%&dJGU%y$It}t z)`J{HE{3RUW@wvsz)*&n@8Zj-0L6_H3f{fo^VKxZQOlZtjVsf>MeZCIyMVysR9ae^ ztJ|85DBi(5&m;>VXi3;60uZHTWIX;bYohiM^70hnfgKqcaUC!@XCLcV#Rc|Y{q-r% zY1~nu?B|w}%53|zr^CCKh;;tAx9~i$*j%;s^_(SVY1D2yMPLLF;096xCYaN$$lBnc zmJiIekFY>mC7JRS!ifnFEV6}Y@ipNG(0YVeHs|s;q8U^`dz)~_5oX;M`PU|^J6F6F z0vt5xD#Yay?kwqFtRKt@OgDdLdJg27WES~sR+8FT6pYphBf7)nzo^Zzu zlJhVr3(+boj-z$m4bZi?SG-G4oj0YgLI&Ibg*<;!qiFzo*Ecu~Qibmx=IOF7pEGon z_TQjaP(nRmFhgjRo$0!hQfs@`RO>oqo%TB7;8JHuUB>>D`ZQwbAZ>8@K2hMw>9I{H z#`o>>)*JTeMGZldcNZyRPu{y}Q&3jY5~~mpE@r!ubkgSUR@iW zPG21~2???@h_X;55)+G^HXDl`SAZ32O7Q>~9ABN4L5T+Z4_b z{kzeGPQ5L*+#}naHsY7XDvDq3Co(R`U+Z*U<_AY@-~+zJU3tnc-e0o$q`l*NwBvF) zX{Bp1A0cb-F(U&;JlE`Z{I@<8+DE5RvV49Sq8__jTD1tpxHpQ1oiQ{h*Yc7Z+@!%;dcmGx9=WWCE;hdMU4>*mcFHK#@a3PM*np_Wh zUFOPac-vwn3a~~RZ9d1F;YMySL)_ zZB9kd8yncxoWpe5k2uv{b6)H6RhR+x0Gu#s|AUgz`I_hSCMItp?vTy6(*vQ0b8|$fo&yJJ*BNT)baz0~Qb5B{xD=ar z#JlMa+f3E$T&f7SW^JA%#WueC@)qZw{)01cH-)1Una*Egkp+vUm9>mezp(_#V*mk{ zJQgo3j@BLGx|4z~RSHGh6*V8ZUeC!j6%Lp{lETmNWf>b2y){pf)`H^WUiB+$OWbmV z`ewgA)JQy@EX|e4J=FdeJ&f$dFk!QufNQNKR<{>{uIVH*#;TX&wRGzU3BM2D4$Q=n z^}R1-6H^*~%WXcaU9(;cg1Wl76R$UMAoZ7k5x*Lw^LU5|Y-!0(cyAZdX*l{Ra7w)p9$ zC8ON#l{7+RHN{Ol=659bLxYHIXfZ-dZWwHL&QpYrS<5BER(J~sD-LO>;T08E^>qH( zfmVqR5|+>9+N(X|qF9}%4sO-jJ`JS!?qMzi5&`bJ=*FP@>y?i+C#NO4Md=VW4GSrD zJ0B=^T6R9(bO%-lJBX%e!q&ojwk1-unZ|xgKxj`m2c=Nq2|+88wI!VcADkr5aw%bjD`JPzm?!~ zBYw=8qx$PX4c@B8hXRwAr&~Wmx7zpo-#S~)xI|1fX;5fkM2D8Qw-j@Jp78s8`SnNR zPsVJr=QuZjbfx?ByvBq7yB#t*ftD}1ft2ww^hs5Ru>yLqDv#rneA;SxD{%h~Rr!#~ zz?fP~tMeRPEfEtI-dkPH_hdatQE{}HlgARp(jA(qGr0Oilvo+WA`}WMTLF!9-9y0N!|dn zjIVYA8%098fU}q|=n!=eKjJ=RE1G)Mf1Am0fiwwGDuRTi`dzZSmFffRzm>nrSScz{ zbDONkbMm#U^X(FkQ=Ic`iOBk_hsQ1+?+~fRM$G}gLA>e_Za@=%x1PaqJAvf0{qL5c zEffWZwbjI;ZvKYC73Y1wQ!e!1R|cX6B>;o(QcIdMD1zZ{f3qhDGiv&);OeM+4Un6p z$yHq&S;y10a6l6zjR8Oaq$8&yt_g13NaTa$@S2*)`??#WR-Kkj&)P@A#!Y3Jl)8Lr zl2a!m0E*pUtJ4`WKT5t?2m?qJDJVS;7|v7liBTg$4IgM5+@=-(9pdzc7b;O1dP*eU z(-L&srE=hMe2(8wPtHRg0B`p{=}yKP*lYYPfTwLx$0s3r^rM2JTuSh92#W=WTLwv| zApm)umlx`qeWU3t1fEB`0jtr^tEcYmvB4bc3r(ZsJX17xjXQ1sfDv+^%Cva4Ad*le z5C7A@O#C4hw5wI9&?x>06Bwwa!hsvO<2**c!*nolbteh~Fb1p|YJ=~T)_L}z;SDt} znU%64`6|^f^zTR~={CXpH;~+8CS^%rVa#-5b$>2qi*9NdWr5(daCDTqy7J2KJtCRq5Pba;U(YO~# zA`x#%t9C(Ys|*q}GZNiM_*WQ*%oae=(iPJZp?kJdj<3xBJN+65yDVjxT02Q1d~ZB9 zwX5|p(N0xx8;`3TF6*D;ee!BJ-UXO>i2N(!qUy|N8Z&<%<$E@j;3_RI=nzQszCvTR zEkYiib|jJDT}J=Y$m0Dljz;qD8gx~>2Jg8;e(@an$Vad&W*v%o7|Lm=mI~6ZOqjVL zSS57eC&$KSVPyREL5FFLSOzK=I$+|sqdsYUKQ6F2R+P&AO1frju>pgyQ&O5lMP*yn zOK$=LV4FxP=>Cb2g0o_aNC*>vw@YyNx$^8uPVrCb`(?fAm{m36Z;}H5ix3!-8XIX+ z)-}V!E?3c#5xZYG{pil}g+YzR*k39j+5e$L4H-!q5${Sl9UU$l&e5=*-3X??CQNEFNS){;Iap>Omrx~h4{JTTdC zrmY-sRnT^shzKPCbV0e_Nh+N7-g#WJCm;o8t^K-W`rMk4m9r?ZIjm0X-ADYVN`gkn zDh0<5DcDxN^M2^Kt7{>jkAW#VNUb_+x$7ibQOaN18x2yH_S_o^D@p_`9!=hB0`Xa0 z`MEzMH-a_Qg?;snmR$ABD%}TW_{spjg!zJU-u|D)8Bv-^uH}~oZx97Utc%Rb&|&xhI1mFkJj%3jp|Lxp>x=J7C!k z(l}mDfOQZBT~IYFw6o#isG%)tsQ&U1uXlZlyp_Q1GX$QWN)a{kRF-6%73XxVOt>A0yD&Qd!;az z4jhw*2dmBSJ(xTCxrbbvw$5-=nSH&|EjrmhKHjs0nZ`ffcz~Q^hjyEiEnb3T+IN^F zZ&EpTjiJ%E;WtQ>AbCEPy-L%d?J9aWhC+Z%-!%rjxq!yy`U~F&Z$|Se`?PL0DNI8s zFGoj>NmyDnf9xYI>3b-La>dWuXe>C%*4P;Cx2Y7w(XZc)=E8>?7cmXo|heYKCW zq2nyG(ykF@_wK)RnS}VUeguY$CuKiu>fn;w;K9wh$!PuT1?yx5ur zZf@UJ@Bs&Yz!{>?$Q1JF4uAy@?WR&q`n%}Le|@6rpr4%mE$2yAO_hR7=W~Ymh316K zts&hz1_yMC7(clZvb=fQFDOmXcsoM$j@O|kKkWh0%^YS@4d8YV<}6ujO!dkI%&qKPIw63MHW_V zDD`{K!Vk(AfGmI&2GNa>Ndgx(Vc(`^f25_&jT^addZ)OhsS#_gDQ4FUU*5%MM9fMo zyn)2@+H$}y(PYDD&jv~8AcfzFKf8$VZ101z zrfM0~DNe?5uu=)_fBQ&>P;%f#v@q;~5=GH$6=awf6Du|jJIiupQHxxaL;~akSV3YR z*(IY-u`q+A!r^ZH=Y}a=ntboKLsh~V>W#;TUdycl>)$6&$SYup1%@XSLUHJDe3aZA z6?$>Yn?KRmb%8H|Tmp>POa|`{H@*Ev{-*{>+CAms+0JXd6f_sia$C8Gq9b>tYepbI z>c@~W!?3IU5{Ea@t{-lo zTmNhD4Gu;ukBvbSc0BV$SnClz-8@z|4SF8}5ILBqRRF3hO1P+VFS@6r`kzwbnZ zbt>9w$zQb?WR$UGZOo)DDI-U6Z{qLqY3Zx_=#mQgzj}hYVlVGVhk@jvCfIzVSZwn& zm+)W>D6OMuvz?SbuwMB-aggX&q1zWl0TFO+UP)MYLSl-Kj0x61>^g-?Md+lgi@0VT zjDM(b0xVRHfX+I>a<2II6E(^_+7g<5ZXz(fhFvGSRncNhFn}lg{5&DgR}L zPpiwEwlL6D$QkQH?!<}gWgG|rfX5HbZvV<7mTMn?=WCp-vf60*J6O45Bv`|)W0KAz z+2gM}Kmy?POOePkUl5>fYj~VPKFlHg-TRDRz>K1Plx#a}M8Y8oFqR2nZ;yk6QW1== zb$(o_E@e`WYLe?NfQ%6FpENh~0&|920URGW$#1X153DTuY156r$Zz;D0B6uTOLA&n zsS7RlNb`kFttg9yXasVU%hAm26)Q5fgF-JKB*mIHg!el^zgfFsLPDsl66a}fG>Iot zxJ+zX_X1swYu6j3&5kjmpxDaxgy8fkGkAB<$jiwmW+}uRH8x+XR+!zd!)9R6D+N09 zm4(j0=FT-Tk4*IHt=YT>3HX^QlAlU#WSTiwTStEDIiCtj`?WYDAs)Af_@-SHa%-Bc zGF1#rBG}Z$GmoZjS=Fa4LiE2+%i#1J5y`$-f|abK`3Ak4Oplus+Zjb!H$XR83PR>D z1kt3P4q%v%d5IsmH@IDJ1llMr0fq{}Pf{n3A0iif*ijjop}aTE!Gjtb_~sJ2$qLpz z?A+f{3w`|9z8l9xElNSNYC~4yVznxnnqAq(pQ)%x+sy0@Rof!GO5r0NwE4F4KNN zQ;e*n@8yPKU*B**bkM;L29UELchpiG^K7VB$biePy2Ka+h;PoUD?bR8=PTTLW;EY< z23Q_nT62oLV57kWOV9icj90=#30*HVHAp^@nE!C!Tb35&H!;Qy7!B9EsMakF(v5!S z3{!OJ?QKNmlfq4?Au+Gc#P25tIPD*Fzuq>WT!# zFEH_;zTW5mh3w9i2*JPYBpS_XW}gA8i-ck(q~67cJ5RX-BnZd*C0-8BEcT$( z9DjKAKt0vhug%eWxRz9Dk+(EgVv+nSB%Kh_lj8X65u1V$#$jTFQFgo z^k2lbo4 zTk3xhNJ$zsP=gUX7qkb5N1(OQBJ!i4x_Sj(-8iv0EWXfYQ!^ZWL5GS~mIQV_kRWcP_n(J!%yCHnVMhhzKE z@${Z|c(g zS&DAWW#)T`FIv$Nz646k#m~RO)G`k&gX|-m@TbM6*YUZGFcvFF`u_jH>1xt z91U@PO9jY}8jycuFrsMR!rf4qnF2h-V!2%qH(+8d)!(gzQs?sWg05jd z!ILW8O-?5(kPCC@Z%+t)$F0ZR@R1ZbhnSQ-*LK7XTU0HQg1^O@DFL?m3ZnOPfPyN( zUXjqpq-wL&OpDTqNq@!NVLWx3LI(DMKdlP;TnIQ2QGKzL9rd0i>h47P}dj6OG zapft46Q1%ck-FIF9l;8D`h_xnnQyC3h*04};6io0f>%@i7qW4x0RTlojY28aQ|&2p zm*wJ+Ow2s6j?Mcqf-O}+nZArYp&rNRPPDn|bGoYp z_0I&7u9Hy%NP&D0S$vmth>DI@(bHA5`8~XyZ>-1QP}b4}`yR|<(d8hCX}QVY^nSA#kv%11H}1g8bF%g2@uvhf3ci0@~pY-nHljs1m|xtjho z(Z;B3r6*nMxTVBroAG)3B0u!W4(%iH0aqYkWbrq$dX&A;J|&>Nl`c4Jo&_^BUIRfJE5MDA|B|GVQ$CNp~@SJ@`Flz;Bu&(?wu=esMB|h>LAUGekqB*0z<85CeDz zKxg4gXQ>f2XTVs|n`}b@3OS(ODzMg%ym|Z4tToQI>Y^(?F{=<Sx4$=7Hr%Ur+V5P?N~#RBV4}!c9oM3G>-7H#?~l24-D=wl^y@cFO8EUW{ zO#*dSw><4DXXpr4$O05Pvy46Z2LM@O6@!yK#9ZB`W%VcJXFf)siutSBKmOK=(egho zmu}-t6pPxx9EMu0h}c7vl!&fY^VV9Er`ELaGDCE(z}}l?@~FdAVkI?v-$dI*4$%Gx z14Q4|{Aq&x>tZTzIfcAIVOCW!^HlF&s%vmh|I`wH0e4M2ukoczQ1{t$&ZElr7+hM} zOyxg`U)!Mz_4yea*GxOH;EzZAB~{v|@GWHb%_Fe#pBJF9 z5(00JV2xwMJkqDYdV`=!sybZDqyD3%+_SC-hZOjT4A}Q0Rlr`I!PQ3Rt`Ha3ZqGi~ z`;s^m(v@`PsKvpMm^F7-mow$sndlGiuOzqcp z?{0#W#3Jra?P~6KtAq+1g$J86gN4De2!saeNptxmrUw0V3Wg9?2ZQ}c`BYi_z{SWr z|NWzeG0C>~WwN`?W7q1F*(tvh?V2dCxA}`|9pwJP%9$jP0AG0T4;^R$?TTP3a*3$< zFUMbI2!^_R@+%c_(GO5%PiC3^;?450aZo6riPuSGBUWZ}MMTFKKVUFr_GwlWC=*8T zFb2!7ia}6z^UY40^=)OuwHhsCWgnj@@GfXIdMr}bu)b2+;(h-Yo=Uqp>M`Yp%mHSR zhXYVJQE^Pw2)XWkj2Db}x3=*P?v})LO>~#~`AbU~6|uPfm3!DF>H5ea;i;jN7Hs}h zOsCJ5j-;cSxS$uY4%M)k{40cVs6Cyj`LjEBS|z!bO%f?`bm9`{Rx{mQ?%9+UIW*Js z00n|Yp?P2)#+H2?U5f-H$%xOL7^?k=X0iNZCW8u8GJyf8Wv!`R(QFOPg`G#g>v-L_ zbiAKMt0KipdW!FN?2EzmKFPE%+LsIqCfNDtWa})P@;3!I8G|Kze3$j=3pCllZ(04nWJfyN&%Og=HZrf816&*E=WCyP(# zPo|mMbwAjesYyBEpyr1^c+iue!~%LP?7eAqRgTELx|wC-h`yPiCRQEI8#_uEoFnX} zSJU^|DJ#GPD}h;x>Wk;g(ZFOQm6-Sygh{xz@3iDt@yq00lFsdv$Rvr07CAd#_2X;s6*QBP z#N3KH5Cxd$Uzoo-}6gzu= z^~s9)>!6JRxCrY2Mjp7AgzCr9AyBc%^1%o`9P^m0Pk_4KQRndH_6pgUZgcJ3s1|UyZ|b8-j;Cb^BO%p?@aIxS5}A#0Ov^ zYy9l5czv$wF#urzixavXW;%Zo&mOYqr@EQ}=S;%oERXBaA^hbfv!Bf4#QHeiO{tMZ zrT}Rqxl*D~&jkE6?ZU)m2~pALSHSu$2Nr)%bsJbx8_pk-uk8%QG*;?}hWTd-^8E>% z6&GwUd1V&xwwBsb;V-C(-~&LeG$xQ?mw>Ym3#20^8m1x)o~VNZ?N$c(c4?weq_EZ0Bp0P1|9AmVco!v} zxPTBi&`i4uR#ZeYZ-6VAHe&)DmVB{?R}!gc;zbNoHEB~R>=lA6Kw*p!dYLai#nL>4 zp-lv-@{HExqsJI@UAd$B1w01$3@s98Jwv6GcaffN(e#4aT^087!5` zFJ#Kdo)NwWE8XHz&N8&LI5}eThy{h{yG5;xRl#KWS->u_X8jYD) zE*I$CLcUQ93jmX5xHs&wn{C2Te8+bf2-%6M7`*feoqE$()?M_K0NfM{332_6F<_64~k!){C2jE`djrry5i;nXf?q~Q#IjIlHCyhV3 z?8=@~sa7fw0-(ISRXND%3Z_!m>wDrApN#1j-Yf!MP}2KI90k|}|Bl4Bw!~-Zt6spz zrUp{iges}-V4?+|At}AFi%UEoyb}}>kmIzcNDJO><_ztXFO^kSv6AjueG{aCT=h?~ z*N65j4;@Lh&nW|D===En@Bdv=ywI0So+#31NlUiibn_I4LT7}JQ?z&9TC4s!k{9o2 z!iVV_cUPslq{R;(JRkry?p>12pJ4LI ziMebqKNapx3Ofxl$8`LUW_48SwT8tyh)^^TAl)eS1CQbpqBJouSLA>l)@rIRftHB( zQcfi~I0d_PcNj(%Zx3McSK8R^0rLyD7H`ZWZj(m^gZ-k=&?T0i&ghOysIJ<{p62*G z3CoEI3}dTCP%;6cAiAd@B1%18TPV`AnOHLKQoQnpipW)>9js`SBdKKlYa9~XM-*o^ zdSVpC@DHnNaDK6moGd77+A6~A{ve!9wHipFm^m518xsDB5~tA+JKWE>Sm>NGRRX_S z?3Ei3l}#BsJ7pbA^9J1b0!|KvvIBqO1nz|U{V6GQaw@>u=l%_%7+Y|^RT73p3D3}w z#oKyC)(QE8G2;rzbV{BOTaN?g#%B5Y$x>EwbW;Z3a~-dTF#v1U;x^AuT+o`YHrQ%% z8+n$Z>DWIp08*B3kE-chP>6}9yOO+(fy`1Ncb5Cx+X2}yh@I-e4;~FGBS8`D9jqxm(R{Ym308AkRTk!%?0Kvg~8MR0l_5x*kCG>2M zJIh!JPR@^Z1(rVxgko8wU$+R#ot|}GTVk^41{u|8OY?*)y_phor_)^j?>(b+kV?%Q zIjPbV#`1oD>*+Bm7rP9g(t^lU87G&PmM@&dM4XY4(dMYy=&8^`JU}rfsu&?gO-+q> zm{m&9UZ|`{u7S=~9%?7T{ZB!X-I>1swijUk`R34zvs?M;UYnpL@GkFhynC#>VM6#Z z#_x9J7Oo>TvNXLM6R;^TO$(R?L|YJ)pi@4l9k)LV;)Hc$d`Vm1?H!{DKArXD2)q>& zR@rZ}0p@6zHIOS!PBr-+aQN{rv_b0h=y-BvWf_ggb;-V^}sc@iz1boFR??eM^QG7{PUwc^goenDj<~-?;^_WodhoL6 znjbm;apUyrteHPi4(4C-qt|TATbkQbqzNJ0LYc`>iK)jQ}jKa_DgbJUI@#x zV%4G%zs(|?X6HWAI7g+P@fhSyEHv1BHU-#sN!LIydjO9ldCRQh z^%DAnJ1Mfb^VUw=ozq!lEVIvD=0m0)ugZ?Mw^5=U{)B`6K_akX91Li1WEAaP-jowB zryd{va7$uzX>T51^yFl34|P43oU`gH#y+}~b4|)&o^kouMCTO$_{ZUbg(Oz&IqX>e z)HJxfT!VNgMWxJf^SVN;uI17dVDV?!y$_1@q@OOjY|2Z~$M(J$%ctJ2JbF#}*Ckhn z;a_E3-*-D@LLPg@E`Aec&zcQ?l}QOu9h`B0gmykl z#x%OP6+^@(b2wT3;>kyD-@8E5`G*# z9lHR48|d6pGkyAC>qFGL#}*bl_wR41K5f3gas$dsE*Ohk(0uJ>1czu6KP1=q!OfP1 zww)Du?M%x0+VSO0N62@J?~;ychH%M{MxXi9(|h+!3Jv@x=R!*F|L+%G6pwR= zIl<$_JhVX5|9+rH_@Mm%{)_+j!T)UK|J#TEw-5jSe7f8}wxWW2z z9v8qGx}ouKFTr!F`^oR~AItjXgFAx+2va0sNO#3NlL(ihZaqkq{C3bMiP;J4fS~a6 zc$MeXE*;v;5lDa308;s(i>JgEX3QW%(`$V_Tzss|JHfE^hrc>D4H1M{kEBu`mZ62- zZM&GNFdz);+Aeuc)3Wzs7}3F@ZX4Bcx0oql*E`V=Z;KZhD-W@mpN(1B`dv?K#tU&f zOux8I*qVoeNZ47YK>NaB7Tu>-JX-Q%Kd~nb=8Ukx6r2yq&jQ!;3nKa=o8vFe6h*eX z!8y3%R(5uUMx!G9lEljo#WrHZ4WwHZfgELynRVN@uYkOCZ#TSJlm`Ay7WMD6Z`Y1m zkNBJR-UZfcxc*)h&++fKdNml@^4UcD7ut(L^gh%Y*ErjNAw!_+a?tk?Oj=nNDHa&o zV3osTt9Q6&S3h%-qe3lfRBag(dtI}K>)aA^4vwQ$Du9msn)z0eLK@teLJ?^5*kK|M zNKRlEBf||_Rg#!B1$~a9-+M0~o_;))y$?rW)+>Qf-ga0$@mm4NiF~EXJU)D*c{eNv zUzzwK2aejf4Xa{BN)~UkkbwBBPVjZL1VzvQ3MP;RDI_J(WA_I?9f;m4^jo3zXo2ya zX4;4m7~Yrl8y>s3b@-8m){*(%BdOhtx2Ux&oX$RaE{bq< zC7D63F=uF!t*H46GuFQ5N%UqbtwshmYG!_I85X>l1_3`ud}!$f1>HefxDCiYf7i;! zuF&E=b$*^jSBuBZ{|-(MaBi++`?umsP5@#t+pVX~i(6eRR&aVF6!A$7Zh=mHGZC*S z`y`;+u%o8XRE_GSt#jSEg>m#$)f)PTA31INCsd>1Fc^A*4Qy48CnnayA4n`BRYGg- zHDFxOD1LZ6P>ZbM{Q4xYY53cqhdP#2fwhVFrjsO=GbFJM0*}=M!0^HVud++wl65}d zm94>R2N{0(#PxDrIQ~>)^E7-&93L@DbcUbWpwR>&l!mbsdxWtm_$4bh5*W9lTCXJ|xdAvhZ65-B4tV6*3+|#b7#PXQHdIT%d5piYP@1BqDn*@xOQ3?SsHy%Sl2& zb70F)07p_kf2Ph7hMf!-lVw`@*|OK}#hsgkyRFI)85$**PbTk)KpVb!ha!LW?H`ng zq#@l-p}TqKG^)7$VFdbD2mDX?8OGqT5I`M~IkH`Q5G|AYN^YSJp)9+?%q03Nm*O`P|6W9~%bDg*5;*3pp3rY*Qz@BAe06O7V7 z7oo|zqJ$E<-cAVZPMrnh&2T7g?qXv2=PJzjBc2=%8`{d6fqFS^AOS0}4&M`zS4E%W zdC6bI%Mg%*JA%MjuF)?+8d@o-+o2WsEtjYfSpinS&2A{aS0)N1U-~oY+%&$R4_6ro z@o=J$C5Dniedv?yq`y(6!S7Kd{S`3I`q=v|_~4u_W&D})P)Sgnr7jifjx8zF@1^XM zu+3r2?|B-rd}a=Eq}niHL}Mr|;3aV_rvh-=(H;`7Klwa&8c-0xOWZy`Kf3lpG7qnS za3})~#8g_%ELTZU$2*|*a+6a zR#%6L5>IX;x!Ir!4LVaz8@b-_N_*(HAKDEI-?4RmU|Nwa^|JCi(=~DnL#vw*FB0U@@76Rs^?z$+qevPp#LlGomx&B! zJ^q-Zjffr>8uK9nj1-jQF+vqF{BTMl7cJxibIO+lgt$k@mm=YY=~KmmAgs$Q#q?kFtc)3|x>UqF(fu@`MeQ8AF)G$$vkDf8g+ePk1@ z2_>TG!UrVTx9IFX6TAfp|G?6`VGSy>5wl?M-Tcihm4jr6Bw!MhBKf-b9jlUwR~Axx zMD2*-U`O6((36Ur>tWUfbGYO$XKhQ30CZ( zJHiu@KB^~)rb)LxU{1Of58;MvXIU)G{s;2%heMfv3@&Ks zo8^72t~ZljS2;hwpoGux1R!S?SD+$)>k8oNa8RH#O0jR$Zu*t)i{UIOvkN!M&adMU zDebIul6^pPqKP1cXm|zPaU>8s-!gzF>brQ|W>UaZU(xS(UvR@~$@sClWC6@0pDc58 z*gYYIp%zvWqOKii+}GD-WC1yWMeLCwU?kd-7RKq0*(eS9@GBRF5E4Csygb2#Eg~4bu)*inr+xg{{alvwKl*L2 zUc~<9`HQ%<@MLnYvJVXIfTHYAOxNuPl*E;2@niC;{=B7 zQLfijk|AQBKrskEuQR=Z2C#rW-iT%F6GA(~L@B!P3(d$25N2DE~4M>dl+Qmg%bFmMV zOzos@*>9ug0=P)N+5V_Dgj43fgObW7JV83Nx|6-Z`P^i6}oPhWGBf7 zEo&)IZo@Dg!)7QtB&fzOY}(RY*{4C7X?46nlH`bG+3ANRFm`dSup^z*5zii_2maFTfHSq3hs~0$J zqLM$eQz4yv>YIV#F4p%u9T4*V{^DV?w16S{eQ#*5hUD+lxr4XfLJJJcfNH9PlKb*i zXLQaZ5_3&80J`9&#!v6p5_1!^k$8B-)feFP%b2qn?zTtzEt1(-{=T z$#ADWu(FcDuKa3rd~tEu%)Ra(vguz($?nxx7+^k7Vl(^=aQNoiDt#vnBg7$F2Kj$x zyVD4pknVp)Sj7fM3XXboA!$TQ)W!*ytFirIXN5AK4k1#Hf`HS6p>#CVdVc#B^9_Kfa?hMWNwc% z?$g6^X8mcE-6p-QeRb*LQLeTYVcN0qvyKk&uC5j7TSi`bwmdPOSPjD7h(fA?wf74M zNbi*FNYgE|TQ=c9n!-p<($BL@)h#Y*<2&kZi$#2(5@#)h8k>?&NM~HQ`Cob_t4TfD zI25KnoIih$NrnjYT`QvE+)~+k$SiiJFWZDhAl+-%UWOk&BHqy52>oIH_hP1;9+C># zTn~MkN~K&$g;WG5va8)zP@q2xp8WYWaNH1SqztsV{fK~P_#rFk#XO({16O$+iChmY z<mwwB z=7J@=`_qsp0N;m%NYmW_+L9x4U0Ql5MOos^p$DOrBz?52y2Y~-6kvm|f9bATj+k7V4`xV8D~_`BI$ z0BM>{^lyG+O^OK&tT9#{eb@&+-xYsqg|emo%7h>@Bk}B2(2qe|4q`h|cJ_p|YZ9Qk zLR*~#hlQ_Qe5~*EhEPj3YY=_gK$;)zl7t6dXxmUnc9PfZ1k`zl0-U}*SlO*%MSdnh zIRIVlaW0j648!3Zu`r@hF5LjSvTr`t`{j@H>Jc8~mDulLTRV0eh)52hxyL#l4vp)fbJ(Jd=9*mSr-fG;Gyj1r6fUV9%+h4lMO#ufglx% zk}8NAp3HXaa`z4K^$F=v+%PWS0rqd@dFx-*l8ZTSY5ftdt`0`3n&QViDG}WXo}rn} z!>#;p2sA2>UKGGna!G;ee#{#J>J5f70yr5Z81Cl!Qr6JG2Y3mA8At4zCW=&^8~OCi zWT5u6GKe9&F>BT*EMnqiF+KUFa3{%wyRS zcOBR})NV#q%XIf2=3Vvr{(W}7OFH0u)d3H?Wp&T$Z`k`HSU)qvB8wUFYgKqJw@;ky zxX#?G(|eqhQ zok=Lm<+Ro&rzNLgV>)O%nNO7egY&-O%jZK2ySN|Z5yG{cXhoweIag%N`AB%3AKWNH zS;Q{iVlI;aO4rgKMS>=YpqNX01GV7V%t8-MZ4mlbluc|zG);vB`{GXV118ceY>AEd zpiXl3+Y+JzY}3~ayKcTl6sOp>Z=Rk0qalqSrmb_w-M+r;B{DruWw)Y5Pws70-p<8u zyV@QRzxqyEVfss0?D)amDK2WHa^ulMn%_(U+WMQZK8pmsuZJM%!MA4Yh&CmsS;`gN zkXqu>R%G0Zq%daC+v+)vVkEia=X*bsmKi*Hso)vZKismBJB-<$e}y$hz_g$xMEmlF zgWhMgDPo{aKxQv}FqYeM?FHw);Y8rX5B6A1H$t z6&%9z;VfD<<`PbGm03gL2BW6uYDfN(c>w^v2;17hL1?x&Tx6C((N({Mh^gsx(*7C> zQXc1hgx!6&HjhVAZ;v?kZ{7J08eOICgWzoqZ6nS!A) zz1Q%x_*=E>_O%_8;=$SQ_Y|PNu?VHn)a=TL+qDvgkb&gOo~xQdsKZE>=i+}fNB4xU zh%@y>xTQ0~WX@xNBR3enGoTqj;vvzg^` zB;6*E`ka0DR_6AxDpPDfcF^R177;=VP|)l+g`Vz@3IlFkZ5n`E3)NC1p&c_UFGRTn zxP2lW9u%I%M`yfD$s$x5gVZW1^099{{W-6P`{dS+;Jl~PPZGP!VQYomUDtf&#K8bA z9Y0c(gLrvS%WrpE$+h@Wf)_d>u&w&KmZ+AX!Wl=To1el?7q%c zKmZ9&*6HrfX4N!{&`5;whv7zQ(91%uQdGyUW4A;X^#+oqNGwZa0bb5y3M`0!cwhRH zTa&FCiY7i!u9DwJ4_y(gBRgJ7Ft)&Xw8Q zn606gCtMgc*M6v-+}{!PG#W!$T3>xvgZIrxqmrG+ytyU1V#ljP+zh8dPp|jh8#5#Y zFCrF5+bmZG`6Uhh&3Uqm5%`HW4X}1gHW$uK-HuWWIY0FD7zgXT*}~jv(da&Z)ue)$ z2@>E61zwPn1@MY-*SY0xQbrA?46_*KhO@y^eChXkyb|;x4p|bBDQ-a<^e&_XR9g@$ z@kdQ(O|eAWsd`}d@mg8iEQ>YHHJjd$BIWB&@O>g8Wsw7oH&1jP?ciiSKHQPgb-e$G zX>Fr(Ugvk#A_XrP^AfYc{>{msVt_)#NTvva;VZ&@bxWKoZfs(4E(mwnBL&_pl=VJI z48v}$dZKNj5X%>nbyQiL>#A&E^oJx?4npSjj0%|RCQVWd$;pvo%;{3z=U*qb^tMID zbIUei660=41hLskA&*OW1{?k7(V1_frUQkTLAS67=|p^sEUrb@&cUo_T+L6#y+XWI z#;mYFnv*@&M3G*SXYL`>;Ou2#Y!m+5`imSug(@)?QMyfq;PXbTzo&v;)TgrVJ?n)M z>7;L?nVjuKQ=(uM41_W#no${In6e-TxD!0Dak+|9p}zIc%Zj@_Q-&RztZ{XB-hBPG znoq{Zro|pp?tf0SPceZwzTeZyEpj8CPqTThe7ShilJ()q{cJX)^*jvQI!4E6-AMvU z8z|iRedcG%CK=M@P#1eT%X}5Qie!PvG7k&>L>Q!r*!ecnddtamDvdBOi9ue;2^*Gu zar*hJ+nG_W!;x>&-}@H(Yin%sLYYom^SoDgxjntjy3A^mLq!VTh0nB&{- zw?1l%Psc(OolhoPlRr)w9w{+X%--#GM^3{O1eJE)3Hb1zRh>@MSt5BuLF$R~w34ti zT@3mr9Y~V?f^9AAN8GQ4i;}-Fz2hlPz{WolsH25la&ROKL0*=?Usio#?G5efCA#if zQtAii?H02eu=++^f7Y;&5AkL5k+NsziuHdYXjq>_|7C?A^&*y|kpHK6&>RwpTotH8 zTw&mI5};r7bVfipM{N>*m~)efab+Q%6(RDo9wskTS)@+SUk@;b(8IMZahCvdi3uo3 zd4I}Fb^J|6{W=1~&`$Lm1 zY&6T7)(vEDUKk4{U=3zqPcmwSfT`acRXBE5CUT3Rlx_A_J@D#h4N6h?r%U;{a|?jz z1`G|LC(qN1jEjx-=B>*4SW1vd3ooO-p5$q8=6+0$9B7o5qEp?cpaOD+@K^X;vn2-P zy&=^5wI5YCI*(o=ezVR+tE8W;#$dC@%R_#9^Vh$zR*6qWYBq=uR3Q`3wB77m9BvQM zFB)*$aDAleQe;J4+CaKevfPSuMUZ4NxZ6)e%SB67PI2ag*ZBF6WsbpMqtC!FCdg8D zH46W+eyCxc*jI>tn6b^&1nGT0l)5A?wZV~+s)x(EfcPdUxA9B^fN!mO0{EJJ{gl#~ zB>LSSb2SH=OQb=?f)P55H(NYecL%m423cu>ZY7-OMuoJk53g;;{z6WdwsA#(xaFjm ziN_J~M7r?Am3Qm*a}m$Dgw08oFC`!zko3m5gHvNcyyx8xo3hJsZU=hH&>}wW~6=vZ+m4t$EoVi8><= z8srdfP0E95{l)z=raY*ve^@V6-GqC(QwK`-6S3MM+|}Fp(h_Yper|Y*BV-*Qskk0h zW>U-ui9vSJh^B^ENjg-|DK7vrUnG}s{=Pp8pT&5q>h9lq-p*UvAC)rmjj(0H3!Xnr zuYzG&=UBgE(*lmPu6E==ke>a>%~Tt$7_^n2*_~zN$yNNB)bAtVYU#edzO12tnVifk z|JTfo1t4+gIfb(4%$46+JT{~|R;5vl@vxKxIsx>UwN(KZVq#1btr0W` zu{BRccp$R)n0zvisT!Azu94TJ_O{bsH|*8=-}V;>Ro_g5-Fc#HN|{%b1bPe`wuvrL ztDSX{sFpIjcBGRcC?r|+CCASck027nB9t}M^|Qy~YX}riCc}AxL=RMp4*Ki1_?nHv!OV3pQyuu|IF|dSi+h1k=j@`KVHY|MPhBo0Q zAEiLgOSS6XAr(S4(IM(1zBaOuSjp;H9q$t8M`h1IO6w}symXUf7qY#gA-Fv8!$ZDz&LUd^D>Iw#n>rnQfmIwZwFl6?)YkJN2@{P8u|6o??XeY z^X*#_{m=L5>`rVo0Q@}>w{zB)bYj;&cEd)d^ul|m78|p0iX^6_dM-tXAsDc)eq#1+ zwEc+1SesBo<}pIREmI;8Y!3QvMY5>vB`?2gc?DxDr7^4cDy!#7bq%=&i@7FX{z@AG zt|sGBN58*nC|XZwk5uqq{OUd4n?UsQnq`R-J6w`@FTFW?&DzZQoaYrBw2KEcYm~rI zPHK`1Tgui9Zz9swf-XES2STTb_h^&uYMCm95>HI*9n=L=XDX}}^WhKh3t9uYQ&(T$-uhWw>ptn=+Sdk3GNg$de z^Tiy*ch#?H7-hxoeCV(h3I2S?UZEuR>Lq;2@2*)`qOF}#R(0A@u8T`o>acSoAiJ~xKKzwR@eegWoMW|}8%e{p?+bi^=RTg8DA=D&US9|LUa4e0Vlo+ITDe=bOc^5GnP|^m1ToGt)(k|QMKZYsvA*sIv1m_X!uk}Rn z^O4v3YdEF#XI(zaJU<@|{kqyd9WuK-z*Mi{0X(fF{-L5?wkQy+_2%o5FAloe2yT&& zGCLL5@i8nQyF*3wIo?!y&*{a<*3q_kX-;8ZU4FFG(ORRK)9HA58^H~rtCFjs??%}h zBp3J;`xwo0f90#_dc4fR;8jT61G=D!&uc40A%?Hcb!T1v_})6yy-Ds50e(p3|F~7M zdp0!?YA0n4aX0FuK5o3gw=K6Zxj$cir{MxQ&Lo^r2d=K6*aU#iadOnx|$i+_am$S zzuI+)|8Exj6CwFhjt5?rH(KyT`OoFJG|WjuB5_u{#QX9P?R4zo*!|}!x9(PSC;KS0 zds>_Mz84tljKVJ(T-%yFLkqEq$-oAliBa|l+WGa}te0{p;T8x?U;?@D%XgxjAlB*) zYw5*OWfJAs!>eX+Yo+@^Ge5VeC9jehkji}s?jxf^2Vo* zp`xvSJVeNz2;6WzA($WHc_+y2r5|6kcf3FSCB6HaZq7`|VgOGJ@d*30kg)d36(Qmu z_s6#3#B5vq`hurfMZ<*Jmv9}0l-8`-@V~cMo69ksTB?3|vU}G{SbUeG8(GbML=52h zT;uzb#v4 zn_<4nzvDVTEzPF;9DabNTRe{9;7WsUL6n&ue+hqe*EBX9@|<#~W5{z;&BS zsl@oxl0u`z(};UFMVUaldYRJNU+t_B0Qa5$c3i5VH_kN_%_IvaU-1UNf;mYEIAKCy zy0@gFn34AYQZtGLfJYXoQJTNpXE(HxZJQ&?4R||wjw)U8r{8*FFVfcx@}9;bTjg3Y zpO2!xPb%^-F3vCTqPEI;VU9768?S4BAY}z1D#pTS6^&bWi4XSPr_8}%yJ;vA~>caP4RK&{s&I>Iy_&JVw)(c`^ z24GG)rrCFLv!QTD;>9@v3LZ5cy{l^tQ#?#5jBn$b26JEk>*E)OIf3j>h{i)!aqPb~ zQ;jO7<<}VDm?lAas}v^etm9!`yJAYG{+IK0V!*$K{?_mz<;8W967LQU%RCq{j2O@M zJ#h&l-^jyZb28w*&M!ehl!1>D9gqjFY;)R>i6H@e$hG%NcS8)Gwx@4KWE*%| z3H?LqpDhf)@W4w7WN$o?zj;(v>uw`*P^_@*FEUA$*b<7VxG>^qDWBcTiIi`U)OCy2 zRBc%K#`x!8FC#YW-E`KGgj>*n3aIe@_3LG0q`E=en#-YRQj}Gp@1OjK*$a1}P^!Av zDwRrnXIMca#$%w0*l0B9w2h9IAoLMjjE(5RJ!|x{^?&#MN~HM>P~=qsz%VAj>45Kd z-22^9S8JR!`V-r0mM58ur!5M!Vbu*qnxc(9j?$ zdh9AsBk4j7AAj~jom(9fLa2@XR7%#bo^QKjZv^2oIb?AW80^Z$M+=Z_CjMHYgc*!hgvzgRdC*#^8pA62Sc4G2Nh8BNEat~tD zulK_Cj*Y0^>w7Ym7uM?BO+TR{H2*56x$ZudMMSpOpYg3cE$Q_+Qo>fohIK4OO}DDW zW`*KBd|G18*0NzvG&?kFY0$ei4d874g$xkx3(NrAJ(p-8jIpR4J}$O^E-JX)LN{aR z4X4e()U0I!lesXvVJ37NeReh9<2s=~MJq^kk<9E07A6tD#Uo9ANuu@o>jV*%ZO5J4 z1}HAoB~G%>-=*3(^NCr`uu8L1=(^pYpDv4 z#SuR-2A>mI5HNpEFUV1OJ#V^Bb#Ew3P{Eeg_hA=i0C$d_h)oS+)_!bsg`QbEkSOKD zenR*hAsUZp{M(WqXpu_-~18ymAjl<0p%tToWtvKI};Z1kvNq35z|Uj z#XNPGGr_tAjP;zdtSkixeRhW}_SvJ9;TLaK=mvEEr9^Nq6fkgIv!?C@tovkAVC*SO zpC)S;fxW*GgKtj!W1EIDlmZyU3)!|WRoXWVi~yk<0mXG5Ol2|#s~xVxVF}K74U1$* zcEeoj%Ijf#aVzCBiLlR8kJr+h2*X2w%<^+6yD_(-IyXrbF!HqG`v(dp9~gn7B7E!6 zal-wteFZDH2bAU9kiAsZtxJ;GN3}N*P+ZITVCd)YpU1D=%baVf)%7l$lttd$jNL@e z7M97ve42EQl@lO{+fI=o>u@&&KHrklF~smk10f#~goCF6q8#v@T$v>3pZKZs=`68p zs)!B0|6t(ebt1qiDUxmR(BR&W(`!6V z@5`mlsASNa2MX1&qZa8uKG8&!UvrE)Vc+8O4+9!GfOKj*LcG>Bl_amBp7E3h~ zGT@-TY*t5kYv0YdbtoZQPJfkgmY^gjkvpN;CN&d>>IR~eF%xwqU-*dOYj|5ntdQWcu^yjBmW4P%^>44an3JiLn*Keq#~qA9 z?SjihdykREdUhsU0fe!AQz7t|8q0YGZrUa_kC0vnkv$g&4rj#E`G;q3hFVW?r|;$` zWm}zkW!F6!H{KEb3dK=QJre9ne8y3l;M3yj`>UWK2Wv%xOlujlhEQ2S*d(@=HwbGU zfPzJ2b4 z4z1u%JI@qzp$j^t(eZkilf_SL7dFCR_=RoSW>MHY`sMF9arSEHqYpvK*njY^)RPb3 zFQ4TO??J#QtJ;}<#u+!sO#SugOM6k@M$URqUp}RnnM`QKtfxB-%ggSump{fie46RpO>9Wx#Fy2m z5Euq7wG?}Q(#X;Ed`^@6=l zZ?l(Yc-ijTaIswsLcv{j0V)0}Xw6RWWQB+baEovz*$eplU%?Vyx{@jMLvn$S_f~ozmmBL(KA8?2kG-erREM5{AFz= z1K`fMWc`TSL`uC$m*R0zQc4fR^oF;>U;cjt$p0##oR+j4kusnwq9Fxlk9AsbbMCh8 zZ3rYp=G?P!8WCaU%<^pjH~8+isO<27-RT?8w~9b-WJaqRKhPMp#->0&f;R=%WLBma zhpAco#rHBu03#+`Sle=X?=~!$({||zGFM=`TXmgKApY&uC}8}|M0By`@{@@umUB{x zY>XJB2N}G8^la3_HVn617%Xuo7%SE_MH>j?e&ghPekUMm zMPKeqtw+-uEW^|RY0C8DUtd3%AXk6i$>uyv&lwU;!}A{E2d+;W1=*zo9_nhphu%?7 zm4E*i@U2NB)T$Ro#ai-){Ed#|p!k*hTpRIpRBq2NX?z{QIWo-XJz%MT!4VLYd4E3a zxLD(U8a_f6pMQ?gGWp9xrc(d%=bMk1V-*>`ZOggzF^pI>@D zQyiL7f{yzadePBGkUNfypCCZALm@2Q%x|=CEC-z;Ki#;ezKnU$U(ox67gw2=v@;p< z>sPzs$nU5>Hf*$Whbu{F1wx;xYbR=GTswT{>Fv0)9!k5hmT-_Iqfh1tqK`fCFC?hL z(zyvw1uCbY@P-6A7+GwXe5x8dcpE2%d2TZq^ktd6$_9b|0Z>4$rH-H zae#!9F?`!6C{DddOJUCH0GdHtRm5n6B$}gZm!;M9pr)e|rEvYcV7ArweVkV2eUp@y z0RxQ)1f%P|U8}>6zce8JI`oBj&#)_7RI&ytSXT2ux-?M~WVf3qc&a-^{HkKyQ9Wz> zr6+sO&HM2j!5+`M{y3jdiICd50K1kj8yx4~?mdCb`G}gvWNS#ke%jfOqCW#zW#5Z+ zRB6m`59I~@w#2skZMm61(}Hn1JYh`hTa;iHu_iNkPqvQOtE^#Q*z;|FYsoo+_fZ@X z_XF*`hfS2Ed4@@q`oYTobqAD6MTh`DU2ZK2NXIr{C<>mh8jNGlJozpx-VU`cJ+yfA zhciQ>f1hRkMwAD^&@PE^*Z6!t31gnu`VO1Ow5!dIz&mhJp}&CW^ZBPdufD!Ue;T%4 z+c1H>Cjq8cL`smcN^b5dJ1R?;atfrEeo&gb`afPF80B~iJ^p~~rS1oM096+~=s|ck z!rJVK=i{Q#kQTbN;q!$Tw+`YnLyK$OAIQk2yw*Y8vq{F)7Tf+7#-6Vt4ho*1)Cq_f zt&i%7nGowP_*!JmN7EAOn`AZw+#3Ebj@yOV&u zQ(xD(0Vi%4EPPg66+sek1+#J6VGxngmU78QtR~d?qRyv@Z`Pe}@3j2Lhdj)t;;ALzH3mt30oW6cV#{ri{JwvTBI|K_w!;CA_es zvg@`mMg*bSK1vAbB@oIKF&bd1h;)W|lmg(4Fsh^FHX7|RxTc_rz_sRQVjX1jb2pt& z4g@kS*;P~7HYsZ&Q$Cm7*h;alU3132NQ0r07*NCNZ%7pxxKNFc@VACP>67)zT^4&pj z4m(Gqvo1_o!?)cZUUNr!3%Pil=R^K^3itUZ$!tfUI0TB>=$geq!CdBEQ3&#we9Xrlg1ut9m&f^mC734b+k@Xih=%fC<0g5>` zVA}1O!B<(TPhVAb#FDbW$OQ63K3BZ-tmUbOeGX45t9QO<-~OH1h|+FduAJicWb53- zh!Vlrx>jS~YMm=b;xFI3MPDn&OhxtN#gEM62bJ@e`QH{9pr{u7b`9_Zj$}w|W%;Gf zg#W)%oN#Sio9V31>VEiKr#!3`ZP754ui$oSeZ*&TrUJ#~H5&~$J=f|ybv|2rBfhpZ z55r!~{gP@qZYV2fgd@hNomBI|*VylUw@4q0nj)})GB`>bf-EpHuqu-?t(?!aR`$Q= z`Ix9)?rwCPRy~CAEOYgM>r?D&b(J;mS(ey)({HG<6N+``E0383e`*Jm2743O(UtEI z_!pYcm8Jkw%`)$0j;P;cD!t|{Zzry&DZdDP$*cdj75zJ>{BL;P#g$B~OxWS9r**fd zK7zawaE;KUdt8FtAr-83p2R*R1e8n) zHOQO&=Gzj}c%ZL&_?2M99LBwY#bEw2l#AqhUQ2M{w#CEU!c}Aui$E^aOFwd=NXCQ zqXVo)5mBuS+{rdSj;E0~K}xUq#zfGw#oS2+xQ;&4h)N}tG})wqiMxNGw8Vrkx7?4DKHe#jYi zKlQFSh`r$U^uc{F5_>ZKP?KGdq@qLfi!A(%_p#V&=HwTwPf%aGMsQ)ntX~WR)-!|3 zGt^;2WLu6fqq$|$PyW6!et%?Ek)>s%^q~sHL+J!)ir8t5YyLci1_9X4xr{`Ns=6{mdroA<7 zU8E_^W&dMBjIqefLf>5u$P_mm)ohZ+n(+H@!`;LtXSBpnF z9k!HU0j*f%bZ~ol_p>_hL7U$@8!P3z^!=}uMsTiSeKl~0+=3esX%BwXZBW|my&u4a zG2#BSY&kvT=FN^kp=O|fq~B;T8Kne(Q1;7vE405@!n{vuJXy)0cZpaXG*jFYewI(j zF~{3{iSEnQ%!mJfdqEF+Yt{7PRg}SSSK=D%`ELUyT)JzN?Zs;w+*i0Tuc> zHj(Qq%qZ;mr7-W?;?yTE8#;_@diQ@^X|FLT^+Zv#i8j$aMedtFrFW0ju}V}WXfHoH zVhGw$cZuSh5a6b=J8h>DIgwtMYq^wZ5_{2m+dUbVa)|8|h|lXPGLS+@STXmXsf0H7 z?ML;rdLO=vDiBBXUDzM2;sdJ@jZUPi5{#%1E-E6_Ma<{r_)JfI&9W=i#NSDtlVpdL zha^zlyu>P;G;4HWZxDgpx>QvD$!f(s5sS?TPhc{X5_7qFs`#l~KJD!rsHVa18-D-V zE6i(9r1d*#`;xq@WRhVsX1Fe}WBGO`iIlK>}T# znSTRWg|=1k(c{6m;xjx2kfj1Mu(1&(%ayqg%ps42{a<0u3&ijAQ)VFT;M7v!_x;uz z@up|Ojhe4cZ*3zE5}n)V$rTUt1YVq|>^xK}yE@FS;_E&V@vnFzwD>~L`}tH4D);{%W0J9$z|A`m1%#T-iEa`F?BgRBCZ4Ka{%{>C7=f zCF(>_KZ02eaW}eOC)<5n*Pr;NDlkz(D8HovvWqIy&hy=WbM&qM3Kn{`?ot3jXL~h^ z8@+qyhYCi6lC`A+TSGV36zLO7=&XfObUl)nZX0pA;mm|Q{;nrj8{jT3QP5ipD_kDO zm%Qv$o>wBxP+Gg8mSr8k(tjB{#9qmJLxyIP)lmzL-^IVct*ZuxD=kY?ako9Cf*`+Z zAZ@Cwym($OE=h?yU3XW>`X|0fxKn^NPHG(h+QM&yO4($tmBR~oQn4u~E=)fvC`JG9 ziu-zL-rYa*&j=X7Y%0{Nx#})^3XUggU{5%<;db^{=D&>j=7&7nb~6zIr7N5!M6m5RqweK2dHp8y!!}Z z+6P6gmupNFg=sp(GQVW|c?WkRo6hH;QX(^plWcLz^RCFn=Ol*I-`b~qU^t{l zxsOU{GShZgf}7RQckQ!*9C$n-;mINPA785T0fu{$MUIe#C4oVM=lmKZqH3)(_cOT& zC}m%px%Ly5>{D_S+~!$6rXX<%D@s!)bX^vM9rG{jZaRmhQY?tI64R#O4c>mYumGgG zL^tDQbdG-tP15Hn@kTs~gVu))g;>7r{pP3C5>bV!m%C9OJYFvj&&cjharoF*sh#EX zOwFUY_%Y!X=8mN2yZ_!DQ5tv^`X`BZ{fxjjR$SCt=MgEq4|4S7XlMA zudJZ1=hkN_2G>9IKg9}dET%7kzihU0uu!u-t=q$;e}-;jZ~QyKyZnHW3~Hs``Y zZ!}&l=H1c{l2&lNSNDs z!n?V#DQsrzu~kk%RZ;J-FGf#CdgtMw48)gIwJV#9#LF0u=<_EQ$&*$S1Y-=I;U*-0 zKd8WaT@7{^y6CX){>!ik@P)HI)1oM!)0b@<@kKic_eBW5j`s6hSijn(Jp8VwzlV75?b=LEkDC*_MmtknCvqbZxr@t zWy3;0Fz>BzX>JM7~xG@%2eK= z>Ssy7J!*T$U29tef!OWfqSYY5TU2n3;F6c483NblyW{opd^J?@Zz&sC+Y)^m1K+cxmPUP{>*I?8Q%xIcDH#@h{^5O2n)e+pFmXtN(h&7E5%1QE=NerxqVj;;V@F ztw2dP;G8$5={QNUBoG=-6*oGde8e|^4DT83Jhql0&$-A+}{MjVmo033a~j1C5mn60X)aogpRM`+JE!G?j4!rClamX{pl>V zZ_XdP30Xh3c~K~^v@MfYGMMu#s^*I*-Cgysg`i9YRsB-Zun1~aph|M1Wss{jR~V(F znsYKE5EAzom_UY6uxb$5F~DEl4e0)CQ=p{CZjcyROtBr(h5+VWudK@8HBhpp>Rw1! z#ZYp~5s2sP%R?k8qAQ%U&;g#kqwU;!K5<(*8-(xZzaPs~_6SS2MEZ>nfA*eQb~^u^ z=}nb4AS8!LsxK(d-uE3}=8KhB*LuJT2V7ZyBA1EnKbQ9=Dy>VyXn!^HDo%{v8_jN< zFu#hyf)_?`@kU~gJx+#H!TK53lrk&*-6}0%;KXPsKx8cxh%?MvfR;&b^#nKVo;LS!dR-Px6i8HS+y+H>nAtFI)&6ZSnA1 z*K_HZ+*vX1LE4!#`dh}8>WWC@P-2e5ei}c7#yOMu;S6^tK?CRn-=^n{LV>WCN+54% znset5>fOBWH7V;XA9K;E$a_We1dXA|EQFHKK z@4x(mxEMo@g--COSQ!|i8))J*#atBPP^7gW&LjPpX^fWVh^bsIBiK3qbQ(F;N-$5R znM1@}U+6);ew;1b&1+j;*nBW9t!HUNfhK`-%w=9QKD zvgCMYnI`-l)qWGjQ^Hi3WQMrElKEv~KTN$tCw=svH9aGM7ku~k7UXHj!h!;8n#MWT z=CJ?;+h0DazVB@EaR`ZYtKPcOcaIA})^}-^1VqPmu=FuFX3nz@BDt^*M3?7)`T%S6 zF*IxcSI^wRngkD|CnBPCU0cB75_F5#5%0_3@;mhoFglTygkoYnqA<;x;2vv_PCaeJa_H z^j6Dadx9OVa?(jQ;`>J+=+{a5bkCIYdCKXtVHRraF%9^Wd8|(V_ks6g6BVBI&($Mk zZ+eG}QoLjzT3=QX#6E+FmK%iIV6^&DHG9E!CHl9T6BEF?pOkX7Zg6}#&;Fh;8GgA#u3jWk2E1_u$(mNb{nFn zGc$ZvFg4!FGI9a z0rAM<5#+1(2ikhz0~a9I)KAwd=(nV_@@Ai8ry>%MbI=#@jePHk|My3t6!YnQemvUw z*>4*--b*kiw0mh9K_!W^cL$|^$E*7O+u#mWtJC+>l? zh(W@rz$xb7y4#M*NtT zF-?7|s($RZsHLW^yQKMaW{wsZGx&w>#8^PAhefMqJDAXeNgEgNS+~`02n$054~r__AFzY4G5!^}SxnT;oJiG^c=E5H1? z!-oA!L+6eC#X*(-mT{zW_Fk(dX%>Ab@z1movBzZLFtHr?e$#RdzW~Y477yBJ<{HO?VqYRkrx{zcM z@^5MB6mJD+H{cPF@1Cxc22g>A44q`Z6;#Ai_7yPZOl7zTYCYgAH#g()hRJW$z&;!a z=j~HQL(@R-T(J5dk6q3W^i}VC8(`nkW7!T8)^M;u6(+CeMisBRCD_5^{Pz7k6(Bf9 zB98LDJ!t~-C0L>mhetog-OkX@5zC(Axl1!Wj<*T`=Za*-q-7<5MNx5UNI zq#pC#t&;W<3u)FFour)^-d^WW*FxW56)I$?IruC*ejv27zJNGzlYlR=KIdBwn|C%; zg_rsgDN6C8B1u^}Ed!s*52@;q<9Pn~&8eo(L=?hBY1H0l5Sm))J)Kz;2F(ZlEbzC$ zViA-krMT2AaS*XTSA}<*w@ZzW7Z;UDANtbjrt1Lmr6-;FC2if|hhA5vPu8j=f(LMC*d}~BV%3J7dltNwUF>MIz?DiJ#;;x*P(sP z-W)TY9rfSR)$sC}5S-WEGk6p%c!?160NjY8wba)w7Co^Y*C;bM2QPR!yZ82)KQ+%-e`ff~jSu!Uy1Pp!bvZt3eL!qB?dZZQQLf_-S?PDs2+d7n zDo{`w1Q+ra}%l85mjP_-bl?e9tsqJP(8-_*By9Et)yosw6$Le==9 z@h>20{p?!KoPu95>wEowZQ%|CP}BNSU}vJZ2I;G=rr%Jz%8j|Bn!ID(b>B0L^+Qaw zd~LJJXwRgiFZ%IwX53$!=nMU%7nnr!oHt8@bM12)Hh?Oi?_>S>Ze2|mA8iP znc|rE&V*hIG`YfKLXY3m)F%i$k88swQ|C-}2wF$p@n^q_+FvV@)HO)1Mc#@|@VBq= zUM5OxgUznhx*$=i!UWMJ4?gnsnGGZ&V_N{MI^^s^ZJ%;Jz$5|_V94O(amwY&)GC(I@Su-0ig%YY1D1H#}(g`KUz+G zbFz!d?oV!4MTq`&%61-KL(!P;ljcn_o3xL}WZHe~Ml)5ULJC4%?s&Ybsfk$wRuZ$|F7Mi`Bt2#}*PfTuV!S_IV#Offj zrtb74l_J^NV}69m=q?gBNG|>JsR%(&;Zyk^xpw67e~bOXcPepi=igU~A_T>4G!*=H z{G!)ypZVTQ{@u?(dXo*5KcZooax?byT<&LpDZRK5ZOR>ad0t|EAWl2Upe=Gsjr=eR zn;Yz@#;3z%Gx|=S`ZD5-ojog=5_!Ljci^)uI+ctYX5VpXm6zO-5DM;4gx^)U^PJTI zo3r=7^wA_mLy^Ppkq!-guDbqy{pLaau_vv{*M`RgD2+5q0k9TE#Bs4wj1IhuK89U& zN2EpQX2k0avVa=r7IsYfwu6$i1W0q`{OoZ}&%LWucj!iH4&gKPdINmSb-=KA2ooFA zmI3%WgNY-Jcv)w;OX8=baz$tgjdY&PF1hbjb#KOinON&nkEL}LSXBd4^C1$Q$|S<; zyOot@zR?tac=*h&66FaRKA1=kFWJgy}rx;K{dQL83^#B?O{i8z>q$0s9IfJVZKPZAKM4b6X2!*tW0 z7nNl^4y7;1fO@`qVI53i->E7J9@?1<4-{-9rBnTkE}xjF&5^J5x9ypfei$GhVWUx! z9upFFRA0_ph)RiOOOA@V`pgA^w3}=h_#WoVeA&+YBsYMoC0jbEzmW;lbtE|W6z@)=u{tm^URN6$7NWe-DiaKlz z5VMB5X`5W^PMip`E5HYH=p+gOt|7nCMkZ2QWJB?~(?g+0aZ1&6l#C5fF|!9EP+deT zVSd}juEF{;WiS89bEYaOTquIZUEv?lO-CT1%wzM>zlN0m`WMb3h(tdQv2Y8xNxy{n zAJK&ymLAT4ILoE8Z7L}FEecoXC_4VuZWjQrw>K3__II9W>U%~7&=Hzy61$)0KD z!Y6gfH)KdP8n}pTH>JURLsNhzBlE2AM+5qQbtvm&V8E%c&sDm$4c9z7=Jh;Ee77Uo zoqoL#nlUbshp<)#ng2NX>p;+q!ytFq$QSnr{<^LZ=Q$cV;DV1|Pg&Cz)xb{kz4D}e zDYebx@jgr7i%LtA)JQH^$fw9~A_)xme2o%Xa$CLJ<>Tlyx6s0upD(=aT}rg2?f67 zia3ngtL@u}Rg$}=-}X2PSFIx_+C+|`@?eHgvf#KN6BK*uI!-m{UknryU3SEyncF5L zj3yDskx@DC{jb^MB?ZBX0Df%pBF7$DK+v%nBiW;CA{bJxkZ+1|hS2D8_rXhYPpw(f8uTltq*+@`~@DJ}+_Z&HtCe;t1 ziR?XY@ci$KVWdC@G#n1)(m6Nq6Gh<}kRNz{Ha2W5Rba|Nimss|Ya-{a{n;hVS=zaI z0&&Y0<8z-rR=K@AH@qPbI}5+u=5Y&_>a{9%tPLZU%^fx!F1 zul^@D2|XzEG!Qw?YkO9ecN_sD3Mmfc1)>Q8k+D9=rcoRef|oe$i1Q){TqCtzre3lk z{GGg6AwyMkZo?E&$LV^1FdngsELTE|0;(oo2|l~o?|%6v!Tvv;SeI3y!NwQVzJN(> z!S0ZS_b6ES>dlaYg!E9nn?c5=xTp%QBbA7bNSc`hm5e8bw;?uW+#&k$s6H`3{$!)V z=+d%0aRS6@5}?2WUBetGOzla9Iq{U-W6z**z^RJlJWbEpP~;1LTG@t=V$&->QJY5r z7Lf>@x-26JfBkvXfH0AOrW+;7G7z1lzTIlo@fH>zBK9TOS5*=~wC zOk==srwJ9>fCl6$hfMxjxcRTOF)AYlTbpqDjoK&_zj6F<87C0pzxBVwevgJ?P)*~^ zo(gPa-%?*mY`@&o5Ad@<91PhvPHf<{mQP2a)nNkoQz@LEr2=3&*QzySY!V4%K-!~d zqV35X+*ZMM;m6fUg(;f5h{yb_?ob1>Yor%f+bN-eJ7{FBH53(b<1?;TXfWDR(b_g)bNGv`v%_ze|QB;yB z*yiJQO^tu`Ww0F?ANvXAUOC*DjI;XDe)|gATNV)qY*eM+yaSXcg&`M|^$<_A4#y*J z8ne>$$irT6i!pR@0bZv+EaPRr8kx*#{>3)0bJ{wsGkkY?|E(I6ba-Upgpnsb6$}_5 z{>ba-^|!gVEc-+w^Hf`#3#MtI{oYMBWACuw8S#7#lws7icLwjiS}y(($oHbj;1UtO zt>?5rRI+*&VW!92?c9#S{K<^GE$4;cQ9i^MBjoGyP-SZ^y0m7hXBdrloL-CE4;Vl8 zN!o3x=JI&Y`cV}JQ%6*$fC9rFZ$-LmZm`-jGOU^63CQ!c3|3zHSf8ZFs<(rLj^8i; zT!tJPE|cGY@sDr<9_w!(uPFev4(e)ppCmxX4^sn3djy;*Q5oV1awR%a0u#vJp_kp? zjs6hk^&I)u!mTMN(R3Ojn5O!JnVS!&hyWbugV>A**=A4%}Q?r&I zt%xo^@6H2{9Q|;6?5jlH=XBkwZ3tTq)N}MeBYYd=)oAq-m(94>1WRs*3;NiLpOOg? zsALfPCf1|^wAxox4?X=}5cPfE(0hq3@k<`H0)Va!d3l?)MFw6`O3ltzpNM>}39F_%LOBP=xs0BarPf>{6Cv*jK7CM?3pAzz)FQw~}^x^4$jL_=vC98k17ZVBLfOUn~3`(XaeLp(YDlbai^qF7o#JGx!~_E--*= z3W>UFTjTQo79-ye%a&Co@}pzT>_UswBYNNv>IVkf1%Vn%)UPweYgOqkaA=p3wrlZQsee8m#1FKVN>}oGcB=!Qv4fzs!4iK6m`? z8FPZkjyum@XSFID71L6iU9qa~r z$bSyBoo46V-po+6Iu4}lpIECwo7Ry>STsM8&cwiImN2Z*<{ouJy-9T%2N?M;=Wdr zwxbB^Lw6S+zrS-vz!oWjdz0U0QxAA``_(SHG^vw)J^#_Z7u=-5br<0$418s2+_7hd z!m}v2+!lkm5&c2MoP(4K>e5fO)CTRRZT#&{Q0}*IzdvpHn+gDkvMr zNU{K2;l?IKIv$6AjguLKjCD6>HbnAG4qbb?Yxb9zYN0K6g{Xxjbp3^|*lO*aI4|+5 z`kMQ$qCiyT?`L$t&89uxoa64MC3*<0#EeDhUTeahl?qG2I7}Y5VAFD%vAGE}6NY>q zYSx+K)E+*05~}$3=;a9w>T6L_BeUEPxWtFS;VH#dzHn_rM*LwAZz#%kaka}n zL+n;Y3A>-Q9z`p!$8%n9jDDzV+XEFgHp^RLdC@-<_m%>^c$8dnb?V~ck|syRZ2J->cEhFCtMr1OL}d9)^wG^<8P*q`8%{K1ITBR zG?jS+ymh1|#Kn{mKCF#Opkgry0X%_E5jV?z+mgd{Qdqgw=a{qkJF540CKCk*)2}KpA=;}tWnXbS44uO090H$9 zX5BiayQ+%tcx5JGv6plBquH_Roqot%pVTarLoB(KWr zj}dWpw$YrsLW=PJaTR_UPS)-xlm1@(?VmE+m&(L7`CJgEq(6Hmq%t*yS*ccf#Yb$K zMn$l;*K{(nVdfzZ;@?Rrgfy}uABs22s>fKh$-L=}cx3PPQduHe}!TGnGv#Rp~ zuHrH#TCV${fgIOjPM9As4H`?NKs!l(rBZ}n8S4~rTKQMKnxlzCigEGxg8L5Yj=`@i zQ7Fxb|G^g~G~-s$z_VE+3ktsn1&L>3{{pH_U%Ydd!rfY&8H_^7$Nj2GeAm-y-6bS- ztJzE_{vjOO1$8nLS{Sv1LsGX^23Yo_YVo|t9)60#G@WtMzVHqn)XdlCY|Co)r&JLL zd1*UtZ2Qf)Df9-^KqOscQ2{K|Ma4hG8$S&laVLsTb4H@b)jKI(XlDM~AxxT`LRh>k zT&fujag+W`sH$Fbq(Mlr@LfXSu)YE4s4(L2P1RmMYw-9lpzYcK3df=#ItUCiQgTDR z1I^xiZ@(qzuAazdrOCQRdYE3+jFGaChY=rS>AdxgpX5WHuk}Fi6W9T4pv+Py(im0l z4;=%|ApUdOY|{4GGQb7U;?H6J0av}Eth0|q!mngE-@6~EFEUTBi{B5k`AGOA-4KuI znirwy5q`ie#!=zuIF9xRfJ4*teM<|2!1je94&w&masvORRxuyQ~m zIXYZbCG};S(}~;jVS+Ssqa{jzMs64(^ZaKcdShGfIF!FwRc0MTR+D|#Y#tIP!y<(l z36iIHh>pPIp(m?W0|OIZ_74Kw5SQFd3}YQsQ-(BO0^TkQ#Mw^x8osBJX z=)AAaq*W{^iT9P?IfY5Xz05qFwGZ0+_KUYE>}(gkgOOkBWfg>N|`F1Q(ZZ5euQiig4u*-f9`6e_!J zSJosak!FyT=xA}%Q~WFg5^o^i?xK|M4kUkaJO^-dBe_7mZqguiXNnPh(H5OGQutPd zBa@1i%!R$~2=r`e2mnt>o!+vyf{ObG{`V)S`*NDH5m64#3BKIE)M4B8zgDx!e; z_m!?xj9>bSXfEV}P2sNhy&3mgn0;XhNg}_yFBMayp>=v{r-c zI3Cc0@8B0PFmk%(xU8^p=uWHEo&}>9YgsD_{I^A@&PeXdgL2>!ieK0?NL$smu%9W= zil(zcWI5w$Ut`;Y@L-I0(_A`H{*Ke3YoC{`#QeY|)JAIQs3%r zf7M`c`1ntX$X2oG&fRn*^AD`p9iv(=+%*8cB>VE`JIL-kL61Fy`0V(@r{LjM1Ew7C zIyLNAPX{;3UoQCVYDyA1A+fv>Mbb<-_|z_{(t!`~s0=tg#vDJcU?Yz9Zja3j`dq_s z$Wo{KanlA=S$MssR7}1gk@)Ln+hy=QsDpkiU1V6OQD}-lW9I1nm~+3Ab&pc9@ooX6 zJ)()iBn)FwScHzkAA~Bb;3Nn&tqvZD0VgoAG~kp`Gb$T3hap6C_5IcwMnbOOTDvON zl-U;RYdL^wDAU0#_Eze3znpgQ+9-=`MCH^&jP_N>7!eLTyyL@@mTZmyc>#<~n0eXl zL~0qsKly_xBScd@GHP#Wli3=12FCn_ZLT^?wsK-;c0(E|%xu3zfZw^gCInBQVx%^Q z>LVzz%YEsR7oF(tp8Zdm=saNC+8GN-c^@uMh{~cb1CQtgpb12p{eEi77PhIa`AG|; zCS(S5=yu?&8XX?Y8w=-N#g5fiL@0rK)?je^(33hA6f;)9?CCA{rL%(@a}wX8D=EL&ZtPu`tyHzv4M-e%p8?))e&BVV<Ak!#J*@8S;>xqs3&;S>DP1>WVJ^2=hTMr85W@F9CJDkKD7LD!a3kLkqxm7D7??#y%iT7Af5dKiq1IT zxkr|QT=!r=O9kK0PSQ5~2fXK)w(R7@I!P@}gI9kCF2yC-jVHkff22a zo~f^G_YK*ssD}C|H}VNK^X1Lx9P+u}n!&gGfy$_-g5i}-*TYn5sd`VI$AU;){O3PQ zLI4fYK+@nF1aRa#HRt{zk4@Qu%Tn%=dsZbj5hjsYY z;~eXgpI`{5Ym1)oEx7Sk{HsHOW4+1rvs?oqL8O(glcQuSG* ztITMha!GTlQZi zEXPN0I{0Se`FGE4dw_2-F+}KUex?T!u$B95h+K6XPyFKt5byhixmi=Zoz#y3Hy)Q$ zYN1kCk=V$Qzg^H3wpj!uIbJ1tmU1B%Q@4sQO;KBnHrO@|7W`&^y)jJTS4aR;&k?`6 zKs+`|a0HtBM!-ntM=b14XhlZ-fZf)m^A|qzAu3B?xl9Yt`8FF)7boc+9ro<*}%}>oR<09vFb zu!;`SL%V(mM%?oG(K{uZuPMUggQ%$F)f2qi$+|+;(y$v))WLcte)_bazkw|diVD73 z$$!?H^6jfFzP~6=D|P1buN<2FQrDry^4sKRd4nXp1|7LIz);g zBgdwMu0KMtC0KsE=I_uJNL%$#Cwo5jW7&}l!V8T^iBuLj<3*od55;^`hONd=+&I-X z>Q^QM6e~GnUFj+~m}VdmjH!A!a0j&97_1*ZU+QF3F1BknATgWb{qL7RvK5Q~%gT>OK;5T?y;W2_TYBxNH?K|a@&n+Y zcVDzP@>K{Y*Mc59rA}109VCt*cVZxoJ98Di@RJ=iidg)vsP1 zAR@!TT?TGp|MXcLpnfHfR$F5tqNMWk`lV;Z%(mdzzu_rvY$8%I@>=3=8uhBY8gk_a zZO73)^#o>S45wC4-6G=Ro2I(38ZXm&XT?@CTQ>gJ&XWUbm}Ylb#>We>Zc|O-PEo{y zm@|&6`l9bwOV~7%xu%lTc2ywgX-@4+%R6eEv_$D`TI`OT0Zo*KgbefyLtiy66&-$%1J4RKxSw~3QprP19$(~#ebqKRqZa>pN z0SfE2E1YyKII1b4ewYyNdmh1%W6h`8lA0D0p7Q0L(w51qpgMlc8;nOVJ%l5y#YLwL zp7@>$=PNHQqe|qp#$nAS8L^UR{lck=UYE#t0UiA~AtqY+FX+@12So9MQ!$q8}4 zEcxJT&Q5J#?1PV(dq>^J@7y+Rd8D`3ZW}Va_7^=#lw1kM#^b{Kwu@;y;&8+2Bf~Ff zHqU@DxoT%oGBi&T-M$hliLywPYisJEZlkCUks@5&=4|~>FPrr1aAg_6>0u_Ch?ZMv zb72A6vO`2}!uh2!zIQkLCIW2wM;pMoZb!+Ryx?HKaw8Yn3~Y~1`sAc&r*sSNk;X9% z8iR?yzw=e#>xvuQ<===f(5mWGl|~-{7QZoji}Jgb_IWpxjyc!7NbW=G%!HU&-bmxb zrqrm&{asRjiC4jFXkIIP3b*b4{TO7C$JFNzKCdRq4Gv9%%kIKc#cZh3(4d<&B44nP zXQ!<#1@Cuo8d<+jC}3s>k%ItFoQl13LUra7Y=^m6Eum$}l?KcH5;)${+?rBWxq+{L zIfFCAXtVTF+&9?U9VCnA!0B`Eh(`kX$Q4N!6G9rqi4L4)t0|3}++}JWS@Z*XJ&P4L zf{j<0CzBa97%=G`K{P;VZ>D?HQh4U2Sokk8-$VDj%E6pgKBB)mB>vG;ymVFSK32L< z`G3qyzV8;&bER?a|L>wG><1)vl|6oXy{?uAXlUT@`qR2lxpb*^E`2k!ZP?YXyj#$v z6EM;5f|6tvZAAy~2j`mvZ`L`lX? zkT6XH`MDFabcenl;61|3_TWPnLTm2^;CG?r@?AF~P5h0a@I9wDnZDy%^V+-*k)YF> z;JGGPT5h}^j_=Snlkguz_aav%P#$QQAKF4RcnqG z0%JfugNhp{y>~CrA`_3_y+UM8DD~GHi(+@ILpPpmKxuzK-A@8OKyV9{M;!MU)^_yP zAK82@+o|B?ikkW)>7cB^#m73l`EvT?NAP zjp3XjNYX7n+o@x3RPYohuIB_7CPvveE4VH19?KE$vd>Tvz^Y@KPGN27#stkK#~XLl zKW&LxPQS-_Cmr^Iv;;5JZ>>jAAZ`}CCJB(Cx4b=$T}R<~0I7lQ4jdGE_lLxRPy*Q1i%^x9dNX@z^?VBpWH~k{*X*ik?K22C@ZM>$AETBO( zl7KEY#+yo)P3<#wC%yirS=H=%G>k&HuMth~#2&{aTy_H?qA4G~jLADU*mCQ#Be78e>YrIQ$7rNWP z;?Wdc16)6emdDWTn zKTtf>S;BsD+Ee(bTd2Am+nabc8WCj)Yv4rvkrlTqvUUy9KTc0OX=mIpwCL*He~n+oStAo+wS| zyn;b+(3lYf>nyM{dI(!iMd&QL-*J+Bd9=HdoD7}qbU`z2^T9q069O;qXYS%CN}FV8y4*E_-5f zp47y~Xrb7<%>Hr5(51wqPrkJ1`a zO@`ub)S!l>uly~^kaCTR8dQx%=L542Ho4r zkwtbn4_4)6ktEAUP9dL#$N~GJ3l%4Qs+snYq73*83j;8nlRp6R1x@AqJFxN@NC;+E z_Q+}3`rgKWCVpPx@q6!Guje9KapYH8n7QG@=sxj}Sypur01$-7XGq|26bly!WLu#Y zrf9DYE;s)|<>16)?;t{rBd&T52}nyo^OS{}px7q9vb2m#e|tzKm!VO&NIL8hHF!mJ zK@{abZ~yP|7nbcYb=7>)#VKjrE1%GLav3a!jDw#M3QqdjQ{prVuLm6aosKY7t4?}9 zH3TNo3nEjL_J0nn*^obX(l_U zux=%yX54zo9TmXwqy*CLn7e(3W>g{6(0jM^Th%M4$lv&cD|78vkz=q?pC0Lqh`#*3 z7uuvQ@okLkyO1hV1Gf5TMn>B>i{I5bf#Bpa%+Ec8|E~ooOp~ID2?c=N$@c)j?7)En zOuYH}y%h|ciWR{O{9nLqJ?Y?JrT zET=ZXBtErER9L=?TTQhqCvC#e@U`Due(UsH-MqA?+kD5b=BjFW$fGqd5;?Y==RiKo zH;PzB-Xa%737O|=N_Uq_DZf3w=YdYCNx4X95lK2qzp;3XsxHZtSz=3|mYerf`kGXV z+_2cmwpfP10-u453SUyq*5HkL2Q45;@CI|MBI`x_`9iw>)HmH^Z|BV>eeZA6;UC6- z4Yqi@XJ>Ae)n3lqTR&thu-T`KnD&3zprg5g;s)tJ|jQk);}Lo3T?JcACrzWx9}68g~eExy8luCOc+0_ zgCpQ2t;=!{8Q0E{E_@za7v2RnEfvUZQcl7>9Dm#$Dv|T?OGtaD&1%qntz0MSubdZ) zcPNiGmD;m|z`5Let*6eIypY*Sukjzoi3E;Qt(?FfaP0Bn)s_cC4s^iHfYEbK6Mg35A`O8UEMDCWLcJvt&-3r z(uzH)$rN#k=u$xIuXUq-SGXF*OUrkXjyF>=1!u7}iU=-78P>{rhbIbGWle+hJCsuO z?>9djilg6)k-?v`JF%7R#3ur6&qJAKyBd)$X_|9ug|a1cL*?y$RMzE zB{#bd9Yi(rdrV)}@Ek{?lX^tnlzU*DNW;DaPr^_eNMb!kvhmLru8XRUdf$^D@KOD!F|8IVqatkGP=$&9*jHx#HktmBCi!g_Q=au=CNkAp*l2hC z%j>>&S}5t#t;g>2ZV=)TTB1tmzIRKW31~$gHC%$k@%rM zeSLy48xi|WwqUsT?&v#{*{HsA_K$?`?{5e#Lr&;(~|LVS$a?VwUxmy zg}icYw1<3#`S--#P7W>}&PS9_v}48o%+fi>5iNgEX}YD7rGe?IYK|L&PfV=RzfwH$ zpm5s$2Fx+HA#Byx(3r!gWNzbKm(zk_ zcj-qWxKi0+5Lqy2?CeokJbC4(Oqh|vm0)4It?lXZZBx!5?*QxfbO-GfZyt!;b9q)w zi8=8%e#@tC0J`-`Wvpb8(#^j)ck%*S*{2hPdyjZV&h>_mf?R4&`qpDF*N4cy$Y-D> zKfh9Xb03i+W!xxoL7QLLg{O@6<(E<>Z2eX<`D(bmm&sN2Uf%&RzrHu{YDW0H;GZrE zwcULXQPRemY0nFqRl&yd=`!|Pw*iroeT@86@>(z#GXLebtT`AM?DhMNR)_g}R3$*C z_i*sYC>2P$|0Q}sHHrgS@lhv$n>kK%rH#G+#HY%pzQ8l`Ma+PCQFfbmiY7!1f+G#J zA;=u!bZXl%-wbLt4G}Y!R?II{eT&FL(A=y|QOEd~2qKiTxMBmd?LJ$-88#LmXA=Np zAj>>seWV=4|00(vuQP1Pn(e%8JODPx{-g=Tt(&kN?^b`otCB5LC_Jb{3hu-G;q|sP zn{w<1gW)GrQ57+B~eqf|GbX_?(SZ^uP!Wj z$AKtO^3w?Qi}bxlZLee*wXk_+mo}<4Q#nknD?TqgImBA#YaQ($vG_-zHRTLXMq+8E zg=x=rDdMaC)A*cE0aSnQX=I$=1p71Ji;9L zFA80L14om0jJwxG@oD(GUyPmgu@U+&Z@r(J@TI!r!Lm6@UWCHOyFy!DsKfitb%(gu z>MBJ$N%Xq@!MTb{bD#b#?tc;gu`n%l?o~Qa_?hxp@Be6e%Ydl9?|b;pFu(vJGqmI| zbO?xa$PhzHBOuZt-60?`q@=VUof0A-B_Ji8l2W2{ijqn*&wQT$@B8Y$-S^yc?pb^7 zwb$MZYS8toio|F>JuN?&cGRQS_UuV(bp3NIHco_6FSXMLtyDICY$}QA9GM)MEb>M8 zcx^waiS-oq{9*UV;M^a+rTDw;#h3_-AL&@@hE2 z_U+uGT@LafCdqh4IKSrA*wqgKCzZ`a0X#a)hY!ETWw-~-xRN>904zE5;WuE2$g9Zz z?Q#oIS7mC@CGOfGw@}M$R8Dk(Vmv22TGg%(Ih)6N)FXTTnc6TR|J!ePeUMV*JqCMPG|>Sh%+S(-PW$^VHQc;#1gn{SYi`@-qIBC^nU z6R9HZ=b)0y4^tvW4386F%WOJ4hi~+qsN@f zJBFPV$@Z((cxxM-oS(O5i<#1GPm={K<`{f#yF;TX7okNge21`bo3ggzOpeQ+EoBZr z#ueOHbkWuMS;3Y3j+I?qAuMWFP2Yya#84MzDntke^-Lk$PWmsniCwtm`hb^QQ@an{1IwM_sSdgy zS2NBW3=iHL%;l3bq?#)lLsvbwHwDI{rp6$0CU#X1#nd0oK`e4(Bre)H03yK;(jajG zZp?*=Bb=@<&@jl$aPzITOK_RD7|-Y!x7ifmkG#m!Cj~c}YE~%sLu_SzZa2<+ z!su^qmbHFe{|!=@DHS|>tpa{7J2^>Km*kjseIxLB3>PCqqUhmdKiNB<%}cy-|3O(Q zew?T8c(2j;2DaY< zwUZv?@1#@7#WlqO=BF2O-?Yt-<%{U=NJ(CN%0G;#sz@LSrAr2BURiD-#bl{}7g8V9 zo<#2KG>{d(uV`gmBnijAi)o9R8l-$DOMiL$s3#d!HDyc4fBS0licyO66aAJRS7C5wwFE(wWRJVWx_yX*3al4Y8XpK1NwV zD{s4eZB9sPVM6}JsU^vMjHr(!L=+7yCI&exx()tPaBWSK;+Y$dGBf0-pOX{~>He;G z*S8UrGKao1PX(t7+_#?A@2Xt3{dV@@QtH{siTJMG;#|O}^*ff37_8NafVOVS-Uq|Y zARQr|vBzf`Zo{pynYPUkYE`Na63YG_LZHDo{oA>>z{bGdjG^lj2x2_(s0ap(YEtqX zgsk9w)OkGv_SuB_F_}e;}jj?fs=Sl?uf z>3(huWi%J;@)e)O>j=&+H6@hY(G5i)hgIjBB98m+sd>ob8yc0({O#m;Z}L2N=gs%0 z%5S#p)y_j&l)@y2|4IZT6QRsXjyu0X5V8i})q&Vsr~ol2bBtEQef~N?auxB0mo0)f z)+KCvw@$s*a(BjfPPOSnN>@|>zVGl5**;{DcbeW&)SWk61tRDMH+8?lBW`pgAls35Vpmf9uL^g+vio~Bnh z)gU(E=(8)zo$zAH?v&&eWj-x%xH8JW708Dk-^{;NXALuZj%ZhD2J_Q#Ziq?Zg5=HZ z6Qqg8XnvK7b6nH2XxlFwIyxKB+BmL&77AeRd}>7UEZUwWoe%U6aZN`pXPtqQ$S(a)K+O={ z24E3#<%wTnj_0_oEjj*Oblg0LcH4Hk^&I1KF+?9{%mapjqbf~f|GD4j-N^P5JTru% zl*T$cmi>Mnzeu+`;;U6Te`}dtMXokTz8c~jT%21oPyvOp7tZFWM&iB%jd!qH*eyHKv zfrKqiKKFd=b!k(X?V2et7kS}7MxSl8(da>_Z%>c?mpnzsSn=s1m;xTwIKns%j_b`= zy;y$jd3)7)NHY0XNYZRdduUxB;y%hyskX7wPv0XQC$u=CROyeT(mOQf0Ct(pC@_?n zQwDlX^@>1Ie3a08918!!+&lc~HE)(?YQigN8#Um0PEm&0@7y)O(> z={&@-Ctdn+uK$tLq`>C$79vz7v;O3PASWP+ZlXf=u_V-e^pfc^CLtwRLfIq;qcYc$ zh{fOgi-Y~D$MWZ#j@XQ+wc{*|B~A{6y(N-1J<30!J$GER0$3@r{ykW`NIBJfbtzj0 z>|$a_;A|WArk?RH;Qkv+4n~dGqd_}&R9>NU!LL|1r3=S1eN5SeXxe#Bm-y*9fDsta z?HLEq_u%t2qavUPAi=fqK*=@BhkygFl5|!V9`Ho#=A4$;nDue9Rt z(F%zJj;CN$i`eagopJ~;#@Kl4OcHScOqzL-5|$x6rJ{cZ@0P5nfa-nGWso+^M=EtPX}n z&o)z{afDN~`IADLw*Y0>uQVC~R)8o(n%gxabpp)}tcI1PdMLAp1})_2s+%_p^AE8x za3Asd$*7iagLE`2X<$SCV<%^uvT-0iHmIvAd}Et>u&f7VkUAUbkw(#rMox9d~A z>=1Rf3=XwNH`{)L!kno%EL)YRNf5V-n_tzaKb4Y5432Z4YQHC}B~#>q1dTB8XaJt0 zmR~Y(rvkFyo59Qp%sitR>wMRo*f!VP1;O~U>@)YHcos@FVu(XWc)-V2Eo;AG^R5#^ z9t#uc{tmgCOnmK)(ucw>=a{LDvRY3YFv{u{yAVwVTi5P5ckT->3Cp$UXeTSv8`$3R zKNnnJftoCF&i&5AKeFBO7QuQNDV`RNr4ogP_&R*ft%Q{mU-GRdTOGhjp5*W5gg`2x zyYYaw)$Fr3V3i~PUuNq_3ZPbRFyypC%Qh%o+Q;my)wzf?C3T#mzm*=lDzmm(5Q}+( z8&*w}Ca2xd)Q7JPv4espxcT=(Ds~^W?!IXQ<;SjbJj$SqQPEz{JG%oy=%oB`JCD+M z{QKhkPNi)L_m{bn6Z+2N1Qp)R!Eu_);{e}}w(mZE%k$vZqqgJPM={zxv(iqsh`bFOITXt7<^72Iymga*gxB3&K^k4wq zzxgu#@Q0_yB8RNup(vDMihMzaCoEL|>GM=* zmtHagt7e*w;5e>#xPY{m_C*@F(e(^2*9~%vjy=8SHWgMK zE2eK6FUH;Q?xQq1fM&cDf-WXnEg-@qv!ypNC&1|@=AfU*E%gam_R{r5-DRFPx}@9o zfLn`bTX71>BmvJ%AGy1cI%!B*P^J$kN^CytIT6=+`dmHAz@^lIYm$v!nVa_;ui~~Q z9qyLguI(Cm3=m^{_Hb9HZb9>fllB>3y0i?~{=Jk=S=W+_cE*y+0zLM6{e`=aJ{q-- zo2SA9-dp}_TId7?BOVxX$gS{;9Fh|uedA++=q?V?EsenbBYzA~`%#5{vg3FdhJJ2j z{*qE2(25Zpo2rj+FwkW|?D8hpy;H=vAPx82Lb(lTVK{iPe3t?vKizm7rvVs5{TZbH zzj$ilJWKaXC(?*%dAyl^{GF9%adSLLoR%pP%e{2sDT`$SA;B^Wy7hk6zhYO3%huqz zcu&?fh-?Bo>%_L}YC?vm$r%B3#G*HlHc8bxz>et)F?Q}Q#zCxoRJPE#ZUdpFM47m; zS|@ojZ)t6RWeyS_a|Q%KH81&;f!Oi&x)+(adH~n>vSB)~!l`A~LSh5)9`gQ5-SFkZ zC#8qE<=JJ*fEkE4Uc>b|V<}Ixg^oRx=VkF1ilR>YJ0+9=;~@;+vnU);^b^^X4<^^N zHOHonv(X9Z^y08!=7HCz*%%UEh*LyA*;lq9H2Vm@ImaCyog{su7h4?_ZsPO5#O$ z1+6AXKBpmUzISvFmbY77OcmYJDz*gE_zE2>`zKlvH1f%2>}rYAiJMsa^K@>JhFBf| z3svc3WM$w0c)xCjeZny)U1?@OLl#)1& zq-g799g}zLy5nzdXj4htNu8Xpf>O7A@*)3rSJ0@?o3{-xYTNZk$R~XkK&{eG(0^T< z84qH*FxkVt==kSUe`ELPp;OF~F3aj6mM4|l=xJvO4etNM8FU9;SDvCOzB3W6zMdy3 zdaUK#GRc6DzC#|oe}W@T!el?E{YOMySoT_}^FJ+p_)7jgWX|jtdD;D84j`kuvhOZ4 zrehfNbUzB|HJR%?^sb328+-lgF=FLq2d7i{5vl)^C9IJOH&O3A``=xcY|Yz~mxVt& ztC@hSaevJfRK?pHtf7gV-#@Acd(&GcokYhc74&wibG7eN#%lcj)z|m8A24=`L8?xX zw3UrM!cU}xa2#lkx-u|@_hN{uF*M07A?p~|80YvrIrBcvCBcZM^?!k>supzTM(5dY zOHcIQi@ng>a?cjMEoQ_2!pzAnxsrg>d%7E~=TFWBEj-lO0ZARN)m4Aq3D&%L%z#D6 zWsX=RGJsKHfU(Q-2P0FhqPj+To?UpQU_q!_OEvuC0=pG!565Vgis`D^y>^gyf&6DH zaP8vhW>5x>U`#eXm4srttAfx#Yu$JWyVEeUTJGO=np*#9l@%#ND}g_KJp88gpJ%?c_QqTF$nRm}RYT@^Ii9D0wg6@a z*!d_49{!SO%lacjVfjnVjd8@z)9)#y4x+vj&RqDIQV~XQOb5DGj{l8Lqo*R_3KS)@ zK_>9u<)R12ghIP4rXd#J@aG{b$4~7FSvD$!0XBp&emyYOZ;*T0QkJ?EycMoxDzX{O z+FgD$MINnwZ_ec3Gn3=Dq%M~l4hXAoZC z$_2A;F*xBdX7~h{{RNo_V_^Uf*t?Q=oqCFvJ1?X7tn$~YOwx7h$f41(3>S!Pf4Spw zuU4s=`_uj*R!H0HS|<0Q?B!(D%V`ZA?uVS|5KP!CuYPF2M@)nMykaGocgf1UdYCS>#u|N zU$UVvU*AfmPa9_u$gT3f^|b%f-KT4torZV(SjW>Z`Wri~BUw zLeQ={v|H|#C`g=9CfCnCKkmLmbIMJRY*n~->lt+r(|p6nuFarI`{>FjDngf6M>Ay$ z+NYF=_JZkqrPa-_e(he%`1vG#HMO2h>E-N$$}6WK?I?1TH%te#k_-U_ll9=l$!e$e zLXFgKrG1qZQxVR>Zi^v{(^gCamBzbEe%7;w3Pn2#f;bqg`tBqp?mv_+j1L;DpD1lM zthNNZOQtMxRmlBOkEZOnE5sgy@0NPvb^6EP+T`+sbwgM!ZXZO*qN~|Kj0sV`8-hj| z;v}I4zq32I=^f?zD@d(bB!9zwIfXDgNi#%uJ>N@mn~8G!A7s3If)6l3xrP_6S?)7A zz*a84(6g$1^wzY#RApoHA2rqcoqd*f6z|s`&Hpz>e8rN*{Pl&G6FBMlqeQd5|FFS( za!ebEN$gAM08$FfG#q_if`9iuV5wzXq?>3`8UEAZMg7_dyo|?XKH=czr*ru<{Ud;) zRP+rwkVhi9?Ql}1Q>^hcx7WMz;HsmlT91xCD6O?pEle{uf%!bNiXB9wXn7u^r6~3( z2C7V6>X&@L&vK8g^kz``xl1|_#aciQus;(is#HCRy)Q_A0`+i~FRnL5C)c|CoL@)zpu&60Gvr?IDj}J%$8RX`YtPD1K{jC zpbl0KVxo}d{ETbvFqkILWXJnEqkfPtEt!kwvsM#yB4+2~@`v<(fBEhUw~#BNv=|P= z>-}NI*K)FFO=`{Jq<1NikNk$z-z5{|2+rL@cXqZiin3oj$?RJ`y&}?rTE684X5V70 z4{}AuB>fgfx;eugF*Z6(L6p@ctL7{q&M4IR(>t3(p%>cG9^5i)KT3RPozVgR(*igd z!ojCtoW<>`@YuTUcq7Lm9Miax-R=(uakXZaHs{;U34)B`VLE_|RhlduMElcIT~x9Z zy(?5sf(Y}A|anmWKO z$SJA4G@@>>EUp&*(J`)TlD52%>F%mc#g<9#T<4=`&i{Tz$bzl^WBNMxxIjsMn~&o$ zv4OY)X=0C7UAg*+vzIeYt7a{Eb{Wd+8XQ;s(yE1tGe~n#Qevzx$Zu=Twnz`>+?l8? z`v{z@z{w~`&(|Gc`?=c+QBO_nAiDH#ory+X)w72&7q-4&&Mw=wcQ$vnkdE*EOyfhA zGgB<27q>!}gH%Bvrh7r?K0gAEJ&|P3i96-~omaLWcxy)Y&RXXhG(HU~Z8z2=Y?G{3 z5TVq1?PMv+0CJ2YI0@+e{aNu;F@LiO-qBZK_btJ3a*lUBi!+dkge&`U=|OF^wk+{} ztLBYgomZvuH?0kX{LZ!I3iQ>W*2O%3Hy^xsXHE3|@|I%sOZu|L_1oVq&wX+aYD}XMI{UzZpss;F=QSyMa;aur~2J8x--OG~XHm_PC{gR+MKtJY_W?rZN65)bC=&hG1ts|D1N zCD{=}_U+Mhz5HeQ?dRd46zVU9q@2f=;6KNI{tk^Jjb$9|ANVGP5Fh)J({P7&*W2 z-iy`7UYCRn|AqdtCYaXAkHdl3e(uiyia}$9(uh-VGX0wuQWc@{GJ@n5sPp{mqgxWQ zB#{!f7dIiVUs?5KXs->q75q02@u^nBzJ@RiEcD_fj*6eXe48JWz?2e7LwNH<<;zj_ z1CR=&nFuA1(7++C7IcPHcnYSvOwTP}ui7(Za?d|^!Y)ihKuq3VhH}b{>r>)49?oD* zY?`TUG(_U4n9wLipzLlS&UgK7A()w$93^aNF7kcDu>#iBl%7gA{CjDht(zra_&s6Q z?MZ(ABnjZ=pO^wmTA-j0QQpMhE&QFT%h2;r3C#%48=5U<&TV8mik>J=I%AG?@86b_ zX1B+sf?@ww(F`CJj9tT+el_iSW;Gf^1p85>ZeKre9ks;Cxe|jbp@I$W#fY{qF>5TO zX%0@Z9BhX?>J8es$jCiUG|zwSjwhlVD;W~g=}RSp*w!5Tr$`U%g(zaqN%=IA+4>QZ zK&5xpeVUd*tU%23jsC9!Z44mi(8k@fpNCO{;|j#7q=S_zC<=9pQh<&uKzrlb1I)H5 z*acHjoPi+jt$DCeU?6@3pov{hC~olN(*`{LV;K|tBaQZjW#hxcQx&D@!R%lCMgFn9(OOMEPBvmy zz4+sRN&Z2i9t`$e=htm0Sucl**>Ua34~K&E+SLz2vX&%OsSm~s7VDQBo69zbeoU=u zP2P9xe5rfBjt66Tk?vsmc|=6p@&9Ky?!Bx8Y2Py%y}pw*CAz$ggGb21QoJ??jANpdz;f$>(TS)Y? zPaf+JEe+dXpX9bC%30F49}sIJRQTE#%)5NU*h`*1x}B?a>~aZ28#ht@7Jm1&v5SL+ zW|cD+37I6ICakm*f@2h7QdwR{F|o6DJ^WH(GFj`so2o0Tdhlw&MUM#88(a64u0->O zGrHsNH=2TzJ;PVGY^{$LiN%K$ae-stV1&WrGae|)TT%TnV9`C9%J}VHTl+7efyQZS zb80OYu*T-%KT5}SePw#h#A&!i&wyd)dvtUxfP9pZ8%XZrYq>5}zm0YSE(UWwGeaU- z&&Wk)i4zZ0x#sj|2y6bDjCq!{z5^GWWX&m3VmJivqsh6Z`E@dhP`Cj`xCuvS#GnXmoEa9XFImCswz~v zURN4S{5W0y*Hl&PNTI7;@)CC!jMfvOh#Ay5fD=~@k+;ne0-x_Va>Ym_+iaY(DCPUP z5F51+fRYHWEzQp;{c;AJCJ@kCrl*F8fslqgj;CD!X(mAue`o6kgMXAiiG{- zSgzA%Fv5Sd{#G%eQB&9Jvx($3W8;O)@1Kae%ua^#%g`O_aL?|4PYm%3qYpa=K}fkf zsdtsFq%~V*MTvFkabmnX%ut$#)tR#+=p817|G+w=7n!1u5Ri})T>&W z%ZnBnz6(;md&@dR7R^|=&cxqI(1c6Ev{Z@3LIM6hs;Lv&A!zeO7Vz=?^)WHwOc@XH zq&*&rr_MlKyi?!2&!Ks7WzX^+_5cE4{ayej@Ik8OD409K!=47r1v(ujEqERBC?Rwv zBDS%jqF=LF%5#F{n<6phR6*f)MW=kf*1cfrKLpKdcQluugKMb+>%}r214YW8HO24e zdPjq`DdL!=TEo)`{ zFJNG4iQ42a@xLV^%YJslA>HM|{c@`9@26!CihInBuzOe?uXcAtVDIIV>_Dwm!#uG( z3eP_cKl(^Ql~f7qR9|0ZDJysuHs8iM5@U<)qKSdc2(K8rIjoVnWyi*mvUMGk*5 zJpJ*5+ACYvCm+F}ei}?D1^WhlJ$K%6P$?AY*s?F7>7liKj$`Y%IX*dq3&xnq&TgD) z5_CDKe|E$_?H3v{a>xX#AoOlU+^T$mi|0y~@Z%Ft8ExCLT+<8N;d3_EAJ57;1Td0q!JArCzNW+#TS&OLoi zt-Un!&t|r#aS%IzkQBt$?^l;f(BkmK4*dJvW2A}-5fz}}(!7CX0c4&)VYg!+w2c0> zNZc~H;9Z2wV10g2w3AAU#$$w4N`h5De;r_rdzKp!-<5D87D8xO-Yx7VelR0XjzNN@ z{yq}#8dpzmGh^225vjZlAgvhooHD}Ng|9Zq&MT}ehFJD276-#1W40dM$nCczY}G*4}! z7N3$xvaJ5hUd|!?#`*Gpv5(PMhNNAXj)7Q)VB74JcvFP}`@Z>COBG)dsAZwdYJppi z9{oxq*ES`9Utf}j?KT#j(3}c008iLd7*?A63W3;|YCQKSyDC=RQ|0u&JDuX|rA2tOjvc^Er>Cs3z)k+Z8i`jR~5I`A~{sC#Txv1kBn-}T& zCJB5NY~=Ju1DFkS!v||0mQY@3M)uSWl;}~HNi9~db@zeWr*L@(QPV{>Oq!+3hN9$d zaMf4}`4@dw`6acB2CD9|Nm9n^!Fna`G|%HSOy0XzrCeE>U#oLkbDiCmx+-@+7(H1g z1EE$1L>#^i_m6a|TeA&9k$nkwf6$-FCy2XxM8uNmG0?ZeLuh}}hU2Pl#>F)%T}9h< zP-AKADEBvx)7t2~NAV~^4^*6i%&Yls zSLefLYi5+UoM&WT3ayZdWncRL93g{}hELX7^tAv6A%%Rfgz1aJHnklZ{zMqCXjH%Y zkn%QhbpqSUHE@OF-@E+Mfa|@QcV6I#AM${<`TNt@F${iQAbsOPn*9f19BUc&`%vSd znDB5)k)qa#pe`k%;x5Y4mtowPEW~eCdtQd(OIKKPu|btSGptBdrh0^eXL}{7VIKEZz)eG|t(h@7D~urvqm*2lLrH)G z2uASEIhNf2&&!`)j%}<8lv!jtBtIyK3LcuLA@+UMBTX;^qTdQhM-?#KN_HO4;&4i=7^ zx+a9b)8p90C^NFqEE#xL_I`a@7_?C=70@woa!V&15C%kFTb-B~Lhfi_lml>5SzQZb z4$y={do?kpyc0KRj6-_1I}W7IRqGYM!-ApD>9w5fdu`B%#GCw<;ELIp-(qQEm^)E_ z2d&-J!$+N`j!Cqls->Q1Gm@C;2dnrE$PaSUd;rz7i4-2=8y?RKWnopAAv;*j0;Y^fsXyD!!N-g9L+=iV}*39=kryql&y%E)2 zeF+QijqRo#2xs6;Jl`?>4lgNc*gmK1iRd_=jtaU3QAKf=L(L%p``5f|Qcou2bCz9E zo@MYmyL<4;|Gl6PsGR#+P4kl~r`Qc_9&&dkJg8ved)=3qd{_4z0wV79m8cjJkv15~ zQj?=NC=1{VKd$TKydLYs`<(@{$z7oyJ97Hd>l27%`T4v-8wtxc_Yf2feHf z#Q~8w`*mk6&)l+}&ze8KT`cZAt^D`#ij=uBQ!*vvK6ke%h(ue4_Ok}BX1?v1dGatW zhD2UoGd_n+qWuq7h_T_Xu@>_{VlMs}k@=)Z>lt}o;Y3r{WVpjUQHRmTnY^Mhx#h)^ z38G?}sMQ}e6n@t-WiGjC-623X3z@HIh~qnlLp?q0scFoqpOOK!>f~ST@qsTsbLb#3 z&fEFx^r#gHMa<$8cKHo#Viq~o#oCD3%UJg}8UV@48?~P3XtaN(W-OCk96 z34F_=s#ML0y|=tS-&2Se>Kx~l7kIQu#eW@zg5d=$q<*Ihif&wStX446;Mp8y$ImPx zgpN)c=|p7`qTieHm}lnCnNHbIXsF6Pqhz_CFStcXDxZssc#>UHXDyL6e<0uF@|+I- ztqbWVzx606u<YM76LJ1s{UYJ4m}$AN{X@sqUHYhB4u&s@ z%hmfIXuU(F$tTkckO75DMWJ0W3HdOtvX`1yqjK}RDcF*@d}_4kW!s+=jo0J2lq}9B z315CCNnEp=Xe+t)(U_^E+5?uoZkGhlZu{oqae11F^qT|4GVIb%LcXoQPJhbvk}($L z7CyFD(Ns}J@UgJNX0S!0o!IJU7?@lHDT4kx7%kkzt@PyRV^)1RpN>BHXUAZ?q@T3c z1mXpwa~u?H5f6PXN^yUeE-6lcc+8gzkCL^c%3*{jzo)w*GPh&?Wt|WDPR~|yHV`et zdacl|0m0xm)N+sVoCPKSRG>qZSxRnAvLrP%lcXOxduL5UZFz+hf*JE)^-y9IvsmWY zbbAOstxl6UM6xL9?fGEv1^HjTByO2j6Thr`&zE#SSB7O*uP&mB&Nb68wE)?%YQ zMMTP?L30Uan;qtzhcFOMH$;X9LHSlhD3c)oXE0IDDpI*>+Ek&XZU<6+&2Kq_03-`N z=$`pa&8VhKvrmSLKY(jKd#IQLuJ-aFbu3KRj7j~diAoC9^D6L)l;!mG@#!6WcYz^< zeEj|;?4M(0a*u`3%={mNa-C>jhrn-T;bi;K=s@J(-j~~~ z16#}jePnp1kQ*qaKJEA`sFiTEF(tl*+TW$=XW&BK$uUF>hc|t$ zKJFdd6#zDqLIvjE4>&K+iY_KoUBgo;E|#OZYhLa_j8fV8T0}(OzK%B%T!9vOOpzrp z)c0DZsWonL(cIVDwyLLGUYN^7qJHM}X(3Vi6G4jFY1@p917a<2&1IED8)g&wIlc>O zdrt!@W!O+UGE4t>A`)&)mM{_CUOU>8&=Jiz&QNHQ$2|q(TT08+MWf#CUQ3wEqzewf|Zy8#PD ztQHcex3c!1^$4O@pHX{mtLr`f_t9xI!oTO4>reo3$P_I*-J3(KmR|k3Pxa2@oaZ5H zoOMw}z%!3yo%yDk!}}X4DgcBM#B-*~27F&H{)Wq0lC9+5cdcpA(t1kjWHhUU7K&J| zm&KEi0*m;HX1t06=T*>qBiK$BAMqQwbQ2D62u#Y#>j2Vf#|&ZJ`)cEw&vrG`(q0Jq z)V;GVPQ?+}U{}phax^|j+dfb7itXp2u{8XTP8gag9~PX`Ea;eg#n4^<(HNX)`CVB_ z`1!Z6g_&L1-f&3?IW}oEc}#iyWuceQ*6G8f=syk5WjqMQAMEKbb(w6J1@nl`Q-V7h zJAUxRtM4+iW0Gh`4V%TPqT%$uhs@d$;hk~(>6MSVkj>oWJyFus_t<&9(cINRs#NED z@^hbEoC)%WL0~Lg;ziDnZA$J-SsnLHB4@2%!YoMj_b9^r4(l?|F+5IdMexmPB*=x) z713QHZu;%x0{4IX-dPT?@~s+*;s*oM?2i+Bs95wBACepNaTBr7l2nOaXUU&kiyI4p zC7nYm#@B_T5KiTN)O8OYr4X!aG`&ZsTp#B>)-%dsz4J@wE_hK|XWZIqDxG@*HHm?S z^3xWE^+WONDc&wBMql5d8rKO$964(JNl63hLMe*S9?VEIce|A2!m1DIVpVb6RUE?e zYJ_=8kMErEDP&y_RpTdm;}^B5)m0HvB6*;akj%p+K7YFIKkM)y&+e3u>3cXZ$uGkS zQ-qY9^0Lr19Eu5garMnta3dc_aL$S+Ca_rGzS|xZ6xj6pf}wg>wh@P)iB7$K@C34< z?s3Da{Mhf#-;+tWtsVLI3372oyA$_^4tVg`R{g2_nwdhWF?}h6p~?=>2}*qWnVl3) zsvBELp!?SO@FASz#9WVy-t!f?WX{*G?yqs6zNzo#U}Y}&zNq8z{*_jcW5k8Tk5sy@ zaKN)iKH&k?CAsF-jE|N+J4S)MS6IF)fMZu8l!U$4m(5V__Gu=djq}3+tHqj@0xgTALr%n4AieLTk(TPiAc>>tZMHzQ2D83{F8QwXvVt9)h$a^4JN3&D0c>=N zms%gGyLd%kr70+^%IcrTO9nxKy&LH2FJWIIkoGMzIR<}Q2iz4#QW$+qmrnL4)BeVECZ`J_v;uKCe?4(82lqK^m13J}U3{%RS#o zVWn^aR0$oDTuFH38(-<8@%Ls7^t^!u{O;NQCRTO+z&MJANvKK0+}bCzIx}53 zk9j0D)Gy8WMfub*tLaTqwQQ7V5o7jJRov_!91MZQ>6+Z@28I%LB9RcCT(GM4APrcN z((+Y;S#p{EIg*jYAw0Ad+P@p3>OarkCHE%cNkfl8W@dDzR?MdC*Z0BTNA++iuWG4uP4Zyg@kqeDrbZrB z1w9!2a`;O7U(<%nLa$FZGxzwio=prTl^OozKclrSzgd{CjwKQqjuPyxkZepADnNUb zpb({M4ss?jCg1)9ZXXU6=pr3^;?l5k@jF2DRX!ATZNPAgn|G2o$y+q6Ku8;bDa0?7 zIZTPx(xBo{?7rKsxs>T_U2pf_d7FV)n8_1>GO-fA`OwP#;fkr4I6W#QUY(RuW<9?i zYnBoD-HDLcduG9;`lrzaB|}{*uL$Ivy}iVQjW3(hekq>Qd%nKBnK%Vl zS64_LA+u$d#f#Vj-kjzAYrr+%Y@PEplGA5Ks)Z<~`SGO8=vWtU#ZYmZY{jZ+5f&9( zHRtNC?Z%cS$l&3iU;)1hVCBIEM&ML)u>bvLhA8zGa z`Ffd$2ii4nT1FK)0@NM;=74C(DHCm;VxE^e;W(8;d10@KVjD3V z26x>JpqAt8Xl{tvBT9%6;5(k!&y@foE|DY5w+2nPnGzAHiWbIY?A|?3->Jn0hsOO2 z(7d{2jJPjog}PG;3+AVtyhz+Kj6D`+GrOD0Sz}7?@A)6fYl{GKHe%ZOK`I{KJCuwe z-FMI&+Bt7};N){sX#B8zZZHf2^hrZ3)M=Wz6iSP5&Q%>`G9<0!-Z~yQ!SVe+J8D)Z zhTa%rDuReYTnnHJF^BveC_l-S5qD)_AUOhtCNvJ0w0ar?=f=AODwsA#TP`jAQa#!s z`|7A62- z+*4JQ(-%>^We&|0dsQUp`tPrin);zcl87WX%WyVLmh7s3QLU`+roO=B^?vQ=&F2T# z-9cGIs90{+>vAWm4x zIXreKhCWsV*mjUYF#f2Bjndmh_xt=I0c4k$?}`E9o7VWFXVxrsCrm1e;`;oVIx~rIs}e=#U`_)*2Hpt1_JMpHe51~8`2E|>?e)x)2?5o8IGJ^4IfTPoAkzwq5IYnh|x=ZriXb!_lXmpk< z_l2qhVoxFMl?2)C?;Qe!%%}Dpv>u5O8dmNO#p6W-I|48WYBw2)7iyE6V$ho!n-c*{ zlwpyuyalJ2h)E+J=h7$Cw4xIvO8UKAKkBu99V^Q?@<5i}>}5Vw_;^i*QzwOf#H|$N z_?QTiS(6=eJ9_f7d6gxnc=n#pwLwPR*hynE9utENYt}P|lL02b#{ueCoM^Du7z(a9 zI>33Q*fAo3YZ)cEW~0g``kFWxOddFGT?!XcC3*%QRBDyuIWmn-B|^DE$4?_;k))fD z`6t8xQaY`sS03E;yvB~mPW4pC=Lz2YpO));IQf3)5f}{HG&>0h)-))$*?s~T&m4X+ zDZK_`l{%zk)mFr9H#C4^p=`xaKLIchm$?f@Hy8xxHs_E>9F*H=}Q-bjE82zn95-U5+w}OGbhvI zS|D=wi-UL}h81Cj)aPH_u9Y$gCTTze3K5ALho3L8thodOY1Lbdi!jG2x(R#xgQw%f zdc0x{!z4ec+g=kq6#}iDF27u-FXPZ9d0fzae9sV-J|y}PA1CvzNPesSNImy4Zqps| zBLT_X)##}1^d+7sF4h~tqBhmaEzwo}UXAaS#9E=__@4>Wcv~V ze?d5D0_Xq?M$yLU!PW$*YqbY>7-B8SehWxY%~F#4mh<*0IuD7kg@tc0;>geEGR_{m zf67VY-OoGjxWJkwYb$iEl>mg8^G4csGB!Wa9j5PH@P3+UGnkeM{ui-F1qXD2hguQR z%TlfEYBuu*8O<^dfIEEyo(0oJ)3%5-r+$Ps@qFq7?NbSs^ahI=F2Y_!!g9=_w&80o zH?r%NKfV7?JKqouOq?on1`fa5BM(7;H;>eIaF?gVP^9$nb8}d}tcG)%x@72MqIsULahU{6bcX2z+`t0(6>yC=k z9k{|G(i@chq5lc#eBmH%S`s`8>R?fTT7$aV?@*_su2$kY--^0vo6fs!njsa8IF-=9 zkvbWxkPv1*`)n@0@x*b3Oz>b|DV%9RLz%EgfdG*UY#3yRlt@!vAQvNXH$zF1dr!M++w;ElX{Vr(Y)hOW;COCR6Kbqk0i)&5j&8M1H zo~>N_xBm+c1VR`trdbZ>wch?#BkEXRoTZF*I}>?6mLn*)YgNb#Vz}Lz5!Ks@sQpkq ztx-w<0bZ!*b{8`WWMj$KV$Wn-f%pjR2<40sw6$5V$|pJWKzUN(jX;Hv+iiM)@jEf8 zE5=)?v#LnhX|Bzb&k<_`it$QG$VN_UmPB z)sZ~f`l;a3U^ESw2j%*nqs@sx!5i$*JbA(`Nh^As6?xiB%lK z??#;reoLY7hXFq1cTBs4!0x@gdCv_#?>V*z95Hw1W(BUvRK@|9WTOR=HGX}*D8SMs{!UT#w7LnjqmxmNL`iQ?f-W&BMtKzq}@6C18V4i%RkAQ;1Y0 zL^A~u5>Wba_P?EZ z_7pbCIAk#YTbmLn;9G9Yl|6i>B(5G}(Z)nW7#eC^_^;vO%qBuXb>_8blYQ}3?JIOb zpgpP*;hY`m+0z@Vk^eI9n~Ol!*y@K*nnW1Nl}W^o3NhkN-Sam+12ymj%MA!2sEfA; zx!{O>K0o1sFMXbFJ{09hC-NeqcP_Mp_G&!HRd}ct9#n>i8C){A%wgCCdj5y=V{ZtHhPmPOWnotCQW6uxEmUM4hQWG(#9?0rL!C{ ztYEdwW1OnrW+|y&D{rEtIg_k!S`_V#Eul?+XK}Rg=%^|Lpyut9<=L9WjT_>8Yx>a` z7f6@lW}ZT%bPQOLQ|7*Xn)oCOSwy=M6&KX&t zAyWx9I!q)z{6gM@-c~%u{vkH}%}n|ZrG|$f_#FqEk`N-GZ&UGj26h;hDQ;{)PtoT( z{YOCMmw>wd#u`75eEFTnu84d1>u=YLwdufwSOl!>nG7L?+PWah@`SaaV#1F0yFQvs zXnYdqlkoK_3RuBg&Zhu0eUk`XZfPwG;|gpJQwp6vv0Xb&(wNDs_F~e%R3OJUpDuAg zGG8bEz*zuzKS;in)2@t7oLy(iXryHC15LOlX6G{E;_%C-1Wk00_l#~acg)r`mozP` zhp`AcmDKksXh4^zlsO9R>FW!n}|K#nn5{Q(h_i3LHDE>KE&Ol^${|qzx#A z+ih#;Y}&^F|GCgfW1AOOvq3ek_k9mU;OB50I@u6Upr}CT!>>6KFz&6H8Z(S}-BIpv znp0e8+yUmUtRlnrS7(f5@A#KE3dlb&BP`}}x2q#mAi@O|_lIW;W6AcIg7${Kk$0hh zZsd;u7ggv}B>_5D76W;9Wx>J3d=<2qyWqCu^$e;sXDbrlg=H&u%3OZA=Aa;HBWEB- zuzvtijC;g15~8zTxgC9$F{p9Fz!qU3aAg>KIxY3F+qR=l8+(2qvI;4*z!Ex^>pu^I z=<+X3f9PmdbaMrV)v!kxl&Fra{4J4z+DXZpeg$}HV=p$aAXn+4386Z6YQ$lw)4~Ys z;gXi^MtQ!*9o^&=<8v;G()W@;u>Y5QQTSZj05jdEz|wG@yVW88K$e|X*HMvci4AsG zKtzKuLgH_ilvz$4AV-?6j+1lD>0jUM(UT-j4u!7P7hZZ8Fa8{dW^$9TWktUDBez*! zlo+2COG4j4aaW*3?ig`hSAUvA`gCTd?|03lp;;95$Kb`?2ez(k5xr*^_pGbSQ-myb zCTXyG@g0t$moYqenwLezM#9OCLt;0BTgF6Se0Ga#RD=vwG@9W_ILGQr@)e@5P3{$x z-rva9WeVWWFqoxl6B00^Ze;&gqKsdm1hX^jOEmM0c&)~M`d$n!R7{2N#kx)@rnjRz z(pB%85~abHCmVH63yG6N^pk(wd?GCl4g9GXoSXIGNF+wJtPPF*tl2@PJ?JOomA*40 zpX$9ZpPxTps(Fy%iX<5)K@Q6`E0~ewsixKYT64wbCZpR21uK_VR)+QLAr*%Sq2IT; zNgaBe|K=#aGAO8Wfv+QX># zd%c+;ViRJ7E~f_(50l(RL!i^`ig5#dck&adGVl%)JB__}hPv`qx*@AZv z_!A29UE{r11p(jFmiY0OGXBp#)?9AKg$WddKtIlq4tL=kOp8_k;7n2dXo~*Dk3wXF zZj|EqdPL6U%Wuf11@981LZSNWpXIWHoC;oR$kD}C5UFbr@Ea%q8i=}5TYuh$(yhOV zL$EliyPCSN7h{tYdmK|FxOHxA)?y3hjmX)V^Bpa+B8ZuOCJ4T9+VE_W_%r2dUt- zJYy;M)}z%~r*e!i-1lOi<#%9uN{w$gPcS(%Ns8h%l{LD}0)-sSiI|O0&AvMAx=4i6 zfAx#anVH|2S-F-rQ4KN|eQ$51Zn1Z-paWaL{q2h6*&*u*0;fPFy%)HMISD%(z1Nsb$X7L)NQ;5{Niyf~7JJ z@$_FmMAETDE9`p=4@cA+l~;+~2?)shyjPL; zGFWyA`f_->XleTpWPj4CMd}@hEfFQ9Cql5er6Sodd1gpN*VXdJXvTGO=$YcegW~1R z_&5Pt!#{RXc0l?1QClY;>f?$2Q19+oO0@{5M+d`QE5e2F3L>2ia|-80#;p^OXgp%sby zhw0~MBK&myt-ZGhi3vF_p&Eq)9%le__v^_|9yU2LJZ?xONg5T^Tu9Gk7b$`9;!N3UVOA9${h z*IEw{$0DAEaIzpxlRVk(d`RN_qg}1N;=mo`EiE`)e?%&A7KnZ|m2^wl*WZT6^hQ^o z&AlZmEEAJN6UFHRM__L!fQ3ItUbt%yZeI}vqv2~xT=5re z??EAi#$aCqua}S1eFv)96Nw>y7EuY3v?*sdSwt}Vh!?bPu_8at%9v6}9$8wRCw_H2 zIP=*)mlI^_%A(Kx$cR_Qn%_8hZ;y}1p+75fS#JurOHC&$Hi`4hfR?75`2o&A?lA?E zN|~tDj{`_$np8U=A$(L+BJvnqXo!?WUTapRp`vu^c7D1}1l`U5<(wmK{hHIQ<%xMxjYiW}?N{Ti2)yXd@9j35p|39cV4M%h$FnJ@XbrFEibn?raqqb<(s0eSqPDQnKEW8EQkcMz*- zkFUi^&$horX^$2e5yscpRi)YK?h$IdR|(<7+Js+YU1fNVkuwX=l+br%A$i$7s+dmp zccqTSoaNTyvwhVr*#hVPZ=1XC+v-oEzP((m=sFNgO9kKC7BONGXf-N)c>PQ5c=se@ z-lDwf^4Q8>lr!QqpS#@lVC>z{R?gRzA+p9t^9+46FK4QV0;U239<@5$|w|6vUokV@2A6)l*2U7!@Jn}{R zrz#}kw;=yQA6HvXQAFasDP0@sGLQ1Zr^DjQP$5kl!Ts< zaa!=iUGu%m#F^mG7V}baq_Oao&6H;DV#y1Qz@|;u-FRc4Ct97}o!L+^Dt9CZ`BN@O zaauOOj&KE(8ms7Y76W)|#^XH5t0t#HiOa%4JTy;>0rI32N%spcd$J?cls|`e(XBz$ z_{zbQg^`uvGL&NEXQLAzLID+m*Q6%dFwkoH#Hh%Z^vOx(P`FGnDyovdz<2HNYNYuj zZYIVZ6E+K&_H7OJQrVW%;$xJ%@Np@^znC1`XN>vdq+l~w-_vb7P z{_ST&!Yw2zCR8(orzD;}#9t;SJjoy-oiQXA+R6sivF6eJoPyA10D;c8IvH#$0e1vK;5`kvC+Gz^z%AXAT zjAWewY;Z+4VOKxAJ(PmG1rDu$E94vWt}xVUHC+_$+-t&^?u!cUz0es0^6E!{ABuJ$ z*8kEaRa!UwJDnTRyD~J=X5L3s3ZVd&$37%Zy!Ag-6@1`H)UDIzUf>*VGS`prI)~`Q zbh<hvgvdWMy*wfj^+cBSe(v-P_)RRpDX8EgHvy{zMBXe! z9c{46S%{ihD!<``2n>JW{EX{N|76HOx&qWP)Rpnm7RgY5U}XRy=KxcGO+{`MT(4I@ zMMbU6O(8R(5CA~Ju_gF3Y{Sa)voTMgrS0_0KI>GiZ z|C>|vUz)gE86QgFF6RcRsFba^6HSIz!_S&7d>#LBY8TW#_LS`m4ha&nT^YU$vp(J= zr!;}I2RL8<*JR&QWqj_KZL$&ukXA?1ye(f!2HK6ci38d)W_tN+oQRhI4rU7D%T>N5 zpol+^20r22Ed7y3eC3v*ssVGRM(x_jH)jY{S6$HLp$W0phcAl(?8plw|2?=J%^Ngv z3#`3Z$)7e7G6e??AEX`e&ELaTfF=)mFD{4htqBADUv^f88UV5!Tpum}7?R})3IuS7 z27!WvOr-eV!@jj().getSharedPreferences("source_$id", 0x0000) + } + + companion object { + private val DateFormatter by lazy { + SimpleDateFormat("d MMMM yyyy", Locale.ENGLISH) + } + } + + // ============================== Popular =============================== + + override fun popularAnimeRequest(page: Int): Request { + return if (page == 1) { + infoQuery = "" + max = "" + latest_post = "" + layout = "" + settings = "" + currentReferer = "https://kayoanime.com/ongoing-anime/" + GET("$baseUrl/ongoing-anime/") + } else { + val formBody = FormBody.Builder() + .add("action", "tie_archives_load_more") + .add("query", infoQuery) + .add("max", max) + .add("page", page.toString()) + .add("latest_post", latest_post) + .add("layout", layout) + .add("settings", settings) + .build() + val formHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", "kayoanime.com") + .add("Origin", "https://kayoanime.com") + .add("Referer", currentReferer) + .add("X-Requested-With", "XMLHttpRequest") + .build() + POST("$baseUrl/wp-admin/admin-ajax.php", body = formBody, headers = formHeaders) + } + } + + override fun popularAnimeParse(response: Response): AnimesPage { + return if (response.request.url.toString().endsWith("admin-ajax.php")) { + val body = response.body.string() + val rawParsed = json.decodeFromString(body) + val parsed = json.decodeFromString(rawParsed) + val soup = Jsoup.parse(parsed.code) + + val animes = soup.select("li.post-item").map { element -> + popularAnimeFromElement(element) + } + + AnimesPage(animes, !parsed.hide_next) + } else { + val document = response.asJsoup() + + val animes = document.select(popularAnimeSelector()).map { element -> + popularAnimeFromElement(element) + } + + val hasNextPage = popularAnimeNextPageSelector()?.let { selector -> + document.select(selector).first() + } != null + if (hasNextPage) { + val container = document.selectFirst("ul#posts-container")!! + val pagesNav = document.selectFirst("div.pages-nav > a")!! + layout = container.attr("data-layout") + infoQuery = pagesNav.attr("data-query") + max = pagesNav.attr("data-max") + latest_post = pagesNav.attr("data-latest") + settings = container.attr("data-settings") + } + + AnimesPage(animes, hasNextPage) + } + } + + override fun popularAnimeSelector(): String = "ul#posts-container > li.post-item" + + override fun popularAnimeNextPageSelector(): String = "div.pages-nav > a[data-text=load more]" + + override fun popularAnimeFromElement(element: Element): SAnime { + return SAnime.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href").toHttpUrl().encodedPath) + thumbnail_url = element.selectFirst("img[src]")?.attr("src") ?: "" + title = element.selectFirst("h2.post-title")!!.text().substringBefore(" Episode") + } + } + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request = GET(baseUrl) + + override fun latestUpdatesSelector(): String = "ul.tabs:has(a:contains(Recent)) + div.tab-content li.widget-single-post-item" + + override fun latestUpdatesNextPageSelector(): String? = null + + override fun latestUpdatesFromElement(element: Element): SAnime { + return SAnime.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.attr("href").toHttpUrl().encodedPath) + thumbnail_url = element.selectFirst("img[src]")?.attr("src") ?: "" + title = element.selectFirst("a.post-title")!!.text().substringBefore(" Episode") + } + } + + // =============================== Search =============================== + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + return if (page == 1) { + infoQuery = "" + max = "" + latest_post = "" + layout = "" + settings = "" + + val filterList = if (filters.isEmpty()) getFilterList() else filters + val genreFilter = filterList.find { it is GenreFilter } as GenreFilter + val subPageFilter = filterList.find { it is SubPageFilter } as SubPageFilter + + return when { + query.isNotBlank() -> { + val cleanQuery = query.replace(" ", "+") + currentReferer = "$baseUrl?s=$cleanQuery" + GET("$baseUrl?s=$cleanQuery") + } + genreFilter.state != 0 -> { + val url = "$baseUrl${genreFilter.toUriPart()}" + currentReferer = url + GET(url) + } + subPageFilter.state != 0 -> { + val url = "$baseUrl${subPageFilter.toUriPart()}" + currentReferer = url + GET(url) + } + else -> popularAnimeRequest(page) + } + } else { + val formBody = FormBody.Builder() + .add("action", "tie_archives_load_more") + .add("query", infoQuery) + .add("max", max) + .add("page", page.toString()) + .add("latest_post", latest_post) + .add("layout", layout) + .add("settings", settings) + .build() + val formHeaders = headers.newBuilder() + .add("Accept", "*/*") + .add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") + .add("Host", "kayoanime.com") + .add("Origin", "https://kayoanime.com") + .add("Referer", currentReferer) + .add("X-Requested-With", "XMLHttpRequest") + .build() + POST("$baseUrl/wp-admin/admin-ajax.php", body = formBody, headers = formHeaders) + } + } + + override fun searchAnimeParse(response: Response): AnimesPage = popularAnimeParse(response) + + override fun searchAnimeSelector(): String = popularAnimeSelector() + + override fun searchAnimeNextPageSelector(): String = popularAnimeNextPageSelector() + + override fun searchAnimeFromElement(element: Element): SAnime = popularAnimeFromElement(element) + + // ============================== Filters =============================== + + override fun getFilterList(): AnimeFilterList = AnimeFilterList( + AnimeFilter.Header("Text search ignores filters"), + SubPageFilter(), + GenreFilter(), + ) + + private class SubPageFilter : UriPartFilter( + "Sub-page", + arrayOf( + Pair("", ""), + Pair("Adventure", "/adventure/"), + Pair("Comedy", "/comedy/"), + Pair("Demons", "/demons/"), + Pair("Drama", "/drama/"), + Pair("Fantasy", "/fantasy/"), + Pair("Mecha", "/mecha/"), + Pair("Military", "/military/"), + Pair("Romance", "/romance/"), + Pair("School", "/school/"), + Pair("Sci-Fi", "/sci-fi/"), + Pair("Shounen", "/shounen/"), + Pair("Slice of Life", "/slice-of-life/"), + Pair("Sports", "/sports/"), + Pair("Super Power", "/super-power/"), + Pair("Supernatural", "/supernatural/"), + ), + ) + + private open class UriPartFilter(displayName: String, val vals: Array>) : + AnimeFilter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second + } + + // =========================== Anime Details ============================ + + override fun fetchAnimeDetails(anime: SAnime): Observable { + return client.newCall(animeDetailsRequest(anime)) + .asObservableSuccess() + .map { response -> + animeDetailsParse(response, anime).apply { initialized = true } + } + } + + override fun animeDetailsParse(document: Document): SAnime = throw Exception("Not used") + + private fun animeDetailsParse(response: Response, anime: SAnime): SAnime { + val document = response.asJsoup() + val moreInfo = document.select("div.toggle-content > ul > li").joinToString("\n") { it.text() } + val realDesc = document.selectFirst("div.entry-content:has(div.toggle + div.clearfix + div.toggle:has(h3:contains(Information)))")?.let { + it.selectFirst("div.toggle > div.toggle-content")!!.text() + "\n\n" + } ?: "" + + return SAnime.create().apply { + title = anime.title + thumbnail_url = anime.thumbnail_url + status = document.selectFirst("div.toggle-content > ul > li:contains(Status)")?.let { + parseStatus(it.text()) + } ?: SAnime.UNKNOWN + description = realDesc + "\n\n$moreInfo" + genre = document.selectFirst("div.toggle-content > ul > li:contains(Genres)")?.let { + it.text().substringAfter("Genres: ") + } + author = document.selectFirst("div.toggle-content > ul > li:contains(Studios)")?.let { + it.text().substringAfter("Studios: ") + } + } + } + + // ============================== Episodes ============================== + + override fun episodeListParse(response: Response): List { + val document = response.asJsoup() + val episodeList = mutableListOf() + + fun traverseFolder(url: String, path: String, recursionDepth: Int = 0) { + if (recursionDepth == MAX_RECURSION_DEPTH) return + val headers = headers.newBuilder() + .add("Accept", "*/*") + .add("Connection", "keep-alive") + .add("Cookie", getCookie("https://drive.google.com")) + .add("Host", "drive.google.com") + + val driveDocument = client.newCall( + GET(url, headers = headers.build()), + ).execute().asJsoup() + + if (driveDocument.selectFirst("script:containsData(requestAccess)") != null) { + throw Exception("Please log in through webview on google drive & join group") + } + + val script = driveDocument.selectFirst("script:containsData(_DRIVE_ivd)") ?: return + val data = script.data().substringAfter("['_DRIVE_ivd'] = '").substringBeforeLast("';") + val decoded = Regex("\\\\x([0-9a-fA-F]{2})").replace(data) { matchResult -> + Integer.parseInt(matchResult.groupValues[1], 16).toChar().toString() + }.replace("\\\\\"", "\\\"") // Dirty fix, happens when item names includes `"` + + val folderArr = json.decodeFromString>(decoded) + + folderArr.first().jsonArray.forEachIndexed { index, item -> + val size = item.jsonArray.getOrNull(13)?.let { t -> formatBytes(t.toString().toLongOrNull()) } + val name = item.jsonArray.getOrNull(2)?.jsonPrimitive?.content ?: "Name unavailable" + val id = item.jsonArray.getOrNull(0)?.jsonPrimitive?.content ?: "" + val type = item.jsonArray.getOrNull(3)?.jsonPrimitive?.content ?: "Unknown type" + if (type.startsWith("video")) { + val episode = SEpisode.create() + episode.scanlator = if (preferences.getBoolean("scanlator_order", false)) { + "/$path • $size" + } else { + "$size • /$path" + } + episode.name = name.removePrefix("[Kayoanime] ") + episode.url = "https://drive.google.com/uc?id=$id" + episode.episode_number = index.toFloat() + episode.date_upload = -1L + episodeList.add(episode) + } + if (type.endsWith(".folder")) { + traverseFolder( + "https://drive.google.com/drive/folders/$id", + "$path/$name", + recursionDepth + 1, + ) + } + } + } + + document.select("div.toggle:has(> div.toggle-content > a[href*=drive.google.com])").distinctBy { t -> + getVideoPathsFromElement(t) + }.forEach { season -> + season.select("a[href*=drive.google.com]").distinctBy { it.text() }.forEach { + val url = it.selectFirst("a[href*=drive.google.com]")!!.attr("href").substringBeforeLast("?usp=share_link") + traverseFolder(url, getVideoPathsFromElement(season) + " " + it.text()) + } + } + + return episodeList.reversed() + } + + private fun getVideoPathsFromElement(element: Element): String { + return element.selectFirst("h3")!!.text() + .substringBefore("480p").substringBefore("720p").substringBefore("1080p") + } + + override fun episodeListSelector(): String = throw Exception("Not used") + + override fun episodeFromElement(element: Element): SEpisode = throw Exception("Not used") + + // ============================ Video Links ============================= + + override fun fetchVideoList(episode: SEpisode): Observable> { + val videoList = GoogleDriveExtractor(client, headers).videosFromUrl(episode.url) + return Observable.just(videoList) + } + + override fun videoFromElement(element: Element): Video = throw Exception("Not Used") + + override fun videoListSelector(): String = throw Exception("Not Used") + + override fun videoUrlParse(document: Document): String = throw Exception("Not Used") + + // ============================= Utilities ============================== + + @Serializable + data class PostResponse( + val hide_next: Boolean, + val code: String, + ) + + private fun formatBytes(bytes: Long?): String? { + if (bytes == null) return null + val absB = if (bytes == Long.MIN_VALUE) Long.MAX_VALUE else Math.abs(bytes) + if (absB < 1024) { + return "$bytes B" + } + var value = absB + val ci: CharacterIterator = StringCharacterIterator("KMGTPE") + var i = 40 + while (i >= 0 && absB > 0xfffccccccccccccL shr i) { + value = value shr 10 + ci.next() + i -= 10 + } + value *= java.lang.Long.signum(bytes).toLong() + return java.lang.String.format("%.1f %cB", value / 1024.0, ci.current()) + } + + private fun getCookie(url: String): String { + val cookieList = client.cookieJar.loadForRequest(url.toHttpUrl()) + return if (cookieList.isNotEmpty()) { + cookieList.joinToString("; ") { "${it.name}=${it.value}" } + } else { + "" + } + } + + private fun parseStatus(statusString: String): Int { + return when (statusString) { + "Status: Currently Airing" -> SAnime.ONGOING + "Status: Finished Airing" -> SAnime.COMPLETED + else -> SAnime.UNKNOWN + } + } + + // From Dopebox + private fun Iterable.parallelMap(f: suspend (A) -> B): List = + runBlocking { + map { async(Dispatchers.Default) { f(it) } }.awaitAll() + } + + override fun setupPreferenceScreen(screen: PreferenceScreen) { + val scanlatorOrder = SwitchPreferenceCompat(screen.context).apply { + key = "scanlator_order" + title = "Switch order of file path and size" + setDefaultValue(false) + setOnPreferenceChangeListener { _, newValue -> + preferences.edit().putBoolean(key, newValue as Boolean).commit() + } + } + + screen.addPreference(scanlatorOrder) + } +} diff --git a/src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/extractors/GoogleDriveExtractor.kt b/src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/extractors/GoogleDriveExtractor.kt new file mode 100644 index 000000000..c64697c44 --- /dev/null +++ b/src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/extractors/GoogleDriveExtractor.kt @@ -0,0 +1,95 @@ +package eu.kanade.tachiyomi.animeextension.en.kayoanime.extractors + +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.RequestBody.Companion.toRequestBody + +class GoogleDriveExtractor(private val client: OkHttpClient, private val headers: Headers) { + // Needs to be the form of `https://drive.google.com/uc?id=GOOGLEDRIVEITEMID` + fun videosFromUrl(itemUrl: String, videoName: String = "Video"): List