Ë
    r™ãj@  ã                  ó\  — d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z ej                  dej                   ej"                  z  ¬«      Z ej                  d«      Zdd„Z	 	 d	 	 	 	 	 dd„ZddlmZ y)é    )ÚannotationsN)Údatetimeé   )Ú
_dt_as_utc)Úgenerate_etag)Ú
parse_date)Úparse_etags)Úparse_if_range_header)Úunquote_etagc	                ó  — |€|�dt        |«      › d�}n|�t        d«      ‚d}	t        |t        «      rt	        |«      }|�t        |j                  d¬«      «      }d}
|s| �t        |«      }
|
�|
j                  �|
j                  }nt	        |«      }|r	|r||k  rd}	|rkt        |«      \  }}|
�|
j                  �|
j                  |k(  }	|	 S t        |«      }|r|j                  |«      }	t        |«      }|r|j                  |«       }	|	 S )a  Convenience method for conditional requests.
    :param http_range: Range HTTP header
    :param http_if_range: If-Range HTTP header
    :param http_if_modified_since: If-Modified-Since HTTP header
    :param http_if_none_match: If-None-Match HTTP header
    :param http_if_match: If-Match HTTP header
    :param etag: the etag for the response for comparison.
    :param data: or alternatively the data of the response to automatically
                 generate an etag using :func:`generate_etag`.
    :param last_modified: an optional date of the last modification.
    :param ignore_if_range: If `False`, `If-Range` header will be taken into
                            account.
    :return: `True` if the resource was modified, otherwise `False`.

    .. versionadded:: 2.2
    Nú"zboth data and etag givenFr   )ÚmicrosecondT)r   Ú	TypeErrorÚ
isinstanceÚstrr   r   Úreplacer
   Údater   Úetagr	   Úcontains_weakÚ	is_strong)Ú
http_rangeÚhttp_if_rangeÚhttp_if_modified_sinceÚhttp_if_none_matchÚhttp_if_matchr   ÚdataÚlast_modifiedÚignore_if_rangeÚ
unmodifiedÚif_rangeÚmodified_sinceÚ_Úif_none_matchÚif_matchs                  ú_/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/werkzeug/sansio/http.pyÚis_resource_modifiedr&      s>  € ð6 €|˜Ð(Ø”= Ó&Ð' qÐ)‰Ø	Ð	ÜÐ2Ó3Ð3à€JÜ�-¤Ô%Ü" =Ó1ˆð Ð Ü" =×#8Ñ#8ÀQÐ#8Ó#GÓHˆà€HÙ˜zÐ5ô )¨Ó7ˆàÐ §¡Ð 9Ø*2¯-©-‰ä#Ð$:Ó;ˆá™-¨M¸^Ò,KØˆ
áÜ˜tÓ$‰ˆˆaàÐ H§M¡MÐ$=Ø!Ÿ™¨$Ñ.ˆJð  ˆ>Ðô (Ð(:Ó;ˆMÙð +×8Ñ8¸Ó>�
ô
 # =Ó1ˆHÙØ!)×!3Ñ!3°DÓ!9Ð9�
àˆ>Ðó    ah  
    [ \t]*  # ignore leading space
    ([^ \t=";]+)  # key
    (?:[ \t]*=[ \t]*  # optional =value, ignoring invalid space
        (
            "(?:[^\\"]|\\.)*"  # quoted value with backslash escapes
        |
            [^ \t";]*  # token value
        )
    )?
    [ \t]*  # ignore trailing space
    (?:;|\Z)  # only if followed by semicolon or end
    )Úflagss   \\([0-3][0-7]{2}|.)c                ó|   — | j                  d«      }t        |«      dk(  r|S t        |d«      j                  dd«      S )Né   é   Úbig)ÚgroupÚlenÚintÚto_bytes)ÚmÚvs     r%   Ú_cookie_unslash_replacer3   q   s8   € Ø	�‰�‹
€Aä
ˆ1ƒv�‚{Øˆäˆq�!‹9×Ñ˜a Ó'Ð'r'   c                ó  — |€$t        j                  dt        j                  «      }| s |«       S g }d}	 t        j                  | |«      x}€| j                  d|«      dz   x}dk(  rn™Œ5|j                  «       \  }}|j                  «       }|€d}|j                  d«      rL|j                  d«      r;t        j                  t        |dd j                  «       «      j                  d¬	«      }|j!                  ||f«       ŒÌ ||«      S )
a)  Parse a cookie from a string.

    The same key can be provided multiple times, the values are stored
    in-order. The default :class:`MultiDict` will have the first value
    first, and all values can be retrieved with
    :meth:`MultiDict.getlist`.

    :param cookie: The cookie header as a string.
    :param cls: A dict-like class to store the parsed cookies in.
        Defaults to :class:`MultiDict`.

    .. versionchanged:: 3.0
        Passing bytes, and the ``charset`` and ``errors`` parameters, were removed.

    .. versionadded:: 2.2
    ztype[ds.MultiDict[str, str]]r   ú;r*   Ú r   éÿÿÿÿr   )Úerrors)ÚtÚcastÚdsÚ	MultiDictÚ
_cookie_reÚmatchÚfindÚgroupsÚendÚ
startswithÚendswithÚ_cookie_unslash_reÚsubr3   ÚencodeÚdecodeÚappend)ÚcookieÚclsÚoutÚposr1   ÚckÚcvs          r%   Úparse_cookierO   z   sþ   € ð( €{Ü�f‰fÐ3´R·\±\ÓBˆáÙ‹uˆà
€CØ
€Cà
Ü×!Ñ! &¨#Ó.Ð.ˆAÐ7à—{‘{ 3¨Ó,¨qÑ0Ð0�°QÒ6Øàà—‘“‰ˆˆBØ�e‰e‹gˆàˆ:ØˆBà�=‰=˜Ô "§+¡+¨cÔ"2ä#×'Ñ'Ü'¨¨A¨b¨¯©Ó):óç‰f˜IˆfÓ&ð ð 	�
‰
�B˜�8Ôð) ñ, ˆs‹8€Or'   )Údatastructures)	NNNNNNNNT)r   ú
str | Noner   rQ   r   rQ   r   rQ   r   rQ   r   rQ   r   zbytes | Noner   zdatetime | str | Noner   ÚboolÚreturnrR   )r1   zt.Match[bytes]rS   Úbytes)NN)rI   rQ   rJ   z#type[ds.MultiDict[str, str]] | NonerS   zds.MultiDict[str, str])Ú
__future__r   ÚreÚtypingr9   r   Ú	_internalr   Úhttpr   r   r	   r
   r   r&   ÚcompileÚASCIIÚVERBOSEr=   rD   r3   rO   r6   rP   r;   © r'   r%   ú<module>r^      s   ðÝ "ã 	Û Ý å "Ý  Ý Ý Ý (Ý ð "Ø $Ø)-Ø%)Ø $ØØØ+/Ø ðLØðLàðLð 'ðLð #ð	Lð
 ðLð ðLð ðLð )ðLð ðLð 
óLð^ ˆR�Z‰Zðð �(‰(�R—Z‘ZÑ
ô€
ð   �R—Z‘ZÐ 7Ó8Ð ó(ð Ø/3ð3Øð3à	,ð3ð ó3ön $r'   