Ë
    ÚŠ±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  ej                  d«      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_etagz&([Ww]/)?(?:"(.*?)"|(.*?))(?:\s*,\s*|$)c	                ó>  — |€|�t        |«      }n|�t        d«      ‚d}	t        |t        «      rt	        |«      }|�t        |j                  d¬«      «      }d}
|s| �t        |«      }
|
�|
j                  �|
j                  }nt	        |«      }|r	|r||k  rd}	|r€t        |«      \  }}|
�3|
j                  �'t        |
j                  «      j                  |«      }	|	 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
    Nzboth data and etag givenFr   )ÚmicrosecondT)r   Ú	TypeErrorÚ
isinstanceÚstrr   r   Úreplacer
   Údater   Úetagr	   ÚcontainsÚ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                  úY/var/www/io.vulcan-creative.com/venv/lib/python3.12/site-packages/werkzeug/sansio/http.pyÚis_resource_modifiedr&      s?  € ð6 €|˜Ð(Ü˜TÓ"‰Ø	Ð	ÜÐ2Ó3Ð3à€JÜ�-¤Ô%Ü" =Ó1ˆð Ð Ü" =×#8Ñ#8ÀQÐ#8Ó#GÓHˆà€HÙ˜zÐ5ô )¨Ó7ˆàÐ §¡Ð 9Ø*2¯-©-‰ä#Ð$:Ó;ˆá™-¨M¸^Ò,KØˆ
áÜ˜tÓ$‰ˆˆaàÐ H§M¡MÐ$=Ü$ X§]¡]Ó3×<Ñ<¸TÓBˆJð  ˆ>Ðô (Ð(:Ó;ˆMÙð +×8Ñ8¸Ó>�
ô
 # =Ó1ˆHÙØ!)×!3Ñ!3°DÓ!9Ð9�
àˆ>Ðó    zr
    ([^=;]*)
    (?:\s*=\s*
      (
        "(?:[^\\"]|\\.)*"
      |
        .*?
      )
    )?
    \s*;\s*
    )Ú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 | › d�} g }t        j                  | «      D ]˜  \  }}|j                  «       }|j                  «       }|sŒ)t        |«      dk\  rO|d   |d   cxk(  rdk(  r>n n;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ÚfindallÚstripr.   Ú_cookie_unslash_reÚsubr3   ÚencodeÚdecodeÚappend)ÚcookieÚclsÚoutÚckÚcvs        r%   Úparse_cookierJ   z   sß   € ð( €{Ü�f‰fÐ3´R·\±\ÓBˆáÙ‹uˆàˆx�qˆ\€FØ
€Cä×$Ñ$ VÓ,ò ‰ˆˆBØ�X‰X‹ZˆØ�X‰X‹ZˆáØäˆr‹7�aŠ<˜B˜q™E R¨¡VÔ2¨sÕ2ä#×'Ñ'Ü'¨¨A¨b¨¯©Ó):óç‰f˜IˆfÓ&ð ð 	�
‰
�B˜�8Õðñ ˆs‹8€Or'   )Údatastructures)	NNNNNNNNT)r   ú
str | Noner   rL   r   rL   r   rL   r   rL   r   rL   r   zbytes | Noner   zdatetime | str | Noner   ÚboolÚreturnrM   )r1   zt.Match[bytes]rN   Úbytes)NN)rE   rL   rF   z#type[ds.MultiDict[str, str]] | NonerN   zds.MultiDict[str, str])Ú
__future__r   ÚreÚtypingr9   r   Ú	_internalr   Úhttpr   r   r	   r
   r   ÚcompileÚ_etag_rer&   ÚASCIIÚVERBOSEr=   r@   r3   rJ   Ú rK   r;   © r'   r%   ú<module>r[      s1  ðÝ "ã 	Û Ý å "Ý  Ý Ý Ý (Ý àˆ2�:‰:Ð?Ó@€ð "Ø $Ø)-Ø%)Ø $ØØØ+/Ø ðLØðLàðLð 'ðLð #ð	Lð
 ðLð ðLð ðLð )ðLð ðLð 
óLð^ ˆR�Z‰Zð
ð �(‰(�R—Z‘ZÑ
ô€
ð  �R—Z‘ZÐ 7Ó8Ð ó(ð Ø/3ð,Øð,à	,ð,ð ó,ö` $r'   