From bc1dd0e9e84308150001392e59def943af141453 Mon Sep 17 00:00:00 2001
From: twistedroutes <garreth.jeremiah@gmail.com>
Date: Mon, 21 Dec 2015 22:12:43 -0500
Subject: [PATCH] Added Bitsoup tracker.  For multi-category searches will
 perform multiple searches as the tracker search didn't support multiple
 categories.  Recommend to the user to search for "all" instead.  Consider
 changing this approach later.

---
 src/Jackett/Content/logos/bitsoup.png | Bin 0 -> 9481 bytes
 src/Jackett/Indexers/BitSoup.cs       | 245 ++++++++++++++++++++++++++
 src/Jackett/Jackett.csproj            |   2 +
 3 files changed, 247 insertions(+)
 create mode 100644 src/Jackett/Content/logos/bitsoup.png
 create mode 100644 src/Jackett/Indexers/BitSoup.cs

diff --git a/src/Jackett/Content/logos/bitsoup.png b/src/Jackett/Content/logos/bitsoup.png
new file mode 100644
index 0000000000000000000000000000000000000000..65c0459e16a2347b5af52d88523a7536e7e1b2d1
GIT binary patch
literal 9481
zcmeAS@N?(olHy`uVBq!ia0y~yU|7Mxz+l6{#K6E%doOJp0|NtNage(c!@6@aFBupZ
zSkfJR9T^xl_H+M9WMyDr;4JWnEM{QfI}E~%$MaXDFfgdh^K@|xsfc?T%^ngGzI~r(
zU6L!SYggBoa}1ZO<(C;68}KkYPmf!|qp-J}Q7~X*gJ^&tqbT>cI3aJ7vVe_8?k(DQ
z)a?D49>W%uJ@RLxv(M~)9ew}S_cz7oZ~m_PJ*U`xnt+V+rIH2zuPi!te=9%N^twOd
zKir>RN^#(j37zclQ~0|%TY^Ko{pWb*bx-!!Y};?hP=9m3eSKnsK*g>9!VG&E=Uj9V
z-%!)oyPWUEhyPpxlTQ3GXI#p{{XzcrR9y}x=Dx)ncjTG%d9ci5Y)~<1c-?RNe?Nnh
zVC;WY1xAL(NDih8K`Tw9w$zje#x`CuP>B>1={puYcjJOrFBcU5x6_KgyXaB>x_V^=
zlh)7rj5B+cHa9-$D==Yt!j_`E`FEw|0)?Ep1`9oR>dZSK=-S5ou<^$J@&s-71qHGb
zQ$##1r)+w<_<KCNf(^g(!&)Q$M^Zwo4HvLV{EhxM=_*?r7mr@R>1(Y4hQ-U4DtqmG
z;hDqJ${mxX-*m!g<A&4G`(#^HtrR@<EUZq%zYMiI$2w{837KdM$45_D4_|8J&2oJ!
zYZ1PGTL1RH(f|A_1+Gt!ICSaGKiLBpemLk>TWBh%T~*h(Bk1co!9s#7{;g~9&je`$
z!|mL&@4l0tnUL6Da?tpo_Kz2?lPkY@WF6R2u+e{lu$!ulsLk((AM526WSmzd3jDno
zcK=&`$m8VS?Bdh(T!MD^S+Gg@NAB95e(1<a4<Uj6_NCg^2^mZ*6La$tgRj=wnJhkZ
zgzH&TGGk_8iK1A=%RCRG^EXeXzFjD%oa}9JP&9|(f#8F;=11Qb|1JAH{o8a#j^icQ
zH6HxG@+scAWznaHEYnVge4hFHU3Fz;q_uEBioza&p3a5bjUR%2&%XY4@00hLV6Ogj
zroDwe{2vtB^bEE(KEI;J?W47!ARv#;W5b=sSIo<Q$j%pB?#6Ivchx`d147IzAE=xY
z;covD*)8pFvvtdsHsPBNArB52xESaN_a4->`B?R=>#W-`v2zvSCM!5Uh+Jm&dy-Vx
za?P77THBjl<m%Jy%Rj8S&;Gxm|8niah7UO>r?WEM=04BVCVoy-;*<=>DYvEE9vupw
zbrK?G<~y8~bS-h3wNh5d@0qo*g@+Kge;Sv|qi4<L(@NgV&B;pSRbQOp^ns&Ik7;Yr
z&ZN_aa?_9ZnU@^7AgCgjaeTMd^PoPSdm_<IX-rpDEm9X3ee3^Nv#^0f=A}5xqDgx{
z%4o{ToOvJ-7RoS>_txIdnEZsr8A|LXbKR75_pXR2`_Q&=rRwCzZORvO-#jS$c0x0F
zP46-3zKhpdl?zyec)imsAKmySvFyU#;?Vg@CRT~7c$wOgn;fT1D&9M_c%{}EDaWr<
zPQ{$aOVE43RLslqrkmO2$*-D7g#v~peidb*XJbCReCP9sIk&;dOZ+<f;SU9hMO%;i
zzOeY3ak!s9_NL5X&uMIK%S6m;9JqA%xrj~HpW3oB$~vN7a&dlI=J}`GYjfZ3*54af
z`z_pEeaBYrz@2Z6k0v;nUhwfRt}e-rR-bhwNcR_iaqY_nkDC4Z+%EI<=RM{PTexuM
z<z2GXwo4qt3Zz!BDTOa9+37V=q;X!Sv#V?C!iQ7x{}~5~oy@nNy#Hz4x3<?e-`1{_
z4Zm!5=gf^N{r!pMUCNgde{jgAtN%FH?LRHg((2-gD~!(WO;7ojJpCzDX~c5%?ls1H
zg+C^lC|uz?%M{9LCVjz9VTrz=faintoC>QKnEkq6m-912`0k&BtB-F|;h1&el;G7p
z&z*dVmQ56uVK=Lp$8&{c(!0i`JESC{9VUc5UA2Sx`|~yXBd**GzEG&QezW@e$4UQo
zakswK6U*5#r~bq9TaQ=^laKjq*<9Y&>us>9!BWstVw!s6bMJ!BTaRv-$>VnW=5kHe
zt7_XkSdQ|Z6%gKGG-<Ycq`-&$$9`VC=HnpZcwsv0CWQ$nz8~MbH?V}?dW-hdbGNEO
z1NT;JovAD1`T5AErFt%M^IV!2JWTa|%x61i_sgK0&+Zk8p4wH_#h4$os3h6{<*$2(
znE9VyUFX@pPbx7dEtT`Il7^EG_nde8(hQtpl1`l}elK47?&AC;&ci#ERyeI$Eiy$`
zvPDrw;;J}%$16ME&yGKNvu5k?urVdX?iCEVn35gh;^Xw(^k|oFdqBh@-L~$f8)5}4
zEUy0h^7-34@6c%d(9-x-e-gfEMP6NWWZP-eyL+$N+r)~_db8H}-VAktnTI_j!r!mF
z_Tg1!_w_loyMI2JTliT0)<Vg1E_NCm0R<w72B9LC?6>KQIQ$4W%f42Aimu$kl#3=p
z_6&z7?V51sOHc0QO<dtI0VVS*9g=q_U9jM2`W6$p>37uMd#k(4<8yD^-JWs&Dx2!B
zy3N1E-oA_8@jdJDIqk33zn{&mxw6psV8*7EbG7|fWG7s@a_wr(v%hVxxkRMWpLH<H
zPts^ppSV0^?jydC|IRt_8Vak@cc?WiYr6HKesznxM5v6PsQZct&RNSZE!)v9_=8bn
z+H~Q@<@q@`FKtb~8F{o(`u$p+wLUt_?uE(RDlffxFncv$T=dFEq3t1mqPZPTFPtC6
z_y0=Ok854Q{kQkOkIsLXV3@k<>Bf83tNs7)dbUW(#6)Jw6y|BIDIFgjN<Zv7a7Akc
zZ>fRT?)WEJU$&bH3!F6$Dpm|Mx@z2{GpFt055<^N5&i)7SJUMfZ#7CdR4er8&dM}7
zT5|TB@anR;%%^Ls`~u!jmOY-o&bBQ3?8fL^_xyD~|2@+Z4U_-5^68bo=T5KRb~oUS
zO>zC_bH-=a?tT?je)gq}iT^xttHeV~p1zH~9ussXdQ(-)x`n!3Y|Fa}Z0a{vcWk<4
zqdetfhw=%zhZ=qi2X!4n`vhNE?ALK9SufGc%Dh3P?U|_WgP)Zhsz*0Jn;gNE&2qL?
zO|kQk#;WOlh5W}qGe0yb=N9jpyZH01b-7XT*=z4@`tatkul=1@R+Xz?Us>C0f9FoY
zpS0)w<-4lqzuU9k;?}mk2YtPyS1)fqwm5TLPV@}h6`}=#ohIDg-qF#!@BLo?l}9al
z*MvEqOftu(^K6qj@6qMX;wZtSTpeL8Y$3Pr(-RSuneJbEnDjq7uZR~>*kuxyd~m|C
zOM8+sCTVOq6eDpjCH&x|ySAm${zsplf7Z1pL1Gv4JofZo2|pVp`p&d!nY2!v^T31S
zSK9TD=e+y*=Iq|R`?=hMSn+pn|G&J+KV44NM}KnmYYEOH?`&<ur|IMdX^5~Gi5djV
zeSR$Z!j2_dHq|UTxa6eTGc`U7cP8<ZlaeYJ3zluSoz{K8*rs;5>h&#aetvv-#*)`e
zLoHCk=_AMDO1H-E98R(Vd)k<jejUj+lDJn`vOYp9A~(;GW7+ndwps>8bq6mV=RU73
zRTe+<@)kQK!{&2h5eGQb`do~~rRE)B(VDkw&-Yi4A5VWLySL>1iK)Nc=kIwReJxI2
zMz~_-cdZGLkDfl3ejqI<tjf#r<KK_K3qtefeED(mu<h@1cK4Rvi?Z(@G?{L2khr}_
zRzM}(eEmz~Pg%3f*V-(PxVl;+E23NR!T}eFZ9Nafc=##=<PKLS+?d7Rq3L~rWkX1S
z^xr(;nRc8G)w5LEG`J2I{(V@|xs&_uol}Ok`)g|FCtd8ko|_(*`|G3U?R&+WrNe)*
zwpwY2|GBPS&3EtT(?h+-)7RPm`ndK{o>!bu#94=gg1xoB#XhW#kGHG+6ms{|zrVMi
z>&G!Et18$2JLJ0fc(3|I4^7FRy{paF+Lx_<eCGAD%kRVE!gTHw%+UT|VA5>);HO6$
z%ki(uJKGx%G`!N8f24on>WlZU`8eq8SLtnAKj)=3yZ&^wPBwk1(_h^UY-BlXoVmpx
zuUz)F+JE~ujahy6vDL3`PUFt6+p|1kYod9?N9*tTb$?#>R_~7q(}+90?C1PnA5|`V
zy}SE+{(Z)~_xIKRfA{zIcde86o81_e{#(V}Rv>9z_GaU3{cqp*-Y)ug{o3UHYwW)B
z{h2jiPT0C;&B9h=QMV_`5<&uO9Bo`>6&tE*o-!x@6Jpr-H`qjG9Yfto9mxsyd^J9T
zEQ%V_whKpQ^rrM&Gwtf=eQ#Hn`+4d1*M9#uZT)_<>00k%_r5o;;{LCGl)hoZ(S3`m
zzrSa8ZM^orZg)u4|GX978^qVgHFim^TswK*%<p$)kG2_~-yT;{y5oIn;L|xLgLS|7
zB$i2t%@Fb7Wm?d{Z}r|nK!}5<#a!WmK9hj8!dLIc)$v@X%{%pa)vH~SDjPX=9g#ae
zH{+E_T)kIR*uRhMUAEWnuf0|E;&y)f=hm79OHD5PKG@uTpyKm0-U|_1ui1O><(RJ4
zzmR_XoUFqS!^dA=@*KOkyDOPrbnb1wLo##SU;CPtD>Zf=D6xoBIH^2IuQzyYQNToI
z<v&df8=H+R93|(UY2MLxBu2F1@5HNZw~lh2Vri37$oOz6^HRkmca}Ec2QG!%oi4fi
z8Wa|k+}n|R|K;uV$9rXkrDPRFcF(u158Qd};JS6UZd|>d9l)A@kKwBQo&RN#H?0?a
z)Od0G;^DU5TVL;<Ja9n4!~6CLuDs?n%U~OWg#7OvOBx^F(Vr<h;TWe+IP2t-yyqAK
z*uNP*=#O0SwtgCWA#bN5Uq>|afiTD1FX^gN8q=84*wc2fE!)g=>BT<Hl1QO0`9~g;
znXdNc22MWvRySwvfk}J+yqK#!o4J;?_VZdXrq-VeRyj?aGEwdG=l)sq7VNA2_U347
zad_E#yA8Fc_X!{OKdOF0@rAarcXqM2w6U?Vv~+ay$uz59!C!rIeBWHW7NOVkuJ;Ms
z<(el6Sz!rM9Lx{4AGmb2aFuXi@`1H%Opn^0WH41|eKEJVyvg$5%>xYUB@XkuZe$iT
z@wb@h{k*GkUSr8Vl`OY;HoL1{wlVkKJ${?-i_D&X|1R{J|6aGxvhuNOa&UHPY45aY
zVnVGf^Gh6Fn!a6qbyEC}64jMyk%@P=><K&n<>;X&KW!W}&K)@M<if<mzuYEg>g1*7
z{=HfKzW-j;?xO22m#tNwwQc^Xl@SwW#Lt}*?f2Nz<=#QP2(?K^iWhoLc#|Na-y=HZ
zDCfCHtDHjJ@7=!;!SJxylyOgh>J_%~SwW@O7wAk1mznhJ<oEt_Q8y+U)z?-&zqsnI
zy{^Tl;=?Du`-+Ray)MF@uU!`RYwP1Tt975x&;RrB<U4Nu@~?K*6;F@;{GBhiFYwH&
zm4BnMXRJGTWWk09Z<^*Dnlwpv_jcX*oieBP1{p+OskB|XHJoq5L$_zQ<Ujl9u3heD
zn)~{N)!%@P>%X7;_PKxi-0F=V-+cZiUmscjYr3hr+`3;6pC4PSFZS=lwwmvEUpaqI
zUuQdKb4G69*P3;+IckbEPK&%)>-ErCtllT!GQ-EipG_I}d|;}pVC0urSh;6H%&vN=
z=oik)f^*-zwQYLb^QLeKL*<P(-yU84y?NF*vGw-i+UFG%=Ele*s_+z@Jtus7okrQ$
zy?1Z^P6|JNS-JLnUrc4)t8=$6*Otp9p4%n-#pjIfZnLu0;eR^ciLLmNccW>O>~`Z>
z=Z~2(&gr{dWZ$i-no(=}r_*WU|4W-=#pmbP)^C6Pr}>;Q|Mhu4Dxa<t_kDhEz1{b;
zlMkyuZ=bU^YNxWrQkMt9PKn*Q8)LRaOIXz2NVwSk^wXiwzm|S(XEEh<_~GQsBw#mR
zbjo2N5A{eZf6f(uyn<3yd$w*VGier7k5*QTw0P;eNy6T-ei3tJOa9&Ka!cF3Bt#ca
zzSTCZY39~yzb|roKmKxfKlyNYTuk+{51+rXFRy!hr)t6X*W1@;WxuLjy3ixq`t&DT
zk$lH9JqLR2m%M#<_T`(iH!9Tc>NZ$9W&gNa-eo&I?#=7!jsK@TIw5=Xp11xs+5NNP
zH|tnvH7ZZ>*}B1aW0T~p!#;CYl(7g-dh0LX8nEZl%zrB%ggk0xyxMq=+2~S$L*7JH
zsph2Z9ZGQ#b|<~hrEWa-Gqg~6bze<=%9{Ug3ZE4uYp1(U;y57pJ}vdJ!NJuU+t&TP
zx%jr&!(!gKnTLG>g)jbjD6pmUd87M!(d%_#GOu>>hnzoiy6*Qc+cS*z_cG?_v_|dM
zPr7=vr8hjuYW=C(`YjgX<u^p-*2D+wczjA`o&M)+4kr7b{9kP{Vr~k~p7V^w-OtcW
zcHvs{qCZm#C$HgM8}LleWWy2Jlkd)z<g-{a9G%_vy<_3YpcrQ3or;xzI+V71G%$K*
zYA85{tW?<b<}zrkAfk7L(1yGZk1TB1*2-Tu@(VL9KEL+Bo}a-tE`KRG7HPG}_w7cp
zb0W3H%P-DbYB{&|Z2Nn6v9r>X_wml%bx3pHL4{?RtKNNBc9dJ{`Psa@yp0>SNEk+4
zKXY@%&yY{s;*GZ7^S@UTe6Q3tF*m;G^v)LF@IxPZt^ZzoU%lqW?izQg#xB|AYyWyI
zyixPzj*4@wG`Baq`i_M=7q>D?xhn{By6AK!wm;svp(gf4T*@?t#-&CXJnJrWpZdJ)
z*9psor?##;<=VUd{1@X&f$IShLdT|L3oP<Fc<EqQQisHpz#ld3El)LLw=)$#f5CPo
z^4GIlp6L>|cf5G@V%E$VFIBe&C#Sof&zUK(x5VYgrwcppmcO&T#v8Zdu&2S3V||a7
zzg+BUz!D}mcmKb*L%XCqPw(dz7F9Fc%>A>~@};Ov!MgJMo%;FQLg}oRKTkU2DtByK
zh4A7|`<NHbmX@z(-k5cX`M|VydLmJ`Z%A7NzFn%B))%pI`Vr3ai5D}=BHAP)b6(5Y
zOCH?Nyzpd+-c{pS!eJ-+HP}{hC!cCDG-hA6EV035<J4Kqjy{&=TNspklom{MTln?J
zm#3oD?|!GBxx$<O<$Qe47yqBv^8ZOpnegP1fok^d%!G;VITQ09?aF^-zJcpj*7y5f
znrnJ>Vx@xi1WYhIud*Y`J|plq>(6bMdo8;k9jm_HD>hZ-`Sl2|&%A%d)Kqr|3mGe1
zpSk41r%kJ>%qzc!FAAy+ywx)Ce#C={$A_hrxL&ItGx6PY+&9UmS>4P<+`O+NV_TVG
z#Ee-|zr$ZuJ!zY2-Y%kV`0?CNH>2AUXBS?UOeqxM=a63-5-SpIs$lBNtkSjm5(~#v
z8*hnd#uoSPMJreiwX9$(tP8&VGXAFFO~uIKzPo{UDt>+YH+Oe1bNcLp#cFIJ%9n5V
z-TyaLWBqTd6wfbzVg+Tdhs*D~SoA6K^~>kC_5T!oe|TQNY-Ps1p1$IhyB6*0eAIL(
zH=KFbySqPLsyzubocdtpQ4infefov3ZSP;pKAT=&`S}y4l7;_q+v^iFHuq=0+3};O
z>S>YemI|5pyxCi_&MUJT=S?$gOBOH^e>Q#c_Rq_9JkC4!?)G!}eU>#3E`;AJ=H-av
zv1)!aozt(%F{f2yU6Di6EVdK2iQB6GyzzhT7~}l3<>sLsk$XNUZPA$JyIiXE`sd;>
z+5KO*%c|b~Xt*_@hqY3hFUR8JkDF_yCu}H*DH1ozJlbQb{&VN)1v^S3zrOyw?f;Pu
zz4EEo1DA&fPk#Q`iA%xr?$OoHyJqd)CnU;#<!!?H9lkR+9tje#-}qv}Hh<OCNz1EW
z>!w|_N^uc2D$LCIY<aZ0RWAKk%b~+&g2l|&W4Kr6NxoE?bD(pZcaGofg4XFltCi!I
zpY=>zyTdcO;+p5aLwQlHx%c{J{+5%uwe_uiUGYa2CQpGQoVp@MLUtSv|6kfS|9ta~
zwnGyxUE;X1L;Xs}qg9m;k7j&-xz6NO%Zb*7M}7Bhj}v<ItZ!yzqRTf&-R*m3O_Q~^
z4L4Bca!Y+vrk^)^`+qg#&5T`d*Tn2w{QAh|kDI*KE(*SNbos&$*Ai#`Ua&wkeEnT6
z?fe-Ux+m||#NONRI{G}<+)0xcpFU^7E;i-;j;R5=D|fhmT+#IS@Zsngou$R!|7=;Z
z^6Tm+Z<ictUAp`Ia^0I|m-_6wX1kouj4t`GPoenWi#vaNmarO1=LtJ=^CnGumHJNN
zxaXtuzyICY+FrKt^Va~T@J4ZEgKqgqEv7^KJ^`B<I-eFF{bV`+AgCSbb=Y>}H2KKB
z(*9)Qj9&{sGp)LAU$L@aUYOOkCrc6!{!46KzNc91@0SO@KB1>Me(rkls!un4zR_l>
z1rMezjdicex1VjZ)^GWnIb|Oft$P={^QyOETH5)q?0*)0>ulUS>)V~Tx5`AiBJEfH
znDFh()_F5~=ceCJaPm4nW$v7y4b?GMk7{0ebF*4b&ZbIe*0wpuixVGrs;hQ~^_3*_
zK03vGI_%x+%9DPp|66S`U0E1jSUx}T!kdjxpO<v|^?KiZ6uBww=EL0wD>wJvc@kq@
z-sEzwU!$;p{omg{_LJEQc^efAFU1sI+H?MaV~q2YCzbCyOaHtuT4T}ZyZDvwZ0Y!`
zpPuz9+0^q**;MZ1dj2|NcbfUO`;|*4q+Y2N-fy_R@bt^<^D|c#FMM!y_P4n^e?C~+
z=l*ZSs(ps@T9>c4um1H#)5Smb-mZIUi_$i!q~Cw}Tl)L_MwQJmwTslML_If2_kZ8(
zu`;i9*;<L%%1G_s0?JDD_n*c~-`>4{-oCggQTyL7Q%XJe%1~zKHutzUZ@%4Q=W;t`
zqp{7l{^q?{^>@}s!}{0lSrlK#^lA3=TRXDfo=pGqW#==+twAgKqeKq#>Wisf;hFX_
z{iDJ<MFSPTdHS9+|DUw!$o6<MbJ3>B&p4B`3g;D>O<klO-_4;N{;%=rSMC2xl7i>w
zR2DvNPJb`jRX!p5Vg01t+2QYZ{0(vRo3nK4#`MI)pW;QjX0>)N_b4jLo-Jovy}#`8
zyoU=<E6o3Oa^B6>tGwxTVLC5gwArlYo4dQsH*1c9?#`nBPZvLb|0ydh;^&gC<j?zd
zfBJK@`}>UtcMMb0H5OX-$7}sscYgz~R%%77?5;mQraC3+_%u8+yRyc1+xG7pAAgC`
zNH9EOe^)v8;56awyZP>4;G320!M()rC(HQ?KbMW{5fRPLeuKTn<C&&2Wr@zO61gL$
zA@eqJ98u|++xpq-(PoK+)$)QDL+)>K{ObQ^fBc*do41Q5M{ShNz5DxsuD4yW&ret8
z{+{sjjbG%~moI)9xHvmcxOww|v&B#6KfW*J`AO~6^_;ywVkX=)P%56EpEGOK@=r{=
znzFC$Q4MfuuRE&gVUzv)pnTkFse`ONr&d`;Y2IG2Ve4Ay@AG#3jPjqdtt9vR=XlZk
zcPpy@eX~w4oD_J}lUbzyot8qCYN7Hen<t;yPJbz`0M*~0ymBWjF{=SjkJLMyati#D
zGs%CKgTf_O&fYA2$42kkN1u0X&%Imy;KQG%xn`4=Jp82VCYtWf^i+szd(PdZkFC9z
zKYBFd&*Ec`zPNhN+AeRuc}wo%g$AWHCpUf!75}R8lbug4?$Vt!y^}JbpAK6T&NES%
zBOLl;{v__jkFF{I2{zBYTlw$I$-BS#x+kw{|9xIMzA&(Va!y2T+-+t1^?66{H6J&B
zYo*hnD<!wbW%ny1ku5cc=Lwg~?KSzRJuy{3>vr+74GT}-(#|dU_x+crY=y}!zSB!j
zUAnVK`v99+#Xd;qbb?9kMw8r+%ReiuQ`~rp!EmSgnZ$Ong^_U*J5E3OG0m{}UC%lD
zU!f(pw@-Y~oY!3D+8>uYzcqV8-Vvj>f0C7zXMcTm@5;dn$&h)h@{ETcS+}>F^7rRT
zhZdbvNdKPkj%RP=-uo@<W#snfeL3^FYO3vI*}_ksj%pf<`%jtbzhaNYsxN2im7=#U
zir%s)toNL)P1&{3?h`u=Hfsi7GV58j&r&OQdDxAv#DpzP$;r>}nSMKU?NR#spa0%m
zPCtJ(NvzNJ?X|9`wX<(53$9E&v}T^>IT0DQ*Jt>W*q(Ac&N}e!>-L#-YW$C+xSTKb
zES=Su+OXG1tb6k7oq<m)GB*iNO3BL1mWx{+Tv%6=%KyW4x$)~ojz=ZA>#nH0P2Bd*
zP&oZN@A@6frf)r6x9VR=S4q;%l^dt-P1e$T5jICQ{DW+y%#?Yt3+C>LtiG0dxXYOB
zsrs>-6OY!EeP(q%JZ*AS)P$84ZH`YZ=XP=5N)>mT`n_-6i^3WEUfAEysO0z&&o7-l
z?NU}iX`av5sT)PbziOY4VxRh||4-G96;DdeZ!OQiFXevab@)6<<IjuYj!G_Gq%6GF
z&_d;o*m3nL)gmP?+exqX9yl#KV?i3@r*lyc=WhLD3`)0>2{To4H)<@LW~wWHkhkzD
zmyGV&Wf6yU?j#-Ct$J%$>+D%kw<2fmUf^jq?b$C2PV1%DPTaY8ll9ypf#tIzgchCh
zY4S>_lT3E&vnh$+_<oy`fq{f*T+VS`Lv!Qpo44?AeaN@@xTwbSxks*Sy7g>LwQ1At
z1Voffof|)m`?R&KE^qTu$r%<Ax2+H7tUYt#&B=EsmmQk1l25{hDQ(62<*Ktcryh@M
zebl?}zfOCDjj`hz$;0<A-8ppeBB$Ro<sT2vJg`ZuS*x=3V?87n3P^C=U*Z|@aO%dG
zIh!WPN4tJL-?Ec!=Y+ck7Dk68pXKDAUJ{g`(WE*j?Tw53#2Y3;jUA4P8&Z<1pVluf
zba<fts?T)J0_(gr>()<yen(zp?(sZ6d9$27?^vXx*@LB*dv3dNF<I@(+ud)~&tEq!
zGien(xH&^bC@(+PGBUsJ_`P@5U7EpX&j#jjo1AAnedxhS5Ak&I8MadXn~DoI8JNzT
zv9<Qjma6E;b3ZOkZkxP((ghB!);BFmk&7w|@;I*Q-_>2l#qxgYPM@zu>`RtKHl$c;
zn{wIRJbQ2E>7&L{caqXBHWwAh75bfFu-<f}O<|K_#Q}+Z9Oq27M9<)^p2h5&=0DZy
zQffh&LX+&1BVUS_RNa2i`YY_lh7&J0`)NBVEqg6x9g+C+TZ;b&g`Ri0IqkZyErjM7
z-)4FD>c|AkOSQS4LJFJb&Fl`)$$b^t;&vqJ;Zcq41q|w83v7>`ZhMf|Dk>47bh2Vj
z;hChjv*x>n#hGeY=Ora|DQ@<8xK4p#k42y03}z;=^ARjf?3z3tUd)UqKZX5#vi4t!
z+!0fiZzp5dZcE*{x~3?sY0?*;SRIcQk6or1GZkxYGMQA)6=~KiHsR=;umfD$Nq(o7
zv!@0BG0ONC*|WgL&0xn_#nYDx-fc|dD0|k_*J^!UYUaU&63H+T*J(?G{u&+N_?Gg%
zW7pSviXZjv7%Vd3Gzm&s8POkMVeN7J$j+>z&$>$0&pgz*z;|p3`_rb6o|jVQRO~WV
z7im|YdGN#Jr0KrX)^9wpyKv^0lYJpu6ec~IeXLJIT<uEbxd@&^YzMW2e?Z$Dor?GW
znAZKwwwnnW6TA8&;rZ5I&$j-0vSw16&Uc?&5!I{B&A}FX**19Comb9eyy16u@-yb>
zDF*H;^Iy*kc|UOv!v=*qGvg&3j-uy(zDwuoWi94a^LqMbgOFoPuR$W8d68O^eC&oC
z?TK$)zn)KPpU&|pn{h{=ac14jjPEZsWR^beYC1IeQZx4f<wY(Ab#rfj$tp{+)G)HJ
zX7E>-T&Te$<$54#Zih{e#x%hxugz+=rDrvp6ti+fOxrEx@~_<TpE9To!PAoe`E>qo
zaGZoWXNqt6`E2V?&5K&6bEiIC^XXjP#5B|D)O8cI_?L^le={{9^k+(Q>_XSln8s;h
zA1*OgFV%hOyFSrFDLXvZ?C6f*n#-0CQ{^<f4>VsoqgMX2rYa-TBTMtVdXs3FTF?5)
zDLU+WA1pOHR<lNT2<uxJS*kCsVs)JLOpiVO+37u-XYVx%t7s}#-_|BJf!Xf<n+~N9
z$#?ry9Jv?IJouBzz~fiY)F%rf98We~Uv(}c_y3!Jj-Zs(_NUwGZ?~0QGbkE<FZ@t`
znE!^>H|>n?+Bx6#--J}vvuFHFVAfy3>F1MMlc(x0<;8pExyzKD>iVBf#<I@)s+;kd
zB~{SeT*q*>4$o8n^&dSlKb*|{s{MjNpJ_^~LLHy>k{d!tW4C>7u?<!8ic&b6_f0qA
z_4NCCr=xXGMl5?H5XIBQDI*zjpXd69poKMZ8t#$zr2hZuKe+nP@7pr}1?7&Ivb6o_
zzRoJL9umxK93eO5BXd{WX7&oH^}5E&^my^#=<0-%RZC;9Fq)*fhc7=NTyRNp&WV|a
zj#S=@Ji8#nLH<BOVRw*}MN<8qbf$>E^CZ1%xo?H?modF<+>%#l>T*A4{(_DbEg^Y-
zVlK#w1UnQipTFs_)P|YOQH<_w(iSB`&pU#pLZ)71yO*p`F?CgiUD}oV|I$GtCK6m4
zHy0FY{G0qS{)Pj?hgOa)i7aU!mtE(2`ZYnFy=#><!}@Z*h#kHqkwWr+UU<bar37C)
z(w=_3@v6RGE{iqeJ@vcx`x=C!mCt4|T6;Nstg3HVRJzG&!<Xw7&HDTWr=G0&#Mqwd
zXq~|x_f<jug1s3pn@Gei%?&w^!EJ^@$%L;N4fgl`rTq~%^I+3p4Eg92{fx2XY|gZ&
z>%Z#XT<~T=Q+^`*g?rkoB}H1wziHk7vz2kFR{qUp3pVv8$gbEDujCVTpnpC4^QKP<
z4B6qfb`K`?GOEUEHHcpqU62*%|99behTrdv{`$xrF%@ZJI&J=6I$)b6Lr3_gxUdWF
zCU0kR2)nQ_M3y69pX<$qCBi$t>b{xsbo<XITNw|puh@I)cOr{|$^=Q97gO&loy_@k
zF7qp^ynt$~y!DC&Qm^6}HC7~Le>n5b|CwWqbCPKjL$l%UyL@kcE|;_~V+-I~9P>+h
z>S@6>k3Z@D{ay26+P`;i|F0?1oBHS9QE3O?2Gg}V-JAH8SNu$_Uusw}=YP6QM>dDe
d=HK-UvS9%WuUqYV#=yY9;OXk;vd$@?2>^sMYiR%g

literal 0
HcmV?d00001

diff --git a/src/Jackett/Indexers/BitSoup.cs b/src/Jackett/Indexers/BitSoup.cs
new file mode 100644
index 00000000..a0229f56
--- /dev/null
+++ b/src/Jackett/Indexers/BitSoup.cs
@@ -0,0 +1,245 @@
+using CsQuery;
+using Jackett.Models;
+using Jackett.Services;
+using Jackett.Utils;
+using Jackett.Utils.Clients;
+using Newtonsoft.Json.Linq;
+using NLog;
+using System;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Globalization;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
+using Jackett.Models.IndexerConfig;
+
+namespace Jackett.Indexers
+{
+    public class BitSoup : BaseIndexer, IIndexer
+    {
+        private string BrowseUrl { get { return SiteLink + "browse.php"; } }
+        private string LoginUrl { get { return SiteLink + "takelogin.php"; } }
+
+        new ConfigurationDataBasicLogin configData
+        {
+            get { return (ConfigurationDataBasicLogin)base.configData; }
+            set { base.configData = value; }
+        }
+
+        public BitSoup(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps)
+            : base(name: "BitSoup",
+                description: "SoupieBits",
+                link: "https://www.bitsoup.me/",
+                caps: TorznabUtil.CreateDefaultTorznabTVCaps(),
+                manager: i,
+                client: wc,
+                logger: l,
+                p: ps,
+                configData: new ConfigurationDataBasicLogin())
+        {
+
+            //AddCategoryMapping("624", TorznabCatType.Console);
+            //AddCategoryMapping("307", TorznabCatType.ConsoleNDS);
+            //AddCategoryMapping("308", TorznabCatType.ConsolePSP);
+            AddCategoryMapping("35", TorznabCatType.ConsoleWii);
+            //AddCategoryMapping("309", TorznabCatType.ConsoleXbox);
+            AddCategoryMapping("12", TorznabCatType.ConsoleXbox360);
+            //AddCategoryMapping("305", TorznabCatType.ConsoleWiiwareVC);
+            //AddCategoryMapping("309", TorznabCatType.ConsoleXBOX360DLC);
+            AddCategoryMapping("38", TorznabCatType.ConsolePS3);
+            //AddCategoryMapping("239", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("245", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("246", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("626", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("628", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("630", TorznabCatType.ConsoleOther);
+            //AddCategoryMapping("307", TorznabCatType.Console3DS);
+            //AddCategoryMapping("308", TorznabCatType.ConsolePSVita);
+            //AddCategoryMapping("307", TorznabCatType.ConsoleWiiU);
+            //AddCategoryMapping("309", TorznabCatType.ConsoleXboxOne);
+            //AddCategoryMapping("308", TorznabCatType.ConsolePS4);
+            //AddCategoryMapping("631", TorznabCatType.Movies);
+            //AddCategoryMapping("631", TorznabCatType.MoviesForeign);
+            //AddCategoryMapping("455", TorznabCatType.MoviesOther);
+            //AddCategoryMapping("633", TorznabCatType.MoviesOther);
+            AddCategoryMapping("19", TorznabCatType.MoviesSD);
+            AddCategoryMapping("41", TorznabCatType.MoviesHD);
+            AddCategoryMapping("17", TorznabCatType.Movies3D);
+            AddCategoryMapping("80", TorznabCatType.MoviesBluRay);
+            AddCategoryMapping("20", TorznabCatType.MoviesDVD);
+            //AddCategoryMapping("631", TorznabCatType.MoviesWEBDL);
+            AddCategoryMapping("6", TorznabCatType.Audio);
+            //AddCategoryMapping("623", TorznabCatType.AudioMP3);
+            AddCategoryMapping("29", TorznabCatType.AudioVideo);
+            //AddCategoryMapping("402", TorznabCatType.AudioVideo);
+            AddCategoryMapping("5", TorznabCatType.AudioAudiobook);
+            //AddCategoryMapping("1", TorznabCatType.AudioLossless);
+            //AddCategoryMapping("403", TorznabCatType.AudioOther);
+            //AddCategoryMapping("642", TorznabCatType.AudioOther);
+            //AddCategoryMapping("1", TorznabCatType.AudioForeign);
+            //AddCategoryMapping("233", TorznabCatType.PC);
+            //AddCategoryMapping("236", TorznabCatType.PC);
+            //AddCategoryMapping("1", TorznabCatType.PC0day);
+            AddCategoryMapping("1", TorznabCatType.PCISO);
+            //AddCategoryMapping("235", TorznabCatType.PCMac);
+            //AddCategoryMapping("627", TorznabCatType.PCPhoneOther);
+            AddCategoryMapping("21", TorznabCatType.PCGames);
+            AddCategoryMapping("4", TorznabCatType.PCGames);
+            //AddCategoryMapping("625", TorznabCatType.PCPhoneIOS);
+            //AddCategoryMapping("625", TorznabCatType.PCPhoneAndroid);
+            AddCategoryMapping("45", TorznabCatType.TV);
+            //AddCategoryMapping("433", TorznabCatType.TV);
+            //AddCategoryMapping("639", TorznabCatType.TVWEBDL);
+            //AddCategoryMapping("433", TorznabCatType.TVWEBDL);
+            //AddCategoryMapping("639", TorznabCatType.TVFOREIGN);
+            //AddCategoryMapping("433", TorznabCatType.TVFOREIGN);
+            AddCategoryMapping("7", TorznabCatType.TVSD);
+            AddCategoryMapping("49", TorznabCatType.TVSD);
+            AddCategoryMapping("42", TorznabCatType.TVHD);
+            //AddCategoryMapping("433", TorznabCatType.TVHD);
+            //AddCategoryMapping("635", TorznabCatType.TVOTHER);
+            //AddCategoryMapping("636", TorznabCatType.TVSport);
+            AddCategoryMapping("23", TorznabCatType.TVAnime);
+            //AddCategoryMapping("634", TorznabCatType.TVDocumentary);
+            AddCategoryMapping("9", TorznabCatType.XXX);
+            //AddCategoryMapping("1", TorznabCatType.XXXDVD);
+            //AddCategoryMapping("1", TorznabCatType.XXXWMV);
+            //AddCategoryMapping("1", TorznabCatType.XXXXviD);
+            //AddCategoryMapping("1", TorznabCatType.XXXx264);
+            //AddCategoryMapping("1", TorznabCatType.XXXOther);
+            //AddCategoryMapping("1", TorznabCatType.XXXImageset);
+            //AddCategoryMapping("1", TorznabCatType.XXXPacks);
+            //AddCategoryMapping("340", TorznabCatType.Other);
+            //AddCategoryMapping("342", TorznabCatType.Other);
+            //AddCategoryMapping("344", TorznabCatType.Other);
+            //AddCategoryMapping("391", TorznabCatType.Other);
+            //AddCategoryMapping("392", TorznabCatType.Other);
+            //AddCategoryMapping("393", TorznabCatType.Other);
+            //AddCategoryMapping("394", TorznabCatType.Other);
+            //AddCategoryMapping("234", TorznabCatType.Other);
+            //AddCategoryMapping("638", TorznabCatType.Other);
+            //AddCategoryMapping("629", TorznabCatType.Other);
+            //AddCategoryMapping("1", TorznabCatType.OtherMisc);
+            //AddCategoryMapping("1", TorznabCatType.OtherHashed);
+            //AddCategoryMapping("408", TorznabCatType.Books);
+            AddCategoryMapping("24", TorznabCatType.BooksEbook);
+            //AddCategoryMapping("406", TorznabCatType.BooksComics);
+            //AddCategoryMapping("407", TorznabCatType.BooksComics);
+            //AddCategoryMapping("409", TorznabCatType.BooksComics);
+            //AddCategoryMapping("410", TorznabCatType.BooksMagazines);
+            //AddCategoryMapping("1", TorznabCatType.BooksTechnical);
+            //AddCategoryMapping("1", TorznabCatType.BooksOther);
+            //AddCategoryMapping("1", TorznabCatType.BooksForeign);
+        }
+
+        public async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
+        {
+            configData.LoadValuesFromJson(configJson);
+            var pairs = new Dictionary<string, string> {
+                { "username", configData.Username.Value },
+                { "password", configData.Password.Value },
+                { "returnto", "/" },
+                { "login", "Log in!" }
+            };
+
+            var loginPage = await RequestStringWithCookies(SiteLink, string.Empty);
+
+            var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SiteLink, SiteLink, true);
+            await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () =>
+            {
+                CQ dom = result.Content;
+                var messageEl = dom["body > div"].First();
+                var errorMessage = messageEl.Text().Trim();
+                throw new ExceptionWithConfigData(errorMessage, configData);
+            });
+            return IndexerConfigurationStatus.RequiresTesting;
+        }
+
+        public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
+        {
+            var releases = new List<ReleaseInfo>();
+            var searchString = query.GetQueryString();
+            var searchUrl = BrowseUrl;
+            var trackerCats = MapTorznabCapsToTrackers(query);
+            var queryCollection = new NameValueCollection();
+
+            
+            
+            if (!string.IsNullOrWhiteSpace(searchString))
+            {
+                queryCollection.Add("search", searchString);
+                queryCollection.Add("incldead", "0");
+                queryCollection.Add("cat", "0");
+                // Tracker cannot search multi categories
+                // so we either search "all"
+                // or do multiple searches
+                if (trackerCats.Count == 0)
+                {
+                    searchUrl += "?" + queryCollection.GetQueryString();
+                    await ProcessPage(releases, searchUrl);
+                } else
+                {
+                    foreach (var cat in trackerCats)
+                    {
+                        queryCollection.Remove("cat");
+                        queryCollection.Add("cat", cat);
+                        searchUrl += "?" + queryCollection.GetQueryString();
+                        await ProcessPage(releases, searchUrl);
+                    }
+                }           
+                
+            }
+            else
+            {
+                queryCollection.Add("search", "");
+                queryCollection.Add("cat", "0");
+                searchUrl += "?" + queryCollection.GetQueryString();
+                await ProcessPage(releases, searchUrl);
+            }
+         
+            return releases;
+        }
+
+        private async Task ProcessPage(List<ReleaseInfo> releases, string searchUrl)
+        {
+            var response = await RequestStringWithCookiesAndRetry(searchUrl, null, BrowseUrl);
+            var results = response.Content;
+            try
+            {
+                CQ dom = results;
+
+                var rows = dom["table.koptekst tr"];
+                foreach (var row in rows.Skip(1))
+                {
+                    var release = new ReleaseInfo();
+
+                    release.Title = row.Cq().Find("td:eq(1) a").First().Text().Trim();
+
+                    release.Link = new Uri(SiteLink + row.Cq().Find("td:eq(1) a").First().Attr("href"));
+                    release.Description = release.Title;
+                    var cat = row.Cq().Find("td:eq(0) a").First().Attr("href").Substring(15);
+                    release.Category = MapTrackerCatToNewznab(cat);
+
+                    var added = row.Cq().Find("td:eq(7)").First().Text().Trim();
+                    release.PublishDate = DateTime.ParseExact(added, "yyyy-MM-ddH:mm:ss", CultureInfo.InvariantCulture);
+
+                    var sizeStr = row.Cq().Find("td:eq(8)").First().Text().Trim();
+                    release.Size = ReleaseInfo.GetBytes(sizeStr);
+
+                    release.Seeders = ParseUtil.CoerceInt(row.Cq().Find("td:eq(10)").First().Text().Trim());
+                    release.Peers = ParseUtil.CoerceInt(row.Cq().Find("td:eq(11)").First().Text().Trim()) + release.Seeders;
+
+                    releases.Add(release);
+                }
+            }
+            catch (Exception ex)
+            {
+                OnParseError(results, ex);
+            }
+        }
+    }
+}
diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj
index 4ed37bc9..ef02e8c3 100644
--- a/src/Jackett/Jackett.csproj
+++ b/src/Jackett/Jackett.csproj
@@ -187,6 +187,7 @@
     <Compile Include="Controllers\DownloadController.cs" />
     <Compile Include="Engine.cs" />
     <Compile Include="Indexers\AlphaRatio.cs" />
+    <Compile Include="Indexers\BitSoup.cs" />
     <Compile Include="Indexers\BlueTigers.cs" />
     <Compile Include="Indexers\EuTorrents.cs" />
     <Compile Include="Indexers\Avistaz.cs" />
@@ -438,6 +439,7 @@
     <Content Include="Content\logos\beyondhd.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="Content\logos\bitsoup.png" />
     <Content Include="Content\logos\bluetigers.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
-- 
GitLab