Ë
    prÊj©m ã                   óª	  — U 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Zddl	Z	ddl
mc mZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZmZmZ ddlZddlZddlZddlZ	 ddlm Z! dZ"ddl Z dd	l$m%Z%m&Z&m'Z' ejP                  d
k(  r;	 ejR                  jU                  dd¬«       ejV                  jU                  dd¬«       dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5ejl                  jo                  ejl                  jq                  e9«      «      Z:ejl                  jw                  e:d«      Z<ejl                  jw                  e:d«      Z=ejl                  jw                  e:d«      Z>ejl                  jw                  e:d«      Z?ejl                  jw                  e:d«      Z@ejl                  jw                  e:d«      ZAejl                  jw                  e:d«      ZBejl                  jw                  e:d«      ZCejl                  jw                  e:d«      ZDejl                  jw                  e:d «      ZE eF«       ZGeFeHd!<   daIdjd"eJd#eKd$eLfd%„ZMdkd"eJd$dfd&„ZNdld'„ZO ej                   eO«       d(ZQd)ZReSj©                  d*«      ZUi aVeeKef   eHd+<   e5fd,eKd-eKd$dfd.„ZWdld/„ZX G d0„ d1«      ZY eYe@«      ZZd$eeKef   fd2„Z[d3eeKef   d$dfd4„Z\dld5„Z]dld6„Z^d7eKd$eeKef   fd8„Z_d7eKd$eeLeJeeKef   f   fd9„Z`ddlaZaddlbZbdmd:eKd;eKd<eeeKeKf      d$eeKeeK   f   fd=„Zcdnd7eKd>eeK   d?eeK   d<eeeKeKf      d$eeK   f
d@„ZddmdAeeKef   dBeeK   d$eKfdC„ZedDZfdmd<eeeKeKf      d$efdE„Zgdmd<eeeKeKf      d$efdF„ZhdaieeK   eHdG<   dajeeL   eHdH<   dakd$eeK   fdI„Zld$eLfdJ„ZmdmdKeKdLeKdMeeKeKf   dNeeS   d$eeJeSf   f
dO„ZndPeKd$eLfdQ„ZodReKd$eeeK   eeK   f   fdS„ZpdTeeKef   dAeeKef   dUeKd$eKfdV„ZqdWeKd7eKdAeeKef   d<eeeKeKf      d$eeeeKef      eeK   f   f
dX„ZrdndPeKdYeKdZeKdAeeKef   d[eeKef   d\eeK   d<eeeKeKf      d7eeK   d$eeeK   eeK   eeK   f   fd]„Zsd^eeK   d$eKfd_„ZtdodTeeKef   dAeeKef   d7eKd[eeKef   d`eJd$eeKef   fda„ZudpdBeeK   dbeeeeKef         dceLd$eeKef   fdd„Zvdawdaxd$eeeKef      fde„ZydqdfeJdBeeK   dceLd$dfdg„Zzdh„ Z{e|dik(  r e{«        yy# e#$ r
 ddl Z!dZ"Y �ŒYw xY w# e,$ r Y �Œw xY w)ra&  
====================================================================
 DAZN - Manager & DRM Extractor (Widevine WVD)
 Auto-Extractor: Live & Linear Streams (DAZN 1, Plus, ecc.)
 Output: dazn_channels.json & dazn_playlist.m3u
====================================================================
é    N)ÚdatetimeÚ	timedelta)ÚDictÚListÚOptionalÚTupleÚAny)ÚurlparseÚparse_qsÚ	urlencodeÚ
urlunparse)ÚrequestsTF)ÚPSSHÚCdmÚDeviceÚwin32úutf-8Úreplace©ÚencodingÚerrorsz[32mz[33mz[31mz[36mz[34mz[35mz[1mz[2mz[0mzdazn_config.jsonzdazn_tokens.jsonzpssh_cache.jsonzWVD.wvdz	proxy.txtzdazn_channels.jsonzdazn_proxy_data.jsonzdazn_playlist.m3uzdazn_playlist_proxy.m3uzdazn_proxy.pyÚ_eligibility_blocked_idsÚportÚhostÚreturnc                 ó   — 	 t        j                   t         j                  t         j                  «      5 }|j                  d«       |j	                  || f«      dk(  cd d d «       S # 1 sw Y   y xY w# t
        $ r Y yw xY w)Ng      à?r   F)ÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚ
connect_exÚ	Exception)r   r   Úss      údazn.pyÚis_port_openr%   L   sa   € ðÜ�]‰]œ6Ÿ>™>¬6×+=Ñ+=Ô>À!Ø�L‰L˜ÔØ—<‘<  t Ó-°Ñ2÷ ?×>Ò>ûô ò Ùðús.   ‚2A1 ´'A%Á	A1 Á%A.Á*A1 Á.A1 Á1	A=Á<A=c                 óØ  — t        | «      rt        d| › d�t        «       y t        j                  j                  t        «      st        dt        › �t        «       y t        d| › d�t        «       	 t        j                  t        j                  t        gt        ¬«      at        dt        j                  › d�t        «       y # t         $ r}t        d	|› �t"        «       Y d }~y d }~ww xY w)
Nu5   ðŸ“¡ DAZN Proxy giÃ  attivo e in ascolto sulla porta Ú.u#   âš ï¸� Script proxy non trovato in u3   ðŸš€ Avvio automatico DAZN HTTPS Proxy sulla porta ú...)Úcwdu+   âœ… DAZN Proxy avviato in background (PID: Ú)u'   â�Œ Impossibile avviare dazn_proxy.py: )r%   ÚlogÚGREENÚosÚpathÚexistsÚPROXY_SCRIPT_FILEÚYELLOWÚCYANÚ
subprocessÚPopenÚsysÚ
executableÚ
SCRIPT_DIRÚ_PROXY_PROCESSÚpidr"   ÚRED)r   Úes     r$   Úensure_proxy_runningr<   T   sÈ   € ä�DÔÜÐCÀDÀ6ÈÐKÌUÔSØä�7‰7�>‰>Ô+Ô,ÜÐ1Ô2CÐ1DÐEÄvÔNØäÐ
=¸d¸VÀ3ÐGÌÔNð@Ü#×)Ñ)Ü�^‰^Ô.Ð/Üô
ˆô 	Ð9¼.×:LÑ:LÐ9MÈQÐOÔQVÕWøÜò @ÜÐ5°a°SÐ9¼3×?Ñ?ûð@ús   Á1AC Ã	C)ÃC$Ã$C)c                  ó  — t         rQt         j                  «       €<t        dt        «       	 t         j	                  «        t         j                  d¬«       y y y # t        $ r( 	 t         j                  «        Y y # t        $ r Y Y y w xY ww xY w)Nu   ðŸ›‘ Arresto DAZN Proxy...é   )Útimeout)r8   Úpollr+   r1   Ú	terminateÚwaitr"   Úkill© ó    r$   Ú
stop_proxyrF   h   s{   € åœ.×-Ñ-Ó/Ð7ÜÐ(¬&Ô1ð	Ü×$Ñ$Ô&Ü×Ñ¨ÐÕ*ð	 8€~øô
 ò 	ðÜ×#Ñ#Ö%øÜò Úðúð	ús)   ¬*A Á	B
Á#A9Á9	BÂB
ÂBÂB
i0*  z$edef8ba9-79d6-4ace-a3c8-27dcd51d21edÚ edef8ba979d64acea3c827dcd51d21edÚ
pssh_cacheÚmsgÚcolorc                 ó|   — t        |› dt        j                  «       j                  d«      › d| › t        › �d¬«       y )NÚ[z%H:%M:%Sú] T)Úflush)Úprintr   ÚnowÚstrftimeÚRESET)rI   rJ   s     r$   r+   r+   �   s4   € Ü	ˆUˆG�1”X—\‘\“^×,Ñ,¨ZÓ8Ð9¸¸C¸5ÄÀÐ
HÐPTÖUrE   c                  ó‚   — t         › dt        › d› t        › dt        › dt        › dt        › d› t        › �} t	        | «       y )Nzž
  ____     _     ______  _   _ 
 |  _ \   / \   |__  / \| \ | |
 | | | | / _ \    / /|  \|  \| |
 | |_| |/ ___ \  / /_| |\ \  |
 |____//_/   \_\/____|_| \_|
õÒ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�Ú
u=     â—† DAZN Auto-Manager Â· Widevine Extractor & Decryptor â—†)r1   ÚBLUErR   r2   rO   )Úbanners    r$   Úprint_bannerrX   „   sO   € Ü�ð ô €€z€l”5�'ð Ü€ÐCÄEÀ7ð KÜ€€z€l”5�'ð€Fô 
ˆ&…MrE   c                   ó¼   — e Zd ZdZefdefd„Zdedee   fd„Zde	ddfd	„Z
dd
e	ddfd„Zdeeeef      fd„Zdeeeef      fd„Zdefd„Zdeeeeeef      fd„Zy)ÚProxyManagerzKCarica, analizza, valida e ruota i proxy da proxy.txt o da dazn_config.jsonÚfilepathc                 ó\   — || _         g | _        d | _        d| _        | j	                  «        y )Nr   )r[   ÚproxiesÚconfig_proxyÚcurrent_idxÚload)Úselfr[   s     r$   Ú__init__zProxyManager.__init__“   s)   € Ø ˆŒØ"$ˆŒØ6:ˆÔØˆÔØ�	‰	�rE   Úliner   c                 ó$  — |j                  «       }|r|j                  d«      ry |j                  d«      r|S |j                  d«      }t        |«      dk(  r|\  }}}}d|› d|› d|› d|› �S t        |«      dk(  rd|d   › d|d	   › �S d|v rd|› �S y )
NÚ#)úhttp://zhttps://z	socks5://z
socks5h://Ú:é   rf   Ú@r>   r   é   )ÚstripÚ
startswithÚsplitÚlen)ra   rc   Úpartsr   r   ÚuserÚpwds          r$   Úparse_proxy_linezProxyManager.parse_proxy_lineš   s²   € Ø�z‰z‹|ˆÙ�t—‘ sÔ+Øà�?‰?ÐMÔNØˆKà—
‘
˜3“ˆÜˆu‹:˜Š?Ø$)Ñ!ˆD�$˜˜cØ˜T˜F ! C 5¨¨$¨¨q°°Ð7Ð7Ü�‹Z˜1Š_Ø˜U 1™X˜J a¨¨a© zÐ2Ð2Ø�D‰[Ø˜T˜FÐ#Ð#àrE   Ú
proxy_confNc                 ó’  — t        |t        «      rZ|j                  d«      xs |j                  d«      }|j                  d«      xs |j                  d«      }|r||xs |dœ| _        y y t        |t        «      rM|j                  «       r<| j                  |j                  «       «      xs |j                  «       }||dœ| _        y y y )NÚhttpÚhttps©ru   rv   )Ú
isinstanceÚdictÚgetr^   Ústrrk   rr   )ra   rs   Úhttp_pÚhttps_pÚparseds        r$   Úset_config_proxyzProxyManager.set_config_proxy­   s°   € Ü�j¤$Ô'Ø—^‘^ FÓ+ÒF¨z¯~©~¸gÓ/FˆFØ —n‘n WÓ-ÒG°·±ÀÓ1GˆGÙØ-3¸gÒ>OÈÑ$P�Õ!ð ä˜
¤CÔ(¨Z×-=Ñ-=Ô-?Ø×*Ñ*¨:×+;Ñ+;Ó+=Ó>ÒTÀ*×BRÑBRÓBTˆFØ)/¸&Ñ AˆDÕð .@Ð(rE   r^   c                 ó¾  — g | _         |�| j                  |«       t        j                  j	                  | j
                  «      rq	 t        | j
                  ddd¬«      5 }|D ]@  }| j                  |«      }|sŒ|| j                   vsŒ&| j                   j                  |«       ŒB 	 d d d «       d| _
        y d| _
        y # 1 sw Y   ŒxY w# t        $ r
 Y d| _
        y w xY w)NÚrr   Úignorer   r   )r]   r   r-   r.   r/   r[   Úopenrr   Úappendr"   r_   )ra   r^   Úfrc   r~   s        r$   r`   zProxyManager.load·   sÁ   € ØˆŒØÐ#Ø×!Ñ! ,Ô/ä�7‰7�>‰>˜$Ÿ-™-Ô(ðÜ˜$Ÿ-™-¨°wÀxÕPÐTUÛ !˜Ø!%×!6Ñ!6°tÓ!<˜Ú! f°D·L±LÒ&@Ø ŸL™L×/Ñ/°Õ7ñ !"÷ Qð ˆÕ˜1ˆÕ÷ QÐPûô
 ò ØàˆÕðús6   ÁC	 ÁB=Á8B=ÂB=Â%C	 Â=CÃC	 Ã		CÃCc                 ó´   — | j                   r4| j                   | j                  t        | j                   «      z     }||dœS | j                  r| j                  S y )Nrw   )r]   r_   rn   r^   )ra   Ú	proxy_urls     r$   Úget_dictzProxyManager.get_dictÈ   sN   € Ø�<Š<ØŸ™ T×%5Ñ%5¼¸D¿L¹LÓ8IÑ%IÑJˆIØ%°	Ñ:Ð:Ø×ÒØ×$Ñ$Ð$ØrE   c                 óŽ   — | j                   r*| j                  dz   t        | j                   «      z  | _        | j                  «       S )Nrj   )r]   r_   rn   rˆ   ©ra   s    r$   ÚrotatezProxyManager.rotateÐ   s6   € Ø�<Š<Ø $× 0Ñ 0°1Ñ 4¼¸D¿L¹LÓ8IÑIˆDÔØ�}‰}‹ÐrE   c                 ód   — | j                   rt        | j                   «      S | j                  rdS dS )Nrj   r   )r]   rn   r^   rŠ   s    r$   ÚcountzProxyManager.countÕ   s*   € Ø$(§L¢LŒs�4—<‘<Ó ÐU¸D×<MÒ<M°qÐUÐSTÐUrE   c           	      óÆ  — g }t        | j                  «      }|s*| j                  r|j                  | j                  d   «       |D ]¼  }||dœ}t	        j                  «       }	 t        j                  d|d¬«      }t        t	        j                  «       |z
  dz  d«      }|j                  r6|j                  «       j                  dd	«      }|j                  |d
||f«       n"|j                  |dd|j                  › �|f«       Œ¾ |S # t        $ rP}	t        t	        j                  «       |z
  dz  d«      }|j                  |dt        |	«      d d |f«       Y d }	~	�Œd }	~	ww xY w)Nru   rw   z!https://api.ipify.org?format=jsoné
   )r]   r?   éè  rj   ÚipÚOKTFúHTTP é   )Úlistr]   r^   r„   Útimer   rz   ÚroundÚokÚjsonÚstatus_coder"   r{   )
ra   ÚresultsÚlist_to_testÚpÚproxies_dictÚt0r�   Údurr‘   r;   s
             r$   Útest_allzProxyManager.test_allØ   s7  € ØˆÜ˜DŸL™LÓ)ˆÙ × 1Ò 1Ø×Ñ × 1Ñ 1°&Ñ 9Ô:ãˆAØ$%°Ñ2ˆLÜ—‘“ˆBð
=Ü—L‘LÐ!DÈlÐdfÔg�ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—4’4ØŸ™›Ÿ™ d¨DÓ1�BØ—N‘N A t¨R°Ð#5Õ6à—N‘N A u°°a·m±m°_Ð.EÀsÐ#KÔLøð ð ˆøô ò =ÜœTŸY™Y›[¨2Ñ-°Ñ5°qÓ9�Ø—‘  5¬#¨a«&°°"¨+°sÐ;×<Ò<ûð=ús   Á#B DÄ	E ÄAEÅE ©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
PROXY_FILEr{   rb   r   rr   r	   r   r`   r   rˆ   r‹   Úintr�   r   r   ÚboolÚfloatr¡   rD   rE   r$   rZ   rZ   ‘   s³   „ ÙUØ'1ñ  ó ð Sð ¨X°c©]ó ð&B¨3ð B°4ó Bñ ð °ó ð"˜( 4¨¨S¨¡>Ñ2ó ð˜  c¨3 h¡Ñ0ó ð
V�só Vð˜$˜u S¨$°°UÐ%:Ñ;Ñ<ô rE   rZ   c                  ó(  — 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œgdœddidœ} t         j                  j                  t        «      s7t	        t        dd¬«      5 }t        j                  | |dd¬«       d d d «       | }n=	 t	        t        dd¬«      5 }t        j                  |«      }d d d «       dvr| d   |d<   d|v r"d |d   v rt        j                  |d   d    «       |S # 1 sw Y   ŒqxY w# 1 sw Y   ŒIxY w# t        $ r | }Y ŒMw xY w)!NÚ z$57b6a530-70a4-4d65-b412-46a1a5c22b38z$66125bf7-0b92-47fc-b618-93cfea67f55cú0.150.1-hotfix.f8b078689z@dazn/peng-html5-core/web/webÚitrw   úhttps://www.dazn.com/úB"Chromium";v="154", "Microsoft Edge";v="154", "Not A(Brand";v="99"ú?0ú	"Windows"ú}Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36 Edg/154.0.0.0ÚDAZN)Úrefererú	sec-ch-uaúsec-ch-ua-mobileúsec-ch-ua-platformú
user-agentúx-brandúapplication/octet-stream)úcontent-typerµ   r¶   r·   r¸   r¹   rº   Ú4hqcjx5zv91f1bdx71io4bnrlzDAZN 1©ÚidÚnameÚplayback_url)ÚtokenÚemailÚpasswordÚ	device_idÚdaznidÚapp_versionÚ	player_idÚlanguageÚproxyÚheadersÚlicense_headersÚchannelsÚrefresh_interval_hoursé   )ÚdaznÚloopÚwr   ©r   r>   F©ÚindentÚensure_asciir�   rÐ   rÊ   )r-   r.   r/   ÚCONFIG_FILErƒ   r™   Údumpr`   r"   Úproxy_managerr   )Údefault_configr…   Úcfgs      r$   Úload_configrÜ   ñ   s`  € ð ØØØ?Ø<Ø5Ø8ØàØñð
 3ØaØ$(Ø&1ð ^Ø!ñð !;Ø2ØaØ$(Ø&1ð ^Ø!ñ ð 6Ø$Ø$&ñðñ=%
ðN % að
ñO*€NôX �7‰7�>‰>œ+Ô&Ü”+˜s¨WÕ5¸Ü�I‰I�n a°ÀÕF÷ 6à‰ð	!Ü”k 3°Õ9¸QÜ—i‘i “l�÷ :à˜SÑ Ø,¨VÑ4��F‘ð ��}˜ C¨¡KÑ/Ü×&Ñ& s¨6¡{°7Ñ';Ô<à€J÷ 6Ð5ú÷
 :Ð9ûô ò 	!Ø ŠCð	!ús6   Á!C+ÂD ÂC7Â/D Ã+C4Ã7D Ã<D ÄDÄDrÛ   c                 ó¼  — 	 i }t         j                  j                  t        «      r0t	        t        dd¬«      5 }t        j                  |«      }d d d «       |j                  | «       t	        t        dd¬«      5 }t        j                  ||dd¬«       d d d «       y # 1 sw Y   ŒOxY w# 1 sw Y   y xY w# t        $ r}t        d|› �t        «       Y d }~y d }~ww xY w)	Nr�   r   rÓ   rÒ   r>   FrÔ   zErrore salvataggio config: )r-   r.   r/   r×   rƒ   r™   r`   ÚupdaterØ   r"   r+   r:   )rÛ   Úcurrentr…   r;   s       r$   Úsave_configrà   0  s¦   € ð	4ØˆÜ�7‰7�>‰>œ+Ô&Ü”k 3°Õ9¸QÜŸ)™) A›,�÷ :à�‰�sÔÜ”+˜s¨WÕ5¸Ü�I‰I�g˜q¨¸Õ?÷ 6Ð5÷ :Ð9ú÷ 6Ð5ûäò 4ÜÐ)¨!¨Ð-¬s×3Ñ3ûð4úsL   ‚7B5 ¹BÁ+B5 Á:B)ÂB5 ÂB&Â"B5 Â)B2Â.B5 Â2B5 Â5	CÂ>CÃCc                  óè   — t         j                  j                  t        «      r2	 t	        t        dd¬«      5 } t        j                  | «      ad d d «       y y # 1 sw Y   y xY w# t        $ r i aY y w xY w)Nr�   r   rÓ   )	r-   r.   r/   Ú
CACHE_FILErƒ   r™   r`   rH   r"   ©r…   s    r$   Ú
load_cacherä   <  sY   € ä	‡w�w‡~�~”jÔ!ð	Ü”j #°Õ8¸AÜ!ŸY™Y q›\�
÷ 9Ð8ð "ç8Ð8ûäò 	ØŠJð	ús.   ¥A# ·AÁA# ÁA ÁA# Á A# Á#A1Á0A1c                  óŒ   — t        t        dd¬«      5 } t        j                  t        | dd¬«       d d d «       y # 1 sw Y   y xY w)NrÒ   r   rÓ   r>   FrÔ   )rƒ   râ   r™   rØ   rH   rã   s    r$   Ú
save_cacheræ   E  s.   € Ü	Œj˜#¨Õ	0°AÜ�	‰	”*˜a¨¸Õ>÷ 
1×	0Ñ	0ús	   “:ºArÂ   c                 ó<  — 	 | j                  «       j                  d«      }t        |«      dk7  ri S |d   }t        |«      dz  }|dkD  r|dd|z
  z  z  }t        j                  |«      }t        j                  |j                  d«      «      S # t        $ r i cY S w xY w)zFDecodifica il payload di un JWT DAZN senza richiedere librerie esterner'   rÏ   rj   rh   r   Ú=r   )	rk   rm   rn   Úbase64Úurlsafe_b64decoder™   ÚloadsÚdecoder"   )rÂ   ro   Úpayload_b64ÚremÚdecodeds        r$   Údecode_jwt_payloadrð   J  sš   € ðØ—‘“×#Ñ# CÓ(ˆÜˆu‹:˜Š?ØˆIØ˜A‘hˆÜ�+Ó Ñ"ˆØ�Š7Ø˜3 ! c¡'™?Ñ*ˆKÜ×*Ñ*¨;Ó7ˆÜ�z‰z˜'Ÿ.™.¨Ó1Ó2Ð2øÜò ØŠ	ðús   ‚.B ±AB ÂBÂBc                 ó¢   — t        | «      }|sddi fS |j                  dd«      }t        t        j                  «       «      }||z
  }|dkD  }|||fS )u*   Verifica validitÃ  e scadenza del JWT DAZNFr   Úexpé<   )rð   rz   r¨   r–   )rÂ   Úpayloadrò   rP   Ú	remainingÚis_valids         r$   Úcheck_token_statusr÷   Y  sZ   € ä  Ó'€GÙØ�a˜ˆ|ÐØ
�+‰+�e˜QÓ
€CÜ
Œd�i‰i‹kÓ
€CØ�c‘	€IØ˜2‰~€HØ�Y Ð'Ð'rE   rÃ   rÄ   Ú
proxy_dictc                 ó<  — d}ddl } |j                  | j                  «       «      j                  «       }|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œ}	t	        d| › d�t
        «       	 t        |«      }
|
j                  |||	d¬«      }|j                  }t	        d| › d |j                  › d!|dd" › �t        «       d#|v sd$|v s|j                  d%k(  rt	        d&t        «       y'd(|v sd)|v ry*d+|v sd,|v ry*d-|v sd.|v rX	 |j                  «       j                  d.«      xs/ |j                  «       j                  d/i «      j                  d.«      }|rd0|fS 	 |j                  d1k(  ry'|j                  rY	 |j                  «       j                  d.«      xs/ |j                  «       j                  d/i «      j                  d.«      }|rd0|fS 	 y*y*# t        $ r Y Œ�w xY w# t        $ r Y y*w xY w# t        $ r}t	        d2|› �t         «       Y d}~y'd}~ww xY w)3zSEffettua il login su DAZN e restituisce lo stato (SUCCESS, RETRY, FAIL) e il token.z3https://authentication-prod.ar.indazn.com/v5/SignInr   Nrh   é   ÚwebÚ0Úe5edÚ2bdz6s9kÚydg5ujkhink9)ÚEmailÚPasswordÚPlatformÚDeviceIdÚProfilingSessionIdz*/*zen-GB,en;q=0.9,it;q=0.8zno-cacheúapplication/jsonúhttps://www.dazn.comr¯   zA"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"r±   r²   ÚemptyÚcorsz
cross-sitezoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36z£Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 signin/undefined hyper/0.14.0 (web; production; it))Úacceptzaccept-languagezcache-controlr¼   Úoriginrµ   r¶   r·   r¸   zsec-fetch-destzsec-fetch-modezsec-fetch-siter¹   z	x-dazn-uau%   ðŸ”‘ Tentativo di Login in corso per r(   é   ©r™   rË   r?   u   ðŸ”� DEBUG Risposta Login per z: HTTP z - é,  úRequest blockedÚ
CloudFronti“  u8   ðŸ›‘ CloudFront WAF ha bloccato la richiesta! Riprovo...)ÚRETRYNÚInvalidPasswordÚAccountBlocked)ÚFAILNz)Request limiting policy has been breachedz!Security policy has been breachedÚSignedInÚTokenÚ	AuthTokenÚSUCCESSéÊ   u    â�Œ Eccezione durante il Login: )ÚhashlibÚmd5ÚencodeÚ	hexdigestr+   r2   Úcreate_sessionÚpostÚtextrš   ÚDIMr1   r™   rz   r"   r˜   r:   )rÃ   rÄ   rø   Úurlr  ÚhÚs_valÚk_valrô   rË   r#   r�   r  rÂ   r;   s                  r$   Ú
dazn_loginr%  g  su  € à
?€CãØˆ�‰�E—L‘L“NÓ#×-Ñ-Ó/€AØˆbˆqˆE€EØˆa�ˆF€Eð ØØØ˜�w˜d�OØ (¨¨¨|Ð<ñ€Gð Ø4Ø#Ø*Ø(Ø*ØXØ Ø)Ø!Ø Ø&ð Hð {ñ€Gô" Ð
/°¨w°cÐ:¼DÔAð'ä˜:Ó&ˆØ�F‰F�3˜W¨g¸rˆFÓBˆØ�v‰vˆäÐ,¨U¨G°7¸1¿=¹=¸/ÈÈTÐRVÐSVÈZÈLÐYÔ[^Ô_ð  Ñ$¨¸Ñ(<ÀÇÁÐQTÒ@TÜÐJÌFÔSØ à Ñ$Ð(8¸DÑ(@ØØ6¸$Ñ>ÐBeÐimÑBmØØ˜Ñ ¨D¡ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�ÙØ$ eÐ+Ð+ð ð �=‰=˜CÒØ à�4Š4ðØŸ™›Ÿ™ WÓ-Ò[°·±³·±¸kÈ2Ó1N×1RÑ1RÐSZÓ1[�Ù ¨EÐ!1Ð1�5ñ øô ò Ùðûô ò Øàðûô ò ÜÐ.¨q¨cÐ2´CÔ8Üûðúsu   Á5A9G5 Ã/G5 Ã8G5 ÄG5 Ä
AG Å G5 Å1G5 Å>AG& Ç	G#Ç G5 Ç"G#Ç#G5 Ç&	G2Ç/G5 Ç1G2Ç2G5 Ç5	HÇ>HÈHÚuser_idrÅ   c                 ó>  — t        | «      }|xs |r|j                  d«      nd}|xs |r|j                  d«      nd}d|v r$|j                  d«      d   j                  dd«      nd}d}d	| › �d
dddd|t	        t        j                  «       «      dœ}		 t        |«      }
|
j                  |d|i|	d¬«      }|j                  r3|j                  «       j                  di «      j                  d«      }|r|S y# t        $ r}t        d|› �t        «       Y d}~yd}~ww xY w)z`Registra il dispositivo ed ottiene un token autorizzato al playback chiamando RefreshAccessTokenrp   r¬   ÚdeviceIdÚ-éÿÿÿÿz|daznÚ
000711a5aaz>https://ott-authz-bff-prod.ar.indazn.com/v5/RefreshAccessTokenúBearer r  r  r¯   r³   rÐ   )ÚAuthorizationúContent-TypeÚOriginÚRefererú
User-Agentrº   úx-daznidzx-session-idr  r  r  r  r  u"   âš ï¸� Errore RefreshAccessToken: N)rð   rz   rm   r   r{   ÚuuidÚuuid4r  r  r˜   r™   r"   r+   r1   )rÂ   r&  rÅ   rø   rô   ÚuidÚdev_strÚ	short_devr!  rË   r#   r�   Únew_tokr;   s                 r$   Údazn_refresh_tokenr9  ³  s%  € ä  Ó'€GØ
Ò
=©W�g—k‘k &Ô)¸"€CØÒG±w˜GŸK™K¨
Ô3ÀB€GØ?BÀg¹~�—‘˜cÓ" 2Ñ&×.Ñ.¨w¸Ô;ÐS_€Ià
J€Cà" 5 'Ð*Ø*Ø(Ø*ð VØØÜœDŸJ™J›LÓ)ñ	€Gð>Ü˜:Ó&ˆØ�F‰F�3˜j¨)Ð4¸gÈrˆFÓRˆØ�4Š4Ø—f‘f“h—l‘l ;°Ó3×7Ñ7¸Ó@ˆGÙØ�ð øô ò >ÜÐ0°°Ð4´f×=Ð=Øûð>ús   ÂA C6 Ã6	DÃ?DÄDÚconfigÚ	cli_tokenc                 óD
  — |}|s�t         j                  j                  t        «      rj	 t	        j
                  t        t        dd¬«      «      }|j                  dd«      }|r0t        |«      \  }}}|r|}nt        dt        › d| › d�t        «       |s"| j                  d	i «      j                  dd«      }|rt        |«      \  }}}|sd}|�s‘t         j                  j                  t         j                  j                  t        «      d
«      }	t         j                  j                  |	«      �rŠt        d|	› d�t        «       	 t        |	dd¬«      5 }
|
D �cg c])  }d|v sŒ|j                  d«      rŒ|j!                  «       ‘Œ+ }}ddd«       D �]  }|j#                  dd«      \  }}d}|dkD  rît$        j'                  «       }t)        |||«      \  }}|dk(  r\|rZt+        ||¬«      xs |}|}t        dt,        «       	 t        t        dd¬«      5 }
t	        j.                  d|i|
d¬«       ddd«       ni|dk(  rIt        d|› d|dz
  › d�t        «       t$        j1                  «        |dz  }t3        j4                  d«       nt        d|› d�t6        «       n|dkD  rŒî|s�Œ n |s·t        dt6        «       n¦| j                  d	i «      j                  d d«      }| j                  d	i «      j                  d!d«      }|r`|r^t$        j'                  «       }t)        |||«      \  }}|r8|}	 t        t        dd¬«      5 }
t	        j.                  d|i|
d¬«       ddd«       |�rCt        |«      \  }}}|�r	|d"z  }|d"z  }t        d#|› d$|d"z  › d%|j                  d&d'«      › d(�t,        «       ||j                  d&d«      |j                  d)d«      |j                  d*d«      |j                  d+d,«      |j                  d-d«      |j                  d.d«      |j                  d/d«      t9        j:                  «       j=                  «       d0œ	}t        t        dd¬«      5 }
t	        j.                  ||
dd1¬2«       ddd«       |S t        d3t6        «       t        d4t>        › d5�t        «       |S # t        $ r Y �Œ!w xY wc c}w # 1 sw Y   �Œ7xY w# t        $ r g }Y �ŒHw xY w# 1 sw Y   �Œ°xY w# t        $ r Y �Œ¿w xY w# 1 sw Y   �Œ£xY w# t        $ r Y �Œ²w xY w# 1 sw Y   |S xY w)6z]Recupera il token attivo dal file tokens, dalla config, oppure esegue il login se configurator�   r   rÓ   rÂ   r¬   u   âš ï¸� Token salvato in u    Ã¨ scaduto (scaduto da zs)rÐ   úaccounts.txtu;   â�³ Nessun token valido trovato, avvio Login automatico da r(   rg   re   Nrj   rÏ   r   r  ©rø   uE   âœ… Login completato e dispositivo registrato! Nuovo token acquisito.rÒ   r>   )rÕ   r  u   âš ï¸� Rate limit o errore per z, cambio proxy e riprovo... (z tentativi rimasti)u   â�Œ Account z4 fallito (Invalid o Blocked), passo al successivo...uE   â�Œ Nessun account in accounts.txt Ã¨ risultato valido o funzionante.rÃ   rÄ   ró   u'   ðŸ”‘ Token DAZN valido Â· Scadenza tra zh zm (ViewerID: ÚviewerIdúN/Ar*   rp   r(  Úcountryr®   Ú
userstatusÚissuedrò   )	rÂ   Ú	viewer_idrÆ   rÅ   rA  Úuser_statusrC  rò   Ú
updated_atFrÔ   u<   âš ï¸� ATTENZIONE: Il token fornito Ã¨ SCADUTO o NON VALIDO!zAggiorna il token in z o usa --token <nuovo_token>) r-   r.   r/   Ú
TOKEN_FILEr™   r`   rƒ   rz   r÷   r+   r1   r"   ÚjoinÚdirnameÚ__file__rl   rk   rm   rÙ   rˆ   r%  r9  r,   rØ   r‹   r–   Úsleepr:   r   rP   Ú	isoformatr×   )r:  r;  rÂ   Út_dataÚt_candÚvalrî   Ú_rô   Úaccounts_filer…   ÚlÚlinesrc   rÃ   rÄ   Úretriesrø   ÚstatusÚ	new_tokenÚ	reg_tokenÚstÚtkÚminsÚhrsÚt_infos                             r$   Ú	get_tokenr]  Ð  sà  € à€EÙ”R—W‘W—^‘^¤JÔ/ð
	Ü—Y‘Yœt¤J°¸gÔFÓGˆFØ—Z‘Z ¨Ó,ˆFÙÜ0°Ó8‘��S˜!ÙØ"‘EäÐ2´:°,Ð>VÐX[ÐW[ÐV\Ð\^Ð_ÔagÔhñ Ø—
‘
˜6 2Ó&×*Ñ*¨7°BÓ7ˆáÜ.¨uÓ5ÑˆˆS�'ÙØˆEò ÜŸ™Ÿ™¤R§W¡W§_¡_´XÓ%>ÀÓOˆÜ�7‰7�>‰>˜-Õ(ÜÐMÈmÈ_Ð\_Ð`ÔbhÔiðÜ˜-¨°wÕ?À1Ù01ÓX±¨1°S¸A²XÀaÇlÁlÐSVÕFW˜QŸW™W�Y°�EÐX÷ @ô
 �Ø"&§*¡*¨S°!Ó"4‘��xà�Ø ’kÜ!.×!7Ñ!7Ó!9�JÜ(2°5¸(ÀJÓ(OÑ%�F˜Ià Ò*©yÜ$6°yÈZÔ$XÒ$eÐ\e˜	Ø )˜ÜÐcÔejÔkð!Ü!%¤j°#ÀÕ!HÈAÜ $§	¡	¨7°EÐ*:¸AÀaÕ H÷ "Ið Ø 7Ò*ÜÐ=¸e¸WÐDaÐbiÐjkÑbkÐalÐlð  Aô  CIô  JÜ%×,Ñ,Ô.Ø 1™˜ÜŸ
™
 1�ä˜l¨5¨'Ð1eÐfÔhkÔlØð+  “kó. Ùð9 ñ< ÜÐ[Ô]`Õað —J‘J˜v rÓ*×.Ñ.¨w¸Ó;ˆEØ—z‘z &¨"Ó-×1Ñ1°*¸bÓAˆHÙ™Ü*×3Ñ3Ó5�
Ü# E¨8°ZÓ@‘��BÙØ�EðÜ!¤*¨c¸GÕDÈÜ ŸI™I w°Ð&6¸À!ÕD÷ Eò
 Ü.¨uÓ5ÑˆˆS�'ÚØ˜"‘9ˆDØ˜"‘*ˆCÜÐ9¸#¸¸bÀÈÁÀÈ=ÐY`×YdÑYdÐeoÐqvÓYwÐXxÐxyÐzô  }Bô  Cð Ø$Ÿ[™[¨°RÓ8Ø!Ÿ+™+ f¨bÓ1Ø$Ÿ[™[¨°RÓ8Ø"Ÿ;™; y°$Ó7Ø&Ÿ{™{¨<¸Ó<Ø!Ÿ+™+ h°Ó2Ø—{‘{ 5¨!Ó,Ü&Ÿl™l›n×6Ñ6Ó8ñ
ˆFô ”j #°Õ8¸AÜ—	‘	˜& !¨A¸EÕB÷ 9ð €Lô ÐNÔQTÔUÜÐ'¬ }Ð4PÐQÔSYÔZà€Løô{ ò 	Úð	üò$ Y÷ @Ñ?ûäò Ø“ðú÷  "IÑ!Hûä(ò !Ú ð!ú÷6 EÑDûä$ò Úðú÷* 9ð €Lúsº   ©A)R' ÅS	 ÅR<Å	R7Å!R7Å3R7ÆR<ÆS	 È S(ÈSÈ-S(Ì*T Ì<S8ÍT ÑTÒ'	R4Ò3R4Ò7R<Ò<SÓS	 Ó	SÓSÓS%	Ó S(Ó(	S5Ó4S5Ó8TÓ=T Ô	TÔTÔT)Úchrome99_androidÚchrome131_androidc                 óz   — t         rt        j                  d¬«      }nt        j                  «       }| r| |_        |S )z.Sessione Chrome desktop: login, EPG, manifest.Ú	chrome120©Úimpersonate)ÚHAS_CURL_CFFIÚcffi_requestsÚSessionr   r]   )rø   r#   s     r$   r  r  B  s2   € åÜ×!Ñ!¨kÔ:‰ä×ÑÓˆÙØˆŒ	Ø€HrE   c                 óà   — t         rFd}t        D ]%  }	 t        j                  |¬«      }| r| |_        |c S  |rt        d|› d�t        «       t        | «      S # t
        $ r}|}Y d}~ŒYd}~ww xY w)zBSessione TLS Android: playback + license. Non serve la Fire Stick.Nrb  u,   âš ï¸� Impersonate Android non disponibile (z), fallback Chrome)	rd  Ú_ANDROID_IMPERSONATEre  rf  r]   r"   r+   r1   r  )rø   Úlast_errÚimpr#   r;   s        r$   Úcreate_android_sessionrk  M  sx   € åØˆß'ˆCðÜ!×)Ñ)°cÔ:�ÙØ *�A”IØ’ð (ñ ÜÐ>¸x¸jÐHZÐ[Ô]cÔdÜ˜*Ó%Ð%øô ò Ø�Üûðús   “ AÁ	A-Á!A(Á(A-Ú_ADB_BINÚ_STICK_READYc                  ó  — t         j                  j                  d«      t         j                  j                  t        d«      g} | D ](  }|sŒt         j                  j                  |«      sŒ&|c S  t        j                  d«      S )Nz1%LOCALAPPDATA%\Android\Sdk\platform-tools\adb.exezadb.exeÚadb)r-   r.   Ú
expandvarsrH  r7   ÚisfileÚshutilÚwhich)Ú
candidatesr�   s     r$   Ú	_find_adbru  d  sb   € ä
�‰×ÑÐOÓPÜ
�‰�‰”Z Ó+ð€Jó ˆÚ”—‘—‘ Õ"ØŠHð ô �<‰<˜ÓÐrE   c                  ó  — t         j                  j                  dd«      j                  «       j	                  «       dv rdayt
        �t
        S t        «       at        sday	 t        j                  t        dgdd¬	«      } | j                  xs d
j                  dd«      j                  «       }t        d„ |dd D «       «      at
        rt        st!        dt"        «       dat%        t
        «      S # t        $ r daY Œ:w xY w)u6   True se c'Ã¨ una Fire Stick/Android collegata via adb.ÚDAZN_NO_STICKr¬   )Ú1ÚtrueÚyesFNÚdevicesTé   ©Úcapture_outputr?   rE   r   r   c              3   óf   K  — | ])  }d |v xs |j                  «       j                  d«      –— Œ+ y­w)z	devicez deviceN)rk   Úendswith)Ú.0Úlns     r$   Ú	<genexpr>z"stick_available.<locals>.<genexpr>~  s6   è ø€ ð 
á�ð ˜2ÐÒ@ "§(¡(£*×"5Ñ"5°iÓ"@Ó@Ùùs   ‚/1rj   uN   ðŸ“¡ Fire Stick collegata: playback e licenza passano dal device (TLS Android))r-   Úenvironrz   rk   Úlowerrm  ru  rl  r3   ÚrunÚstdoutrì   Ú
splitlinesÚanyr"   Ú_STICK_LOGGEDr+   r,   r©   )r�   rS  s     r$   Ústick_availabler‹  o  sé   € ô 
‡z�z‡~�~�o rÓ*×0Ñ0Ó2×8Ñ8Ó:Ð>RÑRØˆØÜÐÜÐÜ‹{€HÝØˆØðÜ�N‰NœH iÐ0ÀÈqÔQˆØ—‘’˜S×(Ñ(¨°)Ó<×GÑGÓIˆÜñ 
à˜A˜B‘ió
ó 
ˆõ �MÜÐ\Ô^cÔdØˆÜ”ÓÐøô ò ØŠðús   Á"A!C0 Ã0C>Ã=C>Úmethodr!  rË   Úbodyc                 ó>  — t         syt        j                  j                  t        d«      }t        j                  j                  t        d«      }t        j                  j                  t        d«      }d}d}d}	d|› d	�d
| › d	�ddddd|	› d	�dg}
|j                  «       D ]H  \  }}t        |«      j                  dd«      j                  d	d«      }|
j                  d|› d|› d	�«       ŒJ |�;t        |d«      5 }|j                  |«       ddd«       |
j                  d|› d	�«       t        |ddd¬«      5 }|j                  dj                  |
«      dz   «       ddd«       	 t        j                  t         d||gdd¬ «       |� t        j                  t         d||gdd¬ «       t        j                  t         d!d"d#d$d%d&d'd(|g
dd)¬ «      }|j                  xs d*j                  dd+«      j                  «       }t        j                  t         d,|	|gdd¬ «       t        j                  j!                  |«      rt        |d-«      j#                  «       nd*}	 t%        |«      }||fS # 1 sw Y   �Œ\xY w# 1 sw Y   �ŒxY w# t&        $ r d.}Y Œ+w xY w# t(        $ r Y yw xY w)/zIGET/POST eseguiti da curl sulla stick (niente proxy mitm, cert insecure).)r   rE   z	_curl.cfgz
_curl.bodyz	_curl.outz/sdcard/dazn_curl.cfgz/sdcard/dazn_body.binz/sdcard/dazn_out.binzurl = "Ú"zrequest = "ÚinsecureÚsilentz
show-errorznoproxy = "*"z
output = "zwrite-out = "%{http_code}"Ú\z\\z\"z
header = "ú: NÚwbzdata-binary = "@rÒ   r   rU   )r   ÚnewlineÚpushTé   r}  ÚshellÚenvzhttp_proxy=zhttps_proxy=zHTTP_PROXY=zHTTPS_PROXY=Úcurlz-Ké-   rE   r   ÚpullÚrbr   )rl  r-   r.   rH  r7   Úitemsr{   r   r„   rƒ   Úwriter3   r†  r‡  rì   rk   r/   Úreadr¨   Ú
ValueErrorr"   )rŒ  r!  rË   r�  Ú	local_cfgÚ
local_bodyÚ	local_outÚ
remote_cfgÚremote_bodyÚ
remote_outrS  ÚkÚvÚvvÚfhr�   Úcode_sÚrawÚcodes                      r$   Ú
stick_httpr¯  Š  st  € åØÜ—‘—‘œZ¨Ó5€IÜ—‘—‘œj¨,Ó7€JÜ—‘—‘œZ¨Ó5€IØ(€JØ)€KØ'€Jà
�#��aÐØ
�f�X˜QÐØØØØØ
�Z�L Ð"Ø$ð	€Eð —‘–‰ˆˆ1Ü�‹V�^‰^˜D &Ó)×1Ñ1°#°uÓ=ˆØ�‰�z !  B r d¨!Ð,Õ-ð  ð ÐÜ�*˜dÔ# rØ�H‰H�TŒN÷ $à�‰Ð'¨ }°AÐ6Ô7Ü	ˆi˜ w¸Õ	=ÀØ
�‰�—‘˜5Ó! DÑ(Ô)÷ 
>ðÜ�‰œ &¨)°ZÐ@ÐQUÐ_aÕbØÐÜ�N‰NœH f¨j¸+ÐFÐW[ÐegÕhÜ�N‰Nä˜'Ø�} n°mÀ^Ø˜˜jðð
  ¨ô
ˆð —(‘(’/˜c×)Ñ)¨'°9Ó=×CÑCÓEˆÜ�‰œ &¨*°iÐ@ÐQUÐ_aÕbÜ.0¯g©g¯n©n¸YÔ.GŒd�9˜dÓ#×(Ñ(Ô*ÈSˆð	Ü�v“;ˆDð �SˆyÐ÷1 $Ñ#ú÷ 
>Ñ	=ûô& ò 	ØŠDð	ûô ò ÙðúsO   Ã9I%Ä7$I2Å$C1J ÉI? É!J É%I/É2I<É?JÊ
J ÊJÊJ Ê	JÊJÚpssh_b64c                 óì   — 	 t        j                  | «      }t        |«      dk\  r|dd t        k(  ryt	        | «      }t        |j                  «      j                  «       t        k(  S # t        $ r Y yw xY w)z9Verifica se una stringa PSSH Base64 appartiene a Widevineé   é   TF)
ré   Ú	b64decodern   ÚWIDEVINE_SYSTEM_ID_BYTESr   r{   Ú	system_idr…  ÚWIDEVINE_SYSTEM_IDr"   )r°  r­  r�   s      r$   Úis_widevine_psshr¸  ¿  sl   € ðÜ×Ñ˜xÓ(ˆÜˆs‹8�rŠ>˜c " R˜jÔ,DÒDØÜ�‹NˆÜ�1—;‘;Ó×%Ñ%Ó'Ô+=Ñ=Ð=øÜò Ùðús   ‚/A' ²4A' Á'	A3Á2A3Úmpd_contentc           	      óî  — 	 t        j                  | «      }g }|j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|s|g}|D �]M  }|j                  j                  d«      xs |j                  j                  d«      xs dj                  «       }d|v xs d	|v }|j                  «       D �cg c]   }|j                  j                  d
«      sŒ|‘Œ" }	}|	D ]¸  }
|
j                  j                  dd«      j                  «       }t        |v }|
j                  «       D �cg c]   }|j                  j                  d«      sŒ|‘Œ" }}|D ]F  }|j                  xs dj                  «       }|sŒ$|st        |«      sŒ2|j                  |||dœ«       ŒH Œº �ŒP |s”|j                  «       D ]�  }|j                  j                  d«      sŒ|j                  sŒ,|j                  j                  «       sŒG|j                  j                  «       }t        |«      sŒm|j                  |dddœ«       Œƒ |sy|j!                  d„ d¬«       |d   d   }d}	 t#        |«      }|j$                  r°|j$                  d   }t'        |d«      r&t)        t+        |d«      «      r|j-                  «       }not'        |d«      r't/        |j,                  t0        «      r|j,                  }n<t/        |t2        «      r|j-                  «       }nt1        |«      j5                  dd«      }||fS # t        $ r}t        d|› �t        «       Y d}~yd}~ww xY wc c}w c c}w c c}w # t        $ r Y ||fS w xY w)zGEstrae il blocco PSSH Widevine e il relativo KID dal manifesto DASH MPDz'Errore parsing XML del manifesto DASH: N©NNÚAdaptationSetÚmimeTypeÚcontentTyper¬   ÚvideoÚmp4ÚContentProtectionÚschemeIdUriÚpssh)rÃ  Úis_videoÚis_wv_schemeTc                 ó   — | d   | d   fS )NrÄ  rÅ  rD   )Úcs    r$   Ú<lambda>z'extract_widevine_pssh.<locals>.<lambda>ú  s   €  1 Z¡=°!°NÑ2CÑ"DrE   )ÚkeyÚreverser   Úhexr)  )ÚETÚ
fromstringr"   r+   r:   ÚiterÚtagr€  Úattribrz   r…  r·  r  rk   r¸  r„   Úsortr   Úkey_idsÚhasattrÚcallableÚgetattrrË  rx   r{   Úbytesr   )r¹  Úrootr;   rt  ÚelemÚadaptation_setsÚasetÚmimerÄ  ÚcpsÚcpÚ	scheme_idrÅ  Ú
pssh_nodesÚnoder  Ú	best_psshÚexpected_kidr�   Ú	first_kids                       r$   Úextract_widevine_psshrä  Ê  s  € ðÜ�}‰}˜[Ó)ˆð
 €JØ(,¯	©	¬ÓZ© °t·x±x×7HÑ7HÈÕ7Y’t¨€OÐZÙØ˜&ˆäˆØ—‘—‘ 
Ó+ÒS¨t¯{©{¯©¸}Ó/MÒSÐQS×ZÑZÓ\ˆØ˜d�?Ò3 e¨t mˆà $§	¡	¤ÓV¡˜¨t¯x©x×/@Ñ/@ÐATÕ/UŠt ˆÐVÛˆBØŸ	™	Ÿ™ m°RÓ8×>Ñ>Ó@ˆIÜ-°Ð:ˆLà+-¯7©7¬9ÓR©9 4¸¿¹×8IÑ8IÈ&Õ8Qš$¨9ˆJÐRÛ"�ØŸ	™	š R×.Ñ.Ó0�ÙØÙÔ#3°DÕ#9Ø×%Ñ%Ø $Ø$,Ø(4ñ'õ ñ #ò ð  ñ* Ø—I‘I–KˆDØ�x‰x× Ñ  Õ(¨T¯Y«Y¸4¿9¹9¿?¹?Õ;LØ—y‘y—‘Ó(�Ü# DÕ)Ø×%Ñ%Ø $Ø$(Ø(,ñ'õ ð	  ñ Øà‡O�OÑDÈd€OÔSØ˜1‘˜fÑ%€Ià€LðÜ�‹OˆØ�9Š9ØŸ	™	 !™ˆIÜ�y %Ô(¬X´g¸iÈÓ6OÔ-PØ(Ÿ}™}›‘Ü˜ EÔ*¬z¸)¿-¹-ÌÔ/MØ(Ÿ}™}‘Ü˜I¤uÔ-Ø(Ÿ}™}›‘ä" 9›~×5Ñ5°c¸2Ó>�ð �lÐ"Ð"øô ò ÜÐ5°a°SÐ9¼3Ô?Üûðüò
 [ùò Wùò
 SøôT ò Øà�lÐ"Ð"ðúsM   ‚L- « MÁMÃ MÃ$MÄ3 M ÅM É"CM% Ì-	MÌ6MÍMÍ%	M4Í3M4ÚchannelrD  c                 ó�  — |j                  di «      }| j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd	«      }|j                  d
d«      }|j                  dd«      }	|j                  dd«      }
|j                  dd«      }|j                  dd«      }|j                  dd«      }|xs d}t        t        j                  «       dz  «      }t        j                  «       j
                  dd j                  «       }|› d|› d|› d|› �}|dd|||	|
||||d||dœ}dt        |«      › �S ) z@Costruisce l'endpoint Playback con SessionId e timestamp freschirÐ   r¿   r½   rÇ   r­   rÈ   z3@dazn/peng-html5-core/tv-legacy/exoplayer-androidtvrÉ   r®   ÚplatformÚ	androidtvÚmodelzFire TV StickÚsecurery  ÚmanufacturerÚamznÚplayready_initiatorÚfalseÚcapabilitieszhevc,mtaÚunknownr�   Né   r)  ÚWIDEVINEz	MPEG-DASHr¬   )Ú
AppVersionÚDrmTypeÚFormatÚPlayerIdr  ÚModelÚSecureÚManufacturerÚPlayReadyInitiatorÚCapabilitiesÚAssetIdÚMtaLanguageCodeÚLanguageCodeÚ	SessionIdz,https://api.playback.indazn.com/v5/Playback?)rz   r¨   r–   r3  r4  rË  Úupperr   )rå  r:  rD  Údazn_cfgÚasset_idrÇ   rÈ   Úlangrç  ré  rê  rë  Úplayready_initrï  Úv_idÚtsÚrnd_hexÚ
session_idÚparamss                      r$   Úbuild_playback_urlr
    s\  € à�z‰z˜& "Ó%€HØ�{‰{˜4Ð!<Ó=€HØ—,‘,˜}Ð.HÓI€KØ—‘˜[Ð*_Ó`€IØ�<‰<˜
 DÓ)€Dð  �|‰|˜J¨Ó4€HØ�L‰L˜ /Ó2€EØ�\‰\˜( FÓ+€FØ—<‘< °Ó7€LØ—\‘\Ð"7¸ÓA€NØ—<‘< °
Ó;€LØÒ!˜	€DÜ	ŒT�Y‰Y‹[˜4ÑÓ	 €BÜ�j‰j‹l×Ñ˜r Ð"×(Ñ(Ó*€GØ�4�q˜˜˜a ˜z¨¨7¨)Ð4€Jð "ØØØØØØØ$Ø,Ø$ØØØØñ€Fð  :¼)ÀFÓ:KÐ9LÐMÐMrE   rÁ   c           	      óð  — |j                  di «      }t        |«      }|r|j                  d«      ndxs |j                  dd«      }|r|j                  d«      ndxs0 |j                  d«      xs t        t        j                  «       «      }|j                  di «      }d	|› �|j                  d
d«      |j                  dd«      |j                  dd«      dt        t        j                  «       «      ||dœ}	|j                  d«      r|d   |	d<   t        |«      }
	 |
j                  | |	d¬«      }|j                  sç|j                  j                  dd«      }	 |j                  «       }t        |t        «      r|j                  di «      ni }|j                  di «      xs i j                  d«      xs |j                  dd }|j                  dd«      }|rd|› d|› �}d|j                  «       v sd|j                  v sd |j                  v rd!}dd"|j                  › d#|› �fS |j                  «       dfS # t        $ r |j                  dd }Y Œpw xY w# t        $ r}dt        |«      fcY d}~S d}~ww xY w)$zWEffettua la chiamata all'endpoint Playback DAZN con headers personalizzati e bypass WAFrÐ   rp   NrÆ   ú$790f7b77-25f4-4cd8-bc68-15c600c9eb89r(  rÅ   rË   r,  r
  zhttps://tv.dazn.comrµ   zhttps://tv.dazn.com/r¹   ú¹Mozilla/5.0 (Linux; Android 11; Fire TV Stick Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/105.0.5195.79 Mobile Safari/537.36 DAZN_HTML_ANDROIDTVr´   )r-  r/  r0  r¹   rº   zx-correlation-idzx-dazn-devicer2  zx-requested-withé   ©rË   r?   r.  r¬   zodata.errorÚmessageÚvalueéÈ   r®  rL   rM   Úhtmlr  r  zQRequest blocked dall'edge CloudFront (probabile throttle IP: fai pausa 15-30 min)r“   r“  )rz   rð   r{   r3  r4  rk  r˜   rË   r™   rx   ry   r  r"   r…  rš   )rÁ   rÂ   r:  rø   r  rô   r&  rÅ   Úhdr_cfgrË   r#   r�   ÚctypeÚerr_jsonÚoerrrI   r®  r;   s                     r$   Úrequest_playback_infor  B  sX  € à�z‰z˜& "Ó%€HÜ  Ó'€GÙ&-ˆw�{‰{˜6Ô"°4Òz¸H¿L¹LÈÐSyÓ<z€GÙ,3�—‘˜ZÔ(¸ÒpÀ(Ç,Á,È{ÓB[ÒpÔ_bÔcg×cmÑcmÓcoÓ_p€Ià�l‰l˜9 bÓ)€Gà" 5 'Ð*Ø—+‘+˜hÐ(=Ó>Ø—;‘;˜yÐ*@ÓAØ—k‘kØð7ó
ð Ü¤§
¡
£Ó-Ø"Øñ€Gð ‡{�{Ð%Ô&Ø&-Ð.@Ñ&AˆÐ"Ñ#ä˜zÓ*€AðØ�E‰E�,¨¸ˆEÓ<ˆØ�tŠtØ—I‘I—M‘M .°"Ó5ˆEð#ØŸ6™6›8�Ü:DÀXÌtÔ:T�x—|‘| M°2Ô6ÐZ\�Ø—x‘x 	¨2Ó.Ò4°"×9Ñ9¸'ÓBÒRÀaÇfÁfÈTÈcÀl�Ø—x‘x ¨Ó+�ÙØ˜d˜V 2 c UÐ+�Cð ˜Ÿ™›Ñ&Ð*;¸q¿v¹vÑ*EÈÐYZ×Y_ÑY_ÑI_Øi�Ø˜5 §¡ ¨r°#°Ð7Ð7Ð7à�v‰v‹x˜ˆ~Ðøô ò #Ø—f‘f˜T˜c�l’ð#ûô ò Ø”S˜“Vˆ|ÕûðúsJ   Ä<I ÅBH7 Ç!AI È%I È7IÉI ÉIÉI É	I5ÉI0É*I5É0I5r  Úla_urlÚtokens_payloadrâ  c           
      ó(  ‡,— |r|› d|j                  «       › �}n9|› dt        j                  | j                  «       «      j	                  «       dd › �}|t
        v r,t
        |   }	|	j                  d«      |	j                  d«      dfS t        j                  j                  t        d«      }
d}g }t        j                  j                  |
«      rƒt        j                  j                  |
«      rdt        t        j                  |
«      «      D ]C  }|j                  d«      sŒ|j!                  t        j                  j                  |
|«      «       ŒE t        j                  j                  t"        «      r|j!                  t"        «       t%        «       }g }|D ]¦  }	 t'        |d	«      5 }t        j(                  |j+                  «       «      j	                  «       }ddd«       |v r7t/        d
t        j                  j1                  |t        «      › d�t2        «       Œ…|j5                  |«       |j!                  |«       Œ¨ |d| }|st/        d|
› dt"        › d�t6        «       y|j                  di «      }|j                  d«      xs |j                  dd«      }d}d|j                  di «      j                  d|«      ddœ}|rd|› �|d<   d}|D �]  }d}d}	 t9        j:                  |«      }	 t=        |j>                  dd«      }t=        |dd«      }t/        d t        j                  j1                  |t        «      › d!|› d"|› d#�t2        «       tA        jB                  |«      }|j'                  «       }tE        |«      }t/        d$|› �t2        «       |jG                  |tI        | «      d%¬&«      }t/        d'tK        |«      › d(d)|v › d#�t2        «       |jM                  |||d*¬+«      } | jN                  sÁd,| jP                  › d-| jR                  dd. › �Š,t/        d/‰,› d0t        j                  j1                  |t        «      › d1�t6        «       ‰,}tU        «       rDtW        ˆ,fd2„d3D «       «      r0tY        d4|||¬5«      \  }!}"|!d.k7  r>	 	 |�|�|j[                  |«       �ŒÊ	 	 |�|�|j[                  |«       �Œã| j\                  }"|j_                  ||"«       g }#|ja                  |«      D �]K  }$|$jb                  d6k7  sŒte        |$jf                  d7«      r:ti        |$jf                  jj                  tl        «      r|$jf                  jj                  nTte        |$jf                  d7«      r|$jf                  jk                  «       n$tm        |$jf                  «      jo                  d8d9«      }%tq        t=        |$jr                  d7d«      «      r|$jr                  jk                  «       n)t=        |$jr                  d7tm        |$jr                  «      «      }&|#j!                  |%j                  «       |&j                  «       f«       �ŒN |#s+t/        d:t6        «       d;}	 	 |�|�|j[                  |«       �Œ�d<\  }'}(|r#|#D ]  \  })}*|)|j                  «       k(  sŒ|)|*}(}' n |'s
|#r|#d=   \  }'}(|'r.|(r,|'|(d>œt
        |<   tu        «        t/        d?|'› d|(› �tv        «       |'|(df	 |�|�|j[                  |«       c S c S c S  dd|xs dBfS # 1 sw Y   �ŒxY w# t,        $ r |}Y �Œ-w xY w# t,        $ r	 d\  }}Y �Œw xY w# t,        $ r Y �Œcw xY w# t,        $ r Y �Œsw xY w# t,        $ r Y �Œƒw xY w# t,        $ r Y c S w xY w# t,        $ rt}+t/        d@t        j                  j1                  |t        «      › dA|+› �t6        «       tm        |+«      }Y d}+~+	 |�|�|j[                  |«       �Œ # t,        $ r Y �Œw xY wd}+~+ww xY w# 	 |�|�|j[                  |«       w w w # t,        $ r Y w w xY wxY w)CzSDecifra la chiave di contenuto Widevine usando WVD.wvd e l'endpoint di Licenza DAZNrg   Né   ÚkidrÉ  Úwvdé   z.wvdr�  u   â�­ï¸� CDM duplicato saltato: u    (identico a uno giÃ  in lista)z#ERRORE: Nessun file CDM trovato in z o Ú!)NNzCDM missingrÐ   rp   rÆ   r  r  r»   rÌ   r¹   Úgzip)r.  r1  zAccept-Encodingr,  r-  ÚtypeÚ?Úsecurity_level)r#  r#  u   ðŸ”‘ CDM in uso: z (type=z, level=r*   u   ðŸ”� DEBUG License URL: F)Úprivacy_modeu   ðŸ”� DEBUG Challenge size: z bytes (plaintext=s   amznr”   )rË   Údatar?   r“   r“  r  zChiamata License fallita (z) [Ú]c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wr¢   )r…  )r�  r¨  Ú
error_texts     €r$   rƒ  zget_keys_wvd.<locals>.<genexpr>Ù  s"   øè ø€ Ð,rÑNqÈ¨Q°*×2BÑ2BÓ2DÔ-DÑNqùs   ƒ)Ú10802znot allowed to receiveÚPOST)r�  ÚSIGNINGrË  r)  r¬   z5Nessuna chiave di contenuto trovata nella licenza DRMzNo keysr»  r   )r  rÉ  z"Chiave DRM estratta con successo: zErrore licenza DRM Widevine [z]: zLicense denied da tutti i CDM)<r…  r  Úsha256r  r  rH   rz   r-   r.   rH  r7   r/   ÚisdirÚsortedÚlistdirr€  r„   ÚWVD_FILEÚsetrƒ   r  r   r"   r+   Úrelpathr   Úaddr:   r   r`   rÕ  Ú	client_idr   Úfrom_devicerk  Úget_license_challenger   rn   r  r˜   rš   r  r‹  r‰  r¯  ÚcloseÚcontentÚparse_licenseÚget_keysr"  rÓ  r  rx   rË  r{   r   rÔ  rÉ  ræ   r,   )-r°  r  r  r:  r  râ  rø   rÂ   Ú	cache_keyÚcachedÚ
wvd_folderÚ_MAX_CDM_ATTEMPTSrt  r…   Úseen_hashesÚdedupedrÇ  r«  r"  r  r&  Ústick_uaÚlic_headersri  Ú
target_wvdÚcdmÚsessionÚdeviceÚdev_typeÚ	dev_levelr#   Ú	challenger�   r®  Ú	lic_bytesÚcontent_keysr¨  Úk_kidÚk_keyr  rÉ  Úc_kidÚc_keyr;   r)  s-                                               @r$   Úget_keys_wvdrQ  s  s·  ø€ ñ Ø�j  ,×"4Ñ"4Ó"6Ð!7Ð8‰	à�j ¤'§.¡.°·±Ó1BÓ"C×"MÑ"MÓ"OÐPSÐQSÐ"TÐ!UÐVˆ	à”JÑÜ˜IÑ&ˆØ�z‰z˜%Ó  &§*¡*¨UÓ"3°TÐ9Ð9ä—‘—‘œj¨%Ó0€Jð ÐØ€JÜ	‡w�w‡~�~�jÔ!¤b§g¡g§m¡m°JÔ&?ÜœŸ
™
 :Ó.Ö/ˆAØ�z‰z˜&Õ!Ø×!Ñ!¤"§'¡'§,¡,¨z¸1Ó"=Õ>ð 0ô 
‡w�w‡~�~”hÔØ×Ñœ(Ô#ô “u€KØ€GÛˆð	Ü�a˜” "Ü—K‘K §¡£	Ó*×4Ñ4Ó6�÷ ð �ÑÜÐ0´·±·±ÀÄJÓ1OÐ0PÐPoÐpÔruÔvØØ�‰˜ÔØ�‰�qÕð ð Ð+Ð+Ð,€JáÜÐ1°*°¸SÄÀ
È!ÐLÌcÔRØ(à�z‰z˜& "Ó%€HØ× Ñ  Ó(Òj¨H¯L©L¸ÐCiÓ,j€Gð	3ð ð 3Ø—l‘lÐ#4°bÓ9×=Ñ=¸lÈHÓUØ!ñ€Kñ
 Ø)0°°Ð'8ˆ�OÑ$à"€HÜ ˆ
ØˆØˆðN	Ü—[‘[ Ó,ˆFð/Ü" 6×#3Ñ#3°V¸SÓA�Ü# FÐ,<¸cÓB�	ô Ð#¤B§G¡G§O¡O°JÄ
Ó$KÐ#LÈGÐT\ÐS]Ð]eÐfoÐepÐpqÐrÔtwÔxÜ—/‘/ &Ó)ˆCØ—h‘h“jˆGô ' zÓ2ˆAäÐ*¨6¨(Ð3´SÔ9Ø×1Ñ1°'¼4À»>ÐX]Ð1Ó^ˆIÜÐ-¬c°)«nÐ-=Ð=OÐPWÐ[dÐPdÐOeÐefÐgÔilÔmà—‘�v {¸ÈB�ÓOˆAØ—4’4Ø$ Q§]¡] O°2°a·f±f¸T¸c°l°^ÐD�
ÜÐ0°°¸CÄÇÁÇÁÐPZÔ\fÓ@gÐ?hÐhiÐjÔloÔpØ%�Ü"Ô$¬Ó,rÑNqÓ,rÔ)rÜ&0°¸ÀÐS\Ô&]‘O�D˜)Ø˜s’{Ø ðPØ�? wÐ':Ø—I‘I˜gÔ&ùðQ ðLØ�? wÐ':Ø—I‘I˜gÔ&ùðM ŸI™I�	à×Ñ˜g yÔ1à24ˆLØ—\‘\ '×*�Ø—6‘6˜YÓ&Ü)0°·±¸Ô)>Ä:ÈaÏeÉeÏiÉiÔY\ÔC]˜AŸE™EŸIšIÔszÐ{|÷  |Añ  |Að  CHô  tIÐde×diÑdi×dmÑdmÔdoô  ORð  ST÷  SXñ  SXó  OY÷  Oañ  Oað  beð  gió  Oj�EÜ+3´G¸A¿E¹EÀ5È$Ó4OÔ+P˜AŸE™EŸI™IœKÔV]Ð^_×^cÑ^cÐejÔloÐpq×puÑpuÓlvÓVw�EØ ×'Ñ'¨¯©«¸¿¹»Ð(FÖGð	 +ñ  ÜÐKÌSÔQØ$�Øð,Ø�? wÐ':Ø—I‘I˜gÔ&ùð- "‰HˆC�ÙÛ$0‘L�E˜5Ø × 2Ñ 2Ó 4Ó4Ø#(¨%˜S˜Ùð %1ñ
 ™<Ø'¨™?‘��Sá‘sØ03¸CÑ(@”
˜9Ñ%Ü”ÜÐ8¸¸¸Q¸s¸eÐDÄeÔLØ˜˜T�>ðØ�? wÐ':Ø—I‘I˜g×&ò (;’?ð] !ðf ��xÒBÐ#BÐBÐB÷o ‘ûäò 	Ø‹Að	ûôb ò /Ø&.Ñ#�›)ð/ûôB ò Úðû”9ò Úðû”9ò Úðû”9ò Ûðûô ò 	ÜÐ/´·±·±À
ÌJÓ0WÐ/XÐX[Ð\]Ð[^Ð_ÔadÔeÜ˜1“vˆHÛðØ�? wÐ':Ø—I‘I˜gÔ&úÜò Úðþð	ûð
Ø�? wÐ':Ø—I‘I˜gÕ&ð (;�?øäò Ùðýs  Æ\ Æ'2[3Ç\ Ë](Ë/$\ÌE.](Ò\'Ò\7Ò3A](Ó8E](Ù	]Ù "](ÚA](Û]Û3[=	Û8\ Ü \Ü\Ü\$Ü ](Ü#\$Ü$](Ü'	\4Ü3\4Ü7	]Ý]Ý	]Ý]Ý	]%Ý$]%Ý(	_%Ý1A_ Þ4_(Þ9_ß	_ß_ß _%ß%_(ß(`ß*`ß?`à	`	à`à`	à`Úerrc                 ó‚   ‡— | xs dj                  «       Št        ˆfd„dD «       «      ryt        ˆfd„dD «       «      ryy)	aÎ  Classifica un errore Playback in 3 categorie:
    - 'throttle': blocco edge/IP (429, CloudFront, 10405...). Insistere peggiora
      il blocco: la run va fermata, non ritentata.
    - 'account': diniego legato a QUESTO account (Pin, geo/country, entitlement,
      concorrenza...). Inutile riprovare con lo stesso token, ma ha senso far
      provare la rotazione con un altro account.
    - 'transient': tutto il resto (errori rete, 5xx...). Ha senso riprovare.r¬   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr¢   rD   ©r�  r¨  r;   s     €r$   rƒ  z*classify_playback_error.<locals>.<genexpr>  s!   øè ø€ ð Gñ F�aˆ1�Œ6ñ Fùó   ƒ)	Ú429útoo many requestsú
rate limitú
rate-limitz!security policy has been breachedzrequest limitingzrequest blockedÚ
cloudfrontÚ10405Úthrottlec              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr¢   rD   rU  s     €r$   rƒ  z*classify_playback_error.<locals>.<genexpr>  s   øè ø€ ð =ñ <�aˆ1�Œ6ñ <ùrV  )Úpinz	not validzno articlesz	not foundÚ404ÚeligibilityÚentitlementÚgeoÚconcurrencyznot allowedÚ	forbiddenÚdeniedÚinactiveÚsignedinactiveÚ401Ú403ÚaccountÚ	transient)r…  r‰  )rR  r;   s    @r$   Úclassify_playback_errorrm    sV   ø€ ð 
Š�×ÑÓ€AÜ
ó Gñ Fó Gô Gð Ü
ó =ñ <ó =ô =ð ØrE   Úmax_retriesc                 óT  ‡S‡T‡U— t         j                  «       }|j                  dd«      }| j                  dd«      }d}d}	d}
d}d}i }d}d}d}d}i }d\  }}d}t        d	|d	z   «      D �	]Ÿ  }t	        | ||«      }|d	k(  rt        d
|› d�t        «       nt        d|› d|› d|› d�t        «       t        ||||«      \  }ŠT‰Ts|�sÝ‰Tr«t        ˆTfd„dD «       «      r—t        d|› d�t        «       |j                  dd«      }|j                  dd«      }t        ||||¬«      }|rN|}t        |«      \  }}}|j                  d|«      }t        d|› d�t        «       t        j                  d«       �Œ‰Tr]dt        ‰T«      v rPt        d|› d�t        «       t         j#                  | j                  d«      «       | j                  d«      |d‰Tdœc S t%        ‰T«      }|dk(  r.t        d|› d ‰T› �t&        «       | j                  d«      |d!‰Tdœc S |d"k(  r.t        d#|› d$‰T› �t        «       | j                  d«      |d%‰Tdœc S ‰Trt        d&|› d'‰T› d(�t        «       ||k  rt        j                  d)«       �Œt        d*‰T› �t&        «       | j                  d«      |d%‰Tdœc S |j                  d+i «      }|j                  d,«      r|j                  d,«      }|j                  d-g «      }|}|sD||k  rt        j                  d)«       �Œžt        d.t&        «       | j                  d«      |d/d0dœc S g d1¢ŠUˆUfd2„} t)        || ¬3«      }!|d	k(  rÙt        d4t+        |!«      › d5�t,        «       t/        |!«      D ]®  \  }"}#|#j                  d6d7«      }$|#j                  d8d«      }%|#j                  d9i «      }&t1        |&t2        «      r|&j                  d:d«      d;d< nt        |&«      d;d< }'d=|%v }(t5        |#j7                  «       «      })t        d>|"› d?|$› d@|(rdAndB› dC|'› dD|)› �
t,        «       Œ° t9        |«      }*|j                  dEi «      j                  dFi «      }+|+j                  dGdH«      },|j                  dI«      xs i j                  dJ«      }-|-�r\|�sY|!dK   }.|.j                  d8d«      }/|.j                  d9i «      }0t1        |0t2        «      r|0j                  dLdM«      ndM}1t1        |0t2        «      r|0j                  d:d«      nt1        |0t        «      r|0nd}2|/r|2r|/› d7|/v rdNnd7› |1› dO|2› �}/|/r¿t;        |-| j                  d|j                  dPd«      «      |/||d;||¬Q«      \  }}ŠS|sB‰Sr@t        ˆSfdR„dSD «       «      r,t        dT|› dU�t        «       | j                  d«      |d%‰Sdœc S |sB‰Sr@t        ˆSfdV„dWD «       «      r,t        d|› dX�t        «       | j                  d«      |d%‰Sdœc S |!D �]ß  }3|3j                  dYd«      }4|3j                  d8d«      }5|3j                  d9i «      }6|3j                  dZd«      }7|3j                  d6d«      }8|6j                  dLdM«      }9|6j                  d:d«      }:|9r+|:r)d7|4v rdNnd7};|4› |;› |9› dO|:› �}<|5rd7|5v rdNnd7}=|5› |=› |9› dO|:› �}5n|4}<d[d\|,|+j                  d]d^«      |+j                  d_d`«      |+j                  dadb«      dcœ}>|9r|:r
|9› dO|:› �|>dd<   	 |*j                  |<|>de¬f«      }?|?j<                  r|?j>                  nd}@d}AdK}B@�rï	 tC        jD                  @«      }C|CjG                  dg«      D ]î  }D|Dj                  dh«      dik(  sŒdK}Edj}FDjG                  dk«      D ]«  }G|Gj                  dl«      }H|Gj                  dm«      }I|Gj                  dn«      }J|HrFHjI                  «       r6tK        H«      Ek\  r(tK        H«      }EIrIjI                  «       rtK        I«      }FJsŒ�JjI                  «       sŒ’tK        J«      BkD  sŒ¡tK        J«      }BŒ­ EdKkD  rE› doFdjkD  rFnd› �}A n tM        @«      \  }K}L|KrÇ|5rÅ|sÃt;        K| j                  d|j                  dPd«      «      |5||L||¬Q«      \  }}ŠS|sD‰SrBt        ˆSfdp„dSD «       «      r.t        dT|› dU�t        «       | j                  d«      |d%‰Sdœc c S |sD‰SrBt        ˆSfdq„dWD «       «      r.t        d|› dX�t        «       | j                  d«      |d%‰Sdœc c S |<}|4}	|8}
|7}A}|6}|5}|9r	|:r|9› dO|:› �nd}M|M}dr|<› ds|,› dt�}N|Mr	NduM› dt�z  }N|r,|r*Ndv|› dw|› dt�z  }Ndx|,› dt�}OMr	OdyM› dt�z  }OOdz|› d{|<› dt�z  }Ondx|,› dt�}OMr	OdyM› dt�z  }OOd{|<› dt�z  }ON}O}|s�Œž|s�Œ¢Br	d|Bd}z  › d~�nd}Pt        dA› |P› d€|7jO                  «       › d��d‚|Av rt        nt        «        n |r|r n<||k  s�	Œnt        d&|› dƒ|d	z   › d|› d„�t        «       t        j                  d…«       �	Œ¢ |r|rd†n|rd‡nd%}Q| j                  dˆd«      |j                  d‰d«      dŠ| j                  d|j                  dP«      «      › d‹�||r	|r|› dw|› �nd;| j                  dŒ«      d�œ}Ri d| j                  d|j                  dP«      «      “dŽQ“d�|“d�|	“d‘|
“d’|“d“|“d”|“d•|“d–|“d—|“d˜|r	|r|› dw|› �nd;“d™|rdš|› �nd;“d›|“dœ|“d�|“džtQ        jR                  «       jU                  «       “RdŸ<   |RS # t@        $ r d}@Y �Œ	w xY w# t@        $ r Y �Œúw xY w) u:  
    Esegue l'estrazione completa per un singolo canale DAZN con retry intelligente:
    se un flusso restituisce 'Solo Manifest' (nessuna chiave DRM al primo colpo),
    riprova automaticamente esplorando tutti i CDN disponibili e ripetendo la richiesta
    finchÃ© la chiave non viene estratta con successo.
    r?  r¬   rÀ   zDAZN ChannelÚfhdrð  r»  Frj   zRichiesta Playback per 'ú'...õ   ðŸ”� [z] Tentativo Ú/z&: riprovo estrazione Playback & DRM...c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr¢   ©r{   r…  )r�  r¨  rR  s     €r$   rƒ  z"extract_channel.<locals>.<genexpr>C  s$   øè ø€ Ð}Ñ:|°Q˜1¤ C£§¡Ó 0Ô0Ñ:|ùó   ƒ%()Ú
registeredzdevice is notÚregisterznot allowed to playu.   ðŸ“± Registrazione dispositivo richiesta per 'z', chiamo RefreshAccessToken...rp   r(  )r&  rÅ   rø   u2   âœ… Dispositivo registrato! Riprovo Playback per 'g      ð?ÚEligibilityu   â›” [u6   ] Eligibility not allowed â€” evento escluso dal JSON.r¿   ÚELIGIBILITY_BLOCKED)r¿   rÀ   rU  Úerrorr]  z"] Throttle edge/IP, niente retry: Ú	THROTTLEDrk  u   ðŸš« [z7] Diniego per questo account, passo oltre senza retry: ÚERRORõ   âš ï¸� [z] Errore temporaneo: u    â€” riprovo...g      ø?zErrore Playback: ÚAssetÚTitleÚPlaybackDetailsz1Nessun PlaybackDetails disponibile nella rispostaÚ
NO_STREAMSzNessun PlaybackDetails trovato)zdca-de-livezdcb-de-liveÚdezdca-fs-livezdcb-fs-livezdcs-fs-livezdct-fs-liveÚfszdcs-ac-livezdct-ac-livezdca-ac-liveÚaczdct-ak-livezdcs-ak-liveÚakc                 ó|   •— | j                  dd«      j                  «       }t        ‰«      D ]  \  }}||v sŒ|c S  y)NÚCdnNamer¬   iç  )rz   r…  Ú	enumerate)ÚdÚc_nameÚidxÚprefÚ
pref_orders       €r$   Ú	cdn_scorez"extract_channel.<locals>.cdn_score‘  s@   ø€ Ø—U‘U˜9 bÓ)×/Ñ/Ó1ˆFÜ& zÖ2‘	��TØ˜6’>Ø’Jð 3ð rE   )rÉ  u   ðŸ”� DEBUG PlaybackDetails: z CDN disponibilirˆ  r#  ÚLaUrlÚCdnTokenÚValueNró   ÚeyJú  [z] CDN=z | LaUrl_has_jwt=ÚYESÚNOz	 | Token=z... | Keys=rÐ   rË   r¹   r³   ÚLicenseÚPsshr   ÚNameú
dazn-tokenÚ&rè   ÚId)r°  r  r  r:  r  râ  rø   rÂ   c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr¢   ru  ©r�  r¨  Údrm_errs     €r$   rƒ  z"extract_channel.<locals>.<genexpr>¾  s1   øè ø€ ð  /Lñ  SKÈQ¨q´C¸³L×4FÑ4FÓ4HÔ/Hñ  SKùrv  )rX  rW  rY  rZ  õ   â�³ [zZ] Rate limit server licenze (429): mi fermo su questo canale per non peggiorare il blocco.c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr¢   ru  rž  s     €r$   rƒ  z"extract_channel.<locals>.<genexpr>Á  s1   øè ø€ ð  /Sñ  SRÈQ¨q´C¸³L×4FÑ4FÓ4HÔ/Hñ  SRùrv  )z not allowed to receive a licenser*  zlicense deniedz/] 10802 su questo CDM: inutile altri CDN/retry.ÚManifestUrlÚ
Resolutionr  r¯   r¶   r°   r·   r±   r¸   r²   )r/  r0  r1  r¶   r·   r¸   ÚCookier  r  z/.//{urn:mpeg:dash:schema:mpd:2011}AdaptationSetr¾  r¿  r  z-{urn:mpeg:dash:schema:mpd:2011}RepresentationÚheightÚ	frameRateÚ	bandwidthr�   c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr¢   ru  rž  s     €r$   rƒ  z"extract_channel.<locals>.<genexpr>  s2   øè ø€ ð  3Pñ  WOÐQR°1¼¸G»×8JÑ8JÓ8LÔ3Lñ  WOùrv  c              3   óT   •K  — | ]  }|t        ‰«      j                  «       v –— Œ! y ­wr¢   ru  rž  s     €r$   rƒ  z"extract_channel.<locals>.<genexpr>  s2   øè ø€ ð  3Wñ  WVÐQR°1¼¸G»×8JÑ8JÓ8LÔ3Lñ  WVùrv  zmpv "z" --user-agent="r�  z --http-header-fields="Cookie: z" --demuxer-lavf-o="decryption_key=rg   zffplay -user_agent "z -headers "Cookie: z -cenc_decryption_key z "z @ r�   z kbpszRisoluzione stream: z (Profilo API: r*   Ú1080z@] Solo Manifest (chiavi DRM non ancora pronte). Nuovo tentativo z
 tra 2s...r>   r’   ÚMANIFEST_ONLYÚlogoÚEventIdz*https://addictedbytheproject.nl:8443/play/z/stream.mpdÚepg©r¬  Úevent_idÚproxy_manifestrÀ   Ú	clear_keyr®  rU  Úmanifest_urlÚbase_manifest_urlÚcdn_nameÚ
resolutionÚactual_resolutionÚ	cdn_tokenÚlicense_urlr  rÉ  Ú
key_stringÚcookie_headerzCookie: Úmpv_cmdÚmpv_commandÚffplay_commandÚextracted_atÚ	_internal)+rÙ   rˆ   rz   Úranger
  r+   r2   r1   r  r‰  r9  r÷   r,   r–   rK  r{   r   r4  rm  r:   r/  rn   r   r‰  rx   ry   r•   Úkeysr  rQ  r˜   r  r"   rÌ  rÍ  ÚfindallÚisdigitr¨   rä  r   r   rP   rL  )Vrå  r:  rÂ   r  rn  rø   rD  Úchannel_nameÚlast_composed_manifest_urlÚlast_raw_manifest_urlÚlast_cdn_nameÚlast_resolutionÚlast_actual_resolutionÚlast_cdn_tokenÚlast_la_urlÚlast_cookie_hdrÚlast_mpv_cmdÚlast_ffplay_cmdÚ
last_assetr  rÉ  Úlicense_refreshedÚattemptrÁ   Úplayback_datar&  rÅ   Úref_tokrP  Úerr_kindÚassetÚdetails_listr�  Úsorted_detailsrŒ  ÚdetÚcdn_nÚlaÚctÚct_valÚhas_jwtrÂ  r#   Údazn_headersÚuaÚ	json_psshÚd0Úla0Úct0Útn0Útv0rŠ  Úraw_manifest_urlr  r¸  r¶  rµ  Ú
token_nameÚ	token_valÚsepÚcomposed_manifest_urlÚla_sepÚmpd_headersÚr_mpdÚmpd_textr·  Úmax_bandwidthr×  rÚ  Úmax_hÚmax_fpsÚrepr"  ÚfpsÚbwr°  râ  Ú
cookie_hdrr¼  Ú
ffplay_cmdÚbw_strrU  Úresult_entryrŸ  rR  rŽ  sV                                                                                      @@@r$   Úextract_channelrú     sŸ  ú€ ô ×'Ñ'Ó)€JØ×"Ñ" :¨rÓ2€IØ—;‘;˜v ~Ó6€Là!#ÐØÐØ€MØ€OØ&ÐØ€NØ€KØ€OØ€LØ€OØ€JØ�H€CˆØÐä˜˜K¨!™O×,ˆÜ)¨'°6¸9ÓEˆØ�aŠ<ÜÐ*¨<¨.¸Ð=¼tÕDä�&˜˜ l°7°)¸1¸[¸MÐIoÐpÔrxÔyä2°<ÀÈÐPZÓ[Ñˆ�sÙ’má”sÓ}Ñ:|Ó}Ô}ÜÐDÀ\ÀNÐRqÐrÔtxÔyØ(×,Ñ,¨V°RÓ8�Ø*×.Ñ.¨z¸2Ó>�	Ü,¨U¸GÈyÐeoÔp�ÙØ#�EÜ+=¸gÓ+FÑ(�A�q˜.Ø .× 2Ñ 2°:¸yÓ I�IÜÐLÈ\ÈNÐZ^Ð_ÔafÔgÜ—J‘J˜s”OÙñ �}¬¨C«Ñ0Ü�e˜L˜>Ð)_Ð`ÔbhÔiÜ(×,Ñ,¨W¯[©[¸Ó->Ô?à!Ÿ+™+ dÓ+Ø(Ø3Ø ñ	ò ô /¨sÓ3ˆHØ˜:Ò%Ü�e˜L˜>Ð)KÈCÈ5ÐQÔSVÔWà!Ÿ+™+ dÓ+Ø(Ø)Ø ñ	ò ð ˜9Ò$Ü�f˜\˜NÐ*aÐbeÐafÐgÔioÔpà!Ÿ+™+ dÓ+Ø(Ø%Ø ñ	ò ñ Ü�h˜|˜nÐ,AÀ#ÀÀoÐVÔX^Ô_Ø˜Ò$Ü—
‘
˜3”ÙÜÐ# C 5Ð)¬3Ô/à—k‘k $Ó'Ø$Ø!Øñ	ò ð ×!Ñ! '¨2Ó.ˆØ�9‰9�WÔØ Ÿ9™9 WÓ-ˆLØ$×(Ñ(Ð):¸BÓ?ˆØˆ
áØ˜Ò$Ü—
‘
˜3”ÙÜÐCÄcÔJà—k‘k $Ó'Ø$Ø&Ø9ñ	ò ò Sˆ
ô	ô   °)Ô<ˆð �aŠ<ÜÐ.¬s°>Ó/BÐ.CÐCSÐTÔVYÔZÜ% nÖ5‘��SØŸ™ 	¨3Ó/�Ø—W‘W˜W bÓ)�Ø—W‘W˜Z¨Ó,�Ü5?ÀÄDÔ5I˜Ÿ™ ¨Ó,¨S¨bÑ1ÌsÐSUËwÐWZÐXZÈ|�Ø 2˜+�Ü˜CŸH™H›JÓ'�Ü�c˜#˜˜f U GÐ+<Ág¹UÐSWÐ<XÐXaÐbhÐaiÐitÐuyÐtzÐ{ô  ~Aõ  Bð 6ô ˜:Ó&ˆØ—z‘z &¨"Ó-×1Ñ1°)¸RÓ@ˆØ×Ñ˜lð  -ló  mˆà"×&Ñ& yÓ1Ò7°R×<Ñ<¸VÓDˆ	ÚšSØ Ñ"ˆBØ—&‘&˜ "Ó%ˆCØ—&‘&˜ RÓ(ˆCÜ3=¸cÄ4Ô3H�#—'‘'˜& ,Ô/ÈlˆCÜ*4°S¼$Ô*?�#—'‘'˜' 2Ô&ÌZÐX[Ô]`ÔMaÁcÐgiˆCÙ‘sØ˜ S¨C¡Z™c°SÐ9¸#¸¸aÀ¸uÐE�ÙÜ$0Ø&Ø$Ÿ[™[¨¨u¯y©y¸¸rÓ/BÓCØØ!Ø#1Ø!%Ø)Øô	%Ñ!��S˜'ñ ™w¬3ó  /Lñ  SKó  /Lô  ,LÜ˜% ˜~ð  .Hð  Iô  KQô  RØ")§+¡+¨dÓ"3¸\ÐU\ÐgnÑoÒoÙ™w¬3ó  /Sñ  SRó  /Sô  ,SÜ˜% ˜~Ð-\Ð]Ô_eÔfØ")§+¡+¨dÓ"3¸\ÐU\ÐgnÑoÒoäˆAØ Ÿu™u ]°BÓ7ÐØ—U‘U˜7 BÓ'ˆFØŸ™˜j¨"Ó-ˆIØŸ™˜|¨UÓ3ˆJØ—u‘u˜Y¨Ó+ˆHà"Ÿ™ v¨|Ó<ˆJØ!Ÿ™ g¨rÓ2ˆIÙ™iØ Ð$4Ñ4‘c¸#�Ø+;Ð*<¸S¸EÀ*ÀÈQÈyÈkÐ(ZÐ%áØ$'¨6¡M™S°s�FØ &˜x¨ x°
¨|¸1¸Y¸KÐH‘Fà(8Ð%ð 1Ø2Ø Ø)×-Ñ-¨kÐ;ó  AØ$0×$4Ñ$4Ð5GÈÓ$NØ&2×&6Ñ&6Ð7KÈ[Ó&YñˆKñ ™iØ+5¨,°a¸	°{Ð(C�˜HÑ%ðØŸ™Ð3¸[ÐRT˜ÓU�Ø).¯ª˜5Ÿ:š:°r�ð !*ÐØˆMÚðÜŸ=™=¨Ó2�DØ $§¡Ð-^Ö _˜ØŸ8™8 MÓ2°gÓ=Ø$%˜EØ&(˜GØ'+§|¡|Ð4cÖ'd Ø$'§G¡G¨HÓ$5 Ø&)§g¡g¨kÓ&: Ø%(§W¡W¨[Ó%9 Ù#$¨¯©¬Ü'*¨1£v°¢Ü03°A³¨Ù+.°3·;±;´=Ü69¸#³h¨GÚ#%¨"¯*©*­,¼3¸r»7À]Ó;RÜ47¸³G¡Mð (eð  % qšyØ7<°g¸QÈ'ÐTVÊ,¹wÐ\^Ð>_Ð4`Ð 1Ù!ð# !`ô* *?¸xÓ)HÑ&�˜,Ù¡©sÜ(4Ø!)Ø!(§¡¨T°5·9±9¸TÀ2Ó3FÓ!GØ%Ø%Ø'5Ø%1Ø#-Ø#ô	)Ñ%�C˜˜gñ ¡7¬só  3Pñ  WOó  3Pô  0PÜ˜e L >ð  2Lð  Mô  OUô  Và")§+¡+¨dÓ"3Ø$0Ø&-Ø%,ñ	 ô ñ ¡7¬só  3Wñ  WVó  3Wô  0WÜ˜e L >Ð1`ÐaÔciÔjà")§+¡+¨dÓ"3Ø$0Ø&-Ø%,ñ	 ô ð *?Ð&Ø$4Ð!Ø$ˆMØ(ˆOØ%6Ð"Ø&ˆNØ ˆKá9CÉ	˜J˜< q¨¨Ñ4ÐXZˆJØ(ˆOØÐ3Ð4Ð4DÀRÀDÈÐJˆGÙØÐ<¸Z¸LÈÐJÑJ�Ù‘sØÐ?À¸uÀAÀcÀUÈ!ÐLÑL�Ø3°B°4°qÐ9�
ÙØÐ$7¸
°|À1Ð"EÑE�JØÐ 6°s°e¸2Ð>SÐ=TÐTUÐVÑV‘
à3°B°4°qÐ9�
ÙØÐ$7¸
°|À1Ð"EÑE�JØ Ð#8Ð"9¸Ð;Ñ;�
Ø"ˆLØ(ˆOã“sÙ?L˜3˜}°Ñ4Ð5°UÑ;ÐRT�ÜÐ*Ð+<Ð*=¸f¸XÀ_ÐU_×UeÑUeÓUgÐThÐhiÐjÐu{ð  @Qñ  vQÕlqô  W]ô  ^Ùðw  ñz ‘3Ùà�[Ô Ü�(˜<˜.Ð(hÐipÐstÑitÐhuÐuvð  xCð  wDð  DNð  Oô  QWô  XÜ�J‰J�qŽMð] -ñ` ™c‰TÑ<V©Ð\c€Fà—‘˜F BÓ'Ø—N‘N 9¨bÓ1ØFÀwÇ{Á{ÐSWÐYc×YgÑYgÐhlÓYmÓGnÐFoÐozÐ{ØÙ(+±˜�u˜A˜c˜U‘^¸$Ø�{‰{˜5Ó!ñ€Lð!Øˆg�k‰k˜$ 
§¡¨tÓ 4Ó5ð!à�&ð!ð 	Ð2ð!ð 	Ð2ð	!ð
 	�Mð!ð 	�oð!ð 	Ð3ð!ð 	�^ð!ð 	�{ð!ð 	ˆsð!ð 	ˆsð!ð 	©±˜˜˜Q˜s˜e‘n¸4ð!ð 	¹˜8 OÐ#4Ñ5Èdð!ð 	�<ð!ð 	�|ð!ð  	˜/ð!!ð" 	œŸ™›×0Ñ0Ó2ð#!€L�Ñð& ÐøôA ò Ø“ðûô4 !ò Úðús=   Û.lÜ=lÝBlß)lß:là	#lìlìlì	l'ì&l'rÍ   Úinclude_eventsc                 ó°"  ‡Q— t        «       }t        «        t        j                  |j	                  di «      j	                  d«      ¬«       t        || «      }|st        dt        «       i S t        |«      \  }}}|€||j	                  di «      j	                  dg «      j                  «       }|rHt        «       }|D �	ch c]  }	|	j	                  d«      ’Œ }
}	|D ]  }|d   |
vsŒ|j                  |«       Œ |}|st        dt        «       i S |D �	cg c]  }	|	j	                  d«      t        vsŒ|	‘Œ }}	t        d	t        |«      › d
�t        «       g }dg}d}d}d}d„ ŠQd¥d„}t         j"                  j%                  t         j"                  j'                  t(        «      d«      }g }t         j"                  j+                  |«      rL	 t-        |dd¬«      5 }|D �cg c])  }d|v sŒ|j/                  d«      rŒ|j1                  «       ‘Œ+ }}ddd«       d}i }t5        «       }d}d}t7        |d«      D �]#  \  }}	|	j	                  d|	j	                  dd|› �«      «      }t9        d|d›dt        |«      › d|d›�dd ¬!«       d}|rt        |«      nd}t;        |«      D �]o  }|} |}!|�r||t        |«      z     }"|"j=                  dd«      \  }#}$|#|v r|dz  }Œ;|#|v r-||#   \  } }!t9        d"|#j=                  d#«      d   › d$�dd ¬!«       n¤t9        d%|#j=                  d#«      d   › d&�dd ¬!«       t        j?                  «       }%tA        |#|$|%«      \  }&}'|&d'k(  r,|'r*tC        |'|%¬(«      xs |'}(|(} t        | «      \  }}}!| |!f||#<   n+t9        d)dd ¬!«       |&d*k(  r|jE                  |#«       |dz  }�ŒtG        |	|| |!«      } ‰Q|«      })|)d+v r|dz  } nB|r8||dz
  k  r0t        d,|› d-#j=                  d#«      d   › d.�t        «       |dz  }�Œk|dz  } n |�
 ‰Q|«      d/vr*t        d,|› d0�t        «       tG        |	|||«      } ‰Q|«      })|s�Œ|j                  |«        ‰Q|«      })|)d1k7  rd}|)d1k(  r;|dz  }t9        t        › d2|› d3tH        › �«       |d4k\  s�Œct        d5t        «       d } n°|)d6k(  rt9        t        › d7tH        › �«       �Œ–|)d8k(  r? ||d9d«      }* ||d:d«      }+t9        tJ        › d;|*dd< › d=|+dd< › d>tH        › �«       |dz  }�ŒÚ|)d?k(  rt9        t        › d@tH        › �«       �Œùt9        t        › dA|j	                  dBdC«      › d$tH        › �«       �Œ& t7        |«      D �,�-cg c]  \  },}- ‰Q|-«      d?k(  sŒ|,‘Œ }.},}-|rt        dDt        «       |.r©|s§t        dEt        |.«      › dF�t        «       tM        jN                  d4«       |.D ]p  },||,   }/|/j	                  ddG«      }0t        dH|0› dI�t        «       tG        |/|||dJ¬K«      }1 ‰Q|1«      d8k(  sŒJ|1||,<   |dz  }t        dL|0› dM ||1dN«      › �tJ        «       Œr t7        |«      D �,�-cg c]5  \  },}-|-j	                  dB«      rdOtQ        |-j	                  dBd«      «      v r|,‘Œ7 }2},}-|2�r|�st         j"                  j%                  t         j"                  j'                  t(        «      d«      }g }3t         j"                  j+                  |«      rL	 t-        |dd¬«      5 }|D �cg c])  }d|v sŒ|j/                  d«      rŒ|j1                  «       ‘Œ+ }3}ddd«       |3st        dPt        |2«      › dQ�t        «       �n@t        dRt        |2«      › dS�t        «       i }d}4|2D �]  },||,   }/|/j	                  ddG«      }0d}5tS        dTt        |3«      «      }6t;        |6«      D �]Á  }|3|4t        |3«      z     }"|4dz  }4|"j=                  dd«      \  }#}$|#|v r	||#   \  }7}8n‡t        dU|0› dV|#› dW�t        «       t        j?                  «       }%tA        |#|$|%«      \  }&}7|&d'k7  s|7st        dX|#› dY�t        «       di f||#<   Œšt        |7«      \  }}}8|7|8f||#<   t        dZ|#› �tJ        «       |7sŒÆt        d[|0› d\|#› dW�t        «       tG        |/||7|8dT¬K«      }1 ‰Q|1«      })|)d8k(  r.|1||,<   |dz  }t        d]|0› d^|#› d_ ||1dN«      › �tJ        «       d }5 n�|)d?k(  r |1||,<   t        d`|0› da|#› db�t        «       d }5 nx|1j	                  dB«      r6dOtQ        |1j	                  dBd«      «      v rt        dc|0› dd|#› de�tT        «       �Œ”|1||,<   t        df|0› dg|#› d_|1j	                  dBdC«      › �t        «        n |5r�Œt        d`|0› dh�t        «       �Œ tW        di„ |D «       «      }9|9rt        dP|9› dj�t        «       dg}dg}:|j	                  di «      j	                  dki «      j	                  dld«      };tY        ||«      D �]Ö  \  }	} ‰Q|«      })|)dmv sŒ ||d9d«      }* ||d:d«      }+ ||dnd«      }<|j	                  dod«      }=|j	                  dp«      xs |	j	                  dpd«      }>|>rdq|>› dr�nd}?t[        |	j	                  ds«      «      }@|@rdtndu}A|s|)d8k(  r ||dv«      } ||dw«      }t]         ||dxi «      t^        «      r ||dxi «      j	                  dyd«      nd}Bt]         ||dxi «      t^        «      r ||dxi «      j	                  dzd{«      nd{}C|Cr
Brd|C› d}B› �nd}D ||dd«      }E|j                  d~|E› d|j	                  d«      › dr|?› d€A› d�|j	                  d«      › �
«       |j                  d‚«       |j                  dƒ«       |j                  d„«       |j                  d…«       |j                  d†«       |*r*|+r(|j                  d‡«       |j                  dˆ|*› d|+› �«       |;r<|j                  d‰|;› dŠD› �«       |j                  d‹|;› �«       |j                  dŒ«       |j                  |<«       |:j                  d~E› d|j	                  d«      › dr|?› d€A› d�|j	                  d«      › �
«       |:j                  d‚«       |:j                  dƒ«       |*r*|+r(|:j                  d�«       |:j                  dˆ|*› d|+› �«       |:j                  |=«       �ŒÙ g }Fg }G|D �]!  }- ‰Q|-«      })|)dmv sŒ|-j	                  dŽi «      }HFj                  |-j	                  dpd«      |-j	                  d�d«      |-j	                  dod«      |-j	                  dd«      |-j	                  d�«      |-j	                  ds«      d‘œ«       |-j	                  dpd«      |-j	                  d�d«      |-j	                  dod«      |-j	                  dd«      |-j	                  d�«      |-j	                  ds«      d‘œ}I|Ija                  |H«       Gj                  |I«       �Œ$ |D �-cg c]  }- ‰Q|-«      d’vsŒ|-‘Œ }J}-tW        ˆQfd“„|D «       «      }K|Krt        d”K› d•�t        «       tc        jd                  «       jg                  «       }L|Lt        |«      |Fd–œ}Mt-        th        d—d¬«      5 }tk        jl                  M|d4d¬˜«       ddd«       Lt        |«      |t        j?                  «       GJd™œ}Nt-        tn        d—d¬«      5 }tk        jl                  N|d4d¬˜«       ddd«       t-        tp        d—d¬«      5 }|js                  dšj%                  |«      dšz   «       ddd«       t-        tt        d—d¬«      5 }|js                  dšj%                  |:«      dšz   «       ddd«       |rPt         j"                  j%                  tv        d›«      }Ot-        |Od—d¬«      5 }|js                  dœ|› d��«       ddd«       |rPt         j"                  j%                  tv        dž«      }Pt-        |Pd—d¬«      5 }|js                  dœ|› d��«       ddd«       t        dŸtx        › th        › tH        › d |› dt        |«      › d¡�	tJ        «       t        d¢tx        › tp        › tH        › �tJ        «       |r#t        d£t        «       t        d¤|› �t        «       MS c c}	w c c}	w c c}w # 1 sw Y   �Œ´xY w# t2        $ r Y �ŒÃw xY wc c}-},w c c}-},w c c}w # 1 sw Y   �	Œ¸xY w# t2        $ r Y �	ŒÇw xY wc c}-w # 1 sw Y   �Œ^xY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒâxY w# 1 sw Y   �Œ±xY w# 1 sw Y   �ŒlxY w# 1 sw Y   �Œ'xY w)¦zUEstrae tutti i canali/eventi configurati, risolve le chiavi DRM e aggiorna JSON & M3UrÐ   rÊ   ©r^   zNERRORE CRITICO: Nessun token DAZN disponibile! Configuralo in dazn_config.jsonNrÍ   r¿   z"Nessun canale o evento da estrarreu   ðŸš€ Avvio estrazione di z canali/eventi DAZN...z#EXTM3U x-tvg-url=""r   c                 ój   — | j                  d«      xs! | j                  di «      j                  d«      S )NrU  rÀ  ©rz   )r�   s    r$   Ú_get_statusz)extract_and_save_all.<locals>._get_status‘  s+   € Ø�u‰u�X‹ÒF !§%¡%¨°RÓ"8×"<Ñ"<¸XÓ"FÐFrE   r¬   c                 óF   — | j                  di «      j                  ||«      S )NrÀ  rÿ  )r�   rÉ  Údefaults      r$   Ú_get_internalz+extract_and_save_all.<locals>._get_internal“  s    € Ø�u‰u�[ "Ó%×)Ñ)¨#¨wÓ7Ð7rE   r=  r�   r   rÓ   rg   re   Frj   rÀ   zCanale r”  Ú2drs  rM   z<25Ú T)ÚendrN   Ú(ri   r*   z(login z)...r  r>  z[fail]r  )r’   rz  u
   
âš ï¸�  [z] Non riuscito con z., provo account alternativo da accounts.txt...)r’   rz  r|  z[] Tutti gli account hanno fallito (o fallito login). Tento fallback col token principale...r|  u   â›” Throttle edge/IP (z/2)r>   ui   ðŸ›‘ Throttle IP confermato: fermo la run per non peggiorare il blocco. Fai pausa 15-30 minuti e riprova.rz  u%   â›” Eligibility not allowed (escluso)r’   r  rÉ  u   âœ… OK (r|  z...:z...)r«  u2   âš ï¸�  Solo Manifest (in coda per sweep di retry)u   â�Œ Errore (r{  r@  uD   â�­ï¸� Sweep di retry saltati (throttle IP: niente altre richieste).u   ðŸ”„ Rilevati z= canali con 'Solo Manifest'. Avvio sweep di retry dedicato...ÚEventou1   ðŸ”� Secondo tentativo di estrazione chiavi per 'rq  rñ  )rn  u(   âœ… Chiave recuperata con successo per 'z': rº  ÚConcurrencyu   âš ï¸� zO canali bloccati per Concurrency ma nessun account alternativo in accounts.txt.u   ðŸ”„ Sweep Concurrency: zB canali bloccati. Provo con account alternativi da accounts.txt...rÏ   u   ðŸ”‘ [z ] Login con account alternativo r(   u   â�Œ Login fallito per z, provo il prossimo account...u   âœ… Login riuscito con rr  z] Retry con account u   âœ… [z] Recuperato con successo via r“  r~  z] Solo Manifest via z (senza chiavi DRM)r   z] Ancora Concurrency con z, provo un altro account...u   â�Œ [z] Errore con z2] Non recuperabile con nessun account alternativo.c              3   ó€   K  — | ]6  }|j                  d «      sŒdt        |j                  d d«      «      v sŒ3d–— Œ8 y­w)r{  r	  r¬   rj   N)rz   r{   )r�  r�   s     r$   rƒ  z'extract_and_save_all.<locals>.<genexpr>_  s8   è ø€ Ðn¡w !°!·%±%¸µ.À]ÔVYÐZ[×Z_ÑZ_Ð`gÐikÓZlÓVmÒEmœA¡wùs   ‚>™>·>zL canali ancora bloccati per Concurrency dopo aver provato tutti gli account.rË   r¹   )r’   r«  r³  r±  r¬  z tvg-logo="r�  r®  zDAZN Eventi LivezDAZN Canalir¾  r½  r¸  r’  r™  rš  z&Cookie=rè   z#EXTINF:-1 tvg-id="z" tvg-name="z group-title="z",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz=#KODIPROP:inputstream.adaptive.manifest_update_parameter=fullz+#KODIPROP:inputstream.adaptive.live_delay=8z4#KODIPROP:inputstream.adaptive.live_delay_type=fixedz>#KODIPROP:inputstream.adaptive.license_type=com.widevine.alphaz+#KODIPROP:inputstream.adaptive.license_key=z9#KODIPROP:inputstream.adaptive.stream_headers=User-Agent=z&Referer=https://www.dazn.com/z#EXTVLCOPT:http-user-agent=z.#EXTVLCOPT:http-referrer=https://www.dazn.com/z4#KODIPROP:inputstream.adaptive.license_type=clearkeyrÀ  r°  r²  r¯  )r’   r«  rz  c              3   ó:   •K  — | ]  } ‰|«      d k(  sŒd–— Œ y­w)rz  rj   NrD   )r�  r�   r   s     €r$   rƒ  z'extract_and_save_all.<locals>.<genexpr>µ  s   øè ø€ ÐZ¡w !±+¸a³.ÐDYÓ2YœA¡wùs   ƒ”u   â›” zD eventi esclusi per Eligibility not allowed (non saranno ritentati).)rF  Útotal_channelsÚ
keys_foundrÍ   rÒ   rÔ   )rF  r  r  Ú
proxy_usedrÍ   Úfailed_channelsrU   zplay_ffplay.batz
@echo off
z
pause
zplay_mpv.batu   ðŸ’¾ Salvato con successo in: ú (z canali attivi)u!   ðŸ“‹ Playlist M3U aggiornata in: u6   ðŸŽ¬ Launcher generati: play_ffplay.bat e play_mpv.batu   â–¶ï¸�  Comando FFplay:
)r¬   )=rÜ   rä   rÙ   r`   rz   r]  r+   r:   r÷   ÚcopyÚfetch_live_events_from_epgr„   r1   r   rn   r2   r-   r.   rH  rI  rJ  r/   rƒ   rl   rk   r"   r2  r‰  rO   rÁ  rm   rˆ   r%  r9  r4  rú  rR   r,   r–   rK  r{   Úminr   ÚsumÚzipr©   rx   ry   rÞ   r   rP   rL  ÚOUTPUT_JSON_FILEr™   rØ   ÚPROXY_DATA_FILEÚPLAYLIST_FILErŸ  ÚPLAYLIST_PROXY_FILEr7   ÚBOLD)Rr;  rÍ   rû  r:  rÂ   rP  r  Úbase_channelsÚlive_eventsÚchÚbase_idsÚevr›   Ú	m3u_linesÚfoundÚfirst_ffplay_cmdÚfirst_mpv_cmdr  rQ  Úrotation_accountsr…   rR  Úrotation_idxÚalt_token_cacheÚfailed_accountsÚthrottle_streakÚthrottled_abortÚirÀ   ÚresÚattempts_allowedÚacc_tryÚcurrent_tokenÚcurrent_payloadÚ	acct_linerÃ   rÄ   rø   rU  Úlogin_tokenrW  rX  r  rÉ  rŒ  r�   Úmanifest_only_indicesÚ	target_chÚch_titleÚ	retry_resÚconcurrency_indicesÚalt_accountsÚaccount_idxÚresolvedÚattempts_per_channelÚ	alt_tokenÚalt_payloadÚstill_concurrencyÚproxy_m3u_linesrà  Úmanifestr±  r¬  Ú	logo_attrÚis_live_eventÚ
group_nameré  rè  rö  Úch_idÚclean_channelsÚproxy_channelsÚinternalÚproxy_entryr  Úeligibility_countÚnow_tsÚoutput_dataÚproxy_outputÚ
ffplay_batÚmpv_batr   sR                                                                                    @r$   Úextract_and_save_allrN  i  s•  ø€ ä‹]€FÜ„LÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHä�f˜iÓ(€EÙÜÐ\Ô^aÔbØˆ	ä-¨eÓ4Ñ€A€qˆ.ð ÐØŸ
™
 6¨2Ó.×2Ñ2°:¸rÓB×GÑGÓIˆÙÜ4Ó6ˆKÙ/<Ó=©}¨˜Ÿ™˜t�¨}ˆHÐ=Û!�Ø�d‘8 8Ò+Ø!×(Ñ(¨Õ,ð "ð !ˆáÜÐ0´&Ô9Øˆ	ñ &ÓV™X�r¨¯©°«Ô=UÒ)U’˜X€HÐVäÐ
#¤C¨£M ?Ð2HÐIÌ4ÔPØ€GØ)Ð*€IØ€EàÐØ€MòGó8ô —G‘G—L‘L¤§¡§¡´Ó!:¸NÓK€MØÐÜ	‡w�w‡~�~�mÔ$ð	Ü�m S°7Õ;¸qÙ89Ó$`¹°1¸SÀAºXÈaÏlÉlÐ[^ÕN_ Q§W¡W¥Y¸Ð!Ð$`÷ <ð
 €LØ€OÜ“e€OØ€OØ€Oä˜8 Q×'‰ˆˆ2Ø�v‰v�f˜bŸf™f T¨W°Q°C¨=Ó9Ó:ˆÜ��A�b�6˜œ3˜x›=˜/¨¨D°¨:Ð6¸CÀtÕLàˆÙ5Fœ3Ð0Ô1ÈAÐäÐ-×.ˆGØ!ˆMØ,ˆOâ Ø-¨l¼SÐARÓ=SÑ.SÑT�	Ø"+§/¡/°#°qÓ"9‘��xà˜OÑ+Ø  AÑ%�LØà˜OÑ+Ø5DÀUÑ5KÑ2�M ?Ü˜A˜eŸk™k¨#Ó.¨qÑ1Ð2°!Ð4¸#ÀTÖJä˜G E§K¡K°Ó$4°QÑ$7Ð#8¸Ð=À3ÈdÕSÜ!.×!7Ñ!7Ó!9�JÜ*4°U¸HÀjÓ*QÑ'�F˜KØ Ò*©{ä$6°{ÈzÔ$ZÒ$iÐ^i˜	Ø(1˜Ü0BÀ=Ó0QÑ-˜˜1˜oØ2?ÀÐ1Q˜¨Ò.ä ¨S¸Õ=Ø! VÒ+Ø+×/Ñ/°Ô6Ø$¨Ñ)˜Ù ä! " f¨m¸_ÓMˆCÙ˜SÓ!ˆBð Ð2Ñ2Ø Ñ!�Ùñ ! WÐ/?À!Ñ/CÒ%CÜ�k $ Ð':¸5¿;¹;ÀsÓ;KÈAÑ;NÐ:OÐO}Ð~ô  AGô  HØ Ñ!’à Ñ!�Ùð] /ðd ˆK™; sÓ+Ð3]Ñ]Ü�+˜d˜VÐ#~Ðô  BHô  IÜ! " f¨e°^ÓDˆCÙ˜SÓ!ˆBãØ�N‰N˜3ÔÙ˜SÓ!ˆBØ�[Ò Ø"#�Ø�[Ò Ø 1Ñ$�Üœ˜Ð3°OÐ3DÀCÌÀwÐOÔPØ" aÔ'Üð  Dô  FIô  JØ&*�OÙØÐ,Ò,Üœ˜Ð EÄeÀWÐMÖNØ�t’Ù# C¨°Ó3�Ù# C¨°Ó3�Üœ˜˜x¨¨B¨Q¨ y°°S¸¸!°W°I¸TÄ%ÀÐIÔJØ˜‘
’Ø�Ò&Üœ˜Ð RÔSXÐRYÐZÖ[äœ˜˜\¨#¯'©'°'¸5Ó*AÐ)BÀ!ÄEÀ7ÐKÖLði (ôn 09¸Ô/AÔgÑ/A¡V S¨!Á[ÐQRÃ^ÐWfÓEfšSÐ/AÐÑgÙÜÐRÔTZÔ[Ù¡_ÜˆnœSÐ!6Ó7Ð8Ð8uÐvÔx|Ô}Ü�
‰
�1ŒÛ(ˆCØ  ™ˆIØ —}‘} V¨XÓ6ˆHÜÐCÀHÀ:ÈTÐRÔTZÔ[Ü'¨	°6¸5À.Ð^_Ô`ˆIÙ˜9Ó%¨Ó-Ø(�˜‘Ø˜‘
�ÜÐ>¸x¸jÈÉMÐZcÐeqÓLrÐKsÐtÔv{Õ|ð )ô $ GÔ,ôÙ,‘��QØ�5‰5�Œ>˜m¬s°1·5±5¸À"Ó3EÓ/FÑFò 	Ð,ð ñ ò ¢?äŸ™Ÿ™¤R§W¡W§_¡_´XÓ%>ÀÓOˆØˆÜ�7‰7�>‰>˜-Ô(ðÜ˜-¨°wÕ?À1Ù78Ó#_±q°!¸CÀ1ºHÈQÏ\É\ÐZ]ÕM^ A§G¡G¥I°q�LÐ#_÷ @ñ
 Ü�'œ#Ð1Ó2Ð3ð  4Cð  Dô  FLö  MäÐ*¬3Ð/BÓ+CÐ*Dð  EGð  Hô  JNô  Oð !ˆOØˆKä*�Ø$ S™M�	Ø$Ÿ=™=¨°Ó:�ð !�Ü'*¨1¬c°,Ó.?Ó'@Ð$äÐ3×4�AØ ,¨[¼3¸|Ó;LÑ-LÑ M�IØ 1Ñ$�KØ&/§o¡o°c¸1Ó&=‘O�E˜8ð  Ñ/Ø1@ÀÑ1GÑ.˜	¡;ä˜f X JÐ.NÈuÈgÐUXÐYÔ[_Ô`Ü%2×%;Ñ%;Ó%=˜
Ü,6°u¸hÈ
Ó,SÑ)˜ 	Ø! YÒ.±iÜÐ"8¸¸Ð?]Ð ^Ô`cÔdØ6:¸B°Z˜O¨EÑ2Ø$Ü,>¸yÓ,IÑ)˜˜1˜kØ2;¸[Ð1I˜¨Ñ.ÜÐ5°e°WÐ=¼uÔEá$Ø ô ˜&  
Ð*>¸u¸gÀSÐIÌ6ÔRÜ /°	¸6À9ÈkÐghÔ i�IÙ$ YÓ/�Bà˜T’zØ'0˜ ™Ø ™
˜Ü˜e H :Ð-KÈEÈ7ÐRTÑUbÐclÐnzÓU{ÐT|Ð}ô  @Eô  FØ#'˜ÙØ˜Ò.Ø'0˜ ™Ü˜h x jÐ0DÀUÀGÐK^Ð_ÔagÔhØ#'˜ÙØ"Ÿ™ wÔ/°MÄSÈÏÉÐW^Ð`bÓIcÓEdÑ4dÜ˜e H :Ð-FÀuÀgÐMhÐiÔknÖoà'0˜ ™Ü˜e H :¨]¸5¸'ÀÀIÇMÁMÐRYÐ[`ÓDaÐCbÐcÔehÔiÙðY 5ó\  Ü˜( 8 *Ð,^Ð_ÔagÖhðo +ôt Ñn¡wÓnÓnÐÙÜˆgÐ'Ð(Ð(tÐuÔw}Ô~ð *Ð*€IØ/Ð0€OØ	�‰�F˜BÓ	×	#Ñ	# I¨rÓ	2×	6Ñ	6°|ÀRÓ	H€Bä�x ×)‰ˆˆCÙ˜ÓˆØÐ(Ò(Ù  U¨BÓ/ˆCÙ  U¨BÓ/ˆCÙ$ S¨.¸"Ó=ˆHØ ŸW™WÐ%5°rÓ:ˆNØ—7‘7˜6“?Ò8 b§f¡f¨V°RÓ&8ˆDÙ15˜+ d V¨1Ñ-¸2ˆIÜ  §¡¨£Ó/ˆMÙ/<Ñ+À-ˆJá#¨¨dª
Ù#0°Ð6FÓ#GÐ Ù -¨c°=Ó A�ô Q[Ñ[hÐilÐnyÐ{}Ó[~ô  AEô  QF™ c¨;¸Ó;×?Ñ?ÀÈÔLð  LNˆIÜZdÑerÐsvð  yDð  FHó  fIô  KOô  [P™ s¨K¸Ó<×@Ñ@ÀÈÔVð  VbˆJÙAKÑPY˜8 J <¨q°°Ñ<Ð`bˆJÙ! # t¨RÓ0ˆEà×ÑÐ2°5°'¸ÀcÇgÁgÈfÃoÐEVÐVWÐXaÐWbÐbpÐq{Ðp|Ð|~ð  @C÷  @Gñ  @Gð  HNó  @Oð  Pð  Qô  RØ×ÑÐIÔJØ×ÑÐOÔPØ×ÑÐ\Ô]Ø×ÑÐJÔKØ×ÑÐSÔTÙ‘sØ× Ñ Ð!aÔbØ× Ñ Ð#NÈsÈeÐSTÐUXÐTYÐ!ZÔ[ÙØ× Ñ Ð#\Ð]_Ð\`Ð`~ð  @Jð  Kð  "Lô  MØ× Ñ Ð#>¸r¸dÐ!CÔDØ× Ñ Ð!QÔRØ×Ñ˜XÔ&ð ×"Ñ"Ð%8¸¸¸|ÈCÏGÉGÐTZËOÐK\Ð\]Ð^gÐ]hÐhvð  xBð  wCð  CEð  FI÷  FMñ  FMð  NTó  FUð  EVð  $Wô  XØ×"Ñ"Ð#OÔPØ×"Ñ"Ð#UÔVÙ‘sØ×&Ñ&Ð']Ô^Ø×&Ñ&Ð)TÐUXÐTYÐYZÐ[^ÐZ_Ð'`ÔaØ×"Ñ" >Ö2ðY *ð^ €NØ€NÜˆÙ˜‹^ˆØÐ(Ò(Ø—u‘u˜[¨"Ó-ˆHà×!Ñ!ØŸ™˜f bÓ)ØŸE™E *¨bÓ1Ø"#§%¡%Ð(8¸"Ó"=ØŸ™˜f bÓ)ØŸU™U ;Ó/Ø—u‘u˜U“|ñ#ô ð Ÿ™˜f bÓ)ØŸE™E *¨bÓ1Ø"#§%¡%Ð(8¸"Ó"=ØŸ™˜f bÓ)ØŸU™U ;Ó/Ø—u‘u˜U“|ñˆKð ×Ñ˜xÔ(Ø×!Ñ! +Ö.ð/ ñ4 #*Ór¡'˜Q©[¸«^ÐCqÒ-q’q '€OÐräÓZ¡wÓZÓZÐÙÜˆdÐ$Ð%Ð%iÐjÔlrÔsä�\‰\‹^×%Ñ%Ó'€Fð Ü˜h›-ØØ"ñ	€Kô 
Ô ¨gÕ	6¸!Ü�	‰	�+˜q¨¸Õ?÷ 
7ð
 Ü˜h›-ØÜ#×,Ñ,Ó.Ø"Ø*ñ€Lô 
Œo˜s¨WÕ	5¸Ü�	‰	�, ¨!¸%Õ@÷ 
6ô 
Œm˜S¨7Õ	3°qØ	�‰�—	‘	˜)Ó$ tÑ+Ô,÷ 
4ô 
Ô! 3°Õ	9¸QØ	�‰�—	‘	˜/Ó*¨TÑ1Ô2÷ 
:ñ Ü—W‘W—\‘\¤*Ð.?Ó@ˆ
Ü�*˜c¨GÕ4¸Ø�G‰G�kÐ"2Ð!3°9Ð=Ô>÷ 5ñ Ü—'‘'—,‘,œz¨>Ó:ˆÜ�'˜3¨Õ1°QØ�G‰G�k - °	Ð:Ô;÷ 2ô Ð
(¬¨Ô/?Ð.@ÄÀÀrÈ%ÈÐPQÔRUÐV^ÓR_ÐQ`Ð`oÐpÔrwÔxÜÐ
+¬D¨6´-°ÄÀÐHÌ%ÔPÙÜÐDÄtÔLÜÐ'Ð(8Ð'9Ð:¼FÔCØÐùò] >ùò Wùò* %a÷ <Ñ;ûäò 	Úð	üó@ hùó"ùò $`÷ @Ñ?ûäò Úðüòt s÷ 
7Ñ	6ú÷ 
6Ñ	5ú÷ 
4Ñ	3ú÷ 
:Ñ	9ú÷ 5Ñ4ú÷
 2Ñ1úsE  Â<AB+ÄAB0Ä-AB0ÇAC ÇAB:Ç	AB5Ç"AB5Ç4AB5ÈAB:ÈAC Õ#ACÕ7ACÙ	:ACÛ/AC5 Û=AC(Ü	AC#ÜAC#ÜAC#Ü0AC(Ü2AC5 øADø ADúAD
û,ADü $AD$ý$AD1þ>AD>Á@AEÁB5AB:ÁB:ACÁB?AC ÁC	ACÁCACÁC#AC(ÁC(AC2ÁC-AC5 ÁC5	ADÁDADÁD
ADÁDAD!ÁD$AD.ÁD1AD;ÁD>AEÁEAEc            
      ó”  — ddl m}  d}t        j                  | j                  «      j	                  d¬«      }|t        d¬«      z
  j                  d«      }|t        d¬«      z   j                  d«      }	 t        j                  «       j                  «       j                  «       j                  «       }t        t        |d	z  «      «      }ddd|d||dœ}g }t        r%t        j                  «       t        z
  dk  rt        }	n�t         j#                  «       }
	 t%        j&                  |||
d¬«      }|j(                  st+        d|j,                  › �t.        «       g S |j1                  «       }	|	at        j                  «       at+        dt2        «       |	j'                  dg «      }d}|D �]ª  }|j'                  d«      dk(  sŒ|j'                  dd«      }|j'                  dd«      }|sŒ@	 t        j4                  |j	                  dd«      j7                  d«      d   d«      }|r9t        j4                  |j	                  dd«      j7                  d«      d   d«      }n|t        d¬«      z   }|j8                  d k\  rŒÓ|t        d¬!«      z
  |cxk  r|t        d¬!«      z   k  r³n n°|j'                  d"«      }|s�Œ|j'                  d#d$|› �«      }t;        |j'                  d%«      t<        «      r!|j'                  d%i «      j'                  d&«      nd}|rd'|› �nd}|dz  }|j?                  |||d|jA                  «       |jA                  «       d(œd)œ«       �Œ­ t+        d*tC        |«      › d+|› d,�tD        «       |S # t        $ r d
}Y �Œºw xY w# t        $ r}t+        d|› �t.        «       g cY d}~S d}~ww xY w# t        $ r}Y d}~�Œd}~ww xY w)-zbScarica l'EPG ufficiale DAZN e restituisce una lista di canali degli eventi attualmente in direttar   )Útimezonez8https://epg.discovery.indazn.com/eu/v5/epgWithDatesRangeN)Útzinforj   )Údaysz%Y-%m-%dró   Ú120r®   ry  rÐ   )rA  ÚlanguageCodeÚ
openBrowseÚtimeZoneOffsetÚbrandÚ	startDateÚendDater  r  )r	  r]   r?   zErrore download EPG DAZN: HTTP uH   ðŸ“¥ EPG scaricato con successo dal server DAZN (aggiornato ogni 5 min).zErrore eccezione EPG: ÚTilesÚTypeÚLiveÚStartr¬   ÚEndÚZr'   z%Y-%m-%dT%H:%M:%SrÏ   )Úhoursi4  )Úminutesrü  r€  zEvent ÚImagerœ  z6https://image.discovery.indazn.com/eu/v2/eu/image/?id=)Ústartr  )r¿   rÀ   r¬  rÁ   r®  u   ðŸ”Ž EPG Check: z" programmi in palinsesto. Trovati z eventi speciali LIVE attivi.)#r   rP  rP   Úutcr   r   rQ   Ú
astimezoneÚ	utcoffsetÚtotal_secondsr{   r¨   r"   Ú_epg_cache_datar–   Ú_epg_cache_timerÙ   rˆ   r   rz   r˜   r+   rš   r:   r™   r,   Ústrptimerm   Úyearrx   ry   r„   rL  rn   r   )rP  r!  Únow_utcÚstart_date_strÚend_date_strÚ
offset_secÚ	tz_offsetr	  Úlive_channelsr&  rø   r�   r;   ÚtilesÚ
live_countÚtileÚ	start_strÚend_strÚstart_dtÚend_dtr  ÚtitleÚimg_idÚlogo_urlÚparse_es                            r$   r  r  ï  s‹  € õ "Ø
D€CÜ�l‰l˜8Ÿ<™<Ó(×0Ñ0¸Ð0Ó=€Gð ¤	¨qÔ 1Ñ1×;Ñ;¸JÓG€NØœi¨QÔ/Ñ/×9Ñ9¸*ÓE€LðÜ—\‘\“^×.Ñ.Ó0×:Ñ:Ó<×JÑJÓLˆ
Üœ˜J¨"Ñ,Ó-Ó.ˆ	ð
 ØØØ#ØØ#Øñ€Fð €Mõ œDŸI™I›K¬/Ñ9¸SÒ@Ü‰ä"×+Ñ+Ó-ˆ
ð	Ü—‘˜S¨¸ÈRÔPˆAØ—4’4ÜÐ5°a·m±m°_ÐEÄsÔKØ�	Ø—6‘6“8ˆDØ"ˆOÜ"Ÿi™i›kˆOÜÐZÔ]bÔcð
 �H‰H�W˜bÓ!€EØ€JäˆØ�8‰8�FÓ˜vÓ%ØŸ™ ¨"Ó-ˆIØ—h‘h˜u bÓ)ˆGÚð!Ü'×0Ñ0°×1BÑ1BÀ3ÈÓ1K×1QÑ1QÐRUÓ1VÐWXÑ1YÐ[nÓo�HÙÜ!)×!2Ñ!2°7·?±?À3ÈÓ3K×3QÑ3QÐRUÓ3VÐWXÑ3YÐ[nÓ!o™à!)¬I¸AÔ,>Ñ!>˜ð —{‘{ dÒ*Ø ð !¤9°RÔ#8Ñ8¸WÔhÈÔR[ÐdfÔRgÑIgÕhØ#'§8¡8¨IÓ#6˜Ù'Ù$à $§¡¨°F¸8¸*Ð2EÓ F˜ÜDNÈtÏxÉxÐX_ÓO`ÔbfÔDg §¡¨'°2Ó!6×!:Ñ!:¸4Ô!@Ðmq˜ÙhnÐ%[Ð\bÐ[cÑ#dÐtv˜à" a™˜
Ø%×,Ñ,Ø"*Ø$)Ø$,Ø,.à)1×);Ñ);Ó)=Ø'-×'7Ñ'7Ó'9ñ$ñ	.ô 	ùð7 ôP Ð
œ3˜u›:˜,Ð&HÈÈÐTqÐrÔtwÔxØÐøô[ ò Ø‹	ðûô: ò 	ÜÐ(¨¨Ð,¬cÔ2Ø�Iûð	ûôX !ò ÝûðúsX   Á5AM6 ÄAN Å6N Ç'BN3É9;N3Ê6BN3Í6NÎNÎ	N0ÎN+Î%N0Î+N0Î3	OÏOÚinterval_hoursc                 ó~  — t        «        t        «       }t        j                  |j	                  di «      j	                  d«      ¬«       |j	                  di «      j	                  d| «      }|dz  }d}|j	                  di «      j	                  dg «      j                  «       }t        «       }d	}	d
}
t        d¬«       	 	 t        j                  «       }|rt        «       }|D �ch c]  }|d   ’Œ	 }}ng }t        «       }||k7  rÛt        |«      t        |«      kD  r*t        dt        |«      t        |«      z
  › d�t        «       n@t        |«      t        |«      k  r)t        dt        |«      t        |«      z
  › d�t        «       |j                  «       }|D �ch c]  }|j	                  d«      ’Œ }}|D ]  }|d   |vsŒ|j                  |«       Œ ||d   d<   |}d
}
||	z
  |k\  r|	dkD  rt        d|› d�t        «       d
}
|
r„t!        dt"        › d› t$        › �«       t        dt        «       t!        t"        › d› t$        › �«       |d   d   }t'        ||d¬«      }t        j                  «       }	d}
t        d|› d�t(        «       nt        d|› d�t        «       t+        d«      st        d¬«       t        j,                  |«       �Œc c}w c c}w # t.        $ r' t!        dt0        › dt$        › d�«       t3        «        Y y"t4        $ r2}t        d |› �t6        «       t        j,                  d!«       Y d"}~Œpd"}~ww xY w)#zNEsegue l'estrazione all'avvio e ripete periodicamente monitorando EPG e canalirÐ   rÊ   rý  rÑ   rÎ   i  ró   rÍ   g        Téû   )r   r¿   u   ðŸš¨ Trovati z NUOVI EVENTI LIVE nell'EPG!u   â„¹ï¸�  z eventi live sono terminati.r   u   â�° Intervallo programmato (z(h) trascorso. Rinnovo generale canali...rU   rT   u;   ðŸ”„ CICLO DI ESTRAZIONE CHIAVI & MANIFEST (Live + Lineari)F)r;  rÍ   rû  uK   âœ¨ Estrazione completata! Monitoraggio EPG attivo (prossimo controllo tra zs).uJ   ðŸ’¤ Nessun nuovo evento live nell'EPG. In attesa (prossimo controllo tra zs)...z

u   ðŸ›‘ Bot arrestato dall'utente.zErrore durante il ciclo: r”   N)rX   rÜ   rÙ   r`   rz   r  r2  r<   r–   r  rn   r+   ÚMAGENTAr   r„   r2   rO   rV   rR   rN  r,   r%   rK  ÚKeyboardInterruptr1   rF   r"   r:   )r}  r;  rû  r:  Úrefresh_hoursÚrefresh_secondsÚcheck_intervalr  Úlast_known_live_idsÚlast_full_extraction_timeÚforce_extractionrP   r  r  Úcurrent_live_idsÚnew_channel_listr  r  Útarget_channelsrJ  r;   s                        r$   Úrun_auto_loopr‹  N  sA  € ä„NÜ‹]€FÜ×Ñ F§J¡J¨v°rÓ$:×$>Ñ$>¸wÓ$GÐÔHð —J‘J˜v rÓ*×.Ñ.Ð/GÈÓX€MØ# dÑ*€Oð €Nð —J‘J˜v rÓ*×.Ñ.¨z¸2Ó>×CÑCÓE€MÜ›%ÐØ #ÐØÐô ˜dÕ#à
ðC	Ü—)‘)“+ˆCñ Ü8Ó:�Ù7BÓ#C±{° B t£H°{Ð Ñ#Cà �Ü#&£5Ð ð  Ð#6Ò6ÜÐ'Ó(¬3Ð/BÓ+CÒCÜ˜-¬Ð,<Ó(=ÄÐDWÓ@XÑ(XÐ'YÐYuÐvÔxõ  AÜÐ)Ó*¬SÐ1DÓ-EÒEÜ˜(¤3Ð':Ó#;¼cÐBRÓ>SÑ#SÐ"TÐTpÐqÔsvÔwð $1×#5Ñ#5Ó#7Ð Ù3@ÓA±=¨R˜BŸF™F 4�L°=�ÐAÛ%�BØ˜$‘x xÒ/Ø(×/Ñ/°Õ3ð &ð .>��v‘˜zÑ*Ø&6Ð#Ø#'Ð ð Ð/Ñ/°OÒCØ,¨qÒ0ÜÐ6°}°oÐEmÐnÔptÔuØ#'Ð ñ  Ü˜œ4˜&  ¬U¨GÐ4Ô5ÜÐQÔSWÔXÜœ˜˜z˜l¬5¨'Ð2Ô3à"(¨¡.°Ñ"<�Ü2¸YÐQ`ÐqvÔw�Ü,0¯I©I«KÐ)Ø#(Ð ÜÐaÐbpÐaqÐqtÐuÔw|Õ}äÐ`ÐaoÐ`pÐpuÐvÔx{Ô|ô   Ô%Ü$¨$Õ/ô �J‰J�~Ô&ñy ùò $Dùò BøôR !ò 	Ü�Dœ˜Ð ?Ä¸wÀbÐIÔJÜŒLÙÜò 	ÜÐ+¨A¨3Ð/´Ô5Ü�J‰J�r�N‰Nûð	úsD   Â?$K Ã#K	Ã/B)K ÆKÆ0K Æ?DK Ë	
K Ë-L<ÌL<Ì
(L7Ì7L<c                  óò  — t        j                  d¬«      } | j                  dddddd¬	«       | j                  d
dd¬«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  dt        d d¬«       | j                  ddd¬«       | j                  ddd¬«       | j                  ddd¬«       | j	                  «       }|j
                  rMt        j                  j                  t        «      r)t        j                  t        «       t        dt        «       y |j                  r±t        «       }t        j!                  |j#                  di «      j#                  d«      ¬«       t        dt        j%                  «       › d�t&        «       t        j)                  «       }|D ]2  \  }}}}|rt        nt*        }t        d |› d!|› |› t,        › d"|› d#�	«       Œ4 y |j.                  s|j0                  rŸt3        «        t        «       }t5        ||j6                  «      }	t9        |	«      \  }
}
}|j.                  xs d$d%|j.                  xs d&› �|j0                  xs d'd(œ}t;        |||	|«      }t=        d)t?        j@                  |d*d+¬,«      z   «       y |jB                   }|jD                  r"t3        «        tG        |j6                  |¬-«       y tI        |j6                  |¬-«       y ).Nz*DAZN - DRM Widevine Stream & Key Extractor)Údescriptionz-cz--oncez
--channelsÚonceÚ
store_truezEsegui una sola volta ed esci)ÚdestÚactionÚhelpz--loopz2Esegui in loop continuo con intervallo programmato)r‘  r’  z--tokenz(Specifica o aggiorna il JWT Bearer Token)r"  r  r’  z--assetz!Estrai solo uno specifico AssetIdz--urlz-Usa uno specifico URL Playback personalizzatoz--test-proxyz'Testa tutti i proxy configurati ed esciz--clear-cachez.Cancella la cache delle chiavi pssh_cache.jsonz--no-eventsz8Non includere eventi live dall'EPG (solo canali statici)z-Cache pssh_cache.json eliminata con successo!rÐ   rÊ   rý  zTest di z proxy in corso...z  z -> r  zms)Úcustom_assetzAsset ÚCustomr¬   r¾   rU   r>   FrÔ   )r;  rû  )%ÚargparseÚArgumentParserÚadd_argumentr{   Ú
parse_argsÚclear_cacher-   r.   r/   râ   Úremover+   r,   Ú
test_proxyrÜ   rÙ   r`   rz   r�   r2   r¡   r:   rR   rÖ  r!  rX   r]  rÂ   r÷   rú  rO   r™   ÚdumpsÚ	no_eventsrŽ  rN  r‹  )ÚparserÚargsrÛ   r›   r�   r˜   Úip_msgr    ÚcolrÂ   rP  r  r3  r+  rû  s                  r$   Úmainr¢  «  s‹  € Ü×$Ñ$Ð1]Ô^€FØ
×Ñ˜˜h¨¸6È,Ð]|ÐÔ}Ø
×Ñ˜¨Ð<pÐÔqØ
×Ñ˜	¬°TÐ@jÐÔkØ
×Ñ˜	¬°TÐ@cÐÔdØ
×Ñ˜¤c°4Ð>mÐÔnØ
×Ñ˜¨|ÐBkÐÔlØ
×Ñ˜°ÐCsÐÔtØ
×Ñ˜¨lÐA{ÐÔ|Ø×ÑÓ€Dà×ÒÜ�7‰7�>‰>œ*Ô%Ü�I‰I”jÔ!ÜÐ?ÄÔGØà‡‚Ü‹mˆÜ×Ñ¨¯©°¸Ó(;×(?Ñ(?ÀÓ(HÐÔIÜˆh”}×*Ñ*Ó,Ð-Ð-?Ð@Ä$ÔGÜ×(Ñ(Ó*ˆÛ")ÑˆAˆr�6˜3Ù•%¤3ˆCÜ�"�Q�C�t˜C˜5  ¬¨¨r°#°°cÐ:Õ;ð #*ð 	à‡z‚z�T—X’XÜŒÜ‹mˆÜ˜#˜tŸz™zÓ*ˆÜ1°%Ó8Ñˆˆ1ˆnà—*‘*Ò. Ø˜TŸZ™ZÒ3¨8Ð4Ð5Ø ŸH™HšN¨ñ
ˆ	ô
 ˜i¨¨e°^ÓDˆÜˆd”T—Z‘Z ¨A¸EÔBÑBÔCØàŸ™Ð'€Nà‡y‚yÜŒÜ t§z¡zÀ.ÕQØô ˜DŸJ™J°~ÖFrE   Ú__main__)z	127.0.0.1)r  )r   Nr¢   )NNN)r|  )NNT)rÏ   NT)}r¦   r-   r5   Úrer™   r–   ré   r3  r  r•  Úxml.etree.ElementTreeÚetreeÚElementTreerÌ  r   r   Útypingr   r   r   r   r	   Úurllib.parser
   r   r   r   r   r3   rr  ÚatexitÚ	curl_cffir   re  rd  ÚImportErrorÚ
pywideviner   r   r   rç  r‡  ÚreconfigureÚstderrr"   r,   r1   r:   r2   rV   r€  r  r   rR   r.   rI  ÚabspathrJ  r7   rH  r×   rG  râ   r1  r§   r  r  r  r  r0   r2  r   Ú__annotations__r8   r¨   r{   r©   r%   r<   rF   rx  ÚDEFAULT_REFRESH_SECONDSr·  rÖ  Úfromhexrµ  rH   r+   rX   rZ   rÙ   rÜ   rà   rä   ræ   rð   r÷   ÚrandomÚstringr%  r9  r]  rh  r  rk  rl  rm  rŠ  ru  r‹  r¯  r¸  rä  r
  r  rQ  rm  rú  rN  rh  ri  r  r‹  r¢  r£   rD   rE   r$   Ú<module>r¶     sq  ðòó 
Û 
Û 	Û Û Û Û Û Û ß "Ð "ß (ß 3Õ 3ß BÓ BÛ Û Û Û ðÝ3Ø€Mó
 ß (Ñ (ð ‡<�<�7ÒðØ�
‰
×Ñ¨¸	ÐÔBØ�
‰
×Ñ¨¸	ÐÔBð
 €Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€ð —7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=€
Ø—7‘7—<‘< 
Ð,>Ó?€Ø—7‘7—<‘< 
Ð,>Ó?€
Ø—7‘7—<‘< 
Ð,=Ó>€
Ø—7‘7—<‘< 
¨IÓ6€Ø—7‘7—<‘< 
¨KÓ8€
Ø—7‘7—<‘< 
Ð,@ÓAÐ Ø—7‘7—<‘< 
Ð,BÓC€Ø—7‘7—<‘< 
Ð,?Ó@€Ø—g‘g—l‘l :Ð/HÓIÐ Ø—7‘7—<‘< 
¨OÓ<Ð ñ !$£Ð ˜#Ó %ð €ñ�sð  #ð ¸ó ñ@˜sð @¨dó @ó(ð €‡��
Ô ð #Ð ð <Ð Ø Ÿ=™=Ð)KÓLÐ à€
ˆD��c�‰NÓ ð  %ñ VˆSð V˜ð V¨ó Vó
÷[ñ [ñz ˜ZÓ(€ð=�T˜#˜s˜(‘^ó =ð~
4�T˜#˜s˜(‘^ð 
4¨ó 
4óó?ð
˜cð  d¨3°¨8¡nó ð	(˜cð 	( e¨D°#°t¸CÀ¸H±~Ð,EÑ&Fó 	(ó Û ñJ�cð J Sð J°h¸tÀCÈÀH¹~Ñ6Nð JÐZ_Ð`cÐemÐnqÑerÐ`rÑZsó JñX˜cð ¨H°S©Mð ÈXÐVYÉ]ð ÐowÐx|ð  ~Að  CFð  ~Fñ  yGñ  pHð ð  T\ð  ]`ñ  Taó ñ:j�d˜3 ˜8‘nð j°¸#±ð jÈ#ó jð^ AÐ ñ˜x¨¨S°#¨X©Ñ7ð À3ó ñ& x°°S¸#°X±Ñ'?ð &È3ó &ð$ €ˆ(�3‰-Ó Ø#€ˆh�t‰nÓ #Ø€ð�8˜C‘=ó ð˜ó ñ62�sð 2 ð 2¨t°C¸°H©~ð 2ÀXÈeÁ_ð 2Ð`eÐfiÐkpÐfpÑ`qó 2ðj	˜sð 	 tó 	ðC# sð C#¨u°X¸c±]ÀHÈSÁMÐ5QÑ/Ró C#ðJ1N  S¨# X¡ð 1N¸¸SÀ#¸X¹ð 1NÐSVð 1NÐ[^ó 1Nðf/¨ð /°Cð /ÀÀcÈ3ÀhÁð /Ð]eÐfjÐknÐpsÐksÑftÑ]uð /Ðzð  AIð  JNð  ORð  TWð  OWñ  JXñ  AYð  [cð  dgñ  [hð  Ahñ  {ió /ñbWC˜3ð WC¨#ð WC°sð WCÀDÈÈcÈÁNð WCÐdhÐilÐnqÐiqÑdrð WCð  CKð  LOñ  CPð WCð  emð  nrð  svð  x{ð  s{ñ  n|ñ  e}ð WCð  MUð  VYñ  MZð WCð  fkð  ltð  uxñ  lyð  {Cð  DGñ  {Hð  JRð  SVñ  JWð  lWñ  fXó WCðr ¨#¡ð °3ó ñ(F˜T # s (™^ð F°T¸#¸s¸(±^ð FÈCð FÐaeÐfiÐknÐfnÑaoð Fð  Bð Fð  KOð  PSð  UXð  PXñ  KYó FñR
@ H¨S¡Mð @ÀHÈTÐRVÐWZÐ\_ÐW_ÑR`ÑMaÑDbð @Ð{ð @ð  LPð  QTð  VYð  QYñ  LZó @ðF €Ø€ð\ D¨¨c°3¨h©Ñ$8ó \ñ~Z #ð Z°h¸s±mð ZÐ\`ð ZÐlpó Zòz2Gðh ˆzÒÙ…Fð øðA> ò Û$ØƒMðûð ò Úðús$   Á$R7 Â
:S	 Ò7SÓSÓ	SÓS