Ë
    îÍ:jâ&  ã                   ó¦  — U d dl Z d dlZd dlZd dlmZmZmZ ddlmZm	Z	 dZ
	 d dlZ eej                  d«      Zej                   ej"                  z  Zej&                  ej(                  z  Zej,                  Z eed«      reej0                  z  Z G d	„ d
e«      Z G d„ de«      Z G d„ d«      Zeeez     ZereneZeed<   y# e$ r dZdZY Œ•w xY w)é    N)ÚAnyÚFinalÚOptionalé   )ÚAbstractResolverÚResolveResult)ÚThreadedResolverÚAsyncResolverÚDefaultResolverÚgetaddrinfoFÚAI_MASKc            
       ó�   — e Zd ZdZddej
                  dz  ddfd„Zdej                  fde	de
d	ej                  dee   fd
„Zdd„Zy)r	   z�Threaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    NÚloopÚreturnc                 ó>   — |xs t        j                  «       | _        y ©N)ÚasyncioÚget_running_loopÚ_loop)Úselfr   s     úe/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/aiohttp/resolver.pyÚ__init__zThreadedResolver.__init__"   s   € ØÒ7œW×5Ñ5Ó7ˆ�
ó    r   ÚhostÚportÚfamilyc              ƒ   óò  K  — | j                   j                  ||t        j                  |t        ¬«      ƒ d {  –—† }g }|D ]­  \  }}}}}|t        j
                  k(  rTt        |«      dk  rŒ+|d   r7| j                   j                  |t        «      ƒ d {  –—† \  }	}
t        |
«      }n#|d d \  }	}n|t        j                  k(  sJ ‚|\  }	}|j                  t        ||	|||t        ¬«      «       Œ¯ |S 7 Œº7 Œ`­w)N)Útyper   Úflagsé   é   ©Úhostnamer   r   r   Úprotor   )r   r   ÚsocketÚSOCK_STREAMÚ_AI_ADDRCONFIGÚAF_INET6ÚlenÚgetnameinfoÚ_NAME_SOCKET_FLAGSÚintÚAF_INETÚappendr   Ú_NUMERIC_SOCKET_FLAGS)r   r   r   r   ÚinfosÚhostsÚ_r$   ÚaddressÚresolved_hostÚ_ports              r   ÚresolvezThreadedResolver.resolve%   s  è ø€ ð —j‘j×,Ñ,ØØÜ×#Ñ#ØÜ ð -ó 
÷ 
ˆð &(ˆØ,1ò 	Ñ(ˆF�A�u˜a ØœŸ™Ò(Ü�w“< !Ò#ð Ø˜1’:ð 26·±×1GÑ1GØÔ!3ó2÷ ,Ñ(�M 5ô ˜u›:‘Dà*1°"°1¨+Ñ'�M¡4à¤§¡Ò/Ð/Ð/Ø&-Ñ#�˜tØ�L‰LÜØ!Ø&ØØ!ØÜ/ôõ	ð'	ð< ˆðO
øð&,ús#   ‚6C7¸C3¹AC7ÂC5ÂAC7Ã5C7c              ƒ   ó   K  — y ­wr   © ©r   s    r   ÚclosezThreadedResolver.closeQ   s	   è ø€ Øùs   ‚r   ©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚAbstractEventLoopr   r%   r-   Ústrr,   ÚAddressFamilyÚlistr   r6   r:   r8   r   r   r	   r	      sf   „ ññ8˜W×6Ñ6¸Ñ=ð 8Èó 8ð &'ÀvÇ~Á~ñ*Øð*Ø"ð*Ø06×0DÑ0Dð*à	ˆmÑ	ó*ôXr   r	   c                   óÜ   — e Zd ZdZ	 ddej
                  dz  dededdfd„Zdej                  fd	e
d
edej                  dee   fd„Zdej                  fd	e
d
ededeee
ef      fd„Zdd„Zy)r
   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   ÚargsÚkwargsr   c                 óp  — t         €t        d«      ‚|xs t        j                  «       | _        d | _        |s|rt        j                  |i |¤Ž| _        y t        «       | _        | j
                  j                  | | j                  «      | _        t        | j                  d«      s| j                  | _        y y )Nz Resolver requires aiodns libraryÚgethostbyname)ÚaiodnsÚRuntimeErrorr   r   r   Ú_managerÚDNSResolverÚ	_resolverÚ_DNSResolverManagerÚget_resolverÚhasattrÚ_resolve_with_queryr6   )r   r   rE   rF   s       r   r   zAsyncResolver.__init__X   s˜   € ô ˆ>ÜÐAÓBÐBàÒ7œW×5Ñ5Ó7ˆŒ
Ø48ˆŒñ ‘6Ü#×/Ñ/°Ð@¸Ñ@ˆDŒNØä+Ó-ˆŒØŸ™×3Ñ3°D¸$¿*¹*ÓEˆŒä�t—~‘~ Ô7à×3Ñ3ˆD�Lð 8r   r   r   r   r   c              ƒ   ó   K  — 	 | j                   j                  ||t        j                  |t        ¬«      ƒ d {  –—† }g }|j                  D �]  }|j                  }	|j                  t        j                  k(  r{t        |	«      dkD  rS|	d   rN| j                   j                  |	d   j!                  d«      g|	dd  ¢­t"        «      ƒ d {  –—† }
|
j$                  }nR|	d   j!                  d«      }|	d   }n8|j                  t        j&                  k(  sJ ‚|	d   j!                  d«      }|	d   }|j)                  t+        ||||j                  dt,        ¬«      «       �Œ |st        d d«      ‚|S 7 �Œ4# t
        j                  j                  $ r;}t        |j                  «      dk\  r|j                  d   nd}t        d |«      |‚d }~ww xY w7 �Œ­w)N)r   r   r   r   r   úDNS lookup failedr    r   Úasciir"   )rM   r   r%   r&   r'   rI   ÚerrorÚDNSErrorr)   rE   ÚOSErrorÚnodesÚaddrr   r(   r*   Údecoder+   Únoder-   r.   r   r/   )r   r   r   r   ÚrespÚexcÚmsgr1   r[   r3   Úresultr4   s               r   r6   zAsyncResolver.resolveq   s³  è ø€ ð
	.ØŸ™×3Ñ3ØØÜ×'Ñ'ØÜ$ð 4ó ÷ ˆDð &(ˆØ—J‘Jó 	ˆDØGKÇyÁyˆGØ�{‰{œfŸo™oÒ-Ü�w“< !Ò#¨°ª
ð $(§>¡>×#=Ñ#=Ø  ™×*Ñ*¨7Ó3ÐB°g¸a¸b°kÑBÜ*ó$÷ �Fð %+§K¡K‘Mà$+¨A¡J×$5Ñ$5°gÓ$>�MØ" 1™:‘Dà—{‘{¤f§n¡nÒ4Ð4Ð4Ø '¨¡
× 1Ñ 1°'Ó :�Ø˜q‘z�Ø�L‰LÜØ!Ø&ØØŸ;™;ØÜ/ôö	ð'	ñ< Ü˜$Ð 3Ó4Ð4àˆðYúô �|‰|×$Ñ$ò 	.Ü!$ S§X¡X£°!Ò!3�#—(‘(˜1’+Ð9LˆCÜ˜$ Ó$¨#Ð-ûð	.úðûsE   ‚G„5E0 ¹E-ºE0 ¾B
GÃGÃ	B$GÅ-E0 Å0GÆ6GÇGÇGc           
   ƒ   óÎ  K  — |t         j                  k(  rdnd}	 | j                  j                  ||«      ƒ d {  –—† }g }|D ]2  }	|j                  ||	j                  ||dt         j                  dœ«       Œ4 |st        d d«      ‚|S 7 ŒM# t        j
                  j                  $ r;}t        |j                  «      dk\  r|j                  d   nd}t        d |«      |‚d }~ww xY w­w)NÚAAAAÚAr   rS   r   r"   )r%   r(   rM   ÚqueryrI   rU   rV   r)   rE   rW   r.   r   ÚAI_NUMERICHOST)
r   r   r   r   Úqtyper\   r]   r^   r1   Úrrs
             r   rQ   z!AsyncResolver._resolve_with_query£   sß   è ø€ ð "(¬6¯?©?Ò!:‘vÀˆð	.ØŸ™×-Ñ-¨d°EÓ:×:ˆDð
 ˆØò 
	ˆBØ�L‰Là $ØŸG™GØ Ø$ØÜ#×2Ñ2ñõ	ð
	ñ Ü˜$Ð 3Ó4Ð4àˆð+ ;ùÜ�|‰|×$Ñ$ò 	.Ü!$ S§X¡X£°!Ò!3�#—(‘(˜1’+Ð9LˆCÜ˜$ Ó$¨#Ð-ûð	.üs8   ‚C%›B
 ºB»B
 ¿A	C%ÂB
 Â
C"Â'6CÃC"Ã"C%c              ƒ   óè   K  — | j                   r5| j                   j                  | | j                  «       d | _         d | _        y | j                  �| j                  j	                  «        d | _        y ­wr   )rK   Úrelease_resolverr   rM   Úcancelr9   s    r   r:   zAsyncResolver.closeÀ   sW   è ø€ Ø�=Š=à�M‰M×*Ñ*¨4°·±Ô<Ø ˆDŒMØ!ˆDŒNØà�>‰>Ð%Ø�N‰N×!Ñ!Ô#Øˆ�ùs   ‚A0A2r   r;   )r<   r=   r>   r?   r   r@   r   r   r%   r-   rA   r,   rB   rC   r   r6   ÚdictrQ   r:   r8   r   r   r
   r
   U   s¾   „ ÙCð 26ñ4à×'Ñ'¨$Ñ.ð4ð ð4ð ð	4ð
 
ó4ð4 &'ÀvÇ~Á~ñ0Øð0Ø"ð0Ø06×0DÑ0Dð0à	ˆmÑ	ó0ðf &'°f·n±nñØðØ"ðØ03ðà	ˆd�3˜�8‰nÑ	óô:
r   r
   c                   ó’   ‡ — e Zd ZU dZdZed    ed<   dˆ fd„Zdd„Zddd	e	j                  dd
fd„Zddd	e	j                  ddfd„Zˆ xZS )rN   z£Manager for aiodns.DNSResolver objects.

    This class manages shared aiodns.DNSResolver instances
    with no custom arguments across different event loops.
    NÚ	_instancer   c                 ó�   •— | j                   €.t        ‰| �	  | «      | _         | j                   j                  «        | j                   S r   )rl   ÚsuperÚ__new__Ú_init)ÚclsÚ	__class__s    €r   ro   z_DNSResolverManager.__new__Ö   s7   ø€ Ø�=‰=Ð Ü!™G™O¨CÓ0ˆCŒMØ�M‰M×ÑÔ!Ø�}‰}Ðr   c                 ó6   — t        j                  «       | _        y r   )ÚweakrefÚWeakKeyDictionaryÚ
_loop_datar9   s    r   rp   z_DNSResolverManager._initÜ   s   € ô
 ×%Ñ%Ó'ð 	�r   Úclientr
   r   zaiodns.DNSResolverc                 óà   — || j                   vr<t        j                  |¬«      }t        j                  «       }||f| j                   |<   n| j                   |   \  }}|j                  |«       |S )a&  Get or create the shared aiodns.DNSResolver instance for a specific event loop.

        Args:
            client: The AsyncResolver instance requesting the resolver.
                   This is required to track resolver usage.
            loop: The event loop to use for the resolver.
        )r   )rv   rI   rL   rt   ÚWeakSetÚadd)r   rw   r   ÚresolverÚ
client_sets        r   rO   z _DNSResolverManager.get_resolverã   sg   € ð �t—‘Ñ&Ü×)Ñ)¨tÔ4ˆHÜ9@¿¹Ó9JˆJØ%-¨zÐ$:ˆD�O‰O˜DÒ!ð $(§?¡?°4Ñ#8Ñ ˆH�jð 	�‰�vÔØˆr   c                 ó°   — | j                   j                  |«      }|€y|\  }}|j                  |«       |s |�|j                  «        | j                   |= yy)zÎRelease the resolver for an AsyncResolver client when it's closed.

        Args:
            client: The AsyncResolver instance to release.
            loop: The event loop the resolver was using.
        N)rv   ÚgetÚdiscardri   )r   rw   r   Úcurrent_loop_datar{   r|   s         r   rh   z$_DNSResolverManager.release_resolverú   s^   € ð !ŸO™O×/Ñ/°Ó5ÐØÐ$ØØ0Ñˆ�*Ø×Ñ˜6Ô"áØÐ#Ø—‘Ô!Ø—‘ Ñ%ð r   )r   rN   r;   )r<   r=   r>   r?   rl   r   Ú__annotations__ro   rp   r   r@   rO   rh   Ú__classcell__)rr   s   @r   rN   rN   Í   sj   ø… ñð 26€IˆxÐ-Ñ.Ó5õó(ðØ%ðØ-4×-FÑ-Fðà	óð.&Ø%ð&Ø-4×-FÑ-Fð&à	÷&r   rN   r   ) r   r%   rt   Útypingr   r   r   Úabcr   r   Ú__all__rI   rP   rL   Úaiodns_defaultÚImportErrorrd   ÚAI_NUMERICSERVr/   ÚNI_NUMERICHOSTÚNI_NUMERICSERVr+   ÚAI_ADDRCONFIGr'   r   r	   r
   rN   r   Ú_DefaultTyper   r�   r8   r   r   ú<module>r�      sñ   ðÜ Û Û ß 'Ñ 'ç 0à
B€ðÛá˜V×/Ñ/°Ó?€Nð ×-Ñ-°×0EÑ0EÑEÐ Ø×*Ñ*¨V×-BÑ-BÑBÐ Ø×%Ñ%€Ù
ˆ6�9ÔØ�f—n‘nÑ$€Nô7Ð'ô 7ôtuÐ$ô u÷p@&ñ @&ðF �MÐ$4Ñ4Ñ5€Ù1?¡ÐEU€�Ô UøðE ò Ø€FØ‚Nðús   £C Ã	CÃC