+
    ®¾jP‚  ã            	       ó„  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIHtHt ^RIHt ^RIHt ^RIHtHtHtHt ^RIHtHtHtHtHtHt ^RIH t! ^R	IH"t"H#t#H$t$H%t%H&t&H't'H(t( ^R
I)H*t* ^RI+H,t,H-t-H.t.H/t/ ^RI0H1t1 RBt2]Pf                  ! 4       t4R^PRR/t5RPm                  ]Pn                  ! R]! RR7      R,          4      4      t8]Pr                  R8X  d   R t:R t"R t;R t<RCR lt=R t>R t?]P€                  R 4       tAR tBR tCR  tDR! tERCR" ltFR# tGR$ tHR% tIR& tJR' tKR( tLR) tMR* tN]O! RD4      tPR+ tQR, tRR- tSR. tTR/ tUR0 tV]P€                  R1 4       tWR2 tXRER3 ltYR4 tZRFR5 lt[RGR6 lt\R7 t]R8 t^R9P¿                  R:4      t`]`^,          ta]`^,          tbR; tcR< tdR= teR> tfR? tgR@ thRA tiR# )Hz”
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)Úparse_http_list)Úproxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse©Úcookiejar_from_dict)ÚFileModeWarningÚInvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDictÚhttpÚhttpsi»  z, z,\s*T)Úaccept_encodingzaccept-encodingÚwin32c                 ón  €  ^ RI p TP                  TP                  R4      p\	        TP                  TR4      ^ ,          4      pTP                  TR4      ^ ,          pT'       d	   T'       g   R# TP                  R4      p\        RT4      pT Fx  pTR8X  d   RT 9  d    R	# TP                  RR
4      pTP                  RR4      pTP                  RR4      p\        P                  ! YP\        P                  4      '       g   Kw   R	# 	  R#   \         d     R# i ; i  \        \        3 d     R# i ; i)é    NFz;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)Úhostr-   ÚinternetSettingsÚproxyEnableÚproxyOverrideÚtests   &     ÚY/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/pip/_vendor/requests/utils.pyÚproxy_bypass_registryrA   L   s!  € ð	Ûð
	Ø%Ÿ~™~Ø×(Ñ(ØNó Ðô
 ˜f×1Ñ1Ð2BÀMÓRÐSTÕUÓVˆKà"×/Ñ/Ð0@À/ÓRÐSTÕUˆM÷ §-Ùð
 &×+Ñ+¨CÓ0ˆä˜t ]Ó3ˆã!ˆDØ�yÔ Ø˜d”?ÚØ—<‘<  UÓ+ˆDØ—<‘<  UÓ+ˆDØ—<‘<  TÓ*ˆDÜ�xŠx˜¤B§D¡D×)Ô)Úñ "ñ øôC ô 	Úð	ûô œÐ$ô 	Úð	ús#   ‚D ‡AD ÄDÄDÄD4Ä3D4c                óN   € \        4       '       d   \        V 4      # \        V 4      # )z‚Return True, if the host should be bypassed.

Checks proxy settings gathered from the environment, if specified,
or the registry.
)r   r   rA   )r;   s   &r@   r   r   r   s#   € ô "×#Ò#Ü+¨DÓ1Ð1ä(¨Ó.Ð.ó    c                óJ   € \        V R4      '       d   V P                  4       p V # )z/Returns an internal sequence dictionary update.Úitems)ÚhasattrrE   )Úds   &r@   Údict_to_sequencerH   ~   s!   € ô ˆq�'×ÒØ�G‰G‹Iˆà€HrC   c                 ód  € R p^ p\        V \        4      '       d   V P                  R4      p \        V R4      '       d   \	        V 4      pMŽ\        V R4      '       d   V P                  pMo\        V R4      '       d^    V P                  4       p\        P                  ! V4      P                  pRV P                  9  d   \        P                  ! R\        4       \        V R4      '       df    V P!                  4       p\        V R4      '       dC   Vf?    V P#                  ^ ^4       V P!                  4       pT P#                  T;'       g    ^ 4       Vf   ^ p\'        ^ W,
          4      #   \        P                  \        3 d     L¬i ; i  \$         d    ^ p LHi ; i  \$         d
    Te   Tp L_i ; i)	Nú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)Ú
isinstancer   ÚencoderF   rL   rM   ÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnr   ÚioÚUnsupportedOperationÚAttributeErrorrO   rP   r3   Úmax)ÚoÚtotal_lengthÚcurrent_positionrM   s   &   r@   Ú	super_lenr`   ‡   s‡  € Ø€LØÐä�!”S×ÒØ�H‰H�WÓˆäˆq�)×ÒÜ˜1“v‰ä	��E×	Ò	Ø—u‘u‰ä	��H×	Ò	ð	Ø—X‘X“ZˆFô Ÿ8š8 FÓ+×3Ñ3ˆLð ˜!Ÿ&™&Ô Ü—’ð2ô $ô
ô ˆq�&×Òð	%Ø Ÿv™v›xÐô �q˜&×!Ò! lÒ&:ð	%à—F‘F˜1˜a”LØ#$§6¡6£8�Lð —F‘FÐ+×0Ð0¨qÔ1ð ÒØˆäˆq�,Õ1Ó2Ð2øôe ×'Ñ'¬Ð8ô 	ñ ð		ûôX ô %Ø#$’Lð%ûô% ô 	0ð
 Ò'Ø#/Ð ùð	0ús<   Á<E' Ã+F Ä5F ÅF Å'FÆFÆFÆFÆF/Æ.F/c                óz  € \         P                  P                  R4      pVe   V3pMR \         4       p ^ RIHpHp RpV FL  p \         P                  P                  V4      p\         P                  P                  T4      '       g   KJ  Tp M	  Vf   R# \        V 4      p	V	P                  p
 V! V4      P                  V
4      pV'       d%   V^ ,          '       d   ^ M^pW¼,          V^,          3# R#   \         d      R# i ; i  T\        3 d    T'       d   h  R# i ; i  \        \        3 d     R# i ; i)z;Returns the Requests tuple auth for a given url from netrc.ÚNETRCNc              3   ó,   "  € T F
  pR V 2x € K  	  R# 5i)z~/N© )Ú.0Úfs   & r@   Ú	<genexpr>Ú!get_netrc_auth.<locals>.<genexpr>Ó   s   é € Ð9©[¨˜R ˜s�8«[ùs   ‚)ÚNetrcParseErrorÚnetrc)rS   ÚenvironÚgetÚNETRC_FILESrj   ri   ÚpathÚ
expanduserÚKeyErrorÚexistsr   ÚhostnameÚauthenticatorsr3   r.   r[   )ÚurlÚraise_errorsÚ
netrc_fileÚnetrc_locationsri   rj   Ú
netrc_pathrf   ÚlocÚrir;   Ú_netrcÚlogin_is   &&           r@   Úget_netrc_authr}   Ì   s)  € ô —‘—‘ Ó(€JØÒØ%˜-‰á9­[Ó9ˆð'ß0àˆ
ã ˆAðÜ—g‘g×(Ñ(¨Ó+�ô �w‰w�~‰~˜c×"Ô"Ø �
Ùñ !ð ÒÙä�c‹]ˆØ�{‰{ˆð
	Ù˜:Ó&×5Ñ5°dÓ;ˆFßà% aŸyœy™!¨a�Ø�¨°­Ð3Ð3ñ øô' ô ó ð	ûð.  ¤Ð)ô 	÷ Øò ð	ûô œÐ(ô Úðúsk   ¶D% ÁC5Á%"D% Â
D% ÂD% Â0-D ÃD Ã5DÄ D% ÄDÄD% ÄD"ÄD"ÄD% Ä!D"Ä"D% Ä%D:Ä9D:c                óÞ   € \        V RR4      pV'       dX   \        V\        4      '       d@   V^ ,          R8w  d0   VR,          R8w  d    \        P                  P                  V4      # R# R# R# R# )z0Tries to guess the filename of the given object.ÚnameNÚ<Ú>éÿÿÿÿ)ÚgetattrrQ   r   rS   rn   Úbasename)Úobjr   s   & r@   Úguess_filenamer†   ÿ   sW   € ä�3˜ Ó%€Dß”
˜4¤×,Ò,°°aµ¸C´ÀDÈÅHÐPSÄOÜ�w‰w×Ñ Ó%Ð%ñ ET±Ñ,�trC   c                ó‚  € \         P                  P                  V 4      '       d   V # \         P                  P                  V 4      w  rV'       dd   \         P                  P                  V4      '       g?   \         P                  P                  V4      w  rV'       g   MRP	                  W2.4      pKk  \
        P                  ! V4      '       g   V # \
        P                  ! V4      pW$P                  4       9  d   V # \        P                  ! 4       p\         P                  P	                  WRP                  R4      R,          4      p\         P                  P                  V4      '       g?   \        V4      ;_uu_ 4       pVP                  VP                  V4      4       RRR4       V# V#   + '       g   i     T# ; i)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.
Ú/Nr‚   )rS   rn   rq   r5   ÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚtempfileÚ
gettempdirÚatomic_openÚwriteÚread)rn   ÚarchiveÚmemberÚprefixÚzip_fileÚtmpÚextracted_pathÚfile_handlers   &       r@   Úextract_zipped_pathsrš     s2  € ô
 
‡w�w‡~�~�d×Òàˆô —g‘g—m‘m DÓ)�O€Gß
œ"Ÿ'™'Ÿ.™.¨×1Ò1ÜŸ'™'Ÿ-™-¨Ó0‰ˆßð Ø—‘˜6Ð*Ó+Šä×Ò˜g×&Ò&Øˆä�Š˜wÓ'€HØ×&Ñ&Ó(Ô(Øˆô ×
Ò
Ó
€CÜ—W‘W—\‘\ #§|¡|°CÓ'8¸Õ'<Ó=€NÜ�7‰7�>‰>˜.×)Ò)ä˜×(Ô(¨LØ×Ñ˜xŸ}™}¨VÓ4Ô5÷ )àÐˆ>Ð÷ )Ö(àÐús   Æ !F-Æ-F>	c              #  ór  "  € \         P                  ! \        P                  P	                  V 4      R7      w  r \        P
                  ! VR4      ;_uu_ 4       pVx € RRR4       \        P                  ! W 4       R#   + '       g   i     L(; i  \         d    \        P                  ! T4       h i ; i5i)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN)	rŽ   ÚmkstemprS   rn   ÚdirnameÚfdopenr7   ÚBaseExceptionÚremove)ÚfilenameÚtmp_descriptorÚtmp_nameÚtmp_handlers   &   r@   r�   r�   +  s}   é € ô  (×/Ò/´B·G±G·O±OÀHÓ4MÔNÑ€NðÜ�YŠY�~ t×,Ô,°ØÒ÷ -ä
�
Š
�8Ö&÷ -×,ûô ô Ü
�	Š	�(ÔØðüs4   ‚7B7ºB ÁA>ÁB Á<B7Á>B	Â	B Â#B4Â4B7c                ó†   € V f   R# \        V \        \        \        \        34      '       d   \        R4      h\        V 4      # )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)rQ   r   r   Úboolr1   r4   r   ©Úvalues   &r@   Úfrom_key_val_listr¬   8  s9   € ð$ ‚}Ùä�%œ#œu¤d¬CÐ0×1Ò1ÜÐFÓGÐGä�uÓÐrC   c                óÒ   € V f   R# \        V \        \        \        \        34      '       d   \        R4      h\        V \        4      '       d   V P                  4       p \        V 4      # )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¨   )	rQ   r   r   r©   r1   r4   r   rE   Úlistrª   s   &r@   Úto_key_val_listr¯   S  sP   € ð" ‚}Ùä�%œ#œu¤d¬CÐ0×1Ò1ÜÐFÓGÐGä�%œ×!Ò!Ø—‘“ˆä�‹;ÐrC   c                ó¤   € . p\        V 4       F>  pVR,          VRR u;8X  d   R8X  d   M M\        V^R 4      pVP                  V4       K@  	  V# )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
ºNé   NNÚ"r‚   )Ú_parse_list_headerÚunquote_header_valueÚappend)r«   ÚresultÚitems   &  r@   Úparse_list_headerr¹   q  sR   € ð. €FÜ" 5Ö)ˆØ��8�t˜B˜C�yÖ' C×'Ü'¨¨Q¨r¨
Ó3ˆDØ�‰�dÖñ *ð €MrC   c                óÌ   € / p\        V 4       FR  pRV9  d   RW&   K  VP                  R^4      w  r0V R,          V RR u;8X  d   R8X  d   M M\        V ^R 4      p WV&   KT  	  V# )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´   r5   rµ   )r«   r·   r¸   r   s   &   r@   Úparse_dict_headerr¼   ‘  sp   € ð, €FÜ" 5Ö)ˆØ�dŒ?ØˆF‰LÙØ—j‘j  aÓ(‰ˆØ��9˜˜b˜c˜
Ö) c×)Ü(¨¨q°¨Ó5ˆEØˆt‹ñ *ð €MrC   c                óÒ   € V '       d_   V ^ ,          V R,          u;8X  d   R8X  dB   M V # V ^R p V'       d   V R,          R8w  d#   V P                  RR4      P                  RR4      # V # )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³   ºNé   Nz\\Ú\z\"r‚   )r7   )r«   Úis_filenames   &&r@   rµ   rµ   ´  sb   € ÷ ��q•˜U 2�YÖ-¨#Ö-ð €Lð �a˜�ˆ÷ ˜e B�i¨6Ô1Ø—=‘= ¨Ó.×6Ñ6°u¸cÓBÐBØ€LrC   c                óZ   € V  Uu/ uF  qP                   VP                  bK  	  ppV# u upi )ztReturns a key/value dictionary from a CookieJar.

:param cj: CookieJar object to extract cookies from.
:rtype: dict
)r   r«   )ÚcjÚcookieÚcookie_dicts   &  r@   Údict_from_cookiejarrÆ   Í  s.   € ñ <>Ó>¹2°—;‘; §¡Ò,¹2€KÐ>ØÐùò ?s   …(c                ó   € \        W4      # )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Ã   rÅ   s   &&r@   Úadd_dict_to_cookiejarrÈ   Ø  s   € ô ˜{Ó/Ð/rC   c                óv  € \         P                  ! R\        4       \        P                  ! R\        P
                  R7      p\        P                  ! R\        P
                  R7      p\        P                  ! R4      pVP                  V 4      VP                  V 4      ,           VP                  V 4      ,           # )zdReturns 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=["\']*(.+?)["\'>])rW   rX   ÚDeprecationWarningr8   Úcompiler:   Úfindall)ÚcontentÚ
charset_reÚ	pragma_reÚxml_res   &   r@   Úget_encodings_from_contentrÒ   ã  s‘   € ô
 ‡M‚Mð1ô 	ôô —’Ð@ÌÏÉÔM€JÜ—
’
ÐIÔQS×QUÑQUÔV€IÜ�ZŠZÐ?Ó@€Fð 	×Ñ˜7Ó#Ø
×
Ñ
˜GÓ
$õ	%à
�.‰.˜Ó
!õ	"ðrC   c                ól  € V P                  R4      pV^ ,          P                  4       VR,          r2/ pRpV Fx  pVP                  4       pV'       g   K  TRr‡VP                  R4      p	V	R8w  d/   VRV	 P                  V4      pWi^,           R P                  V4      pW„VP                  4       &   Kz  	  W$3# )z–Returns content type and parameters from given header

:param header: string
:return: tuple containing content type and dictionary of
     parameters
r)   ºr²   NNz"' Tr»   Nr‚   )r5   ÚstripÚfindÚlower)
ÚheaderÚtokensÚcontent_typeÚparamsÚparams_dictÚitems_to_stripÚparamÚkeyr«   Úindex_of_equalss
   &         r@   Ú_parse_content_type_headerrá   ü  s´   € ð �\‰\˜#Ó€FØ! !�9Ÿ?™?Ó,¨f°R­j�&Ø€KØ€NãˆØ—‘“ˆß‰5Ø �Ø#Ÿj™j¨›oˆOØ "Ô$ØÐ,˜_Ð-×3Ñ3°NÓC�Ø°Õ1Ð3Ð4×:Ñ:¸>ÓJ�Ø',˜Ÿ	™	›Ó$ñ ð Ð$Ð$rC   c                ó¸   € V P                  R4      pV'       g   R# \        V4      w  rRV9   d   VR,          P                  R4      # RV9   d   R# RV9   d   R# R# )	zqReturns encodings from given HTTP Header Dict.

:param headers: dictionary to extract encoding from.
:rtype: str
zcontent-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonrJ   )rl   rá   rÕ   )ÚheadersrÚ   rÛ   s   &  r@   Úget_encoding_from_headersræ     s^   € ð —;‘;˜~Ó.€LçÙä5°lÓCÑ€Là�FÔØ�iÕ ×&Ñ& uÓ-Ð-à�ÔÙà˜\Ô)áñ *rC   c              #  ó&  "  € VP                   f   T  Rj  x€L
  R# \        P                  ! VP                   4      ! RR7      pV  F"  pVP                  V4      pV'       g   K  Vx € K$  	  VP                  RRR7      pV'       d   Vx € R# R#  Lx5i)zStream decodes an iterator.Nr7   ©ÚerrorsrC   T)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderÚdecode)ÚiteratorÚrÚdecoderÚchunkÚrvs   &&   r@   Ústream_decode_response_unicoderô   .  s~   é € ð 	‡z�zÒØ×ÐÙä×*Ò*¨1¯:©:Ô6¸iÔH€GÛˆØ�^‰^˜EÓ"ˆß‰2ØŒHñ ð 
�‰˜ 4ˆÓ	(€Bß	ØŒñ 
ñ 	ùs   ‚B–B—ABÁ$"BÂ	Bc              #  óŠ   "  € ^ pVe   V^ 8:  d   \        V 4      pV\        V 4      8  d   WW!,            x € W!,          pK&  R# 5i)z Iterate over slices of a string.N)rL   )ÚstringÚslice_lengthÚposs   && r@   Úiter_slicesrù   ?  sG   é € à
€CØÒ˜|¨qÔ0Ü˜6“{ˆØ
”�F“Ô
Ø˜3Õ-Ð.Ò.ØÕŠñ ùs   ‚AAc                óT  € \         P                  ! R\        4       . p\        V P                  4      pV'       d    \        V P                  V4      #  \        V P                  VRR7      #   \         d    TP                  T4        L7i ; i  \         d    T P                  u # i ; i)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.)r7   rè   )
rW   rX   rË   ræ   rå   r   rÎ   ÚUnicodeErrorr¶   Ú	TypeError)rð   Útried_encodingsrë   s   &  r@   Úget_unicode_from_responserþ   I  s›   € ô ‡M‚Mð1ô 	ôð €Oô )¨¯©Ó3€Hçð	-Ü�q—y‘y (Ó+Ð+ð
Ü�1—9‘9˜h¨yÔ9Ð9øô ô 	-Ø×"Ñ" 8Ö,ð	-ûô ô Ø�y‰yÒðús#   ¼A+ ÁB Á+B
Â	B
ÂB'Â&B'c                óÒ  € V P                  R4      p\        ^\        V4      4       F�  pW,          R,          p\        V4      ^8X  da   VP                  4       '       dK    \	        \        V^4      4      pT\        9   d   YAT,          R,          ,           Y&   Ks  RY,           2Y&   K‚  RW,           2W&   K‘  	  RP                  V4      #   \         d    \        RT R24      hi ; i)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¿   Nz"Invalid percent-escape sequence: 'Ú':r¿   NNÚ )
r5   ÚrangerL   ÚisalnumÚchrr1   r4   r   ÚUNRESERVED_SETr‰   )ÚuriÚpartsÚiÚhÚcs   &    r@   Úunquote_unreservedr  v  sÍ   € ð �I‰I�c‹N€EÜ�1”c˜%“jÖ!ˆØ�H�S�MˆÜˆq‹6�QŒ;˜1Ÿ9™9Ÿ;š;ðLÜœ˜A˜r›
“O�ð ”NÔ"Ø Q�x¨�|Õ+�“à˜u�x˜j˜>�“à˜5�8˜*�~ˆE‹Hñ "ð �7‰7�5‹>Ðøô ô LÜ Ð#EÀaÀSÈÐ!JÓKÐKðLús   Á CÃC&c                ór   € RpRp \        \        V 4      VR7      #   \         d    \        YR7      u # i ; i)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   &  r@   Úrequote_urir  Ž  sG   € ð /ÐØ0Ðð	5ô Ô'¨Ó,Ð3DÔEÐEøÜô 5ô �SÔ4Ò4ð	5ús   † œ6µ6c           
     ó¨  € \         P                  ! R\        P                  ! V 4      4      ^ ,          pVP	                  R4      w  r4\         P                  ! R\        P                  ! \        \        V4      4      4      4      ^ ,          p\         P                  ! R\        P                  ! V4      4      ^ ,          V,          pW%,          We,          8H  # )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ˆ   )ÚstructÚunpackÚsocketÚ	inet_atonr5   Údotted_netmaskr1   )ÚipÚnetÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks   &&     r@   Úaddress_in_networkr  ¤  s’   € ô �]Š]˜4¤×!1Ò!1°"Ó!5Ó6°qÕ9€FØ—I‘I˜c“N�M€GÜ�mŠm˜D¤&×"2Ò"2´>Ä#ÀdÃ)Ó3LÓ"MÓNÈqÕQ€GÜ�mŠm˜D¤&×"2Ò"2°7Ó";Ó<¸QÕ?À'ÕI€GØÕ 'Õ"3Ñ4Ð4rC   c                ó”   € R^^ V ,
          ,          ^,
          ,          p\         P                  ! \        P                  ! RV4      4      # )zuConverts mask from /xx format to xxx.xxx.xxx.xxx

Example: if mask is 24 function returns 255.255.255.0

:rtype: str
l   ÿÿ z>I)r  Ú	inet_ntoar  Úpack)Úmaskr  s   & r@   r  r  ³  s7   € ð ˜˜b 4�i�¨1Õ,Õ,€DÜ×ÒœFŸKšK¨¨dÓ3Ó4Ð4rC   c                óX   €  \         P                  ! V 4       R#   \         d     R# i ; i)z
:rtype: bool
FT)r  r  r3   )Ú	string_ips   &r@   Úis_ipv4_addressr&  ¾  s.   € ðÜ×Ò˜Ô#ñ øô ô Úðús   ‚ š)¨)c                ó<  € V P                  R4      ^8X  db    \        V P                  R4      ^,          4      pT^8  g   T^ 8”  d   R#  \        P
                  ! T P                  R4      ^ ,          4       R# R#   \         d     R# i ; i  \         d     R# i ; i)zJ
Very simple check of the cidr format in no_proxy variable.

:rtype: bool
rˆ   FT)Úcountr1   r5   r4   r  r  r3   )Ústring_networkr#  s   & r@   Úis_valid_cidrr*  É  sœ   € ð ×Ñ˜CÓ  AÔ%ð	Ü�~×+Ñ+¨CÓ0°Õ3Ó4ˆDð �!Œ8�t˜b”yÙð	Ü×Ò˜^×1Ñ1°#Ó6°qÕ9Ô:ñ
 ñ øô ô 	Úð	ûô ô 	Úð	ús#   ˜!A: Á
,B Á:B	ÂB	ÂBÂBc              #  ój  "  € VRJpV'       d3   \         P                  P                  V 4      pV\         P                  V &    Rx € V'       d-   Xf   \         P                  V  R# V\         P                  V &   R# R#   T'       d+   Xf   \         P                  T  i T\         P                  T &   i i ; i5i)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)rS   rk   rl   )Úenv_namer«   Úvalue_changedÚ	old_values   &&  r@   Úset_environr/  á  sŒ   é € ð  Ð%€MßÜ—J‘J—N‘N 8Ó,ˆ	Ø$Œ�
‰
�8Ñð1ÛçØÒ Ü—J‘J˜xÒ(à'0”—
‘
˜8Ó$ñ	 ø�=ØÒ Ü—J‘J˜xÑ(à'0”—
‘
˜8Ò$ð	 üs   ‚?B3ÁA< Á6B3Á<4B0Â0B3c                ól  € R pTpVf	   V! R4      p\        V 4      pVP                  f   R# V'       Ed   R VP                  RR4      P                  R4       4       p\	        VP                  4      '       dQ   V FI  p\        V4      '       d"   \        VP                  V4      '       d    R# K5  VP                  V8X  g   KH   R# 	  MxVP                  pVP                  '       d   VR	VP                   2,          pV F>  pVP                  P                  V4      '       g   VP                  V4      '       g   K=   R# 	  \        RV4      ;_uu_ 4         \        VP                  4      pRRR4       X'       d   R# R
#   \        \        P                  3 d    R
p L3i ; i  + '       g   i     L?; i)z@
Returns whether we should bypass proxies or not.

:rtype: bool
c                 óª   € \         P                  P                  V 4      ;'       g.    \         P                  P                  V P                  4       4      # ©N)rS   rk   rl   Úupper)rß   s   &r@   Ú	get_proxyÚ(should_bypass_proxies.<locals>.get_proxy   s0   € Ü�z‰z�~‰~˜cÓ"×AÐA¤b§j¡j§n¡n°S·Y±Y³[Ó&AÐArC   NÚno_proxyTc              3   ó8   "  € T F  q'       g   K  Vx € K  	  R # 5ir2  rd   )re   r;   s   & r@   rg   Ú(should_bypass_proxies.<locals>.<genexpr>  s   é € ÐRÑ%I˜TËT—D’DÓ%Iùs   ‚	�
Ú r  Ú,Ú:F)r   rr   r7   r5   r&  r*  r  ÚportÚendswithr/  r   rü   r  Úgaierror)	rt   r6  r4  Úno_proxy_argÚparsedÚproxy_ipÚhost_with_portr;   Úbypasss	   &&       r@   Úshould_bypass_proxiesrD  ÷  se  € òBð
 €LØÒÙ˜ZÓ(ˆÜ�c‹]€Fà‡�Òáç€xñ S X×%5Ñ%5°c¸2Ó%>×%DÑ%DÀSÔ%IÓRˆä˜6Ÿ?™?×+Ò+Û$�Ü  ×*Ò*Ü)¨&¯/©/¸8×DÒDÚ#ñ Eà—_‘_¨Ö0ò  ò %ð $Ÿ_™_ˆNØ�{�{ˆ{Ø A f§k¡k ]Ð"3Õ3�ã �Ø—?‘?×+Ñ+¨D×1Ò1°^×5LÑ5LÈT×5RÔ5Rò  ñ	 !ô 
�Z ×	.Õ	.ð	Ü! &§/¡/Ó2ˆF÷ 
/÷ Ùáøô œ6Ÿ?™?Ð+ô 	ØŠFð	ú÷	 
/×	.ús*   ÅF#ÅF Æ F ÆF#ÆF Æ F#Æ#F3	c                ó>   € \        WR7      '       d   / # \        4       # )z5
Return a dict of environment proxies.

:rtype: dict
©r6  )rD  r   )rt   r6  s   &&r@   Úget_environ_proxiesrG  4  s   € ô ˜S×4Ó4Øˆ	ä‹|ÐrC   c                ód  € T;'       g    / p\        V 4      pVP                  f,   VP                  VP                  VP                  R4      4      # VP                  R,           VP                  ,           VP                  RVP                  ,           R.pRpV F  pWQ9   g   K  W,          p V# 	  V# )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   rr   rl   Úscheme)rt   ÚproxiesÚurlpartsÚ
proxy_keysÚproxyÚ	proxy_keys   &&    r@   Úselect_proxyrP  @  s¨   € ð �mˆm˜€GÜ˜‹}€HØ×ÑÒ Ø�{‰{˜8Ÿ?™?¨G¯K©K¸Ó,>Ó?Ð?ð 	�‰˜%Õ (×"3Ñ"3Õ3Ø�‰Ø�8×$Ñ$Õ$Øð	€Jð €EÛˆ	ØÖØÕ&ˆEØà€Lñ  ð
 €LrC   c                óX  € Ve   TM/ pV P                   p\        V4      P                  pVP                  R4      pVP	                  4       pV'       dX   \        W5R7      '       gF   \        W5R7      pVP                  WGP                  R4      4      pV'       d   VP                  WH4       V# )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
r6  rF  rI  )rt   r   rJ  rl   ÚcopyrD  rG  Ú
setdefault)	ÚrequestrK  Ú	trust_envrt   rJ  r6  Únew_proxiesÚenviron_proxiesrN  s	   &&&      r@   Úresolve_proxiesrX  Z  s‹   € ð !Ò,‰g°"€GØ
�+‰+€CÜ�c‹]×!Ñ!€FØ�{‰{˜:Ó&€HØ—,‘,“.€KçÔ.¨s×FÓFÜ-¨cÔEˆà×#Ñ# F×,?Ñ,?ÀÓ,FÓGˆçØ×"Ñ" 6Ô1ØÐrC   c                ó   € V  R\          2# )zC
Return a string representing the default user agent.

:rtype: str
rˆ   r   )r   s   &r@   Údefault_user_agentrZ  u  s   € ð ˆV�1”[�MÐ"Ð"rC   c            
     ó@   € \        R\        4       R\        RRRR/4      # )z1
:rtype: requests.structures.CaseInsensitiveDict
z
User-AgentzAccept-EncodingÚAcceptz*/*Ú
Connectionz
keep-alive)r    rZ  ÚDEFAULT_ACCEPT_ENCODINGrd   rC   r@   Údefault_headersr_  ~  s/   € ô àÔ,Ó.ØÔ6Ø�eØ˜,ð		
óð rC   c                óÜ  € . pRpV P                  V4      p V '       g   V# \        P                  ! RV 4       FŠ  p VP                  R^4      w  rERVP                  R4      /pVP                  R4       F9  p VP                  R4      w  r€T P                  T4      YhP                  T4      &   K;  	  VP	                  V4       KŒ  	  V#   \         d    TRrT Lˆi ; i  \         d      K:  i ; i)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  rt   z<> '"r»   )rÕ   r8   r5   r4   r¶   )	r«   ÚlinksÚreplace_charsÚvalrt   rÛ   ÚlinkrÞ   rß   s	   &        r@   Úparse_header_linksre  Œ  sé   € ð €Eà€Mà�K‰K˜Ó&€EßØˆä�xŠx˜ Ö&ˆð	"ØŸ)™) C¨Ó+‰KˆCð �s—y‘y Ó*Ð+ˆà—\‘\ #Ö&ˆEðØ"Ÿ[™[¨Ó-‘
�ð .3¯[©[¸Ó-GˆD—‘˜=Ó)Ó*ñ 'ð 	�‰�TÖñ! 'ð$ €Løô ô 	"Ø˜r’ð	"ûô ô Ûðús#   »CÁ7CÃCÃCÃC+Ã*C+Ú Úasciic                óö  € V R,          pV\         P                  \         P                  39   d   R# VR,          \         P                  8X  d   R# VR,          \         P                  \         P
                  39   d   R# VP                  \        4      pV^ 8X  d   R# V^8X  d)   VR,          \        8X  d   R	# VR
,          \        8X  d   R# V^8X  d)   VR,          \        8X  d   R# VR,          \        8X  d   R# R# )z
:rtype: str
:Né   Nzutf-32:Né   Nz	utf-8-sigr¾   zutf-16rJ   :NNr¿   z	utf-16-be:r²   Nr¿   z	utf-16-lez	utf-32-berÔ   z	utf-32-leN)
rì   ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEr(  Ú_nullÚ_null2Ú_null3)ÚdataÚsampleÚ	nullcounts   &  r@   Úguess_json_utfrv  ·  sÁ   € ð �"�X€FØ”&×%Ñ%¤v×':Ñ':Ð;Ô;ÙØˆb…z”V—_‘_Ô$ÙØˆb…z”f×)Ñ)¬6×+>Ñ+>Ð?Ô?ÙØ—‘œUÓ#€IØ�A„~ÙØ�A„~Ø�#�;œ&Ô ÙØ�$�<œ6Ô!Ùà�A„~Ø�"�:œÔÙØ�"�:œÔÙárC   c                ó¼   € \        V 4      pVw  r4rVrxp	VP                  p
V
'       g   YzrzV'       d   RP                  WJ.4      p
Vf   TpVf   Rp\        W:VRW‰34      # )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
Ú@r  )r   Únetlocr‰   r   )rt   Ú
new_schemer@  rJ  Úauthr;   r<  rn   ÚqueryÚfragmentry  s   &&         r@   Úprepend_scheme_if_neededr~  ×  sk   € ô �s‹^€FØ6<Ñ3€F�$˜d¨8ð �]‰]€FßØ�çð —‘˜4˜.Ó)ˆØ‚~ØˆØ‚|Øˆä�v t¨R°ÐAÓBÐBrC   c                ó¦   € \        V 4      p \        VP                  4      \        VP                  4      3pV#   \        \
        3 d    Rp T# i ; i)zoGiven a url with authentication components, extract them into a tuple of
username,password.

:rtype: (str,str)
)r  r  )r   r   ÚusernameÚpasswordr[   rü   )rt   r@  r{  s   &  r@   Úget_auth_from_urlr‚  ô  sU   € ô �c‹]€FðÜ˜Ÿ™Ó(¬'°&·/±/Ó*BÐCˆð €Køô œIÐ&ô Ø‰à€Kðús   �*9 ¹AÁAc                ó>   € V w  r\        W^ 4       \        W^4       R# )z›Verifies that header parts don't contain leading whitespace
reserved characters, or return characters.

:param header: tuple, in the format (name, value).
N)Ú_validate_header_part)rØ   r   r«   s   &  r@   Úcheck_header_validityr…    s   € ð �K€DÜ˜&¨Ô*Ü˜&¨Ö+rC   c           
      ó:  € \        V\        4      '       d   \        V,          pMB\        V\        4      '       d   \        V,          pM\        R V: RV  R\        V4       24      hVP                  V4      '       g   V^ 8X  d   RMRp\        RV RV: 24      hR# )zHeader part (z) from z# must be of type str or bytes, not r   r«   zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: N)rQ   r   r	   r   r   r   Útyper9   )rØ   Úheader_partÚheader_validator_indexÚ	validatorÚheader_kinds   &&&  r@   r„  r„    s©   € Ü�+œs×#Ò#Ü*Ð+AÕB‰	Ü	�K¤×	'Ò	'Ü+Ð,BÕC‰	äØ˜K™?¨'°&°ð :1Ü15°kÓ1BÐ0CðEó
ð 	
ð
 �?‰?˜;×'Ò'Ø 6¸!Ô ;‘fÀˆÜð&Ø&1 ]°"°[±OðEó
ð 	
ñ (rC   c                ó„   € \        V 4      w  rr4rVV'       g   Y2r2VP                  R^4      R,          p\        WW4VR34      # )zK
Given a url remove the fragment and the authentication part.

:rtype: str
rx  r  r‚   )r   Úrsplitr   )rt   rJ  ry  rn   rÛ   r|  r}  s   &      r@   ÚurldefragauthrŽ  "  sG   € ô 5=¸S³MÑ1€F�D %÷ Ø�à�]‰]˜3 Ó" 2Õ&€Fä�v t°U¸BÐ?Ó@Ð@rC   c                óì   € \        V P                  RR4      pVe6   \        V P                  \        4      '       d    V! V P                  4       R# \        R4      h  \
         d    \        R4      hi ; i)z^Move file pointer back to its recorded starting position
so it can be read again on redirect.
rP   Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)rƒ   ÚbodyrQ   Ú_body_positionr   r3   r   )Úprepared_requestÚ	body_seeks   & r@   Úrewind_bodyr”  3  sy   € ô Ð(×-Ñ-¨v°tÓ<€IØÒ¤Ø×'Ñ'¬÷"ò "ð	ÙÐ&×5Ñ5Ö6ô $Ð$QÓRÐRøô ô 	Ü'ØMóð ð	ús   ½A ÁA3)z.netrcr{   )FzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~r2  )T)zpython-requests)jÚ__doc__rì   Ú
contextlibrY   rS   r8   r  r  ÚsysrŽ   rW   rŠ   Úcollectionsr   Úpip._vendor.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   Úcookiesr   Ú
exceptionsr   r   r   r   Ú
structuresr    rm   ÚwhereÚDEFAULT_CA_BUNDLE_PATHÚDEFAULT_PORTSr‰   r5   r^  ÚplatformrA   rH   r`   r}   r†   rš   Úcontextmanagerr�   r¬   r¯   r¹   r¼   rµ   rÆ   rÈ   rÒ   rá   ræ   rô   rù   rþ   Ú	frozensetr  r  r  r  r  r&  r*  r/  rD  rG  rP  rX  rZ  r_  re  rR   rp  rq  rr  rv  r~  r‚  r…  r„  rŽ  r”  rd   rC   r@   Ú<module>r¥     s  ðñó Û Û 	Û 	Û 	Û Û Û 
Û Û Û Ý #ç <å Ý $÷ó ÷÷ õ :÷÷ ñ õ )÷ó õ ,à"€àŸš›Ð à˜˜W cÐ*€ð Ÿ)™)Ø‡H‚HˆW‘l°4Ô8Ð9JÕKÓLóÐ ð
 ‡<�<�7Ôò$òL	/òòB3ôJ0òf&ò"ðJ ×Ññ	ó ð	òò6ò<ò@ôFò2ò0òò2%ò2ò2ò"ò$ñP ØMó€ò
ò05ò,5ò5òòð0 ×Ññ1ó ð1ò*:ôz	òô4ô6#òò"ðL 	�‰�gÓ€Ø	��€Ø	��€òò@Cò:ò ,ò
ò&Aô"SrC   