
    .hht                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKJrJrJr  S SKJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S SK'J(r(J)r)   S SK*r*Sr+/ SQr-S\R\                  SS	 -  r/Sq0S\	Rb                  4SS
.S jjr2S r3/ r4SfS jr5S r6\Rn                  " S\Rp                  5      r9S r: " S S5      r; " S S5      r<S r= " S S5      r> " S S\>5      r? " S S\>5      r@ " S S\>5      rAS rB " S S \>5      rC " S! S"5      rD " S# S$\D5      rE " S% S&\E5      rF " S' S(5      rG " S) S*\G\>5      rH " S+ S,\G\>5      rI\R                  rK " S- S.5      rL " S/ S0\>\L5      rM " S1 S2\>\L5      rN " S3 S4\>5      rO " S5 S6\O5      rP\Q" \R                  S75      (       a   " S8 S9\O5      rS\-R                  S95         " S: S;\>5      rU " S< S=\>5      rVS> rWS? rX " S@ SA\>5      rYSB rZ " SC SD\>5      r[ " SE SF\[5      r\ " SG SH\>5      r]SIr^\R                  SJ:X  a	  S SKK`JaraJbrb  OSL raSM rb0 rc " SN SO5      rd " SP SQ\d5      reSqfSR rgSqhSS riSqjST rkSqlSU rm " SV SW5      rnSX roSgSY jrpSZ rqS[ rr\R                  S\:X  a  S S]KtJuruJvrv  S^ rwS_ rxS` rySa rzg\R                  SJ:X  a  Sb r{Sc rzSd r|Se ryg\orz\pryg! \, a    Sr+ GNef = f)h    N)URLError	HTTPErrorContentTooShortError)urlparseurlspliturljoinunwrapquoteunquote
_splittype
_splithost
_splitport
_splituser_splitpasswd
_splitattr_splitquery_splitvalue	_splittag	_to_bytesunquote_to_bytes
urlunparse)
addinfourladdclosehookTF)!RequestOpenerDirectorBaseHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerHTTPCookieProcessorProxyHandlerHTTPPasswordMgrHTTPPasswordMgrWithDefaultRealmHTTPPasswordMgrWithPriorAuthAbstractBasicAuthHandlerHTTPBasicAuthHandlerProxyBasicAuthHandlerAbstractDigestAuthHandlerHTTPDigestAuthHandlerProxyDigestAuthHandlerHTTPHandlerFileHandler
FTPHandlerCacheFTPHandlerDataHandlerUnknownHandlerHTTPErrorProcessorurlopeninstall_openerbuild_openerpathname2urlurl2pathname
getproxiesurlretrieve
urlcleanup	URLopenerFancyURLopenerz%d.%d   contextc                    U(       a  [        US9n[        U5      nO[        c  [        5       =qnO[        nUR                  XU5      $ Nr<   )HTTPSHandlerr3   _openeropen)urldatatimeoutr=   https_handleropeners         7/opt/python-3.13.8/usr/lib/python3.13/urllib/request.pyr1   r1      sC    X $W5m,	'>)&;;s'**    c                     U q g N)rA   )rG   s    rH   r2   r2      s    GrI   c                 L   [        U 5      u  pE[        R                  " [        X5      5       nUR	                  5       nUS:X  a1  U(       d*  [
        R                  R                  U5      U4sS S S 5        $ U(       a  [        US5      nO5[        R                  " SS9nUR                  n[        R                  U5        U   X4n	Sn
SnSnSnSU;   a  [        US	   5      nU(       a	  U" XU5        UR                  U
5      =n(       aN  U[!        U5      -  nUR#                  U5        US
-  nU(       a	  U" XU5        UR                  U
5      =n(       a  MN  S S S 5        S S S 5        WS:  a  WU:  a  [%        SX4-  W	5      eW	$ ! , (       d  f       N4= f! , (       d  f       N== f)NfilewbF)delete    r   content-lengthContent-Length   1retrieval incomplete: got only %i out of %i bytes)r   
contextlibclosingr1   infoospathnormpathrB   tempfileNamedTemporaryFilename_url_tempfilesappendintreadlenwriter   )rC   filename
reporthookrD   url_typerZ   fpheaderstfpresultbssizerb   blocknumblocks                  rH   r7   r7      s}      _NH			GC.	/2'') vh77##D)72 
0	/ x&C--U;CxxH!!(+&FBDDH7*7#3458.772;&%&E
"		% AxT2 772;&%& ! 
0F qyTD["?l"$ 	$ M1 S! 
0	/s+   >F5AF BFF
F	F
F#c                      [          H  n  [        R                  " U 5        M     [         S S 2	 [        (       a  S qg g ! [         a     MC  f = frK   )r_   rY   unlinkOSErrorrA   )	temp_files    rH   r8   r8      sJ    #		IIi  $ 	qw   		s   =
A
Az:\d+$c                     U R                   n[        U5      S   nUS:X  a  U R                  SS5      n[        R	                  SUS5      nUR                  5       $ )NrT    Host)full_urlr   
get_header_cut_port_resublower)requestrC   hosts      rH   request_hostr~     sX     

CC=Drz!!&"- Ba(D::<rI   c                      \ rS rSrS0 SSS4S jr\S 5       r\R                  S 5       r\R                  S 5       r\S 5       r	\	R                  S	 5       r	\	R                  S
 5       r	S r
S rS rS rS rS rS rS rSS jrS rS rSrg)r   i  NFc                     Xl         0 U l        0 U l        S U l        X l        S U l        UR                  5        H  u  pxU R                  Xx5        M     Uc  [        U 5      nX@l	        XPl
        U(       a  X`l        g g rK   )rw   ri   unredirected_hdrs_datarD   _tunnel_hostitems
add_headerr~   origin_req_hostunverifiablemethod)	selfrC   rD   ri   r   r   r   keyvalues	            rH   __init__Request.__init__!  ss     !#
	 !--/JCOOC' *"*40O.( K rI   c                     U R                   (       a&  SR                  U R                  U R                   5      $ U R                  $ )Nz{}#{})fragmentformat	_full_urlr   s    rH   rw   Request.full_url3  s,    ==>>$..$--@@~~rI   c                     [        U5      U l        [        U R                  5      u  U l        U l        U R	                  5         g rK   )r	   r   r   r   _parser   rC   s     rH   rw   r   9  s/      (1$..(A%rI   c                 .    S U l         S U l        SU l        g Nru   )r   r   selectorr   s    rH   rw   r   @  s    rI   c                     U R                   $ rK   )r   r   s    rH   rD   Request.dataF  s    zzrI   c                     XR                   :w  a/  Xl         U R                  S5      (       a  U R                  S5        g g g )NContent-length)r   
has_headerremove_header)r   rD   s     rH   rD   r   J  s<    ::J /00""#34 1 rI   c                     S U l         g rK   )rD   r   s    rH   rD   r   T  s	    	rI   c                    [        U R                  5      u  U l        nU R                  c  [        SU R                  -  5      e[        U5      u  U l        U l        U R                  (       a  [        U R                  5      U l        g g )Nzunknown url type: %r)	r   r   type
ValueErrorrw   r   r}   r   r   )r   rests     rH   r   Request._parseX  sd    $T^^4	4993dmmCDD#-d#3 	4=99		*DI rI   c                 >    U R                   b  SOSn[        U SU5      $ )NPOSTGETr   )rD   getattr)r   default_methods     rH   
get_methodRequest.get_method`  s!    #'99#8etX~66rI   c                     U R                   $ rK   )rw   r   s    rH   get_full_urlRequest.get_full_urle  s    }}rI   c                     U R                   S:X  a#  U R                  (       d  U R                  U l        OX l         U R                  U l        Xl        g )Nhttps)r   r   r}   rw   r   )r   r}   r   s      rH   	set_proxyRequest.set_proxyh  s7    99(9(9 $		DI MMDM	rI   c                 4    U R                   U R                  :H  $ rK   )r   rw   r   s    rH   	has_proxyRequest.has_proxyp  s    }}--rI   c                 <    X R                   UR                  5       '   g rK   )ri   
capitalizer   r   vals      rH   r   Request.add_headers  s    ),S^^%&rI   c                 <    X R                   UR                  5       '   g rK   )r   r   r   s      rH   add_unredirected_headerRequest.add_unredirected_headerw  s    36s~~/0rI   c                 H    XR                   ;   =(       d    XR                  ;   $ rK   )ri   r   r   header_names     rH   r   Request.has_header{  s"    ||+ 6555	7rI   c                 l    U R                   R                  UU R                  R                  X5      5      $ rK   )ri   getr   )r   r   defaults      rH   rx   Request.get_header  s0    ||""&&{<> 	>rI   c                 t    U R                   R                  US 5        U R                  R                  US 5        g rK   )ri   popr   r   s     rH   r   Request.remove_header  s,    d+"";5rI   c                 h    0 U R                   EU R                  En[        UR                  5       5      $ rK   )r   ri   listr   )r   hdrss     rH   header_itemsRequest.header_items  s,    9$((9DLL9DJJL!!rI   )r   r   r   rD   r   rw   ri   r}   r   r   r   r   r   r   rK   )__name__
__module____qualname____firstlineno__r   propertyrw   setterdeleterrD   r   r   r   r   r   r   r   r   rx   r   r   __static_attributes__ rI   rH   r   r     s    !%r!%E!$  
 __   
   
[[5 5 
\\ +7
.-77>
6"rI   r   c                   ^    \ rS rSrS rS rS rS rS\R                  4S jr
SS jrS	 rS
rg)r   i  c                 p    S[         -  nSU4/U l        / U l        0 U l        0 U l        0 U l        0 U l        g )NPython-urllib/%sz
User-agent)__version__
addheadershandlershandle_openhandle_errorprocess_responseprocess_request)r   client_versions     rH   r   OpenerDirector.__init__  sB    +k9(.9: "!rI   c                 <   [        US5      (       d  [        S[        U5      -  5      eSn[        U5       GH  nUS;   a  M  UR	                  S5      nUS U nX4S-   S  nUR                  S5      (       aU  UR	                  S5      U-   S-   nX7S-   S  n [        U5      nU R                  R                  U0 5      n	XR                  U'   OAUS:X  a  UnU R                  n	O,US	:X  a  UnU R                  n	OUS
:X  a  UnU R                  n	OM  U	R                  U/ 5      n
U
(       a  [        R                  " X5        OU
R!                  U5        SnGM     U(       a3  [        R                  " U R"                  U5        UR%                  U 5        g g ! [         a     Nf = f)N
add_parentz%expected BaseHandler instance, got %rF)redirect_requestdo_open
proxy_open_rT   errorrB   responser|   T)hasattr	TypeErrorr   dirfind
startswithra   r   r   r   r   r   r   
setdefaultbisectinsortr`   r   r   )r   handleraddedmethiprotocol	conditionjkindlookupr   s              rH   add_handlerOpenerDirector.add_handler  s   w--C M* + + LDDD		#ABQxHqST
I##G,,NN3'!+a/aCDzt9D **..x<.4!!(+f$))j(..i'--((r2Hh0(EG !J MM$--1t$ / " s   F
FFc                     g rK   r   r   s    rH   closeOpenerDirector.close      rI   c                 h    UR                  US5      nU H  n[        Xc5      nU" U6 nUc  M  Us  $    g )Nr   )r   r   )	r   chainr   	meth_nameargsr   r   funcrk   s	            rH   _call_chainOpenerDirector._call_chain  s<     99T2&G7.D4[F!	  rI   Nc                    [        U[        5      (       a  [        X5      nOUnUb  X$l        X4l        UR
                  nUS-   nU R                  R                  U/ 5       H  n[        Xv5      nU" U5      nM     [        R                  " SUR                  UR                  UR                  UR                  5       5        U R                  XB5      n	US-   nU R                  R                  U/ 5       H  n[        Xv5      nU" XI5      n	M     U	$ )N_requestzurllib.Request	_response)
isinstancestrr   rD   rE   r   r   r   r   sysauditrw   ri   r   _openr   )
r   fullurlrD   rE   reqr   r  	processorr   r   s
             rH   rB   OpenerDirector.open  s    gs##'(CC88 Z'	--11(B?I90Ds)C @ 			"CLL#((CKKIYZ::c( [(	..228R@I90DC*H A rI   c                     U R                  U R                  SSU5      nU(       a  U$ UR                  nU R                  U R                  XDS-   U5      nU(       a  U$ U R                  U R                  SSU5      $ )Nr   default_openr  unknownunknown_open)r  r   r   )r   r  rD   rk   r   s        rH   r  OpenerDirector._open  s    !!$"2"2I"0#7M88!!$"2"2H")?*+.0M 0 0) .5 	5rI   c                     US;   a  U R                   S   nUS   nSU-  nSnUnOU R                   nUS-   nSnX1U4U-   nU R                  " U6 nU(       a  U$ U(       a  USS	4W-   nU R                  " U6 $ g )
Nhttpr   r  r;   zhttp_error_%srT   _errorr   r   http_error_default)r   r  )r   protor  dictr  http_err	orig_argsrk   s           rH   r   OpenerDirector.error  s    %%$$V,DGE'%/IHI$$D(IHY'$.!!4(M)%9:YFD##T** rI   )r   r   r   r   r   r   rK   )r   r   r   r   r   r   r   r  socket_GLOBAL_DEFAULT_TIMEOUTrB   r  r   r   r   rI   rH   r   r     s3    	"-%^	 "&v/M/M :5+rI   r   c            	         [        5       n[        [        [        [        [
        [        [        [        [        /	n[        [        R                  S5      (       a  UR                  [        5        [        5       nU Hi  nU  H`  n[!        U["        5      (       a%  [%        XT5      (       a  UR'                  U5        M;  M=  [!        XT5      (       d  MO  UR'                  U5        Mb     Mk     U H  nUR)                  U5        M     U H  nUR+                  U" 5       5        M     U  H0  n[!        U["        5      (       a  U" 5       nUR+                  U5        M2     U$ )NHTTPSConnection)r   r    r/   r*   r   r   r,   r+   r0   r.   r   r  clientr`   r@   setr  r   
issubclassaddremover   )r   rG   default_classesskipklasscheckhs          rH   r3   r3     s    F#^[.0C!;0B"$O t{{-..|,5D E%&&e++HHUO ,E))  ! u%  !57# ! aA1  MrI   c                   *    \ rS rSrSrS rS rS rSrg)r   i?    c                     Xl         g rK   parent)r   r7  s     rH   r   BaseHandler.add_parentB  s    rI   c                     g rK   r   r   s    rH   r   BaseHandler.closeE  r  rI   c                 X    [        US5      (       d  gU R                  UR                  :  $ )Nhandler_orderT)r   r<  )r   others     rH   __lt__BaseHandler.__lt__I  s+    uo.. !!E$7$777rI   r6  N)	r   r   r   r   r<  r   r   r>  r   r   rI   rH   r   r   ?  s    M8rI   r   c                   "    \ rS rSrSrS r\rSrg)r0   iR  i  c                     UR                   UR                  UR                  5       pTnSUs=::  a  S:  d   O  U R                  R	                  SXX4U5      nU$ )N   ,  r  )codemsgrX   r7  r   )r   r|   r   rD  rE  r   s         rH   http_response HTTPErrorProcessor.http_responseV  sN    "--x}}4 t!c!{{((4d<H rI   r   N)r   r   r   r   r<  rF  https_responser   r   rI   rH   r0   r0   R  s    M	 #NrI   r0   c                       \ rS rSrS rSrg)r   ic  c                 0    [        UR                  X4XR5      erK   )r   rw   )r   r  rh   rD  rE  r   s         rH   r  *HTTPDefaultErrorHandler.http_error_defaultd  s    d::rI   r   N)r   r   r   r   r  r   r   rI   rH   r   r   c  s    ;rI   r   c                   <    \ rS rSrSrSrS rS r\=r=r	=r
rSrSrg)	r   ig     
   c                 z   UR                  5       nUS;   a  US;   d#  US;   a  US:X  d  [        UR                  X4XR5      eUR                  SS5      nSnUR                  R                  5        V	V
s0 s H  u  pU	R                  5       U;  d  M  X_M     nn	n
[        UUS:X  a  SOS	UUR                  S
S9$ s  sn
n	f )N)-  .  /  i3  i4  )r   HEAD)rP  rQ  rR  r    z%20)rR   zcontent-typerS  r   T)r   ri   r   r   )	r   r   rw   replaceri   r   r{   r   r   )r   r  rh   rD  rE  ri   newurlmCONTENT_HEADERSkv
newheaderss               rH   r   $HTTPRedirectHandler.redirect_requesto  s     NN22qO7K&1;CLL$WAA U+<'*{{'8'8': ;':tq/9 ad':
 ;v()Vf)'*':':$(	* 	*;s   1B7B7c                 r   SU;   a  US   nOSU;   a  US   nOg [        U5      nUR                  S;  a  [        XcU< SU< S3XR5      eUR                  (       d!  UR                  (       a  [        U5      nSUS'   [        U5      n[        US[        R                  S	9n[        UR                  U5      nU R                  XX4XV5      nUc  g [        US
5      (       aq  UR                  =ol        U	R                  US5      U R                   :  d  [#        U	5      U R$                  :  a%  [        UR                  UU R&                  U-   XR5      eO0 =n	=Ul        Ul        U	R                  US5      S-   X'   UR)                  5         UR+                  5         U R,                  R/                  XR0                  S9$ )Nlocationurir  r   ftpru   z - Redirection to url 'z' is not allowed/r;   z
iso-8859-1)encodingsaferedirect_dictr   rT   rE   )r   schemer   rZ   netlocr   r   r
   stringpunctuationr   rw   r   r   re  r   max_repeatsrc   max_redirectionsinf_msgrb   r   r7  rB   rE   )
r   r  rh   rD  rE  ri   rV  urlpartsnewvisiteds
             rH   http_error_302"HTTPRedirectHandler.http_error_302  s     Z(FgU^F F#
 ??">>ADfM 
 }}H~HHQKH%
 \0B0BDv.
 ##CTH; 3((*-*;*;;G'FA&$*:*::G 5 55d $s 2GA A 6 ?A@G@c'#*;!++fa014 		

{{[[99rI   zoThe HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
r   N)r   r   r   r   rk  rl  r   rq  http_error_301http_error_303http_error_307http_error_308rm  r   r   rI   rH   r   r   g  s<     K !*N::x IWVNV^Vn~2GrI   r   c                 v   [        U 5      u  pUR                  S5      (       d  S nU nOmUR                  S5      (       d  [        SU -  5      eSU;   a$  UR                  S5      nUR                  SU5      nOUR                  SS5      nUS:X  a  S nUSU n[	        U5      u  pgUb  [        U5      u  pOS =pXX4$ )Nrb  //zproxy URL with no authority: %r@r;   rQ   )r   r   r   r   r   r   )
proxyrg  r_scheme	authorityhost_separatorenduserinfohostportuserpasswords
             rH   _parse_proxyr    s     "%(Fs##	 ""4((>FGG (?%]]3/N--^4C--Q'C"9CQsO	#I.H%h/h++rI   c                   (    \ rS rSrSrSS jrS rSrg)r    i  d   Nc                     Uc
  [        5       nXl        UR                  5        H4  u  p#UR                  5       n[	        U SU-  X2U R
                  4S j5        M6     g )Nz%s_openc                     U" XU5      $ rK   r   )rrz  r   r   s       rH   <lambda>'ProxyHandler.__init__.<locals>.<lambda>  s    Qt,rI   )r6   proxiesr   r{   setattrr   )r   r  r   rC   s       rH   r   ProxyHandler.__init__  sO    ? lG ID::<DD)d*$' -. )rI   c                    UR                   n[        U5      u  pVpxUc  UnUR                  (       a  [        UR                  5      (       a  g U(       aj  U(       ac  [	        U5      < S[	        U5      < 3n	[
        R                  " U	R                  5       5      R                  S5      n
UR                  SSU
-   5        [	        U5      nUR                  X5        XE:X  d  US:X  a  g U R                  R                  XR                  S9$ )N:asciiProxy-authorizationBasic r   rf  )r   r  r}   proxy_bypassr   base64	b64encodeencodedecoder   r   r7  rB   rE   )r   r  rz  r   	orig_type
proxy_typer  r  r  	user_passcredss              rH   r   ProxyHandler.proxy_open	  s    HH	/;E/B,
("J88SXX..H#*4=#*8#46I$$Y%5%5%78??HENN0(U2BC8$h+"i7&: ;;##C#==rI   )r  rK   )r   r   r   r   r<  r   r   r   r   rI   rH   r    r      s    M	.>rI   r    c                   6    \ rS rSrS rS rS rS	S jrS rSr	g)
r!   i%  c                     0 U l         g rK   passwdr   s    rH   r   HTTPPasswordMgr.__init__'  s	    rI   c                    ^ ^ [        U[        5      (       a  U/nUT R                  ;  a  0 T R                  U'   S H,  m[        UU 4S jU 5       5      nX44T R                  U   U'   M.     g )NTFc              3   H   >#    U  H  nTR                  UT5      v   M     g 7frK   )
reduce_uri).0udefault_portr   s     rH   	<genexpr>/HTTPPasswordMgr.add_password.<locals>.<genexpr>1  s"       ?:=Q<00#s   ")r  r  r  tuple)r   realmr_  r  r  reduced_urir  s   `     @rH   add_passwordHTTPPasswordMgr.add_password*  sg    c3%C#!#DKK'L  ?:= ? ?K/3nDKK{+ (rI   c                     U R                   R                  U0 5      nS HT  nU R                  X$5      nUR                  5        H,  u  pgU H!  nU R	                  X5      (       d  M  Us  s  s  $    M.     MV     g)Nr  NN)r  r   r  r   	is_suburi)	r   r  authuridomainsr  reduced_authuriurisauthinfor_  s	            rH   find_user_password"HTTPPasswordMgr.find_user_password5  sc    ++//%,'L"oogDO")--/C~~c;;'   #2 ( rI   c                     [        U5      nUS   (       a  US   nUS   nUS   =(       d    SnOS nUnSn[        U5      u  pxU(       a#  Uc   Ub  SSS.R                  U5      n	U	b  SXy4-  nXV4$ )	NrT   r   r;   rb  P   i  r  z%s:%d)r   r   r   )
r   r_  r  partsrg  r|  rZ   r}   portdports
             rH   r  HTTPPasswordMgr.reduce_uri?  s     81XFaI8?sD FID	*
DLV-?!s6{   #tm3	rI   c                 v    X:X  a  gUS   US   :w  a  gUS   nUSS  S:w  a  US-  nUS   R                  U5      $ )NTr   FrT   rQ   rb  )r   )r   basetestprefixs       rH   r  HTTPPasswordMgr.is_suburiV  sT    
 <7d1ga"#;#cMFAw!!&))rI   r  N)T)
r   r   r   r   r   r  r  r  r  r   r   rI   rH   r!   r!   %  s    	=.*rI   r!   c                       \ rS rSrS rSrg)r"   ie  c                 l    [         R                  XU5      u  p4Ub  X44$ [         R                  U S U5      $ rK   )r!   r  )r   r  r  r  r  s        rH   r  2HTTPPasswordMgrWithDefaultRealm.find_user_passwordg  s=    (;;D<CE>!11$gFFrI   r   N)r   r   r   r   r  r   r   rI   rH   r"   r"   e  s    GrI   r"   c                   H   ^  \ rS rSrU 4S jrSU 4S jjrSS jrS rSrU =r	$ )r#   io  c                 0   > 0 U l         [        TU ]	  5         g rK   )authenticatedsuperr   )r   	__class__s    rH   r   %HTTPPasswordMgrWithPriorAuth.__init__q  s    rI   c                 p   > U R                  X%5        Ub  [        TU ]	  S X#U5        [        TU ]	  XX45        g rK   )update_authenticatedr  r  )r   r  r_  r  r  is_authenticatedr  s         rH   r  )HTTPPasswordMgrWithPriorAuth.add_passwordu  s7    !!#8G s&9U6rI   c                     [        U[        5      (       a  U/nS H+  nU H"  nU R                  XC5      nX R                  U'   M$     M-     g Nr  )r  r  r  r  )r   r_  r  r  r  r  s         rH   r  1HTTPPasswordMgrWithPriorAuth.update_authenticated|  sF    c3%C'L"ooa>2B"";/  (rI   c                     S HP  nU R                  X5      nU R                   H,  nU R                  XC5      (       d  M  U R                  U   s  s  $    MR     g r  )r  r  r  )r   r  r  r  r_  s        rH   r  -HTTPPasswordMgrWithPriorAuth.is_authenticated  sJ    'L"oogDO))>>#77--c22 * (rI   )r  )F)
r   r   r   r   r   r  r  r  r   __classcell__)r  s   @rH   r#   r#   o  s    7C3 3rI   r#   c                   ~    \ rS rSr\R
                  " S\R                  5      rSS jrS r	S r
S rS rS	 r\r\rS
rg)r$   i  z1(?:^|,)[ 	]*([^ 	,]+)[ 	]+realm=(["']?)([^"']*)\2Nc                 `    Uc
  [        5       nXl        U R                  R                  U l        g rK   )r!   r  r  )r   password_mgrs     rH   r   !AbstractBasicAuthHandler.__init__  s'    *,L" KK44rI   c              #   *  #    Sn[         R                  R                  U5       H?  nUR                  5       u  pEnUS;  a  [        R
                  " S[        S5        XF4v   SnMA     U(       d$  U(       a  UR                  5       S   nOSnUS 4v   g g 7f)NF)"'zBasic Auth Realm was unquoted   Tr   ru   )r$   rxfinditergroupswarningswarnUserWarningsplit)r   headerfound_challengemorg  r
   r  s          rH   _parse_realm%AbstractBasicAuthHandler._parse_realm  s     *--66v>B#%99; F5J&=)1. /!"O ? *4.  s   BBc                    UR                  U5      nU(       d  g S nU HN  nU R                  U5       H6  u  pxUR                  5       S:w  a  UnM  Uc  M"  U R                  X#U5      s  s  $    MP     Ub  [	        SW< 35      eg )Nbasicz@AbstractBasicAuthHandler does not support the following scheme: )get_allr  r{   retry_http_basic_authr   )	r   authreqr}   r  ri   unsupportedr  rg  r  s	            rH   http_error_auth_reqed.AbstractBasicAuthHandler.http_error_auth_reqed  s     //'*F!%!2!26!:<<>W,"(K$  55dGG ";  " &) * * #rI   c                    U R                   R                  X15      u  pEUb  U< SU< 3nS[        R                  " UR	                  5       5      R                  S5      -   nUR                  U R                  S 5      U:X  a  g UR                  U R                  U5        U R                  R                  X"R                  S9$ g )Nr  r  r  rf  )r  r  r  r  r  r  rx   auth_headerr   r7  rB   rE   )r   r}   r  r  r  pwrawauths           rH   r  .AbstractBasicAuthHandler.retry_http_basic_auth  s    ;;11%>>!2&Cf..szz|<CCGLLD~~d..5=''(8(8$?;;##C#==rI   c                    [        U R                  S5      (       a*  U R                  R                  UR                  5      (       d  U$ UR	                  S5      (       d  U R                  R                  S UR                  5      u  p#SR                  X#5      R                  5       n[        R                  " U5      R                  5       nUR                  SSR                  UR                  5       5      5        U$ )Nr  Authorizationz{0}:{1}zBasic {})r   r  r  rw   r   r  r   r  r  standard_b64encoder  r   strip)r   r  r  r  credentialsauth_strs         rH   http_request%AbstractBasicAuthHandler.http_request  s    %788{{++CLL99J~~o..;;99$MLD#**48??AK00=DDFH''(2(9(9(..:J(KM
rI   c                    [        U R                  S5      (       ah  SUR                  s=::  a  S:  a+  O  O(U R                  R                  UR                  S5        U$ U R                  R                  UR                  S5        U$ )Nr  rB  rC  TF)r   r  rD  r  rw   )r   r  r   s      rH   rF  &AbstractBasicAuthHandler.http_response  sc    4;; 233hmm)c)00tD  00uErI   )r  r  rK   )r   r   r   r   recompileIr  r   r  r  r  r   rF  https_requestrH  r   r   rI   rH   r$   r$     sJ     
 1 DD
B5!(*4
 !M"NrI   r$   c                       \ rS rSrSrS rSrg)r%   i  r  c                 D    UR                   nU R                  SXaU5      nU$ )Nwww-authenticate)rw   r  )r   r  rh   rD  rE  ri   rC   r   s           rH   http_error_401#HTTPBasicAuthHandler.http_error_401  s(    ll--.@*-G=rI   r   N)r   r   r   r   r  r  r   r   rI   rH   r%   r%     s    !KrI   r%   c                       \ rS rSrSrS rSrg)r&   i  r  c                 D    UR                   nU R                  SXaU5      nU$ Nproxy-authenticate)r}   r  )r   r  rh   rD  rE  ri   r|  r   s           rH   http_error_407$ProxyBasicAuthHandler.http_error_407  s+    
 HH	--.B*3'CrI   r   N)r   r   r   r   r  r  r   r   rI   rH   r&   r&     s    'KrI   r&   c                   H    \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rSrg)r'   i  Nc                     Uc
  [        5       nXl        U R                  R                  U l        SU l        SU l        S U l        g Nr   )r!   r  r  retriednonce_count
last_nonce)r   r  s     rH   r   "AbstractDigestAuthHandler.__init__&  s<    >$&F KK44rI   c                     SU l         g r  )r  r   s    rH   reset_retry_count+AbstractDigestAuthHandler.reset_retry_count/  s	    rI   c                 h   UR                  US 5      nU R                  S:  a  [        UR                  SSUS 5      eU =R                  S-  sl        U(       a[  UR	                  5       S   nUR                  5       S:X  a  U R                  X55      $ UR                  5       S:w  a  [        SU-  5      eg g )	N   i  zdigest auth failedrT   r   digestr  zEAbstractDigestAuthHandler does not support the following scheme: '%s')r   r  r   rw   r  r{   retry_http_digest_authr   )r   r  r}   r  ri   r  rg  s          rH   r  /AbstractDigestAuthHandler.http_error_auth_reqed2  s    ++k40<<! CLL#/C#T+ + LLAL]]_Q'F||~)223@@7*  "?AG"H I I +	 rI   c                 z   UR                  SS5      u  p4[        [        S [        U5      5      5      nU R	                  X5      nU(       aq  SU-  nUR
                  R                  U R                  S 5      U:X  a  g UR                  U R                  U5        U R                  R                  XR                  S9nU$ g )NrT  rT   z	Digest %srf  )r  parse_keqv_listfilterparse_http_listget_authorizationri   r   r  r   r7  rB   rE   )r   r  r  token	challengechalauth_valresps           rH   r   0AbstractDigestAuthHandler.retry_http_digest_authF  s    ::c1-vdOI,FGH%%c0"T)H{{t//6(B''(8(8(C;;##C#=DK rI   c                     U R                   < SU< S[        R                  " 5       < S3nUR                  S5      [	        S5      -   n[
        R                  " U5      R                  5       nUS S $ )Nr  r        )r  timectimer  _randombyteshashlibsha1	hexdigest)r   noncesbdigs        rH   
get_cnonce$AbstractDigestAuthHandler.get_cnonceR  sT      ++UDJJLAHHWQ/ll1o'')3BxrI   c                     US   nUS   nUR                  S5      nUR                  SS5      nUR                  SS 5      nU R                  U5      u  pUc  g U R                  R	                  X1R
                  5      u  pU
c  g UR                  b  U R                  UR                  U5      nOS nU
< SU< SU< 3nUR                  5       < SUR                  < 3nUc  U	" U" U5      U< SU" U5      < 35      nOSUR                  S	5      ;   a}  X@R                  :X  a  U =R                  S
-  sl        OS
U l        X@l        SU R                  -  nU R                  U5      nU< SU< SU< SS< SU" U5      < 3	nU	" U" U5      U5      nO[        SU-  5      eSU
< SU< SU< SUR                  < SU< S3nU(       a  USU-  -  nU(       a  USU-  -  nUSU-  -  nU(       a  USW< SW< S3-  nU$ ! [         a     g f = f)Nr  r6  qop	algorithmMD5opaquer  r  ,rT   z%08xzqop '%s' is not supported.z
username="z
", realm="z
", nonce="z", uri="z", response="r  z, opaque="%s"z, digest="%s"z, algorithm="%s"z, qop=auth, nc=z
, cnonce=")r   KeyErrorget_algorithm_implsr  r  rw   rD   get_entity_digestr   r   r  r  r  r:  r   )r   r  r)  r  r6  r=  r>  r@  HKDr  r  entdigA1A2respdigncvaluecnoncenoncebitr  s                       rH   r&  +AbstractDigestAuthHandler.get_authorization]  s   		MEME((5/Ce4I XXh-F ((39;;11%F< 88++CHHd;FF+(&
 ;25!B% 89Gsyy~%'  A% #$ "'t///G__U+F+0'661R5QH2)G 7#=>>
 #'ucll")+ Of,,DOf,,D"Y..HHDg  		s   ?G; ;
HHc                 \   ^ US:X  a  S mOUS:X  a  S mO[        SU-  5      eU4S jnTU4$ )Nr?  c                 h    [         R                  " U R                  S5      5      R                  5       $ Nr  )r3  md5r  r5  xs    rH   r  ?AbstractDigestAuthHandler.get_algorithm_impls.<locals>.<lambda>  s    '++ahhw&78BBDrI   SHAc                 h    [         R                  " U R                  S5      5      R                  5       $ rQ  )r3  r4  r  r5  rS  s    rH   r  rU    s    ',,qxx'89CCErI   z.Unsupported digest authentication algorithm %rc                 "   > T" U < SU< 35      $ )Nr  r   )r7  drE  s     rH   r  rU    s    !q!,-rI   )r   )r   r>  rF  rE  s      @rH   rC  -AbstractDigestAuthHandler.get_algorithm_impls  sG    DA%EA  ,.78 9 9-"urI   c                     g rK   r   )r   rD   r)  s      rH   rD  +AbstractDigestAuthHandler.get_entity_digest  s    rI   )r  r  r  r  r  rK   )r   r   r   r   r   r  r  r   r:  r&  rC  rD  r   r   rI   rH   r'   r'     s,    I(
	<|rI   r'   c                   "    \ rS rSrSrSrS rSrg)r(   i  r    c                 |    [        UR                  5      S   nU R                  SXaU5      nU R                  5         U$ )NrT   r
  )r   rw   r  r  r   r  rh   rD  rE  ri   r}   retrys           rH   r  $HTTPDigestAuthHandler.http_error_401  s>    %a(**+=+/g? rI   r   N)r   r   r   r   r  r<  r  r   r   rI   rH   r(   r(     s     "KMrI   r(   c                   "    \ rS rSrSrSrS rSrg)r)   i  Proxy-Authorizationr^  c                 d    UR                   nU R                  SXaU5      nU R                  5         U$ r  )r}   r  r  r`  s           rH   r  %ProxyDigestAuthHandler.http_error_407  s4    xx**+?+/g? rI   r   N)r   r   r   r   r  r<  r  r   r   rI   rH   r)   r)     s    'KMrI   r)   c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
AbstractHTTPHandleri  Nc                 j    Ub  Xl        g [         R                  R                  R                  U l        g rK   )r  r)  HTTPConnection
debuglevel_debuglevel)r   rk  s     rH   r   AbstractHTTPHandler.__init__  s$    )3)?:T[[E_E_EjEjrI   c                     Xl         g rK   rl  )r   levels     rH   set_http_debuglevel'AbstractHTTPHandler.set_http_debuglevel  s     rI   c                     [         R                  R                  R                  UR                  UR                  5       5      $ rK   )r  r)  rj  _get_content_lengthrD   r   r   r|   s     rH   rt  'AbstractHTTPHandler._get_content_length  s2    {{))==LL " 	"rI   c                 Z   UR                   nU(       d  [        S5      eUR                  b  UR                  n[        U[        5      (       a  Sn[        U5      eUR                  S5      (       d  UR                  SS5        UR                  S5      (       dX  UR                  S5      (       dB  U R                  U5      nUb  UR                  S[	        U5      5        OUR                  SS5        UnUR                  5       (       a$  [        UR                  5      u  px[        U5      u  piUR                  S5      (       d  UR                  SU5        U R                  R                   H>  u  pU
R                  5       n
UR                  U
5      (       a  M-  UR                  X5        M@     U$ )	Nno host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.zContent-type!application/x-www-form-urlencodedr   Transfer-encodingchunkedrv   )r}   r   rD   r  r  r   r   r   rt  r   r   r   r   r7  r   r   )r   r|   r}   rD   rE  content_lengthsel_hostrg  selsel_pathr^   r   s               rH   do_request_AbstractHTTPHandler.do_request_  sw   ||?++<<#<<D$$$Dn$%%n55//"79 &&'788#../BCC!%!9!9'!B!-33,c..AC 33/< $W%5%56KF!+CH!!&))++FH=;;11KD??$D%%d++//< 2
 rI   c           	         UR                   nU(       d  [        S5      eU" U4SUR                  0UD6nUR                  U R                  5        [        UR                  5      nUR                  UR                  R                  5        VVs0 s H  u  pxXv;  d  M  Xx_M     snn5        SUS'   UR                  5        V	V
s0 s H  u  pU	R                  5       U
_M     nn	n
UR                  (       a+  0 nSnX;   a  Xl   X'   Xl	 UR                  UR                  US9    UR                  UR                  5       UR                  UR                   UUR#                  S5      S9  UR'                  5       nUR*                  (       a!  UR*                  R)                  5         S Ul        UR-                  5       Ul        UR0                  Ul        U$ s  snnf s  sn
n	f ! [$         a  n[        U5      eS nAff = f!   UR)                  5         e = f)	Nrx  rE   r   
Connectionrd  ri   rz  )encode_chunked)r}   r   rE   set_debuglevelrl  r!  r   updateri   r   titler   
set_tunnelr|   r   r   rD   r   rr   getresponser   sockr   rC   reasonrE  )r   
http_classr  http_conn_argsr}   r2  ri   rY  rZ  r^   r   tunnel_headersproxy_auth_hdrerrr  s                  rH   r   AbstractHTTPHandler.do_open  s   
 xx?++ tCS[[CNC	))*s,,-):):)< -)<+ )< - 	. !(6=mmoFo4::<$oFN2N(181H. +LL))>LB		$		#..*CLL#((G),8K)L  N A 66FFLLNAF  " e- G   $sm#$	GGIs=   G
G
GAG #G6 
G3#G..G33G6 6H	ro  rK   )
r   r   r   r   r   rq  rt  r  r   r   r   rI   rH   rh  rh    s    k!"
$L@rI   rh  c                   2    \ rS rSrS r\R                  rSrg)r*   iA  c                 V    U R                  [        R                  R                  U5      $ rK   )r   r  r)  rj  r   r  s     rH   	http_openHTTPHandler.http_openC  s    ||DKK66<<rI   r   N)	r   r   r   r   r  rh  r  r   r   r   rI   rH   r*   r*   A  s    = '22LrI   r*   r(  c                   <    \ rS rSrSS jrS r\R                  rSr	g)r@   iJ  Nc                 *   Ub  UO#[         R                  R                  R                  n[        R                  X5        UcC  [         R                  R                  R                  n[         R                  R                  U5      nUb  X2l        X l	        g rK   )
r  r)  r(  rk  rh  r   	_http_vsn_create_https_contextcheck_hostname_context)r   rk  r=   r  http_versions        rH   r   HTTPSHandler.__init__L  sk    '1'=4;;C^C^CiCiJ((:#{{::DD++;;LI))7&#MrI   c                 h    U R                  [        R                  R                  UU R                  S9$ r?   )r   r  r)  r(  r  r  s     rH   
https_openHTTPSHandler.https_openV  s-    << ; ;S(,   7 7rI   )r  NNN)
r   r   r   r   r   r  rh  r  r  r   r   rI   rH   r@   r@   J  s    	$	7 ,77rI   r@   c                   2    \ rS rSrSS jrS rS r\r\rSr	g)r   i^  Nc                 R    SS K nUc  UR                  R                  5       nXl        g r  )http.cookiejar	cookiejar	CookieJar)r   r  r  s      rH   r   HTTPCookieProcessor.__init___  s"    002I"rI   c                 <    U R                   R                  U5        U$ rK   )r  add_cookie_headerru  s     rH   r    HTTPCookieProcessor.http_requeste  s    ((1rI   c                 <    U R                   R                  X!5        U$ rK   )r  extract_cookies)r   r|   r   s      rH   rF  !HTTPCookieProcessor.http_responsei  s    &&x9rI   )r  rK   )
r   r   r   r   r   r   rF  r  rH  r   r   rI   rH   r   r   ^  s    # !M"NrI   r   c                       \ rS rSrS rSrg)r/   ip  c                 6    UR                   n[        SU-  5      e)Nzunknown url type: %s)r   r   )r   r  r   s      rH   r  UnknownHandler.unknown_openq  s    xx-455rI   r   N)r   r   r   r   r  r   r   rI   rH   r/   r/   p  s    6rI   r/   c                 z    0 nU  H2  nUR                  SS5      u  p4US   S:X  a  US   S:X  a  USS nXAU'   M4     U$ )N=rT   r   r  rQ   )r  )lparsedeltrY  rZ  s        rH   r#  r#  u  sQ    Fyya Q43;1R5C<!BAq		 
 MrI   c                 F   / nSnS=p4U  HX  nU(       a  X%-  nSnM  U(       a  US:X  a  SnM#  US:X  a  SnX%-  nM1  US:X  a  UR                  U5        SnML  US:X  a  SnX%-  nMZ     U(       a  UR                  U5        U Vs/ s H  o"R                  5       PM     sn$ s  snf )Nru   F\Tr  rA  )r`   r  )r7  respartescaper
   curs         rH   r%  r%    s     CDFKDFd{KD#:JJtD#:E- 2 

4%()STJJLS)))s   Bc                   *    \ rS rSrS rSrS rS rSrg)r+   i  c                     UR                   nUS S S:X  aT  USS S:w  aK  UR                  (       a:  UR                  S:w  a*  UR                  U R                  5       ;  a  [        S5      eg U R	                  U5      $ )Nr;   rx  r  rb  	localhost-file:// scheme is supported only on localhost)r   r}   	get_namesr   open_local_file)r   r  rC   s      rH   	file_openFileHandler.file_open  sm    llr7d?s1Qx3CHHK'88t~~//NOO 0 '',,rI   Nc                    [         R                  ci   [        [        R                  " S5      S   [        R                  " [        R
                  " 5       5      S   -   5      [         l        [         R                  $ [         R                  $ ! [        R                   a2    [        R                  " S5      4[         l         [         R                  $ f = f)Nr  r;   )r+   namesr  r%  gethostbyname_exgethostnamegaierrorgethostbynamer   s    rH   r  FileHandler.get_names  s    $I$)++K8;++F,>,>,@A!DE%F!
    {    ?? I%+%9%9+%F$H!   Is   AB 4CCc                 r   SS K nSS KnUR                  nUR                  n[	        U5      n [
        R                  " U5      nUR                  nUR                  R                  UR                  SS9n	UR                  U5      S   n
UR                  " SU
=(       d    SX4-  5      nU(       a  [        U5      u  pLU(       a$  W(       dH  [        U5      U R                  5       ;   a+  U(       a	  SU-   U-   nOSU-   n[!        [#        US5      X5      $ ['        S5      e! [$         a  n['        U5      eS nAff = f)	Nr   Tusegmtz6Content-type: %s
Content-length: %d
Last-modified: %s

text/plainfile://rbzfile not on local host)email.utils	mimetypesr}   r   r5   rY   statst_sizeutils
formatdatest_mtime
guess_typemessage_from_stringr   _safe_gethostbynamer  r   rB   rr   r   )r   r  emailr  r}   re   	localfilestatsrm   modifiedmtyperi   r  origurlexps                  rH   r  FileHandler.open_local_file  s   xx<< *		 GGI&E==D{{--ennT-JH((215E//K&,789G '-
1$74>>;KK'$.9G'(2G!$y$"7JJ /00  	 3-	 s   C#D 
D6&D11D6r   )	r   r   r   r   r  r  r  r  r   r   rI   rH   r+   r+     s    - E!1rI   r+   c                 d     [         R                  " U 5      $ ! [         R                   a     g f = frK   )r%  r  r  )r}   s    rH   r  r    s.    ##D))?? s    //c                        \ rS rSrS rS rSrg)r,   i  c                    SS K nSS KnUR                  nU(       d  [        S5      e[	        U5      u  pEUc  UR
                  nO[        U5      n[        U5      u  pdU(       a  [        U5      u  pgOS n[        U5      nU=(       d    SnU=(       d    Sn [        R                  " U5      n[        UR                  5      u  pU	R                  S5      n[!        [#        [        U5      5      nUS S US   pU(       a  US   (       d  USS  n U R%                  XgXEXR&                  5      nU=(       a    S=(       d    SnU
 H?  n[)        U5      u  nnUR+                  5       S	:X  d  M'  US
;   d  M/  UR-                  5       nMA     UR/                  X5      u  nnSnUR1                  UR2                  5      S   nU(       a  USU-  -  nUb  US:  a  USU-  -  n[4        R6                  " U5      n[9        UUUR2                  5      $ ! [         a  n[        U5      eS nAff = f! UR:                   a  n[        U5      UeS nAff = f)Nr   ftp error: no host givenru   rb  rQ   rT   r  Dr   aAr   r  rY  r  zContent-type: %s
zContent-length: %d
)ftplibr  r}   r   r   FTP_PORTra   r   r   r   r%  r  rr   r   r   r  r   mapconnect_ftprE   r   r{   upperretrfiler  rw   r  r  r   
all_errors)r   r  r  r  r}   r  r  r  rE  rZ   attrsdirsrM   fwr   attrr   rh   retrlenri   r  r  s                         rH   ftp_openFTPHandler.ftp_open  s   xx566%
<??Dt9D  %
'-LD&Ft}zr2	 ''-D !.zz#C&'#2YRdQ8D	)!!$D++NB<C&3D)$/e::<6):: ;;=D	 
 ++d1KBG((6q9E/%77"w!|1G;;//8Gb'3<<881  	 3-	 2    	)3-S(	)s>   H AH  &H  .BH  
HHH I0H<<Ic           
          [        XX4XVSS9$ )NF)
persistent)
ftpwrapper)r   r  r  r}   r  r  rE   s          rH   r  FTPHandler.connect_ftp  s    $D%*, 	,rI   r   N)r   r   r   r   r  r  r   r   rI   rH   r,   r,     s    2)h,rI   r,   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
r-   i  c                 J    0 U l         0 U l        SU l        SU l        SU l        g )Nr   <   r/  )cacherE   soonestdelay	max_connsr   s    rH   r   CacheFTPHandler.__init__  s%    

rI   c                     Xl         g rK   )r  )r   ts     rH   
setTimeoutCacheFTPHandler.setTimeout&  s    
rI   c                     Xl         g rK   )r  )r   rW  s     rH   setMaxConnsCacheFTPHandler.setMaxConns)  s    rI   c                 z   XUSR                  U5      U4nXpR                  ;   a0  [        R                  " 5       U R                  -   U R                  U'   OI[        XX4XV5      U R                  U'   [        R                  " 5       U R                  -   U R                  U'   U R                  5         U R                  U   $ )Nrb  )joinr  r0  r  rE   r  check_cache)r   r  r  r}   r  r  rE   r   s           rH   r  CacheFTPHandler.connect_ftp,  s    $7** $		djj 8DLL(t)-8DJJsO $		djj 8DLLzz#rI   c                    [         R                   " 5       nU R                  U::  aj  [        U R                  R	                  5       5       HC  u  p#X1:  d  M  U R
                  U   R                  5         U R
                  U	 U R                  U	 ME     [        [        U R                  R                  5       5      5      U l        [        U R
                  5      U R                  :X  a  [        U R                  R	                  5       5       H0  u  p#X0R                  :X  d  M  U R
                  U	 U R                  U	   O   [        [        U R                  R                  5       5      5      U l        g g rK   )r0  r  r   rE   r   r  r   minvaluesrc   r  )r   r  rY  rZ  s       rH   r  CacheFTPHandler.check_cache7  s   IIK<<1T\\//125JJqM'')

1Q	 3
 4 3 3 567 tzz?dnn,T\\//12$

1Q	 3
 tDLL$7$7$9:;DL -rI   c                     U R                   R                  5        H  nUR                  5         M     U R                   R                  5         U R                  R                  5         g rK   )r  r  r   clearrE   )r   conns     rH   clear_cacheCacheFTPHandler.clear_cacheK  sB    JJ%%'DJJL (

rI   )r  r  r  r  rE   N)r   r   r   r   r   r	  r  r  r  r  r   r   rI   rH   r-   r-     s     	<(rI   r-   c                       \ rS rSrS rSrg)r.   iQ  c                 |   UR                   nUR                  SS5      u  p4UR                  SS5      u  pT[        U5      nUR                  S5      (       a  [        R
                  " U5      nUS S nU(       d  Sn[        R                  " SU[        U5      4-  5      n[        [        R                  " U5      Xb5      $ )Nr  rT   rA  z;base64itext/plain;charset=US-ASCIIz$Content-type: %s
Content-length: %d
)rw   r  r   endswithr  decodebytesr  r  rc   r   ioBytesIO)r   r  rC   rg  rD   	mediatyperi   s          rH   	data_openDataHandler.data_openR  s     llyyQ'**S+	  %i((%%d+D!#2I5I++,TD	"-# $ "**T*G99rI   r   N)r   r   r   r   r#  r   r   rI   rH   r.   r.   Q  s    :rI   r.   rN  nt)r5   r4   c                     U S S S:X  a  U SS  n OU S S S:X  a  U SS  n [         R                  " 5       n[         R                  " 5       n[        XUS9$ )Nr  z///r;      z//localhost/   rc  errors)r  getfilesystemencodinggetfilesystemencodeerrorsr   pathnamerc  r*  s      rH   r5   r5   x  sa     BQ<5   |Hcr]n,}H,,...0x6BBrI   c                     U S S S:X  a  SU -   n [         R                  " 5       n[         R                  " 5       n[        XUS9$ )Nr;   rx  r)  )r  r+  r,  r
   r-  s      rH   r4   r4     sF     BQ<4 hH,,...0X@@rI   c                       \ rS rSrSrS\-  rSS jrS rS r	S r
S rSS	 jrSS
 jrSS jrSS jrS rSS jrSS jrS r\(       a  S rSS jrS rS rS rSS jrSrg)r9   i  Nr   c                 r   SSU R                   R                  0-  n[        R                  " U[        SS9  Uc
  [        5       nXl        UR                  S5      U l        UR                  S5      U l	        SU R                  4S/U l        / U l        [        R                  U l        S U l        ["        U l        g )	NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsclassr  )
stacklevelkey_file	cert_filez
User-Agent)Acceptz*/*)r  r   r  r  DeprecationWarningr6   r  r   r4  r5  versionr   _URLopener__tempfilesrY   rq   _URLopener__unlink	tempcacheftpcache)r   r  x509rE  s       rH   r   URLopener.__init__  s    47>@W@W6XYc-!<? lG,+.($,,79JK		 !rI   c                 $    U R                  5         g rK   )r   r   s    rH   __del__URLopener.__del__  s    

rI   c                 $    U R                  5         g rK   )cleanupr   s    rH   r   URLopener.close  s    rI   c                    U R                   (       a4  U R                    H  n U R                  U5        M     U R                   S S 2	 U R                  (       a  U R                  R	                  5         g g ! [         a     Mb  f = frK   )r9  r:  rr   r;  r  )r   rM   s     rH   rC  URLopener.cleanup  sn     ((MM$' )
   #>>NN  "   s   A33
B Bc                 :    U R                   R                  U5        g rK   )r   r`   )r   r  s     rH   	addheaderURLopener.addheader  s     	t$rI   c                    [        [        U5      5      n[        USS9nU R                  (       a8  XR                  ;   a)  U R                  U   u  p4[	        US5      n[        XTU5      $ [        U5      u  pgU(       d  SnX`R                  ;   a-  U R                  U   n[        U5      u  pi[        U	5      u  pX4nOS nSU-   nX`l	        UR                  SS5      n[        X5      (       a  US:X  a*  U(       a  U R                  XU5      $ U R                  X5      $  Uc  [        X5      " U5      $ [        X5      " Xr5      $ ! [        [         4 a    e ["         a  n[#        S	U5      UeS nAff = f)
Nz%/:=&?~#+!$,;'@()*[]|rd  r  rM   open_-r   r  zsocket error)r	   r   r
   r;  rB   r   r   r  r   r   rU  r   open_unknown_proxyopen_unknownr   r   r   rr   )r   r  rD   re   ri   rh   urltyperC   rz  	proxyhostr}   r   r^   rE  s                 rH   rB   URLopener.open  s[   7+,&=>>>g7 $w 7Hh%Bb733!'*Gll"LL)E!+E!2G'	2ND/CE 	||C%t""d.?&?..utDD((77	8|t*3//t*3558$ 	 	8.#.C7	8s   D? .D? ?E+E&&E+c                 6    [        U5      u  p4[        SSU5      e)N	url errorzunknown url typer   rr   )r   r  rD   r   rC   s        rH   rO  URLopener.open_unknown  s    w'	k#5t<<rI   c                 <    [        U5      u  pE[        SSU-  U5      e)NrT  zinvalid proxy for %srU  )r   rz  r  rD   r   rC   s         rH   rN  URLopener.open_unknown_proxy  s#    w'	k#9D#@%HHrI   c                    [        [        U5      5      nU R                  (       a  XR                  ;   a  U R                  U   $ [        U5      u  pVUcX  U(       a  US:X  aK   U R	                  U5      nUR                  5       nUR                  5         [        [        U5      S   5      U4$ U R                  X5      n UR                  5       n	U(       a  [        US5      n
O[        U5      u  p[        U=(       d    S5      u  p[        U=(       d    S5      u  p[        U=(       d    S5      u  p[        R                  R                  U5      S   n[         R"                  " U5      u  pU R$                  R'                  U5        [        R(                  " US5      n
 X)4nU R                  b  XR                  U'   SnSnSnSnSU	;   a  [+        U	S	   5      nU(       a
  U" UUU5        UR-                  U5      =n(       aO  U[/        U5      -  nU
R1                  U5        US-  nU(       a
  U" UUU5        UR-                  U5      =n(       a  MO  U
R                  5          UR                  5         US:  a  UU:  a  [3        S
UU4-  U5      eU$ ! [         a     GNf = f! U
R                  5         f = f! UR                  5         f = f)NrM   rT   rN   ru   rP   rQ   r   rR   rS   rU   )r	   r   r;  r   r  rX   r   r5   r   rr   rB   r   r   rY   rZ   splitextr\   mkstempr9  r`   fdopenra   rb   rc   rd   r   )r   rC   re   rf   rD   r   url1rh   r   ri   rj   garbagerZ   suffixfdrk   rl   rm   rb   rn   ro   s                        rH   retrieveURLopener.retrieve  ss    Ys^$>>c^^3>>#&&_
TTV^))$/wwy
#Jt$4Q$78$>> YYs!"	ggiG8T* *3 *4:2 6 +DJB 7 *4:2 6))$/2!)!1!1&!9  ''1iiD)!*>>-*0NN3'#w.w'789DxT2!wwr{*e*CJ&DIIe$MH!"8R6  "wwr{*e* 		HHJ 19&C, &( ( [  F 		HHJs9   "A	J >CJ6 B0J! J6 
JJ!J33J6 6Kc                 H   S nS n[        U[        5      (       a/  [        U5      u  pgU(       a  [        U5      u  pF[	        U5      nUnOUu  pg[        U5      u  pV[        U5      u  pU
nS nU	R                  5       S:w  a  S nOF[        U
5      u  pU(       a  [        U5      u  pHU(       a  U	< SU< U
< 3n[        U5      (       a  UnU(       d  [        SS5      eU(       a?  [	        U5      n[        R                  " UR                  5       5      R                  S5      nOS nU(       a?  [	        U5      n[        R                  " UR                  5       5      R                  S5      nOS nU" U5      n0 nU(       a  SU-  US'   U(       a  SU-  US'   U(       a  XS	'   S
US'   U R                   H
  u  nnUX'   M     Ub  SUS'   UR                  SXsU5        OUR                  SX~S9   UR                  5       nSUR(                  s=::  a  S:  a(  O  O%[+        UUR,                  SU-   UR(                  5      $ U R/                  UUR0                  UR(                  UR2                  UR,                  U5      $ ! [         R"                  R$                   a    ['        S5      ef = f)Nr  z://z
http errorrx  r  zBasic %srd  r  rv   r   r  ry  zContent-Typer   r   r  z$http protocol error: bad status linerB  rC  http:)r  r  r   r   r   r   r{   r  rr   r  r  r  r  r   r|   r  r  r)  BadStatusLiner   statusr   rE  
http_errorrh   r  )r   connection_factoryrC   rD   user_passwdproxy_passwdr}   r   realhostrP  r   
proxy_authr  	http_connri   r  r   r   s                     rH   _open_generic_httpURLopener._open_generic_httpC  sv    c3'_ND$.t$4!t}H ND!+D!1L&x0MGCK}}&(!+D!1,6x,@)K.5xFH))#D7<AA"<0L)),*=*=*?@GGPJJ!+.K##K$6$6$89@@IDD&t,	-7*-DG)*(2T(9GO$&FO
 !(!__MFE#GO - &IGN#fhg>eX?	C ,,.H (//'C'hgm&oo/ / ??X[[(,,F F {{(( 	CABB	Cs   *I7 7*J!c                 V    U R                  [        R                  R                  X5      $ rK   )rn  r  r)  rj  r   rC   rD   s      rH   	open_httpURLopener.open_http  s    &&t{{'A'A3MMrI   c                     SU-  n[        X5      (       a,  [        X5      nUc  U" XX4U5      n	O
U" XX4XV5      n	U	(       a  U	$ U R                  XX4U5      $ )Nzhttp_error_%d)r   r   r  )
r   rC   rh   errcodeerrmsgri   rD   r^   r   rk   s
             rH   rg  URLopener.http_error  s`     (4T(F|'B'Hf}&&sIIrI   c                 <    UR                  5         [        XXES 5      erK   )r   r   r   rC   rh   ru  rv  ri   s         rH   r  URLopener.http_error_default  s    

ft<<rI   c                    U R                   (       d  U R                  (       a~  [        R                  R                  R
                  n[        R                  R                  U5      nUR                  U R                  U R                   5        UR                  b  SUl        OS n[        R                  R	                  XS9$ )NTr<   )	r4  r5  r  r)  r(  r  r  load_cert_chainpost_handshake_auth)r   r}   r  r=   s       rH   _https_connectionURLopener._https_connection  s    }}#{{::DD++;;LI''F ..:26G/;;..t.EErI   c                 :    U R                  U R                  X5      $ rK   )rn  r~  rq  s      rH   
open_httpsURLopener.open_https  s    **4+A+A3MMrI   c                     [        U[        5      (       d  [        S5      eUS S S:X  a+  USS S:w  a"  USS R                  5       S:w  a  [	        S5      eU R                  U5      $ )	NzEfile error: proxy support for file protocol currently not implementedr;   rx  r  rb  r'  z
localhost/r  )r  r  r   r{   r   r  r   s     rH   	open_fileURLopener.open_file  se    #s##bccr7d?s1Qx33q9??3D3TLMM'',,rI   c                    SS K nSS Kn[        U5      u  pE[        U5      n [        R
                  " U5      nUR                  n	UR                  R                  UR                  SS9n
UR                  U5      S   nUR                  " SU=(       d    SX4-  5      nU(       d&  UnUS S S:X  a  SU-   n[!        [#        US	5      X5      $ [%        U5      u  pNU(       dl  [&        R(                  " U5      [+        5       4[-        5       -   ;   a>  UnUS S S:X  a  SU-   nOUS S
 S:X  a  [/        SU-  5      e[!        [#        US	5      X5      $ [        S5      e! [         a%  n[        UR                  UR                  5      eS nAff = f)Nr   Tr  z6Content-Type: %s
Content-Length: %d
Last-modified: %s
r  rT   rb  r  r  r;   z./zAlocal file url may start with / or file:. Unknown url of type: %sz#local file error: not on local host)r  r  r   r5   rY   r  rr   r   strerrorre   r  r  r  r  r  r  r   rB   r   r%  r  r  thishostr   )r   rC   r  r  r}   rM   	localnamer  erm   r  r  ri   urlfiler  s                  rH   r  URLopener.open_local_file  sw   _
 &		3GGI&E }};;))%..)F$$S)!,++G"lD345 GBQx3#d*d9d3WFF%
##D)y{nxz.IJGBQx3#d*bqT! !dgj!jkkd9d3WFF<==-  	31::qzz22	3s   E 
F E>>Fc                    [        U[        5      (       d  [        S5      eSS Kn[	        U5      u  p4U(       d  [        S5      e[        U5      u  p5[        U5      u  pcU(       a  [        U5      u  pgOS n[        U5      n[        U=(       d    S5      n[        U=(       d    S5      n[        R                  " U5      nU(       d  SS KnUR                  nO[        U5      n[        U5      u  pI[        U5      nUR                  S5      n
U
S S U
S   pU
(       a  U
S   (       d  U
SS  n
U
(       a  U
S   (       d  SU
S'   XcUSR!                  U
5      4n[#        U R$                  5      [&        :  aO  [)        U R$                  5       H6  nX:w  d  M
  U R$                  U   nU R$                  U	 UR+                  5         M8      XR$                  ;  a  [-        XgX5U
5      U R$                  U'   U(       d  SnOS	nU	 H?  n[/        U5      u  nnUR1                  5       S
:X  d  M'  US;   d  M/  UR3                  5       nMA     U R$                  U   R5                  X5      u  nnUR7                  SU-   5      S   nSnU(       a  USU-  -  nUb  US:  a  USU-  -  n[8        R:                  " U5      n[=        UUSU-   5      $ ! [?        5        a  n[        SU 35      UeS nAff = f)NzCftp error: proxy support for ftp protocol currently not implementedr   r  ru   rb  rQ   rT   r  r  r   r  zftp:zContent-Type: %s
zContent-Length: %d
ftp error: ) r  r  r   r  r   r   r   r   r   r%  r  r  r  ra   r   r  r  rc   r<  MAXFTPCACHEr   r   r  r   r{   r  r  r  r  r  r   	ftperrors)r   rC   r  r}   rZ   r  r  r  r  r  r  rM   r   rY  rZ  r   r  r   rh   r  r  ri   r  s                          rH   open_ftpURLopener.open_ftp  s   #s##`aa_
8$>??%
%
T 2vft}tzr"2&##D)??Dt9D &t}zz##2YRdQQRQ3a$.t}}+$--(8a(Aa(GGI	 )
	9--'tT> c"$)$/e::<6):: ;;=D	 
 !MM#.77CMR((#6q9EG/%77"w!|1G;;//8Gb'6C<88{ 	9[./S8	9s&    AJ: J: &BJ: :KKKc           
      v   [        U[        5      (       d  [        S5      e UR                  SS5      u  p2U(       d  SnUR                  S5      nUS:  a  S	X4S  ;  a  X4S-   S  nUS U nOS
n/ nUR                  S[        R                  " S[        R                  " [        R                  " 5       5      5      -  5        UR                  SU-  5        US:X  a5  [        R                  " UR                  S5      5      R                  S5      nO[        U5      nUR                  S[!        U5      -  5        UR                  S
5        UR                  U5        SR#                  U5      n[$        R&                  " U5      n[(        R*                  " U5      n[-        XU5      $ ! [         a    [        SS5      ef = f)NzEdata error: proxy support for data protocol currently not implementedrA  rT   z
data errorzbad data URLr  ;r   r  ru   zDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr  r  zlatin-1zContent-Length: %d
)r  r  r   r  r   rr   rfindr`   r0  strftimegmtimer  r  r  r  r   rc   r  r  r  r   StringIOr   )	r   rC   rD   r   semirc  rE  ri   fs	            rH   	open_dataURLopener.open_data-  s}   #s##bcc	899S!,LT 0Dzz#19DK/FG}H;DH

:dmm,G,0KK		,DF F 	G

%,-x%%dkk'&:;BB9MD4=D

'#d)34

2

4iin++C0KK!c**5  	8,77	8s   F! !F8)	__tempfiles__unlinkr   r5  r<  r4  r  r;  r   rK   r  )r   r   r   r   r9  r   r8  r   r@  r   rC  rH  rB   rO  rN  ra  rn  rr  rg  r  	_have_sslr~  r  r  r  r  r  r   r   rI   rH   r9   r9     s     K ;.G!4#%"8H=
I:|ZFxNJ =
 	F	N->@89t'+rI   r9   c                       \ rS rSrS rS rSS jrS rSS jrSS jr	SS	 jr
SS
 jr  SS jr  SS jrSS jrSS jrSS jrSS jrSS jrS rSrg)r:   iW  c                 b    [         R                  " U /UQ70 UD6  0 U l        SU l        SU l        g )Nr   rN  )r9   r   
auth_cachetriesmaxtries)r   r  kwargss      rH   r   FancyURLopener.__init__Z  s/    41$1&1
rI   c                 "    [        X%SU-   U5      $ )Nrd  )r   ry  s         rH   r  !FancyURLopener.http_error_default`  s    "w}g>>rI   Nc                 L   U =R                   S-  sl          U R                  (       aV  U R                   U R                  :  a<  [        U S5      (       a  U R                  nOU R                  nU" XSSU5      SU l         $ U R                  XX4XV5      nUSU l         $ ! SU l         f = f)NrT   http_error_500r4  z)Internal Server Error: Redirect Recursionr   )r  r  r   r  r  redirect_internal)	r   rC   rh   ru  rv  ri   rD   r   rk   s	            rH   rq  FancyURLopener.http_error_302d  s    

a
	}}t}}!<4!122..D22DCSG#% DJ	 ++CW,3;FDJDJs   AB >B 	B#c                 
   SU;   a  US   nOSU;   a  US   nOg UR                  5         [        U R                  S-   U-   U5      n[        U5      nUR                  S;  a  [        XsUSU-  -   XR5      eU R                  U5      $ )Nr^  r_  r  r`  z( Redirection to url '%s' is not allowed.)r   r   r   r   rg  r   rB   )	r   rC   rh   ru  rv  ri   rD   rV  rn  s	            rH   r   FancyURLopener.redirect_internalv  s     Z(FgU^F

 S3.7F# ??">>F"FOP#) )
 yy  rI   c                 (    U R                  XX4XV5      $ rK   rq  r   rC   rh   ru  rv  ri   rD   s          rH   rs  FancyURLopener.http_error_301      ""3GWKKrI   c                 (    U R                  XX4XV5      $ rK   r  r  s          rH   rt  FancyURLopener.http_error_303  r  rI   c                 T    Uc  U R                  XX4XV5      $ U R                  XX4U5      $ rK   )rq  r  r  s          rH   ru  FancyURLopener.http_error_307  1    <&&sOO**3GWMMrI   c                 T    Uc  U R                  XX4XV5      $ U R                  XX4U5      $ rK   )rs  r  r  s          rH   rv  FancyURLopener.http_error_308  r  rI   c                    SU;  a  [         R                  XUX4U5        US   n[        R                  " SU5      n	U	(       d  [         R                  XUX4U5        U	R	                  5       u  pU
R                  5       S:w  a  [         R                  XUX4U5        U(       d  [         R                  XX#UU5        SU R                  -   S-   nUc  [        X5      " X5      $ [        X5      " XU5      $ )Nr
  ![ 	]*([^ 	]+)[ 	]+realm="([^"]*)"r  retry__basic_authr9   r  r  matchr  r{   r   r   r   rC   rh   ru  rv  ri   rD   ra  stuffr  rg  r  r^   s                rH   r  FancyURLopener.http_error_401  s     W,((B)0'C*+?G((B)0'C<<>W$((B)0'C((B$))#m3<4%c114%c$77rI   c                    SU;  a  [         R                  XUX4U5        US   n[        R                  " SU5      n	U	(       d  [         R                  XUX4U5        U	R	                  5       u  pU
R                  5       S:w  a  [         R                  XUX4U5        U(       d  [         R                  XX#UU5        SU R                  -   S-   nUc  [        X5      " X5      $ [        X5      " XU5      $ )Nr  r  r  retry_proxy_r  r  r  s                rH   r  FancyURLopener.http_error_407  s      w.((B)0'C,-?G((B)0'C<<>W$((B)0'C((B		)M9<4%c114%c$77rI   c                    [        U5      u  pESU-   U-   nU R                  S   n[        U5      u  p[        U	5      u  pU	R                  S5      S-   nXS  n	U R	                  XU5      u  pU(       d  U(       d  g [        USS9< S[        USS9< SU	< 3n	SU	-   U
-   U R                  S'   Uc  U R                  U5      $ U R                  Xc5      $ )Nhttp://r  ry  rT   ru   rK  r  r   r  r   r   get_user_passwdr
   rB   r   rC   r  rD   r}   r   rV  rz  rP  rQ  proxyselectorr   r  r  s                 rH   retry_proxy_http_basic_auth*FancyURLopener.retry_proxy_http_basic_auth  s    #CT!H,V$'.#-i#8 	NN3!#bM	++Ia@"'2"6"'R"8)E	(94}DV<99V$$99V**rI   c                    [        U5      u  pESU-   U-   nU R                  S   n[        U5      u  p[        U	5      u  pU	R                  S5      S-   nXS  n	U R	                  XU5      u  pU(       d  U(       d  g [        USS9< S[        USS9< SU	< 3n	SU	-   U
-   U R                  S'   Uc  U R                  U5      $ U R                  Xc5      $ )Nhttps://r   ry  rT   ru   rK  r  r  r  s                 rH   retry_proxy_https_basic_auth+FancyURLopener.retry_proxy_https_basic_auth  s    #Cd"X-W%'.#-i#8 	NN3!#bM	++Ia@"'2"6"'R"8)E	 *Y 6 FW<99V$$99V**rI   c                 &   [        U5      u  pEUR                  S5      S-   nXFS  nU R                  XBU5      u  pxU(       d  U(       d  g [        USS9< S[        USS9< SU< 3nSU-   U-   n	Uc  U R	                  U	5      $ U R	                  X5      $ )Nry  rT   ru   rK  r  r  r   r   r  r
   rB   
r   rC   r  rD   r}   r   r   r  r  rV  s
             rH   r  $FancyURLopener.retry_http_basic_auth  s    #CIIcNQBx++D;"4b1"63T;T!H,<99V$$99V**rI   c                 &   [        U5      u  pEUR                  S5      S-   nXFS  nU R                  XBU5      u  pxU(       d  U(       d  g [        USS9< S[        USS9< SU< 3nSU-   U-   n	Uc  U R	                  U	5      $ U R	                  X5      $ )Nry  rT   ru   rK  r  r  r  r  s
             rH   retry_https_basic_auth%FancyURLopener.retry_https_basic_auth	  s    #CIIcNQBx++D;"4b1"63T;d"X-<99V$$99V**rI   c                     US-   UR                  5       -   nX@R                  ;   a$  U(       a  U R                  U	 OU R                  U   $ U R                  X5      u  pVU(       d  U(       a  XV4U R                  U'   XV4$ )Nry  )r{   r  prompt_user_passwd)r   r}   r  r  r   r  r  s          rH   r  FancyURLopener.get_user_passwd	  sl    ckDJJL(//!OOC(s++..t;64.4??3/|rI   c           	          SS K n [        SU< SU< S35      nUR                  SU< SU< SU< S35      nXE4$ ! [         a    [        5          gf = f)Nr   zEnter username for z at z: zEnter password for z in r  )getpassinputKeyboardInterruptprint)r   r}   r  r  r  r  s         rH   r  !FancyURLopener.prompt_user_passwd%	  sR    	E4HID__ud&$ %F<  	G	s   4; AA)r  r  r  rK   )NF)r   )r   r   r   r   r   r  rq  r  rs  rt  ru  rv  r  r  r  r  r  r  r  r  r   r   rI   rH   r:   r:   W  sj    ?$!8LLNN FJ82 FJ82+$+$++	
rI   r:   c                  H    [         c  [        R                  " S5      q [         $ )Nr  )
_localhostr%  r  r   rI   rH   r  r  5	  s      ))+6
rI   c                     [         c<   [        [        R                  " [        R                  " 5       5      S   5      q [         $ [         $ ! [        R
                   a*    [        [        R                  " S5      S   5      q  [         $ f = f)Nr;   r  )	_thishostr  r%  r  r  r  r   rI   rH   r  r  =	  sw     	Gf55f6H6H6JKANOI 9  	Gf55kB1EFI	Gs   5A
 
6BBc                  <    [         c  SS Kn U R                  q [         $ r  )
_ftperrorsr  r  )r  s    rH   r  r  H	  s     &&
rI   c                  H    [         c  [        R                  " S5      q [         $ r   )
_noheadersr  r  r   rI   rH   	noheadersr  Q	  s      ..r2
rI   c                   F    \ rS rSr  SS jrS rS rS rS rS r	S	 r
S
rg)r  i[	  Nc                     Xl         X l        X0l        X@l        XPl        X`l        SU l        Xpl         U R                  5         g !   U R                  5         e = fr  )
r  r  r}   r  r  rE   refcount	keepaliveinitr   )r   r  r  r}   r  r  rE   r  s           rH   r   ftpwrapper.__init__^	  sM    				#	IIK	JJLs   A Ac                    SS K nSU l        UR                  5       U l        U R                  R	                  U R
                  U R                  U R                  5        U R                  R                  U R                  U R                  5        SR                  U R                  5      nU R                  R                  U5        g )Nr   rb  )r  busyFTPra  connectr}   r  rE   loginr  r  r  r  cwd)r   r  _targets      rH   r  ftpwrapper.initn	  sw    	::<DIIt||<tyy$++.((499%WrI   c                 h   SS K nU R                  5         US;   a  SnSnOSU-   nSn U R                  R                  U5        S nU(       a*  U(       d#   SU-   nU R                  R                  U5      u  pgU(       d  U R                  R                  S5        U(       aY  U R                  R                  5       n	  U R                  R                  U5         U R                  R                  U	5        SU-   nOSnU R                  R                  U5      u  pgSU l        [        UR                  S5      U R                  5      n
U =R                   S-  sl        UR#                  5         U
W4$ ! UR                   a/    U R                  5         U R                  R                  U5         GNgf = f! UR                   a,  n[        U5      S S S:w  a  [        S	U 35      Ue S nAGNoS nAff = f! UR                   a  n[        S
U-  5      UeS nAff = f! U R                  R                  U	5        f = f)Nr   )rY  r  zTYPE ArT   zTYPE zRETR r  550r  zftp error: %rzLIST LISTr  )r  endtransferra  voidcmdr  r  ntransfercmd
error_permr  r   pwdr  r  r   makefile
file_closer  r   )r   rM   r   r  cmdisdirr  r  r  r  ftpobjs              rH   r  ftpwrapper.retrfilew	  s   :XsqudNcAE	"HHS! Gn $ 5 5c : HHX&hhlln&MT* HHLL%n HH11#6MD	dmmD14??C

  G    	"IIKHHS!	" $$ Gv;r?e+"[#9:F ,G ",, M&'?@fLM HHLL%sM   E, "F. ;G- ,;F+*F+.G*>!G%%G*-H=HHH H1c                     U R                   (       d  g SU l          U R                  R                  5         g ! [        5        a     g f = fr  )r  ra  voidrespr  r   s    rH   r  ftpwrapper.endtransfer	  s<    yy		HH{ 		s   6 AAc                 T    SU l         U R                  S::  a  U R                  5         g g )NFr   )r  r  
real_closer   s    rH   r   ftpwrapper.close	  s$    ==AOO rI   c                     U R                  5         U =R                  S-  sl        U R                  S::  a#  U R                  (       d  U R                  5         g g g )NrT   r   )r  r  r  r  r   s    rH   r  ftpwrapper.file_close	  s@    ==AdnnOO '5rI   c                     U R                  5          U R                  R                  5         g ! [        5        a     g f = frK   )r  ra  r   r  r   s    rH   r  ftpwrapper.real_close	  s5    	HHNN{ 		s   - >>)
r  r  ra  r}   r  r  r  r  rE   r  )NT)r   r   r   r   r   r  r  r  r   r  r  r   r   rI   rH   r  r  [	  s0     @D  *!X
rI   r  c                     0 n / n[         R                   H~  n[        U5      S:  d  M  US   S:X  d  M  USS  R                  5       S:X  d  M8  [         R                  U   nUS S R                  5       nUR	                  X#U45        U(       d  Mz  X0U'   M     S[         R                  ;   a  U R                  SS 5        U H0  u  p#nUSS  S:X  d  M  U(       a  X0U'   M  U R                  US 5        M2     U $ )	Nr  ir   rz  REQUEST_METHODr  _proxy)rY   environrc   r{   r`   r   )r  environmentr^   r   
proxy_names        rH   getproxies_environmentr  	  s     GK

t9q=T"X_bc1Bg1MJJt$Ecr*JZ89u&+
#  2::%FD!#.Z9 &+
#J- $/ NrI   c                    Uc
  [        5       n US   nUS:X  a  gU R                  5       n [        U 5      u  p4UR	                  S5       H|  nUR                  5       nU(       d  M  UR                  S5      nUR                  5       nX5:X  d  X:X  a    gSU-   nUR                  U5      (       d  U R                  U5      (       d  M|    g   g! [         a     gf = f)NnoF*TrA  .)r  rB  r{   r   r  r  lstripr  )r}   r  no_proxyhostonlyr  r^   s         rH   proxy_bypass_environmentr"  	  s     (*4= 3::<D%NHs#zz|4;;s#D::<D4<:D  &&$--*=*= $ )  s   C
 

CCc                 @   SSK J n  SSKJnJn  [	        U 5      u  pVS nSU ;  a  US   (       a  gS n [        U" U5      5      nUR                  SS	5       H  n	U	(       d  M  [        R                  " S
U	5      n
U
b  Ub  U" U
R                  S5      5      nU
R                  S5      nUc'  SU
R                  S5      R                  S5      S-   -  nO[        USS  5      nUS:  d  US:  a  M  SU-
  nX-	  X-	  :X  a    gM  U" X	5      (       d  M    g   g! U a     Nf = f)Nr   fnmatch)AddressValueErrorIPv4Addressc                     U R                  S5      n[        [        [        U5      5      n[	        U5      S:w  a
  U/ SQ-   S S nUS   S-  US   S-  -  US   S	-  -  US
   -  $ )Nr  rM  )r   r   r   r   r      rT   r/  r;   r.  r  )r  r   r  ra   rc   )ipAddrr  s     rH   ip2num,_proxy_bypass_macosx_sysconf.<locals>.ip2num
  sm    S!Se_%u:?\)2A.EaB58r>2eAh!mDuQxOOrI   r  exclude_simpleT
exceptionsr   z(\d+(?:\.\d+)*)(/\d+)?rT   r;   r.      F)r%  	ipaddressr&  r'  r   ra   r   r  r  groupcount)r}   proxy_settingsr%  r&  r'  r!  r  r+  hostIPr   rW  r  masks                rH   _proxy_bypass_macosx_sysconfr6  	
  s.     8%NHP $*+F[*+  ##L"5hHH.6=V/!''!*%D771:D|AGGAJ,,S1A5648}ax4"99DDL1 2 T!!/ 62 9  s   D DDc                     SSK J n  [        U 5      u  pUR                  S5      nU H2  nUR                  5       nUS:X  a
  SU ;  a    gM#  U" X5      (       d  M2    g   g)Nr   r$  r  z<local>r  TF)r%  r   r  r  )r}   overrider%  r   proxy_overrider  s         rH   _proxy_bypass_winreg_overrider:  I
  s`      GD^^C(Nzz|9$ T    rI   darwin)_get_proxy_settings_get_proxiesc                 ,    [        5       n[        X5      $ rK   )r<  r6  )r}   r3  s     rH   proxy_bypass_macosx_sysconfr?  d
  s    ,.+DAArI   c                      [        5       $ rK   )r=  r   rI   rH   getproxies_macosx_sysconfrA  h
  s     ~rI   c                 P    [        5       nU(       a  [        X5      $ [        U 5      $ rK   )r  r"  r?  r}   r  s     rH   r  r  r
  s%     )*+D::.t44rI   c                  8    [        5       =(       d
    [        5       $ rK   )r  rA  r   rI   rH   r6   r6   
  s    %'F+D+FFrI   c                     0 n  SS K n UR                  UR                  S5      nUR	                  US5      S   nU(       Ga	  [        UR	                  US5      S   5      nSU;  a  SU;  a  SR                  U5      nUR                  S5       HN  nUR                  SS5      u  pg[        R                  " S	U5      (       d  US
;   a  SU-   nOUS:X  a  SU-   nXpU'   MP     U R                  S5      (       aU  [        R                  " SSU S   5      nU R                  S5      =(       d    UU S'   U R                  S5      =(       d    UU S'   UR                  5         U $ ! [         a    U s $ f = f! [        [        [        4 a     U $ f = f)Nr   ;Software\Microsoft\Windows\CurrentVersion\Internet SettingsProxyEnableProxyServerr  r  zhttp={0};https={0};ftp={0}rT   z(?:[^/:]+)://)r  r   ra  r  sockszsocks://z	^socks://z	socks4://r  r   )winregImportErrorOpenKeyHKEY_CURRENT_USERQueryValueExr  r   r  r  r  r   rz   Closerr   r   r   )r  rJ  internetSettingsproxyEnableproxyServerpr   addresss           rH   getproxies_registryrU  
  s    	"	%~~f.F.FN P --.>/<>>?AK!&"5"56F7D#FFG#I Jk)c.D">"E"Ek"RK$**3/A()Q%H88OW==#'??&/'&9G%0&07&:G(/H% 0 ;;w'' ff\;@PQG&-kk&&9&DWGFO'.{{7';'FwGG$""$ M  	N	B Y/ 	 	s#   E EE/ E,+E,/FFc                  8    [        5       =(       d
    [        5       $ rK   )r  rU  r   rI   rH   r6   r6   
  s     &'@+>+@@rI   c                      SS K n UR                  UR                  S5      nUR	                  US5      S   n[        UR	                  US5      S   5      nU(       a  U(       d  g[        X5      $ ! [         a     gf = f! [         a     gf = f)Nr   FrF  rG  ProxyOverride)rJ  rK  rL  rM  rN  r  rr   r:  )r}   rJ  rP  rQ  proxyOverrides        rH   proxy_bypass_registryrZ  
  s    			%~~f.F.FN P --.>/<>>?AK 3 34D5D!FFG!I JM
 -,TAA  		  		s#   A0 AB  0
A=<A= 
BBc                 P    [        5       nU(       a  [        X5      $ [        U 5      $ rK   )r  r"  rZ  rC  s     rH   r  r  
  s%     )*+D::(..rI   r  rK   )}r  r   r  r3  http.clientr  r   rY   r  r%  ri  r  r0  r\   rV   r  urllib.errorr   r   r   urllib.parser   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   urllib.responser   r   sslr  rK  __all__version_infor   rA   r&  r1   r2   r_   r7   r8   r  ASCIIry   r~   r   r   r3   r   r0   r   r   r  r    r!   r"   r#   r$   r%   r&   urandomr2  r'   r(   r)   rh  r*   r   r)  r@   r`   r   r/   r#  r%  r+   r  r,   r-   r.   r  r^   
nturl2pathr5   r4   r<  r9   r:   r  r  r  r  r  r  r  r  r  r  r"  r6  r:  platform_scproxyr<  r=  r?  rA  r  r6   rU  rZ  r   rI   rH   <module>rh     sy  h      	 	 	   
     C B" " " " "
 5 I$ ((!,,
F$B$B 3+3+j :x zz(BHH- k" k"ZI+ I+^"H8 8&# #";k ;o2+ o2d,B)>; )>V=* =*@Go G3#B 3>k# k#^3[ 4k   zzO OdK)B $
[*C 
s+ sl3% 3 4;;)**8* 8$ NN>"#+ #$6[ 6
)*V11+ 11f7, 7,r3j 3j:+ :B  77d?55C	A + +DXY Xz 
 	 
 
a aH#J J<@0 <<8:B5G WW_/bAB(/ (J+LeS  Is   8K K$#K$