+
    êhk�  ã                  ó€  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t, ^ RI-H.t. ^R	I/H0t0H1t1 ^ R
I2H3t3 ^ RI4H5t5 ]Pl                  ! R4      t7]Pl                  ! R]Pp                  4      t9]Pl                  ! R4      t:]Pl                  ! R]Pp                  4      Pv                  t<RP{                  4       t>. R1Ot?^t@R]P‚                   R]P„                  P†                   R]P„                  Pˆ                   2tER tFR tGR tHR2R ltIR2R ltJR2R ltKR]#R3R ltLR tM]Pl                  ! R]Pp                  4      tN ]MR 4       tO ! R R 4      tP ! R! R"]P4      tQ ! R# R]%4      tR]Pl                  ! R$4      P¦                  tTR% tUR& tVR3R' ltWR( tX ! R) R*]4      tY ! R+ R,]P´                  4      t[]P¸                  Pº                  3R- lt^R. t_]W! ]@4      ! ]^4      t^R/ t`R0 taR# )4z$PyPI and direct package downloading.)ÚannotationsN)Ú	translate©Úwraps)Ú
NamedTuple©Úunique_everseen)ÚBINARY_DISTÚCHECKOUT_DISTÚDEVELOP_DISTÚEGG_DISTÚSOURCE_DISTÚDistributionÚEnvironmentÚRequirementÚfind_distributionsÚnormalize_pathÚparse_versionÚ	safe_nameÚsafe_versionÚto_filename)ÚWheel)Ú_cfg_read_utf8_with_fallbackÚ_read_utf8_with_fallback)Úlog)ÚDistutilsErrorz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)zƒ<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgzÚPackageIndexzsetuptools/z Python-urllib/Ú.c                óv   €  \         P                  ! V 4      #   \         d   p\        R T : 24      ThRp?ii ; i)z/Not a URL, existing file, or requirement spec: N)r   ÚparseÚ
ValueErrorr   )ÚspecÚes   & Ú:/usr/lib/python3/dist-packages/setuptools/package_index.pyÚparse_requirement_argr$   H   sB   € ðÜ× Ò  Ó&Ð&øÜô ÜØ=¸d¹XÐFó
àð	ûðús   ‚ ˜8£3³8c                óp  € V P                  4       pRRRrCpVP                  R4      '       dˆ   VP                  R4      '       d	   V RR	 pRpMhVP                  RR
4      '       d   V RR pV RR
 pRpMCVP                  R4      '       d	   V RR pRpM$VP                  RR4      '       d   V RR pV RR pRpW#V3# )z=Return (base,pyversion) or (None,None) for possible .exe nameNú.exez
.win32.exeÚwin32z	.win32-pyz.win-amd64.exez	win-amd64z.win-amd64-pyiöÿÿÿiðÿÿÿiùÿÿÿéüÿÿÿiòÿÿÿiìÿÿÿ)ÚlowerÚendswithÚ
startswith)Únamer)   ÚbaseÚpy_verÚplats   &    r#   Úparse_bdist_wininstr0   Q   sÏ   € ð �J‰J‹L€EØ˜t T�$€Dà‡~�~�f×ÒØ�>‰>˜,×'Ò'Ø˜˜�:ˆDØ‰DØ×Ñ˜k¨3×/Ò/Ø˜"˜R�[ˆFØ˜˜�:ˆDØ‰DØ�^‰^Ð,×-Ò-Ø˜˜�:ˆDØ‰DØ×Ñ˜o¨s×3Ò3Ø˜"˜R�[ˆFØ˜˜�:ˆDØˆDØ˜ÐÐó    c                óx  € \         P                  P                  V 4      pVw  r#rErg\         P                  P                  VP	                  R 4      R,          4      pVR8X  d=   VR8X  d6   \         P                  P                  VP	                  R 4      R,          4      pRV9   d   VP	                  R^4      w  r‡W‡3# )Ú/zsourceforge.netÚdownloadÚ#éÿÿÿÿéþÿÿÿ)Úurllibr   ÚurlparseÚunquoteÚsplit)	ÚurlÚpartsÚ_schemeÚserverÚpathÚ_parametersÚ_queryÚfragmentr-   s	   &        r#   Úegg_info_for_urlrD   i   s•   € Ü�L‰L×!Ñ! #Ó&€EØ;@Ñ8€G�T¨Ü�<‰<×Ñ §
¡
¨3£°Õ 3Ó4€DØÐ"Ô" t¨zÔ'9Ü�|‰|×#Ñ# D§J¡J¨s£O°BÕ$7Ó8ˆØ
ˆd„{ØŸ™ C¨Ó+‰ˆØˆ>Ðr1   c              #  óü   "  € \        V 4      w  r#\        WV4       Rj  x€L
  V'       dK   \        P                  V4      pV'       d,   \	        WP                  ^4      V\        R7       Rj  x€L
  R# R# R#  LX L5i)zEYield egg or source distribution objects that might be found at a URLN)Ú
precedence)rD   Údistros_for_locationÚEGG_FRAGMENTÚmatchÚinterpret_distro_nameÚgroupr
   )r<   Úmetadatar-   rC   rI   s   &&   r#   Údistros_for_urlrM   t   sl   é € ä% cÓ*�N€DÜ# C¨xÓ8×8Ð8ßÜ×"Ñ" 8Ó,ˆßÜ,Ø—[‘[ “^ X¼-ô÷ ò ñ ñ ñ 9ñùs,   ‚A<ŸA8 A<¬A<Á	$A<Á-A:Á.A<Á:A<c                ó‚  € VP                  R4      '       d   VRR pVP                  R4      '       d    RV9   d   \        P                  ! WV4      .# VP                  R4      '       dZ   RV9   dS   \        V4      pVP	                  4       '       g   . # \        V VP
                  VP                  \        ^,           R7      .# VP                  R4      '       d%   \        V4      w  rEpVe   \        WW%\        V4      # \         F7  pVP                  V4      '       g   K  VR\        V4      )  p\        WV4      u # 	  . # )	z:Yield egg or source distribution objects based on basenamez.egg.zipNú.eggÚ-z.whl)ÚlocationÚproject_nameÚversionrF   r&   r(   )r*   r   Úfrom_locationr   Úis_compatiblerR   rS   r   r0   rJ   r	   Ú
EXTENSIONSÚlen)rQ   ÚbasenamerL   ÚwheelÚwin_baser.   ÚplatformÚexts   &&&     r#   rG   rG   €   s,  € à×Ñ˜×$Ò$Ø˜C˜R�=ˆØ×Ñ˜× Ò  S¨H¤_ä×*Ò*¨8¸xÓHÐIÐIØ×Ñ˜× Ò  S¨H¤_Ü�h“ˆØ×"Ñ"×$Ò$ØˆIäØ!Ø"×/Ñ/ØŸ™ä# a�<ôð
ð 	
ð ×Ñ˜× Ò Ü%8¸Ó%BÑ"ˆ˜(ØÒÜ(Ø H´kÀ8óð ÷
 ˆØ×Ñ˜S×!Ô!Ø ¤3 s£8 )Ð,ˆHÜ(¨¸XÓFÒFñ ð €Ir1   c                óh   € \        \        V 4      \        P                  P	                  V 4      V4      # )zEYield possible egg or source distribution objects based on a filename)rG   r   Úosr@   rX   )ÚfilenamerL   s   &&r#   Údistros_for_filenamer`   £   s*   € äÜ�xÓ ¤"§'¡'×"2Ñ"2°8Ó"<¸hóð r1   c           
   #  óØ  "  € VP                  R4      pV'       gK   \        ;QJ d#    R VR,           4       F  '       g   K   RM	  RM! R VR,           4       4      '       d   R# \        \        V4      4       F(  pWg,          R,          P	                  4       '       g   K(   M	  \        V4      p\        V VRP                  VRV 4      RP                  WgR 4      VVVR7      x € R# 5i)	z¿Generate the interpretation of a source distro name

Note: if `location` is a filesystem filename, you should call
``pkg_resources.normalize_path()`` on it before passing it to this
routine!
rP   c              3  óP   "  € T F  p\         P                  ! R V4      x € K  	  R# 5i)z	py\d\.\d$N)ÚrerI   )Ú.0Úps   & r#   Ú	<genexpr>Ú(interpret_distro_name.<locals>.<genexpr>µ   s   é € ÐKÁ¸AœbŸhšh |°Q×7Ð7Ãùs   ‚$&:é   NNTFN:Né   N)Ú
py_versionrF   r[   )r;   ÚanyÚrangerW   Úisdigitr   Újoin)rQ   rX   rL   rj   rF   r[   r=   re   s   &&&&&&  r#   rJ   rJ   ª   s¹   é € ð �N‰N˜3Ó€EßŸ#›#ÑKÀÀrÆÓKŸ#Ÿ#š#ÑKÀÀrÆÓK×KÒKáô ”3�u“:ÖˆØ�8�B�<×Ñ×!Ô!Ùñ ô �‹Jˆä
ØØØ�‰��r˜�ÓØ�‰��r�ÓØØØôô ùs   ‚$C*§C*Á!C*Á$9C*Â"AC*c                ó0   a € \        S 4      V 3R l4       pV# )zg
Wrap a function returning an iterable such that the resulting iterable
only ever yields unique items.
c                 ó&   <€ \        S! V / VB 4      # ©Nr   )ÚargsÚkwargsÚfuncs   *,€r#   ÚwrapperÚunique_values.<locals>.wrapperÒ   s   ø€ ä™t TÐ4¨VÑ4Ó5Ð5r1   r   )rt   ru   s   f r#   Úunique_valuesrw   Ì   s"   ø€ ô ˆ4ƒ[ô6ó ð6ð €Nr1   z3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>c           
   #  ó®  "  € \         P                  V4       F»  pVP                  4       w  r4\        \	        \
        P                  VP                  4       P                  R4      4      4      pRV9   g
   RV9   g   Ke  \        P                  V4       F=  p\        P                  P                  V \        VP                  ^4      4      4      x € K?  	  K½  	  R Fv  pVP                  V4      pVR8w  g   K  \        P!                  W4      pV'       g   K<  \        P                  P                  V \        VP                  ^4      4      4      x € Kx  	  R# 5i)zEFind rel="homepage" and rel="download" links in `page`, yielding URLsÚ,Úhomepager4   N)z<th>Home Pagez<th>Download URLr6   )ÚRELÚfinditerÚgroupsÚsetÚmapÚstrÚstripr)   r;   ÚHREFr8   r   ÚurljoinÚ
htmldecoderK   ÚfindÚsearch)r<   ÚpagerI   ÚtagÚrelÚrelsÚposs   &&     r#   Úfind_external_linksrŒ   ß   sê   é € ô —‘˜dÖ#ˆØ—<‘<“>‰ˆÜ”3”s—y‘y #§)¡)£+×"3Ñ"3°CÓ"8Ó9Ó:ˆØ˜Ô ¨tÖ!3ÜŸ™ sÖ+�Ü—l‘l×*Ñ*¨3´
¸5¿;¹;Àq»>Ó0JÓKÔKó ,ñ	 $ó 5ˆØ�i‰i˜‹nˆØ�"Ž9Ü—K‘K Ó*ˆEß‰uÜ—l‘l×*Ñ*¨3´
¸5¿;¹;Àq»>Ó0JÓKÔKó 5ùs   ‚A6EÁ=A4EÃ6EÄA Ec                  ó,   € ] tR t^òtRtR tR tR tRtR# )ÚContentCheckerzH
A null content checker that defines the interface for checking content
c                ó   € R# )z#
Feed a block of data to the hash.
N© ©ÚselfÚblocks   &&r#   ÚfeedÚContentChecker.feed÷   s   € ñ 	r1   c                ó   € R# )z3
Check the hash. Return False if validation fails.
Tr�   ©r’   s   &r#   Úis_validÚContentChecker.is_validý   s   € ñ r1   c                ó   € R# )z]
Call reporter with information about the checker (hash name)
substituted into the template.
Nr�   )r’   ÚreporterÚtemplates   &&&r#   ÚreportÚContentChecker.report  s   € ñ
 	r1   r�   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r”   r˜   r�   Ú__static_attributes__r�   r1   r#   rŽ   rŽ   ò   s   † ñòòör1   rŽ   c                  óh   € ] tR tRt]P
                  ! R4      tR R lt]R 4       t	R t
R tR tR	tR
# )ÚHashCheckeri  zK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c               ó   € V ^8„  d   QhRR/# ©rh   ÚreturnÚNoner�   )Úformats   "r#   Ú__annotate__ÚHashChecker.__annotate__  s   € ÷ !ñ !¨tñ !r1   c                	óT   € Wn         \        P                  ! V4      V n        W n        R # rq   )Ú	hash_nameÚhashlibÚnewÚhashÚexpected)r’   r¯   r³   s   &&&r#   Ú__init__ÚHashChecker.__init__  s   € Ø"ŒÜ—K’K 	Ó*ˆŒ	Ø Žr1   c                óø   € \         P                  P                  V4      R,          pV'       g   \        4       # V P                  P                  V4      pV'       g   \        4       # V ! R/ VP                  4       B # )z5Construct a (possibly null) ContentChecker from a URLr6   r�   )r8   r   r9   rŽ   Úpatternr†   Ú	groupdict)Úclsr<   rC   rI   s   &&  r#   Úfrom_urlÚHashChecker.from_url  s^   € ô —<‘<×(Ñ(¨Ó-¨bÕ1ˆßÜ!Ó#Ð#Ø—‘×"Ñ" 8Ó,ˆßÜ!Ó#Ð#ÙÑ'�U—_‘_Ó&Ñ'Ð'r1   c                	ó<   € V P                   P                  V4       R # rq   )r²   Úupdater‘   s   &&r#   r”   ÚHashChecker.feed!  s   € Ø�	‰	×Ñ˜Ör1   c                	óP   € V P                   P                  4       V P                  8H  # rq   )r²   Ú	hexdigestr³   r—   s   &r#   r˜   ÚHashChecker.is_valid$  s   € Ø�y‰y×"Ñ"Ó$¨¯©Ñ5Ð5r1   c                	ó6   € W P                   ,          pV! V4      # rq   )r¯   )r’   r›   rœ   Úmsgs   &&& r#   r�   ÚHashChecker.report'  s   € ØŸ™Õ'ˆÙ˜‹}Ðr1   )r³   r²   r¯   N)rŸ   r    r¡   r¢   rc   Úcompiler·   r´   Úclassmethodrº   r”   r˜   r�   r¤   r�   r1   r#   r¦   r¦     s=   † Ø�jŠjð	#ó€Gõ
!ð
 ñ(ó ð(ò ò6ör1   r¦   c                  óÒ  a € ] tR tRtRtR=R V 3R llltV 3R ltR>R R lltR>R R	 lltR>R
 R llt	R R lt
R R ltR tR tR R ltR?R R lltR R ltR?V 3R lltR R ltR R ltR tR R ltR  tR@R! R" lltRAR# R$ lltR% tR&tR' tR( R) ltR?R* lt]R+ 4       t] R, 4       t!R- t"]R. 4       t#R/ t$R0 t%R1 R2 lt&R3 t'R4 t(]R5 4       t)R6 R7 lt*R8 R9 lt+R: R; lt,R<t-V ;t.# )Br   i,  z;A distribution index that scans web pages for download URLsc               ó$   € V ^8„  d   QhRRRRRR/# )rh   Ú	index_urlr€   Ú
verify_sslÚboolr©   rª   r�   )r«   s   "r#   r¬   ÚPackageIndex.__annotate__/  s(   € ÷ -ñ -àð-ð
 ð-ð 
ñ-r1   c                	ól  <€ \         SV `  ! V/ VB  VR RVP                  R 4      '       *  ,           V n        / V n        / V n        / V n        \        P                  ! RP                  \        \        V4      4      4      P                  V n        . V n        \        P                   P"                  V n        R# )r3   NÚ|)Úsuperr´   r*   rÉ   Úscanned_urlsÚfetched_urlsÚpackage_pagesrc   rÅ   rn   r   r   rI   ÚallowsÚto_scanr8   ÚrequestÚurlopenÚopener)r’   rÉ   ÚhostsÚ	ca_bundlerÊ   rr   ÚkwÚ	__class__s   &&&&&*,€r#   r´   ÚPackageIndex.__init__/  s�   ø€ ô 	‰Ò˜$Ð% "Ò%Ø" SÐ)F¨y×/AÑ/AÀ#Ó/FÔ+FÐ%GÕGˆŒØ"$ˆÔØ"$ˆÔØ#%ˆÔÜ—j’j §¡¬#¬i¸Ó*?Ó!@ÓA×GÑGˆŒØˆŒÜ—n‘n×,Ñ,ˆŽr1   c                	ór   <€  \        VP                  4       \        ST `  T4      #   \         d     R # i ; irq   )r   rS   Ú	ExceptionrÏ   Úadd)r’   ÚdistrÛ   s   &&€r#   rß   ÚPackageIndex.addA  s9   ø€ ð	Ü˜$Ÿ,™,Ô'ô ‰w‰{˜4Ó Ð øô ô 	Úð	ús   ƒ' §6µ6c               ó    € V ^8„  d   QhRRRR/# )rh   ÚretrieverË   r©   rª   r�   )r«   s   "r#   r¬   rÌ   J  s   € ÷ 31ñ 31¨ð 31¸$ñ 31r1   c           	     óŽ  € WP                   9   d   V'       g   R# RV P                   V&   \        V4      '       g   V P                  V4       R# \        \	        V4      4      pV'       d,   V P                  V4      '       g   R# V P                  RV4       V'       g   V'       d   WP                  9   d"   \        \        V P                  V4      4       R# V P                  V4      '       g   RV P                  V&   R# V P                  RV4       RV P                  V&   RpV P                  WV,          4      pVf   R# \        V\        P                  P                  4      '       d0   VP                   R8X  d   V P                  RVP"                   24       RV P                  VP$                  &   RVP&                  P)                  R	R
4      P+                  4       9  d   VP-                  4        R# VP$                  pVP/                  4       p\        V\0        4      '       ge   \        V\        P                  P                  4      '       d   RpM%VP&                  P3                  R4      ;'       g    RpVP5                  VR4      pVP-                  4        \6        P9                  V4       FL  p	\        P:                  P=                  V\?        V	PA                  ^4      4      4      p
V PC                  V
4       KN  	  VPE                  V PF                  4      '       d(   \I        VRR4      R8w  d   V PK                  W4      pR# R# R# )z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i‘  zAuthentication error: Úhtmlúcontent-typeÚ zlatin-1ÚcharsetÚignoreÚcodeé”  )&rÐ   Ú
URL_SCHEMEÚprocess_filenameÚlistrM   Úurl_okÚdebugrÑ   r   rß   ÚinfoÚopen_urlÚ
isinstancer8   ÚerrorÚ	HTTPErrorrê   rÃ   r<   ÚheadersÚgetr)   ÚcloseÚreadr€   Ú	get_paramÚdecoder‚   r|   r   rƒ   r„   rK   Úprocess_urlr+   rÉ   ÚgetattrÚprocess_index)r’   r<   rã   ÚdistsÚtmplÚfr-   r‡   rè   rI   Úlinks   &&&        r#   rü   ÚPackageIndex.process_urlJ  sb  € à×#Ñ#Ô#¯HÙØ!%ˆ×Ñ˜#ÑÜ˜#�ŠØ×!Ñ! #Ô&Ùäœ¨Ó-Ó.ˆEßØ—{‘{ 3×'Ò'ÙØ—
‘
Ð+¨SÔ1çŸ C×+<Ñ+<Ô$<Ü”�T—X‘X˜uÓ%Ô&Ùà�{‰{˜3×ÒØ%)ˆD×Ñ˜cÑ"Ùà�	‰	�, Ô$Ø!%ˆ×Ñ˜#ÑØMˆØ�M‰M˜# c�zÓ*ˆØŠ9ÙÜ�aœŸ™×/Ñ/×0Ò0°Q·V±V¸s´]Ø�I‰IÐ.¨q¯u©u¨gÐ6Ô7Ø#'ˆ×Ñ˜!Ÿ%™%Ñ Ø˜Ÿ™Ÿ™ ~°rÓ:×@Ñ@ÓBÔBØ�G‰GŒIÙà�u‰uˆØ�v‰v‹xˆÜ˜$¤×$Ò$ä˜!œVŸ\™\×3Ñ3×4Ò4à#‘àŸ)™)×-Ñ-¨iÓ8×EÐE¸I�Ø—;‘;˜w¨Ó1ˆDØ	�‰Œ	Ü—]‘] 4Ö(ˆEÜ—<‘<×'Ñ'¨¬j¸¿¹ÀQ»Ó.HÓIˆDØ×Ñ˜TÖ"ñ )ð �>‰>˜$Ÿ.™.×)Ò)¬g°a¸ÀÓ.FÈ#Ô.MØ×%Ñ% cÓ0ŠDñ /NÑ)r1   c               ó    € V ^8„  d   QhRRRR/# )rh   ÚnestedrË   r©   rª   r�   )r«   s   "r#   r¬   rÌ     s   € ÷ 'ñ '¨4ð '¸Dñ 'r1   c                	ó4  € \         P                  P                  V4      '       g   V P                  R V4       R# \         P                  P	                  V4      '       dt   V'       gl   \         P                  P                  V4      p\         P                  ! V4       F2  pV P                  \         P                  P                  W44      R4       K4  	  \        V4      pV'       d4   V P                  RV4       \        \        V P                  V4      4       R# R# )zNot found: %sNTz	Found: %s)r^   r@   ÚexistsÚwarnÚisdirÚrealpathÚlistdirrí   rn   r`   rð   rî   r   rß   )r’   Úfnr  r@   Úitemrÿ   s   &&&   r#   rí   ÚPackageIndex.process_filename  s´   € ä�w‰w�~‰~˜b×!Ò!Ø�I‰I�o rÔ*Ùä�7‰7�=‰=˜×Ò§VÜ—7‘7×#Ñ# BÓ'ˆDÜŸ
š
 4Ö(�Ø×%Ñ%¤b§g¡g§l¡l°4Ó&>ÀÖEñ )ô % RÓ(ˆßØ�J‰J�{ BÔ'Ü”�T—X‘X˜uÓ%Ö&ñ r1   c               ó    € V ^8„  d   QhRRRR/# )rh   ÚfatalrË   r©   r�   )r«   s   "r#   r¬   rÌ   �  s   € ÷ ñ  ð °$ñ r1   c                	óV  € \        V4      pT;'       d#    VP                  ^4      P                  4       R8H  pV'       g<   V P                  \        P
                  P                  V4      ^,          4      '       d   R# RpV'       d   \        WQ,          4      hV P                  WQ4       R# )ri   ÚfileTz¡
Note: Bypassing %s (disallowed host; see https://setuptools.pypa.io/en/latest/deprecated/easy_install.html#restricting-downloads-with-allow-hosts for details).
F)	rì   rK   r)   rÓ   r8   r   r9   r   r  )r’   r<   r  ÚsÚis_filerÃ   s   &&&   r#   rï   ÚPackageIndex.url_ok�  s‚   € Ü�s‹OˆØ×4Ð4˜Ÿ™ ›
×(Ñ(Ó*¨fÑ4ˆß�d—k‘k¤&§,¡,×"7Ñ"7¸Ó"<¸QÕ"?×@Ò@ÙðWð 	÷
 Ü  ¥Ó+Ð+à�I‰I�cÔÙr1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   Ÿ  s   € ÷ ?ñ ?¨Tñ ?r1   c                	ó´   € \        \        P                  P                  V4      pR  V 4       p\	        \
        P                  ! V P                  V4      4       R# )c              3  ó”   "  € T F>  p\         P                  ! V4       F!  pVP                  R 4      '       g   K  W3x € K#  	  K@  	  R# 5i)z	.egg-linkN)r^   r  r*   )rd   r@   Úentrys   &  r#   rf   Ú.PackageIndex.scan_egg_links.<locals>.<genexpr>¡  s=   é € ð 
á�ÜŸš DÖ)�Ø�~‰~˜k×*ô ˆT�Má)ñ Ûùs
   ‚2A¹AN)Úfilterr^   r@   r	  rî   Ú	itertoolsÚstarmapÚscan_egg_link)r’   Úsearch_pathÚdirsÚ	egg_linkss   &&  r#   Úscan_egg_linksÚPackageIndex.scan_egg_linksŸ  sB   € Ü”b—g‘g—m‘m [Ó1ˆñ
áó
ˆ	ô 	ŒY×Ò˜t×1Ñ1°9Ó=Ö>r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   ©  s   € ÷ ñ ¨Dñ r1   c           
     	óÜ  € \        \        P                  P                  W4      4      p\	        \        R \        \        P                  VP                  4       4      4      4      p\        V4      ^8w  d   R # Vw  rV\        \        P                  P                  W4      4       FF  p\        P                  P                  ! V.VO5!  Vn        \        Vn        V P                  V4       KH  	  R # rq   )r   r^   r@   rn   rî   r  r   r€   r�   Ú
splitlinesrW   r   rQ   r   rF   rß   )r’   r@   r  ÚcontentÚlinesÚegg_pathÚ_setup_pathrà   s   &&&     r#   r  ÚPackageIndex.scan_egg_link©  sœ   € Ü*¬2¯7©7¯<©<¸Ó+DÓEˆä”V˜D¤#¤c§i¡i°×1CÑ1CÓ1EÓ"FÓGÓHˆäˆu‹:˜Œ?áà %Ñˆä&¤r§w¡w§|¡|°DÓ'CÖDˆDÜŸG™GŸLšL¨Ð6°Ó6ˆDŒMÜ)ˆDŒOØ�H‰H�TŽNó Er1   c           	     	óþ  € RpVP                  V P                  4      '       g   V# \        \        \        P
                  P                  V\        V P                  4      R  P                  R4      4      4      p\        V4      ^8w  g   RV^,          9   d   V# \        V^ ,          4      p\        V^,          4      pRV P                  P                  VP                  4       / 4      V&   \        V4      \        V4      3# )Nr3   r5   T)NN)r+   rÉ   rî   r   r8   r   r:   rW   r;   r   r   rÒ   Ú
setdefaultr)   r   )r’   r  ÚNO_MATCH_SENTINELr=   ÚpkgÚvers   &&    r#   Ú_scanÚPackageIndex._scan¹  sÊ   € à&ÐØ�‰˜tŸ~™~×.Ò.Ø$Ð$ä”SœŸ™×-Ñ-¨t´C¸¿¹Ó4GÐ4IÐ/J×/PÑ/PÐQTÓ/UÓVÓWˆÜˆu‹:˜Œ?˜c U¨1¥XœoØ$Ð$ô ˜˜a�Ó!ˆÜ˜5 �8Ó$ˆØ?Cˆ×Ñ×%Ñ% c§i¡i£k°2Ó6°tÑ<Ü˜3Ó¤¨SÓ!1Ð1Ð1r1   c                óH  € \         P                  V4       FK  p V P                  \        P                  P                  V\        VP                  ^4      4      4      4       KM  	  V P                  V4      w  rEV'       g   R# \        W4       Fi  p\        V4      w  rxVP                  R4      '       d2   V'       g*   V'       d   VRV RV 2,          pMV P                  V4       V P                  V4       Kk  	  \        P                  R V4      #   \         d     EK
  i ; i)z#Process the contents of a PyPI pagerç   ú.pyz#egg=rP   c                óD   € R P                   ! V P                  ^^^4      !  # )z<a href="{}#md5={}">{}</a>)r«   rK   )Úms   &r#   Ú<lambda>Ú,PackageIndex.process_index.<locals>.<lambda>ã  s   € Ð2×9Ò9¸1¿7¹7À1ÀaÈÓ;KÒLr1   )r‚   r|   r1  r8   r   rƒ   r„   rK   r    rŒ   rD   r*   Úneed_version_infoÚscan_urlÚPYPI_MD5Úsub)	r’   r<   r‡   rI   r/  r0  Únew_urlr-   Úfrags	   &&&      r#   rþ   ÚPackageIndex.process_indexÉ  së   € ô —]‘] 4Ö(ˆEðØ—
‘
œ6Ÿ<™<×/Ñ/°´ZÀÇÁÈAÃÓ5OÓPÖQñ )ð —:‘:˜c“?‰ˆßÙô +¨3Ö5ˆGä)¨'Ó2‰JˆDØ�}‰}˜U×#Ò#¯DßØ  s e¨1¨S¨EÐ2Õ2‘Gà×*Ñ*¨3Ô/Ø�M‰M˜'Ö"ñ 6ô �|‰|ÙLÈdó
ð 	
øô% ô Ûðús   šADÄD!Ä D!c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   æ  s   € ÷ 
ñ 
¨ñ 
r1   c                	ó*   € V P                  R V4       R# )zPPage at %s links to .py file(s) without version info; an index scan is required.N)Úscan_all©r’   r<   s   &&r#   r9  ÚPackageIndex.need_version_infoæ  s   € Ø�‰ð àö	
r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   í  s   € ÷ &ñ &¨4ñ &r1   c                	óÌ   € V P                   V P                  9  d.   V'       d   V P                  ! V.VO5!   V P                  R 4       V P	                  V P                   4       R# )z6Scanning index of all packages (this may take a while)N)rÉ   rÑ   r  rñ   r:  ©r’   rÃ   rr   s   &&*r#   rB  ÚPackageIndex.scan_allí  sE   € Ø�>‰> ×!2Ñ!2Ô2ßØ—	’	˜#Ð% Ô%Ø�I‰IÐNÔOØ�‰�d—n‘nÖ%r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   ô  s   € ÷ ñ ¨Dñ r1   c                	ó.  € V P                  V P                  VP                  ,           R ,           4       V P                  P	                  VP
                  4      '       g4   V P                  V P                  VP                  ,           R ,           4       V P                  P	                  VP
                  4      '       g   V P                  V4       \        V P                  P	                  VP
                  R4      4       F  pV P                  V4       K  	  R# )r3   Nr�   )	r:  rÉ   Úunsafe_namerÒ   r÷   ÚkeyrR   Únot_found_in_indexrî   )r’   Úrequirementr<   s   && r#   Úfind_packagesÚPackageIndex.find_packagesô  s¹   € Ø�‰�d—n‘n {×'>Ñ'>Õ>ÀÕDÔEà×!Ñ!×%Ñ% k§o¡o×6Ò6à�M‰M˜$Ÿ.™.¨;×+CÑ+CÕCÀcÕIÔJà×!Ñ!×%Ñ% k§o¡o×6Ò6à×#Ñ# KÔ0ä˜×*Ñ*×.Ñ.¨{¯©ÀÓCÖDˆCà�M‰M˜#Öó Er1   c                	óÎ   <€ V P                  4        V P                  V4       WP                  ,           F  pW19   d   Vu # V P                  R W4       K!  	  \        SV `  W4      # )z%s does not match %s)ÚprescanrO  rL  rð   rÏ   Úobtain)r’   rN  Ú	installerrà   rÛ   s   &&& €r#   rS  ÚPackageIndex.obtain  sY   ø€ Ø�‰ŒØ×Ñ˜;Ô'ØŸ™×)Ð)ˆDØÔ"Ø’Ø�J‰JÐ-¨{ÖAñ *ô ‰w‰~˜kÓ5Ð5r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ     s   € ÷ ñ °Dñ r1   c                ó@  € VP                  V P                  RV 24       VP                  4       '       gi   VP                  4        \        P
                  ! V4       \        VP                  P                   R\        P                  P                  V4       R24      hR# )z
checker is a ContentChecker
zValidating %s checksum for z validation failed for z; possible download problem?N)r�   rð   r˜   rø   r^   Úunlinkr   r²   r,   r@   rX   )r’   Úcheckerr_   Útfps   &&&&r#   Ú
check_hashÚPackageIndex.check_hash  s†   € ð 	�‰�t—z‘zÐ%@ÀÀ
Ð#KÔLØ×Ñ×!Ò!Ø�I‰IŒKÜ�IŠI�hÔÜ Ø—<‘<×$Ñ$Ð%Ð%<¼R¿W¹W×=MÑ=MÈhÓ=WÐ<Xð Y-ð -óð ñ "r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ     s   € ÷ )ñ ) dñ )r1   c                ó  € V F�  pV P                   eC   \        V4      '       d2   VP                  R4      '       g   \        \	        V4      4      '       d   V P                  V4       Kf  V P                   P                  V4       Kƒ  	  R# )z;Add `urls` to the list that will be prescanned for searchesNúfile:)rÔ   rì   r+   rî   rM   r:  Úappend)r’   Úurlsr<   s   && r#   Úadd_find_linksÚPackageIndex.add_find_links  s`   € ãˆCà—‘Ò$Ü! #—’Ø—>‘> '×*Ò*Üœ¨Ó,×-Ò-ð —‘˜cÖ"ð —‘×#Ñ# CÖ(ó r1   c                óŠ   € V P                   '       d*   \        \        V P                  V P                   4      4       RV n         R# )z7Scan urls scheduled for prescanning (e.g. --find-links)N)rÔ   rî   r   r:  r—   s   &r#   rR  ÚPackageIndex.prescan(  s)   € à�<�<ˆ<Ü”�T—]‘] D§L¡LÓ1Ô2ØˆŽr1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   .  s   € ÷ ñ °ñ r1   c                	ó°   € WP                   ,          '       d   V P                  R r2MV P                  Rr2V! W1P                  4       V P	                  4        R# )z#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?)N)rL  rñ   r  rK  rB  )r’   rN  ÚmethrÃ   s   &&  r#   rM  ÚPackageIndex.not_found_in_index.  s>   € Ø—‘× Ô ØŸ	™	Ð#H‘#àŸ	™	Ð#X�#ÙˆS×)Ñ)Ô*Ø�‰Žr1   c                ó‚  € \        V\        4      '       g�   \        V4      pV'       dJ   V P                  W4      p\	        V4      w  rVVP                  R4      '       d   V P                  WFV4      pV# \        P                  P                  V4      '       d   V# \        V4      p\        V P                  W4      RR4      # )až  Locate and/or download `spec` to `tmpdir`, returning a local path

`spec` may be a ``Requirement`` object, or a string containing a URL,
an existing local filename, or a project/version requirement spec
(i.e. the string form of a ``Requirement`` object).  If it is the URL
of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
automatically created alongside the downloaded file.

If `spec` is a ``Requirement`` object or a string containing a
project/version requirement spec, this method returns the location of
a matching distribution (possibly after downloading it to `tmpdir`).
If `spec` is a locally existing file or directory name, it is simply
returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
of `tmpdir`, and the local filename is returned.  Various errors may be
raised if a problem occurs during downloading.
r4  rQ   N)ró   r   rì   Ú_download_urlrD   r*   Ú	gen_setupr^   r@   r  r$   rý   Úfetch_distribution)r’   r!   ÚtmpdirÚschemeÚfoundr-   rC   s   &&&    r#   r4   ÚPackageIndex.download6  sš   € ô$ ˜$¤×,Ò,Ü Ó%ˆFßà×*Ñ*¨4Ó8�Ü!1°$Ó!7‘�Ø—=‘= ×'Ò'Ø ŸN™N¨5¸FÓC�EØ�Ü—‘—‘ ×%Ò%à�ä,¨TÓ2�Ü�t×.Ñ.¨tÓ<¸jÈ$ÓOÐOr1   c               ó(   € V ^8„  d   QhRRRRRRRR/# )rh   Ú
force_scanrË   ÚsourceÚ
develop_okr©   zDistribution | Noner�   )r«   s   "r#   r¬   rÌ   X  s:   € ÷ P?ñ P?ð ð	P?ð
 ðP?ð ðP?ð 
ñP?r1   c                óD  a aaaa	€ S P                  RV4       \        4       o	RpR
R VV V	VV3R lllpV'       d*   S P                  4        S P                  V4       V! V4      pV'       g   Ve	   V! W4      pVf'   S P                  e   S P                  4        V! V4      pVf"   V'       g   S P                  V4       V! V4      pVf*   S P                  RS;'       d    R;'       g    RV4       R# S P                  RV4       VP                  VP                  R	7      # )a  Obtain a distribution suitable for fulfilling `requirement`

`requirement` must be a ``pkg_resources.Requirement`` instance.
If necessary, or if the `force_scan` flag is set, the requirement is
searched for in the (online) package index as well as the locally
installed packages.  If a distribution matching `requirement` is found,
the returned distribution's ``location`` is the value you would have
gotten from calling the ``download()`` method with the matching
distribution's URL or filename.  If no matching distribution is found,
``None`` is returned.

If the `source` flag is set, only source distributions and source
checkout links will be considered.  Unless the `develop_ok` flag is
set, development and system eggs (i.e., those using the ``.egg-info``
format) will be ignored.
zSearching for %sNc               ó   € V ^8„  d   QhRR/# )rh   ÚenvzEnvironment | Noner�   )r«   s   "r#   r¬   Ú5PackageIndex.fetch_distribution.<locals>.__annotate__v  s   € ÷ 	ñ 	Ð-ñ 	r1   c                óò  <€ Vf   SpWP                   ,           FÙ  pVP                  \        8X  d5   S'       g-   VS9  d$   SP                  RV4       SP	                  V4       KL  W 9   ;'       d#    VP                  \
        8*  ;'       g    S'       * pV'       g   K„  SP                  VP                  S	4      pWBn        \        P                  P                  VP                  4      '       g   K×  Vu # 	  R # )Nz&Skipping development or system egg: %s)rL  rF   r   r  rß   r   r4   rQ   Údownload_locationr^   r@   r  )
Úreqrx  rà   ÚtestÚlocru  r’   Úskippedrt  rn  s
   &&   €€€€€r#   r…   Ú-PackageIndex.fetch_distribution.<locals>.findv  s¾   ø€ ØŠ{Ø�ð ŸG™GŸ˜�Ø—?‘?¤lÔ2¿:Ø 7Ô*ØŸ	™	ØDØ ôð  Ÿ™ DÔ)Ùà‘{×UÐU¨¯©¼;Ñ(F×(TÐ(TÈfÌ*�ß‘4ØŸ-™-¨¯©°vÓ>�CØ-0Ô*Ü—w‘w—~‘~ d×&<Ñ&<×=Ô=Ø#šñ %ñ" r1   z:No local packages or working download links found for %s%sza source distribution of rç   zBest match: %s)rQ   rq   )rñ   r~   rR  rO  rÔ   r  Úcloner{  )
r’   rN  rn  rs  rt  ru  Úlocal_indexrà   r…   r  s
   f&f&ff&  @r#   rm  ÚPackageIndex.fetch_distributionX  sù   ü€ ð4 	�	‰	Ð$ kÔ2Ü“%ˆØˆ÷	ö 	÷0 Ø�L‰LŒNØ×Ñ˜{Ô+Ù˜Ó$ˆDç˜Ò/Ù˜Ó1ˆDàŠ<Ø�|‰|Ò'Ø—‘”Ù˜Ó$ˆDàŠ<§
Ø×Ñ˜{Ô+Ù˜Ó$ˆDàŠ<Ø�I‰IØLØ×7Ð7Ð7×=Ð=¸2Øôñ
 à�I‰IÐ&¨Ô-Ø—:‘: t×'=Ñ'=�:Ó>Ð>r1   c               ó$   € V ^8„  d   QhRRRRRR/# )rh   rs  rË   rt  r©   z
str | Noner�   )r«   s   "r#   r¬   rÌ   ª  s$   € ÷ ñ Ø/3ðØEIðà	ñr1   c                óJ   € V P                  WW44      pVe   VP                  # R# )a  Obtain a file suitable for fulfilling `requirement`

DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
backward compatibility, this routine is identical but returns the
``location`` of the downloaded distribution instead of a distribution
object.
N)rm  rQ   )r’   rN  rn  rs  rt  rà   s   &&&&& r#   ÚfetchÚPackageIndex.fetchª  s)   € ð ×&Ñ& {¸JÓOˆØÒØ—=‘=Ð Ùr1   c                	ó@  € \         P                  V4      pT;'       dH    \        WP                  ^4      R4       Uu. uF  pVP                  '       g   K  VNK  	  up;'       g    . p\        V4      ^8X  Edh   \        P                  P                  V4      p\        P                  P                  V4      V8w  d‚   \        P                  P                  W74      p\        P                  P                  V4      '       d&   \        P                  P                  W4      '       g   \        P                  ! W4       Tp\        \        P                  P                  VR4      RRR7      ;_uu_ 4       p	V	P!                  RV^ ,          P"                  : RV^ ,          P                  : R\        P                  P%                  V4      ^ ,          : R	24       RRR4       V# V'       d   \'        R
V: RV: 24      h\'        R4      hu upi   + '       g   i     T# ; i)ri   Nzsetup.pyÚwzutf-8)Úencodingz(from setuptools import setup
setup(name=z
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rH   rI   rJ   rK   rS   rW   r^   r@   rX   Údirnamern   r  ÚsamefileÚshutilÚcopy2ÚopenÚwriterR   Úsplitextr   )
r’   r_   rC   rn  rI   Údrÿ   rX   Údstr  s
   &&&&      r#   rl  ÚPackageIndex.gen_setup¹  sß  € Ü×"Ñ" 8Ó,ˆà÷ ð ô /¨x¿¹ÀQ»ÈÔNóáN�AØ—9•9÷ �ÙNñ÷ð ð ð 	ô ˆu‹:˜�?Ü—w‘w×'Ñ'¨Ó1ˆHô �w‰w�‰˜xÓ(¨FÔ2Ü—g‘g—l‘l 6Ó4�ÜŸ™Ÿ™ s×+Ò+´·±×0@Ñ0@À×0OÒ0OÜ—L’L Ô/Ø"�Hä”b—g‘g—l‘l 6¨:Ó6¸Àg×NÕNÐRVØ—
‘
ð"Ø"'¨¥(×"7Ñ"7Ñ!:¸*ÀUÈ1ÅX×EUÑEUÑDXÐXfÔgi×gnÑgn×gwÑgwð  yAó  hBð  CDõ  hEñ  gHð  HLðMô÷ Oð
 ˆOçÜ ØKÈHÉ<ð X à %™yð*óð ô !ðGóð ùòA÷$ OÖNð
 ˆOús   ½HÁHÅ2A%HÈH	i    c           	     	ó�  € V P                  R V4       Rp \        P                  V4      pV P                  V4      p\	        V\
        P                  P                  4      '       d)   \        RV RVP                   RVP                   24      hVP                  4       p^ pV P                  pRpRV9   d>   VP                  R4      p	\        \        \        V	4      4      pV P!                  WWgV4       \#        VR4      ;_uu_ 4       p
 VP%                  V4      pV'       dA   VP'                  V4       V
P)                  V4       V^,          pV P!                  WWgV4       KZ   T P+                  YBT
4       RRR4       TT'       d   TP-                  4        # #   + '       g   i     L+; i  T'       d   TP-                  4        i i ; i)	zDownloading %sNzCan't download ú: Ú zcontent-lengthzContent-LengthÚwbr6   )rñ   r¦   rº   rò   ró   r8   rô   rõ   r   rê   rÃ   Údl_blocksizeÚget_allÚmaxr   ÚintÚ
reporthookr�  rù   r”   r�  r[  rø   )r’   r<   r_   ÚfprY  rö   ÚblocknumÚbsÚsizeÚsizesrZ  r“   s   &&&         r#   Ú_download_toÚPackageIndex._download_toä  si  € Ø�	‰	Ð" CÔ(àˆð	Ü!×*Ñ*¨3Ó/ˆGØ—‘˜sÓ#ˆBÜ˜"œfŸl™l×4Ñ4×5Ò5Ü$ °s°e¸2¸b¿g¹g¸YÀaÈÏÉÀxÐ%PÓQÐQØ—g‘g“iˆGØˆHØ×"Ñ"ˆBØˆDØ 7Ô*àŸ™Ð(8Ó9�Üœ3œs E›?Ó+�Ø—‘ ¨x¸TÔBÜ�h ×%Ô%¨ØØŸG™G B›K�EßØŸ™ UÔ+ØŸ	™	 %Ô(Ø  A�˜ØŸ™¨°xÀTÖJàØ—‘ °3Ô7÷ &ð çØ—‘•
ð ÷ &×%û÷ Ø—‘•
ð ús+   –C0F* ÄFÄ!AFÅ4	F* ÆF'	Æ"F* Æ*Gc               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ     s   € ÷ ñ ÀDñ r1   c                	ó   € R # rq   r�   )r’   r<   r_   rŸ  Úblksizer¡  s   &&&&&&r#   r�  ÚPackageIndex.reporthook  s   € Ùr1   c           	     	ó>  € VP                  R 4      '       d   \        V4      #  \        WP                  4      #   \        \
        P                  P                  3 dp   pRP                  TP                   Uu. uF  p\        T4      NK  	  Mu upi up4      pT'       d   T P                  Y%4        Rp?R# \        T RT 24      ThRp?i\        P                  P                   d   pTu Rp?# Rp?i\        P                  P                    dK   pT'       d"   T P                  Y#P"                  4        Rp?R# \        RT RTP"                   24      ThRp?i\
        P                  P$                   dJ   pT'       d"   T P                  Y#P&                  4        Rp?R# \        T RTP&                   24      ThRp?i\
        P                  P(                  \*        3 d7   pT'       d   T P                  Y#4        Rp?R# \        RT RT 24      ThRp?ii ; i)r_  r—  NzDownload error for r–  z7 returned a bad status line. The server might be down, )r+   Ú
local_openÚopen_with_authr×   r    ÚhttpÚclientÚ
InvalidURLrn   rr   r€   r  r   r8   rô   rõ   ÚURLErrorÚreasonÚBadStatusLineÚlineÚHTTPExceptionÚOSError)r’   r<   ÚwarningÚvÚargrÃ   s   &&&   r#   rò   ÚPackageIndex.open_url
  s›  € Ø�>‰>˜'×"Ò"Ü˜c“?Ð"ð	NÜ! #§{¡{Ó3Ð3øÜœDŸK™K×2Ñ2Ð3ô 	<Ø—(‘(°·²Ó7±¨œC žH²ùÔ7Ó8ˆCßØ—	‘	˜'×'Ò'ä$¨ u¨A¨c¨U ^Ó4¸!Ð;ûÜ�|‰|×%Ñ%ô 	Ø�HûÜ�|‰|×$Ñ$ô 	UßØ—	‘	˜'§8¡8×,Ò,ä$Ð':¸3¸%¸rÀ!Ç(Á(ÀÐ%LÓMÐSTÐTûÜ�{‰{×(Ñ(ô 	ßØ—	‘	˜'§6¡6×*Ò*ä$Ø�eð ØŸV™V˜Hð&óð ðûô —‘×)Ñ)¬7Ð3ô 	NßØ—	‘	˜'×%Ò%ä$Ð':¸3¸%¸rÀ!ÀÐ%EÓFÈAÐMûð		Nús�   ¤9 ¹%HÁCÁ7B
ÂCÂ CÂ7CÃ HÃ)HÃ*C1Ã+HÃ1 HÄHÄ#EÄ<EÅ HÅ9HÅ:#F>Æ#F>Æ>&HÇ%HÇ&HÈHÈHc                óT   € RP                  R4      p\        P                  ! VRV 4      # )a9  
Replace unsafe path directives with underscores.

>>> san = PackageIndex._sanitize
>>> san('/home/user/.ssh/authorized_keys')
'_home_user_.ssh_authorized_keys'
>>> san('..\\foo\\bing')
'__foo_bing'
>>> san('D:bar')
'D_bar'
>>> san('C:\\bar')
'C__bar'
>>> san('foo..bar')
'foo..bar'
>>> san('D:../foo')
'D___foo'
rÎ   Ú_)Ú:z[/\\]z6(?:(?<=([/\\]|:))\.\.(?=[/\\]|$))|(?:^\.\.(?=[/\\]|$)))rn   rc   r<  )r,   r·   s   & r#   Ú	_sanitizeÚPackageIndex._sanitize*  s,   € ð& —(‘(ð 
ó ˆô �vŠv�g˜t TÓ*Ð*r1   c                óÀ   € \        V4      w  r4T P                  T;'       g    R4      p\        P                  ! RRV4      p\        P
                  P                  W#4      # )a  
>>> import pathlib
>>> du = PackageIndex._resolve_download_filename
>>> root = getfixture('tmp_path')
>>> url = 'https://files.pythonhosted.org/packages/a9/5a/0db.../setuptools-78.1.0.tar.gz'
>>> str(pathlib.Path(du(url, root)).relative_to(root))
'setuptools-78.1.0.tar.gz'
Ú__downloaded__z\.egg\.zip$rO   )rD   r¼  rc   r<  r^   r@   rn   )r¹   r<   rn  r,   Ú	_fragments   &&&  r#   Ú_resolve_download_filenameÚ'PackageIndex._resolve_download_filenameG  sW   € ô +¨3Ó/‰ˆØ�}‰}Ø÷ ð ð ó	
ˆô �vŠv�n f¨dÓ3ˆä�w‰w�|‰|˜FÓ)Ð)r1   c                óx   € V P                  W4      pV P                  W4      ;'       g    V P                  W4      # )z"
Determine the download filename.
)rÁ  Ú_download_vcsÚ_download_other)r’   r<   rn  r_   s   &&& r#   rk  ÚPackageIndex._download_url^  s8   € ð ×2Ñ2°3Ó?ˆØ×!Ñ! #Ó0×WÐW°D×4HÑ4HÈÓ4WÐWr1   c                ó   € \         P                  P                  V 4      P                  pVP	                  R4      w  r#p\        RR.R.\        V4      ,          ,           4      p\        \        V0V,          4      R4      # )z½
>>> rvcs = PackageIndex._resolve_vcs
>>> rvcs('git+http://foo/bar')
'git'
>>> rvcs('hg+https://foo/bar')
'hg'
>>> rvcs('git:myhost')
'git'
>>> rvcs('hg:myhost')
>>> rvcs('http://foo/bar')
Ú+ÚsvnÚgitÚhgN)	r8   r   Úurlsplitro  Ú	partitionr~   rË   ÚnextÚiter)r<   ro  ÚpreÚsepÚ_postÚalloweds   &     r#   Ú_resolve_vcsÚPackageIndex._resolve_vcse  sh   € ô —‘×&Ñ& sÓ+×2Ñ2ˆØ ×*Ñ*¨3Ó/‰ˆ�%ä�u˜e�n¨ v´°S³	Õ'9Õ9Ó:ˆÜ”D˜#˜ �Ó)¨4Ó0Ð0r1   c                	ó¼  € V P                  V4      pV'       g   R # VR8X  d   \        RV 24      hVP                  R4      w  p pV P                  V4      w  rV P	                  RV RV RV 24       \
        P                  ! VRRW.4       \        VR	VR
RV.VRVRR	RVR.R7      pVe1   V P	                  RV 24       \
        P                  ! Ws,          4       V# )NrÉ  z/Invalid config, SVN download is not supported: r5   zDoing z clone from z to r�  z--quietz-CÚcheckoutz--cwdÚupz-rz-q)rÊ  rË  zChecking out )rÔ  r   rÍ  Ú_vcs_split_rev_from_urlrñ   Ú
subprocessÚ
check_callÚdict)r’   r<   Úspec_filenameÚvcsr_   rº  ÚrevÚco_commandss   &&&     r#   rÄ  ÚPackageIndex._download_vcsx  sô   € Ø×Ñ Ó$ˆßÙØ�%Œ<Ü ØAÀ#ÀÐGóð ð '×0Ñ0°Ó5‰ˆ�!�QØ×/Ñ/°Ó4‰ˆà�	‰	�F˜3˜%˜|¨C¨5°°X°JÐ?Ô@Ü×Ò˜s G¨Y¸ÐFÔGäØ�d˜H j°)¸SÐAØ�W˜h¨¨d°D¸#¸tÐDô
ˆð Š?Ø�I‰I˜ c UÐ+Ô,Ü×!Ò! +Õ"2Ô3àˆr1   c                	ó4  € \         P                  P                  V4      P                  pVR 8X  dG   \         P                  P                  \         P                  P                  V4      P                  4      # V P                  VR4       V P                  W4      # )r  T)
r8   r   rÌ  ro  rÕ   Úurl2pathnamer9   r@   rï   Ú_attempt_download)r’   r<   r_   ro  s   &&& r#   rÅ  ÚPackageIndex._download_other‘  sm   € Ü—‘×&Ñ& sÓ+×2Ñ2ˆØ�VÔÜ—>‘>×.Ñ.¬v¯|©|×/DÑ/DÀSÓ/I×/NÑ/NÓOÐOà�‰�C˜ÔØ×%Ñ% cÓ4Ð4r1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   ™  s   € ÷ $ñ $˜tñ $r1   c                	ó*   € V P                  VR 4       R# )TN)rü   rC  s   &&r#   r:  ÚPackageIndex.scan_url™  s   € Ø×Ñ˜˜dÖ#r1   c                	ó–   € V P                  W4      pR VP                  RR4      P                  4       9   d   V P                  WV4      # V# )rå   ræ   rç   )r£  r÷   r)   Ú_invalid_download_html)r’   r<   r_   rö   s   &&& r#   rä  ÚPackageIndex._attempt_downloadœ  sF   € Ø×#Ñ# CÓ2ˆØ�W—[‘[ °Ó4×:Ñ:Ó<Ô<Ø×.Ñ.¨s¸XÓFÐFàˆOr1   c                	óJ   € \         P                  ! V4       \        R V 24      h)zUnexpected HTML page found at )r^   rX  r   )r’   r<   rö   r_   s   &&&&r#   rê  Ú#PackageIndex._invalid_download_html£  s!   € Ü
�	Š	�(ÔÜÐ=¸c¸UÐCÓDÐDr1   c                óX  € \         P                  P                  V 4      pVP                  P	                  R^4      R,          pVP
                  P                  R4      w  p pVP                  R4      w  rVpV'       d   WW3MVR3w  r‰VP                  VVRR7      P                  4       p
W©3# )aª  
Given a possible VCS URL, return a clean URL and resolved revision if any.

>>> vsrfu = PackageIndex._vcs_split_rev_from_url
>>> vsrfu('git+https://github.com/pypa/setuptools@v69.0.0#egg-info=setuptools')
('https://github.com/pypa/setuptools', 'v69.0.0')
>>> vsrfu('git+https://github.com/pypa/setuptools#egg-info=setuptools')
('https://github.com/pypa/setuptools', None)
>>> vsrfu('http://foo/bar')
('http://foo/bar', None)
rÈ  r5   Ú@Nrç   )ro  r@   rC   r6   )
r8   r   rÌ  ro  r;   r@   rÍ  Ú
rpartitionÚ_replaceÚgeturl)r<   r=   Úclean_schemeÚno_fragment_pathrº  rÐ  rÑ  ÚpostÚ
clean_pathrß  Úresolveds   &          r#   rÙ  Ú$PackageIndex._vcs_split_rev_from_url§  s¨   € ô —‘×%Ñ% cÓ*ˆà—|‘|×)Ñ)¨#¨qÓ1°"Õ5ˆð "'§¡×!5Ñ!5°cÓ!:ÑÐ˜!˜Qà)×4Ñ4°SÓ9‰ˆ�$ß),˜3™+°4¸°,‰ˆ
à—>‘>ØØàð	 "ó 
÷
 ‰&‹(ð 	ð ˆ}Ðr1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   Ç  s   € ÷ ñ  4ñ r1   c                	ó6   € \         P                  ! V.VO5!   R # rq   )r   rð   rG  s   &&*r#   rð   ÚPackageIndex.debugÇ  s   € Ü�	Š	�#Ð˜Ör1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   Ê  ó   € ÷ ñ  $ñ r1   c                	ó6   € \         P                  ! V.VO5!   R # rq   )r   rñ   rG  s   &&*r#   rñ   ÚPackageIndex.infoÊ  ó   € Ü�Š�Ð�tÖr1   c               ó   € V ^8„  d   QhRR/# r¨   r�   )r«   s   "r#   r¬   rÌ   Í  rý  r1   c                	ó6   € \         P                  ! V.VO5!   R # rq   )r   r  rG  s   &&*r#   r  ÚPackageIndex.warnÍ  r   r1   )rÓ   rÑ   rÉ   r×   rÒ   rÐ   rÔ   )zhttps://pypi.org/simple/)Ú*NT)Frq   )FFFN)FF)/rŸ   r    r¡   r¢   r£   r´   rß   rü   rí   rï   r"  r  r1  rþ   r9  rB  rO  rS  r[  rb  rR  rM  r4   rm  r†  rl  r™  r£  r�  rò   Ústaticmethodr¼  rÆ   rÁ  rk  rÔ  rÄ  rÅ  r:  rä  rê  rÙ  rð   rñ   r  r¤   Ú__classcell__©rÛ   s   @r#   r   r   ,  s  ø† ÙE÷-ò -õ$!÷31÷j'÷ õ ?õò 2ò 
õ:
÷&õ÷6õõ)òõò P÷DP?÷dò'ðR €Lò õDôNð@ ñ+ó ð+ð8 ñ*ó ð*ò,Xð ñ1ó ð1ò$ò25õ$òòEð ñó ðõ>õ÷ó r1   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                óP   € V P                  ^ 4      p\        P                  ! V4      # )é    )rK   rå   Úunescape)rI   Úwhats   & r#   Údecode_entityr  Ö  s   € Ø�;‰;�q‹>€DÜ�=Š=˜ÓÐr1   c                ó"   € \        \        V 4      # )zú
Decode HTML entities in the given text.

>>> htmldecode(
...     'https://../package_name-0.1.2.tar.gz'
...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
)Ú
entity_subr  )Útexts   &r#   r„   r„   Û  s   € ô ”m TÓ*Ð*r1   c                ó   a € V 3R  lpV# )c                ó   <a € V V3R  lpV# )c                 óÎ   <€ \         P                  ! 4       p\         P                  ! S4        S! V / VB \         P                  ! V4       #   \         P                  ! T4       i ; irq   )ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)rr   rs   Úold_timeoutrt   Útimeouts   *, €€r#   Ú_socket_timeoutÚ@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeouté  sN   ø€ Ü ×2Ò2Ó4ˆKÜ×$Ò$ WÔ-ð6Ù˜TÐ, VÑ,ä×(Ò(¨Õ5ø”×(Ò(¨Õ5ús   ®A ÁA$r�   )rt   r  r  s   f €r#   r  Ú'socket_timeout.<locals>._socket_timeoutè  s   ù€ ö	6ð Ðr1   r�   )r  r  s   f r#   Úsocket_timeoutr  ç  s   ø€ õ	ð Ðr1   c                óÐ   € \         P                  P                  V 4      pVP                  4       p\        P
                  ! V4      pVP                  4       pVP                  RR4      # )a  
Encode auth from a URL suitable for an HTTP header.
>>> str(_encode_auth('username%3Apassword'))
'dXNlcm5hbWU6cGFzc3dvcmQ='

Long auth strings should not cause a newline to be inserted.
>>> long_auth = 'username:' + 'password'*10
>>> chr(10) in str(_encode_auth(long_auth))
False
Ú
rç   )r8   r   r:   ÚencodeÚbase64Ú	b64encoderû   Úreplace)ÚauthÚauth_sÚ
auth_bytesÚencoded_bytesÚencodeds   &    r#   Ú_encode_authr'  ö  sR   € ô �\‰\×!Ñ! $Ó'€Fà—‘“€JÜ×$Ò$ ZÓ0€Mà×"Ñ"Ó$€Gà�?‰?˜4 Ó$Ð$r1   c                  ó<   € ] tR tRt$ RtR]R&   R]R&   R R ltRtR	# )
Ú
Credentiali  zx
A username/password pair.

Displayed separated by `:`.
>>> str(Credential('username', 'password'))
'username:password'
r€   ÚusernameÚpasswordc               ó   € V ^8„  d   QhRR/# )rh   r©   r€   r�   )r«   s   "r#   r¬   ÚCredential.__annotate__  s   € ÷ 2ñ 2˜ñ 2r1   c                	ó8   € V P                    R V P                   2# )r»  )r*  r+  r—   s   &r#   Ú__str__ÚCredential.__str__  s   € Ø—-‘-�  $§-¡- Ð1Ð1r1   r�   N)rŸ   r    r¡   r¢   r£   Ú__annotations__r/  r¤   r�   r1   r#   r)  r)    s   ‡ ñð ƒMØƒM÷2ñ 2r1   r)  c                  óD   a € ] tR tRtV 3R lt]R 4       tR tR tRt	V ;t
# )Ú
PyPIConfigi  c                ó4  <€ \         P                  . ROR4      p\        SV `  V4       \        P
                  P                  \        P
                  P                  R4      R4      p\        P
                  P                  V4      '       d   \        W4       R# R# )z
Load from ~/.pypirc
rç   Ú~z.pypircN)r*  r+  Ú
repository)
rÜ  ÚfromkeysrÏ   r´   r^   r@   rn   Ú
expanduserr  r   )r’   ÚdefaultsÚrcrÛ   s   &  €r#   r´   ÚPyPIConfig.__init__  sf   ø€ ô —=‘=Ò!GÈÓLˆÜ‰Ñ˜Ô"ä�W‰W�\‰\œ"Ÿ'™'×,Ñ,¨SÓ1°9Ó=ˆÜ�7‰7�>‰>˜"×ÒÜ(¨Ö2ñ r1   c                	óØ   € V P                  4        Uu. uF-  pV P                  VR 4      P                  4       '       g   K+  VNK/  	  pp\        \	        V P
                  V4      4      # u upi )r6  )Úsectionsr÷   r�   rÜ  r   Ú_get_repo_cred)r’   ÚsectionÚsections_with_repositoriess   &  r#   Úcreds_by_repositoryÚPyPIConfig.creds_by_repository'  sc   € ð  Ÿ=™=œ?ó&
á*�Ø�x‰x˜ Ó.×4Ñ4×6÷ ˆGÙ*ð 	#ð &
ô ”C˜×+Ñ+Ð-GÓHÓIÐIùò&
s   “(A'Á A'c                	óÖ   € V P                  VR 4      P                  4       pV\        V P                  VR4      P                  4       V P                  VR4      P                  4       4      3# )r6  r*  r+  )r÷   r�   r)  )r’   r?  Úrepos   && r#   r>  ÚPyPIConfig._get_repo_cred1  s]   € Ø�x‰x˜ Ó.×4Ñ4Ó6ˆØ”ZØ�H‰H�W˜jÓ)×/Ñ/Ó1Ø�H‰H�W˜jÓ)×/Ñ/Ó1ó
ð 
ð 	
r1   c                ó‚   € V P                   P                  4        F   w  r#VP                  V4      '       g   K  Vu # 	  R# )zt
If the URL indicated appears to be a repository defined in this
config, return the credential for that repository.
N)rA  Úitemsr+   )r’   r<   r6  Úcreds   &&  r#   Úfind_credentialÚPyPIConfig.find_credential8  s:   € ð
 !%× 8Ñ 8× >Ñ >Ö @ÑˆJØ�~‰~˜j×)Ô)Ø’ñ !Añ r1   r�   )rŸ   r    r¡   r¢   r´   ÚpropertyrA  r>  rI  r¤   r  r  s   @r#   r3  r3    s-   ø† õ	3ð ñJó ðJò
÷ð r1   r3  c                óÞ  € \         P                  P                  V 4      pVw  r4rVrxVP                  R4      '       d    \        P
                  P                  R4      hVR9   d   \        V4      w  ršMRRr©V	'       gS   \        4       P                  V 4      pV'       d2   \        V4      p	VP                  V 3p\        P                  ! R.VO5!   V	'       di   R\        V	4      ,           p	W:WVWx3p\         P                  P                  V4      p\         P                   P#                  V4      pVP%                  RV	4       M\         P                   P#                  V 4      pVP%                  R\&        4       V! V4      pV	'       dk   \         P                  P                  VP(                  4      w  ppppppVV8X  d4   VV
8X  d-   VVVVVV3p\         P                  P                  V4      Vn        V# )	z4Open a urllib2 request, handling HTTP authenticationr»  znonnumeric port: ''Nz*Authenticating as %s for %s (from .pypirc)zBasic ÚAuthorizationz
User-Agent)r¬  Úhttps)r8   r   r9   r*   r¬  r­  r®  Ú
_splituserr3  rI  r€   r*  r   rñ   r'  Ú
urlunparserÕ   ÚRequestÚ
add_headerÚ
user_agentr<   )r<   r×   Úparsedro  Únetlocr@   ÚparamsÚqueryr>  r"  ÚaddressrH  rñ   r=   r=  rÕ   rž  Ús2Úh2Úpath2Úparam2Úquery2Úfrag2s   &&                     r#   r«  r«  C  s‘  € ô �\‰\×"Ñ" 3Ó'€FØ06Ñ-€F�D %ð ‡��s×ÒÜ�k‰k×$Ñ$Ð%:Ó;Ð;àÐ"Ô"Ü" 6Ó*‰ˆˆgà˜tˆgçÜ‹|×+Ñ+¨CÓ0ˆßÜ�t“9ˆDØ—=‘= #Ð%ˆDÜ�HŠHÐAÐIÀDÔIçØœ, tÓ,Õ,ˆØ ¨uÐ:ˆÜ—,‘,×)Ñ)¨%Ó0ˆÜ—.‘.×(Ñ(¨Ó1ˆØ×Ñ˜?¨DÕ1ä—.‘.×(Ñ(¨Ó-ˆà×Ñ�|¤ZÔ0Ù	�‹€Bçô 06¯|©|×/DÑ/DÀRÇVÁVÓ/LÑ,ˆˆB��v˜v uØ�Œ<˜B 'œMØ˜  v¨v°uÐ<ˆEÜ—\‘\×,Ñ,¨UÓ3ˆBŒFà€Ir1   c                óH   € V P                  R4      w  rp V'       d   W3# RV 3# )zJsplituser('user[:passwd]@host[:port]')
--> 'user[:passwd]', 'host[:port]'.rï  N)rð  )ÚhostÚuserÚdelims   &  r#   rO  rO  s  s,   € ð Ÿ™¨Ó,Ñ€D�ßˆDÐ*Ð*˜t dÐ*Ð*r1   c                ó   € V # rq   r�   )r<   s   &r#   Ú
fix_sf_urlrd  ~  s   € Ø€Jr1   c                ó†  € \         P                  P                  V 4      w  rr4rV\         P                  P	                  V4      p\
        P                  P                  V4      '       d    \         P                  P                  V 4      # VP                  R4      '       dæ   \
        P                  P                  V4      '       dÁ   . p\
        P                  ! V4       F|  p	\
        P                  P                  Wy4      p
V	R8X  d   \        V
4      p Mn\
        P                  P                  V
4      '       d
   V	R,          p	VP                  RV	 RV	 R24       K~  	  RpVP                  V RP                  V4      R7      p^ÈR	ríMR
RRr¾pRR/p\         P"                  ! V4      p\         P$                  P'                  WWïV4      # )z7Read a local path, with special support for directoriesr3   z
index.htmlz	<a href="z">z</a>zB<html><head><title>{url}</title></head><body>{files}</body></html>r  )r<   ÚfilesÚOKrë   zPath not foundz	Not foundræ   z	text/html)r8   r   r9   rÕ   rã  r^   r@   ÚisfilerÖ   r*   r	  r  rn   r   r`  r«   ÚioÚStringIOrô   rõ   )r<   r>   Ú_serverr@   Ú_paramrB   Ú_fragr_   rf  r  ÚfilepathÚbodyr   ÚstatusÚmessagerö   Úbody_streams   &                r#   rª  rª  ‚  sW  € ä4:·L±L×4IÑ4IÈ#Ó4NÑ1€G�d FÜ�~‰~×*Ñ*¨4Ó0€HÜ	‡w�w‡~�~�h×ÒÜ�~‰~×%Ñ% cÓ*Ð*Ø	�‰�s×	Ò	¤§¡§¡¨h× 7Ò 7ØˆÜ—’˜HÖ%ˆAÜ—w‘w—|‘| HÓ0ˆHØ�LÔ Ü/°Ó9�ÙÜ—‘—‘˜x×(Ò(Ø�S•�Ø�L‰L˜9 Q C r¨!¨¨DÐ1Ö2ñ &ð XˆDØ—;‘; 3¨d¯i©i¸Ó.>�;Ó?ˆDØ˜t‘à #Ð%5°{˜ˆà˜{Ð+€GÜ—+’+˜dÓ#€KÜ�<‰<×!Ñ! #¨wÀÓMÐMr1   )r   rM   r0   rJ   rq   )é   )br£   Ú
__future__r   r  Úconfigparserr°   rå   Úhttp.clientr¬  ri  r  r^   rc   r�  r  rÚ  ÚsysÚurllib.errorr8   Úurllib.parseÚurllib.requestÚfnmatchr   Ú	functoolsr   Útypingr   Úmore_itertoolsr   Ú
setuptoolsÚpkg_resourcesr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úsetuptools.wheelr   Úunicode_utilsr   r   Ú	distutilsr   Údistutils.errorsr   rÅ   rH   ÚIr‚   r;  rI   rì   r;   rV   Ú__all__Ú_SOCKET_TIMEOUTÚ__version__Úversion_infoÚmajorÚminorrS  r$   r0   rD   rM   rG   r`   rJ   rw   r{   rŒ   rŽ   r¦   r   r<  r  r  r„   r  r'  r)  ÚRawConfigParserr3  rÕ   rÖ   r«  rO  rd  rª  r�   r1   r#   Ú<module>r�     s$  ðÙ *å "ã Û Û Û Û Û 	Û Û 	Û 	Û Û Û Û 
Û Û Û Ý Ý Ý å *ã ÷÷ ÷ ÷ õ  #ç Qå Ý +à�zŠzÐ6Ó7€Ø	‡z‚zÐ3°R·T±TÓ:€Ø�:Š:ðJó€ð �ZŠZÐ,¨b¯d©dÓ3×9Ñ9€
Ø.×4Ñ4Ó6€
ò€ð €à˜:×1Ñ1Ð2°/À#×BRÑBR×BXÑBXÐAYÐYZÐ[^×[kÑ[k×[qÑ[qÐZrÐs€
òòò0ô	ô ôFð .2¸kÐTXôòD
ð 	‡j‚jÐKÈRÏTÉTÓR€ðð
 ñLó ðL÷$ñ ô2�.ô ôBb
�;ô b
ðN �ZŠZÐ<Ó=×AÑA€
òò
	+ôò%ô*2�ô 2ô %�×-Ñ-ô %ðP  &Ÿ~™~×5Ñ5ô +ò`+ñ   Ô0°Ó@€òôNr1   