Ë
    T jã�  ã                   ól  — 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	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mZmZmZ ej>                  dk(  r;	 ej@                  jC                  dd	¬
«       ejD                  jC                  dd	¬
«       dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,ejZ                  j]                  ejZ                  j_                  e0«      «      Z1ejZ                  je                  e1d«      Z3ejZ                  je                  e1d«      Z4ejZ                  je                  e1d«      Z5ejZ                  je                  e1d«      Z6ejZ                  je                  e1d«      Z7ejZ                  je                  e1d«      Z8ejZ                  je                  e1d«      Z9dZ:dZ;dddd d!œd"d#d$d%d!œd&d'd(d)d!œd*d+d,d-d!œd.d/d0d1d!œd2d3d4d5d!œd6d7d8d9d!œd:d;d<d=d!œd>d?d@dAd!œdBdCdDdEd!œdFdGdHdId!œdJdKdLdMd!œdNdOdPdQd!œdRdSdTdUd!œdVdWdXdYd!œdZd[d\d]d!œd^d_d`dad!œdbdcddded!œgZ<i a=ee>ef   e?df<   e,fdge>dhe>didfdj„Z@d“dk„ZA G dl„ dm«      ZB eBe7«      ZCdiee>ef   fdn„ZDdoee>ef   didfdp„ZEd“dq„ZFd“dr„ZGd”dsee>ef   dtee>   duee>   dvee>   diee>e>ee>ef   f   f
dw„ZHdsee>ef   dxe>diee>e>e>ee>ef   f   fdy„ZId”dsee>ef   duee>   dvee>   dtee>   diee>ef   f
dz„ZJd•dsee>ef   d{eKdiee>ef   fd|„ZLd}e>d~e>diee>   fd„ZMd€e>d~e>diee>   fd�„ZNd‚ZOePj£                  dƒ«      ZRd„e>dieKfd…„ZSd†e>dieee>   ee>   f   fd‡„ZTd†e>diee>   fdˆ„ZUd–d„e>d‰e>dŠee>ef   d‹ee>   dieee>   ee>   f   f
dŒ„ZVd�ee>ef   dsee>ef   dŠee>ef   dieee>   ee>   ee>   f   fdŽ„ZWd•d�eKdiee>ef   fd�„ZXd“d‘„ZYeZd’k(  r eY«        yy# e#$ r Y �Œw xY w)—a;  
====================================================================
 TIM VISION - Manager & DRM Extractor (Widevine WVD)
 Auto-Extractor: 18 Canali Discovery ed Eurosport
 Output: canalidiscoveryeeurosporttim.json (Aggiornamento ogni 3 giorni)
====================================================================
é    N)ÚdatetimeÚ	timedelta)ÚDictÚListÚOptionalÚTupleÚAny)ÚurlparseÚparse_qsÚ	urlencodeÚ
urlunparse)ÚPSSHÚCdmÚDeviceÚwin32úutf-8Úreplace©ÚencodingÚerrorsz[32mz[33mz[31mz[36mz[34mz[35mz[1mz[2mz[0mztimvision_config.jsonztimvision_tokens.jsonzpssh_cache.jsonzWVD.wvdz	proxy.txtz!canalidiscoveryeeurosporttim.jsonztimvision_playlist.m3ui€ô zuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Ú90300133zLA7 HDÚla7z)https://img.timvision.it/channels/la7.png)ÚepgidÚnameÚwsxÚlogoÚ90320074ÚNOVEÚnovehdz*https://img.timvision.it/channels/nove.pngÚ90300553zLA7 Cinema HDÚla7dhdz*https://img.timvision.it/channels/la7d.pngÚ90020075z	Real TimeÚ
realtimehdz.https://img.timvision.it/channels/realtime.pngÚ90020062zFood NetworkÚfoodnetworkhdz1https://img.timvision.it/channels/foodnetwork.pngÚ90020037Ú	DiscoveryÚwarnertvz.https://img.timvision.it/channels/warnertv.pngÚ90120080ÚGialloÚgialloz,https://img.timvision.it/channels/giallo.pngÚ90120077ÚK2Úk2z(https://img.timvision.it/channels/k2.pngÚ90120078ÚFrisbeeÚfrisbeez-https://img.timvision.it/channels/frisbee.pngÚ90020076ÚDMAXÚdmaxhdz*https://img.timvision.it/channels/dmax.pngÚ90020061ÚHGTVÚhgtvhdz*https://img.timvision.it/channels/hgtv.pngÚ90020060zDiscovery TurboÚmotortrendhdz0https://img.timvision.it/channels/motortrend.pngÚ90020000zEurosport 1Ú
eurosport1z0https://img.timvision.it/channels/eurosport1.pngÚ90020001zEurosport 2Ú
eurosport2z0https://img.timvision.it/channels/eurosport2.pngÚ90020002zEurosport 3Ú
eurosport3z0https://img.timvision.it/channels/eurosport3.pngÚ90020003zEurosport 4Ú
eurosport4z0https://img.timvision.it/channels/eurosport4.pngÚ90020004zEurosport 5Ú
eurosport5z0https://img.timvision.it/channels/eurosport5.pngÚ90020005zEurosport 6Ú
eurosport6z0https://img.timvision.it/channels/eurosport6.pngÚ
pssh_cacheÚmsgÚcolorÚreturnc                 ó|   — t        |› dt        j                  «       j                  d«      › d| › t        › �d¬«       y )NÚ[z%H:%M:%Sú] T)Úflush)Úprintr   ÚnowÚstrftimeÚRESET)rG   rH   s     ú9C:\Users\Claud\Documents\ScriptNowTest\Paolo\timvision.pyÚlogrS   X   s4   € Ü	ˆUˆG�1”X—\‘\“^×,Ñ,¨ZÓ8Ð9¸¸C¸5ÄÀÐ
HÐPTÖUó    c                  ó‚   — t         › dt        › d› t        › dt        › dt        › dt        › d› t        › �} t	        | «       y )Na  
  _____ ___ __  ____     _____ ____ ___ ___  _   _ 
 |_   _|_ _|  \/  \ \   / /_ _/ ___|_ _/ _ \| \ | |
   | |  | || |\/| |\ \ / / | |\___ \| | | | |  \| |
   | |  | || |  | | \ V /  | | ___) | | |_| | |\  |
   |_| |___|_|  |_|  \_/  |___|____/___\___/|_| \_|
õÒ   â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�Ú
uK     â—† TIM VISION Auto-Manager Â· Discovery & Eurosport Â· Loop 3 Giorni â—†)ÚYELLOWÚBLUErQ   ÚCYANrN   )Úbanners    rR   Úprint_bannerr\   [   sQ   € Ü�ð ô €€z€l”5�'ð Ü€ÐQÔRWÐQXð YÜ€€z€l”5�'ð€Fô 
ˆ&…MrT   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)ÚProxyManagerzPCarica, analizza, valida e ruota i proxy da proxy.txt o da timvision_config.jsonÚfilepathc                 ó\   — || _         g | _        d | _        d| _        | j	                  «        y )Nr   )r_   ÚproxiesÚconfig_proxyÚcurrent_idxÚload)Úselfr_   s     rR   Ú__init__zProxyManager.__init__k   s)   € Ø ˆŒØ"$ˆŒØ6:ˆÔØˆÔØ�	‰	�rT   ÚlinerI   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|vrd|d   › d|d   › 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://Ú:é   rj   Ú@r   é   é   é   )ÚstripÚ
startswithÚsplitÚlen)re   rg   ÚpartsÚhostÚportÚuserÚpwds          rR   Úparse_proxy_linezProxyManager.parse_proxy_liner   sô   € Ø�z‰z‹|ˆÙ�t—‘ sÔ+Øð �?‰?ÐMÔNØˆKà—
‘
˜3“ˆäˆu‹:˜Š?Ø$)Ñ!ˆD�$˜˜cØ˜T˜F ! C 5¨¨$¨¨q°°Ð7Ð7ä�‹Z˜1Š_ ¨D¡Ø˜U 1™X˜J a¨¨a© z°°5¸±8°*¸A¸eÀA¹h¸ZÐHÐHä�‹Z˜1Š_Ø˜U 1™X˜J a¨¨a© zÐ2Ð2à�D‰[Ø˜T˜FÐ#Ð#àrT   Ú
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)zCImposta il proxy dal blocco di configurazione timvision_config.jsonÚhttpÚhttps©r}   r~   N)Ú
isinstanceÚdictÚgetrb   Ústrrq   rz   )re   r{   Úhttp_pÚhttps_pÚparseds        rR   Ú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Õð .@Ð(rT   rb   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   )ra   r‡   ÚosÚpathÚexistsr_   Úopenrz   ÚappendÚ	Exceptionrc   )re   rb   Úfrg   r†   s        rR   rd   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 )Nr   )ra   rc   rt   rb   )re   Ú	proxy_urls     rR   Úget_dictzProxyManager.get_dict¨   sN   € Ø�<Š<ØŸ™ T×%5Ñ%5¼¸D¿L¹LÓ8IÑ%IÑJˆIØ%°	Ñ:Ð:Ø×ÒØ×$Ñ$Ð$ØrT   c                 óŽ   — | j                   r*| j                  dz   t        | j                   «      z  | _        | j                  «       S )Nrn   )ra   rc   rt   r”   ©re   s    rR   ÚrotatezProxyManager.rotate°   s6   € Ø�<Š<Ø $× 0Ñ 0°1Ñ 4¼¸D¿L¹LÓ8IÑIˆDÔØ�}‰}‹ÐrT   c                 ód   — | j                   rt        | j                   «      S | j                  rdS dS )Nrn   r   )ra   rt   rb   r–   s    rR   ÚcountzProxyManager.countµ   s*   € Ø$(§L¢LŒs�4—<‘<Ó ÐU¸D×<MÒ<M°qÐUÐSTÐUrT   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)zATesta tutti i proxy su ipify per verificare latenza e IP pubblicor}   r   z!https://api.ipify.org?format=jsoné
   )ra   Útimeoutéè  rn   ÚipÚOKTFzHTTP Né   )Úlistra   rb   r�   ÚtimeÚrequestsr‚   ÚroundÚokÚjsonÚstatus_coder�   rƒ   )
re   ÚresultsÚlist_to_testÚpÚproxies_dictÚt0r‰   Údurrž   Úes
             rR   Ú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ƒ   rf   r   rz   r	   r‡   rd   r   r”   r—   Úintr™   r   r   ÚboolÚfloatr¯   © rT   rR   r^   r^   i   s³   „ ÙZØ'1ñ  ó ð Sð ¨X°c©]ó ð4	B¨3ð 	B°4ó 	Bñ ð °ó ð"˜( 4¨¨S¨¡>Ñ2ó ð˜  c¨3 h¡Ñ0ó ð
V�só Vð˜$˜u S¨$°°UÐ%:Ñ;Ñ<ô rT   r^   c                  ó†  — ddddœddddddœi} t         j                  j                  t        «      s)t	        j
                  | t        t        d«      d¬«       | }n/	 t	        j                  t        t        «      «      }d|vr| d   |d<   d|v r"d	|d   v rt        j                  |d   d	   «       |S # t        $ r | }Y Œ5w xY w)
NÚ	timvisionÚ r   úvbdTj7eb6aM.)ÚproxyÚ
portail_idÚpass_idÚ
live_tokenÚuser_key_idÚdevice_key_idÚwro   ©Úindentr¾   )r‹   rŒ   r�   ÚCONFIG_FILEr¦   ÚdumprŽ   rd   r�   Úproxy_managerr‡   )Údefault_configÚcfgs     rR   Úload_configrÌ   Ó   sÓ   € ààØñð )ØØØØñ

ð€Nô �7‰7�>‰>œ+Ô&Ü�	‰	�.¤$¤{°CÓ"8ÀÕCØ‰ð	!Ü—)‘)œD¤Ó-Ó.ˆCØ #Ñ%Ø#1°+Ñ#>��KÑ ð
 �cÑ˜g¨¨[Ñ)9Ñ9Ü×&Ñ& s¨;Ñ'7¸Ñ'@ÔAà€Jøô ò 	!Ø ŠCð	!ús   Á.B2 Â2C Â?C rË   c                 óÖ  — 	 i }t         j                  j                  t        «      r"t	        j
                  t        t        «      «      }|j                  | «       t        t        dd¬«      5 }t	        j                  ||dd¬«       d d d «       y # 1 sw Y   y xY w# t        $ rD t        t        dd¬«      5 }t	        j                  | |dd¬«       d d d «       Y y # 1 sw Y   Y y xY ww xY w)NrÄ   r   ©r   ro   F©rÆ   Úensure_ascii)
r‹   rŒ   r�   rÇ   r¦   rd   rŽ   ÚupdaterÈ   r�   )rË   Úcurrentr‘   s      rR   Úsave_configrÓ   ò   s¡   € ð	<ØˆÜ�7‰7�>‰>œ+Ô&Ü—i‘i¤¤[Ó 1Ó2ˆGØ�‰�sÔÜ”+˜s¨WÕ5¸Ü�I‰I�g˜q¨¸Õ?÷ 6×5Ñ5ûäò <Ü”+˜s¨WÕ5¸Ü�I‰I�c˜1 Q°UÕ;÷ 6×5Ó5úð<úsH   ‚A*B Á,BÂB ÂBÂB ÂB ÂC(Â6CÃC(ÃC$	ÃC(Ã$C(c                  ó´   — t         j                  j                  t        «      r$	 t	        j
                  t        t        «      «      ay y # t        $ r i aY y w xY wr°   )	r‹   rŒ   r�   Ú
CACHE_FILEr¦   rd   rŽ   rF   r�   r¹   rT   rR   Ú
load_cacherÖ   ÿ   sE   € ä	‡w�w‡~�~”jÔ!ð	ÜŸ™¤4¬
Ó#3Ó4‰Jð "øô ò 	ØŠJð	ús   ¥"A	 Á	AÁAc                  óX   — t        j                  t        t        t        d«      d¬«       y )NrÄ   ro   rÅ   )r¦   rÈ   rF   rŽ   rÕ   r¹   rT   rR   Ú
save_cacherØ     s   € Ü‡I�IŒjœ$œz¨3Ó/¸Ö:rT   ÚconfigrÀ   ÚemailÚpasswordc                 óø  — | d   j                  dd«      }|s| d   j                  dd«      }|s| d   j                  dd«      }|s| d   j                  dd«      }|dd	d
ddœ}|r||d<   |r|r
||d<   ||d<   t        ddddœ}t        j                  «       }t	        j
                  d|||d¬«      }|j                  «        |j                  «       d   }	|	d   |	j                  dd«      |	j                  di «      fS )z5Chiama l'endpoint createToken di CPTech tramite proxyr»   r¿   r½   rÀ   r¼   rÚ   rÛ   ÚwebÚINTERNETÚpassÚfalse)Ú	portailIdÚmediaÚvectÚ
passIdTypeÚnoCacheÚpassIdÚloginúhttps://timvisiontv.tim.itúhttps://timvisiontv.tim.it/z!application/x-www-form-urlencoded)ú
User-AgentÚOriginÚRefererúContent-Typezdhttps://auth-api-provider-cdn.prod.pass.tim.cptech.pro/provider/services/tiita-it/public/createTokené   )ÚheadersÚdatara   rœ   ÚresponseÚ	passTokenÚuserData)r‚   ÚUArÉ   r”   r£   ÚpostÚraise_for_statusr¦   )
rÙ   rÀ   rÚ   rÛ   r¿   rð   rï   r¾   r‰   Úresps
             rR   Úcreate_tokenrø     s-  € à˜Ñ$×(Ñ(¨°~ÓF€JÙØ˜Ñ%×)Ñ)¨)°RÓ8ˆÙØ�{Ñ#×'Ñ'¨°Ó4ˆÙØ˜+Ñ&×*Ñ*¨:°rÓ:ˆð  ØØØØñ€Dñ Ø ˆˆX‰Ù‘ØˆˆW‰Ø#ˆˆZÑô Ø.Ø0Ø;ñ	€Gô ×"Ñ"Ó$€EÜ�‰ØnØØØØô	€Að ×ÑÔØ�6‰6‹8�JÑ€DØ�Ñ˜dŸh™h x°Ó4°d·h±h¸zÈ2Ó6NÐNÐNrT   Ú
pass_tokenc           	      ó¾  — t        t        j                  «       dz  «      › dt        j                  «       j                  dd › �}t        t        j                  «       «      }dddd|d	œ||d
diddidœii}t        dddddœ}t        j                  «       }t        j                  d|||d¬«      }|j                  «        |j                  «       d   d   }|d   |||fS )z<Inizializza la sessione LiveTV e ottiene il Bearer LiveTokenr�   Ú-Né   ÚServiceRequestÚInDataTr   )ÚIdÚTokenÚ
GroupTypesz1;4ÚBpkCompatibility)ÚUseRmuTokenPlaceHolderÚPassDataÚ	UserKeyIdÚDeviceKeyIdÚPDSDataÚDeviceSpecificitiesúapplication/jsonrè   ré   z!application/json, text/plain, */*)rê   rí   rë   rì   ÚAcceptzhttps://dtd-pfsbo-slc-ltv-api-eu-west-1.prod.bo.tim.cptech.pro/api/V4/zones/tiita/locations/it/devices/3/apps/1/jobs/InitLiveTVr    ©r¦   rï   ra   rœ   ÚServiceResponseÚOutDataÚ	LiveToken)r¶   r¢   ÚuuidÚuuid4Úhexrƒ   rô   rÉ   r”   r£   rõ   rö   r¦   )	rÙ   rù   rÃ   rÂ   Úpayloadrï   r¾   r‰   Úouts	            rR   Úinit_live_tvr  5  s  € äœ4Ÿ9™9›; tÑ+Ó,Ð-¨Q¬t¯z©z«|×/?Ñ/?ÀÀÐ/DÐ.EÐF€MÜ”d—j‘j“lÓ#€Kð 	ØØ*.Ø#$¨zÑ:Ø(Ø,Ø(¨%Ð0Ø(:¸DÐ'Añð	
ð€Gô Ø*Ø.Ø0Ø5ñ€Gô ×"Ñ"Ó$€EÜ�‰ð 	JØØØØô	€Að ×ÑÔØ
�&‰&‹(Ð$Ñ
% iÑ
0€CØˆ{Ñ˜[¨-¸Ð<Ð<rT   c           	      ó`  — t        dt        «       d| v r"d| d   v rt        j                  | d   d   «       |�|| d   d<   |�|| d   d<   |�|| d   d<   t	        | | d   j                  d«      | d   j                  d«      | d   j                  d«      ¬«      \  }}}t        d	t        «       t        | |«      \  }}}	}
t        d
t        «       |xs | d   j                  dd«      }|||||	|t        j                  «       t        j                  «       j                  «       dœ}t        t        dd¬«      5 }t        j                  ||dd¬«       ddd«       || d   d<   || d   d<   || d   d<   |	| d   d<   t!        | «       t        dt        › dt"        › �t        «       |S # 1 sw Y   ŒTxY w)zmEsegue il flusso completo di autenticazione e sincronizza sia timvision_tokens.json che timvision_config.jsonz%Autenticazione TIM VISION in corso...r»   r¾   NrÚ   rÛ   rÀ   )rÀ   rÚ   rÛ   z passToken generato con successo!z LiveToken generato con successo!r¼   )rÁ   rù   rÀ   rÂ   rÃ   Ú	user_dataÚ	timestampÚ
updated_atrÄ   r   rÎ   ro   FrÏ   rÁ   rÂ   rÃ   z!Token salvati e sincronizzati in z e )rS   rZ   rÉ   r‡   rø   r‚   ÚGREENr  r¢   r   rO   Ú	isoformatrŽ   Ú
TOKEN_FILEr¦   rÈ   rÓ   rÇ   )rÙ   rÚ   rÛ   rÀ   rù   Únew_pass_idr  rÁ   rÂ   rÃ   Úlive_outÚfinal_pass_idÚtokensr‘   s                 rR   Údo_authr   [  s×  € äÐ/´Ô6ð �fÑ ¨F°;Ñ,?Ñ!?Ü×&Ñ& v¨kÑ':¸7Ñ'CÔDàÐØ',ˆˆ{Ñ˜GÑ$ØÐØ*2ˆˆ{Ñ˜JÑ'ØÐØ)0ˆˆ{Ñ˜IÑ&ä)5ØØ�{Ñ#×'Ñ'¨	Ó2Ø�[Ñ!×%Ñ% gÓ.Ø˜Ñ$×(Ñ(¨Ó4ô	*Ñ&€J�˜Yô Ð*¬EÔ2ä7CÀFÈJÓ7WÑ4€J�˜]¨HÜÐ*¬EÔ2àÒI 6¨+Ñ#6×#:Ñ#:¸9ÀbÓ#I€Mà Ø Ø Ø"Ø&ØÜ—Y‘Y“[Ü—l‘l“n×.Ñ.Ó0ñ	€Fô 
Œj˜#¨Õ	0°AÜ�	‰	�&˜! A°EÕ:÷ 
1ð )3€Fˆ;Ñ˜Ñ%Ø%2€Fˆ;Ñ˜	Ñ"Ø)4€Fˆ;Ñ˜Ñ&Ø+8€Fˆ;Ñ˜Ñ(Ü�ÔäÐ
+¬J¨<°s¼;¸-ÐHÌ%ÔPØ€M÷ 
1Ð	0ús   Ä7F$Æ$F-Úforce_refreshc           
      ó˜  — d| v r"d| d   v rt         j                  | d   d   «       |sµt        j                  j	                  t
        «      r’	 t        j                  t        t
        «      «      }t        j                  «       |j                  dd«      z
  dk  rE|j                  d«      r4| j                  di «      }d|vrd|v r|d   |d<   d|vrd|v r|d   |d<   |S | j                  di «      }|�s%|j                  d«      �r|j                  d«      �r|j                  d«      rðt        j                  j	                  t
        «      rÍ	 t        j                  t        t
        «      «      }t        j                  «       |j                  dd«      z
  dk  rt|d   |j                  d	|j                  d	d
«      «      |j                  d|j                  dd
«      «      |d   |d   |j                  dt        j                  «       «      dœS 	 t        | «      S t        | «      S # t        $ r Y �ŒQw xY w# t        $ r Y t        | «      S w xY w)zORecupera i token esistenti dalla cache/config se validi (< 8 ore) o li rigenerar»   r¾   r  r   i€p  rÁ   rÂ   rÃ   rù   r¼   rÀ   )rÁ   rù   rÀ   rÂ   rÃ   r  )rÉ   r‡   r‹   rŒ   r�   r  r¦   rd   rŽ   r¢   r‚   r�   r   )rÙ   r!  ÚtÚtv_cfgs       rR   Ú
get_tokensr%  �  s  € à�fÑ ¨F°;Ñ,?Ñ!?Ü×&Ñ& v¨kÑ':¸7Ñ'CÔDáœRŸW™WŸ^™^¬JÔ7ð	Ü—	‘	œ$œzÓ*Ó+ˆAÜ�y‰y‹{˜QŸU™U ;°Ó2Ñ2°XÒ=À!Ç%Á%ÈÔBUàŸ™ K°Ó4�Ø ¨Ñ)¨m¸vÑ.EØ'-¨mÑ'<�A�mÑ$Ø"¨!Ñ+°À6Ñ0IØ)/°Ñ)@�A�oÑ&Ø�ð
 �Z‰Z˜ RÓ(€FÚ˜VŸZ™Z¨Õ5¸&¿*¹*À]Õ:SÐX^×XbÑXbÐcrÔXsÜ�7‰7�>‰>œ*Ô%ðÜ—I‘Iœd¤:Ó.Ó/�Ü—9‘9“; §¡ {°AÓ!6Ñ6¸ÒAà&,¨\Ñ&:Ø&,§j¡j°¸q¿u¹uÀ\ÐSUÓ?VÓ&WØ#)§:¡:¨i¸¿¹¸yÈ"Ó9MÓ#NØ'-¨mÑ'<Ø)/°Ñ)@Ø%&§U¡U¨;¼¿	¹	»Ó%Dñð ð Bô �6‹?ÐŒ7�6‹?Ðøô+ ò 	Úð	ûô$ ò Øä�6‹?Ððús&   ÁBH# ÅB?H3 È#	H0È/H0È3	I	ÉI	Úwsx_urlrÁ   c                 ó„  ‡— t         d|› �dddddœ}t        j                  «       }	 t        j                  | ||dd¬	«      }|j
                  sy
d|j                  v r|j                  S |j                  «       }dt        dt        t           fˆfd„Š ‰|«      S # t        $ r}t        d|› �t        «       Y d
}~y
d
}~ww xY w)z@Interroga il server RMU di TIMVISION per ottenere l'URL dell'MPDúBearer rè   ré   ÚpcÚmycanal)rê   ÚAuthorizationrë   rì   zxx-operatorz
xx-serviceé   T)rï   ra   rœ   Úallow_redirectsNz.mpdÚobjrI   c                 ó  •— t        | t        «      rP| j                  «       D ]<  \  }}|dv r%t        |t        «      r|j	                  d«      r|c S  ‰|«      }|sŒ:|c S  y t        | t
        «      r| D ]  } ‰|«      }|sŒ|c S  y )N)ÚsrcÚurlÚhrefr}   )r€   r�   Úitemsrƒ   rr   r¡   )r.  ÚkÚvÚresÚiÚfind_urls        €rR   r8  zget_mpd_url.<locals>.find_urlÊ  s†   ø€ Ü˜#œtÔ$ØŸI™IžK‘D�A�qØÐ2Ñ2´zÀ!ÄSÔ7IÈaÏlÉlÐ[aÔNbØ šÙ" 1›+�CÚØ"š
ð (ð ô ˜C¤Ô&Û�AÙ" 1›+�CÚØ"š
ð ð rT   zErrore recupero MPD: )rô   rÉ   r”   r£   r‚   r¥   r1  r¦   r	   r   rƒ   r�   rS   ÚRED)r&  rÁ   rï   r¾   r‰   rð   r®   r8  s          @rR   Úget_mpd_urlr:  ·  sÂ   ø€ ô Ø" : ,Ð/Ø.Ø0ØØñ€Gô ×"Ñ"Ó$€EðÜ�L‰L˜¨'¸5È"Ð^bÔcˆØ�tŠtØØ�Q—U‘U‰?Ø—5‘5ˆLØ�v‰v‹xˆð	œ#ð 	¤(¬3¡-õ 	ñ ˜‹~ÐøÜò ÜÐ# A 3Ð'¬Ô-Üûðús#   §&B ÁB Á(0B Â	B?Â"B:Â:B?Úmpd_urlc                 óÈ   — t         d|› �dœ}t        j                  «       }	 t        j                  | ||d¬«      }|j
                  r|j                  S dS # t        $ r Y yw xY w)zScarica il manifesto MPD XMLr(  )rê   r+  rî   )rï   ra   rœ   N)rô   rÉ   r”   r£   r‚   r¥   Útextr�   )r;  rÁ   rï   r¾   r‰   s        rR   Úget_manifestr>  Ý  sh   € ô Ø" : ,Ð/ñ€Gô ×"Ñ"Ó$€EðÜ�L‰L˜¨'¸5È"ÔMˆØŸšˆq�v‰vÐ' 4Ð'øÜò Ùðús   ¢0A ÁA Á	A!Á A!z$edef8ba9-79d6-4ace-a3c8-27dcd51d21edÚ edef8ba979d64acea3c827dcd51d21edÚ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)zSVerifica se una stringa PSSH Base64 appartiene a Widevine controllando il System IDé   rü   TF)
Úbase64Ú	b64decodert   ÚWIDEVINE_SYSTEM_ID_BYTESr   rƒ   Ú	system_idÚlowerÚWIDEVINE_SYSTEM_IDr�   )r@  Úrawrª   s      rR   Úis_widevine_psshrJ  î  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«      r7t)        |j*                  t,        «      r|j*                  n|j+                  «       }n<t)        |t.        «      r|j+                  «       }nt-        |«      j1                  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)z×
    Estrae specificamente il blocco PSSH Widevine e il relativo KID dal manifesto DASH MPD.
    Ritorna una tupla: (pssh_b64, expected_kid).
    Prioritizza i blocchi PSSH appartenenti all'AdaptationSet video.
    z'Errore parsing XML del manifesto DASH: N©NNÚAdaptationSetÚmimeTypeÚcontentTyper¼   ÚvideoÚmp4ÚContentProtectionÚschemeIdUriÚpssh)rU  Úis_videoÚis_wv_schemeTc                 ó   — | d   | d   fS )NrV  rW  r¹   )Úcs    rR   Ú<lambda>z'extract_widevine_pssh.<locals>.<lambda>/  s   €  1 Z¡=°!°NÑ2CÑ"DrT   )ÚkeyÚreverser   r  rû   )ÚETÚ
fromstringr�   rS   r9  ÚiterÚtagÚendswithÚattribr‚   rG  rH  r=  rq   rJ  r�   Úsortr   Úkey_idsÚhasattrr€   r  rƒ   Úbytesr   )rK  Úrootr®   Ú
candidatesÚelemÚadaptation_setsÚasetÚmimerV  ÚcpsÚcpÚ	scheme_idrW  Ú
pssh_nodesÚnoder=  Ú	best_psshÚexpected_kidrª   Ú	first_kids                       rR   Úextract_widevine_psshru  ù  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 %Ô(Ü0:¸9¿=¹=Ì#Ô0N˜yŸ}š}ÐT]×TaÑTaÓTc‘Ü˜I¤uÔ-Ø(Ÿ}™}›‘ä" 9›~×5Ñ5°c¸2Ó>�ð �lÐ"Ð"øôA ò ÜÐ5°a°SÐ9¼3Ô?Üûðüò
 [ùò Wùò
 SøôV ò Øà�lÐ"Ð"ðúsM   ‚L « L4ÁL4Ã L9Ã$L9Ä3 L>ÅL>É"B%M Ì	L1ÌL,Ì,L1Í	MÍMc                 ó,   — t        | «      \  }}|r|gS g S )uG   CompatibilitÃ  all'indietro: estrae solo i blocchi PSSH validi Widevine)ru  )rK  rU  Ú_s      rR   Úextract_psshrx  C  s   € ä# KÓ0�G€Dˆ!ÙˆDˆ6Ð!˜rÐ!rT   r   r  rs  c           
      ó\	  — |r|› d|j                  «       › �}n9|› dt        j                  | j                  «       «      j	                  «       dd › �}|t
        v r+t
        |   }|j                  d«      |j                  d«      fS t        j                  j                  t        «      st        dt        › d�t        «       y	 t        j                  t        «      }t        j                   |«      }|j#                  «       }|j%                  |t'        | «      «      }	t)        j*                  |	«      j-                  «       }
d	d
t/        |«      |d   |d   |d   |
dddœii}t0        ddddœ}t2        j5                  «       }t7        j8                  d|||d¬«      }|j:                  s0t        d|j<                  › d�t        «       |j?                  |«       y|jA                  «       }|j                  di «      }|j                  d«      dk7  r]d|vrY|j                  di «      }t        d|j                  d «      › d!|j                  d"«      › d�t        «       |j?                  |«       y|d   d#   }t)        jB                  |«      }|jE                  ||«       g }|jG                  |«      D �]K  }|jH                  d$k7  sŒtK        |jL                  d%«      r:tO        |jL                  jP                  tR        «      r|jL                  jP                  nTtK        |jL                  d%«      r|jL                  jQ                  «       n$tS        |jL                  «      jU                  d&d'«      }tW        tY        |jZ                  d%d«      «      r|jZ                  jQ                  «       n)tY        |jZ                  d%tS        |jZ                  «      «      }|j]                  |j                  «       |j                  «       f«       �ŒN |j?                  |«       |st        d(t        «       yd\  }}|r#|D ]  \  }}||j                  «       k(  sŒ||}} n |s
|r|d)   \  }}|r.|r,||d*œt
        |<   t_        «        t        d+|› d|› �t`        «       ||fS # tb        $ r}t        d,|› �t        «       Y d}~yd}~ww xY w)-zNDecifra la chiave di contenuto Widevine usando WVD.wvd e l'endpoint GetLicencerk   Né   Úkidr[  zERRORE: File z& non trovato nella cartella di lavoro!rM  rý   rþ   rÁ   rÂ   rÃ   ÚMKPLrà   )ÚEpgIdr  r  r  ÚChallengeInfoÚModeÚPersistentLicenser	  rè   ré   )rê   rí   rë   rì   zshttps://dtd-pfsbo-slc-ltv-api-eu-west-1.prod.bo.tim.cptech.pro/api/V4/zones/tiita/devices/31/apps/1/jobs/GetLicencer    r  zGetLicence fallita (HTTP Ú)r  ÚStatusÚ0r  Ú	ErrorDatazErrore licenza DRM: ÚTechnicalStatusú (ÚDetailsÚLicenseInfoÚSIGNINGr  rû   r¼   z5Nessuna chiave di contenuto trovata nella licenza DRMr   )r{  r[  zChiave DRM estratta: zErrore decifratura WVD: )2rG  ÚhashlibÚsha256ÚencodeÚ	hexdigestrF   r‚   r‹   rŒ   r�   ÚWVD_FILErS   r9  r   rd   r   Úfrom_devicerŽ   Úget_license_challenger   rC  Ú	b64encodeÚdecoder¶   rô   rÉ   r”   r£   rõ   r¥   r§   Úcloser¦   rD  Úparse_licenseÚget_keysÚtypere  r{  r€   r  rƒ   r   ÚcallableÚgetattrr[  r�   rØ   r  r�   )r@  r   r  rs  Ú	cache_keyÚcachedÚdeviceÚcdmÚsessionÚ	challengeÚchallenge_b64r  rï   r¾   r‰   r÷   Úservice_respÚerr_dataÚlicense_b64Úlicense_bytesÚcontent_keysr4  Úk_kidÚk_keyr{  r[  Úc_kidÚc_keyr®   s                                rR   Úget_keys_wvdr©  H  sb  € ñ
 Ø�g˜Q˜|×1Ñ1Ó3Ð4Ð5‰	à�g˜QœwŸ~™~¨h¯o©oÓ.?Ó@×JÑJÓLÈSÈbÐQÐRÐSˆ	à”JÑÜ˜IÑ&ˆØ�z‰z˜%Ó  &§*¡*¨UÓ"3Ð3Ð3ä�7‰7�>‰>œ(Ô#ÜˆmœH˜:Ð%KÐLÌcÔRØðSÜ—‘œXÓ&ˆÜ�o‰o˜fÓ%ˆØ—(‘(“*ˆØ×-Ñ-¨g´t¸H³~ÓFˆ	Ü×(Ñ(¨Ó3×:Ñ:Ó<ˆð ØÜ  ›ZØ!'¨Ñ!5Ø!'¨Ñ!6Ø#)¨/Ñ#:Ø%2Ø"Ø)0ñð
ð
ˆô Ø.Ø2Ø4ñ	
ˆô ×&Ñ&Ó(ˆÜ�M‰Mð BØØØØô
ˆð �tŠtÜÐ+¨A¯M©M¨?¸!Ð<¼cÔBØ�I‰I�gÔØà�v‰v‹xˆØ—x‘xÐ 1°2Ó6ˆØ×Ñ˜HÓ%¨Ò,°À,Ñ1NØ#×'Ñ'¨°RÓ8ˆHÜÐ& x§|¡|Ð4EÓ'FÐ&GÀrÈ(Ï,É,ÐW`ÓJaÐIbÐbcÐdÔfiÔjØ�I‰I�gÔØà" 9Ñ-¨mÑ<ˆÜ×(Ñ(¨Ó5ˆØ×Ñ˜' =Ô1à.0ˆØ—‘˜g×&ˆAØ�v‰v˜Ó"Ü%,¨Q¯U©U°EÔ%:¼zÈ!Ï%É%Ï)É)ÔUXÔ?Y˜Ÿ™Ÿ	š	ÔovÐwx×w|Ñw|ð  Dô  pEÐ`a×`eÑ`e×`iÑ`iÔ`kô  KNð  OP÷  OTñ  OTó  KU÷  K]ñ  K]ð  ^að  ceó  Kf�Ü'/´¸¿¹¸uÀdÓ0KÔ'L˜Ÿ™Ÿ	™	œÔRYÐZ[×Z_ÑZ_ÐafÔhkÐlm×lqÑlqÓhrÓRs�Ø×#Ñ# U§[¡[£]°E·K±K³MÐ$BÖCð	 'ð
 	�	‰	�'ÔáÜÐGÌ#ÔNØð ‰ˆˆSÙÛ ,‘��uØ˜L×.Ñ.Ó0Ó0Ø$ e˜�CÙð !-ñ ‘|Ø# A‘‰HˆC�á‘3Ø,/¸Ñ$<ŒJ�yÑ!ÜŒLÜÐ'¨ u¨A¨c¨UÐ3´UÔ;Ø�CˆxˆøÜò ÜÐ& q cÐ*¬CÔ0Üûðús;   ÃDR ÇBR É&AR Ê<ER Ð"R Ð>AR Ò	R+ÒR&Ò&R+Úchannelc                 óF  — d| d   › d�}t        ||d   «      }|st        | d   › d�t        «       yt        ||d   «      }|st        | d   › d�t        «       |d	d	fS t	        |«      \  }}|st        | d   › d
�t        «       |d	d	fS t        || d   ||¬«      \  }}	|||	fS )z2Estrae l'MPD URL e le chiavi KID:KEY per un canalez[https://dtd-pfsbo-ottd-rmu-front-eu-west-1.prod.bo.tim.cptech.pro/plfiles/v2/ital/dash-ssl/r   z .json?device=PC&capabilities=0x4rÁ   r   z: MPD non disponibile©NNNz: Manifest non scaricabileNz): PSSH Widevine non trovato nel manifestor   )rs  )r:  rS   r9  r>  ru  r©  )
rª  rÙ   r  r&  r;  Úmpdr@  rs  r{  r[  s
             rR   Úget_channel_infor®  ¯  sâ   € àkÐlsÐtyÑlzÐk{ð  |\ð  ]€GÜ˜' 6¨,Ñ#7Ó8€GÙÜˆw�v‰ÐÐ4Ð5´sÔ;Øä
�w  |Ñ 4Ó
5€CÙÜˆw�v‰ÐÐ9Ð:¼CÔ@Ø˜˜dÐ"Ð"ä2°3Ó7Ñ€HˆlÙÜˆw�v‰ÐÐHÐIÌ3ÔOØ˜˜dÐ"Ð"ä˜H g¨gÑ&6¸È\ÔZ�H€CˆØ�C˜ÐÐrT   Úforce_token_refreshc                 óô
  — t        «       }t        «        t        j                  |j	                  di «      j	                  d«      ¬«       t        || ¬«      }t        dt        t        «      › d�t        «       g }dg}d}t        t        d	«      D �]ˆ  \  }}t        d
|d›dt        t        «      › d|d   d›�dd¬«       t        |||«      \  }}	}
|	�rb|
�r_t        |«      }t        |j                  «      }|	› d|
› �g|d<   dg|d<   t!        |j"                  |j$                  |j&                  |j(                  t+        |d¬«      |j,                  f«      j/                  dd«      }dg|d<   t!        |j"                  |j$                  |j&                  |j(                  t+        |d¬«      |j,                  f«      j/                  dd«      }dg|d<   t!        |j"                  |j$                  |j&                  |j(                  t+        |d¬«      |j,                  f«      j/                  dd«      }|j1                  |d   |d   |d   |j	                  dd«      d||	|
|	› d|
› �|||d |› d!|	› d|
› d"�d#|	› d|
› d$|› d"�d%œ«       |j1                  d&|d   › d'|d   › d(|j	                  dd«      › d)|d   › �«       |j1                  d*«       |j1                  d+«       |j1                  d,«       |j1                  d-|	› d|
› �«       |j1                  |«       t        t2        › d.|	d/d0 › d1t4        › �«       |d	z  }�Œ¦|r–|j1                  |d   |d   |d   |j	                  dd«      d2|d/d/d/|d3œ
«       |j1                  d&|d   › d'|d   › d(|j	                  dd«      › d)|d   › �«       |j1                  |«       t        t6        › d4t4        › �«       �Œ>|j1                  |d   |d   |d   |j	                  dd«      d5d/d/d/d6œ«       t        t8        › d7t4        › �«       �Œ‹ t;        j<                  «       j?                  «       t;        j<                  «       tA        tB        ¬8«      z   j?                  «       t        t        «      |t        jE                  «       |d9œ}tG        tH        d:d;¬<«      5 }tK        jL                  ||d=d>¬?«       d/d/d/«       tG        tN        d:d;¬<«      5 }|jQ                  d@jS                  |«      d@z   «       d/d/d/«       t        dAtT        › tH        › t4        › dB|› dt        t        «      › dC�	t2        «       t        dDtT        › tN        › t4        › �t2        «       |S # 1 sw Y   Œ£xY w# 1 sw Y   ŒqxY w)Ez”
    Estrae tutti i 18 canali, risolve le chiavi DRM e salva il file canalidiscoveryeeurosporttim.json
    e la playlist timvision_playlist.m3u
    r»   r¾   ©rb   )r!  u!   ðŸš€ Avvio estrazione di tutti i z! canali Discovery ed Eurosport...z#EXTM3U x-tvg-url=""r   rn   z  [Ú2dÚ/rL   r   z<22Ú T)ÚendrM   rk   Údecryption_keyÚbestr5  )Údoseqz%3AÚ720pÚ480pr   r   r   r¼   rŸ   zmpv "z#" --demuxer-lavf-o="decryption_key=Ú"zffplay -decryption_key z ")r   r   r   r   ÚstatusÚmanifestr{  r[  Ú
key_stringÚstream_url_fhdÚstream_url_hdÚstream_url_sdÚmpv_commandÚffplay_commandz#EXTINF:-1 tvg-id="z" tvg-name="z" tvg-logo="z" group-title="TIMVISION",z*#KODIPROP:inputstream=inputstream.adaptivez0#KODIPROP:inputstream.adaptive.manifest_type=mpdz>#KODIPROP:inputstream.adaptive.license_type=com.widevine.alphaz+#KODIPROP:inputstream.adaptive.license_key=u   âœ… OK (Né   z...)ÚNO_KEYS)
r   r   r   r   r¼  r½  r{  r[  r¾  r¿  u   âš ï¸�  Solo ManifestÚERROR)r   r   r   r   r¼  r½  r{  r[  u
   â�Œ Errore©Úseconds)r  Únext_updateÚtotal_channelsÚ
keys_foundÚ
proxy_usedÚchannelsrÄ   r   rÎ   ro   FrÏ   rW   u   ðŸ’¾ Salvato con successo in: r†  z canali)u!   ðŸ“‹ Playlist M3U aggiornata in: )+rÌ   rÖ   rÉ   rd   r‚   r%  rS   rt   ÚCHANNELSrZ   Ú	enumeraterN   r®  r
   r   Úqueryr   ÚschemeÚnetlocrŒ   Úparamsr   Úfragmentr   r�   r  rQ   rX   r9  r   rO   r  r   ÚREFRESH_INTERVAL_SECONDSr”   rŽ   ÚOUTPUT_JSON_FILEr¦   rÈ   ÚPLAYLIST_FILEÚwriteÚjoinÚBOLD)r¯  rÙ   r  r¨   Ú	m3u_linesÚfoundr7  Úchr;  r{  r[  rª   ÚqÚfhd_urlÚhd_urlÚsd_urlÚoutput_datar‘   s                     rR   Úextract_and_save_allrã  Å  s³  € ô
 ‹]€FÜ„LÜ×Ñ F§J¡J¨{¸BÓ$?×$CÑ$CÀGÓ$LÐÔMÜ˜Ð.AÔB€FäÐ
+¬C´«M¨?Ð:[Ð\Ô^bÔcà€GØ)Ð*€IØ€Eäœ8 Q×'‰ˆˆ2Ü��A�b�6˜œ3œx›=˜/¨¨B¨v©J°sÐ+;Ð<À#ÈTÕRÜ,¨R°¸Ó@Ñˆ��câ’3Ü˜Ó!ˆAÜ˜Ÿ™Ó!ˆAØ&) U¨!¨C¨5 >Ð"2ˆAÐÑà�XˆAˆc‰FÜ  !§(¡(¨A¯H©H°a·f±f¸a¿h¹hÌ	ÐRSÐ[_ÔH`Ðbc×blÑblÐ!mÓn×vÑvÐw|ð  Bó  CˆGà�XˆAˆc‰FÜ §¡¨1¯8©8°Q·V±V¸Q¿X¹XÄyÐQRÐZ^ÔG_Ðab×akÑakÐ lÓm×uÑuÐv{ð  ~Aó  BˆFà�XˆAˆc‰FÜ §¡¨1¯8©8°Q·V±V¸Q¿X¹XÄyÐQRÐZ^ÔG_Ðab×akÑakÐ lÓm×uÑuÐv{ð  ~Aó  BˆFà�N‰NØ˜G™Ø˜6™
Ø˜%‘yØŸ™˜v rÓ*ØØ#ØØØ!$  Q s e˜nØ")Ø!'Ø!'Ø!& w iÐ/RÐSVÐRWÐWXÐY\ÐX]Ð]^Ð_Ø$;¸C¸5ÀÀ#ÀÀbÈÈ	ÐQRÐ"Sñô ð$ ×ÑÐ2°2°g±;°-¸|ÈBÈvÉJÈ<ÐWcÐdf×djÑdjÐkqÐsuÓdvÐcwð  xRð  SUð  V\ñ  S]ð  R^ð  _ô  `Ø×ÑÐIÔJØ×ÑÐOÔPØ×ÑÐ]Ô^Ø×ÑÐJÈ3È%ÈqÐQTÐPUÐVÔWØ×Ñ˜WÔ%ä”U�G˜8 C¨¨ G 9¨D´°Ð8Ô9Ø�Q‰JŠEÙØ�N‰NØ˜G™Ø˜6™
Ø˜%‘yØŸ™˜v rÓ*Ø#Ø#ØØØ"Ø")ñô ð ×ÑÐ2°2°g±;°-¸|ÈBÈvÉJÈ<ÐWcÐdf×djÑdjÐkqÐsuÓdvÐcwð  xRð  SUð  V\ñ  S]ð  R^ð  _ô  `Ø×Ñ˜WÔ%Ü”V�HÐ1´%°Ð9Ö:à�N‰NØ˜G™Ø˜6™
Ø˜%‘yØŸ™˜v rÓ*Ø!Ø ØØñ	ô 	ô ”S�E˜¤E 7Ð+Ö,ðQ (ôV —l‘l“n×.Ñ.Ó0Ü Ÿ™›¬Ô;SÔ)TÑT×_Ñ_ÓaÜœh›-ØÜ#×,Ñ,Ó.Øñ€Kô 
Ô ¨gÕ	6¸!Ü�	‰	�+˜q¨¸Õ?÷ 
7ô 
Œm˜S¨7Õ	3°qØ	�‰�—	‘	˜)Ó$ tÑ+Ô,÷ 
4ô Ð
(¬¨Ô/?Ð.@ÄÀÀrÈ%ÈÐPQÔRUÔV^ÓR_ÐQ`Ð`hÐiÔkpÔqÜÐ
+¬D¨6´-°ÄÀÐHÌ%ÔPØÐ÷ 
7Ð	6ú÷ 
4Ð	3ús   Ò&U"Ó$U.Õ"U+Õ.U7c            	      óÌ  — t        «        t        «       } t        j                  | j	                  di «      j	                  d«      ¬«       t        j                  «       }t        j                  rt        j                  sdn|› d�}t        dt        › |› t        › �t        «       	 	 t        dt        › d› t        › �«       t        d	t        «       t        t        › d› t        › �«       t        d
¬«       t        j                   «       t#        t$        ¬«      z   }t        dt&        › d› t        › �«       t        dt&        «       t        dt        › |j)                  d«      › t        › d�t*        «       t        t,        › dt        › �«       t        t&        › d› t        › d�«       t/        j.                  «       }t/        j.                  «       |z
  t$        k  r›t1        t$        t/        j.                  «       |z
  z
  «      }|dz  }|dz  dz  }|dz  dz  }t3        d|«      }	t/        j4                  |	«       |dkD  rt        d|› d|› d|› d�t,        «       t/        j.                  «       |z
  t$        k  rŒ›�ŒÏ# t6        $ r t        dt*        › dt        › d�«       Y yt8        $ rB}
t        d|
› �t:        «       t        dt*        «       t/        j4                  d«       Y d}
~
Œld}
~
ww xY w)z]
    Esegue l'estrazione all'avvio, entra in standby e aggiorna le chiavi ogni 3 giorni.
    r»   r¾   r±  zproxy da timvision_config.jsonz proxyzProxy attivo: rW   rV   u+   ðŸ”„ CICLO DI AGGIORNAMENTO CHIAVI & CANALIF)r¯  rÇ  u3   âœ¨ Estrazione completata! Il bot entra in STANDBY.u+   â�° Prossimo aggiornamento programmato il: z%d/%m/%Y alle ore %H:%M:%Sz (tra 3 giorni)z7Premi CTRL+C per arrestare il bot in qualsiasi momento.i€Q i  é<   u3   ðŸ’¤ Standby attivo Â· Prossimo aggiornamento tra: zg zh Úmz

u   ðŸ›‘ Bot arrestato dall'utente.zErrore durante il ciclo: zNuovo tentativo tra 5 minuti...i,  N)r\   rÌ   rÉ   rd   r‚   r™   rb   ra   rS   rÚ  rQ   rZ   rN   rY   rã  r   rO   r   rÕ  r  rP   rX   ÚDIMr¢   r¶   ÚminÚsleepÚKeyboardInterruptr�   r9  )rÙ   Úproxy_countÚ
proxy_descÚnext_refreshÚ
start_timeÚremaining_secondsÚremaining_daysÚremaining_hoursÚremaining_minutesÚsleep_chunkr®   s              rR   Úrun_auto_looprô  5  s½  € ô „NÜ‹]€FÜ×Ñ F§J¡J¨{¸BÓ$?×$CÑ$CÀGÓ$LÐÔMä×%Ñ%Ó'€KÜ5B×5OÒ5OÔXe×XmÒXmÑ1ð  wBð  vCð  CIð  tJ€JÜˆ.œ˜˜z˜l¬5¨'Ð2´DÔ9à
ð$	Ü�B”t�f˜Z˜L¬¨Ð0Ô1ÜÐ=¼tÔDÜ”T�F˜:˜,¤u gÐ.Ô/ô !°UÕ;ä#Ÿ<™<›>¬IÔ>VÔ,WÑWˆLÜ�B”u�g˜j˜\¬%¨Ð1Ô2ÜÐEÌÔNÜÐ=¼d¸VÀL×DYÑDYÐZvÓDwÐCxÔy~Ðxð  @Oð  Pô  RXô  YÜ”S�EÐPÔQVÐPWÐXÔYÜ”U�G˜J˜<¬ w¨bÐ1Ô2ô Ÿ™›ˆJÜ—9‘9“; Ñ+Ô/GÒGÜ$'Ô(@ÄDÇIÁIÃKÐR\ÑD\Ñ(]Ó$^Ð!Ø!2°eÑ!;�Ø#4°uÑ#<ÀÑ"E�Ø%6¸Ñ%=À"Ñ$DÐ!ô " $Ð(9Ó:�Ü—
‘
˜;Ô'à$ rÒ)ÜÐMÈnÐM]Ð]_Ð`oÐ_pÐprð  tEð  sFð  FGð  Hô  JMô  Nô —9‘9“; Ñ+Ô/GÓGñ% øô> !ò 	Ü�Dœ˜Ð ?Ä¸wÀbÐIÔJÙÜò 	ÜÐ+¨A¨3Ð/´Ô5ÜÐ1´6Ô:Ü�J‰J�s�O‰Oûð	ús   Â&GI4 É4#K#ÊK#Ê!8KËK#Ú__main__)rI   Nr¬  )Fr°   )[r´   r‹   ÚsysÚrer¦   r¢   rC  r  rŠ  Úxml.etree.ElementTreeÚetreeÚElementTreer]  r   r   Útypingr   r   r   r   r	   Úurllib.parser
   r   r   r   r£   Ú
pywideviner   r   r   ÚplatformÚstdoutÚreconfigureÚstderrr�   r  rX   r9  rZ   rY   ÚMAGENTArÚ  rç  rQ   rŒ   ÚdirnameÚabspathÚ__file__Ú
SCRIPT_DIRrÙ  rÇ   r  rÕ   rŽ  rµ   rÖ  r×  rÕ  rô   rÎ  rF   rƒ   Ú__annotations__rS   r\   r^   rÉ   rÌ   rÓ   rÖ   rØ   rø   r  r   r·   r%  r:  r>  rH  rf  ÚfromhexrE  rJ  ru  rx  r©  r®  rã  rô  r±   r¹   rT   rR   Ú<module>r	     s©  ðòó 
Û 
Û 	Û Û Û Û Û ß "Ð "ß (ß 3Õ 3ß BÓ Bã ß (Ñ (ð ‡<�<�7ÒðØ�
‰
×Ñ¨¸	ÐÔBØ�
‰
×Ñ¨¸	ÐÔBð
 €Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€Ø
€ð —7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=€
Ø—7‘7—<‘< 
Ð,CÓD€Ø—7‘7—<‘< 
Ð,CÓD€
Ø—7‘7—<‘< 
Ð,=Ó>€
Ø—7‘7—<‘< 
¨IÓ6€Ø—7‘7—<‘< 
¨KÓ8€
Ø—7‘7—<‘< 
Ð,OÓPÐ Ø—7‘7—<‘< 
Ð,DÓE€ð )Ð ð%ð ð  (¸uð  YDñ  EØ &¸xð  YEñ  FØ /¸xð  YEñ  FØ +¸|ð  YIñ  JØ .¸ð  YLñ  MØ +¸zð  YIñ  JØ (¸xð  YGñ  HØ $¸tð  YCñ  DØ )¸yð  YHñ  IØ &¸xð  YEñ  FØ &¸xð  YEñ  FØÐ"3¸~ð  YKñ  LØ -¸|ð  YKñ  LØ -¸|ð  YKñ  LØ -¸|ð  YKñ  LØ -¸|ð  YKñ  LØ -¸|ð  YKñ  LØ -¸|ð  YKñ  Lð%€ð*  €
ˆD��c�‰NÓ ð  %ñ VˆSð V˜ð V¨ó Vó
÷dñ dñN ˜ZÓ(€ð�T˜#˜s˜(‘^ó ð><�T˜#˜s˜(‘^ð <¨ó <óó;ñ(O˜˜c 3˜h™ð (O°(¸3±-ð (OÈxÐX[É}ð (OÐowÐx{Ño|ð (Oð  INð  ORð  TWð  Y]ð  ^að  cfð  ^fñ  Ygð  Ogñ  Ihó (OðT$=˜˜c 3˜h™ð $=°Sð $=¸UÀ3ÈÈSÐRVÐWZÐ\_ÐW_ÑR`ÐC`Ñ=aó $=ñL2�D˜˜c˜‘Nð 2¨8°C©=ð 2È8ÐTWÉ=ð 2ÐjrÐsvÑjwð 2ð  DHð  ILð  NQð  IQñ  DRó 2ñh%�t˜C ˜H‘~ð %°dð %ÀtÈCÐQTÈHÁ~ó %ðP$˜ð $¨#ð $°(¸3±-ó $ðL˜#ð ¨3ð °8¸C±=ó ð <Ð Ø Ÿ=™=Ð)KÓLÐ ð	˜sð 	 tó 	ðH# sð H#¨u°X¸c±]ÀHÈSÁMÐ5QÑ/Ró H#ðT"˜cð " d¨3¡ió "ñ
e˜3ð e sð e°D¸¸c¸±Nð eÐRZÐ[^ÑR_ð eÐkpÐqyÐz}Ñq~ð  AIð  JMñ  ANð  rNñ  lOó eðN˜d 3¨ 8™nð °d¸3À¸8±nð ÈdÐSVÐX[ÐS[Énð ÐafÐgoÐpsÑgtÐv~ð  @Cñ  wDð  FNð  ORñ  FSð  hSñ  bTó ñ,m¨dð m¸tÀCÈÀH¹~ó mó`1ðf ˆzÒÙ…Oð øðU ò Úðús   Á-:N* Î*N3Î2N3