Ë ÿ¾âŸà©¯Þãó8—ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z mZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZm Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*m+Z+ejXrdd lm-Z.ndd lm/Z.ej`d «Z1ejdd «Z3e.jhZ4ejjd d¬«Gd„d««Z6d„Z7ddd„Z8d„Z9d„Z:d„Z;d„Zded„Z?dfd„Z@d„ZAd„ZBd„ZCd „ZDd!„ZEd"„ZFdgd#„ZGd$„ZHd%„ZId&„ZJdhd'„ZKd(„ZLd)„ZMddd*„ZNdid+„ZOd,„ZPd-„ZQdjd.„ZRd/„ZSd0„ZTd1„ZU dkd2„ZV dkd3„Zd4„ZWddd5„ZXd6„ZYd7„ZZd8„Z[Gd9„d:«Z\ dld;„Z]dmd<„Z^dnd=„Z_d>„Z`d?„Zad@„ZbdddA„ZcdddB„ZddjdC„ZedddD„ZfdE„ZgdF„ZhdddG„ZidH„ZjGdI„dJ«ZkGdK„dL«ZlGdM„dN«ZmdO„ZnGdP„dQ«ZodR„ZpdS„ZqGdT„dU«ZrgdV¢ZsdWdXgZtdY„Zue&jì«Zwd ZxdodZ„Zyd[„Zzdpd\„Z{d]„Z|d^„Z}d_„Z~d`„Zda„Z€db„Z�dc„Z‚y)qéNé©Ú_)ÚbinÚhexÚnullrevÚshortÚwdirrev)Úgetattr)Úattr)ÚcopiesÚencodingÚerrorÚmatchÚobsoleteÚobsutilÚpathutilÚphasesÚpolicyÚpycompatÚ requirementsÚ revsetlangÚsimilarÚsmartsetÚurlÚutilÚvfs)ÚhashutilÚprocutilÚ stringutil)Ú scmwindows)ÚscmposixÚparsersÚrevlogTF)ÚslotsÚreprcó—eZdZdZej ej e«¬«Zej ej e«¬«Z ej ej e«¬«Z ej ej e«¬«Z ej ej e«¬«Z ej ej e«¬«Z ej ej e«¬«Zd„Zd„Zy)ÚstatuszŽStruct with a list of files per status. The 'deleted', 'unknown' and 'ignored' properties are only relevant to the working copy. )Údefaultc#óÐK—|j–—|j–—|j–—|j–—|j–—|j –—|j –—y­w©N)ÚmodifiedÚaddedÚremovedÚdeletedÚunknownÚignoredÚclean©Úselfs ú5usr/lib/python3.12/site-packages/mercurial/scmutil.pyÚ__iter__zstatus.__iter__QsLèø€Ø�m‰mÒØ�j‰jÒØ�l‰lÒØ�l‰lÒØ�l‰lÒØ�l‰lÒØ�j‰jÓùs‚A$A&có,—dtd„|D««zS)NzXc3ólK—|],}tjtj|««–—Œ.y­wr+)rÚsysstrr Úpprint)Ú.0Úvs r5Ú z"status.__repr__..^s%èø€ÐFÁ¸A”(—/‘/¤*×"3Ñ"3°AÓ"6×7Áùs‚24)Útupler3s r5Ú__repr__zstatus.__repr__Zs!€ð 1ä ÑFÁÓFÓ FñGð GóN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r ÚibÚFactoryÚlistr,r-r.r/r0r1r2r6r?©r@r5r(r(AsÑ„ñð ˆt�w‰w˜|˜tŸ|™|¨DÓ1Ô2€HØ ˆD�G‰G˜L˜DŸL™L¨Ó.Ô /€E؈d�g‰g˜l˜dŸl™l¨4Ó0Ô1€G؈d�g‰g˜l˜dŸl™l¨4Ó0Ô1€G؈d�g‰g˜l˜dŸl™l¨4Ó0Ô1€G؈d�g‰g˜l˜dŸl™l¨4Ó0Ô1€GØ ˆD�G‰G˜L˜DŸL™L¨Ó.Ô /€EòóGr@r(c#óÌK—tj|j|«}|jtj|j|««t «}|jD]%}||jvsŒ||=|j |«Œ't |j««D]\}}||j|«f–—Œ|D]}||j||«f–—Œy­w)zfind subrepos in ctx1 or ctx2N) ÚdictÚfromkeysÚsubstateÚupdateÚsetÚaddÚsortedÚitemsÚsubÚnullsub)Úctx1Úctx2ÚsubpathsÚmissingÚsubpathÚctxs r5Ú itersubreposrZas¾èø€ô �}‰}˜TŸ]™]¨DÓ1€HØ ‡O�O”D—M‘M $§-¡-°Ó6Ô7ä‹e€Gà—=”=ˆØ ˜$Ÿ-™-Ò 'ؘÐ!Ø �K‰K˜Õ ð!ô ˜xŸ~™~Ó/Ö0‰ ˆ�Ø�s—w‘w˜wÓ'Ð'Ó'ð1óˆØ�t—|‘| G¨TÓ2Ð2Ó2ñùs ‚A7C$Á:A*C$có2—g}|rP|D]K}||}|j«tjk\sŒ*|j«rŒ;|j |«ŒM|r'|j t d«t|«z«y|j t d««y)zjReport no changes for push/pull, excluded is None or a list of nodes excluded from the push/pull. s0no changes found (ignored %d secret changesets) sno changes found N)ÚphaserÚsecretÚextinctÚappendr(rÚlen)ÚuiÚrepoÚexcludedÚ secretlistÚnrYs r5Únochangesfoundrf{s�€ð€JÙÛˆAØ�q‘'ˆCØ�y‰y‹{œfŸm™mÓ+°C·K±KµMØ×!Ñ! !Õ$ðñ Ø � ‰ Ü ÐBÓ CÜ�*‹oñ õ ð � ‰ ”!Ð)Ó*Õ+r@c óÈ—d}d} |«S#|j«‚xYw#tj$rÞ}d}|jtjk(r,t d«t j|j«z}nt d«|jz}|jt d«|jxstj|j«|fz«|js|jt d««Yd}~�n>d}~wtj$rt}d}|jt d«|jxstj|j«tj|j «fz«Yd}~�n¹d}~wtj"$rw}t%|tj&«rd }|jt d «|z«|j(r'|jt d «|j(z«Yd}~�n1d}~wtj*$rÿ}|jt d «|j,d z«|j,d}t%|t/d««rt j0|«}|€|jd«n}t%|t2«s|jd|fz«nW|s|jt d««n:|jdt jtj4|««z«Yd}~�n!d}~wtj6$r(}|jt d«|z«Yd}~�nèd}~wtj8$r|jt d««Y�nµtj:$rZ}|j<� |j<}|j>� |j>}|j|jA««Yd}~�nNd}~wtjB$r}|jDcYd}~Sd}~wtF$rº}|jt d «tj|«z«tj|«jI«d}|djI«vr|jt d««n,|djI«vr|jt d««Yd}~�nfd}~wtJjLjN$r=}d}|jt d «tj|«z«Yd}~�nd}~wtJjLjP$rž}d} |jRj,d}n!#tTtVf$r|jR}YnwxYwt%|tX«rtjZ|«}|jt d«tj|«z«Yd}~�nUd}~wt\t^f$rý}tKj`|d«r-|j,r!|j,d tjbk(rn°te|dd«r¢te|dd«�Z|jt d«tj|j «tj|j«fz«n<|jt d «tj|j «z«n‚Yd}~nKd}~wtf$r|jt d ««Yn#th$r}d!}|jj}Yd}~nd}~wwxYw|jmd"d#«r|S|S)$zÅcall func() with global exception handling return func() if no exception happens. otherwise do some error handling and return an exit code accordingly. does not handle all exceptions. éÿÿÿÿés%timed out waiting for lock held by %rslock held by %rsabort: %s: %s s(lock might be very busy) Nsabort: could not lock %s: %s é s abort: %s s(%s) s abort: %srrÚó s %r s empty string s %r sabort: file censored %s s6abort: working directory revision cannot be specified s mpatch bdiffs((did you forget to compile extensions?) szlibs"(is your Python install correct?) édsabort: error: %s ÚargsÚstrerrorÚfilenamesabort: %s: '%s' sabort: out of memory éþóuisdetailed-exit-code)7Ú tracebackrÚLockHeldÚerrnoÚ ETIMEDOUTrrÚbytestrÚlockerÚdescr Ú forcebytestrrpÚLockUnavailablerÚ strtolocalroÚ RepoErrorÚ isinstanceÚRepoLookupErrorÚhintÚ ResponseErrorrnÚtypeÚsysbytesÚbytesÚellipsisÚCensoredNodeErrorÚWdirUnsupportedÚErrorÚdetailed_exit_codeÚcoarse_exit_codeÚformatÚ WorkerErrorÚ status_codeÚ ImportErrorÚsplitrÚurlerrÚ httperrorÚurlerrorÚreasonÚAttributeErrorÚ IndexErrorÚstrÚ unitolocalÚIOErrorÚOSErrorÚ safehasattrÚEPIPEr Ú MemoryErrorÚ SystemExitÚcodeÚ configbool)raÚfuncrŠr‰Úinstr“ÚmsgÚms r5Ú callcatchr¤�s�€ð ÐØÐðn%ð Ù“6ˆMøð Ø �L‰LŒNØ ûô �>‰>ò 8ØÐØ �:‰:œŸ™Ò (ÜÐ?Ó@Ü× Ñ  §¡Ó-ñ‰FôÐ)Ó*¨T¯[©[Ñ8ˆFØ �‰Ü Ð Ó !Ø�y‰yÒBœJ×3Ñ3°D·M±MÓBÀFÐKñ Lô ð�{Š{Ø �H‰H”QÐ5Ó6Ô 7ÿùÜ × Ñ ò ØÐØ �‰Ü Ð/Ó 0à— ‘ ÒCœZ×4Ñ4°T·]±]ÓCÜ×#Ñ# D§M¡MÓ2ðñ ÷ ò ûô �?‰?ò/Ü �dœE×1Ñ1Ô 2Ø!#Ð Ø �‰”�>Ó" TÑ)Ô*Ø �9Š9Ø �H‰H”Q�y“\ D§I¡IÑ-Ô .ÿùÜ × Ñ ò MØ �‰”�<“ 4§9¡9¨Q¡<Ñ/Ô0Ø�i‰i˜‰lˆÜ �cœ4 ›9Ô %Ü×#Ñ# CÓ(ˆCØ ˆ;Ø �H‰H�U�OܘC¤Ô'Ø �H‰H�X  Ñ&Õ 'ÙØ �H‰H”QÐ)Ó*Õ +à �H‰H�Y¤×!1Ñ!1´*×2EÑ2EÀcÓ2JÓ!KÑKÔ LÿùÜ × "Ñ "ò9Ø �‰”Ð/Ó0°4Ñ7×8Ò8ûÜ × Ñ òPØ �‰”ÐMÓN×OÜ �;‰;ò Ø × "Ñ "Ð .Ø!%×!8Ñ!8Ð Ø × Ñ Ð ,Ø#×4Ñ4Ð Ø �‰�—‘“×ÒûÜ × Ñ ò à×ÑÕûÜ ò@Ø �‰”�>Ó"¤Z×%<Ñ%<¸TÓ%BÑBÔCÜ × #Ñ # DÓ )× /Ñ /Ó 1°"Ñ 5ˆØ �×%Ñ%Ó'Ñ 'Ø �H‰H”QÐCÓDÕ EØ �'—-‘-“/Ñ !Ø �H‰H”QÐ=Ó>Ô ?ÿùÜ �;‰;× Ñ òDØ ÐØ �‰”�>Ó"¤Z×%<Ñ%<¸TÓ%BÑB×CÒCûÜ �;‰;× Ñ ò MØ Ðð !Ø—[‘[×%Ñ% aÑ(‰FøÜ¤ Ð+ò !à—[‘[ŠFð !úô �fœcÔ "ä×(Ñ(¨Ó0ˆFØ �‰”Ð(Ó)¬J×,CÑ,CÀFÓ,KÑK×LÒLûÜ ”WÐ òä × Ñ ˜T 6Ô *Ø— ’ Ø— ‘ ˜!‘ ¤§ ¡ Ò+à Ü �T˜: tÔ ,Ü�t˜Z¨Ó.Ð:Ø—‘ÜÐ*Ó+ä ×+Ñ+¨D¯M©MÓ:Ü"×/Ñ/°· ± Ó>ðñõð—‘œ˜>Ó*¬X×-@Ñ-@ÀÇÁÓ-OÑOÕPà ÿøÜ ò/Ø �‰”Ð,Ó-Ö.Ü ò%ð!ÐØŸ9™9Õûð %úð  ‡}�}�UÐ1Ô2Ø!Ð!àÐsÞ‡Ž!¡$¤] ·CDÄ] Ä&A)FÆ] Æ+A,HÈ] È3C4L-Ì-] ÍM&Í&0] Î] Î+APÐ] Ð P'Ð!] Ð' ] Ð3B/S(Ó( ] Ô2UÕ ] Õ W9Õ#U=Õ<W9Õ=VÖW9ÖVÖAW9×9] Ø C3\Ü&] Ü+] Ü3]Ý] cóº—|dvr!tjtd«|z«‚dD]:}||vsŒtjtd«tj|«z«‚ t |«d|vrt ‚tjtd««‚#t $rYnwxYw|j«|k7r!tjtd«|z«‚y)N)ótipó.ónullsthe name '%s' is reserved)ó:órló s%r cannot be used in a nameó_scannot use an integer as a names)leading or trailing whitespace in name %r)rÚ InputErrorrrrwÚintÚ ValueErrorÚstrip)rbÚlblÚkindÚcs r5Ú checknewlabelr´ sÞ€ð Ð%Ñ%Ü×ÑœqÐ!=Ó>ÀÑDÓEÐEÛ (ˆØ �Š8Ü×"Ñ"ÜÐ0Ó1´H×4DÑ4DÀQÓ4GÑGóð ð)ð  Ü ˆCŒØ �3‰;ôÐ Ü×ÑœqÐ!CÓDÓEÐEøÜ ò Ù ð úà ‡y�yƒ{�cÒÜ×ÑÜ Ð:Ó ;¸cÑ Aó ð ðsÁ&3B B%Â$B%có|—d|vsd|vr4tjtd«tj|«z«‚y)zFCheck that the filename f is an acceptable filename for a tracked filer«rls)'\n' and '\r' disallowed in filenames: %rN)rr­rrrw©Úfs r5Ú checkfilenamer¸'sC€à ��z�U˜a‘ZÜ×ÑÜ Ð<Ó =Ü×јqÓ!ñ "ó ð ð r@có —t|«t|«\}}|s|rgtj|«}|rOd|t j |«fz}|rt j|«‚|jtd«|z«yyy)zECheck if filename f is portable and warn or abort depending on configs%s: %só warning: %s N) r¸ÚcheckportabilityalertrÚcheckwinfilenamerÚ shellquoterr­Úwarnr)rar·Úabortr¾r¢s r5Ú checkportablerÀ0s€ä�!ÔÜ'¨Ó+�K€Eˆ4Ù ‘Ü×#Ñ# AÓ&ˆÙ ؘs¤H×$7Ñ$7¸Ó$:Ð;Ñ;ˆCÙÜ×&Ñ& sÓ+Ð+Ø �G‰G”AÐ&Ó'¨#Ñ-Õ .ð ðr@có—|jdd«}|j«}tj|«}tj xs|dk(}|xs|dk(}|€*|s(|s&|dk(s!t jtd«|z«‚||fS)z_check if the user's config requests nothing, a warning, or abort for non-portable filenamesrrsportablefilenamessabortówarnsignores,ui.portablefilenames value is invalid ('%s')) ÚconfigÚlowerr Ú parseboolrÚ iswindowsrÚ ConfigErrorr)raÚvalÚlvalÚbvalr¿r¾s r5r»r»=s�€ð �)‰)�EÐ/Ó 0€CØ �9‰9‹;€DÜ × Ñ  Ó $€DÜ × Ñ Ò 2 $¨(Ñ"2€EØ Ò "�4˜7‘?€DØ €|™T¡U¨d°iÒ.?Ü×ÑÜ Ð=Ó >ÀÑ Dó ð ð �$ˆ;Ðr@có—eZdZd„Zd„Zy)ÚcasecollisionauditorcóÒ—||_||_dj|«}tt j |«j d««|_||_t«|_ y)Nrª) Ú_uiÚ_abortÚjoinrNrrÄr�Ú _loweredfilesÚ _dirstateÚ _newfiles)r4rar¿ÚdirstateÚallfiless r5Ú__init__zcasecollisionauditor.__init__MsQ€ØˆŒØˆŒ Ø—:‘:˜hÓ'ˆÜ ¤§¡°Ó!9×!?Ñ!?ÀÓ!FÓGˆÔØ!ˆŒô›ˆ�r@cóœ—||jvrytj|«}||jvrd||jvrVt d«|z}|j rtj|«‚|jjt d«|z«|jj|«|jj|«y)Ns&possible case-folding collision for %srº) rÓrrÄrÑrÒrrÏrÚ StateErrorrÎr¾rO)r4r·Úflr¢s r5Ú__call__zcasecollisionauditor.__call__Xs¡€Ø �—‘Ñ Ø Ü �^‰^˜AÓ ˆØ �×#Ñ#Ñ #¨°·±Ñ(?ÜÐ=Ó>ÀÑBˆCØ�{Š{Ü×&Ñ& sÓ+Ð+Ø �H‰H�M‰Mœ!Ð,Ó-°Ñ3Ô 4Ø ×Ñ×јrÔ"Ø �‰×ј1Õr@N)rArBrCrÖrÚrHr@r5rÌrÌLs „ò ó r@rÌcó‡—|j}|rGtj|d«}|js|sy‰t |j«t |«f}n|jsy‰}t «}|j j|«}|sqtˆfd„|j|zD««}|rNtj«}|D]} |jd| z«Œ|j«}||j |<|S)abuild hash of filtered revisions in the current repoview. Multiple caches perform up-to-date validation by checking that the tiprev and tipnode stored in the cache file match the current repository. However, this is not sufficient for validating repoviews because the set of revisions in the view may change without the repository tiprev and tipnode changing. This function hashes all the revs filtered from the view (and, optionally, all obsolete revs) up to maxrev and returns that SHA-1 digest. sobsoleteNc3ó.•K—|] }|‰ksŒ |–—Œy­wr+rH)r;ÚrÚmaxrevs €r5r=zfilteredhash..søèø€ÐJÑ!:˜A¸aÀ6»k”aÑ!:ùóƒ Žs%d;) Ú changelogrÚgetrevsÚ filteredrevsÚhashÚ frozensetÚ_filteredrevs_hashcacheÚgetrPrÚsha1rMÚdigest) rbrÞÚ needobsoleteÚclÚobsrevsÚkeyÚresultÚrevsÚsÚrevs ` r5Ú filteredhashrñesØø€ð �‰€BÙÜ×"Ñ" 4¨Ó5ˆØ�Š¡wØØ”t˜BŸO™OÓ,¬d°7«mÐ<‰à�ŠØØˆÜ“+ˆà × 'Ñ '× +Ñ +¨CÓ 0€FÙ ÜÓJ §¡°7Ò!:ÓJÓJˆÙ Ü— ‘ “ˆAÛ�Ø—‘˜ #™Õ&ðà—X‘X“ZˆFØ.4ˆB× &Ñ & sÑ +Ø €Mr@c#󸇇K—ˆfd„}ttjdd«Š|r‰�ˆfd„}nd}|€ |r g}|‰«tj‰d|¬«D�]\}}}|j «d|vr€|–—tjj |dd «} tjj tjj | d««r| –—|r|jd«Œ–g|ddŒœ|sŒŸg} |D]s} tjj || «} || «sŒ-tjj| «rt| d|«D]} | –—ŒŒc| j| «Œu| |dd�Œ y­w) z�yield every hg repository under path, always recursively. The recurse flag will only control recursion into repo working dirscó(•—|j‰k(r|‚yr+)rp)ÚerrÚpaths €r5Ú errhandlerzwalkrepos..errhandler�sø€Ø �<‰<˜4Ò ØˆIð r@ÚsamestatNc󆕇—tj|«Štˆˆfd„|D««}|s|j‰«| S)Nc3ó0•K—|] }‰‰|«–—Œy­wr+rH)r;Ú lstdirstatÚdirstatr÷s €€r5r=z,walkrepos..adddir..–søèø€ÐOɸ*™ ¨*×5Éùsƒ)ÚosÚstatÚanyr_)ÚdirlstÚdirnamerrûr÷s @€r5Úadddirzwalkrepos..adddir”s8ù€Ü—g‘g˜gÓ&ˆGÜÔOÉÓOÓOˆEÙØ— ‘ ˜gÔ&Ø�9Ð r@FT)ÚtopdownÚonerrors.hgspatches) r rürõÚwalkÚsortrÐÚisdirÚremoveÚislinkÚ walkreposr_)rõÚ followsymÚ seen_dirsÚrecurserörÚrootÚdirsÚfilesÚqrootÚnewdirsÚdÚfnameÚhgnamer÷s` @r5r r ‰sFùèø€ôô”r—w‘w  ¨DÓ1€HÙ�XÐ)õ ðˆ àЙy؈ Ùˆy˜$ÔÜŸW™W T°4À×LÐLшˆd�EØ � ‰ Œ Ø �T‰>ØŠJÜ—G‘G—L‘L  v¨zÓ:ˆEÜ�w‰w�}‰}œRŸW™WŸ\™\¨%°Ó8Ô9Ø’ Ùà— ‘ ˜FÕ#à�‘Q‘Ú ØˆGÛ�ÜŸ™Ÿ ™  T¨1Ó-�Ù˜) UÕ+Ü—w‘w—~‘~ eÔ,Ü&/°°t¸YÖ&G˜FØ"(›Lñ'Hð Ÿ™ qÕ)ððˆD‘ŠGñ-Mùs„C2E:Ã70E:Ä(AE:cór—|j«}|€$|j«jjS|S)z)Return binary node id for a given basectx)ÚnoderbÚ nodeconstantsÚwdirid)rYrs r5Úbinnoderºs/€à �8‰8‹:€DØ €|Ø�x‰x‹z×'Ñ'×.Ñ.Ð.Ø €Kr@có6—|j«}|€tS|S)z]Return integer for a given basectx that can be used in comparison or arithmetic operation)rðr )rYrðs r5ÚintrevrÂs€ð �'‰'‹)€CØ €{ÜˆØ €Jr@cót—|j«}t|jt|«t |««S)zzFormat changectx as '{rev}:{node|formatnode}', which is the default template provided by logcmdutil.changesettemplater)rbÚ formatrevnoderarr)rYrbs r5ÚformatchangeidrËs*€ð �8‰8‹:€DÜ ˜Ÿ™¤&¨£+¬w°s«|Ó <Й>×.Ñ.¨sÓ3�Dܘ4“y×+Ñ+¨FÕ3ØŸ™ tÕ,ð ô�w“< 1Ò$Ø" 1™:÷9Ó8ð%÷9ð ÷9ð úˆð%ús1˜)A!Á!AE Â1AD>Ä%D>Ä( E Ä5 E Ä>E Å E cór— t|«}|dk7r|dddk(s|t|«k\ryy#t$rYywxYw)z@Checks if the given prefix may be mistaken for a revision numberó0rrFT)r®r`r¯)rbr.Úis r5Ú mayberevnumr6ûsH€ð Ü �‹Kˆð �dŠN˜v a¨˜{¨dÒ2°q¼CÀ»I²~ØØøÜ òÙðús ‚&*ª 6µ6có<‡‡—t|d«}ˆˆfd„}‰j«j}‰jj dd«}|�rŒd}|�|j d«}|€‰j |gd¬«}|�||d<|j‰«|v�rFt‰«}d} |�|j d «} | sŠtjtd «rp|j} tj| d «r| j«} tj| t|««} |D]} | j!| «Œ|�| |d <| �(t| j#‰«|«} |d| } || «St%|t|«dz«D]U} g}|d| } |D]/}‰|j«}| |d| k(sŒ|j'|«Œ1t|«dk(sŒM|| «cS ||j#‰|««S#t(j*$rt)j,«‚wxYw) z³Find the shortest unambiguous prefix that matches hexnode. If "cache" is not None, it must be a dictionary that can be used for caching between calls to this method. rcóð•—‰jjdd«rt‰|«rd|zS|St‰«}t t |«t |«dz«D]}|d|}t‰|«rŒ|cSy)zDisambiguate against revnums.r$srevisions.prefixhexnoder#rN)rarŸr6rÚranger`)r.ÚhexnodeÚlengthrrbs €€r5Ú disambiguatez-shortesthexnodeidprefix..disambiguatessø€à �7‰7× Ñ ˜oÐ/IÔ Jܘ4 Ô(ؘf‘}Ð$à� ä�d“)ˆÜœC ›K¬¨W«¸Ñ)9Ö:ˆFؘW˜fÐ%ˆFܘt VÕ,Ø’ ñ;r@r$r%NsdisambiguationrevsetTr&sdisambiguationnodetreeÚnodetreeÚ get_cindex)Úmaxr)ràrarÃrær-rðrrršr#Úindexr>r=r`ÚinsertÚshortestr9r_rÚ LookupErrorr)rbrÚ minlengthÚcacher<rêr/rîr:r=r@rÝr;r.r1rðÚ otherhexnodes`` r5ÚshortesthexnodeidprefixrG sù€ô�I˜qÓ!€Iõ ð �‰Ó × $Ñ $€BØ �W‰W�^‰^˜OÐ-LÓ M€FÚ ØˆØ Ð Ø—9‘9Ð4Ó5ˆDØ ˆ<Ø—<‘<  ¨t�<Ó4ˆDØÐ Ø15�Ð-Ñ.Ø �6‰6�$‹<˜4Ò Ü˜$“iˆG؈HØÐ Ø Ÿ9™9Ð%>Ó?�ÙÜ×#Ñ#¤G¨ZÔ8ðŸH™H�EÜ×'Ñ'¨¨|Ô<à %× 0Ñ 0Ó 2˜Ü&×/Ñ/°´s¸4³yÓA�HÛ!˜Ø Ÿ™¨Õ*ð"àÐ(Ø;C˜Ð7Ñ8ØÐ#ܘX×.Ñ.¨tÓ4°iÓ@�Ø   &Ð)�Ù# FÓ+Ð+Ü  ¬3¨w«<¸!Ñ+;Ö<�Ø�Ø   &Ð)�Û�CØ#'¨¡9§=¡=£?�LØ ¨g¨vÐ!6Ó6ØŸ™ |Õ4ð ô�w“< 1Ó$Ù'¨Ó/Ò/ð=ð&Ù˜BŸK™K¨¨iÓ8Ó9Ð9øÜ × Ñ ò&Ü×#Ñ#Ó%Ð%ð&ús ÇG3Ç3(HcóP— t||«y#tj$rYywxYw)z¦Checks if a symbol exists in the repo. See revsymbol() for details. Raises error.AmbiguousPrefixLookupError if the symbol is an ambiguous nodeid prefix. TF)Ú revsymbolrr)rbÚsymbols r5Ú isrevsymbolrKTs,€ð Ü�$˜ÔØøÜ × Ñ òÙðús ‚ �%¤%cóz—t|t«s%d|t|«fz}tj|«‚ |dvr||S t |«}d|z|k7rt ‚t|j«}|dkr||z }|dks||k\r|tk7rt ‚||S#tj$r‚t ttf$rYnwxYwt|«d|jjzk(r^ t|«}|jj!|«}||S#tj"$r‚t$j&t(f$rYnwxYw |j*j-||«}|jj!|«}||S#t.$rYnwxYwt1||«}|� |jj!|«}||Stj2t5d«|z«‚#tj6$r|dcYStjtj"tj8f$r t;||«‚wxYw)zøReturns a context given a single revision symbol (as string). This is similar to revsingle(), but accepts only a single revision symbol, i.e. things like ".", "tip", "1234", "deadbeef", "my-bookmark" work, but not "max(public())". sCsymbol (%s of type %s) was not a string, did you mean repo[symbol]?)r§r¦r¨ó%dréNsunknown revision '%s')r~r„r‚rÚProgrammingErrorr®r¯r`ràr ÚFilteredIndexErrorÚ OverflowErrorr•rÚnodelenrrðÚFilteredLookupErrorÚbinasciirˆrCÚnamesÚ singlenodeÚKeyErrorr2rrr‡ÚFilteredRepoLookupErrorÚ_filterederror)rbrJr¢rÝÚlrrðs r5rIrIasA€ô �fœeÔ $ð Ø &¬¨V« Ð5ñ 6ð ô×$Ñ$ SÓ)Ð)ð3+Ø Ð,Ñ ,ؘ‘<Ð ð Ü�F“ ˆAØ�q‰y˜FÒ"Ü Ð Ü�D—N‘NÓ#ˆAØ�1ŠuØ�Q‘�Ø�1Šu˜˜Qš 1¬¢<Ü Ð Ø˜‘7ˆNøÜ×'Ñ'ò Ø ÜœM¬:Ð6ò Ù ð úô ˆv‹;˜!˜d×0Ñ0×8Ñ8Ñ8Ò 8ð ܘ6“{�Ø—n‘n×(Ñ(¨Ó.�ؘC‘yÐ øÜ×,Ñ,ò ØÜ—N‘N¤KÐ0ò Ùð úð Ø—:‘:×(Ñ(¨¨vÓ6ˆDØ—.‘.×$Ñ$ TÓ*ˆCؘ‘9Ð øÜò Ù ð úô& d¨FÓ3ˆØ Ð Ø—.‘.×$Ñ$ TÓ*ˆCؘ‘9Ð ä×#Ñ#¤AÐ&>Ó$?À&Ñ$HÓIÐIøä × Ñ òØ�D‰zÒä × Ñ Ü ×!Ñ!Ü ×%Ñ%ð ò+ô ˜T 6Ó*Ð*ð +úsr·G"ÁABÂ'CÂ>G"ÃCÃ(G"Ã**DÄ,EÅG"ÅEÅG"Å;FÆ FÆ G"ÆFÆ0G"Ç!G"Ç"H:Ç<>H:có‚—|jjd«rt|j«}t||«}|j «rt j |||«}ntd«|z}td«}tj||¬«Std«}|||jfz}tj|«S)z¯build an exception to be raised about a filtered changeid This is extracted in a function to help extensions (eg: evolve) to experiment with various message variants.óvisibleshidden revision '%s's'use --hidden to access hidden revisions©r€s+filtered revision '%s' (not in '%s' subset)) Ú filternamer(r)rIrrÚ_getfilteredreasonrrrX)rbÚchangeidÚunfilteredreporYr¢r€s r5rYrY¤s¬€ð  ‡�×!Ñ! *Ô-ðŸ™Ó*ˆÜ˜¨Ó1ˆð �<‰<Œ>Ü×,Ñ,¨T°8¸SÓA‰CäÐ+Ó,¨xÑ7ˆCäÐ;Ó<ˆä×,Ñ,¨S°tÔ<Ð<Ü Ð :Ó ;€C؈H�d—o‘oÐ &Ñ&€CÜ × (Ñ (¨Ó -Ð-r@cóž—|s |dk7r||St||g|¬«}|stjtd««‚||j «S)Nr)Ú localaliassempty revision set)Úrevrangerr­rÚlast)rbÚrevspecr)rcrZs r5Ú revsinglerg¾sO€Ù �w !’|Ø�G‰}Ðä�˜�y¨ZÔ8€AÙ Ü×ÑœqÐ!6Ó7Ó8Ð8Ø �—‘“‰>Ðr@cóB—tj|«}|xr|ddvS)Nr)srangesrangepres rangepostsrangeall)rÚparse)rfÚtrees r5Ú _pairspecrkÈs/€Ü × Ñ ˜GÓ $€DØ ò �D˜‘Gð ððr@c󨇗|s ‰d‰dfSt‰|«}|stjtd««‚|j «}|j «}||k(r@t |«dk\r2tˆfd„|D««stjtd««‚||k(r&t |«dk(rt|d«s ‰|‰dfS‰|‰|fS)Nr§sempty revision rangerNc3ó8•K—|]}t‰|g«–—Œy­wr+)rd)r;rÝrbs €r5r=zrevpair..ásøèø€Ð6±¨A”H˜T A 3×'±ùsƒs#empty revision on one side of rangerr) rdrr­rÚfirstrer`Úallrk)rbrîrZrnÚseconds` r5ÚrevpairrqÒsÒø€Ù Ø�D‰z˜4 ™:Ð%Ð%ä��tÓ€Aá Ü×ÑœqÐ!8Ó9Ó:Ð:à �G‰G‹I€EØ �V‰V‹X€Fð �ŠÜ �‹I˜ŠNÜÓ6±Ó6Ô6ä×ÑœqÐ!GÓHÓIÐIð �‚œ3˜t›9¨š>´)¸DÀ¹GÔ2DØ�E‰{˜D ™JÐ&Ð&à �‰;˜˜V™ Ð $Ð$r@cóª—g}|D]9}t|t«rtjd|«}|j |«Œ;|j |d|¬«S)aExecute 1 to many revsets and return the union. This is the preferred mechanism for executing revsets using user-specified config options, such as revset aliases. The revsets specified by ``specs`` will be executed via a chained ``OR`` expression. If ``specs`` is empty, an empty result is returned. ``specs`` can contain integers, in which case they are assumed to be revision numbers. It is assumed the revsets are already formatted. If you have arguments that need to be expanded in the revset, call ``revsetlang.formatspec()`` and pass the result as an element of ``specs``. Specifying a single revset is allowed. Returns a ``smartset.abstractsmartset`` which is a list-like interface over integer revisions. rMT)r'rc)r~r®rÚ formatspecr_r-)rbÚspecsrcÚallspecsÚspecs r5rdrdìsR€ð*€HÛˆÜ �dœCÔ Ü×(Ñ(¨°Ó5ˆDØ�‰˜Õðð �<‰<˜ t¸ ˆ<Ó CÐCr@c#ó*K— |–—||kr|dz}Œ­w)NrNrH)Ú windowsizeÚ sizelimits r5Úincreasingwindowsrz s%èø€Ø ØÒØ ˜ Ò !Ø ˜!‰OˆJð ùs‚cóH‡‡‡‡—‰sgS|jŠˆˆˆˆfd„}|«S)axIterate over files and the revs in a "windowed" way. Callers most commonly need to iterate backwards over the history in which they are interested. Doing so has awful (quadratic-looking) performance, so we use iterators in a "windowed" way. We walk a window of revisions in the desired order. Within the window, we first walk forwards to gather data, then in the desired order (usually backwards) to display it. This function returns an iterator yielding contexts. Before yielding each context, the iterator will first call the prepare function on each context in the window in forward order.c3ó(•K—t‰ «}d}t«D]s}g}t|«D]%}t|d«}|€d}n|j |«Œ't |«D]}‰|«}‰ |‰|««Œ|D] }‰|«–—Œ|sŒsyy­w)NFT)Úiterrzr9Únextr_rP) ÚitÚ stopiterationrxÚnrevsr5rðrYÚchangeÚmakefilematcherÚpreparerîs €€€€r5Úiteratezwalkchangerevs..iterate#s øèø€Ü �$‹ZˆØˆ Ü+Ö-ˆJ؈Eܘ:Ö&�ܘ2˜t“n�Ø�;Ø$(�MÙØ— ‘ ˜SÕ!ð 'ô ˜e–}�Ù˜S“k�Ù˜™_¨SÓ1Õ2ð%ó�Ù˜S“kÓ!ðòÙñ.ùs ƒB BÂB)Ú __getitem__)rbrîrƒr„r…r‚s ``` @r5Úwalkchangerevsr‡s'û€ñ ؈ Ø × Ñ €F÷ñ( ‹9Ðr@cóÖ—|j«}t|«dkDr|S|jjr|d|tgS|dj «t |«dz k\rgS|S)z÷Return list of meaningful (or all if debug) parentrevs for rev. For merges (two non-nullrev revisions) both parents are meaningful. Otherwise the first parent revision is considered meaningful if it is not the preceding revision. rr)Úparentsr`rar rrðr)rbrYr‰s r5ÚmeaningfulparentsrŠ:se€ð�k‰k‹m€GÜ ˆ7ƒ|�aÒØˆØ ‡w�w×ÒØ˜‘ ˜D¤™MÐ*Ð*؈q�z‡~�~Óœ6 #›;¨™?Ò*؈ Ø €Nr@cóx‡‡—|�|}n\|jjdd«}|dk(r|}n8tj|«}|€!t j t d«|z«‚|r'|j«Š‰dk7r|jŠˆˆfd„S|jjdd«rd„StjS) aëReturn a function that produced paths for presenting to the user. The returned function takes a repo-relative path and produces a path that can be presented in the UI. Depending on the value of ui.relative-paths, either a repo-relative or cwd-relative path will be produced. legacyrelativevalue is the value to use if ui.relative-paths=legacy If forcerelativevalue is not None, then that value will be used regardless of what ui.relative-paths is set to. rrsrelative-pathsslegacys)ui.relative-paths is not a boolean ('%s')r@có•—‰|‰«Sr+rH)r·ÚcwdÚpathtos €€r5Úzgetuipathfn..ls ø€™V A sœ^r@sslashcó—|Sr+rHr¶s r5r�zgetuipathfn..ns€™r@) rarÃr rÅrrÇrÚgetcwdrŽrŸrÚ localpath)rbÚlegacyrelativevalueÚforcerelativevalueÚrelativerÃr�rŽs @@r5Ú getuipathfnr–Ksµù€ðÐ%Ø%‰à—‘—‘ Ð'8Ó9ˆØ �YÒ Ø*‰Hä!×+Ñ+¨FÓ3ˆHØÐÜ×'Ñ'ÜÐBÓCÀfÑLóðñØ�k‰k‹mˆØ �#Š:ð—[‘[ˆFÜ+Ð +Ø ‡w�w×ј% Ô*ÙÐä�~‰~Ðr@c󇇗ˆˆfd„S)zBCreate a new uipathfn that treats the file as relative to subpath.có<•—‰tj‰|««Sr+)Ú posixpathrÐ)r·rXÚuipathfns €€r5r�z subdiruipathfn..usø€‘XœiŸn™n¨W°aÓ8Ô9r@rH)rXršs``r5Úsubdiruipathfnr›ss ù€ä 9Ð9r@cód—t|xs$|jd«xs|jd««S)z¿Checks if any patterns, including --include and --exclude were given. Some commands (e.g. addremove) use this condition for deciding whether to print absolute or relative paths. óincludeóexclude)Úboolræ)ÚpatsÚoptss r5Úanypatsr¢xs+€ô �ÒD˜Ÿ™ Ó,ÒD°·±¸Ó0DÓ EÐEr@có2—tjs t|«Sg}|D]X}tj|d«\}}|€* t j |«}|r|j|«ŒH|j|«ŒZ|S#t j$r|g}YŒAwxYw)ziExpand bare globs when running on windows. On posix we assume it already has already been done by sh.N) rÚ expandglobsrGÚmatchmodÚ _patsplitÚglobÚrerÚextendr_)r ÚretÚkindpatr²ÚpatÚglobbeds r5Ú expandpatsr®�s–€ô × Ò Ü�D‹zÐØ €CÛˆÜ×&Ñ& w°Ó5‰ ˆˆcØ ˆ<ð ÜŸ)™) C›.�ñØ— ‘ ˜7Ô#ØØ � ‰ �7Õðð €Jøô —8‘8ò ؘ%’ð ús¿A=Á=BÂBc ó8‡‡—|€i}|s|dk(rt|xsg«}t‰j«d¬«Šˆˆfd„}|€|}‰j||j d«|j d«||j d«|¬«}|j «rg}||fS) z’Return a matcher and the patterns that were used. The matcher will warn about bad matches, unless an alternate badfn callback is provided.órelpathT©r“cón•—‰j«jjd‰|«|fz«y)Ns%s: %s )rbrar¾)r·r¢rYršs €€r5Úbadzmatchandpats..bad¢s)ø€Ø �‰‹ � ‰ ×ј;©(°1«+°sÐ);Ñ;Õ‰>˜% uÔ -Ð-r@có‚—tj|«s/tj|j|j «|«S||}tj |j|j «|g|¬«}|D�cgc] }||«sŒ |‘Œ}}t|«dk7rtj|«‚|dScc}w)zWReturn a file name from `pat` pattern suitable for usage in followlines logic. )rYrr) r¥ÚpatkindrÚ canonpathr r‘rr`rÚ ParseError)rbrðr¬r¢rYr£r·rs r5ÚparsefollowlinespatternrÅÇsž€ô × Ñ ˜CÔ Ü×!Ñ! $§)¡)¨T¯[©[«]¸CÓ@Ð@à�3‰iˆÜ �N‰N˜4Ÿ9™9 d§k¡k£m°c°UÀÔ DˆÙÓ(™C�q¡1 Q¥4’˜CˆÐ(Ü ˆu‹:˜Š?Ü×"Ñ" 3Ó'Ð 'Ø�Q‰xˆùò)s  B<ÂB<cóˆ—|jdd«}|sytj|jj|««S)z`return a vfs suitable to save 'orig' file return None if no special directory is configuredrrsorigbackuppathN)rÃrÚwvfsrÐ)rarbÚorigbackuppaths r5Ú getorigvfsrÉÖs7€ð—Y‘Y˜uÐ&7Ó8€NÙ ØÜ �7‰7�4—9‘9—>‘> .Ó1Ó 2Ð2r@có—t||«}|€|j|dz«S|j|«}|j|«r|j |«r¹|j t d«|j|«z«tttj|«««D]R}|j|«sŒ|j t d«|j|«z«|j|«n|j|«|j|«rP|j |«s?|j t d«|j|«z«|j|d¬«|j|«S)acustomize where working copy backup files (.orig files) are created Fetch user defined path from config file: [ui] origbackuppath = Fall back to default (filepath with .orig suffix) if not specified filepath is repo-relative Returns an absolute path s.origscreating directory: %s sremoving conflicting file: %s s#removing conflicting directory: %s T)Úforcibly)rÉÚwjoinrrrÚnoterrÐÚreversedrGrÚfinddirsÚ isfileorlinkÚunlinkÚmakedirsÚrmtree)rarbÚfilepathÚorigvfsÚ origbackupdirr·s r5Ú backuppathr×às6€ô˜˜TÓ"€GØ€Ø�z‰z˜( XÑ-Ó.Ð.à—O‘O HÓ-€MØ �=‰=˜Ô '¨7¯>©>¸-Ô+HØ �‰”Ð-Ó.°·±¸mÓ1LÑLÔMôœ$œx×0Ñ0°Ó:Ó;Ö<ˆAØ×#Ñ# AÕ&Ø—‘œÐ<Ó=ÀÇ Á ÈQÃÑOÔPØ—‘˜qÔ!Ùð =ð ×јÔ'à‡}�}�XÔ w§~¡~°hÔ'?Ø �‰Ü Ð5Ó 6¸¿¹ÀhÓ9OÑ Oô ð �‰�x¨$ˆÔ/à �<‰<˜Ó !Ð!r@có—eZdZdZd„Zd„Zy)Ú _containsnodezEproxy __contains__(node) to container.__contains__ which accepts revscó\—|jj|_|j|_yr+)ràrðÚ_torevÚ __contains__Ú _revcontains)r4rbÚ revcontainers r5rÖz_containsnode.__init__s!€Ø—n‘n×(Ñ(ˆŒ Ø(×5Ñ5ˆÕr@cóB—|j|j|««Sr+)rÝrÛ)r4rs r5rÜz_containsnode.__contains__ s€Ø× Ñ  §¡¨TÓ!2Ó3Ð3r@N)rArBrCrDrÖrÜrHr@r5rÙrÙs„ÙOò6ó4r@rÙc ó ‡.‡/‡0‡1—|s|�J‚|s|sytj|d«s|D�cic]}|fd“Œ}}n4i} |j«D]\} } t| t«s| f} | | | <Œ| }|j «Š1|€Ïi}|j«D]º\} } | D]°}||vrŒt | «dkDr*t‰1jd| ««j«}nlt | «dk(rYg}|D]}|j|«Œt‰1jd||««}|r|dj«}n|j}n| d}|||<Œ²Œ¼|j«D��cgc] }|D]}|‘ŒŒ }}}i}i}|�r4i}|j«D]4\} } | D]*}| D]#}|j|g«j|«Œ%Œ,Œ6|j!ˆ1fd„¬ «iŠ.ˆ.fd „Š/|D]Ê}‰1|}t#ˆ/fd „|j%«D««}|€$t#ˆ1fd „||D««}t#||«}n t#||«}|‰.|<||j'«kDr"|j|g«j|«Œ–||j'«ksŒª|j|g«j|«ŒÌ|j)d «5}|j*}g}|j«D]Ù\}}|j-|«}|sŒddlm} |j2j5dt7j8t6j:|«t=|«t=|«fz«|j?d|||«}!tA||!«}"|D]@}#|j|#|f«| jC||"|#«D]}$|j|$df«ŒŒBŒÛ|r|jE|||«|j«D]\Š/}%tGjH||‰/|%«Œ|j«D]\Š/}%tGjJ||‰/|%«Œ|j2jMdd«}&tOjP|tNjR«r–‰1jTjVŠ0ˆ0fd„}'g}(tY|j«|'¬ «D]>\}})t ˆ1fd„|D««t ˆ1fd„|)D««f}*|(j|*«Œ@|(�rtOjZ||(||¬«nætGj\|«r—|&r•t«}|j_«D]}|ja|«Œ|r._sø€ t¨A¡w§{¡{¤}r@)rìcó`•—‰j|j«|j««Sr+)rærr\)rYÚ newphasess €r5r\zcleanupnodes..phasebs ø€Ø—=‘= §¡£¨S¯Y©Y«[Ó9Ð 9r@c3ó.•K—|] }‰|«–—Œy­wr+rH)r;Úpr\s €r5r=zcleanupnodes..gsøèø€Ð>± ¨1™e AŸh± ùsƒc3óD•K—|]}‰|j«–—Œy­wr+)r\)r;Úoldnoderâs €r5r=zcleanupnodes..is#øèø€ðÙ9L¨g�D˜‘M×'Ñ'×)Ñ9Lùsƒ scleanup)Ú bookmarkss"moving bookmarks %r from %s to %s s*parents(roots(%ln & (::%n))) - parents(%n)r$scleanup-as-archivedcó •—‰|dd«S)NrrH)ÚnsÚtorevs €r5r�zcleanupnodes..¦sø€¡%¨¨1©¨a©¤/r@c3ó(•K—|] }‰|–—Œ y­wr+rH)r;rerâs €r5r=zcleanupnodes..©søèø€Ð1©b¨˜T !�W©bùóƒc3ó(•K—|] }‰|–—Œ y­wr+rH)r;r£râs €r5r=zcleanupnodes..©søèø€Ð8LÉ!ÀQ¸¸a½É!ùrî)Ú operationÚmetadata)Úrepairc3ó.K—|] }|D]}|–—ŒŒy­wr+rH)r;rëres r5r=zcleanupnodes..¿sèø€Ð@¡| »R¸œ1¸R˜1¡|ùs‚)Úbackup)6rršrQr~r>r)r`r~rNrr©rGÚnullidÚvaluesÚ setdefaultr_rr?r‰r\Ú transactionÚ _bookmarksÚ nodebookmarksrkréraÚdebugrÚrapplyÚ maybebytestrrrîrÙÚdivergent2deleteÚ applychangesrÚretractboundaryÚadvanceboundaryrÃrÚ isenabledÚcreatemarkersoptràrðrPÚ createmarkersÚsupportarchivedÚkeysrMròÚminÚ backupbundleÚarchivedÚ delayedstrip)2rbÚ replacementsrðÚmovesrñÚfixphaseÚ targetphaserôreÚreplsrìÚvalueÚoldnodesÚnewnodesrèÚnewnodeÚ allreplacedÚrepÚrootsrëÚ allnewnodesÚ toretractÚ toadvanceÚ precursorsrYÚ parentphaseÚoldphaseÚnewphaseÚtrÚbmarksÚ bmarkchangesÚ oldbmarksréÚ deleterevsÚ deletenodesÚnameÚbÚnodesÚmayusearchivedÚsortfuncÚrelsrïÚrelròrÚtostriprär\rìrâs2 @@@@r5Ú cleanupnodesr,sÅû€ñ2 �{Ð*Ð*Ð *Ù ¡Øô × Ñ ˜L¨'Ô 2Ù*6Ó7©, Q˜˜˜b™¨,ˆ Ñ7ðˆØ&×,Ñ,Ö.‰JˆC�ܘc¤5Ô)Ø�f�؈E�#ŠJð/ðˆ ð �?‰?Ó €Dð €}؈Ø".×"4Ñ"4Ö"6Ñ ˆH�hÛ#�ؘeÑ#ØÜ�x“= 1Ò$ä" 4§8¡8¨K¸Ó#BÓC×HÑHÓJ‘Gܘ“] aÒ'à"$�KÛ+˜Ø#×*Ñ*¨3Õ/ð ,ä ØŸ™Ð!5°wÀ ÓLó�EñØ"'¨¡(§-¡-£/™à"&§+¡+™à& q™k�GØ!(��g’ñ)$ð#7ð. ,×2Ñ2Ô4ÔAÑ4˜»b¸’1¸b�1Ð4€KÑAØ€IØ€IÚØˆ Ø".×"4Ñ"4Ö"6Ñ ˆH�hÛ#�Û'�GØ×)Ñ)¨'°2Ó6×=Ñ=¸gÕFñ (ñ$ð#7ð ×ÑÓ4ÐÔ5؈ ô :ó#ˆGØ�w‘-ˆCÜÓ>°· ± ´ Ó>Ó>ˆKØÐ"ÜóØ9CÀGÒ9Lóó�ô˜x¨Ó5‘ä˜{¨KÓ8�Ø!)ˆI�gÑ Ø˜#Ÿ)™)›+Ò%Ø×$Ñ$ X¨rÓ2×9Ñ9¸'ÕBؘCŸI™I›KÓ'Ø×$Ñ$ X¨rÓ2×9Ñ9¸'ÕBð#ð × Ñ ˜*Ô %¨à—‘ˆØˆ Ø %§ ¡ ¦ Ñ ˆG�WØ×*Ñ*¨7Ó3ˆIÙØÝ #à �G‰G�M‰MØ6ä—O‘O¤H×$9Ñ$9¸9ÓEܘ“Lܘ“Lðñô ðŸ™Ø=ØØØó ˆJô (¨¨jÓ9ˆKÛ!�Ø×#Ñ# T¨7 OÔ4Ø"×3Ñ3°D¸+ÀtÖL�AØ ×'Ñ'¨¨D¨ Õ2ñMñ"ð-!.ñ6 Ø × Ñ   b¨,Ô 7à%ŸO™OÖ-‰LˆE�5Ü × "Ñ " 4¨¨U°EÕ :ð.à%ŸO™OÖ-‰LˆE�5Ü × "Ñ " 4¨¨U°EÕ :ð.🙟™¨Ð9OÓPˆä × Ñ ˜d¤H×$=Ñ$=Ô >ð—N‘N×&Ñ&ˆEÛ1ˆH؈DÜ  × 2Ñ 2Ó 4¸(×C‘��AÜÓ1©bÓ1Ó1´5Ó8LÉ!Ó8LÓ3LÐM�Ø— ‘ ˜CÕ ðDòÜ×&Ñ&ؘ$¨)¸höô× #Ñ # DÔ )©nä›%ˆKØ"×'Ñ'Ö)�Ø×"Ñ" 2Õ&ð*áÝ$ä˜;¨D¯N©N×,>Ñ,>Ô?�Ø×#Ñ#ؘ+ {°D¸)ôô × "Ñ " 4¨¬V¯_©_¸kÕ Jå äÑ@¡|Ó@Ó@ˆGÙØ×#Ñ#Ø—G‘G˜T 7¨I¸fð$ô÷Y &Ð %ùòO8ùóNB÷@ &Ð %úsª W4Å W9Ê?L,W?×?Xc󮇇—|€i}|Š|jd«} t|jd«xsd«}|dks|dkDrtjt d««‚|dz}d}|d} t | j«D]¤} tj| ‰«} |jd«s+‰j| «st| j««sŒU| j| «} |jj|| «} t!| |«} | j#| | ||«rd }Œ¦gŠˆˆfd „}tj*‰|«}t-||«\}}}}}t/||z«}|j1«}|j3|«t |«D]x}|j&j4s‰j|«rŒ+||vrt d «||«z}d }nt d«||«z}d}|j&j)||¬«Œzt7|‰||z||z||«}|s"|s|s|s|r|�|«t9|||z||«‰D]}|‰j«vsŒy |S#t$rtjt d««‚wxYw#tj$$r1|j&j)t d «|| «z«Y�ŒQwxYw)Nsdry_runs similarityrssimilarity must be a numberrms$similarity must be between 0 and 100çY@r´rs#skipping missing subrepository: %s cóp•—|‰j«vr‰j||«‰j|«yr+)rr³r_)r·r¢r£Úrejecteds €€r5r¶zaddremove..badfnçs)ø€Ø �—‘“ ‰>Ø �E‰E�!�SŒMØ�‰˜Õr@ó adding %s sui.addremove.addedó removing %s sui.addremove.removed)Úlabel)ræÚfloatr¯rr­rrPrLr¥Ú subdirmatcherr¿rþrrRrÇÚreljoinr›Ú addremoverCrar(ÚbadmatchÚ_interestingfilesrNÚcopyrMÚverboseÚ _findrenamesÚ _markchanges)rbÚmatcherr.ršr¡Úopen_trÚdry_runÚ similarityrªÚwctxrXÚsubmatchrRÚ subprefixÚ subuipathfnr¶r8r-r0r/r.Ú forgottenÚ unknownsetÚtoprintÚabsr(r3Úrenamesr·r£r0s @@r5r7r7Æs¼ù€Ø €|؈؀AØ�h‰h�zÓ"€GðBܘ4Ÿ8™8 MÓ2Ò7°aÓ8ˆ ð�A‚~˜ cÒ)Ü×ÑœqÐ!HÓIÓJÐJØ�%Ñ€Jà €Cà �‰:€Dܘ$Ÿ-™-Ö(ˆÜ×)Ñ)¨'°1Ó5ˆØ �8‰8�KÔ  A§G¡G¨GÔ$4¼¸H¿N¹NÓÓ*©X°c«]Ñ:�Ø-‘äÐ+Ó,©x¸«}Ñ<�Ø/�Ø �G‰G�N‰N˜6¨ˆNÕ /ðôØ ˆa�˜‘ '¨GÑ"3°ZÀó€Gñ ™¡9±¹7Ø Ð Ù ŒIÜ�T˜7 YÑ.°¸ÔAã ˆØ �—‘“ Š>Ùðð €Jøô{ òBÜ×ÑœqÐ!?Ó@ÓAÐAðBûô$×$Ñ$ò Ø—‘—‘ÜÐ=Ó>Ù˜wÓ'ñ(÷ð ús›I%ÄJÉ%(J ÊAKËKcó‡—t||ˆfd„¬«}gŠt||«\}}}}}|jjr{t ||z«} | j «} | j |«t| «D]>} | | vrtd«| z} ntd«| z} |jj| «Œ@t|d¬«} t||||z||z|| «}t|||z||«‰D]}||j«vsŒyy) z[Assert that files have somehow been operated upon. files are relative to the repo root.có&•—‰j|«Sr+)r_)ÚxÚyr0s €r5r�zmarktouched..sø€°8·?±?À1Ô3Er@rºr1r2Tr±rr)rÀr9rar;rNr:rMrPrr(r–r<r=r)rbrrAr£r-r0r/r.rFrGrHrIr(ršrJr·r0s @r5Ú marktouchedrO s ø€ô �4˜Ó&EÔF€AØ€Hä2CÀDÈ!Ó2LÑ/€Eˆ7�G˜W ià ‡w�w‡‚ܘ 9Ñ,Ó-ˆ Ø—/‘/Ó#ˆØ�‰�wÔܘ'–?ˆCØ�jÑ Ü˜>Ó*¨SÑ0‘äÐ+Ó,¨sÑ2�Ø �G‰G�N‰N˜6Õ "ð #ô˜4°TÔ:€HÜØ ˆa�˜‘ '¨GÑ"3°ZÀó€Gô��w Ñ*¨G°WÔ=ã ˆØ �—‘“ Š>Ùðð r@có²—gggggf\}}}}}tj|jd¬«}|d}|j} |j |d¬«}| j |t |j«ddd¬«} | j«D]Ã\} } | j| «} | js#|j| «r|j| «ŒF| js| s|j| «Œf| jr| r|j| «Œ†| jr| s|j| «Œ¦| jsŒ³|j| «ŒÅ|||||fS)zÅWalk dirstate with matcher, looking for files that addremove would care about. This is different from dirstate.status because it doesn't care about whether files are modified or clean.T)ÚcachedN)Ú includeexactF)Úsubreposr0r1Úfull)rÚ pathauditorr rÔÚ narrowmatchrrPrLrQÚ get_entryÚ any_trackedÚcheckr_r.r-)rbr>r-r0r/r.rFÚ audit_pathrYrÔÚ walkresultsrIÚstÚentrys r5r9r90s9€ð 35°b¸"¸bÀ"Ð2DÑ/€Eˆ7�G˜W iÜ×%Ñ% d§i¡i¸Ô=€Jà ˆt‰*€CØ�}‰}€HØ×јw°TÐÓ:€GØ—-‘-ØÜ˜Ÿ ™ Ó%ØØØ ð  ó€Kð×$Ñ$Ö&‰ˆˆRØ×"Ñ" 3Ó'ˆØ×!Ò! z×'7Ñ'7¸Ô'<Ø �N‰N˜3Õ Ø—-’-©Ø �N‰N˜3Õ Ø �]Š]™rØ × Ñ ˜SÕ !à �]Š]¡2Ø �N‰N˜3Õ Ø �[‹[Ø �L‰L˜Õ ð'ð �'˜7 G¨YÐ 6Ð6r@cóB—i}|dkDr—tj||||«D]|\}}} |jjs"|j |«r|j |«s9|jj t d«||«||«| dzfz«|||<Œ~|S)z.Find renames from removed files to added ones.rs7recording removal of %s as rename to %s (%d%% similar) rm)rÚ findrenamesrar;r¿r(r) rbr>r-r.rAršrJÚoldÚnewÚscores r5r<r<Ts¤€à€GØ�A‚~Ü&×2Ñ2Ø �%˜ *ö ‰OˆC��eð—‘—’Ø—}‘} SÔ)Ø—}‘} SÔ)à—‘—‘Üð,óñ  “}¡h¨s£m°U¸S±[ÐAñ BôðˆG�CŠLð ð €Nr@cóò—|d}|j«5|j|«|j|«|j«D]\}}|j ||«Œ ddd«y#1swYyxYw)zmMarks the files in unknown as added, the files in deleted as removed, and the files in renames as copied.N)ÚwlockÚforgetrOrQr:)rbr0r/rJrBrar`s r5r=r=ksZ€ð �‰:€DØ �‰�Ø � ‰ �GÔØ �‰�ÔØŸ ™ ž‰HˆC�Ø �I‰I�c˜3Õ ñ(÷ �‰ús –A A-Á-A6cóp‡‡‡—tj‰«rˆfd„}|SiЉ€ t‰«Šˆˆˆfd„}|S)Ncót•—‰|}|j«}||vr||S|j«}||vr||Syr+)Úp1copiesÚp2copies)ÚfnrðrYrhrirbs €r5Ú getrenamedz getrenamedfn..getrenamedysGø€Ø�s‘)ˆCØ—|‘|“~ˆHØ�X‰~Ø ‘|Ð#Ø—|‘|“~ˆHØ�X‰~Ø ‘|Ð#Ør@cóR•—|‰vrdi‰|<‰j|«}|D]I}|j|«}|j|j|««}|xr|d‰||<|‰k\sŒIn|‰|vr‰||S ‰||j «S#t j $rYywxYw)zçlooks up all renames for a file (up to endrev) the first time the file is given. It indexes on the changerev and only parses the manifest if linkrev != changerev. Returns rename info for fn at changerev rev.rN)ÚfileÚlinkrevÚrenamedrÚ copysourcerrC) rjrðrÙr5ÚlrroÚendrevÚrcacherbs €€€r5rkz getrenamedfn..getrenamed‰sÀø€ð �VÑ ØˆF�2‰JØ—‘˜2“ˆBÛ�Ø—Z‘Z “]�ØŸ*™* R§W¡W¨Q£ZÓ0�Ø!(Ò!7¨W°Q©Z��r‘ ˜2‘ؘ“<Ùð ð �&˜‘*Ñ Ø˜"‘:˜c‘?Ð "ð Ø˜‘9˜R‘=×+Ñ+Ó-Ð -øÜ× Ñ ò Ùð úsÁ:BÂB&Â%B&)Ú copiesmodÚusechangesetcentricalgor`)rbrrrkrss`` @r5Ú getrenamedfnrvvs>ú€Ü×(Ñ(¨Ô.ô ðÐà €FØ €~Ü�T“ˆöð0 Ðr@có^‡—tj|«rd„}|St||«Šˆfd„}|S)Ncó—|j«rV|j«j«}|j|j««t |j ««St |j«j ««Sr+)rirhr:rMrPrQ)rYÚ allcopiess r5Úcopiesfnzgetcopiesfn..copiesfn§s_€Ø�|‰|Œ~ØŸL™L›N×/Ñ/Ó1� à× Ñ  §¡£Ô0ܘiŸo™oÓ/Ó0Ð0ä˜cŸl™l›n×2Ñ2Ó4Ó5Ð5r@có�•—g}|j«D]/}‰||j««}|sŒ|j||f«Œ1|Sr+)rrðr_)rYr rjÚrenamerks €r5rzzgetcopiesfn..copiesfn³sDø€ØˆFØ—i‘i–k�Ù# B¨¯©« Ó2�ÚØ—M‘M 2 v ,Õ/ð"ðˆMr@)rtrurv)rbrrrzrks @r5Ú getcopiesfnr}¤s7ø€Ü×(Ñ(¨Ô.ò 6ð( €Oô" $¨Ó/ˆ ô ð €Or@có~—|jj|«xs|}||k(rS|jj|«}|js |js|s|jj |«yyy|jj|«jrŒ||k(r‡|j s?|jtd«|j||«|j||«fz«|jj|«js|s|j|g«yyy|s|j||«yy)zšUpdate the dirstate to reflect the intent of copying src to dst. For different reasons it might not end with dst being marked as copied from src. sF%s has not been committed yet, so no copy data will be stored for %s. N) rÔÚcopiedrWr-ÚtrackedÚ set_trackedÚquietr¾rrŽrOr:) rarbrBÚsrcÚdstÚdryrunr�Úorigsrcr]s r5Ú dirstatecopyr‡¾s€ð�m‰m×"Ñ" 3Ó'Ò.¨3€GØ ˆg‚~Ø— ‘ ×'Ñ'¨Ó,ˆØ �KŠK˜uŸ}š}±fØ �M‰M× %Ñ % cÕ *ð7=˜}ð �=‰=× "Ñ " 7Ó +× 1Ò 1°gÀ²nØ—8’8Ø—‘Üð9óð—{‘{ 7¨CÓ0°$·+±+¸cÀ3Ó2GÐHñ Iôð—=‘=×*Ñ*¨3Ó/×7Ò7ÁØ—‘˜#˜•ðAGÐ7áØ �I‰I�g˜sÕ #ðr@c ó*—|d}|j}t|j««}|j|j «|j «|j ||¬«}|jD]}|j|d¬«Œ|jD]}|j|d¬«Œ|jD]}|j|d¬«Œtj|||«}|j|«|j«D� � cic]\} } | |j| | «“Œ}} } |j«D]<\} } | |vs| |vs|j!| «jsd} |j#| | «Œ>|j%«ycc} } w)zøMove the dirstate to newctx and adjust it as necessary. A matcher can be provided as an optimization. It is probably a bug to pass a matcher that doesn't match all the differences between the parent of the working copy and newctx. r§)rT)Ú p1_trackedFN)rÔrJr Ú setparentsrrõr(r,Úupdate_file_p1r-r.rtÚ pathcopiesrMrQrærWr:Ú!_quick_access_changeid_invalidate) rbÚnewctxrÚoldctxÚdsr rïr·Ú oldcopiesr„rƒs r5Ú movedirstater’×sf€ð�$‰Z€FØ �‰€BÜ �"—)‘)“+Ó €F؇M�M�&—+‘+“- §¡Ô-Ø� ‰ �f Eˆ Ó*€Aà �ZŒZˆØ ×ј!¨ÐÕ-ðð�WŒWˆØ ×ј!¨ÐÕ.ðð�YŒYˆØ ×ј!¨ÐÕ-ðô×$Ñ$ V¨V°UÓ;€IØ ×Ñ�VÔØ;D¿?¹?Ô;LÔ MÑ;L©x¨s°Cˆc�9—=‘=  cÓ*Ñ*Ð;L€FÑ Mà—L‘L–N‰ˆˆSØ �fÑ   v¡ °R·\±\À#Ó5F×5LÒ5L؈CØ �‰��SÕð#ð ×*Ñ*Õ,ùó NsÄFcóÖ—tj|vrTt«t«}}|D]7}|tjvr|j |«Œ'|j |«Œ9||fS|dfS)zÈfilters the requirements into two sets: wcreq: requirements which should be written in .hg/requires storereq: which should be written in .hg/store/requires Returns (wcreq, storereq) N)ÚrequirementsmodÚSHARESAFE_REQUIREMENTrNÚWORKING_DIR_REQUIREMENTSrO)rÚwcÚstorerÝs r5Úfilterrequirementsr™ùsd€ô×,Ñ,° Ñ<Ü“Eœ3›5ˆEˆÛˆAØ”O×<Ñ<Ñ<Ø—‘�q• à— ‘ ˜!• ð ð �5ˆyÐØ ˜Ð Ðr@có:—tj|jvS)z;returns whether the repository is using treemanifest or not)r”ÚTREEMANIFEST_REQUIREMENTrr¼s r5Úistreemanifestrœ s€ä × 3Ñ 3°t×7HÑ7HÐ HÐHr@có—|r||_t|j«\}}|�t|j|«|�t|j|«y|j j dd«r|jjd«yy)zìwrites requirements for the repo Requirements are written to .hg/requires and .hg/store/requires based on whether share-safe mode is enabled and which requirements are wdir requirements and which are store requirements Nóformatsusestoreórequires)rr™Ú writerequiresrÚsvfsrarŸÚ tryunlink)rbrÚwcreqÚstorereqs r5Úwritereporequirementsr¥sv€ñØ(ˆÔÜ(¨×):Ñ):Ó;�O€Eˆ8Ø ÐÜ�d—h‘h Ô&ØÐÜ�d—i‘i Õ*Ø �‰× Ñ ˜I {Ô 3à � ‰ ×јKÕ(ð 4r@cóŽ—|ddd¬«5}t|«D]}|jd|z«Œ ddd«y#1swYyxYw)NrŸówT)Ú atomictempó%s )rPÚwrite)ÚopenerrÚfprÝs r5r r $s;€Ù � ˜T¨dÕ 3°rܘ Ö%ˆAØ �H‰H�W˜q‘[Õ !ñ&÷ 4× 3Ñ 3ús Œ%;»Acó4—eZdZd„Zd„Zd„Zd„Zed„«Zy)Úfilecachesubentrycóâ—||_d|_d|_|rXtj |j«|_|jr |jj «|_yd|_yyr+)rõÚ cachestatÚ _cacheabler®rýÚ cacheable)r4rõrýs r5rÖzfilecachesubentry.__init__+sY€ØˆŒ ؈ŒØˆŒá Ü.×3Ñ3°D·I±IÓ>ˆDŒNà�~Š~Ø"&§.¡.×":Ñ":Ó"<�•ð#'�•ð r@cón—|j«r%tj|j«|_yyr+)r²r®rýrõr°r3s r5Úrefreshzfilecachesubentry.refresh9s'€Ø �>‰>Ô Ü.×3Ñ3°D·I±IÓ>ˆD�Nð r@có4—|j� |jSy©NT)r±r3s r5r²zfilecachesubentry.cacheable=s€Ø �?‰?Ð &Ø—?‘?Ð "ðr@cóò—|j«sytj|j«}|r.|j€"|j«|_|jsy|j |k7r||_yy)NTF)r²r®rýrõr±r°)r4Únewstats r5Úchangedzfilecachesubentry.changedDsf€à�~‰~ÔØä#×(Ñ(¨¯©Ó3ˆñ �t—‘Ð.Ø%×/Ñ/Ó1ˆDŒOð—?’?Øà �>‰>˜WÒ $Ø$ˆDŒNØàr@cóL— tj|«S#t$rYywxYwr+)rr°ÚFileNotFoundError)rõs r5rýzfilecachesubentry.statYs(€ð Ü—>‘> $Ó'Ð 'øÜ ò Ù ð ús ‚— #¢#N) rArBrCrÖr´r²r¹Ú staticmethodrýrHr@r5r®r®*s*„ò 'ò?òòð*ñóñr@r®có —eZdZdd„Zd„Zd„Zy)Úfilecacheentrycój—g|_|D]'}|jjt||««Œ)yr+)Ú_entriesr_r®)r4Úpathsrýrõs r5rÖzfilecacheentry.__init__bs-€ØˆŒ ÛˆDØ �M‰M× Ñ Ô!2°4¸Ó!>Õ ?ñr@cóJ—|jD]}|j«sŒyy)ztrue if any entry has changedTF)rÀr¹©r4r]s r5r¹zfilecacheentry.changedgs!€à—]”]ˆEØ�}‰}�Ùð#ðr@cóF—|jD]}|j«Œyr+)rÀr´rÃs r5r´zfilecacheentry.refreshns€Ø—]”]ˆEØ �M‰M�Oñ#r@N)T)rArBrCrÖr¹r´rHr@r5r¾r¾as„ó@ò ór@r¾có6—eZdZdZd„Zd„Zd„Zd„Zd d„Zd„Z y) Ú filecacheaÑA property like decorator that tracks files under .hg/ for updates. On first access, the files defined as arguments are stat()ed and the results cached. The decorated function is called. The results are stashed away in a ``_filecache`` dict on the object whose method is decorated. On subsequent access, the cached result is used as it is set to the instance dictionary. On external property set/delete operations, the caller must update the corresponding _filecache entry appropriately. Use __class__..set() instead of directly setting . When using the property API, the cached data is always used if available. No stat() is performed to check if the file has changed. Others can muck about with the state of the ``_filecache`` dict. e.g. they can populate an entry before the property's getter is called. In this case, entries in ``_filecache`` will be used during property operations, if available. If the underlying file changes, it is up to external callers to reflect this by e.g. calling ``delattr(obj, attr)`` to remove the cached method result as well as possibly calling ``del obj._filecache[attr]`` to remove the ``filecacheentry``. có—||_yr+)rÁ)r4rÁs r5rÖzfilecache.__init__�s €Øˆ� r@có`—|jD�cgc]}|j||«‘Œc}Scc}wr+)rÁrÐ)r4Úobjrõs r5Ú tracked_pathszfilecache.tracked_paths�s)€Ø15·²Ó<±¨�— ‘ ˜#˜tÕ$°Ñ<Ð<ùÒ value dict from the specified source A source spec is treated as a URL, with a special case shell: type for parsing the output from a shell command. The data is parsed as a series of newline-separated records where each record is a revision specifier optionally followed by a space and a freeform string value. If the revision is known locally, it is converted to a rev, otherwise the record is skipped. Note that both key and value are treated as UTF-8 and converted to the local encoding. This allows uniformity between local and remote data sources. sextdatasunknown extdata source '%s'Nsshell:éTrh)ÚshellÚbufsizeÚ close_fdsÚstdoutr�ó rr@rsextdata command '%s' failed: %s)rarÃrÚAbortrr(Ú subprocessÚPopenrÚ tonativestrÚclosefdsÚPIPEr rÚrÚopenr°r�rÚtolocalrgrðrCrr­Ú communicater¯ÚcloseÚ returncodeÚ explainexit) rbÚsourcervÚdatarƒÚprocÚcmdrZÚkr<s r5Ú extdatasourceríÌs*€ð �7‰7�>‰>˜* fÓ -€DÙ Ü�k‰kœ!Ð:Ó;¸fÑDÓEÐEà €DØÐ€Cˆ$ð$Ø �?‰?˜9Ô %à�q�r�(ˆCÜ×#Ñ#Ü×$Ñ$ SÓ)ØØÜ"×+Ñ+Ü!—‘Ü×(Ñ(¨¯©Ó3ô ˆDð—+‘+‰Cô—(‘(˜4Ÿ7™7 DÓ)ˆCÛˆAØ�q‰yØ—w‘w“y—‘ t¨QÓ/‘�‘1à—w‘w“y #�1�ä× Ñ  Ó#ˆAð Ü19×1AÑ1AÀ!Ó1D�”Y˜t QÓ'×+Ñ+Ó-Ò.ññ ð Ø× Ñ Ô"ñ Ø �I‰I�KÙ �—‘ 1Ò$Ü�k‰kÜ Ð0Ó 1Ø”H×(Ñ(¨¯©Ó9Ð:ñ ;ó ð ð €Køô%×%Ñ%¤u×'<Ñ'<¼e×>NÑ>NÐOò Úð ûô ò ñð ûñ ð Ø× Ñ Õ"øÜò ñð úñ Ø �I‰I�Kð úsgÁC>H:Å0G2Å6H:Å<H+Ç22H(È$H:È'H(È(H:È+ H7È6H7È:I2È>IÉI2É IÉI2ÉIÉI2có<—eZdZd d„Zd„Zd„Zd d„Zd d„Zd„Zd„Z y) ÚprogressNcó†—||_d|_||_||_||_|j dd«|_||_y)Nrsprogresssdebug)raÚposÚtopicÚunitÚtotalrŸrûÚ _updatebar)r4raÚ updatebarròrórôs r5rÖzprogress.__init__s>€ØˆŒØˆŒØˆŒ ؈Œ ؈Œ Ø—]‘] ;°Ó9ˆŒ Ø#ˆ�r@có—|Sr+rHr3s r5Ú __enter__zprogress.__enter__s€Øˆ r@có$—|j«yr+)Úcomplete)r4Úexc_typeÚ exc_valueÚexc_tbs r5Ú__exit__zprogress.__exit__s €Ø � ‰ �r@cóâ—|€J‚|r||_||_|j|j|j||j|j«|j r|j |«yyr+)rôrñrõròrórûÚ _printdebug)r4rñÚitemrôs r5rMzprogress.update s[€ØˆÐˆÙ ؈DŒJ؈ŒØ �‰˜Ÿ ™  D§H¡H¨d°D·I±I¸t¿z¹zÔJØ �:Š:Ø × Ñ ˜TÕ "ð r@cóD—|j|j|z||«yr+)rMrñ)r4Ústeprrôs r5Ú incrementzprogress.increment)s€Ø � ‰ �D—H‘H˜t‘O T¨5Õ1r@có¨—d|_d|_d|_|j|j|jd|j|j«y)Nr@)rñrórôrõròr3s r5rúzprogress.complete,s;€ØˆŒØˆŒ ؈Œ Ø �‰˜Ÿ ™  D§H¡H¨c°4·9±9¸d¿j¹jÕIr@c óŽ—d}|jrd|jz}|rd|z}|jr_d|jz|jz }|jj d|j ||j|j||fz«y|jj d|j ||j|fz«y)Nr@rÛr.s%s:%s %d/%d%s (%4.2f%%) s %s:%s %d%s )rórôrñrarûrò)r4rróÚpcts r5rzprogress._printdebug2s£€ØˆØ �9Š9ؘ$Ÿ)™)Ñ#ˆD٠ؘ$‘;ˆDà �:Š:ؘ$Ÿ(™(Ñ" T§Z¡ZÑ/ˆCØ �G‰G�M‰MØ,Ø—:‘:˜t T§X¡X¨t¯z©z¸4ÀÐEñFõ ð �G‰G�M‰M˜/¨T¯Z©Z¸¸t¿x¹xÈÐ,NÑNÕ Or@)r@N)rr@N) rArBrCrÖrørþrMrrúrrHr@r5rïrïs'„ó$òòó#ó2òJó Pr@rïcóN—|jdd«xs|jdd«S)zDhelper function to know if a repo should be created as general deltaržó generaldeltasusegeneraldelta©rŸ©ras r5Ú gdinitconfigr Cs-€ð �=‰=˜ OÓ 4ò ¸¿ ¹ ØÐ%ó9ðr@có&—|jdd«S)zýhelper function to know if incoming deltas should be optimized The `format.generaldelta` config is an old form of the config that also implies that incoming delta-bases should be never be trusted. This function exists for this purpose. ržr r r s r5Ú gddeltaconfigrKs€ð �=‰=˜ OÓ 4Ð4r@có,—eZdZdZdZdd„Zdd„Zdd„Zy) Úsimplekeyvaluefilez†A simple file with key=value lines Keys must be alphanumerics and start with a letter, values must not contain ' ' characterss __firstlineNcó —||_||_yr+)rrõ)r4rrõrs r5rÖzsimplekeyvaluefile.__init__^s€ØˆŒØˆ� r@cóü—|jj|j«}i}|r:|s td«}t j |«‚|ddd||j <|d= td„|D««}|j |vr-td«}t j ||j z«‚|j|«|S#t$r-}t j tj|««‚d}~wwxYw)z×Read the contents of a simple key-value file 'firstlinenonkeyval' indicates whether the first line of file should be treated as a key-value pair or reuturned fully under the __firstline key.sempty simplekeyvalue filerNrhc3óhK—|]*}|j«sŒ|ddjdd«–—Œ,y­w)Nrhó=r)r°r�)r;Úlines r5r=z*simplekeyvaluefile.read..vs-èø€ðÙ5:¨T¸d¿j¹j½l��S�b� —‘  a×(±Uùs‚2˜2s%r can't be used as a key) rÚ readlinesrõrrÚCorruptedStateÚ firstlinekeyrJrMr¯r rz)r4ÚfirstlinenonkeyvalÚlinesrÚeÚ updatedicts r5Úreadzsimplekeyvaluefile.readbsý€ð —‘×"Ñ" 4§9¡9Ó-ˆØ ˆÙ ÙÜÐ2Ó3�Ü×*Ñ*¨1Ó-Ð-à#(¨¡8¨C¨R =ˆAˆd×ÑÑ Ø�a�ð CôñÙ5:óóˆJð× Ñ  JÑ.ÜÐ2Ó3�Ü×*Ñ*¨1¨t×/@Ñ/@Ñ+@ÓAÐAØ �H‰H�ZÔ ðˆøôò CÜ×&Ñ&¤z×'>Ñ'>¸qÓ'AÓBÐ Bûð CúsÁ%ACà C;Ã(C6Ã6C;cót—g}|�|jd|z«|j«D]º\}}||jk(r$d|jz}tj|«‚|ddj «sd}tj|«‚|j «sd}tj|«‚d|vrd }tj|«‚|jd ||fz«Œ¼|j|jd d ¬ «5}|jdj|««ddd«y#1swYyxYw)a Write key=>value mapping to a file data is a dict. Keys must be alphanumerical and start with a letter. Values must not contain newline characters. If 'firstline' is not None, it is written to file before everything else, as it is, not in a key=value formNr©skey name '%s' is reservedrrs1keys must start with a letter in a key-value files+invalid key name in a simple key-value filerls(invalid value in a simple key-value files%s=%s swbT)Úmoder¨r@) r_rQrrrOÚisalphaÚisalnumrrõrªrÐ)r4réÚ firstlinerrìr<rr¬s r5rªzsimplekeyvaluefile.write�s€ðˆØ Ð Ø �L‰L˜ 9Ñ,Ô -à—J‘J–L‰DˆAˆqØ�D×%Ñ%Ò%Ø0°4×3DÑ3DÑD�Ü×,Ñ,¨QÓ/Ð/Ø�Q�q�6—>‘>Ô#ØH�Ü×,Ñ,¨QÓ/Ð/Ø—9‘9”;ØB�Ü×,Ñ,¨QÓ/Ð/ؘ‰zØ?�Ü×,Ñ,¨QÓ/Ð/Ø �L‰L˜ q¨! fÑ,Õ -ð!ð�X‰X�d—i‘i e¸ˆXÔ =ÀØ �H‰H�S—X‘X˜e“_Ô %÷>× =Ñ =ús Ä!D.Ä.D7r+©F)rArBrCrDrrÖrrªrHr@r5rrVs„ñð "€Lóóô>&r@r)s debugobsoleteópullspushsserveóunbundler$r%cól‡—ˆfd„}|D��cgc]\}}|||«f‘Œ}}}t‰|«ycc}}w)a`Invokes the registered file prefetch functions, allowing extensions to ensure the corresponding files are available locally, before the command uses them. Args: revmatches: a list of (revision, match) tuples to indicate the files to fetch at each revision. If any of the match elements is None, it matches all files. có„•—|r3t|tj«sJ‚tj|d„«St ‰«S)Ncó—yr+rH)rjr¢s r5r�z1prefetchfiles.._matcher..¼s€¸r@)r~r¥Ú basematcherr8r½)r£rbs €r5Ú_matcherzprefetchfiles.._matcher·s<ø€Ù ܘa¤×!5Ñ!5Ô6Ð 6Ð6ô×$Ñ$ QÑ(<Ó=Ð =ä˜D“>Ð !r@N)Úfileprefetchhooks)rbÚ revmatchesr*rðrÚ revbadmatchess` r5Ú prefetchfilesr.¬s=ø€ô"ñAKÔKÁ ± °°e�c™8 E›?Ò+À €MÑKä�d˜MÕ*ùóLsŒ0cój‡‡‡‡‡ ‡ ‡ ‡—ˆfd„}gŠ ˆˆ ˆˆfd„}|ˆfd„«}|t«r |ˆfd„«}tj‰tj«r9‰jj dd«rgd¢Š ˆ fd„Š ‰ ‰«Š|ˆ ˆ ˆfd „«}|t «r|d „«} |ˆfd „«} y y ) z±register a callback to issue a summary after the transaction is closed If as_validator is true, then the callbacks are registered as transaction validators instead có,•—tˆfd„|D««S)Nc3ó@•K—|]}‰j|«–—Œy­wr+)r()r;rèÚtxnnames €r5r=z;registersummarycallback..txmatch..Ôsøèø€ÐD¹G°&�7×%Ñ% f×-¹Gùsƒ)rþ)Úsourcesr2s €r5Útxmatchz(registersummarycallback..txmatchÓsø€ÜÓD¹GÓDÓDÐDr@c󕇇‡—‰jŠtj‰j««Šˆˆˆfd„}dt ‰«z}‰r‰j ||«n‰j ||«‰j|«|S)zdecorator for report callbacks.cóT•—‰«}‰r|€J‚|j‰«}‰||«yr+)Úfiltered)rrbr^r Úreporefs €€€r5Úwrappedz?registersummarycallback..reportsummary..wrappedâs0ø€Ù“9ˆDÙØÐ'Ð'Ð'Ø—}‘} ZÓ0�Ù ��r�Nr@s%02i-txnreport)r^ÚweakrefÚrefr)r`Ú addvalidatorÚ addpostcloser_) r r9Únewcatr^r8Ú as_validatorÚ categoriesÚotrrbs ` @@€€€€r5Ú reportsummaryz.registersummarycallback..reportsummaryØsnû€ð—_‘_ˆ Ü—+‘+˜dŸo™oÓ/Ó0ˆö ð#¤S¨£_Ñ4ˆÙ Ø × Ñ ˜V WÕ -à × Ñ ˜V WÔ -Ø×ј&Ô!؈r@có”•—|jjdd«}|jjdd«}|jjdd«}|jjdd«}|s|s|rQd}|rtd«|z}td«}‰r td «}|€J‚|jj |||||fz«yy) Nschangegroup-count-changesetsrschangegroup-count-revisionsschangegroup-count-filesschangegroup-count-headsr@s (%+d heads)s2added %d changesets with %d changes to %d files%s s3adding %d changesets with %d changes to %d files%s )Úchangesrærrar() rbrÚ cgchangesetsÚ cgrevisionsÚcgfilesÚcgheadsÚhtextr¢r?s €r5Úreportchangegroupz2registersummarycallback..reportchangegroupñs½ø€à—z‘z—~‘~Ð&EÀqÓIˆ Ø—j‘j—n‘nÐ%CÀQÓGˆ Ø—*‘*—.‘.Ð!;¸QÓ?ˆØ—*‘*—.‘.Ð!;¸QÓ?ˆÙ ™;©'؈EÙܘ/Ó*¨WÑ4�ÜÐJÓKˆCÙÜÐOÓP�ØÐ#Ð #Ð#Ø �G‰G�N‰N˜3 ,° ¸WÀeÐ!LÑLÕ Mð+2r@cóR•—tj||«}t|jj dd««}|r'|j j td«|z«|r@td«}‰r td«}|j j |t|«z«yy)Ns obsmarkersrHs%i new obsolescence markers sobsoleted %i changesets sobsoleting %i changesets )rÚ getobsoletedr`rDrærar(r)rbrÚ obsoletedÚ newmarkersr¢r?s €r5Úreportobsoletedz0registersummarycallback..reportobsoleteds†ø€ä×,Ñ,¨T°2Ó6ˆIܘRŸZ™ZŸ^™^¨M¸2Ó>Ó?ˆJÙØ—‘—‘œqÐ!AÓBÀZÑOÔPÙÜÐ4Ó5�ÙÜÐ9Ó:�CØ—‘—‘˜s¤S¨£^Ñ3Õ4ð r@r$sevolution.report-instabilities))óorphanrP)sphase-divergentsphasedivergent)scontent-divergentscontentdivergentc 󨕗|jj}i}‰D]3\}}ttt j ||««|z «||<Œ5|Sr+)ràrâr`rNrrá)rbr7ÚcountsÚ instabilityr/Úinstabilitytypess €r5Úgetinstabilitycountsz5registersummarycallback..getinstabilitycountssVø€Ø—~‘~×2Ñ2ˆH؈FÛ'7Ñ#� ˜VÜ&)Üœ×(Ñ(¨¨vÓ6Ó7¸(ÑBó'��{Ò#ð(8ðˆMr@có”•—‰|«}‰D]:\}}||‰ |z }t||«}|sŒ |jj|«Œ<yr+)Úgetinstabilitymessagerar¾) rbrÚnewinstabilitycountsrSr/Údeltar¢rUrTÚoldinstabilitycountss €€€r5Úreportnewinstabilitiesz7registersummarycallback..reportnewinstabilities%sXø€á#7¸Ó#=Ð Û'7Ñ#� ˜Và(¨Ñ5Ø*¨;Ñ7ñ8ðô,¨E°;Ó?�ÚØ—G‘G—L‘L Õ%ñ(8r@có¢—|jjdt|««}|j«}|t|«k\ryt j ||¬«}|rò||j «||j«}}||k(r|}nd||fz}t|jd|««}t|jd|««} |s| std«|z} nY|r| rtd«} | ||| fz} nA|rtd «} | ||fz} n,| rtd «} | || fz} nd } tj| «‚|jj| «|jjd d «} |jd|| «} |j}| D�cgc] }||vsŒ|‘Œ }}|r*d} |jj| t|«z«yycc}w)z3Report the range of new revisions pulled/unbundled.ó origrepolenN)Ústarts%s:%ss%ld and draft()s%ld and secret()snew changesets %s s*new changesets %s (%d drafts, %d secrets) snew changesets %s (%d drafts) snew changesets %s (%d secrets) sentered unreachable conditions revduplicatesrHs(%d: + %ld) and obsolete()s*(%d other changesets obsolete on arrival) )rDrær`r)rÚspansetrr?rîrrrOrar(rà)rbrÚ origrepolenrârîÚminrevrÞrdÚdraftr]r¢ÚerrormsgÚ duplicatesÚobsaddedrêrÝÚ extinctaddeds r5Ú reportnewcsz,registersummarycallback..reportnewcs3sÌ€ðŸ*™*Ÿ.™.¨¼¸T»ÓCˆKØ—?‘?Ó$ˆDØœc $›iÒ'Øô×#Ñ# D° Ô<ˆDÙØ!% d§h¡h£jÑ!1°4¸¿¹» Ñ3C˜�à˜VÒ#Ø%‘Hà'¨6°6Ð*:Ñ:�HܘDŸI™IÐ&8¸$Ó?Ó@�ܘTŸY™YÐ':¸DÓAÓB�Ù¡ÜÐ2Ó3°hÑ>‘CÙ™vÜÐJÓK�CؘH e¨VÐ4Ñ4‘CÙÜÐ>Ó?�CؘH eÐ,Ñ,‘CÙÜÐ?Ó@�CؘH fÐ-Ñ-‘Cà?�HÜ×0Ñ0°Ó:Ð:Ø—‘—‘˜sÔ#🙟™Ð(8¸"Ó=ˆJØ—y‘yØ-¨{¸JóˆH𗑈BÙ'/Ó?¡x !°1¸B²;šA xˆLÐ?ÙðE�Ø—‘—‘˜s¤S¨Ó%6Ñ6Õ7ð ùò@s Æ G ÆG c󄕇—|jjdt|««Šg}|jjdg«D]6\}\}}|tjk7rŒ|j ˆfd„|D««Œ8|syt d«}‰r t d«}|jj|t|«z«y)zfReport statistics of phase changes for changesets pre-existing pull/unbundle. r]sphasesc3ó.•K—|] }|‰ksŒ |–—Œy­wr+rH)r;rðr`s €r5r=zFregistersummarycallback..reportphasechanges..nsøèø€Ð J±¨¸¸kÓ8I¤±ùrßNs%d local changesets published s&%d local changesets will be published ) rDrær`rÚpublicr©rrar() rbrÚ publishedrîr`rar¢r`r?s @€r5Úreportphasechangesz3registersummarycallback..reportphasechangesds¢ù€ð Ÿ*™*Ÿ.™.¨¼¸T»ÓCˆK؈IØ$&§J¡J§N¡N°9¸bÖ$AÑ �‘j�s˜CØœ&Ÿ-™-Ò'ØØ× Ñ Ó J±Ó JÕJð%BñØÜÐ6Ó7ˆCÙÜÐBÓC�Ø �G‰G�N‰N˜3¤ Y£Ñ/Õ 0r@N)Ú_reportobsoletedsourcerrrrarŸÚ_reportnewcssource)rbrAr2r?r4rBrJrOr[rgrlr@rUrTrZs```` @@@@r5ÚregistersummarycallbackroÌsßÿ€ôEð€J÷ð2ó Nóð NñÔ%Ô&à ó 5ó ð 5ô×ÑØ Œh×'Ñ'ôà �'‰'× Ñ ØÐ:ô ò Ðô  ñ 4°DÓ9Ðà õ &ó ð &ñÔ!Ô"à ñ. 8ó ð. 8ð` ó 1ó ñ 1ði#r@có.—|dkDrtd«||fzSy)z¿function to return the message to show warning about new instabilities exists as a separate function so that extension can wrap to show more information like how to fix instabilitiesrs%i new %s changesets Nr)rYrSs r5rWrWws&€ð  ˆq‚yÜÐ*Ó+¨u°kÐ.BÑBÐBðr@cóè—t|«|ks|jjrdjd„|D««Sdjd„|d|D««}t d«|t|«|z fzS)NrÛc3ó2K—|]}t|«–—Œy­wr+©r ©r;Úhs r5r=z nodesummaries..‚sèø€Ð1©5 aœ˜qŸ©5ùó‚c3ó2K—|]}t|«–—Œy­wr+rsrts r5r=z nodesummaries..ƒsèø€Ð<Ñ(; 1”e˜A—hÑ(;ùrvs%s and %d others)r`rar;rÐr)rbr&Ú maxnumnodesrns r5Ú nodesummariesry€sg€Ü ˆ5ƒz�[Ò  D§G¡G§O¢OØ�y‰yÑ1©5Ó1Ó1Ð1Ø �I‰IÑ<¨¨l¨{Ñ(;Ó<Ó <€EÜ Ð Ó ! U¬C°«J¸Ñ,DÐ$EÑ EÐEr@có8—|dvry|j|«}|j«}|D]o}|j||¬«}t|«dkDsŒ%t d«} | |z} t d«} | t|«t ||«fz} t j| | ¬«‚y)z-check that no named branch has multiple heads)sstripsrepairN)Úclosedrs'rejecting multiple heads on branch "%s"s %d heads: %sr])r7Ú branchmapÚ branchheadsr`rryrrÜ) rbrryÚ accountclosedr^ÚvisibleÚbmr$Úheadsr¢r€s r5Úenforcesingleheadr‚‡sš€à Ð$Ñ$àØ�m‰m˜JÓ'€Gà × Ñ Ó €Bۈؗ‘˜t¨M�Ó:ˆÜ ˆu‹:˜‹>ÜÐ>Ó?ˆCØ �4‰KˆCÜ�_Ó%ˆDØ ”S˜“Z¤¨t°UÓ!;Ð<Ñ <ˆDÜ—+‘+˜c¨Ô-Ð -ñr@có—|S)z™Allow extensions to wrap the sink returned by convcmd.convertsink() before it is used, whether or not the convert extension was formally loaded. rH)Úsinks r5Úwrapconvertsinkr…™s €ð €Kr@c ó~—|s|S|jr|jjdd«s|S|jdvr|St«}|D]<} t j |«}|jt j|««Œ>|s|St||«}|s|S|dk(rl|j«}dj|D�cgc]}tj||«‘Œc}«} |jjt!d«| z«|j#d|«S#t j$rYŒëwxYwcc}w)a(parse the user specs and unhide changesets whose hash or revision number is passed. hiddentype can be: 1) 'warn': warn while unhiding changesets 2) 'nowarn': don't warn while unhiding changesets returns a repo object with the required changesets unhidden r$s directaccess)r\óvisible-hiddenrÂs, s=warning: accessing hidden changesets for write operation: %s r‡)r^rarŸrNrrirrÄrMÚgethashlikesymbolsÚ_getrevsfromsymbolsr)rÐrrwr¾rr7) rbrtÚ hiddentypeÚsymbolsrvrjrîrârZÚrevstrs r5Úunhidehashlikerevsr� s9€ñ ؈ à �?Š? $§'¡'×"4Ñ"4ؘô#ðˆ à ‡�Ð=Ñ=؈ ä‹e€GÛˆð Ü×#Ñ# DÓ)ˆDð �‰”z×4Ñ4°TÓ:Õ;ð ñ ؈ ä ˜t WÓ -€Dá Øˆ à�WÒØ�‰Ó ˆØ—‘ÁÓEÁ¸1œX×-Ñ-¨d°1©gÕ6ÀÑEÓFˆØ �‰� ‰ Ü ð#ó ðñ  ô ð �=‰=Ð*¨DÓ 1Ð1øô5×Ñò Ù ð üòFsÁD!ÃD:Ä!D7Ä6D7cóþ—t«}|j«}|j}|j}t|«}|jj dd«}|D]d} t |«} | |kr|sŒ| |vr|j| «Œ- t||«}|€Œ>|j|«} | |vsŒT|j| «Œf|S#t$rYŒFwxYw#tjtjf$rd}YŒdwxYw)zkparse the list of symbols and returns a set of revision numbers of hidden changesets present in symbolsr$sdirectaccess.revnumsN)rNr)ràr`rarŸr®rOr¯r2rrCr‡rð) rbr‹rîrâÚunficlrêÚtiprevÚ allowrevnumsrïrerðs r5r‰r‰Õs€ô ‹5€DØ �?‰?Ó €DØ �^‰^€FØ �‰€BÜ �‹[€FØ—7‘7×%Ñ% oÐ7NÓO€LÛ ˆð Ü�A“ˆAØ�FŠ{Ù#Øà ‘{ØŸ™ œ Øð ð Ü& t¨QÓ/ˆAð ‰=Ø—*‘*˜Q“-ˆCؘ"Š}Ø—‘˜• ð+ð. €Køôò Ù ð ûô ×!Ñ!¤5×#8Ñ#8Ð9ò ØŠAð ús*Á CÁ3C Cà CÃCÃ%C<Ã;C<có6—|jt|««S)z€Select revisions reachable by a given bookmark If the bookmarked revision isn't a head, an empty set will be returned. )rîÚformat_bookmark_revspec)rbÚmarks r5Ú bookmarkrevsr•øs€ð �9‰9Ô,¨TÓ2Ó 3Ð3r@có<—d|z}tjd|||«S)zOBuild a revset expression to select revisions reachable by a given bookmarksliteral:smancestors(bookmark(%s)) - ancestors(head() and not bookmark(%s)) - ancestors(bookmark() and not bookmark(%s)))rrs)r”s r5r“r“ s1€ð ˜Ñ €DÜ × Ñ ð 6ð Ø Ø ó  ðr@có—|dgk(xs||vS)zÒCheck if username is a member of userlist. If userlist has a single '*' member, all users are considered members. Can be overridden by extensions to provide more complex authorization schemes. ó*rH)raÚusernameÚuserlists r5Úismemberr› s€ð ˜�vÑ Ò 5 ¨XÐ!5Ð5r@r+r#)FNF)rN)r§N)éi)FN)rHNFr°N)NNFNT)NN)g)r@F)é)ƒrTrur§rür™r¨rÝr:Úi18nrrrrrr r rr Ú thirdpartyr rkr rtrrrr¥rrrrrrr”rrrrrrÚutilsrrr rÆr!Ú scmplatformr"Ú importmodr#Ú importrustÚ rustrevlogÚtermsizerïr(rZrfr¤r´r¸rÀr»rÌrñr rrrrr2r6rGrKrIrYrgrkrqrdrzr‡rŠr–r›r¢r®r¸r½rÀrÅrÉr×rÙr,r7rOr9r<r=rvr}r‡r’r™rœr¥r r®r¾rÆrírïr rrrmrnr.Úhooksr+Ú_reportstroubledchangesetsrorWryr‚r…r�r‰r•r“r›rHr@r5Úr¨sÅðóÛ Û Û ÛÛ ÛÛå÷õõÝ÷÷÷÷õ÷(ñð  ×ÒÞ+å)à ˆ&× Ñ ˜9Ó %€Ø ˆV× Ñ ˜xÓ (€ à × Ñ €ð€‡�ˆd˜Ô÷GðGó ðGò>3ó4,ò({ ò| ò4 ò /ò ÷ñó2!óH.òbòò=ò+òò@ óG&òT ò@+òF.ó4òò%ó4Dó:ò'òTó"%òP:ò Fòð*GKóðDGKóKòó .ò ò3ò!"÷H4ñ4ð Ø Ø ØØ ótónDóN  òF!7òHò. ó+ó\ó4$ó2-òDò&Ió )ò&"÷ 4ñ4÷nñ÷$V)ñV)òrA÷H0Pñ0Pòfò5÷E&ñE&òPÐð ØðÐò +ð4�D—J‘J“LÐð"Ðóh1òVCóFò.ò$ò22òj òF4ò ó6r@