
    g?                     b   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ dZg d	Z ee	      Zeeeeeef   Zd
edefdZdeddfdZededeeedf   eedf   eedf   eedf   f   fd       Zdeded
edededefdZe	 ddeedf   deedf   deedf   deedf   dedefd       Zy)zURL parsing utilities.    N)	lru_cache)Union)scheme_charsuses_netloc   QUOTERz! 	
 )	
urlreturnc                 x   | j                  t              } t        D ]  }|| v s| j                  |d      }  dx}x}x}}| j	                  d      }|dkD  r:| d   t
        v r/| d| D ]  }|t
        vs n | d| j                         | |dz   d } }d| v }d| v }	| dd d	k(  rt        |       }
|r|	rd
}n|	rd}n|rd}nd}|D ]"  }| j	                  |d      }|dk\  s||
k  s!|}
$ | d|
 }| |
d } d|v }d|v }|r|r|r|st        d      |r^|j                  d      d   j                  d      d   }|d   dk(  r!t        j                  d|      st        d      d|vrt        d      |r| j                  d      \  } }}|	r| j                  d      \  } }}|r|j                         st        |       ||| ||fS )zSplit URL into parts. :r   r   N#?   //z/?#z/?z/#/[]zInvalid IPv6 URLvz\Av[a-fA-F0-9]+\..+\ZzIPvFuture address is invalidz%An IPv4 address cannot be in brackets)lstripWHATWG_C0_CONTROL_OR_SPACEUNSAFE_URL_BYTES_TO_REMOVEreplacefindr   lowerlen
ValueError	partitionrematchisascii_check_netloc)r   bschemenetlocqueryfragmentichas_hashhas_question_markdelimdelim_charswdelimhas_left_brackethas_right_bracketbracketed_host_s                    @/var/www/openai/venv/lib/python3.12/site-packages/yarl/_parse.py	split_urlr8      s   
 **/
0C'8++a$C ( *,+F+V+ehA1uQ<'QqA$  bq'--/3q1uw<CFczHs

2Aw$C)KKKKAXXa^F{v~  Qu%&k&=6M%6&6/00#--c215??DQGN a C'xx 8.I$%CDDN* !HII==-Qc*Qfnn&f63x//    r)   c                     | j                  dd      j                  dd      j                  dd      j                  dd      }t        j                  d|      }||k(  ry dD ]  }||v st        d|  d	       y )
N@r   r   r   r   NFKCz/?#@:znetloc 'z6' contains invalid characters under NFKC normalization)r   unicodedata	normalizer!   )r)   nnormalized_netlocr-   s       r7   r&   r&   V   s     	sB''R088bAII#rRA#--fa8 !!6( #6 6  r9   c                    d| vrd}d}| }n.| j                  d      \  }}}|j                  d      \  }}}|sd}d|v r@|j                  d      \  }}}|j                  d      \  }}}	|	j                  d      \  }}}	n|j                  d      \  }}}	|	s|xs d||xs ddfS 	 t        |	      }
d|
cxk  rdk  st        d	       t        d	      |xs d||xs d|
fS # t        $ r t        d      w xY w)
z4Split netloc into username, password, host and port.r;   Nr   r   r   z/Invalid URL: port can't be converted to integerr   i  zPort out of range 0-65535)
rpartitionr"   intr!   )r)   usernamepasswordhostinfouserinfor6   have_password	bracketedhostnameport_strports              r7   split_netlocrM   l   sA   
 &%)%) & 1 1# 6!X,4,>,>s,C)-H
h",,S11i ) 3 3C 8!X!++C01h ( 2 23 7!X48+;tTAAL8} 455 455tXx'74==	  LJKKLs   $C C4r(   r*   r+   c                     |s| r| t         v s|dd dk(  r1|r|dd dk7  r| r
|  d| d| n|  d| }n| r	|  d| | nd| | }n	| r|  d| }|r| d| }|r| d	| S |S )
z(Unsplit a URL without any normalization.Nr   r   r   r   z://r   r   r   )USES_AUTHORITY)r(   r)   r   r*   r+   s        r7   unsplit_resultrP      s     &V~5#bq'T/3r7c>28VHCxq.#>OC17VHCxu-r&#=OC	#Qug"*cU!H:33r9   userrE   hostrL   encodec                     |y|}|| d| }| ||S |'| sd} n|rt        |       } |rt        |      }|  d| } n| r|rt        |       } | r|  d| S |S )zMake netloc from parts.

    The user and password are encoded if encode is True.

    The host must already be encoded with _encode_host.
    r   r   r;   r   )rQ   rE   rR   rL   rS   rets         r7   make_netlocrV      s     |
CQtfo|(
D$<Dh'Hq
#	&d|"dV1SE?++r9   )F)__doc__r#   r=   	functoolsr   typingr   urllib.parser   r   _quotersr	   r   r   	frozensetrO   tuplestrSplitURLTyper8   r&   rC   rM   rP   boolrV    r9   r7   <module>rb      st    	    2 
D  0 ;'S#sC,-:03 :0< :0z# $ , >>
5dU39-uS$Y/?sDyAQQR> >B444#&4/24>A44   ,
T	
,CI, T	
, T	
	,
 , 	, ,r9   