¹Mcn,ddlmZddlmZddlZddlmZejdejZ ejdZ ejdZ d Z d e zZ d e zZd ezZd ZdZejdZejdZeedddZeeddddddddddd ZGddZddddZy)) annotations) defaultdictN)URLz^([a-z0-9.+-]+:))flagsz:[0-9]*$z^(//?(?!/)[^?\s]*)(\?[^\s]*)?$)<>"`    ){}|\^r )')%/?;#)rrrz^[+a-z0-9A-Z_-]{0,63}$z^([+a-z0-9A-Z_-]{0,63})(.*)$T) javascriptz javascript:) httphttpsftpgopherfilezhttp:zhttps:zftp:zgopher:zfile:c$eZdZddZddZddZy) MutableURLctd|_d|_d|_d|_d|_d|_d|_d|_y)NF)protocolslashesauthporthostnamehashsearchpathname)selfs ./usr/lib/python3/dist-packages/mdurl/_parse.py__init__zMutableURL.__init__js:$( " $ $ $( $ "& $( c0 d}d}|}|j}|sst|jddk(rVtj |}|r?|j d|_|j dr|j d|_|Sd}tj |}|r5|j }|j}||_ |t|d}|s|stjd|r*|jd}|r|r t|s |dd}d|_t|s|s |rt|sd } t!tt"D]-} |j%t"| } | d k7s!| d k(s| | ks,| } /| d k(r|j'd } n|j'd d | dz} | d k7r|d| } || dzd}| |_d } t!tt*D]-} |j%t*| } | d k7s!| d k(s| | ks,| } /| d k(r t|} | d kDr|| dz d k(r| dz} |d| }|| d}|j-||j.xsd|_|j.jd xr|j.j1d}|sA|j.jd}t|}d } | |kr|| }|s| dz } t2j|sd}t|}d }||kr*t5||dkDr|dz }n|||z }|dz }||kr*t2j|s|d| }|| dzd}t6j|}|rA|j9|j d|j;d |j d|rdj=||z}dj=||_n | dz } | |krt|j.t>kDrd|_|r|j.dd |_|j%d}|d k7r||d|_ |d|}|j%d}|d k7r||d|_|d|}|r||_t|r|j.r|j sd|_|S)NFrz^//[^@/]+@[^@/]+z//T@r:[].xr)!striplensplitSIMPLE_PATH_PATTERNmatchgroupr+r*PROTOCOL_PATTERNlowerr$re startswithHOSTLESS_PROTOCOLr%SLASHED_PROTOCOLrangeHOST_ENDING_CHARSfindrfindr&NON_HOST_CHARS parse_hostr(endswithHOSTNAME_PART_PATTERNordHOSTNAME_PART_STARTappendinsertjoinHOSTNAME_MAX_LENr))r,urlslashes_denote_host lower_protor%rest simple_pathproto proto_matchhost_endihecat_signr&host ipv6_hostname hostpartslpartnewpartkj valid_partsnot_hostbitr)qms r-parsezMutableURL.parsets zz|"s399S>':a'?-33D9K + 1 1! 4 $$Q'"-"3"3A"6DK &,,T2 %%'E++-K!DME %D %2995H$+Oood+G*;E*BABx#  ' &6u&=&H3012 #ii 1! 45"9(b.C(N"H #2~**S/**S!X\:"}HW~GaKM*  H3~./ #iiq 12"9(b.C(N"H # 2~t9!|X\ 2c 9A  ?D ?D OOD !!MM/RDM!MM44S9dmm>T>T?M ! MM//4  N!e$QrsT##  2::1Grzz+& !bjj!BC 5 )6 1vo +[8#" #<= bjj!@A  "}!}!@>Cr/