From 5af5acf4ab8ddd757c35ff1c7799ad2d94eac87d Mon Sep 17 00:00:00 2001 From: Songlx516 Date: Sat, 5 Sep 2026 15:14:07 +0800 Subject: [PATCH] chore(test): regenerate byte-stable ZIP fixtures (date_time fixed to 1980) Tests/make_fixtures.py now patches zipfile.time so Python 3.13's zipfile.writestr no longer embeds wall-clock date_time into each entry (the module uses time.localtime(time.time())[:6] when the caller supplies a string arcname, which silently made every fixture diff on each regeneration and polluted git with thousands of unrelated byte changes). The patch fakes localtime/time to always return (1980, 1, 1, 0, 0, 0). All .zip fixtures are regenerated against the new deterministic generator and committed. notar.rar is regenerated alongside because test_rar_extract.c's main() recreates it from basic.zip at run time; including it here keeps the source fixture and the rar fixture in lock-step. Verified: 2 consecutive python3 make_fixtures.py runs produce identical md5 for all 19 .zip fixtures; full test suite stays green (69 ZIP + 14 RAR = 83 checks, 0 failures). --- tests/fixtures/absolute.zip | Bin 128 -> 128 bytes tests/fixtures/bad_crc.zip | Bin 4210 -> 4210 bytes tests/fixtures/basic.zip | Bin 468 -> 468 bytes tests/fixtures/bomb.zip | Bin 4195 -> 4195 bytes tests/fixtures/clash.zip | Bin 199 -> 199 bytes tests/fixtures/conflict.zip | Bin 382 -> 382 bytes tests/fixtures/drive.zip | Bin 124 -> 124 bytes tests/fixtures/duplicate.zip | Bin 205 -> 205 bytes tests/fixtures/encrypted.zip | Bin 124 -> 124 bytes tests/fixtures/full.zip | Bin 4210 -> 4210 bytes tests/fixtures/many.zip | Bin 53412 -> 53412 bytes tests/fixtures/medium_bomb.zip | Bin 4508 -> 4508 bytes tests/fixtures/notar.rar | Bin 468 -> 468 bytes tests/fixtures/stored.zip | Bin 1518 -> 1518 bytes tests/fixtures/symlink.zip | Bin 207 -> 207 bytes tests/fixtures/traversal.zip | Bin 214 -> 214 bytes tests/fixtures/traversal_bs.zip | Bin 214 -> 214 bytes tests/fixtures/truncated.zip | Bin 4170 -> 4170 bytes tests/fixtures/unicode.zip | Bin 276 -> 276 bytes 19 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/fixtures/absolute.zip b/tests/fixtures/absolute.zip index d7ce52c13c32c62180dbbd1ed30c152ba00c47e7..0134ca0816d21af5d2e03915a820f539763a07e4 100644 GIT binary patch delta 30 fcmZo*Y+&RI@MdNaVSoTdhKYQ-EDQ`l+TIZWJsSh+ delta 30 fcmZo*Y+&RI@MdNaVE_T1lO-7~AdFDPdI0_p5cU87 diff --git a/tests/fixtures/bomb.zip b/tests/fixtures/bomb.zip index 55a21dd39e9960a70b8d905ae2aa0414fadf8053..bcafd4f28f3a2d83122739c94882627a61a068a9 100644 GIT binary patch delta 32 jcmaE?@K}K_z?+#xgn@y91BewFHu8xIuz(no)dg$-WMKsZ delta 32 lcmaE?@K}K_z?+#xgn@y9gMnwcO6*2HQ2`bZW3sw{4FG$z2Ppsm diff --git a/tests/fixtures/clash.zip b/tests/fixtures/clash.zip index 59d123e808ef23ff115ea1a29d0c4d0a534ba561..86dd13d9c58d2dd7a08664a1be07c77914c02ce6 100644 GIT binary patch delta 46 mcmX@kc$|?hz?+#xgaHB+87A_{voJ6KX+sSN9jgtYd#nMW#s>ZX delta 46 ncmX@kc$|?hz?+#xgaHJ2maD{0{<&- diff --git a/tests/fixtures/conflict.zip b/tests/fixtures/conflict.zip index 978aec8649a99928899f70e0ed8cc6ec514949c6..9d70f2a9cacb737de3362a2472b78888763d7725 100644 GIT binary patch delta 63 vcmeyz^pA-zz?+#xgaHB+87A`SurM$HX*+8OU26-W_nAQGZxH@ub4GUnT%rpY delta 63 vcmeyz^pA-zz?+#xgaHJ2maD{0Qov06?r&t02r2+>b delta 46 ncmX@hc$Sebz?+#xgaHJ2maD{0t0hKYPSEMVHs4gfle1Ka=r delta 28 gcmb=a;S2C)W)WdvWME+6S*{X0kxz#OOxxK308XR^0ssI2 diff --git a/tests/fixtures/full.zip b/tests/fixtures/full.zip index 87551b62e93566c9c1448b8cd82c2e4eb07f855f..8bfe704b216be40ae13eddf9c80e3464b3a8b2ef 100644 GIT binary patch delta 32 jcmeyQ@JWF$z?+#xgaHB+88-5%2(U0PC^Aeo6R-gQXgvit delta 32 jcmeyQ@JWF$z?+#xgaHJ2maD{WXTLbPg5EsDRfH;Go5EWcT zggD}Yqof02Mo=+|I_^XT9Z)nXxUmJ)8QiAHbLo4jTmN(Boc}pr{UY;JJ+FD|<9loH z8T&MDm6esXZ~8wSvpQ~Aw{xHL|F2Q{KL@7&bM?jJCZBLgUS8hu*G{@NKPzkSUg~9A z*H2;UNQ1gDs1JPcqjpRkZBS=}`r*54uV(7}26aj=Xkg5t9cyW9a99zsOt2 zH<+5g1kXM9`tj3=JQ`e$;!j`Fcj9kM9$by$Pd}*5En}EGxEe)QALufCrEGEMoHDY6O4!Ulw;x-(UB9 zj|EpF=;{%-bvm8NgR2pA^@Y~`)-ic-HG-~oKf3obOdec~psTa59ZDRm;PhWRuQ$cVw zeF}U3PWA8Gdv#~>;A#Q7dSPYJC?*fC7ND!Yb{BbPFHaJ2wkegE{t zaZDauEkIZMUN>wclLuD|(ABk8_6DNGjGjWUs~4e zXCf~Qt`=fuwx_agWAfl?A^!9;zHHu>$%Ctf=<25*95jx}gR6z;>Meb**v90+)k1Xj zo9nN>lgWdth3IOc%a|jWJh)njuD;r4^yN$*TrEUbhwZoie@q@+U54lW%8BdlX7b?b zGCcPu=RL|IR@C5XRUZEIp3gqO0$kMKYE>To^r?T$X4j*r!PTlfbT#L_IqdQkHMm-p zhptwhS3i;bS1oFAwJHx??Q+GB?7>mg;A&MKy86gTzp}?tQG=^hdFbl?`~SiodPNPc zR^_3q4;^~iE$q+U;A+)kJof{RIkh>HH@I507|;FN=cclV6$e+{`|7QaPGJEq4z9ZQ z)m86KXV;@Rxa!_lhx|U1UB2Srs(WAEcICJ1Y8MAr-TUe#Be$>zM{#h~y|1p{Zxeeg z6$e+{`|7|GKW7iU;^3-#UtQPb!b^!w#lcngzItYx5eGAQaMiu9em8hxrzYuNe|Gm4 z+9*Y&QHr_CdecSYhcbP51jpQMeJwKi9i|V@;F!CvgB#uQJky7VaLnD;9rv~C%=FKVfyeGj=3AV;m1~QGJSXs$J~`2u&U(?OdlS^F?VM_{`i?5Odp=aF?VSP zeY5C1rVo$en7g%$F23qSqTkapxodmM*;k&)^y06(w|8bGKV*9G*InF0^2R>K^y06( zxv9q+ox=3uue-XP?{7Mg>BV1ncjvv@;sd4^f8FKXcjvx;XL|A1-QEYkU6%f5y89Io zf8F(M@yX&-nO^*L_xG}BpF@aV`lgsGoPN*ldkNEvzv(yDy?^gc*NA^Gz4+@Yr`pl| z|HAa*uj`y9{B+!*OfUYr(rMFc-7jW(@z=FZ=g-akFVl;^u6BCsiKFjfdhyrwPUk)U z(2-0p{<`An?dgwP#`NNE`c-uA^FMZ<^Y$frX`W)PdU`4U{9Bn`{B_+^ljP8iOfUYr z^6B2hkl9Qx{<`)l@AbkKOfUYr`f1_Md6Sr4{B`});R}nuV0!V_6;RXX^qj-=;;(C< z+TV41Q>GVxT?I9B`Lqd4FaEj?YRmoY`w_i#P%&3RO?v$B^uMFr^CTwzx)!QtXX~e! zUi@`6)X-ORK4W_E*Y!|8pM8CArWb!*5q0s!6VmTG{?9M|x+ZE}-lS)lUi@`c)R|eg ze!}$Puj``LcUU=q>BV1HMh)!odQYYoe_b2(+~2bZrk29MAOPuj`~9YBYKo(~G~ZlsX_X zW+l^$zpj;f&Gh20Yo>b7 z>GUwui@&a#TC=e84@@uqx^C*a{NANZFaEl6>dSrlHDP-3*R@mUCIBV1HPra8M z@IBLuzpkIU;MSjRWP0(}6;yAWwfz957k^zt)#J7JRYWfhRm@dX%YTZrXL|A1bySU> zC@N!m@z<49bLaN@k?F->*HXo@M_$SF;;*ZzDx#wfXL|A1^;CzA9(D)Qi@&a@x_d~X zp6SJ3*Hj%jXmgV3#a~xd{q>gbS~I=)>$^_FNDy_%9>X##4VfQ`sRcSpIR#zYYDtn%U!YZxD#%k@Y z@37}pXsptDtgQN+^(K2BhRQ0f$Ij~g#C2a2zlwstOWgZ!-(+by(+7W-xcA@3zF*4n z7Fw(PCGP#VU|ovkIn-8ZJ^Fjk^yTcngx)HxM}ONszk=PzP+X<;=FD)Q>93;h{vQ2Vd^ppG=X2EE-$(E1^&ZoQ=X2EE-{vnB{gdg# z^EvA7@6+8z9mDkD`5blk_vCgX&u04Ye2%*NJME0b8%!Ub&rx@O5595OOH3c0&rx@O zZ@=Wb6PP~S->AF4ZH8|i!Suo3sJp-Q8@d${z4TX6cYnuh?Qs^+bK(-Fx?EdhyrY-`8&#u$t+`Uw41c9yn+r(~H0E z{;oV{d-|Ol-`AqjUq#*h9e(LgeVAVSb@w+iqghL$-}CpSTz~b%imWkAFaEmzs>9~y zzcIb|>-wv^K0RnU(~G~Zzv|lmidIZ7{<{9^#YtC>W_s~AiqGf9$Bx;>^y07Uugcqw zp2_s$uj{Y&X}rDz)64yJ{nh=kbyqOG`0M(s@h=>{AJI#H6?Og9#+mJJW_t10^;e_T z=X}NV;;-wk-u$8Uy-Y9uy8i0&$rBD_dhyrwSAPt+{syKOf75qq?|$#}!*2bO>BV2y zUwzPZ(tS)X{<{9Eq~P_&OfUYr{_4XfE3aXC@z?cN%etR`I?+pi6?Oep$M)x?Gwz-z z(qBbgfA#RdA&Zz^{B`}+fj10Y&-CK2>#v^OnpeW~;;-wkiZ&D$FunNe`m3_Ldp^VT z;;-wkTD@4jj_Ji;*I(W7*t9d4Ui@|aRm*#CKbh&pU)Nv#)UNL+qL=iVmTy7lSK z^m2b)fAyam`=^**{B`}+pUyaI71N8quD{y)S@)4lFaEmzYVwxjj$?Z9H|_o2_xF{T zj$X?2;;-wkhTW4}!}Q{>>#trde5;;-wk5)}^}&Gh20>#qt1Tse{GrN4^0{_3&G zS7kB1`0M(swq3_Q$n@f`>#y!PEV+g0#b4K79XGS-c%~PBU4Qlb3yqpFz4+_;tE?aP zoyYXzuj{YotZ(rx(~G~ZziRgK;>k=e{<{8Z_V#55F}?Wf`m1XvjUPw!(qBbge^u9i zVq2yce_ekyqU|lWF}?Wf`m1-3o%}P?i@&bFx_U*2%b8yMb^X;ZGuj=&^y07Uulju2 z@=m4~e_emIc5|z3OfUYr{;Kb`MHex>`0M(s_g6mChUvv$*Iz9k^9{?J^j9hO{@Y{d zR+eY!uTt*)cW#r7?7m2Um2&UDjS9YC_fh(*lzacJn12Vm@6unT-1~2ARvCMqNPm@b z@4t7yd>4CONq?1c@4ts_pTVAo(qE(qE%#Qm`5brmcmMGZ4rcoBe2%;OTiJ2eznMNfpX2WSb~$A3i%cJ$&vAEu zs}JaUJky8gbKKqEqfS2IT&55H#@+p0we*`}qL=qoOOBfH1k;PZ z?*9IKN`4{Ji@)yvUVLDzH`9y1?*2C2xGIO}rN4^1{%Y2mnz2kT{<{9E+nsNb{yaY_ z{<{8Z#j>|af1V!|e_eldWbTu#*`G)Jb^X;}bDm2wz4)7cx8M8yDF4)jzc9V{>-ww5 zuURmI>BV2yU&Y29aX8b9zplTkxS;KoOfUYr{;J>F&-N$!J^z<~uD@En>64q7Ui@|a z)s@xnf6esbuj{XVo3^%`>BV2yUtQ3$>Hww}e_em|MyDk=GQIfg`m55?7wVW^{B`}+ zS0&Hi&-CK2>#wf6ut^i97k^!U_2r+lOPOB$b^Xi@&bFI`QB+pEAAp>-wt)@2Dq#Uo<}^{<{9E#nK^SpPrWb!*fA#T_Z_i_T@z?cNgQjlj!Sv#< z>#ufxv}p;`i@&bFN`C$MD@-r`y8dd%e=i)u^y07Uug1PHqBGNrzplT^?)234L@)hS z-1S%YwS2Y_(~G~ZzdF9;i3gZo{B`}+KTGFtWqR?~^;hjTy*h#E#b4K7&0PBm`TMB( zaq-vnSB2Bwe3bos@z?cN3##AwhUvv$*I(r=DxJji;;-wk7CwAk3#J!;U4M0IPU_D@ zFa1^A^;aL|E|w==!?>-wwzox1!drWb!*e|6rP4VN*!`0M(sw>N%# zB-4w(>EC7d{{8CuWviz#z4+_;tIzLTvz_V1U)NtvcBduoJtF(qC1(_uu>9?8olA z^jFpH{db>Tz1j0b`m1X9{`;>*1K9IQ`m1X9{(Hj1gV^&>`m1X9{`=yz?Hh?-(qC1( z_usD7Kh0+P;BU2i|9z)dgyl{8t7`ZDJF-Qb$)B(qC1( z_uupvG5#QaNq<%C-hVH@bMs%AUi@|Mzm3XQkpF#CO!}*cyT5ZQmM8qrkL88ubHv@> z9y?NRF@1PGN8J5g{>su7Odp=l5qEzN8@@W1>BI9m;_mO=m#i7a^x^p&arZY?xZ!Q4 z56|a_yT299K3>lB;rSeK_cy=YrQMl6Jf9=({yyIAqESpA{EfK#+xxL6P9}QkuOjaL zuDN&q8B8z!y8C-o%~Q2ZFaEmwyQ}`$$C+OIb@%t&OW!<+>BV1nf8RUjoj)&cYnW(zf!^U;;*~ErQL6eGQIfg?(bLaZ#VU?dU&{32Z~CnF z{{5f)h4&SHA;*Y#K11`Nz%dhyrwSC>pab0X7=zplS(a?bmG zh#vTDfA$>Hi@&bFda3CrA2Yr9>-ww1?|q>!(~G~Z zzncEo^AV;Of7Ac7z3*>cebtjpFaEmzYGKWi4NNcoy8fzg!~SP6z4+_;s|8yRC}Mi? z*Y#JYUGmllqL=#ruf@?<5`i@&bF+O*@j*O*@Xb^X=#TMi!1^y07UuRi~*O-H5| ze_eldXTip6h+g`ui0iKoY4Qd6`<$`3`0M(sMMJ-Ng#CQ+*Y#JYjM@4f(~G~ZznZuG zu4|cI{B`}+zAw+%hv~&%*I%V(-SH69i@&bF>O8+}Gt-N|uD@FP!YMa1z4+_;t4=dd z+>hzSU)Nu~*7&z8h+g`ui0iKg$98pKdhyrwSKp1@F_r1XU)NvVG;HS%rWb!*f3;!d ztgD$`{B`}+fNgWzF}?Wf`l}ra=1pOG@z?cNV`o3Olj+4@*I(_Nam*N|7k^!Um0Z!W zCDV()uD@!2*jSb~>8~o?`|qP&lPu5DUsbyI-=imA$?l8vSC#Jlw`#yu>^@3=Rq5V; z4_?17yYJFpRl4`zX+N}J&lBmdD&70<$uBfz&nxM#D&70<(=!{f=b`jhmG1rbq**V1 zN&J%js?xpx{$u{X?qmAkZ>4+x?SJeoEN{|ZRl4`z&)QCAd6xdF(!KwV=|7&`7wNAm z-TQC-q>1c4N`F=9-ha>D+>+gQ>8~o?`|s8~nd`1{q(Gdi&6mGoDY?)~@s z746vbQ2MJ%_x^jsg2#6ezofsabnm}E%&wTp^x|*B`){M{R#~mmzXS7cs;B=44gc@9 z-5*)s`wQ!X&)6Hq53C0;E9>Hl=h~nqk6)iDn!^0m@{C2yd;|<#I z?*T;dL+*;sGiXDk5XG;$EBdygp*=$szwoZ;F9xM)!mqt6+AaNgc{$+-O%s0kUD0z5 zO4Ed2fmie|2Bm4jFTyLj%%C()_;q+iHyV_t3BMGtXzTR%@Ae!MO%r}KUeVJGO4Ed2 zkXQ5?gVHqN*W?wgP&9OPm?r$PyrQcOO4Ed2nOAi8w=U(F!rwr{e=2@)UeOZ_O4Ed2 zpI7t(gVHqNm*^GU{XP3Ve_)y>{3^YoyT4An2c>DkFVrjgy+LW3@N4yo?*3(9&p(x> z3BO#g=c%;n(dIU1L!CY{DQVrhi4s{DEnj@C*2gjy5Pw6MhX}(Q<>*G~t)=6@A&DG)?%Gd_}hzl%@&4 zn6K!O&GeXPn(*uSiVjjV^pKb){F1(+Hyf0u3BRhZ=rabTX~Hk;E4t30G)?%meMR?6 z{}L(j4}a$l|GVOs_Z2NRC`}W7gA_Y{Ib8Il?J70!ms=*`nf^rvkAZW zuV{6D|QLdbL4mns60B(Z3m#rU@4U6n)E}G)=e`py)0|L&u6~ z!sP%(kKI3W!l7NRD;qq;TnOWr3R&G!es(Q7Z{YL30DdfeP7Yg=wc*ru|Uy33`(C(xL%;> z@#znB%fE99X_|1!K+*FJO4Ed^28zxwC`}VC94NZnpfpXmcA)5Y2Bm4j6xwAJVVu*?4NB953lNHS%Fz?1X~H!KMH3lR zwjt0Q9EMP|%%C()xDlaf%Ahn&I2WO4ok8id36~=j&1t#km?C*JO*kThD$2WXoS{%OX;7Lb zT%=I6+@Lf~I8LExjX`OeaHm4idV|t5;beuPxveuN9HD8#^$JB32Bm4jAqz#z3`*04 zn-+?u3`*04^A?KM8I-08mo5~|IW%)jybH(C3q?x|O4Ee<7mAh|l%@%%FchsYC`}Wt zVklZ`P?{zj$WS!9jUE$C6K-WF8Z{_Q6V7HRnlva)6E0{dT5eF9CLGgHw8o$`O}ML} zXuYDm3&)8KMRO0!oG|agacx7Ml%@$+JQS@}ly~7c=%HwKyUa0#zn+V~ za^bdzqEUm=G~vvLqDh0&G~wchqU8pqX~OXjMQaR7(}X)9iq;#HrU@rO6wPg~Crs0X z>mZ6I3`*04Lm`Tm8I-08H$xOnDayNWoDWg7&Y<+)bhsp|jmKv0%38zLBtuQD}6RwUZT5C|6CLAD9G`oWy6HOCtktiB9C`}X2k|>%qC`}VC zlqg!RDDT2?tVGcogVHqNZi%Ax2Bm4j2@^$gkI0;GoTdraOcYHRl%@%XO%yFNC`}V? zoG6+yC`}X2ohVvoP?{!OK2bF1NIfQ+CLBRgw8Wq^O}K}mXsM#S3&&{`MJo(S(}XK2 ziq;yGrU?gA6wN*=b4-OaO}L$+Xw;xIO*o^XXwslGO}MC{Xt_aYns8i2(Heu&G~v#Q zqV)!)X~M}BMRPmq3DY#;`ii0nMR^yFLoAAx8I-08H(3--8I-08=UEi3Gbl|HF109{ zlbboF@b|9q7d;$pQMAOMG)=hQqG+i>X_|1#MbQd_(lp_!i=wp#rD?)}7e%u>=`qnX z;ns_yQAK$dj2;u zpfpXmd825`pfpW5f1_xfL1~(B2}jYKu6j%~O*o39Xo*2-ns6US(NcrbG~rZ^q7??E zX~NYUMQau1T{sTtD4Kn2=9r>1O}M3_Xw;xIO*pHgXwslGO}Mb5Xt_aYns97K(Heu& zG~w=!qV)!)X~GE}MRU993DY#;8jqq0gVHqNFpr{T2Bm4jjUGi)it;WT=Xw;aGbl|H zF83&!(>-%c`7}*9;-hGZL1~(B&qvWxgVHqNw2z_{2Bm4jl^;cG4NB95gFlL9AE(De z(}deUibf4e)AS+C04bU@C`}VC0x4RqDDT2?97xd`gVHqNPLQJY2Bm4j$sk2@dt^>H zM$?4rL5d~}O4EcxLW-6dl%@$cg%nL0l%@&ig%qtbC`}VC4Jn#)ydD!x6OIlkT4GR| zCfpxVv{X^vh2s>Fq7??EX~I<^MQaU8(}V*>ie{gXIi>=dCfq7gG-^nsC=h(Rzc@G~vXNqPcl`!Zb~|cBE)RQQn2)@R6cr2Bm4j z4J1W(@3Vxz$s3K+G~pbQqICwPX~JbBMROwhPo-(Xkt9V+3`*04dr69x8kD99r;`+| zFeptEt|%#5Yfzdd98^*?JF3S-(}defibfUXT{zAxDVj7WO%pCIDOzq&nkF1yQnbdP zG)=g}q-ecCX_|17NzvT=%n29LG~qgvq6vf2G_8f9CPm8(O4Ed!O^T)rO4Ee%O^VhT zl%@%noD|K8WsZq=;W+A~Xo*2-nsDDq(NcrbG~v{fq7??EX~NYfMQaU8(}V+1ie?w+ zG0`;P7L=m9cMRn@9KK9~jULWIDVj7WO%pCeDOzq&nkF2JQnbdPG)=f0rD(mPybH$( zDMfSRnPUncG{IxSH7P|C2Bm4jVJSt+3`*048&is=3`*04b5n}e8I-08m!}lXDb!=4 z&n6t9QnbXNG)=firD&-^X_|1FO3?~~(lp^pm7=v7R5q(H5;$0;Xm-(_W6BSo|3wtH zs}zkIl%@%1tQ1Wel%@$6trRUcC`}WNTPa#&P?{#(xl**=pfpW5d8KG>v7RtZ6Ruw= znlLC$6Aoc1T4qq1CfvkQG^Hr-!f_r;(K>_Df79VomZCW)W{!z}BLzpZ6fH3*O%v{C zDOze!nkJmmQnbRLG)=gwrD&}|X_|0gOVR9;^q6RxaBEA^s6lC(aCS@4q(Nz#aDhwF zaz%L;j$>Sk))MUw`lX~M-YMavCJ(}d$;iq;sErU`e% z6sIjci}i|rfAZjG)=g0rf9iAX_|2COwk&H(lp`jnWFUurOzguKvOigBy++AG)=gM zrf9;TG)*{+rf8W#X_{~&P0^G=X_{~@P0>1o(lp_6nxZ+UW{!z>;W(nEXo*2-ns84| z(NcrbG~u+Gq7??EX~LB?MQaU8(}aU-ie{gt$3)YF+iQwO4NB95Gi-_`4NB95i)@OP z8uriA3`*04LvD(e8I-08H{BFX z8I-08=iL;oGbl|HF1;z5(^rp)rU^&i6fH3*O%v|FDOze!nkJlrQ?$aMG)=e)r)aIB zybH&HI7PGjWsWI)ZX4gOa4SyHs6lC(a5hfSq(Nz#a6wMda)Z(|;h3DFH3p?=!d*E< z>kUfNgcEa$=JwYUrfI^pIYko&rD?+9IYrA1O4EcJbc&`FG1gUbFL`ikRsiq;sErU`fO6s^b3B z9!(Rj<0+ajC`}U%*G~rmEqBRDkX~Nw;Me7Yp(}WX#islZ|6Q*gxH9tiYit;WThy4^SGbl|H zZu}{lGAKeuu=d8>zMQNIF1W?fugVHqN9-yM72Bm4jX+T9Q3`*04 zD}jpE8kD992Llz&9<0Yi(}dfBibfUXT{zANDw;GXO%pB(Dq3z(nkF06|FNUO%pB^ zDw>nX924)takNm;5`)q-;eMf_r3R&G!YM;VD-250gsX;%)*6(i2?q`p%^sr1MAL*@ zhl)lGO4Ee1hl(Z*O4Ec3h>DgQl%@&C5EZR4C`}XYA}U(1DDT2?B2m%Yp_vmdplQOj zL`4$@rD?+9L`BOCO4EcJii)NTO4EdMii*}5l%@%n6&1}HrpH9ngd>ZJmKc<#3HKHi zEj1`j6HYHGT47L{CR|}uv{q5xh2tQjqS?bU$Hc!Ej@yiiMh!~SgfoqbCJjo{go}-e zmK&6&3C9~1tuZJ~6Ye-FT5nLACY*FsH1`}mVVWjfcT_ZCP?{zjdQ`N`pfpXm`KV}0 zQQn2){G+0E2Bps?T!K_IXGG?h`1itb6jIR=gVHqNKBS_h2Bm4jsYpdD3`*04tC5P< z8kD992P75EK39*4rU|zs6^$B{rU_>y6-^qHrU@4&6)jhkci}iTsc4NsX_|0%Qqg*Y z(q|J+P%4^xUgm_uASD)LxJIdH!k{!wI83Q%nL%lqaHCSultF2laIR9(I)lN+C99L Um9?|c&PFF+la-Z73$n8Q5BX}UPyhe` literal 53412 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 diff --git a/tests/fixtures/stored.zip b/tests/fixtures/stored.zip index 37ac5802beb403a333fe323be3d59e12708d3b82..c25d65d4e47714a2633a05e53913160af3b30618 100644 GIT binary patch delta 32 jcmaFI{f?V2z?+#xgaHB+88-6GV`X7rP-K|Afz=KGXoCgi delta 32 jcmaFI{f?V2z?+#xgaHJ2maD{WK diff --git a/tests/fixtures/symlink.zip b/tests/fixtures/symlink.zip index 0756f250347a8eb070b2304e2ac62b52a27411cc..8da44903d3626ed6694a8128b05f5fbc7fe58e08 100644 GIT binary patch delta 30 fcmX@lc%G3jz?+#xgaHB+87A@tvM?|J>Es*$P`Cv9 delta 30 fcmX@lc%G3jz?+#xgaHJ2maD{0