
    \Jj`                        d dl Z d dlZd dlmZmZ 	 d dlmZ  ej                          d dlm	Z	m
Z
 	  ej                  d      Zd Zd Z G d d	e      Zd@dZd Zd Zd ZdAdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+e,d
fd&Z-e,d
fd'Z.e,fd(Z/d) Z0d* Z1d+ Z2d, Z3d- Z4d. Z5d/ Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;d5 Z<d6 Z=d7 Z>d8 Z?d9 Z@d: ZAd; ZBd< ZCd= ZDdAd>ZEd? ZFy# e$ r Y w xY w)B    N)datetime	timedelta)MonkeyPatch)protocolversion_matchingz((?:[^,"']|"[^"]*"|'[^']*')+)c                 ,    t        j                  |       S N)r   fromisoformat)values    F/var/www/html/Extract/venv/lib/python3.12/site-packages/m3u8/parser.pycast_date_timer      s    !!%((    c                 &     | j                   di |S )N )	isoformat)r   kwargss     r   format_date_timer      s    5??$V$$r   c                       e Zd Zd Zd Zy)
ParseErrorc                      || _         || _        y r	   linenoline)selfr   r   s      r   __init__zParseError.__init__#   s    	r   c                 8    d| j                   | j                  fz  S )Nz'Syntax error in manifest on line %d: %sr   )r   s    r   __str__zParseError.__str__'   s    8DKK;SSSr   N)__name__
__module____qualname__r   r   r   r   r   r   r   "   s    Tr   r   Fc                    i ddddddddddddd	d
dg dg dg dg dg dg dg dg di di g g g d}ddd
d
d}t        |       }|r.t        j                  |      }t        |      dkD  rt	        |      t        |d      D ]  \  }}|j                         }|||||d}	|j                  d      rt        |      r |||||      }
|
rI|j                  t        j                        rt        di |	 t|j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                         rt#        di |	 |j                  t        j$                        rt'        di |	 !|j                  t        j(                        rt+        di |	 M|j                  t        j,                        rt/        di |	 y|j                  t        j0                        rt3        di |	 |j                  t        j4                        rt7        di |	 |j                  t        j8                   d      rt;        di |	  |j                  t        j<                   d      rt?        di |	 /|j                  t        j@                        rtC        di |	 [|j                  t        jD                        rtG        di |	 |j                  t        jH                        rtK        di |	 |j                  t        jL                        rtO        di |	 |j                  t        jP                        rtS        di |	 |j                  t        jT                        rtW        di |	 7|j                  t        jX                        rt[        di |	 c|j                  t        j\                        rt_        di |	 |j                  t        j`                        rtc        di |	 |j                  t        jd                        rtg        di |	 |j                  t        jh                        rtk        di |	 |j                  t        jl                        rto        di |	 ?|j                  t        jp                        rts        di |	 k|j                  t        jt                        rtw        di |	 |j                  t        jx                        rt{        di |	 |j                  t        j|                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 G|j                  t        j                        rt        di |	 s|j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 #|j                  t        j                        rt        di |	 O|j                  t        j                        rt        di |	 {|j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 |j                  t        j                        rt        di |	 +|j                  t        j                        rL|j                         dk(  ra|j                  d      s|d   rt        di |	 |j                  d      s|d   rt        di |	 |st        ||       d|v r#|d   j                  |j                  d             |S ) zP
    Given a M3U8 playlist content returns a dictionary with all data found
    media_sequencer   
is_variantF
is_endlistis_i_frames_onlyis_independent_segmentsis_images_onlyplaylist_typeN	playlistssegmentsiframe_playlistsimage_playliststilesmediakeysrendition_reportsskippart_inf)session_datasession_keyssegment_map)expect_segmentexpect_playlistcurrent_keycurrent_segment_map   )r   r   datastatestrict#: r6   r7   segmentr   )`string_to_linesr   validatelen	Exception	enumeratestrip
startswithcallabler   ext_x_byterange_parse_byterangeext_x_bitrate_parse_bitrateext_x_targetduration_parse_targetdurationext_x_media_sequence_parse_media_sequenceext_x_discontinuity_sequence_parse_discontinuity_sequenceext_x_program_date_time_parse_program_date_timeext_x_discontinuity_parse_discontinuityext_x_cue_out_cont_parse_cueout_context_x_cue_out_parse_cueoutext_oatcls_scte35_parse_oatcls_scte35ext_x_asset_parse_assetext_x_cue_in_parse_cue_inext_x_cue_span_parse_cue_spanext_x_version_parse_versionext_x_allow_cache_parse_allow_cache	ext_x_key
_parse_keyextinf_parse_extinfext_x_stream_inf_parse_stream_infext_x_i_frame_stream_inf_parse_i_frame_stream_infext_x_media_parse_mediaext_x_playlist_type_parse_playlist_typeext_i_frames_only_parse_i_frames_onlyext_is_independent_segments_parse_is_independent_segmentsext_x_endlist_parse_endlist	ext_x_map_parse_x_mapext_x_start_parse_startext_x_server_control_parse_server_controlext_x_part_inf_parse_part_infext_x_rendition_report_parse_rendition_report
ext_x_part_parse_part
ext_x_skip_parse_skipext_x_session_data_parse_session_dataext_x_session_key_parse_session_keyext_x_preload_hint_parse_preload_hintext_x_daterange_parse_daterange	ext_x_gap
_parse_gapext_x_content_steering_parse_content_steeringext_x_image_stream_inf_parse_image_stream_infext_x_images_only_parse_is_images_onlyext_x_tiles_parse_tilesext_m3u_parse_ts_chunk_parse_variant_playlistr   appendpop)contentr=   custom_tags_parserr;   r<   linesfound_errorsr   r   parse_kwargsgo_to_next_lines              r   parser   +   s   !e 	e 	E	
 	"5 	% 	 	R 	B 	B 	2 	 	 	 	R  	!" 	B#$ )D0   #	E G$E'007|q L))!%+ ]+zz|
 ??3H-?$@0vtUKO ??8334,|,__X334*\*__X::;!1L1__X::;!1L1__XBBC)9L9__X==>$4|4__X99: 0<0__X889..__X334)L)__ : :;1=> 0<0__ 4 45Q78(<(__X223)L)__X445+l+__X334*\*__X778..__X//0&&__X__-)L)__X667--__X>>?%55__X112(<(__X99: 0<0__X778 0<0__XAAB*:\:__X334*\*__X//0(<(__X112(<(__X::;!1L1__X445+l+__X<<=#3l3__X001','__X001','__X889/,/__X778..__X889/,/__X556,|,__X//0&&__X<<=#3l3__X<<=#3l3__X778!1L1__X112(<( __X--. ZZ\R //#&U3C-D+l+//#&U3D-E#3l3 VT**{]+@ EZ		) 45Kr   c                 (   t         j                  | j                  t        j                  dz   d            dd d   }i }|D ].  }|j                  dd      \  }}t        |      |t        |      <   0 ||d<   ||d   vr|d   j                  |       y y )Nr?   r@   r:      =r8   r/   )ATTRIBUTELISTPATTERNsplitreplacer   rh   remove_quotesnormalize_attributer   )	r   r;   r<   r   paramskeyparamnamer   s	            r   ri   ri      s    !''X5G5G#5Mr(RS	1F C >kk#q)e)6u)=%&> E-
$v,VC  r   c                 &   | j                  t        j                  dz   d      j                  dd      }t	        |      dk(  r|\  }}n#t	        |      dk(  r|rt        ||       |d   }d}d|vri |d<   t              |d   d<   |d   d	<   d
|d<   y )Nr?   r@   ,r:   r   r   rA   durationtitleTr6   )r   r   rj   r   rD   r   float)r   r<   r   r=   r   chunksr   r   s           r   rk   rk     s    \\(//C/4::3BF
6{a %	V	VT**ayHEi#(?E)Z  %E)W"E
r   c                    |j                  d      }|j                  d      r|j                  d      |d<   |j                  d      r"|d   |d<   |dxx   t        |d         z  cc<   | |d<   |j                  dd      |d<   |j                  d	d      |d	<   |j                  d
d      |d
<   |j                  dd      |d<   |d	   r|j                  n|j                   } |dd       |d<    |dd       |d<    |dd       |d<    |dd       |d<    |dd       |d<   |j                  dd      |d<   |j                  d      r	|d   |d<   nd |d   vr|d   j                  d        |j                  d      r|d   |d<   |j                  dd       |d<   |j                  dd       |d<   |d   j                  |       d|d<   y ) NrA   program_date_timecurrent_program_date_timer   secondsuricue_inFcue_outcue_out_startcue_out_explicitly_durationcurrent_cue_out_scte35scte35current_cue_out_oatcls_scte35oatcls_scte35current_cue_out_durationscte35_durationcurrent_cue_out_elapsedtimescte35_elapsedtimeasset_metadatadiscontinuityr8   r   r/   r9   init_section
daterangesgapgap_tagr*   r6   )r   getr   r   )r   r;   r<   r   rA   scte_ops         r   r   r     s   ii	"Gyy$%',yy1D'E#$yy,-/45P/Q+,)*i
@S.TT*GEN		(E2GH9e4GI$yy%@GO-2YY%u.G)* #9-eii599G 8$?GH&'FMGO!()CT!JG$+,I4$PG ! '(8$ ?G$yy%@GOyy}- tF|#L%yy&'"'(=">!IIlD9GL5$/GIG$#E
r   c                 N   t         j                  |j                  | dz   d            dd d   }i }|j                  | dz         s|S |D ]Y  }|j                  dd      }t	        |      dk(  rd}|d   }	n|\  }}	t        |      }||v r ||   |	      }	n
| ||	      }	|	||<   [ |S )Nr?   r@   r:   r   r   r   )r   r   r   rH   rD   r   )
prefixr   attribute_parserdefault_parserr   
attributesr   param_partsr   r   s
             r   _parse_attribute_listr   >  s    !''Vc\2(FG1MFJ??6C<( !kk#q){q DNE%KD%"4(##*$T*51E'"5)E 
4!  r   c           	          d|d<   d|d<   d |d<   t        ddddd	d
d      }t        |d<   d |d<   t        |d<   t        |d<   t        |d<   t	        t
        j                  | |      |d<   y )NTr7   r#   r"   codecsaudiovideovideo_range	subtitles
pathway_idstable_variant_id
program_idc                 *    t        t        |             S r	   )intr   xs    r   <lambda>z#_parse_stream_inf.<locals>.<lambda>f  s    c%(m r   	bandwidthaverage_bandwidth
frame_rate
hdcp_levelstream_info)remove_quotes_parserr   r   strr   r   rl   )r   r;   r<   r   r   s        r   rm   rm   X  s    #E
D!D	+ &)\"$;[!,/()%*\"%(\"0!!4)9E-r   c                     t        dddd      }t        |d<   t        |d<   t        |d<   t        |d<   t        t        j
                  | |      }|j                  d      |d	}|d
   j                  |       y )Nr   r   r   r   r   r   r   r   )r   iframe_stream_infor+   )r   r   r   r   r   rn   r   r   )r   r;   r   r   r   iframe_playlists         r   ro   ro   o  s    +%': &)\"$'[!,/()%(\".))41A "%%e,0O
 		##O4r   c                     t        dddd      }t        |d<   t        |d<   t        |d<   t        |d<   t        t        j
                  | |      }|j                  d      |d	}|d
   j                  |       y )Nr   r   r   r   r   r   r   
resolution)r   image_stream_infor,   )r   r   r   r   r   r   r   r   )r   r;   r   r   r   image_playlists         r   r   r     s    +%': &)\"$'[!,/()%(\"-''/? !$$U+.N
 		"">2r   c                     d|d<   y )NTr'   r   r   r;   r   s      r   r   r     s    !D	r   c                     t        d      }t        |d<   t        |d<   t        |d<   t        t        j
                  | |      }|d   j                  |       y )Nr   r   layoutr   r-   )r   r   r   r   r   r   r   )r   r;   r<   r   r   
tiles_infos         r   r   r     sU    +E2%(\"!$X#(Z &x';';TCSTJM$r   c                     t        ddddddddd	d
d      }t        t        j                  | |      }|d   j	                  |       y )Nr   group_idlanguageassoc_languager   instream_idcharacteristicschannelsstable_rendition_id
thumbnailsimager.   )r   r   r   rp   r   )r   r;   r   quotedr.   s        r   rq   rq     sU    !F "("6"6fEEMr   c                 ^    | |j                  d      d}|d   j                  |       d|d<   y )Nr   )r   r   r)   Fr7   )r   r   )r   r;   r<   r   playlists        r   r   r     s3    EIIm,DEHX&$E
r   c                 D    d| vri | d<   t        ddt        i|| d   d<   y )NrA   cast_tobitrater   _parse_simple_parameterr   r<   r   s     r   rM   rM     s0    i"9"P#"P"PE)Yr   c                 r    d|vri |d<   | j                  t        j                  dz   d      |d   d<   d|d<   y )NrA   r?   r@   	byterangeTr6   )r   r   rJ   r   r<   r   s      r   rK   rK     sE    i$(LL1I1IC1OQS$TE)[!"E
r   c                  $    t        ddt        i| S Nr  r   r
  r   s    r   rO   rO         "?3?,??r   c                  $    t        ddt        i| S r  r
  r  s    r   rQ   rQ     r  r   c                  $    t        ddt        i| S r  r
  r  s    r   rS   rS     r  r   c                 n    t        | fdt        i|\  }}|j                  d      s||d<   ||d<   ||d<   y )Nr  r   r   )!_parse_simple_parameter_raw_valuer   r   )r   r<   r;   r   _r   s         r   rU   rU     sU    <$(4A 88'($5 !):E
%&!2E
r   c                     d| d<   y )NTr   r   r<   r   s     r   rW   rW     s    !E/r   c                     d| d<   y )NTr   r   r  s     r   ra   ra     s    E(Or   c                     d| d<   y )NTr   r   r  s     r   rc   rc     s    E)r   c                  $    t        ddt        i| S r  r
  r  s    r   re   re     r  r   c                  $    t        ddt        i| S r  )r  r   r  s    r   rg   rg     r  r   c                     t        | |      S r	   )r  r   s      r   rs   rs     s    "4..r   c                     t        dd      }t        t        j                  | |      }||d<   |d   j	                  |       y )Nr   r  r9   r5   )r   r   r   rz   r   )r   r;   r<   r   quoted_parsersegment_map_infos         r   r{   r{     sB    (<M,X-?-?}U#3E
 /0r   c                 N    dd i}t        t        j                  | |      }||d<   y )Ntime_offsetc                     t        |       S r	   r   r   s    r   r   z_parse_start.<locals>.<lambda>  
    q r   start)r   r   r|   )r   r;   r   r   
start_infos        r   r}   r}     s,    %'9:&x';';TCSTJDMr   c                     d| d<   y )NTr   r   r  s     r   r   r     s    E%Lr   c                     | j                  dd      \  }}t        |j                  dd            }|r|j                         j	                         }| ||      fS )Nr?   r:   z#EXT-X-r@   )r   r   r   rG   lower)r   r  	normalizer   r   r   s         r   r  r    sQ    ::c1%LE5i <=E##%'%.  r   c                 6    t        | ||      \  }}|||<   ||   S r	   )r  )r   r;   r  r-  r   r   r   s          r   )_parse_and_set_simple_parameter_raw_valuer/    s)     5T7INLE5DK;r   c                     t        | ||d      S )NT)r/  )r   r;   r  r   s       r   r  r    s    4T4$OOr   c                     d| d<   y )NTr%   r   r;   r   s     r   ru   ru     s    #D	r   c                     d| d<   y )NTr&   r   r2  s     r   rw   rw     s    &*D	"#r   c                     d| d<   y )NTr$   r   r2  s     r   ry   ry   "  s    Dr   c           	         d|d<   | j                  dd      }t        |      dk7  ry t        t        j                  | t        ddd            }|j                  d	      }|r9|j                  d
d      }t        |      dk(  r	|d   |d<   n|d   |d<   |d   |d<   |j                  d      }|r||d<   |j                  d      }|r||d<   |j                  d      }	|	r|	|d<   y y )NTr   r?   r:   r   r   elapsedtimer   r@   /r   r   r   r   )r   rD   r   r   rX   r   r   )
r   r<   r   elementscue_infoprogressprogress_partsr   r   r6  s
             r   rY   rY   &  s   E)zz#q!H
8} %##ZAH ||BH!Q/~!#0>q0AE,-3A!3DE/00>q0AE,-||J'H,4()\\(#F*0&',,}-K/:+, r   c                 x   d|d<   d|d<   d| j                         v rd|d<   | j                  dd      }t        |      dk7  ry t        t        j
                  | t        d	            }|j                  d	      }|j                  d
      xs |j                  d      }|j                  d      }|xs ||d<   ||d<   y )NTr   r   DURATIONr   r?   r:   r   cuer   r@   r   r   )upperr   rD   r   r   rZ   r   r   )r   r<   r   r8  r9  cue_out_scte35cue_out_durationr   s           r   r[   r[   K  s    !E/E)TZZ\!/3+,zz#q!H
8}$U#H
 \\%(N||J/C8<<3C"YY'?@&4&N8NE
"#(8E
$%r   c                 f    t         d d d t         d}t        t        j                  | |      |d<   y )Nc                     t        |       S r	   r&  r   s    r   r   z'_parse_server_control.<locals>.<lambda>e  s
    uQx r   c                     t        |       S r	   r&  r   s    r   r   z'_parse_server_control.<locals>.<lambda>f  
    E!H r   c                     t        |       S r	   r&  r   s    r   r   z'_parse_server_control.<locals>.<lambda>g  rE  r   )can_block_reload	hold_backpart_hold_backcan_skip_untilcan_skip_daterangesserver_control)r   r   r   r~   r   r;   r   r   s       r   r   r   b  s9    ',," 3%%t-=D	r   c                 J    dd i}t        t        j                  | |      |d<   y )Npart_targetc                     t        |       S r	   r&  r   s    r   r   z!_parse_part_inf.<locals>.<lambda>q  r'  r   r2   )r   r   r   rM  s       r   r   r   p  s+    %'9:,'7Dr   c                     t        d      }t        |d<   t        |d<   t        t        j                  | |      }|d   j                  |       y )Nr   last_msn	last_partr0   )r   r   r   r   r   r   )r   r;   r   r   rendition_reports        r   r   r   x  sS    +E2#&Z $'[!,''/? 		$$%56r   c                    t        d      }d |d<   t        |d<   t        |d<   t        |d<   t        t        j                  | |      }|j                  d      r"|d   |d<   |dxx   t        |d   	      z  cc<   |j                  d
d       |d
<   |j                  dd       |d<   d|vri |d<   |d   }d|vrg |d<   |d   j                  |       y )Nr   c                     t        |       S r	   r&  r   s    r   r   z_parse_part.<locals>.<lambda>  s
    U1X r   r   independentr   r  r   r   r   r   r   rA   parts)	r   r   r   r   r   r   r   r   r   )r   r<   r   r   partrA   s         r   r   r     s    +E2#5Z &)]#!U$'[! !4!4d<LMD yy,-$)*E$F !)*iZ@P.QQ*<6Diit,DOiIGgGD!r   c                 h    t        d      }t        |d<   t        t        j                  | |      |d<   y )Nrecently_removed_daterangesskipped_segmentsr1   )r   r   r   r   r   )r   r;   r   r   s       r   r   r     s3    +,IJ+.'(()<)<dDTUDLr   c                 ~    t        dddd      }t        t        j                  | |      }|d   j	                  |       y )Ndata_idr   r   r   r3   )r   r   r   r   r   )r   r;   r   r  r3   s        r   r   r     s9    !)WeZHF()D)DdFSL-r   c                    t         j                  | j                  t        j                  dz   d            dd d   }i }|D ].  }|j                  dd      \  }}t        |      |t        |      <   0 |d   j                  |       y )Nr?   r@   r:   r   r   r4   )r   r   r   r   r   r   r   r   )r   r;   r   r   r   r   r   r   s           r   r   r     s    !''X//#5r:ddF C >kk#q)e)6u)=%&> 	$r   c                     t        d      }t        |d<   t        |d<   t        |d<   t        t        j
                  | |      |d<   y )Nr   typebyterange_startbyterange_lengthpreload_hint)r   r   r   r   r   r   rM  s       r   r   r     sM    +E2"V*-&'+.'(0##T+;Dr   c                     t        dddd      }t        |d<   t        |d<   t        |d<   t        |d<   t        |d	<   t        |d
<   t        t        j
                  | |      }d|vrg |d<   |d   j                  |       y )Nidclass
start_dateend_dater   planned_durationend_on_next
scte35_cmd
scte35_out	scte35_inr   )r   r   r   r   r   r   r   )r   r<   r   r   parseds        r   r   r     s    +D'<T#(Z +0'(&)]#%(\"%(\"$'[!"8#;#;TCSTF5  l	,v&r   c                 X    t        dd      }t        t        j                  | |      |d<   y )N
server_urir   content_steering)r   r   r   r   rM  s       r   r   r     s-    +L,G4''/? D	r   c                 B    | j                  dd      d   }||d<   ||d<   y )Nr?   r:   r   r   )r   )r   r<   r   
scte35_cues       r   r]   r]     s-    C#A&J-7E
)*&0E
"#r   c                 L    t        t        j                  | i t              |d<   y )N)r   r   )r   r   r^   r   r  s      r   r_   r_     s#     4dBsE
r   c                 >    | j                         j                         S r	   )rG   
splitlines)strings    r   rB   rB     s    <<>$$&&r   c                  Z    t        t        | t        j                  t                          S r	   )dictzip	itertoolsrepeatr   )attrss    r   r   r     s    E9++M:;<<r   c                 X    d}| j                  |      r| j                  |      r| dd S | S )zi
    Remove quotes from string.

    Ex.:
      "foo" -> foo
      'foo' -> foo
      'foo  -> 'foo

    )"'r:   )rH   endswith)rx  quotess     r   r   r     s3     F V__V%<a|Mr   c                 ^    | j                  dd      j                         j                         S )N-r  )r   r,  rG   )	attributes    r   r   r      s'    S#&,,.4466r   c                 P    d| vr|S d| d   vr|S | d   d   j                  ||      S )zf
    Helper function for getting custom values for Segment
    Are useful with custom_tags_parser
    rA   custom_parser_values)r   )r<   r   defaults      r   get_segment_custom_valuer    sA    
 U9%552377WEEr   c                 J    d| vri | d<   d| d   vri | d   d<   || d   d   |<   y)ze
    Helper function for saving custom values for Segment
    Are useful with custom_tags_parser
    rA   r  Nr   )r<   r   r   s      r   save_segment_custom_valuer    sH    
 iU9%5535i/049E)+,S1r   )FNr	   )Gr|  rer   r    backports.datetime_fromisoformatr   patch_fromisoformatImportErrorm3u8r   r   compiler   r   r   rE   r   r   ri   rk   r   r   rm   ro   r   r   r   rq   r   rM   rK   rO   rQ   rS   rU   rW   ra   rc   re   rg   rs   r{   r}   r   r   r  r/  r  ru   rw   ry   rY   r[   r   r   r   r   r   r   r   r   r   r   r]   r_   rB   r   r   r   r  r  r   r   r   <module>r     s  
  	 (	<#K##%
 , "rzz"FG )%T TL^!#""$J4.5&3&"% $%Q#@@@3"@@/1 585 ! u 14 P$+";J9.	7"4V.%'"1'= 7	F:G  		s   D   DD