
    EgQ                        d dl Z d dlZd dlZd dlmZmZmZ ed&d            Zedeee	f         de	fd            Zdedee	f         dede	f         fdZed&d            Z
edeee	f         defd	            Z
dedee	f         dedef         fd
Z
d  ed          D             Z ed          ed<   e                                ZdD ]Ze ee          = e                    e          Ze                    e          Zd'dedefdZd(dZd Zde	defdZde	defdZd Zd Zd Zd ZdZdZdZd Zd!ed"ee         fd#Z d!ed"ee         fd$Z!d!efd%Z"dS ))    N)IterableUnionoverloadstr_or_bytesreturnc                     d S N r   encode_argss     e/var/www/sysmax/venv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/utils/strutils.pyalways_bytesr          C    c                     d S r	   r
   r   s     r   r   r      r   r   c                     | t          | t                    r| S t          | t                    r
 | j        | S t	          d                    t          |           j                            )N"Expected str or bytes, but got {}.)
isinstancebytesstrencode	TypeErrorformattype__name__r   s     r   r   r      sh    z,>>	L#	&	& b"|"K00<CCDDVDVD_``aaar   c                     d S r	   r
   r   s     r   
always_strr      r   r   c                     d S r	   r
   r   s     r   r   r       r   r   c                     | t          | t                    r| S t          | t                    r
 | j        | S t	          d                    t          |           j                            )z6
    Returns,
        str_or_bytes unmodified, if
    Nr   )r   r   r   decoder   r   r   r   )r   decode_argss     r   r   r   %   sj    
 z,<<	L%	(	( b"|"K00<CCDDVDVD_``aaar   c                 .    i | ]}|t          d           S ).)ord).0xs     r   
<dictcomp>r'   6   s0       	 s3xx  r       r#      )
	Ttextc                     t          | t                    s4t          d                    t	          |           j                            |rt          nt          }|                     |          S )z
    Replace all unicode C1 control characters from the given text with a single "."

    Args:
        keep_spacing: If True, tabs and newlines will not be replaced.
    z#text type must be unicode but is {})	r   r   
ValueErrorr   r   r   _control_char_trans_newline_control_char_trans	translate)r-   keep_spacingtranss      r   escape_control_charactersr5   C   s`     dC   \>EEd4jjFYZZ[[[+7P''=PE>>%   r   Fc                 F   t          | t                    s,t          d                    | j        j                            t          d| z                                 d          dd         }|st          j	        dd |          }|rt          j	        dd	 |          }|S )
a8  
    Take bytes and return a safe string that can be displayed to the user.

    Single quotes are always escaped, double quotes are never escaped:
        "'" + bytes_to_escaped_str(...) + "'"
    gives a valid Python string.

    Args:
        keep_spacing: If True, tabs and newlines will not be escaped.
    zdata must be bytes, but is {}   "b   z(?<!\\)(\\\\)*\\'c                 6    |                      d          pddz   S )N    ')groupms    r   <lambda>z&bytes_to_escaped_str.<locals>.<lambda>c   s    aggajj6FB#5M r   z(?<!\\)(\\\\)*\\([nrt])c                     |                      d          pdt          ddd          |                      d                   z   S )Nr<   r=   r+   r*   r,   )nrtr9   )r?   dictr@   s    r   rB   z&bytes_to_escaped_str.<locals>.<lambda>g   s9    qwwqzz'R4$$$+G+G+GPQ

+SS r   )
r   r   r/   r   	__class__r   reprlstripresub)datar3   escape_single_quotesrets       r   bytes_to_escaped_strrP   Q   s     dE"" Z8??@WXXYYY td{


"
"3
'
'"
-C Tf)+M+MsSS 
f&SS
 

 Jr   c                     t          | t                    s,t          d                    | j        j                            t          j        |           d         S )z
    Take an escaped string and return the unescaped bytes equivalent.

    Raises:
        ValueError, if the escape sequence is invalid.
    zdata must be str, but is {}r   )r   r   r/   r   rH   r   codecsescape_decoderM   s    r   escaped_str_to_bytesrU   m   sQ     dC   X6==dn>UVVWWW %%a((r   sc                     | rt          |           dk    rdS t          d | d d         D                       t          | d d                   z  dk    S )Nr   Fc              3   N   K   | ] }|d k     pd|cxk     odk     nc pd|k     V  !dS )	      r(   ~   Nr
   r%   is     r   	<genexpr>z is_mostly_bin.<locals>.<genexpr>   s\         	
A'a"'a     r   d   g333333?)lensumrV   s    r   is_mostly_binrc   |   su     A!u  4C4     	AdsdG  r   c                 P    |                                                      d          S )N   <)strip
startswithrb   s    r   is_xmlrh      s    7799%%%r   c                 6    | r| d         dk    r
| dd         S | S )a  
        Many editors will silently add a newline to the final line of a
        document (I'm looking at you, Vim). This function fixes this common
        problem at the risk of removing a hanging newline in the rare cases
        where the user actually intends it.
    r:   r+   Nr
   )rF   s    r   clean_hanging_newlinerj      s*     	 QrUd]]"vHr   c           	   #     K   t          dt          |           d          D ]}d                    |          }| ||dz            }d                    d |D                       }|                    d          }t          t          |                    dd                              d	d
          d                    }|||fV  dS )zK
        Returns:
            A generator of (offset, hex, str) tuples
    r      z{:0=10x} c              3   @   K   | ]}d                      |          V  dS )z{:0=2x}N)r   r\   s     r   r^   zhexdump.<locals>.<genexpr>   s0      77QY%%a((777777r   /   asciireplaceu   �r#   FN)	ranger`   r   joinljustr   r5   r    rq   )rV   r]   offsetpartr&   	part_reprs         r   hexdumprx      s      
 1c!ffb!! 	% 	%""1%%1r6{HH77$77777GGBKK8KK++33ItDD 
  
  	 q)$$$$$	% 	%r   c                 f    t          t          |                     d                    dz             S Nr   i   chrr$   r?   matchobjs    r   _move_to_private_code_planer      )    s8>>!$$%%.///r   c                 f    t          t          |                     d                    dz
            S rz   r{   r}   s    r    _restore_from_private_code_planer      r   r   z(?<!\\)(?:\\\\)*z[\s\S]*?z.*?z(?:.|(?<=\\)\n)*?rM   area_delimiterc                     t          j        d                    d                    |                    | t           j                  S )an  
    Split a string of code into a [code, special area, code, special area, ..., code] list.

    For example,

    >>> split_special_areas(
    >>>     "test /* don't modify me */ foo",
    >>>     [r"/\*[\s\S]*?\*/"])  # (regex matching comments)
    ["test ", "/* don't modify me */", " foo"]

    "".join(split_special_areas(x, ...)) == x always holds true.
    z({})|)flags)rK   splitr   rs   	MULTILINE)rM   r   s     r   split_special_areasr      s@      8chh~..//l   r   c                 R   t          j                    }t          | |          }t          j        d                    |                    }t          |          D ]:\  }}|dz  r|                    t          |          }|	                    |           ;|
                                S )u  
    Escape all control characters present in special areas with UTF8 symbols
    in the private use plane (U+E000 t+ ord(char)).
    This is useful so that one can then use regex replacements on the resulting string without
    interfering with special areas.

    control_characters must be 0 < ord(x) < 256.

    Example:

    >>> print(x)
    if (true) { console.log('{}'); }
    >>> x = escape_special_areas(x, "{", ["'" + SINGLELINE_CONTENT + "'"])
    >>> print(x)
    if (true) { console.log('�}'); }
    >>> x = re.sub(r"\s*{\s*", " {
    ", x)
    >>> x = unescape_special_areas(x)
    >>> print(x)
    if (true) {
        console.log('{}'); }
    z[{}]r9   )ioStringIOr   rK   compiler   	enumeraterL   r   writegetvalue)rM   r   control_charactersbufpartsrexr]   r&   s           r   escape_special_areasr      s    4 +--Cn55E
*W^^$677
8
8C%    1q5 	83Q77A		!<<>>r   c                 8    t          j        dt          |           S )zs
    Invert escape_special_areas.

    x == unescape_special_areas(escape_special_areas(x)) always holds true.
    z[\ue000-\ue0ff])rK   rL   r   rT   s    r   unescape_special_areasr      s     6$&FMMMr   )r   Nr   N)T)FF)#rR   r   rK   typingr   r   r   r   r   r   r   rr   r1   r$   copyr0   r&   	maketransr5   rP   rU   boolrc   rh   rj   rx   r   r   	NO_ESCAPEMULTILINE_CONTENTSINGLELINE_CONTENT#MULTILINE_CONTENT_LINE_CONTINUATIONr   r   r   r
   r   r   <module>r      s^    				 				 , , , , , , , , , , 
   
 
uS%Z0 5    
buT3%56 btUZ{I[ b b b b 
   
 
U3:.     

bU4e#34 
buTSVYGW 
b 
b 
b 
b" U2YY    3s88 C 16688 	 , ,A#CCFF++mm$788 !mm,GHH ! !C !s ! ! ! !   8) ) )U t    &e & & & & &	 	 	% % %"0 0 00 0 0  	  &: #    .!! ! ! ! !HN N N N N N Nr   