
    ,h              #          d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZmZmZmZmZmZ ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl!Zddl"Zd Z#d Z$ejJ                  jM                  d      Z'e'rUddl(Z)ddl*Z*e)jV                  Z,e)jZ                  j\                  j^                  Z0 G d de,      Z1 G d	 d
e*jd                        Z3n
 G d d
      Z3e'Z4	 ddl5Z5e	j                  Z7 G d dejp                  jr                        Z: G d dejp                  jv                        Z< G d dejp                  jr                        Z= G d dejp                  jr                        Z>ej~                  j                  Z@d ZAd ZBd ZCd ZDd ZEd ZF	 drdZGdsdZHded    d!d fd"ZI G d# d$ej                        ZKdd%ddd&d&dd'dddde	j                  eKj                  fd(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRd.eSd/eSd0ee   d1ePd2eSd3eeP   d4eeSePf   ded    d5eRd6eKd!ej                  j                  f"d7ZTd8ej                  j                  d9eWd!eWfd:ZXd8ej                  j                  d;ePd<eWd!dfd=ZY	 	 	 	 	 	 	 	 	 dtd(ej                  j                  d)ePd>ePd*eeQ   d+eRd,eeP   d-eRd.eSd/eSd4eeSePf   d?eeP   d2eSd!ej                  j                  fd@ZZdA Z[dB Z\	 dudCedDeej                  j                  eWf   dEedFeeQ   d!eeReQf   f
dGZ]	 	 	 	 	 	 	 	 	 	 dvdCedEee   dFeeQ   dHeSd.eSdIeeej                  j                  ej                  j                  f      dJeeW   d/eSdKeSdLeSdMeej                  j                     d!efdNZb	 	 	 	 	 	 	 	 	 	 dwd(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRdHeSd.eSd/eSdKeSdCee   dLeSd!ej                  j                  fdPZc	 	 	 	 	 	 	 	 	 	 dxd(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRdHeSd.eSd/eSdQee   dRee   dLeSd!eej                  j                  eSf   fdSZddT ZedU Zf	 dudCedDeej                  j                  eWf   dFeeQ   d!eeReQf   fdVZg	 	 	 	 	 dydCedFeeQ   d.eSdIeeej                  j                  ej                  j                  f      dJeeW   d/eSd!eej                  j                  eQf   fdWZhdX Zi	 	 	 	 	 	 	 dzd(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRd.eSd/eSdCee   d!ej                  j                  fdYZjdZ Zkd[eeP   d4eeSePf   d!e5j                  fd\Zm	 	 	 	 	 	 	 	 	 	 d{d(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRd.eSd/eSdCee5j                     d]ee5j                     d[eeP   d4eeSePf   d!ej                  j                  fd^Zo	 	 	 	 	 	 	 	 	 	 d|d(ej                  j                  d)ePd*eeQ   d+eRd,eeP   d-eRd.eSd/eSd_eej                  j                     d4eeSePf   d?eeP   d[eeP   d!ej                  j                  fd`ZU G da dbej                        Zqdcej                  j                  dde	j                  dMej                  j                  deeeR   d*eeQ   dFeQd!efdfZtej                  j                  ej                  j                  ddOdddddddd&ej                  j                  fd)ePdgeej                  j                  ePf   dheej                  j                  ePf   dieej                  j                  ePf   d*eeQ   d+eRdIeeej                  j                  ej                  j                  f      djeeej                  j                  ePf      dkeSdleeQ   d,eeP   d-eRdeeRdmeSdneej                  j                  ePf   d!ef doZ?ddOddddeqj                  fd)ePdcej                  j                  dMeej                  j                     d+eRd*eeQ   dleeQ   d,eeP   d-eRdpeqd!dfdqZ}y# e6$ r  G d d      Z5Y \w xY w)}zTalk to a DNS server.    N)AnyDictOptionalTupleUnioncastc                 x    | y | t        j                          z
  }|dk  rt        j                  j                  |S )N        )timedns	exceptionTimeout)
expirationtimeouts     K/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/query.py
_remainingr   1   s7    499;&G#~mm###N    c                 J    |y t        t        j                         | z   |      S N)minr   )r   r   s     r   _expiration_for_this_attemptr   :   s#    tyy{W$j11r   dohc                   2     e Zd Z fdZ	 ddZ	 ddZ xZS )_NetworkBackendc                 Z    t         |           || _        || _        || _        || _        y r   )super__init___local_port	_resolver_bootstrap_address_family)selfresolver
local_portbootstrap_addressfamily	__class__s        r   r   z_NetworkBackend.__init__I   s,    G)D%DN&7D#!DLr   c                 l   g }t        |      \  }}t        j                  j                  |      r|j	                  |       n| j
                  |j	                  | j
                         nft        |      }| j                  }	|rt        j                  j                  |      }	| j                  j                  ||	|      }
|
j                         }|D ]  }t        j                  j                  |      }|| j                  dk7  r-t        j                  j                  || j                  f|      }nd }t        |t        j                   |      }t#        d|      }	 t%        |t        j                  j                  ||f|      |       t'        |      c S  t*        j,                  # t(        $ r Y w xY w)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_optionsr0   _r   r&   answersaddressafsourcesockattempt_expirations                   r   connect_tcpz_NetworkBackend.connect_tcpP   s    I*73MAz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'4"M*
 +400!& ''' ! s   7F''	F32F3c                     t         r   NotImplementedError)r"   pathr   r=   s       r   connect_unix_socketz#_NetworkBackend.connect_unix_socketw   s
     &%r   r   )__name__
__module____qualname__r   rE   rJ   __classcell__r'   s   @r   r   r   H   s    	" FJ%	(P 15	&r   r   c                   >     e Zd Zdddej                  d fd
Z xZS )_HTTPTransportr   N)r$   r%   r#   r&   c                    | |dd l }|j                  j                         }t        |   |i | t        ||||      | j                  _        y Nr   )dns.resolverr#   Resolverr   r   r   _pool_network_backend)	r"   r$   r%   r#   r&   argskwargsr   r'   s	           r   r   z_HTTPTransport.__init__}   sS     $5$=#<<002Gd-f-*9*&7+DJJ'r   )rK   rL   rM   r3   	AF_UNSPECr   rN   rO   s   @r   rQ   rQ   |   s!     "##	 	r   rQ   c                       e Zd Zd Zy)rQ   c                     t         r   rG   )r"   r:   r;   r   r<   s        r   rE   z_HTTPTransport.connect_tcp       %%r   N)rK   rL   rM   rE    r   r   rQ   rQ      s    	&r   c                   t    e Zd ZdZ G d de      Z G d de      Z G d d      Z G d d	      Ze	d
        Z
y)sslr   c                       e Zd Zy)ssl.WantReadExceptionNrK   rL   rM   r^   r   r   WantReadExceptionrb          r   rd   c                       e Zd Zy)ssl.WantWriteExceptionNrc   r^   r   r   WantWriteExceptionrg      re   r   rh   c                       e Zd Zy)ssl.SSLContextNrc   r^   r   r   
SSLContextrj      re   r   rk   c                       e Zd Zy)ssl.SSLSocketNrc   r^   r   r   	SSLSocketrm      re   r   rn   c                     t        d      )Nzno ssl support)r7   )clsrX   rY   s      r   create_default_contextzssl.create_default_context   s    ,--r   N)rK   rL   rM   	CERT_NONEr7   rd   rh   rk   rn   classmethodrq   r^   r   r   r`   r`      sG    			 		 		 		 	 
	. 
	.r   r`   c                       e Zd ZdZy)UnexpectedSourcez=A DNS query response came from an unexpected address or port.NrK   rL   rM   __doc__r^   r   r   ru   ru      s    Gr   ru   c                       e Zd ZdZy)BadResponsez<A DNS query response does not respond to the question asked.Nrv   r^   r   r   ry   ry      s    Fr   ry   c                       e Zd ZdZy)NoDOHzMDNS over HTTPS (DOH) was requested but the httpx module is not
    available.Nrv   r^   r   r   r{   r{          r   r{   c                       e Zd ZdZy)NoDOQzNDNS over QUIC (DOQ) was requested but the aioquic module is not
    available.Nrv   r^   r   r   r~   r~      r|   r   r~   c                 D    t        j                          }| |d fS ||| z   fS r   )r   )r   nows     r   r*   r*      s+    
))+CT{S7]##r   c                    |r.t        | t        j                        r| j                         dkD  ryt	        j
                         }d}|r|t        j                  z  }|r|t        j                  z  }|r|j                  | |       |d }n6|t        j                         z
  }|dk  rt        j                  j                  |j                  |      st        j                  j                  y )Nr   Tr
   )
isinstancer`   rn   pending	selectorsDefaultSelector
EVENT_READEVENT_WRITEregisterr   r   r   r   select)fdreadablewritabler>   r   seleventsr   s           r   	_wait_forr      s     Jr3==1bjjlQ6F

#
#
%CF)&&&)'''R tyy{*c>--'''::gmm### r   c                 "    t        | ddd|       y )NTFr   sr   s     r   _wait_for_readabler      s    audJ/r   c                 "    t        | ddd|       y )NFTr   r   s     r   _wait_for_writabler      s    adJ/r   c                     	 t         j                  j                  | |d         }t         j                  j                  | |d         }||k(  xr |dd  |dd  k(  S # t         j                  j                  $ r Y yw xY w)Nr   F   )r   r+   	inet_ptonr   SyntaxError)rA   a1a2n1n2s        r   _addresses_equalr      s{    XXBqE*XXBqE* 8(12"QR&(( ==$$ s   AA A:9A:c                     |syt        | ||      s-t        j                  j                  |d         r|dd  |dd  k(  ry|ryt	        d| d|       )NTr   r   Fzgot a response from z instead of )r   r   r+   is_multicastru   )rA   from_addressdestinationignore_unexpecteds       r   _matches_destinationr     sh     L+6k!n-,qr2BkRSRTo2U	

|nL[MJ r   Tc                    d }d }	 t         j                  j                  |       }| }|r3t         j                  j                  |      }|r||k7  rt	        d      |}|r"|s 	 t         j                  j                  |      }|r"t         j                  j                  ||f|      }|r"t         j                  j                  ||f|      }|||fS # t        $ r |r Y w xY w# t        $ r t	        d      w xY w)Nz5different address families for source and destinationz3source_port specified but address family is unknown)r   r+   r.   r7   
ValueError
any_for_afr1   )wherer;   rB   source_portwhere_must_be_addressrA   r   safs           r   _destination_and_sourcer     s
   
 
BKXX$$U+
 hh%%f-by K  B6	TXX((,F hh66T7JBO116;2GLV$$?    !,  	TRSS	Ts   !C !C CCC4c                     t        | |      }	 |j                  d       ||j                  |       |r|j                  |d|      S |S # t        $ r |j                           w xY w)NF)do_handshake_on_connectserver_hostname)socket_factorysetblockingbindwrap_socketr7   close)rA   typerB   ssl_contextr   r   s         r   r2   r2   @  sv    r4 A	eFF6N**(- / +   H 		s   9A
 A
 
A%r#   zdns.resolver.Resolverreturnc                 F    | dd l }|j                  j                         } | S rS   )rT   r#   rU   )r#   r   s     r   _maybe_get_resolverr   T  s$     <<((*Or   c                   ,    e Zd ZdZdZdZdZdZdZdZ	dZ
y)HTTPVersionzWhich version of HTTP should be used?

    DEFAULT will select the first version from the list [2, 1.1, 3] that
    is available.
    r   r         N)rK   rL   rM   rw   DEFAULTHTTP_1H1HTTP_2H2HTTP_3H3r^   r   r   r   r   b  s,     GF	
BF	
BF	
Br   r   i  Fz
/dns-queryqr   r   r;   rB   r   one_rr_per_rrsetignore_trailingsessionrI   postr%   verifyr&   http_versionc                    t        ||||d      \  }}}|[t        j                  j                  |      r<|t        j
                  k(  rd| d| |	 }n |t        j                  k(  rd| d| |	 }n|}i }|t        j                  j                        }|j                  t        d      t        j                  j                  |j                        r|j                  }|j                  |d<   |j                  |j                  }|t        j                  k(  s|t        j                  k(  rt         sy|at#        |      }j                  J |j%                  |j                  |      }t'        j(                  t+        |j-                                     }t/        | |||||||||
	      S t         st0        |r%t3        |t4        j6                        st        d
      | j9                         }ddi}|t        j:                  t        j                  fv }|t        j<                  t        j                  fv }|d}d}n
|d   }|d   }|rt?        j@                  |      }n,tC        ||||||||      }t5        j6                  ||||      }|5 }|
r=|jE                  dtG        tI        |            d       |jK                  ||||      }nLtM        jN                  |      jQ                  d      }|jS                         } |jU                  ||d| i|      }ddd       jV                  dk  s|jV                  dkD  r't        | d|jV                   d|jX                         t        jZ                  j]                  |jX                  | j^                  | j`                  ||      }!|jb                  je                         |!_3        | ji                  |!      stj        |!S # 1 sw Y   xY w)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,   r3   AF_INETAF_INET6urllibparseurlparsehostnamer   r;   r   r   r   have_dohr   r/   randomchoicelistr0   _http3r{   r   httpxClientto_wirer   r   
contextlibnullcontextrQ   updatestrlenr   base64urlsafe_b64encoderstripdecodegetstatus_coder   message	from_wirer   r   elapsedtotal_secondsr   is_responsery   )"r   r   r   r;   rB   r   r   r   r   rI   r   r%   r   r#   r&   r   rA   r>   
the_sourceurlr   parsedr?   wirer   h1h2r<   r$   cmr   responsetwirers"                                     r   httpsr  r  s   N 2tV[%RJ 
~#((--e4UG1TF4&1C6??"eWBtfTF3CJ &&s+??"12288v/ &)/J~&;;";;D{~~%+++H$*84H??..++FOOVDG &d73D3D3F.G H
 	
 z'5<<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   BO##O,r   namec                 D    | t         | D ]  \  }}||k(  s|c S  t         r   )KeyError)r   r  headervalues       r   _find_headerr  9  s2      T>L Nr   peerr   c                 
   t        | d      }|t        d      t        |      }|dk  rt        d      |dk  s|dkD  r6d}t        |      dkD  r	 d|j	                         z   }t        | d	| |       y # t
        $ r Y w xY w)
Ns   :statuszno :status header in responser   zstatus is negativer   r    z: r   )r  r   intr   r   r7   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   A6 6	BBr   r   c                    t         j                  j                  st        d      t        j
                  j                  |      }|j                  }
|j                  |j                  }d| _	        | j                         }t         j                  j                  |	|
d      }|5  |j                  ||||      }t        |      \  }}|j                  |      5 }|j                  |||       |j!                  t#        |            }t%        |j'                         ||       d d d        t)        j(                         }d d d        t         j*                  j-                  || j.                  | j0                  ||      }t3        z
  d      |_        | j5                  |      st6        |S # 1 sw Y   xY w# 1 sw Y   zxY w)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   ry   )r   r   r   r   r;   rB   r   r   r   r   r   r   	url_partsr   manager
connectionstartr   streamfinishr  s                        r   r   r   S  s    88677%%c*I!!H~~!~~AD99;Dhh&&T ' G 
 __UD&+F
,W5
##G, 	9NN3d+>>*Z"89D&..*E48	9  			MM)' 	 	A %%AF==H	9 	9 s%   $4F6A	F*!F6*F3	/F66F?c                 `    	 	 | j                  |      S # t        $ r t        | |       Y nw xY w.)zReads a datagram from the socket.
    A Timeout exception will be raised if the operation is not completed
    by the expiration time.
    )recvfromBlockingIOErrorr   )rC   max_sizer   s      r   	_udp_recvr,    s9    
 	1==** 	1tZ0	1 s    ,,c                     	 	 |r| j                  ||      S | j                  |      S # t        $ r t        | |       Y nw xY wB)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   )rC   datar   r   s       r   	_udp_sendr1    sL    
 	1{{455yy& 	1tZ0	1 s   ( ( A A rC   whatr   r   c                     t        |t        j                  j                        r|j	                         }t        j
                         }t        | |||      }||fS )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   r1  )rC   r2  r   r   	sent_timens         r   send_udpr7    sH    , $++,||~		I$k:6Ay>r   r   r   r   raise_on_truncationignore_errorsqueryc                    d}	 t        | d|      \  }}t        | j                  |||      s*t        j                         }	 t        j
                  j                  ||||||      }|	r|
|
j                  |      sz|r||fS |||fS # t        j
                  j                  $ r.}|	r&|
$|
j                  |j                               sY d}~ʂ d}~wt        $ r |	rY ۂ w xY w)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   r8  N)
r,  r   r&   r   r   r   r   	Truncatedr   r7   )rC   r   r   r   r   r   r   r   r8  r9  r:  r   r   received_timer  es                   r   receive_udpr@    s    | D
(ujA|#KK{4E
 			%%'!1 /$7 & A6 U.u7H7H7K}%%}l331 {{$$ 	 %))!))+6 			s$   %B C %#CCC C 5   c                    | j                         }t        ||||      \  }}}t        |      \  }}|
rt        j                  |
      }nt        |t        j                  |      }|5 }t        ||||       t        |||||| j                  | j                  ||	||       \  }}||z
  |_        |s| j                  |      st        |cddd       S # 1 sw Y   nxY w	 J )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   r2   r3   
SOCK_DGRAMr7  r@  r   macr   r   ry   )r   r   r   r;   rB   r   r   r   r   r8  rC   r9  r   rA   r   
begin_timer   r  r   r  r>  s                        r   udprF  &  s    p 99;D 7tV[!Rf  .g6Z0:0F0Ft0L"f//8	 qD+z2(IIEE
M + q!1)  , 	s   &ACCudp_socktcp_sockc                     	 t        | ||||||||d|	|      }|dfS # t        j                  j                  $ r t	        | ||||||||
	      }|dfcY S w xY w)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)rF  r   r   r=  tcp)r   r   r   r;   rB   r   r   r   r   rG  rH  r9  r  s                r   udp_with_fallbackrK    s    r 
 %  ;;    

 $ s    4AAc                     d}|dkD  r;	 | j                  |      }|dk(  rt        d      |t        |      z  }||z  }|dkD  r;|S # t        t        j
                  f$ r t        | |       Y /t        j                  $ r t        | |       Y Ow xY w)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*  r`   SSLWantReadErrorr   SSLWantWriteErrorr   )rC   countr   r   r6  s        r   	_net_readrS    s     	A
!)		1		% ACxuo%SVOEFA !) H	  !5!56 	1tZ0$$ 	1tZ0	1s   4A %B,BBc                     d}t        |      }||k  r	 || j                  ||d       z  }||k  ryy# t        t        j                  f$ r t        | |       Y /t        j                  $ r t        | |       Y Ow xY w)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   r/  r*  r`   rQ  r   rP  r   )rC   r0  r   currentls        r   
_net_writerW    s~    
 GD	A
A+	1tyygh00G A+  !6!67 	1tZ0## 	1tZ0	1s   3 %A;A;:A;c                    t        |t        j                  j                        r|j	                  d      }nt        |      j                  dd      |z   }t        j                         }t        | ||       t        |      |fS )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   r4  r   r   to_bytesr   rW  )rC   r2  r   tcpmsgr5  s        r   send_tcpr]    sk    $ $++,T2
 T##Au-4		ItVZ(K##r   c                     t        | d|      }t        j                  d|      \  }t        | ||      }t        j                         }	t        j
                  j                  |||||      }
|
|	fS )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   )rS  structunpackr   r   r   r   )rC   r   r   r   r   r   ldatarV  r   r>  r  s              r   receive_tcprc    ss    B dAz*E==u%DQT1j)DIIKM)' 	 	A }r   c                 P   | j                  |      }|dk(  ry |t        j                  t        j                  t        j                  fv r:t        | |       | j                  t        j                  t        j                        }|dk7  rt        |t        j                  |            y rS   )
connect_exerrnoEINPROGRESSEWOULDBLOCKEALREADYr   
getsockoptr3   
SOL_SOCKETSO_ERROROSErrorosstrerror)r   r@   r   errs       r   r5   r5   K  s    
,,w
C
ax
u  %"3"3U^^DD1j)ll6,,foo>
axc2;;s+,, r   c	           	         | j                         }	t        |      \  }
}|rt        j                  |      }n-t	        ||||      \  }}}t        |t        j                  |      }|5 }|st        ||       t        ||	|       t        |||| j                  | j                  |      \  }}||
z
  |_        | j                  |      st        |cddd       S # 1 sw Y   nxY w	 J )a  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   r2   r3   r4   r5   r]  rc  r   rD  r   r   ry   )r   r   r   r;   rB   r   r   r   rC   r   rE  r   r  rA   r   r   r  r>  s                     r   rJ  rJ  V  s    V 99;D-g6Z0:0F0Ft0L$;4%
![& "f00&9	 qQZ0D*%(z+QYY
M +}}Q   	s   &A&CCc                     	 	 | j                          y # t        j                  $ r t        | |       Y n$t        j                  $ r t        | |       Y nw xY wXr   )do_handshaker`   rP  r   rQ  r   r   s     r   _tls_handshakert    sS    
	.NN## 	.q*-$$ 	.q*-	. s    AAAr   c                    d }d }t        |t              rOt        j                  j	                  |      r|}n-t        j                  j                  |      r|}nt        d      t        j                  ||      }t        j                  j                  |_        | d|_        |j                  dg       |du rt        j                  |_        |S )Nzinvalid verify string)cafilecapathFdot)r   r   rn  rI   isfileisdirr   r`   rq   
TLSVersionTLSv1_2minimum_versioncheck_hostnameset_alpn_protocolsrr   r  )r   r   rv  rw  r   s        r   _make_dot_ssl_contextr    s     !F F&#77>>&!FWW]]6"F455,,F6JK"%.."8"8K%*"""E7+"%--r   r   c                    |rt        | ||||||||	      S | j                         }t        |      \  }}t        ||||      \  }}}|	|st	        |
|      }	t        |t        j                  ||	|
      5 }t        |||       t        ||       t        |||       t        |||| j                  | j                  |      \  }}||z
  |_        | j                  |      st         |cddd       S # 1 sw Y   nxY w	 J )ak  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   )rJ  r   r*   r   r  r2   r3   r4   r5   rt  r]  rc  r   rD  r   r   ry   )r   r   r   r;   rB   r   r   r   rC   r   r   r   r   rE  r   rA   r   r   r  r>  s                       r   tlsr    s)   z  

 
	
 99;D-g6Z 7tV[!Rf 4+OVD	
'
  
K,q*%D*%(z+QYY
M +}}Q!  $ 	s   4A0C..C7r$  c                    t         j                  j                  st        d      ||
|}
d| _        | j                         }|rt        j                  d      }|}n#t         j                  j                  |	|
      }|}|5  |sj                  ||||      }t        |      \  }}j                  |      5 }|j                  |d       |j                  t        |            }ddd       t        j                         }ddd       t         j                   j#                  || j$                  | j&                  ||      }t)        z
  d      |_        | j+                  |      st,        |S # 1 sw Y   xY w# 1 sw Y   zxY w)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   r  r  r*   r  r/  r   r   r   r   r   r   r   r!  r   ry   )r   r   r   r;   rB   r   r   r   r$  r   r   r   r   r#  the_connectionthe_managerr%  r   r&  r'  r  s                        r   r  r  '  sh   n 88566"x'7"AD99;D 5?5K5KD5Q#((**v8*T	 (00fkRN,W5
''0 	:FKKd#>>*Z"89D	:  			MM)' 	 	A %%AF==H	: 	:	 s$   6E:8-E.%E:.E7	3E::Fc                       e Zd ZdZdZdZdZy)UDPModea  How 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   N)rK   rL   rM   rw   NEVER	TRY_FIRSTONLYr^   r   r   r  r    s     EIDr   r  txn_managerr   serialc              #     K   |j                   d   j                  }|t        j                  j                  k(  }| j                         }|j                         }	|j                  t        j                  k(  }
|
rt        ||	d|       n/t        j                  dt        |	            |	z   }t        |||       t        j                  j!                  | |||
      5 }d}d}|st#        |      \  }}||||kD  r|}|
rt%        |d|      \  }}n2t'        |d|      }t        j(                  d|      \  }t'        |||      }t        j*                  j-                  ||j.                  |j0                  d|||
 |      }|j3                  |      }| |j4                  }|s|j.                  r+j6                  st        j8                  j;                  d	      ddd       y# 1 sw Y   yxY ww)
z'Given a socket, does the zone transfer.r   Nr_  Fr<  r   T)r   r   xfrorigintsig_ctxmultir   zmissing TSIG)questionrdtyper   	rdatatypeIXFRfrom_wire_originr   r   r3   rC  r1  r`  packr   rW  r  Inboundr*   r,  rS  ra  r   r   r   rD  process_messager  had_tsigr   	FormError)r  r   r:  r  r   r   r  is_ixfrr  r   is_udpr\  inbounddoner  r>   mexpirationrwirerb  rV  r  s                        r   _inbound_xfrr    s     ^^A%%F***G))+F==?DVVv(((F!T4,T3t9-41fj)	fff	= :-g6Q"&;+C(&q%=
!!Q4}}T51!!Q4%%!II!!z!( & 	A **1-DGzzH1 2 ==--)).99;: : :s%   CG)CG7G	G)G&"G)zoner  rdclasskeyname
relativizer)   use_udpkeyalgorithmc           	   #   2  K    G d dt         j                  j                        }t        |t              rt         j
                  j                  |      }t         j                  j                  j                  |      }t         j                  j                  |||      }|t         j                  j                  k(  r|j                  |j                  |t         j                  j                   t         j                  j"                  d      }t         j$                  j                  ddd|z        }|j'                  |d       ||j)                  |||
       t+        | ||
|      \  }}}
t-        |	      \  }} |||      }|r(|t         j                  j                  k7  rt/        d      |rt0        j2                  nt0        j4                  }t7        |||
      5 }t9        |||       t;        ||||||      E d	{    d	d	d	       y	7 # 1 sw Y   y	xY ww)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                       e Zd Zd Zd Zdej                  j                  fdZd Z	d	de
dej                  j                  fdZy)
$xfr.<locals>.DummyTransactionManagerc                 ^    |||r!t         j                  j                  f| _        y |f| _        y r   )r   r  emptyinfo)r"   r  r  s      r   r   z-xfr.<locals>.DummyTransactionManager.__init__
  s#    zSXX^^VDIvVDIr   c                     | j                   S r   )r  r"   s    r   origin_informationz7xfr.<locals>.DummyTransactionManager.origin_information  s    99r   r   c                     t         r   rG   r  s    r   	get_classz.xfr.<locals>.DummyTransactionManager.get_class  r]   r   c                     t         r   rG   r  s    r   readerz+xfr.<locals>.DummyTransactionManager.reader  r]   r   replacementc                 h     G d d      }t        t        j                  j                   |             S )Nc                       e Zd Zd Zd Zy)Exfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransactionc                      y r   r^   )r"   rX   kws      r   nopzIxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.nop  s    r   c                     | j                   S r   )r  )r"   r>   s     r   __getattr__zQxfr.<locals>.DummyTransactionManager.writer.<locals>.DummyTransaction.__getattr__  s    88Or   N)rK   rL   rM   r  r  r^   r   r   DummyTransactionr    s    $r   r  )r   r   transactionTransaction)r"   r  r  s      r   writerz+xfr.<locals>.DummyTransactionManager.writer  s)    $ $ 335E5GHHr   N)F)rK   rL   rM   r   r  r   
rdataclass
RdataClassr  r  boolr  r  r  r^   r   r   DummyTransactionManagerr  	  sH    	W		&s~~88 	&	&	Id 	Is7R7R 	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   r3   rC  r4   r2   r5   r  )r   r  r  r  r   r;   r   r  r  r)   rB   r   r  r  r  r  r   rrsetsoarA   r   r>   r   tm	sock_typer   s                             r   r  r    s    JI#//"D"D I. $xx!!$']]$$))&1FtVW5A###KKs~~00#--2C2CD  
 ii!!$/?&/HI		#q	

7G|
< 7tV[!Rf %X.OQ
	 z	2B6S]]////00%,!!&2D2DI	b)V	, GK,Aq&':FFFG GFG Gs0   GH!H;H	<H 	H	HHHudp_modec	           	      ,   |#t         j                  j                  |      \  }}	nt         j                  j                  |      }	t	        | |||      \  }
}}t        |      \  }}|j                  d   j                  t         j                  j                  k(  r\|t        j                  k7  rIt        |
t        j                  |      5 }t        |||       	 t!        ||||	||      D ]  } 	 ddd       yt        |
t        j&                  |      5 }t        |||       t!        ||||	||      D ]  } 	 ddd       y# t         j                  j"                  $ r |t        j$                  k(  r Y nw xY w	 ddd       # 1 sw Y   xY w# 1 sw Y   yxY w)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  r2   r3   rC  r5   r  UseTCPr  r4   )r   r  r:  r;   r   r)   rB   r   r  r  rA   r   r>   r   r   s                  r   inbound_xfrr  9  s   ^ }'',,[92259 7tV[!Rf %X.OQ
~~a3==#5#55(gmm:S"f//8 
	AQZ0%E67J A  
	 
	 
b&,,f	5 K,k1eVWjQ 	A	 	 77>> w||+ ,+
	 
	 
	 s6   E>D=#F
=1E1.E>0E11E>>F
F)T)NN)	NU  Nr   FFTNTr   )
NNFFNr   FFFN)
NrA  Nr   FFFFNF)
NrA  Nr   FFFNNF)NFNr   F)NrA  Nr   FFN)
Nr  Nr   FFNNNT)
Nr  Nr   FFNTNN)~rw   r   r   enumrf  rn  os.pathr   r   r3   r`  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.syncr8   r   NetworkBackend_CoreNetworkBackend	_backendssync
SyncStreamr6   r   HTTPTransportrQ   r   r`   ImportErrorr   r   DNSExceptionru   r  ry   r{   r~   r  TransferErrorr*   r   r   r   r   r   r   r2   r   IntEnumr   rZ   r   r   r4  r   floatr  r  r  r  Headersbytesr  r  r   r,  r1  r7  r  NametsigKeyr@  rF  rK  rS  rW  r]  rc  r5   rJ  rt  rk   r  rn   r  SyncQuicConnectionr  r  r  r  r  AXFRr  r  default_algorithmr  r  r  r  r^   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   <a
 
aa