a
    h                     @   s  d dl Z e jdk redd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mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE ddlFmGZG ddlHmHZH d)ddZIdd ZJdd ZKdd ZLdd ZMdd ZNeOdd ZPd*d!d"ZQd+d#d$ZRd,d%d&ZSdd'lmTZTmUZU g d(ZVdS )-    N)   	   zjYou are using an unsupported version of Python. Only Python versions 3.9 and above are supported by yt-dlpzThe Unlicense   )SUPPORTED_BROWSERSSUPPORTED_KEYRINGSCookieLoadError)get_external_downloader)list_extractor_classes)MSO_INFO)ImpersonateTarget)IN_CLIplugin_dirs)	parseOpts)load_all_plugins)	FFmpegExtractAudioPPFFmpegMergerPPFFmpegPostProcessorFFmpegSubtitlesConvertorPPFFmpegThumbnailsConvertorPPFFmpegVideoConvertorPPFFmpegVideoRemuxerPPMetadataFromFieldPPMetadataParserPP)Updater)
NO_DEFAULTPOSTPROCESS_WHEN	DateRangeDownloadCancelledDownloadErrorFormatSorterGeoUtilsPlaylistEntriesSameFileErrordownload_range_funcexpand_pathfloat_or_noneformat_fieldint_or_nonejoin_nonemptymatch_filter_funcparse_bytesparse_durationpreferredencodingread_batch_urls
read_stdinrender_tablesetproctitleshell_quotevariadicwrite_string)_UnsafeExtensionError)	YoutubeDLc                 G   s"   |D ]}t j| qt| d S N)sysstderrwrite
SystemExit)statusargsmsg r>   D/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/__init__.py_exitE   s    r@   c                    s   g }|durzRt |dkr,t|dkr&dndntt|ddd}|dkr\td	t| d
  W n" ty   td| d Y n0 t   fdd||  D S )z>
    @param verbose      -1: quiet, 0: normal, 1: verbose
    N-ZURLszutf-8ignore)encodingerrorsr   z[debug] Batch file urls: 
zERROR: batch file z could not be readc                    s.   g | ]&}t |tr"|  d n| qS rC   )
isinstancebytesstripdecode.0urlZ_encr>   r?   
<listcomp>Z   s   zget_urls.<locals>.<listcomp>)	r-   r.   openr$   r3   reprOSErrorr@   r,   )urls	batchfileverboseZ
batch_urlsr>   rO   r?   get_urlsK   s    
rW   c                    s  d}| j rddlm} t|d}t| jD ]|}||j| sBdnd d 7 }||krjdd |	 D }n&t
t|j| }|t|d	 |dd
d |D 7 }q,nZ| jrd d fddt| jD }n0| jrdtddgdd t	 D }ndS t|tjd d	S )N r   )	GenericIEFz (CURRENTLY BROKEN)rF   c                 S   s   g | ]\}}|s|qS r>   r>   )rM   rN   matchedr>   r>   r?   rP   i       z/print_extractor_information.<locals>.<listcomp>Tc                 s   s   | ]}d | dV  qdS )z  rF   Nr>   rL   r>   r>   r?   	<genexpr>m   r[   z.print_extractor_information.<locals>.<genexpr>)zcute kittenszslithering pythonszfalling catzangry poodlezpurple fishzrunning tortoisezsleeping bunnyzburping cowc                 3   s.   | ]&}|  r|jd ur|jd  dV  qdS )F)ZmarkdownZsearch_examplesN)workingZIE_DESCdescription)rM   ieZ	_SEARCHESr>   r?   r\   p   s   zSupported TV Providers:
{}
Zmsozmso namec                 S   s   g | ]\}}||d  gqS namer>   )rM   Zmso_idZmso_infor>   r>   r?   rP   v   r[   )out)list_extractorsZextractor.genericrY   dictfromkeysr	   	age_limitZIE_NAMEr]   itemstuplefilterZsuitablekeysupdatejoinZlist_extractor_descriptionsZap_list_msoformatr/   r
   r3   r7   stdout)optsrT   rc   rY   r_   Zmatched_urlsr>   r`   r?   print_extractor_information_   s0    
rq   c                    s&  fdd d fdd	}|ddd |d	d
 |dd dj v r\jrV d nd_dj v rvjtj ndj v rjtj dj v rjd u rd_n d |ddddd}|ddddd}|du r|du r d dj v r"j	dd u rj
ddi n d d S )Nc                    s2   |  j vrdS  j |   j d|  g dS )NF*T)compat_optsdiscardrl   ra   rp   r>   r?   _unused_compat_opt~   s
    
z+set_compat_opts.<locals>._unused_compat_optTc                    sX   t |}| jv r@|d u r.t||  dS |r: |  dS n|d u rTt|| d S )NTF)getattrrs   setattr)Zcompat_nameopt_namedefaultremove_compatattrrv   rp   r>   r?   set_default_compat   s    

z+set_compat_opts.<locals>.set_default_compatzabort-on-errorignoreerrorsZonly_downloadzno-playlist-metafilesallow_playlist_fileszno-clean-infojsonclean_infojsonzno-attach-info-jsonFzformat-sortzprefer-vp9-sortzmtime-by-defaultZmultistreamsallow_multiple_video_streams)r{   allow_multiple_audio_streamsfilenamerz   z%(title)s-%(id)s.%(ext)s)TT)rs   embed_infojsonformat_sortextendr   Zytdl_defaultZ_prefer_vp9_sort
updatetimeouttmplgetrl   )rp   r~   Z_video_multistreams_setZ_audio_multistreams_setr>   r}   r?   set_compat_opts}   s2    







r   c           #   
      s$  ddddćfdd	}fdd}dŇfdd		dd
d}t ttjjjfdkddd jd u pxjd uddd jd u pjd uddd |dj	t
d dj djd djd djd jdkr|jjdd dj dj dj dj jd u rVjd u d d!d n&jd u rlj_n|jjd jd urttg jd"dd ^}}}|d uo|d u od"jv  d#j |||d# ||f_jD ]}|d$|tj qjd%krd _jd%kr*d _|d&jd'd(ttj t!j" |d)j#t$j% |d*jt&j" |d+jt'j% |d,j(t)j% |d-j*t+j% j,r҈j,-d.-d/_,d0t.t/j,d1d2 fd3d4}|d5j0_0|d6j1_1|d7j2_2|d8j3_3d9d: }	j45 D ]X\}
}|sDj4|
= q*z|	|j4|
< W n( t6y~   t7d;|
 d<|Y n0 q*dǇfd=d>	}|d?j8d_8|d@j9_9|dAj:_:|dBj;_;|dCj<d_<|dDj=_=dEdF }j>5 D ]\}}||| dG qj?5 D ]&\}}|D ]}||| dH q0q$j@5 D ]:\}}|D ]*\}}||| dI ||| dJ qbqV|jAdK jB5 D ]@\}}dL|v r|d dM  dNn| dO}||| dP qj>CdQ}|dRkrd _Dj>dQ= ddSdT}|dUjE\_E_F}tG|dVjHd _HjIrd }tJdWjI}|d u rvt7dXjI |KdYdZd[d\\}}}}|L }|tMvrt7d]| d^d_tNtM |d ur|O }|tPvrt7d`| dad_tNtP ||||f_IjQd ur$tRSjQL _Qdbdc  jTd urTjUVddg WdejT   fdfdgjU5 D _UjX_XjXd u rdQg_XjYd urztZt[\jY W n< t]y } z"t7dhjYdi| W Y d }~n
d }~0 0 dj\_^__j`L dkvr^ztabj` W n& t]y:   t7dlj` dmY n0 tcj`dnkrVj`_^nj`__j`L dok_`tdjejf_ejgd urthjg_gjid urthji_ijjd urʈjkVdpjj jld urjkVdqjl jmrtn  _o_pd }jq5 D ]f\}}|drkr q
tr|}|d u rVt7dsts|d dtdQdu dv| dmn|r
|dQkr
|t }q
juv D ] }|dwvr|t7dm| dxq|g g  } jdykrĈWdzd{ jd|krWdzd} dɇfd~d	}!|!djwdQ|d	r|	rjwV|jwxdQ |!djyddQ	rBjyxdjydQ< ddtztzdffdd	}"|"dddd |"dddd |"dddd |"ddddd d2 |"ddddd d2 |"ddddj{Cdd |"ddddj>CdQd |"dddd |"dd |"dd |"dd |"dd |"dd |"dd |"ddj|dvdod |"dd |"dUdg d2 |"dd |"ddtn d2 |"dd t}d
r| Wdd_j~ d `~j
rtjntjj_j
r܈jj{d< j
rdj>dQ< j
rd_jsjorjd u rd_jr@js@jd u r@d_jrzjd u rzjszjrtjstjrzd_jrjsjsd_jrjd u rd_jd urֈjd u rtd_jd urjd u rtd_djv rWd dddt_| fS )Nc                 S   s"   | rdS t |pdj||dd S )NTzinvalid {name} "{value}" given)rb   value)
ValueErrorrn   )Zcndnrb   r   r=   r>   r>   r?   validate   s    z"validate_options.<locals>.validatec                    s    |d u p||v | ||S r6   r>   )rb   r   rh   r=   r   r>   r?   validate_in   s    z%validate_options.<locals>.validate_inc                    s    |d u pt ||| |S r6   )rematch)rb   r   regexr   r>   r?   validate_regex   s    z(validate_options.<locals>.validate_regexFc                    s4    |d u p|dkp| o|dk| |d|r,dnd S )Nr   z!{name} "{value}" must be positiverX   z or 0r>   )rb   r   strictr   r>   r?   validate_positive   s    z+validate_options.<locals>.validate_positivec              	   S   sZ   |d u s| d u s|| krd S |s6d| d|  }}t | d| d| d|  dd S )Nzmin zmax  "z+" must be must be greater than or equal to ")r   )Zmin_valZmax_valZmin_nameZmax_namer>   r>   r?   validate_minmax   s
    z)validate_options.<locals>.validate_minmaxr   z.netrczJ{name}, netrc command and username/password are mutually exclusive options)r=   zaccount usernamez{name} missingzTV Provider account usernamezTV ProviderzWUnsupported {name} "{value}", use --ap-list-mso to get a list of supported TV Providerszautonumber startzautonumber sizeTzconcurrent fragmentszplaylist startrB   zplaylist endzsubtitles sleep intervalzrequests sleep intervalzsleep intervalzmax sleep intervalzmin sleep intervalz2{name} must be specified; use --min-sleep-intervalrA   ztime range to wait for videozformat sortingnonezmerge output formatz({0})(/({0}))*|zaudio formatzsubtitle formatzthumbnail formatzrecode video formatzremux video formatkKzaudio qualityr   )rz   c              	      sf   |d u rd S |dv rt dS zt|}W n( ttfyP    d|  d| Y n0 |  d| |S )NinfZinfiniter   Fz retry count)floatint	TypeErrorr   )rb   r   Z	int_valuer   r   r>   r?   parse_retries  s    z'validate_options.<locals>.parse_retriesdownloadfragment	extractorzfile accessc                    s   d}g t td| d| d| d|   d d R ^}}|dkr`fddS |shrlnd	  fd
dS d S )Nz\d+(?:\.\d+)?z(?:(linear|exp)=)?(z)(?::(z	)?)?(?::(z))?expc                    s&   t ttpd|   t p dS )N   r   minr   n)limitstartstepr>   r?   <lambda>  r[   z<validate_options.<locals>.parse_sleep_func.<locals>.<lambda>r   c                    s&   t ttp |   tp dS )Nr   r   r   Zdefault_stepr   r   r   r>   r?   r   !  r[   )ri   r   	fullmatchrJ   groups)expr	NUMBER_REop_r>   r   r?   parse_sleep_func  s    
z*validate_options.<locals>.parse_sleep_funcinvalid z retry sleep expression c                    s8   |d u rd S t |} |d u| | |r4| |d |S )NT)r*   )rb   r   Zstrict_positiveZnumeric_limitr   r>   r?   validate_bytes-  s    z(validate_options.<locals>.validate_bytesz
rate limitzthrottled rate limitzmin filesizezmax filesizezbuffer sizezhttp chunk sizec                 S   s,   t | }|r(td| d|  d| d S )Nr   r   z": )r5   validate_outtmplr   )tmplr=   errr>   r>   r?   r   >  s    
z*validate_options.<locals>.validate_outtmplz output templatez print templatez print to file templatez print to file filenamezSponsorBlock chapter titlez-titleiz console titlez	 progressz	 templaterz   rX   c                 S   s  dd }d}g g d  }}}|p"g D ]}|r>|dkr>d}q$nb| dsz|t| W q$ tjy }	 z&td|  d	| d
|	 W Y d }	~	q$d }	~	0 0 q$ttj|dd  	dD ]}
|
dkot
||
}|o||dpd||dpdg}|o|d|df}d }	d |p&d gv r2d}	nh|sHt|rHd}	nR|d  |d r^dnd9  < |d  |d r|dnd9  < |d tdkrd}	|	rtd|  d| d|	 || qq$|||fS )Nc                 S   s   | dv rt dS t| S )Nr   r   )r   r+   )xr>   r>   r?   r   W  r[   z:validate_options.<locals>.parse_chapters.<locals>.<lambda>z(?x)(?:
            (?P<start_sign>-?)(?P<start>[^-]+)
        )?\s*-\s*(?:
            (?P<end_sign>-?)(?P<end>[^-]+)
        )?Fz	*from-urlTrr   r   z regex "z" - r   ,rA   r   0endr   Z
start_signZend_signz Must be of the form "*start-end"z#Negative timestamps are not allowedr   rB   z-infz"-inf" is not a valid endz time range "z". )
startswithappendr   compileerrorr   mapstrrJ   splitr   groupanyr   )rb   r   ZadvancedZparse_timestampZTIMESTAMP_REZchaptersrangesZfrom_urlr   r   Zrange_mobjZdurZsignsr>   r>   r?   parse_chaptersV  s<    
0 (z(validate_options.<locals>.parse_chaptersz--remove-chaptersz--download-sectionsz(?x)
            (?P<name>[^+:]+)
            (?:\s*\+\s*(?P<keyring>[^:]+))?
            (?:\s*:\s*(?!:)(?P<profile>.+?))?
            (?:\s*::\s*(?P<container>.+))?
        z(invalid cookies from browser arguments: rb   keyringprofile	containerz,unsupported browser specified for cookies: "z". Supported browsers are: z, z,unsupported keyring specified for cookies: "z". Supported keyrings are: c                 3   s   t  trbdt  }zt g}W q ty^ } zt| d| W Y d }~qd }~0 0 n*dt  } fdd d dD }|D ]P}ztj	|  W n6 ty } zt| d| W Y d }~n
d }~0 0 |V  qd S )Nz--parse-metadata z is invalid; z--replace-in-metadata c                 3   s(   | ] }t jj|g d d R V  qdS )r   N)r   ZActionsZREPLACE)rM   r   fr>   r?   r\     r[   zCvalidate_options.<locals>.metadataparser_actions.<locals>.<genexpr>r   r   )
rH   r   r1   r   Z	to_action	Exceptionr   r   r   Zvalidate_action)r   cmdactionsr   actionr>   r   r?   metadataparser_actions  s    
*(z0validate_options.<locals>.metadataparser_actionspre_processztitle:c                    s&   i | ]\}}|t tjt | qS r>   )list	itertoolschainr   )rM   r   v)r   r>   r?   
<dictcomp>  s   z$validate_options.<locals>.<dictcomp>zInvalid playlist-items z: )NN)rz   neverzUnsupported --xff "r   r   r   z
User-AgentZRefererZnativezNo such z%s rG   zexternal downloader ")alwaysautozauto-ttyno_colorzno_color-ttyr   z" is not a valid color policybestz.
         )zO"-f best" selects the best pre-merged format which is often not the best optionzdTo let yt-dlp download and merge the best available formats, simply do not pass any format selectionztIf you know what you are doing and want only the best pre-merged format, use "-f b" instead to suppress this warningZmp4)zR"-f mp4" selects the best pre-merged mp4 format which is often not what's intendedzbPre-merged mp4 formats are not available from all sites, or may only be available in lower qualityzYTo prioritize the best h264 video and aac audio in an mp4 container, use "-t mp4" insteadzuIf you know what you are doing and want a pre-merged mp4 format, use "-f b[ext=mp4]" instead to suppress this warningc                    s<   ||v r8||vr8  |   d|p,d|  d  dS dS )NzI arguments given without specifying name. The arguments will be given to zall sTF)r   title)rb   r   key1key2where)warningsr>   r?   report_args_compat  s    z,validate_options.<locals>.report_args_compatzexternal downloader)r   zpost-processorzdefault-compatz--allow-unplayable-formatsallow_unplayable_formatsc                    sV   |t u rt |}|sd S |t u r,t |}|rF|  d| d t || d S )Nz is ignored since z
 was given)r   rw   r   rx   )Zarg1opt1Zarg2opt2val1val2rz   )rp   r   r>   r?   report_conflict  s    

z)validate_options.<locals>.report_conflictz--playlist-reverseplaylist_reversez--playlist-randomplaylist_randomz--lazy-playlistlazy_playlistz--dateafter	dateafterz--datedatez--datebefore
datebeforez--exec-before-downloadexec_before_dl_cmdz"--exec before_dl:"exec_cmd	before_dl)r   z--iduseidz--outputr   z--remux-video
remuxvideoz--recode-videorecodevideoz--embed-metadataaddmetadataz--embed-chaptersaddchaptersz--embed-info-jsonr   z--embed-subsembedsubtitlesz--embed-thumbnailembedthumbnailz--extract-audioextractaudioz--fixupfixup)Nr   rC   )r   rz   remove_chaptersz--sponsorblock-removesponsorblock_removez--xattrsxattrs_deprecated_optionsz,The following options have been deprecated: z
Please remove them from your command/configuration to avoid future errors.
See  https://github.com/yt-dlp/yt-dlp/issues/14198  for more detailsz%(id)s.%(ext)szbestaudio/bestZ	if_existsz*Type account password and press [Return]: z6Type TV provider account password and press [Return]: zallow-unsafe-extzNUsing allow-unsafe-ext opens you up to potential attacks. Use with great care!c                 S   s   | S r6   r>   )r   prependr>   r>   r?   r   f  r[   z"validate_options.<locals>.<lambda>)NN)N)F)N)F)F)NN)F)sumr   boolusenetrc	netrc_cmdusernamepasswordap_passwordap_usernameap_msor
   autonumber_startautonumber_sizeconcurrent_fragment_downloadsplayliststartplaylistendsleep_interval_subtitlessleep_interval_requestssleep_intervalmax_sleep_intervalwait_for_videor+   r   r   r   r   convertsubtitlesconvertthumbnailsmerge_output_formatrn   rm   r   escaper   SUPPORTED_EXTSaudioformatr   Z	FORMAT_REr   r   r   r   r   r   audioqualityrJ   r'   r%   retriesfragment_retriesextractor_retriesfile_access_retriesretry_sleeprh   AttributeErrorr   	ratelimitthrottledratelimitmin_filesizemax_filesize
buffersizehttp_chunk_sizer   
forceprintprint_to_filesponsorblock_chapter_titleprogress_templater   skip_downloadr  remove_rangesr#   download_rangescookiesfrombrowserr   r   lowerr   sortedupperr   impersonater   Zfrom_strZmetafromtitleparse_metadata
setdefaultr   r   playlist_itemsri   r!   Zparse_playlist_itemsr   geo_bypass_countrygeo_bypass_ip_block
geo_bypassr    Zrandom_ipv4lenr)   match_filterZbreaking_match_filterdownload_archiver$   ffmpeg_location
user_agentheadersZrefererZno_sponsorblocksetsponsorblock_markr  external_downloaderr   r&   Zget_basenamecolorvaluesexternal_downloader_argspoppostprocessor_argsr   r   r  hasattrr  r   r   dayr   r   r   r   
overwritescontinue_dlr   r   r  	keepvideogetcommentswriteinfojsonr   dumpjson
print_jsondump_single_jsonallsubtitlesr   writeautomaticsubwritesubtitlesgetpassrs   r4   Zsanitize_extension)#rp   r   r   r   Zmin_waitZmax_waitr   r   r   r   keyr   r   r   r   r   type_Z	tmpl_listfileZouttmpl_defaultr   r   r   Zbrowser_namer   r   r   Zdefault_downloaderprotopathZedpolicydeprecation_warningsr   r   r>   )r   rp   r   r   r   r?   validate_options   s   

 


" 

	&

)






,













$
rc  c                 c   s  | j E d H  | j D ]\}}d||dV  q| j| jB }|rPd|| jddV  | jrfd| jddV  | jr|d	| jddV  | jrd
| j	| j
| jdV  | jrd| jdV  | jrd| jdV  | jrd| jv}d| jo|dV  | js|rd| _| js|rd| j| j| j| j| jdV  | js4| js4| jrJd| j| j| jdV  | jrxd| jdV  | jsxd| _d| jd< | jrd| jdV  | jrddiV  | jdkrd | jd!kd"d#V  | j D ]\}}d$||d%V  qd S )&NZMetadataParser)r\  r   whenZSponsorBlockZafter_filter)r\  
categoriesapird  ZFFmpegSubtitlesConvertorr   )r\  rn   rd  ZFFmpegThumbnailsConvertorZFFmpegExtractAudio)r\  ZpreferredcodecZpreferredqualitynopostoverwritesZFFmpegVideoRemuxer)r\  ZpreferedformatZFFmpegVideoConvertorzno-keep-subsZFFmpegEmbedSubtitle)r\  Zalready_have_subtitleTZModifyChapters)r\  Zremove_chapters_patternsZremove_sponsor_segmentsr3  r0  force_keyframesZFFmpegMetadata)r\  Zadd_chaptersZadd_metadataZadd_infojsonZEmbedThumbnail)r\  Zalready_have_thumbnailrX   Zpl_thumbnailZFFmpegSplitChapters)r\  rh  r\  ZXAttrMetadatar   FFmpegConcatr   playlistr\  Zonly_multi_videord  ZExec)r\  r   rd  ) Zadd_postprocessorsr:  rh   rG  r  Zsponsorblock_apir  r  r  r   r!  rg  r   r   r   rs   rZ  rY  r  r3  r0  force_keyframes_at_cutsr   r   r   r   writethumbnailr   Zsplit_chaptersr  Zconcat_playlistr   )rp   rd  r   Zsponsorblock_queryZ	keep_subsr   r>   r>   r?   get_postprocessorsk  s    




rn  ParsedOptions)parseroptionsrT   ydl_optsc                    s  t | \} }t| j jr& js&dn j}t  zt \}}W n4 tyz } z|| d W Y d}~n
d}~0 0 t	t
 }t jot fddtdd D }t fdddD } jdu r|p jpt j _d	d
 |D }	 jo j o jo jddk}
t j j jd jd|
fsn|	sTd _n|	ddddgkrnd _ jtjv r jn2 jtjv r jn jr jt jv r jnd}t!| | j" j# j$ j% j& j' j( j) j* j+ j, j- j. j j/ j0 j1 j2 j3 j4 j5 j6 j7 j j j8p. j j j9 j:du rR|pV|pVdn j: j; j< j= j> j? j@ jA jB jC jD jE j jF jG jH jI jJ jK jL jM jNpdg jO jP jQ jR jS jT jU jV jW jX jY jZ j[ j\ j] j^du r  jn j^ j_ j` ja jb jc jd je jf jg jddk jh ji jj jk j j j jl jmdu  jmdk jn jo jp jq jr js jt ju jv jw jx jy jz j{ j| j j} j~ j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j|| j j j j j j j j j j j j j j j j j j j j j j j j jpd jdu || jdS )z4@returns ParsedOptions(parser, opts, urls, ydl_opts)rB   rF   Nc                 3   s   | ]}| j vV  qd S r6   )r.  rM   r   ru   r>   r?   r\     r[   z parse_options.<locals>.<genexpr>r   c                 3   s   | ]}t  |V  qd S r6   )rw   rs  ru   r>   r?   r\     r[   )
rU  rW  getdescriptiongetdurationgetfilename	getformatgetidgetthumbnailgettitlegeturlc                 S   s   g | ]}| d dkr|qS )rd  rj  )r   )rM   ppr>   r>   r?   rP     r[   z!parse_options.<locals>.<listcomp>Zpl_infojsonrX   rj  rt   ri  Trk  Zdiscard_in_playlistrz   rA   all)r
  netrc_locationr  r  r  	twofactorvideopasswordr  r  r  client_certificateclient_certificate_keyclient_certificate_passwordquietno_warningsZforceurlZ
forcetitleZforceidZforcethumbnailZforcedescriptionZforcedurationZforcefilenameZforceformatr.  r/  Z	forcejsonrW  force_write_download_archivesimulater2  rn   r   ignore_no_formats_errorr   format_sort_forcer   r   check_formatslistformatslistformats_tabler   outtmpl_na_placeholderpathsr  r  restrictfilenameswindowsfilenamesr   force_generic_extractorallowed_extractorsr(  r)  rP  r"  r%  r#  r$  Zretry_sleep_functionsskip_unavailable_fragmentskeep_fragmentsr  r,  noresizebufferr-  Z
continuedl
noprogressprogress_with_newliner1  progress_deltar  r  ZplaylistreverseZplaylistrandomr   
noplaylistZlogtostderrconsoletitlenopartr   writedescriptionrT  r   r   rS  rm  Zwrite_all_thumbnails	writelinkwriteurllinkwritewebloclinkwritedesktoplinkrZ  rY  rX  listsubtitlessubtitlesformatsubtitleslangs
matchtitlerejecttitlemax_downloadsprefer_free_formatstrim_file_namerV   dump_intermediate_pageswrite_pages
load_pagestestrR  r*  r+  	min_views	max_viewsZ	daterangecachedirrg   rB  break_on_existingbreak_on_rejectbreak_per_urlskip_playlist_after_errors
cookiefiler5  ZlegacyserverconnectZnocheckcertificateprefer_insecureenable_file_urlsZhttp_headersproxysocket_timeoutbidi_workarounddebug_printtrafficdefault_searchdynamic_mpdextractor_argsrD   extract_flatlive_from_startr  mark_watchedr  	final_extpostprocessorsr  source_addressr9  r  r  r  r  rH  r4  rl  list_thumbnailsr<  rA  rI  rC  hls_prefer_nativehls_use_mpegtshls_split_discontinuityrK  rM  geo_verification_proxyr?  r=  r>  r   Zwarn_when_outdated	_warningsZ_deprecation_warningsrs   )r   rW   rU   r  rV   r   rc  r   r   r   rn  r	  r.  r}  r   r   rV  rT  r   r   r   r   r  rW  r/  r   r   r  r   r   r  r   r   ro  r
  r~  r  r  r  r  r  r  r  r  r  r  r  r  r{  rz  rx  ry  rt  ru  rv  rw  rU  r  r  r2  rn   r   r  r   r  r   r   r  r  r  r  r  r  r  r  r  r   r  r  r(  r)  rP  r"  r%  r#  r$  r&  r  r  r  r,  r  r-  rQ  r  r  r1  r  r  r  r   r   r   r  r  r  r   r  rS  rm  r  r  r  r  rZ  rY  rX  r  r  r  r  r  r  r  r  r  r  r  r  rR  r*  r+  r  r  r   r  rg   rB  r  r  r  r  r  r5  Zlegacy_server_connectZno_check_certificater  r  rE  r  r  r  r  r  r  r  rD   r  r  r  r  r  r  r9  r  r  r  r  rH  r4  rl  r  r<  rA  rI  rC  r  r  r  rK  rM  r  r?  r=  r>  r   update_selfrs   )argvrp  rT   r   rb  r   r  Z
print_onlyZany_gettingZplaylist_ppsZwrite_playlist_infojsonr  r>   ru   r?   parse_options  s    &(


 
 r  c              
      s  t d t| \}}}}t||r&d S |jr:tj|j |jt_tjrNt	  t
||jpd|j}|pn|j}|jrj  zJt|j}|jr| r|r|jr| W W  d    S d W n  ty   t  d_Y n0 |jrtddftddftddftd	dftd
dfg} }	dd fdd|	D }
|D ]J\ t fdd|	D sP|
dfdd  dD  qPd t g d|
ddd W d    d S |s|rjW  d    S | d u rt!j"dd  n| }#| |st$j%dkrt&t!ddrdd l'}dd l(}|)d}d|j*j+  }|,|d}t-t!dot$j./t!j01d }|dks|r|dkrt2|3d! |4  t5d |6d" |7  zZ|jd ur|rd# 8t9|jW W  d    S :|W W  d    S W n, t;yZ   d$ Y W d    d%S 0 W d    n1 sr0    Y  d S )&Nzyt-dlpz)Restart yt-dlp to use the updated versiond   ZchromeZ	curl_cffiZsafariZfirefoxzcurl_cffi>=0.10ZedgeZtorzcurl_cffi>=0.11c                 S   s:   t | j | jddpdt | jp"d | jddp4d|gS )NrA   )delimrX   )r(   clientr   versionos
os_version)targethandlerr>   r>   r?   make_row  s    z_real_main.<locals>.make_rowc                    s   g | ]\}} ||qS r>   r>   rM   r  r  )r  r>   r?   rP     r[   z_real_main.<locals>.<listcomp>c                 3   s$   | ]\}}|v o  |V  qd S r6   )r   r  )known_handlerknown_targetr>   r?   r\     s   z_real_main.<locals>.<genexpr>r   c                    s   g | ]}  | jjqS r>   )Z_format_outZStylesSUPPRESS)rM   text)ydlr>   r?   rP     s   z (unavailable)z$[info] Available impersonate targets)ZClientZOSZSourcer   rA   )Z	extra_gapr  r   ntfrozenFKernel32_MEIPASSZ_MEIzDo not double-click the executable, instead call it from a command line.
Please read the README for further information on how to use yt-dlp: https://github.com/yt-dlp/yt-dlp#readmezSYou must provide at least one URL.
Type yt-dlp --help to see a list of all options.z(URLs are ignored due to --load-info-jsonzAborting remaining downloadse   )<r0   r  rq   rC  r   Z_ffmpeg_locationrF  r   r   _load_all_pluginsr5   r  Zrm_cachedirZload_info_filenamecacheremover   rl   r   ZrestartZreport_warningr   	traceback	print_excZ_download_retcodeZlist_impersonate_targetsr   Z"_get_available_impersonate_targetsr   insertZ	to_screenZ	to_stdoutr/   r7   r  Zwarn_if_short_idr  rb   rw   Zctypes.wintypesmsvcrtWinDLLZwintypesZDWORDZGetConsoleProcessListrN  r`  basenamer  r   printZ_generate_error_messageZgetchr@   r   destroyZdownload_with_info_filer$   r   r   )r  rp  rp   Zall_urlsrr  r   Z
actual_useZupdaterZknown_targetsZavailable_targetsrowsr<   ctypesr  kernel32bufferZattached_processesZ
is_onefiler>   )r  r  r  r  r?   
_real_main  s    











 
 
 
r  c              
   C   s  dt _zttt|   W n ttfy8   td Y n tyh } ztd|  W Y d }~nd }~0  ty   td Y n t	y } z<t
t
jt
j}t
|tj  td|  W Y d }~n@d }~0  tjy } ztdd|  W Y d }~n
d }~0 0 d S )NTr   zERROR: z
ERROR: Interrupted by userz
ERROR: r   rF   )r   r   r@   r2   r  r   r   r"   KeyboardInterruptBrokenPipeErrorr  rQ   devnullO_WRONLYdup2r7   ro   filenooptparseOptParseError)r  er  r>   r>   r?   main,  s    ""r  )gen_extractorsrd   )r5   r  rd   r  r  )r   )N)N)N)Wr7   version_infoImportError__license__collectionsr[  r   r  r  r   r  cookiesr   r   r   Zdownloader.externalr   r   r	   Zextractor.adobepassr
   Znetworking.impersonater   globalsr   r   rq  r   Zpluginsr   r  Zpostprocessorr   r   r   r   r   r   r   r   r   rl   r   utilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   Zutils._utilsr4   r5   r@   rW   rq   r   rc  rn  
namedtuplero  r  r  r  r  rd   __all__r>   r>   r>   r?   <module>   sR   
,p
4   =p
 Y
v
