From b7d46eb9900554fd2005e0a2c2790f8ca21d3c6e Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 31 May 2026 00:27:09 +0000 Subject: [PATCH] Improve yEnc decoding performance using C-backed bytes methods Co-authored-by: xbmc4lyfe <273732874+xbmc4lyfe@users.noreply.github.com> --- __pycache__/verify_nzb.cpython-312.pyc | Bin 0 -> 51849 bytes tests/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 170 bytes .../test_verify_nzb.cpython-312.pyc | Bin 0 -> 43266 bytes verify_nzb.py | 45 +++++++++++++----- 4 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 __pycache__/verify_nzb.cpython-312.pyc create mode 100644 tests/__pycache__/__init__.cpython-312.pyc create mode 100644 tests/__pycache__/test_verify_nzb.cpython-312.pyc diff --git a/__pycache__/verify_nzb.cpython-312.pyc b/__pycache__/verify_nzb.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f6eb662f18917044610e076daaaf12be31a40b7 GIT binary patch literal 51849 zcmeFa3wRsXeJ47D_ZuJpf^QOhze!PV(UfF9L`sxI*_Ld_l4Y7AAc+!1Dg(%}5HOZy zr==WaO(kwbZ_=7h(uR)RM&0dgnD*|C9)2jXa{~xe03*D2-EF&DfBkMhI?}Bz#k;+~ z{~62xpoX@x?e6XUzB>}n9GusjbLO1?`M>8~tJTEey7NrYk?yZ>++WiV=`x5B{^m+G z$6erjoR1&nj`4eWp5m%e)m|05tM{teU9(ri?%KUtcGvCIvAce+p4|<5jqGmPYhriv zUNgH}j#-CQJa^2t*Unm2k2;R!?9E|u&8YL3Yp?5=d#{`Q){f>L^X&DoxNbD>SpMGp zV+DH)cuvLnT|WIAhSzzq*D9`$^BJG#e5Th`V#@2OaqTViyI8Inxt6yULcb9=VX`_Lsem`KD{Hm!;++)#LZdspTv+52^VXsTC}> z0I7u;sg=HUzM|(fd#ilweZ{y}`!@JWaIf*T`$}=IMIY;YWzW<6)%(2C?DcTcY)L75 z8+`Zq%2A`y*Ws(cy~)UB|MPA1RU*CFx5-z9dkgDNHTqK{jdpKqYHn+hS|_DSPuja8 zm0OS8hP!gxSbL4gYm)Nzu4HM=NNbVPR{2_eD&GoU8$y-ebmXu&mzkk&<+t_OeOLPB z+w5EQyl(Fr-~GPT7|&W?r?1Pm=6UVjb^i6fwMXkXPOxIuHsEiaGzMw5&hV#H_1z!R zL+kmZd1!2GJUA2_86OJ_;J4Q2|KbUMy(($+4F!jWM~4D|r1s#5f7FLe%>zTh!^ksi z3;Knj1Ec;_EI2OgLALIoFdp)c4QGxgwOsg{PayRI=jZnFK5nn-VQg5x+NbJ3DvPOE zOoKEni|G*4vzP%fqZ~8I<;*N*L9Ufzr)>51q-D2Xc*-wykB=Q3Ih0fff(KGzt?2g1!Bc}{p#v?)PYD)eu)u{#pc%nexDQO$=e8x% zfsuaN@?)C(RG7=+R_F5rf>)}q{4)BH{kboLUXX@OGR4H#LNOgn(<5eJ6K||HB^^C} z|MBj_{^6s$PaHcoB%Bf)ctlbk7&>-*)bC5G#*ZfT!{dT*;&?Er^$WtdkhC5c_njIP zXuSo30U@6%*!`nJ#{+)fV8D+V_XP%oLK;aK1zrluDX5eJN)J>Z!0cEZ&+SMU%+K{D zSj=pDu0P@O#5A5nZsEM9P^?Zhm8awj$oZF=5}y&rjR_OP*61l?y(Q^-gx>GSFxzQa zb7T!-|BVg~)8t{M^v4B%z>jsRKQ{1n5HmMRd>24Vk)24)QK}p z4JgkrJ#(2ER%5QjrKZKq$$S5lw%(9*KL(KU$k6Br01}|oL;k>t(V*Z&V?s3rY@u0v zST8S#5b2qbkre{g7I zR2(o;8T4Cb%p1_i(lM{0Gz#v+Uw{@0#_VuCw<}?>Ket^B3QA7*PWI1hO2lzf>8x?5 zkQ)9by@>R@dBA%R12};--vT(g zWUVIkgM+^D;laVB{if~;6m;V+phfUJm(k zf7FYPrXaodxG;`W@0d4ucqr%{9vbr=@OuS+P#E$1S_TAyhD&?8nbIie!=K#K`^277 z`ft_KoCk#Q;P~+PXu6}tonzh;WB#X)<8<=-#3{vW9>;m^U#3r;)F%qIXZEQ^>=UK` zR(*2q6ya2-5F8mE^^0$M^`66iu`lA9^!mpA0WUBO@8O}R{FpzQHwO68=OMA?GQFi& zEKsm3v$vbX-ctH-Y6T+7aT@%oIgY=%9uW`*e3*NR6LQ1ck<3z55|@wnsU+mgr!GLs zZZ3?!dd)zRpZJh!eE3he2)7Xe$45tkh^d1^hXR!4WrtDHJUBW&3;<52yg&!*Zu|wR z5S-=`deh|av!R6D`C{m7Xu5Lxi!pooOhwdQ9WhiV%(m10Y#3Q1(4l4}ji3$>+0OA8 zMNsa07=4y{yoQ_LgBYuL9ifpgxxyIV8)~V154Zmzj(Z#=$AoG^9n?#O!|Ed`a!N{} zyM!+KG)LFr1@Py}P>vB~nWZ@HX+8h~$)`O+Kx)bLdg}LtCae+g_f6FW5NK$}zN8?2 zN@aQO+#U_kcb|^_Nqy(JQ@Tp7jSKK6@wCS5 zxQkdX$qnEX(u^PXk0n)G_9TrXKz@%830T%RIH{1s6&Xh+lGH>q;e5VSYDlbzbR7KDAWtTi^`*zB;wNJCgjSkg8)- zy;^t}Ehj+*01gFCj^K?Muo76TUL~wWruepqR+nCtdu&`d2Am}1&v;eB5K0`xUtkLY z?0$1@+*}kj7sbpar+X55^Y1?M>@!n=d4180=KI!Ht+T`P-jxZvYto#s+9rbxL{!D> zWf7ZqhL4ylBASZ3!2`_%18{$i$OUc$KtOqh3Am*ZqQ$wR5C#WN|uTmQ;XHeW(r+`TgvP!~nlsJaJ0KGH3s^ZeqTM{|B7mCgoO+Pk! zYN{xfvmu_dIhwOMmeYBu{8B|MXUn7(AbYC%g^ol)=_^Gq7tQRREsqs6o$a6Op2|&> z*I?sSUZ_7`|Bc4$meNH%=j`Pd4V)$C^p3kh)_Pv?FZRM8^Xth0BL=E z2xq}Jd4ieeY#Q#Aia|Q{hYhImApjsZz_1MvXtpcnrI(p=F5|(%QgvN-qaYR0p(1q0HQ-|dvY(g8x>SO$kT&zx`R3?3= zb?DO;%6;LvvHs;thOOly?-zjWBcw6r{Ji`M?knmq-o*4Ljx!9v=4vT37?y#sWeAkk31Q(0goX z4BQGIK9~ny;sXs%4Fmx)Z9tAAX&;S6Bo(`fDNfW5g6Cz@p)L}4`rey<78s$DE3kG|( zbnoifGPviV&Vk)KI`?ebH88lRvunqedL1Aa09GKWp*NINgJ}d_l<(=J4i7s-2M%^> z5QN>+0W27f-m3(^`s$Tc1;N{YyzoA zr~g!Nx_i23Dl~7YNLX?{FqmI7oi$CZo>ot9jkv1k4K-AJ=xoRI+Uw@>1!r-jWL3<$ zI$~K3IA^r5!adXZGo3FNN8L5E&ZxU_HV}2KoHwjW*gVrYXGbU1i$$E-eybE=9y-L~+@Vtoz-2<4fg)>z^lsTD zol`)Rg-zSQVcMs4?aV^QZZ9-wJD#knnW>aOC_koz|yqK^Zy$A=mp1 zZx|(RKZqsuUHPWWd?OchNpljG$2Fk`u0RZyC6~`EjT}S;WGpxjKC{$>F>HMHemsLf zF1x};sf7tsut-jop?BECh?$zqF)5YvS;Hn^i#DaaZ*jk`$sA)?_3V!T!TnRYAxBbMEy>;TVFgN3}X^*(urX;1ql7z zcDIIc+ zjDa{A@rn2dCAE7)`E>W9^s%Af@Zol^%*PAqn!Ja=E(4-Ly%Ba&vtV4LnxJmAQ$2=t zu_CQ_RH!Jcgck_YAv}iVZwzS(rP?T>M`dheVgaS+Cw0e%h2d2z!OWoBDA6nb^vpj! zqvn$873-f46|iKbntSSVlBN;#3k3DpuwS6V52(}_5pu#A_CsKN5@8TO7$GJ+OEKc8 zGu%cvjaX8B2#i(YDGL+y({Ny9Y$z~1G9sL(v?B=Wox)cr%Obu8k+Msg*~n5qO!U^I zI3ZtyA|hrGhEB4maFklmr^E-~0X;pOv`TM*NfW>sATl2lf5M+Mv8fzn+#cc*h%vL6 zDi$$PvKV#B4bl4&TeHY%n8Bn87&LJ1LBs=u@iWXXD-c;jPWIk``igiUNzQ~>lz$n2 zfx~z?AYmI?PVY$6H=o{~sB1dipD6X7?*D6d!K7iKdEK1h&C2=a-pQw5eCF&k)2HU` z_3v$oJhb=SU6UH{A71>@*)L76i`gsj%WQvf^V!YQ?epfEg`%d}J+Y#dlRFX?x0JDA z-dw#<*f`r0D{PyDgh0+%KX0yDC}@~n9V=Kd+5f&JCt=Qunky3)Pux-xwUkWzZdfXT z{N)xdmU0GnL|?REubeqC*B0s7GjD%5Vt6>A&xz;@QmK~)=Iy&9hTV%AwRV7Ca8}Li zjX76L>VatHmR%S)KQOa4=5Dy|?wuWtw`_{GY?^y2*3x@=XF`vry^AWn(Y8=fJiR|w z&^XzDi!kKLlV9zaZoiK1yJ{1z{Dl(lOy0L1Pvoz-Sa{Jg*ZbzGODC^(TxyAU9=xU3 zxNVD^#%f!%a0XXIUz*7EUKl(-IP+*Mw|UZ(aFt%ze17xHnwYDeFzDQfxnw3kQr?!` zvS)opLnZ?{R9G^7$YE8JO9wb zkw^B&9(p43;9$h_WJc#KoV)bGrt_O->SC_O>#p9}&=0@-+Lz}J#aer@r1Y49vW0x_ zE4G(yGbdyDtrr`j`5kk+BYB;eiwqvuOmVz?RkVCntbEON^U|@jU2KZ4?1`@IiLLC7 zwDnzj>e`WOk4HRv)7`jb;Vj;n)qgfTSNrcruT{;PcSSV2KDjl)a~999Ii8k*xMJSy zzNWsqb>6=7hGFM#7S)vV8@ysi;jcL@W;y%yHqP#x-5l}U$DZ?R_EOa-^_yEOm#MJo zV*kaCxf7SZaH&7y*|ntFoj@0M+|@#Je=YZ>#k}3ky>0ev-^l%}*0?=K{j(LG?H2XB zIv(+NEm{iQmD}6Z?{45J+*q@tM*Utjk5Fc>(7{7Q03&jq0*b+87W}a4X%$1y>^{}e zLhSLpG=Y;QEza;b2vJA8GSkzCcaYdR>{4Q`q?tA{S_F1WKy?U*WKd?Wq!}S##iX8> zCNO-OG&AD}0qiB0QtdDw0u#um3SsP0ixROW-HENJRF|=TRADf3)5OIQ8I?&tJS;Pa zm5}qW8UzW=J}$6Sv;!g=!H1urHKN+W;Bmh&3|WBp*a>2(_`Qb&KR__Vf#B$SS3rgU z*%fl3THWZGLTds!%@zTGc}Y-k{X=)hm)FN z|Hvo=OlWTWSW@>;>Mr&HQUr5`Fd%8m?po5E`W^5?cffRFYy?6zFcJdk3>;od`Jv7L zWDvtauonEs2gL@2zreu%5r2U{LI9=$Hlua&%K+*#uIqs8w){xJ12Nl!5yOLvYR*!f znXr(P`;za%vGd1fw#PgxVmWQ6``b9@Ho^ z${A5EH{FgDLwlC2awe3M8KhDvV$AxiS>?>jma}D*v-tF3-9eSl7}g^+g$)SJVIx9I z*mO{JP}{@3XnoN(45resYCql^6Kq%~Y+>7JRoHr7bEM&~e2`-E=p8%}@Y}TI9qLa1g`h6MFqP)?kJBk&oP|lrI zPQPrq+^ljYpNCErh4%8Y%BhdYOqBGf(j;?O8`g#OVMEv)1_2i~y^;TVN|G#%mB%_i z_Y@dO>VP?8j0I9Y#s)aPRI-aY-w{bkQobElPuM1`C%O7UNack)+7rQp&Fdj90{#t} z0vz5DM75;$*OKI07!Vd{?Ld@kI5;#qN~~{zcvu3hWPx6tK<`SRg(!Fsgi0hrigXf2 z1Tf0Sk26(2k`(U?srQ3YQ#E;${JzkN{o-j5@Z&@n4;}`GT2vThr-7t1NID~9euxtN zLZ}KgvK0vB^8|+nB*k=kgbMb1NiR_$OC&kH`(-5*<6jB>D@EskmS!i7`4|D$(GAx#kDhQFZN7^V)hMU8WntW=HSKPtOH_z%LZC%&)OgG00ADXnI?1k3ztuwW=8|H#jtubd0 z3ZiH2=i8?b&4lK9rrKk!PEb1vX^SS#nLq8GvL$lz#G7YYA8~jSITbUzB97IGoWkk8 zh@>v3Z*1GX$kxXrCHrH}CnA<7FjLc-h^2TYe|8V(u*mso%$<>vftYhw#Ig$%?o{~;>ofAYA|>6Jh=`>p zVRlXpz0i@7w=GiAA9HSxShjy)u)kK_c+Oq@(GwtPTnvNS8?)_;7|=22>4A@r@>ms7W5cI6y%>CeVAgk?eYxs43vGQB zhIewceP#M#B+6InIOlH?|20GP&hF!(6|SaZ$)|!=xCSw&PmP!sF_%w+n9k?+X;Dh= z%k}ASH{iD(cO&iw+;K#}MnMBRh&-POcZ)CIXU5&?EAUxxxA_WvR^07Sye>+*Is>Q1 zhDj?8pdh6vJ)DViQ5@anZ}zjULR`ub`$xQdP!btT(=qf*u1gwRgQ`KTiBM%n= z;Z)K}aExBo;5Zm{&~ zx+-4S6fJC;JruL8jT_cpH>|xAAYgvR+rWQ^uhV>2*T4_UFBlnwjQ?|H0tmZ==q{a$ z-82&#nh9Y6Pr;D?58R-$&$O#)7G6`cSrFBJ{v$F2)HNCWYp7r-UuhC3X9s5BW+f_! zGmu+wVc+?EGw$z~y;^p$cCI~^+Z(s{Mhv|Xd+(i_Y!b>F`0rv8zNh_HFbQm5&?E?d zefPjAQ+eQ&vkLp(&n0zv6x*fx^*A-!OC29`-ZbQQA&A5eQ}OCgJZSoRX+c9BrzPRJ;j&lQxDz!BipeOFBi+bu}o`$%iA?j#=77|pEbX-p3?FCmc zxM1X~!M0DquG9-6 z^nW*2P*@AusP;^TMp0S1N_TUA|&=fDQ1u|wm$YJiY77TkD;O;jyv>es}@IdCQ z6MLP~0pibKA)x>IFYC`eD&9}>K~mCS7oJpvI`{SzHYV{YXR?-7y;{^+Nt#cL;p~E9 z4V295HAyWK-!ScQwq%&jHt>7~rZopoj13C}p^};*;ZPuHfMT2f*l}pCnqajR92AXg z^r=+g4^T2dYaFnQT@0UP@Gn%Tv=qfdVn40L@1mNx7F|G~&ff<#u(om1w2)Uk{e^En zGugMOGFm2=QgiOc-~5fM>ermg>RDRW zk-Mlx@~44a=;s+vmxq7Z(5`xwU$6U)x?S~$E+owH?W(^pcDb~d)w!Kb+ROQTXOZD@ zfsNv|S`@h4REFFuX1>d2xMI;$+@(f(7APao@*J)5x3Shf3zR*}pQ2SEuSnEOT}o=& zf;+8yqNs|UsyjxyFFYjvX1O&wLzY|_xkL~yxt8gb0^4?(lCoY}y5TVYhJ4~KQ%iw8 z`-ZG~zjW72D(YbsjstnDVAy7$jChU$!(}-@&sx*~9%y{(r+6Vlufqoh97&!t7!u0w ztvEeiDfVmudQm3*O5d031z}?BxDf!cw&TwPs6`r1>^kC2MKW%HFF6ysAYl~j^2r)L zVci+hg3^6i2Y6H^<=<6a);G#5pLwj+>tXfDI3us|j4e{H`tTZ>`|zg-LhcO95-`7s zTtDOuIaBx^SOF4KB9xPnMixDOU%g8_D+#4$4}c&wFq$%sOnQbHFC8rCgF~?AB21JC zRrNzeNQ{gp4eVHjl~B@7s`nDAif3l9I2a#?9mY0>^&=21Ul^!lWInLmp%bKr2?*so%Am{i@fCpw&$MlscpnsR`j9FbuHjNgJ6T6rm}BgDhbBf6|n%{WKs;{zr%;`&QX9p&Gr+OD1Tye!@&$%6mqH=aC_Qs1_qs6VU;bAr@y%9%mN`f4>S4QoX5qm4Z^HMBC%{f*q7U7AX zEV{Y8m7hS0OBe}pJE#)y5@Qbuc_Y;uV$SwU>WHQLH^`-Q44Kl`$DAAH0uf6W3H*@w zXgT}ZRD>yV9<{dQIwIp3>5P=A4bL?GmFmbStU?{YQbj=nsHIH!C&S_t^(brj!*G!a z-soh5u_n`FvSkPXwPAH;J8aA{>`wQ`rwgkx%YEka)&X*4J_CA#nRQ{wPW0Sv{FN}( zc*B7303H>xbw0dj>$ZX3UEYUxZ+XZ&0v`>1acAFI{iJ4ch!|$8Ubv5-mKa-bRz_;JUUOg5MXGkioDW1S55Q{n z^IK4;M>58|MJwmp%6|gzh1(rwQg^1au3N=lZs5B%X)ZUeL;Okw-_2>RR2CzCmE#d+ z@ttTJF_i6Z5Rp+f%+}KDu0va9pM+uKri99YP=Hi!Se52nVT&oyr#@90y-OQBWG-aI zO#nlQunOo3C#b@zOldq&maHwr2%v}MO#n%DF9sLV?%vb6$BW~fXoL^{gw|0(#_DIe z=>@D6=-;f5&sFlLZyl)pUhhMCauwvC@8K` zn=@|nMs41hts-uyh!`po220#fc->GqJrp&R-2k&pUOW%auj;#IimlomS-B_D_;4)$ zk+}1b^eSwRf)aM+L9xbG7OA*zu4is-#M>3Kbw>={i)PMP`N;>)NA3j5@$571&K3MO z`OYTIg$;;ZcJQ4on#(!G6mQ`XDz6?ot^dEcdKk#g$GZFsS@hD?2eoch%E-o+CMIAO zmUU2o7?)+zOMyCDk|Jm&q7Ej9}#HIyUC-k>2z_QMdhWiC@z zJiScy;xbL(O{SM=(k>!@$ACzVkbWOC7Zy=KD=oV0wfc9#bnxh5Hv4YmPt2JV2l>umVq;A7p!(4HsrZ?v7i&*-URZN_B%?IhKAxg_M@QAJp9Sj5L9n@r)$|<{g#Q1Y=F6y!#1S z3so}54=IeuJ0dy;=-l1CZ5uR{L1GdAD`c1QQ_dGCK@u%_!Fdfr{Z~f1l3J0?`VyKK z{woFl4FS9v2@qmj&f39>>- zdzV0_rVor9Pt^jSm`l30p&fE_6ZAg>$&*M*ied!vc_X5Ie}L{}i4qw2S_ZSrL>OoB zh`^_)eNUJjIB~{Ko@}|n6^>g>-vqVer z3N`9xQF(;SG33#GPhb(8IW=mqONr0741oF!fdy*F8&YbS+V)sLw#^N&y!rMcBd?a!LxA5`YZY zf-)x$3R>!KsWQ278P+1Hwxr`g@wuj>J=nrJJQoUTh1@|P&OS4R0Jy&cfSZ~l%%KA3 zGzHv9gN9w{BPbIHX8||MfItxKj)k~H5;N>hCNoSF3<>`Mr34=Zw3G!WcJ+s}SVC^N z5dfF#7?h4AG^gGBAz>_xmaVrjVN(W7Gti?Lmcuw}46Mn3OE^pwe~$vDW~v_v_(l$m z1V#8pT;BQ=I)9YP5L6PK8)TzM1SUfjis(E&U1qcWIRU5JXhab>K_+F~v{2xU7t}`! z>SwEd*z{UcykT>+VRNjZ^V;fP-1pP_;@h8yZhvCFU@-0)ob35X$2r_GyC-7VAR8yl zZkYU1%)TaW?}*wv<{pXJdnPptW;jjw>V~N=zOZpdGxN~Q(2ODOT>(%BuL_K$Y@b^_ zR~M;D>2NIAov>t8P3KIl|LVjWm9xIr>n{%dpn2K{EBKYuha>jQ5yR%Whs6704(EQ7 z&*o5VA}fR^VDCCt8L@0+e5g&I20AeMGxi<>|MgB?cR2^iLU)t5HO&4@-;f8|IE?`d)J)#JNWZXl5%L>wPEflqNWq>5MMqyeP9EPng z0~kDbPryK((SKP)5LPpcO#Nl35o7@au%8GR2*ntN0IN4n_!@rRq(QYX`EQG;o>*^Q zvZn0GLEgYi$QuXR3RNz@cV#N+DhdXEhNcuZZ=$3O{w{1z z5-fM|3nf+YlICbh^Q`ZOqp!i_raRiw9c$TgE%=Ks{q#%mT?eAO4$PMf$Mc4#G}y)N z`~^>4q`o8O*%)zbOtF@xPsUuelReneQ^6O)iM-+|3+->RNIEfZuZDPgx^uc~>gg#B zY|jaQnRd@ZcwNBRT_5BPLtI!WGOU0oP>(!yv!yZ5`nlnVqmwox(o(z8+3n$fuT$66 z%3UtvyP7qZi!~JYc3P2frJ2W%E3K|>m-?#8(rr^;wP`8tQX?1YG2(lm;{k#ZIxjHm z#6l4r%|RRxJR!hC0J)2-*NI#aA~DisgerQQ4Aw56f5%J)0{fU3f&H(k#5&cehz`h4 z!;{xi)2#h;t9PZ=P(6)MNY9na-mwQy04d!E4a+7k4DR-$W!47ym6GDDrelfQHGvq3 z!Uq)m4Fw-k@b?suwv0%D6JJvJPxSNeC}1ojIyD4ZeoLL8MX3k{oyZJqN91{!Txzvd zw`{z2-7Ouj?c>Gprp~C%z3FjiSKO@1({{tZuSNSHf3sMp?SX?i1BGsjwi794?fv|% zLc3N}rDClQqha|rFC$p=x%T~)SCRzrM63wx`QxT92ZW7pw=6t#kD_aWe)IC(*l>BMAarOaG?Ri zM&kaR2=p?4jY;ES;0}J~{8I-zl@l;oF^-H49vmGxbT|m8NTh3qr%K}8!bL08(N@sZ z5xFX~QEVjzt0-7aK^bLuDJZ9)h0-Ya75)Mnkn|PquSzQ~cF&itKfQBmeN3}HQC4|+ z$5ca1Q*VROqX>0BD67BcV9za%|O6Z9`h57P|&OVY!%K>w2T zFs;5KriW?6-G<+GJj0H=19u1RIdH;QoHPzT!u*fIpou^lU34emGd2o;^S@z;aMeZH zm6XRWCVoeH>KBRMrMg_2qy4&+pP`qT<{B!Y*%>ut(kINr0z>nnHf4bUCF}`J+Grg1 zFA8c0(waw2?Jz9XV7UR{2UR2a{7<`_fCYzLgAx;3#8x1tp3su}khFTiA<{jQiGmUO zMWB>jEKlYXF&)%2UPE&xt52{znWSRB~PgpV(X*`S{w6@z22 zE#%1$YagI!BygCZ&0yg0iJ))%4|z_64cHR` zffZ3;M^FlK5L_bop~Exel=qvgBK)_g7PyH_=CLQgOw{FrS}>G^%UVb~xOkzw=DT@F zFfw$jC0f!FD_OzxhJjNRRov35H=6#cuzX4feW+FI=XCM)1JU&Z^DB47EDuCi?wWmY z-s+w4+_2U~SW=>}{MS^4TF8gUedTKQuoWwDGbfr`*-cVR&dX<+saviGzf6f1_H=Ke ztcvw7QC>m!QqXj-l)PN>EgFLj&d}Jcx`Fa465eXka4xz1>vGQeAbdD|G{WPgpOHCM`gKklFYpCx@*OOwujSdzY zvCN#7T1cBj%Hz!tydEh@my=@YKEw0Q?jRlh>`Ie(Ltof+xD_zlK?`m|{uh|5yuyc9a4nFgWvwt~ZI@}>hn zEVa^e&_9JWiPSo&MEZ`@hV(BfhE#bTFsFflV#4 z8%KO_gA33~WaN6JWH`Ec*TqL-j~|Ha`NFg>Ub^B&>52$`m99X>?VFe@aLmhi(5MQB zsz3{XIgqa}fb&|Y#3hZ##^IlN9HNn=jnH;DEJ>ZxVgs9TenExLA50Mf48_KI=^taL zymageBq|rWsIYtR*brQ^q>f*5lMEk(0!*NQL6CMIh>SpR{J8WOv?U(Y@)0Z$e#qbnC00+{SDmk;!$8t)@y&3Zi=dKYte9(xxH4)+Dyd0WikozyO>%*NV;(-U`AN1fF% zXKmb48?n^>s}*cLQ3^sAxWKjyr0ij+&X!pKbj2o97+fOnS>(qk9pR`9qXcwbjflK@{Ey|;Lj`+EGw-Nkt=2~!_4AI#kD+$mfNW^| zL!GDPe9Mw;rQ_gxsU#P1{6H4J;1|&KFFt zn$4Rkn9pgu_y~N={IKzjMmYDI>Yvdi+=Ul*oZm6iKhrTQT&%g6Kj(~;cieDq{7B6; zu7!=GbLA~Vsv|LonjVfi8z%J&_KHMdsb~~L>WXMVx;Z@;8qPPsO-i(6crF;~%}cosVIuxH6K{_9^3goypx=#!tKY*1!ctpH1^drw7q1D!wmAcSX(O1$>`dccoBG z=_UDnh3YG7%!otJs4q`*l`p4w1>d(qbG1@K@md#JyxPw9todeG_qaQLEmaZ|$9fWei^9JP+rO!ru$wxiH{~P{p>?Lh=2Y2#WFNjc7cGMg| ziojz008KHf?llcNkCJc$!WdbZ zl$k00gF#Y>xqMnAZrD-Pn1+Sf2Zh3^)dWa+ldy|V#AD0)Omy30kyTq_qhF3Zad`5G zr~?KQx#Cxg4VaWkF>ad%&Cp0UsG_0aVVebTGP$(SJsoh<&_OO#Isg1ozD!^Ok?EII#xoFG6)nI zy=OcR)DthDe^NB#uB0`TCIAS@PNUf}(IP(qZ7QJ8Lha}35h>KdM(33`I-X+5=yECw zKw2*EXK-KGepUc&(rE4mAm@s)iz{gt13@O4)sZaJT1JF3QR{Od39&vmfErZ{1y&F2 z5e{OaVLHZ;vtGoLCLnwC!6|si5I4hrMaKm)IA(|xoWUVJv*`Y2LDd0ERn zjm@o~)&4!SDN2`Id2v@Y{=?}oRyE8F2B4%ODyYOQ^-)XxyoInAcMZzm1cw4k2ie;f z5E3&}_5G$-nOF&)v;ug}2OH|avD^|`|tc+Mne^t7I49L83PfgTQ6Z6!?9d%Jh z9k7tHHUyQcpabfz`2-$}KM^|-byeR1`d}sHV%SF3-w6z%qi1ruP5d_?Fw(uGM(jdG zSDX6BX2dRQATrWi)~=-ZI=)+{xxBs+@hg>lx503w%0%&2p29X=w_1N?9pBY%xw2kQ z@y!OLUo}u}7N0{tr3tSWw+?ZAv6wKcORu!ru)IuCbUu`X)u*8c&uYp%igbOjbm1yX zQ5!|Av^icUx&fE`9A+CymXT~hZNQ?^Lv$*i^3a+12BYjvV!g~Twdsj!%e1gm+%Afz zzGA=S^Bi;b0fsZHB~Du9+H;~2}$+KzJF%9bSn>L}XZ@5KUum1V53~fF zHs(CYGuogbTG%k#F;{qL_d8Eqej@Vl7vc|(MjsxH6&{Pbk44Ls43C1a(c_R zcQGikE?Ti}PW=JXcuwC^-_=5d#;d}pravQ0yArwVzO zb9svA6?CssLsPeNmEm%mhT>~FZQVuMt7C{H_dAFL>2(y#c=Wgeg*IGw>`j@hdJ^d z1;^yshp{VDP=y{TT}n#7X&xSfDe}IS>X0IblJ*;;EY#q5st4tx8<0UgNaJHySTziu z=4Yb|^zkPpib8PWb3~t0m)ZMD56ieK!K1s5e3@r^?lr*IKf&Kt{59dvoCRYPkNi_9 zuglU=-&=2Dn;+~K`icR;hCwKprNpyBJ6<%L4f>CbLx#=Z0|~k_q^X1*2#+9uM#1}( z#o)kGlzI|@L=dE;9RiX`G11?cc1@&0c0ZB8uheZv_M5f1Oc0g3xMwv ziH3|byXW2Y1S+<_ynR;vL)&Y%Xz{wKEs4sysVy(2xq{NzUYMB z$%Rc{-;^jS`#4uj#+eT*^t>X`ATjP~j(VD7p4PadHR5Pp%mowyYMjCi2tPpKoE4vZ zoF_N>Y2aCm;Y?0<8Bl|66`=-Y{Dsc^Zj<_Qs|E4P_wn5t-Q^A~;#YVp(y!Re6fYn| z;YuM(FDs$+4xkIVD;u?lUsXX(jK8X3p^k-wBB-yLblt`Js}8=~Wx1N8r+B^|C9^gy z9rO6(Z~72nA6UYD>6OAiiDj8O<}yn>>rhS)^Q3hJpMzzzVMON(r#Q)33auT1ju>z> zvzJCTVt9%cMQO&OP*{kM(fR-t%)w(0cvTx-+A!IT?^eX^HBoy_#NKkTGQM(Kbmg{d zkH=O%mdL{ws^C+=T>^Z~;TF88H%upybP=Rrgopt<{>O_ zTLAc?O**t?=DEpX1_#)l`3Po1C06zT+!zPwrh1lPj za-}8nb}ws2|7^{&`&oXA%dC_oPbbGi%dY?I`K6i}l$GL|P-s1CKIQt#bPHzluY$7j z$p1f=nd^k!)NeJHs&l_9QGr<5s&ijr;UEhiWMLjc{@h0_{A(8en1!#h@TIJ$eLgm5 z80ZzrM!`%cHxrtX(Ir!^fn@3)dXpvaubf3mwpCz}y_bE2YlO8b&M;qZK{ zPh*S*&H+ajEs<5d*P5=cdW1>X$eY$|dt_bzykk2Rx2B8RIIA;mDT`Xl;+D#&rE+G+ zyru19yI5e+=`!Xe3MyYId%0}3@Zz2yJ^rVU#|paQuCB?R#X4ZDB1?++Vo;0@yzr$A z@!y;==IM$%x+0FQyLt!_TEV(#!MZu^TsT&+W3peW?kb76>VZqg-7Qgf%WP<_ecs&* z@>;@_2_<$ilvtE8URv|c<|~_jtdD$QDCRj3cN~Z~4$#xGFzB+%$t~x0kxOnUYLggK zoQ{j3d9iCH>Ded+QXO~JMxC{@ri*88C4`-I>619s3G6 zyP8i=x>{7Uvsrz0Ex$8YcXgeX;vLk^n|gj{zUEB>wg0BI3F&Wcp!Byi{LUiHTUttg z%T$T*HHFRt)G_XQtn!Q+Xll=*Xby} zkxKr|!1tSVKQmIvpV_G7&m6k`3ggc_e1C!MXL)*xm+C3En&$9lb@_E7e0wfD5t+I#w3wmtA-?`TE^VNEa-=|02ED~1cJN@r~=$}QeDNU_rV9pXr`>KKN8XSe2#$nGT_hZ>OK(Q>Pq-$P_E^I|Y%E61|n7 z1kJx88%Rm~HHO!wA0)>B6R(KXAnc;&#?y)2W1LI9GwiEhCd}mS6x(7u z5;E`_YTV6y61`>3nDA}N$t{TtRN!LnkBa|Y@ul2%%C3~bI4K(+DE8v~!*`G%vZ}al zAq5^w?G5@!rsKtJXSc;I#ZgP~xA)BMoiABG53|L)L|ec=r1KY?Dkh2|c2fqd9!77$ zW~wGOlZn_&)%=Au-469-iy6_&d3?7;b2(p2@siGBWL()m8N@=eX|8H@6u0mc+F0n& zbyw)Gdid@F%hfzR#Y^?b&5}XUe!#r)Hy06Ej**nwSCBI)aZFBIl%-1oWKxU+OYe9QU&%Xb2?R)u~3ze>sM*DK7n3>6((wgNm#4d5jU5>xlP1e zKl|_xAOFGQgf5 z)KGoHP%CoH zCWM;MYQ;Juom^O(D?s3<@U7@`g<+U*NbJUXIQ3@mL&J=iGxR%%3P~wyFlKbpJ$ynC zpyZ!rlSN+y4-VmzI^zcqLSHdy9ERhq5q$m4zx4CE!ZQR&Dl^{Ca&*iO=pF6EaNy?O z;hO3pwY8X|d{VpMA+yC3Ghcl9)Gs~tlf8+8=8L*$!P>d%X#VEOZ3%n+j5h9F74@#V zZeNwi^Ims&q0E;@%6t+dGxL?u(e)f{NgE#cSqI~1Z%gKYl*AzzpLns&D8E$L%c>ZY zt8H1ucj?fQdw1_!Hj~jfc0~3jw2D1T;oy@GNO^hSSxQ^lER808hYuOeLD@DJAGlq~ zo}!=_CO<_6Jipabw3$y~&yZP6>E7TOP#K0#FqyTBXMCpOJ@Qdw=|!MU+E4_nm~clo z&@0mLv^mlSGWg^aBjjZoUM$p!SI;z@#FF>Z&swU;&fJIb6Gk-5Yl^IID@lA9NMy|^ zfHWfLv(8>H_cLY6|BiMF8NrBW@3H`mKv_xsq?Wwmr$CxHZ+ZhhHbtlEju&=JcjB{w zUlR}As;H$ZZfT5KpcH$~YqG`lTQwibmyKy&>s^iP+c z-SxG8s*zcyFH*L8-m->4%hKzH(wXw8q4I{IlqDcuK5wXG@#3hVczW+_@eRY;+YF4H z=~4G+v(HmnvJ9S*3~jmdlukyxba^YHPU>P7ENUf{Cv09tRVG*;kY7i6K}#)h9CBc= zrz9Cb4y;|2@K5A0CtoRdUh;Q?;dn__TmrO*p}pi^Kif!8Iv)f*{CR8AXRXfw12lO< z5YH^F0RfJp3DO8EA$LC0^?JQ=AY`--ANI5F*M}Tl2HKmvDVwm3Aybp|8Pts-Lz9(^=i?mQd#_5v1-QJ>|auLJExo@_|&ED%~FYSt) z+;~oPG^ct}N804|NFrtppM-xLo*TQ?A9-|N{L$g) zqr;I$e2X0K=L_Jq=as^j3#Tpk`b+<8$Hm~>j=4>6l%2Dkzoo{vEpM5)+~Vn8N zS59tOu;)!{&pq?LBljgeJ|jBWbHh^eNy-UpeWI#vvgenUa#D4Gx)edaZ*{hHS-C4# zN0(Q9rHn^NOg;Ic_09HzfXK3Yp%E)lVJG;Q7*Z%gE**$VE+x%@^lBp?%Me+{Pzms? z3w;tH9@!lTYY>1ep?65UL@q^75H!pZSSlDU{F2^Q8|tLqR@rrP*-THosy$lOJ~wo| zYBPbBfwKc5__<;6lG5ewhscdg8*_P+1 zz}F~Xn@;>P39FIy9fdET#L}Y(hMw|ymZVp96jO{>W_QKy_1Eq7vwPyrUDuntu&eO3 zA=+J_>AX7vz$SJ5J{IVK-B}?q*+++Mo9KAj;Ww0$H!zv2KHEGeMty zfH3=oy%_7A97N%b-~nhXr<@XqE*%F`~}YAInQ&8suFF@2RW6CTHJxkJ9BRu5xcdiRBO6qZ_w7? zblbJgn-vzgvnbYR-HVnr+KnH03Kq4vLz5x5Zc$G$D6!=)8YzYk`_?U*DQ4kJwwqSO zZjSLrZT?MCg)-%$M^>G;8ldlx&&fn}oQrb^} z&yey@04ejgnFArw-vB=TsCixoZv`eFeHluNJAD}nZXtZ+r9cl)0^}H?2VV`n%bNhE zChbkYfnR`XpXE(}htzk!tZ0Ckr40JAg= z@E#yTCn+uc)!B@GV2Pn0X;epMx5?fE)Ux*gHS-=IBVMvqy*g!8j~>eQ^(cEXr9)#B ziCHE-W4f2x2gwgcGQ(roATy^6WEeC=(QDDVErop$BoUzoxr}B;3QJKB+78gm%zRg} zCHj9Muy_^)02cE^19b8BSJh27)v6u5>HX@a8U9?~i#yNm{MxRWM?YeT%=G&s(?81) z{e~g`_OJEyh}*x00=8@)4vqo$jiS!=n!haWQt2+|IXgF6F4t=*zLCNKeDBfhqtDff zwtO-(nbsY>-RFpA?!bb-+u%tF!I0Jyq1-U>kr}gSDRoID?p9<-`@T>@yd}dSrL(g~ zHmSY)Q#TVD^n-xhlIyO1$V^(ORz97vT4fqoiSdPVT@Che3e|$?Gd_g@M$JyFcpVI! z6)4%1vw1BPVzf#WENWrjF1245X7<(ZY&h4h%)d7>MbATIBjagLjn?PNDtMtEL&-D} zZx*&w3Zbi6v<;oBs|euSkBG#i+fTu48;|Vaw?2%!u$0h`Nx&b(~&O&$jRdu9**@Yrj|=7O=7 z?w8tLU3dE?ondF(rThhbX|{3Kzw{_;=EVmzj|o8_oC-VC4X9SsW#TO?WLht z4}I2%y3h-GC4!;&&+}T4Kx>lMf&=ufX!&RB_}=?6w9?Rs(IRT*aGFxvUp2Hx+%>?DdoGsDLg>Edk_J> zYAKrcr|sAdQL+}vu=gZ^v*<}+1H~BgXD!9Z{9jm4K_vwf6g)yutB)hbJP14qpv5i`a1mJ&%DD@0{hFZEQRInG3YI0%SxP$+&>72M zE_0#reB(EopuP^oZ4tk?X3FZp-4{ce9opzHNPsYp6X4MRKBwR<^9)7 z+GdCGD`nN+8?Rauty&YQTzm1roaZMcKQ5WGUlOj>{G$1%&DY8zU)USjHx$`>AacML zDfi!SAN)wmmDP~Z|7LKOMDGKcM*n3C?!0Mp%v}XPtWg3*__8kCxFR)5+c%as5OWVK zICG=4^kcdBxNbij0enQO<%5QnctiX3hW49U{JP0$ifka1N~&(nRi#LCAtF_g)OV7sa$L6SG^Ci;_$9Bo6wrvN$Xk=#M#A8Vk=Ke~16rvZIYEAn&?1B35eo%9u?_i!1LPHS3>+qXgUE#j;3hN4x zq-2P)+$2xvnVGU)alex=N{QEkgN`owg{6#&;p$43eTHS)Z^9HdDN&HZ?hI$}_(BbY zRi-0^-Y&W5%Sy^~ml`dt*d-U--KSvcXU>yrNj3Zo>!mkBUKL4&A*+{q^pPBwF1b?F zHN;*@+=>4={e%k?+2Iys^l-iJ#W8ox|!{B!#BW3iRAFL36{ z?7zE3iB4xHq-h|OpZYG6m%dHpJux=)6uz#>K9FLTzMO>5aE4UvUWO)ztUf<|)xg)*Cxv96Gc^tqUv~2W3;I8dQo4bwGVP*8r!TTTC^r!)E+HrM_c*M zMKY66ZfkJ^l$36DK+rYYF!$)Sy^$w<^LBs4;73MbKXaT>0ru@eUIV_#i~(1+%m#lL zek}|yHLcs?tpm~4fk?})2#q@7E{3Ip;)8yPPSvm3E(cD2EKx&a;DS1)yQAY;kTG{ zmz^4l=a+4dTi$!;Ny@ui)oyNWz)m3ddvai;xLj28wm59G(;gS88t-7yL`_?KR z>2Iy}BK>W*0V!`6m-dxv-)`3+{q0SZ{!XbD>F-pkk@8NBcdJf&O{Ye>a2|^fC?b>e z8JSFwN%dE6Mf#lv0^okL_q;|A~cYpTW3>V0nh~Y!U#7@-V_41;TLz z+7wHrTi>KK3jQ-uqnlBSe6t(1ro~dOq2(iExz_YSZt0>HcTiTI+C@qM`DH4+X-4d3 zFR$0`;BPwB+WK3ja_vE0@Y0i6v%QG*{ucze7B@rI%j6y;$xNCUGoNip;m?sR{D=ZJ z{0+#L`TIn-%d}D{azsoi151+mxf90p=Xb(Js2>{ApQUCvg^Vwu&D52qh{A9JCnko~ z3ZJGv%G;Z)Kr9tFO^5nmvQa|_ZPsZfAU6$zq?cLvu1_^FvwgXoO#6FjhwAo$k>B$xjZ{%3q(bR+S)&uLfg$XbDHf8W47hT^r*6E#a=JK}dLBpoAAT z^?e)u(kFFjTN*3=)L~=4=>;eUt6DE4nqQzqXkY7F_LsOML|P}56MTPsMVh!WA{hrM zrSs=fQv4d+(WTN7_kX9KmQ3|yF9chgscCt3iP$jt0UoK+NM9P1-6Yti<78&wQ$1pW z;klKiWWn-oa(+p%MWe9Rhc9tT3GK^1F?CToKXG2-Wy}S5jJmlzE5r8cA3<9Fg6P|$ zQJB?}XTea>D6NDkv?5I}g8PzSE<{Sp@f)dGs8&lil4&yPqpQ}XAQmPn1#8I+EGOrU zMh$K>s&CLLC%CR#NjL8#*UQ`27yRDf`;Qu_xS~<|{-b` z>fr<&2FeR$njVf%t10qQuw+jZctu8+M)fW&^+Ht}40*Kvz8HN9ZzeYQD_M%msbs-D zEMJ4U#2e|06qE}toaBummB;DAan4%M#w})uKjD%>R~Y(n1@Ak{v-7+F27MwR{~4)q zj3p@n2z27bKu+w=irwleb|JO?gjiUc3V3 zdP=n*)lrp-;=a7spBJYNDIR<(dO7_!4$q)BU|?Scmv8l(oaLc~O8G}hBzzq20jwU! zOJbEd#2@@sSdiPSBHXF9IIUtpSWO0m)e^&CZ?e3Quhfm$8Uhi-)=&ySYz=D_h;6FS zD`AMOp#}h!%n%`$XD(Ak3_<7VYKwHRY&X>sq+mghlO}Ugsn*IBDR2u`YrCB*9GK?1 zD|t&8QmiP`QwmqE3ER&t3HvX^gk!^5Qlr2uWU6I}{ew@d?ugD8hAVVRSS?%as9iiH zH*KFC_#wCZklg(TvLcAwoa|+AU$`e%8X~?4EQrc0 zgj(#R(qOQTXC*#SBol**y)+FFYRo}{N{isAj ze2j#wp9V}CYjuw)I-gCfE1&3fZ)5-St_yWbGW;yn(p9gRahK`29NaCXClWCiEU5f@ za*;ATM7{fj-v!G8dC1Ko{zo*N-vol;+}XP2Y|lBvS!X!YxaI6$Jx5y$*FV1g)CP-p zUQ!G*PEwR?cavgzf3~$B=hD{itli;?>O4$N+{4-CF!zv6$Zmt(?kJj_p8D0VgJH*N z(!}ikJh^uZXZ>N-7s-S+&)grnH>92#ee~+%%U{L5jH%!FF4Wquvd(;G&o6I(di(BT zCidCo+~8z(a8ez(gtRH9)9B6mdo!n1-^t8P&1$xv!m8Ed|EIGa6M|c?d47EBgIlV# z^QlclwIU1*bgbW6yOj&}WrKZc(}~Qv&EWmEdu{hS?{%tQ8-5geeCDfxF9&iLV%ZBZ zb^L8q6lZ~apl$uFwYPGCwzox%4GJHN%f50o(l2P+2HBTQ5D|m z7}|s>jP_~KChT0g1((R@kAf`*d--sO6@$?3JUy(+5}z={UdH8LV2(;UzFN#gfkg|8FI4+(VR8RPYyola8;!#SKq{vpy7Pg(0&cTJ~@7^oNs^BjTwIiNbs zB^N|gK1KO#T&h84L5<}gO#}M+zK`N~&ffqt?nvG$$NrRJefo#NV}D0U9OIt|=TT@y zD{~nMUvbhjr7t@V)N??V(noF6UEnD}d=dP+>>u987wNl27Fk6VinlD5*{5qwZHSzO z`ciCW8Lj}6v6xJAx%`-##kc&{Dfk6}O#;6r;3x2J05~*TNpZD>Lg4*{`F^n7$z=c7 ze3H1cDd2@V9#wEw#mSRY5-yZrq?7ZnDcup16O!BbG)}stz{k^SPNv0P!Ah%v`Pp|k zV^^rhk^$VLY@>8Kh9lD!jjrxMox-1*%%!#epdc6H4iPp?V3fc(0WKVf6ShQvze_uW z{eZwv2xJIw`2iO!aLv_T>KO8&rpp;fGDN3l65wk25}uEfd<5b$tb*gxN-CXP7<(UX zYdeXaMBoTO!8Wk4m{^`qzAirp75s%1*^$Gk6vmzjU4Ium+k$(WpnqF%ZVTeJ(7Y`; zfIkjW``w0u~nQY9j2>?a2U~1NQunDPqrh3+@2>_Jf z#CZV(eLTU+BJf4PB1QtRoyH11Gi%2lD{D9C0o!p^QZ1}Q699}afDrA>>|??lbgNC@(mrDnGn)JZ_%tAg%W$4X6L9wsP`0|gciHb zF#lefeapl;cLajkyB6L7Cf27307eH;(7_YxSeqsQ7zx1kym!p#AA#WBIonmnX4sCv zFWNZFF9!1A6F707Z|lr=bmfml@=c-jxwW~SKoCQ^yIC{i`nQHwtqxa=obCqAP8iNF z^=MAQNO49J33Jo^cnI^-?KBYP6MRQCKVeNmeW(}&R(!dO`F6)yI}^1xm|$^zr2NGk Z`m3XHZR%&=*>be0mNuO6u(a@3?>{0g^oalf literal 0 HcmV?d00001 diff --git a/tests/__pycache__/__init__.cpython-312.pyc b/tests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac46d4240a4afbc20d96c9f46e2f228937f2fbd4 GIT binary patch literal 170 zcmX@j%ge<81i5w6S=vDQF^B^Lj8MjB4j^MXLkdF_LnWgoQ&M4u r0yV|Q>lIYq;;_lhPbtkwwJTx+Dg#+t46^bAGb1D8Ee5S379a-zLMtl( literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_verify_nzb.cpython-312.pyc b/tests/__pycache__/test_verify_nzb.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72d56a8ff1d028c7b8b9c1598c7595157f76722b GIT binary patch literal 43266 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 Kh{-1%`hNkn834=x literal 0 HcmV?d00001 diff --git a/verify_nzb.py b/verify_nzb.py index 953dccd..0e928ec 100644 --- a/verify_nzb.py +++ b/verify_nzb.py @@ -115,20 +115,39 @@ def _parse_yenc_attrs(line: bytes) -> dict[str, str]: return attrs +_DECODE_TRANSLATION_TABLE = bytes((i - 42) % 256 for i in range(256)) + def _decode_yenc_lines(lines: Iterable[bytes]) -> bytes: - decoded = bytearray() - for line in lines: - index = 0 - while index < len(line): - byte = line[index] - if byte == 61: - index += 1 - if index >= len(line): - raise ValueError("dangling yEnc escape") - byte = (line[index] - 64) % 256 - decoded.append((byte - 42) % 256) - index += 1 - return bytes(decoded) + """ + Decodes yEnc data fast by leveraging C-backed bytes methods. + Instead of manual byte-by-byte iteration, we find escape characters + using `bytes.find()`, then apply the global `(byte - 42) % 256` shift + at the end using `bytes.translate()`. + """ + data = b"".join(lines) + if not data: + return b"" + + out = bytearray() + idx = 0 + length = len(data) + + while True: + next_idx = data.find(61, idx) # 61 is '=' + if next_idx == -1: + out.extend(data[idx:]) + break + + out.extend(data[idx:next_idx]) + if next_idx + 1 >= length: + raise ValueError("dangling yEnc escape") + + # The escaped byte has a -64 offset in yEnc. + # Since we use a translate table later that subtracts 42, we only subtract 64 here. + out.append((data[next_idx + 1] - 64) % 256) + idx = next_idx + 2 + + return bytes(out.translate(_DECODE_TRANSLATION_TABLE)) def validate_yenc_body(lines: Iterable[bytes | str]) -> YencValidationResult: