+
    i  c                   s   R t . RGOt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ R	IHt R
tRtRHt ! R R]P4                  4      t ! R R]P8                  ]4      t ! R R]4      t ! R R]P8                  ]4      t ! R R]P@                  4      t! ! R R]!4      t"R t#Rs$R t%R t& ! R R]"4      t'R t(]!]RRRRRR3R lt)]*R8X  Ed%   ^ RI+t+^ RI,t,]+PZ                  ! RR7      t.].P_                  RRRR 7       ].P_                  R!R"R#R$R%7       ].P_                  R&R']P`                  ! 4       R(R)7       ].P_                  R*R+R,RR-R.7       ].P_                  R/R0R1R%7       ].P_                  R2R0R3R%7       ].P_                  R4R0R5R%7       ].P_                  R6R]1R7R8R97       ].Pe                  4       t3]3Ph                  '       g$   ]3Pj                  '       d   ].Pm                  R:4       Rt7]3Pp                  '       di   ]3Ph                  '       g   ].Pm                  R;4        ]9! ]3Pp                  R<R=R>7      ;_uu_ 4       t:]:Pw                  4       Py                  4       t7RRR4       ]3P~                  '       d   ]'t@M]"t@ ! R@ RA4      tA ! RB RC]A]4      tB ! RD RE]A]4      tC]3Ph                  '       d   ]CM]BtD])! ]@]D]3P                  ]3P                  ]3P                  ]3Ph                  ]3Pj                  ]7RF7       R# R#   + '       g   i     L; i  ]= d   t>].Pm                  R?]> 24        Rt>A>LRt>A>ii ; i)Iz0.6
HTTPServerThreadingHTTPServerHTTPSServerThreadingHTTPSServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN)
HTTPStatusa  <!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            :root {
                color-scheme: light dark;
            }
        </style>
        <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>
ztext/html;charset=utf-8c                   s.   a  ] tR t^t o RtRtR tRtV tR# )r    TFc                s    \         P                  P                  V 4       V P                  R ,          w  r\        P
                  ! V4      V n        W n        R# )N   NN)socketserver	TCPServerserver_bindserver_addresssocketZgetfqdnserver_nameserver_port)selfhostports   &  $/usr/lib64/python3.14/http/server.pyr   ZHTTPServer.server_bind   s?    **40((,
!>>$/    )r   r   N)	__name__
__module____qualname____firstlineno__Zallow_reuse_addressZallow_reuse_portr   __static_attributes____classdictcell__)__classdict__s   @r   r    r       s        r   c                   s    ] tR t^tRtRtR# )r   T Nr   r   r   r   Zdaemon_threadsr   r   r   r   r   r          Nr   c                   sX   a a ] tR t^t oR	RRRRRR/V 3R llltV 3R ltR tRtVtV ;t	# )
r   keyfileNpasswordalpn_protocolsc               s   <  ^ RI pYn         Y@n        YPn        Y`n        Tf   R.MTT n        \        S	T `!  TTT4       R#   \         d    \        R4      hi ; i)    Nz3SSL module is missing; HTTPS support is unavailablezhttp/1.1)	sslImportErrorZRuntimeErrorcertfiler    r!   r"   super__init__)
r   r   RequestHandlerClassZbind_and_activater&   r    r!   r"   r$   	__class__s
   &&&&$$$$ r   r(   ZHTTPSServer.__init__   sq    	?
    +2ZL 	 	,*	,  	?  > ? ?	?s   A   Ac                s   < \         SV `  4        V P                  4       pVP                  V P                  R R7      V n        R# )T)Zserver_sideN)r'   server_activate_create_contextZwrap_socketr   )r   contextr*   s   & r   r+   ZHTTPSServer.server_activate   s7    !&&())$++4)Hr   c                s   V P                   P                  V P                   P                  P                  4      pVP	                  V P
                  V P                  V P                  4       VP                  V P                  4       V# N)
r$   Zcreate_default_contextZPurposeZCLIENT_AUTHZload_cert_chainr&   r    r!   Zset_alpn_protocolsr"   )r   r-      & r   r,   ZHTTPSServer._create_context   s]    ((11$((2B2B2N2NOt||T]]K""4#6#67r   )r"   r&   r    r!   r   r$   T)
r   r   r   r   r(   r+   r,   r   r   __classcell__r*   r      @@r   r   r      s7     ,>B,,/3, ,,I r   c                   s    ] tR t^tRtRtR# )r   Tr   Nr   r   r   r   r   r      r   r   c            	       sx  a ] tR t^t oR]P
                  P                  4       ^ ,          ,           tR],           t	]
t]tRtR tR tR tR tRR	 ltRR
 ltRR ltR tR tR tRR ltR t]P9                  ]P<                  ! ]! ^ 4      ]! ^^4      4       U u/ uF	  q RV R 2bK  	  up 4      t R] ]!! R4      &   R t"R t#RR lt$R t%. ROt&. R Ot'R t(Rt)]*PV                  PX                  t-].P^                  Pa                  4        Uu/ uF  pWPb                  VPd                  3bK  	  upt3Rt4Vt5R# u up i u upi )!r   zPython/z	BaseHTTP/HTTP/0.9c                s	   R pRV n         V P                  ;V n        pRV n        \	        V P
                  R4      pVP                  R4      pW0n        VP                  4       p\        V4      ^ 8X  d   R # \        V4      ^8  Edk   VR,          p VP                  R4      '       g   \        hVP                  R^4      ^,          pVP                  R4      p\        V4      ^8w  d   \        h\        ;QJ d    R V 4       F  '       g   K   RM	  R M! R V 4       4      '       d   \        R	4      h\        ;QJ d    R
 V 4       F  '       g   K   RM	  R M! R
 V 4       4      '       d   \        R4      h\        V^ ,          4      \        V^,          4      3pTR8  d   T P$                  R8  d   R T n        TR8  d*   T P                  \         P&                  RT,          4       R # Y n        ^\        V4      u;8:  d   ^8:  g,   M V P                  \         P"                  RV,          4       R # VR,          w  rx\        V4      ^8X  d:   RV n        VR8w  d*   V P                  \         P"                  RV,          4       R # RpWxuV n         V n        V P(                  P                  R4      '       d(   RV P(                  P+                  R4      ,           V n        V'       d
   / V n        R#  \.        P0                  P3                  V P4                  V P6                  R7      V n        T P,                  P?                  RR4      p
T
PA                  4       R8X  d	   RT n        M-T
PA                  4       R8X  d   T P$                  R8  d   R T n        T P,                  P?                  RR4      pTPA                  4       R8X  d;   T P$                  R8  d*   T P                  R8  d   T PC                  4       '       g   R # R#   \        \        3 d,    T P                  \         P"                  RT,          4        R # i ; i  \.        P0                  P8                   d6   p	T P                  \         P:                  R\	        T	4      4        Rp	?	R # Rp	?	i\.        P0                  P<                   d6   p	T P                  \         P:                  R\	        T	4      4        Rp	?	R # Rp	?	ii ; i) FNTz
iso-8859-1
zHTTP//.c              3   sJ   "   T F  qP                  4       '       * x  K  	  R # 5ir.   )Zisdigit.0Z	componentr/   r   	<genexpr>7BaseHTTPRequestHandler.parse_request.<locals>.<genexpr>e  s     O9,,...s   !#znon digit in http versionc              3   s>   "   T F  p\        V4      ^
8  x  K  	  R# 5i)i
   N)lenr8   r/   r   r:   r;   g  s     KNys9~*Ns   z unreasonable length http versionzBad request version (%r)zHTTP/1.1zInvalid HTTP version (%s)zBad request syntax (%r)r   ZGETzBad HTTP/0.9 request type (%r)z//)Z_classzLine too longzToo many headers
Connection close
keep-aliveZExpectz100-continue)   rB   )r	   r#   )"commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlineZrstriprequestlinesplitr<   Z
startswith
ValueErrorZanyint
IndexError
send_errorr   ZBAD_REQUESTprotocol_versionZHTTP_VERSION_NOT_SUPPORTEDpathZlstripheadershttpclientZparse_headersrfileMessageClassZLineTooLongZREQUEST_HEADER_FIELDS_TOO_LARGEZHTTPExceptiongetlowerhandle_expect_100)r   Zis_http_0_9versionrI   wordsZbase_version_numberZversion_numberrC   rP   ZerrZconntypeZexpect   &           r   parse_requestZ$BaseHTTPRequestHandler.parse_request@  s    )-)E)EEw $$..=!((0&!!#u:?u:?BiG))'22$$&-mmC&;A&>#!4!:!:3!? ~&!+$$3OO333OOOO$%@AA3KNK333KNKKK$%GHH!$^A%6!7^A=N9O!O 'D,A,AZ,O(-%'99/2EEG #* CJ#!#OO&&)K79 b	u:?$(D!%**4w>@ K")di 99%%dii..s33DI DL	;;44TZZ<@<M<M 5 ODL  <<##L"5>>w&$(D!nn,.##z1$)D!!!(B/LLNn,%%3$$
2))++S 
+ **.8: 	\ {{&& 	OO::C {{(( 	OO::"C
 	sa   A'O: 6O: 
O: %O: ;O: O: */O: -:P9 :8P65P69S*R S)S**SSc                sd    V P                  \        P                  4       V P                  4        R # r0   )send_response_onlyr   ZCONTINUEend_headersr      &r   rX   Z(BaseHTTPRequestHandler.handle_expect_100  s'     	
 3 34r   c                s    V P                   P                  R 4      V n        \        V P                  4      R8  d7   RV n        RV n        RV n        V P                  \        P                  4       R# V P                  '       g
   RV n
        R# V P                  4       '       g   R# RV P                  ,           p\        W4      '       g4   V P                  \        P                  RV P                  ,          4       R# \        W4      pV! 4        V P                  P!                  4        R#   \"         d%   pT P%                  RT4       RT n
         Rp?R# Rp?ii ; i)i  i   r>   NTZdo_zUnsupported method (%r)zRequest timed out: %r)rT   ZreadlinerH   r<   rI   rE   rC   rN   r   ZREQUEST_URI_TOO_LONGrF   r\   hasattrNOT_IMPLEMENTEDZgetattrwfileflushTimeoutError	log_error)r   ZmnameZmethodes   &   r   handle_one_requestZ)BaseHTTPRequestHandler.handle_one_request  s   	#'::#6#6u#=D 4''(50#% ')$!
 ? ?@'''(,%%%''DLL(E4''..-<> T)FHJJ 	NN2A6$(D!		s7   A.D* 2D* D* D* %AD* <,D* *E5EEc                s|    R V n         V P                  4        V P                   '       g   V P                  4        K$  R# )TN)rF   rh   r_   r`   r   handleZBaseHTTPRequestHandler.handle  s3     $!'''##% (r   Nc                s    V P                   V,          w  rEVf   TpVf   TpV P                  RW4       V P                  W4       V P	                  RR4       RpV^8  d   V\
        P                  \
        P                  \
        P                  39  d   V P                  RVR\        P                  ! VRR7      R	\        P                  ! VRR7      /,          pVP                  R
R4      pV P	                  RV P                  4       V P	                  R\        \        V4      4      4       V P!                  4        V P"                  R8w  d(   V'       d   V P$                  P'                  V4       R# R# R#   \         d    R R rT ELpi ; i)z???Nzcode %d, message %sr=   r?   codemessageFquoteexplainzUTF-8replacezContent-TypeContent-LengthZHEAD)	responsesKeyErrorrf   send_responsesend_headerr   Z
NO_CONTENTZRESET_CONTENTNOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typerG   r<   r^   rC   rc   write)r   rj   rk   rn   ZshortmsgZlongmsgZbodyZcontents   &&&&    r   rN   Z!BaseHTTPRequestHandler.send_error  sY   $	- $t 4H ?G?G,d<4)w/
 CK..#11#002 2
 004;;we<4;;we<4 G
 >>'95D^T-D-DE-s3t9~><<6!dJJT" '+!=  	- %ug	-s   E6 6FFc                s    V P                  V4       V P                  W4       V P                  R V P                  4       4       V P                  RV P	                  4       4       R# )ZServerZDateN)log_requestr]   rt   version_stringdate_time_stringr   rj   rk      &&&r   rs   Z$BaseHTTPRequestHandler.send_response)  sR     	.4#6#6#89!6!6!89r   c                s<   V P                   R 8w  d   Vf.   WP                  9   d   V P                  V,          ^ ,          pMRp\        V R4      '       g   . V n        V P                  P	                  RV P
                  W3,          P                  RR4      4       R# R# )r4   Nr>   _headers_bufferz
%s %d %s
latin-1strict)rE   rq   ra   r   appendrO   ry   r   r   r   r]   Z)BaseHTTPRequestHandler.send_response_only6  s    :->>)"nnT215G G4!233')$  ''**D:*;<BF!8=-. .r   c                sf   V P                   R 8w  dM   \        V R4      '       g   . V n        V P                  P                  V: RV: R2P	                  RR4      4       VP                  4       R8X  d?   VP                  4       R8X  d
   RV n        R# VP                  4       R	8X  d
   R
V n        R# R# R# )r4   r   z: r5   r   r   Z
connectionr?   Tr@   FN)rE   ra   r   r   ry   rW   rF   )r   Zkeywordvaluer   r   rt   Z"BaseHTTPRequestHandler.send_headerD  s    :-4!233')$  ''!(%088HMO ==?l*{{}'(,%,.(-% / +r   c                s    V P                   R 8w  d.   V P                  P                  R4       V P                  4        R# R# )r4   s   
N)rE   r   r   flush_headersr_   r`   r   r^   Z"BaseHTTPRequestHandler.end_headersR  s5    :-  ''0  .r   c                s    \        V R 4      '       d>   V P                  P                  RP                  V P                  4      4       . V n        R# R# )r   r   N)ra   rc   r{   joinr   r_   r`   r   r   Z$BaseHTTPRequestHandler.flush_headersX  s>    4*++JJSXXd&:&:;<#%D  ,r   c                s    \        V\        4      '       d   VP                  pV P                  R V P                  \        V4      \        V4      4       R# )z
"%s" %s %sN)Z
isinstancer   r   log_messagerI   rG   )r   rj   Zsizer   r   r|   Z"BaseHTTPRequestHandler.log_request]  s@     dJ''::D))3t9c$i	Ar   c                s.    V P                   ! V.VO5!   R # r.   )r   )r   formatargss   &&*r   rf   Z BaseHTTPRequestHandler.log_errorh  s     	'$'r   z\xZ02xz\\Z\c           	     s    W,          p\         P                  P                  V P                  4       : R V P	                  4       : RVP                  V P                  4      : R24       R# )z - - [z] 
N)sysstderrr{   address_stringlog_date_time_stringZ	translate_control_char_table)r   r   r   rk   s   &&* r   r   Z"BaseHTTPRequestHandler.log_message{  sP    ( -

--/335!++D,D,DEG 	Hr   c                sJ    V P                   R ,           V P                  ,           # ) )server_versionsys_versionr_   r`   r   r}   Z%BaseHTTPRequestHandler.version_string  s    ""S(4+;+;;;r   c                sv    Vf   \         P                   ! 4       p\        P                  P                  VRR7      # )NT)Zusegmt)timeemailutilsZ
formatdate)r   Z	timestamp   &&r   r~   Z'BaseHTTPRequestHandler.date_time_string  s-    		I{{%%i%==r   c           	     s    \         P                   ! 4       p\         P                  ! V4      w	  r#rErgrp
R W@P                  V,          W%Wg3,          pV# )z%02d/%3s/%04d %02d:%02d:%02d)r   Z	localtime	monthname)r   ZnowZyearZmonthZdayZhhZmmZssxZyZzZsr[   r   r   Z+BaseHTTPRequestHandler.log_date_time_string  sJ    iik04s0C-SbaA*^^E*Db.> >r   c                s(    V P                   ^ ,          # )r#   )client_addressr_   r`   r   r   Z%BaseHTTPRequestHandler.address_string  s     ""1%%r   HTTP/1.0)r   rF   rC   rQ   rP   rH   rE   rI   )NNr.   )-r   )ZMonZTueZWedZThuZFriZSatZSun)NZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDec)6r   r   r   r   r   rY   rJ   r   __version__r   DEFAULT_ERROR_MESSAGErv   DEFAULT_ERROR_CONTENT_TYPErz   rD   r\   rX   rh   ri   rN   rs   r]   rt   r^   r   r|   rf   rG   Z	maketrans	itertoolsZchainZranger   Zordr   r}   r~   r   Zweekdaynamer   r   rO   rR   rS   ZHTTPMessagerU   r   Z__members__ZvaluesZphraseZdescriptionrq   r   r   )ZcZvr   s   00@r   r   r      sh    R ckk//1!44K
 !;.N03 )sj$#J&3#j:..!&
	A( --'0uT{E$tDT'UV'U!2aW'UVX%*D	"H4<> DK;I& " ;;**L
 ''..00A 	
HHamm$$0II WHs   D2!D7c                   s   a a ] tR tRt oR],           tRtRRRRRRR	R
/;ttRR/V 3R llt	R t
R tR tR tR tR tR tRtVtV ;t# )r   i  zSimpleHTTP/z.gzzapplication/gzipz.Zapplication/octet-streamz.bz2zapplication/x-bzip2z.xzzapplication/x-xz	directoryNc               s   < Vf   \         P                  ! 4       p\         P                  ! V4      V n        \        SV `  ! V/ VB  R # r.   )osgetcwdZfspathr   r'   r(   )r   r   r   kwargsr*   s   &$*,r   r(   Z!SimpleHTTPRequestHandler.__init__  s6    		I9-$)&)r   c                s    V P                  4       pV'       d/    V P                  WP                  4       VP                  4        R # R #   TP                  4        i ; ir.   )	send_headcopyfilerc   r?   r   fr/   r   do_GETZSimpleHTTPRequestHandler.do_GET  sA    NNa,		  	s   A	 	Ac                sZ    V P                  4       pV'       d   VP                  4        R # R # r.   )r   r?   r   r/   r   do_HEADZ SimpleHTTPRequestHandler.do_HEAD  s    NNGGI r   c                s   V P                  V P                  4      pR p\        P                  P                  V4      '       Ed\   \        P
                  P                  V P                  4      pVP                  P                  R4      '       g   V P                  \        P                  4       V^ ,          V^,          V^,          R,           V^,          V^,          3p\        P
                  P                  V4      pV P                  RV4       V P                  RR4       V P                  4        R # V P                   FK  p\        P                  P                  W4      p\        P                  P!                  V4      '       g   KI  Tp M	  V P#                  V4      # V P%                  V4      pVP                  R4      '       d#   V P'                  \        P(                  R4       R #  \+        VR4      p \        P.                  ! TP1                  4       4      pRT P2                  9   Ed?   RT P2                  9  Ed-    \4        P6                  P9                  T P2                  R,          4      p	T	P:                  f+   T	P=                  \>        P@                  PB                  R	7      p	T	P:                  \>        P@                  PB                  J d   \>        P>                  PE                  TPF                  \>        P@                  PB                  4      p
T
P=                  ^ R
7      p
Y8:  dB   T P                  \        PH                  4       T P                  4        TPK                  4        R # T P                  \        PT                  4       T P                  RT4       T P                  R\W        T^,          4      4       T P                  RT PY                  TPF                  4      4       T P                  4        T#   \,         d%    T P'                  \        P(                  R4        R # i ; i  \L        \N        \P        \R        3 d     Li ; i   TPK                  4        h ; i)Nr6   ZLocationrp   Z0zFile not foundZrbzIf-Modified-SincezIf-None-Match)tzinfo)ZmicrosecondContent-typezLast-Modified)r6   z%2fz%2F)-translate_pathrP   r   isdirurllibparseZurlsplitendswithrs   r   ZMOVED_PERMANENTLYZ
urlunsplitrt   r^   index_pagesr   isfilelist_directory
guess_typerN   	NOT_FOUNDopenOSErrorZfstatfilenorQ   r   r   Zparsedate_to_datetimer   ro   datetimeZtimezoneZutcZfromtimestampZst_mtimeru   r?   	TypeErrorrM   ZOverflowErrorrK   OKrG   r~   )r   rP   r   ZpartsZ	new_partsZnew_urlZindexZctypeZfsZimsZ
last_modifs   &          r   r   Z"SimpleHTTPRequestHandler.send_head  sK    ""499-77==LL))$))4E::&&':;;"":#?#?@"1XuQxqC"1XuQx1	 ,,11)<  W5  !137  "))T177>>%(( D	 * **400% ==OOJ002BC	T4 A
'	!((*%B#t||3't||;(++;;%89;C zz) "kk1B1B1F1FkGzzX%6%6%:%::%-%6%6%D%DKK):):)>)>&@
 &0%7%7A%7%F
%, ..z/F/FG ,,.GGI#'z}}-^U3-s2a5z:_%%bkk24HQ  	OOJ002BC	 ":}jI 8	GGIsK   *O; 7AQ  0P- 0C9Q +BQ ;+P*)P*-QQ 
QQ Q!c                s    \         P                  ! V4      pTP                  R R7       . pT P                  pTP                  R^4      ^ ,          pTP                  R^4      ^ ,          p \        P                  P                  TRR7      p\        P                  ! TRR	7      p\        P                   ! 4       pR
T 2pTP#                  R4       TP#                  R4       TP#                  R4       TP#                  RT R24       TP#                  R4       TP#                  RT R24       TP#                  RT R24       TP#                  R4       T F  p\         P                  P%                  Y4      pT;r\         P                  P'                  T4      '       d   TR,           p	TR,           p
\         P                  P)                  T4      '       d
   TR,           p	TP#                  R\        P                  P+                  T
RR7      : R\        P                  ! T	RR	7      : R24       K  	  TP#                  R4       RP%                  T4      P-                  TR4      p\.        P0                  ! 4       pTP3                  T4       TP5                  ^ 4       T P7                  \        P8                  4       T P;                  RRT,          4       T P;                  R\=        \?        T4      4      4       T PA                  4        T#   \         d%    T P                  \        P
                  R 4        R# i ; i  \         d$    \        P                  P                  T4      p ELi ; i) zNo permission to list directoryNc                 s"    V P                  4       # r.   )rW   )Zar`   r   Z<lambda>Z9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>T  s
    	r   )Zkey#?surrogatepassZerrorsFrl   zDirectory listing for z<!DOCTYPE HTML>z<html lang="en">z<head>z<meta charset="z">zD<style type="text/css">
:root {
color-scheme: light dark;
}
</style>z<title>z</title>
</head>z<body>
<h1>z</h1>z	<hr>
<ul>r6   Z@z<li><a href="z	</a></li>z</ul>
<hr>
</body>
</html>
r   Zsurrogateescaper   ztext/html; charset=%srp   )!r   Zlistdirr   rN   r   r   ZsortrP   rJ   r   r   unquoteUnicodeDecodeErrorrw   rx   r   Zgetfilesystemencodingr   r   r   Zislinkrm   ry   ioZBytesIOr{   Zseekrs   r   rt   rG   r<   r^   )r   rP   ZlistrZdisplaypathZencZtitleZnameZfullnameZdisplaynameZlinknameZencodedr   s   &&           r   r   Z'SimpleHTTPRequestHandler.list_directoryE  s   	::d#D 			)	*ii!''Q/2!''Q/2	< ,,..{6E / GK kk+U;'')(6	"#	#$		?3%r*+	[\	75'!234	<we,-	Dww||D/H%))Kww}}X&&"Sj#:ww~~h''"SjHH||))(1@ * B{{;e<> ?  	
23))A,%%c+<=JJL		q	:==))@3)FG)3s7|+<=c  	OO$$13 		 " 	< ,,..{;K	<s#   L	 ,!L; 	+L87L8;*M)(M)c                s   VP                  R ^4      ^ ,          pVP                  R^4      ^ ,          p \        P                  P                  VRR7      pVP                  R4      p\        P                  ! V4      pVP                  R4      p\        RV4      pV P                  pV Fn  p\        P                  P                  V4      '       g&   V\        P                  \        P                  39   d   KO  \        P                  P                  W4      pKp  	  V'       d
   VR,          pV#   \         d$    \        P                  P                  T4      p ELi ; i)r   r   r   r   r6   N)rJ   r   r   r   r   r   	posixpathZnormpathfilterr   r   rP   ZdirnameZcurdirZpardirr   )r   rP   Ztrailing_slashrZ   Zwords   &&   r   r   Z'SimpleHTTPRequestHandler.translate_path  s    zz#q!!$zz#q!!$	.<<''_'ED s+!!$'

3tU#~~Dwwt$$BII0F(F77<<+D	 
 CKD " 	.<<''-D	.s   !D, ,*EEc                s2    \         P                  ! W4       R # r.   )shutilZcopyfileobj)r   ZsourceZ
outputfiler   r   r   Z!SimpleHTTPRequestHandler.copyfile  s     	6.r   c                s&   \         P                  ! V4      w  r#W0P                  9   d   V P                  V,          # VP                  4       pW0P                  9   d   V P                  V,          # \        P
                  ! V4      w  rEV'       d   V# R # )r   )r   splitextextensions_maprW   	mimetypesZguess_file_type)r   rP   ZbaseZextZguess_s   &&    r   r   Z#SimpleHTTPRequestHandler.guess_type  sx     &&t,	%%%&&s++iik%%%&&s++,,T2L)r   r   )z
index.htmlz	index.htm)r   r   r   r   r   r   r   r   Z_encodings_map_defaultr(   r   r   r   r   r   r   r   r   r   r1   r2   r3   r   r   r     st      #[0N-K!(%!	/ N+* *Vp;z</ * *r   c                 s:   V P                  R 4      w  rp\        P                  P                  V 4      p V P	                  R4      p. pVRR  F@  pVR8X  d   VP                  4        K  V'       g   K&  VR8w  g   K/  VP                  V4       KB  	  V'       d=   VP                  4       pV'       d$   VR8X  d   VP                  4        RpMVR8X  d   RpMRpV'       d   R P                  Wb34      pRRP                  V4      ,           V3pRP                  V4      pV# )r   r6   Nz..r7   r>   rA   )	partitionr   r   r   rJ   Zpopr   r   )	rP   r   queryZ
path_partsZ
head_partsZpartZ	tail_partZ	splitpathcollapsed_paths	   &        r   _url_collapse_pathr     s     ^^C(NDU<<%D CJJ3B4<NNTdckt%	  
 NN$	D  	c!		HHi/0	sxx
++Y7IXXi(Nr   c                  s   \         '       d   \         #  ^ RIp  T P                  R4      ^,          s \         #   \         d    Ru # i ; i  \         d0    ^\        R T P                  4        4       4      ,           s  \         # i ; i)r#   Nnobodyc              3   s2   "   T F  q^,          x  K  	  R# 5i)r	   Nr   )r9   r   r/   r   r:   Znobody_uid.<locals>.<genexpr>
  s     6~!1~s   rA   )r   pwdr%   Zgetpwnamrr   ZmaxZgetpwall)r   s    r   
nobody_uidr     s{     v7h'* M  	  7S6s||~666M7s    7 A
 AA
2BBc                 sL    \         P                  ! V \         P                  4      # r.   )r   ZaccessZX_OK)rP   r`   r   
executabler     s    99T277##r   c                   st   a a ] tR tRt oV 3R lt]! ]R4      t^ tR t	R t
R tRR.tR	 tR
 tR tRtVtV ;t# )r   i  c                sV   < ^ RI pVP                  RRR7       \        SV `  ! V/ VB  R# )r#   Nz!http.server.CGIHTTPRequestHandler)Zremove)i   i   )warningsZ_deprecatedr'   r(   )r   r   r   r   r*   s   &*, r   r(   ZCGIHTTPRequestHandler.__init__  s1    @$+ 	 	-$)&)r   forkc                s    V P                  4       '       d   V P                  4        R# V P                  \        P                  R 4       R# )zCan only POST to CGI scriptsN)is_cgirun_cgirN   r   rb   r_   r`   r   do_POSTZCGIHTTPRequestHandler.do_POST*  s0     ;;==LLNOO**.0r   c                sx    V P                  4       '       d   V P                  4       # \        P                  V 4      # r.   )r   r   r   r   r_   r`   r   r   ZCGIHTTPRequestHandler.send_head8  s*    ;;==<<>!+55d;;r   c                s    \        V P                  4      pVP                  R ^4      pV^ 8  d0   VRV V P                  9   g   VP                  R V^,           4      pK6  V^ 8  d   VRV W^,           R rCW43V n        R# R# )r6   NTF)r   rP   findcgi_directoriescgi_info)r   r   Zdir_sepheadtails   &    r   r   ZCGIHTTPRequestHandler.is_cgi?  s     ,DII6 %%c1-k.'":d>R>R"R$))#wqy9GQ;'1>!)*3M$ JDMr   z/cgi-binz/htbinc                s    \        V4      # r.   )r   )r   rP   r   r   is_executableZ#CGIHTTPRequestHandler.is_executable[  s    $r   c                sj    \         P                  P                  V4      w  r#VP                  4       R9   # ).py)r   z.pyw)r   rP   r   rW   )r   rP   r   r   s   &&  r   	is_pythonZCGIHTTPRequestHandler.is_python_  s)    WW%%d+
zz|..r   c                s   V P                   w  rVR ,           V,           pVP                  R \        V4      ^,           4      pV^ 8  dn   VRV pW4^,           R pV P                  V4      p\        P
                  P                  V4      '       d'   YVr!VP                  R \        V4      ^,           4      pKs   VP                  R4      w  r(p	VP                  R 4      pV^ 8  d
   VRV W$R r*MTRr*VR ,           V
,           pV P                  V4      p\        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# \        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# V P                  V4      pV P                  '       g	   V'       gA   V P!                  V4      '       g*   V P                  \        P                  RV,          4       R# \"        P$                  ! \        P&                  4      pV P)                  4       VR&   V P*                  P,                  VR&   R	VR
&   V P.                  VR&   \1        V P*                  P2                  4      VR&   V P4                  VR&   \6        P8                  P;                  V4      pWR&   V P                  V4      VR&   WR&   WR&   V P<                  ^ ,          VR&   V P>                  PA                  R4      pV'       d   VPC                  4       p\        V4      ^8X  d   ^ RI"p^ RI#pV^ ,          VR&   V^ ,          PI                  4       R8X  dg    V^,          PK                  R4      pVPM                  V4      PO                  R4      pVPC                  R4      p\        V4      ^8X  d   V^ ,          VR&   V P>                  PA                  R4      f   V P>                  PU                  4       VR&   MV P>                  R,          VR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PW                  RR44      pR PY                  V4      VR!&   V P>                  PA                  R"4      pV'       d   VVR#&   \[        RV P>                  PW                  R$. 4      4      pR%PY                  V4      pV'       d   VVR&&   R5 F  pVP]                  VR4       K  	  V P_                  \        P`                  R'4       V Pc                  4        V	Pe                  R(R)4      pV P                  '       Ed   V
.pR*V9  d   VPg                  V4       \i        4       pV Pj                  Pm                  4        \        Pn                  ! 4       pV^ 8w  d   \        Pp                  ! V^ 4      w  pp\r        Pr                  ! V Pt                  .. . ^ 4      ^ ,          '       d%   V Pt                  Pw                  ^4      '       d   KT   \        Px                  ! V4      pV'       d   V P{                  R+V 24       R#   \        P|                  ! V4       \        P                  ! V Pt                  P                  4       ^ 4       \        P                  ! V Pj                  P                  4       ^4       \        P                  ! VVV4       R# ^ RIFp V.p!V P                  V4      '       dP   \        P                  p"V"PI                  4       P                  R,4      '       d   V"RR6 V"R7R ,           p"V"R-.V!,           p!R*V	9  d   V!Pg                  V	4       V P                  R.V P                  V!4      4        \        V4      p#V P                  V!V P                  V P                  V P                  VR/7      p$V P4                  PI                  4       R08X  d   V#^ 8  d   ^ p%V Pt                  Pw                  \        V#\        4      4      p&\        V&4      V#8  dT   \        V&4      V%8w  dD   \        V&4      p%\        V%V#V%,
          4      p' V&V Pt                  Pw                  V'4      ,          p&Kc  MRp&\r        Pr                  ! V Pt                  P                  .. . ^ 4      ^ ,          '       d/   V Pt                  P                  P                  ^4      '       d   Kh   V$P                  V&4      w  p(p)V Pj                  P                  V(4       V)'       d   V P{                  R1V)4       V$P                  P                  4        V$P                  P                  4        V$P                  p*V*'       d   V P{                  R2V*4       R# V P                  R34       R#   TPP                  \R        3 d     ELi ; i  \~         d     ELbi ; i   T P*                  P                  T P                  T P<                  4       \        P                  ! ^4        R# ; i  \        \        3 d    ^ p# ELi ; i  \         d     EK  i ; i)8r6   Nr   r>   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)ZSERVER_SOFTWAREZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PROTOCOLZSERVER_PORTZREQUEST_METHODZ	PATH_INFOZPATH_TRANSLATEDZSCRIPT_NAMEQUERY_STRINGZREMOTE_ADDRauthorizationZ	AUTH_TYPEZbasicZascii:ZREMOTE_USERzcontent-typeZCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERacceptZ,ZHTTP_ACCEPTz
user-agentHTTP_USER_AGENTZcookiez, HTTP_COOKIEzScript output followsZ+r   Z=zCGI script exit code zw.exez-uzcommand: %s)Zstdinstdoutr   envZpostz%szCGI script exit status %#xzCGI script exited OKr   )r   ZREMOTE_HOSTr   r   r   r   ii)\r   r   r<   r   r   rP   r   r   ZexistsrN   r   r   r   Z	FORBIDDENr   	have_forkr   copyZdeepcopyZenvironr}   serverr   rO   rG   r   rC   r   r   r   r   rQ   rV   rJ   base64binasciirW   ry   ZdecodebytesZdecodeZErrorZUnicodeErrorZget_content_typeZget_allr   r   Z
setdefaultrs   r   r   ro   r   r   rc   rd   r   ZwaitpidselectrT   readZwaitstatus_to_exitcoderf   Zsetuidr   Zdup2r   ZexecveZhandle_errorrequestZ_exit
subprocessr   r   r   r   Zlist2cmdlinerL   r   rK   ZPopenZPIPEZmin_MIN_READ_BUF_SIZEre   Z_sockZrecvZcommunicater{   r   r?   r   Z
returncode)+r   ZdirZrestrP   ZiZnextdirZnextrestZ	scriptdirr   r   ZscriptZ
scriptnameZ
scriptfileZispyr   Zuqrestr   r   r   Zlengthr   r   ZuaZcoZ
cookie_strZkZdecoded_queryr   r   ZpidZstsZexitcoder   ZcmdlineZinterpZnbytesZpZcursizeZdataZdeltar   r   Zstatuss+   &                                          r   r   ZCGIHTTPRequestHandler.run_cgid  sd   MM	Sy4IIc3s8A:&1f2AhGaCDzH++G4Iww}}Y''#TIIc3s8A:. , IIcN68T"XDD3Y'
((4
ww~~j))OO$$)J68 ww~~j))OO$$5
BD ~~j)>>>%%j11((7*DF  mmBJJ'!%!4!4!6![[44M#, !%!6!6 !8!89M $%%d+!K!%!4!4V!<'M#N!003M((9)//1M=!Q&'#0#3K  #))+w6	B(5a(8(?(?(H(.(:(:=(I(.w &
 )6(;(;C(@}-21>q1AC.<<N+3"&,,"?"?"AC"&,,~">C!!"23$*C !,,""9-")C%%h3 XXf-M\\l+%'C!"D$,,..x<=YYr]
!+CDANN1b!D 	:==*ABc3/>>>8D-'M*\FJJ'')Cax::c1-SmmTZZL"b!<Q??::??1--44S9NN%:8*#EF
IIf% 

))+Q/

))+Q/		*dC0 !lG~~j))<<>**733#CR[6"#;6F!4.72%u%]J,C,CG,LMV   '1(2(2'*	 ! #A ||!!#v-&1*zzs63E'FG$i&(SY'-A!$iG  ')9:E

 66 --!1!1 2BA>qAAzz'',,Q//]]40NFFJJV$tV,HHNNHHNN\\F;VD  !78u %NNL9 z  
((t7J7JK" z* & ( sb   38g g/ A6h :i 	"i) g,+g,/g>:h =g>>h Aii&%i&)i98i9)r   )r   r   r   r   r(   ra   r   r   Zrbufsizer   r   r   r   r   r   r   r   r   r1   r2   r3   r   r   r     sP     * F#I H0<4 "8,O /
C9 C9r   c                  s    \         P                  ! V R \         P                  R\         P                  / p\	        \        V4      4      w  r#rEpW&3# )typeZflags)r   ZgetaddrinfoZSOCK_STREAMZ
AI_PASSIVEZnextZiter)ZaddressZinfosZfamilyr   ZprotoZ	canonnameZsockaddrs   *      r   _get_best_familyr   *  sS    	 E
 04DK/@,F%Hr   r   i@  c                 s   \        WC4      w  Vn        pW n        V'       d   V! WVWgR 7      p	MV! W4      p	T	;_uu_ 4       p
V
P                  P	                  4       R,          w  rRV9   d   RV R2MTpV'       d   RMRp\        RV RV R	V R
VP                  4        RV RV R24        V
P                  4        RRR4       R#   \         d%    \        R4       \        P                  ! ^ 4        L8i ; i  + '       g   i     R# ; i))r&   r    r!   r   r   Z[Z]ZHTTPSZHTTPzServing z on z port z (z://z/) ...z&
Keyboard interrupt received, exiting.N)r   Zaddress_familyrO   r   ZgetsocknameZprintrW   Zserve_foreverZKeyboardInterruptr   Zexit)HandlerClassServerClassprotocolr   bindtls_certtls_keytls_passwordZaddrr   Zhttpdr   Zurl_hosts   &&&&&&&&     r   testr  4  s    (8'C$K$,!T(%,E T0	5\\--/3
"%+QtfA;4&7FxjTF& 7 !XJavV=	
	! 
 ! 	;<HHQK	 
s0    :C8;0C8,C,C52C84C55C88D		Z__main__T)Zcolorz--cgiZ
store_truezrun as CGI server)Zactionhelpz-bz--bindZADDRESSz.bind to this address (default: all interfaces))metavarr  z-dz--directoryz1serve this directory (default: current directory))defaultr  z-pz
--protocolZVERSIONz3conform to this HTTP version (default: %(default)s))r  r  r  z
--tls-certZPATHz&path to the TLS certificate chain filez	--tls-keyzpath to the TLS key filez--tls-password-filez)path to the password file for the TLS keyr   r   z(bind to this port (default: %(default)s))r  r   Znargsr  z'--tls-key requires --tls-cert to be setz1--tls-password-file requires --tls-cert to be setr   zutf-8)Zencodingz"Failed to read TLS password file: c                   s8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )DualStackServerMixini  c                s  < \         P                  ! \        4      ;_uu_ 4        V P                  P	                  \        P
                  \        P                  ^ 4       RRR4       \        SV `!  4       #   + '       g   i     L; i)r#   N)	
contextlibZsuppressZ	Exceptionr   Z
setsockoptZIPPROTO_IPV6ZIPV6_V6ONLYr'   r   )r   r*   s   &r   r   Z DualStackServerMixin.server_bind  sX    $$Y//&&''););Q@ 0 7&(( 0/s   :A44B	c                sJ    V P                  WV \        P                  R 7       R# )r   N)r)   r   r   )r   r   r   r   r   finish_requestZ#DualStackServerMixin.finish_request  s     $$Wd/3~~ % ?r   r   )	r   r   r   r   r   r  r   r   r1   r2   r3   r   r  r    s     	)	? 	?r   r  c                       ] tR tRtRtR# )HTTPDualStackServeri  r   Nr   r   r   r   r   r   r   r   r	  r	        r   r	  c                   r  )HTTPSDualStackServeri  r   Nr
  r   r   r   r  r    r  r   r  )r   r   r   r   r   r   r   r   )r    r   r   r   r   r   r   i   )Hr   Z__all__r   r   Zemail.utilsr   rw   Zhttp.clientrR   r   r   r   r   r   r   r   r   r
   r   r   Zurllib.parser   r   r   r   r   r   r    ZThreadingMixInr   r   r   ZStreamRequestHandlerr   r   r   r   r   r   r   r   r  r   Zargparser  ZArgumentParserZparserZadd_argumentr   rL   Z
parse_argsr   r   r   ZerrorZtls_key_passwordZtls_password_filer   r   r   Zstripr   rg   ZcgiZhandler_classr  r	  r  r   r   r   r   r   r   r   <module>r     sw  f       	   	      
    * 7   
 '' 
 ,55z "* "J<66 x\>> xvE*5 E*T,` 
 $
T94 T9n -(4d4@ z$$40F
0  2
h	9  : mRYY[<  = lI *6  7 fE  G
V7  9
-vH  J
3c6  7 D===T\\\>?}}}LLLM	Cd,,cGDD#$668>>#3  E
 xxx-0? ?24G 35I  +/---&=PK"YYYY%	I J ED 	CLL=aSABB	Cs6   >L* L:L* L'	"L* 'L* *M1M

M