Ë
    Õ±1h÷7  ã                   ó  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlmZ  ej(                  e«      Zej                  j/                  d«      Z G d„ de«      Zy)	é    )ÚLooseVersionN)Úurlopen)Úurlretrieve)ÚLock)ÚdarwinÚcygwinÚlinuxÚlinux2c                   óÖ  — e Zd Z e«       ZdZej                  Z ej                  d«      rdZ	n=de
j                  v rdZ	n, ej                  d«      rdZ	n ej                  d«      rd	Z	nd
Z	e
j                  j                  e
j                  j                  e	«      «      Z	 	 	 	 ddefd„Zd„ Zd d„Zd!dedefd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Z d!d„Z!d„ Z"d„ Z#d„ Z$y)"ÚPatcherzchromedriver%sÚwin32z)~/appdata/roaming/undetected_chromedriverÚLAMBDA_TASK_ROOTz/tmp/undetected_chromedriver©r	   r
   z&~/.local/share/undetected_chromedriverr   z5~/Library/Application Support/undetected_chromedriverz~/.undetected_chromedriverNÚversion_mainc                 óH  — || _         d| _        d}|| _        |xr |dk  | _        | j	                  «        t
        j                  j                  | j                  «      s!t        j                  | j                  d¬«       |sJt
        j                  j                  | j                  dj                  || j                  g«      «      | _        t        s|r|dd d	k(  s|d	z  }t
        j                  j                  | j                  |«      | _        |sX| j                  sLt
        j                  j                  t
        j                  j                  d
| j                  «      «      | _        |rd| _        || _        | j                  rd| _        nd| _        || _        d| _        y)aK  
        Args:
            executable_path: None = automatic
                             a full file path to the chromedriver executable
            force: False
                    terminate processes which are holding lock
            version_main: 0 = auto
                specify main chrome version (rounded, ex: 82)
        FÚ
undetectedér   T)Úexist_okÚ_éüÿÿÿNú.exeú.z+https://chromedriver.storage.googleapis.comz5https://googlechromelabs.github.io/chrome-for-testing)ÚforceÚ_custom_exe_pathÚuser_multi_procsÚis_old_chromedriverÚ_set_platform_nameÚosÚpathÚexistsÚ	data_pathÚmakedirsÚjoinÚexe_nameÚexecutable_pathÚIS_POSIXÚzip_pathÚabspathÚurl_repor   Úversion_full)Úselfr%   r   r   r   Úprefixs         ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/undetected_chromedriver/patcher.pyÚ__init__zPatcher.__init__,   sI  € ð  ˆŒ
Ø %ˆÔØˆØ 0ˆÔà#/Ò#G°LÀCÑ4GˆÔ à×ÑÔ!ä�w‰w�~‰~˜dŸn™nÔ-Ü�K‰K˜Ÿ™°Õ6áÜ#%§7¡7§<¡<Ø—‘ §¡¨&°$·-±-Ð)@Ó Aó$ˆDÔ õ ÙØ& r sÐ+¨vÒ5Ø# vÑ-�OäŸ™Ÿ™ T§^¡^°VÓ<ˆŒáØ×(Ò(Ü')§w¡w§¡Ü—G‘G—L‘L  d×&:Ñ&:Ó;ó(�Ô$ñ Ø$(ˆDÔ!Ø#2ˆDÔ ð ×#Ò#ØIˆD�MàSˆDŒMà(ˆÔØ ˆÕó    c                 óx  — | j                   j                  d«      rd| _        | xj                  dz  c_        | j                   j                  d«      rd| _        | xj                  dz  c_        | j                   j                  d«      r1| j                  rd| _        nd| _        | xj                  dz  c_        y	y	)
z¢
        Set the platform and exe name based on the platform undetected_chromedriver is running on
        in order to download the correct chromedriver.
        r   r   r   Úlinux64Ú r   Úmac64zmac-x64N)ÚplatformÚendswithÚplatform_namer$   r   ©r+   s    r-   r   zPatcher._set_platform_nameg   s“   € ð
 �=‰=×!Ñ! 'Ô*Ø!(ˆDÔØ�MŠM˜VÑ#�MØ�=‰=×!Ñ!Ð"5Ô6Ø!*ˆDÔØ�MŠM˜RÑ�MØ�=‰=×!Ñ! (Ô+Ø×'Ò'Ø%,�Õ"à%.�Ô"Ø�MŠM˜RÑŽMð ,r/   c                 ó@  — t        j                  | j                  «      }| j                  rŽt	        «       5  t        |j                  d«      «      }t        |d„ ¬«      }|j                  |«       t        t        d„ |«      «       | j                  |«      rt        |«      | _        	 ddd«       y	 ddd«       |r|| _        d| _        | j                  r.| j                  | j                  «      }|s| j                  «       S y|r|| _        |du r|| _        	 t#        j$                  | j                  «       | j/                  «       }	|	j0                  d   | _        |	| _        | j5                  | j7                  «       «       | j9                  «       S # 1 sw Y   ŒáxY w# t&        $ rl | j                   r:| j)                  | j                  «       | j+                  | j                    ¬«      cY S 	 | j                  «       rY yn# t&        $ r Y nw xY wY ŒÚt,        $ r Y Œäw xY w)	zu

        Args:
            executable_path:
            force:
            version_main:

        Returns:

        z*chromedriver*c                 ó6   — | j                  «       j                  S ©N)ÚstatÚst_mtime©Úfs    r-   ú<lambda>zPatcher.auto.<locals>.<lambda>ˆ   s   € °q·v±v³x×7HÑ7H€ r/   )Úkeyc                 ó"   — | j                  «       S r:   )Úunlinkr=   s    r-   r?   zPatcher.auto.<locals>.<lambda>Š   s   €  1§8¡8£:€ r/   NT)r   r   )ÚpathlibÚPathr!   r   r   ÚlistÚrglobÚmaxÚremoveÚmapÚis_binary_patchedÚstrr%   r   Ú	patch_exer   r   r   rB   ÚPermissionErrorÚforce_kill_instancesÚautoÚFileNotFoundErrorÚfetch_release_numberÚversionr*   Úunzip_packageÚfetch_packageÚpatch)
r+   r%   r   r   r   ÚpÚfilesÚmost_recentÚ	ispatchedÚreleases
             r-   rO   zPatcher.autoy   sã  € ô �L‰L˜Ÿ™Ó(ˆØ× Ò Ü“ñ  Ü˜QŸW™WÐ%5Ó6Ó7�Ü! %Ñ-HÔI�Ø—‘˜[Ô)Ü”SÑ-¨uÓ5Ô6Ø×)Ñ)¨+Ô6Ü+.¨{Ó+;�DÔ(Ø÷ ð  ð
 7÷ ñ Ø#2ˆDÔ Ø$(ˆDÔ!à× Ò Ø×.Ñ.¨t×/CÑ/CÓDˆIÙØ—~‘~Ó'Ð'àáØ ,ˆDÔØ�D‰=ØˆDŒJð	Ü�I‰I�d×*Ñ*Ô+ð ×+Ñ+Ó-ˆØ#ŸO™O¨AÑ.ˆÔØ#ˆÔØ×Ñ˜4×-Ñ-Ó/Ô0Ø�z‰z‹|Ð÷[ ð  ûô6 ò 		Ø�zŠzØ×)Ñ)¨$×*>Ñ*>Ô?Ø—y‘y¨4¯:©: ~�yÓ6Ò6ðØ×)Ñ)Ô+áð ,øô #ò Ùðüô !ò 	Ùð	úsI   ¶A2FÄF ÆFÆAHÇ.HÈ HÈ	HÈ
HÈHÈHÈHÈHr   Úreturnc                 óú  — |s| j                   }t        j                  |«      }|j                  «       st	        d|z  «      ‚	 t        |d¬«      5 }g }	 |j                  dd«       	 |j                  «        |r
	 ddd«       y	 ddd«       y# t        $ r}|j                  |«       Y d}~ŒFd}~ww xY w# t        $ r}|j                  |«       Y d}~Œ\d}~ww xY w# 1 sw Y   yxY w# t        $ r
}Y d}~yd}~ww xY w)a  
        naive test to check if a found chromedriver binary is
        currently in use

        Args:
            path: a string or PathLike object to the binary to check.
                  if not specified, we check use this object's executable_path
        zfile does not exist: %sza+b©Úmoder   NTF)r%   rC   rD   r    ÚOSErrorÚopenÚseekrM   ÚappendÚreadlineÚ	Exception)r+   r   rV   ÚfsÚexcÚes         r-   Údriver_binary_in_usezPatcher.driver_binary_in_useµ   sò   € ñ Ø×'Ñ'ˆDÜ�L‰L˜Óˆà�x‰xŒzÜÐ3°aÑ7Ó8Ð8ð	Ü�a˜eÔ$ð ¨Ø�ð"à—G‘G˜A˜q”Mð"Ø—K‘K”Mñ à÷ð ð  ÷!ð øô
 'ò "Ø—J‘J˜q—M‘Mûð"ûô
 'ò "Ø—J‘J˜q—M‘Mûð"ú÷ð ûô$ ò 	äûð	úsŠ   ÁC' ÁCÁBÁ'B4Á7CÁ:C' ÂCÂC' Â	B1ÂB,Â'CÂ,B1Â1CÂ4	CÂ=CÃCÃCÃCÃC$Ã C' Ã$C' Ã'	C:Ã5C:c                 ó´   — t        j                  | j                  «      }t        |j	                  d«      «      }|D ]  }	 |j                  «        Œ y #  Y ŒxY w)Nz*undetected*)rC   rD   r!   rE   ÚglobrB   )r+   rV   ÚitemsÚitems       r-   Úcleanup_unused_fileszPatcher.cleanup_unused_filesÛ   sN   € Ü�L‰L˜Ÿ™Ó(ˆÜ�Q—V‘V˜NÓ+Ó,ˆØò 	ˆDðØ—‘•ñ	øðÙús   Á AÁAc                 óB   — | j                  «        | j                  «       S r:   )rL   rJ   r7   s    r-   rU   zPatcher.patchä   s   € Ø�‰ÔØ×%Ñ%Ó'Ð'r/   c                 óx  — | j                   rtd| j                  › �}|j                  «       }t        j	                  d|z  «       t        t        | j                  |z   «      j                  «       j                  «       «      S | j                  s‚d}t        j	                  d|z  «       t        | j                  |z   «      5 }|j                  «       j                  «       }ddd«       t        j                  «      }t        |d   d   d   «      S d}t        j	                  d|z  «       t        | j                  |z   «      5 }|j                  «       j                  «       }ddd«       t        j                  «      }t        |d	   t        | j                  «         d   «      S # 1 sw Y   ŒÇxY w# 1 sw Y   ŒQxY w)
z½
        Gets the latest major version available, or the latest major version of self.target_version if set explicitly.
        :return: version string
        :rtype: LooseVersion
        z/latest_release_zgetting release number from %sz-/last-known-good-versions-with-downloads.jsonNÚchannelsÚStablerR   z2/latest-versions-per-milestone-with-downloads.jsonÚ
milestones)r   r   ÚupperÚloggerÚdebugr   r   r)   ÚreadÚdecodeÚjsonÚloadsrK   )r+   r   ÚconnÚresponseÚlast_versionsÚmajor_versionss         r-   rQ   zPatcher.fetch_release_numberè   s|  € ð ×#Ò#Ø% d×&7Ñ&7Ð%8Ð9ˆDØ—:‘:“<ˆDÜ�L‰LÐ9¸DÑ@ÔAÜ¤¨¯©¸Ñ(<Ó =× BÑ BÓ D× KÑ KÓ MÓNÐNð × Ò àBˆDÜ�L‰LÐ9¸DÑ@ÔAÜ˜Ÿ™¨Ñ-Ó.ð 0°$ØŸ9™9›;×-Ñ-Ó/�÷0ô !ŸJ™J xÓ0ˆMÜ ¨jÑ 9¸(Ñ CÀIÑ NÓOÐOð DˆÜ�‰Ð5¸Ñ<Ô=Ü�T—]‘] TÑ)Ó*ð 	,¨dØ—y‘y“{×)Ñ)Ó+ˆH÷	,ô Ÿ™ HÓ-ˆÜ˜N¨<Ñ8¼¸T×=NÑ=NÓ9OÑPÐQZÑ[Ó\Ð\÷0ð 0ú÷	,ð 	,ús   Â?F$ÅF0Æ$F-Æ0F9c                 ó  ‡— t        j                  | j                  d«      5 Št        ˆfd„d«      D ]A  }t	        j
                  d|«      }|sŒt        |d   j                  «       «      c cd d d «       S  	 d d d «       y # 1 sw Y   y xY w)NÚrbc                  ó$   •— ‰ j                  «       S r:   )rc   r=   s   €r-   r?   z+Patcher.parse_exe_version.<locals>.<lambda>  s   ø€  Q§Z¡Z£\€ r/   r/   s'   platform_handle\x00content\x00([0-9.]*)é   )Úior`   r%   ÚiterÚreÚsearchr   rw   )r+   ÚlineÚmatchr>   s      @r-   Úparse_exe_versionzPatcher.parse_exe_version	  sy   ø€ Ü�W‰W�T×)Ñ)¨4Ó0ð 	;°AÜÓ1°3Ó7ò ;�ÜŸ	™	Ð"MÈtÓT�ÚÜ'¨¨a©¯©Ó(9Ó:Ñ:÷		;ñ 	;ñ;÷	;÷ 	;ñ 	;ús   ¢+B ÁB Á5B Â B	c                 óN  — d| j                   › d�}| j                  r)| j                  ›d| j                  j                  ›d|›�}n;|j                  ddd«      }d}|| j                  j                  | j                   |fz  }t        j                  d|z  «       t        |«      d	   S )
z^
        Downloads ChromeDriver from source

        :return: path to downloaded file
        Úchromedriver_z.zipú/r   ú-r�   zAhttps://storage.googleapis.com/chrome-for-testing-public/%s/%s/%szdownloading from %sr   )	r6   r   r)   r*   ÚvstringÚreplacert   ru   r   )r+   Úzip_nameÚdownload_urls      r-   rT   zPatcher.fetch_package  s�   € ð # 4×#5Ñ#5Ð"6°dÐ;ˆØ×#Ò#Ø)-¯«¸×8IÑ8I×8QÓ8QÑS[Ð\‰Là×'Ñ'¨¨S°!Ó4ˆHØ^ˆLØ˜T×.Ñ.×6Ñ6¸×8JÑ8JÈHÐUÑUˆLä�‰Ð*¨\Ñ9Ô:Ü˜<Ó(¨Ñ+Ð+r/   c                 ób  — | j                   }| j                  s9d| j                  › �}t        j                  j                  || j                   «      }t        j                  d|z  «       	 t        j                  | j                  «       t        j                  | j                  dd¬«       t        j                  |d¬«      5 }|j                  | j                  «       ddd«       t        j                   t        j                  j                  | j                  |«      | j"                  «       t        j$                  |«       t'        j(                  | j                  «       t        j*                  | j"                  d«       | j"                  S # t        t        f$ r Y �Œw xY w# 1 sw Y   ŒÇxY w)	zQ
        Does what it says

        :return: path to unpacked executable
        zchromedriver-zunzipping %sií  T)r^   r   Úrr]   N)r$   r   r6   r   r   r#   rt   ru   rB   r'   rP   r_   r"   ÚzipfileÚZipFileÚ
extractallÚrenamer%   rH   ÚshutilÚrmtreeÚchmod)r+   ÚfpÚexe_pathr�   Úzfs        r-   rS   zPatcher.unzip_package!  s-  € ð —=‘=ˆØ×'Ò'à& t×'9Ñ'9Ð&:Ð;ˆHÜ—w‘w—|‘| H¨d¯m©mÓ<ˆHä�‰�^ bÑ(Ô)ð	Ü�I‰I�d—m‘mÔ$ô 	�‰�D—M‘M¨¸Õ=Ü�_‰_˜R cÔ*ð 	)¨bØ�M‰M˜$Ÿ-™-Ô(÷	)ä
�	‰	”"—'‘'—,‘,˜tŸ}™}¨hÓ7¸×9MÑ9MÔNÜ
�	‰	�"ŒÜ�‰�d—m‘mÔ$Ü
�‰�×%Ñ% uÔ-Ø×#Ñ#Ð#øô "¤7Ð+ò 	Úð	ú÷	)ð 	)ús   Á+F ÃF%ÆF"Æ!F"Æ%F.c                 ó¸   — t         j                  j                  | «      } t        rt        j                  d| z  «      }| S t        j                  d| z  «      }| S )z–
        kills running instances.
        :param: executable name to kill, may be a path as well

        :return: True on success else False
        zkill -f -9 $(pidof %s)ztaskkill /f /im %s)r   r   Úbasenamer&   Úsystem)r$   r’   s     r-   rN   zPatcher.force_kill_instances<  sU   € ô —7‘7×#Ñ# HÓ-ˆÝÜ—	‘	Ð2°XÑ=Ó>ˆAð ˆuˆô —	‘	Ð.°Ñ9Ó:ˆAØˆuˆr/   c                  óŠ   — t        j                  t        j                  d¬«      } dj	                  | «      j                  «       S )Né   )Úkr2   )ÚrandomÚchoicesÚstringÚascii_lettersr#   Úencode)Úcdcs    r-   Úgen_random_cdczPatcher.gen_random_cdcK  s/   € ä�n‰nœV×1Ñ1°RÔ8ˆØ�w‰w�s‹|×"Ñ"Ó$Ð$r/   c                 óÞ   — |xs | j                   }	 t        j                  |d«      5 }|j                  «       j	                  d«      dk7  cd d d «       S # 1 sw Y   y xY w# t
        $ r Y yw xY w)Nr   s   undetected chromedriveréÿÿÿÿF)r%   r‚   r`   rv   ÚfindrP   )r+   r%   Úfhs      r-   rJ   zPatcher.is_binary_patchedP  si   € Ø)ÒA¨T×-AÑ-Aˆð	Ü—‘˜¨$Ó/ð H°2Ø—w‘w“y—~‘~Ð&@ÓAÀRÑG÷H÷ Hò Hûä ò 	Ùð	ús.   ’A  ¨"AÁ
	A  ÁAÁA  ÁA  Á 	A,Á+A,c                 ó°  — t        j                  «       }t        j                  d| j                  z  «       t        j                  | j                  d«      5 }|j                  «       }t        j                  d|«      }|rŠ|d   }dj                  t        |«      d«      }|j                  ||«      }||k(  rt        j                  d«       nt        j                  d|›d	|›�«       |j                  d«       |j!                  |«       d d d «       t        j                  d
j#                  t        j                  «       |z
  «      «       y # 1 sw Y   ŒCxY w)Nzpatching driver executable %szr+bs   \{window\.cdc.*?;\}r   s.   {console.log("undetected chromedriver 1337!")}ó    zTsomething went wrong patching the driver binary. could not find injection code blockzfound block:
z
replacing with:
zpatching took us {:.2f} seconds)ÚtimeÚperf_counterrt   Úinfor%   r‚   r`   rv   r„   r…   ÚljustÚlenrŽ   Úwarningru   ra   ÚwriteÚformat)r+   Ústartr­   ÚcontentÚmatch_injected_codeblockÚtarget_bytesÚnew_target_bytesÚnew_contents           r-   rL   zPatcher.patch_exeX  s   € Ü×!Ñ!Ó#ˆÜ�‰Ð3°d×6JÑ6JÑJÔKÜ�W‰W�T×)Ñ)¨5Ó1ð 	&°RØ—g‘g“iˆGä')§y¡yÐ1HÈ'Ó'RÐ$Ù'Ø7¸Ñ:�àE×KÑKÜ˜LÓ)¨4óð !ð
 &Ÿo™o¨lÐ<LÓM�Ø 'Ò)Ü—N‘NØnõô —L’Lâ'Ñ)9ð;ôð —‘˜”
Ø—‘˜Ô%÷-	&ô. 	�‰Ø-×4Ñ4´T×5FÑ5FÓ5HÈ5Ñ5PÓQõ	
÷/	&ð 	&ús   ÁB3EÅEc                 ób   — dj                  | j                  j                  | j                  «      S )Nz{0:s}({1:s}))r·   Ú	__class__Ú__name__r%   r7   s    r-   Ú__repr__zPatcher.__repr__v  s+   € Ø×$Ñ$Ø�N‰N×#Ñ#Ø× Ñ ó
ð 	
r/   c                 ó|  — | j                   ry d}t        j                  «       }d„ } |«       |z
  |kD  rP	 | j                  ry t	        j
                  | j                  «       t        j                  d| j                  z  «       y y # t        t        t        f$ r t        j                  d«       Y Œ‰t        $ r Y y w xY w)Né   c                  ó*   — t        j                  «       S r:   )r°   Ú	monotonic© r/   r-   r?   z!Patcher.__del__.<locals>.<lambda>„  s   € œ$Ÿ.™.Ó*€ r/   zsuccessfully unlinked %sg{®Gáz„?)r   r°   rÅ   r   r   rB   r%   rt   ru   r_   ÚRuntimeErrorrM   ÚsleeprP   )r+   ÚtimeoutÚtÚnows       r-   Ú__del__zPatcher.__del__|  s©   € Ø× Ò ð àˆGÜ—‘Ó ˆAÙ*ˆCÙ“%˜!‘)˜gÒ%ð
Ø×,Ò,ØÜ—I‘I˜d×2Ñ2Ô3Ü—L‘LÐ!;¸d×>RÑ>RÑ!RÔSØð &øô  ¤¬Ð?ò Ü—J‘J˜tÔ$ÙÜ(ò Ùðús   µB ÁAB Â)B;Â0B;Â:B;)NFr   F)NFNNr:   )%rÀ   Ú
__module__Ú__qualname__r   Úlockr$   Úsysr4   r5   Údr   ÚenvironÚ
startswithr   r(   Ú
expanduserr!   Úintr.   r   rO   rK   Úboolrh   rm   rU   rQ   rˆ   rT   rS   ÚstaticmethodrN   r©   rJ   rL   rÁ   rÌ   rÆ   r/   r-   r   r      s'  „ Ù‹6€DØ€Hà�|‰|€HØ€x×Ñ˜Ô!Ø7‰Ø	˜rŸz™zÑ	)Ø*‰Ø	ˆ×	Ñ	Ð0Ô	1Ø4‰Ø	ˆ×	Ñ	˜8Ô	$ØC‰à(ˆØ—‘—‘ §¡× 2Ñ 2°1Ó 5Ó6€Ið ØØØñ9!ð ó	9!òv ó$:ñx$¨ð $¸ó $òLò(ò]òB;ò,ò"$ð6 ñó ðð ñ%ó ð%óò
ò<
ór/   r   )Údistutils.versionr   r‚   rx   Úloggingr   rC   r4   r£   r„   r—   r¥   rÐ   r°   Úurllib.requestr   r   r“   Úmultiprocessingr   Ú	getLoggerrÀ   rt   rÓ   r&   Úobjectr   rÆ   r/   r-   ú<module>rÞ      so   ðõ +Û 	Û Û Û 	Û Û Û Û 	Û Û Û 
Û Ý "Ý &Û Ý  à	ˆ×	Ñ	˜8Ó	$€à�<‰<×"Ñ"Ð#JÓK€ôvˆfõ vr/   