ó
    ¢'Ôi?  ã                  óÈ  • S 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JrJrJr  SSKJr  SSKJr  SSKJr  SSKJrJrJr  SS	KJr  SS
KJr  SSKJ r J!r!  SSK"J#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/  SSK0J1r1  SSK2J3r3  SSK4J5r5J6r6J7r7  \	Rp                  " \95      r:\\;\;4   r<S3S jr= " S S\>5      r?S4S jr@ " S S\>5      rAS5S jrBS6S jrCS7S jrD " S  S!5      rE " S" S#\5      rFS8S$ jrG\GS9S& j5       rH\" S'S(9 " S) S%5      5       rI " S* S+\5      rJ S:       S;S, jjrK S<     S=S- jjrLS>S. jrM " S/ S0\5      rN " S1 S25      rOg)?zO
The main purpose of this module is to expose LinkCollector.collect_sources().
é    )ÚannotationsN)ÚIterableÚMutableMappingÚSequence)Ú	dataclass)Ú
HTMLParser)ÚValues)ÚCallableÚ
NamedTupleÚProtocol)Úrequests)ÚResponse)Ú
RetryErrorÚSSLError)ÚNetworkConnectionError)ÚLink)ÚSearchScope)Ú
PipSession)Úraise_for_status)Úis_archive_file©Úredact_auth_from_url)Úurl_to_path)Úvcsé   )ÚCandidatesFromPageÚ
LinkSourceÚbuild_sourcec                óª   • [         R                   H?  nU R                  5       R                  U5      (       d  M)  U [	        U5         S;   d  M=  Us  $    g)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)ÚurlÚschemes     Ú\/var/www/surfInsights/venv3-11/lib/python3.13/site-packages/pip/_internal/index/collector.pyÚ_match_vcs_schemer'   .   sC   € ô
 —+”+ˆØ�9‰9‹;×!Ñ! &×)Ó)¨c´#°f³+Ñ.>À$Õ.FØŠMñ ð ó    c                  ó,   ^ • \ rS rSrSU 4S jjrSrU =r$ )Ú_NotAPIContenté9   c                ó<   >• [         TU ]  X5        Xl        X l        g ©N)ÚsuperÚ__init__Úcontent_typeÚrequest_desc)Úselfr0   r1   Ú	__class__s      €r&   r/   Ú_NotAPIContent.__init__:   s   ø€ Ü‰Ñ˜Ô4Ø(ÔØ(Õr(   )r0   r1   )r0   Ústrr1   r5   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r/   Ú__static_attributes__Ú__classcell__©r3   s   @r&   r*   r*   9   s   ø† ÷)õ )r(   r*   c                óÆ   • U R                   R                  SS5      nUR                  5       nUR                  S5      (       a  g[	        XR
                  R                  5      e)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ÚUnknown)z	text/htmlz#application/vnd.pypi.simple.v1+htmlú#application/vnd.pypi.simple.v1+jsonN)ÚheadersÚgetr!   r"   r*   ÚrequestÚmethod)Úresponser0   Úcontent_type_ls      r&   Ú_ensure_api_headerrI   @   s^   € ð ×#Ñ#×'Ñ'¨¸	ÓB€Là!×'Ñ'Ó)€NØ× Ñ ð	
÷ñ ð 	ä
˜×'7Ñ'7×'>Ñ'>Ó
?Ð?r(   c                  ó   • \ rS rSrSrg)Ú_NotHTTPéV   © N)r8   r9   r:   r;   r<   rM   r(   r&   rK   rK   V   s   † Úr(   rK   c                ó¶   • [         R                  R                  U 5      u  p#pEnUS;  a
  [        5       eUR	                  U SS9n[        U5        [        U5        g)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.
>   ÚhttpÚhttpsT)Úallow_redirectsN)ÚurllibÚparseÚurlsplitrK   Úheadr   rI   )r$   Úsessionr%   ÚnetlocÚpathÚqueryÚfragmentÚresps           r&   Ú_ensure_api_responser\   Z   sR   € ô -3¯L©L×,AÑ,AÀ#Ó,FÑ)€F�D ØÐ&Ó&Ü‹jÐà�<‰<˜¨Tˆ<Ð2€DÜ�TÔä�tÕr(   c                ó„  • [        [        U 5      R                  5      (       a	  [        XS9  [        R                  S[        U 5      5        UR                  U SR                  / SQ5      SS.S9n[        U5        [        U5        [        R                  S[        U 5      UR                  R                  S	S
5      5        U$ )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.
©rV   zGetting page %sz, )rB   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01z	max-age=0)ÚAcceptzCache-Control)rC   zFetched page %s as %sr@   rA   )r   r   Úfilenamer\   ÚloggerÚdebugr   rD   Újoinr   rI   rC   )r$   rV   r[   s      r&   Ú_get_simple_responserd   l   s­   € ô ”t˜C“y×)Ñ)×*Ñ*Ü˜SÒ2ä
‡L�LÐ"Ô$8¸Ó$=Ô>à�;‰;Øà—i‘iòóð( )ñ+
ð ð €Dô4 �TÔô �tÔä
‡L�LØÜ˜SÓ!Ø�‰×Ñ˜¨Ó3ôð €Kr(   c                ó°   • U (       aO  SU ;   aI  [         R                  R                  5       nU S   US'   UR                  S5      nU(       a  [	        U5      $ g)z=Determine if we have any encoding information in our headers.r@   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr5   )rC   Úmrf   s      r&   Ú_get_encoding_from_headersrl   «   sK   € æ�> WÓ,Ü�M‰M×!Ñ!Ó#ˆØ# NÑ3ˆˆ.ÑØ—+‘+˜iÓ(ˆÞÜ�w“<ÐØr(   c                  ó2   • \ rS rSrSS jrSS jrS	S jrSrg)
ÚCacheablePageContenté¶   c                ó6   • UR                   (       d   eXl        g r-   )Úcache_link_parsingÚpage©r2   rr   s     r&   r/   ÚCacheablePageContent.__init__·   s   € Ø×&×&Ð&Ð&Ø�	r(   c                ó”   • [        U[        U 5      5      =(       a-    U R                  R                  UR                  R                  :H  $ r-   )Ú
isinstanceÚtyperr   r$   )r2   Úothers     r&   Ú__eq__ÚCacheablePageContent.__eq__»   s-   € Ü˜%¤ d£Ó,×P°·±·±À%Ç*Á*Ç.Á.Ñ1PÐPr(   c                ó@   • [        U R                  R                  5      $ r-   )Úhashrr   r$   ©r2   s    r&   Ú__hash__ÚCacheablePageContent.__hash__¾   s   € Ü�D—I‘I—M‘MÓ"Ð"r(   )rr   N)rr   ÚIndexContentr6   r7   )rx   Úobjectr6   Úbool)r6   Úint)r8   r9   r:   r;   r/   ry   r~   r<   rM   r(   r&   rn   rn   ¶   s   † ôôQ÷#r(   rn   c                  ó   • \ rS rSrSS jrSrg)Ú
ParseLinkséÂ   c                ó   • g r-   rM   rs   s     r&   Ú__call__ÚParseLinks.__call__Ã   s   € ¸cr(   rM   N©rr   r€   r6   zIterable[Link])r8   r9   r:   r;   rˆ   r<   rM   r(   r&   r…   r…   Â   s   † ßAr(   r…   c                ó„   ^ ^• [         R                  SU 4S jj5       m[         R                  " T 5      SU U4S jj5       nU$ )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                ó:   >• [        T" U R                  5      5      $ r-   )Úlistrr   )Úcacheable_pageÚfns    €r&   ÚwrapperÚ*with_cached_index_content.<locals>.wrapperÍ   s   ø€ ä‘B�~×*Ñ*Ó+Ó,Ð,r(   c                ój   >• U R                   (       a  T" [        U 5      5      $ [        T" U 5      5      $ r-   )rq   rn   r�   )rr   r�   r�   s    €€r&   Úwrapper_wrapperÚ2with_cached_index_content.<locals>.wrapper_wrapperÑ   s+   ø€ à×"×"ÙÔ/°Ó5Ó6Ð6Ü‘B�t“H‹~Ðr(   )rŽ   rn   r6   ú
list[Link])rr   r€   r6   r•   )Ú	functoolsÚcacheÚwraps)r�   r“   r�   s   ` @r&   Úwith_cached_index_contentr™   Æ   s@   ù€ ô ‡_�_ö-ó ð-ô ‡_‚_�RÓ÷ó ðð
 Ðr(   r€   c              #  ó~  #   • U R                   R                  5       nUR                  S5      (       ac  [        R                  " U R
                  5      nUR                  S/ 5       H,  n[        R                  " X0R                  5      nUc  M(  Uv •  M.     g[        U R                  5      nU R                  =(       d    SnUR                  U R
                  R                  U5      5        U R                  nUR                  =(       d    UnUR                   H!  n	[        R                   " X—US9nUc  M  Uv •  M#     g7f)zT
Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
rB   ÚfilesNzutf-8)Úpage_urlÚbase_url)r0   r!   r"   ÚjsonÚloadsÚcontentrD   r   Ú	from_jsonr$   ÚHTMLLinkParserÚencodingÚfeedÚdecoder�   ÚanchorsÚfrom_element)
rr   rH   Ú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   ‚D;D=T)Úfrozenc                  óZ   • \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
rS\S'   SS jrSrg)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    r5   r0   ú
str | Noner£   r$   Tr‚   rq   c                ó,   • [        U R                  5      $ r-   )r   r$   r}   s    r&   Ú__str__ÚIndexContent.__str__  s   € Ü# D§H¡HÓ-Ð-r(   rM   N)r6   r5   )	r8   r9   r:   r;   Ú__doc__Ú__annotations__rq   r´   r<   rM   r(   r&   r€   r€   ÷   s/   ‡ ñð ƒNØÓØÓØ	ƒHØ#Ð˜Ó#÷.r(   c                  óD   ^ • \ rS rSrSrSU 4S jjrSS jrS	S jrSrU =r	$ )
r¢   i  zZ
HTMLParser that keeps the first base HREF and a list of all anchor
elements' attributes.
c                óH   >• [         TU ]  SS9  Xl        S U l        / U l        g )NT)Úconvert_charrefs)r.   r/   r$   r�   r¦   )r2   r$   r3   s     €r&   r/   ÚHTMLLinkParser.__init__  s&   ø€ Ü‰Ñ¨$ÐÑ/àŒØ$(ˆŒØ46ˆ�r(   c                ó¸   • US:X  a)  U R                   c  U R                  U5      nUb  X0l         g g US:X  a%  U R                  R                  [	        U5      5        g g )NÚbaseÚa)r�   Úget_hrefr¦   ÚappendÚdict)r2   ÚtagÚattrsÚhrefs       r&   Úhandle_starttagÚHTMLLinkParser.handle_starttag  sR   € Ø�&‹=˜TŸ]™]Ñ2Ø—=‘= Ó'ˆDØÑØ $•ð  à�C‹ZØ�L‰L×Ñ¤ U£Õ,ð r(   c                ó.   • U H  u  p#US:X  d  M  Us  $    g )NrÄ   rM   )r2   rÃ   ÚnameÚvalues       r&   r¿   ÚHTMLLinkParser.get_href!  s   € Û ‰KˆDØ�v�~Ø’ñ !ð r(   )r¦   r�   r$   )r$   r5   r6   r7   )rÂ   r5   rÃ   úlist[tuple[str, str | None]]r6   r7   )rÃ   rË   r6   r²   )
r8   r9   r:   r;   r¶   r/   rÅ   r¿   r<   r=   r>   s   @r&   r¢   r¢     s   ø† ñ÷
7ô-÷ò r(   r¢   c                ó<   • Uc  [         R                  nU" SX5        g )Nz%Could not fetch URL %s: %s - skipping)ra   rb   )rª   ÚreasonÚmeths      r&   Ú_handle_get_simple_failrÏ   (  s   € ð
 �|Ü�|‰|ˆÙÐ	0°$Õ?r(   c                óˆ   • [        U R                  5      n[        U R                  U R                  S   UU R                  US9$ )Nr@   )r£   r$   rq   )rl   rC   r€   r    r$   )rG   rq   r£   s      r&   Ú_make_index_contentrÑ   2  sE   € ô *¨(×*:Ñ*:Ó;€HÜØ×ÑØ×Ñ˜Ñ(ØØ�L‰LØ-ñð r(   c               ó>  • U R                   R                  SS5      S   n[        U5      nU(       a  [        R	                  SUU 5        g UR                  S5      (       a~  [        R                  R                  [        U5      5      (       aQ  UR                  S5      (       d  US-  n[        R                  R                  US5      n[        R                  SU5         [        X!S	9n[!        X@R"                  S
9$ ! [$         a    [        R	                  SU 5         g [&         a6  n[        R	                  SU UR(                  UR*                  5         S nAg S nAf[,         a  n[/        X5         S nAg S nAf[0         a  n[/        X5         S nAg S nAf[2         a2  nSnU[5        U5      -  n[/        X[        R6                  S9   S nAg S nAf[8        R:                   a  n[/        U SU 35         S nAg S nAf[8        R<                   a    [/        U S5         g f = f)NÚ#r   r   zICannot look at %s URL %s because it does not support lookup as web pages.zfile:Ú/z
index.htmlz# file: URL is directory, getting %sr^   )rq   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	timed out)r$   Úsplitr'   ra   Úwarningr"   ÚosrX   Úisdirr   ÚendswithrR   rS   Úurljoinrb   rd   rÑ   rq   rK   r*   r1   r0   r   rÏ   r   r   r5   Úinfor   ÚConnectionErrorÚTimeout)rª   rV   r$   Ú
vcs_schemer[   ÚexcrÍ   s          r&   Ú_get_index_contentrà   ?  së  € Ø
�(‰(�.‰.˜˜aÓ
  Ñ
#€Cô # 3Ó'€JÞÜ�‰ØWØØô	
ð
 ð ‡~�~�g×Ñ¤2§7¡7§=¡=´¸SÓ1A×#BÑ#Bð �|‰|˜C× Ñ Ø�3‰JˆCô
 �l‰l×"Ñ" 3¨Ó5ˆÜ�‰Ð:¸CÔ@ðUÜ# CÑ9ˆô: # 4×<SÑ<SÑTÐTøô9 ó 
Ü�‰ð1àõ	
ð8 ô/ ó 
Ü�‰ðAð Ø×ÑØ×Ñ÷	
ð 	
ð, ûô "ó +Ü ×*Ð*ð ûô ó +Ü ×*Ð*ð ûô ó @ØGˆØ”#�c“(ÑˆÜ ´6·;±;Ö?ð ûô ×#Ñ#ó BÜ Ð(:¸3¸%Ð&@×AÐAð
 ûô	 ×Ñó 3Ü  kÕ2ð ð	3úsT   Ã	C; Ã; HÄ	HÄ&,EÅHÅ$E4Å4HÆFÆHÆ(GÇHÇ"G6Ç6#HÈHc                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚCollectedSourcesi{  zSequence[LinkSource | None]Ú
find_linksÚ
index_urlsrM   N)r8   r9   r:   r;   r·   r<   rM   r(   r&   râ   râ   {  s   ‡ Ø+Ó+Ø+Ö+r(   râ   c                  óŠ   • \ rS rSrSr      S
S jr\ S       SS jj5       r\SS j5       r	SS jr
      SS jrSrg	)Ú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                ó   • X l         Xl        g r-   ©Úsearch_scoperV   )r2   rV   ré   s      r&   r/   ÚLinkCollector.__init__ˆ  s   € ð
 )ÔØ�r(   c                óD  • UR                   /UR                  -   nUR                  (       a5  U(       d.  [        R	                  SSR                  S U 5       5      5        / nUR                  =(       d    / n[        R                  " UUUR                  S9n[        UUS9nU$ )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   #   • U  H  n[        U5      v •  M     g 7fr-   r   )Ú.0r$   s     r&   Ú	<genexpr>Ú'LinkCollector.create.<locals>.<genexpr>   s   é € ÐIºj°sÔ-¨c×2Ð2ºjùs   ‚)rã   rä   Úno_index)rV   ré   )
Ú	index_urlÚextra_index_urlsrñ   ra   rb   rc   rã   r   Úcreateræ   )ÚclsrV   ÚoptionsÚsuppress_no_indexrä   rã   ré   Úlink_collectors           r&   rô   ÚLinkCollector.create�  sœ   € ð ×'Ñ'Ð(¨7×+CÑ+CÑCˆ
Ø××Ö$5Ü�L‰LØ&Ø—‘ÑI¹jÓIÓIôð ˆJð ×'Ñ'×-¨2ˆ
ä"×)Ò)Ø!Ø!Ø×%Ñ%ñ
ˆô
 'ØØ%ñ
ˆð Ðr(   c                ó.   • U R                   R                  $ r-   )ré   rã   r}   s    r&   rã   ÚLinkCollector.find_links²  s   € à× Ñ ×+Ñ+Ð+r(   c                ó(   • [        XR                  S9$ )z.
Fetch an HTML page containing package links.
r^   )rà   rV   )r2   Úlocations     r&   Úfetch_responseÚLinkCollector.fetch_response¶  s   € ô " (·L±LÑAÐAr(   c                ó   ^ ^^• [         R                  " UUU 4S jT R                  R                  T5       5       5      R	                  5       n[         R                  " UUU 4S jT R
                   5       5      R	                  5       n[        R                  [        R                  5      (       a€  [        R                  " XC5       Vs/ s H&  nUc  M  UR                  c  M  SUR                   3PM(     nn[        U5       ST S3/U-   n[        R                  SR                  U5      5        [!        [#        U5      [#        U5      S9$ s  snf )Nc           
   3  óh   >#   • U  H'  n[        UTTR                  R                  S S TS9v •  M)     g7f)F©Úcandidates_from_pageÚpage_validatorÚ
expand_dirrq   Úproject_nameN©r   rV   Úis_secure_origin©rî   Úlocr  r  r2   s     €€€r&   rï   Ú0LinkCollector.collect_sources.<locals>.<genexpr>Â  s?   øé € ð 
4
ò P�ô ØØ%9Ø#Ÿ|™|×<Ñ<Ø Ø#(Ø)öò Pùó   ƒ/2c           
   3  óh   >#   • U  H'  n[        UTTR                  R                  S S TS9v •  M)     g7f)Tr  Nr  r	  s     €€€r&   rï   r  Í  s=   øé € ð 
5
ò '�ô ØØ%9Ø#Ÿ|™|×<Ñ<ØØ#'Ø)öò 'ùr  z* z' location(s) to search for versions of Ú:Ú
)rã   rä   )ÚcollectionsÚOrderedDictré   Úget_index_urls_locationsÚvaluesrã   ra   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainrª   r#   rb   rc   râ   r�   )r2   r  r  Úindex_url_sourcesÚfind_links_sourcesÚsÚliness   ```    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è   N)rV   r   ré   r   r6   r7   )F)rV   r   rö   r	   r÷   r‚   r6   ræ   )r6   z	list[str])rý   r   r6   úIndexContent | None)r  r5   r  r   r6   râ   )r8   r9   r:   r;   r¶   r/   Úclassmethodrô   Úpropertyrã   rþ   r  r<   rM   r(   r&   ræ   ræ   €  s£   † ñðàðð "ðð 
ô	ð ð
 #(ð	àðð ðð  ð	ð
 
ôó ððB ó,ó ð,ôBð,
àð,
ð 1ð,
ð 
÷	,
r(   ræ   )r$   r5   r6   r²   )rG   r   r6   r7   )r$   r5   rV   r   r6   r7   )r$   r5   rV   r   r6   r   )rC   ÚResponseHeadersr6   r²   )r�   r…   r6   r…   rŠ   r-   )rª   r   rÍ   zstr | ExceptionrÎ   zCallable[..., None] | Noner6   r7   )T)rG   r   rq   r‚   r6   r€   )rª   r   rV   r   r6   r  )Pr¶   Ú
__future__r   r  Úemail.messagerg   r–   r  rž   r  r×   Úurllib.parserR   Úcollections.abcr   r   r   Údataclassesr   Úhtml.parserr   Úoptparser	   Útypingr
   r   r   Úpip._vendorr   Úpip._vendor.requestsr   Úpip._vendor.requests.exceptionsr   r   Úpip._internal.exceptionsr   Ú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   Ú	getLoggerr8   ra   r5   r"  r'   Ú	Exceptionr*   rI   rK   r\   rd   rl   rn   r…   r™   r­   r€   r¢   rÏ   rÑ   rà   râ   ræ   rM   r(   r&   Ú<module>r:     s‹  ðñõ #ã Û Û Û Û Û Û 	Û ß >Ñ >Ý !Ý "Ý ÷ñ õ !Ý )ß @å ;Ý *Ý 9Ý 4Ý 8Ý 9Ý 9Ý 0Ý !ç AÑ Aà	×	Ò	˜8Ó	$€à   c Ñ*€ôô)�Yô )ô@ô,	ˆyô 	ôô$<ô~÷	#ñ 	#ôB�ô Bôð( óó ðñ8 �$Ñ÷.ð .ó ð.ô(�Zô ð> (,ð@Ø
ð@àð@ð %ð@ð 
õ	@ð 48ð
Øð
Ø,0ð
àõ
ô9ôx,�zô ,÷
h
ò h
r(   