Ë
    ÑÕ°j³›  ã                  óà  — 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mZ 	 ddlZe ejB                  ejD                  fZ#de$d<   dZ'ejP                  dk(  r		  e)d«        e*ed«      Z+e+rejX                  Z,n
 G d„ d«      Z,	 ejZ                  Z.dZ0ejb                  ejd                  de3e4ejb                  e4   f   ejj                  d   f      Z6ejn                  rddl8m9Z9 dd l8m:Z: dd!l;m<Z< dd"l=m>Z>  G d#„ d$ej~                  «      Z@ G d%„ d&e«      ZAd9d'„ZB	 d:	 	 	 d;d(„ZC	 d<	 	 	 	 	 	 	 d=d)„ZDd>d*„ZE	 d<	 	 	 	 	 	 	 d?d+„ZFd:d@d,„ZGdAd-„ZH	 	 	 	 	 	 	 	 dBd.„ZIdCd/„ZJ G d0„ d1e«      ZK G d2„ d3ej˜                  eK«      ZM G d4„ d5e,eK«      ZN	 	 	 	 	 	 dD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dEd6„ZOdFd7„ZP	 	 	 	 	 	 	 	 	 	 	 	 	 dG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dHd8„ZQy# e%$ r#  G d„ d«      Z& e&«       Ze ejB                  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)IaØ  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)Úparse_set_header)Ú
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     úF/var/www/mission/venv/lib/python3.12/site-packages/werkzeug/serving.pyÚ__getattr__z_SslDummy.__getattr__2   s   € Üð2óð ó    N©r   ÚstrÚreturnút.Any)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   1   s   „ ô	r   r   TÚntÚcoloramaFÚforkc                  ó   — e Zd Zy)ÚForkingMixInN)r    r!   r"   r#   r   r   r(   r(   I   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__d   s   € ØˆŒØˆŒ
Øˆ�	r   c                 ó   — y)NTr#   ©r   s    r   ÚreadablezDechunkedInput.readablei   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)r3   ÚreadlineÚdecodeÚintÚstripÚ
ValueErrorÚOSError)r   Úliner5   Úes       r   Úread_chunk_lenzDechunkedInput.read_chunk_lenl   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)	r4   Úlenr5   rF   Úminr3   Úreadr>   rC   )r   ÚbufrM   ÚnÚ
terminators        r   ÚreadintozDechunkedInput.readintov   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)r6   zt.IO[bytes]r   ÚNone©r   Úbool©r   r@   )rN   Ú	bytearrayr   r@   )r    r!   r"   Ú__doc__r7   r:   rF   rQ   r#   r   r   r1   r1   a   s   „ ÙBóó
óô&r   r1   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)r[   Ú_server_versionr9   s    r   Úserver_versionz!WSGIRequestHandler.server_version¤   s   € à�{‰{×*Ñ*Ð*r   c                ód  — 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 d"t9        |j;                  d#«      «      v rd$|d%<   t=        |d	   «      |d	<   |j                  r|j                  r|j                  |d&<   	 | j                  j?                  d$¬'«      }|�tA        jB                  |«      |d(<   |S # tD        $ r  | j                  jG                  d)d*«       Y |S tH        $ 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_ú,ÚchunkedÚHTTP_TRANSFER_ENCODINGTzwsgi.input_terminatedÚ	HTTP_HOST)Úbinary_formÚSSL_CLIENT_CERTÚerrorz&Cannot fetch SSL peer certificate info)%r
   Úpathr[   Ússl_contextÚclient_addressÚ
isinstancer   ÚschemeÚnetlocr	   r6   ÚsysÚstderrÚmultithreadÚmultiprocessÚ
connectionr_   Úcommandr   ÚqueryÚaddress_stringÚport_integerÚserver_addressÚrequest_versionÚheadersÚitemsÚupperÚreplacer   Úgetr1   ÚgetpeercertÚsslÚDER_cert_to_PEM_certrB   ÚlogÚAttributeError)r   Úrequest_urlÚ
url_schemeÚ	path_infoÚenvironÚkeyÚvalueÚ	peer_certs           r   Úmake_environzWSGIRequestHandler.make_environ¨   sq  € Ü˜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ð
	!ð Ô(¨¯©Ð5MÓ)NÓOÑOØ/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   Ë6K; Ë;%L/Ì#L/Ì.L/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ÚExpectrh   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   rh   zcontent-lengthrf   ÚHEADéd   éÈ   >   é0  éÌ   úHTTP/1.1TzTransfer-Encodingrx   Ú
ConnectionÚclosezapplications must write bytesé   rI   )ÚsplitrB   r@   Úsend_responseÚsetÚsend_headerÚaddÚlowerÚprotocol_versionÚend_headersr�   ÚbytesÚwfileÚwriteÚhexrK   Ú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Úselectr6   rM   rK   r«   Úhasattr)ÚappÚapplication_iterr»   ÚselectorÚ
total_sizeÚtotal_readsrÀ   rœ   rÁ   r   rÊ   r·   s         €€€€€€r   Úexecutez,WSGIRequestHandler.run_wsgi.<locals>.executeK  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   rR   r]   )rÓ   r,   r   rR   )r�   r“   r²   rA   r¶   r·   r    rœ   r[   rÓ   r   Úconnection_droppedÚ	ExceptionÚpassthrough_errorsÚclose_connectionr   Údebug.tbtoolsrÙ   Úrender_traceback_textr—   )r   rØ   rE   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Û   r[   r   Úis_ssl_errorÚ	log_error)r   rE   Ú	__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œ   rm   rc   r   )rí   rœ   r€   r9   s    r   r‹   z!WSGIRequestHandler.address_string§  s:   € Ü�4˜ DÔ)Ø—<‘< Ñ.Ð.à×"Ò"Øà×"Ñ" 1Ñ%Ð%r   c                ó    — | j                   d   S )Nr   )r€   r9   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   rR   r]   )r}   ÚBaseExceptionrœ   zWSGIEnvironment | Noner   rR   r   rU   )rs   rs   )r¾   ú	int | strr  r  r   rR   )r  r   r  r   r   rR   ©r  r   r  r   r  r   r   rR   )r    r!   r"   rW   Ú__annotations__Úpropertyr_   r    rà   rã   rÚ   r   r‹   rŒ   r   Ú	maketransÚranger  Úordr	  rç   r  r—   Ú__classcell__)Ú.0Úcrè   s   00@r   rY   rY   Ÿ   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
rY   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.primitivesr0  Ú)cryptography.hazmat.primitives.asymmetricr1  Úcryptography.x509.oidr2  Ú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/  r0  r1  r2  r5  ÚpkeyÚsubjectÚcerts
             r   Úgenerate_adhoc_ssl_pairr[  ù  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)rW  r   ©Úserializationz.crtz.keyÚwb©Úencodingr  Úencryption_algorithm)r[  r;  r^  Úopenr·   Úpublic_bytesÚEncodingÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)	Ú	base_pathÚhostrW  rZ  rX  r^  Ú	cert_fileÚ	pkey_fileÚfs	            r   Úmake_ssl_devcertrp  *  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Útempfiler[  r;  r^  ÚmkstemprÏ   ÚosÚremover·   rd  re  rf  rg  rh  ri  rj  r«   Úload_ssl_context)
rr  rs  rZ  rX  r^  Úcert_handlerm  Úpkey_handlern  Úctxs
             r   Úgenerate_adhoc_ssl_contextr{  V  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)rm  rn  Úprotocolrz  s       r   rw  rw  t  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)rl  Ú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_unixru  r~   ÚabspathÚ	partitionrå   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚgaierror)rl  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ÚconnectrC   Úgetsockname)r–  rl  Ú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 )rZ   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ˆ  zPOn macOS, try searching for and disabling 'AirPlay Receiver' in System Settings.r   r+   T)Úserver_sider   z	Werkzeug/Úwerkzeug)3rY   Úvarsr†   r‡   r³   rl  rŠ  rÓ   rÜ   r‹  Úaddress_familyr˜  r@   r�  r‚  rƒ  r   ru  r~   ÚexistsÚunlinkrâ   r7   Úserver_bindÚserver_activaterC   Úserver_closeÚprintÚstrerrorr„   r…   ÚerrnoÚ
EADDRINUSEÚplatformÚexitr  rå   Úfromfdr“  r�  r�   r�   Útuplerw  r{  Úwrap_socketr   Úimportlib.metadataÚmetadataÚversionr^   )r   rl  rŠ  rÓ   ÚhandlerrÜ   r   Úfdr¨  r�   rE   Ú	importlibrè   s               €r   r7   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ÜðFä!$§¡õô —‘˜—’ûÜ ò Ø×!Ñ!Ô#Øðú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_forever2  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_error:  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 Nra   rb   >   ú::ú0.0.0.0z * Running on all addresses (ú)rÇ  rš  z[::1]r�  r†  ú[ú]r  r  )r  r¨  r�  Úappendrl  r   rŸ  rå   r‰  r‡  rŠ  r   Újoin)r   Údev_warningÚmessagesr‚   Údisplay_hostnameÚ	localhosts         r   Úlog_startupzBaseWSGIServer.log_startupB  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)rl  r   rŠ  r@   rÓ   r,   rº  útype[WSGIRequestHandler] | NonerÜ   rT   r   ú_TSSLContextArg | Noner»  ú
int | Noner   rR   r  )g      à?)r¿  Úfloatr   rR   )rÄ  r   r€   útuple[str, int] | strr   rR   r  )r    r!   r"   rW   r†   r‡   ÚLISTEN_QUEUEÚrequest_queue_sizeÚallow_reuse_addressr7   r—   rÀ  rÃ  rÑ  r   ©rè   s   @r   rZ   rZ   ½  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   rZ   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"   rW   r†   Údaemon_threadsr#   r   r   rÜ  rÜ  e  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_forkrB   râ   r7   Úmax_children)
r   rl  rŠ  rÓ   Ú	processesrº  rÜ   r   r»  rè   s
            €r   r7   zForkingWSGIServer.__init__y  s7   ø€ õ ÜÐFÓGÐGä‰Ñ˜˜t S¨'Ð3EÀ{ÐTVÔWØ%ˆÕr   )é(   NFNN)rl  r   rŠ  r@   rÓ   r,   rã  r@   rº  rÒ  rÜ   rT   r   rÓ  r»  rÔ  r   rR   )r    r!   r"   rW   r‡   r7   r   rÚ  s   @r   rß  rß  p  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»  )rB   rÜ  rß  rZ   )	rl  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)ru  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í  ru  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]   )rW  ú
str | Noner   z2tuple[Certificate, RSAPrivateKeyWithSerialization])NN)rk  r   rl  r  rW  r  r   ztuple[str, str])r   r*   )rm  r   rn  r  r€  rÔ  r   r*   )r}   zException | Noner   rT   )rl  r   rŠ  r@   r   úsocket.AddressFamily)rl  r   rŠ  r@   r–  r  r   rÖ  )r–  r  r   r   )Fr   NFNN)rl  r   rŠ  r@   rÓ   r,   rç  rT   rã  r@   rè  rÒ  rÜ   rT   r   rÓ  r»  rÔ  r   rZ   rS   )FFTNNr   ÚautoFr   NNFN)"rþ  r   rŠ  r@   rÿ  r,   r   rT   r  rT   r  rT   rô  út.Iterable[str] | Nonerõ  r
  r  r@   r÷  r   rç  rT   rã  r@   rè  rÒ  r  z'dict[str, str | tuple[str, str]] | NonerÜ   rT   r   rÓ  r   rR   )RrW   Ú
__future__r   r°  Úioru  rÍ   rå   Úsocketserverr„   Útypingr‚  r   rL  r   r   Úhttp.serverr   r   Úurllib.parser	   r
   Ú	_internalr   r   Ú
exceptionsr   ra   r   Ú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/   Ú	RawIOBaser1   rY   r  r[  rp  r{  rw  ræ   r‹  r˜  rŸ  rZ   Ú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   Á3"H) Â'I ÃI" È)$IÉIÉIÉIÉ"I-É,I-