+
    Žf©jÂ@  ã                  óì  € 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HtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHt ^ R
IH t  ^ RI!H"t"H#t#H$t$H%t%H&t&H't' ^ RI(H)t) ^ RI*H+t+ ^ RI,H-t- ^ RI.H/t/ ^ RI0H1t1 ^ RI2H3t3 ^ RI4H5t5 ^ RI6H7t7 ^RI8H9t9H:t:H;t; ]	Px                  ! ]=4      t>]]?]?3,          t@R R ltA ! R R]B4      tCR R ltD ! R R]B4      tER R ltFR=R  R! lltGR" R# ltH ! R$ R%4      tI ! R& R']4      tJR( R) ltK]KR* R+ l4       tL]! R,R-7       ! R. R/4      4       tM ! R0 R1]4      tNR>R2 R3 lltOR?R4 R5 lltPR6R/R7 R8 lltQ ! R9 R:]4      tR ! R; R<4      tSR# )@zO
The main purpose of this module is to expose LinkCollector.collect_sources().
)ÚannotationsN)ÚCallableÚIterableÚMutableMappingÚSequence)Ú	dataclass)Ú
HTMLParser)ÚValues)Ú
NamedTupleÚProtocol)Úcanonicalize_name)ÚResponse)Ú
RetryError)ÚConnectionFailedErrorÚConnectionTimeoutErrorÚNetworkConnectionErrorÚProxyConnectionErrorÚSSLMissingErrorÚSSLVerificationError)ÚLink)ÚSearchScope)Ú
PipSession)Úraise_for_status)Úis_archive_file©Úredact_auth_from_url)Úurl_to_path)Úvcs)ÚCandidatesFromPageÚ
LinkSourceÚbuild_sourcec               ó    € V ^8„  d   QhRRRR/# )é   ÚurlÚstrÚreturnú
str | None© )Úformats   "ÚX/var/www/html/bestweb/venv/lib/python3.14/site-packages/pip/_internal/index/collector.pyÚ__annotate__r*   4   s   € ÷ ñ ˜3ð  :ñ ó    c                ó¸   € \         P                   FE  pV P                  4       P                  V4      '       g   K*  V \	        V4      ,          R9   g   KC  Vu # 	  R# )z_Look for VCS schemes in the URL.

Returns the matched VCS scheme, or None if there's no match.
z+:N)r   ÚschemesÚlowerÚ
startswithÚlen)r#   Úschemes   & r)   Ú_match_vcs_schemer2   4   sC   € ô
 —+”+ˆØ�9‰9‹;×!Ñ! &×)Ô)¨c´#°f³+Õ.>À$Ö.FØŠMñ ñ r+   c                  ó.   a € ] tR t^?tR V 3R lltRtV ;t# )Ú_NotAPIContentc               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úcontent_typer$   Úrequest_descr%   ÚNoner'   )r(   s   "r)   r*   Ú_NotAPIContent.__annotate__@   s!   € ÷ )ñ ) Sð )¸ð )Àñ )r+   c                	ó>   <€ \         SV `  W4       Wn        W n        R # ©N)ÚsuperÚ__init__r6   r7   )Úselfr6   r7   Ú	__class__s   &&&€r)   r=   Ú_NotAPIContent.__init__@   s   ø€ Ü‰Ñ˜Ô4Ø(ÔØ(Ör+   )r6   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r=   Ú__static_attributes__Ú__classcell__©r?   s   @r)   r4   r4   ?   s   ø† ÷)ö )r+   r4   c               ó    € V ^8„  d   QhRRRR/# )r"   Úresponser   r%   r8   r'   )r(   s   "r)   r*   r*   F   s   € ÷ @ñ @ ð @¨dñ @r+   c                óÊ   € V P                   P                  RR4      pVP                  4       pVP                  R4      '       d   R# \	        WP
                  P                  4      h)z 
Check the Content-Type header to ensure the response contains a Simple
API Response.

Raises `_NotAPIContent` if the content type is not a valid content-type.
úContent-TypeÚUnknownN)z	text/htmlz#application/vnd.pypi.simple.v1+htmlú#application/vnd.pypi.simple.v1+json)ÚheadersÚgetr.   r/   r4   ÚrequestÚmethod)rI   r6   Úcontent_type_ls   &  r)   Ú_ensure_api_headerrS   F   s^   € ð ×#Ñ#×'Ñ'¨¸	ÓB€Là!×'Ñ'Ó)€NØ× Ñ ð	
÷ò ñ 	ä
˜×'7Ñ'7×'>Ñ'>Ó
?Ð?r+   c                  ó   € ] tR t^\tRtR# )Ú_NotHTTPr'   N)rA   rB   rC   rD   rE   r'   r+   r)   rU   rU   \   s   † Ûr+   rU   c               ó$   € V ^8„  d   QhRRRRRR/# )r"   r#   r$   Úsessionr   r%   r8   r'   )r(   s   "r)   r*   r*   `   s!   € ÷ ñ ˜cð ¨Jð ¸4ñ r+   c                óÀ   € \         P                  P                  V 4      w  r#rEpVR9  d   \        4       hVP	                  V RR7      p\        V4       \        V4       R# )zá
Send a HEAD request to the URL, and ensure the response contains a simple
API Response.

Raises `_NotHTTP` if the URL is not available for a HEAD request, or
`_NotAPIContent` if the content type is not a valid content type.
T)Úallow_redirectsN>   ÚhttpÚhttps)ÚurllibÚparseÚurlsplitrU   Úheadr   rS   )r#   rW   r1   ÚnetlocÚpathÚqueryÚfragmentÚresps   &&      r)   Ú_ensure_api_responsere   `   sR   € ô -3¯L©L×,AÑ,AÀ#Ó,FÑ)€F�D ØÐ&Ô&Ü‹jÐà�<‰<˜¨Tˆ<Ó2€DÜ�TÔä�tÖr+   Fc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r"   r#   r$   rW   r   Úforce_revalidateÚboolr%   r   r'   )r(   s   "r)   r*   r*   r   s0   € ÷ 8ñ 8Ø	ð8àð8ð ð8ð ñ	8r+   c                óÖ  € \        \        V 4      P                  4      '       d   \        WR7       \        P                  R\        V 4      4       RRP                  . RO4      /pV'       d   \        P                  R4       RVR&   VP                  WR7      p\        V4       \        V4       \        P                  R	\        V 4      VP                  P                  R
R4      4       V# )a5  Access an Simple API response with GET, and return the response.

This consists of three parts:

1. If the URL looks suspiciously like an archive, send a HEAD first to
   check the Content-Type is HTML or Simple API, to avoid downloading a
   large file. Raise `_NotHTTP` if the content type cannot be determined, or
   `_NotAPIContent` if it is not HTML or a Simple API.
2. Actually perform the request. Raise HTTP exceptions on network failures.
3. Check the Content-Type header to make sure we got a Simple API response,
   and raise `_NotAPIContent` otherwise.
)rW   zGetting page %sÚAcceptz, z"Refreshing package index response.z	max-age=0zCache-Control)rN   zFetched page %s as %srK   rL   )rM   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01)r   r   Úfilenamere   ÚloggerÚdebugr   ÚjoinrO   r   rS   rN   )r#   rW   rg   rN   rd   s   &&&  r)   Ú_get_simple_responsero   r   sÄ   € ô" ”t˜C“y×)Ñ)×*Ò*Ü˜SÕ2ä
‡L�LÐ"Ô$8¸Ó$=Ô>ð 	�$—)‘)òó
ð€G÷ ô 	�‰Ð9Ô:Ø#.ˆ�Ñ à�;‰;�sˆ;Ó,€DÜ�TÔô �tÔä
‡L�LØÜ˜SÓ!Ø�‰×Ñ˜¨Ó3ôð €Kr+   c               ó    € V ^8„  d   QhRRRR/# )r"   rN   ÚResponseHeadersr%   r&   r'   )r(   s   "r)   r*   r*   ­   s   € ÷ ñ ¨ð ¸Jñ r+   c                óÀ   € V '       dV   RV 9   dO   \         P                  P                  4       pV R,          VR&   VP                  R4      pV'       d   \	        V4      # R# )z=Determine if we have any encoding information in our headers.rK   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr$   )rN   Úmrs   s   &  r)   Ú_get_encoding_from_headersry   ­   sK   € ç�> WÔ,Ü�M‰M×!Ñ!Ó#ˆØ# NÕ3ˆˆ.ÑØ—+‘+˜iÓ(ˆßÜ�w“<ÐÙr+   c                  ó:   € ] tR t^¸tR R ltR R ltR R ltRtR# )	ÚCacheablePageContentc               ó    € V ^8„  d   QhRRRR/# )r"   ÚpageÚIndexContentr%   r8   r'   )r(   s   "r)   r*   Ú!CacheablePageContent.__annotate__¹   s   € ÷ ñ ˜\ð ¨dñ r+   c                	ó:   € VP                   '       g   Q hWn        R # r;   )Úcache_link_parsingr}   ©r>   r}   s   &&r)   r=   ÚCacheablePageContent.__init__¹   s   € Ø×&×&Ð&Ð&Ð&ØŽ	r+   c               ó    € V ^8„  d   QhRRRR/# )r"   ÚotherÚobjectr%   rh   r'   )r(   s   "r)   r*   r   ½   s   € ÷ Qñ Q˜Fð Q tñ Qr+   c                	ó–   € \        V\        V 4      4      ;'       d.    V P                  P                  VP                  P                  8H  # r;   )Ú
isinstanceÚtyper}   r#   )r>   r…   s   &&r)   Ú__eq__ÚCacheablePageContent.__eq__½   s0   € Ü˜%¤ d£Ó,×PÐP°·±·±À%Ç*Á*Ç.Á.Ñ1PÐPr+   c               ó   € V ^8„  d   QhRR/# )r"   r%   Úintr'   )r(   s   "r)   r*   r   À   s   € ÷ #ñ #˜#ñ #r+   c                	ó@   € \        V P                  P                  4      # r;   )Úhashr}   r#   ©r>   s   &r)   Ú__hash__ÚCacheablePageContent.__hash__À   s   € Ü�D—I‘I—M‘MÓ"Ð"r+   )r}   N)rA   rB   rC   rD   r=   rŠ   r‘   rE   r'   r+   r)   r{   r{   ¸   s   † õõQ÷#ñ #r+   r{   c                  ó"   € ] tR t^ÄtR R ltRtR# )Ú
ParseLinksc               ó    € V ^8„  d   QhRRRR/# ©r"   r}   r~   r%   zIterable[Link]r'   )r(   s   "r)   r*   ÚParseLinks.__annotate__Å   s   € ×AÑA˜\ÐA¨nÑAr+   c                	ó   € R # r;   r'   r‚   s   &&r)   Ú__call__ÚParseLinks.__call__Å   s   € ¹cr+   r'   N)rA   rB   rC   rD   r™   rE   r'   r+   r)   r”   r”   Ä   s   † ßAÑAr+   r”   c               ó    € V ^8„  d   QhRRRR/# )r"   Úfnr”   r%   r'   )r(   s   "r)   r*   r*   È   s   € ÷ ñ  *ð °ñ r+   c                óˆ   a a€ \         P                  R V 3R ll4       o\         P                  ! S 4      R V V3R ll4       pV# )zÊ
Given a function that parses an Iterable[Link] from an IndexContent, cache the
function's result (keyed by CacheablePageContent), unless the IndexContent
`page` has `page.cache_link_parsing == False`.
c               ó    € V ^8„  d   QhRRRR/# )r"   Úcacheable_pager{   r%   ú
list[Link]r'   )r(   s   "r)   r*   Ú/with_cached_index_content.<locals>.__annotate__Ð   s   € ÷ -ñ -Ð 4ð -¸ñ -r+   c                ó:   <€ \        S! V P                  4      4      # r;   )Úlistr}   )rŸ   rœ   s   &€r)   ÚwrapperÚ*with_cached_index_content.<locals>.wrapperÏ   s   ø€ ä‘B�~×*Ñ*Ó+Ó,Ð,r+   c               ó    € V ^8„  d   QhRRRR/# )r"   r}   r~   r%   r    r'   )r(   s   "r)   r*   r¡   Ô   s   € ÷ ñ ˜lð ¨zñ r+   c                ól   <€ V P                   '       d   S! \        V 4      4      # \        S! V 4      4      # r;   )r�   r{   r£   )r}   rœ   r¤   s   &€€r)   Úwrapper_wrapperÚ2with_cached_index_content.<locals>.wrapper_wrapperÓ   s.   ø€ à×"×"Ð"ÙÔ/°Ó5Ó6Ð6Ü‘B�t“H‹~Ðr+   )Ú	functoolsÚcacheÚwraps)rœ   r¨   r¤   s   f @r)   Úwith_cached_index_contentr­   È   sE   ù€ ô ‡_�_÷-ó ð-ô ‡_‚_�RÓ÷ð ó ðð
 Ðr+   c               ó    € V ^8„  d   QhRRRR/# r–   r'   )r(   s   "r)   r*   r*   Ý   s   € ÷ ñ �lð  ~ñ r+   c              #  ó’  "  € V P                   P                  4       pVP                  R4      '       df   \        P                  ! V P
                  4      pVP                  R. 4       F-  p\        P                  ! W0P                  4      pVf   K)  Vx € K/  	  R# \        V P                  4      pV P                  ;'       g    RpVP                  V P
                  P                  V4      4       V P                  pVP                  ;'       g    TpVP                   F%  p	\        P                   ! W—VR7      pVf   K!  Vx € K'  	  R# 5i)zT
Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
rM   ÚfilesNzutf-8)Úpage_urlÚbase_url)r6   r.   r/   ÚjsonÚloadsÚcontentrO   r   Ú	from_jsonr#   ÚHTMLLinkParserÚencodingÚfeedÚdecoder²   ÚanchorsÚfrom_element)
r}   rR   ÚdataÚfileÚlinkÚparserr¸   r#   r²   Úanchors
   &         r)   Úparse_linksrÂ   Ü   sù   é € ð ×&Ñ&×,Ñ,Ó.€NØ× Ñ Ð!F×GÒGÜ�zŠz˜$Ÿ,™,Ó'ˆØ—H‘H˜W bÖ)ˆDÜ—>’> $¯©Ó1ˆDØŠ|ÙØŒJñ	 *ñ
 	ä˜DŸH™HÓ%€FØ�}‰}×'Ð' €HØ
‡K�K�—‘×#Ñ# HÓ-Ô.à
�(‰(€CØ�‰×%Ð% #€HØ—.”.ˆÜ× Ò  ÀÔIˆØŠ<ÙØŒ
ó	 !ùs   ‚B>EÃAEÄ:ET)Úfrozenc                  ó^   € ] tR t^ùt$ RtR]R&   R]R&   R]R&   R]R&   R	tR
]R&   R R ltRtR# )r~   at  Represents one response (or page), along with its URL.

:param encoding: the encoding to decode the given content.
:param url: the URL from which the HTML was downloaded.
:param cache_link_parsing: whether links parsed from this page's url
                           should be cached. PyPI index urls should
                           have this set to False, for example.
Úbytesrµ   r$   r6   r&   r¸   r#   Trh   r�   c               ó   € V ^8„  d   QhRR/# )r"   r%   r$   r'   )r(   s   "r)   r*   ÚIndexContent.__annotate__
  s   € ÷ .ñ .˜ñ .r+   c                	ó,   € \        V P                  4      # r;   )r   r#   r�   s   &r)   Ú__str__ÚIndexContent.__str__
  s   € Ü# D§H¡HÓ-Ð-r+   r'   N)	rA   rB   rC   rD   Ú__doc__Ú__annotations__r�   rÉ   rE   r'   r+   r)   r~   r~   ù   s4   ‡ ñð ƒNØÓØÓØ	ƒHØ#Ð˜Ó#÷.ñ .r+   r~   c                  óJ   a € ] tR tRtRtR V 3R lltR R ltR R ltR	tV ;t	# )
r·   i  zZ
HTMLParser that keeps the first base HREF and a list of all anchor
elements' attributes.
c               ó    € V ^8„  d   QhRRRR/# )r"   r#   r$   r%   r8   r'   )r(   s   "r)   r*   ÚHTMLLinkParser.__annotate__  s   € ÷ 7ñ 7˜Cð 7 Dñ 7r+   c                	óP   <€ \         SV `  R R7       Wn        RV n        . V n        R# )T)Úconvert_charrefsN)r<   r=   r#   r²   r»   )r>   r#   r?   s   &&€r)   r=   ÚHTMLLinkParser.__init__  s&   ø€ Ü‰Ñ¨$ÐÔ/àŒØ$(ˆŒØ46ˆŽr+   c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Útagr$   Úattrsúlist[tuple[str, str | None]]r%   r8   r'   )r(   s   "r)   r*   rÏ     s#   € ÷ -ñ - 3ð -Ð/Kð -ÐPTñ -r+   c                	óÈ   € VR 8X  d.   V P                   f    V P                  V4      pVe	   W0n         R# R# VR8X  d'   V P                  P                  \	        V4      4       R# R# )ÚbaseNÚa)r²   Úget_hrefr»   ÚappendÚdict)r>   rÔ   rÕ   Úhrefs   &&& r)   Úhandle_starttagÚHTMLLinkParser.handle_starttag  sR   € Ø�&Œ=˜TŸ]™]Ò2Ø—=‘= Ó'ˆDØÒØ $–ñ  à�CŒZØ�L‰L×Ñ¤ U£Ö,ñ r+   c               ó    € V ^8„  d   QhRRRR/# )r"   rÕ   rÖ   r%   r&   r'   )r(   s   "r)   r*   rÏ   #  s   € ÷ ñ Ð:ð ¸zñ r+   c                	ó2   € V F  w  r#VR 8X  g   K  Vu # 	  R# )rÝ   Nr'   )r>   rÕ   ÚnameÚvalues   &&  r)   rÚ   ÚHTMLLinkParser.get_href#  s   € Û ‰KˆDØ�vŽ~Ø’ñ !ñ r+   )r»   r²   r#   )
rA   rB   rC   rD   rË   r=   rÞ   rÚ   rE   rF   rG   s   @r)   r·   r·     s!   ø† ñ÷
7ð 7õ-÷ó r+   r·   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r"   r¿   r   Úreasonzstr | ExceptionÚmethzCallable[..., None] | Noner%   r8   r'   )r(   s   "r)   r*   r*   *  s6   € ÷ @ñ @Ø
ð@àð@ð %ð@ð 
ñ	@r+   c                ó@   € Vf   \         P                  pV! RW4       R # )Nz%Could not fetch URL %s: %s - skipping)rl   rm   )r¿   ræ   rç   s   &&&r)   Ú_handle_get_simple_failré   *  s   € ð
 ‚|Ü�|‰|ˆÙÐ	0°$Ö?r+   c               ó$   € V ^8„  d   QhRRRRRR/# )r"   rI   r   r�   rh   r%   r~   r'   )r(   s   "r)   r*   r*   4  s$   € ÷ 
ñ 
Øð
Ø,0ð
àñ
r+   c                ó–   € \        V P                  4      p\        V P                  V P                  R ,          VV P                  VR7      # )rK   )r¸   r#   r�   )ry   rN   r~   rµ   r#   )rI   r�   r¸   s   && r)   Ú_make_index_contentrì   4  sE   € ô *¨(×*:Ñ*:Ó;€HÜØ×ÑØ×Ñ˜Õ(ØØ�L‰LØ-ôð r+   rg   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r"   r¿   r   rW   r   rg   rh   r%   úIndexContent | Noner'   )r(   s   "r)   r*   r*   A  s2   € ÷ ?ñ ?Ø
ð?ð ð?ð ð	?ð
 ñ?r+   c               óÚ  € V P                   P                  R ^4      ^ ,          p\        V4      pV'       d   \        P	                  RVV 4       R# VP                  R4      '       d…   \        P                  P                  \        V4      4      '       dW   VP                  R4      '       g
   VR,          p\        P                  P                  VR4      p\        P                  RV4        \        W1VR7      p\!        WPP"                  R7      #   \$         d    \        P	                  R	T 4        R# \&         d8   p\        P	                  R
T TP(                  TP*                  4        Rp?R# Rp?i\,        \.        3 d   p\1        Y4        Rp?R# Rp?i\2        \4        3 d6   pRTP6                   2p\1        Y\        P8                  R7        Rp?R# Rp?i\:         d%   p\1        T RTP6                   24        Rp?R# Rp?i\<         d%   p\1        T RTP6                   24        Rp?R# Rp?i\>         d+   p\1        T \A        TP6                  4      4        Rp?R# Rp?ii ; i)Ú#zICannot look at %s URL %s because it does not support lookup as web pages.Nzfile:Ú/z
index.htmlz# file: URL is directory, getting %s©rW   rg   )r�   z`Skipping page %s because it looks like an archive, and cannot be checked by a HTTP HEAD request.zºSkipping page %s because the %s request got Content-Type: %s. The only supported Content-Types are application/vnd.pypi.simple.v1+json, application/vnd.pypi.simple.v1+html, and text/htmlz4There was a problem confirming the ssl certificate: )rç   zconnection error: zproxy connection error: )!r#   Úsplitr2   rl   Úwarningr/   Úosra   Úisdirr   Úendswithr\   r]   Úurljoinrm   ro   rì   r�   rU   r4   r7   r6   r   r   ré   r   r   ÚcontextÚinfor   r   r   r$   )r¿   rW   rg   r#   Ú
vcs_schemerd   Úexcræ   s   &$$     r)   Ú_get_index_contentrý   A  s  € ð �(‰(�.‰.˜˜aÓ
  Õ
#€Cô # 3Ó'€JßÜ�‰ØWØØô	
ñ
 ð ‡~�~�g×Ò¤2§7¡7§=¡=´¸SÓ1A×#BÒ#Bð �|‰|˜C× Ò Ø�3�JˆCô
 �l‰l×"Ñ" 3¨Ó5ˆÜ�‰Ð:¸CÔ@ðUÜ#ØÐ3Cô
ˆô< # 4×<SÑ<SÔTÐTøô7 ô 
Ü�‰ð1àõ	
ñ6 ô- ô 
Ü�‰ðAð Ø×ÑØ×Ñ÷	
ð 	
ñ* ûô Ô.Ð/ô +Ü ×*Ð*ñ ûô !¤/Ð2ô @ØGÈÏÉÀ}ÐUˆÜ ´6·;±;×?Ñ?ñ ûô !ô JÜ Ð(:¸3¿;¹;¸-Ð&H×IÐIñ ûô  ô PÜ Ð(@ÀÇÁÀÐ&N×OÐOñ
 ûô	 "ô 8Ü ¤c¨#¯+©+Ó&6×7Ð7ñ ûð	8ús~   Ã,D Ä!I*Ä3I*Ä<I*Ä=,E/Å/I*ÆI*ÆFÆI*Æ'I*Æ(*GÇI*Ç%I*Ç&HÈI*ÈI*ÈH2È2I*È?I*É I%É%I*c                  ó,   € ] tR tRt$ R]R&   R]R&   RtR# )ÚCollectedSourcesiƒ  zSequence[LinkSource | None]Ú
find_linksÚ
index_urlsr'   N)rA   rB   rC   rD   rÌ   rE   r'   r+   r)   rÿ   rÿ   ƒ  s   ‡ Ø+Ó+Ø+×+r+   rÿ   c                  ór   € ] tR tRtRtR R lt]RR R ll4       t]R R l4       t	RR
 R llt
R R ltRtR	# )ÚLinkCollectoriˆ  z¥
Responsible for collecting Link objects from all configured locations,
making network requests as needed.

The class's main method is its collect_sources() method.
c               ó$   € V ^8„  d   QhRRRRRR/# )r"   rW   r   Úsearch_scoper   r%   r8   r'   )r(   s   "r)   r*   ÚLinkCollector.__annotate__�  s(   € ÷ ñ àðð "ðð 
ñ	r+   c                	ó   € W n         Wn        R # r;   ©r  rW   )r>   rW   r  s   &&&r)   r=   ÚLinkCollector.__init__�  s   € ð
 )ÔØŽr+   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r"   rW   r   Úoptionsr	   Úsuppress_no_indexrh   r%   r  r'   )r(   s   "r)   r*   r  ™  s2   € ÷ ñ àðð ðð  ð	ð
 
ñr+   c                ó^  € VP                   .VP                  ,           pVP                  '       d7   V'       g/   \        P	                  RRP                  R V 4       4      4       . pVP                  ;'       g    . p\        P                  ! VVVP                  R7      p\        VVR7      pV# )z¦
:param session: The Session to use to make requests.
:param suppress_no_index: Whether to ignore the --no-index option
    when constructing the SearchScope object.
zIgnoring indexes: %sÚ,c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir;   r   )Ú.0r#   s   & r)   Ú	<genexpr>Ú'LinkCollector.create.<locals>.<genexpr>¨  s   é € ÐI¹j°sÔ-¨c×2Ð2»jùs   ‚)r   r  Úno_index)rW   r  )
Ú	index_urlÚextra_index_urlsr  rl   rm   rn   r   r   Úcreater  )ÚclsrW   r  r  r  r   r  Úlink_collectors   &&&&    r)   r  ÚLinkCollector.create˜  s¢   € ð ×'Ñ'Ð(¨7×+CÑ+CÕCˆ
Ø××Ð×$5Ü�L‰LØ&Ø—‘ÑI¹jÓIÓIôð ˆJð ×'Ñ'×-Ð-¨2ˆ
ä"×)Ò)Ø!Ø!Ø×%Ñ%ô
ˆô
 'ØØ%ô
ˆð Ðr+   c               ó   € V ^8„  d   QhRR/# )r"   r%   z	list[str]r'   )r(   s   "r)   r*   r  »  s   € ÷ ,ñ ,˜Iñ ,r+   c                	ó.   € V P                   P                  # r;   )r  r   r�   s   &r)   r   ÚLinkCollector.find_linksº  s   € à× Ñ ×+Ñ+Ð+r+   Nc               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úlocationr   Úpackage_namer&   r%   rî   r'   )r(   s   "r)   r*   r  ¾  s$   € ÷ 
ñ 
Øð
Ø,6ð
à	ñ
r+   c                ó¬   € V P                   P                  pRV9   ;'       g    VRJ;'       d    \        V4      V9   p\        VV P                   VR7      # )z.
Fetch an HTML page containing package links.
z:all:Nrò   )rW   Úrefresh_packager   rý   )r>   r  r  rg   Úshould_force_revalidates   &&&  r)   Úfetch_responseÚLinkCollector.fetch_response¾  sj   € ð  Ÿ<™<×7Ñ7ÐØ")Ð-=Ñ"=÷ #
ð #
Ø Ð$÷ Dð DÜ! ,Ó/Ð3CÑCð 	 ô "ØØ—L‘LØ4ô
ð 	
r+   c               ó$   € V ^8„  d   QhRRRRRR/# )r"   Úproject_namer$   Úcandidates_from_pager   r%   rÿ   r'   )r(   s   "r)   r*   r  Ò  s(   € ÷ ,
ñ ,
àð,
ð 1ð,
ð 
ñ	,
r+   c                	ó²  a aa€ \         P                  ! VVV 3R  lS P                  P                  S4       4       4      P	                  4       p\         P                  ! VVV 3R lS P
                   4       4      P	                  4       p\        P                  \        P                  4      '       d†   \        P                  ! WC4       Uu. uF(  pVf   K	  VP                  f   K  RVP                   2NK*  	  pp\        V4       RS R2.V,           p\        P                  RP                  V4      4       \!        \#        V4      \#        V4      R7      # u upi )c           
   3  ón   <"  € T F*  p\        VSSP                  P                  R R SR7      x € K,  	  R# 5i)F©r'  Úpage_validatorÚ
expand_dirr�   r&  N©r    rW   Úis_secure_origin©r  Úlocr'  r&  r>   s   & €€€r)   r  Ú0LinkCollector.collect_sources.<locals>.<genexpr>Ø  sD   øé € ð 
4
ñ P�ô ØØ%9Ø#Ÿ|™|×<Ñ<Ø Ø#(Ø)÷ñ ó Pùó   ƒ25c           
   3  ón   <"  € T F*  p\        VSSP                  P                  R R SR7      x € K,  	  R# 5i)Tr*  Nr-  r/  s   & €€€r)   r  r1  ã  sB   øé € ð 
5
ñ '�ô ØØ%9Ø#Ÿ|™|×<Ñ<ØØ#'Ø)÷ñ ó 'ùr2  z* z' location(s) to search for versions of Ú:Ú
)r   r  )ÚcollectionsÚOrderedDictr  Úget_index_urls_locationsÚvaluesr   rl   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainr¿   r0   rm   rn   rÿ   r£   )r>   r&  r'  Úindex_url_sourcesÚfind_links_sourcesÚsÚliness   fff    r)   Úcollect_sourcesÚLinkCollector.collect_sourcesÒ  s8  ú€ ô (×3Ò3ö 
4
ð ×(Ñ(×AÑAÀ,ÔOó
4
ó 

÷ ‰&‹(ð 	ô )×4Ò4ö 
5
ð —’ó
5
ó 

÷ ‰&‹(ð 	ô ×ÑœwŸ}™}×-Ò-ô #ŸšÐ);ÔOóáO�AØô à%&§V¡Vô �"�Q—V‘V�H“ÙOð ð ô �u“:�,ð #Ø#/ .°ð3ðð õˆEô �L‰L˜Ÿ™ 5Ó)Ô*äÜÐ.Ó/ÜÐ-Ó.ô
ð 	
ùòs   ÃEÃEÃ#Er  ©Fr;   )rA   rB   rC   rD   rË   r=   Úclassmethodr  Úpropertyr   r#  rC  rE   r'   r+   r)   r  r  ˆ  sD   † ñõð öó ððB ô,ó ð,÷
÷(,
ñ ,
r+   r  rE  r;   )T)TrË   Ú
__future__r   r6  Úemail.messagert   rª   r=  r³   r;  rõ   Úurllib.parser\   Úcollections.abcr   r   r   r   Údataclassesr   Úhtml.parserr   Úoptparser	   Útypingr
   r   Úpip._vendor.packaging.utilsr   Úpip._vendor.requestsr   Úpip._vendor.requests.exceptionsr   Úpip._internal.exceptionsr   r   r   r   r   r   Úpip._internal.models.linkr   Ú!pip._internal.models.search_scoper   Úpip._internal.network.sessionr   Úpip._internal.network.utilsr   Úpip._internal.utils.filetypesr   Úpip._internal.utils.miscr   Úpip._internal.utils.urlsr   Úpip._internal.vcsr   Úsourcesr   r   r    Ú	getLoggerrA   rl   r$   rq   r2   Ú	Exceptionr4   rS   rU   re   ro   ry   r{   r”   r­   rÂ   r~   r·   ré   rì   rý   rÿ   r  r'   r+   r)   Ú<module>r_     sO  ðñõ #ã Û Û Û Û Û Û 	Û ß HÓ HÝ !Ý "Ý ÷õ
 :Ý )Ý 6÷÷ õ +Ý 9Ý 4Ý 8Ý 9Ý 9Ý 0Ý !ç AÑ Aà	×	Ò	˜8Ó	$€à   c Õ*€õô)�Yô )õ@ô,	ˆyô 	õ÷$8õv÷	#ñ 	#ôB�ô Bõð( ôó ðñ8 �$Ô÷.ð .ó ð.ô(�Zô ÷8@÷
ð?ð #÷	?ôD,�zô ,÷
v
ó v
r+   