Ë
    ¨Õ°jÂ@  ã                  óì  — d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;  e	jx                  e=«      Z>ee?e?f   Z@d5d„ZA G d„ deB«      ZCd6d„ZD G d„ deB«      ZEd7d„ZF	 d8	 	 	 	 	 	 	 d9d„ZGd:d „ZH G d!„ d"«      ZI G d#„ d$e«      ZJd;d%„ZKeKd<d'„«       ZL ed(¬)«       G d*„ d&«      «       ZM G d+„ d,e«      ZN	 d=	 	 	 	 	 	 	 d>d-„ZO	 d?	 	 	 	 	 d@d.„ZPdd/œ	 	 	 	 	 	 	 dAd0„ZQ G d1„ d2e«      ZR G d3„ d4«      ZSy)BzO
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                ó–   — t         j                  D ]6  }| j                  «       j                  |«      sŒ#| t	        |«         dv sŒ4|c S  y)zgLook 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     úS/var/www/mission/venv/lib/python3.12/site-packages/pip/_internal/index/collector.pyÚ_match_vcs_schemer+   4   sE   € ô
 —+‘+ò ˆØ�9‰9‹;×!Ñ! &Õ)¨c´#°f³+Ñ.>À$Ò.FØŠMðð ó    c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )Ú_NotAPIContentc                óB   •— t         ‰| �  ||«       || _        || _        y ©N)ÚsuperÚ__init__Úcontent_typeÚrequest_desc)Úselfr3   r4   Ú	__class__s      €r*   r2   z_NotAPIContent.__init__@   s"   ø€ Ü‰Ñ˜ |Ô4Ø(ˆÔØ(ˆÕr,   )r3   Ústrr4   r7   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__r2   Ú__classcell__©r6   s   @r*   r.   r.   ?   s   ø„ ÷)ñ )r,   r.   c                ó¾   — | j                   j                  dd«      }|j                  «       }|j                  d«      ryt	        || j
                  j                  «      ‚)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)Úresponser3   Úcontent_type_ls      r*   Ú_ensure_api_headerrI   F   s[   € ð ×#Ñ#×'Ñ'¨¸	ÓB€Là!×'Ñ'Ó)€NØ× Ñ ð	
ôð 	ä
˜ x×'7Ñ'7×'>Ñ'>Ó
?Ð?r,   c                  ó   — e Zd Zy)Ú_NotHTTPN)r:   r;   r<   © r,   r*   rK   rK   \   s   „ Ør,   rK   c                ó¼   — t         j                  j                  | «      \  }}}}}|dvr
t        «       ‚|j	                  | d¬«      }t        |«       t        |«       y)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[   `   sV   € ô -3¯L©L×,AÑ,AÀ#Ó,FÑ)€FˆF�D˜% ØÐ&Ñ&Ü‹jÐà�<‰<˜¨Tˆ<Ó2€DÜ�TÔä�tÕr,   Fc                óÂ  — t        t        | «      j                  «      rt        | |¬«       t        j                  dt        | «      «       ddj                  g d¢«      i}|rt        j                  d«       d|d<   |j                  | |¬	«      }t        |«       t        |«       t        j                  d
t        | «      |j                  j                  dd«      «       |S )aY  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.
    )rU   zGetting page %sÚAcceptz, )rB   z*application/vnd.pypi.simple.v1+html; q=0.1ztext/html; q=0.01z"Refreshing package index response.z	max-age=0zCache-Control)rC   zFetched page %s as %sr@   rA   )r   r   Úfilenamer[   ÚloggerÚdebugr   ÚjoinrD   r   rI   rC   )r(   rU   Úforce_revalidaterC   rZ   s        r*   Ú_get_simple_responserc   r   sÅ   € ô" ”t˜C“y×)Ñ)Ô*Ü˜S¨'Õ2ä
‡L�LÐ"Ô$8¸Ó$=Ô>ð 	�$—)‘)òó
ð€Gñ ô 	�‰Ð9Ô:Ø#.ˆ�Ñ à�;‰;�s Gˆ;Ó,€DÜ�TÔô �tÔä
‡L�LØÜ˜SÓ!Ø�‰×Ñ˜¨Ó3ôð €Kr,   c                ó˜   — | rHd| v rDt         j                  j                  «       }| d   |d<   |j                  d«      }|rt	        |«      S y)z=Determine if we have any encoding information in our headers.r@   zcontent-typeÚcharsetN)ÚemailÚmessageÚMessageÚ	get_paramr7   )rC   Úmre   s      r*   Ú_get_encoding_from_headersrk   ­   sK   € á�> WÑ,Ü�M‰M×!Ñ!Ó#ˆØ# NÑ3ˆˆ.ÑØ—+‘+˜iÓ(ˆÙÜ�w“<ÐØr,   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚCacheablePageContentc                ó.   — |j                   sJ ‚|| _        y r0   )Úcache_link_parsingÚpage©r5   rp   s     r*   r2   zCacheablePageContent.__init__¹   s   € Ø×&Ò&Ð&Ð&Øˆ�	r,   c                óŠ   — t        |t        | «      «      xr- | j                  j                  |j                  j                  k(  S r0   )Ú
isinstanceÚtyperp   r(   )r5   Úothers     r*   Ú__eq__zCacheablePageContent.__eq__½   s-   € Ü˜%¤ d£Ó,ÒP°·±·±À%Ç*Á*Ç.Á.Ñ1PÐPr,   c                ó@   — t        | j                  j                  «      S r0   )Úhashrp   r(   ©r5   s    r*   Ú__hash__zCacheablePageContent.__hash__À   s   € Ü�D—I‘I—M‘MÓ"Ð"r,   N)rp   ÚIndexContentr8   r9   )ru   Úobjectr8   Úbool)r8   Úint)r:   r;   r<   r2   rv   rz   rL   r,   r*   rm   rm   ¸   s   „ óóQô#r,   rm   c                  ó   — e Zd Zdd„Zy)Ú
ParseLinksc                 ó   — y r0   rL   rq   s     r*   Ú__call__zParseLinks.__call__Å   s   � r,   N©rp   r{   r8   zIterable[Link])r:   r;   r<   r‚   rL   r,   r*   r€   r€   Ä   s   „ ÜAr,   r€   c                óz   ‡ ‡— t         j                  dˆ fd„«       Št        j                  ‰ «      dˆ ˆfd„«       }|S )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         ‰| j                  «      «      S r0   )Úlistrp   )Úcacheable_pageÚfns    €r*   Úwrapperz*with_cached_index_content.<locals>.wrapperÏ   s   ø€ ä‘B�~×*Ñ*Ó+Ó,Ð,r,   c                ó`   •— | j                   r ‰t        | «      «      S t         ‰| «      «      S r0   )ro   rm   r†   )rp   rˆ   r‰   s    €€r*   Úwrapper_wrapperz2with_cached_index_content.<locals>.wrapper_wrapperÓ   s+   ø€ à×"Ò"ÙÔ/°Ó5Ó6Ð6Ü‘B�t“H‹~Ðr,   )r‡   rm   r8   ú
list[Link])rp   r{   r8   rŒ   )Ú	functoolsÚcacheÚwraps)rˆ   r‹   r‰   s   ` @r*   Úwith_cached_index_contentr�   È   s@   ù€ ô ‡_�_ô-ó ð-ô ‡_�_�RÓõó ðð
 Ðr,   r{   c              #  óT  K  — | j                   j                  «       }|j                  d«      r^t        j                  | j
                  «      }|j                  dg «      D ])  }t        j                  || j                  «      }|€Œ&|–— Œ+ yt        | j                  «      }| j                  xs d}|j                  | j
                  j                  |«      «       | j                  }|j                  xs |}|j                  D ]!  }	t        j                   |	||¬«      }|€Œ|–— Œ# y­w)z\
    Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
    rB   ÚfilesNzutf-8)Úpage_urlÚbase_url)r3   r%   r&   ÚjsonÚloadsÚcontentrD   r   Ú	from_jsonr(   ÚHTMLLinkParserÚencodingÚfeedÚdecoder”   ÚanchorsÚfrom_element)
rp   rH   ÚdataÚfileÚlinkÚparserrš   r(   r”   Úanchors
             r*   Úparse_linksr¤   Ü   sÿ   è ø€ ð ×&Ñ&×,Ñ,Ó.€NØ× Ñ Ð!FÔ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                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   d	Zd
ed<   dd„Zy)r{   aŒ  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—   r7   r3   ú
str | Nonerš   r(   Tr}   ro   c                ó,   — t        | j                  «      S r0   )r   r(   ry   s    r*   Ú__str__zIndexContent.__str__
  s   € Ü# D§H¡HÓ-Ð-r,   N)r8   r7   )r:   r;   r<   Ú__doc__Ú__annotations__ro   rª   rL   r,   r*   r{   r{   ù   s/   … ñð ƒNØÓØÓØ	ƒHØ#Ð˜Ó#ô.r,   c                  ó4   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd„Zˆ xZS )r™   zf
    HTMLParser that keeps the first base HREF and a list of all anchor
    elements' attributes.
    c                óP   •— t         ‰| �  d¬«       || _        d | _        g | _        y )NT)Úconvert_charrefs)r1   r2   r(   r”   r�   )r5   r(   r6   s     €r*   r2   zHTMLLinkParser.__init__  s(   ø€ Ü‰Ñ¨$ÐÔ/àˆŒØ$(ˆŒØ46ˆ�r,   c                ó²   — |dk(  r(| j                   €| j                  |«      }|�|| _         y y |dk(  r%| j                  j                  t	        |«      «       y y )NÚbaseÚa)r”   Úget_hrefr�   ÚappendÚdict)r5   ÚtagÚattrsÚhrefs       r*   Úhandle_starttagzHTMLLinkParser.handle_starttag  sT   € Ø�&Š=˜TŸ]™]Ð2Ø—=‘= Ó'ˆDØÐØ $�•ð  à�CŠZØ�L‰L×Ñ¤ U£Õ,ð r,   c                ó*   — |D ]  \  }}|dk(  sŒ|c S  y )Nr¸   rL   )r5   r·   ÚnameÚvalues       r*   r³   zHTMLLinkParser.get_href#  s&   € Ø ò 	‰KˆD�%Ø�v‹~Ø’ð	ð r,   )r(   r7   r8   r9   )r¶   r7   r·   úlist[tuple[str, str | None]]r8   r9   )r·   r½   r8   r¨   )r:   r;   r<   r«   r2   r¹   r³   r=   r>   s   @r*   r™   r™     s   ø„ ñõ
7ó-÷r,   r™   c                ó<   — |€t         j                  } |d| |«       y )Nz%Could not fetch URL %s: %s - skipping)r_   r`   )r¡   ÚreasonÚmeths      r*   Ú_handle_get_simple_failrÁ   *  s   € ð
 €|Ü�|‰|ˆÙÐ	0°$¸Õ?r,   c                óŽ   — t        | j                  «      }t        | j                  | j                  d   || j                  |¬«      S )Nr@   )rš   r(   ro   )rk   rC   r{   r—   r(   )rG   ro   rš   s      r*   Ú_make_index_contentrÃ   4  sE   € ô *¨(×*:Ñ*:Ó;€HÜØ×ÑØ×Ñ˜Ñ(ØØ�L‰LØ-ôð r,   )rb   c               óv  — | j                   j                  dd«      d   }t        |«      }|rt        j	                  d|| «       y |j                  d«      rtt        j                  j                  t        |«      «      rL|j                  d«      s|dz  }t        j                  j                  |d«      }t        j                  d|«       	 t        |||¬	«      }t!        || j"                  ¬
«      S # t$        $ r t        j	                  d| «       Y y t&        $ r6}t        j	                  d| |j(                  |j*                  «       Y d }~y d }~wt,        t.        f$ r}t1        | |«       Y d }~y d }~wt2        t4        f$ r5}d|j6                  › �}t1        | |t        j8                  ¬«       Y d }~y d }~wt:        $ r#}t1        | d|j6                  › �«       Y d }~y d }~wt<        $ r#}t1        | d|j6                  › �«       Y d }~y d }~wt>        $ r)}t1        | tA        |j6                  «      «       Y d }~y d }~ww xY w)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 %s©rU   rb   )ro   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(   Úsplitr+   r_   Úwarningr&   ÚosrW   Úisdirr   ÚendswithrQ   rR   Úurljoinr`   rc   rÃ   ro   rK   r.   r4   r3   r   r   rÁ   r   r   ÚcontextÚinfor   r   r   r7   )r¡   rU   rb   r(   Ú
vcs_schemerZ   Úexcr¿   s           r*   Ú_get_index_contentrÒ   A  s  € ð �(‰(�.‰.˜˜aÓ
  Ñ
#€Cô # 3Ó'€JÙÜ�‰ØWØØô	
ð
 ð ‡~�~�gÔ¤2§7¡7§=¡=´¸SÓ1AÔ#Bð �|‰|˜CÔ Ø�3‰JˆCô
 �l‰l×"Ñ" 3¨Ó5ˆÜ�‰Ð:¸CÔ@ðUÜ#Ø˜Ð3Cô
ˆô< # 4¸D×<SÑ<SÔTÐTøô7 ò 
Ü�‰ð1àõ	
ð6 ô- ò 
Ü�‰ðAð Ø×ÑØ×Ñ÷	
ð 	
ð* ûô Ô.Ð/ò +Ü  c×*Ð*ð ûô !¤/Ð2ò @ØGÈÏÉÀ}ÐUˆÜ  f´6·;±;×?Ñ?ð ûô !ò JÜ Ð(:¸3¿;¹;¸-Ð&H×IÐIð ûô  ò PÜ Ð(@ÀÇÁÀÐ&N×OÐOð
 ûô	 "ò 8Ü ¤c¨#¯+©+Ó&6×7Ð7ð ûð	8úsZ   ÃC0 Ã0H8ÄH8Ä,E
Å
H8ÅE-Å-H8Å?+F/Æ/H8Æ;GÇH8Ç%HÈH8ÈH3È3H8c                  ó"   — e Zd ZU ded<   ded<   y)ÚCollectedSourceszSequence[LinkSource | None]Ú
find_linksÚ
index_urlsN)r:   r;   r<   r¬   rL   r,   r*   rÔ   rÔ   ƒ  s   … Ø+Ó+Ø+Ô+r,   rÔ   c                  ó„   — e Zd ZdZ	 	 	 	 	 	 dd„Ze	 d		 	 	 	 	 	 	 d
d„«       Zedd„«       Z	 d	 	 	 	 	 dd„Z		 	 	 	 	 	 dd„Z
y)ÚLinkCollectorzµ
    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                ó    — || _         || _        y r0   )Úsearch_scoperU   )r5   rU   rÚ   s      r*   r2   zLinkCollector.__init__�  s   € ð
 )ˆÔØˆ�r,   c                ó0  — |j                   g|j                  z   }|j                  r0|s.t        j	                  ddj                  d„ |D «       «      «       g }|j                  xs g }t        j                  |||j                  ¬«      }t        ||¬«      }|S )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  ó2   K  — | ]  }t        |«      –— Œ y ­wr0   r   )Ú.0r(   s     r*   ú	<genexpr>z'LinkCollector.create.<locals>.<genexpr>¨  s   è ø€ ÒI°sÔ-¨c×2ÑIùs   ‚)rÕ   rÖ   Úno_index)rU   rÚ   )
Ú	index_urlÚextra_index_urlsrà   r_   r`   ra   rÕ   r   ÚcreaterØ   )ÚclsrU   ÚoptionsÚsuppress_no_indexrÖ   rÕ   rÚ   Úlink_collectors           r*   rã   zLinkCollector.create˜  sœ   € ð ×'Ñ'Ð(¨7×+CÑ+CÑCˆ
Ø×ÒÑ$5Ü�L‰LØ&Ø—‘ÑI¸jÔIÓIôð ˆJð ×'Ñ'Ò-¨2ˆ
ä"×)Ñ)Ø!Ø!Ø×%Ñ%ô
ˆô
 'ØØ%ô
ˆð Ðr,   c                ó.   — | j                   j                  S r0   )rÚ   rÕ   ry   s    r*   rÕ   zLinkCollector.find_linksº  s   € à× Ñ ×+Ñ+Ð+r,   Nc                ó�   — | j                   j                  }d|v xs |duxr t        |«      |v }t        || j                   |¬«      S )z>
        Fetch an HTML page containing package links.
        z:all:NrÇ   )rU   Úrefresh_packager   rÒ   )r5   ÚlocationÚpackage_namerb   Úshould_force_revalidates        r*   Úfetch_responsezLinkCollector.fetch_response¾  s_   € ð  Ÿ<™<×7Ñ7ÐØ")Ð-=Ð"=ò #
Ø Ð$ò DÜ! ,Ó/Ð3CÐCð 	 ô "ØØ—L‘LØ4ô
ð 	
r,   c                ó‚  ‡ ‡‡— t        j                  ˆˆˆ fd„‰ j                  j                  ‰«      D «       «      j	                  «       }t        j                  ˆˆˆ fd„‰ j
                  D «       «      j	                  «       }t        j                  t        j                  «      rwt        j                  ||«      D �cg c]  }|�|j                  �d|j                  › �‘Œ! }}t        |«      › d‰› d�g|z   }t        j                  dj                  |«      «       t!        t#        |«      t#        |«      ¬«      S c c}w )Nc           	   3  óh   •K  — | ])  }t        |‰‰j                  j                  d d ‰¬«      –— Œ+ y­w)F©Úcandidates_from_pageÚpage_validatorÚ
expand_dirro   Úproject_nameN©r"   rU   Úis_secure_origin©rÞ   Úlocrò   rõ   r5   s     €€€r*   rß   z0LinkCollector.collect_sources.<locals>.<genexpr>Ø  sA   øè ø€ ò 
4
ð ô ØØ%9Ø#Ÿ|™|×<Ñ<Ø Ø#(Ø)÷ð ñ
4
ùó   ƒ/2c           	   3  óh   •K  — | ])  }t        |‰‰j                  j                  d d ‰¬«      –— Œ+ y­w)Trñ   Nrö   rø   s     €€€r*   rß   z0LinkCollector.collect_sources.<locals>.<genexpr>ã  sA   øè ø€ ò 
5
ð ô ØØ%9Ø#Ÿ|™|×<Ñ<ØØ#'Ø)÷ð ñ
5
ùrú   z* z' location(s) to search for versions of ú:ú
)rÕ   rÖ   )ÚcollectionsÚOrderedDictrÚ   Úget_index_urls_locationsÚvaluesrÕ   r_   ÚisEnabledForÚloggingÚDEBUGÚ	itertoolsÚchainr¡   r'   r`   ra   rÔ   r†   )r5   rõ   rò   Úindex_url_sourcesÚfind_links_sourcesÚsÚliness   ```    r*   Úcollect_sourceszLinkCollector.collect_sourcesÒ  s2  ú€ ô (×3Ñ3õ 
4
ð ×(Ñ(×AÑAÀ,ÓOô
4
ó 

÷ ‰&‹(ð 	ô )×4Ñ4õ 
5
ð —‘ô
5
ó 

÷ ‰&‹(ð 	ô ×ÑœwŸ}™}Ô-ô #Ÿ™Ð);Ð=NÓOöàØ�= Q§V¡VÐ%7ð �Q—V‘V�H’ðˆEð ô �u“:�,ð #Ø#/ .°ð3ðð ñˆEô �L‰L˜Ÿ™ 5Ó)Ô*äÜÐ.Ó/ÜÐ-Ó.ô
ð 	
ùòs   Â>$D<)rU   r   rÚ   r   r8   r9   ©F)rU   r   rå   r
   ræ   r}   r8   rØ   )r8   z	list[str]r0   )rë   r   rì   r¨   r8   úIndexContent | None)rõ   r7   rò   r    r8   rÔ   )r:   r;   r<   r«   r2   Úclassmethodrã   ÚpropertyrÕ   rî   r  rL   r,   r*   rØ   rØ   ˆ  s¿   „ ñðàðð "ðð 
ó	ð ð
 #(ð	àðð ðð  ð	ð
 
òó ððB ò,ó ð,ð :>ð
Øð
Ø,6ð
à	ó
ð(,
àð,
ð 1ð,
ð 
ô	,
r,   rØ   )r(   r7   r8   r¨   )rG   r   r8   r9   )r(   r7   rU   r   r8   r9   r  )r(   r7   rU   r   rb   r}   r8   r   )rC   ÚResponseHeadersr8   r¨   )rˆ   r€   r8   r€   rƒ   r0   )r¡   r   r¿   zstr | ExceptionrÀ   zCallable[..., None] | Noner8   r9   )T)rG   r   ro   r}   r8   r{   )r¡   r   rU   r   rb   r}   r8   r  )Tr«   Ú
__future__r   rþ   Úemail.messagerf   r�   r  r•   r  rÊ   Úurllib.parserQ   Ú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"   Ú	getLoggerr:   r_   r7   r  r+   Ú	Exceptionr.   rI   rK   r[   rc   rk   rm   r€   r�   r¤   r{   r™   rÁ   rÃ   rÒ   rÔ   rØ   rL   r,   r*   ú<module>r(     så  ðñõ #ã Û Û Û Û Û Û 	Û ß HÓ HÝ !Ý "Ý ÷õ
 :Ý )Ý 6÷÷ õ +Ý 9Ý 4Ý 8Ý 9Ý 9Ý 0Ý !ç AÑ Aà	ˆ×	Ñ	˜8Ó	$€à   c Ñ*€óô)�Yô )ó@ô,	ˆyô 	óð* #ð8Ø	ð8àð8ð ð8ð ó	8óv÷	#ñ 	#ôB�ô Bóð( òó ðñ8 �$Ô÷.ð .ó ð.ô(�Zô ð> (,ð@Ø
ð@àð@ð %ð@ð 
ó	@ð 48ð
Øð
Ø,0ð
àó
ð" #ñ	?Ø
ð?ð ð?ð ð	?ð
 ó?ôD,�zô ,÷
v
ò v
r,   