Ë
    °ŒjûP  ã                  óR  — 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mZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
l m!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+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3  G d„ d«      Z4 G d„ de4«      Z5 G d„ de4«      Z6 G d„ de4«      Z7 G d„ de4«      Z8ee9e:e;f   Z<ee<   Z=ee<   Z>ee>e=f   Z? G d„ de4«      Z@ G d„ deA«      ZB G d„ d eA«      ZC ejˆ                  d!«      ZE G d"„ d#e4«      ZFy)$é    )ÚannotationsN)ÚAsyncIterableÚ	AwaitableÚIterableÚMappingÚSequence)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Ú	token_hex)ÚAnyÚCallableÚLiteralÚUnion)Úquote)Úcollapse_excgroups)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚHeadersÚMutableHeaders)ÚClientDisconnect)ÚReceiveÚScopeÚSendc                  óÞ   — e Zd ZdZdZ	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zddd„Zedd„«       Z		 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd	„Zy)ÚResponseNúutf-8c                ó€   — || _         |�|| _        || _        | j                  |«      | _        | j                  |«       y ©N)Ústatus_codeÚ
media_typeÚ
backgroundÚrenderÚbodyÚinit_headers©ÚselfÚcontentr#   Úheadersr$   r%   s         ú]/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/starlette/responses.pyÚ__init__zResponse.__init__#   s>   € ð 'ˆÔØÐ!Ø(ˆDŒOØ$ˆŒØ—K‘K Ó(ˆŒ	Ø×Ñ˜'Õ"ó    c                ón   — |€yt        |t        t        f«      r|S |j                  | j                  «      S )Nr/   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r*   r+   s     r-   r&   zResponse.render2   s1   € Øˆ?ØÜ�g¤¤zÐ2Ô3ØˆNØ�~‰~˜dŸl™lÓ+Ð+r/   c                ó¤  — |€g }d}d}nj|j                  «       D ��cg c]5  \  }}|j                  «       j                  d«      |j                  d«      f‘Œ7 }}}|D �cg c]  }|d   ‘Œ	 }}d|v}d|v}t        | dd «      }	|	�U|rS| j                  dk  sD| j                  dv s6t        t        |	«      «      }
|j                  d|
j                  d«      f«       | j                  }|�Y|rW|j                  d	«      r$d
|j                  «       vr|d| j                  z   z  }|j                  d|j                  d«      f«       || _        y c c}}w c c}w )NTúlatin-1r   s   content-lengths   content-typer'   éÈ   )éÌ   i0  ztext/zcharset=z
; charset=)ÚitemsÚlowerr4   Úgetattrr#   ÚstrÚlenÚappendr$   Ú
startswithr5   Úraw_headers)r*   r,   rB   Úpopulate_content_lengthÚpopulate_content_typeÚkÚvÚhÚkeysr'   Úcontent_lengthÚcontent_types               r-   r(   zResponse.init_headers9   s[  € Øˆ?Ø57ˆKØ&*Ð#Ø$(Ñ!àZa×ZgÑZgÔZiÔjÑZiÑRVÐRSÐUV˜AŸG™G›I×,Ñ,¨YÓ7¸¿¹À)Ó9LÒMÐZiˆKÑjÙ"-Ó.¡+˜Q�A�a“D +ˆDÐ.Ø&7¸tÐ&CÐ#Ø$3¸4Ð$?Ð!ä�t˜V TÓ*ˆàÐÙ'Ø×%Ñ%¨Ò+¨t×/?Ñ/?À:Ñ/Mä ¤ T£›^ˆNØ×ÑÐ 1°>×3HÑ3HÈÓ3SÐTÔUà—‘ˆØÐ#Ñ(=Ø×&Ñ& wÔ/°JÀl×FXÑFXÓFZÑ4ZØ ¨t¯|©|Ñ ;Ñ;�Ø×Ñ °×1DÑ1DÀYÓ1OÐPÔQà&ˆÕùó) kùÚ.s   �:EÁEc                óh   — t        | d«      st        | j                  ¬«      | _        | j                  S )NÚ_headers)Úraw)Úhasattrr   rB   rL   )r*   s    r-   r,   zResponse.headersU   s(   € ä�t˜ZÔ(Ü*¨t×/?Ñ/?Ô@ˆDŒMØ�}‰}Ðr/   c                ó8  — t         j                  j                  «       }|||<   |�|||   d<   |�,t        |t        «      rt        |d¬«      ||   d<   n|||   d<   |�|||   d<   |�|||   d<   |rd||   d<   |rd||   d<   |	�!|	j                  «       d	v sJ d
«       ‚|	||   d<   |
r&t        j                  dk  rt        d«      ‚d||   d<   |j                  d¬«      j                  «       }| j                  j                  d|j                  d«      f«       y )Nzmax-ageT©ÚusegmtÚexpiresÚpathÚdomainÚsecureÚhttponly)ÚstrictÚlaxÚnonez1samesite must be either 'strict', 'lax' or 'none'Úsamesite)é   é   z@Partitioned cookies are only supported in Python 3.14 and above.ÚpartitionedÚ )Úheaders
   set-cookier8   )ÚhttpÚcookiesÚSimpleCookier1   r	   r
   r<   ÚsysÚversion_infoÚ
ValueErrorÚoutputÚstriprB   r@   r4   )r*   ÚkeyÚvalueÚmax_agerR   rS   rT   rU   rV   rZ   r]   ÚcookieÚ
cookie_vals                r-   Ú
set_cookiezResponse.set_cookie[   sY  € ô 04¯|©|×/HÑ/HÓ/JˆØˆˆs‰ØÐØ%,ˆF�3‰K˜	Ñ"ØÐÜ˜'¤8Ô,Ü)8¸ÈÔ)N��s‘˜IÒ&à)0��s‘˜IÑ&ØÐØ"&ˆF�3‰K˜ÑØÐØ$*ˆF�3‰K˜Ñ!ÙØ$(ˆF�3‰K˜Ñ!ÙØ&*ˆF�3‰K˜
Ñ#ØÐØ—>‘>Ó#ð (ñ ð Cð Có	Cð ð
 '/ˆF�3‰K˜
Ñ#ÙÜ×Ñ 'Ò)Ü Ð!cÓdÐdØ)-ˆF�3‰K˜Ñ&à—]‘]¨"�]Ó-×3Ñ3Ó5ˆ
Ø×Ñ×Ñ °
×0AÑ0AÀ)Ó0LÐ MÕNr/   c           
     ó6   — | j                  |dd|||||¬«       y )Nr   )rj   rR   rS   rT   rU   rV   rZ   )rm   )r*   rh   rS   rT   rU   rV   rZ   s          r-   Údelete_cookiezResponse.delete_cookieˆ   s-   € ð 	�‰ØØØØØØØØð 	õ 		
r/   c              ƒ  ó  K  — |d   dk(  rdnd} ||dz   | j                   | j                  dœ«      ƒ d {  –—†   ||dz   | j                  dœ«      ƒ d {  –—†  | j                  �| j                  «       ƒ d {  –—†  y y 7 ŒJ7 Œ,7 Œ
­w)	NÚtypeÚ	websocketz
websocket.r^   úhttp.response.start©rq   Ústatusr,   úhttp.response.body)rq   r'   )r#   rB   r'   r%   )r*   ÚscopeÚreceiveÚsendÚprefixs        r-   Ú__call__zResponse.__call__œ   sš   è ø€ Ø!& v¡°+Ò!=‘À2ˆÙàÐ!6Ñ6Ø×*Ñ*Ø×+Ñ+ñó
÷ 	
ð 	
ñ ˜FÐ%9Ñ9À4Ç9Á9ÑMÓN×NÐNà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð	
øð 	Oøð $ús3   ‚3BµB ¶BÁBÁ#BÁ9BÁ:BÂBÂB)Nr9   NNN©r+   r   r#   Úintr,   úMapping[str, str] | Noner$   ú
str | Noner%   úBackgroundTask | NoneÚreturnÚNone)r+   r   r�   zbytes | memoryviewr"   )r,   r~   r�   r‚   )r�   r   )	r^   NNÚ/NFFrX   F)rh   r>   ri   r>   rj   z
int | NonerR   zdatetime | str | int | NonerS   r   rT   r   rU   ÚboolrV   r„   rZ   ú'Literal['lax', 'strict', 'none'] | Noner]   r„   r�   r‚   )rƒ   NFFrX   )rh   r>   rS   r>   rT   r   rU   r„   rV   r„   rZ   r…   r�   r‚   ©rw   r   rx   r   ry   r   r�   r‚   )Ú__name__Ú
__module__Ú__qualname__r$   r5   r.   r&   r(   Úpropertyr,   rm   ro   r{   © r/   r-   r   r      st  „ Ø€JØ€Gð ØØ,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
ó#ó,ô'ð8 òó ðð Ø"Ø/3ØØ!ØØØ<AØ!ð+Oàð+Oð ð+Oð ð	+Oð
 -ð+Oð ð+Oð ð+Oð ð+Oð ð+Oð :ð+Oð ð+Oð 
ó+Oð` Ø!ØØØ<Að
àð
ð ð
ð ð	
ð
 ð
ð ð
ð :ð
ð 
ó
ô($r/   r   c                  ó   — e Zd ZdZy)ÚHTMLResponsez	text/htmlN©r‡   rˆ   r‰   r$   r‹   r/   r-   r�   r�   «   s   „ Ø�Jr/   r�   c                  ó   — e Zd ZdZy)ÚPlainTextResponseú
text/plainNrŽ   r‹   r/   r-   r�   r�   ¯   s   „ Ø�Jr/   r�   c                  óL   ‡ — e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚJSONResponsezapplication/jsonc                ó,   •— t         ‰| �  |||||«       y r"   )Úsuperr.   )r*   r+   r#   r,   r$   r%   Ú	__class__s         €r-   r.   zJSONResponse.__init__¶   s   ø€ ô 	‰Ñ˜ +¨w¸
ÀJÕOr/   c                óT   — t        j                  |ddd d¬«      j                  d«      S )NF)Ú,Ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr    )ÚjsonÚdumpsr4   r6   s     r-   r&   zJSONResponse.renderÀ   s-   € Ü�z‰zØØØØØ!ô
÷ ‰&�‹/ð	r/   ©r9   NNNr|   )r+   r   r�   r2   )r‡   rˆ   r‰   r$   r.   r&   Ú__classcell__©r–   s   @r-   r“   r“   ³   sa   ø„ Ø#€Jð
 Ø,0Ø!%Ø,0ðPàðPð ðPð *ð	Pð
 ðPð *ðPð 
õP÷r/   r“   c                  ó:   ‡ — e Zd Z	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚRedirectResponsec                ór   •— t         ‰| �  d|||¬«       t        t        |«      d¬«      | j                  d<   y )Nr/   )r+   r#   r,   r%   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)r•   r.   r   r>   r,   )r*   Úurlr#   r,   r%   r–   s        €r-   r.   zRedirectResponse.__init__Ë   s6   ø€ ô 	‰Ñ °+ÀwÐ[eÐÔfÜ#(¬¨S«Ð8MÔ#Nˆ�‰�ZÒ r/   )i3  NN)
r¨   z	str | URLr#   r}   r,   r~   r%   r€   r�   r‚   )r‡   rˆ   r‰   r.   r¡   r¢   s   @r-   r¤   r¤   Ê   sO   ø„ ð Ø,0Ø,0ðOàðOð ðOð *ð	Oð
 *ðOð 
÷Oñ Or/   r¤   c                  óX   — e Zd ZU ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Zd
d„Zdd„Zdd„Zy)ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorNc                ó¼   — t        |t        «      r|| _        nt        |«      | _        || _        |€| j
                  n|| _        || _        | j                  |«       y r"   )r1   r   r¬   r   r#   r$   r%   r(   r)   s         r-   r.   zStreamingResponse.__init__ß   sR   € ô �gœ}Ô-Ø!(ˆDÕä!6°wÓ!?ˆDÔØ&ˆÔØ-7Ð-?˜$Ÿ/š/ÀZˆŒØ$ˆŒØ×Ñ˜'Õ"r/   c              ƒ  óB   K  — 	  |«       ƒ d {  –—† }|d   dk(  ry Œ7 Œ­w)Nrq   zhttp.disconnectr‹   )r*   rx   Úmessages      r-   Úlisten_for_disconnectz'StreamingResponse.listen_for_disconnectð   s*   è ø€ ØÙ#›I—oˆGØ�v‰Ð"3Ò3Øð Ø%ús   ‚Ž�c              ƒ  óJ  K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  | j                  2 3 d {  –—† }t        |t        t
        f«      s|j                  | j                  «      } |d|ddœ«      ƒ d {  –—†  ŒO7 Œ_7 ŒL7 Œ	6  |ddddœ«      ƒ d {  –—†7   y ­w)Nrs   rt   rv   T©rq   r'   Ú	more_bodyr/   F)r#   rB   r¬   r1   r2   r3   r4   r5   )r*   ry   Úchunks      r-   Ústream_responsez!StreamingResponse.stream_responseö   s®   è ø€ Ùà-Ø×*Ñ*Ø×+Ñ+ñó
÷ 	
ð 	
ð  ×-Ò-÷ 	Y�%Ü˜e¤e¬ZÐ%8Ô9ØŸ™ T§\¡\Ó2�ÙÐ 4¸eÐRVÑWÓX×XÑXð	
øð	Yøð Yøð .ñ
 Ð0¸#ÈEÑRÓS×SÒSùsN   ‚$B#¦B§B#·B»B¼B¿AB#Â B
ÂB#ÂBÂ
B#ÂB#ÂBÂB#c           	   ƒ  óÌ  ‡K  — t        t        t        |j                  di «      j                  dd«      j	                  d«      «      «      }|dk\  r	 | j                  |«      ƒ d {  –—†  n�t        «       5  t        j                  «       4 ƒd {  –—† Šdˆfd„}‰j                  |t        | j
                  |«      «        |t        | j                  |«      «      ƒ d {  –—†  d d d «      ƒd {  –—†  d d d «       | j                  �| j                  «       ƒ d {  –—†  y y 7 Œ»# t        $ r t        «       ‚w xY w7 Œ«7 Œ]7 ŒO# 1 ƒd {  –—†7  sw Y   Œ_xY w# 1 sw Y   ŒcxY w7 ŒF­w)NÚasgiÚspec_versionz2.0Ú.)é   é   c              “  ód   •K  —  | «       ƒ d {  –—†  ‰j                   j                  «        y 7 Œ­wr"   )Úcancel_scopeÚcancel)ÚfuncÚ
task_groups    €r-   Úwrapz(StreamingResponse.__call__.<locals>.wrap  s'   øè ø€ Ù"›fŸ˜Ø"×/Ñ/×6Ñ6Õ8ð %ús   ƒ0Ž.� 0)r¿   zCallable[[], Awaitable[None]]r�   r‚   )ÚtupleÚmapr}   ÚgetÚsplitrµ   ÚOSErrorr   r   ÚanyioÚcreate_task_groupÚ
start_soonr   r°   r%   )r*   rw   rx   ry   r¸   rÁ   rÀ   s         @r-   r{   zStreamingResponse.__call__  s,  øè ø€ ÜœS¤ e§i¡i°¸Ó&;×&?Ñ&?ÀÐPUÓ&V×&\Ñ&\Ð]`Ó&aÓbÓcˆà˜6Ò!ð)Ø×*Ñ*¨4Ó0×0Ñ0ô $Õ%Ü ×2Ñ2×4Ô4¸
õ9ð ×)Ñ)¨$´¸×8LÑ8LÈdÓ0SÔTÙœw t×'AÑ'AÀ7ÓKÓL×LÐL÷ 5×4÷ &ð �?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ð 1ùÜò )Ü&Ó(Ð(ð)úð 5øð Møð 5ø×4×4Ñ4ú÷ &Ð%úð $ús¯   ƒAE$ÁD$ Á&D"Á'D$ Á+E$Á6EÂD;ÂEÂAEÃD=Ã EÃ$EÃ/D?Ã0EÃ4'E$ÄE"ÄE$Ä"D$ Ä$D8Ä8E$Ä;EÄ=EÄ?EÅE	ÅE
ÅE	ÅEÅEÅE$r    )r+   ÚContentStreamr#   r}   r,   r~   r$   r   r%   r€   r�   r‚   )rx   r   r�   r‚   )ry   r   r�   r‚   r†   )r‡   rˆ   r‰   Ú__annotations__r.   r°   rµ   r{   r‹   r/   r-   rª   rª   Ü   se   … Ø%Ó%ð
 Ø,0Ø!%Ø,0ð#àð#ð ð#ð *ð	#ð
 ð#ð *ð#ð 
ó#ó"óTô$r/   rª   c                  ó   — e Zd Zddd„Zy)ÚMalformedRangeHeaderc                ó   — || _         y r"   )r+   r6   s     r-   r.   zMalformedRangeHeader.__init__  s	   € Øˆ�r/   N)zMalformed range header.)r+   r>   r�   r‚   ©r‡   rˆ   r‰   r.   r‹   r/   r-   rÍ   rÍ     s   „ õr/   rÍ   c                  ó   — e Zd Zdd„Zy)ÚRangeNotSatisfiablec                ó   — || _         y r"   )Úmax_size)r*   rÓ   s     r-   r.   zRangeNotSatisfiable.__init__"  s	   € Ø ˆ�r/   N)rÓ   r}   r�   r‚   rÏ   r‹   r/   r-   rÑ   rÑ   !  s   „ ô!r/   rÑ   z(\d*)-(\d*)c                  óÚ   — e Zd ZdZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	dd	„Z
edd
„«       Z	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚFileResponsei   Nc
                ó  — || _         || _        || _        |�t        j                  dt
        «       |€t        |xs |«      d   xs d}|| _        || _        | j                  |«       | j                  j                  dd«       | j                  �Zt        | j                  «      }
|
| j                  k7  r|	› d|
› �}n|	› d| j                  › d�}| j                  j                  d	|«       || _        |�| j                  |«       y y )
Nz;The 'method' parameter is not used, and it will be removed.r   r‘   zaccept-rangesr2   z; filename*=utf-8''z; filename="Ú"zcontent-disposition)rS   r#   ÚfilenameÚwarningsÚwarnÚDeprecationWarningr   r$   r%   r(   r,   Ú
setdefaultr   Ústat_resultÚset_stat_headers)r*   rS   r#   r,   r$   r%   rØ   rÝ   ÚmethodÚcontent_disposition_typeÚcontent_disposition_filenameÚcontent_dispositions               r-   r.   zFileResponse.__init__,  s  € ð ˆŒ	Ø&ˆÔØ ˆŒØÐÜ�M‰MØMÜ"ôð ÐÜ# HÒ$4°Ó5°aÑ8ÒH¸LˆJØ$ˆŒØ$ˆŒØ×Ñ˜'Ô"Ø�‰×Ñ °Ô9Ø�=‰=Ð$Ü+0°·±Ó+?Ð(Ø+¨t¯}©}Ò<Ø)AÐ(BÐBUÐVrÐUsÐ&tÑ#à)AÐ(BÀ,ÈtÏ}É}ÈoÐ]^Ð&_Ð#Ø�L‰L×#Ñ#Ð$9Ð;NÔOØ&ˆÔØÐ"Ø×!Ñ! +Õ.ð #r/   c                óÎ  — t        |j                  «      }t        |j                  d¬«      }t        |j                  «      dz   t        |j                  «      z   }dt	        j
                  |j                  «       d¬«      j                  «       › d�}| j                  j                  d|«       | j                  j                  d|«       | j                  j                  d	|«       y )
NTrP   Ú-r×   F)Úusedforsecurityúcontent-lengthúlast-modifiedÚetag)
r>   Úst_sizer   Úst_mtimeÚhashlibÚmd5r4   Ú	hexdigestr,   rÜ   )r*   rÝ   rI   Úlast_modifiedÚ	etag_baserè   s         r-   rÞ   zFileResponse.set_stat_headersQ  s³   € Ü˜[×0Ñ0Ó1ˆÜ" ;×#7Ñ#7ÀÔEˆÜ˜×,Ñ,Ó-°Ñ3´c¸+×:MÑ:MÓ6NÑNˆ	Ø”7—;‘;˜y×/Ñ/Ó1À5ÔI×SÑSÓUÐVÐVWÐXˆà�‰×ÑÐ 0°.ÔAØ�‰×Ñ °Ô?Ø�‰×Ñ ¨Õ-r/   c              ƒ  ó  K  — |d   j                  «       dk(  }d|j                  di «      v }| j                  €Œ	 t        j                  j                  t        j                  | j                  «      ƒ d {  –—† }| j                  |«       |j                  }t        j                  |«      s%t        d| j                  › d�«      ‚| j                  }t        |¬«      }|j                  d	«      }	|j                  d
«      }
|	�|
�-| j                  |
«      s| j!                  |||«      ƒ d {  –—†  n�	 | j#                  |	|j$                  «      }t1        |«      dk(  r0|d   \  }}| j3                  ||||j$                  |«      ƒ d {  –—†  n&| j5                  |||j$                  |«      ƒ d {  –—†  | j6                  �| j7                  «       ƒ d {  –—†  y y 7 �Œb# t        $ r t        d| j                  › d�«      ‚w xY w7 ŒÕ# t&        $ r2} t)        |j*                  d¬«      |||«      ƒ d {  –—†7  cY d }~S d }~wt,        $ r9}t)        ddd|j.                  › �i¬«      } ||||«      ƒ d {  –—†7  cY d }~S d }~ww xY w7 Œú7 ŒÕ7 Œ³­w)Nrß   ÚHEADúhttp.response.pathsendÚ
extensionszFile at path z is not a file.z does not exist.)rw   Úrangezif-rangei�  )r#   i   zContent-Rangez*/)r#   r,   é   r   )ÚupperrÄ   rÝ   rÇ   Ú	to_threadÚrun_syncÚosÚstatrS   rÞ   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   Ú_should_use_rangeÚ_handle_simpleÚ_parse_range_headerré   rÍ   r�   r+   rÑ   rÓ   r?   Ú_handle_single_rangeÚ_handle_multiple_rangesr%   )r*   rw   rx   ry   Úsend_header_onlyÚsend_pathsendrÝ   Úmoder,   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                   r-   r{   zFileResponse.__call__[  sb  è ø€ Ø!& x¡×!6Ñ!6Ó!8¸FÑ!BÐØ6¸%¿)¹)ÀLÐRTÓ:UÐUˆà×ÑÐ#ðSÜ$)§O¡O×$<Ñ$<¼R¿W¹WÀdÇiÁiÓ$P×P�Ø×%Ñ% kÔ2ð #×*Ñ*�Ü—|‘| DÔ)Ü&¨°t·y±y°kÀÐ'QÓRÐRà×*Ñ*ˆKä Ô&ˆØ—[‘[ Ó)ˆ
ØŸ™ JÓ/ˆàÐ -Ð";ÀD×DZÑDZÐ[hÔDiØ×%Ñ% dÐ,<¸mÓL×LÑLð<Ø×1Ñ1°*¸k×>QÑ>QÓR�ô �6‹{˜aÒØ# A™Y‘
��sØ×/Ñ/°°e¸SÀ+×BUÑBUÐWgÓh×hÑhà×2Ñ2°4¸À×ATÑATÐVfÓg×gÐgà�?‰?Ð&Ø—/‘/Ó#×#Ñ#ð 'ðA Qúä$ò PÜ" ]°4·9±9°+Ð=MÐ#NÓOÐOðPúð Mùô (ò cØLÔ.¨s¯{©{ÈÔLÈUÐT[Ð]aÓb×bÐbÕbûÜ&ò <Ü,¸ÀÐZ\Ð]`×]iÑ]iÐ\jÐXkÐFlÔm�Ù% e¨W°dÓ;×;Ð;Õ;ûð<úð iøàgøð $úsË   ‚7Jº;G Á5GÁ6G ÂBJÄ*H Ä+JÄ1H Å8JÆJ Æ&JÆ,JÆ-#JÇJÇJÇG Ç#G=Ç=JÈ	I=È"H8È-H0È.H8È2I=È3JÈ8I=É)I8É-I0É.I8É2I=É3JÉ8I=É=JÊJÊJc              ƒ  óV  K  —  |d| j                   | j                  dœ«      ƒ d {  –—†  |r |ddddœ«      ƒ d {  –—†  y |r' |dt        | j                  «      dœ«      ƒ d {  –—†  y t	        j
                  | j                  d	¬
«      ƒ d {  –—† 4 ƒd {  –—† }d}|rR|j                  | j                  «      ƒ d {  –—† }t        |«      | j                  k(  } |d||dœ«      ƒ d {  –—†  |rŒRd d d «      ƒd {  –—†  y 7 ŒÝ7 ŒÉ7 Œ¢7 Œz7 Œs7 ŒN7 Œ$7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nrs   rt   rv   r/   Fr²   rò   )rq   rS   Úrb©r  T)	r#   rB   r>   rS   rÇ   Ú	open_fileÚreadÚ
chunk_sizer?   )r*   ry   r  r  Úfiler³   r´   s          r-   r   zFileResponse._handle_simple„  s  è ø€ ÙÐ1¸T×=MÑ=MÐZ^×ZjÑZjÑkÓl×lÐlÙÙÐ 4¸cÐPUÑVÓW×WÑWÙÙÐ 8Ä#ÀdÇiÁiÃ.ÑQÓR×RÑRä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdØ �	ÙØ"&§)¡)¨D¯O©OÓ"<×<�EÜ # E£
¨d¯o©oÑ =�IÙÐ(<ÀeÐZcÑdÓe×eÐeò  ÷ C×BÐBð 	møàWøàRøàBøÐBøð =øàeøð Cø×B×BÑBüs¯   ‚$D)¦D§D)¼D½(D)Á%DÁ&)D)ÂD
ÂD)ÂDÂD)Â#DÂ?DÃ +DÃ+DÃ,DÃ3D)Ã>DÃ?D)ÄD)ÄD)Ä
D)ÄD)ÄDÄDÄD)ÄD&ÄDÄD&Ä"D)c              ƒ  óÒ  K  — d|› d|dz
  › d|› �| j                   d<   t        ||z
  «      | j                   d<    |dd| j                  d	œ«      ƒ d {  –—†  |r |d
dddœ«      ƒ d {  –—†  y t        j                  | j
                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }|j                  |«      ƒ d {  –—†  d}|rt|j                  t        | j                  ||z
  «      «      ƒ d {  –—† }|t        |«      z  }t        |«      | j                  k(  xr ||k  } |d
||dœ«      ƒ d {  –—†  |rŒtd d d «      ƒd {  –—†  y 7 Œï7 ŒÛ7 Œ³7 Œ¬7 Œ•7 Œc7 Œ$7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Nzbytes rä   rõ   rƒ   úcontent-rangeræ   rs   éÎ   rt   rv   r/   Fr²   r  r  T)r,   r>   rB   rÇ   r  rS   Úseekr  Úminr  r?   )	r*   ry   r  r  Ú	file_sizer  r  r³   r´   s	            r-   r  z!FileResponse._handle_single_range’  sX  è ø€ ð +1°°°q¸¸q¹¸	ÀÀ9À+Ð(Nˆ�‰�_Ñ%Ü),¨S°5©[Ó)9ˆ�‰Ð%Ñ&ÙÐ1¸SÈT×M]ÑM]Ñ^Ó_×_Ð_ÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdØ—i‘i Ó&×&Ð&Ø �	ÙØ"&§)¡)¬C°·±ÀÀuÁÓ,MÓ"N×N�EØœS ›ZÑ'�EÜ # E£
¨d¯o©oÑ =Ò MÀ%È#Á+�IÙÐ(<ÀeÐZcÑdÓe×eÐeò	  ÷ C×BÐBð	 	`øàWøàBøÐBøØ&øð Oøð føð Cø×B×BÑBüsµ   ‚AE'ÁEÁE'Á(EÁ))E'ÂEÂE'ÂEÂE'ÂEÂ4E
Â53EÃ(EÃ)A EÄ)EÄ*EÄ1E'Ä<EÄ=E'ÅE'ÅE'ÅE'Å
EÅEÅEÅE'ÅE$ÅEÅE$Å E'c           	   ƒ  ó²  K  — t        d«      }| j                  |||| j                  d   «      \  }}d|› �| j                  d<   t        |«      | j                  d<    |dd| j                  dœ«      ƒ d {  –—†  |r |d	d
ddœ«      ƒ d {  –—†  y t        j                  | j                  d¬«      ƒ d {  –—† 4 ƒd {  –—† }|D ]ª  \  }	}
 |d	 ||	|
«      ddœ«      ƒ d {  –—†  |j                  |	«      ƒ d {  –—†  |	|
k  rX|j                  t        | j                  |
|	z
  «      «      ƒ d {  –—† }|	t        |«      z  }	 |d	|ddœ«      ƒ d {  –—†  |	|
k  rŒX |d	dddœ«      ƒ d {  –—†  Œ¬  |d	d|› d�j                  d«      ddœ«      ƒ d {  –—†  d d d «      ƒd {  –—†  y 7 �Œ57 �Œ"7 Œú7 Œó7 ŒÒ7 Œ»7 Œˆ7 Œh7 ŒP7 Œ)7 Œ# 1 ƒd {  –—†7  sw Y   y xY w­w)Né   zcontent-typezmultipart/byteranges; boundary=r  ræ   rs   r  rt   rv   r/   Fr²   r  r  Tó   
z
--z--
r8   )r   Úgenerate_multipartr,   r>   rB   rÇ   r  rS   r  r  r  r  r?   r4   )r*   ry   r	  r  r  ÚboundaryrI   Úheader_generatorr  r  r  r´   s               r-   r  z$FileResponse._handle_multiple_ranges¤  sæ  è ø€ ô ˜R“=ˆØ+/×+BÑ+BØ�H˜i¨¯©°nÑ)Eó,
Ñ(ˆÐ(ð +JÈ(ÈÐ(Tˆ�‰�_Ñ%Ü),¨^Ó)<ˆ�‰Ð%Ñ&ÙÐ1¸SÈT×M]ÑM]Ñ^Ó_×_Ð_ÙÙÐ 4¸cÐPUÑVÓW×WÑWä"Ÿ_™_¨T¯Y©Y¸TÔB×B×BÐBÀdÛ"(‘J�E˜3ÙÐ(<ÑFVÐW\Ð^aÓFbÐquÑvÓw×wÐwØŸ)™) EÓ*×*Ð*Ø #š+Ø&*§i¡i´°D·O±OÀSÈ5Á[Ó0QÓ&R× R˜Ø¤ U£Ñ+˜Ù"Ð,@È%Ð^bÑ#cÓd×dÐdð   #›+ñ Ð(<ÀeÐZ^Ñ_Ó`×`Ñ`ð #)ñ à 4Ø"& x j°Ð 5× <Ñ <¸YÓ GØ%*ñó÷ ð ÷ C×BÐBð	 	`ùàWùàBøÐBøàwøØ*øà RøàdøØ`øðøð Cø×B×BÑBüsð   ‚A3GÁ5F*Á6GÂF-Â)GÂ5F0Â6GÂ>F2Â?GÃGÃ!F4Ã"GÃ:F6Ã;4GÄ/F8Ä0!GÅF:Å	GÅGÅ+F<Å,(GÆF>ÆGÆGÆ$G Æ%GÆ-GÆ0GÆ2GÆ4GÆ6GÆ8GÆ:GÆ<GÆ>GÇ GÇGÇGÇ	GÇGc                óN   — || j                   d   k(  xs || j                   d   k(  S )Nrç   rè   )r,   )r*   r  s     r-   rÿ   zFileResponse._should_use_rangeÇ  s-   € Ø §¡¨_Ñ =Ñ=ÒfÀÐRV×R^ÑR^Ð_eÑRfÑAfÐfr/   c                ó~  ‡— g }	 | j                  dd«      \  }}|j                  «       j	                  «       }|dk7  rt        d«      ‚t
        j                  |«      D �cg c]Y  }|dk7  rR|d   rt        |d   «      n‰t        |d   «      z
  |d   r'|d   r"t        |d   «      ‰k  rt        |d   «      dz   n‰f‘Œ[ }}t        |«      dk(  rt        d«      ‚t        ˆfd„|D «       «      rt        ‰«      ‚t        d	„ |D «       «      rt        d
«      ‚t        |«      dk(  r|S g }|D ]v  \  }}t        t        |«      «      D ]G  }	||	   \  }
}||kD  rŒ||
k  r|j                  |	||f«        ŒFt        ||
«      t        ||«      f||	<    Œc |j                  ||f«       Œx |S # t        $ r t        «       ‚w xY wc c}w )NÚ=rõ   r2   zOnly support bytes range)r^   r^   r   z%Range header: range must be requestedc              3  óF   •K  — | ]  \  }}d |cxk  xr ‰k  nc  –— Œ y­w)r   Nr‹   )Ú.0r  Ú_r  s      €r-   Ú	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>ã  s#   øè ø€ ÐC¹F±°°q�A˜Ö* Ô*Ô+¹Fùs   ƒ!c              3  ó,   K  — | ]  \  }}||kD  –— Œ y ­wr"   r‹   )r%  r  r  s      r-   r'  z3FileResponse._parse_range_header.<locals>.<genexpr>æ  s   è ø€ Ð4©V™z˜u cˆu�s�{©Vùs   ‚z)Range header: start must be less than end)rÅ   re   rÍ   rg   r<   Ú_RANGE_PATTERNÚfindallr}   r?   ÚanyrÑ   rô   Úinsertr  Úmaxr@   )r  r  r	  ÚunitsÚrange_r&  Úresultr  r  ÚpÚp_startÚp_ends    `          r-   r  z FileResponse._parse_range_headerÊ  sâ  ø€ à(*ˆð	)Ø&×,Ñ,¨S°!Ó4‰MˆE�6ð —‘“×#Ñ#Ó%ˆà�GÒÜ&Ð'AÓBÐBô $×+Ñ+¨FÔ3ó
ñ
 4�Ø�HŠ}ð	 ˜qšT”�A�a‘D”	 y´3°q¸±t³9Ñ'<Ø!" 1¢¨!¨Aª$´3°q¸±t³9¸yÒ3H”�A�a‘D“	˜A’Èiòð 4ð 	ð 
ô ˆv‹;˜!ÒÜ&Ð'NÓOÐOäÓC¹FÓCÔCÜ% iÓ0Ð0äÑ4©VÓ4Ô4Ü&Ð'RÓSÐSäˆv‹;˜!ÒØˆMð )+ˆÛ ‰JˆE�3Üœ3˜v›;Ö'�Ø!'¨¡‘�˜Ø˜5’=ØØ˜7’]Ø—M‘M ! e¨S \Ô2Ùä!$ U¨GÓ!4´c¸#¸u³oÐ F�F˜1‘IÙð (ð —‘˜u c˜lÕ+ð !ð ˆøô[ ò 	)Ü&Ó(Ð(ð	)üò
s   …F# ÁAF:Æ#F7c                ó²   ‡‡‡‡— t        ‰«      }d|z   t        ‰«      z   t        t        ‰«      «      z   Št        ˆfd„|D «       «      d|z   z   }|ˆˆˆfd„fS )a½  
        Multipart response headers generator.

        ```
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}--\n
        ```
        é,   c              3  óŽ   •K  — | ]<  \  }}t        t        |«      «      t        t        |d z
  «      «      z   ‰z   ||z
  z   –— Œ> y­w)rõ   N)r?   r>   )r%  r  r  Ústatic_header_part_lens      €r-   r'  z2FileResponse.generate_multipart.<locals>.<genexpr>  sK   øè ø€ ð 
ñ %‘
��sô ”�U“‹_œs¤3 s¨Q¡w£<Ó0Ñ0Ð3IÑIØ�U‰{õá$ùs   ƒAAé   c                óL   •— d‰› d‰› d| › d|dz
  › d‰› d�j                  d«      S )	Nz--z
Content-Type: z
Content-Range: bytes rä   rõ   rƒ   z

r8   )r4   )r  r  r  rJ   rÓ   s     €€€r-   Ú<lambda>z1FileResponse.generate_multipart.<locals>.<lambda>!  sG   ø€ Ø�X�JÐ.¨|¨nÐ<SÐTYÐSZÐZ[Ð\_ÐbcÑ\cÐ[dÐdeÐfnÐeoÐosÐtß‰f�YÓð  r/   )r?   r>   Úsum)r*   r	  r  rÓ   rJ   Úboundary_lenrI   r7  s     ```  @r-   r  zFileResponse.generate_multipartþ  sn   û€ ô0 ˜8“}ˆØ!# lÑ!2´S¸Ó5FÑ!FÌÌSÐQYË]ÓI[Ñ![ÐÜó 
ñ %ó
ó 
ð
 �Ññ
ˆð õ ð
ð 	
r/   )r9   NNNNNNÚ
attachment)rS   zstr | os.PathLike[str]r#   r}   r,   r~   r$   r   r%   r€   rØ   r   rÝ   zos.stat_result | Nonerß   r   rà   r>   r�   r‚   )rÝ   zos.stat_resultr�   r‚   r†   )ry   r   r  r„   r  r„   r�   r‚   )ry   r   r  r}   r  r}   r  r}   r  r„   r�   r‚   )
ry   r   r	  úlist[tuple[int, int]]r  r}   r  r„   r�   r‚   )r  r>   r�   r„   )r  r>   r  r}   r�   r>  )
r	  zSequence[tuple[int, int]]r  r>   rÓ   r}   rJ   r>   r�   z'tuple[int, Callable[[int, int], bytes]])r‡   rˆ   r‰   r  r.   rÞ   r{   r   r  r  rÿ   Ústaticmethodr  r  r‹   r/   r-   rÕ   rÕ   )  s\  „ Ø€Jð
 Ø,0Ø!%Ø,0Ø#Ø-1Ø!Ø(4ð#/à$ð#/ð ð#/ð *ð	#/ð
 ð#/ð *ð#/ð ð#/ð +ð#/ð ð#/ð #&ð#/ð 
ó#/óJ.ó'$óRfðfØðfØ!$ðfØ+.ðfØ;>ðfØRVðfà	ófð$!àð!ð &ð!ð ð	!ð
 ð!ð 
ó!óFgð ò1ó ð1ðf&
à)ð&
ð ð&
ð ð	&
ð
 ð&
ð 
1ô&
r/   rÕ   )GÚ
__future__r   rë   Úhttp.cookiesr`   rž   rù   Úrerú   rc   rÙ   Úcollections.abcr   r   r   r   r   r	   Úemail.utilsr
   r   Ú	functoolsr   Ú	mimetypesr   Úsecretsr   Útypingr   r   r   r   Úurllib.parser   rÇ   Úanyio.to_threadÚstarlette._utilsr   Ústarlette.backgroundr   Ústarlette.concurrencyr   Ústarlette.datastructuresr   r   r   Ústarlette.requestsr   Ústarlette.typesr   r   r   r   r�   r�   r“   r¤   r>   r2   r3   ÚContentÚSyncContentStreamr«   rÊ   rª   Ú	ExceptionrÍ   rÑ   Úcompiler)  rÕ   r‹   r/   r-   Ú<module>rU     s  ðÝ "ã Û Û Û 	Û 	Û Û 
Û ß QÕ QÝ ß 3Ý Ý  Ý ß 0Ó 0Ý ã Û å /Ý /Ý 7ß AÑ AÝ /ß 0Ñ 0÷I$ñ I$ôX�8ô ô˜ô ô�8ô ô.	O�xô 	Oð ��U˜JÐ&Ñ
'€Ø˜WÑ%Ð Ø" 7Ñ+Ð ØÐ(Ð*;Ð;Ñ<€ô=$˜ô =$ô@˜9ô ô
!˜)ô !ð
 �—‘˜NÓ+€ô{
�8õ {
r/   