
    h              
       x   S r SSKrSSKrSSKJrJrJrJrJr  SSK	J
r
  S\\\\\\\4   \\\\4   \\\4   4      S\\\
      4S jr SS	\\
   S
\\   SS4S jjrS\\\\4   \\\\\4   4   S\\\R                  \4   \\R                   \\\4   4   4S jrS	\\
   S\\\\4   \\\\\4   4   SS4S jrg)z'Utility functions for aiohappyeyeballs.    N)DictListOptionalTupleUnion   )AddrInfoTypeaddrreturnc                    U c  gU S   nU S   nSU;   nU(       a:  SnSn[        U 5      nUS:  a  U S   nUS:  a  U S   nXXE4n [        R                  nOX4n [        R                  nU[        R                  [        R
                  SU 4/$ )	z7Convert an address tuple to a list of addr_info tuples.Nr   r   :          )lensocketAF_INET6AF_INETSOCK_STREAMIPPROTO_TCP)r
   hostportis_ipv6flowinfoscopeidaddr_lenfamilys           H/var/www/html/env/lib/python3.13/site-packages/aiohappyeyeballs/utils.pyaddr_to_addr_infosr    
   s     |7D7DTkGt9q=1gGq=AwHH.|V''););RFGG    
addr_infos
interleavec                     0 nUc  Sn/ nU  H6  nUS   nXR;  a  SX%'   X%   U:  a  UR                  U5        X%==   S-  ss'   M8     U H  nU R                  U5        M     g)z
Pop addr_info from the list of addr_infos by family up to interleave times.

The interleave parameter is used to know how many addr_infos for
each family should be popped of the top of the list.
Nr   r   )appendremove)r"   r#   seen	to_remove	addr_infor   s         r   pop_addr_infos_interleaver*   %   sw     D
$&I	1DL<*$Y'   	)$ r!   c                 B    [         R                  " U S   5      /U SS Q7$ )z+Convert an address tuple to an IPv4Address.r   r   N)	ipaddress
ip_address)r
   s    r   _addr_tuple_to_ip_addressr.   =   s'       a)5DH55r!   c                 h   / nU  H  nUS   U:X  d  M  UR                  U5        M!     U(       a  U H  nU R                  U5        M     g[        U5      nU  H(  nU[        US   5      :X  d  M  UR                  U5        M*     U(       a  U H  nU R                  U5        M     g[        SU S35      e)zu
Remove an address from the list of addr_infos.

The addr value is typically the return value of
sock.getpeername().
NzAddress z not found in addr_infos)r%   r&   r.   
ValueError)r"   r
   bad_addrs_infosr)   bad_addr_info
match_addrs         r   remove_addr_infosr5   F   s     +-O	R=D ""9-   ,Mm, -*40J	29R=AA""9-   ,Mm, -
xv%=>
??r!   )N)__doc__r,   r   typingr   r   r   r   r   typesr	   strintr    r*   IPv4AddressIPv6Addressr.   r5    r!   r   <module>r>      sK   -   5 5 H
eCc3&'sC})=uS#XNOH d< !	H8 AE%\"%08%	%06
c3hsCc'9!::
;6
	)


$%uY-B-BCc-Q'RR6@\"@
c3hsCc'9!::
;@ 
@r!   