§
    dŠtj
  ã            	       ó|  — d Z ddlZddlZddlmZ deeeeef         eeeef         z  eeef         z  dz  dee         dz  fd„Z		 ddee         d	edz  ddfd
„Z
deeef         eeeeef         z  deej        ef         eej        eeef         z  fd„Zdee         deeef         eeeeef         z  ddfd„ZdS )z'Utility functions for aiohappyeyeballs.é    Né   )ÚAddrInfoTypeÚaddrÚreturnc                 ó  — | €dS | d         }| d         }d|v }|rBd}d}t          | ¦  «        }|dk    r| d         }|dk    r| d         }||||f} t          j        }n||f} t          j        }|t          j        t          j        d| fgS )	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           úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/aiohappyeyeballs/utils.pyÚaddr_to_addr_infosr   	   s«   € ð €|ØˆtØ�Œ7€DØ�Œ7€DØ�Tˆk€GØð  ØˆØˆÝ�t‘9”9ˆØ�qŠ=ˆ=Ø˜1”gˆGØ�qŠ=ˆ=Ø˜A”wˆHØ�d˜H gÐ.ˆÝ”ˆˆà�dˆ|ˆÝ”ˆØ•VÔ'­Ô);¸RÀÐFÐGÐGó    Ú
addr_infosÚ
interleavec                 ó°   — |€d}i }g }| D ]C}|d         }|                      |d¦  «        }||k    r|                     |¦  «         |dz   ||<   ŒD|| dd…<   dS )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   )ÚgetÚappend)r   r   ÚseenÚkeptÚ	addr_infor   Úcounts          r   Úpop_addr_infos_interleaver&   "   s�   € ð ÐØˆ
Ø€DØ!€DØð !ð !ˆ	Ø˜1”ˆØ—’˜ Ñ#Ô#ˆØ�JÒÐØ�KŠK˜	Ñ"Ô"Ð"Ø˜q‘yˆˆV‰ˆØ€Jˆqˆqˆq�M€M€Mr   c                 óN   — t          j        | d         ¦  «        g| dd…         ¢R S )z+Convert an address tuple to an IPv4Address.r   r   N)Ú	ipaddressÚ
ip_address)r   s    r   Ú_addr_tuple_to_ip_addressr*   8   s,   € õ Ô   a¤Ñ)Ô)Ð5¨D°°°¬HÐ5Ð5Ð5r   c                 ó  ‡‡— ˆfd„| D ¦   «         }t          |¦  «        t          | ¦  «        k    rt          ‰¦  «        Šˆfd„| D ¦   «         }t          |¦  «        t          | ¦  «        k    rt          d‰› d�¦  «        ‚|| dd…<   dS )z…
    Remove an address from the list of addr_infos.

    The addr value is typically the return value of
    sock.getpeername().
    c                 ó,   •— g | ]}|d          ‰k    ¯|‘ŒS ©éÿÿÿÿ© )Ú.0Úair   s     €r   ú
<listcomp>z%remove_addr_infos.<locals>.<listcomp>I   s"   ø€ Ð6Ð6Ð6�2 r¨"¤v°¢~ ~ˆB ~ ~ ~r   c                 óF   •— g | ]}t          |d          ¦  «        ‰k    ¯|‘ŒS r-   )r*   )r0   r1   Ú
match_addrs     €r   r2   z%remove_addr_infos.<locals>.<listcomp>M   s7   ø€ ð 
ð 
ð 
ØÕ'@ÀÀBÄÑ'HÔ'HÈJÒ'VÐ'VˆBÐ'VÐ'VÐ'Vr   zAddress z not found in addr_infosN)r   r*   Ú
ValueError)r   r   r#   r4   s    ` @r   Úremove_addr_infosr6   ?   s¯   øø€ ð 7Ð6Ð6Ð6˜Ð6Ñ6Ô6€DÝ
ˆ4�y„y•C˜
‘O”OÒ#Ð#å.¨tÑ4Ô4ˆ
ð
ð 
ð 
ð 
Ø#ð
ñ 
ô 
ˆõ ˆ4�y„y•C˜
‘O”OÒ#Ð#ÝÐB DÐBÐBÐBÑCÔCÐCØ€Jˆqˆqˆq�M€M€Mr   )N)Ú__doc__r(   r   Útypesr   ÚtupleÚstrÚintÚlistr   r&   ÚIPv4AddressÚIPv6Addressr*   r6   r/   r   r   ú<module>r?      s‘  ðØ -Ð -à Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð ðHØ
��S˜#˜sÐ"Ô
# e¨C°°c¨MÔ&:Ñ
:¸UÀ3ÈÀ8¼_Ñ
LÈtÑ
SðHà	ˆ,Ô˜$ÑðHð Hð Hð Hð4 >Bðð Ø�\Ô"ðØ03°d±
ðà	ðð ð ð ð,6Ø
��S�Œ/˜E # s¨C°Ð"4Ô5Ñ
5ð6à
ˆ9Ô  #Ð%Ô&¨¨yÔ/DÀcÈ3ÐPSÐ/SÔ)TÑTð6ð 6ð 6ð 6ðØ�\Ô"ðà
��S�Œ/˜E # s¨C°Ð"4Ô5Ñ
5ðð 
ðð ð ð ð ð r   