§
    Ài½�  ã                   ój  — d 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	Z	ddl
Z
ddl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mZmZmZ dd	lmZmZmZmZmZmZm Z  dd
lm!Z" ddlm#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 dZ3 ej4        ¦   «         Z5dddœZ6d 7                     ej8        d ed¬¦  «        d         ¦  «        ¦  «        Z9ej:        dk    rd„ Z;d„ Z#d„ Z<d„ Z=dJd„Z>d„ Z?d „ Z@ejA        d!„ ¦   «         ZBd"„ ZCd#„ ZDd$„ ZEd%„ ZFdJd&„ZGd'„ ZHd(„ ZId)„ ZJd*„ ZKd+„ ZLd,„ ZMd-„ ZNd.„ ZO ePd/¦  «        ZQd0„ ZRd1„ ZSd2„ ZTd3„ ZUd4„ ZVd5„ ZWejA        d6„ ¦   «         ZXd7„ ZYdKd8„ZZd9„ Z[dLd:„Z\dMd<„Z]d=„ Z^d>„ Z_d? `                    d@¦  «        ZaeadAz  ZbeadBz  ZcdC„ ZddD„ ZedE„ ZfdF„ ZgdG„ ZhdH„ ZidI„ ZjdS )Nz”
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
é    N)ÚOrderedDict)Úmake_headersÚ	parse_urlé   )Úcerts©Ú__version__)Ú_HEADER_VALIDATORS_BYTEÚ_HEADER_VALIDATORS_STRÚHEADER_VALIDATORSÚto_native_string)ÚMappingÚ
basestringÚbytesÚ
getproxiesÚgetproxies_environmentÚinteger_typesÚis_urllib3_1)Úparse_http_list)Úproxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse©Úcookiejar_from_dict)ÚFileModeWarningÚInvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDict)z.netrcÚ_netrcéP   i»  )ÚhttpÚhttpsz, z,\s*T)Úaccept_encodingzaccept-encodingÚwin32c                 ól  — 	 dd l }n# t          $ r Y dS w xY w	 |                     |j        d¦  «        }t	          |                     |d¦  «        d         ¦  «        }|                     |d¦  «        d         }n# t          t          f$ r Y dS w xY w|r|sdS |                     d¦  «        }t          d |¦  «        }|D ]t}|dk    rd| vr d	S | 
                    dd
¦  «        }| 
                    dd¦  «        }| 
                    dd¦  «        }t          j        || t          j        ¦  «        r d	S ŒudS )Nr   Fz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚProxyEnableÚProxyOverrideú;z<local>ú.Tz\.Ú*z.*ú?)ÚwinregÚImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚintÚQueryValueExÚOSErrorÚ
ValueErrorÚsplitÚfilterÚreplaceÚreÚmatchÚI)Úhostr1   ÚinternetSettingsÚproxyEnableÚproxyOverrideÚtests         úS/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/requests/utils.pyÚproxy_bypass_registryrE   M   s…  € ð	ØˆMˆMˆMˆMøÝð 	ð 	ð 	Ø�5�5ð	øøøð
	Ø%Ÿ~š~ØÔ(ØNñ ô  Ðõ
 ˜f×1Ò1Ð2BÀMÑRÔRÐSTÔUÑVÔVˆKà"×/Ò/Ð0@À/ÑRÔRÐSTÔUˆMˆMøÝ�Ð$ð 	ð 	ð 	Ø�5�5ð	øøøàð 	 -ð 	Ø�5ð
 &×+Ò+¨CÑ0Ô0ˆå˜t ]Ñ3Ô3ˆà!ð 	ð 	ˆDØ�yÒ Ð Ø˜d�?�?Ø˜4˜4Ø—<’<  UÑ+Ô+ˆDØ—<’<  UÑ+Ô+ˆDØ—<’<  TÑ*Ô*ˆDÝŒx˜˜d¥B¤DÑ)Ô)ð Ø�t�tðàˆus   ‚ ‡
”™A A: Á:BÂBc                 óZ   — t          ¦   «         rt          | ¦  «        S t          | ¦  «        S )zšReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )r   r   rE   )r?   s    rD   r   r   s   s.   € õ "Ñ#Ô#ð 	/Ý+¨DÑ1Ô1Ð1å(¨Ñ.Ô.Ð.ó    c                 óN   — t          | d¦  «        r|                      ¦   «         } | S )z/Returns an internal sequence dictionary update.Úitems)ÚhasattrrI   )Úds    rD   Údict_to_sequencerL      s(   € õ ˆq�'ÑÔð Ø�GŠG‰IŒIˆà€HrG   c                 óH  — d }d}t           s*t          | t          ¦  «        r|                      d¦  «        } t	          | d¦  «        rt          | ¦  «        }n–t	          | d¦  «        r| j        }n~t	          | d¦  «        rn	 |                      ¦   «         }t          j        |¦  «        j	        }d| j
        vrt          j        dt          ¦  «         n# t          j        t           f$ r Y nw xY wt	          | d¦  «        r‘	 |                      ¦   «         }t	          | d	¦  «        rW|€U	 |                      dd
¦  «         |                      ¦   «         }|                      |pd¦  «         n'# t&          $ r d}Y nw xY wn# t&          $ r |�|}Y nw xY w|€d}t)          d||z
  ¦  «        S )Nr   úutf-8Ú__len__ÚlenÚfilenoÚba%  Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.ÚtellÚseeké   )r   Ú
isinstancer   ÚencoderJ   rP   rQ   ÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnr   ÚioÚUnsupportedOperationÚAttributeErrorrS   rT   r7   Úmax)ÚoÚtotal_lengthÚcurrent_positionrQ   s       rD   Ú	super_lenre   ˆ   sú  € Ø€LØÐåð �J q­#Ñ.Ô.ð ð �HŠH�WÑÔˆåˆq�)ÑÔð Ý˜1‘v”vˆˆå	��EÑ	Ô	ð Ø”uˆˆå	��HÑ	Ô	ð ð	Ø—X’X‘Z”ZˆFõ œ8 FÑ+Ô+Ô3ˆLð ˜!œ&Ð Ð Ý”ð2õ $ñ
ô 
ð 
øøõ Ô'­Ð8ð 	ð 	ð 	ð ˆDð		øøøõ. ˆq�&ÑÔð %ð	%Ø Ÿvšv™xœxÐõ �q˜&Ñ!Ô!ð % lÐ&:ð	%à—F’F˜1˜a‘L”L�LØ#$§6¢6¡8¤8�Lð —F’FÐ+Ð0¨qÑ1Ô1Ð1Ð1øÝð %ð %ð %Ø#$�L�L�Lð%øøøøøõ% ð 	0ð 	0ð 	0ð
 Ð'Ø#/Ð øøð	0øøøð* ÐØˆåˆq�,Ð!1Ñ1Ñ2Ô2Ð2s7   Á?C ÃC)Ã(C)Ã=E9 Ä$AE& Å&E5Å4E5Å9F
Æ	F
Fc                 ó   — t           j                             d¦  «        }|�|f}nd„ t          D ¦   «         }	 ddlm}m} d}|D ]D}t           j                             |¦  «        }t           j                             |¦  «        r|} nŒE|€dS t          | ¦  «        }	|	j
        }
	  ||¦  «                             |
¦  «        }|r|d         rdnd}||         |d         fS dS # |t          f$ r |r‚ Y dS w xY w# t          t          f$ r Y dS w xY w)z;Returns the Requests tuple auth for a given url from netrc.ÚNETRCNc              3   ó    K  — | ]	}d |› �V — Œ
dS )z~/N© )Ú.0Úfs     rD   ú	<genexpr>z!get_netrc_auth.<locals>.<genexpr>Ö   s(   è è € Ð9Ð9¨˜8 ˜8˜8Ð9Ð9Ð9Ð9Ð9Ð9rG   r   )ÚNetrcParseErrorÚnetrcr   rU   )rX   ÚenvironÚgetÚNETRC_FILESrn   rm   ÚpathÚ
expanduserÚexistsr   ÚhostnameÚauthenticatorsr7   r2   r`   )ÚurlÚraise_errorsÚ
netrc_fileÚnetrc_locationsrm   rn   Ú
netrc_pathrk   ÚlocÚrir?   r$   Úlogin_is                rD   Úget_netrc_authr   Ï   sƒ  € õ ”—’ Ñ(Ô(€JØÐØ%˜-ˆˆà9Ð9­[Ð9Ñ9Ô9ˆð Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0àˆ
à ð 	ð 	ˆAÝ”'×$Ò$ QÑ'Ô'ˆCÝŒw�~Š~˜cÑ"Ô"ð Ø �
Ø�ðð
 ÐØˆFå�c‰]Œ]ˆØŒ{ˆð
	Ø�U˜:Ñ&Ô&×5Ò5°dÑ;Ô;ˆFØð 4à% aœyÐ/˜!˜!¨a�Ø˜wœ¨°¬Ð3Ð3ð4ð 4øð  ¥Ð)ð 	ð 	ð 	ð ð Øðð ð ð	øøøøõ �Ð(ð ð ð Øˆˆðøøøs6   ¸AC8 ÂC8 Â$;C" Ã"C5Ã1C8 Ã4C5Ã5C8 Ã8DÄDc                 óÐ   — t          | dd¦  «        }|rLt          |t          ¦  «        r9|d         dk    r/|d         dk    r%t          j                             |¦  «        S dS dS dS dS )z0Tries to guess the filename of the given object.ÚnameNr   Ú<éÿÿÿÿÚ>)ÚgetattrrV   r   rX   rr   Úbasename)Úobjr�   s     rD   Úguess_filenamerˆ   û   sw   € å�3˜ Ñ%Ô%€DØð &•
˜4¥Ñ,Ô,ð &°°a´¸C²°ÀDÈÄHÐPSÂOÀOÝŒw×Ò Ñ%Ô%Ð%ð&ð &ð &ð &°°ÀOÀOrG   c                 ó€  — t           j                             | ¦  «        r| S t           j                             | ¦  «        \  }}|r|t           j                             |¦  «        s]t           j                             |¦  «        \  }}|sn8d                     ||g¦  «        }|rt           j                             |¦  «        ¯]t          j        |¦  «        s| S t          j        |¦  «        }||                     ¦   «         vr| S t          j
        ¦   «         }t           j                             ||                     d¦  «        d         ¦  «        }t           j                             |¦  «        sOt          |¦  «        5 }|                     |                     |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |S )zÄReplace nonexistent paths that look like they refer to a member of a zip
    archive with the location of an extracted copy of the target, or else
    just return the provided path unchanged.
    ú/rƒ   N)rX   rr   rt   r9   ÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚtempfileÚ
gettempdirÚatomic_openÚwriteÚread)rr   ÚarchiveÚmemberÚprefixÚzip_fileÚtmpÚextracted_pathÚfile_handlers           rD   Úextract_zipped_pathsrœ     sÅ  € õ
 
„w‡~‚~�dÑÔð àˆõ ”g—m’m DÑ)Ô)�O€GˆVØ
ð ,�"œ'Ÿ.š.¨Ñ1Ô1ð ,Ýœ'Ÿ-š-¨Ñ0Ô0‰ˆ�Øð 	ð Ø—’˜6 6Ð*Ñ+Ô+ˆð ð ,�"œ'Ÿ.š.¨Ñ1Ô1ð ,õ Ô˜gÑ&Ô&ð ØˆåŒ˜wÑ'Ô'€HØ�X×&Ò&Ñ(Ô(Ð(Ð(Øˆõ Ô
Ñ
Ô
€CÝ”W—\’\ # v§|¢|°CÑ'8Ô'8¸Ô'<Ñ=Ô=€NÝŒ7�>Š>˜.Ñ)Ô)ð 6å˜Ñ(Ô(ð 	6¨LØ×Ò˜xŸ}š}¨VÑ4Ô4Ñ5Ô5Ð5ð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6àÐs   Å>)F3Æ3F7Æ:F7c              #   óH  K  — t          j        t          j                             | ¦  «        ¬¦  «        \  }}	 t          j        |d¦  «        5 }|V — ddd¦  «         n# 1 swxY w Y   t          j        || ¦  «         dS # t          $ r t          j        |¦  «         ‚ w xY w)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN)	r�   ÚmkstemprX   rr   ÚdirnameÚfdopenr;   ÚBaseExceptionÚremove)ÚfilenameÚtmp_descriptorÚtmp_nameÚtmp_handlers       rD   r’   r’   '  sé   è è € õ  (Ô/µB´G·O²OÀHÑ4MÔ4MÐNÑNÔNÑ€N�HðÝŒY�~ tÑ,Ô,ð 	°ØÐÐÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	å
Œ
�8˜XÑ&Ô&Ð&Ð&Ð&øÝð ð ð Ý
Œ	�(ÑÔÐØðøøøs/   ¹B ÁAÁB ÁA#Á#B Á&A#Á'B Â B!c                 ó–   — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | ¦  «        S )a  Take an object and test to see if it can be represented as a
    dictionary. Unless it can not be represented as such, return an
    OrderedDict, e.g.,

    ::

        >>> from_key_val_list([('key', 'val')])
        OrderedDict([('key', 'val')])
        >>> from_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    Nú+cannot encode objects that are not 2-tuples)rV   r   r   Úboolr5   r8   r   ©Úvalues    rD   Úfrom_key_val_listr®   4  sG   € ð$ €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�uÑÔÐrG   c                 óè   — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | t          ¦  «        r|                      ¦   «         } t          | ¦  «        S )aÂ  Take an object and test to see if it can be represented as a
    dictionary. If it can be, return a list of tuples, e.g.,

    ::

        >>> to_key_val_list([('key', 'val')])
        [('key', 'val')]
        >>> to_key_val_list({'key': 'val'})
        [('key', 'val')]
        >>> to_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples

    :rtype: list
    Nrª   )	rV   r   r   r«   r5   r8   r   rI   Úlistr¬   s    rD   Úto_key_val_listr±   O  sd   € ð" €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�%�Ñ!Ô!ð Ø—’‘”ˆå�‰;Œ;ÐrG   c                 óÆ   — g }t          | ¦  «        D ]N}|dd…         |dd…         cxk    rdk    rn nt          |dd…         ¦  «        }|                     |¦  «         ŒO|S )a  Parse lists as described by RFC 2068 Section 2.

    In particular, parse comma-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.  A non-quoted string could have quotes in the
    middle.  Quotes are removed automatically after parsing.

    It basically works like :func:`parse_set_header` just that items
    may appear multiple times and case sensitivity is preserved.

    The return value is a standard :class:`list`:

    >>> parse_list_header('token, "quoted value"')
    ['token', 'quoted value']

    To create a header from the :class:`list` again, use the
    :func:`dump_header` function.

    :param value: a string with a list header.
    :return: :class:`list`
    :rtype: list
    Nr   rƒ   ú")Ú_parse_list_headerÚunquote_header_valueÚappend)r­   ÚresultÚitems      rD   Úparse_list_headerr¹   m  s�   € ð. €FÝ" 5Ñ)Ô)ð ð ˆØ���Œ8�t˜B˜C˜C”yÐ'Ð'Ò'Ð' CÒ'Ð'Ð'Ð'Ð'Ý'¨¨Q¨r¨T¬
Ñ3Ô3ˆDØ�Š�dÑÔÐÐØ€MrG   c                 óì   — i }t          | ¦  «        D ]a}d|vrd||<   Œ|                     dd¦  «        \  }} | dd…         | dd…         cxk    rdk    rn nt          | dd…         ¦  «        } | ||<   Œb|S )a^  Parse lists of key, value pairs as described by RFC 2068 Section 2 and
    convert them into a python dict:

    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
    >>> type(d) is dict
    True
    >>> sorted(d.items())
    [('bar', 'as well'), ('foo', 'is a fish')]

    If there is no value for a key it will be `None`:

    >>> parse_dict_header('key_without_value')
    {'key_without_value': None}

    To create a header from the :class:`dict` again, use the
    :func:`dump_header` function.

    :param value: a string with a dict header.
    :return: :class:`dict`
    :rtype: dict
    Ú=Nr   rƒ   r³   )r´   r9   rµ   )r­   r·   r¸   r�   s       rD   Úparse_dict_headerr¼   �  s£   € ð, €FÝ" 5Ñ)Ô)ð ð ˆØ�dˆ?ˆ?ØˆF�4‰LØØ—j’j  aÑ(Ô(‰ˆˆeØ��!�Œ9˜˜b˜c˜cœ
Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ð)Ý(¨¨q°¨t¬Ñ5Ô5ˆEØˆˆt‰ˆØ€MrG   c                 óÊ   — | r`| d         | d         cxk    rdk    rGn nD| dd…         } |r| dd…         dk    r*|                       dd¦  «                              d	d¦  «        S | S )
zçUnquotes a header value.  (Reversal of :func:`quote_header_value`).
    This does not use the real unquoting but what browsers are actually
    using for quoting.

    :param value: the header value to unquote.
    :rtype: str
    r   rƒ   r³   r   NrU   z\\ú\z\")r;   )r­   Úis_filenames     rD   rµ   rµ   °  s‹   € ð ð C��q”˜U 2œYÐ-Ð-Ò-Ð-¨#Ò-Ð-Ð-Ð-Ð-ð
 �a˜�d”ˆð ð 	C˜e B Q Bœi¨6Ò1Ð1Ø—=’= ¨Ñ.Ô.×6Ò6°u¸cÑBÔBÐBØ€LrG   c                 ó   — d„ | D ¦   «         }|S )z€Returns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    c                 ó(   — i | ]}|j         |j        “ŒS ri   )r�   r­   )rj   Úcookies     rD   ú
<dictcomp>z'dict_from_cookiejar.<locals>.<dictcomp>Ð  s   € Ð>Ð>Ð>°�6”; ¤Ð>Ð>Ð>rG   ri   ©ÚcjÚcookie_dicts     rD   Údict_from_cookiejarrÇ   É  s   € ð ?Ð>¸2Ð>Ñ>Ô>€KØÐrG   c                 ó"   — t          || ¦  «        S )zÂReturns a CookieJar from a key/value dictionary.

    :param cj: CookieJar to insert cookies into.
    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :rtype: CookieJar
    r   rÄ   s     rD   Úadd_dict_to_cookiejarrÉ   Ô  s   € õ ˜{¨BÑ/Ô/Ð/rG   c                 ó`  — t          j        dt          ¦  «         t          j        dt          j        ¬¦  «        }t          j        dt          j        ¬¦  «        }t          j        d¦  «        }|                     | ¦  «        |                     | ¦  «        z   |                     | ¦  «        z   S )zlReturns encodings from given content string.

    :param content: bytestring to extract encodings from.
    z¤In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>])Úflagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])r\   r]   ÚDeprecationWarningr<   Úcompiler>   Úfindall)ÚcontentÚ
charset_reÚ	pragma_reÚxml_res       rD   Úget_encodings_from_contentrÓ   ß  s¦   € õ
 „Mð1õ 	ñô ð õ ”Ð@ÍÌÐMÑMÔM€JÝ”
ÐIÕQSÔQUÐVÑVÔV€IÝŒZÐ?Ñ@Ô@€Fð 	×Ò˜7Ñ#Ô#Ø
×
Ò
˜GÑ
$Ô
$ñ	%à
�.Š.˜Ñ
!Ô
!ñ	"ðrG   c                 ó   — |                       d¦  «        }|d                              ¦   «         |dd…         }}i }d}|D ]‹}|                     ¦   «         }|rs|d}}|                     d¦  «        }	|	dk    r=|d|	…                              |¦  «        }||	dz   d…                              |¦  «        }|||                     ¦   «         <   ŒŒ||fS )	z¦Returns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r-   r   r   Nz"' Tr»   rƒ   )r9   ÚstripÚfindÚlower)
ÚheaderÚtokensÚcontent_typeÚparamsÚparams_dictÚitems_to_stripÚparamÚkeyr­   Úindex_of_equalss
             rD   Ú_parse_content_type_headerrá   ø  sä   € ð �\Š\˜#ÑÔ€FØ! !œ9Ÿ?š?Ñ,Ô,¨f°Q°R°R¬j�&€LØ€KØ€Nàð -ð -ˆØ—’‘”ˆØð 	-Ø �ˆCØ#Ÿjšj¨™oœoˆOØ "Ò$Ð$ØÐ,˜_Ð,Ô-×3Ò3°NÑCÔC�Ø˜o°Ñ1Ð3Ð3Ô4×:Ò:¸>ÑJÔJ�Ø',ˆK˜Ÿ	š	™œÑ$øØ˜Ð$Ð$rG   c                 ó²   — |                       d¦  «        }|sdS t          |¦  «        \  }}d|v r|d                              d¦  «        S d|v rdS d|v rdS dS )	z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonrN   )rp   rá   rÕ   )ÚheadersrÚ   rÛ   s      rD   Úget_encoding_from_headersræ     s€   € ð —;’;˜~Ñ.Ô.€Làð Øˆtå5°lÑCÔCÑ€L�&à�FÐÐØ�iÔ ×&Ò& uÑ-Ô-Ð-à�ÐÐØˆ|à˜\Ð)Ð)àˆwð *Ð)rG   c              #   óð   K  — |j         €
| E d{V —† dS  t          j        |j         ¦  «        d¬¦  «        }| D ]}|                     |¦  «        }|r|V — Œ|                     dd¬¦  «        }|r|V — dS dS )zStream decodes an iterator.Nr;   ©ÚerrorsrG   T)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderÚdecode)ÚiteratorÚrÚdecoderÚchunkÚrvs        rD   Ústream_decode_response_unicoderô   *  s²   è è € ð 	„zÐØÐÐÐÐÐÐÐØˆà6�fÔ*¨1¬:Ñ6Ô6¸iÐHÑHÔH€GØð ð ˆØ�^Š^˜EÑ"Ô"ˆØð 	ØˆHˆHˆHøØ	�Š˜ 4ˆÑ	(Ô	(€BØ	ð Øˆˆˆˆˆðð rG   c              #   ó´   K  — d}|�|dk    rt          | ¦  «        }|t          | ¦  «        k     r)| |||z   …         V — ||z  }|t          | ¦  «        k     °'dS dS )z Iterate over slices of a string.r   N)rP   )ÚstringÚslice_lengthÚposs      rD   Úiter_slicesrù   ;  s{   è è € à
€CØÐ˜|¨qÒ0Ð0Ý˜6‘{”{ˆØ
•�F‘”Ò
Ð
Ø�S˜3 Ñ-Ð-Ô.Ð.Ð.Ð.Øˆ|Ñˆð •�F‘”Ò
Ð
Ð
Ð
Ð
Ð
rG   c                 ó:  — t          j        dt          ¦  «         g }t          | j        ¦  «        }|r;	 t          | j        |¦  «        S # t          $ r |                     |¦  «         Y nw xY w	 t          | j        |d¬¦  «        S # t          $ r
 | j        cY S w xY w)zâReturns the requested content back in unicode.

    :param r: Response object to get unicode content from.

    Tried:

    1. charset from content-type
    2. fall back and replace all unicode characters

    :rtype: str
    z£In requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r;   rè   )
r\   r]   rÌ   ræ   rå   r   rÏ   ÚUnicodeErrorr¶   Ú	TypeError)rð   Útried_encodingsrë   s      rD   Úget_unicode_from_responserþ   E  sÓ   € õ „Mð1õ 	ñô ð ð €Oõ )¨¬Ñ3Ô3€Hàð -ð	-Ý�q”y (Ñ+Ô+Ð+øÝð 	-ð 	-ð 	-Ø×"Ò" 8Ñ,Ô,Ð,Ð,Ð,ð	-øøøðÝ�1”9˜h¨yÐ9Ñ9Ô9Ð9øÝð ð ð ØŒyÐÐÐðøøøs#   ´A	 Á	A+Á*A+Á/B ÂBÂBzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c                 óþ  — |                       d¦  «        }t          dt          |¦  «        ¦  «        D ]¶}||         dd…         }t          |¦  «        dk    rƒ|                     ¦   «         ro	 t	          t          |d¦  «        ¦  «        }n!# t          $ r t          d|› d�¦  «        ‚w xY w|t          v r|||         dd…         z   ||<   Œ™d||         › �||<   Œ¨d||         › �||<   Œ·d	 	                    |¦  «        S )
z¨Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.

    :rtype: str
    ú%r   r   rU   é   z"Invalid percent-escape sequence: 'ú'NÚ )
r9   ÚrangerP   ÚisalnumÚchrr5   r8   r!   ÚUNRESERVED_SETr‹   )ÚuriÚpartsÚiÚhÚcs        rD   Úunquote_unreservedr  r  s  € ð �IŠI�c‰NŒN€EÝ�1•c˜%‘j”jÑ!Ô!ð &ð &ˆØ�!ŒH�Q�q�SŒMˆÝˆq‰6Œ6�QŠ;ˆ;˜1Ÿ9š9™;œ;ˆ;ðLÝ�˜A˜r™
œ
‘O”O��øÝð Lð Lð LÝ Ð!JÀaÐ!JÐ!JÐ!JÑKÔKÐKðLøøøð •NÐ"Ð"Ø˜u Qœx¨¨¨œ|Ñ+��a‘�à)˜u Qœx˜>˜>��a‘�à%˜5 œ8�~�~ˆE�!‰HˆHØ�7Š7�5‰>Œ>Ðs   Á-BÂB)c                 óŠ   — d}d}	 t          t          | ¦  «        |¬¦  «        S # t          $ r t          | |¬¦  «        cY S w xY w)z¬Re-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.

    :rtype: str
    z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)Úsafe)r   r  r!   )r  Úsafe_with_percentÚsafe_without_percents      rD   Úrequote_urir  Š  sk   € ð /ÐØ0Ðð	5õ Õ'¨Ñ,Ô,Ð3DÐEÑEÔEÐEøÝð 5ð 5ð 5õ �SÐ3Ð4Ñ4Ô4Ð4Ð4Ð4ð	5øøøs   †$ ¤AÁAc           
      ó’  — t          j        dt          j        | ¦  «        ¦  «        d         }|                     d¦  «        \  }}t          j        dt          j        t          t          |¦  «        ¦  «        ¦  «        ¦  «        d         }t          j        dt          j        |¦  «        ¦  «        d         |z  }||z  ||z  k    S )zïThis function allows you to check if an IP belongs to a network subnet

    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24

    :rtype: bool
    z=Lr   rŠ   )ÚstructÚunpackÚsocketÚ	inet_atonr9   Údotted_netmaskr5   )ÚipÚnetÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks          rD   Úaddress_in_networkr      s¢   € õ Œ]˜4¥Ô!1°"Ñ!5Ô!5Ñ6Ô6°qÔ9€FØ—I’I˜c‘N”N�M€GˆTÝŒm˜D¥&Ô"2µ>Å#ÀdÁ)Ä)Ñ3LÔ3LÑ"MÔ"MÑNÔNÈqÔQ€GÝŒm˜D¥&Ô"2°7Ñ";Ô";Ñ<Ô<¸QÔ?À'ÑI€GØ�WÑ '¨GÑ"3Ò4Ð4rG   c                 ól   — ddd| z
  z  dz
  z  }t          j        t          j        d|¦  «        ¦  «        S )z�Converts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0

    :rtype: str
    l   ÿÿ r   é    z>I)r  Ú	inet_ntoar  Úpack)Úmaskr  s     rD   r  r  ¯  s8   € ð ˜˜b 4™i™¨1Ñ,Ñ,€DÝÔ�FœK¨¨dÑ3Ô3Ñ4Ô4Ð4rG   c                 óT   — 	 t          j        | ¦  «         n# t          $ r Y dS w xY wdS )z
    :rtype: bool
    FT)r  r  r7   )Ú	string_ips    rD   Úis_ipv4_addressr(  º  sB   € ðÝÔ˜Ñ#Ô#Ð#Ð#øÝð ð ð Øˆuˆuðøøøàˆ4s   ‚ —
%¤%c                 óN  — |                       d¦  «        dk    r‰	 t          |                      d¦  «        d         ¦  «        }n# t          $ r Y dS w xY w|dk     s|dk    rdS 	 t	          j        |                      d¦  «        d         ¦  «         n# t          $ r Y dS w xY wdS dS )zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    rŠ   r   Fr"  r   T)Úcountr5   r9   r8   r  r  r7   )Ústring_networkr%  s     rD   Úis_valid_cidrr,  Å  sØ   € ð ×Ò˜CÑ Ô  AÒ%Ð%ð	Ý�~×+Ò+¨CÑ0Ô0°Ô3Ñ4Ô4ˆDˆDøÝð 	ð 	ð 	Ø�5�5ð	øøøð �!Š8ˆ8�t˜b’y�yØ�5ð	ÝÔ˜^×1Ò1°#Ñ6Ô6°qÔ9Ñ:Ô:Ð:Ð:øÝð 	ð 	ð 	Ø�5�5ð	øøøð ˆuØˆ4s#   ›(A Á
AÁAÁ$-B Â
B ÂB c              #   ó  K  — |du}|r.t           j                             | ¦  «        }|t           j        | <   	 dV — |r"|€t           j        | = dS |t           j        | <   dS dS # |r|€t           j        | = n|t           j        | <   w xY w)zÎSet the environment variable 'env_name' to 'value'

    Save previous value, yield, and then restore the previous value stored in
    the environment variable 'env_name'.

    If 'value' is None, do nothingN)rX   ro   rp   )Úenv_namer­   Úvalue_changedÚ	old_values       rD   Úset_environr1  Ý  s´   è è € ð  Ð%€MØð %Ý”J—N’N 8Ñ,Ô,ˆ	Ø$�Œ
�8Ñð1Øˆˆˆàð 	1ØÐ Ý”J˜xÐ(Ð(Ð(à'0•”
˜8Ñ$Ð$Ð$ð		1ð 	1øˆ=ð 	1ØÐ Ý”J˜xÐ(Ð(à'0•”
˜8Ñ$Ð0Ð0Ð0Ð0s   ¸A" Á"#Bc                 óÈ  — d„ }|}|€ |d¦  «        }t          | ¦  «        }|j        €dS |rÕd„ |                     dd¦  «                             d¦  «        D ¦   «         }t	          |j        ¦  «        r<|D ]8}t          |¦  «        rt          |j        |¦  «        r dS Œ*|j        |k    r dS Œ9nR|j        }|j        r|d	|j        › �z  }|D ]4}|j                             |¦  «        s|                     |¦  «        r dS Œ5t          d|¦  «        5  	 t          |j        ¦  «        }n# t          t          j        f$ r d
}Y nw xY wddd¦  «         n# 1 swxY w Y   |rdS d
S )zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    c                 ó¢   — t           j                             | ¦  «        p0t           j                             |                      ¦   «         ¦  «        S ©N)rX   ro   rp   Úupper)rß   s    rD   Ú	get_proxyz(should_bypass_proxies.<locals>.get_proxyü  s1   € ÝŒz�~Š~˜cÑ"Ô"ÐA¥b¤j§n¢n°S·Y²Y±[´[Ñ&AÔ&AÐArG   NÚno_proxyTc              3   ó   K  — | ]}|¯|V — Œ	d S r4  ri   )rj   r?   s     rD   rl   z(should_bypass_proxies.<locals>.<genexpr>  s'   è è € ÐRÐR˜TÈTÐR�DÐRÐRÐRÐRÐRÐRrG   Ú r  Ú,ú:F)r   ru   r;   r9   r(  r,  r   ÚportÚendswithr1  r   rü   r  Úgaierror)	rw   r7  r6  Úno_proxy_argÚparsedÚproxy_ipÚhost_with_portr?   Úbypasss	            rD   Úshould_bypass_proxiesrD  ó  s#  € ðBð Bð Bð
 €LØÐØ�9˜ZÑ(Ô(ˆÝ�c‰]Œ]€Fà„Ðàˆtàð  ð SÐR X×%5Ò%5°c¸2Ñ%>Ô%>×%DÒ%DÀSÑ%IÔ%IÐRÑRÔRˆå˜6œ?Ñ+Ô+ð 	 Ø$ð  ð  �Ý  Ñ*Ô*ð  Ý)¨&¬/¸8ÑDÔDð $Ø#˜t˜tð$à”_¨Ò0Ð0ð  ˜4˜4ð 1ð	 ð $œ_ˆNØŒ{ð 4ØÐ"3 f¤kÐ"3Ð"3Ñ3�à ð  ð  �Ø”?×+Ò+¨DÑ1Ô1ð  °^×5LÒ5LÈTÑ5RÔ5Rð  ð  ˜4˜4ð õ
 
�Z Ñ	.Ô	.ð ð ð	Ý! &¤/Ñ2Ô2ˆFˆFøÝ�6œ?Ð+ð 	ð 	ð 	ØˆFˆFˆFð	øøøð	ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð Øˆtàˆ5s6   ÄEÄD)Ä(EÄ)EÅEÅEÅEÅEÅEc                 óD   — t          | |¬¦  «        ri S t          ¦   «         S )zA
    Return a dict of environment proxies.

    :rtype: dict
    ©r7  )rD  r   )rw   r7  s     rD   Úget_environ_proxiesrG  0  s(   € õ ˜S¨8Ð4Ñ4Ô4ð Øˆ	å‰|Œ|ÐrG   c                 ó  — |pi }t          | ¦  «        }|j        €.|                     |j        |                     d¦  «        ¦  «        S |j        dz   |j        z   |j        d|j        z   dg}d}|D ]}||v r
||         } nŒ|S )z­Select a proxy for the url, if applicable.

    :param url: The url being for the request
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    NÚallz://zall://)r   ru   rp   Úscheme)rw   ÚproxiesÚurlpartsÚ
proxy_keysÚproxyÚ	proxy_keys         rD   Úselect_proxyrP  <  s­   € ð ˆm˜€GÝ˜‰}Œ}€HØÔÐ Ø�{Š{˜8œ?¨G¯KªK¸Ñ,>Ô,>Ñ?Ô?Ð?ð 	Œ˜%Ñ (Ô"3Ñ3ØŒØ�8Ô$Ñ$Øð	€Jð €EØð ð ˆ	Ø˜ÐÐØ˜IÔ&ˆEØˆEð  ð €LrG   c                 ód  — |�|ni }| j         }t          |¦  «        j        }|                     d¦  «        }|                     ¦   «         }|rct          ||¬¦  «        sRt          ||¬¦  «        }|                     ||                     d¦  «        ¦  «        }|r|                     ||¦  «         |S )a©  This method takes proxy information from a request and configuration
    input to resolve a mapping of target proxies. This will consider settings
    such as NO_PROXY to strip proxy configurations.

    :param request: Request or PreparedRequest
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    :param trust_env: Boolean declaring whether to trust environment configs

    :rtype: dict
    Nr7  rF  rI  )rw   r   rJ  rp   ÚcopyrD  rG  Ú
setdefault)	ÚrequestrK  Ú	trust_envrw   rJ  r7  Únew_proxiesÚenviron_proxiesrN  s	            rD   Úresolve_proxiesrX  V  s»   € ð !Ð,ˆgˆg°"€GØ
Œ+€CÝ�c‰]Œ]Ô!€FØ�{Š{˜:Ñ&Ô&€HØ—,’,‘.”.€Kàð 2Õ.¨s¸XÐFÑFÔFð 2Ý-¨c¸HÐEÑEÔEˆà×#Ò# F¨O×,?Ò,?ÀÑ,FÔ,FÑGÔGˆàð 	2Ø×"Ò" 6¨5Ñ1Ô1Ð1ØÐrG   úpython-requestsc                 ó   — | › dt           › �S )zO
    Return a string representing the default user agent.

    :rtype: str
    rŠ   r   )r�   s    rD   Údefault_user_agentr[  q  s   € ð Ð"Ð"•[Ð"Ð"Ð"rG   c                  óL   — t          t          ¦   «         t          dddœ¦  «        S )z9
    :rtype: requests.structures.CaseInsensitiveDict
    z*/*z
keep-alive)z
User-AgentzAccept-EncodingÚAcceptÚ
Connection)r#   r[  ÚDEFAULT_ACCEPT_ENCODINGri   rG   rD   Údefault_headersr`  z  s2   € õ å,Ñ.Ô.Ý6ØØ&ð		
ð 	
ñô ð rG   c                 ó  — g }d}|                       |¦  «        } | s|S t          j        d| ¦  «        D ]Ë}	 |                     dd¦  «        \  }}n# t          $ r |d}}Y nw xY wd|                      d¦  «        i}|                     d¦  «        D ]X}	 |                     d¦  «        \  }} n# t          $ r Y  n0w xY w|                       |¦  «        ||                      |¦  «        <   ŒY|                     |¦  «         ŒÌ|S )	z¼Return a list of parsed link headers proxies.

    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"

    :rtype: list
    z '"z, *<r-   r   r  rw   z<> '"r»   )rÕ   r<   r9   r8   r¶   )	r­   ÚlinksÚreplace_charsÚvalrw   rÛ   ÚlinkrÞ   rß   s	            rD   Úparse_header_linksrf  ˆ  sA  € ð €Eà€Mà�KŠK˜Ñ&Ô&€EØð ØˆåŒx˜ Ñ&Ô&ð ð ˆð	"ØŸ)š) C¨Ñ+Ô+‰KˆC��øÝð 	"ð 	"ð 	"Ø˜r�ˆCˆCˆCð	"øøøð �s—y’y Ñ*Ô*Ð+ˆà—\’\ #Ñ&Ô&ð 	Hð 	HˆEðØ"Ÿ[š[¨Ñ-Ô-‘
��U�UøÝð ð ð Ø��ðøøøð .3¯[ª[¸Ñ-GÔ-GˆD�—’˜=Ñ)Ô)Ñ*Ð*à�Š�TÑÔÐÐà€Ls#   ¶AÁA!Á A!ÂB,Â,
B:Â9B:ú ÚasciirU   é   c                 óÖ  — | dd…         }|t           j        t           j        fv rdS |dd…         t           j        k    rdS |dd…         t           j        t           j        fv rdS |                     t          ¦  «        }|dk    rd	S |dk    r,|ddd…         t          k    rd
S |ddd…         t          k    rdS |dk    r*|dd…         t          k    rdS |dd…         t          k    rdS dS )z
    :rtype: str
    Né   zutf-32ri  z	utf-8-sigrU   zutf-16r   rN   z	utf-16-ber   z	utf-16-lez	utf-32-bez	utf-32-le)
rì   ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEr*  Ú_nullÚ_null2Ú_null3)ÚdataÚsampleÚ	nullcounts      rD   Úguess_json_utfrw  ³  s  € ð �"�1�"ŒX€FØ•&Ô%¥vÔ':Ð;Ð;Ð;ØˆxØˆbˆqˆb„z•V”_Ò$Ð$Øˆ{Øˆbˆqˆb„z•fÔ)­6Ô+>Ð?Ð?Ð?ØˆxØ—’�UÑ#Ô#€IØ�A‚~€~ØˆwØ�A‚~€~Ø�#�#�A�#Œ;�&Ò Ð Ø�;Ø�!�$�Q�$Œ<�6Ò!Ð!Ø�;à�A‚~€~Ø�"�1�"Œ:�ÒÐØ�;Ø�!�"�"Œ:�ÒÐØ�;àˆ4rG   c                 óº   — t          | ¦  «        }|\  }}}}}}}	|j        }
|
s||
}}
|rd                     ||
g¦  «        }
|€|}|€d}t          ||
|d||	f¦  «        S )zªGiven a URL that may or may not have a scheme, prepend the given scheme.
    Does not replace a present scheme with the one provided as an argument.

    :rtype: str
    ú@Nr  )r   Únetlocr‹   r   )rw   Ú
new_schemer@  rJ  Úauthr?   r<  rr   ÚqueryÚfragmentrz  s              rD   Úprepend_scheme_if_neededr  Ó  s‹   € õ �s‰^Œ^€FØ6<Ñ3€FˆD�$˜˜d E¨8ð Œ]€FØð $Ø˜V�ˆàð *ð —’˜4 ˜.Ñ)Ô)ˆØ€~ØˆØ€|Øˆå�v˜v t¨R°¸ÐAÑBÔBÐBrG   c                 óª   — t          | ¦  «        }	 t          |j        ¦  «        t          |j        ¦  «        f}n# t          t
          f$ r d}Y nw xY w|S )z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    )r  r  )r   r   ÚusernameÚpasswordr`   rü   )rw   r@  r|  s      rD   Úget_auth_from_urlrƒ  ð  sd   € õ �c‰]Œ]€FðÝ˜œÑ(Ô(­'°&´/Ñ*BÔ*BÐCˆˆøÝ�IÐ&ð ð ð Øˆˆˆðøøøð €Ks   ‘(: ºAÁAc                 óT   — | \  }}t          | |d¦  «         t          | |d¦  «         dS )z§Verifies that header parts don't contain leading whitespace
    reserved characters, or return characters.

    :param header: tuple, in the format (name, value).
    r   r   N)Ú_validate_header_part)rØ   r�   r­   s      rD   Úcheck_header_validityr†     s7   € ð �K€Dˆ%Ý˜& $¨Ñ*Ô*Ð*Ý˜& %¨Ñ+Ô+Ð+Ð+Ð+rG   c           
      óD  — t          |t          ¦  «        rt          |         }nHt          |t          ¦  «        rt          |         }n%t          d|›d| › dt          |¦  «        › �¦  «        ‚|                     |¦  «        s|dk    rdnd}t          d|› d|›�¦  «        ‚d S )	NzHeader part (z) from z# must be of type str or bytes, not r   r�   r­   zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: )rV   r   r   r   r
   r    Útyper=   )rØ   Úheader_partÚheader_validator_indexÚ	validatorÚheader_kinds        rD   r…  r…    sô   € Ý�+�sÑ#Ô#ð 
Ý*Ð+AÔBˆ	ˆ	Ý	�K¥Ñ	'Ô	'ð 
Ý+Ð,BÔCˆ	ˆ	åðE˜Kð Eð E°&ð Eð EÝ15°kÑ1BÔ1BðEð Eñ
ô 
ð 	
ð
 �?Š?˜;Ñ'Ô'ð 
Ø 6¸!Ò ;Ð ;�f�fÀˆÝðEØ&1ðEð EØ5@ðEð Eñ
ô 
ð 	
ð
ð 
rG   c                 óœ   — t          | ¦  «        \  }}}}}}|s||}}|                     dd¦  «        d         }t          |||||df¦  «        S )zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    ry  r   rƒ   r  )r   Úrsplitr   )rw   rJ  rz  rr   rÛ   r}  r~  s          rD   Úurldefragauthr�    sb   € õ 5=¸S±M´MÑ1€FˆF�D˜& %¨ð ð $Ø˜V�ˆà�]Š]˜3 Ñ"Ô" 2Ô&€Få�v˜v t¨V°U¸BÐ?Ñ@Ô@Ð@rG   c                 óä   — t          | j        dd¦  «        }|�Jt          | j        t          ¦  «        r0	  || j        ¦  «         dS # t
          $ r t          d¦  «        ‚w xY wt          d¦  «        ‚)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    rT   Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r…   ÚbodyrV   Ú_body_positionr   r7   r"   )Úprepared_requestÚ	body_seeks     rD   Úrewind_bodyr•  /  s–   € õ Ð(Ô-¨v°tÑ<Ô<€IØÐ¥ØÔ'­ñ"ô "Ðð	ØˆIÐ&Ô5Ñ6Ô6Ð6Ð6Ð6øÝð 	ð 	ð 	Ý'ØMñô ð ð	øøøõ
 $Ð$QÑRÔRÐRs   ´A ÁA )Fr4  )T)rY  )kÚ__doc__rì   Ú
contextlibr^   rX   r<   r  r  Úsysr�   r\   rŒ   Úcollectionsr   Úurllib3.utilr   r   r  r   r	   Ú_internal_utilsr
   r   r   r   Úcompatr   r   r   r   r   r   r   r   r´   r   r   r   r   r   r   r   Úcookiesr   Ú
exceptionsr   r    r!   r"   Ú
structuresr#   rq   ÚwhereÚDEFAULT_CA_BUNDLE_PATHÚDEFAULT_PORTSr‹   r9   r_  ÚplatformrE   rL   re   r   rˆ   rœ   Úcontextmanagerr’   r®   r±   r¹   r¼   rµ   rÇ   rÉ   rÓ   rá   ræ   rô   rù   rþ   Ú	frozensetr  r  r  r   r  r(  r,  r1  rD  rG  rP  rX  r[  r`  rf  rW   rq  rr  rs  rw  r  rƒ  r†  r…  r�  r•  ri   rG   rD   ú<module>r¦     s¢  ððð ð €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +à"€à$˜œ™œÐ à cÐ*Ð*€ð Ÿ)š)Ø€B„HˆW�l�l°4Ð8Ñ8Ô8Ð9JÔKÑLÔLñô Ð ð
 „<�7ÒÐð$ð $ð $ðL	/ð 	/ð 	/ðð ð ðD3ð D3ð D3ðN)ð )ð )ð )ðX&ð &ð &ð"ð "ð "ðJ Ôð	ð 	ñ Ôð	ðð ð ð6ð ð ð<ð ð ð@ð ð ðFð ð ð ð2ð ð ð0ð 0ð 0ðð ð ð2%ð %ð %ð2ð ð ð2ð ð ð"ð ð ð$ð $ð $ðP �ØMñô €ð
ð ð ð05ð 5ð 5ð,5ð 5ð 5ð5ð 5ð 5ðð ð ðð ð ð0 Ôð1ð 1ñ Ôð1ð*:ð :ð :ðz	ð 	ð 	ð 	ðð ð ð4ð ð ð ð6#ð #ð #ð #ðð ð ð"ð "ð "ðL 	�Š�gÑÔ€Ø	�‰€Ø	�‰€ðð ð ð@Cð Cð Cð:ð ð ð ,ð ,ð ,ð
ð 
ð 
ð&Að Að Að"Sð Sð Sð Sð SrG   