_9m@x(X$FVzm9>2qsg5G;w{3QnS26is|4U*f*~NpgDc}Wf(q(UK@k+0lNRc
z?I*g2opPesmhfvgDfm2kYC1q>SH}u8{liIGKId*Jt6iIMU7G?RC!@GCCI_CzT`xa^
z?N)h84UJ1NGy{vzQ9L`eVN|^cT-R_kOovYHrJawB2nD)x`2k&icZ>>9i_*ag^z|D=
z#{ke028C|*Q1N^p(bXi;B0uL<8fhdtg5KJnUcpm@8IfNZKv+;FVxWu5%7ckc@bLEy
z1L*0epB}d}mKQ@-p6eD+71w73%(3hs^({S(Ue_Zvl&46cNRW0vK1z>1xr-t(o`EO2
zKQ=|b`^9z2Wlddej7AqRh$!Npd2DRU5ak&fZFOQPm|`#)wlChL00tbn$7a4=@}d`Z
zPxQi6V;q_EEeDVa3@T~80BgV_1_@IbB+T`T-d4$_=&=XGvj_0()8S#Y$fmP&>FgNY
zyEav3;8NKI4Z7MGAx>qi!v7vhQvfcH$BxWXYMIG2P5kpGlwZniU4T?UP)+X(JnP#<
zz#K(a-8c+8b9sVTD7FJG>(I0NC>rM(cr5zD=NVH3BKliNclr
z-XsM+4|mp|7Rx%g3!gfNE_@9j{pgW39Y9_H@N%wd+{6Y8=ejAme2hBR_8?S=R>8x0
zhNB@7^XxggT__K$Og>*g&ufydexSiq9&6d@p(*yMNTv;5^T1Pqve>&T_~pBp|H{#W
zHztVPSgpgW`f#2N2gs|@y`HZMj&>&pDU?fy0m6>-j#98}sE%>Fha+Ly`@{~~du)dQ
ziOb41UYJ~@kAHrZRu-^?!=v(STvJy)6mY5YGA$qeh$7pZzy3
z9qu*Tul)u`GlWBTU#LzGb*%5A?v(>oE=%Nro;VK>cJ(EM>O8VT>B0CF_63o@PZ3=~4t
zv9=rF96~Rv53vtiR^`(ZI)9Js9iY8W?xf^E7X?GwSX3TkJhv}R(5;W}()zOQwq)R`
zl$eUTRkD>2uF+KAPiZ}dz}adszK^5PEdh{|ab56II>js%c^}j{g
z&{EAz{Ro`R88up_CDHvXoQCF
zGZfZb7BAvjoL#2dmnY~xrYqQmS*ezVwQcW>s^K6!QM{D6MzhIZV-Y~@w=Su=D7$vz
z@0t#vdP8Gaq}FwU`M3b4b8RO@FrpkPbO0RmoGifMKX)b(>m1uoLp%E^o`{N9AQ{K(
z#5{Uhw`pN2g$dI_6+E`y$sr!A^>rbT1w3Z~5e5`%9Db`$LjgK*;>5TY*W>ow@)6#k
z03?j}-o?{9seA2F5hMqAsf3LI_!;(SJWRuT25BF9S)D!n`VZ~k{L^b0;j*ru8y7CC
zQgv*>*~myyl;FO?^YozqZOVl)^R57p8&xv0ZQRw?3cGAawR(1E(GRG`tI2$PIN1_hkT*&E#kfs&n`1B+cBLryMpysED(5
z$Q+R^rSEhSaEySzFT>%
z4v!uWBEH#uWE=Gibe9r}K|ut`8O&iVOs44iN4F_8gJq*O_IDa)vV+I|+#;<-9-#O2
zQ_6?!E(T5VC4aErqm=OfU`_Tp8hIj{i=u`&8CW9O2MF36jaJT4L^>0g3
zcW;7%V&f()Heztrme*lFLV_YvrKmO(8I-b}1F`FeHOJ`e@hTQA!SWiS;@>i*EJ_87#lJKQ>KwuiS^*
zTBmFl@rJ~DH8&HahOz9<6+wGsiY5^}=fmZz8r?u5t2{>8S{|UP3hOiE-7AMFxpEAX
zoLY>t;d`{-c$8M4fo`{^I9*sFI7)+191e^{8htjMyWpAiEGHSq%?Bf;?Rd~4AEvG=Xm4ut>T{?laIY-Ks$9%)#_h=$QdoX^p9TT0=
z4h;Tbub#5STnK08CKu@T#R;0dzeu_DoLKy2bmg7yVuJ@K0Ne-7nu>7GYr5~}RXwjZ
zK)MB#?g(BAgE5_d}*i{vma9-T2>fP3hgk5W5VsAW?skedqe?0EmeY3f|xi;hV7
zR<~lGg6_#sr@o6j8iN;iEzPZn9+hxY04TktJ&RsFZ{-{i=Sn9TW0mMt&Hw>WT$B&Q85bl(Q
zD<8yWI{gdJQTOVBs^lTSv;X)`JPom3xG+x7Yjb8N7HI7JU7AOXqpilUpZ~HehokC9
zNQ+Zfy%bl$b**&V#GuPj+QW3IM@9ftm(IY+o1UdvI0S>
zT_q`MI)GFw7bt{jaN&&B`!eRLV3|a+gPwU6QyG}Y;ymZEsOxt>t9}wfroqi^DZzzj
zcq-L{@mWq>$B6T9N&|+CjC-0+fmER}SAct6!*efFM`jd;(5X3bo`~mh<(Bs
z1T0{2*KN9q1?^(v%Cg1ma;hUKDwgo@Rji&&uDsdJ?ZLmNqf>}`-XZR~dx?9T+?u55
zlqGAJ0zLWUljCj*TzL+!RUVoBEJf4UgU1xm>^{1U4xf5dJQcyQ&qr@v!j#0k)D(oW
z;z-ivq+XRb63^FVLyH2Qbac`Y9;X}8>3cW!Xi0#~4Z#3CGV?iYA087xdyns+L(kxe
zQB0O*)-!bO&5JaTWf!W4lhOT%cWSv&hKHZ9;AI+Xu?gE}ykwN69`NvWTMD3Bji3Sa
z8UVtM7&<_lZuGz~9sAS)Opu0YWpNb%U7%%tn6LJ5PZd{E;A~jlkxQriD&1B-yo?3%
z?~3UPy9WeiVz_$2)6@XTR$90)C{WC#KzuGQdf#&t3*He#KNz2;2RCPG?v-2}e>k$B
zC2%4_E{Q$}Xsl<|mYL*2%TS(k7%;pgy6bKOW*KFYtgU6TrcoeSV5(!FD1zu$v<;og
zwnxDTHR2y$5SGg!a&~%ZSw5DQf=80E@;!ls+nS>Vz_S{|?(|I#PeT>xi6@@$C5Yy3
z{LsRuu!%SJdQ^eHM52V4Y^0V?J8)%Yi#-IkU5Y;64JReQAa8>T>h
z0mNPR-qZ=P%}SthvAj(i$r!kFxz1AQdou!5Db4?vE*J{p|1gOjaP@N7u
z6gUVK3iH}$heO7|Wm!m`AepQxo`$|IX^WgU1$;WFm67P~$cfwS$a3?u>COn92og}H5jUbwJi
z>KQEU*jP*^YgjjmBO4^wibb>m!W8DVF3?iPbt;CeH^4N?=F~1u-^(hBYPzOSAU`S}
z&UGP}{xmj67>1jW9PBZ-mLhGk$twe8!mb%>*t=)3`(s)cqs#W)bgN*v($Idip(;EL
zRiIll_gA!=0kXfOJY5b
z3_y*7r{w{vY`8!^M#ETC&p~yqEm_>UDzEN}m!Pg=LUghFx7az1*DyP)PP2n!v}MCw
zm|F$1z1#T7jO?)Xjtac1!rj&w)!HSiIA)`30dXGP^Et5;V>Lcby#1VCsv`rKvI@I6
zp=AJ)mT7)J7nXJmF7nIW@In%)T`a9zP8J@ceA=i^9((kpXeDuzRsc>Gzssy3Z1#Y;
zRx33XK+=#n-6=dal-Z7Lcu!-)D7@rNafDhHnrg+t9?ghzRuW?X=N4rn^HPu8$b!=>
zs$*{ch5>Z+=uv-z=&EiB-j0lMq2$sr#6*}U^s@JPE4BIC9&on9U~xhD;iNkWkCz;RdKAEdj(sz1VPJA0@EYGe7z)b|w?H
zwjVRnf?@QUpeQ_YoWX=AKMlGb#VZ8xdm)5(ve)pDvIdt)CzD3a?Ea>F9u;4bbJ%Wzxx{@fQJaxiuW1jm4baDxw;c*1DRi@l?{wq?JkIUn}{OQ^NuB
zryBMf49HwV)p#oDWz)*0lc|sEH0B4`Br<79fc$D`)qLuaUNuh%n{H~7mI27GhIX5e
z%6aulyQySIUaYABQZa-~ecj}zdX8***>p1XYGj&*0rdFekB`^0;$94-dag=(m9+J2
zAHVW`=m7F+Al36#(yOHP%fR){=b-_}t8rA%uXp--8{V({Hwz#h?&0mUpZ^n-L7zGUal)?~RR({dEn1q?YihC=i#4U04aAUAuO@
z(AnAf1{Qho-+Vv37*h3IZis@)GDhEPyZISn*SGBI>gu1|yLazx9U$KFmUn2^XP%wQ
zo6p?cBNZAMo?jPAdhSi=w4aHN0Qy=f`zr>(~tGP~T!Elli}?si|)P
zBJ6%e{FXc3wAuhjs+g((@q!yxp%?>%Pv`LP@R?*X`FC(-!%|nQk;pIOxyi@PIp!+(
zy;FwUHdH+?o6RnyQmH?inVES{S09dl7$AOGt5g8Z*Hi__97vZS8XX<|QX-M~79i^3
zJiToCtTrd4`DJ
zmz@|G7&zJ8-TlXa=rp?a9p-nh``wsc0Pu3I-}Tsx{EYhYF1PrsLwSA)m-WW%?Ckrv
zKD#Ye9)`!PK6MAk43UV3@QLFXf)ee==QH7O_&F%i2tLZ=M0O491pqJSZicbzbd6Pj
za}VA1_f}R`-d!^HpQzjLg_
zAM*=KRb6JC+Vr8%)=&`ssXbAk#Wwt5P*`n@5C5A3XTx<#tB+fNjPs0u+JMM#Yy8uI
z%Xm$4`CD%vdi!~+AWL@nt9M=HXTW0s#9ea(AOjly$$v9Oo|WM70#GGHtTYBR#!vp6
z86dCMbJdDl_@r6@F(`)G7(ls(#}9+DvM?mZ$8cMQIvL;lajh-Pf~%^V-Ix*EFf7K$
z_#6LJRvx27e#9h39tK1PG=|&SboVuc+Tl%H?Lz~jQi%+gW(3Qw;qhA)43Ny=_z7wo
z2D3Dzt>Ycym2G~Lwcv6~10knnevo)*QR*0=>ci(E=
z2FSOj+?pA+0os~&_pR1#fP8Dpt(j39psi_l-)h|k$hW54ni;hL+M0Ivt=9h!9Gdm&
TN03XtGqIc*Pi)JwEt{idOi3U`Qrx%R_pa`)y>ia0dfl&Hy;t|#
zd*AD>@Dq9IaYgul8
z-wqjUL7A^(8QW1r-t(w-aI@|J1
z;lC%bjyDU1!Ve}VC;$55#f$U!Z<7R0WDs>VJKSpmSix_Ao_=5b>R0zClgV!*=zn{8
zc{!F!r68Nl0yY?mMQR_8e**Axw})2o($INyNHwj_>-UfGryDydr=T_&dJ&&2Rp3I-UM^6B844H9Q9ZoH(jN7ioXpa8cbw;eNGC
zRPJ^Vz$}wShCO@sKr|Zt<2T=Y^S@O{Km_oV1YQwW1sc(64rt^QEqrU!PKy$Kc=~%+Agpy>{&yxlBzG
zXpaKA1h8xW*w?=HwQo;PPk&pdO2ehj;xv_Jl0ufF=~-z+XJo_DK_sAIUm;0hXUz$|Zc2Pfx!d2@n$`?)RPu_q3{Z}ymH2$*qGrdB}lVL9iu%Z32LhFF+JI;PstMO2
zfNB4m1n49JeD<@SePC{H5OstqNjR+(3A53|MQzlv(RJD`N~;Qf5mu;N+(QPJFJInk
zA%Hmwn3G|V*nA^^VgBGR@!WII-BZ!#I)YUplBm4x4)+U49H8lxt&^5R>Z@0;?ys0Y
zWCm%^19V4#D*L}efV(2_r~sBrZBE&uIHGV7h`b2*3rM26iP|m-_p9D!xk!Km6#|e6
zL?Zx^K-nFtN&u?|h`c}aixUB!efHTqT(F8dLna@YQAgB?+Z`@yw@&?Z((3jXN5i|d
z-9msv7-zjg0_};gR|FsvhzJmuA%LheT!BD*rx}Rt+|?LYt;0qCdY3DO~e-34ln0JlXNOe73WdOyI=sTa4SM4C*cjegfpw{3nA*IF+$
zfgZDr0L@7Nk)Tz;!O2q;M-=Wi06Faz)zJ$x!w>Q*)w?p%*CBv82QXKJrT1oR=?EYa
z0tWz2aX9&U5l57VDBO`iE*src+9@huCtQ?P)OTJH(>4M$4*_%qsH2rQWqT1vl!qu>
z2SmD~lc;W@aGkn~@^0!8K-4&q;B@RtGp(o&qHtYsaqA(Hg{YohX<3!gN2i};+SN28
zfT&TT&K8Ap^XJ6#B915zQMhh($>wd%%_(i$nm{5!iUcRy=^XHL
z;>gt74N9Usbi!rRh7(~J`{o{q#3L~MSL2X*L~Bv*pKSi3er!tuh=eE-+IE4TLl8eT
zD5rdpY^%a?>tp|g0T_C9#Mp|GzOxQ9-=BosH0?*L{iO0{rf)j}h=k||_&LDg#F44{
zc4&XuHY5%vVE8LLAi6UKbc0)|fMyVqVD@jOAv;k!5{TNb65dt>5D7>Y{G1No>NtLx
z51e+0JUS9HOrONzuIegRL|VucVD8OnSh=)Zbx)Q~{pzJ{Ndkz3rKh@5(I;`j}IPP;|*r0_^@1ctsm3O!c4-!cMFoRwcM!z`LURwcv9TXpW!QUnkQ
zN?Gfhqcj859I$XnqS79fHj2veBAjgf~1MftPl9xg&^>JdOB7#(29Xdtdemx-s-HkrCRmt$U5D>lvraV3
zk5DuWJ*RtN;H5$6NYX_g4j<-UMD0I?rq9~d)tU>UMRL^*ZxRBO1t)53J&muDUZy-w
zTuvO7dOG7u?5V0-pUV3@;aC_V-5m&E{Gs_mdv^e}I-r?S%oHKNl85|K9tx>E6thLc
zlqnTUhMnJkegOJj=!Zy;gXXVPn#`TWcjjUK|IIqyjxLg!j`>4r@p^RYq4>r-68X$C
z&uE_q5D8HgKr&jL3v89Ts?^`DoKQGq*y*vc7{m`GAhxR$V(71rbVVT4f#A2yUyUm(
z@%VT#U4VQFe=}LgPG%u9oq?{y-MGrzjfA1Q&Rmo~x|7##titsFnuH>zw|^p8coE+6
z1P}>nL+BMNiyhz8U>N
z@bVBO4#pvbW)JR8s|#Ky0$3A>!pU4(_~{%hy|Yl`_2G<`B6)GcTaEythO2_6s&koI
zpVN^tB&n}Y%b}e1TjP+IrVCePhhD{9nZspUUDP}gxZOqwYg^N|)?o6D2`H}Anm(L%
zh}y{wZy5rJ8tet|IUS=y6xF(`j7U}B$6c7cXZwr=s*VA)@he(imjHDMf~IB`cYBh{
zGc)df_(dcWop5W~rYC?%5cRaCY+9N4+_>C$UTFU+@Z)5cz(4rPu(3s9Q#;o$Nmu)m
z=`-_JQ;_-)_xiYeBAIv@-joCo2|xrEmGm-c43LPukSudW)D{^N%G!qRW8JXh8#~MP
ze&rKsevxUz3P%^|$_Gm@^M7!wv&*y8B3XMG-ZTUdHQGy{sF)TqK$JD5L~Y~9#u|qf
zrD!{Hd_UbkygAtw5kOb_mnRtb|9laqkpQcgR*W?R8M9H;R@v}|C&2mh=e5@XbO0w3
zs7&X{l0*c2ZoBMlhz>^4^cjWjBX}CC8`W@#7OyBbe?31Y0qD={RL0ozZ$JMllDF64
zEl&WEz*Ox})lovVK05WZmx)VV&>ubu1H(rkbZQac&Rz2-1o0c1&8;_&;Rkc4LfVpgy1FcIi2Q**~2ZjM)Q{<(6x3D22)Q%N1>+zIzpc1XIetW
zD1ZTU0*>r-Bu?nd;}H5ye6cE8JHwaJ{u?qukI>xT&A{@zOHeGh%!n(IIsGb%;}qU9
z1Q0b|q*Z0p%fy$7E2<|K{PuXEVibDUk3j#*N$4n+!C#J3zeJ<%6lXLIp+C7&9wlsZ
z1r_j{rKUbvf$6`*1u-Opj&c&o*e$%N2_R~;mteByB~z|UTuyzt1hAGHF2}08sM&qK*5|0DC
zDy=9oti7rODPtSJ%(@czyAk|@D`y~5tiFPTQ@xEglWBfz1ww!H355D=#}&os7PgcK
zuzGm~CjZCywrq)R_z}Ph0>}bb2h2KUscOKQk*$PB5!VmF!17s~@OGukOS*g_bP2Q3aRfn|Z9?S%Zl`eJFhxo}<)6{n63{5H-G@dQwTNl18K=
zxp{8HL-2Q}_ru`w`3+a+CPAu8+sqqXoYor(twRKjFfUF)=yz`6zM-G%dwOu!y>e6xq5D7&DIF44a
z=ix<}PW9sEyJ7aAJEkkW7d8Jmi01oivfRKmff}(I?Zhq6_`h5>U)c)bvKaO9B!qqo
z2~hF>ZxX<~&Mge3IhAdD8u=)NJ?
zb!61g{4)<0VEo1uMw7F$gF4K(vPpf-1x%Ap_r;Vehy6_(&kar=4k}@
zYywKR(bTz;1h|FeEuhyrk7XJzQnN7p^VvBF{|=_>p~{Tmjc35l8qkBvd7&
z0e;%slimkObaloIo4-Ez6TLBb;<>}HWB(9@!<);uSsVdAdiy#|-9vAW<6(G&Edjb%
z0X$XO$-`5lP%zQ)WeELKG=+B1eV_OWj7|H~KBMV3CL#4v`GgopzM?oX;cZ0#kzlq9
z_}q@S5;$DyF#P<7qpleQ^Rp|KtvoXsfmDE8u-V{IPfk9DaH~?0aG-L^`ZDRh1yMv<@G=bsZL_&`fbzv|?aV%n;g8x^o>D
z({4cM@DjSAh!toKq4~3PaRJ{0n{m7w$SyOHtVH2XBTUN?fFlGBSiQ=}GqVaOoUz;x
z^ruc5zWxx70wT>%X3t}1_QUSOJD?+Kz4@U8%d;uCa`6@{Odud#K2N~EVL~D3A4j77
z=6whq#ZzcF1u3lNjd#FSucT_u2Frq9)qH9R0(c2lFZ1#W{3V=xc4zkCUj9=^f)BIPUE^
zV7NT%X=`JCfPf;H7x<2e)?(8*8w;}RUwmCTE8RT4T<#wxTEth#Iggf-Wj7E
zmE8-`Lp9I`F9r@SgVyeA1y-~w0g;O0ShGjEDFKfVN)
z-$6hBV)bdRS`&dO1(w#X&5Krmv#}YN8Tc9GI+lds=g5!KuT^m>Vzbt+r3t_h5VPB*
zqlwC-|!f_B}2`M$r0LRjDH;}t<#jsPOyNh4VyfqNbB
zPBy%ZDwZ2Yjla_Xe>9Kp<`&)G(6Sa!`F6x2u;ai8?0I|#BzN>d#Ny&C+Z6z-xWIMy
zlW}8x95AMvScr
zo!K$yB@+j=z4cBW;dyey*1-i+1b)01%^lSEd(q_SjBnoSVv%$|MWblukm~wWC|Xfpi^934Pt%M5XU?4QWgS4+6B5I8xD-PT
zKMY;y$?43F;E}|BL)$xgbLs$(I+siqn&1-XX&XZ?0>63_+h)bqmhmw8rxP%a3tOxB
zcUn{unLJEPmkSXhn-`6|J`+R#7tJ7i4YJPX1-LnRSgX+RCQu_1z!Wk8Kc3!YELhQm
zmfV?!UGL<(7XY7<&;r(O+_FsIPvGCl{BZ(w5g(YCdN2pKK70Txb14LV*{8nMnxD&&
zrS6YmuK!)%!7r=*o5BQYBm$WJ_XxTxJJE~NxB3LSFA?~n2XSrSHwi@GrtJ%H1pCfI
zBe-jG6nfC?apDT4DbmBz=;66@>e<*
zKY4nbK$_1L3{6j_&eYu*+|yJ4B3Y*=n2<`2+-D0N#vZ
z6=)}JP3XmqY4OZnbYmh|%~RfP`8jBP($<|lod)1X_YXqHPeFFQ
zd{);SJve~aBr%im%prmq4T{Agq!SNdCix2}M4Y!_aN6Nj95*Qh1h7cPE^KmZcHvg!
z!Ig70w<|lVv+{p6ff~kBSac1^j{PGzu^onuY|HNH}DRm67EhsufWa8Cm?`}1YCuO!+alZPU~BJ
z67SfggD7IHZvwxwJ7%oblBqL@`|}g1{hhoy1SU$8SZD69HS
z(Ncb~u9$J>&Mx%k^bPcs@7}auG-ZqsW#Fe*Gca|34kmBULJDpDEM7}O2UVQO()gO+
z9Q_Ko?O|%@$B>CmH#GREa&1Kbjz%G&kc)F{;S0ughI*#XrUu1J(02C1})^?rmK-#$N!1+Ja7aF%BByQuN+
z&7eO&<7nonnmmmFeq+ynbRPZwZy9_3?H{)Hy;IPLN(j;Nol;Y~XNaD?R~h&lrR^sXI+!KG(WdATq2gmIVVfs=dS=(+ul
zE=^jsoxC#xw?BS>6Wev6nbT-mUlsgCJmobt_#;SnPWlFZ?%bf|2%rjf89{{cb=Hx&
zS0I6#+uT0#>+eH*|1jRRMpq76zXGn>(jk<4coJ&{Jv)WGvp2^rZ`n3BlIAbs9{)w0
z^wO0lHMc)AE6Qm?H-!mw`t)gEw?mskjpJ_4(YY@`q_p{#u3ea8hlcTz*+aN*
zr`oTd$36HDa9i@d%j38$8MVHPE7PfSR63Q3sd8}=k-1T=buOW;znZv-rq4wvg=xil
z({ALpjT4U(M;82TO#r(eRyykulzIY
z{PLl7&L`WcT!3zrEs=m5wYts~ug}2G(ffmsXj?vR+c@z!aX9jJiqr6O053-XH$l=q
z{?UcsFb=BQKT1O$A9`5gz{ySXhyasGXW`}t_u>B4aT!I+-o9K7D9JA7B3fdQu*_&au@gI-}>-A-n@X<{4vzNb6x69%cZRt=>%MC+3Q|}JgoFyhJ~Jw(DboA
zpv}mX(=UF5za>o|u3)Wtg034MS@^u;y*#w4d+gamaNxx5D%CQNKK+m1zGf_F)!Qay
zCQ_*v14q^BPBH;EdQIK&TEkQV@A&C|5AXP)r;j#2ZaX>gIC13keQoTf9|61&65Yr)
zv~&S+T)p*y@{Z$1wsT)P34KGGH?PrFUwTt({Kj;7&QNck92aG_zL8EQnSdMJNxtiy
zkBl4M?EZdkUvT1a;^>0EDMtW51e07ogV&EgwQ-2u1P7HhxT_zY{=)I9>qu7SR^j5C
zmw>!KZl7vBxxlokT`4SZ%doeB{+)}>C$p(w000c1Nkl+__x{xu$_lT;K>(`;0r68et)`k?aI&bxgW=!p6U}e
zE-+QWFO$C$P;-$L*yyODTlcP*gr{yS#g)@9AA@*zd4)KO
zzWkKg&dSviVCLX;{R2eT;1mEu{I|Vg%r7l;On}jCXhK
zfTr{v(J<_Od<@18;to+95$H8_x`r^H-82Ja5GeylRa<}4JmJ^O&Fop~`4~0-b)c=z
ztz!0ArP5L(02lCfSPU*d3wv$^i=A>y_0&oS)5kfL`3X;ob9q;n=q8wR3T2w8k`dR~pBlywg
zUo_tGx@OCpXMS;I#*HT}1c?MqK>)u6)w6yOJwY#S-1O#No_O1WRrbojSFrU}k~rD?
z`HmDU_kL(hc>T2b%k||EN&?T)Q5&8Br%s*neI0%+m0EKK4
zH{fNXi?Gyl30C9xDqEY&RpSDc8&4)r75U4gX?p@tr_p;|I~HCxUU1R*WPzw`Efzbjn_!vr@FKq0o*#OZ}kKohot>L%+353^vZ&;
zhGYsEC?s*zbUk`feblot^>o4_OHs0`U2Jn;rjdwLKj{+@801n{o;-S}EhL=7A-Lxe_@Hn+K
zEp>*pQ&f>TD#@H=LFaaJ9SgXh{|cl!?^In~E+ad?;_{&DO{|t6fJ{f!6C0ff8^%>(
z=YugG2wVlhinhL+*2imW(c~G&L+rnXbjOU6z2EF+kF_V8jsRYP-4V|CuGjF&d3>>*
zc7{4XR-r_LEe5_5Ky_HIJ^zzUi{#5rh+{Szdy*$fR8Ovz$Rx*2<$^`Or1aJcY
zU5P$|E5nKOJ~+B3DD>yW0BU0&4sFu!x)4=)zj7)|UmdZ2Wq}YP1odtwsPDjYsZK
zS{#dIhH)SeINmgY@0Hd!Ze_zQ%h~7xEO%c)7w294FXiWzte=b=Wa7#aMXX)?r%THd
zK(+&|ozj`xfyX7!8Lz%OnnPO-{7pbu+eN^qmsoPK1z5uqTdSz~^BwdkwftQ@TSXKx
z__roT%Mm~a@U^NE-|)?k;f)dJ@Fn;i&(oQw97G0v|m)E8SPo)*r7N
zSgD;otH?+ujZ9pwjJ7gf;}GBtT#Eg=aWM~FzksJtAdbHTO@bRi$YFdWyC2UD^sF7i
zcY?db?*!M_-Rj*+?Kk}Rc=>Dr_v&Xm@o6Q}_?;7mi_`6sm7Cx3)g|Cx%Elo;d5cF4
z0ZyJgxuxp>^+Zi?hQ+fxkpzcv=jbkcK#yLJtp90ge6-;UkbwejQlraf>F)hZbO!DF
z6}0(lC%3Bhd)XwD^S#Q(7s+Y6!UFS@&SnJ8)bS>xYy_rA=hqLpRS$i|nc|8~R;2;hO#
z2^8T%3}S@=h~@^72ub{R!nkZVRI1!Jik_J=*zr(3x-98l&3t4P|4bQR&xP<|4a2OF
zGeuN1xJsH<1HReq0Rc1!-~}jj@=#4Hn@%>qhDf(OX+Qu;k$VXSoxD`iZdDpdk#1}B
zfB+2fs{p57wmSK#rj<=68=oP@hK$mB1dzMAq;98p2?E``RMV@ZQ%Td1=w?)^^$5Ud
zv|AKEI^K&sRr63ur;TN1#}&h{d2wLHql
z^HtKSr11cI4Ut7#5Ww#a_9}m!d{on_rfUfFdQgd$BfwU6s8?n2^Pxqu>Q!cb+G@0@
zrt<)E4V6Vx6JR?!(aSP*^HNQ(ny#Uc>rrJIo&YCKoY?l=pk4z;H$T<%s_8t!T0>^j
z1_Y=z8#q1T2Uv9T)JdB
zAoFL-Odyj0L;`aJFbJ?~*RG>|eSJT|Q9x;#-^d+
zAo?K*zLHEP|5HZ?al_@4^pTsn_z5bn^7bkp)y`>^bZGaNQ2YN2G<|-AZ6eKYYJcqs
zuona{NkAyKxmOFDNTTN31FtTdxOlm0F4HnV`F2lb$56FTO0{GXkyIywhBaEmg8k!92vE89GdVV
z__OQl>;GnYdYUvp`TMP!-_-u*y);VpzgGmXPKHU<+ed=fz`($P-rnBdM*@7g%!3Ht
z)rohr;cq*D<65SRNmkEN^SAyjHj{N>Ey<961bqBu^ZESu(dPeC)c%hu;5Qe&2>7P$
zZ?66-tpJ-<(U}CBdC&-8l7LJhb3$x-hRi>sI1&uulp{rqk&~{5MT-=||wV0^jQTB-2N$
zSG^#Bxh=vph0N^{*3rNm6^I-ZPCs)3ZPvkyx-?I>2Q{_Y?WP;kwCTyTA)uSu-uyfL
zcl*k(lK02U5x_L1Oh8**qXc|&f^3cs^ruM{lRNf;sqO7r-vqvv>Ej0htRyh!
z1Xi=i1isz;F-hQ8o!S>-joWg!5r9B#jsoVN=6^FazqZ|P6^kEsx4AZ8T`04fN7lbv
z!S6?18W#dV&FmyFHM`ZjV>fp^F?;+bfH^0ynm1PS$V!kpw*Mi_XWNe#2Qc+l0&XO*
znmKk;$(|y}54Mwbegt2uOTg+4vV+|o=D95VB!Jzfw`+TA*;`Q$
z&xIFcs4W4j3)4CpP{#IuYZvB}!FB*I0KP9>+4Pw@k-_&yZ3h8-Z&Xk~AOWrf0s?R)
z6~t>v2?PXa$!-lA#g#xn0IsBhcr7V`fB-GotwE!>5(o&ul~fR~B_$9Lpe4ICXcSih
z0Rgy@3gWe-1OfuIWVZ&5;z}SO09R5$yq1(eK!BF))}T>b3H*P9eFm_asYPV~0000<
KMNUMnLSTXmK^lAj
literal 0
HcmV?d00001
diff --git a/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/Kiutaku.kt b/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/Kiutaku.kt
new file mode 100644
index 000000000..8a8d0fd04
--- /dev/null
+++ b/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/Kiutaku.kt
@@ -0,0 +1,127 @@
+package eu.kanade.tachiyomi.extension.en.kiutaku
+
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.asObservableSuccess
+import eu.kanade.tachiyomi.network.interceptor.rateLimitHost
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.MangasPage
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.source.model.UpdateStrategy
+import eu.kanade.tachiyomi.source.online.ParsedHttpSource
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import rx.Observable
+
+class Kiutaku : ParsedHttpSource() {
+
+ override val name = "Kiutaku"
+
+ override val baseUrl = "https://kiutaku.com"
+
+ override val lang = "en"
+
+ override val supportsLatest = true
+
+ override val client by lazy {
+ network.client.newBuilder()
+ .rateLimitHost(baseUrl.toHttpUrl(), 2)
+ .build()
+ }
+
+ // ============================== Popular ===============================
+ private fun getPage(page: Int) = (page - 1) * 20
+
+ override fun popularMangaRequest(page: Int) = GET("$baseUrl/hot?start=${getPage(page)}", headers)
+
+ override fun popularMangaSelector() = "div.blog > div.items-row"
+
+ override fun popularMangaFromElement(element: Element) = SManga.create().apply {
+ setUrlWithoutDomain(element.selectFirst("a.item-link")!!.attr("href"))
+ thumbnail_url = element.selectFirst("img")?.attr("src")
+ title = element.selectFirst("h2")?.text() ?: "Cosplay"
+ }
+
+ override fun popularMangaNextPageSelector() = "nav > a.pagination-next:not([disabled])"
+
+ // =============================== Latest ===============================
+ override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/?start=${getPage(page)}", headers)
+
+ override fun latestUpdatesSelector() = popularMangaSelector()
+
+ override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
+
+ override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
+
+ // =============================== Search ===============================
+ override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable {
+ return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler
+ val id = query.removePrefix(PREFIX_SEARCH)
+ client.newCall(GET("$baseUrl/$id"))
+ .asObservableSuccess()
+ .map(::searchMangaByIdParse)
+ } else {
+ super.fetchSearchManga(page, query, filters)
+ }
+ }
+
+ private fun searchMangaByIdParse(response: Response): MangasPage {
+ val details = mangaDetailsParse(response.use { it.asJsoup() })
+ return MangasPage(listOf(details), false)
+ }
+
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ return GET("$baseUrl/?search=$query&start=${getPage(page)}", headers)
+ }
+
+ override fun searchMangaSelector() = popularMangaSelector()
+
+ override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
+
+ override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
+
+ // =========================== Manga Details ============================
+ override fun mangaDetailsParse(document: Document) = SManga.create().apply {
+ status = SManga.COMPLETED
+ update_strategy = UpdateStrategy.ONLY_FETCH_ONCE
+ title = document.selectFirst("div.article-header")?.text() ?: "Cosplay"
+ genre = document.selectFirst("div.article-tags")
+ ?.select("a.tag > span")
+ ?.eachText()
+ ?.joinToString { it.trimStart('#') }
+ }
+
+ // ============================== Chapters ==============================
+ // Fix chapter order
+ override fun chapterListParse(response: Response) =
+ super.chapterListParse(response).reversed()
+
+ override fun chapterListSelector() = "nav.pagination:first-of-type a"
+
+ override fun chapterFromElement(element: Element) = SChapter.create().apply {
+ setUrlWithoutDomain(element.attr("href"))
+ val text = element.text()
+ name = "Page $text"
+ chapter_number = text.toFloatOrNull() ?: 1F
+ }
+
+ // =============================== Pages ================================
+ override fun pageListParse(document: Document): List {
+ return document.select("div.article-fulltext img[src]").mapIndexed { index, item ->
+ Page(index, "", item.attr("src"))
+ }
+ }
+
+ override fun imageUrlParse(document: Document): String {
+ throw UnsupportedOperationException("Not used.")
+ }
+
+ companion object {
+ const val PREFIX_SEARCH = "id:"
+ }
+}
diff --git a/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/KiutakuUrlActivity.kt b/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/KiutakuUrlActivity.kt
new file mode 100644
index 000000000..efd630127
--- /dev/null
+++ b/src/en/kiutaku/src/eu/kanade/tachiyomi/extension/en/kiutaku/KiutakuUrlActivity.kt
@@ -0,0 +1,41 @@
+package eu.kanade.tachiyomi.extension.en.kiutaku
+
+import android.app.Activity
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import kotlin.system.exitProcess
+
+/**
+ * Springboard that accepts https://kiutaku.com/- intents
+ * and redirects them to the main Tachiyomi process.
+ */
+class KiutakuUrlActivity : Activity() {
+
+ private val tag = javaClass.simpleName
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val pathSegments = intent?.data?.pathSegments
+ if (pathSegments != null && pathSegments.isNotEmpty()) {
+ val id = pathSegments.first()
+ val mainIntent = Intent().apply {
+ action = "eu.kanade.tachiyomi.SEARCH"
+ putExtra("query", "${Kiutaku.PREFIX_SEARCH}$id")
+ putExtra("filter", packageName)
+ }
+
+ try {
+ startActivity(mainIntent)
+ } catch (e: ActivityNotFoundException) {
+ Log.e(tag, e.toString())
+ }
+ } else {
+ Log.e(tag, "could not parse uri from intent $intent")
+ }
+
+ finish()
+ exitProcess(0)
+ }
+}