ó
    6°h’— ã                  óò  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	SSK
Jr  SSKJrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJ r J!r!J"r"J#r#  \RH                  (       a  S SK%r%S SKJ&r&J'r'  \RP                  r(\RR                  " S	5      r*\RR                  " S
5      r+\RR                  " S5      r,\RZ                  r-\R\                  r.\R^                  r/S r0/ SQr1\Rd                  S 5       r3S r4 " S S5      r5S r6 " S S5      r7 " S S5      r8 " S S\85      r9 " S S\95      r: " S S5      r; " S S\85      r<\RR                  " S5      r=\RR                  " S 5      r>/ S!Qr? " S" S#5      r@ " S$ S%5      rA " S& S'5      rBS( rCSTS) jrD " S* S+5      rE " S, S-5      rFS. rGS/ rHSTS0 jrIS1 rJS2 rKS3 rLS4 rMS5 rNS6 rOSUS7 jrPS8 rQ SUS9 jrRS: rS SVS; jrT    SWS< jrU SVS= jrV     SXS> jrWSYS? jrX " S@ SA\Y5      rZ\R¶                  r\\R¶                  r[\Rº                  r]          SZSB jr^       S[SC jr_SD r`SE raS\SF jrbSG rcSH rdSI reSJSKSLSM.rfSN rgSO rhSP riSQ rjS]SR jrkSS rlg)^é    )ÚannotationsNé   ©Ú_)ÚhexÚsha1nodeconstantsÚshort)ÚcopiesÚ
diffhelperÚdiffutilÚencodingÚerrorÚmailÚmdiffÚpathutilÚpycompatÚscmutilÚsimilarÚutilÚvfs)ÚdateutilÚhashutilÚprocutilÚ
stringutil)ÚAnyÚIterators   diff --git a/(.*) b/(.*)s   (\t+|[^\t]+)s9   (\t+| +|[a-zA-Z0-9_\x80-\xff]+|[^ \ta-zA-Z0-9_\x80-\xff])c                ó>  ^^• S mS mU4S jnU4S jnU4S jnUU4S jnU4S jn " S S	5      nS
n/ nS/n	[        U S5      (       d  U" U 5      n U  H¿  n
UR                  U
5        U
R                  S5      (       a
  U" X5      s  $ U
R                  S5      (       a
  U" X5      s  $ T" X§5      (       a5  SnU
R                  SS5      S   R	                  5       U	;   a
  U" X5      s  $ M–  U
R                  S5      (       d  M®  U(       d  M·  U" X5      s  $    U" U5      $ )z6return an iterator of individual patches from a streamc                óÊ   • U(       a  U R                  S5      (       a  gU R                  S5      (       a  gU R                  SS5      n[        U5      S:H  =(       a    SUS	   ;  $ )
N)ó    ó   	T)r   ó   -ó   +Fó   : r   é   r   r   )Ú
startswithÚsplitÚlen)ÚlineÚinheaderÚls      Ú1/usr/lib/python3/dist-packages/mercurial/patch.pyÚisheaderÚsplit.<locals>.isheaderJ   sU   € Þ˜Ÿ™¨×6Ñ6àØ�?‰?Ð-×.Ñ.àØ�J‰J�u˜aÓ ˆÜ�1‹v˜‰{×/˜t¨1¨Q©4Ñ/Ð/ó    c                ó6   • [        SR                  U 5      5      $ ©Nr.   )ÚstringioÚjoin)Úliness    r+   ÚchunkÚsplit.<locals>.chunkT   s   € Ü˜Ÿ™ ›Ó(Ð(r.   c              3  óî   >#   • SnU  HV  nUR                  5       (       d  SnU(       d$  UR                  S5      (       a  T" U5      v •  / nSnUR                  U5        MX     U(       a  T" U5      v •  g g 7f)NTFó   # HG changeset patch)Ústripr%   Úappend)ÚstreamÚcurr)   r(   r4   s       €r+   ÚhgsplitÚsplit.<locals>.hgsplitW   sk   øé € ØˆãˆDØ—:‘:—<‘<Ø �Þ §¡Ð0G× HÑ HÙ˜C“jÒ Ø�Ø�à�J‰J�tÖñ ö Ù˜“*Óð ùs   ƒA2A5c              3  óú   >#   • U  HH  nUR                  S5      (       a  [        T" USS  5      5       S h  v•N   / nUR                  U5        MJ     U(       a  [        T" USS  5      5       S h  v•N   g g  N@ N7f)Nó   From r   )r%   r&   r9   )r:   r;   r(   r4   s      €r+   Ú	mboxsplitÚsplit.<locals>.mboxsplitg   st   øé € ÛˆDØ�‰˜x×(Ñ(Ü ¡ s¨1¨2 w£Ó0×0Ð0Ø�à�J‰J�tÖñ ö Ü™U 3 q r 7›^Ó,×,Ñ,ð ñ 1ñ -ùs!   ƒ3A;¶A7·9A;Á0A9Á1A;Á9A;c              3  ó8  >#   • S nU  H  nUR                  U5        M     T	" U5      n[        R                  " U5      nUR                  5       (       d  U" U5      v •  g SnUR	                  5        H$  nUR                  5       nX†;  a  M  U" U5      v •  M&     g 7f)Nc                óˆ   • [        5       n[        R                  " USS9nUR                  U 5        UR	                  S5        U$ )NF)Úmangle_from_r   )r1   r   Ú	GeneratorÚflattenÚseek)ÚmÚfpÚgs      r+   ÚmsgfpÚ'split.<locals>.mimesplit.<locals>.msgfps   s4   € Ü“ˆBä—’˜r°Ñ6ˆAà�I‰I�aŒLØ�G‰G�AŒJØˆIr.   )z
text/plainztext/x-diffztext/x-patch)r9   r   ÚparseÚis_multipartÚwalkÚget_content_type)
r:   r;   rK   r(   ÚcrH   Úok_typesÚpartÚctr4   s
            €r+   Ú	mimesplitÚsplit.<locals>.mimesplitr   s…   øé € ò	ó ˆDØ�J‰J�tÖñ á�#‹Jˆä�JŠJ�q‹MˆØ�~‰~×ÑÙ˜“(‹NàDˆHØŸ™ž�Ø×*Ñ*Ó,�ØÓ%ÙÙ˜D“kÔ!ò	 !ùs   ƒBBc              3  óÚ   >#   • SnU  HL  nU(       d  T" X25      (       a  T" U5      v •  / nSnU(       a  T" X25      (       d  SnUR                  U5        MN     U(       a  T" U5      v •  g g 7f©NFT©r9   )r:   r;   r)   r(   r4   r,   s       €€r+   ÚheadersplitÚsplit.<locals>.headersplit‹   sh   øé € ØˆãˆDÞ¡¨× 8Ñ 8Ù˜C“jÒ Ø�Ø�Þ¡¨× 8Ñ 8Ø �à�J‰J�tÖñ ö Ù˜“*Óð ùs   ƒA(A+c              3  ó"   >#   • T" U 5      v •  g 7f©N© )r;   r4   s    €r+   Ú	remainderÚsplit.<locals>.remainder›   s   øé € Ù�C‹jÓùs   ƒc                  ó*   • \ rS rSrS rS rS r\rSrg)Úsplit.<locals>.fiteréž   c                ó   • Xl         g r]   ©rI   ©ÚselfrI   s     r+   Ú__init__Úsplit.<locals>.fiter.__init__Ÿ   s   € Ø�Gr.   c                ó   • U $ r]   r^   ©rg   s    r+   Ú__iter__Úsplit.<locals>.fiter.__iter__¢   s   € ØˆKr.   c                óT   • U R                   R                  5       nU(       d  [        eU$ r]   )rI   ÚreadlineÚStopIteration©rg   r*   s     r+   ÚnextÚsplit.<locals>.fiter.next¥   s"   € Ø—‘× Ñ Ó"ˆAÞÜ#Ð#ØˆHr.   re   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rh   rl   rr   Ú__next__Ú__static_attributes__r^   r.   r+   Úfiterrb   ž   s   † ò	ò	ò	ð ‹r.   rz   Fs   content-typerr   r7   r?   Tó   :r   r   ó   --- )Úhasattrr9   r%   r&   Úlower)r:   r<   r@   rU   rZ   r_   rz   r)   r;   Úmimeheadersr(   r4   r,   s              @@r+   r&   r&   G   s  ù€ ò0ò)õõ 	-õ"ö2õ ÷ñ ð €HØ
€Cà"Ð#€Kä�6˜6×"Ñ"á�v“ˆãˆØ�
‰
�4ÔØ�?‰?Ð2×3Ñ3Ù˜6Ó'Ò'Ø�_‰_˜X×&Ñ&Ù˜VÓ)Ò)Ù�d×%Ñ%ØˆHØ�z‰z˜$ Ó" 1Ñ%×+Ñ+Ó-°Ó<á  Ó-Ò-ñ =ð �_‰_˜W×%Ó%¯(¨(á˜vÓ+Ò+ñ ñ" �S‹>Ðr.   ))s   Dates   date)s   Branchs   branch)s   Node IDó   nodeidc              #  ó&  #   • [         R                  " SS9u  p#[        R                  " US5      n [	        XX45      v •  UR                  5         [        R                  " U5        g! UR                  5         [        R                  " U5        f = f7f)at  extract patch from data read from fileobj.

patch can be a normal patch or contained in an email message.

return a dictionary. Standard keys are:
  - filename,
  - message,
  - user,
  - date,
  - branch,
  - node,
  - p1,
  - p2.
Any item can be missing from the dictionary. If filename is missing,
fileobj did not contain a patch. Caller must unlink filename when done.ó	   hg-patch-©ÚprefixÚwbN)r   ÚmkstempÚosÚfdopenÚ_extractÚcloseÚunlink)ÚuiÚfileobjÚfdÚtmpnameÚtmpfps        r+   Úextractr‘   Ó   sh   é € ô$ ×"Ò"¨,Ñ7�K€BÜ�IŠI�b˜$Ó€EðÜ�r GÓ3Ò3à�‰ŒÜ
�	Š	�'Õøð 	�‰ŒÜ
�	Š	�'Õüs   ‚.B±A& ¿'BÁ&(BÂBc           	     ó:
  • [         R                  " S[         R                  [         R                  -  5      n0 n[        R
                  " U5      nUS   =(       a    [        R                  " US   5      nUS   =(       a    [        R                  " US   5      US'   U(       d3  US   (       d)  SR                  S UR                  5        5       5      S-   n/ nUS   n	U	(       a/  [        R                  " U	5      =US'   n	U R                  S	U	-  5        U(       an  UR                  S
5      (       a,  UR                  S5      n
U
S:¼  a  XzS-   S  R                  5       n[         R                  " SSU5      nU R                  SU-  5        US   (       a  U R                  SUS   -  5        SnSnSnUR                  5        GHß  n[        R                   " UR#                  5       5      nU R                  SU-  5        Xü;  a  MC  [$        R&                  " [(        UR+                  SS95      nUR-                  U5      nU(       Ga6  SnSnSnU R                  SUR/                  S5      -  5        US-  n[1        5       nUS UR/                  S5       R3                  5        GH  nUR                  S5      (       a@  U(       d9  U R                  S5        SnSnUR5                  S5        UR7                  5         S nOïU(       aà  UR                  S5      (       a   USS  US'   U R                  SUS   -  5        O²UR                  S5      (       a#  UR9                  USS  R                  5       5        OyUR                  S5      (       aX  [:         HM  u  nnS U-  nUR                  U5      (       d  M#  U[=        U5      S  UU'   U R                  S!UUU   4-  5        MO     OSnOUS":X  a  SnU(       a  GMS  U(       a  GM]  UR?                  U5        UR?                  S5        GM‚     URA                  5       nU(       a>  UR?                  U5        URC                  S5      (       d  UR?                  S5        GM´  GM·  GMº  U(       a  GMÄ  U(       d  GMÎ  US#:X  d  GM×  USU-   -  nGMâ     U(       a  UR                  U5      (       d  S$X}4-  nXÕS%'   URE                  5         U(       a/  URG                  S5      US&'   U(       a  URG                  S5      US''   U(       a  X%S('   U$ ))Ns}   ^(?:Index:[ \t]|diff[ \t]-|RCS file: |retrieving revision [0-9]+(\.[0-9]+)*$|---[ \t].*?^\+\+\+[ \t]|\*\*\*[ \t].*?^---[ \t])ÚSubjectÚFroms   useró   
c              3  ót   #   • U  H.  nS R                  [        [        R                  U5      5      v •  M0     g7f)r#   N)r2   Úmapr   Ú
strtolocal©Ú.0Úhs     r+   Ú	<genexpr>Ú_extract.<locals>.<genexpr>  s,   é € ð ÚAL¸A�—
‘
œ3œx×2Ñ2°AÓ6×7Ð7Âùs   ‚68zX-Mercurial-Noder€   s   Node ID: %s
s   [PATCHó   ]r   r   s   \n[ \t]+r   s   Subject: %s
s	   From: %s
)ó
   text/plains   text/x-diffs   text/x-patchr.   s   Content-Type: %s
T)ÚdecodeFs   found patch at byte %d
r7   s   patch generated by hg export
s   # User é   s	   # Parent é	   ó   # s   # %s s   %s: %s
ó   ---rŸ   s   %s
%ss   messages   p1s   p2s   filename)$ÚreÚcompileÚ	MULTILINEÚDOTALLr   rM   Ú
headdecoder2   ÚitemsÚdebugr%   ÚfindÚlstripÚsubrO   r   ÚbytestrrP   ÚtypingÚcastÚbytesÚget_payloadÚsearchÚstartr1   Ú
splitlinesrG   Útruncater9   Úpatchheadermapr'   ÚwriteÚgetvalueÚendswithrŠ   Úpop)rŒ   r�   r�   r�   ÚdiffreÚdataÚmsgÚsubjectÚparentsÚnodeidÚpendÚ
diffs_seenrR   ÚmessagerS   Úcontent_typeÚpayloadrH   ÚhgpatchÚhgpatchheaderÚ
ignoretextÚcfpr(   ÚheaderÚkeyr„   s                             r+   r‰   r‰   î   sW  € ô �ZŠZð	%ô 	�‰”r—y‘yÑ ó€Fð €Dä
�*Š*�WÓ
€Cà�)‰n×@¤§¢°°Y±Ó!@€GØ˜‘K×@¤D§O¢O°C¸±KÓ$@€Dˆ�MÞ˜4 Ÿ=ð �J‰Jñ ØADÇÁÄóó ð ñð 	ð €GàÐ#Ñ$€FÞÜ#'§?¢?°6Ó#:Ð:ˆˆY‰˜&Ø
�‰Ð! FÑ*Ô+æØ×Ñ˜i×(Ñ(Ø—<‘< Ó%ˆDØ�q‹yØ!¨¡( *Ð-×4Ñ4Ó6�Ü—&’&˜ t¨WÓ5ˆØ
�‰Ð! GÑ+Ô,ØˆG‡}Ø
�‰�  g¡Ñ.Ô/Ø€JØ?€HØ€Gð —‘—
ˆÜ×'Ò'¨×(=Ñ(=Ó(?Ó@ˆØ
�‰Ð&¨Ñ5Ô6ØÓ'Ùô
 —+’+œe T×%5Ñ%5¸TÐ%5Ð%BÓCˆØ�M‰M˜'Ó"ˆßØˆGØ!ˆMØˆJà�H‰HÐ0°1·7±7¸1³:Ñ=Ô>Ø˜!‰OˆJÜ“*ˆCØ  !§'¡'¨!£*Ð-×8Ñ8×:�Ø—?‘?Ð#:×;Ñ;ÆGØ—H‘HÐ>Ô?Ø"�GØ$(�Mà—H‘H˜Q”KØ—L‘L”NØ"‘GÞ"Ø—‘ z×2Ñ2Ø(,¨Q¨R¨˜˜W™ØŸ™ °°g±Ñ!>Õ?ØŸ™¨×6Ñ6ØŸ™ t¨A¨B x§¡Ó'8Õ9ØŸ™¨×/Ñ/ß+9™K˜F CØ%-°Ñ%6˜FØ#Ÿ™¨v×6Ó6Ø,0´°V³°Ð,?  S¡	Ø "§¡¨¸ÀÀSÁ	Ð7JÑ)JÖ Kò	 ,:ð ).™Ø˜V“^Ø!%�Jß$‘}¯Z©ZØ—I‘I˜d”OØ—I‘I˜e×$ñ7 ;ð8 —l‘l“nˆGÞØ—‘˜GÔ$Ø×'Ñ'¨×.Ñ.Ø—K‘K ×&ò /ò ÷ ‘§¡¨L¸MÖ,IØ�u˜w‘Ñ&‹Gñk ön �w×)Ñ)¨'×2Ñ2Ø˜wÐ0Ñ0ˆØˆÑØ	‡K�K„MÞØ—k‘k !“nˆˆU‰ÞØ!Ÿ+™+ a›.ˆD�‰KæØ#ˆ[Ñà€Kr.   c                  óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)Ú	patchmetaid  a�  Patched file metadata

'op' is the performed operation within ADD, DELETE, RENAME, MODIFY
or COPY.  'path' is patched file path. 'oldpath' is set to the
origin file when 'op' is either COPY or RENAME, None otherwise. If
file mode is changed, 'mode' is a tuple (islink, isexec) where
'islink' is True if the file is a symlink and 'isexec' is True if
the file is executable. Otherwise, 'mode' is None.
c                óH   • Xl         S U l        S U l        SU l        SU l        g )Ns   MODIFYF)ÚpathÚoldpathÚmodeÚopÚbinary)rg   rÑ   s     r+   rh   Úpatchmeta.__init__o  s#   € ØŒ	ØˆŒØˆŒ	ØˆŒØˆ�r.   c                ó(   • US-  nUS-  nX#4U l         g )Ni    é@   )rÓ   )rg   rÓ   ÚislinkÚisexecs       r+   ÚsetmodeÚpatchmeta.setmodev  s   € Ø˜‘ˆØ˜‘ˆØÐ$ˆ�	r.   c                ó¸   • [        U R                  5      nU R                  Ul        U R                  Ul        U R                  Ul        U R
                  Ul        U$ r]   )rÏ   rÑ   rÒ   rÓ   rÔ   rÕ   )rg   Úothers     r+   ÚcopyÚpatchmeta.copy{  sA   € Ü˜$Ÿ)™)Ó$ˆØŸ™ˆŒØ—Y‘YˆŒ
Ø—7‘7ˆŒØ—{‘{ˆŒØˆr.   c                óv   • US:X  a  U R                   S:H  $ USU R                  =(       d    U R                  -   :H  $ )Nó	   /dev/nulló   ADDó   a/)rÔ   rÒ   rÑ   )rg   Úafiles     r+   Ú_ispatchingaÚpatchmeta._ispatchingaƒ  s6   € Ø�LÓ Ø—7‘7˜fÑ$Ð$Ø˜ §¡×!:°·±Ñ;Ñ;Ð;r.   c                óP   • US:X  a  U R                   S:H  $ USU R                  -   :H  $ )Nrâ   ó   DELETEó   b/©rÔ   rÑ   )rg   Úbfiles     r+   Ú_ispatchingbÚpatchmeta._ispatchingbˆ  s-   € Ø�LÓ Ø—7‘7˜iÑ'Ð'Ø˜ §	¡	Ñ)Ñ)Ð)r.   c                óT   • U R                  U5      =(       a    U R                  U5      $ r]   )ræ   rí   )rg   rå   rì   s      r+   Ú
ispatchingÚpatchmeta.ispatching�  s#   € Ø× Ñ  Ó'×D¨D×,=Ñ,=¸eÓ,DÐDr.   c                ó@   • SU R                   < SU R                  < S3$ )Nz<patchmeta Ú Ú>rë   rk   s    r+   Ú__repr__Úpatchmeta.__repr__�  s   � Ø&*§g¤g¨t¯y¬yÐ9Ð9r.   )rÕ   rÓ   rÒ   rÔ   rÑ   N)rt   ru   rv   rw   Ú__doc__rh   rÛ   rß   ræ   rí   rð   rõ   ry   r^   r.   r+   rÏ   rÏ   d  s+   † ñòò%ò
ò<ò
*ò
Eõ:r.   rÏ   c                óL  • Sn/ nU  GH   nUR                  S5      nUR                  S5      (       aT  [        R                  U5      nU(       a6  U(       a  UR	                  U5        UR                  S5      n[        U5      nM}  M  U(       d  Mˆ  UR                  S5      (       a  UR	                  U5        SnM³  UR                  S5      (       a  SUl        USS Ul        MÜ  UR                  S	5      (       a  US
S Ul	        Mþ  UR                  S5      (       a  SUl        US
S Ul        GM(  UR                  S5      (       a  USS Ul	        GMK  UR                  S5      (       a
  SUl        GMk  UR                  S5      (       a(  SUl        UR                  [        USS S5      5        GM©  UR                  S5      (       a!  UR                  [        USS S5      5        GMà  UR                  S5      (       d  GMù  SUl        GM     U(       a  UR	                  U5        U$ )z9extract git-style metadata about patches from <patchname>Nó   
ó   diff --git a/r$   r|   s   rename from ó   RENAMEé   s
   rename to é
   s
   copy from ó   COPYs   copy to é   s   deleted fileré   s   new file mode rã   iúÿÿÿs	   new mode ó   GIT binary patchT)Úrstripr%   ÚgitreÚmatchr9   ÚgrouprÏ   rÔ   rÒ   rÑ   rÛ   ÚintrÕ   )ÚlrÚgpÚ
gitpatchesr(   rH   Údsts         r+   Úreadgitpatchr
  ”  s½  € ð 
€BØ€JÜˆØ�{‰{˜7Ó#ˆØ�?‰?Ð+×,Ñ,Ü—‘˜DÓ!ˆAÞÞØ×%Ñ% bÔ)Ø—g‘g˜a“j�Ü˜s“^’ñ	 ÷
 ˆRØ�‰˜w×'Ñ'Ø×!Ñ! "Ô%Ø�ÙØ�‰˜×/Ñ/Ø!�”Ø! " #˜Y�–
Ø—‘ ×/Ñ/Ø˜r˜s˜)�–Ø—‘ ×/Ñ/Ø�”Ø! " #˜Y�—
Ø—‘ ×-Ñ-Ø˜q˜r˜(�—Ø—‘ ×1Ñ1Ø!�—Ø—‘Ð!2×3Ñ3Ø�”Ø—
‘
œ3˜t B C˜y¨!Ó,×-Ø—‘ ×.Ñ.Ø—
‘
œ3˜t B C˜y¨!Ó,×-Ø—‘Ð!4×5Ô5Ø �—	ñA öB 
Ø×Ñ˜"ÔàÐr.   c                  ó,   • \ rS rSrS rS rS rS rSrg)Ú
linereaderiÁ  c                ó   • Xl         / U l        g r]   )rI   Úbufrf   s     r+   rh   Úlinereader.__init__Ã  s   € ØŒØˆ�r.   c                óB   • Ub  U R                   R                  U5        g g r]   )r  r9   ©rg   r(   s     r+   ÚpushÚlinereader.pushÇ  s   € ØÑØ�H‰H�O‰O˜DÕ!ð r.   c                ó”   • U R                   (       a  U R                   S   nU R                   S	 U$ U R                  R                  5       $ ©Nr   )r  rI   ro   rq   s     r+   ro   Úlinereader.readlineË  s9   € Ø�8�8Ø—‘˜‘ˆAØ—‘˜�ØˆHØ�w‰w×ÑÓ!Ð!r.   c                ó.   • [        U R                  S5      $ r0   )Úiterro   rk   s    r+   rl   Úlinereader.__iter__Ò  s   € Ü�D—M‘M 3Ó'Ð'r.   )r  rI   N)	rt   ru   rv   rw   rh   r  ro   rl   ry   r^   r.   r+   r  r  Á  s   † òò"ò"õ(r.   r  c                  ó>   • \ rS rSrS rS rS rS rS rS r	S r
S	rg
)ÚabstractbackendiÖ  c                ó   • Xl         g r]   ©rŒ   )rg   rŒ   s     r+   rh   Úabstractbackend.__init__×  s   € Ø�r.   c                ó   • [         e)zpReturn target file data and flags as a (data, (islink,
isexec)) tuple. Data is None if file is missing/deleted.
©ÚNotImplementedError©rg   Úfnames     r+   ÚgetfileÚabstractbackend.getfileÚ  s
   € ô "Ð!r.   c                ó   • [         e)zéWrite data to target file fname and set its mode. mode is a
(islink, isexec) tuple. If data is None, the file content should
be left unchanged. If the file is modified after being copied,
copysource is set to the original file name.
r   ©rg   r#  r¾   rÓ   Ú
copysources        r+   ÚsetfileÚabstractbackend.setfileà  s
   € ô "Ð!r.   c                ó   • [         e)zUnlink target file.r   r"  s     r+   r‹   Úabstractbackend.unlinkè  s   € ä!Ð!r.   c                ó   • g)z‡Write rejected lines for fname. total is the number of hunks
which failed to apply and total the total number of hunks for this
files.
Nr^   )rg   r#  ÚfailedÚtotalr3   s        r+   ÚwriterejÚabstractbackend.writerejì  s   � r.   c                ó   • [         er]   r   r"  s     r+   ÚexistsÚabstractbackend.existsò  ó   € Ü!Ð!r.   c                ó   • [         er]   r   rk   s    r+   rŠ   Úabstractbackend.closeõ  r5  r.   r  N)rt   ru   rv   rw   rh   r$  r)  r‹   r0  r3  rŠ   ry   r^   r.   r+   r  r  Ö  s%   † òò"ò"ò"òò"õ"r.   r  c                  óF   ^ • \ rS rSrU 4S jrS rS rS rS rS r	Sr
U =r$ )	Ú	fsbackendiù  c                óZ   >• [         TU ]  U5        [        R                  " U5      U l        g r]   )Úsuperrh   Úvfsmodr   Úopener)rg   rŒ   ÚbasedirÚ	__class__s      €r+   rh   Úfsbackend.__init__ú  s    ø€ Ü‰Ñ˜ÔÜ—j’j Ó)ˆ�r.   c                óX  • U R                   R                  U5      (       a  U R                   R                  U5      S4$ Sn U R                   R                  U5      R                  S-  S:g  n U R                   R                  U5      SU44$ ! [
         a     N,f = f! [
         a     gf = f)N©TFFrØ   r   ©NN)r=  rÙ   ÚreadlinkÚlstatÚst_modeÚFileNotFoundErrorÚread)rg   r#  rÚ   s      r+   r$  Úfsbackend.getfileþ  s©   € Ø�;‰;×Ñ˜e×$Ñ$Ø—K‘K×(Ñ(¨Ó/°Ð?Ð?àˆð	Ø—[‘[×&Ñ& uÓ-×5Ñ5¸Ñ=ÀÑBˆFð	Ø—K‘K×$Ñ$ UÓ+¨e°V¨_Ð=Ð=øô !ó 	Ùð	ûô !ó 	Ùð	ús$   Á+B Á-B Â
BÂBÂ
B)Â(B)c                ó  • Uu  pVUc  U R                   R                  XU5        g U(       a  U R                   R                  X!5        g U R                   R                  X5        U(       a  U R                   R                  USS5        g g rX   )r=  ÚsetflagsÚsymlinkr¹   )rg   r#  r¾   rÓ   r(  rÙ   rÚ   s          r+   r)  Úfsbackend.setfile  sj   € Ø‰ˆØ‰<Ø�K‰K× Ñ  °Ô7ØÞØ�K‰K×Ñ Õ,à�K‰K×Ñ˜eÔ*ÞØ—‘×$Ñ$ U¨E°4Õ8ð r.   c                ór   • U R                   R                  SS5      nU R                  R                  USUS9  g )Ns   experimentals   removeemptydirsT)ÚignoremissingÚrmdir)rŒ   Ú
configboolr=  Ú
unlinkpath)rg   r#  rP  s      r+   r‹   Úfsbackend.unlink  s2   € Ø—‘×"Ñ" ?Ð4FÓGˆØ�‰×Ñ˜u°DÀÐÒFr.   c                óÆ   • US-   nU R                   R                  [        S5      X#U4-  5        U R                  US5      nUR	                  U5        UR                  5         g )Ns   .rejs7   %d out of %d hunks FAILED -- saving rejects to file %s
ó   w)rŒ   Úwarnr   r=  Ú
writelinesrŠ   )rg   r#  r.  r/  r3   rI   s         r+   r0  Úfsbackend.writerej  sX   € Ø˜‘ˆØ�‰�‰ÜÐIÓJØ˜eÐ$ñ%ô	
ð �[‰[˜ Ó%ˆØ
�‰�eÔØ
�‰�
r.   c                ó8   • U R                   R                  U5      $ r]   )r=  Úlexistsr"  s     r+   r3  Úfsbackend.exists&  s   € Ø�{‰{×"Ñ" 5Ó)Ð)r.   )r=  )rt   ru   rv   rw   rh   r$  r)  r‹   r0  r3  ry   Ú__classcell__©r?  s   @r+   r9  r9  ù  s'   ø† õ*òò
9òGò÷*ð *r.   r9  c                  óL   ^ • \ rS rSrU 4S jrS rU 4S jrU 4S jrS rSr	U =r
$ )Úworkingbackendi*  c                óš   >• [         TU ]  XR                  5        X l        X0l        [        5       U l        [        5       U l        / U l        g r]   )	r;  rh   ÚrootÚrepoÚ
similarityÚsetÚremovedÚchangedÚcopied)rg   rŒ   rb  rc  r?  s       €r+   rh   Úworkingbackend.__init__+  s7   ø€ Ü‰Ñ˜ŸY™YÔ'ØŒ	Ø$ŒÜ“uˆŒÜ“uˆŒØˆ�r.   c                óÈ   • U R                   R                  R                  U5      R                  (       d.  U R	                  U5      (       a  [        [        S5      U-  5      eg g ©Ns$   cannot patch %s: file is not tracked)rb  ÚdirstateÚ	get_entryÚany_trackedr3  ÚPatchApplicationErrorr   r"  s     r+   Ú_checkknownÚworkingbackend._checkknown3  s[   € Ø�y‰y×!Ñ!×+Ñ+¨EÓ2×>×>À4Ç;Á;Ø÷D
ñ D
ô (ÜÐ9Ó:¸UÑBóð ðD
Ð>r.   c                ó¼   >• U R                  U5        [        TU ]	  XX45        Ub  U R                  R	                  XA45        U R
                  R                  U5        g r]   )ro  r;  r)  rg  r9   rf  Úadd)rg   r#  r¾   rÓ   r(  r?  s        €r+   r)  Úworkingbackend.setfile;  sL   ø€ Ø×Ñ˜ÔÜ‰‰˜ TÔ6ØÑ!Ø�K‰K×Ñ 
Ð2Ô3Ø�‰×Ñ˜Õr.   c                ó²   >• U R                  U5        [        TU ]	  U5        U R                  R	                  U5        U R
                  R	                  U5        g r]   )ro  r;  r‹   re  rr  rf  )rg   r#  r?  s     €r+   r‹   Úworkingbackend.unlinkB  sA   ø€ Ø×Ñ˜ÔÜ‰‰�uÔØ�‰×Ñ˜ÔØ�‰×Ñ˜Õr.   c           	     óØ  • U R                   R                  R                  U R                   5         U R                   S    n[        U R                  5      nU R
                   H2  u  p4[        R                  " U R                  U R                   XU5        M4     U R                  (       ac  UR                  [        U R                  5      5        U R                   H/  nXPR                   R                  ;  d  M  UR                  U5        M1     U(       a+  [        R                  " U R                   X R                  5        [        U R                  5      sS S S 5        $ ! , (       d  f       g = fr]   )rb  rk  Úchanging_filesrd  rf  rg  r   ÚdirstatecopyrŒ   re  ÚforgetÚsortedÚdiscardÚmarktouchedrc  )rg   Úwctxrf  Úsrcr	  Úfs         r+   rŠ   Úworkingbackend.closeH  sâ   € Ø�Y‰Y×Ñ×.Ñ.¨t¯y©yÕ9Ø—9‘9˜T‘?ˆDÜ˜$Ÿ,™,Ó'ˆGØ ŸKœK‘�Ü×$Ò$ T§W¡W¨d¯i©i¸ÀCÖHñ (à�|�|Ø—‘œF 4§<¡<Ó0Ô1ØŸœ�AØ§	¡	× 2Ñ 2Õ2ð
  Ÿ™¨Ö*ñ &ö Ü×#Ò# D§I¡I¨w¿¹ÔHÜ˜$Ÿ,™,Ó'÷! :×9×9ús   °CEÃ6AEÅ
E))rf  rg  re  rb  rc  )rt   ru   rv   rw   rh   ro  r)  r‹   rŠ   ry   r\  r]  s   @r+   r_  r_  *  s!   ø† õòõ õ ÷(ð (r.   r_  c                  ó4   • \ rS rSrSS jrSS jrS rS rSrg)	Ú	filestorei\  Nc                ó~   • S U l         0 U l        SU l        Xl        U R                  c  SU l        SU l        0 U l        g )Nr   i  @ )r=  ÚfilesÚcreatedÚmaxsizeÚsizer¾   )rg   r†  s     r+   rh   Úfilestore.__init__]  s;   € ØˆŒØˆŒ
ØˆŒØŒØ�<‰<ÑØ&ˆDŒLØˆŒ	Øˆ�	r.   c                óè  • U R                   S:  d&  [        U5      U R                  -   U R                   ::  a0  X#U4U R                  U'   U =R                  [        U5      -  sl        g U R                  c/  [
        R                  " SS9n[        R                  " U5      U l        SU R                  -  nU R                  R                  Xb5        U =R                  S-  sl	        XcU4U R                  U'   g )Nr   r‚   rƒ   ó   %dr   )r†  r'   r‡  r¾   r=  r   Úmkdtempr<  r   r…  r¹   r„  )rg   r#  r¾   rÓ   rg  ra  Úfns          r+   r)  Úfilestore.setfileg  s¶   € Ø�<‰<˜!Ó¤ D£	¨D¯I©IÑ 5¸$¿,¹,ÓFØ $¨FÐ3ˆD�I‰I�eÑØ�IŠIœ˜T›Ñ"ŽIà�{‰{Ñ"Ü×'Ò'¨|Ñ<�Ü$Ÿjšj¨Ó.�”à˜Ÿ™Ñ%ˆBØ�K‰K×Ñ˜bÔ'Ø�LŠL˜AÑ�LØ!#¨6Ð 2ˆD�J‰J�uÒr.   c                óÞ   • XR                   ;   a  U R                   U   $ U R                  (       a  XR                  ;  a  gU R                  U   u  p#nU R                  R                  U5      X44$ )N)NNN)r¾   r=  r„  rH  )rg   r#  rŒ  rÓ   rg  s        r+   r$  Úfilestore.getfileu  s[   € Ø—I‘IÓØ—9‘9˜UÑ#Ð#Ø�{�{˜e¯:©:Ó5Ø#ØŸ:™: eÑ,Ñˆ�&Ø�{‰{×Ñ Ó# TÐ1Ð1r.   c                ó|   • U R                   (       a+  [        R                  " U R                   R                  5        g g r]   )r=  ÚshutilÚrmtreeÚbaserk   s    r+   rŠ   Úfilestore.close}  s$   € Ø�;�;Ü�MŠM˜$Ÿ+™+×*Ñ*Õ+ð r.   )r…  r¾   r„  r†  r=  r‡  r]   )	rt   ru   rv   rw   rh   r)  r$  rŠ   ry   r^   r.   r+   r‚  r‚  \  s   † ôô3ò2õ,r.   r‚  c                  óL   ^ • \ rS rSrU 4S jrS rS rS rS rS r	S r
S	rU =r$ )
Úrepobackendi‚  c                ó’   >• [         TU ]  U5        X l        X0l        X@l        [        5       U l        [        5       U l        0 U l        g r]   )	r;  rh   rb  ÚctxÚstorerd  rf  re  rg  )rg   rŒ   rb  r˜  r™  r?  s        €r+   rh   Úrepobackend.__init__ƒ  s8   ø€ Ü‰Ñ˜ÔØŒ	ØŒØŒ
Ü“uˆŒÜ“uˆŒØˆ�r.   c                óP   • XR                   ;  a  [        [        S5      U-  5      eg rj  )r˜  rn  r   r"  s     r+   ro  Úrepobackend._checkknownŒ  s,   € ØŸ™Ó Ü'ÜÐ9Ó:¸UÑBóð ð !r.   c                óª   •  U R                   U   nUR                  5       nUR	                  5       SU;   SU;   44$ ! [        R                   a     gf = f)NrC  ó   ló   x)r˜  r   ÚLookupErrorÚflagsr¾   )rg   r#  Úfctxr¡  s       r+   r$  Úrepobackend.getfile’  sY   € ð	Ø—8‘8˜E‘?ˆDð —
‘
“ˆØ�y‰y‹{˜T U™]¨D°E©MÐ:Ð:Ð:øô × Ñ ó 	Ùð	ús   ‚; »AÁAc                ó  • U(       a  U R                  U5        Uc  U R                  U   R                  5       nU R                  R	                  XX45        U R
                  R                  U5        U(       a  X@R                  U'   g g r]   )ro  r˜  r¾   r™  r)  rf  rr  rg  r'  s        r+   r)  Úrepobackend.setfileš  sh   € ÞØ×Ñ˜ZÔ(Ø‰<Ø—8‘8˜E‘?×'Ñ'Ó)ˆDØ�
‰
×Ñ˜5¨Ô9Ø�‰×Ñ˜ÔÞØ!+�K‰K˜Òð r.   c                ó\   • U R                  U5        U R                  R                  U5        g r]   )ro  re  rr  r"  s     r+   r‹   Úrepobackend.unlink¤  s"   € Ø×Ñ˜ÔØ�‰×Ñ˜Õr.   c                ó   • XR                   ;   $ r]   )r˜  r"  s     r+   r3  Úrepobackend.exists¨  s   € ØŸ™Ñ Ð r.   c                ó4   • U R                   U R                  -  $ r]   )rf  re  rk   s    r+   rŠ   Úrepobackend.close«  s   € Ø�|‰|˜dŸl™lÑ*Ð*r.   )rf  rg  r˜  re  rb  r™  )rt   ru   rv   rw   rh   ro  r$  r)  r‹   r3  rŠ   ry   r\  r]  s   @r+   r–  r–  ‚  s+   ø† õòò;ò,ò ò!÷+ð +r.   r–  s*   @@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@s.   (?:---|\*\*\*) (\d+)(?:,(\d+))? (?:---|\*\*\*))ó   strictó   crlfó   lfó   autoc                  óB   • \ rS rSrSS jrS rS rS rS rS r	S r
S	rg
)Ú	patchfileiµ  c                ó¬  • UR                   U l        XPl        S U l        X0l        Xl        / U l        SU l        SU l        UR                  U l	        UR                  U l        UR                  S;   U l        UR                  S:H  U l        U R                  c  UR                  U R                  5      u  pgO UR                  U R                  5      S S u  pgUGb(  U R                  S L =(       d    UR                  U R                  5      U l        SU l        U(       a  [         R"                  " U5      U l        U R                  c  Xpl	        U R                  (       a¥  U R                  S   R%                  S5      (       a  SU l        O*U R                  S   R%                  S5      (       a  SU l        US	:w  aJ  / nU R                   H2  n	U	R%                  S5      (       a  U	S S
 S-   n	UR'                  U	5        M4     X€l        O,U R                  (       a  SU l        U R                  c  SU l	        U R                  (       aU  U R
                  R)                  [+        S5      U R                  -  5        U R
                  R)                  [+        S5      5        0 U l        SU l        SU l        SU l        / U l        SU l        U R9                  S5        SU l        g )NFT)rã   rþ   rû   ré   r$   r   rù   r•   r¬  éþÿÿÿ)FFs!   unable to find '%s' for patching
sB   (use '--prefix' to apply patch relative to the current directory)
)rÑ   r#  ÚeolmodeÚeolÚbackendrŒ   r3   r3  ÚmissingrÓ   rÒ   r(  rÔ   ÚcreateÚremover$  r   Úsplitnewlinesr»   r9   rV  r   ÚhashÚdirtyÚoffsetÚskewÚrejÚfileprintedÚ	printfileÚhunks)
rg   rŒ   r  r¶  r™  r´  r¾   rÓ   Únlinesr*   s
             r+   rh   Úpatchfile.__init__¶  s3  € Ø—W‘WˆŒ
ØŒØˆŒØŒØŒØˆŒ
ØˆŒØˆŒØ—G‘GˆŒ	ØŸ*™*ˆŒØ—e‘eÐ;Ñ;ˆŒØ—e‘e˜yÑ(ˆŒØ�?‰?Ñ"Ø Ÿ™¨¯©Ó4‰JˆD�$àŸ™ t§¡Ó7¸¸Ð;‰JˆDØÒØŸ/™/¨TÐ1×O°W·^±^ÀDÇJÁJÓ5OˆDŒKØ ˆDŒLÞÜ"×0Ò0°Ó6�”
Ø�y‰yÑ Ø ”	Ø�z�zà—:‘:˜a‘=×)Ñ)¨'×2Ñ2Ø&�D•HØ—Z‘Z ‘]×+Ñ+¨E×2Ñ2Ø$�D”HØ˜iÓ'Ø�FØ!ŸZœZ˜ØŸ:™: g×.Ñ.Ø ! # 2 ¨¡˜AØŸ™ aÖ(ñ (ð "(”Jøà�{�{Ø$�”Ø�y‰yÑ Ø*�”	Ø�<�<Ø�G‰G�L‰LœÐ@ÓAÀDÇJÁJÑNÔOØ�G‰G�L‰LÜð,óôð ˆŒ	ØˆŒ
ØˆŒØˆŒ	ØˆŒØ ˆÔØ�‰�uÔØˆ�
r.   c                ó”  • U R                   S:X  a  U R                  nOU R                   S:X  a  SnOSnU R                   S:w  aP  U(       aI  US:w  aC  / nU H9  nU(       a  UR                  S5      (       a  US S U-   nUR                  U5        M;     UnU R                  R                  USR                  U5      X0R                  5        g )Nr¯  r­  rù   r•   r¬  éÿÿÿÿr.   )r´  rµ  r»   r9   r¶  r)  r2   r(  )rg   r#  r3   rÓ   rµ  Úrawlinesr*   s          r+   rW  Úpatchfile.writelinesò  s¥   € Ø�<‰<˜7Ó"Ø—(‘(‰CØ�\‰\˜WÓ$Ø‰CàˆCà�<‰<˜9Ó$®°¸³ØˆHÛ�Þ˜Ÿ™ E×*Ñ*Ø˜#˜2˜ ™�AØ—‘ Ö"ñ ð ˆEà�‰×Ñ˜U C§H¡H¨U£O°T¿?¹?ÕKr.   c                ó&  • U R                   (       a  g U(       d  U R                  R                  (       a  SU l         [        S5      U R                  -  nU(       a  U R                  R                  U5        g U R                  R                  U5        g )NTs   patching file %s
)rÀ  rŒ   Úverboser   r#  rV  Únote)rg   rV  Úss      r+   rÁ  Úpatchfile.printfile  sX   € Ø××ØÞ�4—7‘7—?—?Ø#ˆDÔÜÐ#Ó$ t§z¡zÑ1ˆÞØ�G‰G�L‰L˜�Oà�G‰G�L‰L˜�Or.   c                ó„   ^• U R                   R                  U/ 5      n[        U5      S:”  a  UR                  U4S jS9  U$ )Nr   c                ó    >• [        U T-
  5      $ r]   )Úabs)ÚxÚlinenums    €r+   Ú<lambda>Ú%patchfile.findlines.<locals>.<lambda>  s   ø€ ¤C¨¨G©Ô$4r.   )rÍ   )r»  Úgetr'   Úsort)rg   r*   rÒ  Úcands     ` r+   Ú	findlinesÚpatchfile.findlines  s8   ø€ ð
 �y‰y�}‰}˜Q Ó#ˆÜˆt‹9�q‹=à�I‰IÔ4ˆIÑ5Øˆr.   c                óÚ  • U R                   (       d  g [        R                  R                  U R                  5      nSX4-  /nU R                    HT  nUR
                   HA  nUR                  U5        USS  S:w  d  M  UR                  S[        R                  -   5        MC     MV     U R                  R                  U R                  [        U R                   5      U R                  U5        g )Ns   --- %s
+++ %s
rÆ  r•   )r¿  r‡   rÑ   Úbasenamer#  Úhunkr9   r   ÚMISSING_NEWLINE_MARKERr¶  r0  r'   rÂ  )rg   r“  r3   rÑ  r*   s        r+   Ú	write_rejÚpatchfile.write_rej  sª   € ð
 �x�xØÜ�w‰w×Ñ §
¡
Ó+ˆØ$¨ |Ñ3Ð4ˆØ—”ˆAØ—V”V�Ø—‘˜Q”Ø�R�S�6˜U•?Ø—L‘L ¬×)JÑ)JÑ!JÖKó ñ ð
 	�‰×Ñ˜dŸj™j¬#¨d¯h©h«-¸¿¹ÀUÕKr.   c           
     ó^  • UR                  5       (       dk  [        [        S5      UR                  UR                  [        UR                  5      UR                  [        UR                  5      UR                  4-  5      eU =R                  S-  sl
        U R                  (       a  U R                  R                  U5        gU R                  (       a¡  U R                  (       a�  U R                   (       a2  U R"                  R%                  [        S5      U R&                  -  5        O1U R"                  R%                  [        S5      U R&                  -  5        U R                  R                  U5        g[)        U[*        5      (       a†  U R,                  (       a&  U R.                  R1                  U R&                  5        gUR3                  U R4                  5      nX R4                  S S & U =R6                  [        U5      -  sl        SU l        gUnU R:                  S;   d!  U R:                  S	:X  a!  U R<                  (       a  UR?                  5       nURA                  SS
5      u  pEpgXPR6                  -  nUnU RB                  S:X  a¨  [D        RF                  " X@R4                  U5      (       a‚  U R,                  (       a&  U R.                  R1                  U R&                  5        gX`R4                  XU[        U5      -   & U =R6                  [        U5      [        U5      -
  -  sl        SU l        g0 U l$        [K        U R4                  5       H0  u  pšU RH                  RM                  U
/ 5      R                  U	5        M2     [O        U R"                  RQ                  SS5      S-   5       GH¢  nS GH—  nURA                  X¼5      u  pEpgXPR6                  -   U RB                  -   n[S        U[        U R4                  5      5      nU(       a  U RU                  US   SS  U5      nOU/nU GH  nU(       a(  [D        RF                  " X@R4                  U5      (       d  M3  X`R4                  X"[        U5      -   & U =R6                  [        U5      [        U5      -
  -  sl        X(-
  U l!        SU l        X(-
  U-
  nU(       aJ  [        S5      nU RW                  S5        U R"                  R%                  XñR                  US-   X¾4-  5        O8[        S5      nU R"                  RY                  XñR                  US-   U4-  5        Us  s  s  $    GMš     GM¥     U RW                  S5        U R"                  R%                  [        S5      UR                  U4-  5        U R                  R                  U5        g)Ns   bad hunk #%d %s (%d %d %d %d)r   rÆ  s-   cannot create %s: destination already exists
s   file %s already exists
Tr   )r­  r®  r¯  Fó   patchs   fuzzrB  s9   Hunk #%d succeeded at %d with fuzz %d (offset %d lines).
s,   Hunk #%d succeeded at %d (offset %d lines).
s   Hunk #%d FAILED at %d
)-ÚcompleteÚPatchParseErrorr   ÚnumberÚdescr'   ÚaÚlenaÚbÚlenbrÂ  r·  r¿  r9   r3  r¸  r(  rŒ   rV  r#  Ú
isinstanceÚbinhunkr¹  r¶  r‹   Únewr3   r½  r¼  r´  rµ  ÚgetnormalizedÚfuzzitr¾  r   Útesthunkr»  Ú	enumerateÚ
setdefaultÚrangeÚ	configintÚminrØ  rÁ  rË  )rg   r›   r*   ÚhorigÚoldÚoldstartrì  ÚnewstartÚ
orig_startrÑ  rÌ  ÚfuzzlenÚtoponlyr×  r½  r¿   s                   r+   ÚapplyÚpatchfile.apply*  s:  € Ø�z‰z�|‰|Ü!ÜÐ2Ó3Ø—8‘8˜QŸV™V¤S¨¯©£X¨q¯v©v´s¸1¿3¹3³xÀÇÁÐHñIóð ð
 	�
Š
�a‰�
à�<�<Ø�H‰H�O‰O˜AÔØà�;�;˜4Ÿ;Ÿ;Ø��Ø—‘—‘ÜÐGÓHØ—j‘jñ!õð
 —‘—‘œQÐ:Ó;¸d¿j¹jÑHÔIØ�H‰H�O‰O˜AÔØä�aœ×!Ñ!Ø�{�{Ø—‘×#Ñ# D§J¡JÔ/ð ð	 —E‘E˜$Ÿ*™*Ó%�Ø !—
‘
™1�Ø—’œs 1›vÑ%•Ø!�”
Øàˆà�L‰LÐ,Ó,Ø�|‰|˜wÓ&Ø——ð
 —‘Ó!ˆAð ()§x¡x°°5Ó'9Ñ$ˆ�sØ—K‘KÑˆØˆ
ð �9‰9˜‹>œj×1Ò1°#·z±zÀ8×LÑLØ�{�{Ø—‘×#Ñ# D§J¡JÔ/ð
 ð >A—
‘
˜8´°S³Ñ&9Ð:Ø—’œs 3›x¬#¨c«(Ñ2Ñ2•Ø!�”
Øð ˆŒ	Ü˜dŸj™jÖ)‰DˆAØ�I‰I× Ñ   BÓ'×.Ñ.¨qÖ1ñ *ô ˜TŸW™W×.Ñ.¨x¸ÓAÀAÑE×FˆGÜ(�Ø/0¯x©x¸Ó/IÑ,�˜sØ#§k¡kÑ1°D·I±IÑ=�Ü˜x¬¨T¯Z©Z«Ó9�ÞØŸ>™>¨#¨a©&°°¨*°hÓ?‘Dð %˜:�Dä�AÞ¤*×"5Ò"5°c¿:¹:Àq×"IÓ"IØ7:Ÿ
™
 1¬3¨s«8¡|Ð4ØŸš¤s¨3£x´#°c³(Ñ':Ñ:�Ø$%¡N˜œ	Ø%)˜œ
Ø!"¡°'Ñ!9˜Þ"Ü"#ð!8ó#˜Cð
 !ŸN™N¨4Ô0Ø ŸG™GŸL™LØ #§x¡x°°Q±¸Ð&HÑ Hõô #$ð!8ó#˜Cð !ŸG™GŸL™L¨·±¸!¸a¹%ÀÐ/HÑ)HÔIØ&žô/ ô )ñ GðH 	�‰�tÔØ�‰�‰”QÐ1Ó2°a·h±hÀ
Ð5KÑKÔLØ�‰�‰˜ÔØr.   c                óÐ   • U R                   (       a1  U R                  U R                  U R                  U R                  5        U R                  5         [        U R                  5      $ r]   )r¼  rW  r#  r3   rÓ   rÞ  r'   r¿  rk   s    r+   rŠ   Úpatchfile.close•  s=   € Ø�:�:Ø�O‰O˜DŸJ™J¨¯
©
°D·I±IÔ>Ø�‰ÔÜ�4—8‘8‹}Ðr.   )r¶  r(  r¸  r¼  rµ  r´  r3  rÀ  r#  r»  rÂ  r3   r·  rÓ   r½  r¿  r¹  r¾  rŒ   N)r¬  )rt   ru   rv   rw   rh   rW  rÁ  rØ  rÞ  rü  rŠ   ry   r^   r.   r+   r±  r±  µ  s*   † ô:òxLò$	ò	òLò iõVr.   r±  c                  ó,  • \ rS rSrSr\R                  " S5      r\R                  " S5      r\R                  " S5      r	\R                  " S5      r
\R                  " S5      r\R                  " S5      rS	 rS
 rS rS rS rS rS rS rS rS rSrg)rÌ   iœ  zpatch headers   diff --git a/(.*) b/(.*)$s   diff -r .* (.*)$s   (?:index|deleted file) s   (?:new file|deleted file) s'   (?:index|deleted|copy|rename|new mode) s   (?:new file|copy to|rename to)c                ó   • Xl         / U l        g r]   ©rÌ   rÂ  )rg   rÌ   s     r+   rh   Úheader.__init__¦  s   € ØŒØˆ�
r.   c                ó:   • [        S U R                   5       5      $ )Nc              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)ó   index N©r%   r™   s     r+   rœ   Ú header.binary.<locals>.<genexpr>«  s   é € Ð@²K¨q—<‘< 	×*Ð*²Kùs   ‚©ÚanyrÌ   rk   s    r+   rÕ   Úheader.binaryª  s   € ÜÑ@°D·K²KÓ@Ó@Ð@r.   c                óš  • U R                    GH5  nUR                  S5      (       a  UR                  [        S5      5          g U R                  R                  U5      (       aB  UR                  U5        U R                  5       (       a  UR                  [        S5      5          g UR                  S5      (       av  UR                  [        S5      [        U R                  5      [        U R                   Vs/ s H#  n[        UR                  UR                  5      PM%     sn5      4-  5          g UR                  U5        GM8     g s  snf )Nr  s-   this modifies a binary file (all or nothing)
s   this is a binary file
r¤   s   %d hunks, %d lines changed
)rÌ   r%   r¹   r   Ú	pretty_rer  rÕ   r'   rÂ  ÚsumÚmaxÚaddedre  )rg   rI   r›   s      r+   ÚprettyÚheader.pretty­  sí   € Ø—•ˆAØ�|‰|˜I×&Ñ&Ø—‘œÐLÓMÔNÙØ�~‰~×#Ñ# A×&Ñ&Ø—‘˜”Ø—;‘;—=‘=Ø—H‘HœQÐ9Ó:Ô;ÙØ�|‰|˜F×#Ñ#Ø—‘ÜÐ5Ó6ä˜DŸJ™J›Ü¸d¿jºjÓIºj¸œS §¡¨!¯)©)Ö4¹jÑIÓJðñôñ Ø�H‰H�Q�Kò% ùò Js   Ã7*Ec                óX   • UR                  SR                  U R                  5      5        g r0   )r¹   r2   rÌ   rf   s     r+   r¹   Úheader.writeÂ  s   € Ø
�‰�—‘˜$Ÿ+™+Ó&Õ'r.   c                óB   ^ • [        U 4S jT R                   5       5      $ )Nc              3  óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7fr]   )Úallhunks_rer  ©rš   r›   rg   s     €r+   rœ   Ú"header.allhunks.<locals>.<genexpr>Æ  s%   øé € ÐB²k°�4×#Ñ#×)Ñ)¨!×,Ð,²kùó   ƒ(+r	  rk   s   `r+   ÚallhunksÚheader.allhunksÅ  s   ø€ ÜÔB°d·k²kÓBÓBÐBr.   c                ó  • U R                   R                  U R                  S   5      nU(       a  UR                  5       u  p#X#:X  a  U/$ X#/$ U R                  R                  U R                  S   5      R                  5       $ r  )Ú
diffgit_rer  rÌ   ÚgroupsÚdiff_re)rg   r  ÚfromfileÚtofiles       r+   r„  Úheader.filesÈ  sl   € Ø—‘×%Ñ% d§k¡k°!¡nÓ5ˆÞØ$Ÿ|™|›~ÑˆHØÓ!Ø �zÐ!ØÐ%Ð%à—<‘<×%Ñ% d§k¡k°!¡nÓ5×<Ñ<Ó>Ð>r.   c                ó(   • U R                  5       S   $ )NrÆ  )r„  rk   s    r+   ÚfilenameÚheader.filenameÒ  s   € Ø�z‰z‹|˜BÑÐr.   c                óŒ   • SSR                  [        R                  " [        R                  U R	                  5       5      5      -  $ )Nz<header %s>ró   )r2   r   ÚrapplyÚfsdecoder„  rk   s    r+   rõ   Úheader.__repr__Õ  s2   € ØØ�H‰H”X—_’_¤X×%6Ñ%6¸¿
¹
»ÓEÓFñ
ð 	
r.   c                óB   ^ • [        U 4S jT R                   5       5      $ )Nc              3  óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7fr]   )Ú
newfile_rer  r  s     €r+   rœ   Ú#header.isnewfile.<locals>.<genexpr>Û  s#   øé € ÐA²[°�4—?‘?×(Ñ(¨×+Ð+²[ùr  r	  rk   s   `r+   Ú	isnewfileÚheader.isnewfileÚ  s   ø€ ÜÔA°T·[²[ÓAÓAÐAr.   c                ó¶   ^ • [        T R                  5      S:H  nT R                  5       =(       a    UnU=(       d    [        U 4S jT R                   5       5      $ )Nr$   c              3  óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7fr]   )Ú
special_rer  r  s     €r+   rœ   Ú!header.special.<locals>.<genexpr>ç  s&   øé € ð #
Ú.9¨ˆD�O‰O×!Ñ! !×$Ð$ªkùr  )r'   rÌ   r/  r
  )rg   Ú	nocontentÚemptynewfiles   `  r+   ÚspecialÚheader.specialÝ  sN   ø€ ô ˜Ÿ™Ó$¨Ñ)ˆ	Ø—~‘~Ó'×5¨IˆØ÷ 
œsô #
Ø.2¯kªkó#
ó  
ð 	
r.   r  N)rt   ru   rv   rw   r÷   r¥   r¦   r  r   r  r  r3  r-  rh   rÕ   r  r¹   r  r„  r%  rõ   r/  r7  ry   r^   r.   r+   rÌ   rÌ   œ  s”   † Ùà—’Ð8Ó9€JØ�jŠjÐ,Ó-€GØ—*’*Ð7Ó8€KØ—
’
Ð8Ó9€IØ—’ÐFÓG€JØ—’Ð=Ó>€JòòAòò*(òCò?ò ò
ò
Bõ
r.   rÌ   c                  óp   • \ rS rSrSr SS jrS rS rS rS r	S	 r
\
rS
 r\R                  S 5       rSrg)Ú
recordhunkiì  zCpatch hunk

XXX shouldn't we merge this with the other hunk class?
Nc	                óî   ^• SU4S jjn	Xl         U	" US5      u  o l        X*-   U l        X:-   U l        U	" US5      u  o°l        X@l        X`l        U R                  U R                  5      u  U l        U l	        g )NFc                ó`   >• Tb'  [        U 5      T-
  nUS:”  a  U(       a  X US  4$ X S T 4$ SU 4$ r  )r'   )r3   ÚreverseÚdeltaÚ
maxcontexts      €r+   ÚtrimcontextÚ(recordhunk.__init__.<locals>.trimcontextý  sI   ø€ ØÑ%Ü˜E›
 ZÑ/�Ø˜1“9ÞØ$¨E¨F mÐ3Ð3à$¨K¨ZÐ&8Ð8Ð8Ø�e�8ˆOr.   T)F)
rÌ   ÚbeforeÚfromlineÚtolineÚafterÚprocrÜ  Úcountchangesr  re  )rg   rÌ   rC  rD  rF  rB  rÜ  rE  r?  r@  ÚtrimedbeforeÚ_trimedafters           `   r+   rh   Úrecordhunk.__init__ò  sl   ø€ ÷	ð ŒÙ$/°¸Ó$=Ñ!ˆ”kØ Ñ/ˆŒØÑ+ˆŒÙ#.¨u°eÓ#<Ñ ˆ”jØŒ	ØŒ	Ø#'×#4Ñ#4°T·Y±YÓ#?Ñ ˆŒ
�D•Lr.   c                óX  • [        U[        5      (       d  gUR                  U R                  :H  =(       au    UR                  U R                  :H  =(       aU    U R                  UR                  :H  =(       a5    U R
                  R                  5       UR
                  R                  5       :H  $ )NF)rê  r:  rÜ  rF  rC  rÌ   r„  )rg   Úvs     r+   Ú__eq__Úrecordhunk.__eq__  sz   € Ü˜!œZ×(Ñ(Øð �V‰V�t—y‘yÑ ÷ :Ø—‘˜4Ÿ9™9Ñ$÷:à—‘ !§*¡*Ñ,÷:ð —‘×"Ñ"Ó$¨¯©¯©Ó(8Ñ8ð		
r.   c                ó°   • [        [        U R                  5      [        U R                  R	                  5       5      U R
                  U R                  45      $ r]   )r»  ÚtuplerÜ  rÌ   r„  rC  rF  rk   s    r+   Ú__hash__Úrecordhunk.__hash__  sC   € Üä�d—i‘iÓ Ü�d—k‘k×'Ñ'Ó)Ó*Ø—‘Ø—	‘	ð	ó
ð 	
r.   c                óè   • [        U Vs/ s H  o"R                  S5      (       d  M  UPM     sn5      n[        U Vs/ s H  o"R                  S5      (       d  M  UPM     sn5      nX44$ s  snf s  snf )zhunk -> (n+,n-)r"   r!   )r'   r%   )rg   rÜ  r›   rr  Úrems        r+   rG  Úrecordhunk.countchanges%  sU   € ä™dÓ9šd˜§l¡l°4×&8—1™dÑ9Ó:ˆÜ™dÓ9šd˜§l¡l°4×&8—1™dÑ9Ó:ˆØˆxˆùò :ùÚ9s   ŠA*§A*½A/ÁA/c           	     ó  • SSSS.nU R                    Vs/ s H  nSXSS    USS 4-  PM     nn[        U R                  U R                  U R                  U R
                  U R                  UU R                  5      $ s  snf )	zËreturn another recordhunk which is the reverse of the hunk

If this hunk is diff(A, B), the returned hunk is diff(B, A). To do
that, swap fromline/toline and +/- signs while keep other things
unchanged.
r!   r"   ó   \)r"   r!   rW  s   %s%sr   r   N)rÜ  r:  rÌ   rD  rC  rF  rB  rE  )rg   rH   r*   rÜ  s       r+   ÚreversehunkÚrecordhunk.reversehunk+  s€   € ð ˜t¨EÑ2ˆØ6:·i²iÓ@²i°�˜1˜q ˜V™9 a¨¨ eÐ,Ô,±iˆÐ@ÜØ�K‰KØ�K‰KØ�M‰MØ�I‰IØ�K‰KØØ�J‰Jó
ð 	
ùò As   •A=c           	     ó"  • [        U R                  5      [        U R                  5      -   nU R                  (       a&  U R                  S   [        R                  :X  a  US-  nX R
                  -   nX R                  -   nUR                  SU R                  UU R                  UU R                  =(       a    SU R                  -   4-  5        UR                  SR                  U R                  U R                  -   U R                  -   5      5        g )NrÆ  r   s   @@ -%d,%d +%d,%d @@%s
r   r.   )r'   rB  rE  r   rÝ  re  r  r¹   rC  rD  rF  r2   rÜ  )rg   rI   r>  ÚfromlenÚtolens        r+   r¹   Úrecordhunk.write>  sÉ   € Ü�D—K‘KÓ ¤3 t§z¡z£?Ñ2ˆØ�:�:˜$Ÿ*™* R™.¬J×,MÑ,MÓMØ�Q‰JˆEØŸ,™,Ñ&ˆØŸ
™
Ñ"ˆØ
�‰Ø&à—‘ØØ—‘ØØ—	‘	×0˜t d§i¡iÑ/ðñô		
ð 	�‰�—‘˜$Ÿ+™+¨¯	©	Ñ1°D·J±JÑ>Ó?Õ@r.   c                ó6   • U R                   R                  5       $ r]   )rÌ   r%  rk   s    r+   r%  Úrecordhunk.filenameR  s   € Ø�{‰{×#Ñ#Ó%Ð%r.   c                ó@   • SU R                  5       U R                  4-  $ )Ns   <hunk %r@%d>)r%  rC  rk   s    r+   rõ   Úrecordhunk.__repr__U  s   € à $§-¡-£/°4·=±=Ð!AÑAÐAr.   )	r  rE  rB  rC  rÌ   rÜ  rF  re  rD  r]   )rt   ru   rv   rw   r÷   rh   rM  rQ  rG  rX  r¹   r  r%  r   Ú	strmethodrõ   ry   r^   r.   r+   r:  r:  ì  sT   † ñð ô@ò<	
ò
òò
ò&Að$ €Fò&ð ×ÑñBó óBr.   r:  c                 ó  • [        S5      [        S5      [        S5      [        S5      S.[        S5      [        S5      [        S5      [        S	5      S.[        S
5      [        S5      [        S5      [        S5      S.S.$ )Ns   apply change %d/%d to '%s'?s   discard change %d/%d to '%s'?s   keep change %d/%d to '%s'?s   record change %d/%d to '%s'?)s   applys   discards   keepó   records   apply this change to '%s'?s   discard this change to '%s'?s   keep this change to '%s'?s   record this change to '%s'?s0  [Ynesfdaq?]$$ &Yes, apply this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Apply remaining changes to this &file$$ &Done, skip remaining changes and files$$ Apply &all changes to all remaining files$$ &Quit, applying no changes$$ &? (display help)s8  [Ynesfdaq?]$$ &Yes, discard this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Discard remaining changes to this &file$$ &Done, skip remaining changes and files$$ Discard &all changes to all remaining files$$ &Quit, discarding no changes$$ &? (display help)s-  [Ynesfdaq?]$$ &Yes, keep this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Keep remaining changes to this &file$$ &Done, skip remaining changes and files$$ Keep &all changes to all remaining files$$ &Quit, keeping all changes$$ &? (display help)s4  [Ynesfdaq?]$$ &Yes, record this change$$ &No, skip this change$$ &Edit this change manually$$ &Skip remaining changes to this file$$ Record remaining changes to this &file$$ &Done, skip remaining changes and files$$ Record &all changes to all remaining files$$ &Quit, recording no changes$$ &? (display help))ó   multipleó   singleó   helpr   r^   r.   r+   Úgetmessagesrh  Z  s¤   € ô Ð6Ó7ÜÐ:Ó;ÜÐ4Ó5ÜÐ8Ó9ñ	
ô Ð5Ó6ÜÐ9Ó:ÜÐ3Ó4ÜÐ7Ó8ñ	
ô ð	(óô ð	(óô ð	(óô ð	(óñK1
ñ?ð ?r.   c                ó‚  ^ ^^^• [        5       mTc  SmUUU 4S jn[        5       n0 nSu  pxS[        S U 5       5      p©U GH¡  nU	[        UR                  5      -  n	SnSnSR                  UR                  5      nXÕ;   a  MB  UR                  U5        Uc  UR                  T 5        UR                  5       n[        S	5      [        S
5      R                  S U 5       5      -  n[        U4S jU 5       5      (       a  Su  nnnOU" XxUS5      u  npxnU(       d  MÜ  U/XkR                  5       '   UR                  5       (       a'  XkR                  5       ==   UR                  -  ss'   GM+  [        UR                  5       GH\  u  nnUc  Uc  UR                  T 5        U
S:X  a  TS   T   UR                  5       -  nO7U	[        UR                  5      -
  U-   nTS   T   UU
UR                  5       4-  nU" XxUU5      u  npxnU(       aV  U(       a+  [        R                  " U5      nU=R                   U-  sl        UUR                  5          R#                  U5        Mà  Ub]  U HT  nUR                   HA  nU(       a  U=R                   U-  sl        UUR                  5          R#                  U5        MC     MV     GM@  UUR$                  UR&                  -
  -  nGM_     GM¤     [        UR)                  5        Vs/ s H-  o»S   R+                  5       (       d  [        U5      S:”  d  M+  UPM/     sn/ 5      0 4$ s  snf )z:Interactively filter patch chunks into applied-only chunksNrd  c           	     ó  >• SnUb  XX4$ U b  X X4$  TS   T   nTR                  SX%4-  5      nTR                  S5        US:X  aI  TR                  U5      S    H/  u  pxTR                  SU[        R                  " U5      4-  5        M1     M~  US	:X  a  Sn	GOÇUS:X  a  S
n	GO½US:X  Gai  Uc-  TR                  [        S5      5        TR                  S5        MÉ  UR                  R                  5       (       a.  TR                  [        S5      5        TR                  S5        GM  S[        S5      -   n
[        R                  " SSS9u  p¼Sn [        R                  " [        R                  " US5      5      nUR                  R                  U5        UR                  U5        UR                  SR                  U
R                  5        Vs/ s H  nSU-   S-   PM     sn5      5        UR!                  5         TR#                  5       nTR%                  SUU4-  STR'                  5       0SS9n	U	S	:w  a8  TR)                  [        S5      U	-  5         [        R*                  " U5        AGM^  [-        US5      n[/        5       nU HB  n[        R0                  " U5      nUR3                  S5      (       a  M1  UR                  U5        MD     UR!                  5         UR5                  S	5        [7        U5      n[        R*                  " U5        AS
n	OMUS:X  a  S
=p�OCUS:X  a  S=p�O9US:X  a  S
=p‘O/US :X  a  S=p‘O%US!:X  a  [8        R:                  " [        S"5      5      eW	XU4$ s  snf ! [        R*                  " U5        Af = f)#z©prompt query, and process base inputs

- y/n for the rest of file
- y/n for the rest
- ? (help)
- q (quit)

Return True/False and possibly updated skipfile and skipall.
NTrg  s   %s
(enter ? for help) %sr•   rÿ   r   s   %s - %s
r   Fr$   s    cannot edit patch for whole files!   cannot edit patch for binary filer¤   s®  
To remove '-' lines, make them ' ' lines (context).
To remove '+' lines, delete them.
Lines starting with # will be removed from the patch.

If the patch applies cleanly, the edited hunk will immediately be
added to the record list. If it does not apply cleanly, a rejects
file will be generated: you can use that when you try again. If
all lines of the hunk are removed, then the edit is aborted and
the hunk is left unchanged.
s
   hg-editor-s   .diff)r„   Úsuffixr…   r.   r£   s   %s "%s"s   HGUSERs   filterpatch)ÚenvironÚ
blockedtags    editor exited with exit code %d
Úrbó   #é   é   é   é   r¡   s	   user quit)Úpromptchoicer¹   Úextractchoicesr   r~   r   rÌ   rÕ   r   r†   r   Únativeeolwriterr‡   rˆ   r2   r¶   rŠ   Ú	geteditorÚsystemÚusernamerV  r‹   Úopenr1   Úfromnativeeolr%   rG   Ú
parsepatchr   ÚCanceledError)ÚskipfileÚskipallÚqueryr4   Ú
newpatchesÚrespsÚrrQ   ÚtÚretÚphelpÚpatchfdÚpatchfnÚ	ncpatchfpr  ÚiÚeditorÚpatchfpr(   ÚmessagesÚ	operationrŒ   s                      €€€r+   ÚpromptÚfilterpatch.<locals>.prompt¤  sT  ø€ ð ˆ
ØÑØ gÐ9Ð9ØÑØ wÐ:Ð:ØØ˜WÑ% iÑ0ˆEð —‘Ð <À¸~Ñ MÓNˆAØ�H‰H�UŒOØ�A‹vØ×-Ñ-¨eÓ4°QÔ7‘D�AØ—H‘H˜\¨Q´·²¸qÓ0AÐ,BÑBÖCñ 8áØ�a“Ø’Ø�a“Ø’Ø�a”Ø‘=Ø—H‘HœQÐBÓCÔDØ—H‘H˜U”OÙØ—<‘<×&Ñ&×(Ñ(Ø—H‘HœQÐCÓDÔEØ—H‘H˜U”OÚð ¤ð
ó"ñ �ô &.×%5Ò%5Ø(°ñ&Ñ"�ð !�	ð!"ä×,Ò,¬R¯YªY°wÀÓ-EÓF�AØ—L‘L×&Ñ& qÔ)Ø—K‘K ”NØ—G‘GØŸ™Ø8=×8HÑ8HÔ8JÓKÒ8J°1˜U Q™Y¨Ô.Ñ8JÑKóôð
 —G‘G”IàŸ\™\›^�FØŸ)™)Ø$¨°Ð'8Ñ8Ø!*¨B¯K©K«MÐ :Ø#1ð $ð �Cð
 ˜a“xØŸ™¤Ð"FÓ GÈ#Ñ MÔNØ ô —I’I˜gÔ&Û!ô # 7¨DÓ1�GÜ (£
�IÛ '˜Ü#×1Ò1°$Ó7˜Ø#Ÿ™¨t×4Ó4Ø%ŸO™O¨DÖ1ñ !(ð —M‘M”OØ—N‘N 1Ô%Ü!+¨IÓ!6�Jä—I’I˜gÔ&Ø!ð ‘Ø�a“Ø!&Ð&��hØ�a“Ø!%Ð%��hØ�a“Ø %Ð%��gØ�a“Ø $Ð$��gØ�a“Ü×)Ò)¬!¨L«/Ó:Ð:Ø˜¨:Ð5Ð5ùòQ Løô2 —I’I˜gÔ&Ù!ús.   ÅA?M+ ÇM&Ç!A4M+ É0AM+ Ê9AM+ Í&M+ Í+NrC  r   c              3  óL   #   • U  H  n[        UR                  5      v •  M     g 7fr]   )r'   rÂ  r™   s     r+   rœ   Úfilterpatch.<locals>.<genexpr>  s   é € Ð6ªg¨œ˜AŸG™GŸ˜ªgùs   ‚"$r   r.   s   examine changes to %s?s    and c              3  ó,   #   • U  H
  nS U-  v •  M     g7f)s   '%s'Nr^   ©rš   r  s     r+   rœ   r’    s   é € ð >
Ú!&˜AˆG�aŽK¢ùs   ‚c              3  óF   >#   • U  H  nTR                  U5      v •  M     g 7fr]   )Úexact)rš   r  r  s     €r+   rœ   r’     s   øé € Ð-¢u !ˆu�{‰{˜1�~ˆ~¢uùs   ƒ!)TNNrf  re  )rh  rd  r  r'   rÂ  r2   rÌ   rr  r  r„  r   Úallr%  r  rð  rß   rD  r9   re  r  Úvaluesr7  )rŒ   Úheadersr  rŽ  r�  ÚseenÚappliedr~  r  Úposr/  r›   Ú	fixoffsetÚhdrr„  r¿   rƒ  ÚnprŠ  r4   Úidxr�  ÚnewpatchÚnewhunkr�  s   ` ``                    @r+   Úfilterpatchr£  �  sã  û€ ä‹}€HàÑØˆ	÷h6ôT ‹5€DØ€GØ"Ñ€HØ”CÑ6©gÓ6Ó6ˆÜˆØŒs�1—7‘7‹|ÑˆØˆØˆ	Ø�h‰h�q—x‘xÓ ˆØ‹;ÙØ�‰�ŒØ‰?Ø�H‰H�RŒLØ—‘“	ˆÜÐ)Ó*¬Q¨x«[×-=Ñ-=ñ >
Ù!&ó>
ó .
ñ 
ˆô Ô-¡uÓ-×-Ñ-Ø-‰NˆAˆw™á'-¨hÀÀdÓ'KÑ$ˆAˆx "ÞÙØ!" ˆ—
‘
“ÑØ�:‰:�<‰<Ø—J‘J“LÓ! Q§W¡WÑ,Ó!ÚÜ! !§'¡'×*‰HˆAˆuØÑ G¡OØ—‘˜RÔ Ø˜‹zØ˜yÑ)¨)Ñ4°u·~±~Ó7GÑG‘àœC §¡›LÑ(¨1Ñ,�Ø˜{Ñ+¨IÑ6ØØØ—N‘NÓ$ð:ñ �ñ
 06Ø 3¨ó0Ñ,ˆAˆx *ö ÞÜ ŸIšI eÓ,�EØ—L’L IÑ-•LØ˜Ÿ™Ó(Ñ)×0Ñ0°Ö7ØÑ'Û *�HØ#+§>¤>˜Þ$Ø#ŸNšN¨iÑ7�NØ × 0Ñ 0Ó 2Ñ3×:Ñ:¸7ÖCó $2ô !+ð ˜UŸ]™]¨U¯[©[Ñ8Ñ8“	ô7 +ñ1 ôj 	ØŸ™Ô(ÓIÒ(�1¨a©D¯L©L¯N©N¼cÀ!»fÀq¹j�QÑ(ÑIØó	
ð 	ðð ùâIs   Ë>*L<Ì,L<c                  óD   • \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)rÜ  iO  c                óÜ   • X l         Xl        U/U l        / U l        / U l        S =U l        U l        S =U l        U l        Ub+  U(       a  U R                  U5        g U R                  U5        g g r]   )rä  rå  rÜ  ræ  rè  Ústartarç  Ústartbré  Úread_context_hunkÚread_unified_hunk)rg   rå  Únumr  Úcontexts        r+   rh   Úhunk.__init__P  sh   € ØŒØŒ	Ø�FˆŒ	ØˆŒØˆŒØ"&Ð&ˆŒ�d”iØ"&Ð&ˆŒ�d”iØ‰>ÞØ×&Ñ& rÕ*à×&Ñ& rÕ*ð	 r.   c                óš  • S n[        U R                  U R                  SS5      nU R                  Ul        U R                  Ul        U R                   Ul         U" U R                  5      Ul        U" U R                  5      Ul        U R
                  Ul        U R                  Ul        U R                  Ul        U R                  Ul        U$ )z1Return a copy with line endings normalized to LF.c                óz   • / nU  H2  nUR                  S5      (       a  US S S-   nUR                  U5        M4     U$ )Nrù   r³  r•   )r»   r9   )r3   rÃ  r(   s      r+   Ú	normalizeÚ%hunk.getnormalized.<locals>.normalizea  sC   € ØˆFÛ�Ø—=‘= ×)Ñ)Ø  ˜9 uÑ,�DØ—‘˜dÖ#ñ ð ˆMr.   N)	rÜ  rå  rä  ræ  rè  r¦  r§  rç  ré  )rg   r¯  Únhs      r+   rí  Úhunk.getnormalized^  s“   € ò	ô �$—)‘)˜TŸ[™[¨$°Ó5ˆØ—K‘KˆŒ	Ø—)‘)ˆŒØ—)‘)ˆŒÙ˜Ÿ™Ó ˆŒÙ˜Ÿ™Ó ˆŒØ—K‘KˆŒ	Ø—K‘KˆŒ	Ø—)‘)ˆŒØ—)‘)ˆŒØˆ	r.   c                óX  • [         R                  U R                  5      nU(       d!  [        [	        S5      U R
                  -  5      eUR                  5       u  U l        U l        U l	        U l
        U R                  c  SU l        O[        U R                  5      U l        U R                  c  SU l
        O[        U R                  5      U l
        [        U R                  5      U l        [        U R                  5      U l	         [        R                  " XR                  U R                  U R                  U R                  U R                   5        ['        U R                  S   5      S:X  ao  U R                  S	 U R                  S	 U R                   S	 U =R                  S-  sl        U =R                  S-  sl
        ['        U R                  S   5      S:X  a  Mo  U R)                  U5        g ! ["        R$                   a(  n[        [	        S5      U R
                  U4-  5      eS nAff = f)Nó   bad hunk #%dr   s   bad hunk #%d: %srÆ  r   )Úunidescr  rå  rã  r   rä  r  r¦  rç  r§  ré  r  r   ÚaddlinesrÜ  ræ  rè  r   Ú
ParseErrorr'   Ú_fixnewline)rg   r  rH   Úes       r+   r©  Úhunk.read_unified_hunkv  s‘  € Ü�M‰M˜$Ÿ)™)Ó$ˆÞÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐCØ9:¿¹»Ñ6ˆŒ�T”Y ¤¨T¬YØ�9‰9ÑØˆD�Iä˜DŸI™I›ˆDŒIØ�9‰9ÑØˆD�Iä˜DŸI™I›ˆDŒIÜ˜$Ÿ+™+Ó&ˆŒÜ˜$Ÿ+™+Ó&ˆŒð	MÜ×ÒØ—I‘I˜tŸy™y¨$¯)©)°T·V±V¸T¿V¹Vôô �$—)‘)˜B‘-Ó  AÓ%Ø—	‘	˜"�Ø—‘�r�
Ø—‘�r�
Ø�IŠI˜‰N�IØ�IŠI˜‰N�Iô �$—)‘)˜B‘-Ó  AÕ%ð 	×Ñ˜Õøô ×Ñó 	MÜ!¤!Ð$7Ó"8¸D¿K¹KÈÐ;KÑ"KÓLÐLûð	Mús   ÄAG- Ç-H)È#H$È$H)c                ó  • UR                  5       U l        [        R                  U R                  5      nU(       d!  [	        [        S5      U R                  -  5      eUR                  5       u  U l        n[        U R                  5      U l        Uc  U R                  n[        U5      U R                  -
  U l
        U R                  (       a  U =R                  S-  sl
        [        U R                  5       Hè  nUR                  5       nUR                  S5      (       a  UR                  U5          O°USS  nUR                  S5      (       d  UR                  S5      (       a  SU-   nO?UR                  S5      (       a  S	U-   nO#[	        [        S
5      U R                  U4-  5      eU R                  R                  U5        U R                   R                  U5        Mê     UR                  5       nUR                  S5      (       a>  U R                  S   S S nX`R                  S'   X`R                   S'   UR                  5       n[        R                  U5      nU(       d!  [	        [        S5      U R                  -  5      eUR                  5       u  U l        n[        U R"                  5      U l        Uc  U R"                  n[        U5      U R"                  -
  U l        U R"                  (       a  U =R$                  S-  sl        Sn	[        U R$                  5       GH¥  nUR                  5       nUR                  S5      (       a3  U R&                  S   S S nX`R&                  S'   X`R                   U	S-
  '   M]  U(       d  UR                  U5          GO2USS  nUR                  S5      (       d  UR                  S5      (       a  SU-   nOkUR                  S5      (       a  S	U-   nOO[)        U R&                  5      S:X  a  UR                  U5          O³[	        [        S
5      U R                  U4-  5      eU R&                  R                  U5         U	[)        U R                   5      :¼  a  Sn
OU R                   U	   n
U	S-  n	X§:X  a  GMn  U
R                  S5      (       a  MQ  U R                   R+                  U	S-
  U5        GM¨     U R                  (       d\  U R                    HL  nUR                  S5      (       d  UR                  S	5      (       d  M1  U R                  R                  U5        MN     U R&                  (       d_  U R                    HO  nUR                  S5      (       d  UR                  S	5      (       d  M1  U R&                  R                  USS  5        MQ     SU R                  U R                  U R"                  U R$                  4-  U l        U R                  U R                   S'   U R-                  U5        g )Nr´  r   r¤   r$   s   - s   ! r!   s     r   s   bad hunk #%d old text line %dó   \ rÆ  s   + r"   r   r.   s   @@ -%d,%d +%d,%d @@
)ro   rå  Úcontextdescr  rã  r   rä  r  r¦  r  rç  rò  r%   r  ræ  r9   rÜ  r§  ré  rè  r'   Úinsertr¸  )rg   r  rH   ÚaendrÑ  r*   rÌ  ÚuÚbendÚhunkir›   s              r+   r¨  Úhunk.read_context_hunk•  sŽ  € Ø—K‘K“MˆŒ	Ü×Ñ˜dŸi™iÓ(ˆÞÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐCØŸH™H›JÑˆŒ�TÜ˜$Ÿ+™+Ó&ˆŒØ‰<Ø—;‘;ˆDÜ˜“I §¡Ñ+ˆŒ	Ø�;�;Ø�IŠI˜‰N�IÜ�t—y‘yÖ!ˆAØ—‘“ˆAØ�|‰|˜F×#Ñ#à—‘˜”
ÙØ�!�"�ˆAØ�|‰|˜E×"Ñ" a§l¡l°5×&9Ñ&9Ø˜1‘H‘Ø—‘˜e×$Ñ$Ø˜1‘H‘ä%ÜÐ6Ó7¸4¿;¹;ÈÐ:JÑJóð ð �F‰F�M‰M˜!ÔØ�I‰I×Ñ˜QÖñ! "ð$ �K‰K‹MˆØ�<‰<˜×ÑØ—‘�r‘
˜3˜B�ˆAØ�F‰F�2‰JØ�I‰I�b‰MØ—‘“ˆAÜ×Ñ˜aÓ ˆÞÜ!¤! OÓ"4°t·{±{Ñ"BÓCÐCØŸH™H›JÑˆŒ�TÜ˜$Ÿ+™+Ó&ˆŒØ‰<Ø—;‘;ˆDÜ˜“I §¡Ñ+ˆŒ	Ø�;�;Ø�IŠI˜‰N�IØˆÜ�t—y‘y×!ˆAØ—‘“ˆAØ�|‰|˜F×#Ñ#ð —F‘F˜2‘J˜s �O�Ø—‘�r‘
Ø'(—	‘	˜% !™)Ñ$ÙÞà—‘˜”
ÚØ�!�"�ˆAØ�|‰|˜E×"Ñ" a§l¡l°5×&9Ñ&9Ø˜1‘H‘Ø—‘˜e×$Ñ$Ø˜1‘H‘Ü�T—V‘V“ Ó!à—‘˜”
Ùä%ÜÐ6Ó7¸4¿;¹;ÈÐ:JÑJóð ð �F‰F�M‰M˜!ÔØØœC §	¡	›NÓ*Ø‘AàŸ	™	 %Ñ(�AØ˜‘
�Ø“6ÚØ—\‘\ $×'Ñ'Ùà—I‘I×$Ñ$ U¨Q¡Y°Ô2ÚñQ "ðT �v�và—Y”Y�Ø—<‘< ×%Ñ%¨¯©°d×);Ó);Ø—F‘F—M‘M !Ö$ñ ð �v�và—Y”Y�Ø—<‘< ×%Ñ%¨¯©°d×);Ó);Ø—F‘F—M‘M ! A B %Ö(ñ ð -Ø�K‰KØ�I‰IØ�K‰KØ�I‰Ið	0
ñ 
ˆŒ	ð —y‘yˆ�	‰	�!‰Ø×Ñ˜Õr.   c                óà   • UR                  5       nUR                  S5      (       a7  [        R                  " U R                  U R
                  U R                  5        g UR                  U5        g )Nr¼  )ro   r%   r   Ú
fixnewlinerÜ  ræ  rè  r  )rg   r  r*   s      r+   r¸  Úhunk._fixnewline  sE   € Ø�K‰K‹MˆØ�<‰<˜×ÑÜ×!Ò! $§)¡)¨T¯V©V°T·V±VÕ<à�G‰G�A�Jr.   c                ó˜   • [        U R                  5      U R                  :H  =(       a"    [        U R                  5      U R                  :H  $ r]   )r'   ræ  rç  rè  ré  rk   s    r+   râ  Úhunk.complete	  s/   € Ü�4—6‘6‹{˜dŸi™iÑ'×D¬C°·±«K¸4¿9¹9Ñ,DÐDr.   c                óü  • [        U[        U5      5      nU(       aÝ  SnSn[        U R                  5      n[        US-
  5       H0  nU R                  US-      R	                  S5      (       a  US-  nM0    O   U(       dD  [        US-
  5       H2  nU R                  Xv-
  S-
     R	                  S5      (       a  US-  nM2    O   [        X65      n[        X55      nX[        U5      U-
   X%[        U5      U-
   U4$ XS4$ )Nr   r   r   )rô  r'   rÜ  rò  r%   )	rg   rö  rì  Úfuzzrû  ÚtopÚbotÚhlenrÑ  s	            r+   Ú_fuzzitÚhunk._fuzzit  sò   € ô �4œ˜S›Ó"ˆÞØˆCØˆCÜ�t—y‘y“>ˆDÜ˜4 !™8–_�à—9‘9˜Q ™UÑ#×.Ñ.¨t×4Ñ4Ø˜1‘H’Cáñ %ö Ü˜t a™xž�AØ—y‘y ¡¨a¡Ñ0×;Ñ;¸D×AÑAØ˜q™šáñ	 )ô �d“.ˆCÜ�d“.ˆCØœS ›X¨™^Ð,¨c¼¸C»À3¹Ð.GÈÐLÐLØ˜ˆ{Ðr.   c                ó
  • U R                  U R                  U R                  X5      u  p4nU R                  U-   nU R                  U-   nU R
                  (       a  US:”  a  US-  nU R                  (       a  US:”  a  US-  nX6XG4$ )Nr   r   )rÎ  ræ  rè  r¦  r§  rç  ré  )rg   rÊ  rû  rö  rì  rË  r÷  rø  s           r+   rî  Úhunk.fuzzit'  ss   € ØŸ™ T§V¡V¨T¯V©V°TÓC‰ˆ�#Ø—;‘; Ñ$ˆØ—;‘; Ñ$ˆà�9�9˜ A›Ø˜‰MˆHØ�9�9˜ A›Ø˜‰MˆHØ˜cÐ+Ð+r.   )	ræ  rè  rå  rÜ  rç  ré  rä  r¦  r§  N)rt   ru   rv   rw   rh   rí  r©  r¨  r¸  râ  rÎ  rî  ry   r^   r.   r+   rÜ  rÜ  O  s-   † ò+òò0ò>kòZòEòõ6	,r.   rÜ  c                  ó0   • \ rS rSrSrS rS rS rS rSr	g)	rë  i3  zA binary patch file.c                ó^   • S U l         SU l        S/U l        X l        U R	                  U5        g )NFs   GIT binary patch
)Útextr>  rÜ  Ú_fnameÚ_read)rg   r  r#  s      r+   rh   Úbinhunk.__init__6  s*   € ØˆŒ	ØˆŒ
Ø*Ð+ˆŒ	ØŒØ�
‰
�2�r.   c                ó   • U R                   S L$ r]   )rÔ  rk   s    r+   râ  Úbinhunk.complete=  s   € Ø�y‰y Ð$Ð$r.   c                óŠ   • U R                   (       a&  [        U R                  SR                  U5      5      /$ U R                  /$ r0   )r>  ÚapplybindeltarÔ  r2   )rg   r3   s     r+   rì  Úbinhunk.new@  s1   € Ø�:�:Ü! $§)¡)¨S¯X©X°e«_Ó=Ð>Ð>Ø—	‘	ˆ{Ðr.   c                ó.  • S n U" XR                   5      nU(       d!  [        [        S5      U R                  -  5      eUR	                  S5      (       a  [        USS  R                  5       5      nO<UR	                  S5      (       a$  [        USS  R                  5       5      nSU l        OM©  / nU" XR                   5      n[        U5      S:”  a•  US	S nUS
::  a!  US:¼  a  [        U5      [        S5      -
  S-   nO[        U5      [        S5      -
  S-   n UR                  [        R                  " USS  5      S U 5        U" XR                   5      n[        U5      S:”  a  M•  [         R"                  " SR%                  U5      5      n[        U5      U:w  a-  [        [        S5      U R                  [        U5      U4-  5      eX€l        g ! [         a<  n[        [        S5      U R                  [        R                  " U5      4-  5      eS nAff = f)Nc                óf   • U R                  5       nUR                  U5        UR                  S5      $ )Nrù   )ro   r9   r  )r  rÜ  r*   s      r+   ÚgetlineÚbinhunk._read.<locals>.getlineF  s'   € Ø—‘“ˆAØ�K‰K˜ŒNØ—8‘8˜GÓ$Ð$r.   Ts"   could not extract "%s" binary datas   literal rÿ   s   delta rs  r   r   ó   Zó   Aó   aé   s&   could not decode "%s" binary patch: %sr.   s%   "%s" length is %d bytes, should be %d)rÜ  rã  r   rÕ  r%   r  r  r>  r'   Úordr9   r   Ú	b85decodeÚ
ValueErrorr   ÚforcebytestrÚzlibÚ
decompressr2   rÔ  )	rg   r  rß  r(   r‡  Údecr*   r¹  rÔ  s	            r+   rÖ  Úbinhunk._readE  sã  € ò	%ð
 Ù˜2Ÿy™yÓ)ˆDÞÜ%ÜÐ;Ó<¸t¿{¹{ÑJóð ð �‰˜{×+Ñ+Ü˜4  ˜8Ÿ?™?Ó,Ó-�ØØ�‰˜y×)Ñ)Ü˜4  ˜8Ÿ?™?Ó,Ó-�Ø!�”
Øñ ð ˆÙ�rŸ9™9Ó%ˆÜ�$‹i˜!‹mØ�Q�q�	ˆAØ�D‹y˜Q $›YÜ˜“FœS ›YÑ&¨Ñ*‘ä˜“FœS ›YÑ&¨Ñ+�ðØ—
‘
œ4Ÿ>š>¨$¨q¨r¨(Ó3°B°QÐ7Ô8ñ ˜2Ÿy™yÓ)ˆDô �$‹i˜!�mô �Š˜sŸx™x¨›}Ó-ˆÜˆt‹9˜ÓÜ!ÜÐ:Ó;Ø—;‘;¤ D£	¨4Ð0ñ1óð ð �	øô ó Ü%ÜÐ?Ó@Ø—{‘{¤J×$;Ò$;¸AÓ$>Ð?ñ@óð ûðús   Ä+G Ç
HÇ7HÈH)rÕ  r>  rÜ  rÔ  N)
rt   ru   rv   rw   r÷   rh   râ  rì  rÖ  ry   r^   r.   r+   rë  rë  3  s   † Ùòò%òõ
)r.   rë  c                ó”   • U SS  R                  S5      nUR                  S5      nUS:  a  UR                  S5      nUS:  a  U$ US U $ )Nrq  rù   r    r   r   )r  r¬   )ÚstrrÌ  rŠ  s      r+   Úparsefilenamerï  q  sN   € àˆAˆBˆ�‰�wÓ€AØ	�‰ˆu‹€AØˆ1ƒuØ�F‰F�4‹LˆØˆq‹5ØˆHØˆRˆaˆ5€Lr.   c                ó€   • / nU  H5  n[        US5      (       a  UR                  5       nUR                  U5        M7     U$ )aï  reverse the signs in the hunks given as argument

This function operates on hunks coming out of patch.filterpatch, that is
a list of the form: [header1, hunk1, hunk2, header2...]. Example usage:

>>> rawpatch = b"""diff --git a/folder1/g b/folder1/g
... --- a/folder1/g
... +++ b/folder1/g
... @@ -1,7 +1,7 @@
... +firstline
...  c
...  1
...  2
... + 3
... -4
...  5
...  d
... +lastline"""
>>> hunks = parsepatch([rawpatch])
>>> hunkscomingfromfilterpatch = []
>>> for h in hunks:
...     hunkscomingfromfilterpatch.append(h)
...     hunkscomingfromfilterpatch.extend(h.hunks)

>>> reversedhunks = reversehunks(hunkscomingfromfilterpatch)
>>> from . import util
>>> fp = util.stringio()
>>> for c in reversedhunks:
...      c.write(fp)
>>> fp.seek(0) or None
>>> reversedpatch = fp.read()
>>> print(pycompat.sysstr(reversedpatch))
diff --git a/folder1/g b/folder1/g
--- a/folder1/g
+++ b/folder1/g
@@ -1,4 +1,3 @@
-firstline
 c
 1
 2
@@ -2,6 +1,6 @@
 c
 1
 2
- 3
+4
 5
 d
@@ -6,3 +5,2 @@
 5
 d
-lastline

rX  )r}   rX  r9   )rÂ  ÚnewhunksrQ   s      r+   Úreversehunksrò  |  s?   € ðp €HÛˆÜ�1�m×$Ñ$Ø—‘“ˆAØ�‰˜Öñ ð €Or.   c                ó`  ^•  " U4S jS5      nU" 5       n[        5       nUR                  SR                  U 5      5        UR                  S5        Sn[	        U5       H   u  pg UR
                  U   U   " X75        UnM"     AUR                  5       $ ! [         a    [        SXV4-  5      ef = f)a¨  patch -> [] of headers -> [] of hunks

If maxcontext is not None, trim context lines if necessary.

>>> rawpatch = b'''diff --git a/folder1/g b/folder1/g
... --- a/folder1/g
... +++ b/folder1/g
... @@ -1,8 +1,10 @@
...  1
...  2
... -3
...  4
...  5
...  6
... +6.1
... +6.2
...  7
...  8
... +9'''
>>> out = util.stringio()
>>> headers = parsepatch([rawpatch], maxcontext=1)
>>> for header in headers:
...     header.write(out)
...     for hunk in header.hunks:
...         hunk.write(out)
>>> print(pycompat.sysstr(out.getvalue()))
diff --git a/folder1/g b/folder1/g
--- a/folder1/g
+++ b/folder1/g
@@ -2,3 +2,2 @@
 2
-3
 4
@@ -6,2 +5,4 @@
 6
+6.1
+6.2
 7
@@ -8,1 +9,2 @@
 8
+9
c                  ó€   >• \ rS rSrSrS rS rU 4S jrS rS r	S r
S	 r\\	\\S
.\	\\\
S.\\	\S.\\S.S\
0S.rSrg)Úparsepatch.<locals>.parseriè  zpatch parsing state machinec                ót   • SU l         SU l        SU l        S U l        / U l        / U l        / U l        / U l        g )Nr   r.   )rC  rD  rF  rÌ   r«  rB  rÜ  r™  rk   s    r+   rh   Ú#parsepatch.<locals>.parser.__init__ë  s:   € ØˆDŒMØˆDŒKØˆDŒIØˆDŒKØˆDŒLØˆDŒKØˆDŒIØˆD�Lr.   c                ó~   • U R                  / 5        Uu  p#pEn[        U5      U l        [        U5      U l        X`l        g r]   )Ú
addcontextr  rC  rD  rF  )rg   ÚlimitsÚ	fromstartÚfromendÚtostartÚtoendrF  s          r+   ÚaddrangeÚ#parsepatch.<locals>.parser.addrangeõ  s5   € Ø�O‰O˜BÔØ7=Ñ4ˆI °Ü 	›NˆDŒMÜ˜g›,ˆDŒKØ�Ir.   c           
     ó
  >• U R                   (       aë  [        U R                  U R                  U R                  U R
                  U R                  U R                   UT5      nU R                  R                  R                  U5        U =R                  [        U R                  5      UR                  -   -  sl        U =R                  [        U R                  5      UR                  -   -  sl        / U l        / U l         Xl        g r]   )rÜ  r:  rÌ   rC  rD  rF  rB  rÂ  r9   r'   re  r  r«  )rg   r«  r›   r?  s      €r+   rù  Ú%parsepatch.<locals>.parser.addcontextü  s±   ø€ Ø�y�yÜØ—K‘KØ—M‘MØ—K‘KØ—I‘IØ—K‘KØ—I‘IØØó	�ð —‘×!Ñ!×(Ñ(¨Ô+Ø—’¤ T§[¡[Ó!1°A·I±IÑ!=Ñ=•Ø—’œs 4§;¡;Ó/°!·'±'Ñ9Ñ9•Ø �”Ø�”	Ø"�Lr.   c                ó¦   • U R                   (       a  U R                   U l        / U l         U R                  (       a  U R                  / 5        Xl        g r]   )r«  rB  rÜ  rù  )rg   rÜ  s     r+   ÚaddhunkÚ"parsepatch.<locals>.parser.addhunk  s3   € Ø�|�|Ø"Ÿl™l�”Ø!�”Ø�y�yØ—‘ Ô#Ø�Ir.   c                ó~   • U R                  / 5        [        U5      nU R                  R                  U5        X l        g r]   )rù  rÌ   r™  r9   )rg   rž  r›   s      r+   ÚnewfileÚ"parsepatch.<locals>.parser.newfile  s.   € Ø�O‰O˜BÔÜ�s“ˆAØ�L‰L×Ñ Ô"Ø�Kr.   c                ó   • g r]   r^   r  s     r+   ÚaddotherÚ#parsepatch.<locals>.parser.addother  s   € Ør.   c                ó<   • U R                  / 5        U R                  $ r]   )rù  r™  rk   s    r+   ÚfinishedÚ#parsepatch.<locals>.parser.finished   s   € Ø�O‰O˜BÔØ—<‘<Ðr.   )ó   contextó   fileó   hunkó   range)r  r  r  ó   other)r  r  r  )r  r  r  )r  r  r  r  r  )rB  r«  rC  rÌ   r™  rÜ  rF  rD  N)rt   ru   rv   rw   r÷   rh   rÿ  rù  r  r  r
  r  Útransitionsry   )r?  s   €r+   Úparserrõ  è  sx   ø† Ù)ò	ò	õ	#ò&	ò	ò	ò	 ð 'Ø Ø Ø"ñ	ð !Ø Ø"Ø"ñ	ð 'Ø Ø"ñð
 $.¸Ñ@Ø Ð*ñ'
‹r.   r  r.   r   r  s   unhandled transition: %s -> %s)	r1   r¹   r2   rG   Ú	scanpatchr  ÚKeyErrorrã  r  )Úoriginalchunksr?  r  ÚprI   ÚstateÚnewstater¾   s    `      r+   r|  r|  ¼  s²   ø€ ÷XP
ô P
ñd 	‹€AÜ	‹€BØ‡H�HˆS�X‰X�nÓ%Ô&Ø‡G�GˆA„Jà€EÜ# Bž-‰ˆð	Ø�M‰M˜%Ñ  Ò*¨1Ô3ð
 Šñ (ð 	Ø�:‰:‹<Ðøô ó 	Ü!Ø1°UÐ4EÑEóð ð	ús   Á$BÂB-c                ó�  • [        U 5      nSnUS:X  a  SX R                  5       -   4$ UnUS:”  ap  U R                  SU5      nUS:X  a  [        [	        S5      XQU 4-  5      eUS-  nXCS-
  :  a%  XUS-    S:X  a  US-  nXCS-
  :  a  XUS-    S:X  a  M  US-  nUS:”  a  Mp  U SU R                  5       X US R                  5       -   4$ )aj  turn a path from a patch into a path suitable for the repository

prefix, if not empty, is expected to be normalized with a / at the end.

Returns (stripped components, path in repository).

>>> pathtransform(b'a/b/c', 0, b'')
('', 'a/b/c')
>>> pathtransform(b'   a/b/c   ', 0, b'')
('', '   a/b/c')
>>> pathtransform(b'   a/b/c   ', 2, b'')
('a/b/', 'c')
>>> pathtransform(b'a/b/c', 0, b'd/e/')
('', 'd/e/a/b/c')
>>> pathtransform(b'   a//b/c   ', 2, b'd/e/')
('a//b/', 'd/e/c')
>>> pathtransform(b'a/b/c', 3, b'')
Traceback (most recent call last):
PatchApplicationError: unable to strip away 1 of 3 dirs from a/b/c
r   r.   ó   /rÆ  s*   unable to strip away %d of %d dirs from %sr   N)r'   r  r¬   rn  r   r­   )rÑ   r8   r„   ÚpathlenrŠ  Úcounts         r+   Úpathtransformr   L  sõ   € ô* �$‹i€GØ	€AØ�ƒzØ�FŸ[™[›]Ñ*Ð*Ð*Ø€EØ
�!‹)Ø�I‰I�d˜AÓˆØ�‹7Ü'ÜÐ?Ó@Ø Ð&ñ'óð ð 	
ˆQ‰ˆà˜A‘+‹o $¨1¨q©5 /°TÓ"9Ø�‰FˆAð ˜A‘+‹o $¨1¨q©5 /°TÕ"9à�‰
ˆð �!�)ð ��ˆ8�?‰?Ó˜f¨A¨B x§¡Ó'8Ñ8Ð8Ð8r.   c                ó  • US:H  nUS:H  nU=(       a%    UR                   S:H  =(       a    UR                  S:H  nU=(       a%    UR                  S:H  =(       a    UR                  S:H  n	[	        XU5      u  p«U(       + =(       a    U R                  U5      n[	        X$U5      u  pÞX¾:X  a  UnOU(       + =(       a    U R                  U5      nU(       + =(       a    U(       + =(       a    U(       + nUS UR                  S5      S-    nUS UR                  S5      S-    nU(       a@  UU:X  a:  UR                  U5      (       a$  UR                   S:X  a  UR                  S:X  a  SnSnX­:H  =(       a    UR                  U5      nS nU(       d$  U(       a  U(       a  U(       a  UnOUnO	U(       a  UnU(       d2  U(       d  U(       a  UnO!UnOU(       d  UnO[        [        S5      5      e[        U5      nU(       a	  SUl        U$ U	(       a  S	Ul        U$ )
Nrâ   r   r  r   TFs&   undefined source and destination filesrã   ré   )r¦  rç  r§  ré  r   r3  Úrfindr%   rã  r   rÏ   rÔ   )r¶  Ú
afile_origÚ
bfile_origrÜ  r8   r„   ÚnullaÚnullbr¸  r¹  Úabaserå   ÚgoodaÚbbaserì   Úgoodbr·  ÚabasedirÚbbasedirÚisbackupr#  r  s                         r+   Úmakepatchmetar.  u  sÃ  € Ø˜,Ñ&€EØ˜,Ñ&€EØ×:�t—{‘{ aÑ'×:¨D¯I©I¸©N€FØ×:�t—{‘{ aÑ'×:¨D¯I©I¸©N€FÜ  °FÓ;�L€EØŒI×/˜'Ÿ.™.¨Ó/€EÜ  °FÓ;�L€EØƒ~Ø‰à”	×3˜gŸn™n¨UÓ3ˆØŒi×4 œI×4¨f¬*€Gð Ð,�u—{‘{ 4Ó(¨1Ñ,Ð-€HØÐ,�u—{‘{ 4Ó(¨1Ñ,Ð-€HæØ˜Ó Ø×Ñ˜U×#Ñ#Ø�K‰K˜1ÓØ�I‰I˜‹NàˆØˆð
 ‰~×9 %×"2Ñ"2°5Ó"9€HØ€EÞÞ–UÞØ‘à‘ÞØˆEæÞÞØ‘à‘ÞØ‰Eä!¤!Ð$MÓ"NÓOÐOä	�5Ó	€BÞØˆŒð €Iö 
ØˆŒØ€Ir.   c              #  óÌ  ^	^
#   • [         R                  " S5      n[        U 5      m
U
4S jn[        T
R                  S5       GH  nUR                  S5      (       d  UR                  S5      (       aa  S nU" X45      nT
R	                  5       nUR                  S5      (       a  T
R	                  5       nXVU/-  nOT
R                  U5        SU4v •  M‘  UR                  S	5      (       a  S
m	SU" UU	4S j5      4v •  M¼  UR                  S5      (       a  Sm	SU" UU	4S j5      4v •  Mç  UR                  U5      nU(       a  SUR                  5       4v •  GM  SU4v •  GM     g7f)zÍlike patch.iterhunks, but yield different events

- ('file',    [header_lines + fromfile + tofile])
- ('context', [context_lines])
- ('hunk',    [hunk_lines])
- ('range',   (-start,len, +start,len, proc))
s'   @@ -(\d+),(\d+) \+(\d+),(\d+) @@\s*(.*)c                ó¬   >• U /n[        TR                  S5       H5  nU" U5      (       a  UR                  U5        M#  TR                  U5          U$    U$ )zscan lr while predicate holdsr.   )r  ro   r9   r  )Úfirstr  r3   r(   r  s       €r+   Ú	scanwhileÚscanpatch.<locals>.scanwhile½  sN   ø€ à�ˆÜ˜Ÿ™ cÖ*ˆDÙ��w‰wØ—‘˜TÖ"à—‘˜”ØØˆñ +ð ˆr.   r.   rú   s   diff -r c                óR   • U R                  S S5      nU(       + =(       d    US   S;  $ )Nr   r   )r¤   ó   diff)r&   )r(   rÌ  s     r+   Ú	notheaderÚscanpatch.<locals>.notheaderË  s)   € Ø—J‘J˜t QÓ'�Ø”u×=  !¡Ð,=Ñ =Ð=r.   r¤   r  r   )r   rW  r  c                ó&   >• U R                  T5      $ r]   r  ©r*   Úcss    €r+   rÓ  Úscanpatch.<locals>.<lambda>Ù  s   ø€ ¸¿¹ÀRÔ8Hr.   )r!   r"   )r!   r"   rW  r  c                ó&   >• U R                  T5      $ r]   r  r9  s    €r+   rÓ  r;  Ü  s   ø€ °Q·\±\À"Ô5Er.   r  r  N)	r¥   r¦   r  r  ro   r%   r  r  r  )rI   Úlines_rer2  r(   r6  rÌ   r!  r"  rH   r:  r  s            @@r+   r  r  ²  s/  ùé € ô �zŠzÐEÓF€HÜ	�B‹€Bõ	ô �R—[‘[ #×&ˆØ�?‰?Ð+×,Ñ,°·±À×0LÑ0Lò>ñ ˜tÓ/ˆFØ—{‘{“}ˆHØ×"Ñ" 6×*Ñ*ØŸ™›�Ø VÐ,Ñ,‘à—‘˜Ô!Ø˜6�/Ô!Ø�_‰_˜T×"Ñ"ØˆBØ™i¨Ô.HÓIÐIÔIØ�_‰_˜\×*Ñ*Ø$ˆBØ™9 TÔ+EÓFÐFÔFà—‘˜tÓ$ˆAÞØ §¡£
Ð*Õ*à �nÕ$ò5 'ùs   „E E$c                ó.  • Sn U R                   R                  5       nU R                   n[        U5      nUR                  U5        [        U5      nUR                  U5        U$ ! [         a&    [        U R                   R	                  5       5      n Nif = f)ao  
Git patches can emit:
- rename a to b
- change b
- copy a to c
- change c

We cannot apply this sequence as-is, the renamed 'a' could not be
found for it would have been renamed already. And we cannot copy
from 'b' instead because 'b' would have been changed already. So
we scan the git patch for copy and rename commands so we can
perform the copies ahead of time.
r   )	rI   ÚtellÚOSErrorr1   rH  r  r  r
  rG   )r  Ú	firstlinerœ  rI   Úgitlrr  s         r+   ÚscangitpatchrC  å  s}   € ð €Cð$Ø�e‰e�j‰j‹lˆØ�U‰Uˆô �r‹N€EØ	‡J�JˆyÔÜ˜eÓ$€JØ‡G�GˆC„LØÐøô ó $Ü�b—e‘e—j‘j“lÓ#Šð$ús   „&A$ Á$-BÂBc              #  óž  #   • SnSnSnSnS=pVSnSnSn	[        U 5      n
[        U
R                  S5       GHº  nX8:X  Ga  U	(       d  UR                  S5      (       d1  U	SLa  UR                  S5      (       d  UR                  S5      (       aÆ  SnU(       a)  US	   R	                  X5      (       a  UR                  5       nUR                  S5      (       a  [        X¬R                  5      nO*U	c  UR                  S5      (       a  S
n	[        X´S-   X©5      nUS-  nU(       a*  SnSXXÜ=(       a    UR                  5       =(       d    S44v •  SU4v •  GOŠUR                  S5      (       GaS  [        R                  UR                  S5      5      nU(       d  GMc  UcQ  [        X«5      nSU Vs/ s H$  oÿR                  S;   d  M  UR                  5       PM&     sn4v •  UR                  5         SUR!                  S5      -   nSUR!                  S5      -   nU(       a}  US	   R	                  X5      (       dd  UR                  5       nSSUR                  -   SUR                  -   SUR                  5       44v •  U(       a  US	   R	                  X5      (       d  Md  U(       d  [#        [%        S5      USS -  5      eS
nGO UR                  S5      (       aU  U
R                  5       nUR                  S5      (       d  U
R'                  U5        GMØ  S
nSn	[)        U5      n[)        U5      nOµUR                  S5      (       aŸ  U
R                  5       nUR                  S5      (       d  U
R'                  U5        GMC  U
R                  5       nU
R'                  U5        UR                  S5      (       d  U
R'                  U5        GMŽ  S
nS
n	[)        U5      n[)        U5      nU(       d  GM²  SnS
nUnSnGM½     U(       aL  UR                  5       nSSUR                  -   SUR                  -   SUR                  5       44v •  U(       a  MK  ggs  snf 7f)a,  Read a patch and yield the following events:
- ("file", afile, bfile, firsthunk): select a new target file.
- ("hunk", hunk): a new hunk is ready to be applied, follows a
"file" event.
- ("git", gitchanges): current diff is in git format, gitchanges
maps filenames to gitpatch records. Unique event.
r.   Nr   Fr   ó   @s   ***************r   rÆ  Tr  r  rú   rù   ó   git)rþ   rû   rä   rê   r$   s'   failed to synchronize metadata for "%s"r¤   ó   +++s   ***)r  r  ro   r%   rð   r¼   rë  rÑ   rÜ  rß   r  r  r  rC  rÔ   r=  r  rã  r   r  rï  )rI   rå   rì   r  ÚhunknumÚemitfiler  r  ÚBFILEr«  r  rÑ  r  r›   rH   rJ   Úl2Úl3s                     r+   Ú	iterhunksrM     s¼  é € ð €EØ€EØ€EØ€GØÐ€HØ€Jð €EØ€GÜ	�B‹€Bä�"—+‘+˜s×#ˆØŒ>Þ˜QŸ\™\¨$×/Ñ/Ø˜uÒ$¨¯©Ð6H×)IÑ)IØ�|‰|Ð/×0Ñ0àˆBÞ˜j¨™n×7Ñ7¸×EÑEØ—^‘^Ó%�Ø�|‰|Ð/×0Ñ0Ü˜B§¡Ó(‘à‘? q§|¡|Ð4F×'GÑ'GØ"�GÜ˜ a™K¨Ó5�Ø�q‰LˆGÞØ �Ø ¨a×1A¸¿¹»	×1IÀTÐJÐJÒJØ˜1�*ÔØ�\‰\Ð*×+Ò+Ü—‘˜AŸH™H WÓ-Ó.ˆAÞÚØÑ!ä)¨"Ó0�
ØÙ&0óÚ&0 ·D±DÐ<PÑ4P“H�A—F‘F–H¡jñð ò ð ×"Ñ"Ô$Ø˜AŸG™G A›JÑ&ˆEØ˜AŸG™G A›JÑ&ˆEÞ Z°¡^×%>Ñ%>¸u×%LÑ%LØ—^‘^Ó%�ØØ˜BŸG™G‘OØ˜BŸG™G‘OØØ—G‘G“Ið	 ð ò ö  Z°¡^×%>Ñ%>¸u×%LÓ%Lö Ü%ÜÐ@ÓAÀEÈ!È"ÀIÑMóð ð ŠGØ�\‰\˜&×!Ñ!à—‘“ˆBØ—=‘= ×(Ñ(Ø—‘˜”ÚØˆGØˆGÜ! !Ó$ˆEÜ! "Ó%‰EØ�\‰\˜&×!Ñ!à—‘“ˆBØ—=‘= ×(Ñ(Ø—‘˜”ÚØ—‘“ˆBØ�G‰G�BŒKØ—=‘=Ð!3×4Ñ4Ø—‘˜”ÚØˆGØˆGÜ! !Ó$ˆEÜ! "Ó%ˆEç‰7ØˆGØˆHØˆEØ‹GñY $ö\ Ø�^‰^ÓˆØ˜ §¡™¨°·±©¸$ÀÇÁÃ	ÐJÐJÒJ÷ Š*ùògùs-   ‚F)QÆ+QÇQÇC QÊE
QÏ'AQÑQc                ó6  • S nSnU" U 5      nXS n U" U 5      nXS n SnU[        U 5      :  Gai  [        XUS-    5      nUS-  nUS-  (       Ga  SnSnUS-  (       a  [        XUS-    5      nUS-  nUS-  (       a  U[        XUS-    5      S-  -  nUS-  nUS	-  (       a  U[        XUS-    5      S
-  -  nUS-  nUS-  (       a  U[        XUS-    5      S-  -  nUS-  nUS
-  (       a  [        XUS-    5      nUS-  nUS-  (       a  U[        XUS-    5      S-  -  nUS-  nUS-  (       a  U[        XUS-    5      S
-  -  nUS-  nUS:X  a  SnXx-   n	X1Xy -  nO)US:w  a  XV-   n	X0XY -  nXV-  nO[        [        S5      5      eU[        U 5      :  a  GMi  U$ )zWApply a binary delta hunk
The algorithm used is the algorithm from git's patch-delta.c
c                ó|   • Sn[         R                  " U 5       H  nUS-  n[        U5      S-  (       a  M  Us  $    U$ )Nr   r   é€   )r   r¯   rå  )ÚbinchunkrŠ  rQ   s      r+   Ú	deltaheadÚ applybindelta.<locals>.deltaheadl  s>   € ØˆÜ×!Ò! (Ö+ˆAØ�‰FˆAÜ˜“F˜T—M‘MØ’ñ ,ð ˆr.   r.   Nr   r   rP  r$   rÿ   rq  é   é   é    rØ   i   s   unexpected delta opcode 0)r'   rå  rn  r   )
rQ  r¾   rR  ÚoutrÌ  rŠ  Úcmdr½  r‡  Ú
offset_ends
             r+   rÛ  rÛ  g  s  € ò
ð €CÙ�(Ó€AØ˜ˆ|€HÙ�(Ó€AØ˜ˆ|€HØ	€AØ
Œc�(‹mÔ
Ü�(˜q 1™uÐ%Ó&ˆØ	ˆQ‰ˆØ��:ˆ:ØˆFØˆDØ�T�zÜ˜X¨!¨a©%Ð0Ó1�Ø�Q‘�Ø�T�zØœ#˜h¨1¨q©5Ð1Ó2°aÑ7Ñ7�Ø�Q‘�Ø�T�zØœ#˜h¨1¨q©5Ð1Ó2°bÑ8Ñ8�Ø�Q‘�Ø�T�zØœ#˜h¨1¨q©5Ð1Ó2°bÑ8Ñ8�Ø�Q‘�Ø�T�zÜ˜8¨¨A©Ð.Ó/�Ø�Q‘�Ø�T�zØœ˜H¨¨Q©Ð/Ó0°AÑ5Ñ5�Ø�Q‘�Ø�T�zØœ˜H¨¨Q©Ð/Ó0°BÑ6Ñ6�Ø�Q‘�Ø�q‹yØ�Ø™ˆJØ˜Ð*Ñ*‰CØ�A‹XØ™ˆJØ˜AÐ)Ñ)ˆCØ‰H‰Aä'¬Ð*FÓ(GÓHÐHðI Œc�(‹mÖ
ðJ €Jr.   c                ó*   • [        U U[        UUUUUS9$ )a6  Reads a patch from fp and tries to apply it.

Returns 0 for a clean patch, -1 if any rejects were found and 1 if
there was any fuzz.

If 'eolmode' is 'strict', the patch content and patched file are
read in binary mode. Otherwise, line endings are ignored when
patching then normalized according to 'eolmode'.
©r8   r„   r´  )Ú
_applydiffr±  )rŒ   rI   r¶  r™  r8   r„   r´  s          r+   Ú	applydiffr]  ¢  s)   € ô Ø
Ø
ÜØØØØØñ	ð 	r.   c                óŠ   • U(       a;  [         R                  " U R                  U R                  5       U5      nUS:w  a  US-  nU$ )Nr.   r  )r   Ú	canonpathra  Úgetcwd)rb  r„   s     r+   Ú_canonprefixra  ¸  s8   € ÞÜ×#Ò# D§I¡I¨t¯{©{«}¸fÓEˆØ�S‹=Ø�d‰NˆFØ€Mr.   c           	     ó„  ^^• [        UR                  T5      mUU4S jnSn	Sn
S n[        U5       GH¡  u  pÍUS:X  a&  U(       d  M  UR                  U5      nUS:”  a  Sn
M0  M2  US:X  Gaù  U(       a  X›R	                  5       -  n	S nUu  nnnnU(       a@  U" UR
                  5      Ul        UR                  (       a  U" UR                  5      Ul        O[        X?UUTT5      nUR                  S:X  a  UR                  UR                  5        U(       GdA  UR                  S:X  a  UR                  UR
                  5        GM  Su  nnUR                  S	;   aE  UR                  UR                  5      S S
 u  nnUc!  [        [        S5      UR                  -  5      eUR                  (       a  UR                  nUR                  S:X  a  SnU(       d  U(       ay  UR                  S;   aA  UR                  UR
                  5      (       a!  [        [        S5      UR
                  -  5      eUR                  UR
                  UUUR                  5        GM%   U" U UX4US9nGM2  US:X  aJ  U HA  nU" UR                  5      nUR                  U5      u  nnUc  M.  UR                  UUU5        MC     GM‚  [(        R*                  " [        S5      U-  5      e   U(       a  X›R	                  5       -  n	U	(       a  gU
$ ! [          a;  nU R#                  [$        R&                  " U5      S-   5        S nU	S-  n	 S nAGM	  S nAff = f)Nc                ó*   >• [        U TS-
  T5      S   $ )Nr   )r   )r  r„   r8   s    €€r+   ÚpstripÚ_applydiff.<locals>.pstripÅ  s   ø€ Ü˜Q ¨¡	¨6Ó2°1Ñ5Ð5r.   r   r  r   r  rû   ré   rC  )rû   rþ   r$   s   source file '%s' does not existrã   r.   )rã   rû   rþ   s,   cannot create %s: destination already exists)r´  r•   rF  ó   unsupported parser state: %srÆ  )ra  rb  rM  rü  rŠ   rÑ   rÒ   r.  rÔ   r‹   r$  rn  r   rÓ   r3  r)  Ú
PatchErrorrV  r   rè  r   ÚAbort)rŒ   rI   Úpatcherr¶  r™  r8   r„   r´  rd  ÚrejectsÚerrÚcurrent_filer  r˜  r…  rå   rì   Ú
first_hunkr  r¾   rÓ   ÚinstrÑ   s        ``                r+   r\  r\  À  sç  ù€ ô ˜'Ÿ,™,¨Ó/€Fö6ð €GØ
€CØ€Lä" 2Ÿ‰ˆØ�GÓÞÙØ×$Ñ$ VÓ,ˆCØ�Q‹wØ’ñ à�gÔÞØ×-Ñ-Ó/Ñ/�Ø#�Ø+1Ñ(ˆE�5˜* bÞÙ  §¡›/�”Ø—:—:Ù!'¨¯
©
Ó!3�B”Jøä"Ø E¨:°u¸fó�ð �u‰u˜	Ó!Ø—‘˜rŸz™zÔ*ßØ—5‘5˜IÓ%Ø—N‘N 2§7¡7Ô+ÚØ'‘
��dØ—5‘5Ð0Ó0Ø!&§¡¨r¯z©zÓ!:¸2¸AÐ!>‘J�D˜$Ø‘|ä3ÜÐ@ÓAÀBÇJÁJÑNóð ð —7—7ØŸ7™7�DØ—u‘u “ð  #˜Þž4Ø—u‘uÐ <Ó<ÀÇÁØŸ™÷Bñ Bô 4Üð!2óð !Ÿg™gñ	&óð ð —O‘O B§G¡G¨T°4¸¿¹ÔDÚðÙ& r¨2¨wÀwÑO“ð �f‹_Û�Ù˜bŸj™jÓ)�Ø$Ÿ_™_¨TÓ2‘
��dØ‘<ñ
 à—M‘M $¨¨dÖ3ô ô —+’+œaÐ ?Ó@À5ÑHÓIÐIñS 'öV Ø×%Ñ%Ó'Ñ'ˆæØØ€Jøô3 ó Ø—‘œ
×/Ò/°Ó5¸Ñ=Ô>Ø#�Ø˜1‘�Þûð	ús   É	K:Ë:
L?Ì/L:Ì:L?c                ó–  • Sn/ nUR                   n	U	(       a(  UR                  S[        R                  " U	5      -  5        SUSR	                  U5      U[        R                  " U5      4-  n
U R                  SU
-  5        [        R                  " U
S5      n U GH&  nUR                  5       nU R                  US-   5        UR                  S5      (       a+  [        R                  " U5      nSnUR                  U5        Mi  UR                  S	5      S
:¼  a5  SnW(       d  U R                  WS-   5        SnU R                  US-   5        M³  UR                  S5      S
:¼  a  U R                  US-   5        MÞ  UR                  S5      S
:¼  d  Mõ  W(       d  U R                  WS-   5        SnU R                  US-   5        GM)     U(       a  [        R                   " XU5        UR#                  5       nU(       a+  [%        ['        S5      [        R(                  " U5      -  5      eU$ ! U(       a  [        R                   " XU5        f f = f)zpuse <patcher> to apply <patchname> to the working directory.
returns whether patch was applied with fuzz factor.Fs   -d %ss   %s %s -p%d < %sr   s   Using external patch tool: %s
s   rbr•   s   patching file s	   with fuzzr   Ts   saving rejects to files   FAILEDs   patch command failed: %s)ra  r9   r   Ú
shellquoter2   r«   Úpopenr  rË  r%   r   Úparsepatchoutputrr  r¬   rV  r   r|  rŠ   rn  r   Úexplainexit)rŒ   rb  ri  Ú	patchnamer8   r„  rc  rÊ  ÚargsÚcwdrX  rI   r(   ÚpfÚprinted_fileÚcodes                   r+   Ú_externalpatchrz  	  sç  € ð €DØ€DØ
�)‰)€CÞ
Ø�‰�Hœx×2Ò2°3Ó7Ñ7Ô8Ø
ØØ�	‰	�$‹ØÜ×Ò˜IÓ&ð	 ñ €Cð ‡H�HÐ/°#Ñ5Ô6Ü	�Š˜˜UÓ	#€Bð9ÜˆDØ—;‘;“=ˆDØ�G‰G�D˜5‘LÔ!Ø�‰Ð0×1Ñ1Ü×*Ò*¨4Ó0�Ø$�Ø—	‘	˜"–Ø—‘˜<Ó(¨AÓ-Ø�Þ#Ø—G‘G˜B ™JÔ'Ø#'�LØ—‘˜˜u™Ö%Ø—‘Ð4Ó5¸Ó:Ø—‘˜˜u™Ö%Ø—‘˜9Ó%¨Õ*Þ#Ø—G‘G˜B ™JÔ'Ø#'�LØ—‘˜˜u™×%ñ' ö* Ü×Ò ¨ZÔ8Ø�8‰8‹:€DÞÜ#ÜÐ)Ó*¬X×-AÒ-AÀ$Ó-GÑGó
ð 	
ð €Køö Ü×Ò ¨ZÕ8ð ús   ÂC3H' Æ6H' È'!Ic           
     óž  • Uc
  [        5       nUc  U R                  SS5      nUR                  5       [        ;  a"  [        R
                  " [        S5      U-  5      eUR                  5       n[        5       n [        US5      n [        XXX4US9n	X‚:w  a  UR                  5         UR                  UR                  5       5        UR                  5         U	S:  a  [        [        S5      5      eU	S:„  $ ! [         a    Un N~f = f! X‚:w  a  UR                  5         UR                  UR                  5       5        UR                  5         f = f)Nrá  s   eols!   unsupported line endings type: %srn  r[  r   s   patch failed to apply)rd  Úconfigr~   Úeolmodesr   rh  r   r‚  rz  Ú	TypeErrorr]  rŠ   Úupdatern  )
rŒ   r¶  Úpatchobjr8   r„   r„  r´  r™  rI   r…  s
             r+   Úpatchbackendr�  P	  s  € ð �}Ü“ˆØ�Ø—)‘)˜H fÓ-ˆØ‡}�}ƒœhÓ&Ü�kŠkœ!Ð@ÓAÀGÑKÓLÐLØ�m‰m‹o€Gä‹K€EðÜ�(˜DÓ!ˆðÜØ�G¨%Èñ
ˆð ‹>Ø�H‰HŒJØ�‰�W—]‘]“_Ô%Ø�‰ŒØ
ˆQƒwÜ#¤AÐ&>Ó$?Ó@Ð@Ø�‰7€Nøô ó ØŠðûð ‹>Ø�H‰HŒJØ�‰�W—]‘]“_Ô%Ø�‰�ús   Á8C4 ÂD Ã4DÄDÄAEc           	     ó6   • [        XU5      n[        XX#XEU5      $ )zsuse builtin patch to apply <patchobj> to the working directory.
returns whether patch was applied with fuzz factor.)r_  r�  )	rŒ   rb  r€  r8   r„   r„  r´  rc  r¶  s	            r+   Úinternalpatchrƒ  n	  s!   € ô ˜R zÓ2€GÜ˜ X°fÀWÓMÐMr.   c	           	     ó6   • [        XX#5      n	[        X	XEXgU5      $ r]   )r–  r�  )
rŒ   rb  r˜  r™  r€  r8   r„   r„  r´  r¶  s
             r+   Ú	patchrepor…  ~	  s!   € ô ˜" CÓ/€GÜ˜ X°fÀWÓMÐMr.   c           
     ó†   • U R                  SS5      nUc
  [        5       nU(       a  [        XX‚X5U5      $ [        XX#XEXg5      $ )aÊ  Apply <patchname> to the working directory.

'eolmode' specifies how end of lines should be handled. It can be:
- 'strict': inputs are read in binary mode, EOLs are preserved
- 'crlf': EOLs are ignored when patching and reset to CRLF
- 'lf': EOLs are ignored when patching and reset to LF
- None: get it from user settings, default to 'strict'
'eolmode' is ignored when using an external patcher program.

Returns whether patch was applied with fuzz factor.
s   uirá  )r|  rd  rz  rƒ  )	rŒ   rb  rt  r8   r„   r„  r´  rc  ri  s	            r+   Úpatchr‡  …	  sQ   € ð* �i‰i˜˜xÓ(€GØ�}Ü“ˆÞÜØ�g¨%¸
ó
ð 	
ô Ø
�) F°7óð r.   c           
     óž  • [        XR                  5      n[        X5      n[        US5       n[	        5       n[        U5       Hì  u  p‰US:X  a¹  U	u  p«pÍU(       aV  [        UR                  US-
  U5      S   Ul        UR                  (       a"  [        UR                  US-
  U5      S   Ul        O[        XZX¼X45      nUR                  UR                  5        UR                  S:X  a  UR                  UR                  5        MÂ  MÄ  US;  d  MÌ  [        R                  " [        S5      U-  5      e   UsS S S 5        $ ! , (       d  f       g = f)Nrn  r  r   rû   )r  rF  rf  )r9  ra  ra  rz  rd  rM  r   rÑ   rÒ   r.  rr  rÔ   r   rh  r   )rŒ   rb  Ú	patchpathr8   r„   r¶  rI   rf  r  r˜  rå   rì   rm  r  s                 r+   ÚchangedfilesrŠ  ¦	  s  € Ü˜ŸI™IÓ&€GÜ˜$Ó'€FÜ	ˆi˜Ô	 "Ü“%ˆÜ& rž]‰MˆEØ˜ÓØ/5Ñ,�˜jÞÜ+¨B¯G©G°U¸Q±YÀÓGÈÑJ�B”GØ—z—zÜ%2ØŸJ™J¨°©	°6ó&àñ&˜œ
øô 'Ø¨¸5ó�Bð —‘˜BŸG™GÔ$Ø—5‘5˜IÓ%Ø—K‘K §
¡
Ö+ñ &àÐ/Õ/Ü—k’k¤!Ð$CÓ"DÀuÑ"LÓMÐMñ# +ð$ ÷) 
×	×	ús   ­CD>Ä%D>Ä>
Ec                  ó   • \ rS rSrSrg)ÚGitDiffRequirediÀ	  r^   N)rt   ru   rv   rw   ry   r^   r.   r+   rŒ  rŒ  À	  s   † Úr.   rŒ  c              #  ó‚  #   • U(       d!  U(       d  U R                   R                  5       nX   nX   n[        U UUUUUUUUU	S9
 Hu  u  pÞnnU
b  Uc   S5       eU
" UU5      nSR                  S U 5       5      nU(       a,  U(       d  [	        U5      S:”  a  SR                  U5      S-   v •  U(       d  Mq  Uv •  Mw     g7f)a=  yields diff of changes to files between two nodes, or node and
working directory.

if node1 is None, use first dirstate parent instead.
if node2 is None, compare node1 with working directory.

losedatafn(**kwarg) is a callable run when opts.upgrade=True and
every time some change cannot be represented with the current
patch format. Return False to upgrade to git patch format, True to
accept the loss or raise an exception to abort the diff. It is
called with the name of current file being diffed as 'fn'. If set
to None, patches will always be upgraded to git format when
necessary.

prefix is a filename prefix that is prepended to all filenames on
display (used for subrepos).

relroot, if not empty, must be normalized with a trailing /. Any match
patterns that fall outside it will be ignored.

copy, if not empty, should contain mappings {dst@y: src@x} of copy
information.

if copysourcematch is not None, then copy sources will be filtered by this
matcher

hunksfilterfn, if not None, should be a function taking a filectx and
hunks generator that may yield filtered hunks.
)	Úctx1Úctx2r  ÚchangesÚoptsÚ
losedatafnÚpathfnrß   ÚcopysourcematchNs-   fctx2 unexpectly None in diff hunks filteringr.   c              3  óH   #   • U  H  u  pS R                  U5      v •  M     g7f)r.   N©r2   )rš   ÚhrangeÚhliness      r+   rœ   Údiff.<locals>.<genexpr>
  s   é € ÐEºu©^¨V˜Ÿ™ ×(Ð(ºuùs   ‚ "r   r•   )rk  Úp1Ú	diffhunksr2   r'   )rb  Únode1Únode2r  r�  r‘  r’  r“  rß   r”  ÚhunksfilterfnrŽ  r�  Úfctx1Úfctx2rž  rÂ  rÔ  s                     r+   Údiffr¡  É	  sÏ   é € öT žØ—‘× Ñ Ó"ˆà‰;€DØ‰;€Dä$-ØØØØØØØØØØ'ô%Ñ ˆ�c˜5ð Ñ$ð
 Ñ!ð@à?ó@Ø!á! %¨Ó/ˆEØ�x‰xÑE¹uÓEÓEˆÞ–DœC ›H q›LØ—*‘*˜S“/ EÑ)Ò)ßˆ4ØŒJò1%ùs   ‚B0B?Â6	B?c
           
     ód  ^ ^^^^^^^^^^• Uc  [         R                  nS n
U
" 5       mU(       d  TR                  TUS9n[        U[        5      (       a
  USS u  mmmO%UR
                  UR                  UR                  smmmT(       d  T(       d	  T(       d  / $ T R                  R                  (       a  [        nO[        nTR                  5       TR                  5       4 Vs/ s H  oÌ(       d  M  U" U5      PM     snmTc:  0 mUR                  (       d  UR                  (       a  [        R                   " TTUS9mU	(       a5  TR"                  " 5        VVs0 s H  u  pÞU	" U5      (       d  M  XÞ_M     snnm[%        T5      n[%        T5      n[%        T5      nT H-  nUT;  d  M  UR'                  U5        UR)                  U5        M/     T H  nUT;  d  M  UR'                  U5        M     [+        U5      m[+        U5      m[+        U5      m[	        TR"                  " 5       5       H  u  pÞUT;  d  M  TU	 M     [,        R.                  " T [	        UU-  U-  5      5      nTR1                  5       U4TR1                  5       U4/n[,        R2                  " T U5        UUUUUUUUU U4
S jnUR                  (       a7  UR                  (       d&   U4S jn[	        U" UR5                  SS9U5      5      $ U" US5      $ s  snf s  snnf ! [6         a    U" UR5                  S	S9S5      s $ f = f)
zÞYield diff of changes to files in the form of (`header`, `hunks`) tuples
where `header` is a list of diff headers and `hunks` is an iterable of
(`hunkrange`, `hunklines`) tuples.

See diff() for the meaning of parameters.
Nc                 óF   ^^• 0 m[         R                  " 5       mUU4S jn U $ )Nc                óþ   >• UR                  U TR                  U 5      S9nU T;  a4  [        T5      S:”  a  TTR                  5       	 UR	                  5       TU '   OTR                  U 5        TR                  U 5        U$ )N)Úfilelogé   )ÚfilectxrÕ  r'   Úpopleftr¥  r¹  r9   )r  r˜  r¢  ÚcacheÚorders      €€r+   Ú
getfilectxÚ4diffhunks.<locals>.lrugetfilectx.<locals>.getfilectx.
  sg   ø€ Ø—;‘;˜q¨%¯)©)°A«,�;Ð7ˆDØ˜‹~Ü�u“: “?Ø˜eŸm™m›oÐ.ØŸ<™<›>��a’à—‘˜Q”Ø�L‰L˜ŒOØˆKr.   )ÚcollectionsÚdeque)r«  r©  rª  s    @@r+   ÚlrugetfilectxÚ diffhunks.<locals>.lrugetfilectx*
  s#   ù€ ØˆÜ×!Ò!Ó#ˆö		ð Ðr.   )r  rp  c                ó0   >
• [        T
TTTTTT	TTU UT5      $ r]   )Útrydiff)r‘  Úlosedatar  rß   rŽ  r�  r«  Úmodifiedr“  re  rb  Úrevss     €€€€€€€€€€r+   ÚdifffnÚdiffhunks.<locals>.difffn{
  s4   ø€ ÜØØØØØØØØØØØØó
ð 	
r.   c                ó6   >• T(       a  T" U S9(       d  [         eg )N)rŒ  )rŒ  )rŒ  r’  s    €r+   r³  Údiffhunks.<locals>.losedataŽ
  s   ø€ Þ!©°r×):Ü)Ð)ð *;r.   F)ÚgitT)r   ÚdefaultoptsÚstatusrê  Úlistr´  r  re  rŒ   Ú	debugflagr   r	   Únoderº  Úupgrader
   Ú
pathcopiesrª   rd  r¹  rr  rz  r   Ú
matchfilesÚrevÚprefetchfilesrß   rŒ  )rb  rŽ  r�  r  r�  r‘  r’  r“  rß   r”  r¯  Úhexfuncr¿  r	  r~  ÚmodifiedsetÚaddedsetÚ
removedsetr  ÚprefetchmatchÚ
revmatchesr¶  r³  r  r«  r´  re  rµ  s   ```   ```              @@@@@r+   r›  r›  
  s½  ÿú€ ð& �|Ü× Ñ ˆòñ" “€JæØ—+‘+˜d¨%�+Ð0ˆÜ�'œ4× Ñ Ø#*¨2¨A ;Ñ ˆ�%™ð ×ÑØ�M‰MØ�O‰Oð 	!ˆ�%˜ö žE®'Øˆ	à‡w�w××Ü‰äˆØ'+§y¡y£{°D·I±I³KÑ&@ÓIÒ&@˜dÃD‹M‰G�DŽMÑ&@ÑI€Dà�|ØˆØ�8�8�t—|—|Ü×$Ò$ T¨4°uÑ=ˆDæð *.¯ª¬ÔNª™X˜S¹È×9M“�’©ÒNˆä�h“-€KÜ�5‹z€HÜ�W“€JÛˆØ�D�=ð ×Ñ˜qÔ!Ø�L‰L˜ŽOñ ó ˆØ�D�=ð ×Ñ˜aÖ ñ	 ô
 �kÓ"€HÜ�8Ó€EÜ�ZÓ €GÜ˜Ÿš›Ö&‰ˆØ�d�?ð �S’	ñ	 'ô ×&Ò&ØŒd�; Ñ)¨JÑ6Ó7ó€Mð 
�‰‹�]Ð#Ø	�‰‹�]Ð#ð€Jô ×Ò˜$ 
Ô+÷
ö 
ð  ‡|‡|˜DŸHŸHð		5õ*ô
 ™˜tŸy™y¨U˜yÐ3°XÓ>Ó?Ð?ñ �d˜DÓ!Ð!ùòQ Jùó Oøôv ó 	5Ù˜$Ÿ)™)¨˜)Ð-¨tÓ4Ò4ð	5ús*   Ã%
LÃ3LÅLÅ1LË$L Ì L/Ì.L/c              #  óÔ  #   • U  HÞ  nUR                  S5      nUR                  5       nUR                  S5      (       a  SnO2UR                  S5      (       a  SnO[        R                  " SU-  5      e[        R                  U5       H&  nUR                  S5      (       a  US4v •  M!  XT4v •  M(     X#:w  a  U[        U5      S	 S
4v •  X!:w  d  MÌ  U[        U5      S	 S4v •  Mà     g	7f)z1yield tokens for a list of lines in a single hunkrù   r!   ó   diff.deletedr"   ó   diff.insertedó   unexpected hunk line: %sr    ó   diff.tabNó   diff.trailingwhitespacer.   )r  r%   r   ÚProgrammingErrorÚtabsplitterÚfindallr'   )Ú	hunklinesr(   Ú	chomplineÚ	striplineÚlabelÚtokens         r+   ÚdiffsinglehunkrÙ  š
  sà   é € ãˆà—K‘K Ó(ˆ	à×$Ñ$Ó&ˆ	Ø�?‰?˜4× Ñ Ø#‰EØ�_‰_˜T×"Ñ"Ø$‰Eä×(Ò(Ð)DÀtÑ)KÓLÐLÜ ×(Ñ(¨Ö3ˆEØ×Ñ ×&Ñ&Ø˜kÐ*Ô*à�nÔ$ñ	 4ð Ó!ØœS ›^Ð-Ð.Ð0JÐKÒKØÕØœ˜I›Ð(Ð)¨3Ð/Ô/ò) ùs   ‚CC(ÃC(c              #  ó�  #   • [        5       n[        5       nU  H>  nUSS S:X  a	  XSS -  nM  USS S:X  a	  X#SS -  nM'  [        R                  " SU-  5      e   U(       a  U(       d  [        U 5       Sh  v•N   g[        R                  [        U5      5      n[        R                  [        U5      5      nU Vs/ s H  ofS:X  a  UOUS-   PM     nnU Vs/ s H  ofS:X  a  UOUS-   PM     nnSR                  U5      n	SR                  U5      n
/ n/ n[        R                  " XšXxS	9nU H’  u  u  pïnnnUS
:H  n[        R                  " SR                  XNU 5      5       H  nUR                  UU45        M     [        R                  " SR                  UUU 5      5       H  nUR                  UU45        M     M”     SSU4SSU44 Hæ  u  nnnSnU H×  u  nnU(       a  UU4v •  SnUR                  S5      nU(       aL  USS nUR                  S5      (       a  USS nU[        U5      S nUR                  5       nU[        U5      S n[        R                  U5       H'  nSUSS :X  a  SnOU(       a  US-   nOUS-   nUU4v •  M)     U(       d  MÂ  W(       a  US4v •  WS4v •  SnMÙ     Mè     g GNBs  snf s  snf 7f)zEyield tokens for a list of lines in a single hunk, with inline colorsr   r   r!   Nr"   rÎ  r•   r.   )Úlines1Úlines2ó   !rÌ  rÍ  TFrÆ  ó   r    rÏ  s   .changeds
   .unchangedrÐ  )Ú	bytearrayr   rÑ  rÙ  ÚwordsplitterrÓ  r²   r2   r   Ú	allblocksrº  r9   r»   r'   r  rÒ  )rÔ  ræ  rè  r(   ÚalÚblrÌ  ÚalnÚblnÚanÚbnÚatokensÚbtokensÚblocksÚa1Úa2Úb1Úb2Úbtyperf  rØ  r„   r×  ÚtokensÚnextisnewlineÚisendoflineÚchompÚ	endoflineÚ	endspacesÚmaybetabÚcurrentlabels                                  r+   Údiffsinglehunkinlinerø  ³
  sØ  é € ô 	‹€AÜ‹€AÛˆØ��!ˆ9˜ÓØ�a�b�‰MŠAØ�!�AˆY˜$ÓØ�a�b�‰MŠAä×(Ò(Ð)DÀtÑ)KÓLÐLñ ö –AÜ! )Ó,×,Ð,Øä	×	Ñ	œe A›hÓ	'€BÜ	×	Ñ	œe A›hÓ	'€Bá35Ó
6²2¨a�U“
‰1  E¡	Ò)±2€CÐ
6Ù35Ó
6²2¨a�U“
‰1  E¡	Ò)±2€CÐ
6Ø	�‰�#‹€BØ	�‰�#‹€Bà€GØ€GÜ�_Š_˜R¨CÑ<€FÛ#)ÑÑˆ��R˜%Ø˜4‘-ˆÜ×(Ò(¨¯©°"¸°)Ó)<Ö=ˆEØ�N‰N˜G UÐ+Ö,ñ >ä×(Ò(¨¯©°"°R¸°)Ó)<Ö=ˆEØ�N‰N˜G UÐ+Ö,ó >ñ	 $*ð 
ˆ Ð(Ø	Ð Ð)ó"Ñˆ��vð ˆÛ$‰NˆG�UÞØ˜u�oÒ%Ø %�àŸ.™.¨Ó/ˆKÞØ˜c˜r˜
�Ø—>‘> %×(Ñ(Ø! # 2˜J�EØ!¤# e£* ,Ð/�	ØŸ™›�Ø!¤# e£* ,Ð/�	ä'×/Ñ/°Ö6�Ø˜H Q q˜MÓ)Ø#.‘LæØ',¨{Ñ':™à',¨}Ñ'<˜Ø Ð.Ô.ñ 7÷ ˆ{ÞØ$Ð&@ÐAÒAØ  #Ð&Ò&Ø $’ó7 %ò"ò- 	-ùò 7ùÚ
6ùs8   ‚A5KÁ7J9Á8AKÂ=J<ÃKÃKÃ/F(KÊKÊ<
Kc              /  ór  ^^#   • UR                  S5      (       a  US   R                  (       a  [        mO[        m/ SQnS/nSn/ mUU4S jnU " U0 UD6 GHW  nUR	                  S5      n[        U5      n	[        U5       GH  u  p«U(       a  UR                  S5      (       a  SnOU(       a  UR                  S5      (       d  S	nSnU(       d  U(       a  UR                  S
5      (       a  S	nUnU(       a  UnU(       a#  UnU
S-   U	:  a  US-  nTR                  U5        M¢  U" 5        Sh  v•N   UR                  5       nU H;  u  nnUR                  U5      (       d  M  UU4v •  X¿:w  a  U[        U5      S S4v •    O   US4v •  U
S-   U	:  d  GM  Sv •  GM     U" 5        Sh  v•N   GMZ     g N… N7f)z@yields 2-tuples of (output, label) based on the output of func()r‘  )
)r5  s   diff.diffline)ó   copyó   diff.extended)ó   renamerû  )s   oldrû  )s   newrû  )s   deletedrû  )s   indexrû  )s
   similarityrû  )r¤   s   diff.file_a)rG  s   diff.file_b)rE  s	   diff.hunkFc               3  óL   >#   • T(       a  T " T5       S h  v•N   / TS S & g g  N7fr]   r^   )Ú
dodiffhunkÚ
hunkbuffers   €€r+   ÚconsumehunkbufferÚ$difflabel.<locals>.consumehunkbuffer  s(   øé € ÞÙ! *Ó-×-Ð-ØˆJ‘q‰Mð Ù-ùs   ƒ$–"—$r•   rE  )r   r"   r!   rE  rW  T)r"   r!   r   NrÐ  r.   ©r•   r.   )
rÕ  Úworddiffrø  rÙ  r&   r'   rð  r%   r9   r  )Úfuncru  ÚkwÚheadprefixesÚtextprefixesÚheadr   r4   r3   Ú	linecountrŠ  r(   ÚdifflineÚprefixesÚbufferedlinerÖ  r„   r×  rþ  rÿ  s                     @@r+   Ú	difflabelr  ü
  s»  ùé € à	‡v�vˆf‡~�~˜"˜V™*×-×-Ü)‰
ä#ˆ
ò€Lð 	ð€Lð €Dð €Jöñ
 �tÐ"˜rÕ"ˆØ—‘˜EÓ"ˆÜ˜“Jˆ	Ü  ×'‰GˆAÞØ—?‘? 4×(Ñ(Ø �Døæ §¡Ø3÷!ñ !ð  �DØˆHÞžD T§_¡_°\×%BÑ%BØ�à#ˆHÞØ'�Þà#�Ø�q‘5˜9Ó$Ø  EÑ)�LØ×!Ñ! ,Ö/ñ -Ó.×.Ð.Ø ŸK™K›M�	Û%-‘M�F˜EØ ×+Ñ+¨F×3Ó3Ø(¨%Ð0Ò0ØÓ,à $¤S¨£^Ð%5Ð 6Ø :ð#ò ñ ñ &.ð   ˜+Ò%Ø�q‘5˜9Ö$Ø&Õ&ñM (ñN %Ó&×&Ó&òU #ñ6 /ñ 	'ùs0   „D)F7Ä-F3Ä.0F7Å".F7ÆF7Æ(F5Æ)F7Æ5F7c                 ó(   • [        [        /U Q70 UD6$ )zBlike diff(), but yields 2-tuples of (output, label) for ui.write())r  r¡  )ru  r  s     r+   Údiffuir  I  s   € ä”TÐ'˜DÒ' BÑ'Ð'r.   c              #  óÊ  #   • [        5       nUR                  " 5        VVs0 s H  u  pgXv_M	     nnn[        U5      [        U5      p©[        X-   U-   5       H�  nSnX»píX¹;   a=  SnX³;   a5  UR                  (       a$  X;   nXÚ;   a  XÕ;  a  SnUR	                  U5        O5SnO2Xº;   a-  SnUR                  (       a  X¸;   a  X‹   U	;   a  X8U      U:X  a  M{  XÞU4v •  Mƒ     gs  snnf 7f)a
  generates tuples (f1, f2, copyop), where f1 is the name of the file
before and f2 is the the name after. For added files, f1 will be None,
and for removed files, f2 will be None. copyop may be set to None, 'copy'
or 'rename' (the latter two only if opts.git is set).Nrü  rú  )rd  rª   rz  rº  rr  )r´  r  re  rß   r‘  ÚgoneÚkrL  ÚcopytorÇ  rÈ  r  ÚcopyopÚf1Úf2s                  r+   Ú
_filepairsr  N  sÛ   é € ô
 ‹5€Dà#Ÿzšzœ|Ô,š|‘t�qˆaŠd™|€FÑ,ä˜u›:¤s¨7£|ˆjä�HÑ$ wÑ.Ö/ˆØˆØˆBØ‹=ØˆBØ‹yØ—8—8Ø™�BØÓ'¨B«NØ!*˜ØŸ™ �à!(˜øØ‹_ØˆBØ�x�xð “KØ™	 XÓ-Ø A™Y™¨1Ó,áØ�fˆnÔò/ 0ùó	 -ùs   ‚C#¡C¯B4C#c                ó°   • U (       d  Sn [        U 5      n[        R                  " SU-  5      nUR                  U 5        [	        UR                  5       5      $ )Nr.   s   blob %d )r'   r   Úsha1r  r   Údigest)rÔ  r*   rÌ  s      r+   Ú	_gitindexr  s  sA   € ÞØˆÜˆD‹	€AÜ�Š�l QÑ&Ó'€AØ‡H�HˆT„NÜˆq�x‰x‹z‹?Ðr.   s   120000s   100755s   100644)rž  rŸ  r.   c              #  ó°  #   • U	R                   (       a  S=pÍOSnSnS nS n[        R                  " UR                  5       5      n[        R                  " UR                  5       5      nU(       d  S n[	        XEXgU	5       GHO  u  nnnSnSnSnSnSnSnU(       a2  U" UU5      nU	R
                  (       d  U
(       a  UR                  U5      nU(       a2  U" UU5      nU	R
                  (       d  U
(       a  UR                  U5      nU	R                  (       a  SnO[        S	 UU4 5       5      nU
(       ay  U	R
                  (       dh  U(       dP  UU;   dJ  U(       d  U" U5      (       d6  U" U5      (       a  U(       a"  U(       d  U(       d  U(       a  U(       a  UU:w  a  U
" U=(       d    U5        U" U=(       d    U5      nU" U=(       d    U5      n/ nU	R
                  (       Ga  UR                  S
UUUU4-  5        U(       d  UR                  S[        U   -  5        O÷U(       d  UR                  S[        U   -  5        OÔ[        U   [        U   n nUU :w  a(  UR                  SU-  5        UR                  SU -  5        Ubq  U	R                  (       a4  [        R                  " UU   UU   5      S-  n!UR                  SU!-  5        UR                  SUU4-  5        UR                  SUU4-  5        OU(       a  UR                  U" UU5      5        U(       ak  U	R
                  (       a3  U	R
                  (       aI  U	R                  (       a8  U	R                  (       d'  Ub  SnUb  Ub  UR!                  U5      (       d  SnO)SnO&Ub  UR#                  5       nUb  UR#                  5       nUUUUUU4n"UUUUUU4n#[%        U"U#UUU	5      v •  GMR     g7f)zÝgiven input data, generate a diff and yield it in blocks

If generating a diff would lose data like flags or binary data and
losedatafn is not None, it will be called.

pathfn is applied to every path in the diff output.
r.   rä   rê   c                ób   • SR                  U Vs/ s H  nSU-  PM
     sn5      nSX04-  $ s  snf )Nr   s   -r %ss
   diff %s %sr–  )r  rµ  rÃ  Úrevinfos       r+   r
  Útrydiff.<locals>.diffline›  s5   € Ø—)‘)±tÓ<²t°˜X¨œ^±tÑ<Ó=ˆØ ˜|Ñ+Ð+ùò =s   �,c                ó>   • U S L =(       d    U R                  5       S:H  $ r  )r‡  )r¢  s    r+   ÚisemptyÚtrydiff.<locals>.isemptyŸ  s   € Ø�tˆ|×/˜tŸy™y›{¨aÑ/Ð/r.   c                ó   • U $ r]   r^   )r  s    r+   rÓ  Útrydiff.<locals>.<lambda>¦  s   € ™1r.   NFc              3  óJ   #   • U  H  oc  M  UR                  5       v •  M     g 7fr]   )Úisbinaryr”  s     r+   rœ   Útrydiff.<locals>.<genexpr>»  s   é € ÐOª~¨!›˜Ÿ™Ÿ˜ª~ùs   ‚#Œ#s   diff --git %s%s %s%ss   new file mode %ss   deleted file mode %ss   old mode %ss   new mode %séd   s   similarity index %d%%s
   %s from %ss   %s to %só    s     )Únoprefixr   ÚdatestrÚdater  rº  r¡  rÔ  r
  r9   Ú_gitmodeÚshowsimilarityr   ÚscoreÚnobinaryÚindexÚcmpr¾   Údiffcontent)$rb  rµ  rŽ  r�  r´  r  re  rß   r«  r‘  r’  r“  ÚaprefixÚbprefixr
  r!  Údate1Údate2r  r  r  Úcontent1Úcontent2rŸ  r   Úflag1Úflag2rÕ   Úpath1Úpath2rÌ   Úmode1Úmode2ÚsimÚdata1Údata2s$                                       r+   r²  r²    s3  é € ð, ‡}‡}ØÐˆ�'àˆØˆò,ò0ô ×Ò˜TŸY™Y›[Ó)€EÜ×Ò˜TŸY™Y›[Ó)€EæÙˆä$ X°gÀT×J‰ˆˆB�ØˆØˆØˆØˆØˆØˆÞÙ˜r 4Ó(ˆEØ�x�xž:ØŸ
™
 2›�ÞÙ˜r 4Ó(ˆEØ�x�xž:ØŸ
™
 2›�à�9�9Ø‰FäÑO°°u©~ÓOÓOˆFæ˜dŸhŸhæð �d“
ö ™G EŸN™Nñ ˜—‘®ö žEö ž˜u¨›~á˜2Ÿ8 Ô$á�r—x˜RÓ ˆÙ�r—x˜RÓ ˆØˆØ�8�8ˆ8Ø�M‰MØ'¨7°E¸7ÀEÐ*JÑJôö Ø—‘Ð1´H¸U±OÑCÕDÞØ—‘Ð5¼À¹ÑGÕHä'¨™´¸±�u�Ø˜E“>Ø—M‘M .°5Ñ"8Ô9Ø—M‘M .°5Ñ"8Ô9ØÑ%Ø×*×*Ü%Ÿmšm¨D°©K¸¸e¹ÓEÈÑK˜ØŸ™Ð&>ÀÑ&DÔEØ—M‘M -°6¸5°/Ñ"AÔBØ—M‘M +°¸°Ñ"?Ô@øÞØ�M‰M™( 5¨$Ó/Ô0ö Ø——˜TŸXŸX¨$¯-¯-ÀÇ
Ç
ð
 Ñ Ø �ØÑ ØÑ$¨U¯Y©Y°u×-=Ñ-=Ø$‘Hà&�Høð Ñ Ø Ÿ:™:›<�ØÑ Ø Ÿ:™:›<�à�u˜e U¨H°eÐ<ˆØ�u˜e U¨H°eÐ<ˆÜ˜% ¨°¸Ó=Õ=òI Kùs   ‚OOc                óŠ  • U u  pVpxpšUu  p¼pÞnnXu;   a  [        U	5      O[        R                  nXÛ;   a  [        U5      O[        R                  nU(       a\  UR                  (       aK  UR                  (       d:  [
        R                  " XŸ5      nU(       a  UR                  SUU4-  5        SU/44nO�UR                  (       aO  UR                  S:”  a?  UnUc  UnUR                  SUSUR                   USUR                   [        U   4-  5        [
        R                  " U	U
UUUUUUS9u  nnUR                  U5        XlUU4$ )a  diffs two versions of a file.

data1 and data2 are tuples containg:

    * ctx: changeset for the file
    * fctx: file context for that file
    * path1: name of the file
    * flag: flags of the file
    * content: full content of the file (can be null in case of binary)
    * date: date of the changeset

header: the patch header
binary: whether the any of the version of file is binary or not
opts:   user passed options

It exists as a separate function so that extensions like extdiff can wrap
it and use the file content directly.
s   index %s..%sNr   s   index %s..%s %s)rÕ   r‘  )r  r   Únullhexrº  r0  r   Úb85diffr9   r1  r-  ÚunidiffÚextend)rA  rB  rÌ   rÕ   r‘  rŽ  rŸ  r<  r:  r8  r6  r�  r   r=  r;  r9  r7  Úindex1Úindex2rÔ  rÂ  ÚflagÚuheaderss                          r+   r3  r3    s3  € ð( 27Ñ.€D�˜xØ16Ñ.€D�˜x¨Ø$)£MŒY�xÔ Ô7H×7PÑ7P€FØ$)£MŒY�xÔ Ô7H×7PÑ7P€FÞ�$—(—( 4§=§=Ü�}Š}˜XÓ0ˆÞØ�M‰M˜/¨V°VÐ,<Ñ<Ô=Ø˜˜�Ð!‰à�8�8˜Ÿ
™
 Q›ØˆDØ‰|Ø�Ø�M‰MØ"à˜1˜tŸz™zÐ*Ø˜1˜tŸz™zÐ*Ü˜T‘Nðñôô  Ÿ-š-ØØØØØØØØñ	
‰ˆ�%ð 	�‰�hÔØ˜ Ð&Ð&r.   c                ó²   • Su  pp4nU  HG  u  pgp‰[        U[        R                  " U5      5      n[        X'U-   5      nX7-  nXH-  nU=(       d    U	nMI     XX4U4$ )N)r   r   r   r   F)r  r   Úcolwidth)
ÚstatsÚmaxfileÚmaxtotalÚaddtotalÚremovetotalrÕ   r  ræ  rƒ  rè  s
             r+   ÚdiffstatsumrS  H  sh   € Ø7HÑ4€G�x¨fÛ‰
ˆˆaÜ�gœx×0Ò0°Ó3Ó4ˆÜ�x Q¡Ó'ˆØ‰ˆØÑˆØ—˜1Šñ ð ˜h°VÐ;Ð;r.   c                ól  ^^^^^	• [         R                  " S5      n/ m	Su  mmmmUUUUU	4S jnSnU  GHu  nUR                  S5      (       a…  U" 5         SnSu  mmmUR                  S5      (       a&  [        R	                  U5      R                  S	5      mMe  UR                  S
5      (       a"  UR	                  U5      R                  S5      mM�  MŸ  UR                  S5      (       a  SnM¹  UR                  S5      (       a  U(       d  TS-  mMÝ  UR                  S5      (       a  U(       d  TS-  mGM  UR                  S5      (       d  UR                  S5      (       a  SmGM3  UR                  S5      (       a  USS  mGMQ  UR                  S5      (       d  GMj  TSUSS  -  -  mGMx     U" 5         T	$ )Ns   ^diff .*-r [a-z0-9]+\s(.*)$)Nr   r   Fc                 ó@   >• T(       a  TR                  TT TT45        g g r]   rY   )Úaddsr%  r&  ÚremovesÚresultss   €€€€€r+   Ú	addresultÚdiffstatdata.<locals>.addresultZ  s    ø€ ÞØ�N‰N˜H d¨G°XÐ>Õ?ð r.   Fr5  T)r   r   Frú   r$   s   diff -rr   s   @@r"   r!   r   s   Binary files   rename fromrü   s	   rename tos    => %srý   )r¥   r¦   r%   r  r´   r  )
r3   r½   rY  r)   r(   rV  r%  r&  rW  rX  s
        @@@@@r+   Údiffstatdatar[  T  s}  ü€ Ü�ZŠZÐ7Ó8€Fà€GØ(9Ñ%€Hˆd�G˜X÷@ñ @ð €HäˆØ�?‰?˜7×#Ñ#ÙŒKð ˆHØ&1Ñ#ˆD�'˜8Ø�‰Ð/×0Ñ0Ü Ÿ<™<¨Ó-×3Ñ3°AÓ6’Ø—‘ ×,Ñ,à!Ÿ=™=¨Ó.×4Ñ4°QÓ7’ñ -ð �_‰_˜U×#Ñ#ØŠHØ�_‰_˜T×"Ñ"®8Ø�A‰IŠDØ�_‰_˜T×"Ñ"®8Ø�q‰L‹GØ�_‰_Ð0×1Ñ1°T·_±_Ø÷6
ñ 6
ð ‹HØ�_‰_˜^×,Ñ,Ø˜B˜C�y‹HØ�_‰_˜\×*Ô*Ø˜	 D¨¨ IÑ-Ñ-‹Hñ3 ñ4 „KØ€Nr.   c           
     ó  ^^• / n[        U 5      n[        U5      u  nmpVn[        [        T5      5      nU(       a  US:  a  SnX-
  U-
  S-
  mTS:  a  SmUU4S jn	U Ha  u  p«pÍU(       a  SnOSX¼-   -  nSU	" U5      -  nSU	" U5      -  nUR	                  S	U
S
U[
        R                  " U
5      -
  -  UUUU4-  5        Mc     U(       a(  UR	                  [        S5      [        U5      XV4-  5        SR                  U5      $ )Nrp  rs  rý   c                ó\   >• TT::  a  U $ [        U T-  T-  [        [        U 5      5      5      $ r]   )r  r  Úbool)rŠ  Ú
graphwidthrP  s    €€r+   ÚscaleÚdiffstat.<locals>.scale�  s0   ø€ Ø�zÓ!ØˆHô �1�z‘> XÑ-¬s´4¸³7«|Ó<Ð<r.   s   BinrŠ  r"   r!   s    %s%s |  %*s %s%s
r   s5    %d files changed, %d insertions(+), %d deletions(-)
r.   )	r[  rS  r'   rî  r9   r   rM  r   r2   )r3   ÚwidthÚoutputrN  ÚmaxnameÚ	totaladdsÚtotalremovesÚ	hasbinaryÚ
countwidthr`  r%  rV  rW  r&  r  ÚplusesÚminusesr_  rP  s                    @@r+   Údiffstatrk  �  s!  ù€ Ø€FÜ˜Ó€EÜ<GÈÓ<NÑ9€GˆX�y°	ä”S˜“]Ó#€JÞ�Z !“^Øˆ
ØÑ# gÑ-°Ñ1€JØ�BƒØˆ
ö=ó .3Ñ)ˆ˜ÞØ‰Eà˜T™^Ñ,ˆEØ™˜d›Ñ#ˆØ™˜w›Ñ'ˆØ�‰Ø"àØ˜¤(×"3Ò"3°HÓ"=Ñ=Ñ>ØØØØðñö
	
ñ .3ö& Ø�‰ÜÐGÓHÜ�5‹z˜9Ð3ñ4ô	
ð
 �8‰8�FÓÐr.   c               /  óˆ  #   • [        U 0 UD6R                  5        H¡  nU(       a�  US   S;   a„  UR                  SS5      u  p4US-   S4v •  [        R                  " SU5      nU(       a  UR                  S5      S4v •  [        R                  " S	U5      nU(       a  UR                  S5      S
4v •  OUS4v •  Sv •  M£     g7f)zGlike diffstat(), but yields 2-tuples of (output, label) for
ui.write()
rÆ  s   +-r   r   r.   s   \++r   s   diffstat.inserteds   -+s   diffstat.deletedr  N)rk  r¶   Úrsplitr¥   r´   r  )ru  r  r(   ÚnameÚgraphrH   s         r+   Ú
diffstatuirp  ±  s²   é € ô
 ˜$Ð% "Ñ%×0Ñ0Ö2ˆÞ�D˜‘H Ó%ØŸ+™+ d¨AÓ.‰KˆDØ˜$‘; Ð$Ò$Ü—	’	˜' 5Ó)ˆAÞØ—w‘w˜q“zÐ#7Ð8Ò8Ü—	’	˜& %Ó(ˆAÞØ—w‘w˜q“zÐ#6Ð7Ò7øà˜�+ÒØÔò 3ùs   ‚C Cr]   )r   r.   r¬  )Nr¬  )r.   Nr¬  r   )r   r.   Nr¬  r   )r   r.   )
NNNNNNNNNN)NNNNNNN)ÚreturnzIterator[tuple[Any, bytes]])éP   )mÚ
__future__r   r­  Ú
contextlibrß   r‡   r¥   r‘  r°   ré  Úi18nr   r¿  r   r   r	   Ú r
   r   r   r   r   r   r   r   r   r   r   r   r   r<  Úutilsr   r   r   r   ÚTYPE_CHECKINGÚemailr   r   r1   r¦   r  rÒ  rà  rg  rã  rn  r&   r¸   Úcontextmanagerr‘   r‰   rÏ   r
  r  r  r9  r_  r‚  r–  rµ  r½  r}  r±  rÌ   r:  rh  r£  rÜ  rë  rï  rò  r|  r   r.  r  rC  rM  rÛ  r]  ra  r\  rz  r�  rƒ  r…  r‡  rŠ  Ú	ExceptionrŒ  ÚdiffalloptsÚdiffoptsÚdifffeatureoptsr¡  r›  rÙ  rø  r  r  r  r  r-  r²  r3  rS  r[  rk  rp  r^   r.   r+   Ú<module>r     s  ðõ #ã Û Û Û 	Û 	Û Û Û å ÷ñ ÷
÷ ÷ õ ÷ó ð 
××Û÷ð
 �=‰=€à
�
Š
Ð/Ó0€Ø�jŠjÐ)Ó*€Ø�zŠzØAó€ð ×Ñ€
Ø×'Ñ'€Ø×3Ñ3Ð ò
@òJ€ð ×Ññó ðò4s÷l-:ñ -:ò`*÷Z(ñ (÷* "ñ  "ôF.*�ô .*ôb/(�Yô /(÷d#,ñ #,ôL*+�/ô *+ð\ �*Š*ÐCÓ
D€Ø�jŠjÐKÓL€Ú/€÷dñ d÷NM
ñ M
÷`kBñ kBò\@ôFo÷da,ñ a,÷H;ñ ;ò|ò=ô@Mò`&9òR:òz0%òfò6dKòN8ôvò,ð CLô\ò~.ðd ?HôðF Ø
ØØôNð" HQôNð ØØ
ØØôôBô4	�iô 	ð ×Ñ€Ø×"Ñ"€Ø×*Ñ*€ð
 Ø
Ø
ØØ	ØØØ	ØØôHð^ ØØ	ØØØ	ØôC"òL0ò2D%ôRJ'òZ(ò
"òJð  9°9Ñ=€òM>ò`6'òr	<ò*ôZ-ó`r.   