Ë OYB£ÕÇÙãóz—dZddlZddlZddlmZddlmZddlmZddl m Z m Z m Z m Z mZmZmZmZmZmZdd lmZdd lmZmZmZdd lmZdZGd „d «Zd#d„Zd#d„Zd$d„Zd#d„Z d„Z!d„Z"ejFdd¬«Gd„d««Z$d„Z%d„Z&dZ' d%d„Z(d#d„Z)d#d„Z*Gd„d«Z+Gd „d!«Z,d"„Z-y)&z4Helper class to compute deltas stored inside revlogséNé)Únullrev)Ú_)Úgetattré) ÚCOMP_MODE_DEFAULTÚCOMP_MODE_INLINEÚCOMP_MODE_PLAINÚDELTA_BASE_REUSE_FORCEÚDELTA_BASE_REUSE_NOÚKIND_CHANGELOGÚ KIND_FILELOGÚKIND_MANIFESTLOGÚREVIDX_ISCENSOREDÚREVIDX_RAWTEXT_CHANGING_FLAGS)Úattr)ÚerrorÚmdiffÚutil)Úflagutilcó6—eZdZdZd d„Zd„Zd„Zd„Zd„Zd„Z y) Ú _testrevlogz)minimalist fake revlog to use in doctestscó\—||_||_||_t|«|_d|_y)z.data is an list of revision payload boundariesN)Ú_dataÚ_srdensitythresholdÚ _srmingapsizeÚsetÚ _snapshotÚindex)ÚselfÚdataÚdensityÚmingapÚsnapshots ú@usr/lib/python3.12/site-packages/mercurial/revlogutils/deltas.pyÚ__init__z_testrevlog.__init__1s+€àˆŒ Ø#*ˆÔ Ø#ˆÔܘX›ˆŒØˆ� ócóF—|tk(ry|dk(ry|j|dz S)Nrr©rr©r Úrevs r%Ústartz_testrevlog.start9s)€Ø ”'Š>ØØ �!Š8ØØ�z‰z˜# ™'Ñ"Ð"r'có4—|tk(ry|j|S©Nrr)r*s r%Úendz_testrevlog.end@s€Ø ”'Š>ØØ�z‰z˜#‰Ðr'cóH—|j|«|j|«z S©N©r/r,r*s r%Úlengthz_testrevlog.lengthEs€Ø�x‰x˜‹}˜tŸz™z¨#›Ñ.Ð.r'có,—t|j«Sr1)Úlenr©r s r%Ú__len__z_testrevlog.__len__Hs€Ü�4—:‘:‹Ðr'có2—|tk(ry||jvS)NT)rrr*s r%Ú issnapshotz_testrevlog.issnapshotKs€Ø ”'Š>ØØ�d—n‘nÐ$Ð$r'N)çà?r©) Ú__name__Ú __module__Ú __qualname__Ú__doc__r&r,r/r3r7r9r;r'r%rr.s#„Ù3óò#òò /òó%r'rc#óì‡K—|�t|‰j«}t‰jdd«}|€ˆfd„}||‰j‰j«D]}t ‰||«D]}|–—ŒŒy­w)a“slice revs to reduce the amount of unrelated data to be read from disk. ``revs`` is sliced into groups that should be read in one time. Assume that revs are sorted. The initial chunk is sliced until the overall density (payload/chunks-span ratio) is above `revlog._srdensitythreshold`. No gap smaller than `revlog._srmingapsize` is skipped. If `targetsize` is set, no chunk larger than `targetsize` will be yield. For consistency with other slicing choice, this limit won't go lower than `revlog._srmingapsize`. If individual revisions chunk are larger than this limit, they will still be raised individually. >>> data = [ ... 5, #00 (5) ... 10, #01 (5) ... 12, #02 (2) ... 12, #03 (empty) ... 27, #04 (15) ... 31, #05 (4) ... 31, #06 (empty) ... 42, #07 (11) ... 47, #08 (5) ... 47, #09 (empty) ... 48, #10 (1) ... 51, #11 (3) ... 74, #12 (23) ... 85, #13 (11) ... 86, #14 (1) ... 91, #15 (5) ... ] >>> revlog = _testrevlog(data, snapshot=range(16)) >>> list(slicechunk(revlog, list(range(16)))) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]] >>> list(slicechunk(revlog, [0, 15])) [[0], [15]] >>> list(slicechunk(revlog, [0, 11, 15])) [[0], [11], [15]] >>> list(slicechunk(revlog, [0, 11, 13, 15])) [[0], [11, 13, 15]] >>> list(slicechunk(revlog, [1, 2, 3, 5, 8, 10, 11, 14])) [[1, 2], [5, 8, 10, 11], [14]] Slicing with a maximum chunk size >>> list(slicechunk(revlog, [0, 11, 13, 15], targetsize=15)) [[0], [11], [13], [15]] >>> list(slicechunk(revlog, [0, 11, 13, 15], targetsize=20)) [[0], [11], [13, 15]] Slicing involving nullrev >>> list(slicechunk(revlog, [-1, 0, 11, 13, 15], targetsize=20)) [[-1, 0], [11], [13, 15]] >>> list(slicechunk(revlog, [-1, 13, 15], targetsize=5)) [[-1], [13], [15]] NÚslicechunktodensitycó •—t‰|||«Sr1)Ú_slicechunktodensity)ÚxÚyÚzÚrevlogs €r%Úzslicechunk..“sø€Ô)=¸fÀaÈÈAÔ)Nr')ÚmaxrrrrÚ_slicechunktosize)rGÚrevsÚ targetsizeÚdensityslicingÚchunkÚsubchunks` r%Ú slicechunkrPQsøèø€ðxÐܘ V×%9Ñ%9Ó:ˆ ô˜VŸ\™\Ð+@À$ÓG€NØÐÛNˆÙØ ˆf×(Ñ(¨&×*>Ñ*>öˆô*¨&°%¸ÖDˆHØ‹NñEñùsƒA1A4c#óK—|�d|ksJ‚|j|d«}|j|d«}||z }|�||kr|–—yd}d}t|«}t|«|D]g\} } |j| «|z } |j | «} | |kr| r| dz}n,t ||||«} | r| –—| }|j| «}| dz}| rŒgnt |«}||z |kDr•|}||z dkrnŠ|j||dz «}||z } | |kDr6||z dkrn-|||z dzz}|j||dz «}||z } | |kDrŒ6t ||||«} | r| –—|}|j||«}||z |kDrŒ•t |||«} | r| –—yy­w)aJ slice revs to match the target size This is intended to be used on chunk that density slicing selected by that are still too large compared to the read garantee of revlog. This might happens when "minimal gap size" interrupted the slicing or when chain are built in a way that create large blocks next to each other. >>> data = [ ... 3, #0 (3) ... 5, #1 (2) ... 6, #2 (1) ... 8, #3 (2) ... 8, #4 (empty) ... 11, #5 (3) ... 12, #6 (1) ... 13, #7 (1) ... 14, #8 (1) ... ] == All snapshots cases == >>> revlog = _testrevlog(data, snapshot=range(9)) Cases where chunk is already small enough >>> list(_slicechunktosize(revlog, [0], 3)) [[0]] >>> list(_slicechunktosize(revlog, [6, 7], 3)) [[6, 7]] >>> list(_slicechunktosize(revlog, [0], None)) [[0]] >>> list(_slicechunktosize(revlog, [6, 7], None)) [[6, 7]] cases where we need actual slicing >>> list(_slicechunktosize(revlog, [0, 1], 3)) [[0], [1]] >>> list(_slicechunktosize(revlog, [1, 3], 3)) [[1], [3]] >>> list(_slicechunktosize(revlog, [1, 2, 3], 3)) [[1, 2], [3]] >>> list(_slicechunktosize(revlog, [3, 5], 3)) [[3], [5]] >>> list(_slicechunktosize(revlog, [3, 4, 5], 3)) [[3], [5]] >>> list(_slicechunktosize(revlog, [5, 6, 7, 8], 3)) [[5], [6, 7, 8]] >>> list(_slicechunktosize(revlog, [0, 1, 2, 3, 4, 5, 6, 7, 8], 3)) [[0], [1, 2], [3], [5], [6, 7, 8]] Case with too large individual chunk (must return valid chunk) >>> list(_slicechunktosize(revlog, [0, 1], 2)) [[0], [1]] >>> list(_slicechunktosize(revlog, [1, 3], 1)) [[1], [3]] >>> list(_slicechunktosize(revlog, [3, 4, 5], 2)) [[3], [5]] == No Snapshot cases == >>> revlog = _testrevlog(data) Cases where chunk is already small enough >>> list(_slicechunktosize(revlog, [0], 3)) [[0]] >>> list(_slicechunktosize(revlog, [6, 7], 3)) [[6, 7]] >>> list(_slicechunktosize(revlog, [0], None)) [[0]] >>> list(_slicechunktosize(revlog, [6, 7], None)) [[6, 7]] cases where we need actual slicing >>> list(_slicechunktosize(revlog, [0, 1], 3)) [[0], [1]] >>> list(_slicechunktosize(revlog, [1, 3], 3)) [[1], [3]] >>> list(_slicechunktosize(revlog, [1, 2, 3], 3)) [[1], [2, 3]] >>> list(_slicechunktosize(revlog, [3, 5], 3)) [[3], [5]] >>> list(_slicechunktosize(revlog, [3, 4, 5], 3)) [[3], [4, 5]] >>> list(_slicechunktosize(revlog, [5, 6, 7, 8], 3)) [[5], [6, 7, 8]] >>> list(_slicechunktosize(revlog, [0, 1, 2, 3, 4, 5, 6, 7, 8], 3)) [[0], [1, 2], [3], [5], [6, 7, 8]] Case with too large individual chunk (must return valid chunk) >>> list(_slicechunktosize(revlog, [0, 1], 2)) [[0], [1]] >>> list(_slicechunktosize(revlog, [1, 3], 1)) [[1], [3]] >>> list(_slicechunktosize(revlog, [3, 4, 5], 2)) [[3], [5]] == mixed case == >>> revlog = _testrevlog(data, snapshot=[0, 1, 2]) >>> list(_slicechunktosize(revlog, list(range(9)), 5)) [[0, 1], [2], [3, 4, 5], [6, 7, 8]] Nréÿÿÿÿrr)r,r/Ú enumerateÚnextr9Ú _trimchunkr5)rGrKrLÚ startdataÚenddataÚfullspanÚ startrevidxÚ endrevidxÚiterrevsÚidxÚrÚspanr$rNÚnbitemÚ localenddatas r%rJrJ›s÷èø€ðF Ð   j¢Ð0Ð 0Ø— ‘ ˜T !™WÓ%€IØ�j‰j˜˜b™Ó"€GؘÑ"€HØÐ˜X¨Ò3ØŠ Øà€KØ€Iܘ‹€H܈„N㉈ˆQØ�z‰z˜!‹}˜yÑ(ˆØ×$Ñ$ QÓ'ˆØ �:Ò ¡(ؘa™‰Iä˜v t¨[¸)ÓDˆEÙØ’ ؈KØŸ ™  Q›ˆIؘa™ˆIÚÙ ðô&�‹Y€FØ �YÑ  *Ò ,؈ Ø �KÑ  1Ò $Ø Ø—z‘z $ y°1¡}Ñ"5Ó6ˆ ؘiÑ'ˆØ�ZÒØ˜;Ñ&¨!Ò+ØØ ˜) kÑ1°aÑ7Ñ 7ˆIØ!Ÿ:™: d¨9°q©=Ñ&9Ó:ˆLØ )Ñ+ˆDð �ZÓô ˜6 4¨°iÓ@ˆÙ ØŠK؈ Ø—L‘L  kÑ!2Ó3ˆ ð! �YÑ  *Ó ,ô$ �v˜t [Ó 1€EÙ Ø‹ ð ùs‚CFÃA7FÅ2FÅ3Fc#óÞ‡K—|j}|jŠt|«dkr|–—yt||«}||kr|–—y|}t ˆfd„|D««}|r|t |«z }nd}||k\r|–—yg} d} t |«D]?\} } || «} ‰| «}|dk(rŒ| �| | z }||kDr| j|| f«| |z} ŒA| j«g}| rL||krG| j«\}}|j|«||z}|dkDr|t |«z }nd}| r||krŒG|j«d}|D]}t||||«}|r|–—|}Œt|||«}|r|–—yy­w)ažslice revs to reduce the amount of unrelated data to be read from disk. ``revs`` is sliced into groups that should be read in one time. Assume that revs are sorted. The initial chunk is sliced until the overall density (payload/chunks-span ratio) is above `targetdensity`. No gap smaller than `mingapsize` is skipped. >>> revlog = _testrevlog([ ... 5, #00 (5) ... 10, #01 (5) ... 12, #02 (2) ... 12, #03 (empty) ... 27, #04 (15) ... 31, #05 (4) ... 31, #06 (empty) ... 42, #07 (11) ... 47, #08 (5) ... 47, #09 (empty) ... 48, #10 (1) ... 51, #11 (3) ... 74, #12 (23) ... 85, #13 (11) ... 86, #14 (1) ... 91, #15 (5) ... ]) >>> list(_slicechunktodensity(revlog, list(range(16)))) [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]] >>> list(_slicechunktodensity(revlog, [0, 15])) [[0], [15]] >>> list(_slicechunktodensity(revlog, [0, 11, 15])) [[0], [11], [15]] >>> list(_slicechunktodensity(revlog, [0, 11, 13, 15])) [[0], [11, 13, 15]] >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14])) [[1, 2], [5, 8, 10, 11], [14]] >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14], ... mingapsize=20)) [[1, 2, 3, 5, 8, 10, 11], [14]] >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14], ... targetdensity=0.95)) [[1, 2], [5], [8, 10, 11], [14]] >>> list(_slicechunktodensity(revlog, [1, 2, 3, 5, 8, 10, 11, 14], ... targetdensity=0.95, mingapsize=12)) [[1, 2], [5, 8, 10, 11], [14]] rNc3ó.•K—|] }‰|«–—Œy­wr1r;)Ú.0r]r3s €r%Ú z'_slicechunktodensity..usøèø€Ð/©$ Q‘v˜a—y©$ùsƒgð?r) r,r3r5Ú segmentspanÚsumÚfloatrSÚappendÚsortÚpoprU)rGrKÚ targetdensityÚ mingapsizer,ÚdeltachainspanÚreaddataÚ chainpayloadr"ÚgapsÚprevendÚir+ÚrevstartÚrevlenÚgapsizeÚselectedÚgapidxÚprevidxr\rNr3s @r%rCrC6s´øèø€ðb �L‰L€EØ �]‰]€Fä ˆ4ƒy�A‚~ØŠ Øä  ¨Ó.€Nà˜ Ò"ØŠ Øà€HÜÓ/©$Ó/Ó/€LáØ¤ ~Ó!6Ñ6‰àˆà�-ÒØŠ Øð €DØ€GܘD–/‰ˆˆ3Ù˜“:ˆÙ˜“ˆð �QŠ;Ø à Ð Ø Ñ(ˆGà˜Ò#Ø— ‘ ˜W a˜LÔ)à˜VÑ#‰ð"ð  ‡I�I„Kð€HÙ �7˜]Ò*ØŸ(™(›*‰ˆ�à�‰˜Ôð �GÑˆØ �aŠ<Ø"¤U¨8£_Ñ4‰GàˆGñ �7˜]Ó*ð ‡M�M„Oð€GÛˆä˜6 4¨°#Ó6ˆÙ ØŠKà‰ð ô �v˜t WÓ -€EÙ Ø‹ ð ùs ƒD%E-Ä)AE-cóÞ—|j}|€ t|«}||dz t|«kr<|dkDr7||kDr2|||dz «dk(r!|dz}|dkDr||kDr|||dz «dk(rŒ!|||S)a²returns revs[startidx:endidx] without empty trailing revs Doctest Setup >>> revlog = _testrevlog([ ... 5, #0 ... 10, #1 ... 12, #2 ... 12, #3 (empty) ... 17, #4 ... 21, #5 ... 21, #6 (empty) ... ]) Contiguous cases: >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0) [0, 1, 2, 3, 4, 5] >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0, 5) [0, 1, 2, 3, 4] >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 0, 4) [0, 1, 2] >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 2, 4) [2] >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 3) [3, 4, 5] >>> _trimchunk(revlog, [0, 1, 2, 3, 4, 5, 6], 3, 5) [3, 4] Discontiguous cases: >>> _trimchunk(revlog, [1, 3, 5, 6], 0) [1, 3, 5] >>> _trimchunk(revlog, [1, 3, 5, 6], 0, 2) [1] >>> _trimchunk(revlog, [1, 3, 5, 6], 1, 3) [3, 5] >>> _trimchunk(revlog, [1, 3, 5, 6], 1) [3, 5] rr)r3r5)rGrKÚstartidxÚendidxr3s r%rUrU´s•€ðL�]‰]€Fà €~Ü�T“ˆð ˆF�Q‰JÑœ#˜f›+Ò%ð �QŠJ˜6 HÒ,±¸¸VÀa¹ZÑ8HÓ1IÈQÒ1Nà �a‰KˆFð �QŠJ˜6 HÒ,±¸¸VÀa¹ZÑ8HÓ1IÈQÓ1Nð �˜Ð Ð r'có^—|sy|j|d«}||j|d«z S)aÅGet the byte span of a segment of revisions revs is a sorted array of revision numbers >>> revlog = _testrevlog([ ... 5, #0 ... 10, #1 ... 12, #2 ... 12, #3 (empty) ... 17, #4 ... ]) >>> segmentspan(revlog, [0, 1, 2, 3, 4]) 17 >>> segmentspan(revlog, [0, 4]) 17 >>> segmentspan(revlog, [3, 4]) 5 >>> segmentspan(revlog, [1, 2, 3,]) 7 >>> segmentspan(revlog, [1, 3]) 7 rrRr2)rGrKr/s r%rereês4€ñ0 ØØ �*‰*�T˜"‘XÓ €CØ �—‘˜d 1™gÓ&Ñ &Ð&r'cóø—tjd«}|d|tj|j |«t |«|z «k(r||d} n)|j ||¬«} tj| |«} tj|| |«} | r|j| |||¬«|tzr!tjtd«|z«‚ | S#tj$r|tzs‚Y| SwxYw)zlllN©Ú_df)Úp1Úp2snode %s is not censored)ÚstructÚcalcsizerÚreplacediffheaderÚrawsizer5ÚrevisionÚpatchrÚprocessflagsrawÚ checkhashrrÚ StorageErrorrÚCensoredNodeError) ÚfhrGÚbaserevÚdeltar€r�ÚflagsÚ expectednodeÚhlenÚfulltextÚbasetextÚ validatehashs r%Ú_textfromdeltar•s €ô �?‰?˜7Ó #€DØ ˆUˆd€|”u×.Ñ.Ø�‰�wÓ¤ U£¨dÑ!2óòð˜˜�<‰ð—?‘? 7°�?Ó3ˆÜ—;‘;˜x¨Ó/ˆð Ü×/Ñ/°¸À%ÓHˆ Ù Ø × Ñ ˜X |¸¸rÐ Ô BØ Ô$Ò $Ü×$Ñ$ÜÐ,Ó-° Ñ<óð ð %ð €Oøô × "Ñ "òàÔ(Ò(Ø ð)à €Oð úsÁ=ACÃC9Ã8C9T)ÚslotsÚfrozencó—eZdZej«Zej«Zej«Zej«Zej«Z ej«Z ej«Z ej«Z y)Ú _deltainfoN) r<r=r>rÚibÚdistanceÚdeltalenr!ÚbaseÚ chainbaseÚchainlenÚcompresseddeltalenÚ snapshotdepthr;r'r%r™r™'sk„àˆt�w‰w‹y€H؈t�w‰w‹y€HØ ˆ4�7‰7‹9€DØ ˆ4�7‰7‹9€DØ�—‘“ €I؈t�w‰w‹y€HØ ˜Ÿ™›ÐØ�D—G‘G“I�Mr'r™c ó"—|jddk(sJ|jd«‚t|j|jdz d|jdf|j|j |j |j|j«S)z’turn into a "u" (no-compression) into no-compression without header This is useful for revlog format that has better compression method. róurr') r!r™r›rœr�ržrŸr r¡)rŽs r%Údrop_u_compressionr¤3s~€ð �:‰:�a‰=˜DÒ Ð/ %§*¡*¨Q¡-Ó/Ð Ü Ø �‰Ø �‰˜ÑØ ˆe�j‰j˜‰mÐØ � ‰ Ø �‰Ø �‰Ø × Ñ Ø ×Ñó ð r'cóf—|€y|j�$|jdtk7s|jrJ‚|j}|dz}|j}|s |j }t ||«}|js||j kry||jkry|tz|jkry|jr|j|jkry|j�||jz |jkry|jr)|j|j«|jkryy)zžReturns True if the given delta is good. Good means that it is within the disk span, disk size, and chain length bounds that we know to be performant.FréT)Ú cachedeltar Ú _generaldeltaÚtextlenÚ_maxdeltachainspanr›rIÚ _sparserevlogrœÚLIMIT_DELTA2TEXTr Ú _maxchainlenrŸr¡r3r�)rGÚ deltainfoÚrevinfor©Ú defaultmaxÚmaxdists r%Úis_good_delta_infor²Es9€ðÐØð ×ÑÐ"Ø × Ñ ˜aÑ Ô$:Ò :Ø×#Ò#ðð $ð�o‰o€Gؘ1‘€JØ×'Ñ'€GÙ Ø×$Ñ$ˆÜ�'˜:Ó&€Gð × Ò  G¨i×.@Ñ.@Ò$@Øð �×#Ñ#Ò#Øð Ô!Ñ! I×$@Ñ$@Ò@Øð ×Ò˜v×2Ñ2°Y×5GÑ5GÒGØð ×ÑÐ+Ø ˜ ×/Ñ/Ñ /°9×3EÑ3EÒ Eàð ×ÒØ �M‰M˜)Ÿ.™.Ó )¨I×,>Ñ,>Ò >àà r'iôc#óàK—t|«r |jsd–—y|€ t|«}|js |dz f–—d–—y|�|dtk7s|jrJ‚|j}|j } |j } d} |tz} |j} th}t|||||¬«} |j| «}|€�n g}|D�]&}|tk(s;||vs7||«s/|j|«| |«}|tk(s ||vs ||«sŒ/|tk(rŒR||vrŒW|�||vr|j|«Œo|�||k\r|j|«Œˆ| |j |«kr|j|«Œ®| r-|j|«|tzkr|j|«ŒÝ|j|«t zr|j|«�Œ|j#|«\}}|j$r"||j$k\r|j|«�ŒJ| |kr|j|«�Œb| r²|j&�¦|j&}||tf}||vr�|j)|«r||j+|«}|j|«}t-||z d«}||z}||z }||kr|j|«�Œí|j |«}||kr|j|«�Œ|j/|«�Œ)|rn| dk(r|j1|«t3|«–—} nJ| }t5dt|«| «D]/}|||| z}|j1|«t3|«–—} || k(sŒ/n�Œµd–—y­w)zÕProvides group of revision to be tested as delta base This top level function focus on emitting groups with unique and worthwhile content. See _raw_candidate_groups for details about the group order. Nrr©Úsnapshot_cacher)r5Ú_storedeltachainsr¨r r3Ú deltaparentr«r¬Ú_candidate_group_chunk_sizerÚ_refinedgroupsÚsendÚaddr…ÚLIMIT_BASE2TEXTr�rÚ _chaininfor­Úupperboundcompr9r¡rIrhÚupdateÚtupleÚrange) rGr©r€r�r§Úexcluded_basesÚ target_revrµÚ deltalengthr·ÚsparseÚgoodÚ deltas_limitÚgroup_chunk_sizeÚtestedÚ candidatesÚ temptativeÚgroupr+rŸÚ chainsizeÚmaxcompÚ basenotsnapr¡ÚrevsizeÚrawsizedistanceÚlowestrealisticdeltalenÚ snapshotlimitÚ revlengthÚ prev_goodr,Ú sub_groups r%Ú_candidategroupsr×�s˜èø€ô �ŒK˜F×4Ò4ØŠ ØàÐܘ“[ˆ à × Ò à˜A‰~ÐÒØŠ Øð ÐØ �a‰=Ô2Ò 2Ø×#Ò#ðð $ð —-‘-€KØ×$Ñ$€KØ × !Ñ !€FØ €DàÔ-Ñ-€LØ×9Ñ9ÐäˆY€FÜØØ Ø ØØ%ô €Jð Ø—_‘_ TÓ*ˆ Ø Ð Ù ØˆÜˆCàœg’~¨°©¹+ÀcÔ:JØ— ‘ ˜3”Ù! #Ó&�ðœg’~¨°©¹+ÀcÕ:Jð ”gŠ~Øà�f‰}ØðÐ)¨c°^Ñ.CØ— ‘ ˜3”ØðÐ%¨#°Ò*;Ø— ‘ ˜3”Øà˜fŸm™m¨CÓ0Ò0Ø— ‘ ˜3”ØÙ˜&Ÿ.™.¨Ó-°¼OÑ1KÒLØ— ‘ ˜3”Øà�|‰|˜CÓ Ô#@Ò@Ø— ‘ ˜3”Ùð #)×"3Ñ"3°CÓ"8Ñ ˆH�ià×"Ò" x°6×3FÑ3FÒ'FØ— ‘ ˜3”Ùà˜iÒ'Ø— ‘ ˜3”ÙÙ˜&×/Ñ/Ð;Ø ×/Ñ/�Ø! 2¤wÐ/� ؘkÑ)¨f×.?Ñ.?ÀÔ.DØ$*×$8Ñ$8¸Ó$=�Mð%Ÿn™n¨SÓ1�GÜ&)¨'°GÑ*;¸QÓ&?�Oà.=ÀÑ.HÐ+ð%,¨}Ñ$<�MØ$Ð'>Ò>àŸ ™  3œÙ ð!'§ ¡ ¨cÓ 2�IØ Ð#:Ò:àŸ ™  3œÙ à �L‰L˜Ö ðUñV ð  1Ò$Ø— ‘ ˜eÔ$Ü" 5›\Ñ)‘à � Ü" 1¤c¨%£jÐ2BÖC�EØ % e¨eÐ6FÑ.FÐ G�IØ—M‘M )Ô,Ü!& yÓ!1Ñ1�DØ  DÓ(Ùð DñE ðR ƒJùs‚DM.ÄIM.Í$ M.c#órK—d}d}|�9|dtkDr-|� |dxxdz cc<|df–—}|�|� |dxxdz cc<d–—y|€ t«}t|||||«}|D] }|–—}|€Œ n|jsd–—y|�¢|||fvrœ|j |«r‹d} | |k7r(|} |j |«} | t k(rn | f–—}| |k7rŒ(|js|j||dz«d} || k7r4|} ttd„|j|D«««} | –—}|| k7rŒ4|�|€ |dxxdz cc<d–—y­w)Nrzcached-delta.testedrrzcached-delta.acceptedc3ó K—|]}|–—Œy­wr1r;)rcÚcs r%rdz!_refinedgroups..vsèø€Ð#NÑ/M¨!¤AÑ/Mùs‚ z no-solution) r Ú SnapshotCacheÚ _rawgroupsr«r9r·rÚ snapshotsr¿rÀÚsorted) rGr€r�r§rµrÆÚ debug_infoÚgroupsrÊÚpreviousr�Úchildrens r%r¹r¹?sªèø€Ø €Dð€JØÐ *¨Q¡-Ô2EÒ"Eð Ð !Ø Ð,Ó -°Ñ 2Ó -Ø  ‘mÐ%Ñ%ˆØ Ð ØÐ%ØÐ2Ó3°qÑ8Ó3ØŠJØ ØÐÜ&›ˆÜ ØØ Ø ØØó €Fóˆ ØÑˆØ Ñ Ù ðð × Ò ØŠ Øð ИD¨¨R¨Ñ0°V×5FÑ5FÀtÔ5LàˆØ˜$ÒØˆHØ×%Ñ% dÓ+ˆDØ”wŠØØ˜‘=ˆDð ˜$Óð×'Ò'Ø × !Ñ ! &¨$°©(Ô 3؈Ø�hÒØˆHÜœVÑ#N¨~×/GÑ/GÈÒ/MÓ#NÓNÓOˆHØ!‘>ˆDð�hÓð ÐØ ˆ<Ø �}Ó %¨Ñ *Ó %à ƒJùs‚A&D7Á)AD7ÃAD7Ä!D7c#óÒ‡K—‰jsJ‚‰j}t‰«}|dz }ˆfd„}||fD� cgc]} | tk7sŒ | ‘Œ} } ‰js/t| «dk(r!| j «| df–—| df–—nt| «dkDr| –—|�r,| �r)|€ t «}tjt«} | D� cgc] } || «‘Œ } } | D]<} t| «D],\}}‰j|«sŒ'| |j|«Œ.Œ>t| d«dz}|j‰|«t«}| D]} |j| «Œd}‰j||«D] }||vsŒ|}n|�ht!| j#««}||«} t| «D]9\}}||krŒ ||krn)‰j|«sn| |j|«Œ;d}t%| j'«d¬«D]‚\}}t«}|D] }|j|j(|«Œ"|�|D�cgc] }||ksŒ |‘Œ }}t+t%|««–—t+t%|««–—t|«}Œ„|j(tD�cgc] }||ksŒ |‘Œ }}t+t%|««–—|s|f–—yycc} wcc} wcc}wcc}w­w)zÿProvides group of revision to be tested as delta base This lower level function focus on emitting delta theorically interresting without looking it any practical details. The group order aims at providing fast or small candidates first. rcó,•—‰j|«dSr.)Ú _deltachain)r+rGs €r%rHz_rawgroups..Žsø€˜V×/Ñ/°Ó4°QÒ7r'rrNT)Úreverse)r¨r«r5rÚ_deltabothparentsrirÛÚ collectionsÚ defaultdictrrSr9r»Úminr¿rKrIÚkeysrÞÚitemsrÝrÀ)rGr€r�r§rµrÅÚcurrÚprevÚ deltachainÚpÚparentsÚ parents_snapsÚcandidate_chainsÚchainr\ÚsÚ snapfloorÚall_revsÚotherr]Ú max_depthÚdepthÚfloorÚsnapsÚsiblingsÚfulls` r%rÜrÜ€süøèø€ð × Ò ÐÐ à × !Ñ !€FÜ ˆv‹;€DØ �!‰8€DÛ7€Jð˜r™(Ó3™(�Q a¬7£lŠq˜(€GÐ3à × #Ò #¬¨G« ¸Ò(9Ø� ‰ Œð�q‰zˆmÒà�q‰zˆmÓÜ ˆW‹˜Ò àŠ â ’'Ø Ð !ä*›_ˆNô $×/Ñ/´Ó4ˆ Ù3:Ó;±7¨a™J q�M°7ÐÐ;Û%ˆEÜ# EÖ*‘��QØ×(Ñ(¨Ô+ÙØ˜cÑ"×&Ñ& qÕ)ñ+ð&ô ˜  aÑ(Ó)¨AÑ-ˆ Ø×јf iÔ0ô“5ˆÛ%ˆEØ �O‰O˜EÕ "ð&àˆØ—‘˜T 9Ö-ˆAØ˜Ò Ø�Ùð.ð Ð ô˜M×.Ñ.Ó0Ó1ˆIÙ˜uÓ%ˆEÜ% eÖ,‘��qØ�y’=ØØ˜uÒ$ÙØ×(Ñ(¨Ô+ÙØ˜eÑ$×(Ñ(¨Õ+ð-ðˆÜ  ×!4Ñ!4Ó!6À×E‰JˆC�Ü“uˆHÛ�Ø—‘ × 8Ñ 8¸Ñ ;Õ<ððÐ ñ (0Ó=¡x !°5¸1³9šA x�Ð=Üœ˜xÓ(Ó)Ò )䜘u› Ó&Ò &ܘ“J‰Eð-Fð>*×3Ñ3´GÒ<ÓOÑ<�aÀ ÈQÃ’Ð<ˆÐOÜ”F˜4“LÓ!Ò!á ðˆg‹ ð ùòG4ùò.<ùòx>ùòPùsPƒ6K'¹KÁKÁ A>K'à KÃB#K'Å=CK'É KÉKÉAK'Ê# K"Ê.K"Ê25K'có$—eZdZdZd„Zdd„Zd„Zy)rÛ)rÝÚ _start_revÚ_end_revcó\—tjt«|_d|_d|_yr1)rèrérrÝrrr6s r%r&zSnapshotCache.__init__ýs"€Ü$×0Ñ0´Ó5ˆŒØˆŒØˆ� r'có®—t|«}|dz }||kDry|j€"|j�J‚|j|||«n||j|kr||jks^||jkr |j|||jdz «|j|kr |j||jdz|«|j€|j�J‚||_||_n6t |j|«|_t |j|«|_|j|jksJ|j|jf«‚y)z$find snapshots from start_rev to tiprN)r5rrÚ_updaterêrI)r rGÚ start_revÚnb_revsÚend_revs r%r¿zSnapshotCache.updates&€ä�f“+ˆØ˜A‘+ˆØ �wÒ Ø à �?‰?Ð "Ø—=‘=Ð(Ð (Ð(Ø �L‰L˜ ¨GÕ 4Ø—/‘/ YÒ.°7¸d¿m¹mÒ3Kؘ4Ÿ?™?Ò*Ø— ‘ ˜V Y°·±À!Ñ0CÔDØ�}‰}˜wÒ&Ø— ‘ ˜V T§]¡]°QÑ%6¸Ô@à �?‰?Ð "Ø—=‘=Ð(Ð (Ð(Ø#ˆDŒMØ'ˆD�Oä! $§/¡/°9Ó=ˆDŒOÜ § ¡ ¨wÓ7ˆDŒMØ�‰ $§-¡-Ò/ð Ø �O‰OØ �M‰Mð2 ó Ñ/r'có`—|j�=||jks.||jkDsJ|j|j||f«‚|j�=||jks.||jkDsJ|j|j||f«‚|j}tj|j d«r|j j |||«y|j}|j}|j||«D]%}||«sŒ |||«j|«Œ'y)z/internal method that actually do update contentNÚ findsnapshots) rrrÝrÚ safehasattrrr r·r9rKr»)r rGrrÚcacher·r9r+s r%rzSnapshotCache._updates€à�‰Ð&Ø ˜Ÿ™Ò '¨9°t·}±}Ò+Dð @à �O‰O˜TŸ]™]¨I°wÐ ?ó @ð ð�‰Ð&Ø �d—o‘oÒ %¨°4·=±=Ò)@ð @à �O‰O˜TŸ]™]¨I°wÐ ?ó @ð ð—‘ˆÜ × Ñ ˜FŸL™L¨/Ô :Ø �L‰L× &Ñ & u¨i¸Õ Aà ×,Ñ,ˆKØ×*Ñ*ˆJØ—{‘{ 9¨gÖ6�Ù˜c•?Ø™+ cÓ*Ñ+×/Ñ/°Õ4ñ7r'N)r)r<r=r>Ú __slots__r&r¿rr;r'r%rÛrÛús„Ø7€Iòó  ó85r'rÛcóX—eZdZ d d„Zed„«Zd„Zd„Zd d„Zd„Z d d„Z d „Z d „Z y)Ú deltacomputerNcón—||_||_|€d|_n||_||_t «|_y)NF)rGÚ _write_debugÚ _debug_searchÚ _debug_inforÛÚ_snapshot_cache)r rGÚ write_debugÚ debug_searchrßs r%r&zdeltacomputer.__init__2s;€ðˆŒ Ø'ˆÔØ Ð Ø!&ˆDÕ à!-ˆDÔ Ø%ˆÔÜ,›ˆÕr'có>—|jduxs|jduSr1)rrr6s r%Ú _gather_debugzdeltacomputer._gather_debugBs#€à× Ñ ¨Ð,ÒL°×0@Ñ0@ÈÐ0LÐLr'c óô—|j}|d�|dS|j}|j}|d}|d}t|||||j|j |j |j«x}|d<|S)zöBuilds a fulltext version of a revision revinfo: revisioninfo instance that contains all needed info fh: file handle to either the .i or the .d revlog file, depending on whether it is inlined or not rr)ÚbtextrGr§r•r€r�r�Únode) r r¯rŒrrGr§r�rŽr’s r%Ú buildtextzdeltacomputer.buildtextFsŠ€ð— ‘ ˆØ �‰8Рؘ‘8ˆOà—‘ˆØ×'Ñ'ˆ ؘQ‘-ˆØ˜1‘ ˆä,Ø Ø Ø Ø Ø �J‰JØ �J‰JØ �M‰MØ �L‰Ló  ð ˆ�5˜‘8ðˆr'có —|j}|j||«}|j|«r5tj|j |«t |««}||z}|S|j||¬«}tj||«}|S)Nr~) rGrÚ iscensoredrr„r…r5ÚrawdataÚtextdiff) r r�r¯rŒrGÚtÚheaderrŽÚptexts r%Ú_builddeltadiffzdeltacomputer._builddeltadiffbsƒ€Ø—‘ˆØ �N‰N˜7 BÓ 'ˆØ × Ñ ˜TÔ "ô×,Ñ,¨V¯^©^¸DÓ-AÄ3ÀqÃ6ÓJˆFؘQ‘JˆEð ˆ ð—N‘N 4¨R�NÓ0ˆEÜ—N‘N 5¨!Ó,ˆEàˆ r'c ót—|j}|j|«}|jr|}n*|�&||dz k7rd}|||fz}tj|«‚|}d} |j r |t k(rd} n‡|j r{|j|«rj|j|j«|j|j«} } || | fvr.|j|«rt|j|«d«} d} |jr¯|jd} | }|t k7rk||k7rf|jj|«dk(rH|jj|«}|t k7r$||k7r|jj|«dk(rŒH|jj r||k(r|jd} | €|j#|||«} |j$r!d}|t| «z}|j'|«|j(�¦| r¤t| «|j(z}|j*| z }|j$rd}||z}|j'|«||kr |j$rd}|j'|«y|j|«|kr |j$rd}|j'|«y|j-| «\}}t|«t|«z}|j/t|«dz «}||z|j1|«z }|j3|«\}}|dz }||z }t5||||f||||| «S)NrsEgeneral delta cannot use delta for something else than `prev`: %d<-%drs2DBG-DELTAS-SEARCH: uncompressed-delta-size=%d s/DBG-DELTAS-SEARCH: projected-lower-size=%d s2DBG-DELTAS-SEARCH: DISCARDED (snapshot limit) s-DBG-DELTAS-SEARCH: DISCARDED (prev size) )rGržr¨rÚProgrammingErrorr«rr9r+r€r�r5rår§r3r·Ú _lazydeltar#rrr¾r©Úcompressr/r,r½r™)r r¯r�rŒrÃrGržÚ deltabaseÚmsgr¡r€r�rŽÚ cachebaseÚ currentbaserÒrÓr!r!rœÚoffsetÚdistrŸr s r%Ú_builddeltainfozdeltacomputer._builddeltainfops9€à—‘ˆØ×$Ñ$ TÓ*ˆ Ø × Ò Ø‰IàÐ%¨$°*¸q±.Ò*@ð+ðð˜˜jÐ)Ñ)�Ü×,Ñ,¨SÓ1Ð1Ø!ˆI؈ Ø × Ò  I´Ò$8؉MØ × !Ò ! f×&7Ñ&7¸ Ô&Bð—Z‘Z § ¡ Ó+¨V¯Z©Z¸¿ ¹ Ó-C�ˆBØ  R Ñ(¨V×->Ñ->¸yÔ-IÜ # F×$6Ñ$6°yÓ$AÀ!Ñ$DÓ E� ØˆØ × Ò Ø×*Ñ*¨1Ñ-ˆIà#ˆKàœwÒ&Ø 4Ò'Ø—K‘K×&Ñ& {Ó3°qÒ8à"Ÿk™k×5Ñ5°kÓB� ð œwÒ&Ø 4Ò'Ø—K‘K×&Ñ& {Ó3°qÓ8ð�{‰{×%Ò%¨+¸Ò*=Ø×*Ñ*¨1Ñ-�Ø ˆ=Ø×(Ñ(¨¨w¸Ó;ˆEØ × Ò ØHˆCØ ”3�u“:Ñ ˆCØ × Ñ ˜cÔ "à × Ñ Ð ,±Ü&)¨%£j°F×4IÑ4IÑ&IÐ #Ø#ŸO™O¨}Ñ<ˆMØ×!Ò!ØI�ØÐ.Ñ.�Ø×!Ñ! #Ô&ØÐ6Ò6Ø×%Ò%ØP�CØ×%Ñ% cÔ*ØØ�}‰}˜TÓ"Ð%<Ò<Ø×%Ò%ØK�CØ×%Ñ% cÔ*ØØ—‘ uÓ-‰ ˆ�Ü�v“;¤ T£Ñ*ˆØ—‘œC ›K¨!™OÓ,ˆØ˜&Ñ  6§<¡<° Ó#:Ñ:ˆØ'-×'8Ñ'8¸Ó'>Ñ$ˆÐ$Ø�A‰ ˆØ˜hÑ&ÐäØ Ø Ø �TˆNØ Ø Ø Ø Ø ó  ð r'c óÒ—|j||«}|jj|«}t|d«t|d«zx}x}}|x} } d} d} t |||| | | || «S)Nrr)rrGr'r5r™) r rŒr¯ríÚrawtextr!r rœr-r(ržr¡rŸs r%Ú_fullsnapshotinfozdeltacomputer._fullsnapshotinfoÀs„€Ø—.‘. ¨"Ó-ˆØ�{‰{×#Ñ# GÓ,ˆÜ/2°4¸±7«|¼cÀ$ÀqÁ'»lÑ/JÐJÐÐJ˜X¨Ø $Ð$ˆ �I؈ ØˆäØ Ø Ø Ø Ø Ø Ø Ø ó  ð r'c ó ‡,—|€t|j«}|j}|j}|j}dx}} |€ t «}|�rt j «} |j«} || d<d} |jjd} |jjd}| tk(rd} n+| tk(r d} |r| d|zz } n| tk(r d } |r| d|zz } | | d <|j|j«}|j|j«} |tk7r|j!|«d}nd }| tk7r|j!| «d}nd }|| d <|| d <|j"r|j$t&zrl|j)|||«}|rUt j «}| z  d<|j*| d<d| d<d| d<d| d<d| d<d| d<|j-| «|Sd}|j.�rµ|j��¨|jdt0k(�r‘|jd}|tk(rd}|j)|||«}|rÿd}nü||vrø|jd}|j3|«\}}t|«t|«z}|r�|j5t|«dz «}|j7|«}||z|j9|«z }|j!|«\}}|dz }||z }||k(s|| k(rd}d}n5|j;|«sd}n!d}|j=|«dz}n d}d}d}d}d}t?||||f|||||¬«}|�a|r]t j «}| z  d<|j*| d<d| d<d| d<d| d<d| d<€d| d<n|| d<|j-| «|Sd}d} d}|€6|j|j«}|j|j«} |j@rd}!|!|z}!|jC|!«tE|j|j"|| ||||jF¬«}"tI|"«}#|#��B| dz } |j@r�dŠ,|� |j*Š,|�t|#«dk(r |d|#vrd}$n?||#vs| |#vrd }$n4‰,�tKˆ,fd!„|#D««rd"}$n‰,�tKˆ,fd#„|#D««rd$}$nd%}$d&}!|!| t|#«|$fz}!|jC|!«g}%|�K|j@r.d'}!|!|j*|jLfz}!|jC|!«|%jO|«|#D�]}&|j@rád(}!|!|&z}!|jC|!«d}'|&|k(rd)}'nC|&| k(rd*}'n;|jj;|&«r d+}'|'|jj=|&«z}'|'�d,}!|!|'z}!|jC|!«d-}!|!|jjQ|&«z}!|jC|!«d.}!|!|jjS|&«z}!|jC|!«|dz }|j@rt j «}(|jU||&||¬/«})|j@r/t j «}*d0}!|!|*(z z}!|jC|!«|)�ŠtW|j|)|«rA|j@r"d1}!|!|)jLz}!|jC|!«|%jO|)«�ŒÀ|j@s�ŒÎd2}!|!|)jLz}!|jC|!«�Œò|j@s�Œd3}!|jC|!«�Œ|%rtY|%d4„¬5«}|�|"j[|j*«}#n tI|"«}#|#��ŒB|€d}|j)|||«}n|j<rd}nd}|r¾t j «}|dk(r!|duxr| dk(xr|dk(xr |dtk(}+n&|duxr | dk(xr|dk(xr|j*|dk(}+| z  d<|j*| d<| | d<|+| d<|| d<|| d<|j< �|j<| d<nd| d<|j-| «|S)6ayFind an acceptable delta against a candidate revision revinfo: information about the revision (instance of _revisioninfo) fh: file handle to either the .i or the .d revlog file, depending on whether it is inlined or not Returns the first acceptable candidate revision, as ordered by _candidategroups If no suitable deltabase is found, we return delta info for a full snapshot. `excluded_bases` is an optional set of revision that cannot be used as a delta base. Use this to recompute delta suitable in censor or strip context. Nr†sUNKNOWNrrs CHANGELOG:s MANIFESTLOG:s%s:sFILELOG:ú target-revlogrRú p1-chain-lenú p2-chain-lenÚdurationú delta-baseÚsearch_round_countFúusing-cached-baseÚdelta_try_countsfullÚtypeúsnapshot-depthrsdeltassnapshot)r›rœr!r�ržrŸr r¡Tsunknowns!DBG-DELTAS-SEARCH: SEARCH rev=%d r´s cached-deltasparentsc3ó(•K—|] }|‰k–—Œ y­wr1r;©rcrÚrîs €r%rdz.deltacomputer.finddeltainfo..�óøèø€Ð-NÁ ¸1¨a°$­hÁ ùóƒs refine-downc3ó(•K—|] }|‰kD–—Œ y­wr1r;r>s €r%rdz.deltacomputer.finddeltainfo..’r?r@s refine-ups search-downs2DBG-DELTAS-SEARCH: ROUND #%d - %d candidates - %s s3DBG-DELTAS-SEARCH: CONTENDER: rev=%d - length=%d s'DBG-DELTAS-SEARCH: CANDIDATE: rev=%d sp1sp2s snapshot-%dsDBG-DELTAS-SEARCH: type=%s sDBG-DELTAS-SEARCH: size=%d sDBG-DELTAS-SEARCH: base=%d )rÃs,DBG-DELTAS-SEARCH: delta-search-time=%f s/DBG-DELTAS-SEARCH: DELTA: length=%d (GOOD) s.DBG-DELTAS-SEARCH: DELTA: length=%d (BAD) s DBG-DELTAS-SEARCH: NO-DELTA có—|jSr1)rœ)rDs r%rHz-deltacomputer.finddeltainfo..Ýs€¸q¿zºzr')Úkey).r5rGrr§rrÚtimerÚ _one_dbg_dataÚtargetr rrr+r€r�rr½r©r�rr1r�Ú_dbg_process_datar¨r r'r/ržr,r9r¡r™rrr×rrTÚallrœrhr3r·r.r²rêrº)-r r¯rŒrÂrÃÚ gather_debugr§rGÚp1rÚp2rr,ÚdbgÚ target_revlogÚ target_typeÚ target_keyÚ p1_chain_lenÚ p2_chain_lenr®r/r�Údbg_typer¡rŽr!r!rœr,ržr›rŸr Ú dbg_try_countÚdbg_try_roundsr)ràÚ candidaterevsÚ round_typeÚnominateddeltasÚ candidaterevÚcandidate_typeÚ delta_startÚcandidatedeltaÚ delta_endÚ used_cachedrîs- @r%Ú finddeltainfozdeltacomputer.finddeltainfoÓs¡ ø€ð" РܘTŸ[™[Ó)ˆJà×)Ñ)ˆ Ø×'Ñ'ˆ Ø—‘ˆØÐˆˆcà Ð !Ü ›UˆNâ Ü—J‘J“LˆEØ×$Ñ$Ó&ˆCØ(ˆC� ‰OØ&ˆMØŸ+™+×,Ñ,¨QÑ/ˆKØŸ™×+Ñ+¨AÑ.ˆJØœnÒ,Ø -‘ ØÔ 0Ò0Ø /� ÙØ! V¨jÑ%8Ñ8‘Mؤ Ò,Ø +� ÙØ! V¨jÑ%8Ñ8�MØ#0ˆC�Ñ Ø—*‘*˜WŸZ™ZÓ(ˆCØ—*‘*˜WŸZ™ZÓ(ˆCØ”gŠ~Ø%×0Ñ0°Ó5°aÑ8‘ à!� Ø”gŠ~Ø%×0Ñ0°Ó5°aÑ8‘ à!� Ø".ˆC�Ñ Ø".ˆC�Ñ ð�Š '§-¡-Ô2OÒ"OØ×.Ñ.¨r°7¸JÓGˆIÙÜ—j‘j“l�Ø"%¨¡+��J‘ð—N‘NðØ ñð-.�Ð(Ñ)Ø+0�Ð'Ñ(Ø)*�Ð%Ñ&Ø%��F‘ Ø()�Ð$Ñ%Ø×&Ñ& sÔ+ØÐ àˆ ð × Ó Ø×"Ñ"Ñ.Ø×"Ñ" 1Ñ%Ô)?Ó?à×%Ñ% aÑ(ˆDØ”wŠØ"�Ø ×2Ñ2°2°wÀ ÓK� ÙØ$%‘Mؘ^Ñ+Ø×*Ñ*¨1Ñ-�Ø%Ÿ™¨uÓ5‘ �˜Ü˜v›;¬¨T«Ñ2�ÙØ#ŸZ™Z¬¨F« °a©Ó8�FØ &× 0Ñ 0°Ó 6�IØ'¨&Ñ0°6·<±<À Ó3JÑJ�HØ39×3DÑ3DÀTÓ3JÑ0�HÐ0Ø ‘M�HØ&¨(Ñ2Ð&ؘs’{ d¨c¢kØ#+˜Ø(,™ Ø#×.Ñ.¨tÔ4Ø(,™ à#.˜Ø(.×(<Ñ(<¸TÓ(BÀQÑ(F™ à#�HØ $�IØ#�HØ)-Ð&Ø$(�MÜ&Ø%Ø%Ø  $˜ØØ'Ø%Ø'9Ø"/ô � ðÐ$ÙÜŸ*™*›,�CØ&)¨E¡k�C˜ ‘Oð"Ÿ™ðØ$ñð12�CÐ,Ñ-Ø/3�CÐ+Ñ,Ø-.�CÐ)Ñ*Ø")�C˜‘KØ$Ð,Ø01˜Ð,Ò-à0=˜Ð,Ñ-Ø×*Ñ*¨3Ô/Ø Ð ðˆ àˆØˆà ˆ;Ø—*‘*˜WŸZ™ZÓ(ˆCØ—*‘*˜WŸZ™ZÓ(ˆCà × Ò Ø7ˆCØ �:Ñ ˆCØ × Ñ ˜cÔ "ä!Ø �K‰KØ �O‰OØ Ø Ø Ø Ø Ø×/Ñ/ô  ˆô˜V› ˆ ØÑ'Ø ˜aÑ ˆNØ×!Ò!Ø�ØÐ(Ø$Ÿ>™>�DðÐ*ܘMÓ*¨aÒ/Ø" 1™ ¨Ñ6à!0‘JؘMÑ)¨S°MÑ-AØ!+‘JØÐ%¬#Ó-NÁ Ó-NÔ*NØ!/‘JØÐ%¬#Ó-NÁ Ó-NÔ*NØ!-‘Jà!/�JØL�ؘ¬¨MÓ(:¸JÐGÑG�Ø×!Ñ! #Ô&Ø ˆOØÐ$Ø×%Ò%àOðð˜IŸN™N¨I×,>Ñ,>Ð?Ñ?�CØ×%Ñ% cÔ*ð ×&Ñ& yÔ1Ü -� Ø×%Ò%ØE�Cؘ<Ñ'�CØ×%Ñ% cÔ*Ø%)�NØ# sÒ*Ø).™Ø%¨Ò,Ø).™ØŸ™×/Ñ/° Ô=Ø)7˜Ø&¨$¯+©+×*CÑ*CØ(ó+ñ˜ð&Ð1ØA˜Ø˜~Ñ-˜Ø×)Ñ)¨#Ô.Ø=�Cؘ4Ÿ;™;×-Ñ-¨lÓ;Ñ;�CØ×%Ñ% cÔ*Ø=�Cؘ4Ÿ;™;×2Ñ2°<Ó@Ñ@�CØ×%Ñ% cÔ*à Ñ"� à×%Ò%Ü"&§*¡*£,�KØ!%×!5Ñ!5ØØ ØØ)ð "6ó"�ð ×%Ò%Ü $§ ¡ £ �IØJ�Cؘ9 {Ñ2Ñ2�CØ×%Ñ% cÔ*Ø!Ð-Ü)¨$¯+©+°~ÀwÔOØ×-Ò-Ø"U˜CØ >×#:Ñ#:Ñ:˜CØ ×-Ñ-¨cÔ2Ø'×.Ñ.¨~Ö>Ø×+Ô+ØP˜Ø˜~×6Ñ6Ñ6˜Ø×)Ñ)¨#Ö.Ø×'Ô'Ø>�CØ×%Ñ% cÖ*ðo!.ñpÜ Ñ5IÔJ� ØÐ$Ø &§ ¡ ¨I¯N©NÓ ;‘ ä $ V£ � ðAÒ'ðD Р؈HØ×.Ñ.¨r°7¸JÓG‰IØ × $Ò $Ø"‰HàˆHá Ü—*‘*“,ˆCؘ7Ò"à dÐ*ò1Ø&¨!Ñ+ò1à%¨Ñ*ò1ð# 1™ ¬Ñ0ñ ð dÐ*ò8Ø&¨!Ñ+ò8à%¨Ñ*ò8ð"Ÿ™¨*°Q©-Ñ7ð ð " E™kˆC� ‰Oð—‘ð Øñ ð)7ˆCÐ$Ñ %Ø'2ˆCÐ#Ñ $Ø%2ˆCÐ!Ñ "Ø"ˆC�‰Kà×'Ñ'Øðð ×+Ñ+ðØ$òð)*�Ð$Ñ%Ø × "Ñ " 3Ô 'ØÐr'c ó—ddddddddddddœ S)N) r6r†r7r8r9r:r;r4r5r<r3r;r6s r%rEzdeltacomputer._one_dbg_datas-€àØØØ"&Ø!%Ø#ØØ Ø Ø"Ø!ñ  ð r'c óô—|j�|jj|«|j�Ed}||d|d|d|d|d|d|d|d |d |d |d f z}|j|«yy) Ns«DBG-DELTAS: %-12s rev=%d: delta-base=%d is-cached=%d - search-rounds=%d try-count=%d - delta-type=%-6s snap-depth=%d - p1-chain-length=%d p2-chain-length=%d - duration=%f r3r†r7r9r8r:r;r<r4r5r6)rrhr)r rLr)s r%rGzdeltacomputer._dbg_process_datas·€Ø × Ñ Ð 'Ø × Ñ × #Ñ # CÔ (à × Ñ Ð (ð ð ð Ø�OÑ$Ø�J‘Ø�LÑ!ØÐ'Ñ(ØÐ(Ñ)ØÐ%Ñ&Ø�F‘ ØÐ$Ñ%Ø�NÑ#Ø�NÑ#Ø�J‘ð ñ ˆCð × Ñ ˜cÕ "ð; )r')NFNr1)NN) r<r=r>r&Úpropertyrrr#r.r1r^rErGr;r'r%rr1sO„ðØØó /ð ñMóðMòò8 óN ò` ó&zòx  ó!#r'rcóÊ—|j\}}t}|s |s t}||fS|s#|dd}|dk(r t}||fS||k(rt}||fS|dk(rd}t}t |«}||fS)zreturn (COMPRESSION_MODE, deltainfo) used by revlog v2+ format to dispatch between PLAIN and DEFAULT compression. rrór£r')r!r r rr¤)Údefault_compression_headerr®ÚhÚdÚcompression_moder s r%Údelta_compressionrhBs €ð �>‰>�D€A€qÜ'ÐÙ ‘Qä*Ðð ˜YÐ &Ð&ñØ ˆa�ˆFˆØ �Š:Ü.Ð ð ˜YÐ &Ð&ðÐ,Ò ,Ü0Ð ð ˜YÐ &Ð&ð ˆdŠà ˆÜ*ÐÜ& yÓ1ˆ Ø ˜YÐ &Ð&r'r1)r:r)NNN).r?rèr‚rrÚi18nrÚpycompatrÚ constantsrr r r r r rrrrÚ thirdpartyrÚrrrrr¬rrPrJrCrUrer•rõr™r¤r²r¼r×r¹rÜrÛrrhr;r'r%Úrnsíðñ;óÛ õÝÝ÷ ÷ ÷ õ÷ñõ ðÐ÷ %ñ %óFGóTXóv{ó|3!òl'ò<ð>€‡�ˆd˜4Ô ÷ðó!ðòò$Oðj€ðØØó_óD>óBw÷t45ñ45÷nN#ñN#ób'r'