§
    ¡”j"  ã                   ó  — d Z ddlmZmZmZmZ ddlm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mZmZmZ e
j        dk     rdd	lmZmZ dd
lmZmZ nddlmZmZmZmZ dd„Zd„ Zd„ Z ej         de¦  «         dd„Z!dd„Z"dS )z‡
Functions to convert unicode IRIs into ASCII byte string URIs and back. Exports
the following items:

 - iri_to_uri()
 - uri_to_iri()
é    )Úunicode_literalsÚdivisionÚabsolute_importÚprint_function)ÚidnaNé   )Úunwrap)Úbyte_clsÚstr_clsÚ	type_nameÚbytes_to_listÚ	int_types)é   )ÚurlsplitÚ
urlunsplit)ÚquoteÚunquote)r   Úunquote_to_bytesr   r   Fc                 óÞ  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚d}t
          j        dk     r¨|                      d¦  «        s“|                      d¦  «        s~d}t          j	        d| ¦  «        }|r/| 
                    d¦  «        }d| t          |¦  «        d…         z   } t          | ¦  «        }|r$|| dd…         z   } t          |dd	…         ¦  «        }nt          | ¦  «        }|€t          |j        ¦  «        }|j        }|�|                     d
¦  «        }t          |j        d¬¦  «        }t          |j        d¬¦  «        }|j        }	|	�"t          |	¦  «                             d¦  «        }	d}
|�|
|z  }
|r|
d|z   z  }
|
dz  }
|�|
|z  }
|	�&|dk    o|	dk    }|dk    o|	dk    }|r|s
|s|
d|	z   z  }
t          |j        d¬¦  «        }t          |j        d¬¦  «        }t          |j        d¬¦  «        }|r|€
|€|dk    rd}|€d}t/          ||
|||f¦  «        }t          |t          ¦  «        r|                     d¦  «        }|S )zö
    Encodes a unicode IRI into an ASCII byte string URI

    :param value:
        A unicode string of an IRI

    :param normalize:
        A bool that controls URI normalization

    :return:
        A byte string of the ASCII-encoded URI
    z@
            value must be a unicode string, not %s
            N)é   é   zhttp://zhttps://z	^[^:]*://r   r   éýÿÿÿr   z!$&'()*+,;=©ÚsafeÚasciió    ó   :ó   @s   https   80s   httpss   443z/!$&'()*+,;=@:z/?!$&'()*+,;=@:ó   /Ú Úlatin1)Ú
isinstancer   Ú	TypeErrorr	   r   ÚsysÚversion_infoÚ
startswithÚreÚmatchÚgroupÚlenr   Ú	_urlquoteÚschemeÚhostnameÚencodeÚusernameÚpasswordÚportÚpathÚqueryÚfragmentr   )ÚvalueÚ	normalizer,   Úreal_prefixÚprefix_matchÚparsedr-   r/   r0   r1   ÚnetlocÚdefault_httpÚdefault_httpsr2   r3   r4   Úoutputs                    ú^/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/asn1crypto/_iri.pyÚ
iri_to_urir?   %   sÖ  € õ �e�WÑ%Ô%ð Ý�ðõ �eÑÔñ	
ô 
ñ ô ð 	ð €Få
Ô˜&Ò Ð ¨×)9Ò)9¸)Ñ)DÔ)DÐ ÈU×M]ÒM]Ð^hÑMiÔMiÐ ØˆÝ”x ¨UÑ3Ô3ˆØð 	9Ø&×,Ò,¨QÑ/Ô/ˆKØ ¥c¨+Ñ&6Ô&6Ð&7Ð&7Ô 8Ñ8ˆEÝ˜%‘”ˆØð 	1Ø %¨¨¨¤)Ñ+ˆEÝ˜{¨3¨B¨3Ô/Ñ0Ô0ˆFøå˜%‘”ˆà€~Ý˜6œ=Ñ)Ô)ˆØŒ€HØÐØ—?’? 6Ñ*Ô*ˆå˜œ¨~Ð>Ñ>Ô>€HÝ˜œ¨~Ð>Ñ>Ô>€HØŒ;€DØÐÝ�t‰}Œ}×#Ò# GÑ,Ô,ˆà€FØÐØ�(ÑˆØð 	&Ø�d˜X‘oÑ%ˆFØ�$‰ˆØÐØ�(ÑˆØÐØ Ò(Ð:¨T°Uª]ˆØ (Ò*Ð=¨t°vª~ˆØð 	" ð 	"°mð 	"Ø�d˜T‘kÑ!ˆFõ �V”[Ð'8Ð9Ñ9Ô9€Då�f”lÐ);Ð<Ñ<Ô<€Eå˜œÐ/AÐBÑBÔB€Hàð �U�] xÐ'7¸DÀDºL¸LØˆð €|Øˆå˜ ¨¨u°hÐ?Ñ@Ô@€FÝ�&�'Ñ"Ô"ð )Ø—’˜xÑ(Ô(ˆØ€Mr   c                 óú  — t          | t          ¦  «        s*t          t          dt	          | ¦  «        ¦  «        ¦  «        ‚t          | ¦  «        }|j        }|�|                     d¦  «        }t          |j	        ddg¬¦  «        }t          |j
        ddg¬¦  «        }|j        }|r|                     d¦  «        }|j        }|r*t          |t          ¦  «        s|                     d¦  «        }d}|�||z  }|r|d|z   z  }|dz  }|�||z  }|�|dt          |¦  «        z   z  }t          |j        d	gd
¬¦  «        }t          |j        ddgd
¬¦  «        }	t          |j        ¦  «        }
t%          ||||	|
f¦  «        S )z³
    Converts an ASCII URI byte string into a unicode IRI

    :param value:
        An ASCII-encoded byte string of the URI

    :return:
        A unicode string of the IRI
    z=
            value must be a byte string, not %s
            Nr   ú:ú@)Úremapr   r    ú/T)rC   Úpreserveú&ú=)r"   r
   r#   r	   r   r   r,   ÚdecodeÚ_urlunquoter/   r0   r-   r1   r   r   r2   r3   r4   r   )r5   r9   r,   r/   r0   r-   r1   r:   r2   r3   r4   s              r>   Ú
uri_to_irirJ   x   s«  € õ �e�XÑ&Ô&ð Ý�ðõ �eÑÔñ	
ô 
ñ ô ð 	õ �e‰_Œ_€FàŒ]€FØÐØ—’˜wÑ'Ô'ˆå˜6œ?°3¸°*Ð=Ñ=Ô=€HÝ˜6œ?°3¸°*Ð=Ñ=Ô=€HØŒ€HØð +Ø—?’? 6Ñ*Ô*ˆØŒ;€DØð $•J˜t¥YÑ/Ô/ð $Ø�{Š{˜7Ñ#Ô#ˆà€FØÐØ�(ÑˆØð 	%Ø�c˜H‘nÑ$ˆFØ�#‰ˆØÐØ�(ÑˆØÐØ�#� ™œÑ%Ñ%ˆå�v”{¨3¨%¸$Ð?Ñ?Ô?€DÝ˜œ¨S°#¨JÀÐFÑFÔF€EÝ˜6œ?Ñ+Ô+€Hå�v˜v t¨U°HÐ=Ñ>Ô>Ð>r   c                 óž   — t          | j        | j        | j        …         ¦  «        }d„ |D ¦   «         }d                     |¦  «        | j        fS )a>  
    Error handler for decoding UTF-8 parts of a URI into an IRI. Leaves byte
    sequences encoded in %XX format, but as part of a unicode string.

    :param exc:
        The UnicodeDecodeError exception

    :return:
        A 2-element tuple of (replacement unicode string, integer index to
        resume at)
    c                 ó   — g | ]}d |z  ‘ŒS )ú%%%02x© )Ú.0Únums     r>   ú
<listcomp>z,_iri_utf8_errors_handler.<locals>.<listcomp>º   s   € Ð<Ð<Ð< s�H˜s‘NÐ<Ð<Ð<r   r    )r   ÚobjectÚstartÚendÚjoin)ÚexcÚbytes_as_intsÚreplacementss      r>   Ú_iri_utf8_errors_handlerrY   ¬   sM   € õ " #¤*¨S¬Y°s´wÐ->Ô"?Ñ@Ô@€MØ<Ð<¨mÐ<Ñ<Ô<€LØ�GŠG�LÑ!Ô! 3¤7Ð+Ð+r   Úiriutf8r    c                 óÖ  ‡‡— | �| dk    rdS g Št          j        d| ¦  «        r6ˆfd„}t          j        d|| ¦  «        } ˆfd„}t          j        d|| ¦  «        } t          |                      d¦  «        ‰                     d¦  «        ¬¦  «        }t          |t          ¦  «        s|                     d	¦  «        }t          ‰¦  «        d
k    rˆfd„}t          j        d||¦  «        }|S )a  
    Quotes a unicode string for use in a URL

    :param string:
        A unicode string

    :param safe:
        A unicode string of character to not encode

    :return:
        None (if string is None) or an ASCII byte string of the quoted string
    Nr    z%[0-9a-fA-F]{2}c                 óè   •— t          |                      d¦  «        ¦  «        }|                     dd¦  «        }t          ‰¦  «        D ](}|                     |dt          |¦  «        z  ¦  «        }Œ)|S )Nr   úutf-8rZ   rM   )r   r)   rH   ÚlistÚreplaceÚord)r(   Úbyte_stringÚunicode_stringÚ	safe_charr   s       €r>   Ú_try_unescapez _urlquote.<locals>._try_unescapeÙ   so   ø€ Ý*¨5¯;ª;°q©>¬>Ñ:Ô:ˆKØ(×/Ò/°¸ÑCÔCˆNÝ! $™ZœZð ^ð ^�	Ø!/×!7Ò!7¸	À8ÍcÐR[ÉnÌnÑC\Ñ!]Ô!]��Ø!Ð!r   z(?:%[0-9a-fA-F]{2})+c                 ó~   •— ‰                      |                      d¦  «                             d¦  «        ¦  «         dS )Nr   r   ú )Úappendr)   r.   )r(   Úescapess    €r>   Ú_extract_escapez"_urlquote.<locals>._extract_escapeã   s2   ø€ Ø�NŠN˜5Ÿ;š; q™>œ>×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Ø�6r   r]   r   r   r   c                 ó.   •— ‰                      d¦  «        S )Nr   )Úpop)Ú_rh   s    €r>   Ú_return_escapez!_urlquote.<locals>._return_escapeî   s   ø€ Ø—;’;˜q‘>”>Ð!r   s   %00)r'   ÚsearchÚsubÚurlquoter.   r"   r
   r*   )Ústringr   rd   ri   r=   rm   rh   s    `    @r>   r+   r+   Á   s$  øø€ ð €~˜ 2š˜Øˆtð €GÝ	„yÐ" FÑ+Ô+ð Dð	"ð 	"ð 	"ð 	"ð 	"õ ”Ð.°¸vÑFÔFˆð	ð 	ð 	ð 	ð 	õ ”Ð)¨?¸FÑCÔCˆå�f—m’m GÑ,Ô,°4·;²;¸wÑ3GÔ3GÐHÑHÔH€FÝ�f�hÑ'Ô'ð (Ø—’˜wÑ'Ô'ˆõ ˆ7�|„|�aÒÐð	"ð 	"ð 	"ð 	"ð 	"å”˜ °Ñ7Ô7ˆà€Mr   c                 ó8  — | €| S | dk    rdS |rag d¢}i }|D ]X}|                      d¦  «        }|||<   |                      |                     d¦  «        |                     d¦  «        ¦  «        } ŒYt          | ¦  «        } |rQ|D ]N}|                      |                     d¦  «        dt	          |¦  «        z                       d¦  «        ¦  «        } ŒO|                      dd	¦  «        }|r0|                     ¦   «         D ]\  }}|                     ||¦  «        }Œ|S )
a  
    Unquotes a URI portion from a byte string into unicode using UTF-8

    :param byte_string:
        A byte string of the data to unquote

    :param remap:
        A list of characters (as unicode) that should be re-mapped to a
        %XX encoding. This is used when characters are not valid in part of a
        URL.

    :param preserve:
        A bool - indicates that the chars to be remapped if they occur in
        non-hex form, should be preserved. E.g. / for URL path.

    :return:
        A unicode string
    Nr   r    )úúúúúr   r   rM   r]   rZ   )rk   r_   r.   r   r`   rH   Úitems)	ra   rC   rE   rX   Úpreserve_unmapÚcharÚreplacementr=   Úoriginals	            r>   rI   rI   õ   sX  € ð( ÐØÐà�cÒÐØˆràð aØ?Ð?Ð?ˆØˆØð 	að 	aˆDØ&×*Ò*¨1Ñ-Ô-ˆKØ*.ˆN˜;Ñ'Ø%×-Ò-¨d¯kªk¸'Ñ.BÔ.BÀK×DVÒDVÐW^ÑD_ÔD_Ñ`Ô`ˆKˆKå" ;Ñ/Ô/€Kàð lØð 	lð 	lˆDØ%×-Ò-¨d¯kªk¸'Ñ.BÔ.BÀXÕPSÐTXÑPYÔPYÑEY×DaÒDaÐbiÑDjÔDjÑkÔkˆKˆKà×Ò ¨Ñ3Ô3€Fàð ;Ø%3×%9Ò%9Ñ%;Ô%;ð 	;ð 	;Ñ!ˆK˜Ø—^’^ K°Ñ:Ô:ˆFˆFà€Mr   )F)r    )NN)#Ú__doc__Ú
__future__r   r   r   r   Ú	encodingsr   Úcodecsr'   r$   Ú_errorsr	   Ú_typesr
   r   r   r   r   r%   Úurlparser   r   Úurllibr   rp   r   r   Úurllib.parser?   rJ   rY   Úregister_errorr+   rI   rN   r   r>   ú<module>r‡      s±  ððð ð SÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rà Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 
€
€
€
à Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JàÔ�dÒÐØ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ðð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðPð Pð Pð Pðf1?ð 1?ð 1?ðh,ð ,ð ,ð$ €Ô �iÐ!9Ñ :Ô :Ð :ð1ð 1ð 1ð 1ðh.ð .ð .ð .ð .ð .r   