§
    JŠtjT9  ã                   óò  — d Z ddlZddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZmZmZ ddlmZmZmZ ddlmZmZ dd	lmZmZ g d
¢Z	 ddlmZmZmZ ddlmZ ddl m!Z! dZ"n3#  dZ" G d„ de#¦  «        Z G d„ de#¦  «        Z G d„ de#¦  «        ZY nxY w G d„ d¦  «        Z$de%de&fd„Z'de%fd„Z(de)de*de&fd„Z+d„ Z,d ej        d!e-fd"„Z.d ej        d#e-fd$„Z/d ej        de)dej        fd%„Z0d ej        de&fd&„Z1dS )'a_  
_http.py
websocket - WebSocket client library for Python

Copyright 2025 engn33r

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
é    N)Úencodebytesé   )ÚWebSocketAddressExceptionÚWebSocketExceptionÚWebSocketProxyException)ÚdebugÚdumpÚtrace)ÚDEFAULT_SOCKET_OPTIONÚ	recv_lineÚsend)ÚHAVE_SSLÚssl)Úget_proxy_infoÚ	parse_url)Ú
proxy_infoÚconnectÚread_headers)ÚProxyConnectionErrorÚ
ProxyErrorÚProxyTimeoutError)Ú	ProxyType)ÚProxyTFc                   ó   — e Zd ZdS )r   N©Ú__name__Ú
__module__Ú__qualname__© ó    úM/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/websocket/_http.pyr   r   .   ó   € € € € € Øˆr    r   c                   ó   — e Zd ZdS )r   Nr   r   r    r!   r   r   1   r"   r    r   c                   ó   — e Zd ZdS )r   Nr   r   r    r!   r   r   4   r"   r    r   c                   ó   — e Zd Zd„ ZdS )r   c                 óÄ  — |                      dd ¦  «        | _        | j        r¡|                      dd¦  «        | _        |                      dd ¦  «        | _        |                      dd ¦  «        | _        |                      dd¦  «        | _        |                      dd ¦  «        | _        | j        d	vrt          d
¦  «        ‚d S d| _        d | _        d | _        d| _        d S )NÚhttp_proxy_hostÚhttp_proxy_portr   Úhttp_proxy_authÚhttp_no_proxyÚ
proxy_typeÚhttpÚhttp_proxy_timeout)r,   Úsocks4Úsocks4aÚsocks5Úsocks5hz7Only http, socks4, socks5 proxy protocols are supported)ÚgetÚ
proxy_hostÚ
proxy_portÚauthÚno_proxyÚproxy_protocolÚproxy_timeoutr   )ÚselfÚoptionss     r!   Ú__init__zproxy_info.__init__9   së   € Ø!Ÿ+š+Ð&7¸Ñ>Ô>ˆŒØŒ?ð 	)Ø%ŸkškÐ*;¸QÑ?Ô?ˆDŒOØŸšÐ$5°tÑ<Ô<ˆDŒIØ#ŸKšK¨¸Ñ>Ô>ˆDŒMØ")§+¢+¨l¸FÑ"CÔ"CˆDÔà!(§¢Ð-AÀ4Ñ!HÔ!HˆDÔØÔ"ð +ð ð õ !ØMñô ð ðð ð  ˆDŒOØˆDŒIØ ˆDŒMØ"(ˆDÔÐÐr    N)r   r   r   r;   r   r    r!   r   r   8   s#   € € € € € ð)ð )ð )ð )ð )r    r   ÚurlÚreturnc                 ó|  — t           st          d¦  «        ‚t          | ¦  «        \  }}}}|j        dk    rd}t          j        }nM|j        dk    rd}t          j        }n3|j        dk    rd}t          j        }n|j        dk    rd}t          j        }t          j        ||j	        t          |j        ¦  «        |j        r|j        d         nd |j        r|j        d	         nd |¬
¦  «        }	|	                     |||j        ¬¦  «        }
|r-t          rt!          |
|j        |¦  «        }
nt          d¦  «        ‚|
|||ffS )Nz>Python Socks is needed for SOCKS proxying but is not availabler.   Fr/   Tr0   r1   r   r   )r+   ÚhostÚportÚusernameÚpasswordÚrdns)ÚtimeoutúSSL not available.)ÚHAVE_PYTHON_SOCKSr   r   r7   r   ÚSOCKS4ÚSOCKS5r   Úcreater3   Úintr4   r5   r   r8   r   Ú_ssl_socketÚsslopt)r<   r:   ÚproxyÚhostnamer@   ÚresourceÚ	is_securerC   r+   Úws_proxyÚsocks              r!   Ú_start_proxied_socketrS   S   sd  € Ýð 
Ý ØLñ
ô 
ð 	
õ +4°C©.¬.Ñ'€Hˆd�H˜iàÔ˜xÒ'Ð'ØˆÝÔ%ˆ
ˆ
à	Ô	 Ò	*Ð	*ØˆÝÔ%ˆ
ˆ
Ø	Ô	 Ò	)Ð	)ØˆÝÔ%ˆ
ˆ
à	Ô	 Ò	*Ð	*ØˆÝÔ%ˆ
åŒ|ØØÔÝ�Ô!Ñ"Ô"Ø"'¤*Ð6�”˜A”�°$Ø"'¤*Ð6�”˜A”�°$Øðñ ô €Hð ×Ò˜H d°EÔ4GÐÑHÔH€Dàð ;Ýð 	;Ý˜t W¤^°XÑ>Ô>ˆDˆDå$Ð%9Ñ:Ô:Ð:à�(˜D (Ð+Ð+Ð+r    c                 óè  — |j         r|s|j        dk    rt          | ||¦  «        S t          | ¦  «        \  }}}}|r||||ffS t	          ||||¦  «        \  }}	}
|st          d|› d|› �¦  «        ‚d }	 t          ||j        |j        ¦  «        }|	rt          ||||
¦  «        }|r-t          rt          ||j        |¦  «        }nt          d¦  «        ‚||||ffS #  |r|                     ¦   «          ‚ xY w)Nr,   zHost not found.: ú:rE   )r3   r7   rS   r   Ú_get_addrinfo_listr   Ú_open_socketÚsockoptrD   Ú_tunnelr   rK   rL   Úclose)r<   r:   rM   ÚsocketrN   Úport_from_urlrO   rP   Úaddrinfo_listÚneed_tunnelr5   rR   s               r!   r   r   ~   sN  € ð Ôð : ð :¨5Ô+?À6Ò+IÐ+IÝ$ S¨'°5Ñ9Ô9Ð9å3<¸S±>´>Ñ0€Hˆm˜X yàð ;Ø˜ -°Ð:Ð:Ð:å'9Ø�- ¨Eñ(ô (Ñ$€M�; ð ð QÝ Ð!O°XÐ!OÐ!OÀÐ!OÐ!OÑPÔPÐPà€DðÝ˜M¨7¬?¸G¼OÑLÔLˆØð 	@Ý˜4 ¨=¸$Ñ?Ô?ˆDàð 	?Ýð ?Ý" 4¨¬¸ÑBÔB��å(Ð)=Ñ>Ô>Ð>à�h ¨xÐ8Ð8Ð8øðØð 	Ø�JŠJ‰LŒLˆLØøøøs   Á3A$C ÃC1r@   rP   c                 ó|  — t          | ||j        |j        |j        |j        ¦  «        \  }}}	 |s1t          j        | |dt
          j        t
          j        ¦  «        }|dd fS |r|pd}t          j        ||dt
          j        t
          j        ¦  «        }|d|fS # t
          j	        $ r}t          |¦  «        ‚d }~ww xY w)Nr   FéP   T)r   r3   r4   r5   r6   r[   ÚgetaddrinfoÚSOCK_STREAMÚSOL_TCPÚgaierrorr   )	rN   r@   rP   rM   ÚphostÚpportÚpauthr]   Úes	            r!   rV   rV   £   sä   € Ý(ØØØÔØÔØŒ
ØŒñô Ñ€Eˆ5�%ð+ð ð 	.Ý"Ô.Ø˜$ ¥6Ô#5µv´~ñô ˆMð ! %¨Ð-Ð-à�O˜eÐ) rˆEõ
 #Ô.Ø�u˜a¥Ô!3µV´^ñô ˆMð ! $¨Ð-Ð-øÝŒ?ð +ð +ð +Ý'¨Ñ*Ô*Ð*øøøøð+øøøs   ®2B Á!6B ÂB;Â'B6Â6B;c                 ój  — d }| D �](}|d d…         \  }}}t          j         |||¦  «        }|                     |¦  «         t          D ]}	 |j        |	Ž  Œ|D ]}	 |j        |	Ž  Œ|d         }
d }|s»	 |                     |
¦  «         n¦# t           j        $ r’}|                     ¦   «          t          |
d         ¦  «        |_        	 t          j
        t          j        t          j        f}n(# t          $ r t          j
        t          j        f}Y nw xY w|j	        |vr|‚|}Y d }~Œµd }~ww xY w�Œ( n|r|‚|S )Né   é   r   )r[   Ú
settimeoutr   Ú
setsockoptr   ÚerrorrZ   ÚstrÚ	remote_ipÚerrnoÚECONNREFUSEDÚWSAECONNREFUSEDÚENETUNREACHÚAttributeError)r]   rX   rD   ÚerrÚaddrinfoÚfamilyÚsocktypeÚprotorR   ÚoptsÚaddressrn   ÚeConnRefuseds                r!   rW   rW   Ã   s˜  € Ø
€CØ!ð $ñ $ˆØ"*¨2¨A¨2¤,Ñˆ�˜%ÝŒ}˜V X¨uÑ5Ô5ˆØ�Š˜Ñ Ô Ð Ý)ð 	#ð 	#ˆDØˆDŒO˜TÐ"Ð"Ð"Øð 	#ð 	#ˆDØˆDŒO˜TÐ"Ð"Ð"à˜1”+ˆØˆØð 	ðØ—’˜WÑ%Ô%Ð%ð" øõ! ”<ð ð ð Ø—
’
‘”�Ý"% g¨a¤j¡/¤/�”ðKåÔ*ÝÔ-ÝÔ)ð$�L�Løõ
 &ð Kð Kð KÝ$)Ô$6½Ô8IÐ#J�L�L�LðKøøøà”; lÐ2Ð2Ø�KØ�Ø����øøøøðøøøñ$ Øˆàð 	ØˆIà€Ks<   Á1BÂD(Â.D#Ã#C)Ã(D#Ã)"DÄD#ÄDÄD#Ä#D(rR   rL   c                 óx  — |                      dd ¦  «        }|�sát          j        |                      dt          j        ¦  «        ¦  «        }t          j                              d¦  «        }|�||_        |                      dt          j        ¦  «        t          j        k    rÞ|                      dd ¦  «        }|                      dd ¦  «        }|s|rO	 |                     ||¬¦  «         n•# t          t          j
        t          f$ r}t          d|› �¦  «        ‚d }~ww xY wt          |d	¦  «        rO	 |                     t          j        j        ¦  «         n)# t          j
        $ r}t          d
|› �¦  «        ‚d }~ww xY w|                      dd ¦  «        r–	 |                     |d         |                      dd ¦  «        |                      dd ¦  «        ¦  «         nO# t          t          f$ r}t          d|› �¦  «        ‚d }~wt          j
        $ r}t          d|› �¦  «        ‚d }~ww xY w|                      dt          j        ¦  «        t          j        k    r/|                      dd¦  «        sd|_        t          j        |_        n@|                      dd¦  «        |_        |                      dt          j        ¦  «        |_        d|v rF	 |                     |d         ¦  «         n)# t          j
        $ r}t          d|› �¦  «        ‚d }~ww xY wd|v rŸ	 |d         }	t-          |	t.          t0          f¦  «        rt3          |	¦  «        dk    rt          d¦  «        ‚|	\  }
}}|                     |
||¦  «         n:# t          $ r ‚ t          t          j
        f$ r}t          d|› �¦  «        ‚d }~ww xY wd|v rA	 |                     |d         ¦  «         n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY w|                     | |                      dd¦  «        |                      dd¦  «        |¬¦  «        S )NÚcontextÚssl_versionÚSSLKEYLOGFILEÚ	cert_reqsÚca_certsÚca_cert_path)ÚcafileÚcapathz#SSL CA certificate loading failed: Úload_default_certsz(SSL default certificate loading failed: ÚcertfileÚkeyfilerB   z'SSL client certificate loading failed: Úcheck_hostnameFTÚciphersz!SSL cipher configuration failed: Ú
cert_chainrj   z@cert_chain must be a tuple/list of (certfile, keyfile, password)z-SSL client certificate configuration failed: Ú
ecdh_curvez%SSL ECDH curve configuration failed: Údo_handshake_on_connectÚsuppress_ragged_eofs)rŽ   r�   Úserver_hostname)r2   r   Ú
SSLContextÚPROTOCOL_TLS_CLIENTÚosÚenvironÚkeylog_filenameÚ	CERT_NONEÚload_verify_locationsÚFileNotFoundErrorÚSSLErrorÚ
ValueErrorr   Úhasattrr‡   ÚPurposeÚSERVER_AUTHÚload_cert_chainrŠ   Úverify_modeÚCERT_REQUIREDÚset_ciphersÚ
isinstanceÚtupleÚlistÚlenÚset_ecdh_curveÚwrap_socket)rR   rL   rN   rŠ   r   Úkeylog_filer…   r†   rh   rŒ   rˆ   r‰   rB   s                r!   Ú_wrap_sni_socketr©   î   sÚ  € Ø�jŠj˜ DÑ)Ô)€GØñ IVÝ”. §¢¨M½3Ô;RÑ!SÔ!SÑTÔTˆõ
 ”j—n’n _Ñ5Ô5ˆØÐ"Ø&1ˆGÔ#à�:Š:�k¥3¤=Ñ1Ô1µS´]ÒBÐBØ—Z’Z 
¨DÑ1Ô1ˆFØ—Z’Z °Ñ5Ô5ˆFØð ˜ð ðXØ×1Ò1¸ÈÐ1ÑOÔOÐOÐOøÝ)­3¬<½ÐDð Xð Xð XÝ,Ð-VÐSTÐ-VÐ-VÑWÔWÐWøøøøðXøøøå˜Ð"6Ñ7Ô7ð ðØ×.Ò.­s¬{Ô/FÑGÔGÐGÐGøÝ”|ð ð ð Ý,ØFÀ1ÐFÐFñô ð øøøøðøøøð �:Š:�j $Ñ'Ô'ð 
	Xð	XØ×'Ò'Ø˜:Ô&Ø—J’J˜y¨$Ñ/Ô/Ø—J’J˜z¨4Ñ0Ô0ñô ð ð øõ
 &¥zÐ2ð Xð Xð XÝ(Ð)VÐSTÐ)VÐ)VÑWÔWÐWøøøøÝ”<ð Xð Xð XÝ(Ð)VÐSTÐ)VÐ)VÑWÔWÐWøøøøðXøøøð �:Š:�k¥3¤=Ñ1Ô1µS´]ÒBÐBÈ6Ï:Ê:Ø˜eñL
ô L
ÐBð &+ˆGÔ"Ý"%¤-ˆGÔÐà%+§Z¢ZÐ0@À$Ñ%GÔ%GˆGÔ"Ø"(§*¢*¨[½#Ô:KÑ"LÔ"LˆGÔà˜ÐÐðRØ×#Ò# F¨9Ô$5Ñ6Ô6Ð6Ð6øÝ”<ð Rð Rð RÝ(Ð)PÈQÐ)PÐ)PÑQÔQÐQøøøøðRøøøà˜6Ð!Ð!ðØ# LÔ1�
Ý! *­uµd¨mÑ<Ô<ð ÅÀJÁÄÐSTÒ@TÐ@TÝ$ØZñô ð ð /9Ñ+�˜' 8Ø×'Ò'¨°'¸8ÑDÔDÐDÐDøÝð ð ð ØÝ%¥s¤|Ð4ð ð ð Ý(ØGÀAÐGÐGñô ð øøøøðøøøð ˜6Ð!Ð!ðVØ×&Ò& v¨lÔ';Ñ<Ô<Ð<Ð<øÝð Vð Vð VÝ(Ð)TÐQRÐ)TÐ)TÑUÔUÐUøøøøðVøøøð ×ÒØØ &§
¢
Ð+DÀdÑ KÔ KØ#ŸZšZÐ(>ÀÑEÔEØ ð	 ñ ô ð sž   ÃC+ Ã+DÄDÄDÄ2$E ÅE=Å&E8Å8E=ÆAG ÇH)Ç.H È H)ÈH$È$H)ËK* Ë*LË9LÌLÌA#M< Í< N3ÎN.Î.N3Î;O Ï
O8Ï!O3Ï3O8Úuser_ssloptc                 ó  — dt           j        i}|                     |¦  «         t          j                             d¦  «        }|r;t          j                             |¦  «        r|                     dd ¦  «        €||d<   n<|r:t          j                             |¦  «        r|                     dd ¦  «        €||d<   |                     dd ¦  «        r|d         }|                     dd¦  «        }t          | |||¦  «        } | S )Nr‚   ÚWEBSOCKET_CLIENT_CA_BUNDLErƒ   r„   r�   rŠ   T)
r   r    Úupdater“   r”   r2   ÚpathÚisfileÚisdirr©   )rR   rª   rN   rL   Ú	cert_pathrŠ   s         r!   rK   rK   C  s  € Ø¥Ô!2Ð3€FØ
‡M‚M�+ÑÔÐå”
—’Ð;Ñ<Ô<€Iàð+åŒG�NŠN˜9Ñ%Ô%ð+ð �OŠO˜J¨Ñ-Ô-Ð5à&ˆˆzÑÐàð+åŒG�MŠM˜)Ñ$Ô$ð+ð �OŠO˜N¨DÑ1Ô1Ð9à!*ˆˆ~Ñà‡z‚zÐ# TÑ*Ô*ð -ØÐ+Ô,ˆà—Z’ZÐ 0°$Ñ7Ô7€NÝ˜D &¨(°NÑCÔC€Dà€Kr    c                 óz  — t          d¦  «         d|› d|› d�}|d|› d|› d�z  }|rˆ|d         r€|d         }|d         r|d|d         › �z  }t          |                     ¦   «         ¦  «                             ¦   «                              ¦   «                              d	d
¦  «        }|d|› d�z  }|dz  }t          d|¦  «         t          | |¦  «         	 t          | ¦  «        \  }}}n:# t          j
        t          f$ r!}	t          t          |	¦  «        ¦  «        ‚d }	~	ww xY w|dk    rt          d|› �¦  «        ‚| S )NzConnecting proxy...zCONNECT rU   z HTTP/1.1
zHost: z
r   r   ú
Ú zProxy-Authorization: Basic zrequest headeréÈ   z!failed CONNECT via proxy status: )r   Úbase64encodeÚencodeÚstripÚdecodeÚreplacer	   r   r   r[   rn   r   r   ro   )
rR   r?   r@   r5   Úconnect_headerÚauth_strÚencoded_strÚstatusÚ_rh   s
             r!   rY   rY   ^  s„  € Ý	Ð
Ñ Ô Ð Ø: Ð:Ð: tÐ:Ð:Ð:€NØÐ0˜tÐ0Ð0 dÐ0Ð0Ð0Ñ0€Nð ð J��Q”ð JØ˜”7ˆØ�Œ7ð 	&Ø˜˜D œG˜˜Ñ%ˆHÝ" 8§?¢?Ñ#4Ô#4Ñ5Ô5×;Ò;Ñ=Ô=×DÒDÑFÔF×NÒNÈtÐUWÑXÔXˆØÐI¸ÐIÐIÐIÑIˆØ�fÑ€NÝÐ	˜>Ñ*Ô*Ð*åˆˆ~ÑÔÐð.Ý# DÑ)Ô)‰ˆ��1�1øÝŒLÕ,Ð-ð .ð .ð .Ý%¥c¨!¡f¤fÑ-Ô-Ð-øøøøð.øøøð �‚}€}Ý%Ð&RÈ&Ð&RÐ&RÑSÔSÐSà€Ks   ÃC) Ã)D Ã?DÄD c                 ó>  — d }d }i }t          d¦  «         	 t          | ¦  «        }|                     d¦  «                             ¦   «         }|s�n:t          |¦  «         |sG|                     dd¦  «        }t          |d         ¦  «        }t          |¦  «        dk    r|d         }nà|                     dd¦  «        }t          |¦  «        dk    rt          d¦  «        ‚|\  }}|                     ¦   «         d	k    rb| 	                    d	¦  «        rM| 	                    d	¦  «        }	|	�|	d
z   |                     ¦   «         z   |d	<   nA|                     ¦   «         |d	<   n)|                     ¦   «         ||                     ¦   «         <   �Œtt          d¦  «         |||fS )Nz--- response header ---Tzutf-8ú é   r   rU   zInvalid headerz
set-cookiez; z-----------------------)
r
   r   r¹   r¸   ÚsplitrJ   r¥   r   Úlowerr2   )
rR   r¾   Ústatus_messageÚheadersÚlineÚstatus_infoÚkvÚkeyÚvalueÚexisting_cookies
             r!   r   r   z  s’  € Ø€FØ€NØ€GÝ	Ð
#Ñ$Ô$Ð$ð5Ý˜‰ŒˆØ�{Š{˜7Ñ#Ô#×)Ò)Ñ+Ô+ˆØð 	ÙÝˆd‰ŒˆØð 	5ØŸ*š* S¨!Ñ,Ô,ˆKÝ˜ QœÑ(Ô(ˆFÝ�;ÑÔ !Ò#Ð#Ø!,¨Q¤�øà—’˜C Ñ#Ô#ˆBÝ�2‰wŒw˜!Š|ˆ|Ý(Ð)9Ñ:Ô:Ð:Ø‰JˆC�Ø�yŠy‰{Œ{˜lÒ*Ð*¨w¯{ª{¸<Ñ/HÔ/HÐ*Ø")§+¢+¨lÑ";Ô";�Ø"Ð.Ø,;¸dÑ,BÀUÇ[Â[Á]Ä]Ñ,R�G˜LÑ)Ð)à,1¯KªK©M¬M�G˜LÑ)Ð)à',§{¢{¡}¤}�˜Ÿ	š	™œÑ$ñ/5õ2 
Ð
#Ñ$Ô$Ð$à�7˜NÐ*Ð*r    )2Ú__doc__rq   r“   r[   Úbase64r   r¶   Ú_exceptionsr   r   r   Ú_loggingr   r	   r
   Ú_socketr   r   r   Ú_ssl_compatr   r   Ú_urlr   r   Ú__all__Úpython_socks._errorsr   r   r   Úpython_socks._typesr   Úpython_socks.syncr   rF   Ú	Exceptionr   ro   r£   rS   r   rJ   ÚboolrV   rW   Údictr©   rK   rY   r   r   r    r!   ú<module>rÛ      s  ððð ð& €€€Ø 	€	€	€	Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð
 )Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à
3Ð
3Ð
3€ðØXÐXÐXÐXÐXÐXÐXÐXÐXÐXØ-Ð-Ð-Ð-Ð-Ð-Ø'Ð'Ð'Ð'Ð'Ð'àÐÐøð
ØÐðð ð ð ð �Yñ ô ð ðð ð ð ð ˜Iñ ô ð ðð ð ð ð ˜yñ ô ð ð ð øøøð)ð )ð )ð )ð )ñ )ô )ð )ð6(,˜sð (,°uð (,ð (,ð (,ð (,ðV"�ð "ð "ð "ð "ðJ+ sð +°tð +Àuð +ð +ð +ð +ð@(ð (ð (ðVR˜6œ=ð R°$ð Rð Rð Rð Rðj�f”mð °$ð ð ð ð ð6�&”-ð ¨Sð ¸6¼=ð ð ð ð ð8!+�v”}ð !+¨ð !+ð !+ð !+ð !+ð !+ð !+s   ÁA! Á!.B