
    g              #          S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJrJrJrJrJrJr  SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK rSSK!rSSK"rS r#S r$\RJ                  RM                  S5      r'\'(       aU  SSK(r)SSK*r*\)RV                  r,\)RZ                  R\                  R^                  r0 " S S\,5      r1 " S	 S
\*Rd                  5      r3O
 " S S
5      r3\'r4 SSK5r5\	R                  r7 " S S\Rp                  Rr                  5      r: " S S\Rp                  Rv                  5      r< " S S\Rp                  Rr                  5      r= " S S\Rp                  Rr                  5      r>\R~                  R                  r@S rAS rBS rCS rDS rES rF SrS jrGSsS jrHS\S    S!S 4S" jrI " S# S$\R                  5      rKSS%SSS&S&SS'SSSS\	R                  \KR                  4S(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RS.\SS/\SS0\\   S1\PS2\SS3\\P   S4\\S\P4   S\S    S5\RS6\KS!\R                  R                  4"S7 jjrTS8\R                  R                  S9\WS!\W4S: jrXS8\R                  R                  S;\PS<\WS!S4S= jrY         StS(\R                  R                  S)\PS>\PS*\\Q   S+\RS,\\P   S-\RS.\SS/\SS4\\S\P4   S?\\P   S2\SS!\R                  R                  4S@ jjrZSA r[SB r\ SuSC\SD\\R                  R                  \W4   SE\SF\\Q   S!\\R\Q4   4
SG jjr]          SvSC\SE\\   SF\\Q   SH\SS.\SSI\\\R                  R                  \R                  R                  4      SJ\\W   S/\SSK\SSL\SSM\\R                  R                     S!\4SN jjrb          SwS(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RSH\SS.\SS/\SSK\SSC\\   SL\SS!\R                  R                  4SP jjrc          SxS(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RSH\SS.\SS/\SSQ\\   SR\\   SL\SS!\\R                  R                  \S4   4SS jjrdST reSU rf SuSC\SD\\R                  R                  \W4   SF\\Q   S!\\R\Q4   4SV jjrg     SySC\SF\\Q   S.\SSI\\\R                  R                  \R                  R                  4      SJ\\W   S/\SS!\\R                  R                  \Q4   4SW jjrhSX ri       SzS(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RS.\SS/\SSC\\   S!\R                  R                  4SY jjrjSZ rkS[\\P   S4\\S\P4   S!\5R                  4S\ jrm          S{S(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RS.\SS/\SSC\\5R                     S]\\5R                     S[\\P   S4\\S\P4   S!\R                  R                  4S^ jjro          S|S(\R                  R                  S)\PS*\\Q   S+\RS,\\P   S-\RS.\SS/\SS_\\R                  R                     S4\\S\P4   S?\\P   S[\\P   S!\R                  R                  4S` jjrU " Sa Sb\R                  5      rqSc\R                  R                  Sd\	R                  SM\R                  R                  Se\\R   S*\\Q   SF\QS!\4Sf jrt\R                  R                  \R                  R                  SSOSSSSSSSS&\R                  R                  4S)\PSg\\R                  R                  \P4   Sh\\R                  R                  \P4   Si\\R                  R                  \P4   S*\\Q   S+\RSI\\\R                  R                  \R                  R                  4      Sj\\\R                  R                  \P4      Sk\SSl\\Q   S,\\P   S-\RSe\RSm\SSn\\R                  R                  \P4   S!\4 So jjr?SSOSSSS\qR                  4S)\PSc\R                  R                  SM\\R                  R                     S+\RS*\\Q   Sl\\Q   S,\\P   S-\RSp\qS!S4Sq jjr}g! \6 a     " S S5      r5 GN~f = f)}zTalk to a DNS server.    N)AnyDictOptionalTupleUnioncastc                 ~    U c  g U [         R                   " 5       -
  nUS::  a  [        R                  R                  eU$ )N        )timedns	exceptionTimeout)
expirationtimeouts     B/home/matz/Project1/venv/lib/python3.13/site-packages/dns/query.py
_remainingr   1   s7    499;&G#~mm###N    c                 N    Uc  g [        [        R                  " 5       U -   U5      $ N)minr   )r   r   s     r   _expiration_for_this_attemptr   :   s#    tyy{W$j11r   dohc                   @   ^  \ rS rSrU 4S jr SS jr SS jrSrU =r$ )_NetworkBackendH   c                 R   > [         TU ]  5         X l        Xl        X0l        X@l        g r   )super__init___local_port	_resolver_bootstrap_address_family)selfresolver
local_portbootstrap_addressfamily	__class__s        r   r   _NetworkBackend.__init__I   s$    G)%N&7#!Lr   c                 ~   / n[        U5      u  px[        R                  R                  U5      (       a  UR	                  U5        OU R
                  b  UR	                  U R
                  5        Og[        U5      nU R                  n	U(       a  [        R                  R                  U5      n	U R                  R                  XUS9n
U
R                  5       nU H  n[        R                  R                  U5      nUc  U R                  S:w  a,  [        R                  R                  X@R                  4U5      nOS n[        U[        R                   U5      n[#        SU5      n [%        U[        R                  R                  X4U5      U5        ['        U5      s  $    [*        R,                  e! [(         a     M  f = f)N)r'   lifetimer   g       @)_compute_timesr   inet
is_addressappendr!   r   r"   af_for_addressr    resolve_name	addressesr   low_level_address_tuple_make_socketsocketSOCK_STREAMr   _connect_CoreSyncStream	ExceptionhttpcoreConnectError)r#   hostportr   local_addresssocket_optionsr2   _r   r'   answersaddressafsourcesockattempt_expirations                   r   connect_tcp_NetworkBackend.connect_tcpP   s    I*73MAxx""4((  &((4  !8!89$Z0  XX44]CF..55' 6  $--/	$XX,,W5 ,0@0@A0E XX==&(8(892F "F#B(:(:FC%A#z%R"88'"M*
 +400! %& ''' ! s   #6F..
F<;F<c                     [         er   NotImplementedError)r#   pathr   r?   s       r   connect_unix_socket#_NetworkBackend.connect_unix_socketw   s
     &%r   )r!   r"   r   r    r   )	__name__
__module____qualname____firstlineno__r   rG   rM   __static_attributes____classcell__r(   s   @r   r   r   H   s$    	" FJ%	(P 15	& 	&r   r   c                   J   ^  \ rS rSrSSS\R
                  S.U 4S jjrSrU =r$ )_HTTPTransport|   r   N)r%   r&   r$   r'   c                   > Uc!  Uc  SS K nUR                  R                  5       n[        TU ]  " U0 UD6  [        X1X$5      U R                  l        g Nr   )dns.resolverr$   Resolverr   r   r   _pool_network_backend)	r#   r%   r&   r$   r'   argskwargsr   r(   s	           r   r   _HTTPTransport.__init__}   sO     $5$=#<<002Gd-f-*9&7+DJJ'r    )	rO   rP   rQ   rR   r5   	AF_UNSPECr   rS   rT   rU   s   @r   rW   rW   |   s!     "##	 	r   rW   c                       \ rS rSrS rSrg)rW      c                     [         er   rJ   )r#   r<   r=   r   r>   s        r   rG   _HTTPTransport.connect_tcp       %%r   rb   N)rO   rP   rQ   rR   rG   rS   rb   r   r   rW   rW      s    	&r   c                   |    \ rS rSrSr " S S\5      r " S S\5      r " S S5      r " S	 S
5      r	\
S 5       rSrg)ssl   r   c                       \ rS rSrSrg)ssl.WantReadException   rb   NrO   rP   rQ   rR   rS   rb   r   r   WantReadExceptionrm          r   rp   c                       \ rS rSrSrg)ssl.WantWriteException   rb   Nro   rb   r   r   WantWriteExceptionrs      rq   r   ru   c                       \ rS rSrSrg)ssl.SSLContext   rb   Nro   rb   r   r   
SSLContextrw      rq   r   ry   c                       \ rS rSrSrg)ssl.SSLSocket   rb   Nro   rb   r   r   	SSLSocketr{      rq   r   r}   c                     [        S5      e)Nzno ssl support)r9   )clsr_   r`   s      r   create_default_contextssl.create_default_context   s    ,--r   rb   N)rO   rP   rQ   rR   	CERT_NONEr9   rp   ru   ry   r}   classmethodr   rS   rb   r   r   rj   rj      sG    			 		 		 		 	 
	. 
	.r   rj   c                       \ rS rSrSrSrg)UnexpectedSource   z=A DNS query response came from an unexpected address or port.rb   NrO   rP   rQ   rR   __doc__rS   rb   r   r   r   r      s    Gr   r   c                       \ rS rSrSrSrg)BadResponse   z<A DNS query response does not respond to the question asked.rb   Nr   rb   r   r   r   r      s    Fr   r   c                       \ rS rSrSrSrg)NoDOH   zIDNS over HTTPS (DOH) was requested but the httpx module is not
available.rb   Nr   rb   r   r   r   r          r   r   c                       \ rS rSrSrSrg)NoDOQ   zJDNS over QUIC (DOQ) was requested but the aioquic module is not
available.rb   Nr   rb   r   r   r   r      r   r   r   c                 F    [         R                   " 5       nU c  US 4$ XU -   4$ r   )r   )r   nows     r   r,   r,      s)    
))+CT{7]##r   c                    U(       a4  [        U [        R                  5      (       a  U R                  5       S:  a  g[        R
                  " 5       nSnU(       a  U[        R                  -  nU(       a  U[        R                  -  nU(       a  UR                  X5        Uc  S nO8U[        R                  " 5       -
  nUS::  a  [        R                  R                  eUR                  U5      (       d  [        R                  R                  eg )Nr   Tr
   )
isinstancerj   r}   pending	selectorsDefaultSelector
EVENT_READEVENT_WRITEregisterr   r   r   r   select)fdreadablewritabler@   r   seleventsr   s           r   	_wait_forr      s     Jr3==11bjjlQ6F

#
#
%CF)&&&)'''R tyy{*c>--'''::gmm### r   c                 "    [        U SSSU5        g )NTFr   sr   s     r   _wait_for_readabler      s    audJ/r   c                 "    [        U SSSU5        g )NFTr   r   s     r   _wait_for_writabler      s    adJ/r   c                      [         R                  R                  XS   5      n[         R                  R                  XS   5      nX4:H  =(       a    USS  USS  :H  $ ! [         R                  R                   a     gf = f)Nr   F   )r   r-   	inet_ptonr   SyntaxError)rC   a1a2n1n2s        r   _addresses_equalr      su    XXqE*XXqE* 8(12"QR&(( ==$$ s   AA A=<A=c                     U(       d  g[        XU5      (       d3  [        R                  R                  US   5      (       a  USS  USS  :X  a  gU(       a  g[	        SU SU 35      e)NTr   r   Fzgot a response from z instead of )r   r   r-   is_multicastr   )rC   from_addressdestinationignore_unexpecteds       r   _matches_destinationr     sl     +66k!n--,qr2BkRSRTo2U	

|nL[MJ r   Tc                 4   S nS n [         R                  R                  U 5      nU nU(       a9  [         R                  R                  U5      nU(       a  Xu:w  a  [	        S5      eOUnU(       a'  U(       d    [         R                  R                  U5      nU(       a!  [         R                  R                  Xa4U5      nU(       a!  [         R                  R                  X#4U5      nXVU4$ ! [         a    U(       a  e  Nf = f! [         a    [	        S5      ef = f)Nz5different address families for source and destinationz3source_port specified but address family is unknown)r   r-   r0   r9   
ValueError
any_for_afr3   )wherer=   rD   source_portwhere_must_be_addressrC   r   safs           r   _destination_and_sourcer     s   
 
BKXX$$U+
 hh%%f-y K   B6	TXX((,F hh667JBO1162GLV$$?    !,  	TRSS	Ts   !C) 6D )C>=C>Dc                     [        X5      n UR                  S5        Ub  UR                  U5        U(       a  UR                  USUS9$ U$ ! [         a    UR                  5         e f = f)NF)do_handshake_on_connectserver_hostname)socket_factorysetblockingbindwrap_socketr9   close)rC   typerD   ssl_contextr   r   s         r   r4   r4   @  st    r A	eFF6N**(- / +   H 		s   <A 
A A(r$   zdns.resolver.Resolverreturnc                 H    U c  SS K nUR                  R                  5       n U $ rZ   )r[   r$   r\   )r$   r   s     r   _maybe_get_resolverr   T  s$     <<((*Or   c                   4    \ rS rSrSrSrSrSrSrSr	Sr
SrSrg)	HTTPVersionib  zzWhich version of HTTP should be used?

DEFAULT will select the first version from the list [2, 1.1, 3] that
is available.
r   r         rb   N)rO   rP   rQ   rR   r   DEFAULTHTTP_1H1HTTP_2H2HTTP_3H3rS   rb   r   r   r   r   b  s,     GF	
BF	
BF	
Br   r   i  Fz
/dns-queryqr   r   r=   rD   r   one_rr_per_rrsetignore_trailingsessionrL   postr&   verifyr'   http_versionc                 @   [        XXES5      u  nnnUbb  [        R                  R                  U5      (       a>  U[        R
                  :X  a  SU SU U	 3nO!U[        R                  :X  a
  SU SU U	 3nOUn0 nUc  [        R                  R                  W5      nUR                  c  [        S5      e[        R                  R                  UR                  5      (       a  UR                  nUR                  US'   UR                  b  UR                  nU[        R                  :X  d  U[        R                  :X  a  [         (       dy  Ucc  [#        U5      nWR                  c   eUR%                  UR                  U5      n[&        R(                  " [+        UR-                  5       5      5      n[/        U UWUUUUUUUU
S	9$ [         (       d  [0        eU(       a*  [3        U[4        R6                  5      (       d  [        S
5      eU R9                  5       nSS0nU[        R:                  [        R                  4;   nU[        R<                  [        R                  4;   nUc  SnSnO
US   nUS   nU(       a  [>        R@                  " U5      nO'[C        UUUUUUUUS9n[4        R6                  " UUUUS9nU nU
(       a:  URE                  S[G        [I        U5      5      S.5        URK                  WUUUUS9nOJ[L        RN                  " U5      RQ                  S5      nURS                  5       n URU                  WUUSU 0US9nSSS5        WRV                  S:  d  URV                  S:  a'  [        U SURV                   SURX                   35      e[        RZ                  R]                  URX                  U R^                  U R`                  UUS9n!URb                  Re                  5       U!l3        U Ri                  U!5      (       d  [j        eU!$ ! , (       d  f       N= f)a  Return the response obtained after sending a query via DNS-over-HTTPS.

*q*, a ``dns.message.Message``, the query to send.

*where*, a ``str``, the nameserver IP address or the full URL. If an IP address is
given, the URL will be constructed using the following schema:
https://<IP-address>:<port>/<path>.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
times out. If ``None``, the default, wait forever.

*port*, a ``int``, the port to send the query to. The default is 443.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message. The default is
0.

*one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

*ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
received message.

*session*, an ``httpx.Client``.  If provided, the client session to use to send the
queries.

*path*, a ``str``. If *where* is an IP address, then *path* will be used to
construct the URL to send the DNS query to.

*post*, a ``bool``. If ``True``, the default, POST method will be used.

*bootstrap_address*, a ``str``, the IP address to use to bypass resolution.

*verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
of the server is done using the default CA bundle; if ``False``, then no
verification is done; if a `str` then it specifies the path to a certificate file or
directory which will be used for verification.

*resolver*, a ``dns.resolver.Resolver`` or ``None``, the resolver to use for
resolution of hostnames in URLs.  If not specified, a new resolver with a default
configuration will be used; note this is *not* the default resolver as that resolver
might have been configured to use DoH causing a chicken-and-egg problem.  This
parameter only has an effect if the HTTP library is httpx.

*family*, an ``int``, the address family.  If socket.AF_UNSPEC (the default), both A
and AAAA records will be retrieved.

*http_version*, a ``dns.query.HTTPVersion``, indicating which HTTP version to use.

Returns a ``dns.message.Message``.
FNzhttps://:z	https://[z]:zno hostname in URLsni_hostname)r   r   z)session parameter must be an httpx.Clientacceptzapplication/dns-messager   r   )r>   http1http2r   r%   r&   r$   r'   )r   r   r   	transport)zcontent-typezcontent-length)headerscontentr   
extensions   =r   )r   r   paramsr      +   responded with status code z
Response body: keyringrequest_macr   r   )6r   r   r-   r.   r5   AF_INETAF_INET6urllibparseurlparsehostnamer   r=   r   r   r   have_dohr   r1   randomchoicelistr2   _http3r   r   httpxClientto_wirer   r   
contextlibnullcontextrW   updatestrlenr   base64urlsafe_b64encoderstripdecodegetstatus_coder   message	from_wirer   r   elapsedtotal_secondsr   is_responser   )"r   r   r   r=   rD   r   r   r   r   rL   r   r&   r   r$   r'   r   rC   r@   
the_sourceurlr   parsedrA   wirer   h1h2r>   r%   cmr   responsetwirers"                                     r   httpsr  r  s   N 2V%RJ 
~#((--e44UG1TF4&1C6??"eWBtfTF3CJ &&s+??"12288v// &)/J~&;;";;D{~~%+++HH$*84H??...++FOOVDG &d73D3D3F.G H
 	
 8z'5<<88DEE99;D23G	+..+*=*=>	>B	+..+*=*=>	>B 
"1]
0:0F0Fw0O"'!/	
	 \\"VyQ	w NN$=&)#d)n ||% $ H ++D188>DKKME{{u~% # H) 
< c!X%9%9C%?g1(2F2F1G 0 013
 	
 			MM)' 	 	A ++-AF==H[ 
s   8BP
Pr   namec                 H    U c  [         eU  H  u  p#X!:X  d  M  Us  $    [         er   )KeyError)r   r  headervalues       r   _find_headerr!  9  s)     >L ! Nr   peerr  c                    [        U S5      nUc  [        S5      e[        U5      nUS:  a  [        S5      eUS:  d  US:  a7  Sn[        U5      S:  a   SUR	                  5       -   n[        U S	U U 35      eg ! [
         a     Nf = f)
Ns   :statuszno :status header in responser   zstatus is negativer   r    z: r   )r!  r   intr  r	  r9   r   )r   r"  r  r   statuserrors         r   _check_statusr(  B  s    *-E}9::ZFz.//|v|t9q=t{{}, D6!=fXeWMNN $
  s   A; ;
BBr  r   c                    [         R                  R                  (       d  [        S5      e[        R
                  R                  U5      nUR                  n
UR                  b  UR                  nSU l	        U R                  5       n[         R                  R                  XSS9nU   UR                  XXV5      n[        U5      u  nnUR                  U5       nUR                  X-U5        UR!                  [#        U5      5      n[%        UR'                  5       X5        S S S 5        [(        R(                  " 5       nS S S 5        [         R*                  R-                  UU R.                  U R0                  UUS9n[3        WW-
  S5      Ul        U R5                  U5      (       d  [6        eU$ ! , (       d  f       N= f! , (       d  f       N= f)Nz DNS-over-HTTP3 is not available.r   T)verify_modeserver_nameh3r   r
   )r   quic	have_quicr   r   r   r   r   r=   idr   SyncQuicManagerconnectr,   make_streamsend_h3receiver   r(  r   r   r  r  r   r   maxr  r   )r   r   r  r   r=   rD   r   r   r   r   r   r   	url_partsr  manager
connectionstartr   streamfinishr  s                        r   r   r   S  sm    88677%%c*I!!H~~!~~AD99;Dhh&&T ' G 
__U&F
,W5
##G,NN3d+>>*Z"89D&..*E8 -  
 			MM)' 	 	A %%AF==H -, 
s%   &2F<AF+F<+
F9	5F<<
G
c                 b      U R                  U5      $ ! [         a    [        X5         Of = fM/  )zReads a datagram from the socket.
A Timeout exception will be raised if the operation is not completed
by the expiration time.
)recvfromBlockingIOErrorr   )rE   max_sizer   s      r   	_udp_recvr@    s7    
 	1==** 	1t0	1 s    ,,c                       U(       a  U R                  X5      $ U R                  U5      $ ! [         a    [        X5         Of = fMG  )zSends the specified datagram to destination over the socket.
A Timeout exception will be raised if the operation is not completed
by the expiration time.
)sendtosendr>  r   )rE   datar   r   s       r   	_udp_sendrE    sH    
 	1{{455yy& 	1t0	1 s   , , AArE   whatr   r   c                     [        U[        R                  R                  5      (       a  UR	                  5       n[
        R
                  " 5       n[        XX#5      nXT4$ )a  Send a DNS message to the specified UDP socket.

*sock*, a ``socket``.

*what*, a ``bytes`` or ``dns.message.Message``, the message to send.

*destination*, a destination tuple appropriate for the address family
of the socket, specifying where to send the query.

*expiration*, a ``float`` or ``None``, the absolute time at which
a timeout exception should be raised.  If ``None``, no timeout will
occur.

Returns an ``(int, float)`` tuple of bytes sent and the sent time.
)r   r   r  Messager   r   rE  )rE   rF  r   r   	sent_timens         r   send_udprK    sE    , $++,,||~		I$k6A>r   r   r   r   raise_on_truncationignore_errorsqueryc           	         Sn [        U SU5      u  p[        U R                  XU5      (       d  M.  [        R                  " 5       n [        R
                  R                  UUUUUUS9nU	(       a  U
b  U
R                  U5      (       d  M  U(       a  X4$ XU4$ ! [        R
                  R                   a:  nU	(       a-  U
b*  U
R                  UR                  5       5      (       d   SnAM  e SnAf[         a    U	(       a   GM  e f = f)a  Read a DNS message from a UDP socket.

*sock*, a ``socket``.

*destination*, a destination tuple appropriate for the address family
of the socket, specifying where the message is expected to arrive from.
When receiving a response, this would be where the associated query was
sent.

*expiration*, a ``float`` or ``None``, the absolute time at which
a timeout exception should be raised.  If ``None``, no timeout will
occur.

*ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
unexpected sources.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
RRset.

*keyring*, a ``dict``, the keyring to use for TSIG.

*request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
junk at end of the received message.

*raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
the TC bit is set.

Raises if the message is malformed, if network errors occur, of if
there is a timeout.

If *destination* is not ``None``, returns a ``(dns.message.Message, float)``
tuple of the received message and the received time.

If *destination* is ``None``, returns a
``(dns.message.Message, float, tuple)``
tuple of the received message, the received time, and the address where
the message arrived from.

*ignore_errors*, a ``bool``.  If various format errors or response
mismatches occur, ignore them and keep listening for a valid response.
The default is ``False``.

*query*, a ``dns.message.Message`` or ``None``.  If not ``None`` and
*ignore_errors* is ``True``, check that the received message is a response
to this query, and if not keep listening for a valid response.
r     )r   r   r   r   rL  N)
r@  r   r'   r   r   r  r  	Truncatedr  r9   )rE   r   r   r   r   r   r   r   rL  rM  rN  r  r   received_timer  es                   r   receive_udprT    s    | D
(ujA#KK4E
 
 			%%'!1 /$7 & A6 U.u7H7H7K7K%%l331 {{$$ 	 %))!))+66 			s$   "B D7.C,+C,,DD5   c                    U R                  5       n[        XXE5      u  pn[        U5      u  nnU
(       a  [        R                  " U
5      nO[        U[        R                  U5      nU n[        UXU5        [        UUUUUU R                  U R                  UU	UU 5      u  nnUU-
  Ul        U(       d  U R                  U5      (       d  [        eUsSSS5        $ ! , (       d  f       O= f  e)a  Return the response obtained after sending a query via UDP.

*q*, a ``dns.message.Message``, the query to send

*where*, a ``str`` containing an IPv4 or IPv6 address,  where
to send the message.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the
query times out.  If ``None``, the default, wait forever.

*port*, an ``int``, the port send the message to.  The default is 53.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying
the source address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message.
The default is 0.

*ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from
unexpected sources.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
RRset.

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
junk at end of the received message.

*raise_on_truncation*, a ``bool``.  If ``True``, raise an exception if
the TC bit is set.

*sock*, a ``socket.socket``, or ``None``, the socket to use for the
query.  If ``None``, the default, a socket is created.  Note that
if a socket is provided, it must be a nonblocking datagram socket,
and the *source* and *source_port* are ignored.

*ignore_errors*, a ``bool``.  If various format errors or response
mismatches occur, ignore them and keep listening for a valid response.
The default is ``False``.

Returns a ``dns.message.Message``.
N)r   r   r,   r  r  r4   r5   
SOCK_DGRAMrK  rT  r   macr   r  r   )r   r   r   r=   rD   r   r   r   r   rL  rE   rM  r  rC   r   
begin_timer   r  r   r  rR  s                        r   udprZ  &  s    p 99;D 7V!Rf  .g6Z0:0F0Ft0L"f//8	qDz2(IIEE
M + q!1!1) 
, 	s   )A(C
C)udp_socktcp_sockc                      [        U UUUUUUUUSU	U5      nUS4$ ! [        R                  R                   a    [	        U UUUUUUUU
5	      nUS4s $ f = f)a  Return the response to the query, trying UDP first and falling back
to TCP if UDP results in a truncated response.

*q*, a ``dns.message.Message``, the query to send

*where*, a ``str`` containing an IPv4 or IPv6 address,  where to send the message.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
times out.  If ``None``, the default, wait forever.

*port*, an ``int``, the port send the message to.  The default is 53.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message. The default is
0.

*ignore_unexpected*, a ``bool``.  If ``True``, ignore responses from unexpected
sources.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own RRset.

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing junk at end of the
received message.

*udp_sock*, a ``socket.socket``, or ``None``, the socket to use for the UDP query.
If ``None``, the default, a socket is created.  Note that if a socket is provided,
it must be a nonblocking datagram socket, and the *source* and *source_port* are
ignored for the UDP query.

*tcp_sock*, a ``socket.socket``, or ``None``, the connected socket to use for the
TCP query.  If ``None``, the default, a socket is created.  Note that if a socket is
provided, it must be a nonblocking connected stream socket, and *where*, *source*
and *source_port* are ignored for the TCP query.

*ignore_errors*, a ``bool``.  If various format errors or response mismatches occur
while listening for UDP, ignore them and keep listening for a valid response. The
default is ``False``.

Returns a (``dns.message.Message``, tcp) tuple where tcp is ``True`` if and only if
TCP was used.
TF)rZ  r   r  rQ  tcp)r   r   r   r=   rD   r   r   r   r   r[  r\  rM  r  s                r   udp_with_fallbackr_    s    r 
 %  ;;    

 $ s    5AAc                 &   SnUS:  a=   U R                  U5      nUS:X  a  [        S5      eU[        U5      -  nX4-  nUS:  a  M=  U$ ! [        [        R
                  4 a    [        X5         N1[        R                   a    [        X5         NQf = f)zRead the specified number of bytes from sock.  Keep trying until we
either get the desired amount, or we hit EOF.
A Timeout exception will be raised if the operation is not completed
by the expiration time.
r   r   EOF)	recvEOFErrorr  r>  rj   SSLWantReadErrorr   SSLWantWriteErrorr   )rE   countr   r   rJ  s        r   	_net_readrg    s     	A
!)		1		% ACxuo%SVOEFA !) H	  !5!56 	1t0$$ 	1t0	1s   4A %B/BBc                     Sn[        U5      nX4:  a   X0R                  XS 5      -  nX4:  a  M  gg! [        [        R                  4 a    [        X5         N0[        R                   a    [        X5         NPf = f)zWrite the specified data to the socket.
A Timeout exception will be raised if the operation is not completed
by the expiration time.
r   N)r  rC  r>  rj   re  r   rd  r   )rE   rD  r   currentls        r   
_net_writerk    sr    
 GD	A
+	1yyh00G +  !6!67 	1t0## 	1t0	1s   2 %A:A:9A:c                    [        U[        R                  R                  5      (       a  UR	                  SS9nO[        U5      R                  SS5      U-   n[        R                  " 5       n[        XU5        [        U5      U4$ )a_  Send a DNS message to the specified TCP socket.

*sock*, a ``socket``.

*what*, a ``bytes`` or ``dns.message.Message``, the message to send.

*expiration*, a ``float`` or ``None``, the absolute time at which
a timeout exception should be raised.  If ``None``, no timeout will
occur.

Returns an ``(int, float)`` tuple of bytes sent and the sent time.
T)prepend_lengthr   big)	r   r   r  rH  r   r  to_bytesr   rk  )rE   rF  r   tcpmsgrI  s        r   send_tcprq    sl    $ $++,,T2
 T##Au-4		ItZ(K##r   c                     [        U SU5      n[        R                  " SU5      u  n[        XU5      n[        R                  " 5       n	[        R
                  R                  UUUUUS9n
X4$ )a  Read a DNS message from a TCP socket.

*sock*, a ``socket``.

*expiration*, a ``float`` or ``None``, the absolute time at which
a timeout exception should be raised.  If ``None``, no timeout will
occur.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
RRset.

*keyring*, a ``dict``, the keyring to use for TSIG.

*request_mac*, a ``bytes`` or ``None``, the MAC of the request (for TSIG).

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
junk at end of the received message.

Raises if the message is malformed, if network errors occur, of if
there is a timeout.

Returns a ``(dns.message.Message, float)`` tuple of the received message
and the received time.
r   !Hr   )rg  structunpackr   r   r  r  )rE   r   r   r   r   r   ldatarj  r  rR  r  s              r   receive_tcprw    so    B dAz*E==u%DQTj)DIIKM)' 	 	A r   c                 X   U R                  U5      nUS:X  a  g U[        R                  [        R                  [        R                  4;   a9  [        X5        U R                  [        R                  [        R                  5      nUS:w  a   [        U[        R                  " U5      5      eg rZ   )
connect_exerrnoEINPROGRESSEWOULDBLOCKEALREADYr   
getsockoptr5   
SOL_SOCKETSO_ERROROSErrorosstrerror)r   rB   r   errs       r   r7   r7   K  s}    
,,w
C
ax
u  %"3"3U^^DD1)ll6,,foo>
axc2;;s+,, r   c	           	         U R                  5       n	[        U5      u  pU(       a  [        R                  " U5      nO*[	        XXE5      u  pn[        U[        R                  U5      nU nU(       d  [        UWU5        [        XU5        [        XX`R                  U R                  U5      u  nnUU
-
  Ul        U R                  U5      (       d  [        eUsSSS5        $ ! , (       d  f       O= f  e)aU  Return the response obtained after sending a query via TCP.

*q*, a ``dns.message.Message``, the query to send

*where*, a ``str`` containing an IPv4 or IPv6 address, where
to send the message.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the
query times out.  If ``None``, the default, wait forever.

*port*, an ``int``, the port send the message to.  The default is 53.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying
the source address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message.
The default is 0.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
RRset.

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
junk at end of the received message.

*sock*, a ``socket.socket``, or ``None``, the connected socket to use for the
query.  If ``None``, the default, a socket is created.  Note that
if a socket is provided, it must be a nonblocking connected stream
socket, and *where*, *port*, *source* and *source_port* are ignored.

Returns a ``dns.message.Message``.
N)r   r,   r  r  r   r4   r5   r6   r7   rq  rw  r   rX  r   r  r   )r   r   r   r=   rD   r   r   r   rE   r  rY  r   r  rC   r   r   r  rR  s                     r   r^  r^  V  s    V 99;D-g6Z0:0F0Ft0L$;%
!& "f00&9	qQZ0*%(+YY
M +}}Q 
 	s   (A-C
C-c                       U R                  5         g ! [        R                   a    [        X5         O$[        R                   a    [        X5         Of = fMY  r   )do_handshakerj   rd  r   re  r   r   s     r   _tls_handshaker    sO    
	.NN## 	.q-$$ 	.q-	. s    AAAr   c                    S nS n[        U[        5      (       aY  [        R                  R	                  U5      (       a  UnO2[        R                  R                  U5      (       a  UnO[        S5      e[        R                  " X#S9n[        R                  R                  Ul        U c  SUl        UR                  S/5        USL a  [        R                  Ul        U$ )Nzinvalid verify string)cafilecapathFdot)r   r  r  rL   isfileisdirr   rj   r   
TLSVersionTLSv1_2minimum_versioncheck_hostnameset_alpn_protocolsr   r*  )r   r   r  r  r   s        r   _make_dot_ssl_contextr    s     !F F&#77>>&!!FWW]]6""F455,,FJK"%.."8"8K%*"""E7+"%--r   r   c                    U(       a  [        U UUUUUUUU5	      $ U R                  5       n[        U5      u  p[        XXE5      u  nnnU	c  U(       d  [	        X5      n	[        U[        R                  UU	U
S9 n[        UUU5        [        UU5        [        UX5        [        UXU R                  U R                  U5      u  nnUU-
  Ul        U R                  U5      (       d  [         eUsSSS5        $ ! , (       d  f       O= f  e)a  Return the response obtained after sending a query via TLS.

*q*, a ``dns.message.Message``, the query to send

*where*, a ``str`` containing an IPv4 or IPv6 address,  where
to send the message.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the
query times out.  If ``None``, the default, wait forever.

*port*, an ``int``, the port send the message to.  The default is 853.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying
the source address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message.
The default is 0.

*one_rr_per_rrset*, a ``bool``.  If ``True``, put each RR into its own
RRset.

*ignore_trailing*, a ``bool``.  If ``True``, ignore trailing
junk at end of the received message.

*sock*, an ``ssl.SSLSocket``, or ``None``, the socket to use for
the query.  If ``None``, the default, a socket is created.  Note
that if a socket is provided, it must be a nonblocking connected
SSL stream socket, and *where*, *port*, *source*, *source_port*,
and *ssl_context* are ignored.

*ssl_context*, an ``ssl.SSLContext``, the context to use when establishing
a TLS connection. If ``None``, the default, creates one with the default
configuration.

*server_hostname*, a ``str`` containing the server's hostname.  The
default is ``None``, which means that no hostname is known, and if an
SSL context is created, hostname checking will be disabled.

*verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
of the server is done using the default CA bundle; if ``False``, then no
verification is done; if a `str` then it specifies the path to a certificate file or
directory which will be used for verification.

Returns a ``dns.message.Message``.

N)r   r   )r^  r   r,   r   r  r4   r5   r6   r7   r  rq  rw  r   rX  r   r  r   )r   r   r   r=   rD   r   r   r   rE   r   r   r   r  rY  r   rC   r   r   r  rR  s                       r   tlsr    s   z  

 
	
 99;D-g6Z 7V!Rf 4+OD	
'
 
K,q*%D%(zQYY
M +}}Q!
 
 
$ 	s   8A3C55
Dr8  c                 >   [         R                  R                  (       d  [        S5      eUb  U
c  Un
SU l        U R                  5       nU(       a  [        R                  " S5      nUnO[         R                  R                  XS9nUnU   U(       d  WR                  XXE5      n[        U5      u  nnWR                  U5       nUR                  US5        UR                  [        U5      5      nSSS5        [        R                  " 5       nSSS5        [         R                   R#                  UU R$                  U R&                  UUS9n[)        WW-
  S5      Ul        U R+                  U5      (       d  [,        eU$ ! , (       d  f       N= f! , (       d  f       N= f)a+  Return the response obtained after sending a query via DNS-over-QUIC.

*q*, a ``dns.message.Message``, the query to send.

*where*, a ``str``, the nameserver IP address.

*timeout*, a ``float`` or ``None``, the number of seconds to wait before the query
times out. If ``None``, the default, wait forever.

*port*, a ``int``, the port to send the query to. The default is 853.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying the source
address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message. The default is
0.

*one_rr_per_rrset*, a ``bool``. If ``True``, put each RR into its own RRset.

*ignore_trailing*, a ``bool``. If ``True``, ignore trailing junk at end of the
received message.

*connection*, a ``dns.quic.SyncQuicConnection``.  If provided, the connection to use
to send the query.

*verify*, a ``bool`` or ``str``.  If a ``True``, then TLS certificate verification
of the server is done using the default CA bundle; if ``False``, then no
verification is done; if a `str` then it specifies the path to a certificate file or
directory which will be used for verification.

*hostname*, a ``str`` containing the server's hostname or ``None``.  The default is
``None``, which means that no hostname is known, and if an SSL context is created,
hostname checking will be disabled.  This value is ignored if *url* is not
``None``.

*server_hostname*, a ``str`` or ``None``.  This item is for backwards compatibility
only, and has the same meaning as *hostname*.

Returns a ``dns.message.Message``.
zDNS-over-QUIC is not available.Nr   )r*  r+  Tr   r
   )r   r-  r.  r   r/  r   r  r  r0  r1  r,   r2  rC  r4  r   r   r  r  r   r   r5  r  r   )r   r   r   r=   rD   r   r   r   r8  r   r   r   r  r7  the_connectionthe_managerr9  r   r:  r;  r  s                        r   r-  r-  '  sV   n 88566"x'7"AD99;D 5?5K5KD5Q#((**v*T	(00fRN,W5
''0FKKd#>>*Z"89D 1  
 			MM)' 	 	A %%AF==H 10	 
s$   9F-E=1F=
F	F
Fc                   $    \ rS rSrSrSrSrSrSrg)UDPModei  zHow should UDP be used in an IXFR from :py:func:`inbound_xfr()`?

NEVER means "never use UDP; always use TCP"
TRY_FIRST means "try to use UDP but fall back to TCP if needed"
ONLY means "raise ``dns.xfr.UseTCP`` if trying UDP does not succeed"
r   r   r   rb   N)	rO   rP   rQ   rR   r   NEVER	TRY_FIRSTONLYrS   rb   r   r   r  r    s     EIDr   r  txn_managerr   serialc              #   "  #    UR                   S   R                  nU[        R                  R                  :H  nU R                  5       nUR                  5       n	UR                  [        R                  :H  n
U
(       a  [        XSU5        O/[        R                  " S[        U	5      5      U	-   n[        XU5        [        R                  R!                  XX:5       nSnSnU(       d  [#        U5      u  nnUb	  Ub  UU:  a  UnU
(       a  [%        USU5      u  nnO3['        USU5      n[        R(                  " SU5      u  n['        UUU5      n[        R*                  R-                  UUR.                  UR0                  SUUU
(       + US9nUR3                  U5      nUv   UR4                  nU(       d  M  UR.                  (       a0  WR6                  (       d  [        R8                  R;                  S	5      eSSS5        g! , (       d  f       g= f7f)
z'Given a socket, does the zone transfer.r   Nrs  FrP  r   T)r   r   xfrorigintsig_ctxmultir   zmissing TSIG)questionrdtyper   	rdatatypeIXFRfrom_wire_originr   r   r5   rW  rE  rt  packr  rk  r  Inboundr,   r@  rg  ru  r  r  r   rX  process_messager  had_tsigr   	FormError)r  r   rN  r  r   r   r  is_ixfrr  r  is_udprp  inbounddoner  r@   mexpirationrwirerv  rj  r  s                        r   _inbound_xfrr    s     ^^A%%F***G))+F==?DVVv(((F!4,T3t9-41j)	f	=-g6Q"&;+C(&q%=
!!Q4}}T51!!Q4%%!II!!z!( & 	A **1-DGzzH1 $2 ==--)).99; 
>	=	=s&   CHCG>4AG>5	H>
HHzoner  rdclasskeyname
relativizer+   use_udpkeyalgorithmc           	   #   H  #     " S S[         R                  R                  5      n[        U[        5      (       a  [         R
                  R                  U5      n[         R                  R                  R                  U5      n[         R                  R                  XU5      nU[         R                  R                  :X  a  UR                  UR                  U[         R                  R                   [         R                  R"                  SS9n[         R$                  R                  SSSU-  5      nUR'                  US5        Ub  UR)                  XgUS
9  [+        XX5      u  nnn
[-        U	5      u  nnU" X5      nU(       a)  U[         R                  R                  :w  a  [/        S5      eU(       a  [0        R2                  O[0        R4                  n[7        UUU
5       n[9        UUU5        [;        UUUXU5       S	h  vN   S	S	S	5        g	 N! , (       d  f       g	= f7f)a/  Return a generator for the responses to a zone transfer.

*where*, a ``str`` containing an IPv4 or IPv6 address,  where
to send the message.

*zone*, a ``dns.name.Name`` or ``str``, the name of the zone to transfer.

*rdtype*, an ``int`` or ``str``, the type of zone transfer.  The
default is ``dns.rdatatype.AXFR``.  ``dns.rdatatype.IXFR`` can be
used to do an incremental transfer instead.

*rdclass*, an ``int`` or ``str``, the class of the zone transfer.
The default is ``dns.rdataclass.IN``.

*timeout*, a ``float``, the number of seconds to wait for each
response message.  If None, the default, wait forever.

*port*, an ``int``, the port send the message to.  The default is 53.

*keyring*, a ``dict``, the keyring to use for TSIG.

*keyname*, a ``dns.name.Name`` or ``str``, the name of the TSIG
key to use.

*relativize*, a ``bool``.  If ``True``, all names in the zone will be
relativized to the zone origin.  It is essential that the
relativize setting matches the one specified to
``dns.zone.from_xfr()`` if using this generator to make a zone.

*lifetime*, a ``float``, the total number of seconds to spend
doing the transfer.  If ``None``, the default, then there is no
limit on the time the transfer may take.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying
the source address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message.
The default is 0.

*serial*, an ``int``, the SOA serial number to use as the base for
an IXFR diff sequence (only meaningful if *rdtype* is
``dns.rdatatype.IXFR``).

*use_udp*, a ``bool``.  If ``True``, use UDP (only meaningful for IXFR).

*keyalgorithm*, a ``dns.name.Name`` or ``str``, the TSIG algorithm to use.

Raises on errors, and so does the generator.

Returns a generator of ``dns.message.Message`` objects.
c                       \ rS rSrS rS rS\R                  R                  4S jr	S r
SS\S\R                  R                  4S jjrS	rg
)$xfr.<locals>.DummyTransactionManageri	  c                 X    XU(       a  [         R                  R                  OU4U l        g r   )r   r  emptyinfo)r#   r  r  s      r   r   -xfr.<locals>.DummyTransactionManager.__init__
  s    zSXX^^vVDIr   c                     U R                   $ r   r  r#   s    r   origin_information7xfr.<locals>.DummyTransactionManager.origin_information  s    99r   r   c                     [         er   rJ   r  s    r   	get_class.xfr.<locals>.DummyTransactionManager.get_class  rh   r   c                     [         er   rJ   r  s    r   reader+xfr.<locals>.DummyTransactionManager.reader  rh   r   replacementc                 h     " S S5      n[        [        R                  R                  U" 5       5      $ )Nc                        \ rS rSrS rS rSrg)Exfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransactioni  c                     g r   rb   )r#   r_   kws      r   nopIxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.nop  s    r   c                     U R                   $ r   )r  )r#   r@   s     r   __getattr__Qxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.__getattr__  s    88Or   rb   N)rO   rP   rQ   rR   r  r  rS   rb   r   r   DummyTransactionr    s    $r   r  )r   r   transactionTransaction)r#   r  r  s      r   writer+xfr.<locals>.DummyTransactionManager.writer  s)    $ $ 335E5GHHr   r  N)F)rO   rP   rQ   rR   r   r  r   
rdataclass
RdataClassr  r  boolr  r  r  rS   rb   r   r   DummyTransactionManagerr  	  sN    	W		&s~~88 	&	&	Id 	Is7R7R 	I 	Ir   r  T)createINSOAz. . %u 0 0 0 0r   N)	algorithmzcannot do a UDP AXFR)r   r  TransactionManagerr   r  r  	from_textr  	RdataTypemaker  
make_queryr  
find_rrset	authorityr  r  r  rdataadduse_tsigr   r,   r   r5   rW  r6   r4   r7   r  )r   r  r  r  r   r=   r   r  r  r+   rD   r   r  r  r  r  r   rrsetsoarC   r   r@   r   tm	sock_typer   s                             r   r  r    s    JI#//"D"D I. $xx!!$']]$$))&1FtW5A###KKs~~00#--2C2CD  
 ii!!$/?&/HI		#q	

7|
< 7V!Rf %X.OQ
	 	2B6S]]////00%,!!&2D2DI	b)V	,K,Aq&:FFF 
-	,F 
-	,s0   GH"! HHH	H"H
HH"udp_modec	           	      8   Uc"  [         R                  R                  U5      u  p)O[         R                  R                  U5      n	[	        XXg5      u  pn[        U5      u  pUR                  S   R                  [         R                  R                  :X  a[  U[        R                  :w  aG  [        U
[        R                  U5       n[        XU5         [!        XX)XM5       H  nM      SSS5        g[        U
[        R&                  U5       n[        XU5        [!        XX)XM5       H  nM     SSS5        g! [         R                  R"                   a    U[        R$                  :X  a  e  Of = f SSS5        M  ! , (       d  f       N= f! , (       d  f       g= f)a;  Conduct an inbound transfer and apply it via a transaction from the
txn_manager.

*where*, a ``str`` containing an IPv4 or IPv6 address,  where
to send the message.

*txn_manager*, a ``dns.transaction.TransactionManager``, the txn_manager
for this transfer (typically a ``dns.zone.Zone``).

*query*, the query to send.  If not supplied, a default query is
constructed using information from the *txn_manager*.

*port*, an ``int``, the port send the message to.  The default is 53.

*timeout*, a ``float``, the number of seconds to wait for each
response message.  If None, the default, wait forever.

*lifetime*, a ``float``, the total number of seconds to spend
doing the transfer.  If ``None``, the default, then there is no
limit on the time the transfer may take.

*source*, a ``str`` containing an IPv4 or IPv6 address, specifying
the source address.  The default is the wildcard address.

*source_port*, an ``int``, the port from which to send the message.
The default is 0.

*udp_mode*, a ``dns.query.UDPMode``, determines how UDP is used
for IXFRs.  The default is ``dns.UDPMode.NEVER``, i.e. only use
TCP.  Other possibilities are ``dns.UDPMode.TRY_FIRST``, which
means "try UDP but fallback to TCP if needed", and
``dns.UDPMode.ONLY``, which means "try UDP and raise
``dns.xfr.UseTCP`` if it does not succeed.

Raises on errors.
Nr   )r   r  r  extract_serial_from_queryr   r,   r  r  r  r  r  r  r4   r5   rW  r7   r  UseTCPr  r6   )r   r  rN  r=   r   r+   rD   r   r  r  rC   r   r@   r   r   s                  r   inbound_xfrr  9  sS   ^ }'',,[92259 7V!Rf %X.OQ~~a3==#5#55(gmm:S"f//8AQZ0%E7A   98 
b&,,f	5,keWQA R 
6	5	 77>> w||+ ,+ 988 
6	5s6   E:D6!F63E,)E:+E,,E::
F
F)T)NN)	NU  Nr   FFTNTr   )
NNFFNr   FFFN)
NrU  Nr   FFFFNF)
NrU  Nr   FFFNNF)NFNr   F)NrU  Nr   FFN)
Nr  Nr   FFNNNT)
Nr  Nr   FFNTNN)~r   r  r  enumrz  r  os.pathr   r   r5   rt  r   urllib.parser   typingr   r   r   r   r   r   dns._featuresr   dns.exceptiondns.inetdns.messagedns.namedns.quic	dns.rcodedns.rdataclassdns.rdatatype
dns.serialdns.transactiondns.tsigdns.xfrr   r   	_featureshave_have_httpxhttpcore._backends.syncr:   r   NetworkBackend_CoreNetworkBackend	_backendssync
SyncStreamr8   r   HTTPTransportrW   r   rj   ImportErrorr   r   DNSExceptionr   r  r   r   r   r  TransferErrorr,   r   r   r   r   r   r   r4   r   IntEnumr   rc   r   r  rH  r  floatr%  r  r  r-  Headersbytesr!  r(  r   r@  rE  rK  r  NametsigKeyrT  rZ  r_  rg  rk  rq  rw  r7   r^  r  ry   r  r}   r  SyncQuicConnectionr  r  r  r  r  AXFRr  r  default_algorithmr  r  r  r  rb   r   r   <module>r#     su  $      	        : :             2 mm  '""11((--88O2&- 2&h,, ,& &
 .2 Hs}}11 HG#--)) GCMM&& 
CMM&&  %%$$800	)" =A)%X(./$,, &  $ "!!'+#26"" + 3 3!D
{{DD e_D 	D
 SMD D D D c]D D D  }D $)D ./D D  !D" 	[[#DN#((** % E O388++ O3 Oe O O*  $ "!#".
{{.. 
. e_	.
 . SM. . . . $). sm. . 	[[.b	11& #'	

##U*
+  	
 3:> "&"&#";?#&! %+/g4
g4#g4 g4 	g4
 g4 d388==#((,,678g4 %g4 g4 g4 g4 CKK''(g4 	g4Z  $ #"! %X
{{XX e_X 	X
 SMX X X X X X 3-X X 	[[X|  $ #"!""U 
{{U U  e_U  	U 
 SMU  U  U  U  U  smU  smU  U  3;;$%U p*1& #'$
$
##U*
+$ $ 3:	$@ #'";?#&!,
,, , d388==#((,,678	,
 %, , 3;;%&,^-  $ "!B
{{BB e_B 	B
 SMB B B B 3-B 	[[BJ.c],1$),<^^2  $ "!$(,0%)#h
{{hh e_h 	h
 SMh h h h 3==
!h #..)h c]h $)h 	[[h\  $ "!8<#"%)Z
{{ZZ e_Z 	Z
 SMZ Z Z Z 445Z $)Z smZ c]Z 	[[Zz
dll 
0:330:}}0: ;;0: SM	0:
 e_0: 0: 	0:l 36--2D2D58^^5F5F#;?37 $ .1hh.H.HrGrG
s"
#rG #--))3./rG 3>>,,c12	rG
 e_rG rG d388==#((,,678rG eCHHMM3./0rG rG uorG SMrG rG rG rG s*+rG  	!rGp ,0# $ HH33H CKK''(H 	H
 e_H uoH SMH H H 
H},  .. ..s   a0 0bb