
    yfn                    P   d dl 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d dl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d dl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d dl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d dl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%d dl&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+d dl.Z/ddl0m1Z1 ddl2m3Z3 ddl2m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 e:jw                  dd      d    Z: e< ejz                  d	            Z> G d
 d      Z?d Z@g dZAeAg dg ddZBd d d d dddddddddddZC eD eEd ej                  ddgddgdddgd d!gd"d#gd$d%gd&                  ZGd'ZH eIeH      ZJeJj                  g d(        eIeH      ZLeLj                  g d)       d*ZMd+ZNd,ZOe3j                  d-        ZQd. ZRdd/ZSd0 ZTdd1e?fd2ZUdd1e?fd3ZVdd1e?fd4ZWd5 ZXd6 ZYd7 ZZd8 Z[d9 Z\d: Z]d; Z^d< Z_d= Z`d> Zad?d@dAdBZb G dC dDej                  j                        ZedE Zf G dF dGej                  j                        Zg G dH dIej                  j                        ZhdJ ZidK ZjdL Zk G dM dNej                        ZmdO ZndP Zod1e?fdQZpddRZqdSdTdUZrdV ZsdW Ztd1dXdYZudZ Zvd[ Zwd\ Zx G d] d^ej2                        Zy G d_ d`e#j                        Zzda Z{ ej                  dbdc      Z}dd Z~ddeZddfZ G dg dhe      Z G di dje      Z G dk dle      Z G dm dne      Z G do dpe      Z G dq dre      Z G ds dte      Z G du dve      Z G dw dxe      Z G dy dze      Z G d{ d|e      Z G d} d~e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zd Zd ZddZddZddZddZddZddZddZddZd ZddZd Z G d d      Ze3j                  d        Ze3j                  d        ZddZdd ddZ e       e_        d Zd Z G d de      Ze$j8                  dk(  rd dlZd dlZd dlZ G d dejb                        Z ejf                  d      Zejj                  Zejl                  jn                  ejl                  jp                  ejl                  jp                  ejl                  jp                  ejl                  jp                   ejr                  e      ge_        ejl                  jv                  e_        ejz                  Zejl                  jn                  ejl                  jp                  ejl                  jp                  ejl                  jp                   ejr                  e      ge_        ejl                  jv                  e_        dZdZd Zd Zn	 d dlZd Zd Z G d d      Ze3j                  d        ZeƐj                  ddd      ZeƐj                  ddddd      Zd1ddZd ZːddZ̐ddddÄZdĄ ZΐddńZdƄ ZdǄ ZdȄ Zd1dɜdʄZd˄ ZԐdd̄Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք ZߐddׄZdd؄Zdل ZddڄZddۄZdd܄Zd݄ ZddބZd߄ ZddZddZg fdZd ZddZdgddfdZddZ G d dej                  j                        Z G d d      Z G d de      Z G d de      Z G d d      Zd Zd Zd Zd Zd ZdddZd Zd ZddZej                  j                   e?fdZe?fdZdg i dd ZddZd fdZd Z eQ       dfdZd ddd	d
dZd dd d dddZ	d Z
d Zi fd1ddZd ZdZdddZddddddddddddZdZdZd Zd  Zdd!Zd" Zd# Zd$ Ze?fd%Zd& Zd' Zdd(d)Ze?fd*Zd+ Zd, Zg d-Z d. Z!d/ Z"dd0Z#d1 Z$dd2Z%dd3Z& G d4 d5      Z'd6 Z(d7 Z)d8 Z*d9 Z+dd:Z,dd;Z-dd<Z.g d@fd=Z/dg d@fd>Z0 G d? d@      Z1 G dA dB      Z2 G dC dD      Z3ddEZ4dF Z5dG Z6dH Z7dI Z8ddJZ9ddKZ:dL Z;dM Z<dN Z=dO Z>dP Z?dQ Z@dR ZAddSZBdTZCdUZDdVZEeCeEeDdWZFdX ZGdY ZHddZe?d	e@fd[ZId\ ZJd]ZKd^ ZLdd_ZMd` ZNda ZOdb ZPdc ZQi fddZRde ZSe7dfk(  rd1ndaTe3j                  dg        ZUdh ZV ejz                  di      ZWdj ZXdk ZYdlddmdnZZdo Z[dp Z\dq Z]dr Z^ G ds dt      Z_du Z`dv Za G dw dx      Zb G dy dz      Zc G d{ d|e(j                        Ze eed}d~dddddd      Zfefxj                  efj                  z  c_g        efxj                  efj                  z  c_i        g efj                  efj                  efj                  Zl G d d      Zmd ZnddZod1dddZp G d d      Zqd Zr G d d      Zsy# e$ r
 d Zd ZY &w xY w(      N   )	traversal   )	functools)compat_etree_fromstringcompat_expandusercompat_HTMLParseErrorcompat_os_name)xattr. c                       e Zd Zy)
NO_DEFAULTN__name__
__module____qualname__     5/usr/lib/python3/dist-packages/yt_dlp/utils/_utils.pyr   r   >       r   r   c                     | S Nr   xs    r   IDENTITYr   B   s    Hr   )JanuaryFebruaryMarchAprilMayJuneJulyAugust	SeptemberOctoberNovemberDecember)janvieru   févriermarsavrilmaijuinjuilletu   août	septembreoctobrenovembreu	   décembre)stycznialutegomarcakwietniamajaczerwcalipcasierpniau	   wrześniau   października	listopadagrudnia)enfrpliii)UTUTCGMTZASTADTESTEDTCSTCDTMSTMDTPSTPDTu   ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖŐØŒÙÚÛÜŰÝÞßàáâãäåæçèéêëìíîïðñòóôõöőøœùúûüűýþÿAAAAAAAECEEEEIIIIDNOOOOOOOOEUUUUUYTHssaaaaaaaeceeeeiiiionooooooooeuuuuuythy)*z%d %B %Yz%d %b %Yz%B %d %Yz
%B %dst %Yz
%B %dnd %Yz
%B %drd %Yz
%B %dth %Yz%b %d %Yz
%b %dst %Yz
%b %dnd %Yz
%b %drd %Yz
%b %dth %Yz%b %dst %Y %I:%Mz%b %dnd %Y %I:%Mz%b %drd %Y %I:%Mz%b %dth %Y %I:%Mz%Y %m %d%Y-%m-%dz	%Y.%m.%d.z%Y/%m/%dz%Y/%m/%d %H:%Mz%Y/%m/%d %H:%M:%Sz
%Y%m%d%H%Mz%Y%m%d%H%M%S%Y%m%dz%Y-%m-%d %H:%Mz%Y-%m-%d %H:%M:%Sz%Y-%m-%d %H:%M:%S.%fz%Y-%m-%d %H:%M:%S:%fz%d.%m.%Y %H:%Mz%d.%m.%Y %H.%Mz%Y-%m-%dT%H:%M:%SZz%Y-%m-%dT%H:%M:%S.%fZz%Y-%m-%dT%H:%M:%S.%f0Zz%Y-%m-%dT%H:%M:%Sz%Y-%m-%dT%H:%M:%S.%fz%Y-%m-%dT%H:%Mz%b %d %Y at %H:%Mz%b %d %Y at %H:%M:%Sz%B %d %Y at %H:%Mz%B %d %Y at %H:%M:%Sz%H:%M %d-%b-%Y)z%d-%m-%Yz%d.%m.%Yz%d.%m.%yz%d/%m/%Yz%d/%m/%yz%d/%m/%Y %H:%M:%Sz%d-%m-%Y %H:%Mz%H:%M %d/%m/%Y)z%m-%d-%Yz%m.%d.%Yz%m/%d/%Yz%m/%d/%yz%m/%d/%Y %H:%M:%Sz.}\('(.+)',(\d+),(\d+),'([^']+)'\.split\('\|'\)zc(?is)<script[^>]+type=(["\']?)application/ld\+json\1[^>]*>\s*(?P<json_ld>{.+?}|\[.+?\])\s*</script>z\d+(?:\.\d+)?c                  v    	 t        j                         } dj                  |        | S # t        $ r d} Y | S w xY w)zGet preferred encoding.

    Returns the best encoding scheme for the system, based on
    locale.getpreferredencoding() and some further tweaks.
    TESTzUTF-8)localegetpreferredencodingencode	Exception)prefs    r   preferredencodingrg      sC    **,d K  Ks   %) 88c                    t        j                  t        j                  j	                  |       dt        j                  j                  |      dddd      }	 |5  t        j                  | |d       ddd       t        j                  d	k(  r7t        j                  t              5  t        j                  |       ddd       t        j                  t              5  t        j                  d
      }t        j                  |       t        j                  |j                   d| z         ddd       t        j"                  |j                   |       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   BxY w# t$        $ rO t        j                  t              5  t        j&                  |j                          ddd        # 1 sw Y    xY ww xY w)z? Encode obj as JSON and write it to fn, atomically if possible r   z.tmpFwutf-8)prefixdirsuffixdeletemodeencoding)ensure_asciiNwin32r     )tempfileNamedTemporaryFileospathbasenamedirnamejsondumpsysplatform
contextlibsuppressOSErrorunlinkumaskchmodnamerenamere   remove)objfntfmasks       r   write_json_filer      s[    
	$	$''""2&'q)rwwr/Be#
AB 	3IIc2E2	3<<7" $$W- 		"  ) 	-88A;DHHTNHHRWWetem,	- 			"''2	3 	3
 	- 	-
    ) 	IIbgg		sm   E< E54E< )E$?!E<  AE0/(E< E!E< $E-)E< 0E95E< <"G G>	GG	Gc                 z    t        j                  d|      sJ ||d|z  nd| d| dz   }| j                  |      S )z  Find the xpath xpath[@key=val] z^[a-zA-Z_-]+$z[@%s][@z='z'])rematchfind)nodexpathkeyvalexprs        r   find_xpath_attrr      sH    88$c***S[GcM3%r#b6IJD99T?r   c                    | j                  d      D cg c]  }|j                  d       }}g }|D ]D  }t        |      dk(  r|j                  |d          &|\  }}|j                  d||   d|       F dj                  |      S c c}w )N/:r   r   {})splitlenappendjoin)rw   ns_mapc
componentsreplacednstags          r   xpath_with_nsr      s    (,

381!''#,8J8H :q6Q;OOAaD!GBOOr
C89: 88H 9s   B
Fc                       fd}t        |t              r	 ||      }n|D ]  } ||      }| n !|t        ur|S |r||n|}t        d|z        y |S )Nc                 &    j                  |       S r   )r   )r   r   s    r   _find_xpathz"xpath_element.<locals>._find_xpath   s    yyr   zCould not find XML element %s)
isinstancestrr   ExtractorError)r   r   r   fataldefaultr   nxps   `       r   xpath_elementr      sy      % 	BBA}	
 	y*$N L5dD !@4!GHHHr   c                     t        | ||||      }|||k(  r|S |j                  !|t        ur|S |r||n|}t        d|z        y |j                  S )N)r   r   z$Could not find XML element's text %s)r   textr   r   )r   r   r   r   r   r   s         r   
xpath_textr     se    dE4ugFAyALvv~*$N L5dD !H4!OPP66Mr   c                     t        | ||      }|'|t        ur|S |r|| d| dn|}t        d|z        y |j                  |   S )Nr   ]zCould not find XML attribute %s)r   r   r   attrib)r   r   r   r   r   r   r   s          r   
xpath_attrr     s_    eS)Ay*$N)-eWBse1%4D !BT!IJJ88C=r   c                     t        d| |fi |S )zOReturn the content of the tag with the specified ID in the passed HTML documentid)get_element_by_attributer   htmlkwargss      r   get_element_by_idr      s    #D"d=f==r   c                     t        d| |fi |S )zLReturn the html of the tag with the specified ID in the passed HTML documentr   )get_element_html_by_attributer   s      r   get_element_html_by_idr   %  s    (r4B6BBr   c                 ,    t        | |      }|r|d   S dS )zXReturn the content of the first tag with the specified class in the passed HTML documentr   N)get_elements_by_class
class_namer   retvals      r   get_element_by_classr   *  s    ":t4F6!9(D(r   c                 ,    t        | |      }|r|d   S dS )zUReturn the html of the first tag with the specified class in the passed HTML documentr   N)get_elements_html_by_classr   s      r   get_element_html_by_classr   0  s    '
D9F6!9(D(r   c                 0    t        | ||fi |}|r|d   S d S Nr   )get_elements_by_attribute)	attributevaluer   r   r   s        r   r   r   6  s&    &y%HHF6!9(D(r   c                 0    t        | ||fi |}|r|d   S d S r   )get_elements_html_by_attribute)r   r   r   kargsr   s        r   r   r   ;  s&    +IudLeLF6!9(D(r   c                 L    t        ddt        j                  |       z  |d      S )z]Return the content of all tags with the specified class in the passed HTML document as a listclass'[^\'"]*(?<=[\'"\s])%s(?=[\'"\s])[^\'"]*Fescape_value)r   r   escape)r   r   r   s      r   r   r   @  s(    $;bii
>SS5" "r   c                 L    t        ddt        j                  |       z  |d      S )zZReturn the html of all tags with the specified class in the passed HTML document as a listr   r   Fr   )r   r   r   )r   r   s     r   r   r   G  s(    );bii
>SS5" "r   c                  J    t        | i |D cg c]  \  }}|	 c}}S c c}}w )zVReturn the content of the tag with the specified attribute in the passed HTML document'get_elements_text_and_html_by_attribute)argsr   content_s       r   r   r   N  s%    &Mt&^W]&^_
G___   c                  J    t        | i |D cg c]  \  }}|	 c}}S c c}}w )zSReturn the html of the tag with the specified attribute in the passed HTML documentr   )r   r   r   wholes       r   r   r   S  s%    "I4"ZSY"Z[haE[[[r   z[\w:.-]+T)r   r   c          	   #     K   |syt        j                  d|      rdnd}|rt        j                  |      n|}d| dt        j                  |        d| d| d		}t        j                  ||      D ]e  }t	        |j                  d
      ||j                         d       \  }}	t        t        j                  dd|t         j                              |	f g yw)z
    Return the text (content) and the html (whole) of the tag with the specified
    attribute in the passed HTML document
    Nz
[\s"'`=<>]r   ?z(?x)
        <(?P<tag>z9)
         (?:\s(?:[^>"']|"[^"]*"|'[^']*')*)?
         \sz\s*=\s*(?P<_q>['"]z)(?-x:z)(?P=_q)
        r   z#^(?P<q>["\'])(?P<content>.*)(?P=q)$z\g<content>)flags)
r   r   r   finditer get_element_text_and_html_by_taggroupstartunescapeHTMLsubDOTALL)
r   r   r   r   r   quotepartial_element_remr   r   s
             r   r   r   X  s     
 ((,e4B#E ,BIIe%E IIi !!3E7& H	 [[+T2 
9!''%.$qwwyzJZ[  FX_gigpgpqr
 	

s   CCc                   J    e Zd ZdZ G d de      Zd Zd Zd Zd Z	d Z
d	 Zy
)HTMLBreakOnClosingTagParserz
    HTML parser which raises HTMLBreakOnClosingTagException upon reaching the
    closing tag for the first opening tag it has encountered, and can be used
    as a context manager
    c                       e Zd Zy):HTMLBreakOnClosingTagParser.HTMLBreakOnClosingTagExceptionNr   r   r   r   HTMLBreakOnClosingTagExceptionr   z      r   r   c                     t        j                         | _        t        j                  j
                  j                  |        y r   )collectionsdequetagstackr   parser
HTMLParser__init__selfs    r   r   z$HTMLBreakOnClosingTagParser.__init__}  s*    #))+''-r   c                     | S r   r   r   s    r   	__enter__z%HTMLBreakOnClosingTagParser.__enter__  s    r   c                 $    | j                          y r   )closer   r   s     r   __exit__z$HTMLBreakOnClosingTagParser.__exit__  s    

r   c                      y r   r   r   s    r   r  z!HTMLBreakOnClosingTagParser.close  s     	r   c                 :    | j                   j                  |       y r   )r   r   )r   r   r   s      r   handle_starttagz+HTMLBreakOnClosingTagParser.handle_starttag  s    S!r   c                     | j                   st        d      | j                   r-| j                   j                         }||k(  rn| j                   r-t        d| d      | j                   s| j                         y )Nzno tags in the stackz!matching opening tag for closing  tag not found)r   r	   popr   )r   r   	inner_tags      r   handle_endtagz)HTMLBreakOnClosingTagParser.handle_endtag  su    }}'(>??mm))+IC mm
 (*KC5P^(_``}}5577 r   N)r   r   r   __doc__re   r   r   r  r  r  r  r  r   r   r   r   r   s  s1     ."
8r   r   c           
      ~   d }d|  d} ||d|  t        d|  d            } |||d dt        d|  d	            }||d
z   z  }t               5 }|j                  |||        |j                  r|j                  d   | k7  rt        d|  d	      |}|t	        |      k  rT |||d |t        d|  d            }|t	        |      z   }		 |j                  ||||	z           ||	z  }|t	        |      k  rTt        d      # t        j
                  $ r ||||z    ||||	z    fcY cddd       S w xY w# 1 sw Y   yxY w)z
    For the first element with the specified tag in the passed HTML document
    return its' content (text) and the whole element (html)
    c                 D    	 | j                  |      S # t        $ r |w xY wr   index
ValueError)haystackneedleexcs      r   find_or_raisez7get_element_text_and_html_by_tag.<locals>.find_or_raise  s*    	>>&)) 	I	s    z</><zopening r
  Nzmalformed opening z tagr   r   zparser did not match opening zclosing zunexpected end of html)r	   r   feedr   r   r   )
r   r   r  closing_tagwhole_startcontent_startr   offsetnext_closing_tag_startnext_closing_tag_ends
             r   r   r     s   

 se1+K#i.#n/MNPK![\C!69KC5PT7U!VXM[1_$M	$	& >&D]34&//!"4";'*GuD(QRRs4y %2VW{%^&DE&G" $:C<L#L DD1E(EFG.. s4y  $$<== /MM DM&3I*IJV.B%BCD D> >D> >s7   A:D3D'D36D3#D0$D3/D00D33D<c                       e Zd ZdZd Zd Zy)HTMLAttributeParserzATrivial HTML parser to gather the attributes for a single elementc                 d    i | _         t        j                  j                  j	                  |        y r   )attrsr   r   r   r   r   s    r   r   zHTMLAttributeParser.__init__  s!    
''-r   c                 8    t        |      | _        t        d      )Ndone)dictr$  r	   r   r   r$  s      r   r  z#HTMLAttributeParser.handle_starttag  s    %[
#F++r   N)r   r   r   r  r   r  r   r   r   r"  r"    s    K.,r   r"  c                   "    e Zd ZdZd Zd Zd Zy)HTMLListAttrsParserz?HTML parser to gather the attributes for the elements of a listc                 r    t         j                  j                  j                  |        g | _        d| _        y r   )r   r   r   r   items_levelr   s    r   r   zHTMLListAttrsParser.__init__  s(    ''-
r   c                     |dk(  r3| j                   dk(  r$| j                  j                  t        |             | xj                   dz  c_         y )Nlir   r   )r-  r,  r   r'  r(  s      r   r  z#HTMLListAttrsParser.handle_starttag  s8    $;4;;!+JJd5k*qr   c                 .    | xj                   dz  c_         y Nr   )r-  )r   r   s     r   r  z!HTMLListAttrsParser.handle_endtag  s    qr   N)r   r   r   r  r   r  r  r   r   r   r*  r*    s    I

r   r*  c                     t               }t        j                  t              5  |j	                  |        |j                          ddd       |j                  S # 1 sw Y   |j                  S xY w)af  Given a string for an HTML element such as
    <el
         a="foo" B="bar" c="&98;az" d=boz
         empty= noval entity="&amp;"
         sq='"' dq="'"
    >
    Decode and return a dictionary of attributes.
    {
        'a': 'foo', 'b': 'bar', c: 'baz', d: 'boz',
        'empty': '', 'noval': None, 'entity': '&',
        'sq': '"', 'dq': '''
    }.
    N)r"  r~   r   r	   r  r  r$  )html_elementr   s     r   extract_attributesr4    sX     !"F			2	3 L! << <<s   "AA.c                 p    t               }|j                  |        |j                          |j                  S )z_Given a string for an series of HTML <li> elements,
    return a dictionary of their attributes)r*  r  r  r,  )webpager   s     r   
parse_listr7    s+     !"F
KK
LLN<<r   c                     | | S t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } t        j                  dd|       } t        |       }  | j                         S )z,Clean an HTML snippet into a readable string\s+ z(?u)\s?<\s?br\s?/?\s?>\s?
z(?u)<\s?/\s?p\s?>\s?<\s?p[^>]*>z<.*?>r   )r   r   r   strip)r   s    r   
clean_htmlr=    sp     |66&#t$D66.d;D664dDAD66'2t$DD4::<r   c                   B     e Zd Zdddd fd
Zed        Z fdZ xZS )LenientJSONDecoderNFr   )transform_sourceignore_extraclose_objectsc                V    ||c| _         | _        d|z  | _        t        |   |i | y Nr   )r@  rA  _close_attemptssuperr   )r   r@  rA  rB  r   r   	__class__s         r   r   zLenientJSONDecoder.__init__  s4    3C\0t0 =0$)&)r   c                 &   | j                   d | j                   }| j                  j                  d      r|dz   S |j	                  d      sy | j                  j                  d      r|d d dz   S | j                  j                  d      r|d d dz   S y )NzExpecting ',',zExpecting property namer   zExpecting valuer   )docposmsg
startswithendswith)errrK  s     r   _close_objectz LenientJSONDecoder._close_object  s    gghsww77/09c"7778s8c>!WW 12s8c>! 3r   c           
      8   | j                   r| j                  |      }t        | j                  dz         D ]C  }	 | j                  r$| j	                  |j                               d   c S t        |   |      c S  J d       # t        j                  $ r}|j                   || j                  k  r| j                  |      }|Y d }~ t        |      |j                   d||j                  dz
  |j                  dz    ||j                        d }~ww xY w)Nr   r   z in 
   z Too many attempts to decode JSON)r@  rangerE  rA  
raw_decodelstriprF  decoderz   JSONDecodeErrorrL  rQ  typerM  )r   sattempterG  s       r   rW  zLenientJSONDecoder.decode!  s     %%a(AT11A56 	TGT$$??188:6q99w~a((		T 	988u '' T55=t333**1-A} d1gtAaeebj,D+GH!QUUSSTs$   -B+BD/DA	DD)r   r   r   r   staticmethodrQ  rW  __classcell__rG  s   @r   r?  r?    s.    /3%WX *
 " "9 9r   r?  c                    | dk(  rt         j                  dk(  rmddl}t        j                  t
        j                        5   |j                  t         j                  j                         t        j                         ddd       t        t         j                  d      rt         j                  j                  | fS t         j                  | fS t        d      D ]B  }	 	 t         j                  dk(  r
t               t!        | |d      j#                         }|| fc S  y# 1 sw Y   xY w# t$        $ r t'        | |      }Y +w xY w# t$        $ r=}|s|j(                  t(        j*                  fv r | t-        |       } }|| k(  r Y d}~d}~ww xY w)	ao  Try to open the given filename, and slightly tweak it if this fails.

    Attempts to open the given filename. If this fails, it tries to change
    the filename slightly, step by step, until it's either able to open it
    or it fails and raises a final exception, like the standard open()
    function.

    It returns the tuple (stream, definitive_file_name).
    -rr   r   Nbufferr   F)block)r|   r}   msvcrtr~   r   ioUnsupportedOperationsetmodestdoutfilenorv   O_BINARYhasattrrb  rT  LockingUnsupportedErrorlocked_filer  r   openerrnoEACCESsanitize_path)filename	open_moderd  r[  streamrP  old_filenames          r   sanitize_openrv  4  sV    3<<7" $$R%<%<= Aszz002BKK@A%,SZZ%B

!!T\]]

T\]]8 	3<<7* 233$XyFPPR 8##	A A  3h	23  	#))6%-}X/F(Lx' (		sB    >D9D+ED(+E EEE	F3FFc                     d}t         j                  j                  |       }|t         j                  j                  |      }|S )z:Convert RFC 2822 defined time string into system timestampN)emailutilsparsedate_tz	mktime_tz)timestr	timestamp	timetuples      r   timeconvertr  [  s;    I((1IKK)))4	r   c                 p   | dk(  ryfd}r t         u sst        j                  d|       } t        j                  dd |       } dj                  t        ||             }t         u r7t        j                  dd|      }d}t        j                  d	| d
| dd|      }|j                  dd      xs d}s{d|v r|j                  dd      }d|v r|j                  d      }r|j                  d      r|dd }|j                  d      rd|t        d      d z   }|j                  d      }|sd}|S )a/  Sanitizes a string so it could be used as part of a filename.
    @param restricted   Use a stricter subset of allowed characters
    @param is_id        Whether this is an ID that should be kept unchanged if possible.
                        If unset, yt-dlp's new sanitization rules are in effect
    r   c                    r| t         v r	t         |    S s| dk(  ryt        u r0s.| dv r*dddj                  | t        t	        |       dz               S | dk(  st	        |       d	k  st	        |       d
k(  ry| dk(  rrdS dS | dk(  rrdS dS | dv ryr@| dv s| j                         st	        |       d
kD  rt        j                  |       d   dv rdS dS | S )Nr;  z  z	"*:<>?|/\u   ⧸u   ⧹)r   \i  r          r   "'r   z _ -z   -z\/|*<>z _z!&'()[]{}$;`^,#r   CM)ACCENT_CHARSr   getchrordisspaceunicodedatacategory)charis_id
restricteds    r   replace_insanez)sanitize_filename.<locals>.replace_insanem  s    $,.%%j 8L!266tSTVAS=TUUS[CINc$i3.>S[#2--S[)87x7Y4#553t9WZ?$--d3A6$>2IEIr   NFKCz[0-9]+(?::[0-9]+)+c                 D    | j                  d      j                  dd      S )Nr   r   r   )r   replacer   s    r   <lambda>z#sanitize_filename.<locals>.<lambda>  s    
0B0B30L r   z(\0.)(?:(?=\1)..)+\1z(?:\0.|[ _-])*z^ .|z .$ r   __z-_r   Nra  r   )r   r  	normalizer   r   r   mapr  r<  rN  r   rV  )rZ  r  r  r  resultSTRIP_REs    ``   r   sanitize_filenamer  d  s=    	Bw* u
*%!!&!,
$&LaPAWWS+,F
-uf=$$xj(48"fE^^D"%,Ffn^^D#.F fnc"&++D1ABZFS!6#c(),,Fs#FMr   c                    t         j                  dk(  r%d}t        j                  j	                  |       \  }}n|rd}n| S t        j                  j                  t        | |            j                  t        j                  j                        }|r|j                  d       |D cg c]  }|dv r|nt        j                  dd|      ! }}|r.|j                  d|t        j                  j                  z          nN|rL| rJ| d   t        j                  j                  k(  r*|j                  dt        j                  j                         t        j                  j                  t        j                  j                  |       S c c}w )z(Sanitizes and normalizes path on Windowsrr   Fr   r   )r   z..z(?:[/<>:"\|\\?\*]|[\s.]$)#)r|   r}   rv   rw   
splitdrivenormpathremove_startr   sepr  r   r   insertr   )rZ  forcedrive_or_uncr   	norm_path	path_partsanitized_paths          r   rq  rq    s-    ||w'',,Q/a	  a!>?EEbggkkRIa #$ +-	266:VX[]f3gg$N $ a!;<	11,a- 77BGGLL.9::$s   '$Fhttp)schemec                    | y | j                  d      r| d|  S d}|D ]4  \  }}t        j                  ||       st        j                  |||       c S  | S )N//r   ))z
^httpss://zhttps://)z^rmtp([es]?)://z	rtmp\1://)rN  r   r   r   )urlr  COMMON_TYPOSmistakefixups        r   sanitize_urlr    sm     {		3%  L ' /88GS!66'5#../ Jr   c                    t         j                  j                  |       }|j                  | d fS t         j                  j	                  |j                  |j                  |j                  nd|j                  |j                  fz              } t        j                  |j                  d|j                  xs dj                               }| d|j                          fS )Nz%s:%d)netlocr   r   zBasic )urllibparseurlsplitusername
urlunsplit_replaceporthostnamebase64	b64encodepasswordrd   rW  )r  partsauth_payloads      r   extract_basic_authr    s    LL!!#&E~~Dy
,,
!
!%..**,

33 #1 #6 7C ##NNENN$8b$8	9AACEL&,,./000r   c                 R    t         j                  j                  t        |             S )zExpand shell variables and ~)rv   rw   
expandvarsr   rZ  s    r   expand_pathr    s    77/233r   )lazyc                @      fd}|r |       S t         |             S )z-Remove all duplicates from the input iterablec               3   T   K   g } D ]  }|| vs| j                  |       |  y wr   )r   )seenr   iterables     r   _iterzorderedSet.<locals>._iter  s2      	A}A	s   (()list)r  r  r  s   `  r   
orderedSetr    s     57-UW-r   c                 $   | dd }|t         j                  j                  v r&t        t         j                  j                  |         S | t         j                  j                  v rt         j                  j                  |    S t        j                  d|      }|d|j                  d      }|j                  d      rd}d|z  }nd}t        j                  t              5  t        t        ||            cddd       S d	|z  S # 1 sw Y   d	|z  S xY w)
z)Transforms an HTML entity to a character.NrJ  z#(x[0-9a-fA-F]+|[0-9]+)r   r      z0%srS  z&%s;)r   entitiesname2codepointr  html5r   r   r   rN  r~   r   r  int)entity_with_semicolonentitymobjnumstrbases        r   _htmlentity_transformr    s    "3B'F ---4==//788  3 33}}""#89988.7DAS!DV^FD  , 	*s64()	* 	* F?		* F?s   DDc                 \    | y t        | t              sJ t        j                  dd |       S )Nz
&([^&;]+;)c                 6    t        | j                  d            S r1  )r  r   r  s    r   r  zunescapeHTML.<locals>.<lambda>
  s    !6qwwqz!B r   )r   r   r   r   r  s    r   r   r     s5    ya66BAG Gr   c                     | j                  dd      j                  dd      j                  dd      j                  dd      j                  d	d
      S )N&&amp;r  z&lt;r  z&gt;r  z&quot;r  z&#39;r  )r   s    r   
escapeHTMLr    sF    	g		f		f		h		g	r   c                       e Zd Zd Zy)netrc_from_contentc                     i i c| _         | _        t        j                  |      5 }| j	                  d|d       d d d        y # 1 sw Y   y xY w)Nra  F)hostsmacrosre  StringIO_parse)r   r   rt  s      r   r   znetrc_from_content.__init__  sE    "$b
DK[[! 	,VKKVU+	, 	, 	,s   AAN)r   r   r   r   r   r   r   r  r    s    ,r   r  c                        e Zd Zej                  dk(  r1 ej                         Zexj                  ej                  z  c_        ndZe
d        Zdddd fd
Zd Zd Zd	d
 fd
Zedd
d       Z xZS )Popenrr   Nc                 R     t        t        d      sy fd} |d        |d       y)a  Restore LD_LIBRARY_PATH when using PyInstaller
            Ref: https://github.com/pyinstaller/pyinstaller/blob/develop/doc/runtime-information.rst#ld_library_path--libpath-considerations
                 https://github.com/yt-dlp/yt-dlp/issues/4573
        _MEIPASSNc                 b    j                  |  d      }|j                  | d        y || <   y )N_ORIG)r  r  )r   origenvs     r   _fixz,Popen._fix_pyinstaller_ld_path.<locals>._fix/  s3    77cU%=)D|T"Cr   LD_LIBRARY_PATHDYLD_LIBRARY_PATH)rk  r|   )r  r  s   ` r   _fix_pyinstaller_ld_pathzPopen._fix_pyinstaller_ld_path&  s+     sJ'	  	 !r   F)r  r   shellc                6   |t         j                  j                         }| j                  |       |j	                  d      xs( |j	                  d      xs |xs |j	                  d      | _        |du r)d|d<   |j                  dd       |j                  dd       |rTt        dk(  rK|j	                  d      :t        |t              st        |d	      }d
}d|d<   | j                          d| d}t        | 4  |g|||d|d| j                  i y )Nrp   errorsuniversal_newlinesTrj   r  nt
executabler  Fz"^

"=z /Q /S /D /V:OFF /E:ON /C "r  )r  r  startupinfo)rv   environcopyr  r  _Popen__text_mode
setdefaultr
   r   r   shell_quote_Popen__comspecrF  r   _startupinfo)r   r   r  r   r  	remainingr   rG  s          r   r   zPopen.__init__9  s   ;**//#C%%c*!::j1uVZZ5IuTuU[U_U_`tUu4<+/F'(j'2h	2^t+

<0H0PdC("4t4E CHnn&''B4&JDi	is%i6iW[WhWhir   c                    t         j                  j                  d      xs? t         j                  j	                  t         j                  j                  dd      dd      }t         j                  j                  |      r|S t        d      )NComSpec
SystemRootr   System32zcmd.exez:shell not found: neither %ComSpec% nor %SystemRoot% is set)rv   r  r  rw   r   isabsFileNotFoundError)r   comspecs     r   	__comspeczPopen.__comspecN  sa    **..+ Erww||JJNN<,j)0E77==!N \]]r   c                 h    	  | j                   |i |S # t        $ r | j                  d         w xY w)Ntimeout)communicateBaseExceptionkillr   r   r   s      r   communicate_or_killzPopen.communicate_or_killU  s?    	#4##T4V44 	IIdI#	s    1r   r  c                R    t         |           |dk7  r| j                  |       y y )Nr   r  )rF  r  wait)r   r  rG  s     r   r  z
Popen.kill\  s&    a<IIgI& r   c                     | |i |5 }|j                   rdnd}|j                  |      \  }}|xs ||xs ||j                  fcd d d        S # 1 sw Y   y xY w)Nr   r   r  )r  r  
returncode)clsr  r   r   procr   rh  stderrs           r   runz	Popen.runa  sh    $!&! 	IT ,,b#G!55g5FNFF$Wf&7H	I 	I 	Is   <AA)r   r   r   r|   r}   
subprocessSTARTUPINFOr  dwFlagsSTARTF_USESHOWWINDOWr]  r  r   r  r  r  classmethodr   r^  r_  s   @r   r  r    s    
||w-z--/
 ? ??" "$ .2U j*^   '
  $ I Ir   r  c                 H    t        | t              r| S | j                  d      S Nascii)r   r   rW  r  s    r   encodeArgumentr)  i  s!     1c"19(99r   Time)hoursminutessecondsmillisecondsc                 x    t        | d      \  }} t        |d      \  }}t        |d      \  }}t        ||||       S )N  <   )divmod
_timetuple)msecsecsminshrss       r   timetuple_from_msecr8  s  sC    d#JD$b!JD$tR ICc4t,,r   c                 "   t        | dz        }|j                  r)d|j                  ||j                  ||j                  fz  }n8|j                  rd|j                  ||j                  fz  }nd|j                  z  }|rd||j                  fz  S |S )Nr0  z%d%s%02d%s%02dz%d%s%02d%dz%s.%03d)r8  r+  r,  r-  r.  )r5  delimr4  timerets        r   formatSecondsr>  z  s    td{+Dzz$**eT\\5$,,!WW	DLL%>>T\\!379T..//@S@r   c                     ddl m} d| d}| j                         } | r| j                  d      r|d   j	                         |dd  z   }| r| dz   |z   S d	|z   S )
Nr   )
REPOSITORYz0please report this issue on  https://github.com/zo/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U)r   !r   r   r   r:  r   )updater@  rstriprO  title)beforer@  rM  s      r   bug_reports_messagerF    sk    #=j\ Jp pC ]]_FV___5!fllns12w&"FSLc11c11r   c                   (     e Zd ZdZdZd fd	Z xZS )YoutubeDLErrorz$Base exception for YoutubeDL errors.Nc                     ||| _         n&| j                   t        |       j                  | _         t        |   | j                          y r   )rM  rY  r   rF  r   )r   rM  rG  s     r   r   zYoutubeDLError.__init__  s;    ?DHXXDz**DH"r   r   r   r   r   r  rM  r   r^  r_  s   @r   rH  rH    s    .
C# #r   rH  c                   D     e Zd ZdZd fd	Zed        Zd Z fdZ xZ	S )r   zError during info extraction.c                    ddl m} t        j                         d   |v rd}t	        |      | _        || _        || _        || _        || _	        || _
        t        j                         | _        t        | j                  d   t              r| j                  d   j                  | _        t        | 9  | j                         y)z tb, if given, is the original traceback (so that it can be printed out).
        If expected is set, this is a normal error message and most likely not a bug in yt-dlp.
        r   )network_exceptionsr   Tr   N)networking.exceptionsrM  r|   exc_infor   orig_msg	tracebackexpectedcausevideo_idier   r   rF  r   _ExtractorError__msg)	r   rM  tbrR  rS  rT  rU  rM  rG  s	           r   r   zExtractorError.__init__  s     	?<<>! 22HC 
 dmmA&7 MM!,55DM$r   c           
          dj                  t        | j                  d d      t        | j                  d d      | j                  t        | j
                  d d      | j                  rdf      S t               f      S )Nr   z[%s] z%s: z (caused by %r))r   format_fieldrU  rT  rP  rS  rR  rF  r   s    r   __msgzExtractorError.__msg  sp    ww$0f5MMT+<=--B< = 	=
 &9%:< = 	=r   c           
      @   t        | j                  xr. dj                  t        j                  | j                              | j                  xrG dj                  t        j
                  d | j                  | j                  j                        dd        d      xs d S )Nr   r   r;  r;  )join_nonemptyrQ  r   	format_tbrS  format_exception__traceback__r   s    r   format_tracebackzExtractorError.format_traceback  s~    NNKrwwy':':4>>'JKJJn2779#=#=dDJJPTPZPZPhPh#ijkjl#mn    	 r   c                     t         |   ||       t        | dd       r@|dvr;| j                  xs t	        |       j
                  | _        | j                  f| _        y y y )NrM  )rM  r   )rF  __setattr__getattrrV  rY  r   rM  r   )r   r   r   rG  s      r   rc  zExtractorError.__setattr__  sU    D%(4%$o*Ezz8T$Z%8%8DHDI +F%r   )NFNNN)
r   r   r   r  r   propertyrV  ra  rc  r^  r_  s   @r   r   r     s.    '%& = = % %r   r   c                        e Zd Z fdZ xZS )UnsupportedErrorc                 <    t         |   d|z  d       || _        y )NzUnsupported URL: %sTrR  )rF  r   r  )r   r  rG  s     r   r   zUnsupportedError.__init__  s&    !C'$ 	 	8r   r   r   r   r   r^  r_  s   @r   rg  rg    s     r   rg  c                       e Zd ZdZy)RegexNotFoundErrorzError when a regex didn't matchNr   r   r   r  r   r   r   rl  rl    s    )r   rl  c                   $     e Zd ZdZd fd	Z xZS )GeoRestrictedErrorzGeographic restriction Error exception.

    This exception may be thrown when a video is not available from your
    geographic location due to geographic restrictions imposed by a website.
    c                 >    d|d<   t        |   |fi | || _        y )NTrR  )rF  r   	countries)r   rM  rq  r   rG  s       r   r   zGeoRestrictedError.__init__  s&    !z''"r   r   r   r   r   r  r   r^  r_  s   @r   ro  ro    s    # #r   ro  c                   $     e Zd ZdZd fd	Z xZS )UserNotLivez%Error when a channel/user is not livec                 8    d|d<   t        |   |xs dfi | y )NTrR  z!The channel is not currently live)rF  r   )r   rM  r   rG  s      r   r   zUserNotLive.__init__  s%    !zC CNvNr   r   rr  r_  s   @r   rt  rt    s    /O Or   rt  c                   $     e Zd ZdZd fd	Z xZS )DownloadErrorzDownload Error exception.

    This exception may be thrown by FileDownloader objects if they are not
    configured to continue on errors. They will contain the appropriate
    error message.
    c                 2    t         |   |       || _        y)zh exc_info, if given, is the original exception that caused the trouble (as returned by sys.exc_info()). N)rF  r   rO  )r   rM  rO  rG  s      r   r   zDownloadError.__init__  s     r   r   rr  r_  s   @r   rw  rw    s    ! !r   rw  c                       e Zd ZdZdZy)EntryNotInPlaylistzEntry not in playlist exception.

    This exception will be thrown by YoutubeDL when a requested entry
    is not found in the playlist info_dict
    zEntry not found in infoNr   r   r   r  rM  r   r   r   rz  rz    s    
 $Cr   rz  c                   (     e Zd ZdZdZd fd	Z xZS )SameFileErrorzSame File exception.

    This exception will be thrown by FileDownloader objects if they detect
    multiple files would have to be downloaded to the same file on disk.
    z4Fixed output name but more than one file to downloadc                 l    || xj                   d| z  c_         t        | 	  | j                          y N: rM  rF  r   )r   rr  rG  s     r   r   zSameFileError.__init__
  s.    HH"XJ'H"r   r   rJ  r_  s   @r   r}  r}    s    
 AC# #r   r}  c                       e Zd ZdZy)PostProcessingErrorzPost Processing exception.

    This exception may be raised by PostProcessor's .run() method to
    indicate an error in the postprocessing task.
    Nrm  r   r   r   r  r    s    r   r  c                       e Zd ZdZdZy)DownloadCancelledz@ Exception raised when the download queue should be interrupted zThe download was cancelledNr{  r   r   r   r  r    s
    J
&Cr   r  c                       e Zd ZdZdZy)ExistingVideoReachedz --break-on-existing triggered zWEncountered a video that is already in the archive, stopping due to --break-on-existingNr{  r   r   r   r  r    s
    )
cCr   r  c                       e Zd ZdZdZy)RejectedVideoReachedz  --break-match-filter triggered zSEncountered a video that did not match filter, stopping due to --break-match-filterNr{  r   r   r   r  r  "  s
    *
_Cr   r  c                       e Zd ZdZdZy)MaxDownloadsReachedz) --max-downloads limit has been reached. zDMaximum number of downloads reached, stopping due to --max-downloadsNr{  r   r   r   r  r  '  s
    3
PCr   r  c                   $     e Zd ZdZd fd	Z xZS )ReExtractInfoz& Video info needs to be re-extracted. c                 2    t         |   |       || _        y r   )rF  r   rR  )r   rM  rR  rG  s      r   r   zReExtractInfo.__init__/  s     r   Frr  r_  s   @r   r  r  ,  s    0! !r   r  c                   &     e Zd ZdZdZ fdZ xZS )ThrottledDownloadz( Download speed below --throttled-rate. z*The download speed is below throttle limitc                 <    t         |   | j                  d       y )NFri  rF  r   rM  r   rG  s    r   r   zThrottledDownload.__init__8  s    E2r   rJ  r_  s   @r   r  r  4  s    2
6C3 3r   r  c                   (     e Zd ZdZdZd fd	Z xZS )UnavailableVideoErrorzUnavailable Format exception.

    This exception will be thrown when a video is requested
    in a format that is not available for that video.
    zUnable to download videoc                 l    || xj                   d| z  c_         t        | 	  | j                          y r  r  )r   rP  rG  s     r   r   zUnavailableVideoError.__init__D  s-    ?HH"SE
"H"r   r   rJ  r_  s   @r   r  r  <  s    
 %C# #r   r  c                   "     e Zd ZdZ fdZ xZS )ContentTooShortErrorzContent Too Short exception.

    This exception may be raised by FileDownloader objects when a file they
    download is too small for what the server announced first, indicating
    the connection was probably interrupted.
    c                 N    t         |   d| d| d       || _        || _        y )NzDownloaded z bytes, expected z bytes)rF  r   
downloadedrR  )r   r  rR  rG  s      r   r   zContentTooShortError.__init__R  s.    ;zl2CH:VTU$ r   rr  r_  s   @r   r  r  J  s    ! !r   r  c                         e Zd Zd fd	Z xZS )XAttrMetadataErrorc                 T   t         |   |       || _        || _        | j                  t        j
                  t        j                  fv sd| j                  v sd| j                  v rd| _        y | j                  t        j                  k(  sd| j                  v rd| _        y d| _        y )NzNo space leftzDisk quota exceededNO_SPACEzArgument list too longVALUE_TOO_LONGNOT_SUPPORTED)	rF  r   coderM  ro  ENOSPCEDQUOTreasonE2BIG)r   r  rM  rG  s      r   r   zXAttrMetadataError.__init__Z  s    	 II%,,55"dhh.2G4882S$DKYY%++%)ATXX)M*DK)DKr   )NzUnknown errorrj  r_  s   @r   r  r  Y  s    * *r   r  c                       e Zd Zy)XAttrUnavailableErrorNr   r   r   r   r  r  i  r   r   r  c                 L    t        | t        t        t        j                  f      S r   )r   r   bytesrv   PathLikefs    r   is_path_liker  m  s    a#ubkk233r   c           	         t        j                  d|       }|st        j                  d|       }t        j                  |xr |j	                  d      j                               }|| d t        |j	                  d              } t        j                  |xs d      }|| fS | d t        |j	                  d              } |j	                  d      st        j                         }|| fS |j	                  d      dk(  rdnd	}t        j                  |t        |j	                  d
            z  |t        |j	                  d            z        }|| fS )Na  (?x)
            ^.{8,}?                                              # >=8 char non-TZ prefix, if present
            (?P<tz>Z|                                            # just the UTC Z, or
                (?:(?<=.\b\d{4}|\b\d{2}:\d\d)|                   # preceded by 4 digits or hh:mm or
                   (?<!.\b[a-zA-Z]{3}|[a-zA-Z]{4}|..\b\d\d))     # not preceded by 3 alpha word or >= 4 alpha or 2 digits
                   [ ]?                                          # optional space
                (?P<sign>\+|-)                                   # +/-
                (?P<hours>[0-9]{2}):?(?P<minutes>[0-9]{2})       # hh[:]mm
            $)
        +\d{1,2}:\d{1,2}(?:\.\d+)?(?P<tz>\s*[A-Z]+)$tzr   r+  sign+r   rJ  r+  r,  )r+  r,  )
r   searchTIMEZONE_NAMESr  r   r<  r   dt	timedeltar  )date_strr   timezoner  s       r   extract_timezoner  q  s9   
				 
	A IIDhO!%%a&AAGGDM,?,?,AB 4#aggdm"4!45H<<hm!4 X 0c!''$-001wwv||~H X	 3.1BD||S!122s1779#5668H Xr   c                 L   | yt        j                  dd|       } |t        |       \  }} t        j                  t
              5  d| d}t        j                  j                  | |      |z
  }t        j                  |j                               cddd       S # 1 sw Y   yxY w)z- Return a UNIX timestamp from the given date Nz\.[0-9]+r   r^   z%H:%M:%S)r   r   r  r~   r   r  r  datetimestrptimecalendartimegmr~  )r  	delimiterr  date_formatdt_s        r   parse_iso8601r    s     vvk2x0H-h7(			Z	( 0 84kk""8[9HDs}}/0 0 0s   ABB#c                     | rt         S t        S r   )DATE_FORMATS_DAY_FIRSTDATE_FORMATS_MONTH_FIRST)	day_firsts    r   date_formatsr    s    %.!L4LLr   c                 Z   | yd}| j                  dd      } t        j                  dd|       } t        |       \  }} t	        |      D ]S  }t        j                  t              5  t        j                  j                  | |      j                  d      }ddd       U |gt        j                  j                  |       }|rFt        j                  t              5  t        j                  |dd  j                  d      }ddd       |t        |      S y# 1 sw Y   xY w# 1 sw Y   #xY w)z4Return a string with the date in the format YYYYMMDDNrI  r:  (?i)\s*(?:AM|PM)(?:\s+[A-Z]+)?r   r_      )r  r   r   r  r  r~   r   r  r  r  r  strftimerx  ry  rz  r   )r  r  upload_dater   
expressionr~  s         r   unified_strdater    s$    KS)Hvv7XFH"8,KAx"9- X
  , 	X++..xDMMhWK	X 	XX KK,,X6	$$Z0 M kk9Ra=9BB8LM; 	X 	X
M Ms   $0D%D!D	!D*c           	         t        | t              sy t        j                  ddt        j                  dd|             } t        j                  d|       rdnd}t        |       \  }} t        j                  dd|       } t        j                  d	|       }|r| d t        |j                  d
              } t        j                  d|       }|r|j                  d      } t        |      D ]  }t        j                  t              5  t        j                  j                  | |      |z
  t        j                  |      z   }t!        j"                  |j%                               cd d d        c S  t&        j(                  j+                  |       }|r,t!        j"                  |      |dz  z   |j-                         z
  S y # 1 sw Y   xY w)Nr9  r:  z:(?i)[,|]|(mon|tues?|wed(nes)?|thu(rs)?|fri|sat(ur)?)(day)?r   z(?i)PM   r   r  r  r  zT^([0-9]{4,}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{6})[0-9]+$r   r    )r   r   r   r   r  r  r   r   r  r~   r   r  r  r  r  r  r  r  r~  rx  ry  rz  total_seconds)r  r  pm_deltar  r   r  r  r~  s           r   unified_timestampr    s   h$vvfc266Er8$U VH YYy(3rH)(3Hh vv7XFH 			@(KA0c!''$-001 			ikstA771:"9- 4
  , 	4++&&x<xG",,]eJffC??3==?3	4 	44
 ((2Iy)HtO;h>T>T>VVV 	4 	4s   AF;;G	c                     | d| vr|S | j                  d      d   j                  d      d   }t        j                  d|      r|S |j	                  d      t
        v r|j	                  d      S |S )Nr   r   r   r   z^[A-Za-z0-9]+$r   )	partition
rpartitionr   r   rC  KNOWN_EXTENSIONS)r  default_extguesss      r   determine_extr    sq    
{cnMM#q!,,S1!4E	xx!5)	c	.	.||C  r   c                 (    t        | |dz   |z   |      S Nr   )replace_extension)rr  sub_lang
sub_formatexpected_real_exts       r   subtitles_filenamer    s    Xx#~
'BDUVVr   c                    d}|dk(  rd}d}t        t        j                  j                  t        j                  j
                        |      }| dv r|S | dk(  r|t        j                  d      z
  S t        j                  d	|       }|t        |j                  d
      ||      }t        |j                  d            |j                  d      dk(  rdndz  }|j                  d      }|dk(  s|dk(  rt        ||dk(  r|dz  n|      }	d}n+|dk(  rd}|dz  }t        j                  di |dz   |i}
||
z   }	|rt        |	|      S |	S t        t        j                  j                  | |      |      S )a  
    Return a datetime object from a string.
    Supported format:
        (now|today|yesterday|DATE)([+-]\d+(microsecond|second|minute|hour|day|week|month|year)s?)?

    @param format       strftime format of DATE
    @param precision    Round the datetime object: auto|microsecond|second|minute|hour|day
                        auto: round to the unit provided in date_str (if applicable).
    FautoTmicrosecond)nowtoday	yesterdayr   )dayszf(?P<start>.+)(?P<sign>[+-])(?P<time>\d+)(?P<unit>microsecond|second|minute|hour|day|week|month|year)s?r   r<  r  ra  rJ  unitmonthyearr  dayweek   rZ  r   )datetime_roundr  r  r  r  utcr  r   r   datetime_from_strr   r  datetime_add_monthsr  )r  	precisionformatauto_precisionr  r   
start_timer<  r  new_datedeltas              r   r  r    si    NF!	2;;??2;;??;YGE##;r||+++HHqE &u{{7';YO
5;;v&'V1D1K2QRS{{6"7?dfn*:DFNtbyX\]HDv~	LL6D3J#56E!E)H!(D11"++..x@)LLr   c                     |r%t        j                  d|       st        d|  d      t        | d|      j	                         S )z
    Return a date object from a string using datetime_from_str

    @param strict  Restrict allowed patterns to "YYYYMMDD" and
                   (now|today|yesterday)(-\d+(day|week|month|year)s?)?
    z9\d{8}|(now|today|yesterday)(-\d+(day|week|month|year)s?)?zInvalid date format "r  r  )r  r  )r   	fullmatchr  r  date)r  r  stricts      r   date_from_strr     sC     bll#_aij0
!<==XvNSSUUr   c                     | j                   |z   dz
  }| j                  |dz  z   }|dz  dz   }t        | j                  t	        j
                  ||      d         }| j                  |||      S )z0Increment/Decrement a datetime object by months.r   r  )r  r  minr  r  
monthranger  )r  monthsr  r  r  s        r   r  r  $  si    II"E88erk!DBJNE
cggx**47:
;C;;tUC((r   c                     |dk(  r| S ddddd}d } |t        j                  | j                               ||         }t        j                  j                  |t        j                  j                        S )z@
    Round a datetime object's time to a specific precision
    r  Q r  r1  r   )r  hourminutesecondc                     | |dz  z   |z  |z  S rD  r   )r   r   s     r   r  z datetime_round.<locals>.<lambda>:  s    QQY1,1 r   )r  r  r~  r  r  fromtimestampr  r  )r  r  unit_secondsroundtor}  s        r   r  r  -  sl     M!
 	L 2G8,y:QRI;;$$Y@@r   c                 t    t        j                  d|       }|dj                  |j                               S | S )z?
    Convert a date in 'YYYYMMDD' format to 'YYYY-MM-DD' formatz^(\d\d\d\d)(\d\d)(\d\d)$ra  )r   r   r   groups)r  r   s     r   hyphenate_dater  ?  s5     HH0(;Exx''r   c                   @    e Zd ZdZd	dZed        Zd Zd Zd Z	d Z
y)
	DateRangez,Represents a time interval between two datesNc                 Z   |t        |d      | _        n-t        j                  j                  j                         | _        |t        |d      | _        n-t        j                  j                  j                         | _        | j                  | j                  kD  rt        d| z        y)z<start and end must be strings in the format accepted by dateNTr  z=Date range: "%s" , the start date must be before the end date)	r   r   r  r  r  r  endmaxr  r   r   r  s      r   r   zDateRange.__init__L  s    &uT:DJ--/DJ?$S6DH{{++-DH:: \_ccdd !r   c                      | ||      S )z0Returns a range that only contains the given dayr   )r  r  s     r   r  zDateRange.dayY  s     3}r   c                     t        |t        j                        st        |      }| j                  |cxk  xr | j
                  k  S c S )z!Check if the date is in the range)r   r  r  r   r   r  )r   r  s     r   __contains__zDateRange.__contains__^  s8    $( &DzzT-TXX----r   c                     t          dt        |       j                    d| j                  j                         d| j                  j                         dS Nr   (, ))r   rY  r   	isoformatr  r   s    r   __repr__zDateRange.__repr__d  sI    1T$Z0014::3G3G3I2LBtxxOaOaOcNffghhr   c                 8    | j                    d| j                   S )Nz to )r   r  r   s    r   __str__zDateRange.__str__g  s    **T$((,,r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r  r   r  r   others     r   __eq__zDateRange.__eq__j  s>    5), HJJ%++-H26((eii2G	Ir   NN)r   r   r   r  r   r%  r  r  r!  r#  r'  r   r   r   r  r  I  s5    6e  .i-Ir   r  c                     t        j                         } | dk(  r)t        t        d      r| dt        j                  d d z  z  } g }t        j                  t              5  t        j                         }d d d        dt        j                         d| dt        j                         dt        j                         d   d	t        j                          dt        j                  t        t        |d
did d      dS # 1 sw Y   xY w)NPyPypypy_version_infoz version %d.%d.%d   zPython  (r:  r   z) - r;  z, %sr  )r}   python_implementationrk  r|   r+  r~   r   r   libc_verpython_versionmachinearchitecturesslOPENSSL_VERSIONrY  r]  )r.  r/  s     r   system_identifierr5  o  s    $::<&738K+L!4s7L7LRa7P!PPH			W	% '$$&' 	!"]H8C8$G ' 's   C??Dc                  V    t         dk(  r t        t        j                         d         S y)z@ Get Windows version. returns () if it's not running on Windows r  r   r   )r
   version_tupler}   	win32_verr   r   r   get_windows_versionr9    s(     X//1!455r   c                    t        | t              sJ |xs t        j                  }|sy t        dk(  r"t        |      rt        j                  dd|       } d |}}dt        |dd       xs dv r|xs
 t               }n5t        |d      r)|j                  }|xs t        |dd       xs
 t               }|j                  |r| j                  |d	      n|        |j                          y )
Nr  z	([\r\n]+)z \1bro   r   rb  rp   ignore)r   r   r|   r  r
   supports_terminal_sequencesr   r   rd  rg   rk  rb  writerd   flush)rZ  outrp   encrb  s        r   write_stringrB    s    a

C"=c"BFF<+C
wsFD)/R0-+-	h	O'#z48O<M<O
LLC#x(Q7IIKr   )printer
stacklevelc                    ddl m} |rc| t        j                  v ry t        j                  j	                  |        |r ||  t                fi |S t        d|  t                dfi |S dd l}|j                  t        |       |dz          y )Nr   )_IN_CLIzERROR: r;  r   r,  )rD  )
r   rF  deprecation_warning_cacheaddrF  rB  warningswarnDeprecationWarning)rM  rC  rD  r   rF  rJ  s         r   rG  rG    s    %,,,""&&s+cU#6#8"9:EfEEgcU+>+@*ADOOO(-*q.Ir   c                     | sg S t        | d   t              rt        |       S | D cg c]  }t        |       c}S c c}w r   )r   r  r  r  )bsr   s     r   bytes_to_intlistrO    s9    	"Q%Bx "#1A###s   <c                 L    | syt        j                  dt        |       z  g|  S )Nr   z%dB)structpackr   )xss    r   intlist_to_bytesrT    s$    ;;us2w,,,r   c                   "     e Zd ZdZ fdZ xZS )rl  zFile locking is not supportedc                 8    t         |   | j                         y r   r  r  s    r   r   z LockingUnsupportedError.__init__  s    "r   )r   r   r   rM  r   r^  r_  s   @r   rl  rl    s    
)C# #r   rl  rr   c                       e Zd Zdej                  j
                  fdej                  j
                  fdej                  j                  fdej                  j                  fdej                  j                  fgZy)
OVERLAPPEDInternalInternalHighOffset
OffsetHighhEventN)	r   r   r   ctypeswintypesLPVOIDDWORDHANDLE_fields_r   r   r   rX  rX    sc    //0V__334v,,-6??001v--.
r   rX  kernel32    ic                 x   t               }d|_        d|_        d|_        t	        j
                  |      | _        t        t        j                  | j                               |rdnd|rdndz  dt        t        | j                        s3t        dt	        j                  t	        j                                     y )Nr   r   r   zLocking file failed: )rX  r[  r\  r]  r^  pointer_lock_file_overlapped_p
LockFileExrd  get_osfhandleri  	whole_low
whole_highBlockingIOErrorFormatErrorGetLastError)r  	exclusiverc  
overlappeds       r   
_lock_filerr    s    \

 !

$*NN:$>!&..qxxz:"+33OY
A4M4MO "$9&:L:LVM`M`Mb:c9f"ghh	Or   c                     | j                   sJ t        j                  | j                               }t	        |dt
        t        | j                         s t        dt        j                         z        y )Nr   zUnlocking file failed: %r)
rh  rd  rj  ri  UnlockFileExrk  rl  r   r^  rn  )r  handles     r   _unlock_filerv    s]    ((((%%ahhj1FAy*a>W>WX58J8J8LLMM Yr   c                     |rt         j                  nt         j                  }|s|t         j                  z  }	 t        j                  | |       y # t
        $ r  t        $ r t        j                  | |       Y y w xY wr   )fcntlLOCK_EXLOCK_SHLOCK_NBflockrm  r   lockf)r  rp  rc  r   s       r   rr  rr    s_    %.EMMEMME&&Au%"  &Au%&s   A (A;:A;c                    t        j                  t              5  t        j                  | t        j
                        cd d d        S # 1 sw Y   nxY wt        j                  t              5  t        j                  | t        j
                        cd d d        S # 1 sw Y   nxY wt        j                  | t        j
                  t        j                  z        S r   )r~   r   r   rx  r|  LOCK_UNr}  r{  r  s    r   rv  rv    s    $$W- 5{{1emm45 5 5$$W- 5{{1emm45 5 5;;q%--%--"?@@s   $AA-$BB$c                     t               r   rl  )r  rp  rc  s      r   rr  rr        )++r   c                     t               r   r  r  s    r   rv  rv    r  r   c                   >    e Zd ZdZd	dZd Zd Zd ZeZeZ	d Z
d Zy)
rm  FNc           
      ~   dvrt              |c| _        | _        t        fddD              }t        fddD              }t	        j
                  t        j                  t        t        dd      t        t        dd      t        t        d	d      |rt        j                  ndd
v rt        j                  nddv rt        j                  nd|st        j                  n!|rt        j                  nt        j                  f      }t        j                   t        j"                  ||d      |      | _        y )N>   arri   abrbwbc              3   &   K   | ]  }|v  
 y wr   r   .0r  ro   s     r   	<genexpr>z'locked_file.__init__.<locals>.<genexpr>*  s     1QqDy1   zwax+c              3   &   K   | ]  }|v  
 y wr   r   r  s     r   r  z'locked_file.__init__.<locals>.<genexpr>+  s     /QqDy/r  zr+	O_CLOEXECr   rj  O_NOINHERITr  r   rs   rp   )NotImplementedErrorro   rc  anyr   reduceoperatoriorrd  rv   O_CREATO_APPENDO_EXCLO_RDONLYO_RDWRO_WRONLYfdopenrn  r  )r   rr  ro   rc  rp   writablereadabler   s     `     r   r   zlocked_file.__init__%  s    88%d++ $e	4:1&11/$//  BQ'B
A&Bq)"BJJ$;BKKABII!'BKK(RYY0
  2778UE:D8Tr   c                    d| j                   v}	 t        | j                  || j                         d| _        d| j                   v r	 | j                  j                          | S | S # t
        $ r | j                  j                           w xY w# t
        $ r8}|j                  t        j                  t        j                  fvr Y d }~| S d }~ww xY w)Nr  Tri   )ro   rr  r  rc  lockedr   r  truncatero  ESPIPEEINVAL)r   rp  r\  s      r   r  zlocked_file.__enter__8  s    tyy(		tvvy$**5DK $))! t  	FFLLN	  77LLLL#  	
 s#   (A% B %%B
	C-C		Cc                 p    | j                   sy 	 t        | j                         d| _         y # d| _         w xY wNF)r  rv  r  r   s    r   unlockzlocked_file.unlockK  s,    {{	  DK%DKs   , 	5c                     	 | j                          | j                  j                          y # | j                  j                          w xY wr   )r  r  r  r  s     r   r  zlocked_file.__exit__S  s+    	KKMFFLLNDFFLLNs	   - A	c                 .    t        | j                  |      S r   )rd  r  )r   attrs     r   __getattr__zlocked_file.__getattr__\  s    tvvt$$r   c                 ,    t        | j                        S r   )iterr  r   s    r   __iter__zlocked_file.__iter___  s    DFF|r   )TN)r   r   r   r  r   r  r  r  rn  r  r  r  r   r   r   rm  rm  "  s2    FU&&  DE%r   rm  c                  6    t        j                         } | | S dS )Nrj   )r|   getfilesystemencodingr  s    r   get_filesystem_encodingr  c  s     ((*H+888r   z\"z\\)r  r  ""z%=%z%%cd:~,%)r  r;  r  %r  c                v   t        t        |             } t        d | D              rMt        d       t	               }t        |       D ]*  \  }}t        |t              s|j                  |      | |<   , t        dk7  rt        j                  |       S |rt        nt        dj                  fd| D              S )Nc              3   <   K   | ]  }t        |t                y wr   )r   r  )r  items     r   r  zshell_quote.<locals>.<genexpr>{  s     
4t:dE"
4s   z0Passing bytes to utils.shell_quote is deprecatedr  r:  c              3      K   | ]K  }t        j                  d |t         j                        r|n|j                        j	                  d       M yw)z[\w#$*\-+./:?@\\]+r  N)r   r  ASCII	translater   )r  rZ  transs     r   r  zshell_quote.<locals>.<genexpr>  sG       \\/BHH=1;;uCUCZCZ[_C``s   AA)r  variadicr  rG  r  	enumerater   r  rW  r
   shlexr   _CMD_QUOTE_TRANS_WINDOWS_QUOTE_TRANS)r   r  rp   r  r  r  s        @r   r  r  y  s    D

4t
44NO*,$T? 	4KE4$&"kk(3U	4 zz$ %+?E88   r   c                     t        | i       \  } }|j                  |       t        j                  j	                  dt        j                  |      i      }| dz   |z   S )z1 Pass additional data in a URL for internal use. __youtubedl_smuggler  )unsmuggle_urlrB  r  r  	urlencoderz   dumps)r  dataidatasdatas       r   smuggle_urlr    sT     sB'JCKKLL""	

4 013E9ur   c                     d| vr| |fS | j                  d      \  }}}t        j                  j                  |      d   d   }t	        j
                  |      }||fS )Nz#__youtubedl_smuggler  r  r   )r  r  r  parse_qsrz   loads)smug_urlr   r  r   r  jsondr  s          r   r  r    sb    X-  '',MCELL!!%()>?BE::eD9r   r0  factorc                   t        |       t        |      }} | | dk  ryd}| dk(  rdn1t        t        t	        j
                  | |            t        |            }dg||   }|dk(  rdddj                  || d      }| ||z  z  }|||fz  S )	z5 Formats numbers with decimal sufixes like K, M, etc Nr   kMGTPEZYr      Ki)kr   i)float_or_nonefloatr  r  mathlogr   r  )numfmtr  POSSIBLE_SUFFIXESexponentrm   	converteds          r   format_decimal_suffixr    s    $eFmC
{cAg"1Hq#c$((3*?&@#FWBX"YH%$%h/F~$((F81>v)*I)V$$$r   c                 &    t        | dd      xs dS )Nz%.2f%sBr  r  zN/A)r  )r  s    r   format_bytesr    s     	$?H5Hr   c                 l   |rt         nt         j                  dd      }dj                  d | D              } |rt        j                  nt        j
                  d| d| d|      }|sy t        |j                  d      j                  d	d
            }| |j                  d         }t        ||z        S )Nz\.z[,.]r  c              3   F   K   | ]  }t        j                  |        y wr   r   r   )r  us     r   r  z$lookup_unit_table.<locals>.<genexpr>  s     9		!9   !z(?P<num>z)\s*(?P<unit>z)\br  rI  r   r  )		NUMBER_REr  r   r   r  r   r  r   round)
unit_tablerZ  r  num_reunits_rer   r  mults           r   lookup_unit_tabler    s     Yi&7&7v&FFxx9j99H	-RXXF8=
#6	;A
&&sC0
1Caggfo&Dtr   c           	          t        t        dgd      D ci c]  \  }}|d|z   c}}| j                         d      S c c}}w )z9Parse a string indicating a byte quantity into an integerr   KMGTPEZYr  Tr  )r  r  upper)rZ  r  r  s      r   parse_bytesr    sD     )2*;
*; <=1D!G=		$   =s   A 
c           
      t   | y i ddddddddddd	dd
dddddddddddddddddddddi ddddddddddddddd d!d"d#d$d!d%d#d&d#d'd#d(d!d)d*d+d,d-d*i d.d,d/d,d0d,d1d*d2d3d4d5d6d3d7d5d8d5d9d5d:d3d;d<d=d>d?d<d@d>dAd>dBd>d<dCdDdCdDdDdDdCdE}t        ||       S )FNBr   r;  r  KiBr  KBr0  kBKbkb	kilobytes	kibibytesMiBi   MB@B mBMbmb	megabytes	mebibytesGiBi   @GB ʚ;gBGbgb	gigabytes	gibibytesTiBl        TBl    J)tBTbrW  	terabytes	tebibytesPiBl           PBl     I5 pBPbpb	petabytes	pebibytesEiBl            EBl     NZoeBEbebexabytes	exbibytesZiBl            ZBl     @=7M.czBZbzb
zettabytesl               l      B3v^!< )	zebibytesYiBYByBYbyb
yottabytes	yobibytes)r  )rZ  _UNIT_TABLEs     r   parse_filesizer0    s   y<Q<Q< 	< 	t	<
 	d< 	d< 	d< 	d< 	T< 	T< 	y< 	i< 	i< 	i< 	i<  	Y!<" 	Y#<$ 	y%<& 	i'<( 	i)<* 	i+<, 	i-<. 	Y/<0 	Y1<2 	y3<4 	i5<6 	i7<8 	i9<: 	i;<< 	Y=<> 	Y?<@ 	yA<B 	iC<D 	iE<F 	iG<H 	iI<J 	YK<L 	YM<N 	yO<P 	iQ<R 	iS<T 	iU<V 	iW<X 	IY<Z 	Y[<\ 	y]<^ 	i_<` 	ia<b 	ic<d 	ie<f 	ig<h w<K| [!,,r   c           	      0   | y t        j                  dd|       j                         } t        j                  d|       rt	        |       S ddddddddd}t        ||       }||S t        j                  d|       }|rt	        |j                  d	            S y )
Nz	^[^\d]+\sr   z	^[\d,.]+$r0  r  r  )r  Kr   MkkKKr;  r  z([\d,.]+)(?:$|\s)r   )r   r   r<  r   
str_to_intr  r   )rZ  r/  r=  r  s       r   parse_countr7    s    y
|R#))+A	xxa !} 	K K
+C

88(!,D$**Q-(( r   )lenientc                   | i S |rt        j                  d|       }nt        j                  d|       }|r5t        |j                  d            t        |j                  d            dS t        j                  d|       }|rdt        |j                  d            iS t        j                  d	|       }|rdt        |j                  d            d
z  iS i S )Nu!   (?P<w>\d+)\s*[xX×,]\s*(?P<h>\d+)u@   (?<![a-zA-Z0-9])(?P<w>\d+)\s*[xX×,]\s*(?P<h>\d+)(?![a-zA-Z0-9])ri   hwidthheightz*(?<![a-zA-Z0-9])(\d+)[pPiI](?![a-zA-Z0-9])r=  r   z\b([48])[kK]\bi  )r   r  r  r   )rZ  r8  r  s      r   parse_resolutionr>  (  s    y	yy=qAyy\^_`C)$**S/*
 	

 99BAFD#djjm,--99&*D#djjm,s233Ir   c                     t        | t              sy t        j                  d|       }|rt	        |j                  d            S y )Nz\b(\d+)\s*kbpsr   )r   r   r   r  r  r   )rZ  r  s     r   parse_bitrater@  A  s;    a99&*D4::a=!! r   c                     t         j                  |t         d         }	 |j                  |       dz   S # t        $ r Y yw xY w)zE Return the number of a month by (locale-independently) English name r<   r   N)MONTH_NAMESr  r  r  )r   langmonth_namess      r   month_by_namerE  I  sF     //$D(9:K  &** s   3 	??c                 ~    	 t         D cg c]  }|dd 	 c}j                  |       dz   S c c}w # t        $ r Y yw xY w)zV Return the number of a month by (locale-independently) English
        abbreviations Nr,  r   )ENGLISH_MONTH_NAMESr  r  )abbrevrZ  s     r   month_by_abbreviationrI  T  sC    23!"1399&AAEE3 s   0 +0 0 	<<c                 0    t        j                  dd|       S )z%Replace all the '&' by '&amp;' in XMLz<&(?!amp;|lt;|gt;|apos;|quot;|#x[0-9a-fA-F]{,4};|#[0-9]{,4};)r  r   r   )xml_strs    r   fix_xml_ampersandsrM  ^  s    66G r   c                 h   t        | t              sJ 	 dd l}	 |j                  j                  d      }| j                         } |j                  t        |            }||_        	 |j                  d|ddd       y # t        $ r Y y w xY w# t        $ r Y y t        $ r Y y w xY w# t        $ r Y y w xY w)Nr   z	libc.so.6   )r   r   r^  ImportErrorcdllLoadLibraryr   	TypeErrorrd   create_string_bufferr   r   prctlAttributeError)rD  r^  libctitle_bytesbufs        r   setproctitlerZ  f  s    eS!!!{{&&{3 ,,.K
%&
%
%c+&6
7CCI

2sAq!$#  
    		  s:   A= B 'B% =	B	B		B"B"!B"%	B10B1c                 H    | | j                  |      r| t        |      d  S | S r   )rN  r   )rZ  r   s     r   r  r    s&    ]q||E/B1SZ[>IIr   c                 J    |  | j                  |      r| d t        |        S | S r   )rO  r   )rZ  r  s     r   
remove_endr]    s'    Majjo1Zs3xi=D1Dr   c                 h    | t        |       dk  r| S dD ]  }| d   |k(  s| d   |k(  s| dd c S  | S )Nr   )r  r  r   rJ  r   r   )rZ  r   s     r   remove_quotesr`    sL    yCFQJ Q45=QrUe^Qr7N Hr   c                 p    t        t        j                  j                  |       j                  d      xs dS )zx
    This implementation is inconsistent, but is kept for compatibility.
    Use this only for "webpage_url_domain"
    zwww.N)r  r  r  urlparser  r  s    r   
get_domainrd    s+    
 --c2996BJdJr   c                     t         j                  j                  |       j                  }|j	                  d      j                  d      d   S )Nr   rJ  )r  r  rb  rw   r<  r   )r  rw   s     r   url_basenamerf    s:    <<  %**D::c?  %b))r   c                 J    t        j                  d|       j                         S )Nzhttps?://[^?#]+/)r   r   r   rc  s    r   base_urlrh    s    88'-3355r   c                 f   t        |t              r|j                         }t        |t              r|sy t	        j
                  d|      r|S t        | t              r| j                         } t        | t              rt	        j
                  d|       sy t        j                  j                  | |      S )Nz ^(?:[a-zA-Z][a-zA-Z0-9+-.]*:)?//z^(?:https?:)?//)	r   r  rW  r   r   r   r  r  urljoin)r  rw   s     r   rj  rj    s    ${{}dC 	xx3T:${{}dC )&<<d++r   c                     |r| t        | |d       } 	 t        |       |z  |z  S # t        t        t        f$ r |cY S w xY wr   )rd  r  r  rS  OverflowError)vscaler   get_attrinvscales        r   int_or_nonerq    sK    AMAx&1v E))	=1 s   $ ==c                      | |S t        |       S r   r   rm  r   s     r   str_or_noneru    s    i7+SV+r   c                     t        | t              r| S t        | t              r"t        j                  dd|       } t        |       S y)z' A more relaxed version of int_or_none z[,\.\+]r   N)r   r  r   r   r   rq  )int_strs    r   r6  r6    s=    '3	GS	!&&R17## 
"r   c                 \    | |S 	 t        |       |z  |z  S # t        t        f$ r |cY S w xY wr   )r  r  rS  )rm  rn  rp  r   s       r   r  r    s>    yQx("U**	" s    ++c                 *    t        | t              r| S |S r   r   boolrt  s     r   bool_or_noner|    s    1d#100r   c                 F    t        | t              r| j                         S |S r   )r   r   r<  rt  s     r   strip_or_noner~    s    "1c*177977r   c                 |    | rt        | t              sy | j                         } t        j                  d|       r| S d S )Nz<^(?:(?:https?|rt(?:m(?:pt?[es]?|fp)|sp[su]?)|mms|ftps?):)?//)r   r   r<  r   r   rc  s    r   url_or_noner    s7    jc*
))+C((Z\_`3jfjjr   c                    d }	 t        | t        t        f      rPt        j                  j                  dt        j                  j                        t        j                  |       z   }n0t        | t              r t        j                  j                  | d      }t        j                  ddt        |j                                |      }|j                  |      S # t        t         t"        f$ r |cY S w xY w)Nr   r-  r_   z(?<!%)(%%)*%s\g<1>)r   r  r  r  r  r  r  r  r  r   r  r   r   r}  r  r  rS  rV  )r}  r  r   datetime_objects       r   strftime_or_noner    s    Oi#u.
  "{{88BKKOOL!#i!@ AO	3' kk229hGOffs?+D+D+F'G&HI;X''44	>2 s   CC C54C5c           	         t        | t              sy | j                         } | sy d gdz  \  }}}}}t        j                  d|       }|r|j                  ddddd      \  }}}}}n\t        j                  d|       }|r|j                         \  }}}}}n-t        j                  d	|       }|r|j                         \  }}ny |r|j                  d
d      }t        d |df|df|df|df|dffD              S )N   z(?x)
            (?P<before_secs>
                (?:(?:(?P<days>[0-9]+):)?(?P<hours>[0-9]+):)?(?P<mins>[0-9]+):)?
            (?P<secs>(?(before_secs)[0-9]{1,2}|[0-9]+))
            (?P<ms>[.:][0-9]+)?Z?$
        r  r+  r6  r5  msa  (?ix)(?:P?
                (?:
                    [0-9]+\s*y(?:ears?)?,?\s*
                )?
                (?:
                    [0-9]+\s*m(?:onths?)?,?\s*
                )?
                (?:
                    [0-9]+\s*w(?:eeks?)?,?\s*
                )?
                (?:
                    (?P<days>[0-9]+)\s*d(?:ays?)?,?\s*
                )?
                T)?
                (?:
                    (?P<hours>[0-9]+)\s*h(?:(?:ou)?rs?)?,?\s*
                )?
                (?:
                    (?P<mins>[0-9]+)\s*m(?:in(?:ute)?s?)?,?\s*
                )?
                (?:
                    (?P<secs>[0-9]+)(?P<ms>\.[0-9]+)?\s*s(?:ec(?:ond)?s?)?\s*
                )?Z?$zW(?i)(?:(?P<hours>[0-9.]+)\s*(?:hours?)|(?P<mins>[0-9.]+)\s*(?:mins?\.?|minutes?)\s*)Z?$r   r   c              3   F   K   | ]  \  }}t        |xs d       |z    ywr   N)r  )r  partr  s      r   r  z!parse_duration.<locals>.<genexpr>(  s(      G:4uTYQ$& Gr  r  r  r1  r   )	r   r   r<  r   r   r   r  r  sum)rZ  r  r+  r6  r5  r  r   s          r   parse_durationr    s!   a		A#'&1*D%tR
 
 	A 	&'ggfgvvt&T#eT4HH, /0 *+((*'D%tRsuvwAhhjt	ZZS! G	ut}tRj4)b!W:F G G Gr   c                 z    t         j                  j                  |       \  }}|r|dd  |k(  r	| d| | S |  d| S )Nr   r   )rv   rw   splitextrr  extr  r   real_exts        r   prepend_extensionr  ,  s[    WW%%h/ND( !HQRL4E$E &#xj!" z3% "r   c                     t         j                  j                  |       \  }}dj                  |r|dd  |k(  r||      S | |      S )Nz{}.{}r   )rv   rw   r  r  r  s        r   r  r  4  sQ    WW%%h/ND(>>%!"9J)J PX r   c                     	 t         j                  | g|z   t        j                  t        j                         | S # t        $ r Y yw xY w)z Checks if the given binary is installed somewhere in PATH, and returns its name.
    args can be a list of arguments for a short output (like -version) )rh  r  F)r  r   r!  PIPEr   )exer   s     r   check_executabler  ;  sB    		3%$,zz	O J  s   8< 	AAc                     	 t         j                  t        |       g|z   dt        j                  t        j                  t        j
                        \  }}}|ry 	 |S # t        $ r Y yw xY w)NT)r   stdinrh  r  F)r  r   r)  r!  r  STDOUTr   )r  r   rh  r   r=  s        r   _get_exe_version_outputr  E  sp    	 N3$7#84#?d)3YcYjYj # l3  M  s   AA 	A)(A)c                     t        | t              sJ |d}t        j                  ||       }|r|j	                  d      S |S )Nzversion\s+([-0-9._a-zA-Z]+)r   )r   r   r   r  r   )output
version_reunrecognizedr   s       r   detect_exe_versionr  S  sD    fc"""3

		*f%Awwqzr   	--version)presentbrokenc                     t        |      }t        |      dv sJ t        | |      }||d   S |xr t        |||d         S )z` Returns the version of the specified executable,
    or False if the executable is not present )r   r   rJ  r   )r  r   r  r  )r  r   r  r  r@  s        r   get_exe_versionr  ^  sV     L)L|&&&
!#t
,C
{BG%c:|AGGr   c              #   v   K   |d| }} |r
ddg|dkD     nd}|| z  ||z  k  r|  | |z  } || z  ||z  k  ryyw)zFloat rangeNr   rJ  r   r   )r   stopstepr  s       r   franger  j  sZ     |t $B74!8!D
,
$ ,
$s   499c                       e Zd ZdZ G d de      ZddddZd Zd	 Zd
 Ze	d        Z
d Zd Zd Zd Zd Zd Zd Zy)LazyListzbLazy immutable list from an iterable
    Note that slices of a LazyList are lists and not LazyListc                       e Zd Zy)LazyList.IndexErrorNr   r   r   r   
IndexErrorr  x  r   r   r  FNreverserH  c                H    t        |      | _        |g n|| _        || _        y r   )r  	_iterablerH  	_reversed)r   r  r  rH  s       r   r   zLazyList.__init__{  s!    h"Nb r   c              #      K   | j                   r| j                         E d {    y | j                  E d {    | j                  D ]!  }| j                  j	                  |       | # y 7 J7 7wr   )r  exhaustrH  r  r   )r   r  s     r   r  zLazyList.__iter__  s_     >>||~%%;;NN 	DKKt$J	 &s    A1A-A1A/6A1/A1c                 r    | j                   j                  | j                         g | _        | j                   S r   )rH  extendr  r   s    r   _exhaustzLazyList._exhaust  s)    4>>*{{r   c                 P    | j                         dd| j                  rd   S d   S )zEvaluate the entire iterableNrJ  r   )r  r  r   s    r   r  zLazyList.exhaust  s*    }}<t~~<==1<==r   c                     | d S |  S r   r   r   s    r   _reverse_indexzLazyList._reverse_index  s    yt(qb(r   c                    t        |t              r| j                  rNt        | j                  |j                        | j                  |j
                        |j                  xs d       }|j                  |j
                  |j                  xs d}}}n?t        |t              r$| j                  r| j                  |      }||d}}}nt        d      |xs ddk  s|xs ddk  s||dk  s|%|dkD  r | j                          	 | j                  |   S t        |xs d|xs d      t        | j                        z
  dz   }|dkD  r9| j                  j                  t        j                   | j"                  |             	 | j                  |   S # t        $ r}| j                  |      |d }~ww xY w# t        $ r}| j                  |      |d }~ww xY w)Nr   r   z"indices must be integers or slices)r   slicer  r  r   r  r  r  rS  r  rH  r  r  r   r  	itertoolsislicer  )r   idxr   r  r  r\  r   s          r   __getitem__zLazyList.__getitem__  s   c5!~~D//		:D<O<OPSPXPX<Y]`]e]e]jij[kl #		388SXX]4ES!~~))#. #S!4E@AAZa1aMdQhLTAX MMO0{{3'' 
DIA&T[[)99A=q5KKy//BC	,;;s##  0ooa(a/0  	,//!$!+	,s0   F ?F1 	F.F))F.1	G:GGc                 ^    	 | j                   r| d    y| d    y# | j                  $ r Y yw xY w)NrJ  r   FT)r  r  r   s    r   __bool__zLazyList.__bool__  s?    	DH  -1G   		s     ,,c                 L    | j                          t        | j                        S r   )r  r   rH  r   s    r   __len__zLazyList.__len__  s    4;;r   c                 h     t        |       | j                  | j                   | j                        S Nr  rY  r  r  rH  r   s    r   __reversed__zLazyList.__reversed__  s&    tDz$..dnn2DT[[YYr   c                 f     t        |       | j                  | j                  | j                        S r  r  r   s    r   __copy__zLazyList.__copy__  s#    tDz$..$..UUr   c                 4    t        | j                               S r   reprr  r   s    r   r!  zLazyList.__repr__  s    DLLN##r   c                 4    t        | j                               S r   r  r   s    r   r#  zLazyList.__str__  s    DLLN##r   )r   r   r   r  r  r   r  r  r  r]  r  r  r  r  r  r  r!  r#  r   r   r   r  r  t  sh    AZ  -2$ !

> ) ),: ZV$$r   r  c                   P    e Zd Z G d de      Zd ZddZd ZddZd Zd	 Z	d
 Z
y)	PagedListc                       e Zd Zy)PagedList.IndexErrorNr   r   r   r   r  r    r   r   r  c                 4    t        | j                               S r   )r   getslicer   s    r   r  zPagedList.__len__  s    4==?##r   c                 \    || _         || _        t        d      | _        || _        i | _        y )Ninf)	_pagefunc	_pagesizer  
_pagecount
_use_cacherH  )r   pagefuncpagesize	use_caches       r   r   zPagedList.__init__  s)    !!,#r   c                     | j                   j                  |      }|+|| j                  kD  rg nt        | j	                  |            }| j
                  r|| j                   |<   |S r   )rH  r  r  r  r  r  )r   pagenumpage_resultss      r   getpagezPagedList.getpage  sV    {{w/!(4??!:2T^^T[E\@]L??#/DKK r   Nc                 8    t        | j                  ||            S r   )r  	_getslicer  s      r   r  zPagedList.getslice  s    DNN5#.//r   c                     t        d      )Nz-This method must be implemented by subclasses)r  r  s      r   r  zPagedList._getslice  s    !"QRRr   c                     | j                   sJ d       t        |t              r|dk  rt        d      | j	                  ||dz         }|s| j                         |d   S )Nz!Indexing PagedList requires cacher   z%indices must be non-negative integersr   )r  r   r  rS  r  r  )r   r  entriess      r   r  zPagedList.__getitem__  s^    C CC#s#sQwCDD--S1W-//##qzr   c                 8    t        | j                  dd            S Nr   r   )r{  r  r   s    r   r  zPagedList.__bool__  s    DMM!Q'((r   Tr  )r   r   r   r  r  r   r  r  r  r  r  r   r   r   r  r    s2    Z $0S)r   r  c                       e Zd ZdZd Zy)OnDemandPagedListz:Download pages until a page with less than maximum resultsc              #     K   t        j                  || j                  z        D ]  }|| j                  z  }|| j                  z  | j                  z   }||k\  r4||cxk  r|k  rn n|| j                  z  nd}|#||cxk  r|k  rn n|dz
  | j                  z  dz   nd }	 | j                  |      }|dk7  s|||| }|E d {    t        |      |z   | j                  k  r y ||k(  s y  y # t        $ r |dz
  | _         w xY w7 Cwr  )r  countr  r  re   r  r   )	r   r   r  r  firstidnextfirstidstartvendvr  s	            r   r  zOnDemandPagedList._getslice  s1     u'>? "	G.G!DNN2T^^CK# e1k1 &  O3(E+(E 'T^^+q0 
#||G4 {d.+F48### < 6)DNN: k!E"	"  ")A+
 $s0   BD C.1DD&D*D.DDN)r   r   r   r  r  r   r   r   r  r    s
    D#r   r  c                       e Zd ZdZd Zd Zy)InAdvancePagedListz5PagedList with total number of pages known in advancec                 B    t         j                  | ||d       || _        y NT)r  r   r  )r   r  	pagecountr  s       r   r   zInAdvancePagedList.__init__$	  s    48T:#r   c              #     K   || j                   z  }|| j                  n%t        | j                  || j                   z  dz         }||| j                   z  z
  }|d n||z
  }t        ||      D ]T  }| j	                  |      }|r||d  }d }|,t        |      |k  r|t        |      z  }n|d | E d {     y |E d {    V y 7 7 	wr1  )r  r  r  rT  r  r   )	r   r   r  
start_pageend_page
skip_elems	only_morer  r  s	            r   r  zInAdvancePagedList._getslice(	  s     dnn,
&)k4??s4??CSWSaSaLadeLe7fZ$..88
KDS5[	Z2 	$G<<0L+JK8!
$|$y0\!22I+JY777###	$ 8#s$   B/C	1C2C	=C>C	C	N)r   r   r   r  r   r  r   r   r   r  r  !	  s    ?$$r   r  c                       e Zd Z e       ZdZd Z ej                  d      Z	e
d        Zd Zd Zej                  d        Zd Zd	 Z G d
 de      Zy)PlaylistEntriesFc                    || _         |j                  d      }|t        d      t        |t              rd| _        |j                  d      }|d u| _        | j                  rX| j
                  sJ | j                  gt        |xs dg      z  | _	        t        ||      D ]  \  }}|| j                  |dz
  <    y t        |t        t        t        f      r|| _	        y t        |      | _	        y )Nr  zThere are no entriesTrequested_entriesr   r   )ydlr  rz  r   r  is_exhaustedis_incompleteMissingEntryr  _entrieszipr  r  )r   r  	info_dictr  r  r  entrys          r   r   zPlaylistEntries.__init__?	  s     --	*?$%;<<& $D%MM*=>.d:$$$$!../#6G6NA32OODM 17; -5',a!e$-$	8!<=#DM$W-DMr   z(?x)
        (?P<start>[+-]?\d+)?
        (?P<range>[:-]
            (?P<end>[+-]?\d+|inf(?:inite)?)?
            (?::(?P<step>[+-]?\d+))?
        )?c              #     K   |j                  d      D ]  }|st        d      | j                  j                  |      }|st        |d      |j	                  dddd      \  }}}}t        |      dk(  rt        d	|d
      |r(t        t        |      t        |      t        |            n
t        |        y w)NrI  z'There is two or more consecutive commasz is not a valid specificationr   r  r  rT  r   zStep in z cannot be zero)	r   r  PLAYLIST_ITEMS_REr  r   rq  r  r  r  )r  stringsegmentr  r   r  r  	has_ranges           r   parse_playlist_itemsz$PlaylistEntries.parse_playlist_items\	  s     ||C( 		pG !JKK((227;D G;.K!LMM*.**WeVW*U'E3i4 A% 8G;o!FGGV_%E*M#,>D@QRehineoo		ps   B=B?c              #   b  K   | j                   j                  j                  d      }| j                   j                  j                  dd      }| j                   j                  j                  d      }|dv rd}|s| d| }n$|dk7  s|r| j                   j                  dd	
       | j	                  |      D ]\  }| |   D ]R  \  }}||f |s	 | j                   j                  j                  d      s| j                   j                  |d	d	       T ^ y # t        t        f$ r Y   y w xY ww)Nplaylist_itemsplayliststartr   playlistend)rJ  Nr   r   zFIgnoring playliststart and playlistend because playlistitems was givenT)	only_oncelazy_playlist)
incompletesilent)r  paramsr  report_warningr  _match_entryr  r  )r   r  playlist_startplaylist_endr  r  r	  s          r   get_requested_itemsz#PlaylistEntries.get_requested_itemsi	  s#    ,,-=>,,_a@xx**=9:%L ./q?Nq LHH##$lx|#}..~> 	E K 
5h88??..?--eT-R
	 -.BC s+   CD/ADD/D,'D/+D,,D/c                     | j                   r| j                  st        |       S t        | j                  t
              r0| j                  j                  dk(  r| j                  j                  S y y r1  )r  r  r   r   r  r  r  r  r   s    r   get_full_countzPlaylistEntries.get_full_count	  sX    T%7%7t9'9:}}&&!+}}/// , ;r   c                 T     t         j                  t              r fd}|S  fd}|S )Nc                     	 j                   |    }|j                  u rt	        d| dz    d      |S # t        $ r+ j                  }j                  sj                         Y Uw xY w)NzEntry r   z cannot be found)r  r  r  r  rz  )r  r	  r   s     r   	get_entryz*PlaylistEntries._getter.<locals>.get_entry	  s{    0 MM!,E
 D---,va!eW<L-MNN " 0 --E--"oo// .0s   4 1A('A(c                     	  t        j                        j                  fd      j                  |       S # t        j                  t
        j                  f$ r j	                         w xY w)Nc                 "    j                   |   S r   )r  )r   r  r   s     r   r  z<PlaylistEntries._getter.<locals>.get_entry.<locals>.<lambda>	  s    UYUbUbcdUe r   )rY  r  _handle_extraction_exceptionsr  r  r  )r  r   s    r   r"  z*PlaylistEntries._getter.<locals>.get_entry	  s`    ,f4>GGHefgkgogoqrss ++Y-A-AB ,//++,s	   7; 4A/)r   r  r  )r   r"  s   ` r   _getterzPlaylistEntries._getter	  s+    dmmT*	  ,
 r   c              #     K   t        |t              rt        ||      }|j                  dn|j                  }|j                  |dkD  rdnt        |       dz
  }n6|j                  dk\  r|j                  dz
  nt        |       |j                  z   }|j                  |dk  rdn
t        d      }n6|j                  dk\  r|j                  dz
  nt        |       |j                  z   }|ddg|dkD     z  }t        |||      D ]#  }|dk  r		 | j                  |      }|dz   |f % y # | j                  $ r d| _        |dkD  rY  y Y Gw xY ww)Nr   r   r  rJ  T)r   r  r  r  r   r   r  r  r  r&  r  r  )r   r  r  r   r  r  r	  s          r   r  zPlaylistEntries.__getitem__	  s=    c3S/C HH$q#((99As4y1}E%(YY!^CIIMTSYY9NE 88q1eElD#&88q=388a<c$i#((6JDQq!!tT* 
	A1uQ a%,
	
 ?? $(!!8	s*   DE
D'E'EEEEc                 0    t        t        | d d              S r   )r   tupler   s    r   r  zPlaylistEntries.__len__	  s    5a>""r   c                       e Zd Zy)PlaylistEntries.IndexErrorNr   r   r   r   r  r+  	  r   r   r  N)r   r   r   objectr  r  r   r   compiler  r%  r  r  r  r   cached_propertyr&  r  r  r  r   r   r   r  r  ;	  s{    8LL., #

 $  
p 
p20  (<#Z r   r  c                 b    t        j                  d      t        j                  dfd|       S )Nunicode_escapez\\U[0-9a-fA-F]{8}c                 8     | j                  d            d   S r   r   r   r0  s    r   r  z"uppercase_escape.<locals>.<lambda>	      .,Q/ r   codecs
getdecoderr   r   rZ  r0  s    @r   uppercase_escaper9  	  .    &&'78N66/	 r   c                 b    t        j                  d      t        j                  dfd|       S )Nr0  z\\u[0-9a-fA-F]{4}c                 8     | j                  d            d   S r   r2  r3  s    r   r  z"lowercase_escape.<locals>.<lambda>	  r4  r   r5  r8  s    @r   lowercase_escaper=  	  r:  r   c                     t        j                  j                  t         j                  j                  |       j                  fi |S r   )r  r  r  rb  query)r  r   s     r   r  r  	  s1    <<  !6!6s!;!A!ALVLLr   c                     d }t        j                  |       5 }t        ||      D cg c]  }|s|	 c}cd d d        S c c}w # 1 sw Y   y xY w)Nc                 0   t        | t              s| j                  dd      } d}|D ]"  }| j                  |      s| t	        |      d  } $ | j                         } | r| j                  d      ryt        j                  d| d      d   j                         S )	Nrj   r  )u   ï»¿u   ﻿)r  ;r   Fz\s#r   r   )	r   r   rW  rN  r   rV  r   r   rC  )r  BOM_UTF8boms      r   r  zread_batch_urls.<locals>.fixup	  s    #s#**Wi0C- 	%C~~c"#c()n	% jjlcnn_5 xxQ'*1133r   )r~   closingr  )batch_fdr  fdr  s       r   read_batch_urlsrH  	  sL    4 
		H	% 6"5"~556 656 6s    AA A A AAc                  ^    t        j                  j                  | i |j                  d      S r'  )r  r  r  rd   )r   r   s     r   urlencode_postdatarJ  	  s'    <<!!415188AAr   query_updatec                   t        | t              r%|s|s| S t        j                  j	                  |       } |rYd|vsJ d       t        j                  j                  i t        j                  j                  | j                        |d      |d<   t        j                  j                   | j                  di |      S )zReplace URL components specified by kwargs
       @param url           str or parse url tuple
       @param query_update  update query
       @returns             str
    r?  z;query_update and query cannot be specified at the same timeTr   )
r   r   r  r  rb  r  r  r?  
urlunparser  )r  rL  r   s      r   
update_urlrO  	  s     #slJ,,'',Cf$c&cc$ ,,00 2
ll##CII.2
2
 w <<""<3<<#9&#9::r   c                     t        | |      S )NrK  )rO  )r  r?  s     r   update_url_queryrQ  
  s    c..r   c                    d|z  }d}| j                         D ]  \  }}|d|j                  d      z   dz   z  }t        |t              r|j                         }t        |t              r|j                         }d|z   dz   |z   dz   }|j                  d      |v rt	        d      ||z  } |d|j                  d      z   d	z   z  }||fS )
Nz multipart/form-data; boundary=%sr   s   --r(  s   
s&   Content-Disposition: form-data; name="s   "

zBoundary overlaps with datas   --
)r,  rd   r   r   r  )r  boundarycontent_typer@  r  rm  r   s          r   _multipart_encode_implrU  
  s    5@L
C

 1uxw//'99a
Aa
A <a?,NQRRU\\??7#w.:;;w 58??7++i77Cr   c                     |du}	 |"dt        t        j                  dd            z   }	 t        | |      \  }}	 ||fS # t        $ r |r d}Y nw xY wN)aR  
    Encode a dict to RFC 7578-compliant form-data

    data:
        A dict where keys and values can be either Unicode or bytes-like
        objects.
    boundary:
        If specified a Unicode object, it's used as the boundary. Otherwise
        a random boundary is generated.

    Reference: https://tools.ietf.org/html/rfc7578
    Nz---------------ire  )r   random	randrangerU  r  )r  rS  has_specified_boundaryr@  rT  s        r   multipart_encoderZ  
  s{     &T1
(3v/?/?
J/W+XXH	 6tX FC   	%H	 s   ? AAc                     |t         u r%t        t        t        j                  j
                  f}t        | |      xr t        | |       S r   )r   r   r  r   abcMappingr   )r   allowed_typesblocked_typess      r   is_iterable_liker`  :
  s<    
"e[__%<%<=a'L
1m0L,LLr   c                 ~    t        |t        t        f      st        d       t        |      }t	        | |      r| S | fS )Nz)allowed_types should be a tuple or a type)r_  )r   r)  rY  rG  r`  )r   r^  s     r   r  r  @
  s9    meT]3GHm, -@1KqeKr   )expected_typer   r   c           	          |D ]  }	  ||i |}| t        ||       s|c S  y # t        t        t        t        t
        t        f$ r Y Fw xY wr   )r   rV  KeyErrorrS  r  r  ZeroDivisionError)rb  r   r   funcsr  r   s         r   try_callrg  G
  s]     	T$V$C $
3(F
 )ZM^_ 		s   $#A
	A
c                 .    t        t        |      | f|dS )N)r   rb  )rg  r  )srcgetterrb  s      r   try_getrk  R
  s    Xf%SF-PPr   c                 
    |d uS r   r   )r   rm  s     r   r  r  V
  s
    q} r   c                 j    | j                         D ci c]  \  }} |||      s|| c}}S c c}}w r   )r,  )dctcndnr  rm  s       r   filter_dictrp  V
  s,     YY[7TQDAJAqD777s   //c                      i }| D ]?  }|j                         D ]*  \  }}|||vst        |t              s||   dk(  s&|||<   , A |S Nr   )r,  r   r   )dictsmergeda_dictr  rm  s        r   merge_dictsrv  Z
  s^    F LLN 	DAq!6/!!S)fQi2oq		
 Mr   r  c                 @    t        | t              r| S t        | ||      S r   )r   r   )r  rp   r  s      r   encode_compat_strrx  d
  s    ,6O#fh2OOr   rS     r     )GPGzPG-13RNCr        )zTV-YzTV-Y7zTV-GzTV-PGzTV-14zTV-MAc                    t        |       t        u rd| cxk  rdk  r| S  d S t        | t              sy t	        j
                  d|       }|rt        |j                  d            S | j                         } | t        v r	t        |    S t	        j
                  ddj                  d t        D              z  |       }|rt        d|j                  d	      z      S y )
Nr      z^(?P<age>\d{1,2})\+?$agez^TV[_-]?(%s)$r  c              3   &   K   | ]	  }|d d   yw)r,  Nr   )r  r  s     r   r  z"parse_age_limit.<locals>.<genexpr>
  s     ,SqQqrU,S   zTV-r   )rY  r  r   r   r   r   r   r  
US_RATINGSr   TV_PARENTAL_GUIDELINES)rZ  r   s     r   parse_age_limitr  {
  s    Aw#~LbLq*Ld*3
)1-A1775>""		AJ!}
!CHH,S<R,S$SSUVWA%eaggaj&899r   c                 0    t        j                  dd|       S )Nz(?sx)^
            (?:window\.)?(?P<func_name>[a-zA-Z0-9_.$]*)
            (?:\s*&&\s*(?P=func_name))?
            \s*\(\s*(?P<callback_data>.*)\);?
            \s*?(?://[^\n]*)*$z\g<callback_data>rK  )r  s    r   strip_jsonpr  
  s    66	"
 	d$ $r   r  c                  	
 d	dj                  d 	D              }d}d| d}d| dd	fd
| ddffd 
fd	
fd}fd}t        j                  dd|       } t        j                  d||       } sat        j                  d| dd|       } t        j                  dd |       } t        j                  dd|       } t        j                  dd|       } t        j                  d| d| d| d| d| d ||       S )!Nz'"`r  c              3   0   K   | ]  }| d | d|   yw)z(?:\\.|[^\\z])*Nr   )r  qs     r   r  zjs_to_json.<locals>.<genexpr>
  s!     LQC{1#S4Ls   z/\*(?:(?!\*/).)*?\*/|//[^\n]*\nz\s*(?:z)?\s*z(?s)^(0[xX][0-9a-fA-F]+)z:?$r  z(?s)^(0+[0-7]+)   c                     d}| j                  d      xs | j                  d      }||v rd| S |dk(  rdS |dk(  rdS |S )	Nz"\bfnrtur   r   r  r   z\u00r;  r   r2  )r   JSON_PASSTHROUGH_ESCAPESr   s      r   process_escapez"js_to_json.<locals>.process_escape
  s^    #. Q15;;q>!'+C!C1VH 	 &#W	!T>R	 	r   c                 |    t        | j                  d            }|d   dk(  rt        j                  |      S |S )Nr   r  r   r  )
js_to_jsonr   rz   r  )r   	evaluatedr  varss     r   template_substitutez'js_to_json.<locals>.template_substitute
  s:    u{{1~tFC	Q<3::i((r   c                    | j                  d      }|dv r|S |dv ry|j                  d      s'|j                  d      s|j                  d      s|dk(  ry	|d   v rD|d   d
k(  rt        j                  d|dd       n|dd }t        j                  d	|      }d| dS D ]^  \  }}t        j                  ||      }|st        |j                  d      |      }|j                  d      rd| dc S t        |      c S  |v r 	 
st        j                  |          |   S 
sd| dS t        d|       # t        j                  $ r t        j                  |         cY S w xY w)Nr   )truefalsenull)	undefinedzvoid 0r  z/*r  rA  rI  r   `z(?s)\${([^}]+)}r   rJ  z(?s)(")|\\(.)r  r   z":zUnknown value: )r   rN  r   r   r   r  rO  r   rz   r  rX  r  r  )r   rm  escapedregexr  imr  INTEGER_TABLESTRING_QUOTESr  r  r  r  s          r   fix_kvzjs_to_json.<locals>.fix_kv
  s   GGAJ))H))\\$1<<#5c9JaSVhQ4= LMaDTWK)+>!BH]^_`ac]dAff-~qAGwiq>!( 	@KE4%#BT*$%JJsO1#Ry?Q?		@ 9JJtAw' Awqc8O?1#.// '' +zz$q'**+s   
D? ?+E-,E-c                     t        j                  t        t        j                  t	        | j                  d      xs d                        S )Nr   z[])r  )rz   r  r'  r  r  r   )r  r  s    r   
create_mapzjs_to_json.<locals>.create_map
  s5    zz$tzz*TZZ]5JdQU*VWXYYr   z(?:new\s+)?Array\((.*?)\)z[\g<1>]znew Map\((\[.*?\])?\)znew Date\((z)\)r  znew \w+\((.*?)\)c                 J    t        j                  | j                  d            S r   )rz   r  r   r  s    r   r  zjs_to_json.<locals>.<lambda>
  s    TZZ
5K r   zparseInt\([^\d]+(\d+)[^\d]+\)r  zB\(function\([^)]*\)\s*\{[^}]*\}\s*\)\s*\(\s*(["\'][^)]*["\'])\s*\)z(?sx)
        z
|
        z|,(?=zw[\]}])|
        void\s0|(?:(?<![0-9])[eE]|[a-df-zA-DF-Z_$])[.a-zA-Z_$0-9]*|
        \b(?:0[xX][0-9a-fA-F]+|0+[0-7]+)(?:z:)?|
        [0-9]+(?=z:)|
        !+
        )r   r   r   )r  r  r  	STRING_RE
COMMENT_RESKIP_REr  r  r  r  r  r  s    ``     @@@@r   r  r  
  sE   MLmLLI3J
|5)G$WIS	126G9C	(!,M
 0  0DZ 66.
DAD66*J=DvvYKs3XtDvv)+KTRvv6tDvv[]bdhi66 		 		E' #,,39 5 	 T r   c                       fd}|S )z> Get a numeric quality value out of a list of possible values c                 F    	 j                  |       S # t        $ r Y yw xY w)NrJ  r  )qidquality_idss    r   r  zqualities.<locals>.q
  s+    	$$S)) 		s    	  r   )r  r  s   ` r   	qualitiesr  
  s    
 Hr   )pre_processafter_filtervideo	before_dlpost_process
after_moveafter_videoplaylistz%(title)s [%(id)s].%(ext)szC%(title)s - %(section_number)03d %(section_title)s [%(id)s].%(ext)s)r   chapterdescriptionzannotations.xmlz	info.json)r  subtitle	thumbnailr  
annotationinfojsonlinkpl_videopl_thumbnailpl_descriptionpl_infojsona  (?x)
    (?<!%)(?P<prefix>(?:%%)*)
    %
    (?P<has_key>\((?P<key>{0})\))?
    (?P<format>
        (?P<conversion>[#0\-+ ]+)?
        (?P<min_width>\d+)?
        (?P<precision>\.\d+)?
        (?P<len_mod>[hlL])?  # unused in python
        {1}  # conversion type
    )
diouxXeEfFgGcrsac                 T    | yd}t        |       |kD  r| d|t        |      z
   |z   S | S )z% Add ellipses to overly long strings N...r_  )rZ  lengthELLIPSESs      r   limit_lengthr    s;    yH
1v(&3x=()H44Hr   c                 N    t        d t        j                  d|       D              S )Nc              3   2   K   | ]  }t        |        y wr   r  )r  r\  s     r   r  z version_tuple.<locals>.<genexpr>&  s     6AQ6s   z[-.])r)  r   r   rm  s    r   r7  r7  %  s    6'1!5666r   c                 `    | s| S 	 t        |       t        |      k  S # t        $ r | cY S w xY wr   )r7  r  )versionlimit
assume_news      r   is_outdated_versionr  )  s>    ~W%e(<<< ~s    --c                      ddl m}   |         S )z* Returns if yt-dlp can be updated with -U r   is_non_updateable)rB  r  r  s    r   ytdl_is_updateabler  2  s     + """r   c                     t        |       S r   )r  )r   s    r   args_to_strr  :  s    tr   c                 6    t        |       j                   d|  S r  )rY  r   )rP  s    r   error_to_strr  ?  s    3i  !C5))r   c           	         t        | t              s|t        ur|S y i ddddddddddd	d
ddddddddddddddddddddddi ddd d!d"d!d#dd$d%d&dd'd(d)d*d+dd,d-d.d/d0d1d2d2d3d3d4d3d5d6d7d8i d9d(d:d;d<d3d=d=d>d>d?d?d@dAdBdBdCdDdEdFdGdHdIdIdJdKdLdMdNd>dOdPdQdRdSdTdUdVdWdXdYdZ}| j                  d[      d\   j	                         j                         }|j                  d]      \  }}}t        j                  ||||j                  d^      d_         }|r|S |t        ur|S |j                  d^d`      S )aN3gpp3gpmp2ttsmp4mpegmpegurlm3u8	quicktimemovwebmvp9z	video/oggogvzx-flvflvzx-m4vm4vz
x-matroskamkvzx-mngmngzx-mp4-fragmentedzx-ms-asfasfzx-ms-wmvwmvz	x-msvideoavizdash+xmlmpdzf4m+xmlf4mzhds+xmlzvnd.apple.mpegurlzvnd.ms-sstr+xmlismz	x-mpegurlz	audio/mp4m4az
audio/mpegmp3z
audio/webmzaudio/x-matroskamkazaudio/x-mpegurlm3umidimidoggwavwavezx-aacaaczx-flacflaczx-m4azx-realaudiorazx-wavavifbmpgifjpegjpgpngzsvg+xmlsvgtifftifzvnd.wap.wbmpwbmpwebpzx-iconicozx-jngjngzx-ms-bmpzfilmstrip+jsonfszsmptett+xmlttdfxpttmlsamigzrz   xmlr  )zttaf+xmlzttml+xmlz	x-ms-samigziprz   r  r  rB  r   r   r  rJ  r   )r   r   r   r  r<  lowerr  r   traverse_objrsplitr  )mtr   MAPmimetyper   subtyper  s          r   mimetype2extr  C  s   b#*$NHH 	H 	u	H
 	H 	6H 	UH 	H 	uH 	UH 	H 	H 	eH 	H 	EH  	E!H" 	E#H$ 	U%H* 	E+H, 	5-H. 	5/H0 	V1H2 	53H4 	V5H: 	U;H@ 	eAHB 	fCHD 	EEHF 	5GHH 	IHJ 	uKHL 	uMHN 	OHP 	QHR 	&SHT 	UHV 	tWHX 	YH^ 	_H` 	uaHb 	ucHd 	eHf 	ugHh 	5iHj 	kHl 	mHn 	oHp 	%qHr 	sHt 	EuHz 	${H| 	t}H~  OHCT ||C #))+113H'',MAq'

 
 h9LR9P
QC

	
	"??3$$r   c                 J    | sy d| vrd|  } t        j                  |       d   S )Nr   zfile.r   )	mimetypes
guess_type)
ext_or_urls    r   ext2mimetyper    s2    
*ZL)

+A..r   c                 z   | si S t        t        d t        t        j                  | j	                         j	                  d      j                  d                        }d\  }}}}|D ]  }t        j                  dd|      j                  d      }|d   dv rA|r3|}|d   dv rd	}?|d   d
k(  rt        j                  |d      dk(  rd}c|d d ddgk(  snd}q|d   dv r|xs |}|d   dv r|xs |}t        d| d        |s|s|r|xs d|xs d|d|d|iS i S t        |      dk(  r|d   |d   dS i S )NrI  )NNNNz0+(?=\d)r   r   r   )avc1avc2avc3avc4r  vp8hev1hev2h263h264mp4vhvc1av1theoradvh1dvhe)r,  r-  DVr*  r,  10HDR10r   r  2)r  mp4aopusvorbisr  r  ac-4zac-3ec-3eac3dtscdtsedtshdtsl)stppwvttzWARNING: Unknown codec r;  none)vcodecacodecdynamic_rangescodecr   r?  r@  )r  filterr  r   r<  r   r   r   r   r  rB  r   )
codecs_strsplit_codecsr?  r@  rB  hdr
full_codecr  s           r   parse_codecsrI    s   	tS		:##%++C066s;&= > ?L"8FFFC" C
{B
399#>8 Y YFQx++qU"y'='=eQ'G4'Orucl*1X R R)zF1X)))zF2:,bAB'C( 6&& 
 &,%7&!	
 	
 >@	
 	
 
\	a	"1o"1o
 	
 Ir   )preferencesc                 R   t        |       t        |      k(  rt        |      t        |      k(  sJ | xs d|v }|r"t        t        |      t        |             dkD  ryh dh dd}t        j                  t        d       } ||        ||      }	}|xs |j                         D ]8  }
|j                  |
t                     }|
dk(  s|j                  ||	f      s6|
c S  h dd	d
hf}|xs |D ],  }
|
h|||
dk(  s|
hk(  st        fd|D              s*|
c S  |rdS |d   S )Nr  r   >   r*  aaclr  r'  hevcr2  r5  r6  >   r*  r#  r  r3  vp8xvp9xvrbs)r  r  c                 l    | d   j                  d      d   j                  dd      j                         S )Nr   r   0r   )r   r  r  r   s    r   r  z$get_compatible_ext.<locals>.<lambda>  s-    !A$**S/!"4"<"<S""E"K"K"M r   )rj  >
   r  m4bm4pm4rr  r  r  r  ismaismvr  webac              3   @   K   | ]  }|j                          y wr   )
issuperset)r  ext_setscurrent_extss     r   r  z%get_compatible_ext.<locals>.<genexpr>  s#      8S6>##L18S   rJ  )
r   r  r   partialrk  keysr  setrZ  r  )vcodecsacodecsvextsaextsrJ  	allow_mkvCOMPATIBLE_CODECSsanitize_codecr?  r@  r  	codec_setCOMPATIBLE_EXTSr\  s                @r   get_compatible_extrj    s_   w<3u:%#g,#e**DDD75K#7ISWs7|4q8

	 &&MON#G,nW.EFF6/446 %))#su5	%<9//0@AJ 	Q	O #e ,e,e,%<<C50C 8SBQ8S 5SJ	
 52;r?2r   c                    | j                   j                  } |d      }|r8t        j                  d|      }|r t	        |j                  d      d       }|r|S  |d      }|r|j                  d      d   }|r|S t         |d      |	      S )
NzContent-Dispositionz,attachment;\s*filename="(?P<filename>[^"]+)"rr  )r  zx-amz-meta-namer   r   zContent-Typer   )headersr  r   r   r  r   r  r  )
url_handler   	getheadercdr   r\  meta_exts          r   urlhandle_detect_extrr    s    ""&&I	(	)B	HHDbIaggj1tDA*+H$Q'H	.17CCr   c                 V    d|dt        j                  |       j                  d      S )Nzdata:z;base64,r(  )r  r  rW  )r  	mime_types     r   encode_data_uriru    s#    "+V-=-=d-C-J-J7-STTr   c                     |y| y|| k  S )z0 Returns True iff the content should be blocked Fr   )content_limit	age_limits     r   age_restrictedry    s!     }$$r   ))s   ﻿rj   )s     z	utf-32-be)s     z	utf-32-le)s   z	utf-16-le)s   z	utf-16-bec                     d}t         D ]9  \  }}| j                  |      s|| t        |      d } }| j                  |      r"; t        j                  d| j                  |d            S )zC Detect whether a file contains HTML by examining its first bytes. rj   Nz^\s*<r  )BOMSrN  r   r   r   rW  )first_bytesrp   rD  rA  s       r   is_htmlr}  %  sp     H @S$$S)$'SXY)?kH $$S)@ 88Hk009EFFr   c                 \   | j                  d      }||S t        | d         }|j                  d      ry|j                  d      ry|j                  d      ryt        |      }|dk(  r| j                  d      rdS dS |d	k(  ry	t        j
                  j                  |      j                  S )
Nprotocolr  rtmpmmsrtspr  is_livem3u8_nativer  )r  r  rN  r  r  r  rb  r  )r  r  r  r  s       r   determine_protocolr  0  s    }}Z(H
y'
(C
~~f				

C
f}"y1vD}D	<<  %,,,r   c           
      6   d fd}d }|r ||      ng } || |      } |D cg c]  } |||       }}| g|z   }	 ||	      }|dz  }|r9| |D 
cg c]
  }
||
|z   z   c}
g|z   }	|	d   d   d| t        |      z   |	d   d<   |	D ]l  }t        t        t        |            D ]N  \  }}d|v r+|j	                  dd||    |      z
  z        d|z  z   ||<   5|d||    |      z
  |z   z  z   ||<   P n d	j                  d
 |	D              }|S c c}w c c}
w )z[ Render a list of rows, each as a list of values.
    Text after a 	 will be right aligned c                 J    t        t        |       j                  dd            S )N	r   )r   remove_terminal_sequencesr  r  s    r   r<  zrender_table.<locals>.widthI  s     ,V4<<T2FGGr   c                 ^    t        |  D cg c]  }t        fd|D               c}S c c}w )Nc              3   @   K   | ]  } t        |              y wr   rs  )r  rm  r<  s     r   r  z5render_table.<locals>.get_max_lens.<locals>.<genexpr>M  s     /aE#a&M/r]  )r  r  )tablecolr<  s     r   get_max_lensz"render_table.<locals>.get_max_lensL  s&    ;>;GC/3//GGGs   *c                 j    t        j                  || d      D cg c]
  \  }}|s	| c}}S c c}}w )NT)	fillvalue)r  zip_longest)rowfilterArraytaker  s       r   filter_using_listz'render_table.<locals>.filter_using_listO  s-    %.%:%:;W[%\e	c`deees   
//r   rJ  Nr  r:  r;  c              3   Z   K   | ]#  }d j                  |      j                          % yw)r   N)r   rC  )r  r  s     r   r  zrender_table.<locals>.<genexpr>b  s!     ;cBGGCL'');s   )+)r   r  r  r   r  r   )
header_rowr  r;  	extra_gap
hide_emptyr  r  max_lensr  r  mlrL  r   r=  r<  s                 @r   render_tabler  F  sn   HHf &0|D!RH":x8J8<=c8,=D=L4EE"HNIJ2erI~6JKdRQx|$<iZ#e*%<=a R"3sC=1 	RICt|<<cXc]U4[5P.QRUX[dUddC##t)Dy)P"QQC		RR ));U;
;CJ > Ks   DDc           
         t         j                  d d d d}i |t         j                  t         j                  t         j                  t         j
                  t         j                  d}t        t              rfd}nfd}t        j                  dd	j                  t        t        j                  |j                                     z        }|j                  | j!                               }|r|j#                         }||d
      |d   rfd}n}|d   xs |d   xs |d   }	|d   r|	j%                  d|d   z  |d         }	|j'                  |d         }
d }t        |
t(        t*        f      r	 t)        |	      }||d
   |v rt-        d|d
   z        |
 ||d         xs |d   S  ||
||	      S |      S d d d}t        j                  dd	j                  t        t        j                  |j                                     z        }|j                  | j!                               }|rV||j3                  d
         }|j'                  |j3                  d            }
 ||j3                  d            r|
y ||
      S t-        d| z        # t,        $ r, t/        |	      }|t/        |	 d      }|t1        |	      }Y Lw xY w)Nc                 $    | j                  |      S r   )rN  r  r   s     r   r  z_match_one.<locals>.<lambda>j  s    $//%"8 r   c                 $    | j                  |      S r   )rO  r  s     r   r  z_match_one.<locals>.<lambda>k  s    $--"6 r   c                 .    t        j                  ||       S r   )r   r  r  s     r   r  z_match_one.<locals>.<lambda>l  s    "))E4"8 r   )z*=z^=z$=z~=)z<=r  z>=r  r  c                     S r   r   )r   r  s    r   r  z_match_one.<locals>.<lambda>x  s    * r   c                     | v S r   r   )r  r  s    r   r  z_match_one.<locals>.<lambda>z  s    !z/ r   z(?x)
        (?P<key>[a-z_]+)
        \s*(?P<negation>!\s*)?(?P<op>%s)(?P<none_inclusive>\s*\?)?\s*
        (?:
            (?P<quote>["\'])(?P<quotedstrval>.+?)(?P=quote)|
            (?P<strval>.+?)
        )
        r  opnegationc                      | |       S r   r   )r  r   unnegated_ops     r   r  z_match_one.<locals>.<lambda>  s    dE)B%B r   quotedstrvalstrvalintvalr   z\%sr   r  z(Operator %s only supports string values!none_inclusivec                 2    t        | t              r| du S | d uS r  rz  r  s    r   r  z_match_one.<locals>.<lambda>  s    Z4%8qDy q} r   c                 2    t        | t              r| du S | d u S r  rz  r  s    r   r  z_match_one.<locals>.<lambda>  s    z!T':U
 d r   )r   rA  z3(?x)
        (?P<op>%s)\s*(?P<key>[a-z_]+)
        TzInvalid filter part %r)r  containsleltgegteqr   r{  r   r-  r   r  r   r_  r  r<  	groupdictr  r  r  r  r  r0  r  r   )filter_partrn  r  STRING_OPERATORSCOMPARISON_OPERATORSr  operator_rexr   r  comparison_valueactual_valuenumeric_comparisonUNARY_OPERATORSr  s     `          @r   
_match_oner  f  s    868	
kk[[kk[[[[ *d#,1::  hhs299&:&?&?&ABCD EL 	{0023AKKM+AdG4Z=BBB^,J(Jq{W:/7778KQwZXwwqx(!lS%L1
J%()9%:" )ag9I.IG!D'QRR 5*Aa0@.AA,4F4N 0ggTfgg NKO :: hhs299o&:&:&<=>? @L 	{0023AQWWT]+wwqwwu~.(\-A,
-;
<<7  J%34D%E"%-)7;K:LA8N)O&%-)78H)I&Js   ;J 1KKc                 X    t        fdt        j                  d|       D              S )aa   Filter a dictionary with a simple string syntax.
    @returns           Whether the filter passes
    @param incomplete  Set of keys that is expected to be missing from dct.
                       Can be True/False to indicate all/none of the keys may be missing.
                       All conditions on incomplete keys pass if the key is missing
    c              3   X   K   | ]!  }t        |j                  d d             # yw)z\&r  N)r  r  )r  r  rn  r  s     r   r  zmatch_str.<locals>.<genexpr>  s/      > 	;&&uc2CD>s   '*z(?<!\\)&)allr   r   )
filter_strrn  r  s    ``r   	match_strr    s*      >88K<> > >r   c                 (     ssy t         j                   dt         j                   d  d d}t              xs d t        t	         xs g              d v r j                  d       t        j                  |      d fd	       }|S )	Nr   r  r  r  c                      y r   r   )r   r  s     r   r  z#match_filter_func.<locals>.<lambda>  s    r   ra  c                 ,            }|t        |      rt         fdD              rrst        S d S  j                  d      xs  j                  d      xs d}dj	                  t        t        j                              }| d| dS )Nc              3   8   K   | ]  }t        |        y wr   )r  )r  r  r  r  s     r   r  z9match_filter_func.<locals>._match_func.<locals>.<genexpr>  s     Sai9jASs   rD  r   r	  z) | (z does not pass filter (z), skipping ..)r  r  r   r  r   r  r   r<  )r  r  r=  video_titler  breaking_filtersfiltersinteractives   ``   r   _match_funcz&match_filter_func.<locals>._match_func  s    y*5?&s++#S7SS!,Z:ITI#--0RIMM$4GR7K c#))W&=>J!]"9*^TTr   r  )match_filter_funcr   r   r`  r  r   function_with_reprset_repr)r  r  repr_r  r  s   ``  @r   r  r    s    + ++,A.?.L.L-MQwiWYZjYkklmE()9:R?Q(7=b)*G.Ks  '
U (
U r   c                   6    e Zd ZddZd Zed        Zd Zd Zy)download_range_funcc                 0    |||c| _         | _        | _        y r   )chaptersranges	from_info)r   r  r  r  s       r   r   zdownload_range_func.__init__  s    5=vy2t{DNr   c              #     K   |j                  d      rdnd}| j                  xs g D ]N  }t        |j                  d      xs g       D ]+  \  }}t        j                  ||d         s d }i |d|i - P | j                  r|r|j                  d|d    d|        | j                  xs g D ],  \  }}| j                  ||      | j                  ||      d	 . | j                  rY|j                  d
      s|j                  d      r7|j                  d
      xs d|j                  d      xs t        d      d	 y | j                  s| j                  si  y y y w)Nr  z(There are no chapters matching the regexz>Cannot match chapters since chapter information is unavailablerD  r  z[info] r   r  )r  end_timer  r  r   r  )
r  r  r  r   r  	to_screenr  _handle_negative_timestampr  r  )	r   r  r  warningr  r  r  r   r  s	            r   __call__zdownload_range_func.__call__  s^    AJzAZ=X 	]](b 	2E'	j(A(GRH 2
799UGG$45"G1W1gq112	2
 ==WMMGIdO#4Bwi@A+++ 	JE3"==eYO ;;CK 	 >>y}}\:immJ>W'mmL9>Q%MM*5Eu  T]]H &3s   A&E$)C;E$c                 V    |j                  d      r| dk  rt        |d   | z   d      S | S )Ndurationr   )r  r  )r<  infos     r   r  z.download_range_func._handle_negative_timestamp  s1    26((:2F4RS8s4
#d*A.]Y]]r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   )r   r  r  r  r%  s     r   r'  zdownload_range_func.__eq__  s?    5"56 TMMU^^3T8<u||8S	Ur   c                 t    t          dt        |       j                    d| j                   d| j                   dS r  )r   rY  r  r  r   s    r   r!  zdownload_range_func.__repr__  s5    1T$Z0014==/DKK=PQRRr   Nr  )	r   r   r   r   r  r]  r  r'  r!  r   r   r   r  r    s/    Q4 ^ ^USr   r  c                 z   | sy t        j                  dt         d|       }|rt        |j	                  d            S t        j                  d|       }|rfdt        |j	                  d            z  dt        |j	                  d            z  z   t        |j	                  d	      j                  d
d            z   S y )Nz^(?P<time_offset>z)s?$time_offsetz%^(\d+):(\d\d):(\d\d(?:(?:\.|:)\d+)?)$r  r   r1  r   r,  r   r   )r   r   r  r  r   r  r  )	time_exprr  s     r   parse_dfxp_time_exprr    s    88(48)DDTZZ.//88<iHDc$**Q-((2DJJqM0B+BBU4::VW=K`K`adfiKjEkkk r   c                 $    dt        | dz        z  S )Nz%02d:%02d:%02d,%03dr0  )r8  r  s    r   srt_subtitles_timecoder    s     #6w~#FFFr   c                 R    t        | dz        }dg |d d |j                  dz  z  S )Nr0  z%01d:%02d:%02d.%02drJ  rS  )r8  r.  )r-  r<  s     r   ass_subtitles_timecoder    s7    w~.D #GT#2Y#G0A0AB0F#GGGr   c           
      t   dg dfddgff}g dt        j                  t        dddd	
      i i  G fdd      | j                  dd      } fd}|D ]  \  }}|D ]  }| j                  ||      }    t	        |       }g }|j                   d            xs |j                  d      }|st        d      d}		 |j                   d            D ]  }
|
j                  d      xs |
j                   d            }|s0|
j                  d      }|r|vrd}	J|   j                         |<   D ]4  }|
j                   d|z               }|s |j                  |i       |<   6  |	rd}	nndD ]S  }t        | d|z         d|z   g      }| j                  |j                  d            }
|
sCj                  |
       U t        |t        j                  d            D ]  \  }}t        |j                   j                  d            }t        |j                   j                  d            }t        |j                   j                  d             }|u|s|sz||z   }|j#                  d!|t%        |      t%        |       ||      fz          d"j'                  |      S )#z
    @param dfxp_data A bytes-like object containing DFXP data
    @returns A unicode object containing converted SRT data
    s   http://www.w3.org/ns/ttml)s   http://www.w3.org/2004/11/ttaf1s   http://www.w3.org/2006/04/ttaf1s   http://www.w3.org/2006/10/ttaf1s!   http://www.w3.org/ns/ttml#stylings   http://www.w3.org/ns/ttml#style)color
fontFamilyfontSize	fontStyle
fontWeighttextDecorationz$http://www.w3.org/XML/1998/namespacezhttp://www.w3.org/ns/ttmlz!http://www.w3.org/ns/ttml#styling)r  r  tts)r   c                   @    e Zd ZdZg Zg Z fdZfdZd Zd Z	y)$dfxp2srt.<locals>.TTMLPElementParserr   c                    | d      dfv r| xj                   dz  c_         y g }i }|j                  d      }r|j                         |r!|j                  j                  |i              D ]$  }|j                   d|z               }|s |||<   & |rd}t        |j	                               D ]  \  }	}
| j
                  r"| j
                  d   j                  |	      |
k(  r4|	dk(  r	|d	|
z  z  }B|	d
k(  r	|d|
z  z  }P|	dk(  r	|d|
z  z  }^|	dk(  r,|
dk(  r'| xj                   dz  c_         |j                  d       |	dk(  r,|
dk(  r'| xj                   dz  c_         |j                  d       |	dk(  s|
dk(  s| xj                   dz  c_         |j                  d        |r,| xj                   d|z   dz   z  c_         |j                  d       i }| j
                  r|j                  | j
                  d          |j                  |       | j
                  j                  |       | j                  j                  |       y )Nttml:brbrr;  styletts:r   rJ  r  z color="%s"r  z
 size="%s"r  z
 face="%s"r  boldz<b>r;  r  italicz<i>r  r  	underlinez<u>r  z<fontr  font)_outr  rB  sortedr,  _applied_stylesr   _unclosed_elements)r   r   r   unclosed_elementsr  element_style_idpropprop_valr  r  rm  applied_styleSUPPORTED_STYLING_xdefault_stylestyless               r   r   z*dfxp2srt.<locals>.TTMLPElementParser.startD  s6   r)}d++		T!	$&!#)::g#6  LL/#LL,<b!AB- /D%zz"Vd]*;<H&.d/ D &u{{} 5 :1//D4H4H4L4P4PQR4SWX4X$< MA$55D*_ L1$44D,. L1$44D,.1; II.I-44S9+-!x- II.I-44S9"22qK7G II.I-44S9#:$ 		Wt^c%99	)008$&M++%,,T-A-A"-EF!((/((//>''../@Ar   c                     | d      dfvrm| j                   j                         }t        |      D ]  }| xj                  d|z  z  c_         |r(| j                  r| j                  j                          y y y y )Nr  r  z</%s>)r   r  reversedr  r  )r   r   r  elementr  s       r   r  z(dfxp2srt.<locals>.TTMLPElementParser.endq  s{    2i=$//$($;$;$?$?$A!'(9: 3GII7!22I3$)=)=((,,. *>$	 0r   c                 .    | xj                   |z  c_         y r   )r  )r   r  s     r   r  z)dfxp2srt.<locals>.TTMLPElementParser.datay  s    IIIr   c                 6    | j                   j                         S r   )r  r<  r   s    r   r  z*dfxp2srt.<locals>.TTMLPElementParser.close|  s    99??$$r   N)
r   r   r   r  r   r  r   r  r  r  )r  r  r  r	  s   r   TTMLPElementParserr  ?  s)    +	BZ	/		%r   r  s   encoding='UTF-16's   encoding='UTF-8'c                             }t         j                  j                  j                  |      }|j	                  t         j                  j                  j                  |              |j                         S )N)target)r  etreeElementTree	XMLParserr  tostringr  )r   r  r   r  s      r   
parse_nodezdfxp2srt.<locals>.parse_node  sU    #%&&000?CII))22489||~r   z	.//ttml:pz.//pzInvalid dfxp/TTML subtitleFTz.//ttml:styler   zxml:idr  r  )bodydivz.//ttml:z.//r   beginr  durz%d
%s --> %s
%s

r   )r   r^  r   r  r   findallr  r  r  r  r   rB  r  r  r  r  r   r   r  r   )	dfxp_dataLEGACY_NAMESPACESr  r  rm  r   r  r@  parasrepeatr  style_idparent_style_idr  r  peleparar  
begin_timer  r  r  r  r  r  r	  s                         @@@@@r   dfxp2srtr&    s    
& (
 	
 
..0
 		 
		=5+22 
B FM>% >%D !!"8:OPI " 11 	1B!))"a0I	11 #9-D
CLLK)AT\\&-AE566F
\\"_"56 	EEyyA%))BxL*AH#ii0O"&0!F#)/#:#?#?#Ax ) E 99R%67<DF%%h3D9E	E F% (  $D2j1n#5uqy"AB;

3777+,U#$ 5)//!"45 e)$++//'*BC
'(>?"4;;??5#9:!C'H

*":."8,t	.  	  773<r   c                 \    | j                  |      }|g S ||t        |      gS | | | gS r   )r  r   )r  command_optionparam	separators       r   
cli_optionr+    sK    JJuE-B :1:1B.#e*-:#$YKw78:r   c                 R    | j                  |      }|dv sJ t        ||d|||      S )N)TFN)TF)r  r+  )r  r(  r)  
true_valuefalse_valuer*  s         r   cli_bool_optionr/    s6    JJuE''''Z<neU^__r   c                 4    | j                  |      |k(  r|gS g S r   r  )r  r(  r)  expected_values       r   cli_valueless_optionr3    s     %zz%0NBNJJr   c                    t        | t        t        f      r|r| S d } | |S t        | t              sJ t        |t        t        f      sJ |D ]i  }t        t	        d t        |      D cg c]!  }| j                  |j                               # c}            }|sP|D cg c]  }|D ]  }|  c}}c S  |S c c}w c c}}w )Nc                 
    | d uS r   r   r   s    r   r  z(cli_configuration_args.<locals>.<lambda>  s
    atm r   )r   r  r)  r'  rD  r  r  r  )	argdictr_  r   
use_compatkey_listr   arg_listr   args	            r   cli_configuration_argsr;    s    'D%=)NGgt$$$dT5M*** >#19(1CD#W[[%DF G $,=D=C=C==> N E=s   )&B;"C c                    | j                         |j                         }} | |k(  r|n|  d| }|xs dgD cg c]  }| | 
 }}||v r*| |k7  r|j                  | |f       |j                  d       nd}t        ||||      S c c}w )Nr  r   r   F)r  r   r;  )main_keyr6  r  r_  r   r7  root_keyr  s           r   _configuration_argsr?    s    NN$ciikcH#oshZq+>H'+|t5xj5D54s?KK3(I
!'4*EE 6s   Bc                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdrdtdudvdwdxdydzd{d|d}d~dddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddēddƓddȓddʓi dd̓ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddi dddddddddddddddddddd ddddddddd	d
ddddi dddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0i d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRi dSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdldndodpdqdrdsdtduiZedv        Zedw        Zyx(y  ISO639Utilsaaaarr  abkrX   aveafafrakakaamamhanr:  araraasasmavavaayaymazazebabakbebelbgbulbhbihbibisbmbambnbenbobodr  brerN  boscacatcechechchacocoscrcrecscescuchucvchvcycymdadandedeudvr  dzdzoeeeweelellr<   engeoepoesspaetesteueusfafasfffulfifinfjfijfofaor=   frafyfrygaglegdglaglglggngrngugujgvglvhahauhehebiwhihinhohmohrhrvhthathuhunhyhyehzheriainar   indinrU  ileigiboiiiiiikipkre  idoisislititaiuikujajpnjvjavkakatkgkonkikikkjkuar4  kazklkalkmkhmknkankokorkrkaukskaskukurkvkomkwcorkykirlalatlbltzlglugr/  limlnlinlolaor  litlulublvlavmgmlgmhmahmimrimkmkdr  malmnmonmrmarr  msar  mltmymyananaunbnobndndenenepngndonlnldnnnnononornrnblnvnavnynyaocociojojiomormororirv   osspapanpeperpiplir>   polpspusptporququermrohrnr   roronrurusrwkinsasanscsrdsdsndsesmesgsagsisinskslkslslvsmsmosnsnasosomsqsqisrsrprV   sswstsotsusunsvsweswswatatamteteltgtgkr\   thatitirtktuktltgltntsntotontrturr  tsor
  tattwtwitytahuguigukukrururduzuzbvevenvivievovolwawlnwowolxhxhoyiyidjiyoyorzazhazhzhozuzulc                 >    | j                   j                  |dd       S )z3Convert language code from ISO 639-1 to ISO 639-2/TNr   )	_lang_mapr  r  r  s     r   
short2longzISO639Utils.short2long  s     }}  bq**r   c                 Z    | j                   j                         D ]  \  }}||k(  s|c S  y)z3Convert language code from ISO 639-2/T to ISO 639-1N)r  r,  )r  r  
short_name	long_names       r   
long2shortzISO639Utils.long2short  s3     &)]]%8%8%: 	"!J	D !!	"r   N)r   r   r   r  r%  r  r  r   r   r   rA  rA    s
   }e}e} 	e} 	e	}
 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e} 	e}  	e!}" 	e#}$ 	e%}& 	e'}( 	e)}* 	e+}, 	e-}. 	e/}0 	e1}2 	e3}4 	e5}6 	e7}8 	e9}: 	e;}< 	e=}> 	e?}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}z 	e{}| 	e}}~ 	e}@ 	eA}B 	eC}D 	eE}F 	eG}H 	eI}J 	eK}L 	eM}N 	eO}P 	eQ}R 	eS}T 	eU}V 	eW}X 	eY}Z 	e[}\ 	e]}^ 	e_}` 	ea}b 	ec}d 	ee}f 	eg}h 	ei}j 	ek}l 	em}n 	eo}p 	eq}r 	es}t 	eu}v 	ew}x 	ey}I~ + + " "r   rA  c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddēddƓddȓddʓdd̓i ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddddi dddddddddddddddddd ddddddddd	d
ddddddi dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2i d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTi dUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvi dwdxdydzd{d|d}d~ddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi dddddddddÐdēdŐdƓdǐdȓdɐdʓdːd̓d͐dΓdϐdГdѐdғdӐdԓdՐd֓dאdؓdِdړdېdܓdݐdސdߐdddddddddddZed        Zy(  ISO3166UtilsAFAfghanistanAXu   Åland IslandsALAlbaniaDZAlgeriaASzAmerican SamoaADAndorraAOAngolaAIAnguillaAQ
AntarcticaAGzAntigua and BarbudaAR	ArgentinaAMArmeniaAWArubaAU	AustraliaATAustriaAZ
AzerbaijanBSBahamasBHBahrainBD
BangladeshBBBarbadosBYBelarusBEBelgiumBZBelizeBJBeninBMBermudaBTBhutanBOzBolivia, Plurinational State ofBQz Bonaire, Sint Eustatius and SabaBAzBosnia and HerzegovinaBWBotswanaBVzBouvet IslandBRBrazilIOzBritish Indian Ocean TerritoryBNzBrunei DarussalamBGBulgariaBFzBurkina FasoBIBurundiKHCambodiar  CameroonCACanadaCVz
Cape VerdeKYzCayman IslandsCFzCentral African RepublicTDChadCLChileCNChinaCXzChristmas IslandCCzCocos (Keeling) IslandsCOColombiaKMComorosCGCongoCDz%Congo, the Democratic Republic of theCKzCook IslandsCRz
Costa RicaCIu   Côte d'IvoireHRCroatiaCUCubaCWu   CuraçaoCYCyprusCZzCzech RepublicDKDenmarkDJDjiboutiDMDominicaDOzDominican RepublicECEcuadorEGEgyptSVzEl SalvadorGQzEquatorial GuineaEREritreaEEEstoniaETEthiopiaFKzFalkland Islands (Malvinas)FOzFaroe IslandsFJFijiFIFinlandFRFranceGFzFrench GuianaPFzFrench PolynesiaTFzFrench Southern TerritoriesGAGabonGMGambiaGEGeorgiaDEGermanyGHGhanaGI	GibraltarGRGreeceGL	GreenlandGDGrenadaGP
GuadeloupeGUGuamGT	GuatemalaGGGuernseyGNGuineaGWzGuinea-BissauGYGuyanaHTHaitiHMz!Heard Island and McDonald IslandsVAzHoly See (Vatican City State)HNHondurasHKz	Hong KongHUHungaryISIcelandINIndiaID	IndonesiaIRzIran, Islamic Republic ofIQIraqIEIrelandIMzIsle of ManILIsraelITItalyJMJamaicaJPJapanJEJerseyJOJordanKZ
KazakhstanKEKenyaKIKiribatiKPz&Korea, Democratic People's Republic ofKRzKorea, Republic ofKWKuwaitKG
KyrgyzstanLAz Lao People's Democratic RepublicLVLatviaLBLebanonLSLesothoLRLiberiaLYLibyaLILiechtensteinLT	LithuaniaLU
LuxembourgMOMacaoMKz*Macedonia, the Former Yugoslav Republic ofMG
MadagascarMWMalawiMYMalaysiaMVMaldivesMLMaliMTMaltaMHzMarshall IslandsMQ
MartiniqueMR
MauritaniaMU	MauritiusYTMayotteMXMexicoFMzMicronesia, Federated States ofMDzMoldova, Republic ofMCMonacoMNMongoliaME
MontenegroMS
MontserratMAMoroccoMZ
MozambiqueMMMyanmarNANamibiaNRNauruNPNepalNLNetherlandsr~  zNew CaledoniaNZzNew ZealandNI	NicaraguaNENigerNGNigeriaNUNiueNFzNorfolk IslandMPzNorthern Mariana IslandsNONorwayOMOmanPKPakistanPWPalauPSzPalestine, State ofPAPanamar|  zPapua New GuineaPYParaguayPEPeruPHPhilippinesPNPitcairnPLPolandPTPortugalPRzPuerto RicoQAQatarREu   RéunionRORomaniaRUzRussian FederationRWRwandaBLu   Saint BarthélemySHz,Saint Helena, Ascension and Tristan da CunhaKNzSaint Kitts and NevisLCzSaint LuciaMFzSaint Martin (French part)PMzSaint Pierre and MiquelonVCz Saint Vincent and the GrenadinesWSSamoaSMz
San MarinoSTzSao Tome and PrincipeSAzSaudi ArabiaSNSenegalRSSerbiaSC
SeychellesSLzSierra LeoneSG	SingaporeSXzSint Maarten (Dutch part)SKSlovakiaSISloveniaSBzSolomon IslandsSOSomaliaZAzSouth AfricaGSz,South Georgia and the South Sandwich IslandsSSzSouth SudanESSpainLKz	Sri LankaSDSudanSRSurinameSJzSvalbard and Jan MayenSZ	SwazilandSESwedenCHSwitzerlandSYzSyrian Arab RepublicTWzTaiwan, Province of ChinaTJ
TajikistanTZzTanzania, United Republic ofrU   ThailandTLzTimor-LesteTGTogoTKTokelauTOTongaTTzTrinidad and TobagoTNTunisiaTRTurkeyTMTurkmenistanTCzTurks and Caicos IslandsTVTuvaluUGUgandaUAUkrainerQ   zUnited Arab Emiratesr  zUnited KingdomUSzUnited StatesUMz$United States Minor Outlying IslandsUYUruguay
UzbekistanVanuatuz!Venezuela, Bolivarian Republic ofzViet NamzVirgin Islands, BritishzVirgin Islands, U.S.zWallis and FutunazWestern SaharaYemenZambiaZimbabwezAsia/Pacific RegionEurope)UZVUVEVNVGVIWFEHYEZMZWAPEUc                 T    | j                   j                  |j                               S )zAConvert an ISO 3166-2 country code to the corresponding full name)_country_mapr  r  r  s     r   
short2fullzISO3166Utils.short2full  s!     ##DJJL11r   N)r   r   r   rD
  r%  rE
  r   r   r   r  r    s6   }m}} 	i} 	i	}
 	} 	i} 	h} 	j} 	l} 	#} 	k} 	i} 	g} 	k} 	i}  	l!}" 	i#}$ 	i%}& 	l'}( 	j)}* 	i+}, 	i-}. 	h/}0 	g1}2 	i3}4 	h5}6 	/7}8 	09}: 	&;}< 	j=}> 	o?}@ 	hA}B 	.C}D 	!E}F 	jG}H 	nI}J 	iK}L 	jM}N 	jO}P 	hQ}R 	lS}T 	U}V 	(W}X 	fY}Z 	g[}\ 	g]}^ 	 _}` 	'a}b 	jc}d 	ie}f 	gg}h 	5i}j 	nk}l 	lm}n 	o}p 	iq}r 	fs}t 	ju}v 	hw}x 	y}z 	i{}| 	j}}~ 	j}@ 	"A}B 	iC}D 	gE}F 	mG}H 	!I}J 	iK}L 	iM}N 	jO}P 	+Q}R 	oS}T 	fU}V 	iW}X 	hY}Z 	o[}\ 	 ]}^ 	+_}` 	ga}b 	hc}d 	ie}f 	ig}h 	gi}j 	kk}l 	hm}n 	ko}p 	iq}r 	ls}t 	fu}v 	kw}x 	jy}z 	h{}| 	o}}~ 	h}@ 	gA}B 	1C}D 	-E}F 	jG}H 	kI}J 	iK}L 	iM}N 	gO}P 	kQ}R 	)S}T 	fU}V 	iW}X 	mY}Z 	h[}\ 	g]}^ 	i_}` 	ga}b 	hc}d 	he}f 	lg}h 	gi}j 	jk}l 	7m}n 	"o}p 	hq}r 	ls}t 	1u}v 	hw}x 	iy}z 	i{}| 	i}}~ 	g}@ 	oA}B 	kC}D 	lE}F 	gG}H 	:I}J 	lK}L 	hM}N 	jO}P 	jQ}R 	fS}T 	gU}V 	 W}X 	lY}Z 	l[}\ 	k]}^ 	i_}` 	ha}b 	/c}d 	$e}f 	hg}h 	ji}j 	lk}l 	lm}n 	io}p 	lq}r 	is}t 	iu}v 	gw}x 	gy}z 	m{}| 	o}}~ 	m}@ 	kA}B 	gC}D 	iE}F 	fG}H 	I}J 	(K}L 	hM}N 	fO}P 	jQ}R 	gS}T 	#U}V 	hW}X 	 Y}Z 	j[}\ 	f]}^ 	m_}` 	ja}b 	hc}d 	je}f 	mg}h 	gi}j 	jk}l 	im}n 	"o}p 	hq}r 	!s}t 	<u}v 	%w}x 	my}z 	*{}| 	)}}~ 	0}@ 	gA}B 	lC}D 	%E}F 	nG}H 	iI}J 	hK}L 	lM}N 	nO}P 	kQ}R 	)S}T 	jU}V 	jW}X 	Y}Z 	i[}\ 	n]}^ 	<_}` 	ma}b 	gc}d 	ke}f 	gg}h 	ji}j 	&k}l 	km}n 	ho}p 	mq}r 	$s}t 	)u}v 	lw}x 	,y}z 	j{}| 	m}}~ 	f}@ 	iA}B 	gC}D 	#E}F 	iG}H 	hI}J 	nK}L 	(M}N 	hO}P 	hQ}R 	iS}T 	$U}V 	W}X 	oY}Z 	4[}\ 	i]}^ 1'$!#y}L~ 2 2r   r  c                      e Zd Zi ddddddddd	d
dddddddddddddddddddddd d!d"i d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDi dEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddēddƓddȓddʓdd̓i ddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddddi dddddddddddddddddd ddddddddd	d
ddddddi dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2i d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTi dUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvi dwdxdydzd{d|d}d~ddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi dddddddddÐdēdŐdƓdǐdȓdɐdʓdːd̓d͐dΓdϐdГdѐdғdӐdԓdՐd֓dאdؓdِdړdېdܓdݐdސdߜZed        Zy(  GeoUtilsr  z46.172.224.0/19rQ   z94.200.0.0/13r  z149.54.0.0/17r  z209.59.64.0/18r  z204.14.248.0/21r  z46.99.0.0/16r  z46.70.0.0/15r  z105.168.0.0/13rA
  z182.50.184.0/21r  z23.154.160.0/24r  z181.0.0.0/12r  z202.70.112.0/20r  z77.116.0.0/14r  z1.128.0.0/11r  z181.41.0.0/18r  z185.217.4.0/22r  z5.197.0.0/16r  z31.176.128.0/17r  z65.48.128.0/17r  z114.130.0.0/16r  z
57.0.0.0/8r  z102.178.0.0/15r  z95.42.0.0/15r  z37.131.0.0/17r  z154.117.192.0/18r  z137.255.0.0/16r	  z185.212.72.0/23r  z196.12.64.0/18r  z156.31.0.0/16r  z161.56.0.0/16r  z161.0.80.0/20r  z191.128.0.0/12r  z24.51.64.0/18r  z119.2.96.0/19r  z168.167.0.0/16r  z178.120.0.0/13r  z179.42.192.0/18r  z99.224.0.0/11r  z41.243.0.0/16r  z197.242.176.0/21r  z160.113.0.0/16r
  z85.0.0.0/13r	  z102.136.0.0/14r 	  z202.65.32.0/19r  z152.172.0.0/14r  z102.244.0.0/14r  z36.128.0.0/10r  z181.240.0.0/12r	  z201.192.0.0/12r	  z152.206.0.0/15r  z165.90.96.0/19r	  z190.88.128.0/17r	  z31.153.0.0/16r
	  z88.100.0.0/14r/	  z
53.0.0.0/8r	  z197.241.0.0/17r	  z87.48.0.0/12r	  z192.243.48.0/20r	  z152.166.0.0/15r  z41.96.0.0/12r	  z186.68.0.0/15r	  z90.190.0.0/15r	  z156.160.0.0/11r	  z196.200.96.0/20r
  z88.0.0.0/11r	  z196.188.0.0/14rB
  z2.16.0.0/13r"	  z91.152.0.0/13r 	  z144.120.0.0/16r	  z80.73.208.0/21r	  z119.252.112.0/20r	  z88.85.32.0/19r$	  z
90.0.0.0/9r)	  z41.158.0.0/15r  z
25.0.0.0/8r9	  z74.122.88.0/21r-	  z31.146.0.0/16r&	  z161.22.64.0/18rA	  z62.68.160.0/19r1	  z154.160.0.0/12r3	  z95.164.0.0/16r7	  z88.83.0.0/19r+	  z160.182.0.0/15rC	  z197.149.192.0/18r;	  z104.250.0.0/19r	  z105.235.224.0/20r5	  z94.64.0.0/13r?	  z168.234.0.0/16r=	  z168.123.0.0/16rE	  z197.214.80.0/20rF	  z181.41.64.0/18rN	  z113.252.0.0/14rL	  z181.210.0.0/16r	  z93.136.0.0/13rH	  z148.102.128.0/17rO	  z84.0.0.0/14rU	  z39.192.0.0/10rZ	  z87.32.0.0/12r]	  z79.176.0.0/13r\	  z5.62.80.0/20rS	  z117.192.0.0/10r  z203.83.48.0/21rX	  z37.236.0.0/14rW	  z2.176.0.0/12rQ	  z82.221.0.0/16r_	  z79.0.0.0/10re	  z87.244.64.0/18ra	  z72.27.0.0/17rg	  z176.29.0.0/16rc	  z133.0.0.0/8rk	  z105.48.0.0/12rs	  z158.181.128.0/17r  z36.37.128.0/17rm	  z103.25.140.0/22r  z197.255.224.0/20r	  z198.167.192.0/19ro	  z175.45.176.0/22rp	  z175.192.0.0/10rq	  z37.36.0.0/14r  z64.96.0.0/15ri	  z2.72.0.0/13ru	  z115.84.64.0/18rx	  z178.135.0.0/16r	  z24.92.144.0/20r	  z82.117.0.0/19r
  z112.134.0.0/15r|	  z102.183.0.0/16rz	  z129.232.0.0/17r	  z78.56.0.0/13r	  z188.42.0.0/16rv	  z46.109.0.0/16r~	  z41.252.0.0/14r	  z105.128.0.0/11r	  z88.209.64.0/18r	  z37.246.0.0/16r	  z178.175.0.0/17r	  z74.112.232.0/21r	  z154.126.0.0/17r	  z117.103.88.0/21r	  z77.28.0.0/15r	  z154.118.128.0/18r	  z37.111.0.0/17r	  z49.0.128.0/17r	  z60.246.0.0/16r	  z202.88.64.0/20r	  z109.203.224.0/19r	  z41.188.64.0/18r	  z208.90.112.0/22r	  z46.11.0.0/16r	  z105.16.0.0/12r	  z27.114.128.0/18r	  z102.70.0.0/15r	  z187.192.0.0/11r	  z175.136.0.0/13r	  z197.218.0.0/15r	  z41.182.0.0/16r~  z101.101.0.0/18r	  z197.214.0.0/18r	  z203.17.240.0/22r	  z105.112.0.0/12r	  z186.76.0.0/15r	  z145.96.0.0/11r	  z84.208.0.0/13r	  z36.252.0.0/15r	  z203.98.224.0/19r	  z49.156.48.0/22r	  z49.224.0.0/14r	  z5.36.0.0/15r	  z186.72.0.0/15r	  z186.160.0.0/14r'	  z123.50.64.0/18r|  z124.240.192.0/19r	  z49.144.0.0/13r	  z39.32.0.0/11r	  z83.0.0.0/11r	  z70.36.0.0/20r	  z66.50.0.0/16r	  z188.161.0.0/16r	  z85.240.0.0/13r	  z202.124.224.0/20r	  z181.120.0.0/14r	  z37.210.0.0/15r	  z102.35.0.0/16r	  z79.112.0.0/13r	  z93.86.0.0/15r	  z5.136.0.0/13r	  z41.186.0.0/16r	  z188.48.0.0/13r	  z202.1.160.0/19r	  z154.192.0.0/11r
  z102.120.0.0/13r
  z78.64.0.0/12r	  z8.128.0.0/10r	  z188.196.0.0/14r	  z78.98.0.0/15r	  z102.143.0.0/17r	  z89.186.32.0/19r	  z41.82.0.0/15r	  z154.115.192.0/18r
  z186.179.128.0/17r
  z105.235.208.0/21r	  z197.159.160.0/19r	  z168.243.0.0/16r	  z190.102.0.0/20r
  z
5.0.0.0/16r
  z41.84.224.0/19r%
  z65.255.48.0/20r  z154.68.128.0/19r
  z196.168.0.0/14rU   z171.96.0.0/13r
  z85.9.128.0/18r
  z27.96.24.0/21r
  z180.189.160.0/20r#
  z95.85.96.0/19r
  z197.0.0.0/11r
  z175.176.144.0/21r!
  z78.160.0.0/11r
  z186.44.0.0/15r&
  z202.2.96.0/19r
  z120.96.0.0/11r
  z156.156.0.0/14r*
  z37.52.0.0/14r(
  z102.80.0.0/13r,
  z	6.0.0.0/8r.
  z167.56.0.0/13r6
  z84.54.64.0/18rK	  z212.77.0.0/19r	  z207.191.240.0/21r8
  z186.88.0.0/13r:
  z66.81.192.0/20r;
  z146.226.0.0/16r9
  z14.160.0.0/11r7
  z202.80.32.0/20r<
  z117.20.32.0/21r	  z202.4.32.0/19r>
  z134.35.0.0/16r	  z41.242.116.0/22r 
  z41.0.0.0/11z102.144.0.0/13z102.177.192.0/18)r?
  r@
  c                    t        |      dk(  r,| j                  j                  |j                               }|sy |}|j	                  d      \  }}t        j                  dt        j                  |            d   }|dt        |      z	  z  }t        t        j                  t        j                  dt        j                  ||                        S )Nr   r   z!Lr   re  )r   _country_ip_mapr  r  r   rQ  unpacksocket	inet_atonr  r   	inet_ntoarR  rW  randint)r  code_or_blockrc  addrpreflenaddr_minaddr_maxs          r   random_ipv4zGeoUtils.random_ipv4  s    }"''++M,?,?,ABE!EC(g==v'7'7'=>qAzS\9:6##KKfnnXx@AC D 	Dr   N)r   r   r   rI
  r%  rT
  r   r   r   rG
  rG
    s\   qqoq 	oq 		q
 	q 	nq 	nq 	q 	q 	q 	nq 	q 	oq 	nq 	oq  	!q" 	n#q$ 	%q& 	'q( 	)q* 	l+q, 	-q. 	n/q0 	o1q2 	 3q4 	5q6 	7q8 	9q: 	o;q< 	o=q> 	o?q@ 	AqB 	oCqD 	oEqF 	GqH 	IqJ 	KqL 	oMqN 	oOqP 	 QqR 	SqT 	mUqV 	WqX 	YqZ 	[q\ 	]q^ 	o_q` 	aqb 	cqd 	eqf 	gqh 	iqj 	okql 	omqn 	loqp 	qqr 	nsqt 	uqv 	wqx 	nyqz 	o{q| 	o}q~ 	q@ 	AqB 	mCqD 	EqF 	mGqH 	oIqJ 	KqL 	MqN 	 OqP 	oQqR 	lSqT 	oUqV 	lWqX 	YqZ 	o[q\ 	]q^ 	_q` 	aqb 	ocqd 	neqf 	gqh 	 iqj 	kql 	 mqn 	noqp 	qqr 	sqt 	uqv 	wqx 	yqz 	{q| 	o}q~ 	 q@ 	mAqB 	oCqD 	nEqF 	oGqH 	nIqJ 	KqL 	MqN 	oOqP 	nQqR 	oSqT 	mUqV 	WqX 	nYqZ 	o[q\ 	m]q^ 	o_q` 	 aqb 	cqd 	eqf 	 gqh 	 iqj 	kql 	mqn 	noqp 	nqqr 	msqt 	uqv 	wqx 	yqz 	o{q| 	}q~ 	q@ 	AqB 	nCqD 	oEqF 	oGqH 	oIqJ 	KqL 	MqN 	oOqP 	QqR 	SqT 	UqV 	WqX 	nYqZ 	 [q\ 	o]q^ 	o_q` 	oaqb 	cqd 	 eqf 	gqh 	iqj 	nkql 	omqn 	oqp 	oqqr 	sqt 	uqv 	wqx 	oyqz 	{q| 	}q~ 	q@ 	AqB 	oCqD 	oEqF 	oGqH 	oIqJ 	KqL 	MqN 	oOqP 	mQqR 	oSqT 	UqV 	WqX 	 YqZ 	o[q\ 	n]q^ 	m_q` 	naqb 	ncqd 	eqf 	ogqh 	 iqj 	kql 	omqn 	ooqp 	oqqr 	nsqt 	nuqv 	owqx 	oyqz 	{q| 	}q~ 	q@ 	nAqB 	nCqD 	EqF 	nGqH 	IqJ 	KqL 	nMqN 	 OqP 	 QqR 	 SqT 	 UqV 	WqX 	YqZ 	l[q\ 	]q^ 	_q` 	aqb 	cqd 	oeqf 	ogqh 	oiqj 	 kql 	omqn 	noqp 	 qqr 	osqt 	ouqv 	owqx 	oyqz 	{q| 	n}q~ 	oq@ 	kAqB 	oCqD 	oEqF 	oGqH 	 IqJ 	oKqL 	MqN 	OqP 	oQqR 	SqT 	UqV 	oWqX 	oYqZ 	[q\ 	m]q^  aqOf D Dr   rG
  c                 $   d}t        |       } | dkD  r't        j                  d| dz        |z   }| dz	  } | dkD  r't        t	        |            D ]  }||   dk7  s n d}d}||d }|dkD  r%t	        |      |z  r|t	        |      |z  z
  dz  |z   }|S )a  long_to_bytes(n:long, blocksize:int) : string
    Convert a long integer to a byte string.

    If optional blocksize is given and greater than zero, pad the front of the
    byte string with binary zeros so that the length is a multiple of
    blocksize.
    r   r   >Ire  r      N)r  rQ  rR  rT  r   )r   	blocksizerZ  r  s       r   long_to_bytesrY
    s     	AAA
a%KKa*n-1G a% 3q6] Q4:
 	!"A 1}Q)+Q)++w6:Hr   c           	          d}t        |       }|dz  rd|dz  z
  }d|z  | z   } ||z   }t        d|d      D ]'  }|dz  t        j                  d| ||dz          d   z   }) |S )zbytes_to_long(string) : long
    Convert a byte string to a long integer.

    This is (essentially) the inverse of long_to_bytes().
    r      rW
  r  rV
  )r   rT  rQ  rJ
  )rZ  accr  extrar  s        r   bytes_to_longr^
    s     CVFzVaZeOa%1fa  ?byFMM$!AE
;A>>?Jr   c                 p    t        t        j                  | ddd         d      }t        |||      }d|z  S )a0  
    Implement OHDave's RSA algorithm. See http://www.ohdave.com/rsa/

    Input:
        data: data to encrypt, bytes-like object
        exponent, modulus: parameter e and N of RSA algorithm, both integer
    Output: hex string of encrypted data

    Limitation: supports one block encryption only
    NrJ  r  z%x)r  binasciihexlifypow)r  r  moduluspayload	encrypteds        r   ohdave_rsa_encryptrf
    s<     (""4":.3GGXw/I)r   c                     t        |       |dz
  kD  rt        d      t        |t        |       z
  dz
        D cg c]  }t        j                  dd       }}ddg|z   dgz   | z   S c c}w )z
    Padding input data with PKCS#1 scheme

    @param {int[]} data        input data
    @param {int}   length      target length
    @returns {int[]}           padded data
       z&Input data too long for PKCS#1 paddingr,  r      r   )r   r  rT  rW  rN
  )r  r  r   pseudo_randoms       r   pkcs1padrk
    ss     4y6B;ABB5:6CI;MPQ;Q5RSV^^As+SMSq6M!QC'$.. Ts   A&c                     |s| st        d      |xs dd |  }| r(| t        |      k7  rt        d|  dt        |             |S )Nz#Either table or n must be specified>0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZzbase z exceeds table length )r  r   )r   r  s     r   _base_n_tablern
  #  sV    >??VVXZYZ[EQ#e*_5#9#e*FGGLr   c                 p    t        ||      }| s|d   S dt        |      }}| r|| |z     |z   }| |z  } | r|S )z$Convert given int to a base-n stringr   r   )rn
  r   )r  r   r  r  r  s        r   encode_base_nrp
  -  sR    !U#EQxs5zDF
sTz"V+Tk  Mr   c                     t        t        ||            D ci c]  \  }}||
 }}}dt        |      }}| D ]  }||z  ||   z   } |S c c}}w )z"Convert given base-n string to intr   )r  rn
  r   )r  r   r  r  r  r  r  s          r   decode_base_nrr
  :  sb    ,5mAu6M,NO[UDT5[OEOc%jDF -$t,-M	 Ps   A
c                 ,   t        j                  t        |       }|j                         \  }}}}t	        |      }t	        |      }|j                  d      }i |r |dz  }t        ||      }||   xs ||<   |r t        j                  dfd|      S )Nr  r   z	\b(\w+)\bc                 ,    | j                  d         S r   r2  )r  symbol_tables    r   r  z%decode_packed_codes.<locals>.<lambda>Q  s    <

1#> r   )r   r  PACKED_CODES_REr  r  r   rp
  r   )r  r  obfuscated_coder  r  symbolsbase_n_countru
  s          @r   decode_packed_codesrz
  C  s    99_d+D,0KKM)OT5't9DJEmmC GL

$UD1%,U^%C|\" 
 66> r   c                 d    dk(  r| S t              dj                  fd| D              S )Nr   r   c              3   ^   K   | ]$  }|v rj                  |      z   z     n| & y wr   )r  )r  r   alphabetlshifts     r   r  zcaesar.<locals>.<genexpr>Y  s<       67(](..#e+q01Is   *-)r   r   )rZ  r}
  r
  r~
  s    ``@r   caesarr
  U  s6    zHA77   r   c                     t        | dd      S )Nz^!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~/   )r
  r  s    r   rot47r
  ^  s    !z|~r   c                 |    i }t        j                  d|       D ]   \  }}|j                  d      r|dd }|||<   " |S )Nz2(?P<key>[A-Z0-9-]+)=(?P<val>"[^"]+"|[^",]+)(?:,|$)r  r   rJ  )r   r  rN  )r   r  r   r   s       r   parse_m3u8_attributesr
  b  sN    Djj!VX^_ 
c>>#a)CS	 Kr   c                 &    | dk\  r| |z	  S | dz   |z	  S )Nr   l        r   )r   r   s     r   urshiftr
  k  s!    ax3!8=cK&7A%==r   c                    t         dk(  rTd|vsJ t        j                  j                  |       sJ 	 t	        |  d| d      5 }|j                  |       d d d        y d }t        t        t        dd             rt        j                  }nWt        t        dd       dk(  r-t        t        j                        dk\  r't        j                   }nt        rt        j                  }|r	  || ||       y t#        dd	g      rdnt#        d
dg      rd
nd }|s)t%        dt&        j(                  dk7  rdz         dz         |j+                         }	 t,        j/                  |d
k(  r|d||| gn|d|d|| gdt0        j2                  t0        j2                  t0        j2                        \  }}}	|	rt        |	|      y # 1 sw Y   y xY w# t        $ r%}t        |j                  |j                        d }~ww xY w# t        $ r%}t        |j                  |j                        d }~ww xY w# t        $ r%}t        |j                  |j                        d }~ww xY w)Nr  r   r  setxattr_yt_dlp__identifierpyxattr)r   r  r   setfattrr  r   z-hzfCouldn't find a tool to set the xattrs. Install either the "xattr" or "pyxattr" Python modules or the linuxz"xattr" binaryz7GNU "attr" package (which contains the "setfattr" tool)z-wz-nz-vT)r   rh  r  r  )r
   rv   rw   existsrn  r>  r   r  ro  strerrorcallablerd  r
  r   r7  __version__r`  r  r  r|   r}   rW  r  r   r!  r  )
rw   r   r   r  r\  r
  r  r   r  r  s
             r   write_xattrr
  o  s:    #~~ww~~d###	:auot,  	 HJ-.;;	-t	4		A **+y8yyH	>>	:T3& 	 **{mD:+GdV<$ #u#&<<7#:{| 	|@y{| 	| LLNE6 %		-0G^S$UD)#tSRVX]_cAdjoojooZ__ !* !^6:
  V44 S 	  	:$QWWajj99	:(  	:$QWWajj99	:"  6 !**556sf   G F5G %
G2 AH# 5F>:G >G 	G/
 G**G/2	H ; HH #	I, IIc                 V   t        j                  ddd      }t        j                  ddd      }t        j                  d||z
  j                        }|t        j
                  |      z   }| t        |j                        |t        |j                        |t        |j                        iS )Ni  r   i  r     r   )
r  r  rW  rN
  r  r  r   r  r  r  )
year_fieldmonth_field	day_field
start_dateend_dater  random_dates          r   random_birthdayr
    s    q!$JwwtR$H^^A: 5;;<Fr||F33KC(()S**+3{' r   c                     	 t        j                          5 }|j                  | df       |j                         d   cd d d        S # 1 sw Y   y xY w# t        $ r Y y w xY wr  )rK
  bindgetsocknamer   )	interfacesocks     r   find_available_portr
    s[    ]]_ 	)IIy!n%##%a(	) 	) 	)  s-   A &A	A AA A 	AAz[InternetShortcut]
URL=%(url)s
z<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>URL</key>
	<string>%(url)s</string>
</dict>
</plist>
zV[Desktop Entry]
Encoding=UTF-8
Name=%(filename)s
Type=Link
URL=%(url)s
Icon=text-html
)r  desktopweblocc                    t         j                  j                  |       }d|j                  v rt	        d      d}|j
                  rp|t         j                  j                  |j
                  d      z  }|j                  1|dt         j                  j                  |j                  d      z   z  }|dz  }||j                  j                  d      j                         z  }|j                  *|j                  d	k7  r|dt        |j                        z   z  }t         j                  j                  |j                  |t         j                  j                  |j                   d
      t         j                  j                  |j"                  d
      t         j                  j                  |j$                  d      t         j                  j                  |j&                  d      f      S )a}  
    Converts an IRI (Internationalized Resource Identifier, allowing Unicode characters) to a URI (Uniform Resource Identifier, ASCII-only).

    The function doesn't add an additional layer of escaping; e.g., it doesn't escape `%3C` as `%253C`. Instead, it percent-escapes characters with an underlying UTF-8 encoding *besides* those already escaped, leaving the URI intact.
    [z"IPv6 URIs are not, yet, supported.r   z!$%&'()*+,~)safer   @idnaP   z!$%&'()*+,/:;=@|~z!$%&'()*+,/:;=?@{|}~z!#$%&'()*+,/:;=?@{|}~)r  r  rb  r  r  r  r   r  r  rd   rW  r  r   rN  r  
quote_plusrw   r  r?  fragment)iri	iri_partsnet_locations      r   
iri_to_urir
    s    %%c*I
i=>>
 L**9+=+=N*SS)C&,,"4"4Y5G5Gn"4"]]]LI&&--f5<<>>L~~!inn&:c)..111<<""			LL##INN9M#N LL##I$4$4;O#P LL##IOO:Q#RLL##I$6$6=U#V	XY Yr   c                 n    t         j                  dv r"dt        j                  j	                  |       z   S | S )N)rr   cygwinz\\?\)r|   r}   rv   rw   abspath)rw   s    r   to_high_limit_pathr
    s,    
||**277??4000Kr   z%sc                     t        j                  | gt        |       }|t        u r|s|S |t        |      v r|S | ||      z  S r   )r   r  r  r   )r   fieldtemplater<  r   funcr   s          r   rY  rY    sM    

 
 
7x
7CJ&3 -08F3C,Cd3ir   c                 ^    t        j                  dd|       } t        j                  dd|       S )Na  (?x)
        (?:
            (?:
                chtbl\.com/track|
                media\.blubrry\.com| # https://create.blubrry.com/resources/podcast-media-download-statistics/getting-started/
                play\.podtrac\.com|
                chrt\.fm/track|
                mgln\.ai/e
            )(?:/[^/.]+)?|
            (?:dts|www)\.podtrac\.com/(?:pts/)?redirect\.[0-9a-z]{3,4}| # http://analytics.podtrac.com/how-to-measure
            flex\.acast\.com|
            pd(?:
                cn\.co| # https://podcorn.com/analytics-prefix/
                st\.fm # https://podsights.com/docs/
            )/e|
            [0-9]\.gum\.fm|
            pscrb\.fm/rss/p
        )/r   z^\w+://(\w+://)r  rK  rc  s    r   clean_podcast_urlr
    s2    
&& " 3#C$ 66$eS11r   0123456789abcdefc                  2    t        j                  dd d      S )Nz[xy]c                 <    t         t        j                  dd         S )Nr   rO  )
_HEX_TABLErW  rN
  r   s    r   r  zrandom_uuidv4.<locals>.<lambda>/  s    Zq"0E%F r   z$xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxrK  r   r   r   random_uuidv4r
  .  s    66'FHnoor   c                     	 t         j                  j                  |       }|rt        j                  |d       y# t        $ r }t        |       |d|        Y d }~yd }~ww xY w)NT)exist_okzunable to create directory F)rv   rw   ry   makedirsr   r
  )rw   r  dnrP  s       r   make_dirr
  2  s[    WW__T"KKT* I*3C59:s   8; 	A$AA$c                      ddl m}  t        j                  j	                  t        j                  j                   |        d               S )Nr    _get_variant_and_executable_pathr   )rB  r
  rv   rw   ry   r
  r
  s    r   get_executable_pathr
  >  s.    977??277??+K+Ma+PQRRr   c              #   b  K   t        j                  d      xs t        d      }t         j                  j	                  ||        t        j                  d      }|r"t         j                  j	                  ||        t         j                  j	                  t        d      d|         y w)NXDG_CONFIG_HOMEz	~/.configappdata~r   )rv   getenvr   rw   r   )package_namexdg_config_homeappdata_dirs      r   get_user_config_dirsr
  D  s     ii 12T6G6TO
'',,
55 ))I&Kggll;55 '',,(-<./A
BBs   B-B/c              #   P   K   t         j                  j                  d|        y w)Nz/etc)rv   rw   r   )r
  s    r   get_system_config_dirsr
  R  s     
'',,v|
,,s   $&c                  r    t        j                          t        j                  di | j                         z   S )zQ
    Returns TZ-aware time in seconds since the epoch (1970-01-01T00:00:00Z)
    r   )r<  r  r  r  )r   s    r   time_secondsr
  W  s*     99;//==???r   c                    ddd}|r|j                  |       t        j                  t        j                  |      j                               }t        j                  t        j                  |       j                               }t        j                  |j                         |dz   |z   t        j                        }t        j                  |j                               }|dz   |z   dz   |z   }|S )NHS256JWT)algtyp   .)rB  r  r  rz   r  rd   hmacnewhashlibsha256digest)	payload_datar   rm  header_data
header_b64payload_b64r:  signature_b64tokens	            r   jwt_encode_hs256r
  b  s    K 7#!!$**["9"@"@"BCJ""4::l#;#B#B#DEKzD0;>OA$$QXXZ0M+d2]BELr   c                     | j                  d      \  }}}t        j                  t        j                  | d            }|S )Nr   z===)r   rz   r  r  urlsafe_b64decode)jwtr
  r
  r
  r
  s        r   jwt_decode_hs256r
  r  s<    -0YYs^*J]::f66+c7JKLLr   r  c                     t         dk(  rt        syt        j                  d      sy	 | j	                         S # t
        $ r Y yw xY w)Nr  FTERM)r
   WINDOWS_VT_MODErv   r
  isattyr  )rt  s    r   r=  r=  |  sB    YYv}} s   8 	AAc                     t               dk  ryddl} ddl} ddl}d} | j                  dd      }t        j                  dt
        j                        }	 | j                  j                   |j                  |            }| j                  j                         }|j                  | | j                  |            }|st        d	      |j                  || j                  j                  |j                   |z              }|st        d
      	 t        j"                  |       dat&        j)                          y# t        j"                  |       w xY w)z(Ref: https://bugs.python.org/issue30075 )rS  r   iZ)  Nr   r[
  rd  F)use_last_errorzCONOUT$zGetConsoleMode failedzSetConsoleMode failedT)r9  r^  ctypes.wintypesrd  WinDLLrv   rn  r  r_  rb  rj  ra  GetConsoleModebyrefre   SetConsoleModer   r  r
  r=  cache_clear)r^  rd  "ENABLE_VIRTUAL_TERMINAL_PROCESSINGdllru  h_outdw_original_modesuccesss           r   windows_enable_vt_moder
    s%   ~-)/&
&--
5
9CWWY		*F&&';v';';F'CD!??002$$ULFLL9I,JK344$$UFOO,A,A""%GG-I J344  	 O++-	 	s   B9D< <Ez	\[[^m]+mc                 .    t         j                  d|       S rr  )_terminal_sequences_rer   r  s    r   r  r    s    !%%b&11r   c                     t        d| z        S )Nr:  r_  )numbers    r   number_of_digitsr    s    tf}r   ra  )r;  	from_dictc           	      p    fd|D        }| j                  t        t        t        d |                  S )Nc              3   \   K   | ]#  }t        j                  t        |             % y wr   )r   r  r  )r  rm  r  s     r   r  z join_nonempty.<locals>.<genexpr>  s"     QQ)((HQK@Qs   ),)r   r  r   rD  )r;  r  valuess    ` r   r]  r]    s0    Q&Q::c#vdF3455r   c                     dt        fd| D        d      }|d   s|S |D cg c]H  }t        dt        j                  |t	        |d         |d         it        t        |            |      J c}S c c}w )a3  
    Find the largest format dimensions in terms of video width and, for each thumbnail:
    * Modify the URL: Match the width with the provided regex and replace with the former width
    * Update dimensions

    This function is useful with video services that scale the provided thumbnails on demand
    r;  c              3   H   K   | ]  t        fd D                yw)c              3   H   K   | ]  }j                  |      xs d   ywr  r1  )r  r  r  s     r   r  zAscale_thumbnails_to_max_format_width.<locals>.<genexpr>.<genexpr>  s!     1avzz!}!!1s   "N)r)  )r  r  _keyss    @r   r  z7scale_thumbnails_to_max_format_width.<locals>.<genexpr>  s     Hf151	1Hs   ")r   r   rl  r   r  )r  rv  r   r   r   r'  r  )formats
thumbnailsurl_width_remax_dimensionsr  r	  s        @r   $scale_thumbnails_to_max_format_widthr    s      EHHN !
 $	  	BFF<^A->)?5AQRSUN+,i	9  s   AA5c                     | syt        j                  d|       }|syt        |j                  d            t	        |j                  d            t	        |j                  d            fS )zC Parse value of "Range" or "Content-Range" HTTP header into tuple. )NNNz bytes[ =](\d+)-(\d+)?(?:/(\d+))?r   r   r,  )r   r  r  r   rq  )rT  crgs     r   parse_http_ranger    sS    
))7
?Csyy|k#))A,7SYYq\9RRRr   c                 d    | rt         dk(  rdnd}t        d|  d| d       t        j                  S )Nr  zCtrl+ZzCtrl+DzReading z from STDIN - EOF (z
) to end:
)r
   rB  r|   r  )whateofs     r   
read_stdinr    s5    (D0hhxv%8[IJ99r   c                     t         D ]%  \  }}| j                  |      s|t        |      fc S  | j                  dd      } t	        j
                  d|       }|r!|j                  d      j                         dfS ddfS )zN
    Detect the text encoding used
    @returns (encoding, bytes to skip)
    rW
  r   s   (?m)^#\s*coding\s*:\s*(\S+)\s*$r   Nr   )r{  rN  r   r  r   r   r   rW  )r  rD  rA  r  s       r   determine_file_encodingr    s|      !S??3C= ! <<s#D887>D%)4::a=!Q66tQ66r   c                       e Zd ZdZdZdZdZddZddZd Z	d Z
eg fd       Zed        Zdd	d
Zed        Zd Zd Zy)ConfigNFc                 P    ||c| _         | _        t               g c| _        | _        y r   )r   labelr`  _loaded_pathsconfigs)r   r   r  s      r   r   zConfig.__init__  s%    "(%TZ+.5"(DLr   c                 \    | j                   rJ ||c| _        | _        | j                         S r   )_Config__initializedown_argsrr  load_configs)r   r   rr  s      r   initzConfig.init  s0    %%%%'+X$t}  ""r   c                    d}| j                   rrt        j                  j                  | j                         }t        j                  j	                  |      }|| j
                  v ry| j
                  j                  |       d| _        | j                  j                  | j                        \  }}| j                  | _        |j                  xs g D ]+  }|dk(  r\|| j
                  v r| j
                  j                  |       | j                  t        j                  t!        d      d      d       et        j                  j#                  |t%        |            }t        j                  j'                  |      r t        j                  j#                  |d	      }t        j                  j)                  |      s| j                  j+                  d
| d       | j                  | j-                  |      |       . y)Nr   FTra  optionscommentsr  r  zyt-dlp.confzconfig location z does not exist)rr  rv   rw   realpathry   r  rI  r  r   parse_known_argsr   parsed_argsconfig_locationsappend_configr  r   r  r   r  isdirr
  error	read_file)r   	directorylocationoptsr   s        r   r!  zConfig.load_configs  s   	==ww''6H1I4---""8,!++..t}}=a==--3 	CH3t111""&&x0""5;;z)/Dt#T\c"dww||I{8/DEHww}}X&77<<-@77>>(+!!$4XJo"NOt~~h7B	C r   c                 4   t        | j                  d| j                  rd| j                   dndd      }t        | j                  d uxr6 |d   j	                          |dd   d| j                  | j                         gd	 | j                  D        d
diS )Nconfigr  r   r:  r\  r   r   r  c              3   L   K   | ]  }d | j                  d d      dd   yw)r;  z
| r   Nr  )r  r   s     r   r  z!Config.__str__.<locals>.<genexpr>#  s*     GQ1#htV,QR0Gs   "$r;  r;  )r]  r  rr  r   r  hide_login_infor  )r   r  s     r   r#  zConfig.__str__  s    JJ$--Admm_A"6R MM%qU1X^^-=,>uQRykDL`L`aeananLoKp*qG$,,G  	r   c                    	 t        | d      }	 t        |j                  d            \  }}|j	                  |t
        j                         	 |j                         j                  |xs
 t                     }t        j                  |d      }	 |j                          |S # t        $ r |cY S w xY w# t        $ r d }Y tw xY w# t        $ r}t        d|  d|       d }~ww xY w# |j                          w xY w)Nr  i   Tr%  zUnable to parse "z": )rn  r   r  readseekre  SEEK_SETrW  rg   r  r   re   r  r  )rr  r   optionfrA  skipcontentsresrP  s           r   r/  zConfig.read_file&  s    	8T*G	/S0ABICLLr{{+	||~,,S-G4E4GHH++h6C MMO
  	N	
  	C	  	E0
#cUCDD	E MMOsG   B" =B3 AC "B0/B03C C	C#CC##C& &C8c                 
   h d}t        j                  ddj                  d |D              z   dz         fd}t        t	        ||             } t        |       D ]$  \  }}||v s|dz   t        |       k  sd| |dz   <   & | S )	N>   -p-u
--password
--username--ap-password--ap-username--video-passwordz	^(?P<key>r  c              3   F   K   | ]  }t        j                  |        y wr   r  )r  pos     r   r  z)Config.hide_login_info.<locals>.<genexpr>>  s     1WB"))B-1Wr  z)=.+$c                 V    j                  |       }|r|j                  d      dz   S | S )Nr   z=PRIVATE)r   r   )or   eqres     r   	_scrub_eqz)Config.hide_login_info.<locals>._scrub_eq@  s+    

1Awwu~
22r   r   PRIVATE)r   r-  r   r  r  r  r   )r2  PRIVATE_OPTSrL  r  optrK  s        @r   r6  zConfig.hide_login_info;  s    uzz+1W,1W)WX[bbc	 C	4()!$ 	*HCl"sQwT': )S1W	* r   r'  c                     t        |       | j                  |      }| j                  |_         |j                  | r| j                  j                  |       y y r   )rY  r   r  r"  r  r   )r   r  r   r4  s       r   r,  zConfig.append_configM  sK    dDKK/#116;;LL' r   c              #      K   t        | j                        D ]  }|j                  E d {     | j                  xs g E d {    y 7 7 wr   )r  r  all_argsr*  )r   r4  s     r   rR  zConfig.all_argsS  sH     t||, 	'F&&	'##)r)) ')s!   (AA
AAAAc                 P     | j                   j                  | j                  fi |S r   )r   r)  rR  )r   r   s     r   r)  zConfig.parse_known_argsY  s"    +t{{++DMMDVDDr   c                 L    | j                   j                  | j                        S r   )r   
parse_argsrR  r   s    r   rU  zConfig.parse_args\  s    {{%%dmm44r   r   r(  )r   r   r   r   r*  rr  r  r   r"  r!  r#  r]  r/  r6  r,  re  rR  r)  rU  r   r   r   r  r    s~    HKHM5#
6 $&  (  " *. ( * *
E5r   r  c                      t         j                  j                  t        t        j
                  |             D ci c]  \  }}|j                         | c}}S c c}}w )zLMerge dicts of http headers case insensitively, prioritizing the latter ones)r  chainfrom_iterabler  r'  r,  rD  )rs  r  rm  s      r   merge_headersrY  `  s?    %.__%B%B3tzzSXCY%Z[TQAGGIqL[[[s   Ac                 p     t        j                         t        j                          fd       }|S )zCache a methodc                 6    j                   | g|i |}|j                          t        |j                  j	                               dd  }t        |       j                  di       j                  j                  i       }||vr | g|i |||<   ||   S )Nr   _cached_method__cache)r
  apply_defaultsr)  	argumentsr  r  r  r   )r   r   r   
bound_argsr   cacher  	signatures         r   wrapperzcached_method.<locals>.wrapperi  s    #Y^^D:4:6:
!!#J((//12126T
%%&=rBMMajjZ\]e41$1&1E#JSzr   )inspectra  r   wraps)r  rb  ra  s   ` @r   cached_methodre  e  s5    !!!$I__Q  Nr   c                   6     e Zd ZdZd fd	ZdddZd Z xZS )classpropertyz7property access for class methods with optional cachingc                 X    |st        j                  | g|i |S t        |   |       S r   )r   r^  rF  __new__)r  r
  r   r   rG  s       r   ri  zclassproperty.__new__x  s0    $$S:4:6::ws##r   F)r`  c                `    t        j                  | |       || _        |ri | _        y d | _        y r   )r   update_wrapperr
  rH  )r   r
  r`  s      r   r   zclassproperty.__init__}  s(      t,	!btr   c                     | j                   | j                  |      S || j                   vr| j                  |      | j                   |<   | j                   |   S r   )rH  r
  )r   r   r  s      r   __get__zclassproperty.__get__  sK    ;;99S>!##yy~DKK{{3r   r   )r   r   r   r  ri  r   rm  r^  r_  s   @r   rg  rg  v  s    A$
 ', ,
 r   rg  c                   0    e Zd ZddZd Zed        Zd Zy)r  Nc                 N    t        j                  | |       ||c| _        | _        y r   )r   rk  r
  _function_with_repr__repr)r   r
  r  s      r   r   zfunction_with_repr.__init__  s"      t,!%u	4;r   c                 &     | j                   |i |S r   )r
  r  s      r   r  zfunction_with_repr.__call__  s    tyy$)&))r   c                 0    t        j                  | |      S )N)r  )r   r^  )r  r  s     r   r  zfunction_with_repr.set_repr  s      E22r   c                     | j                   r| j                   S | j                  j                   d| j                  j                   S r  )rp  r
  r   r   r   s    r   r!  zfunction_with_repr.__repr__  s:    ;;;;))&&'q)?)?(@AAr   r   )r   r   r   r   r  r%  r  r!  r   r   r   r  r    s&    -* 3 3Br   r  c                   &    e Zd ZdZd Zed        Zy)	NamespacezImmutable namespacec                 H    t        | j                  j                               S r   )r  __dict__r  r   s    r   r  zNamespace.__iter__  s    DMM((*++r   c                 6    | j                   j                         S r   )rw  r,  r   s    r   items_zNamespace.items_  s    }}""$$r   N)r   r   r   r  r  re  ry  r   r   r   ru  ru    s    , % %r   ru  )r  r  r  r  r  r  )	3g2r  f4vmk3ddivxmpgr  r  r  )	aiffalacr  r  r  r  r  r3  r  )r  aper  f4af4brS  rT  rU  ogaogxspxr4  wmarX  )r   r  r  )mhtml)srtvttasslrc)f4fr  r  smilr  )common_videor  common_audioaudior  storyboards	subtitles	manifestsc                   x    e Zd ZdZd\  ZZd Zd Zed        Z	e	j                  d        Z	d Zeddd	d
       Zy)RetryManagerzUsage:
        for retry in RetryManager(...):
            try:
                ...
            except SomeException as err:
                retry.error = err
                continue
    r  c                 P    |xs d| _         t        j                  |fi || _        y r   )retriesr   r^  error_callback)r   _retries_error_callbackr   s       r   r   zRetryManager.__init__  s%    }1'//J6Jr   c                 \    | j                   t        uxr | j                  | j                  k  S r   )_errorr   r[  r  r   s    r   _should_retryzRetryManager._should_retry  s#    {{*,M1MMr   c                 @    | j                   t        u ry | j                   S r   )r  r   r   s    r   r.  zRetryManager.error  s    ;;*${{r   c                     || _         y r   )r  )r   r   s     r   r.  zRetryManager.error  s	    r   c              #     K   | j                         rst        | _        | xj                  dz  c_        |  | j                  r1| j	                  | j                  | j                  | j
                         | j                         rry y wr1  )r  r   r.  r[  r  r  r   s    r   r  zRetryManager.__iter__  s_       "#DJLLALJzz##DJJdllK   "s   BBBN)r.  rm   c          
         ||kD  r+|r'|dkD  r ||  d|dz
   d      S  |t        |             S | |s ||       S t        | t              r-t        t	        | j
                        xs | j                  d      }  ||  dt        |dd       d| d	| d
       t        |      rt         ||dz
              n|}|r# |d|dd       t        j                  |       yy)z&Utility function for reporting retriesr   z. Giving up after z retriesr   z
. RetryingNz %sr-  r   z)...)r   z	Sleeping z.2fz seconds ...)r   r   r   r]  ru  rS  rP  rY  r
  r  r<  sleep)	r\  r  r  
sleep_funcr  rK  r.  rm   delays	            r   report_retryzRetryManager.report_retry  s     7?MRUVYus"4UQYKxHIi\abefgbh\iiG7N>*;qww/=1::sCAs*\&$>?r%'RVWX:B::Nj51956T^9U3K|45JJu r   )r   r   r   r  r[  r  r   r  re  r.  setterr  r]  r  r   r   r   r  r    sj     OGVKN  
 \\ L IMVZ  r   r  c                 p    t        | t              r| n| j                         }|j                          d| S )Nr:  )r   r   ie_keyr  )rU  rT  r  s      r   make_archive_idr    s0    b#&RBIIKFllnQxj))r   c                 r    |dkD  r|dk\  sJ | t        |       ||z   k  r| S | d |dz
    d|r| | d   S d S )Nr,  r   r  r   r_  )rZ  leftrights      r   truncate_stringr    s_    !8
""yCFdUl*	l^3Uq%z;<<;<<r   )	use_regexr   c                8   d|v sJ d       t        |xs g       }| D ]  }|j                  d      }|r|dd  }||v rB|s||   n+||   D cg c]  }|j                  d      r|dd  nd|  c}}t        |||      }a|r;t        t	        j
                  |t        j                        j                  |d         n||d   v r|gnd }|t        |      |r#|D ]  }	|	|v s|j                  |	       |	|v r |j                  |        t        |      S c c}w )Nr  z"all" alias is requiredra  r   )r   )r  rN  orderedSet_from_optionsrD  r   r-  Ir  r  r   r  r  )
r$  
alias_dictr  r   	requestedr   discardr  currentr  s
             r   r  r    sL   J9 99U[b!I &..%ab'C*)0*S/AKC7R<=c*!"!A377RC 0ZyQIQZ6"**S"$$/99:e;LM!$
5(9!9t 	?S/! +i'$$T* i'+ W%-&0 i  %7Rs   
"Dc            
       T   e Zd ZdZdZdZi dddg ddd	ddg d
dddddg ddddddg ddddddddddddddddddddd d!ddd"d#d$ d%d&ddd'd(ddd)d*d+d,d	d)d*d-d.d/d0d1d2d3d/d1d4d5d6d7id8d7d9d:d;d<d=d:d>d6d?ii d@d6d?idAd6d?idBd?dCd:dDd6d?idEd6d?idFd6d?idGd6d?idHd/dId1d2dJdKd#dLdMd"dNd?dO dPdQd"dRd7dS dPdTdKdUdLdVd"dWdX dYd=dZd;dLd[dZd&dLd0dZd.dLdIdZdHdLi ddZddLd9dZd8dLdCdZdBdLd\dZdVdd]d^dZdVdd]d_dZdTdd]d`dZdMdd]dadZdDdd]dbdZdEdd]dcdZdFdd]dddZdAdd]dedZdQdd]dfdZdGdd]ddZddd]ddZddd]dgdZddd]dhdZd	dd]dZd(dd]dZd(dd]dZd,dd]dZd,dd]dZd&dd]dZd&dd]diZdj Zdk ZdsdlZ	dm Z
dn Zdo Zdp Zdq Zyr)tFormatSorterzT *((?P<reverse>\+)?(?P<field>[a-zA-Z0-9_]+)((?P<separator>[~:])(?P<limit>.*?))?)? *$)hidden
aud_or_vidhasvidie_prefrC  qualityr>  fpszhdr:12zvcodec:vp9.2channelsr@  sizer  asrprotor  hasaudsourcer   )r  rC  r  tbrfilesizevbrr=  r<  r  vextabraextr  	fs_approxr  r   r?  orderedT)zav0?1zvp0?9.2zvp0?9[hx]265|he?vc?z[hx]264|avczvp0?8z	mp4v|h263r+  r   Nr>  )rY  r  orderr@  )z[af]laczwav|aiffr3  z
vorbis|oggr  zmp?4a?r  zac-?4z	e-?a?c-?3zac-?3dtsr   Nr>  rG  rA  )r  z(hdr)?12z
(hdr)?10\+z(hdr)?10hlgr   sdrN)rY  r  r
  r  r  r  )
z	(ht|f)tpsz	(ht|f)tp$zm3u8.*z.*dashwebsocket_fragzrtmpe?r   zmms|rtspzws|websocketf4r  	video_ext)r  r  r  r  r   r>  )r  r  r  r  r   r>  )rY  r
  r  
order_freer  	audio_ext)r  r  r  r  r3  web[am]r   r>  )r  r3  r  r  r  r  r   r>  )rY  r  r
  r  r  r  F	extractori)visibleforcedrY  r  r  multiplerC  c                 8    t        t        d | D                    S )Nc              3   &   K   | ]	  }|d k7    yw)r>  Nr   )r  rm  s     r   r  z(FormatSorter.<lambda>.<locals>.<genexpr>6  s     5Naa6k5Nr  )r  r  r  s    r   r  zFormatSorter.<lambda>6  s    c#5N25N2N.O r   )r  r  rY  r
  functionr  )priorityrY  r  boolean)r>  )r  r
  rY  not_in_listr  )r
  rY  r  rC  r  language_preferencerJ  )convertr
  r   r  )r  r   r  r  r  r  filesize_approx)r  r
  r   r  	format_idr=  
float_noner<  r  r  audio_channelsr  r  r  r  r  source_preferencecodeccombined)rY  r
  r  )r  r  r  c                 .    t        t        d |       d       S r   nextrD  r  s    r   r  zFormatSorter.<lambda>K  s    d6$+;T&B r   )rY  r
  r  r  r  )r  r  c                 .    t        t        d |       d       S r   r  r  s    r   r  zFormatSorter.<lambda>M  s    VD"-=t(D r   r  )r  r  r>  )r=  r<  c                 :     d t        t        d |                   S )Nc                      | rt        |       S dS r   )r  )r~
  s    r   r  z'FormatSorter.<lambda>.<locals>.<lambda>P  s    A#a& 1 r   )r)  rD  r  s    r   r  zFormatSorter.<lambda>P  s    (DeFSWY[L\F]'^ r   )rY  r
  r  alias
preference	dimension)rY  r
  
deprecated
resolution	extensionbitratetotal_bitratevideo_bitrateaudio_bitrate	frameratefilesize_estimate
sampleratevideo_codecaudio_codec)r  	has_videor  	has_audior  extractor_preferencec                     || _         g | _        | j                  | j                   j                  |       |j                  j	                  d      r&| j                  | j                   j                         y y )Nverbose)r  _orderevaluate_paramsr  r  print_verbose_infowrite_debug)r   r  field_preferences      r   r   zFormatSorter.__init__r  sV    TXX__.>?::>>)$##DHH$8$89 %r   c                 `   || j                   vr3|dv ry| j                  j                  d| d       i | j                   |<   | j                   |   }||vrV|j                  d      }|dk(  r|dk(  rdn|d	v r|fn|}n*|d
k(  r|dk(  rdn|rdnd}nddg ddj                  |d       }|||<   ||   S )N)r  r  FzUsing arbitrary fields (zI) for format sorting is deprecated and may be removed in a future versionrY  r
  r  r  )r  r  r  r  r  float_stringr<  Tr   )rY  r  r  r  )settingsr  deprecated_featurer  )r   r
  r   propObjrY  r   s         r   _get_field_settingzFormatSorter._get_field_settingy  s    %,,HH''*B5' J\ )\ ]#%DMM% --&g;;v&Dg~*.+*=,tWoOoE8uz	!%)Y%6'eNYa#*tbY`aeefikop"GCLs|r   c                    ||sy |j                         }| j                  |d      }|dk(  ry |dk(  r|S |dk(  rt        |      S |dk(  rt        |      S |dk(  r| j                  xr | j                  |d      xs | j                  |d      }| j                  |d      }t        |      }d	|v r|j                  d	      n|d
z   }|r:|8t        |      D ]%  \  }	}
|
s	t        j                  |
|      s ||	z
  c S  ||z
  S |||v r|j                  |      z
  S |z
  S |j                         rt        |      S d| j                  |   d<   |S )Nr  r<  r  r  r  r  r  r  r   r   )r  r  r  r  _use_free_orderr   r  r  r   r   	isnumericr  r  )r   r
  r   convertNone
conversion
order_listr  list_length	empty_posr  r  s              r   _resolve_field_valuez!FormatSorter._resolve_field_value  s   =KKME,,UI>
!!L<' ''7"u%%7".._43J3J5R^3_  Ldhd{d{  }B  DK  eLJ//w?Ij/K02j0@
((,kTUoIU. )* 5 /HAu%!7*Q./ #Y.."*ATj&6&6u&=ddZcdd U|#2:e$Y/r   c           	          |j                  dd       _        |j                  dg        _        | _         fd}t	         fd j
                  D              |j                  dd      r
t	               nt	         fd j
                  D              z   t	         j                        z   t	        |      z    j
                  z   }|D ]  }t        j                   j                  |      }|t        d|z        |j                  d	      }|H j                  |d
      dk(  rH| j                  |d	      }} j                  |d      r" j                  j                  d| d| d       |j                  d      d u}	|j                  d      dk(  }
|j                  d      }|d u} j                  |d
      dk(  }|xr |xr  j                  |d       }|r j                  |d	      n|f}|r|j                  d      n|r|fn	t	               }t        |      }t!        |      D ]#  \  }} |||	|
||k  r||   n
|r|s|d   nd        %  y )Nprefer_free_formatsFformat_sortc                 ,   | j                         } | j                  v ry j                  j                  |        j                  | |      }||dn|||d}| j                  v rj                  |    j                  |       y |j                  | <   y )NF)r  closest
limit_textr  )r  r  r   r  r  rB  )r
  r  r  r  r  r  r   s         r   add_itemz.FormatSorter.evaluate_params.<locals>.add_item  s    KKME#KKu%--eZ@E"$)M5w(	 D
 %e$++D1'+e$r   c              3   H   K   | ]  }j                  |d       s|  yw)r  Nr  r  r
  r   s     r   r  z/FormatSorter.evaluate_params.<locals>.<genexpr>  s!     ^ET5L5LUT\5]%^   ""format_sort_forcec              3   H   K   | ]  }j                  |d       s|  yw)r  Nr"  r#  s     r   r  z/FormatSorter.evaluate_params.<locals>.<genexpr>  s"     iUd>U>UV[]g>h5ir$  z2Invalid format sort string "%s" given by extractorr
  rY  r  r  zFormat sorting alias zB is deprecated and may be removed in a future version. Please use z insteadr  r*  r
  r  r  
same_limitr   r   )r  r  
_sort_user_sort_extractorr)  r   r   r   r  r   r   r  r  r  r   r   r  )r   r  sort_extractorr   	sort_listr  r   r
  r  r  r  r  	has_limithas_multiple_fieldshas_multiple_limitsfieldslimitslimit_countr  r  s   `                   r   r  zFormatSorter.evaluate_params  sg   %zz*?G **]B7-	," ^T\\^^ **%8%@uwidlliik DOO$% (-^'<= @D||L 	  	$DHHTZZ.E}$%Y\`%`aaKK(E}&&uf5@$d&=&=eW&Mu**5,?HH//2Gw O^^c]ddl1n okk),D8Gkk+.#5GW-J"$.I"&"9"9%"HJ"V"+"x0C"xDLcLcdikwLxHx@ST,,UG<Z_YaF.AZ%%c*Xa
}glgnFf+K#F+ $AGW&'+o+4=PfQi"$$/	$r   c                 *   | j                   r$ |ddj                  | j                         z         | j                  r$ |ddj                  | j                        z          |ddj                  | j                  D cg c]  }| j	                  |d      rl| j	                  |d      rdnd|| j	                  |d	      >| j	                  |d
      rdnd| j	                  |d	      d| j	                  |d      dnd c}      z         y c c}w )NzSort order given by user: %sr  z!Sort order given by extractor: %szFormats sorted by: %sr  r  r  r   r  r  r
  r   r  r  r  )r(  r   r)  r  r  )r   r	  r
  s      r   r  zFormatSorter.print_verbose_info  s   ??64??9SST;diiH\H\>]]^+dii 9S (?(?y(Q **5)<C"De &&ul;G "&!8!8	!J#PSS11%F11%AC NPP:Q 9S /T T 	U 9Ss   =BDc                 r   | j                  |d      }| j                  |d      }| j                  |d      }|dk(  r| j                  |d      }||Z||k\  rUd}nR|dk(  r5| j                  |d      }	| j                  |d	      }
|	||	v r|
||
vrd
nd}n|dk(  r| j                  ||d      }t        || j                  |d            }| j                  |d      dk7  xr |d u}|r|}|dS |sd|d
fS |rd
t        ||z
         |r||z
  fS ||z
  fS |s|||k  rd
|d
fS ||r||k(  s||kD  rd
| d
fS d|d
fS )Nr  r  r  r  r  rJ  r  in_listr  r   r  Tr   rl  r  r  )ir   r   )r  r  r  abs)r   r  r
  rY  r   r  r  r  maximumr4  r  val_numis_nums                r   &_calculate_field_preference_from_valuez3FormatSorter._calculate_field_preference_from_value  s   ))%;))%;''w7;--eU;G}!4'9IY--eY?G11%GK"?ew.>[EX\ait\tA|~EY--eUDAE  t/F/Fui/XY((	:hF^7Z^K^E!M 	%*0a]	%^ea#eem,,weemZ	%LQTYMZ	% +2u}QVa]	% (-}Ue^X]`eXea%^		%
 %^	%r   c                       j                  |d      } fd|dk(  r6d} j                  |d      }  j                  |d      fd|D              }n |      } j                  |||      S )NrY  c                 F    j                  j                  | d            S )Nr
  )r  r  )r  r  r   s    r   r  z:FormatSorter._calculate_field_preference.<locals>.<lambda>  s    fjj)@)@G)LM r   r  r
  r  c              3   .   K   | ]  } |        y wr   r   )r  r  	get_values     r   r  z;FormatSorter._calculate_field_preference.<locals>.<genexpr>  s     >cPQy|>cs   )r  r9  )r   r  r
  rY  actual_fieldsr   r=  s   ``    @r   _calculate_field_preferencez(FormatSorter._calculate_field_preference  s{    &&uf5M	:D 33E7CM>D++E:>>cUb>ccEe$E::65$PUVVr   c                     j                  d      st              d<   j                  d      sdv rt        d         d<   j                  d      dk(  r$j                  d      dk7  rd   ndd<   dd<   nd   d<   dd<   j                  d	      Bj                  d      d
k(  r.t        j                  dj                  d      xs d      rdd	<   j                  d      dk(  rdd<   j                  d      dk(  rdd<   j                  d      s)j                  d      dk7  rt        fd      xs d d<   j                  d      s)j                  d      dk7  rt        fd      xs d d<   j                  d      st        fd      xs d d<   t         fd j                  D              S )Nr  r  r  r?  r>  r@  r  r  r  r  r  r   ir   r  r  c                       d    d   z
  S )Nr  r  r   r  s   r   r  z3FormatSorter.calculate_preference.<locals>.<lambda>9      VE]VE]-J r   c                       d    d   z
  S )Nr  r  r   rB  s   r   r  z3FormatSorter.calculate_preference.<locals>.<lambda>;  rC  r   r  c                       d    d   z   S )Nr  r  r   rB  s   r   r  z3FormatSorter.calculate_preference.<locals>.<lambda>=  rC  r   c              3   B   K   | ]  }j                  |        y wr   )r?  )r  r
  r  r   s     r   r  z4FormatSorter.calculate_preference.<locals>.<genexpr>?  s     ^T55feD^s   )r  r  r  r   r   rg  r)  r  )r   r  s   ``r   calculate_preferencez!FormatSorter.calculate_preference  s   zz*%!3F!;F: zz% Uf_)&-8F5M::h6)39::h3G63Q&-W]F;"(F;"(-F;"(F; ::l#+

50AU0JrxxXhjpjtjtu}j~  kE  CE  PF $(F<  ::h6)F5M::h6)F5Mzz% VZZ%9V%C$%JKStF5Mzz% VZZ%9V%C$%JKStF5Mzz% $%JKStF5M^RVR]R]^^^r   Nr  )r   r   r   r  r   ytdl_defaultr  r   r  r  r  r  r9  r?  rG  r   r   r   r  r    s   cENG8LL9t MNL 	9t Z[L
 		D?^`L 	)dZ LML 	[CHJL 	TKUZ\L 	et[QVWL  	%4 4#OQ!L& 	k:'L( 	th	Zcd)L* 	Hi	R+L, 	G.CPRS-L. 	w26/L0 	Y(1L2 	3DE3L4 	([95L6 	9l+7L8 	)\*9L: 		<(;L< 	7GH=L> 		<(?L@ 		<(ALB 		<(CLD 		<(ELF 	g0CPRSGLJ 	*/CDKLL 	z,AlBDMLP 	.GT[DFQLT 	
-=>ULV 	
-@^`WL^ 	g5_L` 	w;aLb 	&AcLd 	gAeLf 	Ww7gLh 	GkBiLj 	7Z@kLp 	gTJqLr 	wdKsLt 	gTJuLv 	Gd$GwLx 	'ENyLz 	'EN{L| 	'EN}L~ 	gTJL@ 	gdSALB 	wdKCLD 	gdKELF 	gdKGLH 	($OILJ 	($OKLL "HDI%M!HDI%M%	N)09TX YWLH\:& D6$pU%:
W#_r   r  c                 .    | |yt        || z  dz        S )z
    @param tbr:      Total bitrate in kbps (1000 bits/sec)
    @param duration: Duration in seconds
    @returns         Filesize in bytes
    Ng     @_@r  )r  r  s     r   filesize_from_tbrrJ  B  s%     {h&x#~*++r   c                   D    e Zd ZddZd Zd ZdddZdd	d
Zd Zd Z	y)
_YDLLoggerNc                     || _         y r   )_ydl)r   r  s     r   r   z_YDLLogger.__init__O  s	    	r   c                 T    | j                   r| j                   j                  |       y y r   )rN  r	  r   messages     r   debugz_YDLLogger.debugR  s     99II!!'* r   c                 T    | j                   r| j                   j                  |       y y r   )rN  r  rP  s     r   r  z_YDLLogger.infoV       99II( r   F)oncec                V    | j                   r| j                   j                  ||       y y r   )rN  r  )r   rQ  rU  s      r   r  z_YDLLogger.warningZ  s"    99II$$Wd3 r   Tis_errorc                X    | j                   r| j                   j                  ||       y y )NrW  )rN  report_error)r   rQ  rX  s      r   r.  z_YDLLogger.error^  s%    99II""7X"> r   c                 T    | j                   r| j                   j                  |       y y r   )rN  	to_stdoutrP  s     r   rh  z_YDLLogger.stdoutb  rT  r   c                 T    | j                   r| j                   j                  |       y y r   )rN  	to_stderrrP  s     r   r  z_YDLLogger.stderrf  rT  r   r   )
r   r   r   r   rR  r  r  r.  rh  r  r   r   r   rL  rL  N  s/    +) (- 4 *. ?))r   rL  r   r  )r   F)rB  )TNr  )unknown_video)r  r_   )r_   F)r  r(  )z%d%s)r<   )r   NNr   )r   r   N)r_   N)Nr  )r   Nr   )Fr   F)r  r  N)r   )r   (t  r  r`
  r  r6  r   collections.abcr~   r  r  email.headerrx  email.utilsro  r
  r
  html.entitiesr   html.parserrc  re  r  rz   rb   r  r  netrcr  rv   r}   rW  r   r  rK
  r3  rQ  r!  r|   rt   r<  rQ  typesr  urllib.errorr  urllib.parseurllib.requestxml.etree.ElementTreer  r   r   compatr   r   r   r	   r
   dependenciesr   r   r  rY  r-  compiled_regex_typer   r   rG  rB  r  r'  r  rW  r  DATE_FORMATSr  r  r  r  rv
  
JSON_LD_REr  r`  rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"  r*  r4  r7  r=  JSONDecoderr?  rv  r  r  rq  r  r  r  r  r  r   r  r  r  r)  
namedtupler3  r8  r>  rF  re   rH  r   rg  rl  ro  rt  rw  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r5  r9  rB  rG  r`  rH  rO  rT  r   rl  r^  r
  rd  	StructurerX  r
  rd  ri  r_  rb  ra  POINTERargtypesBOOLrestypert  rk  rl  rr  rv  rx  rP  rm  r  r   	maketransr  r  r  r  r  r  r  r  r  r0  r7  r>  r@  rE  rI  rM  rZ  r  r]  r`  rd  rf  rh  rj  rq  ru  r6  r  r|  r~  r  r  r  r  r  r  r  r  r  r  r\  Sequencer  r  r  r  r  r9  r=  r  rH  rJ  rO  rQ  rU  rZ  Iterabler`  r  rg  rk  rp  rv  rx  r  r  r  r  r  r  POSTPROCESS_WHENDEFAULT_OUTTMPLOUTTMPL_TYPESSTR_FORMAT_RE_TMPLSTR_FORMAT_TYPESr  r7  r  r  r  r  r  r  rI  rj  rr  ru  ry  r{  r}  r  r  r  r  r  r  r  r  r  r&  r+  r/  r3  r;  r?  rA  r  rG
  rY
  r^
  rf
  rk
  rn
  rp
  rr
  rz
  r
  r
  r
  r
  r
  r
  r
  DOT_URL_LINK_TEMPLATEDOT_WEBLOC_LINK_TEMPLATEDOT_DESKTOP_LINK_TEMPLATELINK_TEMPLATESr
  r
  rY  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r=  r
  r
  r  r  r]  r  r  r  r  r  rY  re  rg  r  SimpleNamespaceru  MEDIA_EXTENSIONSr  r  r  r  r  r  r  r  r  r  r  rJ  rL  r   r   r   <module>r     s                   	        	   	   
   
             !??3"1% :2::b>* 	 	F 
 MV
 Aaabbbbb C  c'	4&:NQUPVX`cgimbn(04&:NQUPVX`cgbhjmop q+Z l+     	 	  -     !  Ds
	  4	 %)z . "&UJ  '+% 
>
C
)))
)
""`
\
 LWei 
6'8$++"8"8 '8V >F	,$++00 	,$++00 "* %9)) %9P$N %* 4n;6 !' (	14
 "' 	.:G, ,GIJ GIT: $[##F,[\
-A
2	#Y 	#)%^ )%X~ 	 	

# 
#O. O!N !$ $#N #. ' '
d, d
`, `
Q+ Q
!N !3 3#N #!> !* * 	N 	4<0"M 0WB
W'MT	V)A$#I #IL  &  . )- J !U  $-#g # <<7
V%% 
 v}}Z(H$$Jz"J  --J((Lz"L "??//LIJiN,		&	A > >B 9 9
 }}5%?@ ==	   
"    % $%T %I
 D-N): $) 2"8JEK*
6,,$18k&5Gp"  "   +m#2G	HV${'' V$r() ()V&	 &R$ $4E EPM6&B %) ;(/,< '2oo&>&>j M ) L $(b Q 5 8 (9':8 P
 

	

  $$  N Nb B  ,T
  ##"  & 7#
* ( X%v/'T GK &3R .8 D(U%G-,@M=`	>6'S 'ST
lGH
eP:`K 35 ( 6:2RV 
FK" K"\D2 D2NAD ADP<""/
$@>25j	 
	   !(&'YX !4
BU]  2,  
p	SC-
@ 13   *T1%t 	 	.@ $O4 2 "% 6,S7$j5 j5Z\
"   (B B$%%% % <
KT
p%*3	    *77 7    *77 7 b%++b.>.D.DbGWGaGab 5 5p*
= ?D4 !>e_ e_P	,) )ky  ,	,	,,s   4
l l%$l%