Ë îÀ`¨¡«�Ëãó —ddlZddlZddlmZddlmZddlmZddlm Z m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZddlmZmZej:Zej<Zed«Zed «Z d ee fzZ!d „Z"dOd „Z#dOd „Z$d„Z%d„Z&ejN«Z(dPd„Z)e)ddd¬«d„«Z*e)ddd¬«d„«Z+e)dd¬«d„«Z,e)ddd¬«d„«Z-e)dd d¬«d!„«Z.e)d"d#d¬«d$„«Z/e)d%d&d¬«d'„«Z0gd(¢Z1d)„Z2e)d*d¬«d+„«Z3e)d,d-d¬«d.„«Z e)d/d0d¬«d1„«Z4e)d2d3d¬«d4„«Z5d5„Z6e)d6d&d¬«d7„«Z7e)d8d¬«d9„«Z8e)d:d¬«d;„«Z9e)d„«Z:e)d?d@d¬«dA„«Z;e)dBdCd¬«dD„«Z<e)dEdFd¬«dG„«Z=e)dHdId¬«dJ„«Ze)dKd¬«dL„«Z>e)dMd8d¬«dN„«Z?y)QéNé)Ú_)Úhex)Úgetattr)Úbundle2Ú bundlecachesÚ changegroupÚ discoveryÚencodingÚerrorÚexchangeÚhookÚpushkeyÚpycompatÚrepoviewÚ requirementsÚ streamcloneÚutilÚwireprototypes)ÚprocutilÚ stringutils/incompatible Mercurial client; bundle2 requireds9see https://www.mercurial-scm.org/wiki/IncompatibleClients%s (%s) có‚—|j«D])}|jd«sŒ|ddjd«cSddgS)aReturns a list of compression methods supported by the client. Returns a list of the compression methods supported by the client according to the protocol capabilities. If no such capability has been announced, fallback to the default of zlib and uncompressed. scomp=éNó,szlibsnone)Ú getprotocapsÚ startswithÚsplit)ÚprotoÚcaps ú?usr/lib/python3.12/site-packages/mercurial/wireprotov1server.pyÚclientcompressionsupportr!1sE€ð×!Ñ!Ö#ˆØ �>‰>˜(Õ #Ø�q�r�7—=‘= Ó&Ò &ð$ð �WÐ Ðócó˜—|jjdd«}|r|�|dztjvr|dz }|j |«S)zòObtain the repo used for processing wire protocol commands. The intent of this function is to serve as a monkeypatch point for extensions that need commands to operate on different repo views under specialized circumstances. óserversviews.hidden)ÚuiÚconfigrÚ filtertableÚfiltered)ÚreporÚcommandÚ accesshiddenÚ viewconfigs r Úgetdispatchrepor-AsO€ð—‘—‘  ¨7Ó3€Jñ Ø Ð "Ø ˜Ñ #¤x×';Ñ';Ñ ;à�jÑ ˆ à �=‰=˜Ó $Ð$r"cón—t||||¬«}t|\}}|j|«}|||g|¢­ŽS)N)r+)r-ÚcommandsÚgetargs)r)rr*r+ÚfuncÚspecÚargss r Údispatchr4Vs@€Ü ˜4 ¨¸lÔ K€Dä˜'Ñ"�J€Dˆ$Ø �=‰=˜Ó €Dá ��eÐ #˜dÒ #Ð#r"có¢—i}|D]}||vsŒ||||<||=Œ|r3tjjd|dj|«fz«|S)Ns,warning: %s ignored unexpected arguments %s r)rÚstderrÚwriteÚjoin)ÚcmdÚkeysÚothersÚoptsÚks r Úoptionsr>_sc€Ø €DÛ ˆØ �Š;ؘQ‘iˆD�‰GØ�q‘ ðñÜ�‰×ÑØ <Ø�D—I‘I˜fÓ%Ð&ñ 'ô ð €Kr"có—|j}tj|jv}|r|j dd|z«}|�|S|j dd|z«}|�|S|r|j dd«}|�|S|j dd«S)zïWhether a bundle1 operation is allowed from the server. Priority is: 1. server.bundle1gd. (if generaldelta active) 2. server.bundle1. 3. server.bundle1gd (if generaldelta active) 4. server.bundle1 r$s bundle1gd.%ss bundle1.%ss bundle1gdsbundle1)r%ÚrequirementsmodÚGENERALDELTA_REQUIREMENTrÚ configbool)r)Úactionr%ÚgdÚvs r Úbundle1allowedrFms’€ð �‰€BÜ × 1Ñ 1°T×5FÑ5FÐ F€Bá Ø �M‰M˜) _°vÑ%=Ó >ˆØ ˆ=؈Hà � ‰ �i °Ñ!7Ó8€AØ€}Øˆá Ø �M‰M˜) \Ó 2ˆØ ˆ=؈Hà �=‰=˜ JÓ /Ð/r"ópushcó(‡‡‡‡—tjj«D��chc]\}}|ddk(sŒ|’Œc}}Љdvrtjd‰z«‚‰€dŠt ‰t «stjd«‚ˆˆˆˆfd„}|Scc}}w)a£Decorator to declare a wire protocol command. ``name`` is the name of the wire protocol command being provided. ``args`` defines the named arguments accepted by the command. It is a space-delimited list of argument names. ``*`` denotes a special value that says to accept all named arguments. ``permission`` defines the permission type needed to run this command. Can be ``push`` or ``pull``. These roughly map to read-write and read-only, respectively. Default is to assume command requires ``push`` permissions because otherwise commands not declaring their permissions could modify a repository that is supposed to be read-only. sversionr©rGópullsCinvalid wire protocol permission; got %s; expected "push" or "pull"r"s:arguments for version 1 commands must be declared as bytesc󈕗‰tvrtjd‰z«‚tj|‰‰‰¬«t‰<|S)Ns+%s command already registered for version 1)r3Ú transportsÚ permission)r/r ÚProgrammingErrorrÚ commandentry)r1r3ÚnamerMrLs €€€€r Úregisterz"wireprotocommand..register¯sLø€Ø ”8Ñ Ü×(Ñ(Ø>ÀÑEóð ô(×4Ñ4Ø �t¨ ¸zô Œ�‰ðˆ r")rÚ TRANSPORTSÚitemsr rNÚ isinstanceÚbytes)rPr3rMr=rErQrLs``` @r ÚwireprotocommandrVŽs¥û€ô %×/Ñ/×5Ñ5Ô7ôÙ7‰dˆa�¸1¸Z¹=ÈAÓ;MŠÐ7ò€JðÐ+Ñ+Ü×$Ñ$ð 1Ø3=ñ >ó ð ð  €|؈ä �dœEÔ "Ü×$Ñ$Ø Ió ð ÷ ð €Oùó;s ¦B·Bsbatchscmds *rJ)rMc óÀ—tj}g}|jd«D�]�}|jdd«\}}i} |jd«D]*} | sŒ| jd«\} } || «| || «<Œ,t|\} }t|j}|dvsJ‚|j |«|rl|j«}i}|D]9}|dk(r*i}| j «D]}||vsŒ| |||<Œ||d<Œ2| |||<Œ;| ||g|D�cgc]}||‘Œ c}¢­Ž}n | ||«}t|tj«r|cSt|tjtf«sJ‚t|tj«r |j}|jtj|««�Œ’tjdj|««Scc}w)Nó;ó rró=rIó*)rÚunescapebatchargrr/rMÚ checkpermr:rTÚooberrorÚ bytesresponserUÚdataÚappendÚescapebatchargr8)r)rÚcmdsr;Ú unescapeargÚresÚpairÚopr3ÚvalsÚaÚnrEr1r2Úpermr:r`r=ÚstarÚkeyÚresults r Úbatchro¾s΀ä ×1Ñ1€KØ €CØ— ‘ ˜4× ˆØ—:‘:˜d AÓ&‰ˆˆD؈ؗ‘˜DÖ!ˆAÚØ—w‘w˜t“}‘��1Ù'2°1£~�‘[ “^Ò$ð"ô˜b‘\‰ ˆˆdô˜‰|×&Ñ&ˆØÐ)Ñ)Ð)Ð)Ø �‰˜Ôá Ø—:‘:“<ˆD؈DÛ�ؘ’9Ø�DØ#Ÿy™yž{˜Ø dš?Ø(,¨S© ˜D šIð +ð"&�D˜’Jà" 1™g�D˜’Gðñ˜$ Ð@¹$Ó(?¹$°Q¨¨a«¸$Ñ(?Ò@‰Fá˜$ Ó&ˆFÜ �fœn×5Ñ5Ô 6ØŠMô˜&¤>×#?Ñ#?ÄÐ"GÔHÐHÐHÜ �fœn×:Ñ:Ô ;Ø—[‘[ˆFØ � ‰ ”>×0Ñ0°Ó8Ö9ðK!ôN × 'Ñ '¨¯ © °#«Ó 7Ð7ùò)@sÄ G sbetweenspairscó6—|jd«D�cgc]}tj|d«‘Œ}}g}|j|«D])}|j tj |«dz«Œ+tj dj|««Scc}w)NrYó-ó r")rrÚ decodelistÚbetweenraÚ encodelistr_r8)r)rÚpairsÚpÚrÚbs r rtrtìsƒ€à9>¿¹ÀTÔ9JÓ KÑ9J°AŒ^× &Ñ & q¨$Õ /Ð9J€EÐ KØ €AØ �\‰\˜%Ö ˆØ �‰”×*Ñ*¨1Ó-°Ñ5Õ6ð!ô × 'Ñ '¨¯©°« Ó 4Ð4ùò Ls”Bó branchmapcóD—|j«}g}|j«D]X\}}tjt j |««}t j|«}|jd||fz«ŒZt jdj|««S)Ns%s %srr) Ú branchmaprSÚurlreqÚquoter Ú fromlocalrrurar_r8)r)rr|ÚheadsÚbranchÚnodesÚ branchnameÚ branchnodess r r|r|ösƒ€à—‘Ó €IØ €EØ"Ÿ™Ö*‰ ˆ�Ü—\‘\¤(×"4Ñ"4°VÓ"<Ó=ˆ Ü$×/Ñ/°Ó6ˆ Ø � ‰ �X ¨[Ð 9Ñ9Õ:ð+ô × 'Ñ '¨¯ © °5Ó(9Ó :Ð:r"sbranchesónodescóò—tj|«}g}|j|«D])}|jtj|«dz«Œ+tj dj |««S)Nrrr")rrsÚbranchesrarur_r8)r)rr‚rxrys r r‡r‡sa€ä × %Ñ % eÓ ,€EØ €AØ �]‰]˜5Ö !ˆØ �‰”×*Ñ*¨1Ó-°Ñ5Õ6ð"ô × 'Ñ '¨¯©°« Ó 4Ð4r"sget_cached_bundle_inlinespathcóž—tj|jd«r$tj|j|dd|¬«|jj t j «}|jj ||«}|jj|«stjd|z«‚tjj|«}tjj|«j|«stjd|z«‚d„}||j|«}tj|d¬«S)z< Server command to send a clonebundle to the client spretransmit-inline-clone-bundleT)ÚthrowÚclonebundlepathsclonebundle %s does not exists'clonebundle %s is using an illegal pathc3óþK—||«5}tj|j««d}tj|«–—tj |«D]}|–—Œ ddd«y#1swYyxYw­w)Né)ÚosÚfstatÚfilenorÚ uvarintencodeÚ filechunkiter)ÚvfsÚ bundle_pathÚfÚlengthÚchunks r Ú generatorz+get_cached_bundle_inline..generator#s_èø€Ù �Ô  Ü—X‘X˜aŸh™h›jÓ)¨!Ñ,ˆFÜ×$Ñ$ VÓ,Ò ,Ü×+Ñ+¨AÖ.�Ø“ ñ/÷× Ñ üs‚ A=‹AA1Á( A=Á1A:Á6A=©ÚgenÚprefer_uncompressed)rÚhashookr%r’r8rÚBUNDLE_CACHE_DIRÚexistsr ÚAbortr�ÚpathÚrealpathrrÚ streamres)r)rrŸÚ bundle_dirrŠÚclonebundles_dirr—Ústreams r Úget_cached_bundle_inliner¥ sû€ô  ‡|�|�D—G‘GÐ?Ô@Ü � ‰ Ø �G‰GØ Ø .ØØ õ  ð—‘—‘œ|×<Ñ<Ó=€JØ—h‘h—m‘m J°Ó5€OØ �8‰8�?‰?˜?Ô +Ü�k‰kÐ:¸TÑAÓBÐBä—w‘w×'Ñ'¨ Ó3ÐÜ �7‰7× Ñ ˜OÓ ,× 7Ñ 7Ð8HÔ IÜ�k‰kÐDÀtÑKÓLÐLòñ�t—x‘x Ó 1€FÜ × #Ñ #¨ÀDÔ IÐIr"s clonebundlesr"có—tj|«}g}|j«D]3}|jtj«rŒ#|j |«Œ5t jdj|««S)z¡A legacy version of clonebundles_manifest This version filtered out new url scheme (like peer-bundle-cache://) to avoid confusion in older clients. rr) rÚ get_manifestÚ splitlinesrÚCLONEBUNDLESCHEMErarr_r8)r)rÚmanifest_contentsÚmodified_manifestÚlines r Ú clonebundlesr­.sn€ô%×1Ñ1°$Ó7ÐàÐØ!×,Ñ,Ö.ˆØ �?‰?œ<×9Ñ9Ô :Ø Ø× Ñ  Õ&ð/ô × 'Ñ '¨¯ © Ð3DÓ(EÓ FÐFr"sclonebundles_manifestr[cóV—tj|«}tj|«S)aServer command for returning info for available bundles to seed clones. Clients will parse this response and determine what bundle to fetch. Extensions may wrap this command to filter or dynamically emit data depending on the request. e.g. you could advertise URLs for the closest data center given the client's IP address. The only filter on the server side is filtering out inline clonebundles in case a client does not support them. Otherwise, older clients would retrieve and error out on those. )rr§rr_)r)rr3rªs r Úclonebundles_2r¯?s'€ô%×1Ñ1°$Ó7ÐÜ × 'Ñ 'Ð(9Ó :Ð:r")ólookuprzópushkeyóknownó getbundles unbundlehashcó —tt«}tjd|«r|j d«t j |«r”|jjdd«r|j d«t j|«}|tjhz s|j d«n,|j ddjt|««z«|jjdd «rQtjtj |d¬ ««}|j d t"j%|«z«|j d djtj&«z«|jjdd «rZ|j t(j*«|jjdd«r|j t(j,«|j/||«S)a)return a list of capabilities for a repo This function exists to allow extensions to easily wrap capabilities computation - returns a lists: easy to alter - change done here will be propagated to both `capabilities` and `hello` command without any other action needed. óchangegroupsubsetr$spreferuncompressedsstream-preferredsstreams streamreqs=%srs experimentalsbundle2-advertise)Úrolesbundle2=s unbundle=%ssnarrowsnarrowservebrokenellipses)ÚlistÚ wireprotocapsr/ÚcommandavailablerarÚallowservergenerationr%rBÚstreamed_requirementsr@ÚREVLOGV1_REQUIREMENTr8ÚsortedrÚ encodecapsÚ getrepocapsr}r~ÚbundlepriorityrÚ NARROWCAPÚ ELLIPSESCAPÚaddcapabilities)r)rÚcapsÚrequiredformatsÚcapsblobs r Ú _capabilitiesrÇ[sy€ô ” Ó €Dô× Ñ Ð!5°uÔ=Ø � ‰ Ð(Ô)ä×(Ñ(¨Ô.Ø �7‰7× Ñ ˜iÐ)>Ô ?Ø �K‰KÐ+Ô ,Ü%×;Ñ;¸DÓAˆà¤/×"FÑ"FÐ!GÒGØ �K‰K˜ Õ "ð �K‰KÐ(¨4¯9©9´V¸OÓ5LÓ+MÑMÔ NØ ‡w�w×ј/Ð+?Ô@Ü×%Ñ%¤g×&9Ñ&9¸$ÀYÔ&OÓPˆØ � ‰ �K¤&§,¡,¨xÓ"8Ñ8Ô9؇K�K� §¡¬7×+AÑ+AÓ!BÑBÔCà ‡w�w×ј/¨9Ô5Ø � ‰ ”N×,Ñ,Ô-Ø �7‰7× Ñ ˜oÐ/KÔ LØ �K‰Kœ×2Ñ2Ô 3à × Ñ   tÓ ,Ð,r"s capabilitiescót—t||«}tjdjt |«««S)NrY)rÇrr_r8r½©r)rrÄs r Ú capabilitiesrʆs,€ä ˜˜uÓ %€DÜ × 'Ñ '¨¯ © ´&¸³,Ó(?Ó @Ð@r"s changegroupsrootscóô‡—tj|«}tj|||j «¬«}t j ||dd«Štˆfd„d«}tj|¬«S)N©Ú missingrootsÚ ancestorsofó01óservecó&•—‰jd«S©Ni€©Úread©Úcgs€r Úzchangegroup..“ó ø€�r—w‘w˜u”~r"r"©r™) rrsr Úoutgoingr€ÚchangegroupmodÚmakechangegroupÚiterr¡)r)rÚrootsr‚rÚr™rÖs @r r r Œsfø€ä × %Ñ % eÓ ,€EÜ×!Ñ!Ø ˜5¨d¯j©j«lô€Hô × 'Ñ '¨¨h¸¸xÓ H€BÜ Ó% sÓ +€CÜ × #Ñ #¨Ô ,Ð,r"rµs bases headscó‡—tj|«}tj|«}tj|||¬«}t j ||dd«Št ˆfd„d«}tj|¬«S)NrÌrÏrÐcó&•—‰jd«SrÒrÓrÕs€r r×z#changegroupsubset..�rØr"r"rÙ)rrsr rÚrÛrÜrÝr¡)r)rÚbasesr€rÚr™rÖs @r Úchangegroupsubsetrâ—skø€ä × %Ñ % eÓ ,€EÜ × %Ñ % eÓ ,€EÜ×!Ñ! $°UÈÔN€HÜ × 'Ñ '¨¨h¸¸xÓ H€BÜ Ó% sÓ +€CÜ × #Ñ #¨Ô ,Ð,r"ó debugwireargss one two *c ó”—tdddg|«}tj|j||fit j |«¤Ž«S)Nrãsthreesfour)r>rr_Ú debugwireargsrÚ strkwargs)r)rÚoneÚtwor;r<s r rårå¡sM€ô Ð# h°Ð%8¸&Ó A€DÜ × 'Ñ '؈×ј3 Ñ@¤x×'9Ñ'9¸$Ó'?Ñ@ó ðr"cój‡‡‡—d„}|jjd«}|sytj||«}tj||d¬«}|sy|j «j Љj|D� cgc]} ‰j| «‘Œc} d¬«Š‰j|D� cgc]} ‰j| «‘Œc} d¬«Št|«} |D]ü} | jd«} tjjj| «} | r | | vr| | vrŒHd| vrK || d«}|j|«rŒjt!ˆˆfd „|D««rŒ€t#ˆˆˆfd „|D««rŒ—d | vr" || d «}t!ˆˆfd „|D««sŒ½| d }|j$j'd|z« |jj)|«cSycc} wcc} w#t$rY�ŒwxYw#t$rY�Œ&wxYw#t*$r"|j$j'd|z«Y�ŒTwxYw)a©Return a file object for the first matching pullbundle. Pullbundles are specified in .hg/pullbundles.manifest similar to clonebundles. For each entry, the bundle specification is checked for compatibility: - Client features vs the BUNDLESPEC. - Revisions shared with the clients vs base revisions of the bundle. A bundle can be applied only if all its base revisions are known by the client. - At least one leaf of the bundle's DAG is missing on the client. - Every leaf of the bundle's DAG is part of node set the client wants. E.g. do not send a bundle of all changes if the client wants only one specific branch of many. cóp—|jd«D�chc]}tj|«’Œc}Scc}w)NrX)rÚbinasciiÚ unhexlify)ÚsÚhs r Údecodehexstringz(find_pullbundle..decodehexstringºs-€Ø/0¯w©w°t¬}Ó=©}¨!”×"Ñ" 1Õ%¨}Ñ=Ð=ùÒ=s”3spullbundles.manifestNT)Ú pullbundles)Ú inclusives COMPRESSIONóheadsc3óD•K—|]}‰j|«‰v–—Œy­w©N©Úrev©Ú.0röÚclÚ common_ancs €€r Ú z"find_pullbundle..×søèø€ÐE¹ °�2—6‘6˜#“; *Ô,¹ ùóƒ c3ón•K—|],}‰j|«‰vxr‰j|«‰v–—Œ.y­wrôrõ)rørörùrúÚ heads_ancs €€€r rûz"find_pullbundle..Ùs;øèø€ðá'�Cð—‘�s“  9Ð,ÒN°·±¸³ÀJÐ1NÓNÙ'ùsƒ25sbasesc3óD•K—|]}‰j|«‰v–—Œy­wrôrõr÷s €€r rûz"find_pullbundle..äsøèø€ÐI¹L°S�r—v‘v˜c“{ jÔ0¹LùrüsURLssending pullbundle "%s" spullbundle "%s" not accessible )r’ÚtryreadrÚparseclonebundlesmanifestÚfilterclonebundleentriesÚ unfilteredÚ changelogÚ ancestorsrör!ÚgetrÚ compenginesÚ _bundlenamesÚ TypeErrorÚissubsetÚallÚanyr%ÚdebugÚopenÚIOError)r)rr<Úclheadsr€ÚcommonrïÚmanifestreröÚ compformatsÚentryÚcompÚaltcompÚ bundle_headsÚ bundle_basesrŸrùrúrþs @@@r Úfind_pullbundlerªs'ú€ò >ð�x‰x×ÑÐ 7Ó8€HÙ ØÜ × 0Ñ 0°°xÓ @€CÜ × /Ñ /°°cÀtÔ L€CÙ ØØ �‰Ó × $Ñ $€BØ— ‘ ±UÓ;±U¨c˜bŸf™f S�k°UÑ;Àt� ÓL€IØ—‘±fÓ=±f¨s˜rŸv™v c�{°fÑ=È�ÓN€JÜ*¨5Ó1€KÛˆØ�y‰y˜Ó(ˆÜ×"Ñ"×/Ñ/×3Ñ3°DÓ9ˆÙ �D  Ñ+°¸{Ñ0JØ ð �uÑ ð Ù.¨u°X©Ó?� ð×$Ñ$ VÔ,ØÜÔE¹ ÓEÔEØÜõá'óôðØ �uÑ ð Ù.¨u°X©Ó?� ôÔI¹LÓIÔIØØ�V‰}ˆØ �‰� ‰ Ð2°TÑ9Ô:ð Ø—8‘8—=‘= Ó&Ò &ðCðJ ùòQ<ùÚ=øôò âð ûôò âð ûôò Ø �G‰G�M‰MÐ=ÀÑDÔ EÚ ð úsBÁ?GÂ/G"Ä* G'Å9 G7Æ>HÇ' G4Ç3G4Ç7 HÈHÈ'H2È1H2r³có*—tdtjj«|«}|j «D]®\}}tj|}|dk(rtj |«||<Œ7|dk(rt |jd««||<ŒZ|dk(rt|jd««||<Œ}|dk(r|dk(rd||<Œ�t|«||<Œœ|d k7sŒ¢td |z«‚t|d «sktj|jd ««sG|jd k(rtj t"«St%j&t(t*¬«‚ t|j,j/««}t|jdt«««}t|jdt«««} | j1|j2«|j4j7dd«rNd|j9«vrrÚGETBUNDLE_ARGUMENTSr:rSrsr·rÚsetÚboolÚKeyErrorrFr Úbundle2requestedrrPr^Úbundle2requiredr ržÚbundle2requiredmainÚbundle2requiredhintrr€ÚdiscardÚnullidr%rBrrr¡rr‘rÚgetbundlechunksrræÚmessagerÚbundle20rraÚaddpartÚ bundlepartÚ getchunks)r)rr;r<r=rEÚkeytyperr€rÚbundler ÚinfoÚchunksÚprefercompressedÚexcÚbundlerÚmanargsÚadvargss r Ú getbundler;ðsr€ä Ø”n×8Ñ8×=Ñ=Ó?Àó €Dð— ‘ – ‰ˆˆ1Ü ×4Ñ4°QÑ7ˆØ �hÒ Ü$×/Ñ/°Ó2ˆD�ŠGØ ˜Ò ܘ1Ÿ7™7 4›=Ó)ˆD�ŠGØ ˜Ò ܘ!Ÿ'™' $›-Ó(ˆD�ŠGØ ˜ Ò "ð�DŠyØ��Q’ä˜q›'��Q’Ø ˜Ó ÜÐ>ÀÑHÓIÐ Ið!ô$ ˜$ Ô (Ü×(Ñ(¨¯©°-Ó)@ÔAØ�z‰z˜ZÒ'Ü%×.Ñ.¬Ó?Ð?Ü—+‘+Ô1Ô8KÔLÐ Lð+!Ü�d—n‘n×*Ñ*Ó,Ó-ˆÜ�D—H‘H˜X¤s£uÓ-Ó.ˆÜ�T—X‘X˜i¬«Ó/Ó0ˆØ�‰�t—{‘{Ô#à �G‰G× Ñ ˜y¨-Ô 8Ø 5×#5Ñ#5Ó#7Ñ7ô% T¨5°$¸ÀÈÓOˆFÙÜ%×/Ñ/Ü×*Ñ*¨6Ó2Èôðð �7‰7× Ñ ˜iÐ)=Ô >àŸ(™( 5¨$Ó/ˆKÙ¡6¨g¸Ò.>Ü—k‘kÜÐ>Ó?ÜÐMÓNôðô  ×/Ñ/Ø �(ñ Ü&×0Ñ0°Ó6ñ ‰ ˆˆfð Ÿ8™8Ð$7¸Ó>Ðô" × #Ñ #Ø Ð,<Ð(<ô ðøô! �;‰;ò!ä×(Ñ(¨¯©°-Ó)@ÔAØ�z‰z˜ZÒ'Ü%×.Ñ.¨s¯{©{¸UÑ/BÓCÕCØ ä×"Ñ" 4§7¡7Ó+ˆØ § ¡ Ð,Ð-ˆØˆØ �8‰8Ð Ø �N‰N˜G S§X¡XÐ.Ô /Ø�‰œ×*Ñ*¨>¸7ÀGÓLÔMØ×"Ñ"Ó$ˆØ Öûð!ús.Å#C-LÉBLÌPÌAP Í/PÍ5BP Ð Pròcóx—|j«}tjtj|«dz«S)Nrr)r€rr_ru)r)rrîs r r€r€?s.€à � ‰ ‹ €AÜ × 'Ñ '¬×(AÑ(AÀ!Ó(DÀuÑ(LÓ MÐMr"shellocó^—t||«j}tjd|z«S)afCalled as part of SSH handshake to obtain server info. Returns a list of lines describing interesting things about the server, in an RFC822-like format. Currently, the only one defined is ``capabilities``, which consists of a line of space separated tokens describing server abilities: capabilities: scapabilities: %s )rÊr`rr_rÉs r Úhellor>Es-€ô ˜˜eÓ $× )Ñ )€DÜ × 'Ñ 'Ð(=ÀÑ(DÓ EÐEr"slistkeysó namespacecóÈ—t|jtj|««j ««}t j tj|««Srô) r½Úlistkeysr ÚtolocalrSrr_Ú pushkeymodÚ encodekeys)r)rÚ namespaceÚds r rArAUsE€äˆt�}‰}œX×-Ñ-¨iÓ8Ó9×?Ñ?ÓAÓB€AÜ × 'Ñ '¬ ×(=Ñ(=¸aÓ(@Ó AÐAr"r°ókeycóø— tj|«}|j|«}t|«}d}tjd||fz«S#t$r!}t j |«}d}Yd}~Œ?d}~wwxYw)Nrrs%d %s ) r rBÚlookuprÚ ExceptionrÚ forcebytestrrr_)r)rrmr=rjrxÚsuccessÚinsts r rIrI[su€ðÜ × Ñ ˜SÓ !ˆØ �K‰K˜‹NˆÜ �‹FˆØˆô × 'Ñ '¨ °g¸q°\Ñ(AÓ BÐBøô òÜ × #Ñ # DÓ )ˆØ�ûðús‚3AÁ A9ÁA4Á4A9r²snodes *có —djd„|jtj|««D««}tj|«S)Nr"c3ó0K—|]}|xrdxsd–—Œy­w)ó1rN©)rørys r rûzknown..js!èø€ðÙ$P˜qˆŠ ˆdÒ�dÓÑ$Pùs‚)r8Úknownrrsr_)r)rr‚r;rEs r rRrRhsD€à �‰ñØ$(§J¡J¬~×/HÑ/HÈÓ/OÔ$Póó €Aô × 'Ñ '¨Ó *Ð*r"s protocapsscapscó¤—|jtjk(rt|j d««|_tj d«S)NrYsOK)rPrÚSSHV1r#rÚ _protocapsr_rÉs r Ú protocapsrVps;€à ‡z�z”^×)Ñ)Ò)ܘtŸz™z¨$Ó/Ó0ˆÔÜ × 'Ñ '¨Ó .Ð.r"r±snamespace key old newcó@—t|«dk(r@tj|«|k7r( |jd«t j |«}nt j |«}|j«5}|jt j |«t j |«t j |«|«xsd}ddd«r|j«nd}tjdt«|fz«S#t $rYŒ¬wxYw#1swYŒOxYw)Nézutf-8Fr"s%d %s) ÚlenrÚ escapestrÚdecoder rBÚUnicodeDecodeErrorÚmayberedirectstdiorÚgetvaluerr_Úint)r)rrErmÚoldÚnewÚoutputrxs r rrwsý€ô ˆ3ƒx�2‚~œ*×.Ñ.¨sÓ3°sÒ:ð Ø �J‰J�wÔ Ü×"Ñ" 3Ó'‰Cô×јsÓ#ˆà × !Ñ !Ô # và �L‰LÜ× Ñ  Ó+Ü× Ñ  Ó%Ü× Ñ  Ó%Øó  ò ð ð ÷ $ñ#)ˆV�_‰_Ô ¨c€FÜ × 'Ñ '¨ ´S¸³V¸VÐ4DÑ(DÓ EÐEøô#"ò Ù ð ú÷ $Ð #ús¨&DÁ4ADÄ DÄDÄDs stream_outcóR—tjtj|««S)zØIf the server supports streaming clone, it advertises the "stream" capability with a value representing the version and flags of the repo it is serving. Client checks to see if it understands the format. )rÚstreamreslegacyrÚgeneratev1wireproto)r)rs r r¤r¤”s €ô × )Ñ )¬+×*IÑ*IÈ$Ó*OÓ PÐPr"sunbundlec ó¨ ‡‡‡—tj|«}|j«5} tj||d«d„} |j «Š|j jdd«rˆfd„}tj‰«Šn”d\ŠŠˆˆfd„}tjd¬ «\}Š|j jd ‰z«tj|tjd ««Š‰D]}‰j!|«Œ‰j#d «tj$|j ‰d«}t'|t(j*«rct-|d «sW|j.dk(r)tj0t2«|«cddd«St5j6t8t:¬«‚tj<|||d|j?««} tj@| d«r4tjB| jE«¬«|«cddd«StjF| |r|jI«nd«|«cddd«S#|«wxYw#t4jJt4j6t4jLf$�r} tO| dd«�s ‚#t4j6$r‹} tPjRj!| jU««tPjRjW«tjFd |r|jI«nd«cYd} ~ cYd} ~ cddd«Sd} ~ wt4jL$rLtjXtjZ| «|r|jI«nd«cYcYd} ~ cddd«SwxYwt]j^|j «} tO| dd«D]} | ja| «Œ ‚#t4jb$�r-} tO| dd«} | �d| jedd«vr‚| jgd«}|jid| jj«| jl�|jid| jld¬«| jn�|jid| jnd¬«| jp�|jid | jpd¬«| jr�|jid!| jrd¬«| jt�|jid"| jtd¬«Yd} ~ nd} ~ wwxYw�nN#t4jJ$rz} | jgd#«}| jv�|jid$| jv«| jxr+|jid%d&j{| jx««Yd} ~ nÆd} ~ wt4j6$rj} d'| j|fg}g}| j~�|j�d(| j~f«| jat]j‚d)||««Yd} ~ nKd} ~ wt4jL$r2} | jgd*d't…j†| «fg«Yd} ~ nd} ~ wwxYwtjB| jE«¬«cYd} ~ cddd«Sd} ~ wwxYw#1swYyxYw)+Nspreparing changescó—yrôrQrQr"r r×zunbundle..¤s€˜dr"r$sstreamunbundlecó•—‰D]}ŒyrôrQ)rwÚpayloads €r Úcleanupzunbundle..cleanup©sø€ó")˜AØ ñ")r")NNcóZ•—‰r‰j«‰rtj‰«yyrô)Úcloser�Úunlink)ÚfpÚtempnames€€r rjzunbundle..cleanup´s#ø€ÙØŸH™HœJÙ#ÜŸI™I hÕ/ð$r"s hg-unbundle-)Úprefixs"redirecting incoming bundle to %s swb+rrGrrrÐr/rÙr"Úduringunbundle2FÚ_bundle2salvagedoutputrQÚ _replycapsr±serrors error:pushkeys in-reply-tor?)Ú mandatoryrGsnewsoldsretserror:unsupportedcontentsparttypesparamsórr r!serror:pushraced)Drrsr]r Ú check_headsÚ getpayloadr%rBrÚ chunkbufferrÚmkstempr r�ÚfdopenÚsysstrr7ÚseekÚ readbundlerTrÛÚ cg1unpackerrFrPr^r'r ržr(r)ÚunbundleÚclientÚ safehasattrrdr1Úpushresr^ÚBundleValueErrorÚ PushRacedrrr6ÚformatÚflushÚpusherrÚbytestrrr.r/Ú PushkeyFailedrÚnewpartÚaddparamÚpartidrErmrar`ÚretÚparttypeÚparamsr8r-rrar0rrK)r)rr€Ú their_headsrbrjÚfdrwr™rxr7r8ÚoutÚ remotecapsÚpartÚerrpartr9r:rnriros @@@r rr�sˆú€ä ×+Ñ+¨EÓ2€Kà × !Ñ !Ô # vðB KÜ × Ñ   {Ð4HÔ IÙ"ˆGð8 Ø×*Ñ*Ó,�Ø—7‘7×%Ñ% iÐ1BÔCô!ô ×)Ñ)¨'Ó2‘Bð$.‘L�B˜õ0ô $,×#3Ñ#3¸?Ô#K‘L�B˜Ø—G‘G—M‘MØ>ÀÑIôôŸ™ 2¤x§¡°vÓ'>Ó?�BÛ$˜ØŸ™ � ð%à—G‘G˜A”Jä×)Ñ)¨$¯'©'°2°tÓ<�ÜØœ×3Ñ3ôä(¨¨wÔ7Ø—z‘z ZÒ/ô .×6Ñ6´ÓGñ"” ÷y $Ñ #ôX Ÿ+™+Ü+Ô2Eôðô×%Ñ%ؘ#˜{¨H°e·l±l³nó�ô×#Ñ# A yÔ1ô*×9Ñ9¸a¿k¹k»mÔLñ ” ÷y $Ñ #ôn&×-Ñ-Ø©F�v—‘Ô(¸óñ ” ÷y $Ñ #øñx• ûä×&Ñ&¬¯ © ´U·_±_ÐEóE Kä˜3Ð 1°5Õ9ðØøÜ—{‘{ò ô —O‘O×)Ñ)¨#¯*©*«,Ô7Ü—O‘O×)Ñ)Ô+Ü)×1Ñ1ر˜6Ÿ?™?Ô,¸Có÷ñ÷U $Ñ #ûôZ—‘òÜ)×1Ñ1Ü ×(Ñ(¨Ó-Ù-3˜Ÿ™Ô)¸óö÷] $Ñ #ðZúô ×&Ñ& t§w¡wÓ/ˆGܘsÐ$<¸bÖA�Ø—‘ Õ$ðBð, ðHØøÜ×*Ñ*óHä!(¨¨l¸DÓ!A�Jà"Ð.Ø&¨j¯n©n¸XÀrÓ.JÑJðØ"Ÿ?™?Ð+;Ó<�DØ—M‘M .°#·*±*Ô=Ø—}‘}Ð0ØŸ ™ Ø(¨#¯-©-À5ð&ôð—w‘wÐ*ØŸ ™  f¨c¯g©gÀ˜ ÔGØ—w‘wÐ*ØŸ ™  f¨c¯g©gÀ˜ ÔGØ—w‘wÐ*ØŸ ™  f¨c¯g©gÀ˜ ÔGØ—w‘wÐ*ØŸ ™  f¨c¯g©gÀ˜ ÔGÿøð-Hýô.×)Ñ)ò HØ!Ÿ/™/Ð*EÓF�Ø—<‘<Ð+Ø×$Ñ$ [°#·,±,Ô?Ø—:’:Ø×$Ñ$ Y°· ± ¸3¿:¹:Ó0FÔGÿøÜ—;‘;ò Ø&¨¯ © Ð4Ð5�Ø�Ø—8‘8Ð'Ø—N‘N G¨S¯X©XÐ#6Ô7Ø—‘Ü×&Ñ& ~°wÀÓH÷ñûô—?‘?ò Ø—‘Ø&Ø ¤*×"9Ñ"9¸#Ó">Ð?Ð@÷ñûð úô "×1Ñ1°g×6GÑ6GÓ6IÔJÔ J÷G $Ñ #ûð|E Kú÷} $Ð #ús&©[«I4ÁE I(ÆI4Æ A?I(ÈI4È0'I(ÉI4É( I1É1I4É43[Ê'[Ê6J7Ê7N2Ë A2MÌ<N2Ì=[Í[Í[ÍAN2Î![Î"[Î#[Î1N2Î2A[Ï9O:Ï:T;ÐD#T6Ô1UÔ6T;Ô;UÔ>[ÕZ ÕA0W×[×Z ×A YØ>[ÙZ Ù(ZÚ[ÚZ Ú &[Ú1[Ú2[Û[Û[Û[)F)NrG)@rër�Úi18nrÚnoderrrÚrrr rÛr r r r rrrCrrr@rrrÚutilsrrÚurlerrr}r(r)r'r!r-r4r>rFÚ commanddictr/rVrortr|r‡r¥r­r¯r¸rÇrÊrârårr;r€r>rArIrRrVr¤rrQr"r Úrœs8ðóÛ åÝÝ÷÷÷÷ñ÷$ð �‰€Ø �‰€áÐJÓKÐÙØ@óÐð Ð#6Ð8KÐ"LÑL€ò ó %ó*$ò ò0ð< &ˆ>× %Ñ %Ó '€ó,ñ`�(˜I°'Ô:ñ*8ó;ð*8ñZ�*˜h°7Ô;ñ5ó<ð5ñ�,¨7Ô3ñ;ó4ð;ñ�+˜x°GÔ<ñ5ó=ð5ñÐ-¨wÀ7ÔKñJóLðJñB�/ 3°7Ô;ñ Gó<ð Gñ Ð*¨D¸WÔEñ;óFð;ò"€ ò&-ñV�/¨gÔ6ñAó7ðAñ �. (°wÔ?ñ-ó@ð-ñÐ&¨À7ÔKñ-óLð-ñÐ" L¸WÔEñóFðòCñL�, °Ô9ñKó:ðKñ\�( wÔ/ñNó0ðNñ �( wÔ/ñ Fó0ð Fñ�+˜|¸Ô@ñBóAðBñ �)˜V°Ô8ñ Có9ð Cñ�(˜J°7Ô;ñ+ó<ð+ñ�, °GÔ<ñ/ó=ð/ñ �*Ð6À7ÔKñFóLðFñ8�-¨GÔ4ñQó5ðQñ�+˜x°GÔ<ñFKó=ñFKr"