
    2\h                     L   	 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 g dZdZdZdZdZdZd	Z e                                ej        j                   d
 ej        j                                        D             ZdZdZ ej        d          j        Z ej        d          j        Z  ej        d          Z! ej        d          Z"h dZ#d=dZ$de%de%fdZ& G d dej'        j(                  Z)d Z*e)fdZ+ G d dej,                  Z- G d d          Z.	 d dl/Z/ G d d e.          Z0e1                    d            n# e2$ r Y nw xY w G d! d"e3          Z4 G d# d$e4          Z5 G d% d&e4          Z6 G d' d(e4          Z7 G d) d*e4          Z8 G d+ d,e4          Z9 G d- d.e4          Z: G d/ d0e4          Z; G d1 d2e;          Z< G d3 d4e;          Z= G d5 d6e;          Z> G d7 d8e4          Z? G d9 d:e4          Z@ G d; d<eAe?          ZBe4ZCdS )>    N)urlsplit)HTTPResponseHTTPConnectionHTTPExceptionNotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead
InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReadyBadStatusLineLineTooLongRemoteDisconnectederror	responsesP   i  UNKNOWNIdlezRequest-startedzRequest-sentc                     i | ]
}||j         S  )phrase).0vs     5/opt/python-3.11.14/usr/lib/python3.11/http/client.py
<dictcomp>r   l   s    GGGQQGGG    i   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]>   PUTPOSTPATCHdatac                     	 	 |                      d          S # t          $ r[}t          |j        |j        |j        |j        |                                d| |j        |j                 dd|d          d d }~ww xY w)Nlatin-1z (z.20z) is not valid Latin-1. Use z9.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)r%   nameerrs      r   _encoder1      s    F
E{{9%%% E E E LJIG ZZ\\\\4	#' 12222DDD:; ; AE	EEs    
A=AA88A=enc_namereturnc                 H    	 |                      d          \  } }}|r| dz  } | S )N   %   ])	partition)r2   percent_s      r   _strip_ipv6_ifacer:      s6    3#--d33Hgq DOr    c                       e Zd Zd ZdS )HTTPMessagec                 :   	 |                                 dz   }t          |          }g }d}|                                 D ]Z}|d |                                          |k    rd}n|d d                                         sd}|r|                    |           [|S )N:r      )lowerlenkeysisspaceappend)selfr/   nlsthitlines         r   getallmatchingheadersz!HTTPMessage.getallmatchingheaders   s    	 zz||c!IIIIKK 	! 	!DBQBx~~4''"1"X%%''  !

4   
r    N)__name__
__module____qualname__rJ   r   r    r   r<   r<      s#            r    r<   c                 *   	 g }	 |                      t          dz             }t          |          t          k    rt          d          |                    |           t          |          t
          k    rt          dt
          z            |dv rn|S )NTr?   header linezgot more than %d headers   
   
r    )readline_MAXLINErA   r   rD   _MAXHEADERSr   )fpheadersrI   s      r   _read_headersrX      s    
 G{{8a<((t99xm,,,tw<<+%% :[ HIII((( Nr    c                     	 t          |           }d                    |                              d          }t          j                            |                              |          S )Nr    
iso-8859-1)_class)rX   joindecodeemailparserParserparsestr)rV   r[   rW   hstrings       r   parse_headersrc      s\     BGhhw&&|44G<f--66w???r    c                        e Zd Zd"dZd Zd Zd Zd Z fdZ fd	Z	d
 Z
d Zd#dZd Zd Zd Zd Zd#dZd Zd Zd Zd$dZd$dZd$ fd	Zd Zd Zd Zd#dZd Zd Zd Zd  Zd! Z  xZ!S )%r   r   Nc                    |                     d          | _        || _        || _        d x| _        | _        t          | _        t          | _        t          | _	        t          | _
        t          | _        t          | _        t          | _        d S )Nrb)makefilerV   
debuglevel_methodrW   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)rE   sockrh   methodurls        r   __init__zHTTPResponse.__init__   sl     --%%$ #'&tx  ""r    c                    t          | j                            t          dz             d          }t	          |          t          k    rt          d          | j        dk    rt          dt          |                     |st          d          	 |
                    d d          \  }}}n?# t          $ r2 	 |
                    d d          \  }}d}n# t          $ r d}Y nw xY wY nw xY w|                    d	          s#|                                  t          |          	 t          |          }|d
k     s|dk    rt          |          n# t          $ r t          |          w xY w|||fS )Nr?   rZ   zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r!   i  )strrV   rS   rT   rA   r   rh   printreprr   split
ValueError
startswith_close_connr   int)rE   rI   rl   rm   rn   s        r   _read_statuszHTTPResponse._read_status  s   47##HqL11<@@t99xm,,,?Q(DJJ''' 	2 % &1 2 2 2	&*jjq&9&9#GVVV 	 	 	"&**T1"5"5   		 !!'** 	&%%%	&[[F||v||#D)))  , 	& 	& 	&%%%	&&&sB   B- -
C)8CC)C# C)"C##C)(C)%*E E*c                    | j         d S 	 |                                 \  }}}|t          k    rn1t          | j                  }| j        dk    rt          d|           ~U|x| _        | _        |	                                | _
        |dv rd| _        n,|                    d          rd| _        nt          |          t          | j                  x| _         | _        | j        dk    r3| j                                         D ]\  }}t          d|d	z   |           | j                             d
          }|r'|                                dk    rd| _        d | _        nd| _        |                                 | _        d | _        | j                             d          }|rF| j        s?	 t1          |          | _        | j        dk     rd | _        n# t2          $ r
 d | _        Y nw xY wd | _        |t4          k    s%|t6          k    sd|cxk    rdk     sn | j        dk    rd| _        | j        s| j        s| j        d| _        d S d S d S d S )NTr   zheaders:)zHTTP/1.0zHTTP/0.9
   zHTTP/1.   header:r>   transfer-encodingro   Fcontent-lengthr!      HEAD)rW   r   CONTINUErX   rV   rh   r{   coderm   striprn   rl   r   r   rc   rj   itemsgetr@   ro   rp   _check_closerr   rq   r   r~   
NO_CONTENTNOT_MODIFIEDri   )	rE   rl   rm   rn   skipped_headershdrvaltr_encrq   s	            r   beginzHTTPResponse.begin>  s   <#F	 &*&7&7&9&9#GVV!!+DG44O""j/222	  #)(	DKllnn...DLL	** 	+DLL!'***"/"8"88tx?Q L..00 1 1SisC0000 !!"566 	!fllnn	11DL"DOO DL ++-- !!"233 		$, 		'!&kk ;??"&DK	  # # #"# DK j  Fl$:$:6CLF""DK
  	#	#K"DOOO	# 	# 	# 	#s   +G G&%G&c                 \   | j                             d          }| j        dk    r|rd|                                v rdS dS | j                             d          rdS |rd|                                v rdS | j                             d          }|rd|                                v rdS dS )N
connectionr   closeTFz
keep-alivezproxy-connection)rW   r   rl   r@   )rE   connpconns      r   r   zHTTPResponse._check_close  s    |--<2  4::<<//t5 <L)) 	5  	LDJJLL005   !344 	\U[[]]225 tr    c                 J    | j         }d | _         |                                 d S N)rV   r   )rE   rV   s     r   r   zHTTPResponse._close_conn  s!    W





r    c                     	 t                                                       | j        r|                                  d S d S # | j        r|                                  w w xY wr   )superr   rV   r   rE   	__class__s    r   r   zHTTPResponse.close  sl    	#GGMMOOOw #  """""# #tw #  """"#s    A A c                     t                                                       | j        r| j                                         d S d S r   )r   flushrV   r   s    r   r   zHTTPResponse.flush  s;    7 	GMMOOOOO	 	r    c                     	 dS )NTr   rE   s    r   readablezHTTPResponse.readable  s
    !tr    c                     	 | j         d u S r   )rV   r   s    r   isclosedzHTTPResponse.isclosed  s    / w$r    c                    	 | j         dS | j        dk    r|                                  dS | j        r|                     |          S || j        || j        k    r| j        }| j                             |          }|s|r|                                  n?| j        8| xj        t          |          z  c_        | j        s|                                  |S | j        | j                                         }nF	 |                     | j                  }n## t          $ r |                                   w xY wd| _        |                                  |S )Nr    r   r   )
rV   ri   r   ro   _read_chunkedrq   readrA   
_safe_readr   )rE   amtss      r   r   zHTTPResponse.read  sp   M7?3<6!!3< 	+%%c***?{&3+<+<kS!!A ' '   """"(s1vv%{ '$$&&&H {"GLLNN44AA%   $$&&&  Hs   9D  D4c                    	 | j         dS | j        dk    r|                                  dS | j        r|                     |          S | j        4t          |          | j        k    rt          |          d| j                 }| j                             |          }|s|r|                                  n2| j        +| xj        |z  c_        | j        s|                                  |S )Nr   r   )	rV   ri   r   ro   _readinto_chunkedrq   rA   
memoryviewreadinto)rE   brF   s      r   r   zHTTPResponse.readinto  s    	 7?1<6!!1< 	-))!,,,;"1vv##qMM!DK-0
 GQ 	#Q 	# [$KK1KK; #  """r    c                 F   | j                             t          dz             }t          |          t          k    rt	          d          |                    d          }|dk    r
|d |         }	 t          |d          S # t          $ r |                                   w xY w)Nr?   z
chunk size   ;r      )	rV   rS   rT   rA   r   findr   r~   r   )rE   rI   is      r   _read_next_chunk_sizez"HTTPResponse._read_next_chunk_size  s    w1--t99xl+++IIdOO668D	tR==  	 	 	 		s   0B    B c                     	 | j                             t          dz             }t          |          t          k    rt	          d          |sd S |dv rd S T)NTr?   ztrailer linerP   )rV   rS   rT   rA   r   rE   rI   s     r   _read_and_discard_trailerz&HTTPResponse._read_and_discard_trailer#  sd    		7##HqL11D4yy8##!.111  ,,,		r    c                    | j         }|s||                     d           	 |                                 }n# t          $ r t	          d          w xY w|dk    r*|                                  |                                  d }|| _         |S )Nrx   r    r   )rp   r   r   r~   r   r   r   )rE   rp   s     r   _get_chunk_leftzHTTPResponse._get_chunk_left1  s     _
 	)%"""*!7799

 * * *$S)))*Q..000  """!
(DOs	   7 Ac                    g }	 	 |                                  }|nr|9||k    r3|                    |                     |                     ||z
  | _        n7|                    |                     |                     |||z  }d| _        d                    |          S # t
          $ r(}t          d                    |                    |d }~ww xY w)NTr   r    )r   rD   r   rp   r\   r   )rE   r   valuerp   excs        r   r   zHTTPResponse._read_chunkedI  s    	;$!1133
%?sj'8'8LL!5!5666&03&6DOT__Z88999?:%C"#$ 88E??" 	; 	; 	; %11s:	;s   BB# #
C-#CCc                    d}t          |          }	 	 |                                 }||S t          |          |k    r$|                     |          }||z
  | _        ||z   S |d |         }|                     |          }||d          }||z  }d| _        # t
          $ r% t          t          |d|                             w xY w)Nr   )r   r   rA   _safe_readintorp   r   bytes)rE   r   total_bytesmvbrp   rF   temp_mvbs          r   r   zHTTPResponse._readinto_chunked_  s    mm	:$!1133
%&&s88z))++C00A&01nDO&?*{
{+''11!""gq "#$   	: 	: 	: q;'7!8!8999	:s   B 6B #6B /Cc                     	 | j                             |          }t          |          |k     r t          ||t          |          z
            |S r   )rV   r   rA   r   )rE   r   r%   s      r   r   zHTTPResponse._safe_readw  sJ    	 w||C  t99s?? s3t99}555r    c                     	 t          |          }| j                            |          }||k     r(t          t	          |d |                   ||z
            |S r   )rA   rV   r   r   r   )rE   r   r   rF   s       r   r   zHTTPResponse._safe_readinto  sU    @!ffGQs77 q!us1u555r    c                    	 | j         | j        dk    rdS | j        r|                     |          S | j        |dk     s|| j        k    r| j        }| j                             |          }|s|r|                                  n?| j        8| xj        t          |          z  c_        | j        s|                                  |S Nr   r    r   )rV   ri   ro   _read1_chunkedrq   read1r   rA   )rE   rF   results      r   r   zHTTPResponse.read1  s    	 7?dlf443< 	*&&q)));"AT[Aq!! 	#! 	#[$KK3v;;&KK; #  """r    c                     | j         | j        dk    rdS | j        r|                     |          S | j                             |          S )Nr   r    )rV   ri   ro   _peek_chunkedpeek)rE   rF   s     r   r   zHTTPResponse.peek  sL     7?dlf443< 	)%%a(((w||Ar    c                    | j         | j        dk    rdS | j        r!t                                          |          S | j        |dk     s|| j        k    r| j        }| j                             |          }|s|r|                                  n?| j        8| xj        t          |          z  c_        | j        s|                                  |S r   )rV   ri   ro   r   rS   rq   r   rA   )rE   limitr   r   s      r   rS   zHTTPResponse.readline  s    7?dlf443< 	+77##E***;"		UT[5H5HKE!!%(( 	#% 	#[$KK3v;;&KK; #  """r    c                     |                                  }||dk    rdS d|cxk    r|k    sn |}| j                            |          }| xj        t	          |          z  c_        |st          d          |S )Nr   r    )r   rV   r   rp   rA   r   )rE   rF   rp   r   s       r   r   zHTTPResponse._read1_chunked  s     ))++
a3Q$$$$*$$$$Aw}}Q3t99$ 	& %%%r    c                     	 |                                  }n# t          $ r Y dS w xY w|dS | j                            |          d |         S )Nr    )r   r   rV   r   )rE   rF   rp   s      r   r   zHTTPResponse._peek_chunked  sf    	--//JJ 	 	 	33	3 w||J''44s    
%%c                 4    | j                                         S r   )rV   filenor   s    r   r   zHTTPResponse.fileno  s    w~~r    c                     	 | j         t                      | j                             |          p|}t          |t                    st          |d          s|S d                    |          S )N__iter__z, )rW   r   get_all
isinstancerz   hasattrr\   )rE   r/   defaultrW   s       r   	getheaderzHTTPResponse.getheader  sq    
	 <"$$$,&&t,,7gs## 	&77J+G+G 	&N99W%%%r    c                 z    	 | j         t                      t          | j                                                   S r   )rW   r   listr   r   s    r   
getheaderszHTTPResponse.getheaders  s5    4<"$$$DL&&(()))r    c                     | S r   r   r   s    r   r   zHTTPResponse.__iter__  s    r    c                     	 | j         S r   )rW   r   s    r   infozHTTPResponse.info  s    	( |r    c                     	 | j         S r   )ru   r   s    r   geturlzHTTPResponse.geturl  s    	 xr    c                     	 | j         S r   )rm   r   s    r   getcodezHTTPResponse.getcode  s    	 {r    )r   NNr   )r   )"rK   rL   rM   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r   r   r      s)       # # # #<' ' 'BF# F# F#P  :  
# # # # #    
    & & & &P     D       0; ; ; ;,: : :0
 
 
     &        "  5 5 5     & & & &(* * *  
  .
 
 
      r    r   c                      e Zd ZdZdZeZeZdZ	dZ
ed             Zed             Zdej        ddfd	Zd!d
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd"dZ	 	 d#dZd Zd Zd Zd Z d Z!d$dddZ"di fdddZ#d Z$d  Z%dS )%r   r   zHTTP/1.1r?   r   c                 8    	 t          | t          j                  S r   )r   io
TextIOBase)streams    r   
_is_textIOzHTTPConnection._is_textIO+  s    	&"-000r    c                    	 | |                                 t          v rdS d S t          | d          rd S 	 t          |           }|j        S # t
          $ r Y nw xY wt          | t                    rt          |           S d S )Nr   r   )	upper_METHODS_EXPECTING_BODYr   r   nbytes	TypeErrorr   rz   rA   )bodyrt   mvs      r   _get_content_lengthz"HTTPConnection._get_content_length1  s    	 < ||~~!888qt4   	4	D!!B9 	 	 	D	 dC   	t99ts   A 
AAN    c                 F   || _         || _        || _        d | _        g | _        d | _        t          | _        d | _        d | _	        d | _
        i | _        |                     ||          \  | _        | _        |                     | j                   t           j        | _        d S r   )timeoutsource_address	blocksizers   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__stateri   _tunnel_host_tunnel_port_tunnel_headers_get_hostporthostport_validate_hostsocketcreate_connection_create_connection)rE   r  r	  r   r   r   s         r   rv   zHTTPConnection.__init__Q  s    ,"	  !!%!3!3D$!?!?DIDI&&& #)":r    c                     	 | j         rt          d          |                     ||          \  | _        | _        |r	|| _        d S | j                                         d S )Nz.Can't set up tunnel for established connection)rs   RuntimeErrorr  r  r  r  clear)rE   r  r	  rW   s       r   
set_tunnelzHTTPConnection.set_tunnelg  st    	 9 	QOPPP/3/A/A$/M/M,4, 	)#*D    &&(((((r    c                    ||                     d          }|                     d          }||k    rm	 t          ||dz   d                    }nF# t          $ r9 ||dz   d          dk    r| j        }nt	          d||dz   d          z            Y nw xY w|d |         }n| j        }|r"|d         dk    r|d         dk    r
|dd         }||fS )	Nr>   ]r?   ry   znonnumeric port: '%s'r   [r   )rfindr   r~   default_portr   )rE   r  r	  r   js        r   r  zHTTPConnection._get_hostport  s   <

3A

3A1uuOtAaCDDz??DD! O O OAaCDDzR''#0()@4!:)MNNN O
 BQBx( 	DGsNNtBx3":Dd|s   A A BBc                     || _         d S r   )rh   )rE   levels     r   set_debuglevelzHTTPConnection.set_debuglevel  s    r    c                 6    d|v r|d         dk    rd|z   dz   S |S )N   :r   [      [r6   r   )rE   ips     r   
_wrap_ipv6zHTTPConnection._wrap_ipv6  s-    2::"Q%7**"9t##	r    c                    d|                      | j                            d                    | j        fz  }|g}| j                                        D ]3\  }}|                    | d| d                    d                     4|                    d           |                     d                    |                     ~| 	                    | j
        | j                  }	 |                                \  }}}|t          j        j        k    r;|                                  t#          d	| d
|                                           	 |j                            t*          dz             }	t-          |	          t*          k    rt/          d          |	sn3|	dv rn.| j        dk    r"t3          d|	                                           |                                 d S # |                                 w xY w)Ns   CONNECT %s:%d HTTP/1.0
asciiz: 
r'   rQ   r    rt   zTunnel connection failed:  Tr?   rO   rP   r   r   )r   r  r(   r  r  r   rD   sendr\   response_classrs   ri   r   http
HTTPStatusOKr   OSErrorr   rV   rS   rT   rA   r   rh   r{   r]   )
rE   connectrW   headerr   responserl   r   messagerI   s
             r   _tunnelzHTTPConnection._tunnel  s   /OOD-44W==>>3  )!17799 	G 	GMFENNf33333::9EEFFFFw 			#((7##$$$&&ty&FF	'/'<'<'>'>$WdGt)))

S4SS'--//SSTTT4{++HqL99t99x''%m444 000?Q&&)T[[]]3334 NNHNNs   (C(G& &G<c                    	 t          j        d| | j        | j                   |                     | j        | j        f| j        | j                  | _        	 | j                            t          j
        t          j        d           n-# t          $ r }|j        t          j        k    r Y d }~nd }~ww xY w| j        r|                                  d S d S )Nzhttp.client.connectr?   )sysauditr  r	  r  r   r   rs   
setsockoptr  IPPROTO_TCPTCP_NODELAYr+  errnoENOPROTOOPTr  r0  rE   es     r   r,  zHTTPConnection.connect  s    A	'ty$)DDD++Yty!4<1DF F		I  !3V5GKKKK 	 	 	w%+++ ,++++	  	LLNNNNN	 	s   0B 
B1B,,B1c                 
   	 t           | _        	 | j        }|rd | _        |                                 | j        }|rd | _        |                                 d S d S # | j        }|rd | _        |                                 w w xY wr   )r  r  rs   r   r  )rE   rs   r.  s      r   r   zHTTPConnection.close  s    6		!9D  	

H !"&     ! ! H !"&    !s   $A 'Bc                 ~   	 | j         *| j        r|                                  nt                      | j        dk    rt          dt          |                     t          |d          r| j        dk    rt          d           |                     |          }|r| j        dk    rt          d           	 |	                    | j
                  }|snH|r|                    d          }t          j        d| |           | j                             |           ed S t          j        d| |           	 | j                             |           d S # t          $ ra t!          |t"          j        j                  r"|D ]}| j                             |           Y d S t          d	t)          |          z            w xY w)
Nr   zsend:r   zsending a readableencoding file using iso-8859-1r?   rZ   zhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rs   	auto_openr,  r   rh   r{   r|   r   r   r   r   r(   r2  r3  sendallr   r   collectionsabcIterabletype)rE   r%   r(   	datablockds        r   r&  zHTTPConnection.send  s   	
 9~ %"nn$?Q'4::&&&4   	""*+++__T**F 8$/A--6777- IIdn55	   ? ) 0 0 > >I	,dI>>>	!!),,,- F	$dD111	GId##### 	G 	G 	G$ 899 G ) )AI%%a(((() ) )   !9;?::!F G G G	Gs   5E AF< F<c                 <    	 | j                             |           d S r   )r   rD   )rE   r   s     r   _outputzHTTPConnection._output  s%    	 	Ar    c              #     K   | j         dk    rt          d           |                     |          }|r| j         dk    rt          d           	 |                    | j                  }|sd S |r|                    d          }|V  :)Nr   zreading a readabler=  TrZ   )rh   r{   r   r   r   r(   )rE   r   r(   rD  s       r   _read_readablezHTTPConnection._read_readable  s      ?Q&'''** 	4do))2333	 dn55I  ;%,,\::	OOO	r    Fc                    	 | j                             d           d                    | j                   }| j         d d = |                     |           |t	          |d          r|                     |          }nb	 t          |           |f}nN# t          $ rA 	 t          |          }n-# t          $ r  t          dt          |          z            w xY wY nw xY w|D ]m}|s| j
        dk    rt          d           |r7| j        dk    r,t          |          dd	                    d
          |z   dz   }|                     |           n|r$| j        dk    r|                     d           d S d S d S d S )N)r    r    rQ   r   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredr   Xr#  r"  s   0

)r   extendr\   r&  r   rI  r   r   iterrC  rh   r{   	_http_vsnrA   r(   )rE   message_bodyencode_chunkedrj   chunkschunks         r   _send_outputzHTTPConnection._send_output  s   	
 	J'''ll4<((LO		## |V,, - ,,\::-
 |,,, +_FF ! > > >>!%l!3!3$ > > >' )H*.|*<*<)= > > >> >   
! 
! **9:::! "dn&:&:"5zz111188AAEI!"E		%     ($.B"6"6		,'''''S $#N( ("6"6s*   ?B 
CB-,C-*CCCc                    	 | j         r | j                                         rd | _         | j        t          k    rt          | _        nt          | j                  |                     |           || _        |pd}|                     |           |d|d| j	        }| 
                    |                     |                     | j        dk    r|shd}|                    d          rt          |          \  }}}}}|r`	 |                    d          }n%# t           $ r |                    d          }Y nw xY w|                     dt%          |                     n| j        r| j        }	| j        }
n| j        }	| j        }
	 |	                    d          }n%# t           $ r |	                    d          }Y nw xY w|                     |          }d	|	v rt%          |          }|
| j        k    r|                     d|           n0|                    d          }|                     d|d	|
           |s|                     d
d           d S d S d S )N/r%  r   ry   r(  r"  idnaHostr>   zAccept-Encodingidentity)r  r   r  r  _CS_REQ_STARTEDr   _validate_methodri   _validate_path_http_vsn_strrG  _encode_requestrN  r   r   r(   r)   	putheaderr:   r  r  r  r	  r   r  r]   )rE   rt   ru   	skip_hostskip_accept_encodingrequestnetlocnil
netloc_encr  r	  host_encs               r   
putrequestzHTTPConnection.putrequestO  s   	 ? 	#t7799 	#"DO* <8##*DLL#DL111f%%% jSC    &T-?-?@T))'22333>R  0K >>&)) ?19#.Cc3 K;%+]]7%;%;

- ; ; ;%+]]6%:%:


;NN6+<Z+H+HIIII( )#0#0#y#y7#';;w#7#7- 7 7 7#';;v#6#67
  $x88Hd{{#4X#>#>t000vx8888#+??7#;#;v(((DD/IJJJ ( >0*=====> > Ds$   D D<;D<F G ?G c                 ,    |                     d          S )Nr"  )r(   )rE   ra  s     r   r]  zHTTPConnection._encode_request  s    ~~g&&&r    c                     	 t                               |          }|r(t          d|d|                                d          d S )Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchr~   group)rE   rt   matchs      r   rZ  zHTTPConnection._validate_method  sg    44;;FCC 	;: : :',{{}}: : :; ; ;	; 	;r    c                     	 t                               |          }|r(t          d|d|                                d          d S Nz&URL can't contain control characters. ri  rj  !_contains_disallowed_url_pchar_rerl  r   rm  )rE   ru   rn  s      r   r[  zHTTPConnection._validate_path  ss    ,188== 	D Cc C C05C C C D D D	D 	Dr    c                     	 t                               |          }|r(t          d|d|                                d          d S rp  rq  )rE   r  rn  s      r   r
  zHTTPConnection._validate_host  ss    G188>> 	D Cd C C05C C C D D D	D 	Dr    c                    	 | j         t          k    rt                      t          |d          r|                    d          }t          |          st          d|          t          |          }t          |          D ]\  }}t          |d          r|                    d          ||<   n:t          |t                    r%t          |                              d          ||<   t          ||                   rt          d||                   d                    |          }|dz   |z   }|                     |           d S )Nr(   r"  zInvalid header name r'   zInvalid header value s   
	s   : )r  rY  r   r   r(   _is_legal_header_namer~   r   	enumerater   r   rz   _is_illegal_header_valuer\   rG  )rE   r-  valuesr   	one_valuer   s         r   r^  zHTTPConnection.putheader  sZ   	 <?**"$$$68$$ 	,]]7++F$V,, 	C*ABBBf%f-- 	K 	KLAyy(++ ;%,,Y77q		Is++ ;	NN11'::q	'q	22 K jfQii!IJJJK v&&%%'Vr    rP  c                    	 | j         t          k    rt          | _         nt                      |                     ||           d S )Nrz  )r  rY  _CS_REQ_SENTr   rS  )rE   rO  rP  s      r   
endheaderszHTTPConnection.endheaders  sJ    	 <?**'DLL"$$$,~FFFFFr    c                :    	 |                      |||||           d S r   )_send_request)rE   rt   ru   r   rW   rP  s         r   ra  zHTTPConnection.request  s'    463g~FFFFFr    c                 V   t          d |D                       }i }d|v rd|d<   d|v rd|d<    | j        ||fi | d|vrzd|vrud	}|                     ||          }|8|5| j        d
k    rt	          d|z             d}|                     dd           n&|                     dt          |                     nd	}|                                D ]\  }	}
|                     |	|
           t          |t                    rt          |d          }| 
                    ||           d S )Nc              3   >   K   | ]}|                                 V  d S r   )r@   )r   ks     r   	<genexpr>z/HTTPConnection._send_request.<locals>.<genexpr>  s*       < <q < < < < < <r    r  r?   r_  zaccept-encodingr`  r   r   Fr   zUnable to determine size of %rTzTransfer-Encodingro   zContent-Lengthr   rz  )	frozensetrf  r   rh   r{   r^  rz   r   r   r1   r}  )rE   rt   ru   r   rW   rP  header_namesskipscontent_lengthr   r   s              r   r  zHTTPConnection._send_request  s|     < <G < < <<<\!!!"E+,,,-E()--u--- <// #,66 "'!%!9!9$!G!G!)'?Q..!"BT"IJJJ)-':IFFFNN#3S5H5HIII"N!--// 	' 	'JCNN3&&&&dC   	) 4((D^<<<<<r    c                 Z   	 | j         r | j                                         rd | _         | j        t          k    s| j         rt	          | j                  | j        dk    r(|                     | j        | j        | j                  }n!|                     | j        | j                  }	 	 |	                                 n## t          $ r |                                   w xY wt          | _        |j        r|                                  n|| _         |S #  |                                  xY w)Nr   r$  )r  r   r  r|  r   rh   r'  rs   ri   r   ConnectionErrorr   r  rr   )rE   r.  s     r   getresponsezHTTPConnection.getresponseG  s@   	 ? 	#t7799 	#"DO" <<''4?'"4<000?Q**49do26, + @ @HH **49T\*JJH	    "   

 $DL" +

 #+O	NNs   *B? >D ? C3D D*)NN)NF)FFr   )&rK   rL   rM   rN  r\  r   r'  	HTTP_PORTr  r>  rh   staticmethodr   r   r  _GLOBAL_DEFAULT_TIMEOUTrv   r  r  r  r   r0  r,  r   r&  rG  rI  rS  rf  r]  rZ  r[  r
  r^  r}  ra  r  r  r   r    r   r   r   !  s#       IM!NLIJ1 1 \1
   \> #'0N $; ; ; ;,) ) ) )0  (       
" " "H  ! ! !&G &G &GP    4( 4( 4( 4(l 16(-} } } }~' ' '; ; ;D D DD D D  8Ge G G G G G )-b G$G G G G G
,= ,= ,=\= = = = =r    r   c                   N     e Zd Z	 eZdddej        dfdddd fdZ fdZ xZ	S )HTTPSConnectionNr   )contextcheck_hostnamer   c                2   t          t          |                               |||||	           ||| dd l}
|
                    dt
          d           || _        || _        |Bt          j	                    }| j
        dk    r|                    dg           |j        d|_        |j        t          j        k    }||j        }|r|st!          d          |s|r$|                    ||           |j        d|_        || _        ||| j        _        d S d S )	N)r   r   zTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rx   r   zhttp/1.1TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)r   r  rv   warningswarnDeprecationWarningkey_file	cert_filessl_create_default_https_contextrN  set_alpn_protocolspost_handshake_authverify_mode	CERT_NONEr  r~   load_cert_chain_context)rE   r  r	  r  r  r   r   r  r  r   r  will_verifyr   s               r   rv   zHTTPSConnection.__init__  su    /4((11$g2@<E 2 G G G $	(=&2 J0!5 5 5 %DM&DN;==>R''..
|<<<.:26G/!->K%!(!7 Jk J  "I J J J 79 7''	8<<< .:26G/#DM)/=,,, *)r    c                     	 t                                                       | j        r| j        }n| j        }| j                            | j        |          | _        d S )N)server_hostname)r   r,  r  r  r  wrap_socketrs   )rE   r  r   s     r   r,  zHTTPSConnection.connect  sa    6GGOO  ,"&"3"&)11$)BQ 2 S SDIIIr    )
rK   rL   rM   
HTTPS_PORTr  r  r  rv   r,  r   r   s   @r   r  r    s        2! '+TT#;$(%	>59$(D%	> %	> %	> %	> %	> %	> %	>N	S 	S 	S 	S 	S 	S 	S 	S 	Sr    r  c                       e Zd ZdS )r   NrK   rL   rM   r   r    r   r   r     s         	Dr    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r             Dr    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r     r  r    r   c                       e Zd Zd ZdS )r   c                 $    |f| _         || _        d S r   )argsrl   )rE   rl   s     r   rv   zUnknownProtocol.__init__  s    H	r    NrK   rL   rM   rv   r   r    r   r   r     s#            r    r   c                       e Zd ZdS )r	   Nr  r   r    r   r	   r	     r  r    r	   c                       e Zd ZdS )r
   Nr  r   r    r   r
   r
     r  r    r
   c                   *    e Zd ZddZd Zej        ZdS )r   Nc                 2    |f| _         || _        || _        d S r   )r  partialexpected)rE   r  r  s      r   rv   zIncompleteRead.__init__  s    H	 r    c                 r    | j         d| j         z  }nd}d| j        j        t          | j                  |fz  S )Nz, %i more expectedry   z%s(%i bytes read%s))r  r   rK   rA   r  r9  s     r   __repr__zIncompleteRead.__repr__  sE    =$$t}4AAA$(?(+DL(9(91(> > 	>r    r   )rK   rL   rM   rv   r  r+   __str__r   r    r   r   r     s:        ! ! ! !> > > nGGGr    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r     r  r    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r     r  r    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r     r  r    r   c                       e Zd ZdS )r   Nr  r   r    r   r   r     r  r    r   c                       e Zd Zd ZdS )r   c                 F    |st          |          }|f| _        || _        d S r   )r|   r  rI   r   s     r   rv   zBadStatusLine.__init__  s)     	::DE				r    Nr  r   r    r   r   r     s#            r    r   c                       e Zd Zd ZdS )r   c                 P    t                               | dt          |fz             d S )Nz&got more than %d bytes when reading %s)r   rv   rT   )rE   	line_types     r   rv   zLineTooLong.__init__   s6    t%M(0)'<&= 	> 	> 	> 	> 	>r    Nr  r   r    r   r   r     s#        > > > > >r    r   c                       e Zd Zd ZdS )r   c                 f    t                               | d           t          j        | g|R i | d S )Nry   )r   rv   ConnectionResetError)rE   poskws      r   rv   zRemoteDisconnected.__init__  s?    tR(((%d7S777B77777r    Nr  r   r    r   r   r     s#        8 8 8 8 8r    r   )r%   )Demail.parserr^   email.messager7  r(  r   rer  r2  collections.abcr@  urllib.parser   __all__r  r  rk   r  rY  r|  globalsupdater)  __members__rx  r   rT   rU   compile	fullmatchru  rl  rw  rr  rk  r   r1   r   r:   r/  Messager<   rX   rc   BufferedIOBaser   r   r  r  rD   ImportError	Exceptionr   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r   r   r   r    r   <module>r     s=  DL           				 				  



     ! ! ! ! ! !   	
 # 		  , - - - HG$/"="D"D"F"FGGG	 6 #
#677A %2:&CDDK  %/BJ/@$A$A ! (2rz-'@'@ $ 322 E E E E %        %-'   <  $ ) @ @ @ @i i i i i2$ i i iVc	 c	 c	 c	 c	 c	 c	 c	J@&JJJ9S 9S 9S 9S 9S. 9S 9S 9Sv NN$%%%%}  	 	 	D	@	 	 	 	 	I 	 	 	
	 	 	 	 	= 	 	 		 	 	 	 	 	 	 	    m   
	 	 	 	 	m 	 	 		 	 	 	 	M 	 	 	    ]   	 	 	 	 	m 	 	 		 	 	 	 	/ 	 	 		 	 	 	 	. 	 	 		 	 	 	 	. 	 	 	    M   > > > > >- > > >
8 8 8 8 8-} 8 8 8 	s   *E EE