
    Şi!                    
   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZej	        r ej
        d          ZddlmZmZmZ ddlmZ d Z G d d	e          Z e e            d
ddd          ZddZddZd Zd Zd Zd ZdS )    )annotationsNT   )
NO_DEFAULTremove_startformat_field)traverse_objc                 R    d} d}|                      t          j        |  d          S )NzhMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{} Safari/537.36)      z.0.0.0)formatrandomrandint)USER_AGENT_TMPLCHROME_MAJOR_VERSION_RANGEs     \C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/utils/networking.pyrandom_user_agentr      s5     AO!+!!V^5O%P"X"X"XYYY    c                      e Zd ZdZd)dZ fdZd*d
Zd+ fdZd, fdZd- fdZ	d Z
d.dZd.dZd, fdZd/ fdZd.dZej        d0d            Zej        d1d            Zef fd	Zej        d2d            Zej        d1d             Zef fd!	Zd3 fd#Zej        d2d$            Zej        d2d%            Zd4d- fd'Zd/d(Z xZS )5HTTPHeaderDictz
    Store and access keys case-insensitively.
    The constructor can take multiple dicts, in which keys in the latter are prioritised.

    Retains a case sensitive mapping of the headers, which can be accessed via `.sensitive()`.
    args
typing.Anykwargsreturntyping.Selfc                >    t          j        | g|R i |}i |_        |S N)dict__new___HTTPHeaderDict__sensitive_map)clsr   r   objs       r   r   zHTTPHeaderDict.__new__   s.    l3000000 
r   c                   t                                                       i | _        t          d |          D ]}|                     |           |r|                     |           d S d S r   )super__init__r    filterupdate)selfr   r   dct	__class__s       r   r%   zHTTPHeaderDict.__init__$   sy    !$%% 	 	CKK 	 KK	  	 r   dict[str, str]c               D      fd                                  D             S )Nc                2    i | ]\  }}j         |         |S  )r    ).0keyvaluer(   s      r   
<dictcomp>z,HTTPHeaderDict.sensitive.<locals>.<dictcomp>.   s7     
 
 
U  %u
 
 
r   )itemsr(   s   `r   	sensitivezHTTPHeaderDict.sensitive-   s6    
 
 
 
"jjll
 
 
 	
r   r0   strboolc                   t                                          t          |t                    r|                                n|          S r   )r$   __contains__
isinstancer6   titler(   r0   r*   s     r   r9   zHTTPHeaderDict.__contains__3   s6    ww##:c33G3G$PCIIKKKSQQQr   Nonec                   |                                 }| j        |= t                                          |           d S r   )r;   r    r$   __delitem__r<   s     r   r?   zHTTPHeaderDict.__delitem__6   s9    iikk %C     r   c               j    t                                          |                                          S r   )r$   __getitem__r;   r<   s     r   rA   zHTTPHeaderDict.__getitem__;   s#    ww""399;;///r   c                   t          |t          |                     r|                                }t          |t                    r|                     |           d S t
          S r   )r:   typer5   r   r'   NotImplementedr(   others     r   __ior__zHTTPHeaderDict.__ior__>   sX    eT$ZZ(( 	&OO%%EeT"" 	KKFr   c                   t          |t          |                     r|                                }t          |t                    r+ t          |           |                                 |          S t          S r   r:   rC   r5   r   rD   rE   s     r   __or__zHTTPHeaderDict.__or__F   sc    eT$ZZ(( 	&OO%%EeT"" 	74::dnn..666r   c                   t          |t          |                     r|                                }t          |t                    r+ t          |           ||                                           S t          S r   rI   rE   s     r   __ror__zHTTPHeaderDict.__ror__M   sc    eT$ZZ(( 	&OO%%EeT"" 	74::eT^^%5%5666r   c                  t          |t                    r|                    d          }|                                }|| j        |<   t                                          |t          |                                                     d S )Nzlatin-1)	r:   bytesdecoder;   r    r$   __setitem__r6   strip)r(   r0   r1   	key_titler*   s       r   rP   zHTTPHeaderDict.__setitem__T   sr    eU## 	,LL++EIIKK	*-Y'Is5zz'7'7'9'9:::::r   c               z    | j                                          t                                                       d S r   )r    clearr$   r(   r*   s    r   rT   zHTTPHeaderDict.clear[   s-    ""$$$r   c               V     t          |           |                                           S r   )rC   r5   r4   s    r   copyzHTTPHeaderDict.copy_   s"    tDzz$..**+++r   
str | Nonec                   d S r   r.   r(   r0   s     r   getzHTTPHeaderDict.getb       .1cr   defaultr   str | Tc                   d S r   r.   r(   r0   r]   s      r   r[   zHTTPHeaderDict.gete       7:sr   c                   |                                 }|t          u r!t                                          |          S t                                          ||          S r   )r;   r   r$   r[   r(   r0   r]   r*   s      r   r[   zHTTPHeaderDict.geth   sI    iikkj  77;;s###ww{{3(((r   c                   d S r   r.   rZ   s     r   popzHTTPHeaderDict.popn   s    '*sr   c                   d S r   r.   r`   s      r   re   zHTTPHeaderDict.popq   ra   r   c               .   |                                 }|t          u r;| j                            |           t	                                          |          S | j                            ||           t	                                          ||          S r   )r;   r   r    re   r$   rc   s      r   re   zHTTPHeaderDict.popt   sy    iikkj   $$S)))77;;s###  g...ww{{3(((r   tuple[str, str]c                v    | j                                          t                                                      S r   )r    popitemr$   rU   s    r   rj   zHTTPHeaderDict.popitem|   s,    $$&&&ww   r   c                   d S r   r.   rZ   s     r   
setdefaultzHTTPHeaderDict.setdefault   r\   r   c                   d S r   r.   r`   s      r   rl   zHTTPHeaderDict.setdefault   ra   r   Nc                   |                                 }|| j        v r!t                                          |          S |pd| |<   | |         S )N )r;   r    r$   rA   rc   s      r   rl   zHTTPHeaderDict.setdefault   sM    iikk$&&&77&&s+++MrS	Cyr   c                  t          |t          |                     r|                                }t          |t          j        j                  r |                                D ]
\  }}|| |<   n@t          |d          r#|                                D ]}||         | |<   n|D ]
\  }}|| |<   |                                D ]
\  }}|| |<   d S )Nkeys)	r:   rC   r5   collectionsabcMappingr3   hasattrrq   )r(   rF   r   r0   r1   s        r   r'   zHTTPHeaderDict.update   s    eT$ZZ(( 	&OO%%Ee[_455 
	"#kkmm " "
U!S		" UF## 	"zz|| ' '!#JS		' $ " "
U!S		 ,,.. 	 	JCDII	 	r   )r   r   r   r   r   r   )r   r+   )r0   r6   r   r7   )r0   r6   r   r=   )r   r6   )r   r   )r   r=   )r0   r6   r   rX   )r]   r   r0   r6   r   r^   )r0   r6   r   r6   )r   rh   r   )__name__
__module____qualname____doc__r   r%   r5   r9   r?   rA   rG   rJ   rL   rP   rT   rW   typingoverloadr[   r   re   rj   rl   r'   __classcell__)r*   s   @r   r   r      s~           
         
 
 
 
R R R R R R! ! ! ! ! !
0 0 0 0 0 0        ; ; ; ; ; ;     , , , , _111 _1_::: _:", ) ) ) ) ) ) _*** _*_::: _:", ) ) ) ) ) )! ! ! ! ! ! _111 _1_::: _:             r   r   z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zen-us,en;q=0.5navigate)z
User-AgentAcceptzAccept-LanguagezSec-Fetch-Modeproxiesr   headersc                (   |                     dd           }|r|                                  || d<   |                                 D ]\  }}|dk    rd | |<   |dk    r|	 t          j                            |          d         }n# t          $ r Y Mw xY w|dt          |d          z   | |<   dd	d
}||v rYt          j        	                    t          j        
                    |                              ||                             | |<   d S )NzYtdl-Request-Proxyall__noproxy__nor   zhttp://z//socks5hsocks4)socks5socks)scheme)re   rT   r3   urllibrequest_parse_proxy
ValueErrorr   parse
urlunparseurlparse_replace)r   r   	req_proxy	proxy_key	proxy_urlproxy_schemereplace_schemes          r   clean_proxiesr      sX   0$77I #" ' d d	9%%!%GI %~::9EEaH    	
 #%.i1N1N%N	" $! N ~--%+\%<%<L)))44==^T`Ea=bb&d &d	"/d ds   !%B
BBc                J    d| v r| d= d| d<   |                      dd            d S )NzYoutubedl-No-CompressionidentityzAccept-EncodingzYtdl-socks-proxy)re   )r   s    r   clean_headersr      s<    !W,,./%/!"KK"D)))))r   c                d   g }|                      d          }|D ];}|dk    r	|dk    r|r|                                 &|                    |           <|d         s |r|d         r|                    dd           |d         dv r|                    d           d                    |          S )N/...r   ro   )r   r   )splitre   appendinsertjoin)pathoutputsegmentsss       r   remove_dot_segmentsr      s     Fzz#H  88$YY 

MM!A;  &) a|{""b88Fr   c                B    t           j                            | d          S )z4Escape non-ASCII characters as suggested by RFC 3986s   %/;:@&=+$,!~*'()?#[])r   r   quote)r   s    r   escape_rfc3986r      s    <a!8999r   c           	        t           j                            |           }|                    |j                            d                              d          t          t          |j	                            t          |j
                  t          |j                  t          |j                                                            S )z&Normalize URL as suggested by RFC 3986idnaascii)netlocr   paramsqueryfragment)r   r   r   r   r   encoderO   r   r   r   r   r   r   geturl)url
url_parseds     r   normalize_urlr      s    &&s++J ''//66w??/
@@AAj/00Z-..
 344    fhhr   c                J   t           j                            |           }d|v ri|j        t	          |j        dd          z   }t           j                            |d|d         i          rdS t           j                            |          rdS t          ||j
        pdd          S )z'Unified proxy selector for all backendsr   Nz:%shttpr   )r   r   r   hostnamer   portr   proxy_bypass_environmentproxy_bypassr	   r   )r   r   url_componentshostports       r   select_proxyr      s    \**3//Nw!*\.:MtUZ-[-[[>228dGDM=RSS 	F^((22 	F!6!@&%HHHr   )r   r   r   r   )r   r   )
__future__r   rr   collections.abcr   rz   urllib.parser   urllib.requestTYPE_CHECKINGTypeVarr   _utilsr   r   r   	traversalr	   r   r   r   std_headersr   r   r   r   r   r   r.   r   r   <module>r      s   " " " " " "                  	 sA : : : : : : : : : : # # # # # #Z Z ZF F F F FT F F FR n##%%O' 	   d d d d@* * * *  *: : :
	 	 	
I 
I 
I 
I 
Ir   