ó
    ¨ÈÙhz ã                   óL  • S SK r S SKJr  S SKrS SKr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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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+J,r,J-r-J.r.J/r/  \
R`                  " \15      r2\Rf                  " S5      r4\Rf                  " S5      r5\Rf                  " S	5      r6\Rf                  " S
5      r7\Rf                  " S5      r8\Rf                  " S5      r9\Rf                  " S5      r:\Rf                  " S5      r;S r<S r=S r>S r?S r@SiS jrAS rBS rCS rD\RŠ                  S 5       rF\RŠ                  S 5       rG\RŠ                  SjS j5       rH " S S\I5      rJS rK " S S\I5      rLS  rM " S! S"\I5      rN\Rf                  " S#\Rž                  5      rPS$ rQSkS% jrRSlS& jrSS' rTS( rUS) rVS* rW\Rf                  " S+\R°                  5      rY\Rf                  " S,5      rZSkS- jr[\Rf                  " S.5      r\S/ r]S0 r^S1 r_S2r`S3 raS4 rb " S5 S6\I5      rc " S7 S8\I5      rd " S9 S:\I5      reS;rfSmS< jrgS= rhS>ri " S? S@\I5      rj\Rf                  " SA5      rk\Rf                  " SB5      rl\Rf                  " SC5      rmSD rSE rn\(       a6  SSFKJorpJqrqJrrr   " SG SH\$Ræ                  5      rs " SI SJ\p5      ro " SK SL\o\&5      rt " SM SN\%Rê                  5      ru\(       a   " SO SP\%Rì                  5      rv " SQ SR\%Rî                  5      rwSS rx " ST SU\I5      ry " SV SW\y5      rz " SX SY\y5      r{ " SZ S[\'5      r| " S\ S]\I5      r}S^ r~ " S_ S`\I5      rSa r€Sb r�Sc r‚SdSeSfSg.rƒSh r„g! \ a    Sr GNWf = f! \ a    S SKr GNOf = f)né    N)Údeque)Úiglobé   )ÚDistlibException)Ústring_typesÚ	text_typeÚshutilÚ	raw_inputÚStringIOÚcache_from_sourceÚurlopenÚurljoinÚhttplibÚ	xmlrpclibÚHTTPHandlerÚBaseConfiguratorÚvalid_identÚ	ContainerÚconfigparserÚURLErrorÚZipFileÚfsdecodeÚunquoteÚurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z	^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)c                 óF   ^^^^• S mUU4S jmU4S jmU4S jmT" U 5      $ )aM  
Parse a marker string and return a dictionary containing a marker expression.

The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in
the expression grammar, or strings. A string contained in quotes is to be
interpreted as a literal string, and a string not contained in quotes is a
variable (such as os_name).
c                 óò  • [         R                  U 5      nU(       a(  UR                  5       S   nXR                  5       S  n X 4$ U (       d  [	        S5      eU S   nUS;  a  [	        SU -  5      eSR                  US5      nU SS  n U/nU (       a‘  U S   U:X  a  O¦U S   U:X  a  UR                  U5        U SS  n O^[        R                  U 5      nU(       d  [	        SU -  5      eUR                  UR                  5       S   5        XR                  5       S  n U (       a  M‘  SR                  U5      n[	        SU-  5      eUR                  U5        SR                  U5      nU SS  R                  5       n X 4$ )	Nr   zunexpected end of inputz'"zinvalid expression: %sÚ r   zerror in string literal: %szunterminated string: %s)
Ú
IDENTIFIERÚmatchÚgroupsÚendÚSyntaxErrorÚreplaceÚappendÚSTRING_CHUNKÚjoinÚlstrip)Ú	remainingÚmÚresultÚqÚoqÚpartsÚss          ÚI/home/mande/repo/quber/.venv/lib/python3.13/site-packages/distlib/util.pyÚ
marker_varÚ parse_marker.<locals>.marker_var@   sn  € ä×Ñ˜YÓ'ˆÞØ—X‘X“Z ‘]ˆFØ!§%¡%£' (Ð+ˆIð: Ð Ð ö9 ÜÐ7Ó8Ð8à˜!‘ˆAØ˜‹~Ü!Ð":¸YÑ"FÓGÐGØ—‘˜q "Ó%ˆBØ! ! "˜ˆIØ�CˆEÞà˜Q‘< 1Ó$ØØ˜q‘\ RÓ'Ø—L‘L Ô$Ø )¨!¨" ‘Iä$×*Ñ*¨9Ó5�AÞÜ)Ð*GÈ)Ñ*SÓTÐTØ—L‘L §¡£¨A¡Ô/Ø )¯%©%«'¨(Ð 3�I÷ �)ð —G‘G˜E“N�Ü!Ð";¸aÑ"?Ó@Ð@Ø�L‰L˜ŒOØ—W‘W˜U“^ˆFØ! ! "˜×,Ñ,Ó.ˆIØÐ Ð ó    c                 ó”  >• U (       aQ  U S   S:X  aH  T" U SS  R                  5       5      u  pU S   S:w  a  [        SU -  5      eU SS  R                  5       n X4$ T" U 5      u  p U (       aZ  [        R                  U 5      nU(       d  O=UR	                  5       S   nXR                  5       S  n T" U 5      u  pPXBUS.nU (       a  MZ  UnX4$ )Nr   Ú(r   Ú)úunterminated parenthesis: %s©ÚopÚlhsÚrhs)r'   r"   Ú	MARKER_OPr   r    r!   )r(   r*   r9   r)   r8   r:   Úmarkerr0   s         €€r/   Úmarker_exprÚ!parse_marker.<locals>.marker_exprd   sÚ   ø€ Þ˜ 1™¨Ó,Ù & y°° }×';Ñ';Ó'=Ó >ÑˆFØ˜‰|˜sÓ"Ü!Ð"@À9Ñ"LÓMÐMØ! ! "˜×,Ñ,Ó.ˆIð Ð Ð ñ (¨	Ó2‰NˆCÞÜ—O‘O IÓ.�ÞØØ—X‘X“Z ‘]�Ø%§e¡e£g hÐ/�	Ù!+¨IÓ!6‘�Ø°CÑ8�÷ �)ð ˆFØÐ Ð r2   c                 óÀ   >• T" U 5      u  pU (       aJ  [         R                  U 5      nU(       d   X4$ XR                  5       S  n T" U 5      u  p0SXS.nU (       a  MJ  X4$ )NÚandr7   )ÚANDr   r!   )r(   r9   r)   r:   r=   s       €r/   Ú
marker_andÚ parse_marker.<locals>.marker_andw   si   ø€ Ù$ YÓ/‰ˆÞÜ—	‘	˜)Ó$ˆAÞØð ˆ~Ðð "§%¡%£' (Ð+ˆIÙ(¨Ó3‰NˆCØ sÑ7ˆC÷ ˆið ˆ~Ðr2   c                 óÀ   >• T" U 5      u  pU (       aJ  [         R                  U 5      nU(       d   X4$ XR                  5       S  n T" U 5      u  p0SXS.nU (       a  MJ  X4$ )NÚorr7   )ÚORr   r!   )r(   r9   r)   r:   rB   s       €r/   r<   Úparse_marker.<locals>.marker‚   si   ø€ Ù# IÓ.‰ˆÞÜ—‘˜Ó#ˆAÞØð ˆ~Ðð "§%¡%£' (Ð+ˆIÙ'¨	Ó2‰NˆCØ cÑ6ˆC÷ ˆið ˆ~Ðr2   © )Úmarker_stringr<   rB   r=   r0   s    @@@@r/   Úparse_markerrJ   6   s%   û€ ò"!öH!õ&	õ	ñ �-Ó Ð r2   c           	      ó¤  • U R                  5       nU(       a  UR                  S5      (       a  g[        R                  U5      nU(       d  [	        SU-  5      eUR                  5       S   nXR                  5       S nS=n=n=pgU(       aô  US   S:X  aë  UR                  SS5      nUS:  a  [	        SU-  5      eUSU n	XS-   S R                  5       n/ nU	(       a™  [        R                  U	5      nU(       d  [	        S	U	-  5      eUR                  UR                  5       S   5        X’R                  5       S n	U	(       d  O3U	S   S
:w  a  [	        SU	-  5      eU	SS R                  5       n	U	(       a  M™  U(       d  SnU(       Ga¨  US   S:X  a¬  USS R                  5       n[        R                  U5      nU(       d  [	        SU-  5      eUR                  5       S   n[        U5      n
U
R                  (       a  U
R                  (       d  [	        SU-  5      eXR                  5       S R                  5       nOóS nUS   S:w  a  U" U5      u  paOÜUR                  SS5      nUS:  a  [	        SU-  5      eUSU n	XS-   S R                  5       n[        R                  U	5      (       a  U" U	5      u  plOw[        R                  U	5      nU(       d  [	        SU	-  5      eUR                  5       S   nX’R                  5       S R                  5       n	U	(       a  [	        SU	-  5      eSU4/nU(       a7  US   S:w  a  [	        SU-  5      eUSS R                  5       n[!        U5      u  pQU(       a  US   S:w  a  [	        SU-  5      eU(       d  UnO,U< SSR#                  U Vs/ s H  nSU-  PM
     sn5      < 3n[%        X4XeX~S9$ s  snf )z~
Parse a requirement passed in as a string. Return a Container
whose attributes contain the various parts of the requirement.
Ú#Nzname expected: %sr   Ú[Ú]r   zunterminated extra: %szmalformed extra: %sÚ,zcomma expected in extras: %sÚ@zinvalid URI: %szInvalid URL: %sc                 ó  • [         R                  U 5      nSnU(       aê  / n UR                  5       S   nXR                  5       S n [        R                  U 5      nU(       d  [        SU -  5      eUR                  5       S   nUR                  X445        XR                  5       S n U (       a	  U S   S:w  a  OGU SS R                  5       n U (       d  O,[         R                  U 5      nU(       d  [        SU -  5      eMÞ  U(       d  SnX 4$ )zL
Return a list of operator, version tuples if any are
specified, else None.
Nr   zinvalid version: %srO   r   úinvalid constraint: %s)Ú
COMPARE_OPr   r    r!   ÚVERSION_IDENTIFIERr"   r$   r'   )Úver_remainingr)   Úversionsr8   Úvs        r/   Úget_versionsÚ'parse_requirement.<locals>.get_versionsÄ   sÿ   € ô
 ×$Ñ$ ]Ó3�Ø�ÞØ!�HØØŸX™X›Z¨™]˜Ø(5·e±e³g°hÐ(?˜Ü.×4Ñ4°]ÓC˜Þ Ü"-Ð.CÀmÑ.SÓ"TÐTØŸH™H›J q™M˜Ø Ÿ™¨¨Ô0Ø(5·e±e³g°hÐ(?˜Þ,°¸aÑ0@ÀCÓ0GØ!Ø(5°a°bÐ(9×(@Ñ(@Ó(B˜ö  -Ø!Ü&×,Ñ,¨]Ó;˜Þ Ü"-Ð.FÈÑ.VÓ"WÐWñ% ö& $Ø#'˜ØÐ.Ð.r2   r4   r5   r6   rR   z~=Ú;zinvalid requirement: %szunexpected trailing data: %sÚ ú, z%s %s)ÚnameÚextrasÚconstraintsr<   ÚurlÚrequirement)ÚstripÚ
startswithr   r   r"   r    r!   Úfindr'   r$   Ú	NON_SPACEr   ÚschemeÚnetlocrS   rT   rJ   r&   r   )Úreqr(   r)   Údistnamer^   Ú	mark_exprrV   ÚuriÚir.   ÚtrX   Ú_rW   ÚrsÚcons                   r/   Úparse_requirementrq   �   s˜  € ð
 —	‘	“€IÞ˜	×,Ñ,¨S×1Ñ1ØÜ×Ñ˜Ó#€AÞÜÐ-°	Ñ9Ó:Ð:Ø�x‰x‹z˜!‰}€HØŸ%™%›'˜(Ð#€IØ*.Ð.€FÐ.ˆYÐ.˜Þ�Y˜q‘\ SÓ(Ø�N‰N˜3 Ó"ˆØˆq‹5ÜÐ6¸ÑBÓCÐCØ�a˜ˆNˆØ !™e˜fÐ%×,Ñ,Ó.ˆ	ØˆÞÜ× Ñ  Ó#ˆAÞÜ!Ð"7¸!Ñ";Ó<Ð<Ø�M‰M˜!Ÿ(™(›* Q™-Ô(Ø—%‘%“'�(�ˆAÞØØ�‰t�s‹{Ü!Ð"@À1Ñ"DÓEÐEØ�!�"�—‘“ˆA÷ ˆaö ØˆFßØ�Q‰<˜3Óà! ! "˜×,Ñ,Ó.ˆIÜ—‘ 	Ó*ˆAÞÜ!Ð"3°iÑ"?Ó@Ð@Ø—(‘(“*˜Q‘-ˆCÜ˜“ˆAð
 —H—H §§Ü!Ð"3°cÑ"9Ó:Ð:Ø!§%¡%£' (Ð+×2Ñ2Ó4‰Iò/ð@ ˜‰|˜sÓ"Ù&2°9Ó&=Ñ#�˜)à—N‘N 3¨Ó*�Ø�q“5Ü%Ð&DÀyÑ&PÓQÐQØ˜a �N�Ø%¨!¡e fÐ-×4Ñ4Ó6�	ô ×#Ñ# A×&Ñ&Ù".¨q£/‘K�H˜aä*×0Ñ0°Ó3�AÞÜ)Ð*BÀQÑ*FÓGÐGØŸ™›
 1™�AØŸ%™%›'˜(˜×*Ñ*Ó,�AÞÜ)Ð*BÀQÑ*FÓGÐGØ!% q 	˜{�HæØ�Q‰<˜3ÓÜÐ7¸)ÑCÓDÐDØ˜a˜b�M×(Ñ(Ó*ˆ	ä+¨IÓ6Ñˆ	æ�Y˜q‘\ SÓ(ÜÐ8¸9ÑDÓEÐEæØ‰ã  $§)¡)ÁhÓ,OÂh¸s¨W°s¬]ÁhÑ,OÕ"PÐQˆÜ˜(¸xÐ_bÑsÐsùò -Ps   Î)Oc                 óÀ  • S n0 nU HÒ  u  pEn[         R                  R                  X5      n[        U5       Hž  n[         R                  R                  X…5      n	[        U	5       Hm  n
U" X
5      nUc  UR	                  US5        M"  U" XŠ5      nUR                  [         R                  R                  S5      R                  S5      nUS-   U-   X;'   Mo     M      MÔ     U$ )z%Find destinations for resources filesc                 ó  • U R                  [        R                  R                  S5      n UR                  [        R                  R                  S5      nUR	                  U 5      (       d   eU[        U 5      S  R                  S5      $ ©NÚ/)r#   ÚosÚpathÚseprc   Úlenr'   )Úrootrw   s     r/   Úget_rel_pathÚ)get_resources_dests.<locals>.get_rel_path  sc   € à�|‰|œBŸG™GŸK™K¨Ó-ˆØ�|‰|œBŸG™GŸK™K¨Ó-ˆØ�‰˜t×$Ñ$Ð$Ð$Ø”C˜“I�JÐ×&Ñ& sÓ+Ð+r2   Nru   )rv   rw   r&   r   Úpopr#   rx   Úrstrip)Úresources_rootÚrulesr{   ÚdestinationsÚbaseÚsuffixÚdestÚprefixÚabs_baseÚabs_globÚabs_pathÚresource_fileÚrel_pathÚrel_dests                 r/   Úget_resources_destsrŒ     sÂ   € ò,ð €LÛ#Ñˆ�dÜ—‘—‘˜nÓ3ˆÜ˜fžˆHÜ—w‘w—|‘| HÓ5ˆHÜ! (žO�Ù ,¨^Ó F�Ø‘<Ø ×$Ñ$ ]°DÖ9á+¨HÓ?�HØ#Ÿ|™|¬B¯G©G¯K©K¸Ó=×DÑDÀSÓI�HØ2:¸S±.À8Ñ2K�LÓ/ó ,ó &ñ $ð Ðr2   c                  ó˜   • [        [        S5      (       a  Sn U $ [        R                  [        [        S[        R                  5      :g  n U $ )NÚreal_prefixTÚbase_prefix)ÚhasattrÚsysr…   Úgetattr©r*   s    r/   Úin_venvr”   &  s=   € ÜŒs�M×"Ñ"àˆð €Mô —‘œw¤s¨M¼3¿:¹:ÓFÑFˆØ€Mr2   c                  óf   • [         R                  n [        U [        5      (       d  [	        U 5      n U $ ©N)r‘   Ú
executableÚ
isinstancer   r   r“   s    r/   Úget_executabler™   0  s)   € ô �^‰^€FÜ�fœi×(Ñ(Ü˜&Ó!ˆØ€Mr2   c                 ó¦   • U n [        U5      nU nU(       d	  U(       a  UnU(       a)  US   R                  5       nXa;   a   U$ U(       a  SXbU 4-  nMO  )Nr   z	%c: %s
%s)r
   Úlower)ÚpromptÚallowed_charsÚerror_promptÚdefaultÚpr.   Úcs          r/   Úproceedr¢   B  s]   € Ø€AØ
Ü�a‹LˆØˆÞ–WØˆAÞØ�!‘—
‘
“ˆAØÓ!Øð €Hö Ø  A°VÐ#<Ñ<�ñ r2   c                 ó€   • [        U[        5      (       a  UR                  5       n0 nU H  nX0;   d  M
  X   X#'   M     U$ r–   )r˜   r   Úsplit)ÚdÚkeysr*   Úkeys       r/   Úextract_by_keyr¨   R  s>   € Ü�$œ×%Ñ%Ø�z‰z‹|ˆØ€FÛˆØ�8Ø™&ˆF‹Kñ ð €Mr2   c                 ób  • [         R                  S   S:¼  a  [        R                  " S5      " U 5      n U R	                  5       n[        U5      n  [        R                  " U 5      nUS   S   S   nUR                  5        H;  u  pEUR                  5        H"  u  pgU< SU< 3n[        U5      n	U	c   eX•U'   M$     M=     U$ ! [         a    U R                  SS5         Of = fS n
[        R                  " 5       n U
" X°5        OS! [        R                   a<    U R                  5         [         R"                  " U5      n[        U5      n U
" X°5         Of = f0 nUR%                  5        H@  n0 =X<'   nUR                  U5       H"  u  pÞU< SU< 3n[        U5      n	U	c   eX•U'   M$     MB     U$ )	Nr   é   úutf-8Ú
extensionszpython.exportsÚexportsú = c                 ól   • [        U S5      (       a  U R                  U5        g U R                  U5        g )NÚ	read_file)r�   r°   Úreadfp)ÚcpÚstreams     r/   Úread_streamÚ!read_exports.<locals>.read_streamp  s'   € Ü�2�{×#Ñ#Ø�L‰L˜Õ à�I‰I�fÕr2   )r‘   Úversion_infoÚcodecsÚ	getreaderÚreadr   ÚjsonÚloadÚitemsÚget_export_entryÚ	ExceptionÚseekr   ÚConfigParserÚMissingSectionHeaderErrorÚcloseÚtextwrapÚdedentÚsections)r³   ÚdataÚjdatar*   ÚgroupÚentriesÚkrW   r.   Úentryr´   r²   r§   r]   Úvalues                  r/   Úread_exportsrÍ   \  s™  € Ü
×Ñ˜Ñ˜aÓä×!Ò! 'Ô*¨6Ó2ˆà�;‰;‹=€DÜ�d‹^€FðÜ—	’	˜&Ó!ˆØ�|Ñ$Ð%5Ñ6°yÑAˆØ$Ÿl™lžn‰NˆEØŸ™ž‘�Û!"¢AÐ&�Ü(¨Ó+�ØÑ(Ð(Ð(Ø"˜“
ó	 (ñ -ð ˆøÜó Ø�‰�A�qÖðúòô 
×	"Ò	"Ó	$€Bð Ù�BÕøÜ×1Ñ1ó  Ø�‰ŒÜ�Š˜tÓ$ˆÜ˜$“ˆÙ�BÖð	 úð €FØ�{‰{Ž}ˆØ "Ð"ˆ‰�gØŸ8™8 Cž=‰KˆDÛ!¢5Ð)ˆAÜ$ QÓ'ˆEØÑ$Ð$Ð$à!�D‹Mó )ñ ð €Ms&   ÁA1C ÃC!Ã C!Ã=D ÄAEÅEc                 óF  • [         R                  S   S:¼  a  [        R                  " S5      " U5      n[        R
                  " 5       nU R                  5        H´  u  p4UR                  U5        UR                  5        HŠ  nUR                  c  UR                  nOUR                  < SUR                  < 3nUR                  (       a#  U< SSR                  UR                  5      < S3nUR                  X5R                  U5        MŒ     M¶     UR                  U5        g )Nr   rª   r«   Ú:z [r\   rN   )r‘   r¶   r·   Ú	getwriterr   rÀ   r¼   Úadd_sectionÚvaluesrƒ   r…   Úflagsr&   Úsetr]   Úwrite)r­   r³   r²   rÊ   rW   rË   r.   s          r/   Úwrite_exportsrÖ   ‹  sÉ   € Ü
×Ñ˜Ñ˜aÓä×!Ò! 'Ô*¨6Ó2ˆÜ	×	"Ò	"Ó	$€BØ—‘–‰ˆà
�‰�qÔØ—X‘X–ZˆEØ�|‰|Ñ#Ø—L‘L‘à$Ÿ|œ|¨U¯\«\Ð:�Ø�{�{Û!" D§I¡I¨e¯k©kÖ$:Ð;�Ø�F‰F�1—j‘j !Ö$ó  ñ  ð ‡H�HˆVÕr2   c               #   ó¢   #   • [         R                  " 5       n  U v •  [        R                  " U 5        g ! [        R                  " U 5        f = f7fr–   )ÚtempfileÚmkdtempr	   Úrmtree)Útds    r/   ÚtempdirrÜ   ž  s5   é € ä	×	Ò	Ó	€BðØŠä�Š�bÕøŒ�Š�bÕüs   ‚A™4 �A´AÁAc              #   óÎ   #   • [         R                  " 5       n [         R                  " U 5        S v •  [         R                  " U5        g ! [         R                  " U5        f = f7fr–   )rv   ÚgetcwdÚchdir)r¥   Úcwds     r/   rß   rß   §  s9   é € ä
�)Š)‹+€CðÜ
�Š�ŒÛä
�Š��øŒ�Š��üó   ‚A%™A
 ³A%Á
A"Á"A%c              #   óÎ   #   • [         R                  " 5       n [         R                  " U 5        S v •  [         R                  " U5        g ! [         R                  " U5        f = f7fr–   )ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)ÚsecondsÚctos     r/   Úsocket_timeoutrè   ±  sE   é € ä
×
"Ò
"Ó
$€Cð&Ü× Ò  Ô)Ûä× Ò  Õ%øŒ× Ò  Õ%ürá   c                   ó$   • \ rS rSrS rSS jrSrg)Úcached_propertyi»  c                 ó   • Xl         g r–   ©Úfunc)Úselfrí   s     r/   Ú__init__Úcached_property.__init__½  s   € Ø�	r2   Nc                 ó†   • Uc  U $ U R                  U5      n[        R                  XR                   R                  U5        U$ r–   )rí   ÚobjectÚ__setattr__Ú__name__)rî   ÚobjÚclsrÌ   s       r/   Ú__get__Úcached_property.__get__Â  s8   € Ø‰;ØˆKØ—	‘	˜#“ˆÜ×Ñ˜3§	¡	× 2Ñ 2°EÔ:àˆr2   rì   r–   )rô   Ú
__module__Ú__qualname__Ú__firstlineno__rï   r÷   Ú__static_attributes__rH   r2   r/   rê   rê   »  s   † ò÷
r2   rê   c                 ó¸  • [         R                  S:X  a  U $ U (       d  U $ U S   S:X  a  [        SU -  5      eU S   S:X  a  [        SU -  5      eU R                  S5      n[         R                  U;   a5  UR                  [         R                  5        [         R                  U;   a  M5  U(       d  [         R                  $ [         R                  R                  " U6 $ )a´  Return 'pathname' as a name that will work on the native filesystem.

The path is split on '/' and put back together again using the current
directory separator.  Needed because filenames in the setup script are
always supplied in Unix style, and have to be converted to the local
convention before we can actually use them in the filesystem.  Raises
ValueError on non-Unix-ish systems if 'pathname' either starts or
ends with a slash.
ru   r   zpath '%s' cannot be absoluteéÿÿÿÿzpath '%s' cannot end with '/')rv   rx   Ú
ValueErrorr¤   ÚcurdirÚremoverw   r&   )ÚpathnameÚpathss     r/   Úconvert_pathr  Ë  s®   € ô 
‡v�v�ƒ}ØˆÞØˆØ��{�cÓÜÐ7¸(ÑBÓCÐCØ��|�sÓÜÐ8¸8ÑCÓDÐDà�N‰N˜3Ó€EÜ
�)‰)�uÓ
Ø�‰”R—Y‘YÔô �)‰)�uÕ
æÜ�y‰yÐÜ�7‰7�<Š<˜ÐÐr2   c                   ó„   • \ rS rSrSS jrS rS rS rSS jrSS jr	S	 r
S
 rS rS rS rSS jrS rS rS rS rSrg)ÚFileOperatoriæ  c                 óN   • Xl         [        5       U l        U R                  5         g r–   )Údry_runrÔ   ÚensuredÚ_init_record)rî   r  s     r/   rï   ÚFileOperator.__init__è  s   € ØŒÜ“uˆŒØ×ÑÕr2   c                 óN   • SU l         [        5       U l        [        5       U l        g ©NF)ÚrecordrÔ   Úfiles_writtenÚdirs_created©rî   s    r/   r
  ÚFileOperator._init_recordí  s   € ØˆŒÜ ›UˆÔÜ›EˆÕr2   c                 ó^   • U R                   (       a  U R                  R                  U5        g g r–   )r  r  Úadd)rî   rw   s     r/   Úrecord_as_writtenÚFileOperator.record_as_writtenò  s"   € Ø�;�;Ø×Ñ×"Ñ" 4Õ(ð r2   c                 ól  • [         R                  R                  U5      (       d+  [        S[         R                  R	                  U5      -  5      e[         R                  R                  U5      (       d  g[         R
                  " U5      R                  [         R
                  " U5      R                  :„  $ )a–  Tell if the target is newer than the source.

Returns true if 'source' exists and is more recently modified than
'target', or if 'source' exists and 'target' doesn't.

Returns false if both exist and 'target' is the same age or younger
than 'source'. Raise PackagingFileError if 'source' does not exist.

Note that this test is not very accurate: files created in the same
second will have the same "age".
zfile '%r' does not existT)rv   rw   Úexistsr   ÚabspathÚstatÚst_mtime)rî   ÚsourceÚtargets      r/   ÚnewerÚFileOperator.newerö  ss   € ô �w‰w�~‰~˜f×%Ñ%Ü"Ð#=ÄÇÁÇÁÐPVÓ@WÑ#WÓXÐXÜ�w‰w�~‰~˜f×%Ñ%Øä�wŠw�v‹×'Ñ'¬"¯'ª'°&«/×*BÑ*BÑBÐBr2   c                 ó&  • U R                  [        R                  R                  U5      5        [        R                  SX5        U R                  (       d«  SnU(       aw  [        R                  R                  U5      (       a  SU-  nOM[        R                  R                  U5      (       a)  [        R                  R                  U5      (       d  SU-  nU(       a  [        US-   5      e[        R                  " X5        U R                  U5        g)z8Copy a file respecting dry-run and force flags.
        zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)Ú
ensure_dirrv   rw   ÚdirnameÚloggerÚinfor  Úislinkr  Úisfilerÿ   r	   Úcopyfiler  )rî   ÚinfileÚoutfileÚcheckÚmsgs        r/   Ú	copy_fileÚFileOperator.copy_file	  sµ   € ð 	�‰œŸ™Ÿ™¨Ó0Ô1Ü�‰Ð&¨Ô8Ø�|�|ØˆCÞÜ—7‘7—>‘> '×*Ñ*Ø+¨gÑ5‘CÜ—W‘W—^‘^ G×,Ñ,´R·W±W·^±^ÀG×5LÑ5LØ4°wÑ>�CÞÜ  Ð'DÑ!DÓEÐEÜ�OŠO˜FÔ,Ø×Ñ˜wÕ'r2   Nc                 óà  • [         R                  R                  U5      (       a   eU R                  [         R                  R	                  U5      5        [
        R                  SX5        U R                  (       dM  Uc  [        US5      nO[        R                  " USUS9n [        R                  " X5        UR                  5         U R                  U5        g ! UR                  5         f = f)NzCopying stream %s to %sÚwbÚw©Úencoding)rv   rw   Úisdirr!  r"  r#  r$  r  Úopenr·   r	   ÚcopyfileobjrÂ   r  )rî   Úinstreamr)  r2  Ú	outstreams        r/   Úcopy_streamÚFileOperator.copy_stream  s§   € Ü—7‘7—=‘= ×)Ñ)Ð)Ð)Ø�‰œŸ™Ÿ™¨Ó0Ô1Ü�‰Ð-¨xÔAØ�|�|ØÑÜ  ¨$Ó/‘	ä"ŸKšK¨°¸xÑH�	ð"Ü×"Ò" 8Ô7à—‘Ô!Ø×Ñ˜wÕ'øð —‘Õ!ús   Â#C ÃC-c                 ó†  • U R                  [        R                  R                  U5      5        U R                  (       d`  [        R                  R                  U5      (       a  [        R                  " U5        [        US5       nUR                  U5        S S S 5        U R                  U5        g ! , (       d  f       N = f)Nr/  )
r!  rv   rw   r"  r  r  r  r4  rÕ   r  )rî   rw   rÆ   Úfs       r/   Úwrite_binary_fileÚFileOperator.write_binary_file)  ss   € Ø�‰œŸ™Ÿ™¨Ó-Ô.Ø�|�|Ü�w‰w�~‰~˜d×#Ñ#Ü—	’	˜$”Ü�d˜DÔ! QØ—‘˜”÷ "à×Ñ˜tÕ$÷ "Õ!ús   ÂB2Â2
C c                 óD   • U R                  XR                  U5      5        g r–   )r<  Úencode)rî   rw   rÆ   r2  s       r/   Úwrite_text_fileÚFileOperator.write_text_file2  s   € Ø×Ñ˜t§[¡[°Ó%:Õ;r2   c                 óˆ  • [         R                  S:X  d(  [         R                  S:X  aš  [         R                  S:X  a…  U H~  nU R                  (       a  [        R                  SU5        M,  [         R                  " U5      R                  U-  U-  n[        R                  SXE5        [         R                  " XE5        M€     g g g )NÚposixÚjavazchanging mode of %szchanging mode of %s to %o)	rv   r]   Ú_namer  r#  r$  r  Úst_modeÚchmod)rî   ÚbitsÚmaskÚfilesr;  Úmodes         r/   Úset_modeÚFileOperator.set_mode5  s‡   € Ü�7‰7�gÓ¤"§'¡'¨VÓ"3¼¿¹ÀGÓ8Kó �Ø—<—<Ü—K‘KÐ 5°qÖ9äŸGšG A›J×.Ñ.°Ñ5¸Ñ=�DÜ—K‘KÐ ;¸QÔEÜ—H’H˜QÖ%ò ð 9LÐ"3r2   c                 ó(   • U R                  SSU5      $ )Nim  iÿ  )rL  )r.   r;  s     r/   Ú<lambda>ÚFileOperator.<lambda>A  s   €  q§z¡z°%¸ÀÔ'Cr2   c                 ó  • [         R                  R                  U5      nXR                  ;  aß  [         R                  R	                  U5      (       dº  U R                  R                  U5        [         R                  R                  U5      u  p#U R                  U5        [        R                  SU-  5        U R                  (       d  [         R                  " U5        U R                  (       a  U R                  R                  U5        g g g g )NzCreating %s)rv   rw   r  r	  r  r  r¤   r!  r#  r$  r  Úmkdirr  r  )rî   rw   r¥   r;  s       r/   r!  ÚFileOperator.ensure_dirC  s®   € Ü�w‰w�‰˜tÓ$ˆØ—|‘|Ó#¬B¯G©G¯N©N¸4×,@Ñ,@Ø�L‰L×Ñ˜TÔ"Ü—7‘7—=‘= Ó&‰DˆAØ�O‰O˜AÔÜ�K‰K˜¨Ñ,Ô-Ø—<—<Ü—’˜”Ø�{�{Ø×!Ñ!×%Ñ% dÕ+ð ð -AÐ#r2   c                 ó  • [        X(       + 5      n[        R                  SX5        U R                  (       dÁ  U(       d  U R	                  X5      (       a0  U(       d  S nO&UR                  U5      (       d   eU[        U5      S  n0 nU(       aR  [        [        S5      (       a=  [        U[        R                  5      (       d  [        R                  R                  nXXS'   [        R                  " XWS40 UD6  U R                  U5        U$ )NzByte-compiling %s to %sÚPycInvalidationModeÚinvalidation_modeT)r   r#  r$  r  r  rc   ry   r�   Ú
py_compiler˜   rU  ÚCHECKED_HASHÚcompiler  )	rî   rw   ÚoptimizeÚforcer…   Úhashed_invalidationÚdpathÚdiagpathÚcompile_kwargss	            r/   Úbyte_compileÚFileOperator.byte_compileO  sÐ   € Ü! $¬Ó5ˆÜ�‰Ð-¨tÔ;Ø�|�|Þ˜Ÿ
™
 4×/Ñ/ÞØ#‘HàŸ?™?¨6×2Ñ2Ð2Ð2Ø#¤C¨£K LÐ1�HØˆNÞ"¤w¬zÐ;P×'QÑ'QÜ!Ð"5´z×7UÑ7U×VÑVÜ*4×*HÑ*H×*UÑ*UÐ'Ø6IÐ2Ñ3Ü×Ò˜t¨H°dÑM¸nÒMØ×Ñ˜uÔ%Øˆr2   c                 ó  • [         R                  R                  U5      (       Gag  [         R                  R                  U5      (       aŸ  [         R                  R	                  U5      (       d{  [
        R                  SU5        U R                  (       d  [        R                  " U5        U R                  (       a,  XR                  ;   a  U R                  R                  U5        g g g [         R                  R	                  U5      (       a  SnOSn[
        R                  SX!5        U R                  (       d  [         R                  " U5        U R                  (       a,  XR                  ;   a  U R                  R                  U5        g g g g )NzRemoving directory tree at %sÚlinkÚfilezRemoving %s %s)rv   rw   r  r3  r%  r#  Údebugr  r	   rÚ   r  r  r  r  )rî   rw   r.   s      r/   Úensure_removedÚFileOperator.ensure_removedb  s  € Ü�7‰7�>‰>˜$×ÒÜ�w‰w�}‰}˜T×"Ñ"¬2¯7©7¯>©>¸$×+?Ñ+?Ü—‘Ð<¸dÔCØ—|—|Ü—M’M $Ô'Ø—;—;Ø×0Ñ0Ó0Ø×)Ñ)×0Ñ0°Õ6ð 1ð ô —7‘7—>‘> $×'Ñ'Ø‘Aà�AÜ—‘Ð-¨qÔ7Ø—|—|Ü—I’I˜d”OØ—;—;Ø×1Ñ1Ó1Ø×*Ñ*×1Ñ1°$Õ7ð 2ð ð!  r2   c                 ó  • SnU(       d~  [         R                  R                  U5      (       a(  [         R                  " U[         R                  5      n U$ [         R                  R                  U5      nX1:X  a   U$ UnU(       d  M~  U$ r  )rv   rw   r  ÚaccessÚW_OKr"  )rî   rw   r*   Úparents       r/   Úis_writableÚFileOperator.is_writablew  sq   € ØˆÞÜ�w‰w�~‰~˜d×#Ñ#ÜŸš 4¬¯©Ó1�Øð
 ˆô	 —W‘W—_‘_ TÓ*ˆFØ‹~Øàˆð ˆD÷ �&ð ˆr2   c                 ó|   • U R                   (       d   eU R                  U R                  4nU R                  5         U$ )z>
Commit recorded changes, turn off recording, return
changes.
)r  r  r  r
  )rî   r*   s     r/   ÚcommitÚFileOperator.commitƒ  s7   € ð
 �{�{Ðˆ{Ø×#Ñ# T×%6Ñ%6Ð6ˆØ×ÑÔØˆr2   c                 ó  • U R                   (       dé  [        U R                  5       H?  n[        R                  R                  U5      (       d  M)  [        R                  " U5        MA     [        U R                  SS9nU Hw  n[        R                  " U5      nU(       aA  US/:X  d   e[        R                  R                  X4S   5      n[        R                  " U5        [        R                  " U5        My     U R                  5         g )NT)ÚreverseÚ__pycache__r   )r  Úlistr  rv   rw   r  r  Úsortedr  Úlistdirr&   Úrmdirr
  )rî   r;  Údirsr¥   ÚflistÚsds         r/   ÚrollbackÚFileOperator.rollback�  s´   € Ø�|�|Ü˜$×,Ñ,Ö-�Ü—7‘7—>‘> !×$Ó$Ü—I’I˜a–Lñ .ô ˜$×+Ñ+°TÑ:ˆDÛ�ÜŸ
š
 1›�ÞØ  ] OÓ3Ð3Ð3ÜŸ™Ÿ™ a¨q©Ó2�BÜ—H’H˜R”LÜ—’˜–ñ ð 	×ÑÕr2   )r  r  r	  r  r  ©F©Tr–   )FFNF)rô   rù   rú   rû   rï   r
  r  r  r,  r8  r<  r@  rL  Úset_executable_moder!  r`  rf  rl  ro  r{  rü   rH   r2   r/   r  r  æ  sW   † ôò
"ò
)òCô&(ô"(ò%ò<ò
&ñ DÐò
,ôò&8ò*
òõr2   r  c                 óø   • U [         R                  ;   a  [         R                  U    nO[        U 5      nUc  UnU$ UR                  S5      n[	        X$R                  S5      5      nU H  n[	        X55      nM     U$ )NÚ.r   )r‘   ÚmodulesÚ
__import__r¤   r’   r}   )Úmodule_nameÚdotted_pathÚmodr*   r-   r    s         r/   Úresolver‡     su   € Ø”c—k‘kÓ!Ü�k‰k˜+Ñ&‰ä˜Ó%ˆØÑØˆð €Mð	 ×!Ñ! #Ó&ˆÜ˜Ÿi™i¨›lÓ+ˆÛˆAÜ˜VÓ'ŠFñ à€Mr2   c                   óN   • \ rS rSrS r\S 5       rS rS r\	R                  r
Srg)ÚExportEntryi¯  c                 ó4   • Xl         X l        X0l        X@l        g r–   ©r]   r…   rƒ   rÓ   )rî   r]   r…   rƒ   rÓ   s        r/   rï   ÚExportEntry.__init__±  s   € ØŒ	ØŒØŒØ�
r2   c                 óB   • [        U R                  U R                  5      $ r–   )r‡  r…   rƒ   r  s    r/   rÌ   ÚExportEntry.value·  s   € ä�t—{‘{ D§K¡KÓ0Ð0r2   c           	      óx   • SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )Nz<ExportEntry r®   rÏ   r[   Ú>r‹  r  s    r/   Ú__repr__ÚExportEntry.__repr__»  s$   � Ø04·	´	¸4¿;¼;ÈÏÌÐUY×U_ÔU_Ð`Ð`r2   c                 ó*  • [        U[        5      (       d  SnU$ U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  nU$ r  )r˜   r‰  r]   r…   rƒ   rÓ   )rî   Úotherr*   s      r/   Ú__eq__ÚExportEntry.__eq__¾  sz   € Ü˜%¤×-Ñ-ØˆFð ˆð —i‘i 5§:¡:Ñ-÷ 0°$·+±+ÀÇÁÑ2M÷ 0ÐRV×R]ÑR]Ðaf×amÑamÑRm÷ 0Ø—j‘j E§K¡KÑ/ð àˆr2   )rÓ   r]   r…   rƒ   N)rô   rù   rú   rû   rï   rê   rÌ   r‘  r•  rò   Ú__hash__rü   rH   r2   r/   r‰  r‰  ¯  s1   † òð ñ1ó ð1òaòð �‰ƒHr2   r‰  z·(?P<name>([^\[]\S*))
                      \s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
                      \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
                      c                 óü  • [         R                  U 5      nU(       d  S nSU ;   d  SU ;   a  [        SU -  5      e U$ UR                  5       nUS   nUS   nUR	                  S5      nUS:X  a  US p‡O'US:w  a  [        SU -  5      eUR                  S5      u  pxUS	   n	U	c  SU ;   d  SU ;   a  [        SU -  5      e/ n	O.U	R                  S
5       V
s/ s H  oªR                  5       PM     n	n
[        XGX‰5      nU$ s  sn
f )NrM   rN   zInvalid specification '%s'r]   ÚcallablerÏ   r   r   rÓ   rO   )ÚENTRY_REÚsearchr   Ú	groupdictÚcountr¤   rb   r‰  )Úspecificationr)   r*   r¥   r]   rw   Úcolonsr…   rƒ   rÓ   r;  s              r/   r½   r½   Ð  s,  € Ü�‰˜Ó&€AÞØˆØ�-Ó 3¨-Ó#7Ü"ð $*Ø,9ñ$:ó ;ð ;ð $8ð0 €Mð) �K‰K‹MˆØ�‰yˆØ�‰}ˆØ—‘˜C“ˆØ�Q‹;Ø! 4‘Fà˜‹{Ü&ð (.Ø0=ñ(>ó ?ð ?à!ŸZ™Z¨›_‰NˆFØ�'‘
ˆØ‰=Ø�mÓ# s¨mÓ';Ü&ð (.Ø0=ñ(>ó ?ð ?à‰Eà(-¯©°CÔ(8Ó9Ò(8 1—W‘W–YÑ(8ˆEÐ9Ü˜T¨6Ó9ˆØ€Mùò :s   ÃC9c                 óÊ  • U c  Sn [         R                  S:X  a4  S[         R                  ;   a   [         R                  R	                  S5      nO[         R                  R                  S5      n[         R                  R                  U5      (       aC  [         R                  " U[         R                  5      nU(       d  [        R                  SU5        O [         R                  " U5        SnU(       d+  [        R                  " 5       n[        R                  SU5        [         R                  R                  X5      $ ! [         a    [        R                  SUSS	9  S
n Ntf = f)az  
Return the default base location for distlib caches. If the directory does
not exist, it is created. Use the suffix provided for the base directory,
and default to '.distlib' if it isn't provided.

On Windows, if LOCALAPPDATA is defined in the environment, then it is
assumed to be a directory, and will be the parent directory of the result.
On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home
directory - using os.expanduser('~') - will be the parent directory of
the result.

The result is just the directory '.distlib' in the parent directory as
determined above, or with the name specified with ``suffix``.
z.distlibÚntÚLOCALAPPDATAz$localappdataÚ~z(Directory exists but is not writable: %sTzUnable to create %s)Úexc_infoFz#Default location unusable, using %s)rv   r]   Úenvironrw   Ú
expandvarsÚ
expanduserr3  ri  rj  r#  ÚwarningÚmakedirsÚOSErrorrØ   rÙ   r&   )rƒ   r*   Úusables      r/   Úget_cache_baser¬  ï  sþ   € ð �~ØˆÜ	‡w�w�$ƒ˜>¬R¯Z©ZÓ7Ü—‘×#Ñ# OÓ4‰ô —‘×#Ñ# CÓ(ˆô 
‡w�w‡}�}�V×ÑÜ—’˜6¤2§7¡7Ó+ˆÞÜ�N‰NÐEÀvÔNøð	Ü�KŠK˜ÔØˆFö Ü×!Ò!Ó#ˆÜ�‰Ð<¸fÔEÜ�7‰7�<‰<˜Ó'Ð'øô ó 	Ü�N‰NÐ0°&À4ˆNÑHØŠFð	ús   ÃD> Ä>!E"Å!E"c                 ó  • [         R                  R                  U(       a  [         R                  R                  U 5      OU 5      u  p#U(       a  UR	                  SS5      nUR	                  [         R
                  S5      nX#-   S-   $ )z÷
Convert an absolute path to a directory name for use in a cache.

The algorithm used is:

#. On Windows, any ``':'`` in the drive is replaced with ``'---'``.
#. Any occurrence of ``os.sep`` is replaced with ``'--'``.
#. ``'.cache'`` is appended.
rÏ   z---z--z.cache)rv   rw   Ú
splitdriver  r#   rx   )rw   Úuse_abspathr¥   r    s       r/   Úpath_to_cache_dirr°    s_   € ô �7‰7×Ñ¶{œbŸg™gŸo™o¨dÔ3ÈÓM�D€AÞØ�I‰I�c˜5Ó!ˆØ	�	‰	”"—&‘&˜$Ó€AØ‰5�8ÑÐr2   c                 ó<   • U R                  S5      (       d  U S-   $ U $ rt   )Úendswith)r.   s    r/   Úensure_slashr³  )  s   € Ø�:‰:�c�?‰?Ø�3‰wˆØ€Hr2   c                 óÆ   • S =pSU ;   a1  U R                  SS5      u  p0SU;  a  UnOUR                  SS5      u  pU(       a  [        U5      nU(       a  [        U5      nXU 4$ )NrP   r   rÏ   )Úrsplitr¤   r   )rg   ÚusernameÚpasswordr…   s       r/   Úparse_credentialsr¸  /  sh   € ØÐ€HØ
ˆfƒ}ØŸ™ s¨AÓ.‰ˆØ�fÓØ‰Hà!'§¡¨c°1Ó!5ÑˆHÞÜ˜8Ó$ˆÞÜ˜8Ó$ˆØ˜vÐ%Ð%r2   c                  ó^   • [         R                  " S5      n [         R                  " U 5        U $ )Né   )rv   Úumaskr“   s    r/   Úget_process_umaskr¼  >  s    € Ü�XŠX�d‹^€FÜ‡H‚HˆVÔØ€Mr2   c                 ór   • SnS n[        U 5       H  u  p#[        U[        5      (       a  M  Sn  O   Uc   eU$ )NTF)Ú	enumerater˜   r   )Úseqr*   rl   r.   s       r/   Úis_string_sequencerÀ  D  sB   € Ø€FØ€AÜ˜#–‰ˆÜ˜!œ\×*Ó*ØˆFÙñ ð ‰=Ðˆ=Ø€Mr2   z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z-py(\d\.?\d?)c                 ó0  • SnSn[        U 5      R                  SS5      n [        R                  U 5      nU(       a$  UR	                  S5      nU SUR                  5        n U(       am  [        U 5      [        U5      S-   :”  aR  [        R                  " [        R                  " U5      S-   U 5      nU(       a  UR                  5       nU SU XS-   S U4nUc?  [        R                  U 5      nU(       a#  UR	                  S5      UR	                  S5      U4nU$ )zk
Extract name, version, python version from a filename (no extension)

Return name, version, pyver or None
Nr[   Ú-r   z\brª   )r   r#   ÚPYTHON_VERSIONr›  rÈ   Ústartry   Úrer   Úescaper!   ÚPROJECT_NAME_AND_VERSION)ÚfilenameÚproject_namer*   Úpyverr)   Úns         r/   Úsplit_filenamerÌ  T  sï   € ð €FØ€EÜ�xÓ ×(Ñ(¨¨cÓ2€HÜ×Ñ˜hÓ'€AÞØ—‘˜“
ˆØ˜J˜QŸW™W›YÐ'ˆÞœ˜H›¬¨LÓ(9¸AÑ(=Ó=Ü�HŠH”R—Y’Y˜|Ó,¨uÑ4°hÓ?ˆÞØ—‘“ˆAØ˜b˜q�\ 8°©E¨FÐ#3°UÐ:ˆFØ�~Ü$×*Ñ*¨8Ó4ˆÞØ—W‘W˜Q“Z §¡¨£¨UÐ2ˆFØ€Mr2   z-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$c                 óÂ   • [         R                  U 5      nU(       d  [        SU -  5      eUR                  5       nUS   R	                  5       R                  5       US   4$ )z³
A utility method used to get name and version from a string.

From e.g. a Provides-Dist value.

:param p: A value in a form 'foo (1.0)'
:return: The name and version as a tuple.
z$Ill-formed name/version string: '%s'r]   Úver)ÚNAME_VERSION_REr   r   rœ  rb   r›   )r    r)   r¥   s      r/   Úparse_name_and_versionrÐ  r  sV   € ô 	×Ñ˜aÓ €AÞÜÐGÈ!ÑKÓLÐLØ	�‰‹€AØˆV‰9�?‰?Ó×"Ñ"Ó$ a¨¡hÐ.Ð.r2   c                 óä  • [        5       n[        U =(       d    / 5      n [        U=(       d    / 5      nSU ;   a  U R                  S5        X!-  nU  Hœ  nUS:X  a  UR                  U5        M  UR                  S5      (       a<  USS  nXA;  a  [        R                  SU-  5        XB;   a  UR                  U5        Ml  Mn  X1;  a  [        R                  SU-  5        UR                  U5        Mž     U$ )NÚ*rÂ  r   zundeclared extra: %s)rÔ   r  r  rc   r#  r¨  )Ú	requestedÚ	availabler*   ÚrÚunwanteds        r/   Ú
get_extrasr×  ‚  sÔ   € Ü‹U€FÜ�I—O Ó$€IÜ�I—O Ó$€IØ
ˆiÓØ×Ñ˜ÔØÑˆÛˆØ�‹8Ø�J‰J�qŽMØ�\‰\˜#×ÑØ˜˜�uˆHØÓ(Ü—‘Ð5¸Ñ@ÔAØÓ!Ø—‘˜hÖ'ñ "ð Ó!Ü—‘Ð5¸Ñ9Ô:Ø�J‰J�qŽMñ ð €Mr2   c                 ó‚  • 0 n [        U 5      nUR                  5       nUR                  S5      nUR                  S5      (       d  [        R                  SU5        U$ [        R                  " S5      " U5      n[        R                  " U5      n U$ ! [         a!  n[        R                  SX5         S nAU$ S nAff = f)NzContent-Typezapplication/jsonz(Unexpected response for JSON request: %sr«   z&Failed to get external data for %s: %s)r   r$  Úgetrc   r#  re  r·   r¸   rº   r»   r¾   Ú	exception)r`   r*   ÚrespÚheadersÚctÚreaderÚes          r/   Ú_get_external_datarà  ž  s²   € Ø€FðKô �s‹|ˆØ—)‘)“+ˆØ�[‰[˜Ó(ˆØ�}‰}Ð/×0Ñ0Ü�L‰LÐCÀRÔHð €Mô ×%Ò% gÔ.¨tÓ4ˆFô —Y’Y˜vÓ&‰Fð €Møô ó KÜ×ÑÐAÀ3×JÐJØ€MûðKús   „AB Á2B Â
B>ÂB9Â9B>z'https://www.red-dove.com/pypi/projects/c                 ór   • U S   R                  5       < SU < S3n[        [        U5      n[        U5      nU$ )Nr   ru   z/project.json©Úupperr   Ú_external_data_base_urlrà  )r]   r`   r*   s      r/   Úget_project_datarå  ¶  s2   € Ø"& q¡'§-¡-¦/³4Ð
8€CÜ
Ô)¨3Ó
/€CÜ Ó$€FØ€Mr2   c                 óv   • U S   R                  5       < SU < SU< S3n[        [        U5      n[        U5      $ )Nr   ru   z	/package-z.jsonrâ  )r]   Úversionr`   s      r/   Úget_package_datarè  ½  s0   € Ø%)¨!¡W§]¡]¦_³d»GÐ
D€CÜ
Ô)¨3Ó
/€CÜ˜cÓ"Ð"r2   c                   ó.   • \ rS rSrSrS rSS jrS rSrg)	ÚCacheiÃ  zÖ
A class implementing a cache for resources that need to live in the file system
e.g. shared libraries. This class was moved from resources to here because it
could be used by other modules, e.g. the wheel module.
c                 ót  • [         R                  R                  U5      (       d  [         R                  " U5        [         R                  " U5      R
                  S-  S:w  a  [        R                  SU5        [         R                  R                  [         R                  R                  U5      5      U l
        g)z]
Initialise an instance.

:param base: The base directory where the cache should be located.
é?   r   zDirectory '%s' is not privateN)rv   rw   r3  r©  r  rF  r#  r¨  r  Únormpathr‚   )rî   r‚   s     r/   rï   ÚCache.__init__Ê  sp   € ô �w‰w�}‰}˜T×"Ñ"Ü�KŠK˜ÔÜ�GŠG�D‹M×!Ñ! DÑ(¨QÓ.Ü�N‰NÐ<¸dÔCÜ—G‘G—O‘O¤B§G¡G×$4Ñ$4°TÓ$:Ó;ˆ�	r2   c                 ó   • [        XS9$ )z>
Converts a resource prefix to a directory name in the cache.
)r¯  )r°  )rî   r…   r¯  s      r/   Úprefix_to_dirÚCache.prefix_to_dirØ  s   € ô ! ÑAÐAr2   c                 ó*  • / n[         R                  " U R                  5       HÊ  n[         R                  R	                  U R                  U5      n [         R                  R                  U5      (       d$  [         R                  R                  U5      (       a  [         R                  " U5        MŽ  [         R                  R                  U5      (       a  [        R                  " U5        MÊ  MÌ     U$ ! [         a    UR                  U5         Mî  f = f)z
Clear the cache.
)rv   rv  r‚   rw   r&   r%  r&  r  r3  r	   rÚ   r¾   r$   )rî   Únot_removedÚfns      r/   ÚclearÚCache.clearÞ  s¸   € ð ˆÜ—*’*˜TŸY™YÖ'ˆBÜ—‘—‘˜dŸi™i¨Ó,ˆBð'Ü—7‘7—>‘> "×%Ñ%¬¯©¯©¸×);Ñ);Ü—I’I˜b–MÜ—W‘W—]‘] 2×&Ñ&Ü—M’M "Ö%ñ 'ñ (ð Ðøô ó 'Ø×"Ñ" 2×&ð'ús   ÁAC3Â1:C3Ã3DÄD©r‚   Nr~  )	rô   rù   rú   rû   Ú__doc__rï   rð  rõ  rü   rH   r2   r/   rê  rê  Ã  s   † ñò<ôBõr2   rê  c                   ó:   • \ rS rSrSrS rS
S jrS rS rS r	Sr
g	)Ú
EventMixiniï  z)
A very simple publish/subscribe system.
c                 ó   • 0 U l         g r–   ©Ú_subscribersr  s    r/   rï   ÚEventMixin.__init__ô  s
   € ØˆÕr2   c                 ó    • U R                   nX;  a  [        U/5      XA'   gXA   nU(       a  UR                  U5        gUR                  U5        g)a(  
Add a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be added (and called when the
                   event is published).
:param append: Whether to append or prepend the subscriber to an
               existing subscriber list for the event.
N)rý  r   r$   Ú
appendleft)rî   ÚeventÚ
subscriberr$   ÚsubsÚsqs         r/   r  ÚEventMixin.add÷  sE   € ð × Ñ ˆØÓÜ  Ó-ˆDŠKà‘ˆBÞØ—	‘	˜*Õ%à—‘˜jÕ)r2   c                 óh   • U R                   nX;  a  [        SU-  5      eX1   R                  U5        g)zy
Remove a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be removed.
zNo subscribers: %rN)rý  rÿ   r  )rî   r  r  r  s       r/   r  ÚEventMixin.remove  s6   € ð × Ñ ˆØÓÜÐ1°EÑ9Ó:Ð:Ø‰×Ñ˜:Õ&r2   c                 óL   • [        U R                  R                  US5      5      $ )zi
Return an iterator for the subscribers for an event.
:param event: The event to return subscribers for.
rH   )Úiterrý  rÙ  )rî   r  s     r/   Úget_subscribersÚEventMixin.get_subscribers  s"   € ô
 �D×%Ñ%×)Ñ)¨%°Ó4Ó5Ð5r2   c                 óò   • / nU R                  U5       H!  n U" U/UQ70 UD6nUR	                  U5        M#     [        R                  SXX45        U$ ! [         a    [        R                  S5        Sn NQf = f)a  
Publish a event and return a list of values returned by its
subscribers.

:param event: The event to publish.
:param args: The positional arguments to pass to the event's
             subscribers.
:param kwargs: The keyword arguments to pass to the event's
               subscribers.
z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)r
  r¾   r#  rÚ  r$   re  )rî   r  ÚargsÚkwargsr*   r  rÌ   s          r/   ÚpublishÚEventMixin.publish  sƒ   € ð ˆØ×.Ñ.¨uÖ5ˆJðÙ" 5Ð:¨4Ò:°6Ñ:�ð �M‰M˜%Ö ñ 6ô 	�‰ÐFÈÐU[ÔdØˆøô ó Ü× Ñ Ð!EÔFØ’ðús   ˜AÁ!A6Á5A6rü  Nr~  )rô   rù   rú   rû   rø  rï   r  r  r
  r  rü   rH   r2   r/   rú  rú  ï  s    † ñòô*ò(
'ò6õr2   rú  c                   ób   • \ rS rSrS rS rSS jrS rS rS r	S r
\S	 5       r\S
 5       rSrg)Ú	Sequenceri8  c                 ó>   • 0 U l         0 U l        [        5       U l        g r–   )Ú_predsÚ_succsrÔ   Ú_nodesr  s    r/   rï   ÚSequencer.__init__:  s   € ØˆŒØˆŒÜ“eˆ�r2   c                 ó:   • U R                   R                  U5        g r–   )r  r  )rî   Únodes     r/   Úadd_nodeÚSequencer.add_node?  s   € Ø�‰�‰˜Õr2   c                 ód  • XR                   ;   a  U R                   R                  U5        U(       aÿ  [        U R                  R	                  US5      5       H  nU R                  X15        M     [        U R
                  R	                  US5      5       H  nU R                  X5        M     [        U R                  R                  5       5       H  u  pVU(       a  M  U R                  U	 M     [        U R
                  R                  5       5       H  u  pVU(       a  M  U R
                  U	 M     g g )NrH   )r  r  rÔ   r  rÙ  r  rt  r¼   )rî   r  Úedgesr    r.   rÊ   rW   s          r/   Úremove_nodeÚSequencer.remove_nodeB  sÚ   € Ø—;‘;ÓØ�K‰K×Ñ˜tÔ$ÞÜ˜Ÿ™Ÿ™¨¨rÓ2Ö3�Ø—‘˜AÖ$ñ 4ä˜Ÿ™Ÿ™¨¨rÓ2Ö3�Ø—‘˜DÖ$ñ 4ô ˜TŸ[™[×.Ñ.Ó0Ö1‘�ß�qØŸ™ Ašñ 2ô ˜TŸ[™[×.Ñ.Ó0Ö1‘�ß�qØŸ™ Ašò 2ð r2   c                 óÞ   • X:w  d   eU R                   R                  U[        5       5      R                  U5        U R                  R                  U[        5       5      R                  U5        g r–   )r  Ú
setdefaultrÔ   r  r  )rî   ÚpredÚsuccs      r/   r  ÚSequencer.addR  sN   € Ø‹|Ðˆ|Ø�‰×Ñ˜t¤S£UÓ+×/Ñ/°Ô5Ø�‰×Ñ˜t¤S£UÓ+×/Ñ/°Õ5r2   c                 ó  • X:w  d   e U R                   U   nU R                  U   n UR	                  U5        UR	                  U5        g ! [         a    [        SU-  5      ef = f! [         a    [        U< SU< 35      ef = f)Nz%r not a successor of anythingz not a successor of )r  r  ÚKeyErrorrÿ   r  )rî   r"  r#  ÚpredsÚsuccss        r/   r  ÚSequencer.removeW  s’   € Ø‹|Ðˆ|ð	FØ—K‘K Ñ%ˆEØ—K‘K Ñ%ˆEð	HØ�L‰L˜ÔØ�L‰L˜Õøô	 ó 	FÜÐ=ÀÑDÓEÐEð	Fûô
 ó 	HÜ»4ÂÐFÓGÐGð	Hús   ‰A ¨"A' ÁA$Á'Bc                 ór   • XR                   ;   =(       d#    XR                  ;   =(       d    XR                  ;   $ r–   )r  r  r  )rî   Ústeps     r/   Úis_stepÚSequencer.is_stepd  s'   € ØŸ™Ñ#×Q t¯{©{Ñ':×Q¸dÇkÁkÑ>QÐRr2   c                 óØ  • U R                  U5      (       d  [        SU-  5      e/ n/ n[        5       nUR                  U5        U(       a–  UR	                  S5      nXT;   a(  XQ:w  a"  UR                  U5        UR                  U5        OOUR                  U5        UR                  U5        U R                  R                  US5      nUR                  U5        U(       a  M–  [        U5      $ )NzUnknown: %rr   rH   )r,  rÿ   rÔ   r$   r}   r  r  r  rÙ  ÚextendÚreversed)rî   Úfinalr*   ÚtodoÚseenr+  r'  s          r/   Ú	get_stepsÚSequencer.get_stepsg  s¾   € Ø�|‰|˜E×"Ñ"Ü˜]¨UÑ2Ó3Ð3ØˆØˆÜ‹uˆØ�‰�EÔÞØ—8‘8˜A“;ˆDØ‹|ð “=Ø—M‘M $Ô'Ø—M‘M $Ô'øà—‘˜”Ø—‘˜dÔ#ØŸ™Ÿ™¨¨bÓ1�Ø—‘˜EÔ"÷ ˆdô  ˜ÓÐr2   c                 óŒ   ^^^^^^^• S/m/ m0 m0 m/ mU R                   mUUUUUUU4S jmT H  nUT;  d  M  T" U5        M     T$ )Nr   c                 óÒ  >• TS   TU '   TS   TU '   TS==   S-  ss'   T
R                  U 5         TU    nU HE  nUT;  a  T" U5        [        TU    TU   5      TU '   M(  UT
;   d  M0  [        TU    TU   5      TU '   MG     TU    TU    :X  aI  / n T
R                  5       nUR                  U5        X :X  a  OM)  [	        U5      nT	R                  U5        g g ! [         a    / n N¯f = f©Nr   r   )r$   r¾   Úminr}   Útuple)r  Ú
successorsÚ	successorÚconnected_componentÚ	componentÚgraphÚindexÚindex_counterÚlowlinksr*   ÚstackÚstrongconnects        €€€€€€€r/   rD  Ú3Sequencer.strong_connections.<locals>.strongconnect‹  s  ø€ à'¨Ñ*ˆE�$‰KØ*¨1Ñ-ˆH�T‰NØ˜!Ó Ñ!ÓØ�L‰L˜Ôð Ø" 4™[�
ó (�	Ø HÓ,á! )Ô,Ü%(¨°$©¸À)Ñ9LÓ%M�H˜T“NØ %Õ'ô &)¨°$©¸¸yÑ9IÓ%J�H˜T“Nñ (ð ˜‰~  t¡Ó,Ø&(Ð#àØ %§	¡	£�IØ'×.Ñ.¨yÔ9Ø Ó(Øñ	 ô
 "Ð"5Ó6�	à—‘˜iÕ(ð -øô ó  Ø’
ð ús   ±C ÃC&Ã%C&)r  )	rî   r  r?  r@  rA  rB  r*   rC  rD  s	     @@@@@@@r/   Ústrong_connectionsÚSequencer.strong_connections€  sW   þ€ ð ˜ˆØˆØˆØˆØˆà—‘ˆ÷!	)ó !	)óF ˆDØ˜8Õ#Ù˜dÖ#ñ ð ˆr2   c           	      ó$  • S/nU R                    H5  nU R                   U   nU H  nUR                  SU< SU< S35        M     M7     U R                   H  nUR                  SU-  5        M     UR                  S5        SR                  U5      $ )Nzdigraph G {z  z -> rZ   z  %s;Ú}Ú
)r  r$   r  r&   )rî   r*   r#  r'  r"  r  s         r/   ÚdotÚSequencer.dot´  s{   € à�ˆØ—K”KˆDØ—K‘K Ñ%ˆEÛ�Ø—’«t³TÐ:Ö;ó ñ  ð —K”KˆDØ�M‰M˜' D™.Ö)ñ  à�‰�cÔØ�y‰y˜Ó Ð r2   )r  r  r  Nr}  )rô   rù   rú   rû   rï   r  r  r  r  r,  r4  ÚpropertyrF  rK  rü   rH   r2   r/   r  r  8  sP   † òò
ô'ò 6ò
HòSò ð2 ñ1ó ð1ðf ñ	!ó ó	!r2   r  )ú.tar.gzú.tar.bz2ú.tarú.zipú.tgzú.tbzú.whlc                 óâ  ^^• UU4S jn[         R                  R                  T5      m[        T5      mS nUcx  U R	                  S5      (       a  SnO_U R	                  S5      (       a  SnSnODU R	                  S5      (       a  SnS	nO)U R	                  S
5      (       a  SnSnO[        SU -  5      e US:X  a5  [        U S5      nU(       a!  UR                  5       nU H  nU" U5        M     O?[        R                  " U W5      nU(       a!  UR                  5       nU H  nU" U5        M     US:w  ao  [        R                  S   S:  aX  UR                  5        HD  n	[        U	R                  [         5      (       a  M$  U	R                  R#                  S5      U	l        MF     S n
X¥l        UR'                  T5        U(       a  UR)                  5         g g ! U(       a  UR)                  5         f f = f)Nc                 óB  >• [        U [        5      (       d  U R                  S5      n [        R                  R                  [        R                  R                  TU 5      5      nUR                  T5      (       a  UT   [        R                  :w  a  [        SU-  5      eg )Nr«   zpath outside destination: %r)
r˜   r   Údecoderv   rw   r  r&   rc   rx   rÿ   )rw   r    Údest_dirÚplens     €€r/   Ú
check_pathÚunarchive.<locals>.check_pathÊ  ss   ø€ Ü˜$¤	×*Ñ*Ø—;‘;˜wÓ'ˆDÜ�G‰G�O‰OœBŸG™GŸL™L¨°4Ó8Ó9ˆØ�|‰|˜H×%Ñ%¨¨4©´B·F±FÓ):ÜÐ;¸aÑ?Ó@Ð@ð *;r2   )rQ  rT  Úzip)rN  rR  Útgzzr:gz)rO  rS  Útbzzr:bz2rP  ÚtarrÕ  zUnknown format for %rr   rª   r«   c                 ó�   •  [         R                  " X5      $ ! [         R                   a  n[        [	        U5      5      eSnAff = f)z9Run tarfile.tar_filter, but raise the expected ValueErrorN)ÚtarfileÚ
tar_filterÚFilterErrorrÿ   Ústr)Úmemberrw   Úexcs      r/   Úextraction_filterÚ$unarchive.<locals>.extraction_filterû  s=   € ð+Ü×)Ò)¨&Ó7Ð7øÜ×&Ñ&ó +Ü ¤ S£Ó*Ð*ûð+ús   ‚ ˜A¬A Á A)rv   rw   r  ry   r²  rÿ   r   Únamelistra  r4  Úgetnamesr‘   r¶   Ú
getmembersr˜   r]   r   rW  rg  Ú
extractallrÂ   )Úarchive_filenamerX  Úformatr*  rZ  ÚarchiverK  Únamesr]   Útarinforg  rY  s    `         @r/   Ú	unarchiverr  È  s´  ù€ öAô �w‰w�‰˜xÓ(€HÜˆx‹=€DØ€GØ�~Ø×$Ñ$Ð%5×6Ñ6Ø‰FØ×&Ñ&Ð':×;Ñ;ØˆFØ‰DØ×&Ñ&Ð';×<Ñ<ØˆFØ‰DØ×&Ñ& v×.Ñ.ØˆFØ‰DäÐ4Ð7GÑGÓHÐHð'Ø�U‹?ÜÐ.°Ó4ˆGÞØ×(Ñ(Ó*�Û!�DÙ˜tÖ$ñ "øô —l’lÐ#3°TÓ:ˆGÞØ×(Ñ(Ó*�Û!�DÙ˜tÖ$ñ "à�U‹?œs×/Ñ/°Ñ2°QÓ6ð
 #×-Ñ-Ö/�Ü! '§,¡,´	×:Ó:Ø#*§<¡<×#6Ñ#6°wÓ#?�G–Lñ 0ò	+ð %6Ô!à×Ñ˜8Ô$ö Ø�M‰M�Oð øŽ7Ø�M‰M�Oð ús   Â2CG Å=>G ÇG.c                 óŒ  • [         R                  " 5       n[        U 5      n[        US5       n[        R
                  " U 5       Hb  u  pEnU HV  n[        R                  R                  XG5      nXBS n	[        R                  R                  X—5      n
UR                  XŠ5        MX     Md     SSS5        U$ ! , (       d  f       U$ = f)z*zip a directory tree into a BytesIO objectr0  N)	ÚioÚBytesIOry   r   rv   Úwalkrw   r&   rÕ   )Ú	directoryr*   ÚdlenÚzfrz   rx  rJ  r]   ÚfullÚrelr„   s              r/   Úzip_dirr|    s™   € ä�ZŠZ‹\€FÜˆy‹>€DÜ	�˜Ô	 Ü!#§¢¨Ö!3ÑˆD˜Û�Ü—w‘w—|‘| DÓ/�Ø˜5�k�Ü—w‘w—|‘| CÓ.�Ø—‘˜Ö$ó	 ñ "4÷ 
ð €M÷ 
Ô	ð €Mús   ­A=B4Â4
C)r   ÚKÚMÚGÚTÚPc                   ó€   • \ rS rSrSrSS jrS rS rS rS r	\
S 5       r\
S	 5       rS
 r\
S 5       r\
S 5       rSrg)ÚProgressi!  ÚUNKNOWNc                 ój   • Ub  X!:¼  d   eU=U l         U l        X l        S U l        SU l        SU l        g )Nr   F)r9  ÚcurÚmaxÚstartedÚelapsedÚdone)rî   ÚminvalÚmaxvals      r/   rï   ÚProgress.__init__$  s:   € Ø‰~ Ó!1Ð1Ð1Ø$Ð$ˆŒ�4”8ØŒØˆŒØˆŒØˆ�	r2   c                 óè   • U R                   U::  d   eU R                  b  XR                  ::  d   eXl        [        R                  " 5       nU R                  c  X l        g X R                  -
  U l        g r–   )r9  r‡  r†  Útimerˆ  r‰  )rî   ÚcurvalÚnows      r/   ÚupdateÚProgress.update,  sZ   € Ø�x‰x˜6Ó!Ð!Ð!Ø�x‰xÑ 6¯X©XÓ#5Ð5Ð5ØŒÜ�iŠi‹kˆØ�<‰<ÑØ�Là§¡Ñ-ˆD�Lr2   c                 óP   • US:¼  d   eU R                  U R                  U-   5        g )Nr   )r’  r†  )rî   Úincrs     r/   Ú	incrementÚProgress.increment6  s"   € Ø�q‹yÐˆyØ�‰�D—H‘H˜t‘OÕ$r2   c                 ó<   • U R                  U R                  5        U $ r–   )r’  r9  r  s    r/   rÄ  ÚProgress.start:  s   € Ø�‰�D—H‘HÔØˆr2   c                 ób   • U R                   b  U R                  U R                   5        SU l        g ©NT)r‡  r’  rŠ  r  s    r/   ÚstopÚProgress.stop>  s#   € Ø�8‰8ÑØ�K‰K˜Ÿ™Ô!Øˆ�	r2   c                 óL   • U R                   c  U R                  $ U R                   $ r–   )r‡  Úunknownr  s    r/   ÚmaximumÚProgress.maximumC  s   € à#Ÿx™xÑ/ˆt�|‰|Ð=°T·X±XÐ=r2   c                 óÈ   • U R                   (       a  SnU$ U R                  c  SnU$ SU R                  U R                  -
  -  U R                  U R                  -
  -  nSU-  nU$ )Nz100 %z ?? %g      Y@z%3d %%)rŠ  r‡  r†  r9  )rî   r*   rW   s      r/   Ú
percentageÚProgress.percentageG  sf   € à�9�9ØˆFð ˆð �X‰XÑØˆFð ˆð ˜Ÿ™ D§H¡HÑ,Ñ-°·±¸D¿H¹HÑ1DÑEˆAØ ‘\ˆFØˆr2   c                 ó¾   • US::  a  U R                   b  U R                  U R                  :X  a  SnU$ [        R                  " S[        R
                  " U5      5      nU$ )Nr   z??:??:??z%H:%M:%S)r‡  r†  r9  r�  ÚstrftimeÚgmtime)rî   Údurationr*   s      r/   Úformat_durationÚProgress.format_durationR  sM   € Ø˜‹M˜tŸx™xÑ/°4·8±8¸t¿x¹xÓ3GØˆFð
 ˆô —]’] :¬t¯{ª{¸8Ó/DÓEˆFØˆr2   c                 óŽ  • U R                   (       a  SnU R                  nOŽSnU R                  c  SnO|U R                  S:X  d  U R                  U R                  :X  a  SnOO[        U R                  U R                  -
  5      nX R                  U R                  -
  -  nUS-
  U R                  -  nU< SU R                  U5      < 3$ )NÚDonezETA rþ   r   r   z: )rŠ  r‰  r‡  r†  r9  Úfloatr©  )rî   r…   rm   s      r/   ÚETAÚProgress.ETA[  s£   € à�9�9ØˆFØ—‘‰Að ˆFØ�x‰xÑØ‘Ø—‘ Ó" t§x¡x°4·8±8Ó';Ø‘ô ˜$Ÿ(™( T§X¡XÑ-Ó.�Ø—X‘X §¡Ñ(Ñ(�Ø˜‘U˜dŸl™lÑ*�Û! 4×#7Ñ#7¸Õ#:Ð;Ð;r2   c                 ó¶   • U R                   S:X  a  SnO&U R                  U R                  -
  U R                   -  n[         H  nUS:  a    O	US-  nM     SUW4-  $ )Nr   g        iè  g     @�@z%d %sB/s)r‰  r†  r9  ÚUNITS)rî   r*   Úunits      r/   ÚspeedÚProgress.speedn  s]   € à�<‰<˜1ÓØ‰Fà—h‘h §¡Ñ)¨T¯\©\Ñ9ˆFßˆDØ˜‹}ÙØ�fÑŠFñ ð ˜V T˜NÑ*Ð*r2   )r†  rŠ  r‰  r‡  r9  rˆ  N)r   éd   )rô   rù   rú   rû   rŸ  rï   r’  r–  rÄ  rœ  rM  r   r£  r©  r®  r³  rü   rH   r2   r/   rƒ  rƒ  !  su   † Ø€Gôò.ò%òòð
 ñ>ó ð>ð ñó ðòð ñ<ó ð<ð$ ñ	+ó ó	+r2   rƒ  z\{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$c                 ó¼   • [         R                  U 5      (       a  Sn[        X-  5      e[        R                  U 5      (       a  Sn[        X-  5      e[	        U 5      $ )zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')Ú_CHECK_RECURSIVE_GLOBr›  rÿ   Ú_CHECK_MISMATCH_SETÚ_iglob)Ú	path_globr+  s     r/   r   r   „  sS   € ä×#Ñ# I×.Ñ.ØKˆÜ˜™Ó)Ð)Ü×!Ñ! )×,Ñ,ØFˆÜ˜™Ó)Ð)Ü�)ÓÐr2   c              #   ó¸  #   • [         R                  U S5      n[        U5      S:”  a[  [        U5      S:X  d   U5       eUu  p#nUR                  S5       H*  n[        SR	                  X%U45      5       H  nUv •  M	     M,     g SU ;  a  [        U 5       H  nUv •  M	     g U R                  SS5      u  p'US:X  a  SnUS:X  a  SnO"UR                  S5      nUR                  S	5      n[        R                  " U5       HX  u  phn	[        R                  R                  U5      n[        [        R                  R	                  Xg5      5       H  n
U
v •  M	     MZ     g 7f)
Nr   rª   rO   r   z**r�  rÒ  ru   Ú\)Ú	RICH_GLOBr¤   ry   r¹  r&   Ú	std_iglobr'   rv   rv  rw   rí  )rº  Úrich_path_globr…   rÔ   rƒ   Úitemrw   ÚradicalÚdirrJ  rô  s              r/   r¹  r¹  �  s-  é € Ü—_‘_ Y°Ó2€NÜ
ˆ>Ó˜QÓÜ�>Ó" aÓ'Ð7¨Ó7Ð'Ø,Ñˆ�VØ—I‘I˜c–NˆDÜ˜rŸw™w¨°fÐ'=Ó>Ö?�Ø”
ó @ò #ð �yÓ Ü! )Ö,�Ø”
ò -ð (Ÿo™o¨d°AÓ6‰OˆFØ˜‹|Ø�Ø˜"‹}Ø‘ð "Ÿ.™.¨Ó-�Ø!Ÿ.™.¨Ó.�Ü$&§G¢G¨F¦OÑ �˜5Ü—w‘w×'Ñ'¨Ó-�Ü ¤§¡§¡¨dÓ!<Ö=�BØ”Hó >ò %4ùs   ‚EE)ÚHTTPSHandlerÚmatch_hostnameÚCertificateErrorc                   ó"   • \ rS rSrSrSrS rSrg)ÚHTTPSConnectioni²  NTc                 óp  • [         R                  " U R                  U R                  4U R                  5      n[        U SS5      (       a  Xl        U R                  5         [        R                  " [        R                  5      n[        [        S5      (       a#  U=R                  [        R                  -  sl        [        U SS 5      (       a&  UR                  U R                  U R                   5        0 nU R"                  (       aS  [        R$                  Ul        UR)                  U R"                  S9  [        [        SS5      (       a  U R                  US'   UR*                  " U40 UD6U l        U R"                  (       ab  U R,                  (       aP   [/        U R                  R1                  5       U R                  5        [2        R5                  SU R                  5        g g g ! [6         aE    U R                  R9                  [         R:                  5        U R                  R=                  5         e f = f)	NÚ_tunnel_hostFÚOP_NO_SSLv2Ú	cert_file)ÚcafileÚHAS_SNIÚserver_hostnamezHost verified: %s)rã   Úcreate_connectionÚhostÚportÚtimeoutr’   ÚsockÚ_tunnelÚsslÚ
SSLContextÚPROTOCOL_SSLv23r�   ÚoptionsrÊ  Úload_cert_chainrË  Úkey_fileÚca_certsÚCERT_REQUIREDÚverify_modeÚload_verify_locationsÚwrap_socketÚcheck_domainrÄ  Úgetpeercertr#  re  rÅ  ÚshutdownÚ	SHUT_RDWRrÂ   )rî   rÓ  Úcontextr  s       r/   ÚconnectÚHTTPSConnection.connect·  sƒ  € Ü×+Ò+¨T¯Y©Y¸¿	¹	Ð,BÀDÇLÁLÓQˆDÜ�t˜^¨U×3Ñ3Ø ”	Ø—‘”ä—n’n¤S×%8Ñ%8Ó9ˆGÜ”s˜M×*Ñ*Ø—’¤3§?¡?Ñ2•Ü�t˜[¨$×/Ñ/Ø×'Ñ'¨¯©¸¿¹ÔFØˆFØ�}�}Ü&)×&7Ñ&7�Ô#Ø×-Ñ-°T·]±]Ð-ÑCÜœ3 	¨5×1Ñ1Ø04·	±	�FÐ,Ñ-à×+Ò+¨DÑ;°FÑ;ˆDŒIØ�}�} ×!2×!2ðÜ" 4§9¡9×#8Ñ#8Ó#:¸D¿I¹IÔFÜ—L‘LÐ!4°d·i±iÕ@ð "3ˆ}øô (ó Ø—I‘I×&Ñ&¤v×'7Ñ'7Ô8Ø—I‘I—O‘OÔ%Øðús   ÆAG& Ç&AH5)rÓ  )rô   rù   rú   rû   rÛ  rà  rå  rü   rH   r2   r/   rÇ  rÇ  ²  s   † ØˆØˆõ	r2   rÇ  c                   ó*   • \ rS rSrSS jrS rS rSrg)rÃ  iÓ  c                 óH   • [         R                  " U 5        Xl        X l        g r–   )ÚBaseHTTPSHandlerrï   rÛ  rà  )rî   rÛ  rà  s      r/   rï   ÚHTTPSHandler.__init__Õ  s   € Ü×%Ò% dÔ+Ø$ŒMØ ,Õr2   c                 ó‚   • [        U0 UD6nU R                  (       a"  U R                  Ul        U R                  Ul        U$ )a»  
This is called to create a connection instance. Normally you'd
pass a connection class to do_open, but it doesn't actually check for
a class, and just expects a callable. As long as we behave just as a
constructor would have, we should be OK. If it ever changes so that
we *must* pass a class, we'll create an UnsafeHTTPSConnection class
which just sets check_domain to False in the class definition, and
choose which one to pass to do_open.
)rÇ  rÛ  rà  )rî   r  r  r*   s       r/   Ú_conn_makerÚHTTPSHandler._conn_makerÚ  s8   € ô % dÐ5¨fÑ5ˆFØ�}�}Ø"&§-¡-�”Ø&*×&7Ñ&7�Ô#ØˆMr2   c                 óÄ   •  U R                  U R                  U5      $ ! [         a7  nS[        UR                  5      ;   a  [        SUR                  -  5      ee S nAff = f)Nzcertificate verify failedz*Unable to verify server certificate for %s)Údo_openrì  r   rd  ÚreasonrÅ  rÐ  )rî   rh   rß  s      r/   Ú
https_openÚHTTPSHandler.https_openê  sc   € ðØ—|‘| D×$4Ñ$4°cÓ:Ð:øÜó Ø.´#°a·h±h³-Ó?Ü*ð ,4Ø69·h±hñ,?ó @ð @ð ûðús   ‚ ž
A¨2AÁA)rÛ  rà  Nr~  )rô   rù   rú   rû   rï   rì  rñ  rü   rH   r2   r/   rÃ  rÃ  Ó  s   † ô	-ò
	õ 	r2   rÃ  c                   ó   • \ rS rSrS rSrg)ÚHTTPSOnlyHandleriý  c                 ó   • [        SU-  5      e)NzAUnexpected HTTP request on what should be a secure connection: %s)r   )rî   rh   s     r/   Ú	http_openÚHTTPSOnlyHandler.http_openÿ  s   € Üð ,Ø.1ñ2ó 3ð 3r2   rH   N)rô   rù   rú   rû   rö  rü   rH   r2   r/   rô  rô  ý  s   † õ	3r2   rô  c                   ó$   • \ rS rSrSS jrS rSrg)Ú	Transporti  c                 óN   • Xl         [        R                  R                  X5        g r–   )rÒ  r   rù  rï   ©rî   rÒ  Úuse_datetimes      r/   rï   ÚTransport.__init__	  s   € ØŒÜ×Ñ×$Ñ$ TÕ8r2   c                 óÔ   • U R                  U5      u  p#nU R                  (       a  XR                  S   :w  a#  X0l        U[        R                  " U5      4U l        U R                  S   $ r8  )Úget_host_infoÚ_connectionÚ_extra_headersr   ÚHTTPConnection)rî   rÐ  ÚhÚehÚx509s        r/   Úmake_connectionÚTransport.make_connection  s^   € Ø×(Ñ(¨Ó.‰ˆˆtØ×× 4×+;Ñ+;¸AÑ+>Ó#>Ø"$ÔØ#¤W×%;Ò%;¸AÓ%>Ð>ˆDÔØ×Ñ Ñ"Ð"r2   ©r   r  rÒ  N©r   ©rô   rù   rú   rû   rï   r  rü   rH   r2   r/   rù  rù    s   † ô9õ#r2   rù  c                   ó$   • \ rS rSrSS jrS rSrg)ÚSafeTransporti  c                 óN   • Xl         [        R                  R                  X5        g r–   )rÒ  r   r  rï   rû  s      r/   rï   ÚSafeTransport.__init__  s   € Ø"ŒLÜ×#Ñ#×,Ñ,¨TÕ@r2   c                 ó  • U R                  U5      u  p#nU(       d  0 nU R                  US'   U R                  (       a  XR                  S   :w  a%  X0l        U[        R
                  " US 40 UD64U l        U R                  S   $ )NrÒ  r   r   )rÿ  rÒ  r   r  r   rÇ  )rî   rÐ  r  r  r  s        r/   r  ÚSafeTransport.make_connection  s{   € Ø ×.Ñ.¨tÓ4‰MˆA�6ÞØ�Ø $§¡ˆF�9ÑØ×#×# t×/?Ñ/?ÀÑ/BÓ'BØ&(Ô#Ø#'¬×)@Ò)@ÀÀDÑ)SÈFÑ)SÐ#S�Ô Ø×#Ñ# AÑ&Ð&r2   r  Nr	  r
  rH   r2   r/   r  r    s   † ô	Aõ	'r2   r  c                   ó   • \ rS rSrS rSrg)ÚServerProxyi(  c                 ó  • UR                  SS 5      =U l        nUbD  [        U5      S   nUR                  SS5      nUS:X  a  [        nO[
        nU" X5S9=US'   nXpl        [        R                  R                  " X40 UD6  g )NrÒ  r   rü  Úhttps)rü  Ú	transport)
r}   rÒ  r   rÙ  r  rù  r  r   r  rï   )rî   rk   r  rÒ  rf   rü  Útclsrm   s           r/   rï   ÚServerProxy.__init__*  sƒ   € Ø!'§¡¨I°tÓ!<Ð<ˆŒ�wð Ñä˜c“] 1Ñ%ˆFØ!Ÿ:™: n°aÓ8ˆLØ˜Ó Ü$‘ä �Ù&*¨7Ñ&NÐNˆF�;Ñ !ØŒNÜ×Ñ×&Ò& tÑ;°FÓ;r2   )rÒ  r  N)rô   rù   rú   rû   rï   rü   rH   r2   r/   r  r  (  s   † õ<r2   r  c                 óh   • [         R                  S   S:  a  US-  nO
SUS'   SUS'   [        X40 UD6$ )Nr   rª   Úbr   Únewliner«   r2  )r‘   r¶   r4  )rô  rK  r  s      r/   Ú	_csv_openr  A  sD   € Ü
×Ñ˜Ñ˜QÓØ�‰‰àˆˆyÑð %ˆˆzÑÜ�Ñ#˜FÑ#Ð#r2   c                   óP   • \ rS rSr\" S5      \" S5      \" S5      S.rS rS rSrg	)
ÚCSVBaseiL  rO   Ú"rJ  )Ú	delimiterÚ	quotecharÚlineterminatorc                 ó   • U $ r–   rH   r  s    r/   Ú	__enter__ÚCSVBase.__enter__S  ó   € Øˆr2   c                 ó8   • U R                   R                  5         g r–   )r³   rÂ   )rî   r¤  s     r/   Ú__exit__ÚCSVBase.__exit__V  s   € Ø�‰×ÑÕr2   rH   N)	rô   rù   rú   rû   rd  Údefaultsr#  r'  rü   rH   r2   r/   r  r  L  s(   † á˜“XÙ˜“XÙ˜d›)ñ€Hòõr2   r  c                   ó*   • \ rS rSrS rS rS r\rSrg)Ú	CSVReaderiZ  c                 ó  • SU;   a?  US   n[         R                  S   S:¼  a  [        R                  " S5      " U5      nX l        O[        US   S5      U l        [        R                  " U R                  40 U R                  D6U l        g )Nr³   r   rª   r«   rw   rÕ  )	r‘   r¶   r·   r¸   r³   r  ÚcsvrÞ  r)  )rî   r  r³   s      r/   rï   ÚCSVReader.__init__\  sp   € Ø�vÓØ˜HÑ%ˆFÜ×Ñ Ñ" aÓ'ä×)Ò)¨'Ô2°6Ó:�Ø �Kä# F¨6¡N°CÓ8ˆDŒKÜ—j’j §¡Ñ>°·±Ñ>ˆ�r2   c                 ó   • U $ r–   rH   r  s    r/   Ú__iter__ÚCSVReader.__iter__g  r%  r2   c                 óÚ   • [        U R                  5      n[        R                  S   S:  a>  [	        U5       H/  u  p#[        U[        5      (       a  M  UR                  S5      X'   M1     U$ ©Nr   rª   r«   )ÚnextrÞ  r‘   r¶   r¾  r˜   r   rW  )rî   r*   rl   rÀ  s       r/   r4  ÚCSVReader.nextj  sX   € Ü�d—k‘kÓ"ˆÜ×Ñ˜AÑ Ó"Ü$ VÖ,‘�Ü! $¬	×2Ó2Ø $§¡¨GÓ 4�F“Iñ -ð ˆr2   )rÞ  r³   N)	rô   rù   rú   rû   rï   r0  r4  Ú__next__rü   rH   r2   r/   r+  r+  Z  s   † ò	?òòð ƒHr2   r+  c                   ó    • \ rS rSrS rS rSrg)Ú	CSVWriteriu  c                 ó†   • [        US5      U l        [        R                  " U R                  40 U R                  D6U l        g )Nr0  )r  r³   r-  Úwriterr)  )rî   rô  r  s      r/   rï   ÚCSVWriter.__init__w  s-   € Ü  CÓ(ˆŒÜ—j’j §¡Ñ>°·±Ñ>ˆ�r2   c                 óð   • [         R                  S   S:  aD  / nU H:  n[        U[        5      (       a  UR	                  S5      nUR                  U5        M<     UnU R                  R                  U5        g r3  )r‘   r¶   r˜   r   r?  r$   r:  Úwriterow)rî   ÚrowrÕ  rÀ  s       r/   r=  ÚCSVWriter.writerow{  sc   € Ü×Ñ˜AÑ Ó"ØˆAÛ�Ü˜d¤I×.Ñ.ØŸ;™; wÓ/�DØ—‘˜–ñ ð ˆCØ�‰×Ñ˜SÕ!r2   )r³   r:  N)rô   rù   rú   rû   rï   r=  rü   rH   r2   r/   r8  r8  u  s   † ò?õ"r2   r8  c                   ól   ^ • \ rS rSr\" \R                  5      rS\S'   S	U 4S jjrS rS r	S r
SrU =r$ )
ÚConfiguratori‹  Úinc_convertÚincc                 ór   >• [         [        U ]  U5        U=(       d    [        R                  " 5       U l        g r–   )ÚsuperrA  rï   rv   rÞ   r‚   )rî   Úconfigr‚   Ú	__class__s      €r/   rï   ÚConfigurator.__init__�  s$   ø€ ÜŒl˜DÑ*¨6Ô2Ø×'œBŸIšI›Kˆ�	r2   c                 ó  ^ ^• UU 4S jmUR                  S5      n[        U5      (       d  T R                  U5      nUR                  SS 5      nUR                  SS5      nU(       a"  [        U Vs/ s H  nT" U5      PM     sn5      nU Vs/ s H!  n[	        U5      (       d  M  UT" X   5      4PM#     nn[        U5      nU" U0 UD6n	U(       a+  UR                  5        H  u  p«[        XšT" U5      5        M     U	$ s  snf s  snf )Nc                 óN  >• [        U [        [        45      (       a*  [        U 5      " U  Vs/ s H  nT" U5      PM     sn5      nU$ [        U [        5      (       a3  SU ;   a  TR                  U 5      nU$ 0 nU  H  nT" X   5      X#'   M      U$ TR                  U 5      nU$ s  snf ©Nú())r˜   rt  r:  ÚtypeÚdictÚconfigure_customÚconvert)Úorl   r*   rÊ   rP  rî   s       €€r/   rP  Ú.Configurator.configure_custom.<locals>.convert–  s§   ø€ Ü˜!œd¤E˜]×+Ñ+Ü˜aœ±aÓ!8²a°¡'¨!¦*±aÑ!8Ó9�ð ˆMô ˜Aœt×$Ñ$Ø˜1“9Ø!×2Ñ2°1Ó5�Fð ˆMð  �FÛ˜Ù$+¨A©D£M˜›	ò ð ˆMð Ÿ™ a›�ØˆMùò "9s   ¬B"rL  r�  z[]rH   )r}   r™  r‡  r:  r   rN  r¼   Úsetattr)rî   rF  r¡   Úpropsr  rQ  rÊ   r¼   r  r*   rË  rW   rP  s   `           @r/   rO  ÚConfigurator.configure_custom”  sß   ù€ ö	ð �J‰J�tÓˆÜ˜�{‰{Ø—‘˜Q“ˆAØ—
‘
˜3 Ó%ˆà�z‰z˜$ Ó#ˆÞÜ©dÓ3ªd¨™' !ž*©dÑ3Ó4ˆDÙ28ÓK²&¨Q¼KÈ¿NÓ(�!‘W˜V™YÓ'Ó(±&ˆÐKÜ�e“ˆÙ�DÐ#˜FÑ#ˆÞØŸ™ž‘�Ü˜¡7¨1£:Ö.ñ &àˆùò 4ùÚKs   Á0C>ÂDÂ%Dc                 óš   • U R                   U   n[        U[        5      (       a&  SU;   a   U R                  U5      =U R                   U'   nU$ rK  )rF  r˜   rN  rO  )rî   r§   r*   s      r/   Ú__getitem__ÚConfigurator.__getitem__´  sF   € Ø—‘˜SÑ!ˆÜ�fœd×#Ñ#¨°«Ø(,×(=Ñ(=¸fÓ(EÐEˆD�K‰K˜Ñ˜vØˆr2   c                 ó0  • [         R                  R                  U5      (       d*  [         R                  R                  U R                  U5      n[
        R                  " USSS9 n[        R                  " U5      nSSS5        U$ ! , (       d  f       W$ = f)z*Default converter for the inc:// protocol.rÕ  r«   r1  N)	rv   rw   Úisabsr&   r‚   r·   r4  rº   r»   )rî   rÌ   r;  r*   s       r/   rB  ÚConfigurator.inc_convertº  sd   € ä�w‰w�}‰}˜U×#Ñ#Ü—G‘G—L‘L §¡¨EÓ2ˆEÜ�[Š[˜ ¨gÒ6¸!Ü—Y’Y˜q“\ˆF÷ 7àˆ÷ 7Ô6àˆús   Á%BÂ
Br÷  r–   )rô   rù   rú   rû   rN  r   Úvalue_convertersrï   rO  rW  rB  rü   Ú__classcell__)rG  s   @r/   rA  rA  ‹  s:   ø† áÐ,×=Ñ=Ó>ÐØ+Ð�UÑ÷(òò@÷ð r2   rA  c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	ÚSubprocessMixiniÃ  z;
Mixin for running subprocesses and capturing their output
Nc                 ó   • Xl         X l        g r–   )ÚverboseÚprogress)rî   ra  rb  s      r/   rï   ÚSubprocessMixin.__init__È  s   € ØŒØ �r2   c                 óˆ  • U R                   nU R                  n UR                  5       nU(       d  O�Ub	  U" XR5        OsU(       d   [        R                  R                  S5        O.[        R                  R                  UR                  S5      5        [        R                  R                  5         M™  UR                  5         g)z�
Read lines from a subprocess' output stream and either pass to a progress
callable (if specified) or write progress information to sys.stderr.
Nr�  r«   )	rb  ra  Úreadliner‘   ÚstderrrÕ   rW  ÚflushrÂ   )rî   r³   rä  rb  ra  r.   s         r/   rÞ  ÚSubprocessMixin.readerÌ  s‰   € ð
 —=‘=ˆØ—,‘,ˆØØ—‘Ó!ˆAÞØØÑ#Ù˜Õ$æÜ—J‘J×$Ñ$ SÕ)ä—J‘J×$Ñ$ Q§X¡X¨gÓ%6Ô7Ü—
‘
× Ñ Ô"ñ ð 	�‰�r2   c                 ó`  • [         R                  " U4[         R                  [         R                  S.UD6n[        R                  " U R
                  UR                  S4S9nUR                  5         [        R                  " U R
                  UR                  S4S9nUR                  5         UR                  5         UR                  5         UR                  5         U R                  b  U R                  SS5        U$ U R                  (       a  [        R                  R                  S5        U$ )N)Ústdoutrf  rj  )r  r  rf  zdone.Úmainzdone.
)Ú
subprocessÚPopenÚPIPEÚ	threadingÚThreadrÞ  rj  rÄ  rf  Úwaitr&   rb  ra  r‘   rÕ   )rî   Úcmdr  r    Út1Út2s         r/   Úrun_commandÚSubprocessMixin.run_commandá  sÑ   € Ü×Ò˜SÐ[¬¯©ÄÇÁÑ[ÐTZÑ[ˆÜ×Ò T§[¡[¸¿¹À(Ð7KÑLˆØ
�‰Œ
Ü×Ò T§[¡[¸¿¹À(Ð7KÑLˆØ
�‰Œ
Ø	�‰ŒØ
�‰Œ	Ø
�‰Œ	Ø�=‰=Ñ$Ø�M‰M˜' 6Ô*ð ˆð �\�\Ü�J‰J×Ñ˜YÔ'Øˆr2   )rb  ra  )FN)	rô   rù   rú   rû   rø  rï   rÞ  ru  rü   rH   r2   r/   r_  r_  Ã  s   † ñô!òõ*r2   r_  c                 óN   • [         R                  " SSU 5      R                  5       $ )z,Normalize a python package name a la PEP 503z[-_.]+rÂ  )rÅ  Úsubr›   )r]   s    r/   Únormalize_namery  ñ  s    € ô �6Š6�(˜C Ó&×,Ñ,Ó.Ð.r2   c                   ó2   • \ rS rSrSrSrS	S jrS rS rSr	g)
Ú
PyPIRCFilei  zhttps://upload.pypi.org/legacy/ÚpypiNc                 óœ   • Uc=  [         R                  R                  [         R                  R                  S5      S5      nXl        X l        g )Nr£  z.pypirc)rv   rw   r&   r§  rÈ  r`   )rî   rô  r`   s      r/   rï   ÚPyPIRCFile.__init__  s4   € Ø‰:Ü—‘—‘œbŸg™g×0Ñ0°Ó5°yÓAˆBØŒØ�r2   c                 ó`  • 0 n[         R                  R                  U R                  5      (       Ga÷  U R                  =(       d    U R
                  n[        R                  " 5       nUR                  U R                  5        UR                  5       nSU;   Ga!  UR                  SS5      nUR                  S5       Vs/ s H(  ofR                  5       S:w  d  M  UR                  5       PM*     nnU/ :X  a  SU;   a  S/nU$ U H±  nSU0nUR                  US5      US'   SU R
                  4S	U R                  4S
4 H4  u  p‰UR                  Xh5      (       a  UR                  Xh5      X'   M0  X‘U'   M6     US:X  a"  X R
                  S4;   a  U R
                  US'   M™  US   U:w  d  M¤  US   U:w  d  M¯  0 nM³      U$ SU;   aj  SnUR                  US5      (       a  UR                  US5      nOU R
                  nUR                  US5      UR                  US5      UUU R                  S.nU$ s  snf )NÚ	distutilszindex-serversrJ  r   r|  Úserverr¶  Ú
repositoryÚrealm)r·  Nzserver-loginr·  )r¶  r·  r‚  r�  rƒ  )rv   rw   r  rÈ  r`   ÚDEFAULT_REPOSITORYr   ÚRawConfigParserr¹   rÅ   rÙ  r¤   rb   ÚDEFAULT_REALMÚ
has_option)
rî   r*   r‚  rF  rÅ   Úindex_serversr�  Ú_serversr§   rŸ   s
             r/   r¹   ÚPyPIRCFile.read  s  € Øˆä�7‰7�>‰>˜$Ÿ-™-×(Ò(ØŸ™×< T×%<Ñ%<ˆJä!×1Ò1Ó3ˆFØ�K‰K˜Ÿ™Ô&Ø—‘Ó(ˆHØ˜hÔ&à &§
¡
¨;¸Ó H�Ø9F×9LÑ9LÈTÔ9RÓkÒ9R¨v×VbÑVbÓVdÐhjÑVj›N˜FŸL™LžNÑ9R�ÐkØ˜r“>à Ó)Ø$* 8˜ðF ˆóC #+˜Ø"*¨FÐ!3˜Ø-3¯Z©Z¸À
Ó-K˜˜zÑ*ð /;¸D×<SÑ<SÐ-TÐW^Ð`d×`rÑ`rÐVsØ-?ó-A™L˜Cà%×0Ñ0°×=Ñ=Ø.4¯j©j¸Ó.E £à.5 s£ñ-Að # fÓ,°×@WÑ@WÐY_Ð?`Ó1`Ø37×3JÑ3J˜F <Ó0Ø$ XÑ.°*Õ<ÀÈÑAUÐYcÕAcØ%'šFò% #+ðB ˆð   8Ó+à'�Ø×$Ñ$ V¨\×:Ñ:Ø!'§¡¨F°LÓ!A‘Jà!%×!8Ñ!8�Jà &§
¡
¨6°:Ó >Ø &§
¡
¨6°:Ó >Ø",Ø$Ø!×/Ñ/ñ�ð ˆùòO ls   Â=H+ÃH+c                 óp  • [         R                  " 5       nU R                  nUR                  U5        UR	                  S5      (       d  UR                  S5        UR                  SSU5        UR                  SSU5        [        US5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nr|  r¶  r·  r0  )	r   r…  rÈ  r¹   Úhas_sectionrÑ   rÔ   r4  rÕ   )rî   r¶  r·  rF  rô  r;  s         r/   r’  ÚPyPIRCFile.updateB  sƒ   € ä×-Ò-Ó/ˆØ�]‰]ˆØ�‰�BŒØ×!Ñ! &×)Ñ)Ø×Ñ˜vÔ&Ø�
‰
�6˜: xÔ0Ø�
‰
�6˜: xÔ0Ü�"�cŒ]˜aØ�L‰L˜ŒO÷ �]Ž]ús   ÂB'Â'
B5)rÈ  r`   ©NN)
rô   rù   rú   rû   r„  r†  rï   r¹   r’  rü   rH   r2   r/   r{  r{    s   † à:ÐØ€Môò3õj
r2   r{  c                 óD   • [        U R                  S9R                  5       $ )z?
Read the PyPI access configuration as supported by distutils.
)r`   )r{  r`   r¹   ©r@  s    r/   Ú_load_pypircr‘  O  s   € ô ˜%Ÿ)™)Ñ$×)Ñ)Ó+Ð+r2   c                 ó`   • [        5       R                  U R                  U R                  5        g r–   )r{  r’  r¶  r·  r�  s    r/   Ú_store_pypircr“  V  s   € ÜƒL×Ñ˜Ÿ™¨¯©Õ7r2   c                  óÞ  • [         R                  S:X  ay  S[        R                  R	                  5       ;   a  gS[        R                  R	                  5       ;   a  gS[        R                  R	                  5       ;   a  g[        R
                  $ S[         R                  ;   a  [         R                  S   $ [         R                  S	:w  d  [        [         S
5      (       d  [        R
                  $ [         R                  " 5       u  pp#nU R	                  5       R                  SS5      n UR                  SS5      R                  SS5      nU SS S:X  a	  U < SU< 3$ U SS S:X  aC  US   S:¼  a9  Sn S[        US   5      S-
  USS 4-  nSSS.nUSU[        R                     -  -  nO§U SS S:X  a  SSKJn  U" 5       $ U SS  S!:X  aP  S!n [        R                  " S"[        R                   5      nUR#                  U5      nU(       a  UR%                  5       nO8U SS  S#:X  a/  SSKn	 SS$KJn
  U	R/                  U
R1                  5       XU5      u  pnU < SU< SU< 3$ ! [,         a    SSKn
 NAf = f)%aÂ  Return a string that identifies the current platform.  This is used mainly to
distinguish platform-specific build directories and platform-specific built
distributions.  Typically includes the OS name and version and the
architecture (as supplied by 'os.uname()'), although the exact information
included depends on the OS; eg. on Linux, the kernel version isn't
particularly important.

Examples of returned values:
   linux-i586
   linux-alpha (?)
   solaris-2.6-sun4u

Windows will return one of:
   win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
   win32 (all others - specifically, sys.platform is returned)

For other non-POSIX platforms, currently just returns 'sys.platform'.

r¡  Úamd64ú	win-amd64z(arm)ú	win-arm32z(arm64)z	win-arm64Ú_PYTHON_HOST_PLATFORMrC  Úunameru   r   r[   rn   rÂ  Né   ÚlinuxÚsunosr   Ú5Úsolarisz%d.%srª   é   Ú32bitÚ64bit)iÿÿÿl   ÿÿÿÿ z.%sÚaix)Úaix_platformé   Úcygwinz[\d.]+Údarwin)Ú	sysconfig)rv   r]   r‘   rç  r›   Úplatformr¥  r�   r™  r#   ÚintÚmaxsizeÚ_aix_supportr£  rÅ  rY  ÚASCIIr   rÈ   Ú_osx_supportr€  r§  ÚImportErrorÚget_platform_osxÚget_config_vars)ÚosnamerÐ  Úreleaserç  ÚmachineÚbitnessr£  Úrel_rer)   r­  r§  s              r/   Úget_host_platformr¶  `  s,  € ô( 
‡w�w�$ƒØ”c—k‘k×'Ñ'Ó)Ó)ØØ”c—k‘k×'Ñ'Ó)Ó)ØØœŸ™×)Ñ)Ó+Ó+ØÜ�|‰|Ðð ¤"§*¡*Ó,Ü�z‰zÐ1Ñ2Ð2ä	‡w�w�'Ó¤¬¨W×!5Ñ!5ô �|‰|Ðô 13·²³
Ñ-€V�7 Wð �\‰\‹^×#Ñ# C¨Ó,€FØ�o‰o˜c 3Ó'×/Ñ/°°SÓ9€Gàˆbˆq€z�WÓó !¢'Ð*Ð*à	��ˆ�wÓ	Ø�1‰:˜ÓØˆFØ¤ W¨Q¡Z£°1Ñ!4°g¸a¸b°kÐ BÑBˆGð $+ÀÑIˆGØ�u˜w¤s§{¡{Ñ3Ñ3Ñ3ˆGøà	��ˆ�uÓ	Ý-Ù‹~ÐØ	��ˆ�xÓ	ØˆÜ—’˜I¤r§x¡xÓ0ˆØ�L‰L˜Ó!ˆÞØ—g‘g“iˆGøØ	��ˆ�xÓ	Ûð	Ý+ð $0×#@Ñ#@À×AZÑAZÓA\Ð^dÐovÓ#wÑ ˆ˜ã£ª'Ð2Ð2øô	 ó 	Ýð	ús   È$I ÉI,É+I,Úwin32r–  r—  )Úx86Úx64Úarmc                  ó¶   • [         R                  S:w  a
  [        5       $ [         R                  R	                  S5      n U [
        ;  a
  [        5       $ [
        U    $ )Nr¡  ÚVSCMD_ARG_TGT_ARCH)rv   r]   r¶  r¥  rÙ  Ú_TARGET_TO_PLAT)Úcross_compilation_targets    r/   Úget_platformr¿  º  sG   € Ü	‡w�w�$ƒÜ Ó"Ð"Ü!Ÿz™zŸ~™~Ð.BÓCÐØ¤Ó6Ü Ó"Ð"ÜÐ3Ñ4Ð4r2   rŽ  )é   r–   r~  r›  )…r·   Úcollectionsr   Ú
contextlibr-  Úglobr   r¾  rt  rº   Úloggingrv   rW  rÅ  rã   rÕ  r®  rl  r‘   ra  rØ   rÃ   ro  Údummy_threadingr�  r   r   Úcompatr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	getLoggerrô   r#  rY  r   rT   rS   r;   rF   rA   re   r%   rJ   rq   rŒ   r”   r™   r¢   r¨   rÍ   rÖ   ÚcontextmanagerrÜ   rß   rè   rò   rê   r  r  r‡  r‰  ÚVERBOSErš  r½   r¬  r°  r³  r¸  r¼  rÀ  ÚIrÇ  rÃ  rÌ  rÏ  rÐ  r×  rà  rä  rå  rè  rê  rú  r  ÚARCHIVE_EXTENSIONSrr  r|  r±  rƒ  r½  r·  r¸  r¹  rÃ  ré  rÄ  rÅ  rÇ  rô  rù  r  r  r  r  r+  r8  rA  r_  ry  r{  r‘  r“  r¶  r½  r¿  rH   r2   r/   Ú<module>rÌ     s  ðó
 Ý Û Û 
Ý #Û 	Û Û Û 	Û Û 	Û ðÛó Û 
Û Û Û ð(Ûó å ÷2÷ 2÷ 2÷ 2÷ 2ó 2ð 
×	Ò	˜8Ó	$€ð �ZŠZÐ)Ó*€
Ø—Z’ZÐ 3Ó4Ð Ø�ZŠZÐ5Ó6€
Ø�JŠJÐDÓE€	Ø‡Z‚Z�Ó€Ø‡j‚j�Ó€Ø�JŠJ�{Ó#€	Ø�zŠzÐEÓF€òW!òtytòxò4òô$ò ò,ò^ð& ×Ññó ðð ×Ññó ðð ×Ñó&ó ð&ô�fô ò  ô6w�6ô wòtô�&ô ð4 �:Š:ðð Ÿ:™:ó	'€òô>&(ôRò"ò&òòð Ÿ:š:ð '8Ø9;¿¹ó?Ð à—’Ð,Ó-€ôð4 —*’*ð 9ó :€ò/ò ò8ð* DÐ òò#ô)ˆFô )ôXC�ô CôRF!�ô F!ðZ UÐ ôAòHð$ 	&€ôW+ˆvô W+ð| �JŠJ�~Ó&€	ØŸ
š
Ð#?Ó@Ð Ø—j’jÐ!5Ó6Ð òòö8 ß\Ñ\ô˜'×1Ñ1ô ôBÐ'ô ôT3˜<¨ô 3ô#�	×#Ñ#ô #ö ô'˜	×/Ñ/ô 'ô"<�)×'Ñ'ô <ò2$ôˆfô ô�ô ô6"�ô "ô,5Ð#ô 5ôp+�fô +ò\/ô"J�ô JòZ,ò8òP3ðh ØØñ€ó5øðO= ó Ø
ƒCðûð ó (Þ'ð(ús#   ¶N ÁN ÎNÎNÎ
N#Î"N#