ó
    Ð]jW]  ã                  ó   • S SK Jr  S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  SSK
Jr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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!  SSK"J#r#  SSK$J%r%J&r&  \RN                  (       a
  S SK(r(S SK)J*r*  / SQr+\RX                  " \-5      r.Sr/Sr0 " S S\Rb                  5      r2      SS jr3\Rh                  " \3\25      \Rh                  " \3\25      S.r5\\S.r6 " S S\5      r7 " S S\75      r8SS jr9g) é    )ÚannotationsN)ÚTracebackType)Úurljoiné   )ÚHTTPHeaderDictÚRecentlyUsedContainer)ÚRequestMethods)ÚProxyConfig)ÚHTTPConnectionPoolÚHTTPSConnectionPoolÚport_by_scheme)ÚLocationValueErrorÚMaxRetryErrorÚProxySchemeUnknownÚURLSchemeUnknown)ÚBaseHTTPResponse)Ú_TYPE_SOCKET_OPTIONS)Úconnection_requires_http_tunnel)ÚRetry)ÚTimeout)ÚUrlÚ	parse_url)ÚSelf)ÚPoolManagerÚProxyManagerÚproxy_from_url)Úkey_fileÚ	cert_fileÚ	cert_reqsÚca_certsÚca_cert_dataÚssl_versionÚssl_minimum_versionÚssl_maximum_versionÚca_cert_dirÚssl_contextÚkey_passwordÚserver_hostnamei @  c                  ó<  • \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S '   S!\S"'   S#\S$'   S!\S%'   S&\S''   S(\S)'   S!\S*'   S+\S,'   S\S-'   S\S.'   S\S/'   S0rg1)2ÚPoolKeyé8   z¿
All known keyword arguments that could be provided to the pool manager, its
pools, or the underlying connections.

All custom key schemes should include the fields in this key at a minimum.
ÚstrÚ
key_schemeÚkey_hostú
int | NoneÚkey_portzTimeout | float | int | NoneÚkey_timeoutzRetry | bool | int | NoneÚkey_retrieszbool | NoneÚ	key_blockztuple[str, int] | NoneÚkey_source_addressú
str | NoneÚkey_key_fileÚkey_key_passwordÚkey_cert_fileÚkey_cert_reqsÚkey_ca_certszstr | bytes | NoneÚkey_ca_cert_datazint | str | NoneÚkey_ssl_versionzssl.TLSVersion | NoneÚkey_ssl_minimum_versionÚkey_ssl_maximum_versionÚkey_ca_cert_dirússl.SSLContext | NoneÚkey_ssl_contextÚkey_maxsizez!frozenset[tuple[str, str]] | NoneÚkey_headersú
Url | NoneÚ
key__proxyÚkey__proxy_headersúProxyConfig | NoneÚkey__proxy_configz_TYPE_SOCKET_OPTIONS | NoneÚkey_socket_optionsÚkey__socks_optionszbool | str | NoneÚkey_assert_hostnameÚkey_assert_fingerprintÚkey_server_hostnameÚkey_blocksize© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__rO   ó    ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/urllib3/poolmanager.pyr*   r*   8   sµ   ‡ ñð ƒOØƒMØÓØ-Ó-Ø*Ó*ØÓØ.Ó.ØÓØ Ó ØÓØÓØÓØ(Ó(Ø%Ó%Ø2Ó2Ø2Ó2ØÓØ*Ó*ØÓØ2Ó2ØÓØ9Ó9Ø)Ó)Ø3Ó3Ø9Ó9Ø*Ó*Ø&Ó&Ø#Ó#ØÖrW   r*   c                ó  • UR                  5       nUS   R                  5       US'   US   R                  5       US'   S H.  nX2;   d  M
  X#   c  M  [        X#   R                  5       5      X#'   M0     UR	                  S5      nUb  [        U5      US'   [        UR                  5       5       H  nUR                  U5      USU-   '   M     U R                   H  nXR;  d  M
  SX%'   M     UR	                  S5      c	  [        US'   U " S0 UD6$ )	a»  
Create a pool key out of a request context dictionary.

According to RFC 3986, both the scheme and host are case-insensitive.
Therefore, this function normalizes both before constructing the pool
key for an HTTPS request. If you wish to change this behaviour, provide
alternate callables to ``key_fn_by_scheme``.

:param key_class:
    The class to use when constructing the key. This should be a namedtuple
    with the ``scheme`` and ``host`` keys at a minimum.
:type  key_class: namedtuple
:param request_context:
    A dictionary-like object that contain the context for a request.
:type  request_context: dict

:return: A namedtuple that can be used as a connection pool key.
:rtype:  PoolKey
ÚschemeÚhost)ÚheadersÚ_proxy_headersÚ_socks_optionsNÚsocket_optionsÚkey_rN   rO   )ÚcopyÚlowerÚ	frozensetÚitemsÚgetÚtupleÚlistÚkeysÚpopÚ_fieldsÚ_DEFAULT_BLOCKSIZE)Ú	key_classÚrequest_contextÚcontextÚkeyÚsocket_optsÚfields         rX   Ú_default_key_normalizerrr   _   s  € ð. ×"Ñ"Ó$€GØ Ñ)×/Ñ/Ó1€GˆHÑØ˜f‘o×+Ñ+Ó-€GˆF�Oó ?ˆØ�>˜g™lÓ6Ü$ W¡\×%7Ñ%7Ó%9Ó:ˆG‹Lñ ?ð —+‘+Ð.Ó/€KØÑÜ$)¨+Ó$6ˆÐ Ñ!ô �G—L‘L“NÖ#ˆØ '§¡¨CÓ 0ˆ�˜‘Óñ $ð ×"Ô"ˆØÕØ!ˆG‹Nñ #ð
 ‡{�{�?Ó#Ñ+Ü#5ˆ�Ñ áÑ�wÑÐrW   ©ÚhttpÚhttpsc                  óZ  ^ • \ rS rSr% SrSrS\S'   SrS\S'     S       SU 4S jjjrSS	 jr	        SS
 jr
 S         SS jjrSS jr   S         SS jjr    SS jr      SS jr S     S S jjr    S!S jrS"S jr S#         S$S jjrSrU =r$ )%r   é¢   a  
Allows for arbitrary requests while transparently keeping track of
necessary connection pools for you.

:param num_pools:
    Number of connection pools to cache before discarding the least
    recently used pool.

:param headers:
    Headers to include with all requests, unless other headers are given
    explicitly.

:param \**connection_pool_kw:
    Additional parameters are used to create fresh
    :class:`urllib3.connectionpool.ConnectionPool` instances.

Example:

.. code-block:: python

    import urllib3

    http = urllib3.PoolManager(num_pools=2)

    resp1 = http.request("GET", "https://google.com/")
    resp2 = http.request("GET", "https://google.com/mail")
    resp3 = http.request("GET", "https://yahoo.com/")

    print(len(http.pools))
    # 2

NrD   ÚproxyrG   Úproxy_configc                ó0  >• [         TU ]  U5        SU;   aD  US   n[        U[        5      (       d*  [        R                  " U5      nUR                  5       nXCS'   X0l        U   [        U5      U l        [        U l	        [        R                  5       U l
        g )NÚretries)ÚsuperÚ__init__Ú
isinstancer   Úfrom_intra   Úconnection_pool_kwr   ÚpoolsÚpool_classes_by_schemeÚkey_fn_by_scheme)ÚselfÚ	num_poolsr\   r€   r{   Ú	__class__s        €rX   r}   ÚPoolManager.__init__Ç   s‰   ø€ ô 	‰Ñ˜Ô!ð Ð*Ó*Ø(¨Ñ3ˆGÜ˜g¤u×-Ñ-ÜŸ.š.¨Ó1�Ø%7×%<Ñ%<Ó%>Ð"Ø07 9Ñ-Ø"4ÔáÜ*¨9Ó5ˆŒ
ô '=ˆÔ#Ü 0× 5Ñ 5Ó 7ˆÕrW   c                ó   • U $ ©NrO   ©r„   s    rX   Ú	__enter__ÚPoolManager.__enter__æ   s   € ØˆrW   c                ó$   • U R                  5         g)NF)Úclear)r„   Úexc_typeÚexc_valÚexc_tbs       rX   Ú__exit__ÚPoolManager.__exit__é   s   € ð 	�
‰
ŒàrW   c                ó"  • U R                   U   nUc  U R                  R                  5       nUR                  S5      c	  [        US'   S H  nUR                  US5        M     US:X  a  [         H  nUR                  US5        M     U" X#40 UD6$ )a–  
Create a new :class:`urllib3.connectionpool.ConnectionPool` based on host, port, scheme, and
any additional pool keyword arguments.

If ``request_context`` is provided, it is provided as keyword arguments
to the pool class used. This method is used to actually create the
connection pools handed out by :meth:`connection_from_url` and
companion methods. It is intended to be overridden for customization.
NÚ	blocksize)rZ   r[   Úportrt   )r‚   r€   ra   re   rk   ri   ÚSSL_KEYWORDS)r„   rZ   r[   r–   rm   Úpool_clsro   Úkws           rX   Ú	_new_poolÚPoolManager._new_pooló   s�   € ð  .2×-HÑ-HÈÑ-PˆØÑ"Ø"×5Ñ5×:Ñ:Ó<ˆOð ×Ñ˜{Ó+Ñ3Ü+=ˆO˜KÑ(ó .ˆCØ×Ñ  TÖ*ñ .ð �VÓß"�Ø×#Ñ# B¨Ö-ñ #ñ ˜Ñ6 oÑ6Ð6rW   c                ó8   • U R                   R                  5         g)z”
Empty our store of pools and direct them all to close.

This will not affect in-flight connections, but they will not be
re-used after completion.
N)r�   rŽ   rŠ   s    rX   rŽ   ÚPoolManager.clear  s   € ð 	�
‰
×ÑÕrW   c                óô   • U(       d  [        S5      eU R                  U5      nU=(       d    SUS'   U(       d(  [        R                  " US   R	                  5       S5      nX%S'   XS'   U R                  U5      $ )al  
Get a :class:`urllib3.connectionpool.ConnectionPool` based on the host, port, and scheme.

If ``port`` isn't given, it will be derived from the ``scheme`` using
``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is
provided, it is merged with the instance's ``connection_pool_kw``
variable and used to create the new connection pool, if one is
needed.
zNo host specified.rt   rZ   éP   r–   r[   )r   Ú_merge_pool_kwargsr   re   rb   Úconnection_from_context)r„   r[   r–   rZ   Úpool_kwargsrm   s         rX   Úconnection_from_hostÚ PoolManager.connection_from_host"  sv   € ö" Ü$Ð%9Ó:Ð:à×1Ñ1°+Ó>ˆØ$*×$4¨fˆ˜Ñ!ÞÜ!×%Ò% o°hÑ&?×&EÑ&EÓ&GÈÓLˆDØ"&˜ÑØ"&˜Ñà×+Ñ+¨OÓ<Ð<rW   c                ó  • SU;   a,  [         R                  " S[        5        UR                  S5        US   R	                  5       nU R
                  R                  U5      nU(       d  [        U5      eU" U5      nU R                  XAS9$ )zÙ
Get a :class:`urllib3.connectionpool.ConnectionPool` based on the request context.

``request_context`` must at least contain the ``scheme`` key and its
value must be a key in ``key_fn_by_scheme`` instance variable.
ÚstrictzbThe 'strict' parameter is no longer needed on Python 3+. This will raise an error in urllib3 v3.0.rZ   ©rm   )	ÚwarningsÚwarnÚFutureWarningri   rb   rƒ   re   r   Úconnection_from_pool_key)r„   rm   rZ   Úpool_key_constructorÚpool_keys        rX   r¡   Ú#PoolManager.connection_from_context?  s†   € ð �Ó&Ü�MŠMð<äôð
 ×Ñ Ô)à  Ñ*×0Ñ0Ó2ˆØ#×4Ñ4×8Ñ8¸Ó@ÐÞ#Ü" 6Ó*Ð*Ù'¨Ó8ˆà×,Ñ,¨XÐ,ÐWÐWrW   c                ó  • U R                   R                     U R                   R                  U5      nU(       a  UsSSS5        $ US   nUS   nUS   nU R                  XEXbS9nX0R                   U'   SSS5        U$ ! , (       d  f       W$ = f)zê
Get a :class:`urllib3.connectionpool.ConnectionPool` based on the provided pool key.

``pool_key`` should be a namedtuple that only contains immutable
objects. At a minimum it must have the ``scheme``, ``host``, and
``port`` fields.
NrZ   r[   r–   r§   )r�   Úlockre   rš   )r„   r­   rm   ÚpoolrZ   r[   r–   s          rX   r«   Ú$PoolManager.connection_from_pool_keyX  s‰   € ð �Z‰Z�_‹_ð —:‘:—>‘> (Ó+ˆDÞØ÷ ‰_ð % XÑ.ˆFØ" 6Ñ*ˆDØ" 6Ñ*ˆDØ—>‘> &°�>ÐVˆDØ#'�J‰J�xÑ ÷ ð ˆ÷ Œ_ð ˆús   —$A<Á-A<Á<
Bc                óx   • [        U5      nU R                  UR                  UR                  UR                  US9$ )a–  
Similar to :func:`urllib3.connectionpool.connection_from_url`.

If ``pool_kwargs`` is not provided and a new pool needs to be
constructed, ``self.connection_pool_kw`` is used to initialize
the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs``
is provided, it is used instead. Note that if a new pool does not
need to be created for the request, the provided ``pool_kwargs`` are
not used.
)r–   rZ   r¢   )r   r£   r[   r–   rZ   )r„   Úurlr¢   Úus       rX   Úconnection_from_urlÚPoolManager.connection_from_urlr  s:   € ô �c‹NˆØ×(Ñ(Ø�F‰F˜Ÿ™¨¯©¸kð )ð 
ð 	
rW   c                ó´   • U R                   R                  5       nU(       a%  UR                  5        H  u  p4Uc   X#	 M  XBU'   M     U$ ! [         a     M$  f = f)zï
Merge a dictionary of override values for self.connection_pool_kw.

This does not modify self.connection_pool_kw and returns a new dict.
Any keys in the override dictionary with a value of ``None`` are
removed from the merged dictionary.
)r€   ra   rd   ÚKeyError)r„   ÚoverrideÚbase_pool_kwargsro   Úvalues        rX   r    ÚPoolManager._merge_pool_kwargs„  se   € ð  ×2Ñ2×7Ñ7Ó9ÐÞØ&Ÿn™nÖ.‘
�Ø‘=ðØ,Ò1ð -2 SÓ)ñ /ð  Ðøô	 $ó Úðús   »A	Á	
AÁAc                ó~   • U R                   c  g[        U R                   U R                  UR                  5      (       + $ )z“
Indicates if the proxy requires the complete destination URL in the
request.  Normally this is only needed when not using an HTTP CONNECT
tunnel.
F)rx   r   ry   rZ   )r„   Ú
parsed_urls     rX   Ú!_proxy_requires_url_absolute_formÚ-PoolManager._proxy_requires_url_absolute_formš  s:   € ð �:‰:ÑØä2Ø�J‰J˜×)Ñ)¨:×+<Ñ+<ó
ô 
ð 	
rW   c                óä  • [        U5      nUR                  c  [        R                  " S[        SS9  U R                  UR                  UR                  UR                  S9nSUS'   SUS'   S	U;  a  U R                  US	'   U R                  U5      (       a  UR                  " X40 UD6nOUR                  " XR                  40 UD6nU=(       a    UR                  5       nU(       d  U$ [        X(5      nUR                  S
:X  a&  SnSUS'   [        US	   5      R!                  5       US	'   UR#                  SUR$                  5      n	['        U	[(        5      (       d  [(        R*                  " X“S9n	U	R,                  (       ak  UR/                  U5      (       dU  US	   R1                  5       n
US	    H5  nUR3                  5       U	R,                  ;   d  M#  U
R5                  US5        M7     X¤S	'    U	R7                  XXvS9n	X”S'   X4S'   [>        RA                  SX(5        UR=                  5         U R                  " X40 UD6$ ! [8         a'    U	R:                  (       a  UR=                  5         e Us $ f = f)a  
Same as :meth:`urllib3.HTTPConnectionPool.urlopen`
with custom cross-host redirect logic and only sends the request-uri
portion of the ``url``.

The given ``url`` parameter must be absolute, such that an appropriate
:class:`urllib3.connectionpool.ConnectionPool` can be chosen for it.
NzõURLs without a scheme (ie 'https://') are deprecated and will raise an error in urllib3 v3.0. To avoid this FutureWarning ensure all URLs start with 'https://' or 'http://'. Read more in this issue: https://github.com/urllib3/urllib3/issues/2920é   )ÚcategoryÚ
stacklevel)r–   rZ   FÚassert_same_hostÚredirectr\   i/  ÚGETÚbodyr{   )rÇ   )ÚresponseÚ_poolzRedirecting %s -> %s)!r   rZ   r¨   r©   rª   r£   r[   r–   r\   rÀ   ÚurlopenÚrequest_uriÚget_redirect_locationr   Ústatusr   Ú_prepare_for_method_changere   r{   r~   r   r   Úremove_headers_on_redirectÚis_same_hostra   rb   ri   Ú	incrementr   Úraise_on_redirectÚ
drain_connÚlogÚinfo)r„   Úmethodr´   rÇ   r™   rµ   ÚconnrÊ   Úredirect_locationr{   Únew_headersÚheaders               rX   rÌ   ÚPoolManager.urlopen§  s=  € ô �c‹Nˆà�8‰8ÑÜ�MŠMðAô 'Øòð ×(Ñ(¨¯©°a·f±fÀQÇXÁXÐ(ÐNˆà!&ˆÐÑØˆˆ:‰à˜BÓØ ŸL™LˆBˆy‰Mà×1Ñ1°!×4Ñ4Ø—|’| FÑ6°2Ñ6‰Hà—|’| F¯M©MÑ@¸RÑ@ˆHà$×I¨×)GÑ)GÓ)IÐÞ ØˆOô $ CÓ;Ðà�?‰?˜cÓ!àˆFàˆBˆv‰JÜ*¨2¨i©=Ó9×TÑTÓVˆBˆy‰Mà—&‘&˜ H×$4Ñ$4Ó5ˆÜ˜'¤5×)Ñ)Ü—n’n WÑ@ˆGð
 ×-×-°d×6GÑ6GØ÷7
ñ 7
ð ˜Y™-×,Ñ,Ó.ˆKØ˜Yœ-�Ø—<‘<“> W×%GÑ%GÕGØ—O‘O F¨DÖ1ñ (ð (ˆy‰Mð	Ø×'Ñ'¨¸hÐ'ÐSˆGð  ˆ9‰Ø!ˆ:‰ä�‰Ð'¨Ô@à×ÑÔØ�|Š|˜FÑ<¸Ñ<Ð<øô ó 	Ø×(×(Ø×#Ñ#Ô%ØØŠOð		ús   Ç-H> È>.I/É.I/)r€   rƒ   r‚   r�   )é
   N)r…   Úintr\   útyping.Mapping[str, str] | Noner€   ú
typing.AnyÚreturnÚNone)râ   r   )r�   ztype[BaseException] | Noner�   zBaseException | Noner‘   zTracebackType | Nonerâ   ztyping.Literal[False]r‰   )
rZ   r,   r[   r,   r–   rß   rm   údict[str, typing.Any] | Nonerâ   r   )râ   rã   ©Nrt   N©
r[   r5   r–   r/   rZ   r5   r¢   rä   râ   r   )rm   údict[str, typing.Any]râ   r   )r­   r*   rm   rç   râ   r   )r´   r,   r¢   rä   râ   r   )rº   rä   râ   rç   )r¿   r   râ   Úbool©T©
rØ   r,   r´   r,   rÇ   rè   r™   rá   râ   r   )rP   rQ   rR   rS   rT   rx   rU   ry   r}   r‹   r’   rš   rŽ   r£   r¡   r«   r¶   r    rÀ   rÌ   rV   Ú__classcell__©r†   s   @rX   r   r   ¢   s¹  ø‡ ñðB €Eˆ:ÓØ'+€LÐ$Ó+ð Ø37ð8àð8ð 1ð8ð )ð	8ð
 
÷8ð 8ô>ðà,ðð &ðð %ð	ð
 
ôð 9=ð$7àð$7ð ð$7ð ð	$7ð
 6ð$7ð 
õ$7ôLð  Ø#Ø48ð=àð=ð ð=ð ð	=ð
 2ð=ð 
õ=ð:XØ4ðXà	ôXð2ØðØ2Gðà	ôð6 EIð
Øð
Ø%Að
à	õ
ð$ Ø4ð à	ô ô,
ð 7;ðP=ØðP=Ø #ðP=Ø/3ðP=ØBLðP=à	÷P=ó P=rW   r   c                  óÖ   ^ • \ rS rSrSr       S                   S	U 4S jjjr   S
         SU 4S jjjr S     SS jjr S         SU 4S jjjrSr	U =r
$ )r   iú  a  
Behaves just like :class:`PoolManager`, but sends all requests through
the defined proxy, using the CONNECT method for HTTPS URLs.

:param proxy_url:
    The URL of the proxy to be used.

:param proxy_headers:
    A dictionary containing headers that will be sent to the proxy. In case
    of HTTP they are being sent with each request, while in the
    HTTPS/CONNECT case they are sent only once. Could be used for proxy
    authentication.

:param proxy_ssl_context:
    The proxy SSL context is used to establish the TLS connection to the
    proxy when using HTTPS proxies.

:param use_forwarding_for_https:
    (Defaults to False) If set to True will forward requests to the HTTPS
    proxy to be made on behalf of the client instead of creating a TLS
    tunnel via the CONNECT method. **Enabling this flag means that request
    and response headers and content will be visible from the HTTPS proxy**
    whereas tunneling keeps request and response headers and content
    private.  IP address, target hostname, SNI, and port are always visible
    to an HTTPS proxy even when this flag is disabled.

:param proxy_assert_hostname:
    The hostname of the certificate to verify against.

:param proxy_assert_fingerprint:
    The fingerprint of the certificate to verify against.

Example:

.. code-block:: python

    import urllib3

    proxy = urllib3.ProxyManager("https://localhost:3128/")

    resp1 = proxy.request("GET", "http://google.com/")
    resp2 = proxy.request("GET", "http://httpbin.org/")

    # One pool was shared by both plain HTTP requests.
    print(len(proxy.pools))
    # 1

    resp3 = proxy.request("GET", "https://httpbin.org/")
    resp4 = proxy.request("GET", "https://twitter.com/")

    # A separate pool was added for each HTTPS target.
    print(len(proxy.pools))
    # 3

c	                óB  >• [        U[        5      (       a)  UR                   SUR                   SUR                   3n
OUn
[        U
5      nUR                  S;  a  [        UR                  5      eUR                  (       d0  [        R                  " UR                  S5      nUR                  US9nX°l
        U=(       d    0 U l        XPl        [        UUUU5      U l        U R                  U	S'   U R                  U	S'   U R                  U	S'   [        TU ]@  " X#40 U	D6  g )	Nz://Ú:rs   rŸ   )r–   Ú_proxyr]   Ú_proxy_config)r~   r   rZ   r[   r–   r   r   r   re   Ú_replacerx   Úproxy_headersÚproxy_ssl_contextr
   ry   r|   r}   )r„   Ú	proxy_urlr…   r\   ró   rô   Úuse_forwarding_for_httpsÚproxy_assert_hostnameÚproxy_assert_fingerprintr€   Ústr_proxy_urlrx   r–   r†   s                €rX   r}   ÚProxyManager.__init__3  s
  ø€ ô �iÔ!3×4Ñ4Ø(×/Ñ/Ð0°°I·N±NÐ3CÀ1ÀYÇ^Á^ÐDTÐU‰Mà%ˆMÜ˜-Ó(ˆà�<‰<Ð0Ó0Ü$ U§\¡\Ó2Ð2à�z�zÜ!×%Ò% e§l¡l°BÓ7ˆDØ—N‘N¨�NÐ-ˆEàŒ
Ø*×0¨bˆÔØ!2ÔÜ'ØØ$Ø!Ø$ó	
ˆÔð (,§z¡zÐ˜8Ñ$Ø/3×/AÑ/AÐÐ+Ñ,Ø.2×.?Ñ.?Ð˜?Ñ+ä‰Ò˜ÑBÐ/AÓBrW   c                óÄ   >• US:X  a  [         TU ]  XX4S9$ [         TU ]  U R                  R                  U R                  R                  U R                  R
                  US9$ )Nru   )r¢   )r|   r£   rx   r[   r–   rZ   )r„   r[   r–   rZ   r¢   r†   s        €rX   r£   Ú!ProxyManager.connection_from_host\  se   ø€ ð �WÓÜ‘7Ñ/Ø˜Fð 0ð ð ô ‰wÑ+Ø�J‰J�O‰O˜TŸZ™ZŸ_™_¨d¯j©j×.?Ñ.?È[ð ,ð 
ð 	
rW   c                ó~   • SS0n[        U5      R                  nU(       a  XCS'   U(       a  UR                  U5        U$ )zx
Sets headers needed by proxies: specifically, the Accept and Host
headers. Only sets headers not provided by the user.
ÚAcceptz*/*ÚHost)r   ÚnetlocÚupdate)r„   r´   r\   Úheaders_r   s        rX   Ú_set_proxy_headersÚProxyManager._set_proxy_headersl  s<   € ð ˜eÐ$ˆä˜3“×&Ñ&ˆÞØ%�VÑæØ�O‰O˜GÔ$ØˆrW   c                ó   >• [        U5      n[        U R                  U R                  UR                  5      (       d0  UR                  SU R                  5      nU R                  X&5      US'   [        TU ]$  " X4SU0UD6$ )z@Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute.r\   rÇ   )
r   r   rx   ry   rZ   re   r\   r  r|   rÌ   )r„   rØ   r´   rÇ   r™   rµ   r\   r†   s          €rX   rÌ   ÚProxyManager.urlopen}  sn   ø€ ô �c‹NˆÜ.¨t¯z©z¸4×;LÑ;LÈaÏhÉh×WÑWð —f‘f˜Y¨¯©Ó5ˆGØ ×3Ñ3°CÓAˆBˆy‰Mä‰wŠ˜vÑD°XÐDÀÑDÐDrW   )rx   ry   ró   rô   )rÞ   NNNFNN)rõ   r,   r…   rß   r\   rà   ró   rà   rô   r@   rö   rè   r÷   z"None | str | typing.Literal[False]rø   r5   r€   rá   râ   rã   rå   ræ   r‰   )r´   r,   r\   rà   râ   ztyping.Mapping[str, str]ré   rê   )rP   rQ   rR   rS   rT   r}   r£   r  rÌ   rV   rë   rì   s   @rX   r   r   ú  sA  ø† ñ6ðv Ø37Ø9=Ø37Ø).ØDHØ/3ð'Càð'Cð ð'Cð 1ð	'Cð
 7ð'Cð 1ð'Cð #'ð'Cð  Bð'Cð #-ð'Cð )ð'Cð 
÷'Cð 'CðX  Ø#Ø48ð
àð
ð ð
ð ð	
ð
 2ð
ð 
÷
ð 
ð" DHðØðØ!@ðà	!õð$ 7;ðEØðEØ #ðEØ/3ðEØBLðEà	÷Eö ErW   r   c                ó   • [        SSU 0UD6$ )Nrõ   rO   )r   )r´   r™   s     rX   r   r   Œ  s   € ÜÑ, #Ð,¨Ñ,Ð,rW   )rl   ztype[PoolKey]rm   rç   râ   r*   )r´   r,   r™   rá   râ   r   ):Ú
__future__r   Ú	functoolsÚloggingÚtypingr¨   Útypesr   Úurllib.parser   Ú_collectionsr   r   Ú_request_methodsr	   Ú
connectionr
   Úconnectionpoolr   r   r   Ú
exceptionsr   r   r   r   rÊ   r   Úutil.connectionr   Ú
util.proxyr   Ú
util.retryr   Úutil.timeoutr   Úutil.urlr   r   ÚTYPE_CHECKINGÚsslÚtyping_extensionsr   Ú__all__Ú	getLoggerrP   rÖ   r—   rk   Ú
NamedTupler*   rr   Úpartialrƒ   r‚   r   r   r   rO   rW   rX   Ú<module>r     s  ðÝ "ã Û Û Û Ý Ý  ç ?Ý ,Ý #ß SÑ S÷ó õ 'Ý 1Ý 7Ý Ý !ß $à	××Ûå&â
;€ð ×Ò˜Ó!€ð€ð  Ð ô$ˆf×Ñô $ðN4 Øð4 Ø/Dð4 àô4 ðx ×ÒÐ5°wÓ?Ø×ÒÐ6¸Ó@ñÐ ð
 #5Ð?RÑSÐ ôU=�.ô U=ôp
OE�;ô OEõd-rW   