Ë
    rR h±›  ã                  óÔ  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
ZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ 	 ddlZeej>                  ej@                  fZ!de"d<   dZ%ejL                  dk(  r		  e'd«        e(ed«      Z)e)rejT                  Z*n
 G d„ d«      Z*	 ejV                  Z,dZ.ej^                  ej`                  de1e2ej^                  e2   f   ejf                  d   f      Z4ejj                  rddl6m7Z7 ddl6m8Z8 dd l9m:Z: dd!l;m<Z<  G d"„ d#ejz                  «      Z> G d$„ d%e«      Z?d8d&„Z@	 d9	 	 	 d:d'„ZA	 d;	 	 	 	 	 	 	 d<d(„ZBd=d)„ZC	 d;	 	 	 	 	 	 	 d>d*„ZDd9d?d+„ZEd@d,„ZF	 	 	 	 	 	 	 	 dAd-„ZGdBd.„ZH G d/„ d0e«      ZI G d1„ d2ej”                  eI«      ZK G d3„ d4e*eI«      ZL	 	 	 	 	 	 dC	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dDd5„ZMdEd6„ZN	 	 	 	 	 	 	 	 	 	 	 	 	 dF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd7„ZOy# e#$ r#  G d„ d«      Z$ e$«       Zeej>                  fZ!Y �Œ»w xY w# e#$ r dZ%Y �Œ¯w xY w# e-$ r dZ,Y �ŒŽw xY w)HaØ  A WSGI and HTTP server for use **during development only**. This
server is convenient to use, but is not designed to be particularly
stable, secure, or efficient. Use a dedicate WSGI server and HTTP
server when deploying to production.

It provides features like interactive debugging and code reloading. Use
``run_simple`` to start the server. Put this in a ``run.py`` script:

.. code-block:: python

    from myapp import create_app
    from werkzeug import run_simple
é    )ÚannotationsN)Údatetime)Ú	timedelta)Útimezone)ÚBaseHTTPRequestHandler)Ú
HTTPServer)Úunquote)Úurlsplité   ©Ú_log)Ú_wsgi_encoding_dance)ÚInternalServerError)Ú
uri_to_iriztuple[type[Exception], ...]Úconnection_dropped_errorsc                  ó   — e Zd Zdd„Zy)Ú	_SslDummyc                ó   — t        d«      ‚)NzUSSL is unavailable because this Python runtime was not compiled with SSL/TLS support.)ÚRuntimeError)ÚselfÚnames     úH/var/www/timesheet/venv/lib/python3.12/site-packages/werkzeug/serving.pyÚ__getattr__z_SslDummy.__getattr__1   s   € Üð2óð ó    N©r   ÚstrÚreturnút.Any)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   0   s   „ ô	r   r   TÚntÚcoloramaFÚforkc                  ó   — e Zd Zy)ÚForkingMixInN)r   r    r!   r"   r   r   r'   r'   H   s   „ Ør   r'   é€   ússl.SSLContextÚadhoc)ÚWSGIApplication)ÚWSGIEnvironment)ÚRSAPrivateKeyWithSerialization)ÚCertificatec                  ó0   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zy)ÚDechunkedInputz8An input stream that handles Transfer-Encoding 'chunked'c                ó.   — || _         d| _        d| _        y )NFr   )Ú_rfileÚ_doneÚ_len)r   Úrfiles     r   Ú__init__zDechunkedInput.__init__c   s   € ØˆŒØˆŒ
Øˆ�	r   c                 ó   — y)NTr"   ©r   s    r   ÚreadablezDechunkedInput.readableh   s   € Ør   c                óè   — 	 | j                   j                  «       j                  d«      }t        |j	                  «       d«      }|dk  rt        d«      ‚|S # t
        $ r}t        d«      |‚d }~ww xY w)NÚlatin1é   zInvalid chunk headerr   z!Negative chunk length not allowed)r2   ÚreadlineÚdecodeÚintÚstripÚ
ValueErrorÚOSError)r   Úliner4   Úes       r   Úread_chunk_lenzDechunkedInput.read_chunk_lenk   sp   € ð	9Ø—;‘;×'Ñ'Ó)×0Ñ0°Ó:ˆDÜ�t—z‘z“| RÓ(ˆDð �!Š8ÜÐ=Ó>Ð>Øˆøô	 ò 	9ÜÐ0Ó1°qÐ8ûð	9ús   ‚AA Á	A1Á A,Á,A1c                ó   — d}| j                   �sn|t        |«      k  �r_| j                  dk(  r| j                  «       | _        | j                  dk(  rd| _         | j                  dkD  rÂt	        t        |«      | j                  «      }||z   t        |«      kD  rW| j
                  j                  t        |«      |z
  «      ||d  | xj                  t        |«      |z
  z  c_        t        |«      }n;| j
                  j                  |«      ||||z    | xj                  |z  c_        ||z  }| j                  dk(  r)| j
                  j                  «       }|dvrt        d«      ‚| j                   s|t        |«      k  r�Œ_|S )Nr   T)ó   
ó   
ó   z!Missing chunk terminating newline)	r3   Úlenr4   rE   Úminr2   Úreadr=   rB   )r   ÚbufrL   ÚnÚ
terminators        r   ÚreadintozDechunkedInput.readintou   sB  € ØˆØ—*“* ¬¨C«£Ø�y‰y˜AŠ~ð !×/Ñ/Ó1�”	à�y‰y˜AŠ~ð "�”
à�y‰y˜1Š}ô œ˜C› $§)¡)Ó,�ð
 ˜!‘8œc #›hÒ&Ø!%§¡×!1Ñ!1´#°c³(¸T±/Ó!B�C˜˜�JØ—I’I¤ S£¨D¡Ñ0•IÜ˜s›8‘Dà+/¯;©;×+;Ñ+;¸AÓ+>�C˜˜t a™xÐ(Ø—I’I ‘N•IØ˜A‘I�Dà�y‰y˜AŠ~ð "Ÿ[™[×1Ñ1Ó3�
ØÐ%<Ñ<Ü!Ð"EÓFÐFðE —*’* ¬¨C«¤ðH ˆr   N)r5   zt.IO[bytes]r   ÚNone©r   Úbool©r   r?   )rM   Ú	bytearrayr   r?   )r   r    r!   Ú__doc__r6   r9   rE   rP   r"   r   r   r0   r0   `   s   „ ÙBóó
óô&r   r0   c            
      ó6  ‡— e Zd ZU dZded<   edd„«       Zdd„Zdd„Zdˆfd„Z		 d	 	 	 	 	 dd„Z
dˆfd	„Zdd
„Zdd„Zej                  g  ed«      ¢ edd«      ¢D � �ci c]	  }|d|d›�“Œ c}} «      Zde ed«      <   ddd„Zd d„Zd d„Zd!d„ZˆxZS c c}} w )"ÚWSGIRequestHandlerz3A request handler that implements WSGI dispatching.ÚBaseWSGIServerÚserverc                ó.   — | j                   j                  S ©N)rZ   Ú_server_versionr8   s    r   Úserver_versionz!WSGIRequestHandler.server_version£   s   € à�{‰{×*Ñ*Ð*r   c                óŽ  — t        | j                  «      }| j                  j                  €dnd}| j                  sd| _        n-t        | j                  t        «      r| j                  df| _        |j                  s(|j                  rd|j                  › |j                  › �}n|j                  }t        |«      }i dd“d|“d	| j                  “d
t        j                  “d| j                  j                  “d| j                  j                  “dd“d| j                  “d| j                   “d| j"                  “dd“dt%        |«      “dt%        |j&                  «      “dt%        | j                  «      “dt%        | j                  «      “d| j)                  «       “d| j+                  «       “| j                  j,                  d   t        | j                  j,                  d   «      | j.                  dœ¥}| j0                  j3                  «       D ]X  \  }}d|v rŒ|j5                  «       j7                  dd«      }|j7                  dd«      }|dvrd |› �}||v r
||   › d!|› �}|||<   ŒZ |j9                  d"d«      j;                  «       j=                  «       d#k(  rd$|d%<   t?        |d	   «      |d	<   |j                  r|j                  r|j                  |d&<   	 | j                  jA                  d$¬'«      }|�tC        jD                  |«      |d(<   |S # tF        $ r  | j                  jI                  d)d*«       Y |S tJ        $ r Y |S w xY w)+NÚhttpÚhttps)ú<local>r   r   ú/zwsgi.version)r   r   zwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceFzwerkzeug.socketÚSERVER_SOFTWAREÚREQUEST_METHODÚSCRIPT_NAMEÚ Ú	PATH_INFOÚQUERY_STRINGÚREQUEST_URIÚRAW_URIÚREMOTE_ADDRÚREMOTE_PORTr   )ÚSERVER_NAMEÚSERVER_PORTÚSERVER_PROTOCOLÚ_ú-z
)ÚCONTENT_TYPEÚCONTENT_LENGTHÚHTTP_ú,ÚHTTP_TRANSFER_ENCODINGÚchunkedTzwsgi.input_terminatedÚ	HTTP_HOST)Úbinary_formÚSSL_CLIENT_CERTÚerrorz&Cannot fetch SSL peer certificate info)&r
   ÚpathrZ   Ússl_contextÚclient_addressÚ
isinstancer   ÚschemeÚnetlocr	   r5   ÚsysÚstderrÚmultithreadÚmultiprocessÚ
connectionr^   Úcommandr   ÚqueryÚaddress_stringÚport_integerÚserver_addressÚrequest_versionÚheadersÚitemsÚupperÚreplaceÚgetr@   Úlowerr0   ÚgetpeercertÚsslÚDER_cert_to_PEM_certrA   ÚlogÚAttributeError)r   Úrequest_urlÚ
url_schemeÚ	path_infoÚenvironÚkeyÚvalueÚ	peer_certs           r   Úmake_environzWSGIRequestHandler.make_environ§   s  € Ü˜tŸy™yÓ)ˆØ#Ÿ{™{×6Ñ6Ð>‘VÀGˆ
à×"Ò"Ø"0ˆDÕÜ˜×+Ñ+¬SÔ1Ø#'×#6Ñ#6¸Ð":ˆDÔð
 ×!Ò! k×&8Ò&8Ø˜K×.Ñ.Ð/°×0@Ñ0@Ð/AÐB‰Ià#×(Ñ(ˆIä˜IÓ&ˆ	ð$
Ø˜Fð$
à˜zð$
ð ˜$Ÿ*™*ð$
ð œ3Ÿ:™:ð	$
ð
  §¡× 7Ñ 7ð$
ð   §¡×!9Ñ!9ð$
ð ˜Uð$
ð ˜tŸ™ð$
ð ˜t×2Ñ2ð$
ð ˜dŸl™lð$
ð ˜2ð$
ð Ô-¨iÓ8ð$
ð Ô0°×1BÑ1BÓCð$
ð Ô/°·	±	Ó:ð$
ð" Ô+¨D¯I©IÓ6ð#$
ð$ ˜4×.Ñ.Ó0ð%$
ð& ˜4×,Ñ,Ó.ð'$
ð(  Ÿ;™;×5Ñ5°aÑ8Ü˜tŸ{™{×9Ñ9¸!Ñ<Ó=Ø#×3Ñ3ò-$
ˆð2 Ÿ,™,×,Ñ,Ó.ò 
	!‰JˆC�Ø�c‰zØà—)‘)“+×%Ñ% c¨3Ó/ˆCØ—M‘M &¨"Ó-ˆEØÐ<Ñ<Ø˜c˜U�m�Ø˜'‘>Ø& s™|˜n¨A¨e¨WÐ5�EØ ˆG�CŠLð
	!ð �;‰;Ð/°Ó4×:Ñ:Ó<×BÑBÓDÈ	ÒQØ/3ˆGÐ+Ñ,Ü$2°7¸<Ñ3HÓ$IˆG�LÑ!ð ×Ò +×"4Ò"4Ø#.×#5Ñ#5ˆG�KÑ ð	ð Ÿ™×3Ñ3ÀÐ3ÓEˆIØÐ$ä-0×-EÑ-EÀiÓ-P�Ð)Ñ*ð ˆøô ò 	Oà�K‰K�O‰O˜GÐ%MÕNð
 ˆô	 ò 	ààˆð		ús   Ë6L Ì%MÌ8MÍMc                óø  ‡ ‡‡‡‡‡	‡
‡‡— ‰ j                   j                  dd«      j                  «       j                  «       dk(  r‰ j                  j                  d«       ‰ j                  «       x‰ _        Šd Šd Šd Š
d ŠdŠdˆˆˆˆˆ ˆ
ˆfd„Šdˆˆˆˆfd„	Š	dˆˆˆˆ ˆ	ˆfd„}	  |‰ j                  j                  «       y # t        $ r}‰ j                  |‰«       Y d }~y d }~wt        $ rŽ}‰ j                  j                  r‚ ‰
�	‰rd	‰ _        	 ‰
€d Šd Š |t        «       «       n# t        $ r Y nw xY wd
dlm}  ||«      j%                  «       }‰ j                  j'                  dd|› �«       Y d }~y d }~ww xY w)NÚExpectrg   z100-continues   HTTP/1.1 100 Continue

Fc                óž  •— ‰€J d«       ‚‰
€J d«       ‚‰€Þ‰Š‰
Š		 ‰j                  d d«      \  }}t        |«      }‰j                  ||«       t	        «       }‰	D ]6  \  }}‰j                  ||«       |j                  |j                  «       «       Œ8 d|v s<‰d   dk(  s4d|cxk  rdk  s)n |d	v s#‰j                  d
k\  rdŠ‰j                  dd«       ‰j                  dd«       ‰j                  «        t        | t        «      sJ d«       ‚| r“‰rY‰j                  j                  t        t        | «      «      dd  j!                  «       «       ‰j                  j                  d«       ‰j                  j                  | «       ‰r‰j                  j                  d«       ‰j                  j#                  «        y # t        $ r ‰d}}Y �Œ›w xY w)Nzwrite() before start_responser   rg   zcontent-lengthre   ÚHEADéd   éÈ   >   é0  éÌ   úHTTP/1.1TzTransfer-Encodingrx   Ú
ConnectionÚclosezapplications must write bytesé   rH   )ÚsplitrA   r?   Úsend_responseÚsetÚsend_headerÚaddr“   Úprotocol_versionÚend_headersr€   ÚbytesÚwfileÚwriteÚhexrJ   ÚencodeÚflush)ÚdataÚcode_strÚmsgÚcodeÚheader_keysr�   rž   Úchunk_responserœ   Úheaders_sentÚheaders_setr   Ústatus_sentÚ
status_sets          €€€€€€€r   r¶   z*WSGIRequestHandler.run_wsgi.<locals>.write  sÂ  ø€ àÐ)ÐJÐ+JÓJÐ)ØÐ*ÐKÐ,KÓKÐ*ØÐ"Ø(�Ø*�ð4Ø$/×$5Ñ$5°d¸AÓ$>‘M�H˜cô ˜8“}�Ø×"Ñ" 4¨Ô-Ü!›e�Ø".ò 1‘J�C˜Ø×$Ñ$ S¨%Ô0Ø—O‘O C§I¡I£KÕ0ð1ð )¨KÑ7Ø"Ð#3Ñ4¸Ò>Ø 4Ô-¨#Ô-Ø :Ñ-à×-Ñ-°Ò;à%)�NØ×$Ñ$Ð%8¸)ÔDð × Ñ  ¨wÔ7Ø× Ñ Ô"ä˜d¤EÔ*ÐKÐ,KÓKÐ*áÙ!Ø—J‘J×$Ñ$¤S¬¨T«£^°A°BÐ%7×%>Ñ%>Ó%@ÔAØ—J‘J×$Ñ$ WÔ-à—
‘
× Ñ  Ô&á!Ø—J‘J×$Ñ$ WÔ-à�J‰J×ÑÕøô] "ò 4Ø$/°˜c“Hð4ús   ›F; Æ;GÇGc                óx   •— |r	 ‰r|d   j                  |d   «      ‚	 d }n‰rt        d«      ‚| Š|Š‰S # d }w xY w)Nr   r¬   zHeaders already set)Úwith_tracebackÚAssertionError)ÚstatusrŽ   Úexc_inforÀ   rÁ   rÃ   r¶   s      €€€€r   Ústart_responsez3WSGIRequestHandler.run_wsgi.<locals>.start_response<  sZ   ø€ áð$Ù#Ø& q™k×8Ñ8¸À!¹ÓEÐEð $ð  $‘HÙÜ$Ð%:Ó;Ð;ØˆJØ!ˆKØˆLøð  $‘Hús   …5 µ9c                óÌ  •—  | ‰‰
«      }	 |D ]
  } ‰|«       Œ ‰s ‰d«       ‰r‰	j                   j                  d«       t        j                  «       }|j	                  ‰	j
                  t        j                  «       d}d}|j                  d¬«      rN‰	j                  j                  d«      }|t        |«      z  }|dz  }|r
|dk\  s|d	kD  rn|j                  d¬«      rŒN|j                  «        t        |d
«      r|j                  «        y y # t        j                  «       }|j	                  ‰	j
                  t        j                  «       d}d}|j                  d¬«      rN‰	j                  j                  d«      }|t        |«      z  }|dz  }|r
|dk\  s|d	kD  rn|j                  d¬«      rŒN|j                  «        t        |d
«      r|j                  «        w w xY w)Nr   s   0

r   g{®Gáz„?)Útimeouti€–˜ r   l    d(	 iè  r«   )rµ   r¶   Ú	selectorsÚDefaultSelectorÚregisterr‡   Ú
EVENT_READÚselectr5   rL   rJ   r«   Úhasattr)ÚappÚapplication_iterrº   ÚselectorÚ
total_sizeÚtotal_readsr¿   rœ   rÀ   r   rÉ   r¶   s         €€€€€€r   Úexecutez,WSGIRequestHandler.run_wsgi.<locals>.executeJ  sÆ  ø€ Ù" 7¨NÓ;Ðð#-Ø,ò  �DÙ˜$•Kð á#Ù˜#”JÙ!Ø—J‘J×$Ñ$ \Ô2ô %×4Ñ4Ó6�Ø×!Ñ! $§/¡/´9×3GÑ3GÔHØ�
Ø�ð —o‘o¨d�oÔ3àŸ:™:Ÿ?™?¨:Ó6�DØ¤# d£)Ñ+�JØ 1Ñ$�Kñ   :°Ò#?À;ÐQUÒCUØð —o‘o¨d�oÕ3ð —‘Ô äÐ+¨WÔ5Ø$×*Ñ*Õ,ð 6øô) %×4Ñ4Ó6�Ø×!Ñ! $§/¡/´9×3GÑ3GÔHØ�
Ø�ð —o‘o¨d�oÔ3àŸ:™:Ÿ?™?¨:Ó6�DØ¤# d£)Ñ+�JØ 1Ñ$�Kñ   :°Ò#?À;ÐQUÒCUØð —o‘o¨d�oÕ3ð —‘Ô äÐ+¨WÔ5Ø$×*Ñ*Õ,ð 6ús   Œ6D ÄB"G#Æ5.G#Tr   )ÚDebugTracebackr|   zError on request:
)rº   r´   r   rQ   r\   )rÒ   r+   r   rQ   )rŽ   r’   r“   r@   rµ   r¶   r    rœ   rZ   rÒ   r   Úconnection_droppedÚ	ExceptionÚpassthrough_errorsÚclose_connectionr   Údebug.tbtoolsrØ   Úrender_traceback_textr—   )r   r×   rD   rØ   r¼   r¿   rœ   rÀ   rÁ   rÉ   rÂ   rÃ   r¶   s   `    @@@@@@@@r   Úrun_wsgizWSGIRequestHandler.run_wsgiø   s^  ÿø€ Ø�<‰<×Ñ˜H bÓ)×/Ñ/Ó1×7Ñ7Ó9¸^ÒKØ�J‰J×ÑÐ=Ô>à!%×!2Ñ!2Ó!4Ð4ˆŒ�wØ!%ˆ
Ø48ˆØ"&ˆØ59ˆØ$ˆ÷7	ó 7	÷r	ð 	÷%	-ò %	-ðN	BÙ�D—K‘K—O‘OÕ$øÜ(ò 	0Ø×#Ñ# A w×/Ñ/ûÜò 	BØ�{‰{×-Ò-ØàÐ&©>Ø(,�Ô%ðð Ð&Ø!%�JØ"&�KÙÔ+Ó-Õ.øÜò Ùðúõ 6á  Ó#×9Ñ9Ó;ˆCØ�K‰K�O‰O˜GÐ':¸3¸%Ð%@×AÑAûð)	BúsH   Â"B? Â?	E9ÃCÃE9Ã+"E4ÄD%Ä$E4Ä%	D1Ä.E4Ä0D1Ä1>E4Å4E9c                ó  •— 	 t         ‰| �  «        y# t        t        j                  f$ r}| j                  |«       Y d}~yd}~wt        $ r?}| j                  j                  �t        |«      r| j                  d|«       n‚ Y d}~yd}~ww xY w)z/Handles a request ignoring dropped connections.NzSSL error occurred: %s)ÚsuperÚhandleÚConnectionErrorÚsocketrË   rÙ   rÚ   rZ   r~   Úis_ssl_errorÚ	log_error)r   rD   Ú	__class__s     €r   râ   zWSGIRequestHandler.handle‹  sr   ø€ ð	Ü‰G‰NÕøÜ¤§¡Ð0ò 	'Ø×#Ñ# A×&Ñ&ûÜò 	Ø�{‰{×&Ñ&Ð2´|ÀA´Ø—‘Ð7¸Õ;àô <ûð	ús    ƒ ’B«AÁBÁ5BÂBc                 ó   — y)z`Called if the connection was closed by the client.  By default
        nothing happens.
        Nr"   )r   r|   rœ   s      r   rÙ   z%WSGIRequestHandler.connection_dropped—  s   � r   c                óf   •— |j                  d«      r| j                  S t        t        «       |«      S )NÚdo_)Ú
startswithrß   Úgetattrrá   )r   r   rç   s     €r   r   zWSGIRequestHandler.__getattr__ž  s*   ø€ à�?‰?˜5Ô!Ø—=‘=Ð ô ”u“w Ó%Ð%r   c                ór   — t        | dd «      r| j                  d   S | j                  sy| j                  d   S )Nrœ   rl   rb   r   )rì   rœ   r   r8   s    r   rŠ   z!WSGIRequestHandler.address_string¦  s:   € Ü�4˜ DÔ)Ø—<‘< Ñ.Ð.à×"Ò"Øà×"Ñ" 1Ñ%Ð%r   c                ó    — | j                   d   S )Nr   )r   r8   s    r   r‹   zWSGIRequestHandler.port_integer¯  s   € Ø×"Ñ" 1Ñ%Ð%r   é    é   é    z\xÚ02xz\\ú\c                ó  — 	 t        | j                  «      }| j                  › d|› d| j                  › �}|j                  | j                  «      }t        |«      }|d   dk(  rt        |d«      }nb|dk(  rn\|dk(  rt        |d«      }nJ|d   dk(  rt        |d	«      }n5|d
k(  rt        |d«      }n#|d   dk(  rt        |dd«      }nt        |dd«      }| j                  dd|||«       y # t        $ r | j
                  }Y ŒÊw xY w)Nú r   Ú1ÚboldÚ200Ú304ÚcyanÚ3ÚgreenÚ404ÚyellowÚ4ÚredÚmagentaÚinfoz
"%s" %s %s)r   r}   rˆ   r�   r˜   ÚrequestlineÚ	translateÚ_control_char_tabler   Ú_ansi_styler—   )r   r½   Úsizer}   r¼   s        r   Úlog_requestzWSGIRequestHandler.log_request¸  s
  € ð	#Ü˜dŸi™iÓ(ˆDØ—\‘\�N ! D 6¨¨4×+?Ñ+?Ð*@ÐAˆCð �m‰m˜D×4Ñ4Ó5ˆÜ�4‹yˆà�‰7�cŠ>Ü˜c 6Ó*‰CØ�UŠ]ØØ�UŠ]Ü˜c 6Ó*‰CØ�!‰W˜Š^Ü˜c 7Ó+‰CØ�UŠ]Ü˜c 8Ó,‰CØ�!‰W˜Š^Ü˜c 6¨5Ó1‰Cä˜c 6¨9Ó5ˆCà�‰�˜ s¨D°$Õ7øô/ ò 	#à×"Ñ"ŠCð	#ús   ‚3C( Ã(D Ã?D c                ó,   —  | j                   d|g|¢­Ž  y )Nr|   ©r—   ©r   ÚformatÚargss      r   ræ   zWSGIRequestHandler.log_errorÕ  s   € Øˆ�‰�˜&Ð( 4Ô(r   c                ó,   —  | j                   d|g|¢­Ž  y )Nr  r
  r  s      r   Úlog_messagezWSGIRequestHandler.log_messageØ  s   € Øˆ�‰�˜Ð' $Ô'r   c           	     óŒ   — | j                  «       j                  dd«      }t        ||› d| j                  «       › d|› d�g|¢­Ž  y )Nú%z%%z - - [z] ú
)rŠ   r‘   r   Úlog_date_time_string)r   ÚtypeÚmessager  rŠ   s        r   r—   zWSGIRequestHandler.logÛ  sS   € à×,Ñ,Ó.×6Ñ6°s¸DÓAˆÜØØÐ˜f T×%>Ñ%>Ó%@Ð$AÀÀGÀ9ÈBÐOð	
ð ô	
r   )r   r   )r   r,   ©r   rQ   r\   )r|   ÚBaseExceptionrœ   zWSGIEnvironment | Noner   rQ   r   rT   )rr   rr   )r½   ú	int | strr  r  r   rQ   )r  r   r  r   r   rQ   ©r  r   r  r   r  r   r   rQ   )r   r    r!   rV   Ú__annotations__Úpropertyr^   r    rß   râ   rÙ   r   rŠ   r‹   r   Ú	maketransÚranger  Úordr  ræ   r  r—   Ú__classcell__)Ú.0Úcrç   s   00@r   rX   rX   ž   sÒ   ø… Ù=àÓàò+ó ð+óOóbQBõf
ð GKðØ"ðØ-Cðà	óõ&ó&ó&ð Ÿ-™-Ø#E¡U¨4£[Ð#E±5¸¸tÓ3DÐ#E×F˜aˆˆr�!�C�ˆMÑ	ÓFóÐð &+Ð™˜D›	Ñ"ô8ó:)ó(÷
ùóO 	Gs   ÁB
rX   c                óR   — t         s| S dddddddœ}|D ]  }d||   › d	| › �} Œ | › d
�S )Nr   é   rï   é!   é#   é$   )r÷   r   rü   rþ   r  rú   z[Úmz[0m)Ú_log_add_style)rž   ÚstylesÚcodesÚstyles       r   r  r  å  s[   € ÝØˆð ØØØØØñ€Eð ò /ˆØ˜˜e™�~ Q u gÐ.‰ð/ð ˆW�GÐÐr   c           	     ó  — 	 ddl m} ddlm} ddlm} ddlm} ddlm	}  |«       }|j                  dd	|¬
«      }| €d} |j                  |j                  |j                  d«      |j                  |j                   | «      g«      } |«       }|j#                  «       j%                  |«      j'                  |«      j)                  |j)                  «       «      j+                  |j-                  «       «      j/                  t1        j2                  t4        j6                  «      «      j9                  t1        j2                  t4        j6                  «      t;        d¬«      z   «      j=                  |j?                  |j@                  g«      d¬«      j=                  |jC                  |jE                  | «      |jE                  d| › �«      g«      d¬«      jG                  ||jI                  «       |«      }	|	|fS # t        $ r t        d«      d ‚w xY w)Nr   )Úx509)Údefault_backend)Úhashes)Úrsa)ÚNameOIDz<Using ad-hoc certificates requires the cryptography library.i  i   )Úpublic_exponentÚkey_sizeÚbackendÚ*zDummy Certificateim  )ÚdaysF)Úcriticalz*.)%Úcryptographyr-  Úcryptography.hazmat.backendsr.  Úcryptography.hazmat.primitivesr/  Ú)cryptography.hazmat.primitives.asymmetricr0  Úcryptography.x509.oidr1  ÚImportErrorÚ	TypeErrorÚgenerate_private_keyÚNameÚNameAttributeÚORGANIZATION_NAMEÚCOMMON_NAMEÚCertificateBuilderÚsubject_nameÚissuer_nameÚ
public_keyÚserial_numberÚrandom_serial_numberÚnot_valid_beforeÚdtÚnowr   ÚutcÚnot_valid_afterr   Úadd_extensionÚExtendedKeyUsageÚOID_SERVER_AUTHÚSubjectAlternativeNameÚDNSNameÚsignÚSHA256)
Úcnr-  r.  r/  r0  r1  r4  ÚpkeyÚsubjectÚcerts
             r   Úgenerate_adhoc_ssl_pairrZ  ø  sº  € ð	Ý%Ý@Ý9ÝAÝ1ñ Ó€GØ×#Ñ#Ø¨°gð $ó €Dð
 
€zØˆà�i‰ià×Ñ˜w×8Ñ8Ð:MÓNØ×Ñ˜w×2Ñ2°BÓ7ð	
ó€Gñ Ó€Gà×ÑÓ!ß	‰�gÓ	ß	‰�WÓ	ß	‰�D—O‘OÓ%Ó	&ß	‰�t×0Ñ0Ó2Ó	3ß	Ñ	œ"Ÿ&™&¤§¡Ó.Ó	/ß	‰œŸ™¤§¡Ó-´	¸sÔ0CÑCÓ	Dß	‰�t×,Ñ,¨d×.BÑ.BÐ-CÓDÈuˆÓ	Uß	‰Ø×'Ñ'¨¯©°bÓ)9¸4¿<¹<È"ÈRÈDÈ	Ó;RÐ(SÓTØð 
ó 

÷ 
‰ˆd�F—M‘M“O WÓ	-ð 	ð �ˆ:ÐøôK ò ÜØJó
àð	ðús   ‚G3 Ç3H	c           	     óô  — |�|}t        |¬«      \  }}ddlm} | › d�}| › d�}t        |d«      5 }|j	                  |j                  |j                  j                  «      «       ddd«       t        |d«      5 }|j	                  |j                  |j                  j                  |j                  j                  |j                  «       ¬«      «       ddd«       ||fS # 1 sw Y   Œ{xY w# 1 sw Y   ||fS xY w)	aÂ  Creates an SSL key for development.  This should be used instead of
    the ``'adhoc'`` key which generates a new cert on each server start.
    It accepts a path for where it should store the key and cert and
    either a host or CN.  If a host is given it will use the CN
    ``*.host/CN=host``.

    For more information see :func:`run_simple`.

    .. versionadded:: 0.9

    :param base_path: the path to the certificate and key.  The extension
                      ``.crt`` is added for the certificate, ``.key`` is
                      added for the key.
    :param host: the name of the host.  This can be used as an alternative
                 for the `cn`.
    :param cn: the `CN` to use.
    N)rV  r   ©Úserializationz.crtz.keyÚwb©Úencodingr  Úencryption_algorithm)rZ  r:  r]  Úopenr¶   Úpublic_bytesÚEncodingÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)	Ú	base_pathÚhostrV  rY  rW  r]  Ú	cert_fileÚ	pkey_fileÚfs	            r   Úmake_ssl_devcertro  )  sû   € ð* ÐØˆÜ(¨BÔ/�J€Dˆ$å<à�+˜TÐ"€IØ�+˜TÐ"€Iä	ˆi˜Ó	ð ? !Ø	�‰�×!Ñ! -×"8Ñ"8×"<Ñ"<Ó=Ô>÷?ä	ˆi˜Ó	ð 
 !Ø	�‰Ø×ÑØ&×/Ñ/×3Ñ3Ø$×2Ñ2×EÑEØ%2×%?Ñ%?Ó%Að ó ô	
÷
ð �iÐÐ÷?ð ?ú÷
ð �iÐÐús   °5CÁ9AC+ÃC(Ã+C7c            	     ó¢  — ddl } ddl}t        «       \  }}ddlm} |j                  «       \  }}|j                  «       \  }}| j                  t        j                  |«       | j                  t        j                  |«       t        j                  ||j                  |j                  j                  «      «       t        j                  ||j                  |j                  j                  |j                  j                  |j!                  «       ¬«      «       t        j"                  |«       t        j"                  |«       t%        ||«      }	|	S )z:Generates an adhoc SSL context for the development server.r   Nr\  r_  )ÚatexitÚtempfilerZ  r:  r]  ÚmkstemprÎ   ÚosÚremover¶   rc  rd  re  rf  rg  rh  ri  r«   Úload_ssl_context)
rq  rr  rY  rW  r]  Úcert_handlerl  Úpkey_handlerm  Úctxs
             r   Úgenerate_adhoc_ssl_contextrz  U  sý   € ãÛä(Ó*�J€Dˆ$å<à%×-Ñ-Ó/Ñ€K�Ø%×-Ñ-Ó/Ñ€K�Ø
‡O�O”B—I‘I˜yÔ)Ø
‡O�O”B—I‘I˜yÔ)ä‡H�Hˆ[˜$×+Ñ+¨M×,BÑ,B×,FÑ,FÓGÔHÜ‡H�HØØ×ÑØ"×+Ñ+×/Ñ/Ø ×.Ñ.×AÑAØ!.×!;Ñ!;Ó!=ð 	ó 	
ôô ‡H�Hˆ[ÔÜ‡H�Hˆ[ÔÜ
˜9 iÓ
0€CØ€Jr   c                óx   — |€t         j                  }t        j                  |«      }|j                  | |«       |S )aã  Loads SSL context from cert/private key files and optional protocol.
    Many parameters are directly taken from the API of
    :py:class:`ssl.SSLContext`.

    :param cert_file: Path of the certificate to use.
    :param pkey_file: Path of the private key to use. If not given, the key
                      will be obtained from the certificate file.
    :param protocol: A ``PROTOCOL`` constant from the :mod:`ssl` module.
        Defaults to :data:`ssl.PROTOCOL_TLS_SERVER`.
    )r•   ÚPROTOCOL_TLS_SERVERÚ
SSLContextÚload_cert_chain)rl  rm  Úprotocolry  s       r   rv  rv  s  s8   € ð ÐÜ×*Ñ*ˆä
�.‰.˜Ó
"€CØ×Ñ˜	 9Ô-Ø€Jr   c                ó˜   — | €/t        j                  t        t        j                  «       d   «      } t        | t        j                  «      S )z?Checks if the given error (or the current one) is an SSL error.r   )ÚtÚcastrÚ   rƒ   rÈ   r€   r•   ÚSSLError)r|   s    r   rå   rå   ˆ  s3   € à€}Ü—‘”y¤#§,¡,£.°Ñ"3Ó4ˆÜ�eœSŸ\™\Ó*Ð*r   c                ó¬   — | j                  d«      rt        j                  S d| v r t        t        d«      rt        j                  S t        j
                  S )zUReturn ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on
    the host and port.zunix://ú:ÚAF_INET6)rë   rä   ÚAF_UNIXrÑ   r†  ÚAF_INET)rk  Úports     r   Úselect_address_familyrŠ  �  s>   € ð ‡��yÔ!Ü�~‰~ÐØ	�‰œ¤¨Ô4Ü�‰ÐÜ�>‰>Ðr   c                ó,  — |t         k(  r1t        j                  j                  | j	                  d«      d   «      S 	 t        j                  | ||t
        j                  t
        j                  «      }|d   d   S # t
        j                  $ r | |fcY S w xY w)zVReturn a fully qualified socket address that can be passed to
    :func:`socket.bind`.ú://r¬   r   é   )
Úaf_unixrt  r}   ÚabspathÚ	partitionrä   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚgaierror)rk  r‰  ÚfamilyÚress       r   Úget_sockaddrr—  ™  sˆ   € ð
 ”Òä�w‰w�‰˜tŸ~™~¨eÓ4°QÑ7Ó8Ð8ðÜ× Ñ Ø�$˜¤× 2Ñ 2´F×4FÑ4Fó
ˆð
 ˆq‰6�!‰9Ðøô �?‰?ò Ø�TˆzÒðús   ¼5A9 Á9BÂBc                óP  — | t         j                  k(  rdnd}t        j                   | t         j                  «      5 }	 |j                  |df«       |j                  «       d   cddd«       S # t        $ r# | t         j                  k(  rdndcY cddd«       S w xY w# 1 sw Y   yxY w)zˆGet the IP address of an external interface. Used when binding to
    0.0.0.0 or ::1 to show a more useful URL.

    :meta private:
    zfd31:f903:5ab5:1::1z10.253.155.219i2ã  z::1ú	127.0.0.1Nr   )rä   r†  Ú
SOCK_DGRAMÚconnectrB   Úgetsockname)r•  rk  Úss      r   Úget_interface_iprž  ª  sž   € ð %+¬f¯o©oÒ$=Ñ ÐCS€Dä	�‰�vœv×0Ñ0Ó	1ð "°Qð	GØ�I‰I�t˜U�mÔ$ð �}‰}‹˜qÑ!÷"ñ "øô ò 	GØ"¤f§o¡oÒ5‘5¸;ÑF÷	"ñ "ð	Gú÷"ð "ús.   ¼B¾A-ÁBÁ- BÂBÂBÂBÂB%c                  ó’   ‡ — e Zd ZdZdZdZeZdZ	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
ˆ fd„Z	dd„Z
ddˆ fd„Z	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )rY   zuA WSGI server that that handles one request at a time.

    Use :func:`make_server` to create a server instance.
    FTc                óØ  •— |€t         }dt        |«      vr| j                  s| j                  rd|_        || _        || _        || _        || _        t        ||«      x| _
        }t        |t        |«      |«      }	|t        k(  rP|€Nt        j                  t         |	«      }	t"        j$                  j'                  |	«      rt#        j(                  |	«       t*        ‰| �Y  |	|d¬«       |€"	 | j/                  «        | j1                  «        nY| j5                  «        tI        jJ                  ||tH        jL                  «      | _$        | jH                  jO                  «       | _(        |t        k7  r| jP                  d   | _        |�RtS        |tT        «      r	tW        |Ž }n|dk(  r
tY        «       }|j[                  | jH                  d¬«      | _$        || _.        nd | _.        dd l/}d|j`                  jc                  d«      › �| _2        y # t2        $ rÄ}
| j5                  «        t7        |
j8                  t:        j<                  ¬«       |
j>                  t>        j@                  k(  rRt7        d|› d�t:        j<                  ¬«       t:        jB                  dk(  r |d	k(  rt7        d
t:        j<                  ¬«       t;        jD                  d«       Y d }
~
�Œhd }
~
wtF        $ r | j5                  «        ‚ w xY w)Nr²   r©   F)Úbind_and_activate)ÚfilezPort zp is in use by another program. Either identify and stop that program, or start the server with a different port.Údarwiniˆ  zoOn macOS, try disabling the 'AirPlay Receiver' service from System Preferences -> General -> AirDrop & Handoff.r   r*   T)Úserver_sider   z	Werkzeug/Úwerkzeug)3rX   Úvarsr…   r†   r²   rk  r‰  rÒ   rÛ   rŠ  Úaddress_familyr—  r?   rŽ  r�  r‚  r   rt  r}   ÚexistsÚunlinkrá   r6   Úserver_bindÚserver_activaterB   Úserver_closeÚprintÚstrerrorrƒ   r„   ÚerrnoÚ
EADDRINUSEÚplatformÚexitr  rä   Úfromfdr’  rœ  rŒ   r€   Útuplerv  rz  Úwrap_socketr~   Úimportlib.metadataÚmetadataÚversionr]   )r   rk  r‰  rÒ   ÚhandlerrÛ   r~   Úfdr§  rŒ   rD   Ú	importlibrç   s               €r   r6   zBaseWSGIServer.__init__Ç  s|  ø€ ð ˆ?Ü(ˆGð
 ¤T¨'£]Ñ2Ø×Ò × 1Ò 1à'1ˆGÔ$àˆŒ	ØˆŒ	ØˆŒØ"4ˆÔä/DÀTÈ4Ó/PÐPˆÔ˜nÜ% d¬C°«I°~ÓFˆð œWÒ$¨¨ÜŸV™V¤C¨Ó8ˆNä�w‰w�~‰~˜nÔ-Ü—	‘	˜.Ô)ô 	‰ÑØØØ#ð 	ô 	
ð ˆ:ðØ× Ñ Ô"Ø×$Ñ$Õ&ð: ×ÑÔô !Ÿ-™-¨¨N¼F×<NÑ<NÓOˆDŒKØ"&§+¡+×"9Ñ"9Ó";ˆDÔàœWÒ$à×+Ñ+¨AÑ.ˆDŒIàÐ"Ü˜+¤uÔ-Ü.°Ð<‘Ø Ò'Ü8Ó:�à%×1Ñ1°$·+±+È4Ð1ÓPˆDŒKØ6AˆDÕà#ˆDÔã!à!*¨9×+=Ñ+=×+EÑ+EÀjÓ+QÐ*RÐSˆÕøôg ò ð ×!Ñ!Ô#Ü�a—j‘j¤s§z¡zÕ2à—7‘7œe×.Ñ.Ò.ÜØ ˜vð &!ð !ô !ŸZ™Zõ	ô —|‘| xÒ/°D¸D²LÜðXä!$§¡õô —‘˜—’ûÜ ò Ø×!Ñ!Ô#Øðús   Ã) H È	K)ÈB9KËK)c                ó   — t        ||g|¢­Ž  y r\   r   )r   r  r  r  s       r   r—   zBaseWSGIServer.log.  s   € ÜˆT�7Ð"˜TÔ"r   c                ó�   •— 	 t         ‰| �  |¬«       | j                  «        y # t        $ r Y Œw xY w# | j                  «        w xY w)N)Úpoll_interval)rá   Úserve_foreverÚKeyboardInterruptr¬  )r   r¾  rç   s     €r   r¿  zBaseWSGIServer.serve_forever1  sI   ø€ ð	 Ü‰GÑ!°Ð!Ô>ð ×ÑÕøô !ò 	Ùð	ûð ×ÑÕús   ƒ$ ¤	0­3 ¯0°3 ³Ac                ó>   •— | j                   r‚ t        ‰| �	  ||«      S r\   )rÛ   rá   Úhandle_error)r   Úrequestr   rç   s      €r   rÂ  zBaseWSGIServer.handle_error9  s#   ø€ ð ×"Ò"Øä‰wÑ# G¨^Ó<Ð<r   c                ó„  — d}t        |dd«      }|g}| j                  t        k(  r|j                  d| j                  › �«       ná| j
                  €dnd}| j                  }| j                  dv r‰|j                  d	| j                  › d
�«       | j                  dk(  rd}t        t        j                  «      }nd}t        t        j                  «      }|j                  d|› d|› d| j                  › �«       d|v rd|› d�}|j                  d|› d|› d| j                  › �«       t        ddj                  |«      «       y)z<Show information about the address when starting the server.zvWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.r÷   r   z * Running on Nr`   ra   >   ú::ú0.0.0.0z * Running on all addresses (ú)rÆ  r™  z[::1]rŒ  r…  ú[ú]r  r  )r  r§  rŽ  Úappendrk  r~   rž  rä   rˆ  r†  r‰  r   Újoin)r   Údev_warningÚmessagesr�   Údisplay_hostnameÚ	localhosts         r   Úlog_startupzBaseWSGIServer.log_startupA  s5  € ðAð 	ô " +¨v°uÓ=ˆØ�=ˆà×Ñ¤'Ò)Ø�O‰O˜n¨T¯Y©Y¨KÐ8Õ9à#×/Ñ/Ð7‘V¸WˆFØ#Ÿy™yÐà�y‰yÐ-Ñ-Ø—‘Ð"?ÀÇ	Á	¸{È!Ð LÔMà—9‘9 	Ò)Ø +�IÜ'7¼¿¹Ó'GÑ$à '�IÜ'7¼¿¹Ó'HÐ$à—‘ .°°¸¸I¸;ÀaÈÏ	É	À{Ð SÔTàÐ&Ñ&Ø%&Ð'7Ð&8¸Ð#:Ð à�O‰O˜n¨V¨H°CÐ8HÐ7IÈÈ4Ï9É9È+ÐVÔWäˆV�T—Y‘Y˜xÓ(Õ)r   )NFNN)rk  r   r‰  r?   rÒ   r+   r¹  útype[WSGIRequestHandler] | NonerÛ   rS   r~   ú_TSSLContextArg | Nonerº  ú
int | Noner   rQ   r  )g      à?)r¾  Úfloatr   rQ   )rÃ  r   r   útuple[str, int] | strr   rQ   r  )r   r    r!   rV   r…   r†   ÚLISTEN_QUEUEÚrequest_queue_sizeÚallow_reuse_addressr6   r—   r¿  rÂ  rÐ  r  ©rç   s   @r   rY   rY   ¼  sÀ   ø„ ñð
 €KØ€LØ%ÐØÐð 48Ø#(Ø.2ØðeTàðeTð ðeTð ð	eTð
 1ðeTð !ðeTð ,ðeTð ðeTð 
õeTóN#ö ð=Øð=Ø.Cð=à	õ=÷ *r   rY   c                  ó   — e Zd ZdZdZdZy)ÚThreadedWSGIServerz†A WSGI server that handles concurrent requests in separate
    threads.

    Use :func:`make_server` to create a server instance.
    TN)r   r    r!   rV   r…   Údaemon_threadsr"   r   r   rÛ  rÛ  d  s   „ ñð €KØ�Nr   rÛ  c                  óV   ‡ — e Zd ZdZdZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚForkingWSGIServerz�A WSGI server that handles concurrent requests in separate forked
    processes.

    Use :func:`make_server` to create a server instance.
    Tc	           	     ó`   •— t         st        d«      ‚t        ‰	| �  |||||||«       || _        y )Nz'Your platform does not support forking.)Úcan_forkrA   rá   r6   Úmax_children)
r   rk  r‰  rÒ   Ú	processesr¹  rÛ   r~   rº  rç   s
            €r   r6   zForkingWSGIServer.__init__x  s7   ø€ õ ÜÐFÓGÐGä‰Ñ˜˜t S¨'Ð3EÀ{ÐTVÔWØ%ˆÕr   )é(   NFNN)rk  r   r‰  r?   rÒ   r+   râ  r?   r¹  rÑ  rÛ   rS   r~   rÒ  rº  rÓ  r   rQ   )r   r    r!   rV   r†   r6   r  rÙ  s   @r   rÞ  rÞ  o  s‚   ø„ ñð €Lð Ø37Ø#(Ø.2Øð&àð&ð ð&ð ð	&ð
 ð&ð 1ð&ð !ð&ð ,ð&ð ð&ð 
÷&ñ &r   rÞ  c	           
     ó¢   — |r|dkD  rt        d«      ‚|rt        | ||||||¬«      S |dkD  rt        | |||||||¬«      S t        | ||||||¬«      S )a6  Create an appropriate WSGI server instance based on the value of
    ``threaded`` and ``processes``.

    This is called from :func:`run_simple`, but can be used separately
    to have access to the server object, such as to run it in a separate
    thread.

    See :func:`run_simple` for parameter docs.
    r   z4Cannot have a multi-thread and multi-process server.©rº  )rA   rÛ  rÞ  rY   )	rk  r‰  rÒ   Úthreadedrâ  Úrequest_handlerrÛ   r~   rº  s	            r   Úmake_serverrè  Š  s‡   € ñ( �I ’MÜÐOÓPÐPáÜ!Ø�$˜˜_Ð.@À+ÐRTô
ð 	
ð �1‚}Ü ØØØØØØØØô	
ð 		
ô Øˆd�C˜Ð*<¸kÈbôð r   c                 óF   — t         j                  j                  d«      dk(  S )zqCheck if the server is running as a subprocess within the
    Werkzeug reloader.

    .. versionadded:: 0.10
    ÚWERKZEUG_RUN_MAINÚtrue)rt  rœ   r’   r"   r   r   Úis_running_from_reloaderrì  ·  s   € ô �:‰:�>‰>Ð-Ó.°&Ñ8Ð8r   c                óÆ  — t        |t        «      st        d«      ‚|rddlm}  |||«      }|r+ddlm}  |||¬«      }|j                  j                  | «       t        «       sd}nt        t        j                  d   «      }t        | |||
|||||¬«	      }|j                  j                  d	«       t        |j!                  «       «      t        j                  d<   t        «       s&|j#                  «        t%        d
t'        dd«      «       |r/ddlm} 	  ||j,                  ||||	¬«       |j/                  «        y|j-                  «        y# |j/                  «        w xY w)a  Start a development server for a WSGI application. Various
    optional features can be enabled.

    .. warning::

        Do not use the development server when deploying to production.
        It is intended for use only during local development. It is not
        designed to be particularly efficient, stable, or secure.

    :param hostname: The host to bind to, for example ``'localhost'``.
        Can be a domain, IPv4 or IPv6 address, or file path starting
        with ``unix://`` for a Unix socket.
    :param port: The port to bind to, for example ``8080``. Using ``0``
        tells the OS to pick a random free port.
    :param application: The WSGI application to run.
    :param use_reloader: Use a reloader process to restart the server
        process when files are changed.
    :param use_debugger: Use Werkzeug's debugger, which will show
        formatted tracebacks on unhandled exceptions.
    :param use_evalex: Make the debugger interactive. A Python terminal
        can be opened for any frame in the traceback. Some protection is
        provided by requiring a PIN, but this should never be enabled
        on a publicly visible server.
    :param extra_files: The reloader will watch these files for changes
        in addition to Python modules. For example, watch a
        configuration file.
    :param exclude_patterns: The reloader will ignore changes to any
        files matching these :mod:`fnmatch` patterns. For example,
        ignore cache files.
    :param reloader_interval: How often the reloader tries to check for
        changes.
    :param reloader_type: The reloader to use. The ``'stat'`` reloader
        is built in, but may require significant CPU to watch files. The
        ``'watchdog'`` reloader is much more efficient but requires
        installing the ``watchdog`` package first.
    :param threaded: Handle concurrent requests using threads. Cannot be
        used with ``processes``.
    :param processes: Handle concurrent requests using up to this number
        of processes. Cannot be used with ``threaded``.
    :param request_handler: Use a different
        :class:`~BaseHTTPServer.BaseHTTPRequestHandler` subclass to
        handle requests.
    :param static_files: A dict mapping URL prefixes to directories to
        serve static files from using
        :class:`~werkzeug.middleware.SharedDataMiddleware`.
    :param passthrough_errors: Don't catch unhandled exceptions at the
        server level, let the server crash instead. If ``use_debugger``
        is enabled, the debugger will still catch such errors.
    :param ssl_context: Configure TLS to serve over HTTPS. Can be an
        :class:`ssl.SSLContext` object, a ``(cert_file, key_file)``
        tuple to create a typical context, or the string ``'adhoc'`` to
        generate a temporary self-signed certificate.

    .. versionchanged:: 2.1
        Instructions are shown for dealing with an "address already in
        use" error.

    .. versionchanged:: 2.1
        Running on ``0.0.0.0`` or ``::`` shows the loopback IP in
        addition to a real IP.

    .. versionchanged:: 2.1
        The command-line interface was removed.

    .. versionchanged:: 2.0
        Running on ``0.0.0.0`` or ``::`` shows a real IP address that
        was bound as well as a warning not to run the development server
        in production.

    .. versionchanged:: 2.0
        The ``exclude_patterns`` parameter was added.

    .. versionchanged:: 0.15
        Bind to a Unix socket by passing a ``hostname`` that starts with
        ``unix://``.

    .. versionchanged:: 0.10
        Improved the reloader and added support for changing the backend
        through the ``reloader_type`` parameter.

    .. versionchanged:: 0.9
        A command-line interface was added.

    .. versionchanged:: 0.8
        ``ssl_context`` can be a tuple of paths to the certificate and
        private key files.

    .. versionchanged:: 0.6
        The ``ssl_context`` parameter was added.

    .. versionchanged:: 0.5
       The ``static_files`` and ``passthrough_errors`` parameters were
       added.
    zport must be an integerr   )ÚSharedDataMiddleware)ÚDebuggedApplication)ÚevalexNÚWERKZEUG_SERVER_FDrå  Tr  zPress CTRL+C to quitrþ   )Úrun_with_reloader)Úextra_filesÚexclude_patternsÚintervalÚreloader_type)r€   r?   r>  Úmiddleware.shared_datarî  Údebugrï  Útrusted_hostsrÊ  rì  rt  rœ   rè  rä   Úset_inheritabler   ÚfilenorÐ  r   r  Ú	_reloaderrò  r¿  r¬  )Úhostnamer‰  ÚapplicationÚuse_reloaderÚuse_debuggerÚ
use_evalexró  rô  Úreloader_intervalrö  ræ  râ  rç  Ústatic_filesrÛ   r~   rî  rï  rº  Úsrvrò  s                        r   Ú
run_simpler  À  s;  € ô` �dœCÔ ÜÐ1Ó2Ð2áÝ@á*¨;¸ÓEˆáÝ.á)¨+¸jÔIˆð 	×!Ñ!×(Ñ(¨Ô2ä#Ô%Ø‰ä”—‘Ð0Ñ1Ó2ˆä
ØØØØØØØØØô
€Cð ‡J�J×Ñ˜tÔ$Ü'*¨3¯:©:«<Ó'8„B‡J�JÐ#Ñ$ä#Ô%Ø�‰ÔÜˆV”[Ð!7¸ÓBÔCáÝ0ð		ÙØ×!Ñ!Ø'Ø!1Ø*Ø+õð ×ÑÕà×ÑÕøð ×ÑÕús   ÄE ÅE )rž   r   r)  r   r   r   r\   )rV  ú
str | Noner   z2tuple[Certificate, RSAPrivateKeyWithSerialization])NN)rj  r   rk  r  rV  r  r   ztuple[str, str])r   r)   )rl  r   rm  r  r  rÓ  r   r)   )r|   zException | Noner   rS   )rk  r   r‰  r?   r   úsocket.AddressFamily)rk  r   r‰  r?   r•  r  r   rÕ  )r•  r  r   r   )Fr   NFNN)rk  r   r‰  r?   rÒ   r+   ræ  rS   râ  r?   rç  rÑ  rÛ   rS   r~   rÒ  rº  rÓ  r   rY   rR   )FFTNNr   ÚautoFr   NNFN)"rý  r   r‰  r?   rþ  r+   rÿ  rS   r   rS   r  rS   ró  út.Iterable[str] | Nonerô  r	  r  r?   rö  r   ræ  rS   râ  r?   rç  rÑ  r  z'dict[str, str | tuple[str, str]] | NonerÛ   rS   r~   rÒ  r   rQ   )PrV   Ú
__future__r   r¯  Úiort  rÌ   rä   Úsocketserverrƒ   Útypingr�  r   rK  r   r   Úhttp.serverr   r   Úurllib.parser	   r
   Ú	_internalr   r   Ú
exceptionsr   Úurlsr   r•   rã   rË   ÚSSLEOFErrorr   r  r=  r   r(  r   Ú
__import__rÑ   rà  r'   r‡  rŽ  r˜   rÖ  ÚOptionalÚUnionr´  r   ÚLiteralÚ_TSSLContextArgÚTYPE_CHECKINGÚ_typeshed.wsgir+   r,   Ú-cryptography.hazmat.primitives.asymmetric.rsar-   Úcryptography.x509r.   Ú	RawIOBaser0   rX   r  rZ  ro  rz  rv  rå   rŠ  r—  rž  rY   ÚThreadingMixInrÛ  rÞ  rè  rì  r  r"   r   r   ú<module>r     sì  ðòõ #ã Û 	Û 	Û Û Û Û 
Û Ý #Ý Ý Ý .Ý "Ý  Ý !å Ý +Ý +Ý ðBÛð 	Ø�‰Ø�‰ð>ÐÐ:ó ð" €à‡7�7ˆd‚?ðÙ�:Ôñ �2�vÓ€áØ×,Ñ,�L÷ñ ðØ�n‰n€Gð €à—*‘*Ø‡G�GÐ˜e C¨¯©°C©Ð$8Ñ9¸1¿9¹9ÀWÑ;MÐMÑNñ€ð ‡?‚?Ý.Ý.õõ .ô;�R—\‘\ô ;ô|D
Ð/ô D
óN
ð( ð.Øð.à7ó.ðd ?Cð) Øð) Ø$ð) Ø1;ð) àó) óXð> JNðØðØ)ðØ<Fðàóô*+óðØ
ðØðØ"6ðàóó""ô$e*�Zô e*ôP˜×4Ñ4°nô ô&˜ nô &ð> ØØ7;Ø$Ø*.Øð*Ø
ð*à
ð*ð 
ð*ð ð	*ð
 ð*ð 5ð*ð ð*ð (ð*ð 	ð*ð ó*óZ9ð ØØØ*.Ø/3ØØØØØ7;Ø<@Ø$Ø*.ð!eØðeà
ðeð !ðeð ð	eð
 ðeð ðeð (ðeð -ðeð ðeð ðeð ðeð ðeð 5ðeð :ðeð ðeð  (ð!eð" 
ô#eøðe ò 
B÷ñ ñ ‹+€CØ!0°&·.±.Ð AÓð
Bûð" ò Ø‹ðûð ò ØƒGðús6   Á-"H# Â!I ÃI È#$IÉ
IÉIÉIÉI'É&I'