ROOTPLOIT
Server: LiteSpeed
System: Linux server71.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
User: niphet (1079)
PHP: 5.3.29
Disabled: NONE
Upload Files
File: //usr/lib64/python3.8/http/__pycache__/server.cpython-38.opt-2.pyc
U

e5dï»ã@sdZdddddgZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZdd	lmZd
ZdZGdd„dejƒZGd
d„dejeƒZGdd„dej ƒZ!Gdd„de!ƒZ"dd„Z#da$dd„Z%dd„Z&Gdd„de"ƒZ'dd„Z(e!edddfdd„Z)e*dkrddl+Z+e+ ,¡Z-e-j.ddd d!e-j.d"d#d$d%d&e-j.d'd(e /¡d)d*e-j.d+d,de0d-d.d/e- 1¡Z2e2j3rÐe'Z4nee"e2j5d0Z4Gd1d2„d2eƒZ6e)e4e6e2j7e2j8d3dS)4z0.6Ú
HTTPServerÚThreadingHTTPServerÚBaseHTTPRequestHandlerÚSimpleHTTPRequestHandlerÚCGIHTTPRequestHandleréN)Úpartial)Ú
HTTPStatusa¹<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c@seZdZdZdd„ZdS)récCs4tj |¡|jdd…\}}t |¡|_||_dS)Né)ÚsocketserverÚ	TCPServerÚserver_bindZserver_addressÚsocketZgetfqdnÚserver_nameÚserver_port)ÚselfÚhostÚport©rú#/usr/lib64/python3.8/http/server.pyr
‰szHTTPServer.server_bindN)Ú__name__Ú
__module__Ú__qualname__Zallow_reuse_addressr
rrrrr…sc@seZdZdZdS)rTN)rrrZdaemon_threadsrrrrr‘sc
@sFeZdZdej ¡dZdeZe	Z
eZdZ
dd„Zdd„Zd	d
„Zdd„ZdEdd„ZdFdd„ZdGdd„Zdd„Zdd„Zdd„ZdHdd„Zdd„Ze dd „e ed!ƒed"d#ƒ¡Dƒ¡Zd$ee d%ƒ<d&d'„Z!d(d)„Z"dId*d+„Z#d,d-„Z$d.d/d0d1d2d3d4gZ%d
d5d6d7d8d9d:d;d<d=d>d?d@g
Z&dAdB„Z'dCZ(e)j*j+Z,dDd „e-j. /¡DƒZ0d
S)JrzPython/rz	BaseHTTP/úHTTP/0.9c
Csôd|_|j|_}d|_t|jdƒ}| d¡}||_| ¡}t	|ƒdkrLdSt	|ƒdkr&|d}zT| 
d¡srt‚| d	d
¡d
}| d¡}t	|ƒdkrœt‚t|dƒt|d
ƒf}Wn,tt
fk
râ| tjd
|¡YdSX|dkr|jdkrd|_|dkr | tjd|¡dS||_dt	|ƒkrBdksZn| tjd|¡dS|dd…\}}t	|ƒdkržd|_|dkrž| tjd|¡dS|||_|_|j 
d¡rÌd	|j d	¡|_ztjj|j|jd|_Wn‚tjjk
r(}z| tjdt|ƒ¡WY¢dSd}~XYnBtjjk
rh}z| tjdt|ƒ¡WY¢dSd}~XYnX|j dd¡}	|	 ¡dkrŽd|_n |	 ¡dkr®|jdkr®d|_|j dd¡}
|
 ¡dkrð|jdkrð|jdkrð|  ¡sðdSdS)NTz
iso-8859-1z
rFééÿÿÿÿzHTTP/ú/r	Ú.r
zBad request version (%r))r	r	zHTTP/1.1)r
rzInvalid HTTP version (%s)zBad request syntax (%r)ZGETzBad HTTP/0.9 request type (%r)z//)Z_classz
Line too longzToo many headersÚ
ConnectionÚÚcloseú
keep-aliveZExpectz100-continue)!ÚcommandÚdefault_request_versionÚrequest_versionÚclose_connectionÚstrÚraw_requestlineÚrstripÚrequestlineÚsplitÚlenÚ
startswithÚ
ValueErrorÚintÚ
IndexErrorÚ
send_errorrZBAD_REQUESTÚprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDÚpathÚlstripÚhttpÚclientZ
parse_headersÚrfileÚMessageClassÚheadersZLineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZ
HTTPExceptionÚgetÚlowerÚhandle_expect_100)rÚversionr)ÚwordsZbase_version_numberZversion_numberr"r2ÚerrZconntypeZexpectrrrÚ
parse_requests¬


þ
þþ
þ
ÿýýÿÿþ
z$BaseHTTPRequestHandler.parse_requestcCs| tj¡| ¡dS©NT)Úsend_response_onlyrZCONTINUEÚend_headers©rrrrr;xsz(BaseHTTPRequestHandler.handle_expect_100c
Csîz¬|j d¡|_t|jƒdkrBd|_d|_d|_| tj	¡WdS|jsTd|_
WdS| ¡sbWdSd|j}t||ƒs| tj
d|j¡WdSt||ƒ}|ƒ|j ¡Wn<tjk
rè}z| d|¡d|_
WY¢dSd}~XYnXdS)NiirTZdo_zUnsupported method (%r)zRequest timed out: %r)r6Úreadliner'r+r)r$r"r0rZREQUEST_URI_TOO_LONGr%r?ÚhasattrÚNOT_IMPLEMENTEDÚgetattrÚwfileÚflushrZtimeoutÚ	log_error)rZmnameÚmethodÚerrrÚhandle_one_requestŠs6

þ
z)BaseHTTPRequestHandler.handle_one_requestcCs"d|_| ¡|js| ¡qdSr@)r%rMrCrrrÚhandle¯szBaseHTTPRequestHandler.handleNcCsz|j|\}}Wntk
r.d\}}YnX|dkr<|}|dkrH|}| d||¡| ||¡| dd¡d}|dkrâ|tjtjtjfkrâ|j	|t
j|ddt
j|dddœ}| d	d
¡}| d|j
¡| dtt|ƒƒ¡| ¡|jd
kr|r|j |¡dS)N)ú???rOzcode %d, message %srr éÈF©Úquote)ÚcodeÚmessageÚexplainzUTF-8ÚreplacezContent-TypeúContent-LengthZHEAD)Ú	responsesÚKeyErrorrJÚ
send_responseÚsend_headerrZ
NO_CONTENTZ
RESET_CONTENTÚNOT_MODIFIEDÚerror_message_formatÚhtmlÚescapeÚencodeÚerror_content_typer&r+rBr"rHÚwrite)rrSrTrUZshortmsgZlongmsgZbodyZcontentrrrr0·s:þÿýz!BaseHTTPRequestHandler.send_errorcCs:| |¡| ||¡| d| ¡¡| d| ¡¡dS)NZServerZDate)Úlog_requestrAr[Úversion_stringÚdate_time_string©rrSrTrrrrZìs
z$BaseHTTPRequestHandler.send_responsecCsd|jdkr`|dkr0||jkr,|j|d}nd}t|dƒs@g|_|j d|j||f dd¡¡dS)NrrrÚ_headers_bufferz
%s %d %s
úlatin-1Ústrict)r$rXrErgÚappendr1r`rfrrrrAùs



ÿþz)BaseHTTPRequestHandler.send_response_onlycCsl|jdkr6t|dƒsg|_|j d||f dd¡¡| ¡dkrh| ¡dkrVd|_n| ¡d	krhd
|_dS)Nrrgz%s: %s
rhriZ
connectionr Tr!F)r$rErgrjr`r:r%)rÚkeywordÚvaluerrrr[s

ÿz"BaseHTTPRequestHandler.send_headercCs"|jdkr|j d¡| ¡dS)Nrs
)r$rgrjÚ
flush_headersrCrrrrBs
z"BaseHTTPRequestHandler.end_headerscCs(t|dƒr$|j d |j¡¡g|_dS)Nrgó)rErHrbÚjoinrgrCrrrrms
z$BaseHTTPRequestHandler.flush_headersú-cCs.t|tƒr|j}| d|jt|ƒt|ƒ¡dS)Nz
"%s" %s %s)Ú
isinstancerrlÚlog_messager)r&)rrSÚsizerrrrc s
ÿz"BaseHTTPRequestHandler.log_requestcGs|j|f|žŽdS©N)rr)rÚformatÚargsrrrrJ+sz BaseHTTPRequestHandler.log_errorcCsi|]}|d|d›“qS)z\xZ02xr)Ú.0ÚcrrrÚ
<dictcomp>;sz!BaseHTTPRequestHandler.<dictcomp>é éé z\\ú\cGs2||}tj d| ¡| ¡| |j¡f¡dS)Nz%s - - [%s] %s
)ÚsysÚstderrrbÚaddress_stringÚlog_date_time_stringÚ	translateÚ_control_char_table)rrurvrTrrrrr>s
þÿz"BaseHTTPRequestHandler.log_messagecCs|jd|jS)Nú )Úserver_versionÚsys_versionrCrrrrdXsz%BaseHTTPRequestHandler.version_stringcCs |dkrt ¡}tjj|ddS)NT)Zusegmt)ÚtimeÚemailÚutilsZ
formatdate)rZ	timestamprrrre\sz'BaseHTTPRequestHandler.date_time_stringc	CsBt ¡}t |¡\	}}}}}}}}	}
d||j|||||f}|S)Nz%02d/%3s/%04d %02d:%02d:%02d)r‡Ú	localtimeÚ	monthname)rZnowZyearZmonthZdayZhhZmmZssÚxÚyÚzÚsrrrrbsÿz+BaseHTTPRequestHandler.log_date_time_stringZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs
|jdS©Nr)Úclient_addressrCrrrr€psz%BaseHTTPRequestHandler.address_stringúHTTP/1.0cCsi|]}||j|jf“qSr)ÚphraseZdescription)rwÚvrrrrysÿ)NN)N)N)rprp)N)1rrrr~r<r*r†Ú__version__r…ÚDEFAULT_ERROR_MESSAGEr]ÚDEFAULT_ERROR_CONTENT_TYPErar#r?r;rMrNr0rZrAr[rBrmrcrJr&Ú	maketransÚ	itertoolsÚchainÚrangerƒÚordrrrdrerZweekdaynamer‹r€r1r4r5ZHTTPMessager7rÚ__members__ÚvaluesrXrrrrr•s\ij%
5


ÿ
þ	þcsŽeZdZdeZddœ‡fdd„
Zdd„Zdd	„Zd
d„Zdd
„Z	dd„Z
dd„Zdd„Ze
jshe
 ¡e
j ¡Ze dddddœ¡‡ZS)rzSimpleHTTP/N©Ú	directorycs(|dkrt ¡}||_tƒj||ŽdSrt)ÚosÚgetcwdr ÚsuperÚ__init__)rr rvÚkwargs©Ú	__class__rrr¤”sz!SimpleHTTPRequestHandler.__init__cCs.| ¡}|r*z| ||j¡W5| ¡XdSrt)Ú	send_headr ÚcopyfilerH©rÚfrrrÚdo_GETšs
zSimpleHTTPRequestHandler.do_GETcCs| ¡}|r| ¡dSrt)r¨r rªrrrÚdo_HEAD£sz SimpleHTTPRequestHandler.do_HEADcCs^| |j¡}d}tj |¡rÂtj |j¡}|j d¡sŒ| t	j
¡|d|d|dd|d|df}tj |¡}| d|¡| 
¡dSdD]&}tj ||¡}tj |¡r|}qÂq| |¡S| |¡}| d¡rè| t	jd	¡dSzt|d
ƒ}Wn&tk
r| t	jd	¡YdSXz"t | ¡¡}d|jkröd|jkröztj |jd¡}	Wnttttfk
r|YnzX|	j dkrš|	j!t"j#j$d
}	|	j t"j#j$kröt"j" %|j&t"j#j$¡}
|
j!dd}
|
|	krö| t	j'¡| 
¡| (¡WdS| t	j)¡| d|¡| dt*|dƒ¡| d| +|j&¡¡| 
¡|WS| (¡‚YnXdS)Nrrr	r
réZLocation)z
index.htmlz	index.htmzFile not foundÚrbzIf-Modified-Sincez
If-None-Match)Útzinfo)ZmicrosecondúContent-typerWéz
Last-Modified),Útranslate_pathr2r¡ÚisdirÚurllibÚparseZurlsplitÚendswithrZrZMOVED_PERMANENTLYZ
urlunsplitr[rBroÚexistsÚlist_directoryÚ
guess_typer0Ú	NOT_FOUNDÚopenÚOSErrorÚfstatÚfilenor8rˆr‰Zparsedate_to_datetimeÚ	TypeErrorr/Ú
OverflowErrorr-r°rVÚdatetimeÚtimezoneZutcZ
fromtimestampÚst_mtimer\r ÚOKr&re)rr2r«ÚpartsZ	new_partsZnew_urlÚindexZctypeZfsZimsZ
last_modifrrrr¨©s€ÿ


ÿÿÿ

ÿz"SimpleHTTPRequestHandler.send_headc
	CsØzt |¡}Wn$tk
r2| tjd¡YdSX|jdd„dg}ztjj	|j
dd}Wn"tk
r€tj 	|j
¡}YnXtj
|dd}t ¡}d	|}| d
¡| d¡| d|¡| d
|¡| d|¡| d¡|D]v}tj
 ||¡}|}	}
tj
 |¡r$|d}	|d}
tj
 |¡r:|d}	| dtjj|
ddtj
|	ddf¡qì| d¡d |¡ |d¡}t ¡}| |¡| d¡| tj¡| dd|¡| dtt|ƒƒ¡| ¡|S)NzNo permission to list directorycSs| ¡Srt)r:)ÚarrrÚ<lambda>rnz9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>)ÚkeyÚ
surrogatepass©ÚerrorsFrQzDirectory listing for %szZ<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">z
<html>
<head>z@<meta http-equiv="Content-Type" content="text/html; charset=%s">z<title>%s</title>
</head>z<body>
<h1>%s</h1>z	<hr>
<ul>rú@z<li><a href="%s">%s</a></li>z</ul>
<hr>
</body>
</html>
Ú
Úsurrogateescaperr±ztext/html; charset=%srW) r¡Úlistdirr½r0rr»Úsortrµr¶Úunquoter2ÚUnicodeDecodeErrorr^r_r~Úgetfilesystemencodingrjror´ÚislinkrRr`ÚioÚBytesIOrbÚseekrZrÅr[r&r+rB)
rr2ÚlistÚrZdisplaypathÚencÚtitleÚnameÚfullnameZdisplaynameZlinknameZencodedr«rrrr¹shþ
ÿ


ÿ
ÿþÿ


z'SimpleHTTPRequestHandler.list_directorycCsÎ| dd¡d}| dd¡d}| ¡ d¡}ztjj|dd}Wn tk
rbtj |¡}YnXt |¡}| d¡}t	d|ƒ}|j
}|D]0}tj 
|¡sŒ|tjtjfkr®qŒtj ||¡}qŒ|rÊ|d7}|S)Nú?r	rú#rrËrÌ)r*r(r·rµr¶rÓrÔÚ	posixpathÚnormpathÚfilterr r¡r2ÚdirnameÚcurdirÚpardirro)rr2Ztrailing_slashr=Zwordrrrr³:s$	


z'SimpleHTTPRequestHandler.translate_pathcCst ||¡dSrt)ÚshutilZcopyfileobj)rÚsourceZ
outputfilerrrr©Xsz!SimpleHTTPRequestHandler.copyfilecCsLt |¡\}}||jkr"|j|S| ¡}||jkr>|j|S|jdSdS)Nr)râÚsplitextÚextensions_mapr:)rr2ÚbaseZextrrrrºhs



z#SimpleHTTPRequestHandler.guess_typezapplication/octet-streamz
text/plain)rú.pyz.cz.h)rrrr•r…r¤r¬r­r¨r¹r³r©rºÚ	mimetypesZinitedZinitZ	types_mapÚcopyrëÚupdateÚ
__classcell__rrr¦rr…s$
	W:
üc	CsÎ| d¡\}}}tj |¡}| d¡}g}|dd…D],}|dkrL| ¡q6|r6|dkr6| |¡q6|r˜| ¡}|rœ|dkrŠ| ¡d}qœ|dkrœd}nd}|r®d ||f¡}dd |¡|f}d |¡}|S)Nràrrz..rr)Ú	partitionrµr¶rÓr*Úpoprjro)	r2Ú_ÚqueryÚ
path_partsZ
head_partsÚpartZ	tail_partZ	splitpathÚcollapsed_pathrrrÚ_url_collapse_paths.


rùcCsrtrtSzddl}Wntk
r*YdSXz| d¡daWn.tk
rldtdd„| ¡DƒƒaYnXtS)NrrÚnobodyr
r	css|]}|dVqdS)r
Nr)rwrŒrrrÚ	<genexpr>Ësznobody_uid.<locals>.<genexpr>)rúÚpwdÚImportErrorÚgetpwnamrYÚmaxZgetpwall)rürrrÚ
nobody_uid¿s rcCst |tj¡Srt)r¡ÚaccessÚX_OK)r2rrrÚ
executableÏsrc@sReZdZeedƒZdZdd„Zdd„Zdd„Z	d	d
gZ
dd„Zd
d„Zdd„Z
dS)rÚforkrcCs$| ¡r| ¡n| tjd¡dS)NzCan only POST to CGI scripts)Úis_cgiÚrun_cgir0rrFrCrrrÚdo_POSTås
þzCGIHTTPRequestHandler.do_POSTcCs| ¡r| ¡St |¡SdSrt)rrrr¨rCrrrr¨ószCGIHTTPRequestHandler.send_headcCsPt|jƒ}| dd¡}|d|…||dd…}}||jkrL||f|_dSdS)Nrr	TF)rùr2ÚfindÚcgi_directoriesÚcgi_info)rrøZdir_sepÚheadÚtailrrrrús


zCGIHTTPRequestHandler.is_cgiz/cgi-binz/htbincCst|ƒSrt)r)rr2rrrÚ
is_executablesz#CGIHTTPRequestHandler.is_executablecCstj |¡\}}| ¡dkS)N)ríz.pyw)r¡r2rêr:)rr2rrrrrÚ	is_pythonszCGIHTTPRequestHandler.is_pythonc)	Cs¦|j\}}|d|}| dt|ƒd¡}|dkrˆ|d|…}||dd…}| |¡}tj |¡rˆ||}}| dt|ƒd¡}q*qˆq*| d¡\}}}	| d¡}|dkrÆ|d|…||d…}
}n
|d}
}|d|
}| |¡}tj |¡s
| 	t
jd|¡dStj |¡s.| 	t
j
d|¡dS| |¡}
|jsF|
sh| |¡sh| 	t
j
d|¡dSt tj¡}| ¡|d	<|jj|d
<d|d<|j|d
<t|jjƒ|d<|j|d<tj |¡}||d<| |¡|d<||d<|	rð|	|d<|jd|d<|j  d¡}|r¸| !¡}t|ƒdkr¸ddl"}ddl#}|d|d<|d $¡dkr¸z"|d %d¡}| &|¡ 'd¡}Wn|j(t)fk
r’Yn&X| !d¡}t|ƒdkr¸|d|d<|j  d¡dkrÚ|j *¡|d<n|jd|d<|j  d¡}|r||d<|j  d ¡}|r||d!<g}|j +d"¡D]>}|dd…d#krR| ,| -¡¡n||d$d… !d%¡}q,d% .|¡|d&<|j  d'¡}|r”||d(<t/d|j 0d)g¡ƒ}d* .|¡}|rÀ||d+<d,D]}| 1|d¡qÄ| 2t
j3d-¡| 4¡|	 5d.d/¡}|jr|
g}d0|kr| ,|¡t6ƒ}|j7 8¡t 9¡}|dkr”t :|d¡\}}t; ;|j<gggd¡dr~|j< =d¡sNq~qN|r| >d1|¡dSz\zt ?|¡Wnt@k
rºYnXt A|j< B¡d¡t A|j7 B¡d¡t C|||¡Wn(|j D|jE|j¡t Fd2¡YnXn„ddlG} |g}!| |¡rrtHjI}"|" $¡ Jd3¡rf|"dd4…|"d5d…}"|"d6g|!}!d0|	kr†|! ,|	¡| Kd7|  L|!¡¡ztM|ƒ}#WntNtOfk
rÂd}#YnX| jP|!| jQ| jQ| jQ|d8}$|j $¡d9kr|#dkr|j< =|#¡}%nd}%t; ;|j<jRgggd¡dr>|j<jR Sd¡s
q>q
|$ T|%¡\}&}'|j7 U|&¡|'rj| >d:|'¡|$jV W¡|$jX W¡|$jY}(|(r˜| >d1|(¡n
| Kd;¡dS)<Nrr	rràrzNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEÚQUERY_STRINGZREMOTE_ADDRÚ
authorizationr
Z	AUTH_TYPEZbasicÚasciiú:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthÚCONTENT_LENGTHÚrefererÚHTTP_REFERERÚacceptz	

 éú,ZHTTP_ACCEPTz
user-agentÚHTTP_USER_AGENTZcookiez, ÚHTTP_COOKIE)rZREMOTE_HOSTrrrrzScript output followsú+r„ú=zCGI script exit status %#xr{zw.exeéûÿÿÿéüÿÿÿz-uzcommand: %s)ÚstdinÚstdoutrÚenvZpostz%szCGI script exited OK)Zr
rr+r³r¡r2r´ròr¸r0rr»ÚisfileZ	FORBIDDENrÚ	have_forkr
rïZdeepcopyÚenvironrdZserverrr1r&rr"rµr¶rÓr‘r8r9r*Úbase64Úbinasciir:r`ZdecodebytesÚdecodeÚErrorÚUnicodeErrorZget_content_typeZgetallmatchingheadersrjÚstriproräZget_allÚ
setdefaultrZrÅrmrVrrHrIrÚwaitpidÚselectr6ÚreadrJÚsetuidr½Údup2r¿ÚexecveZhandle_errorZrequestÚ_exitÚ
subprocessr~rr·rrZlist2cmdliner.rÀr-ÚPopenÚPIPEZ_sockZrecvZcommunicaterbrr r Ú
returncode))rÚdirÚrestr2ÚiZnextdirZnextrestZ	scriptdirrôrõZscriptZ
scriptnameZ
scriptfileZispyr!Zuqrestrr%r&ZlengthrrÚlineZuaÚcoZ
cookie_strÚkZ
decoded_queryrvrúÚpidÚstsr3ZcmdlineZinterpÚnbytesÚpÚdatar rZstatusrrrrs<





þþ
þ


ÿ








ü

zCGIHTTPRequestHandler.run_cgiN)rrrrEr¡r#Zrbufsizerr¨rr	r
rrrrrrrÔs
cGs4tj|tjtjdœŽ}tt|ƒƒ\}}}}}||fS)N)ÚtypeÚflags)rZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEÚnextÚiter)ZaddressZinfosZfamilyrBÚprotoZ	canonnameZsockaddrrrrÚ_get_best_familyÝsýrGr’i@c	Cs´t||ƒ\|_}||_|||ƒŠ}|j ¡dd…\}}d|krLd|›dn|}td|›d|›d|›d|›d	ƒz| ¡Wn&tk
r¤td	ƒt 	d
¡YnXW5QRXdS)Nr
rú[ú]zServing HTTP on z port z	 (http://z/) ...z&
Keyboard interrupt received, exiting.r)
rGZaddress_familyr1rZgetsocknameÚprintZ
serve_foreverÚKeyboardInterruptr~Úexit)	ÚHandlerClassÚServerClassZprotocolrÚbindZaddrZhttpdrZurl_hostrrrÚtestçsÿrPÚ__main__z--cgiÚ
store_truezRun as CGI Server)ÚactionÚhelpz--bindz-bZADDRESSz8Specify alternate bind address [default: all interfaces])ÚmetavarrTz--directoryz-dz9Specify alternative directory [default:current directory])ÚdefaultrTrZstoreràz&Specify alternate port [default: 8000])rSrVrBÚnargsrTrŸcseZdZ‡fdd„Z‡ZS)ÚDualStackServerc	s4t t¡|j tjtjd¡W5QRXtƒ ¡Sr)	Ú
contextlibÚsuppressÚ	ExceptionrZ
setsockoptZIPPROTO_IPV6ZIPV6_V6ONLYr£r
rCr¦rrr
sÿzDualStackServer.server_bind)rrrr
rñrrr¦rrXsrX)rMrNrrO)9r•Ú__all__rïrÂZemail.utilsrˆr^Zhttp.clientr4r×r™rîr¡râr-rèrrr~r‡Zurllib.parserµrYÚ	functoolsrrr–r—rrZThreadingMixInrZStreamRequestHandlerrrrùrúrrrrGrPrÚargparseÚArgumentParserÚparserÚadd_argumentr¢r.Ú
parse_argsrvZcgiZ
handler_classr rXrrOrrrrÚ<module>Ss¤þs
0
þ

ÿ
ÿÿýÿü