§
    9ˆtjãT  ã                  ó^  — 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	m
Z
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 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l-m.Z.m/Z/m0Z0m1Z1  G d„ d¦  «        Z2 G d„ de2¦  «        Z3 G d„ de2¦  «        Z4 G d„ de2¦  «        Z5 G d„ de2¦  «        Z6e7e8z  e9z  Z:ee:         Z;e
e:         Z<e<e;z  Z= G d„ de2¦  «        Z> G d„ de?¦  «        Z@ G d„ d e?¦  «        ZA G d!„ d"e2¦  «        ZBdS )#é    )ÚannotationsN)ÚAsyncIterableÚ	AwaitableÚCallableÚIterableÚMappingÚSequence)Údatetime)Úformat_datetimeÚ
formatdate)Úpartial)Ú
guess_type)Ú	token_hex)ÚAnyÚLiteral)Úquote)Úcreate_collapsing_task_group)ÚBackgroundTask)Úiterate_in_threadpool)ÚURLÚHeadersÚMutableHeaders)ÚClientDisconnect)ÚMessageÚReceiveÚScopeÚSendc                  ó”   — e Zd ZdZdZ	 	 	 	 	 d3d4d„Zd5d„Zd6d7d„Zed8d„¦   «         Z		 	 	 	 	 	 	 	 	 d9d:d)„Z
	 	 	 	 	 d;d<d*„Zd=d-„Zd>d2„ZdS )?ÚResponseNúutf-8éÈ   Úcontentr   Ústatus_codeÚintÚheadersúMapping[str, str] | NoneÚ
media_typeú
str | NoneÚ
backgroundúBackgroundTask | NoneÚreturnÚNonec                ó’   — || _         |�|| _        || _        |                      |¦  «        | _        |                      |¦  «         d S ©N)r#   r'   r)   ÚrenderÚbodyÚinit_headers©Úselfr"   r#   r%   r'   r)   s         úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/starlette/responses.pyÚ__init__zResponse.__init__!   sM   € ð 'ˆÔØÐ!Ø(ˆDŒOØ$ˆŒØ—K’K Ñ(Ô(ˆŒ	Ø×Ò˜'Ñ"Ô"Ð"Ð"Ð"ó    úbytes | memoryviewc                ó|   — |€dS t          |t          t          z  ¦  «        r|S |                     | j        ¦  «        S )Nr6   )Ú
isinstanceÚbytesÚ
memoryviewÚencodeÚcharset©r3   r"   s     r4   r/   zResponse.render0   s<   € Øˆ?Ø�3Ý�g�u¥zÑ1Ñ2Ô2ð 	ØˆNØ�~Š~˜dœlÑ+Ô+Ð+r6   c                óB  — |€g }d}d}n2d„ |                      ¦   «         D ¦   «         }d„ |D ¦   «         }d|v}d|v}t          | dd ¦  «        }|�\|rZ| j        dk     sO| j        dv sFt          t	          |¦  «        ¦  «        }|                     d|                     d	¦  «        f¦  «         | j        }|�d|rb|                     d
¦  «        r#d| 	                    ¦   «         vr|d| j
        z   z  }|                     d|                     d	¦  «        f¦  «         || _        d S )NTc                óŒ   — g | ]A\  }}|                      ¦   «                              d ¦  «        |                     d ¦  «        f‘ŒBS )úlatin-1)Úlowerr<   )Ú.0ÚkÚvs      r4   ú
<listcomp>z)Response.init_headers.<locals>.<listcomp>=   sF   € ÐjÐjÐjÑRVÐRSÐUV˜AŸGšG™IœI×,Ò,¨YÑ7Ô7¸¿ºÀ)Ñ9LÔ9LÐMÐjÐjÐjr6   c                ó   — g | ]
}|d          ‘ŒS )r   © )rC   Úhs     r4   rF   z)Response.init_headers.<locals>.<listcomp>>   s   € Ð.Ð.Ð.˜Q�A�a”DÐ.Ð.Ð.r6   s   content-lengths   content-typer0   r!   )éÌ   i0  rA   ztext/zcharset=z
; charset=)ÚitemsÚgetattrr#   ÚstrÚlenÚappendr<   r'   Ú
startswithrB   r=   Úraw_headers)	r3   r%   rQ   Úpopulate_content_lengthÚpopulate_content_typeÚkeysr0   Úcontent_lengthÚcontent_types	            r4   r1   zResponse.init_headers7   s\  € Øˆ?Ø57ˆKØ&*Ð#Ø$(Ð!Ð!àjÐjÐZa×ZgÒZgÑZiÔZiÐjÑjÔjˆKØ.Ð. +Ð.Ñ.Ô.ˆDØ&7¸tÐ&CÐ#Ø$3¸4Ð$?Ð!å�t˜V TÑ*Ô*ˆàÐØ'ð àÔ%¨Ò+Ð+¨tÔ/?À:Ð/MÐ/Må ¥ T¡¤™^œ^ˆNØ×ÒÐ 1°>×3HÒ3HÈÑ3SÔ3SÐTÑUÔUÐUà”ˆØÐ#Ð(=Ð#Ø×&Ò& wÑ/Ô/ð <°JÀl×FXÒFXÑFZÔFZÐ4ZÐ4ZØ ¨t¬|Ñ ;Ñ;�Ø×Ò °×1DÒ1DÀYÑ1OÔ1OÐPÑQÔQÐQà&ˆÔÐÐr6   r   c                ód   — t          | d¦  «        st          | j        ¬¦  «        | _        | j        S )NÚ_headers©Úraw)Úhasattrr   rQ   rX   )r3   s    r4   r%   zResponse.headersS   s2   € å�t˜ZÑ(Ô(ð 	AÝ*¨tÔ/?Ð@Ñ@Ô@ˆDŒMØŒ}Ðr6   Ú ú/FÚlaxÚkeyrM   ÚvalueÚmax_ageú
int | NoneÚexpiresúdatetime | str | int | NoneÚpathÚdomainÚsecureÚboolÚhttponlyÚsamesiteú'Literal['lax', 'strict', 'none'] | NoneÚpartitionedc                ó¨  — t           j                             ¦   «         }|||<   |�|||         d<   |�;t          |t          ¦  «        rt          |d¬¦  «        ||         d<   n|||         d<   |�|||         d<   |�|||         d<   |rd||         d<   |rd||         d<   |	�+|	                     ¦   «         d	v s
J d
¦   «         ‚|	||         d<   |
r*t          j        dk     rt          d¦  «        ‚d||         d<   | 
                    d¬¦  «                             ¦   «         }| j                             d|                     d¦  «        f¦  «         d S )Nzmax-ageT©Úusegmtrc   re   rf   rg   ri   )Ústrictr^   Únonez1samesite must be either 'strict', 'lax' or 'none'rj   )é   é   z@Partitioned cookies are only supported in Python 3.14 and above.rl   r\   )Úheaders
   set-cookierA   )ÚhttpÚcookiesÚSimpleCookier9   r
   r   rB   ÚsysÚversion_infoÚ
ValueErrorÚoutputÚstriprQ   rO   r<   )r3   r_   r`   ra   rc   re   rf   rg   ri   rj   rl   ÚcookieÚ
cookie_vals                r4   Ú
set_cookiezResponse.set_cookieY   sš  € õ 04¬|×/HÒ/HÑ/JÔ/JˆØˆˆs‰ØÐØ%,ˆF�3ŒK˜	Ñ"ØÐÝ˜'¥8Ñ,Ô,ð 1Ý)8¸ÈÐ)NÑ)NÔ)N��s”˜IÑ&Ð&à)0��s”˜IÑ&ØÐØ"&ˆF�3ŒK˜ÑØÐØ$*ˆF�3ŒK˜Ñ!Øð 	)Ø$(ˆF�3ŒK˜Ñ!Øð 	+Ø&*ˆF�3ŒK˜
Ñ#ØÐØ—>’>Ñ#Ô#ð (ð ð ð ð Cñ	ô ð ð
 '/ˆF�3ŒK˜
Ñ#Øð 	.ÝÔ 'Ò)Ð)Ý Ð!cÑdÔdÐdØ)-ˆF�3ŒK˜Ñ&à—]’]¨"�]Ñ-Ô-×3Ò3Ñ5Ô5ˆ
ØÔ×Ò °
×0AÒ0AÀ)Ñ0LÔ0LÐ MÑNÔNÐNÐNÐNr6   c           
     ó@   — |                       |dd|||||¬¦  «         d S )Nr   )ra   rc   re   rf   rg   ri   rj   )r   )r3   r_   re   rf   rg   ri   rj   s          r4   Údelete_cookiezResponse.delete_cookie†   sA   € ð 	�ŠØØØØØØØØð 	ñ 		
ô 		
ð 		
ð 		
ð 		
r6   Úsendr   c                ó   ‡— dˆfd„}|S )NÚmessager   r+   r,   c              “  ó\   •K  — | d         }|dv ri | ¥dd|z   i¥}  ‰| ¦  «        ƒ d {V —† d S )NÚtype>   úhttp.response.bodyúhttp.response.startz
websocket.rH   )r„   Úmessage_typer‚   s     €r4   Úwrappedz5Response._wrap_websocket_denial_send.<locals>.wrapped›   s[   øè è € Ø" 6œ?ˆLØÐLÐLÐLØJ˜WÐJ f¨l¸\Ñ.IÐJÐJ�Ø�$�w‘-”-ÐÐÐÐÐÐÐÐÐr6   )r„   r   r+   r,   rH   )r3   r‚   rŠ   s    ` r4   Ú_wrap_websocket_denial_sendz$Response._wrap_websocket_denial_sendš   s(   ø€ ð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð ˆr6   Úscoper   Úreceiver   c              ƒ  ó  K  — |d         dk    r|                       |¦  «        } |d| j        | j        dœ¦  «        ƒ d {V —†  |d| j        dœ¦  «        ƒ d {V —† | j        �|                      ¦   «         ƒ d {V —† d S d S )Nr†   Ú	websocketrˆ   ©r†   Ústatusr%   r‡   )r†   r0   )r‹   r#   rQ   r0   r)   )r3   rŒ   r�   r‚   s       r4   Ú__call__zResponse.__call__£   sÁ   è è € Ø�Œ=˜KÒ'Ð'Ø×3Ò3°DÑ9Ô9ˆDØˆdÐ1¸TÔ=MÐZ^ÔZjÐkÐkÑlÔlÐlÐlÐlÐlÐlÐlÐlØˆdÐ0¸$¼)ÐDÐDÑEÔEÐEÐEÐEÐEÐEÐEÐEàŒ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&r6   )Nr!   NNN©r"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   )r"   r   r+   r7   r.   )r%   r&   r+   r,   )r+   r   )	r\   NNr]   NFFr^   F)r_   rM   r`   rM   ra   rb   rc   rd   re   r(   rf   r(   rg   rh   ri   rh   rj   rk   rl   rh   r+   r,   )r]   NFFr^   )r_   rM   re   rM   rf   r(   rg   rh   ri   rh   rj   rk   r+   r,   )r‚   r   r+   r   ©rŒ   r   r�   r   r‚   r   r+   r,   )Ú__name__Ú
__module__Ú__qualname__r'   r=   r5   r/   r1   Úpropertyr%   r   r�   r‹   r’   rH   r6   r4   r   r      s#  € € € € € Ø€JØ€Gð ØØ,0Ø!%Ø,0ð#ð #ð #ð #ð #ð,ð ,ð ,ð ,ð'ð 'ð 'ð 'ð 'ð8 ðð ð ñ „Xðð Ø"Ø/3ØØ!ØØØ<AØ!ð+Oð +Oð +Oð +Oð +Oð` Ø!ØØØ<Að
ð 
ð 
ð 
ð 
ð(ð ð ð ð$ð $ð $ð $ð $ð $r6   r   c                  ó   — e Zd ZdZdS )ÚHTMLResponsez	text/htmlN©r•   r–   r—   r'   rH   r6   r4   rš   rš   ­   s   € € € € € Ø€J€J€Jr6   rš   c                  ó   — e Zd ZdZdS )ÚPlainTextResponsez
text/plainNr›   rH   r6   r4   r�   r�   ±   s   € € € € € Ø€J€J€Jr6   r�   c                  ó6   ‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zdd„Zˆ xZS )ÚJSONResponsezapplication/jsonr!   Nr"   r   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   c                óR   •— t          ¦   «                              |||||¦  «         d S r.   )Úsuperr5   )r3   r"   r#   r%   r'   r)   Ú	__class__s         €r4   r5   zJSONResponse.__init__¸   s+   ø€ õ 	‰Œ×Ò˜ +¨w¸
ÀJÑOÔOÐOÐOÐOr6   r:   c                óZ   — t          j        |ddd d¬¦  «                             d¦  «        S )NF)ú,ú:)Úensure_asciiÚ	allow_nanÚindentÚ
separatorsr    )ÚjsonÚdumpsr<   r>   s     r4   r/   zJSONResponse.renderÂ   s7   € ÝŒzØØØØØ!ð
ñ 
ô 
÷ Š&�‰/Œ/ð	r6   ©r!   NNNr“   )r"   r   r+   r:   )r•   r–   r—   r'   r5   r/   Ú__classcell__©r¢   s   @r4   rŸ   rŸ   µ   sp   ø€ € € € € Ø#€Jð
 Ø,0Ø!%Ø,0ðPð Pð Pð Pð Pð Pð Pðð ð ð ð ð ð ð r6   rŸ   c                  ó(   ‡ — e Zd Z	 	 	 ddˆ fd„Zˆ xZS )ÚRedirectResponseé3  NÚurlú	str | URLr#   r$   r%   r&   r)   r*   r+   r,   c                óž   •— t          ¦   «                              d|||¬¦  «         t          t          |¦  «        d¬¦  «        | j        d<   d S )Nr6   )r"   r#   r%   r)   z:/%#?=@[]!$&'()*+,;)ÚsafeÚlocation)r¡   r5   r   rM   r%   )r3   r²   r#   r%   r)   r¢   s        €r4   r5   zRedirectResponse.__init__Í   sM   ø€ õ 	‰Œ×Ò °+ÀwÐ[eÐÑfÔfÐfÝ#(­¨S©¬Ð8MÐ#NÑ#NÔ#NˆŒ�ZÑ Ð Ð r6   )r±   NN)
r²   r³   r#   r$   r%   r&   r)   r*   r+   r,   )r•   r–   r—   r5   r­   r®   s   @r4   r°   r°   Ì   sX   ø€ € € € € ð Ø,0Ø,0ðOð Oð Oð Oð Oð Oð Oð Oð Oð Oð Or6   r°   c                  óD   — e Zd ZU ded<   	 	 	 	 ddd„Zdd„Zdd„Zdd„ZdS ) ÚStreamingResponseÚAsyncContentStreamÚbody_iteratorr!   Nr"   ÚContentStreamr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   c                óÎ   — t          |t          ¦  «        r|| _        nt          |¦  «        | _        || _        |€| j        n|| _        || _        |                      |¦  «         d S r.   )r9   r   rº   r   r#   r'   r)   r1   r2   s         r4   r5   zStreamingResponse.__init__á   sm   € õ �g�}Ñ-Ô-ð 	@Ø!(ˆDÔÐå!6°wÑ!?Ô!?ˆDÔØ&ˆÔØ-7Ð-?˜$œ/˜/ÀZˆŒØ$ˆŒØ×Ò˜'Ñ"Ô"Ð"Ð"Ð"r6   r�   r   c              ƒ  óF   K  — 	  |¦   «         ƒ d {V —†}|d         dk    rd S Œ)NTr†   zhttp.disconnectrH   )r3   r�   r„   s      r4   Úlisten_for_disconnectz'StreamingResponse.listen_for_disconnectò   s<   è è € ð	Ø#˜G™IœI�o�o�o�o�o�oˆGØ�vŒÐ"3Ò3Ð3Ø�ð	r6   r‚   r   c              ƒ  ó*  K  —  |d| j         | j        dœ¦  «        ƒ d {V —† | j        2 3 d {V —†}t          |t          t
          z  ¦  «        s|                     | j        ¦  «        } |d|ddœ¦  «        ƒ d {V —† ŒT6  |ddddœ¦  «        ƒ d {V —† d S )Nrˆ   r�   r‡   T©r†   r0   Ú	more_bodyr6   F)r#   rQ   rº   r9   r:   r;   r<   r=   )r3   r‚   Úchunks      r4   Ústream_responsez!StreamingResponse.stream_responseø   s  è è € ØˆdÐ1¸TÔ=MÐZ^ÔZjÐkÐkÑlÔlÐlÐlÐlÐlÐlÐlÐlØÔ-ð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Y�%Ý˜e¥U­ZÑ%7Ñ8Ô8ð 3ØŸš T¤\Ñ2Ô2�Ø�$Ð 4¸eÐRVÐWÐWÑXÔXÐXÐXÐXÐXÐXÐXÐXÐXð .ð
 ˆdÐ0¸#ÈEÐRÐRÑSÔSÐSÐSÐSÐSÐSÐSÐSÐSÐSs   ©A=rŒ   r   c           	   ƒ  ó^  ‡K  — |d         dk    rS|                       |¦  «        }|                      |¦  «        ƒ d {V —† | j        �|                      ¦   «         ƒ d {V —† d S t          t	          t
          |                     di ¦  «                             dd¦  «                             d¦  «        ¦  «        ¦  «        }|dk    r9	 |                      |¦  «        ƒ d {V —† n§# t          $ r t          ¦   «         ‚w xY wt          ¦   «         4 ƒd {V —†Šdˆfd„}‰                     |t          | j        |¦  «        ¦  «          |t          | j        |¦  «        ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   | j        �|                      ¦   «         ƒ d {V —† d S d S )Nr†   r�   ÚasgiÚspec_versionz2.0ú.)é   é   ÚfuncúCallable[[], Awaitable[None]]r+   r,   c              “  ó^   •K  —  | ¦   «         ƒ d {V —† ‰j                              ¦   «          d S r.   )Úcancel_scopeÚcancel)rÊ   Ú
task_groups    €r4   Úwrapz(StreamingResponse.__call__.<locals>.wrap  s9   øè è € Ø˜$™&œ&�L�L�L�L�L�L�LØÔ+×2Ò2Ñ4Ô4Ð4Ð4Ð4r6   )rÊ   rË   r+   r,   )r‹   rÃ   r)   ÚtupleÚmapr$   ÚgetÚsplitÚOSErrorr   r   Ú
start_soonr   r¾   )r3   rŒ   r�   r‚   rÆ   rÐ   rÏ   s         @r4   r’   zStreamingResponse.__call__  s«  øè è € Ø�Œ=˜KÒ'Ð'Ø×3Ò3°DÑ9Ô9ˆDØ×&Ò& tÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØŒÐ*Ø—o’oÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØˆFå�S¥ e§i¢i°¸Ñ&;Ô&;×&?Ò&?ÀÐPUÑ&VÔ&V×&\Ò&\Ð]`Ñ&aÔ&aÑbÔbÑcÔcˆà˜6Ò!Ð!ð)Ø×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝð )ð )ð )Ý&Ñ(Ô(Ð(ð)øøøõ 4Ñ5Ô5ð Ið Ið Ið Ið Ið Ið I¸ð5ð 5ð 5ð 5ð 5ð 5ð ×%Ò% d­G°DÔ4HÈ$Ñ,OÔ,OÑPÔPÐPØ�d�7 4Ô#=¸wÑGÔGÑHÔHÐHÐHÐHÐHÐHÐHÐHðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Ið Œ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&s   ÃC# Ã#C<ÄAE9Å9
FÆFr¬   )r"   r»   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   )r�   r   r+   r,   )r‚   r   r+   r,   r”   )r•   r–   r—   Ú__annotations__r5   r¾   rÃ   r’   rH   r6   r4   r¸   r¸   Þ   s‰   € € € € € € Ø%Ð%Ð%Ñ%ð
 Ø,0Ø!%Ø,0ð#ð #ð #ð #ð #ð"ð ð ð ðTð Tð Tð Tð$ð $ð $ð $ð $ð $r6   r¸   c                  ó   — e Zd Zdd	d„ZdS )
ÚMalformedRangeHeaderúMalformed range header.r"   rM   r+   r,   c                ó   — || _         d S r.   )r"   r>   s     r4   r5   zMalformedRangeHeader.__init__  s   € ØˆŒˆˆr6   N)rÚ   )r"   rM   r+   r,   ©r•   r–   r—   r5   rH   r6   r4   rÙ   rÙ     s-   € € € € € ðð ð ð ð ð ð r6   rÙ   c                  ó   — e Zd Zdd„ZdS )ÚRangeNotSatisfiableÚmax_sizer$   r+   r,   c                ó   — || _         d S r.   )rß   )r3   rß   s     r4   r5   zRangeNotSatisfiable.__init__$  s   € Ø ˆŒˆˆr6   N)rß   r$   r+   r,   rÜ   rH   r6   r4   rÞ   rÞ   #  s(   € € € € € ð!ð !ð !ð !ð !ð !r6   rÞ   c                  ó’   — e Zd ZdZ	 	 	 	 	 	 	 d7d8d„Zd9d„Zd:d„Zd;d#„Zd<d'„Zd=d*„Z	d>d,„Z
ed?d.„¦   «         Zed@d0„¦   «         ZdAd6„ZdS )BÚFileResponsei   r!   NÚ
attachmentre   ústr | os.PathLike[str]r#   r$   r%   r&   r'   r(   r)   r*   ÚfilenameÚstat_resultúos.stat_result | NoneÚcontent_disposition_typerM   r+   r,   c	                óÎ  — || _         || _        || _        |€t          |p|¦  «        d         pd}|| _        || _        |                      |¦  «         | j                             dd¦  «         | j        �Ot          | j        ¦  «        }	|	| j        k    r|› d|	› �}
n|› d| j        › d�}
| j                             d|
¦  «         || _
        |�|                      |¦  «         d S d S )	Nr   zapplication/octet-streamzaccept-rangesr:   z; filename*=utf-8''z; filename="ú"zcontent-disposition)re   r#   rå   r   r'   r)   r1   r%   Ú
setdefaultr   ræ   Úset_stat_headers)r3   re   r#   r%   r'   r)   rå   ræ   rè   Úcontent_disposition_filenameÚcontent_dispositions              r4   r5   zFileResponse.__init__+  s  € ð ˆŒ	Ø&ˆÔØ ˆŒØÐÝ# HÐ$4°Ñ5Ô5°aÔ8ÐVÐ<VˆJØ$ˆŒØ$ˆŒØ×Ò˜'Ñ"Ô"Ð"ØŒ×Ò °Ñ9Ô9Ð9ØŒ=Ð$Ý+0°´Ñ+?Ô+?Ð(Ø+¨t¬}Ò<Ð<Ø)AÐ&tÐ&tÐVrÐ&tÐ&tÐ#Ð#à)AÐ&_Ð&_ÈtÌ}Ð&_Ð&_Ð&_Ð#ØŒL×#Ò#Ð$9Ð;NÑOÔOÐOØ&ˆÔØÐ"Ø×!Ò! +Ñ.Ô.Ð.Ð.Ð.ð #Ð"r6   úos.stat_resultc                óÐ  — t          |j        ¦  «        }t          |j        d¬¦  «        }t          |j        ¦  «        dz   t          |j        ¦  «        z   }dt	          j        |                     ¦   «         d¬¦  «                             ¦   «         › d�}| j         	                    d|¦  «         | j         	                    d|¦  «         | j         	                    d	|¦  «         d S )
NTrn   ú-rê   F)Úusedforsecurityúcontent-lengthúlast-modifiedÚetag)
rM   Úst_sizer   Úst_mtimeÚhashlibÚmd5r<   Ú	hexdigestr%   rë   )r3   ræ   rU   Úlast_modifiedÚ	etag_baserõ   s         r4   rì   zFileResponse.set_stat_headersJ  sÒ   € Ý˜[Ô0Ñ1Ô1ˆÝ" ;Ô#7ÀÐEÑEÔEˆÝ˜Ô,Ñ-Ô-°Ñ3µc¸+Ô:MÑ6NÔ6NÑNˆ	ØX•7”;˜y×/Ò/Ñ1Ô1À5ÐIÑIÔI×SÒSÑUÔUÐXÐXÐXˆàŒ×ÒÐ 0°.ÑAÔAÐAØŒ×Ò °Ñ?Ô?Ð?ØŒ×Ò ¨Ñ-Ô-Ð-Ð-Ð-r6   rŒ   r   r�   r   r‚   r   c              ƒ  óf  K  — |d         }|dk    o|d                               ¦   «         dk    }|dk    od|                     di ¦  «        v }|dk    r|                      |¦  «        }| j        €¥	 t          j                             t          j        | j	        ¦  «        ƒ d {V —†}|  
                    |¦  «         |j        }t          j        |¦  «        st          d| j	        › d	�¦  «        ‚n-# t          $ r t          d| j	        › d
�¦  «        ‚w xY w| j        }t          |¬¦  «        }	|	                     d¦  «        }
|	                     d¦  «        }|
�|�4|                      |¦  «        s|                      |||¦  «        ƒ d {V —† �n	 |                      |
|j        ¦  «        }n~# t(          $ r1} t+          |j        d¬¦  «        |||¦  «        ƒ d {V —†cY d }~S d }~wt.          $ r8}t+          ddd|j        › �i¬¦  «        } ||||¦  «        ƒ d {V —†cY d }~S d }~ww xY wt3          |¦  «        dk    r0|d         \  }}|                      ||||j        |¦  «        ƒ d {V —† n#|                      |||j        |¦  «        ƒ d {V —† | j        �|                      ¦   «         ƒ d {V —† d S d S )Nr†   ru   ÚmethodÚHEADúhttp.response.pathsendÚ
extensionsr�   zFile at path z is not a file.z does not exist.)rŒ   Úrangezif-rangei�  )r#   i   zContent-Rangezbytes */)r#   r%   é   r   )ÚupperrÓ   r‹   ræ   ÚanyioÚ	to_threadÚrun_syncÚosÚstatre   rì   Úst_modeÚS_ISREGÚRuntimeErrorÚFileNotFoundErrorr   Ú_should_use_rangeÚ_handle_simpleÚ_parse_range_headerrö   rÙ   r�   r"   rÞ   rß   rN   Ú_handle_single_rangeÚ_handle_multiple_rangesr)   )r3   rŒ   r�   r‚   Ú
scope_typeÚsend_header_onlyÚsend_pathsendræ   Úmoder%   Ú
http_rangeÚhttp_if_rangeÚrangesÚexcÚresponseÚstartÚends                    r4   r’   zFileResponse.__call__T  s€  è è € Ø˜6”]ˆ
Ø%¨Ò/ÐU°E¸(´O×4IÒ4IÑ4KÔ4KÈvÒ4UÐØ" fÒ,ÐhÐ1IÈUÏYÊYÐWcÐegÑMhÔMhÐ1hˆØ˜Ò$Ð$Ø×3Ò3°DÑ9Ô9ˆDàÔÐ#ðSÝ$)¤O×$<Ò$<½R¼WÀdÄiÑ$PÔ$PÐPÐPÐPÐPÐPÐP�Ø×%Ò% kÑ2Ô2Ð2ð #Ô*�Ý”| DÑ)Ô)ð SÝ&Ð'Q°t´yÐ'QÐ'QÐ'QÑRÔRÐRðSøõ	 %ð Pð Pð PÝ"Ð#N°4´9Ð#NÐ#NÐ#NÑOÔOÐOðPøøøð Ô*ˆKå Ð&Ñ&Ô&ˆØ—[’[ Ñ)Ô)ˆ
ØŸš JÑ/Ô/ˆàÐ -Ð";ÀD×DZÒDZÐ[hÑDiÔDiÐ";Ø×%Ò% dÐ,<¸mÑLÔLÐLÐLÐLÐLÐLÐLÐLÑLð<Ø×1Ò1°*¸kÔ>QÑRÔR��øÝ'ð cð cð cØLÕ.¨s¬{ÈÐLÑLÔLÈUÐT[Ð]aÑbÔbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbÐbøøøøÝ&ð <ð <ð <Ý,¸ÀÐXqÐcfÔcoÐXqÐXqÐFrÐsÑsÔs�Ø%˜X e¨W°dÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð<øøøõ �6‰{Œ{˜aÒÐØ# AœY‘
��sØ×/Ò/°°e¸SÀ+ÔBUÐWgÑhÔhÐhÐhÐhÐhÐhÐhÐhÐhà×2Ò2°4¸ÀÔATÐVfÑgÔgÐgÐgÐgÐgÐgÐgÐgàŒ?Ð&Ø—/’/Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð 'Ð&s=   Á0A
C. Ã.#DÆF* Æ*
H%Æ4&G ÇH%Ç H%Ç--H ÈH%È H%r  rh   r  c              ƒ  ó  K  —  |d| j         | j        dœ¦  «        ƒ d {V —† |r |ddddœ¦  «        ƒ d {V —† d S |r( |dt          | j        ¦  «        dœ¦  «        ƒ d {V —† d S t	          j        | j        d	¬
¦  «        ƒ d {V —†4 ƒd {V —†}d}|rO|                     | j        ¦  «        ƒ d {V —†}t          |¦  «        | j        k    } |d||dœ¦  «        ƒ d {V —† |°O	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Nrˆ   r�   r‡   r6   FrÀ   r   )r†   re   Úrb©r  T)	r#   rQ   rM   re   r  Ú	open_fileÚreadÚ
chunk_sizerN   )r3   r‚   r  r  ÚfilerÁ   rÂ   s          r4   r  zFileResponse._handle_simple€  sF  è è € ØˆdÐ1¸TÔ=MÐZ^ÔZjÐkÐkÑlÔlÐlÐlÐlÐlÐlÐlÐlØð 
	fØ�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWØð 	fØ�$Ð 8Å#ÀdÄiÁ.Ä.ÐQÐQÑRÔRÐRÐRÐRÐRÐRÐRÐRÐRÐRå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð fð fð fð fð fð fð fÀdØ �	Øð fØ"&§)¢)¨D¬OÑ"<Ô"<Ð<Ð<Ð<Ð<Ð<Ð<�EÝ # E¡
¤
¨d¬oÒ =�IØ˜$Ð(<ÀeÐZcÐdÐdÑeÔeÐeÐeÐeÐeÐeÐeÐeð  ð fð fðfð fð fñ fô fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð føøøð fð fð fð fð fð fs   ÂAC4Ã4
C>ÄC>r  r  Ú	file_sizec              ƒ  óÈ  K  — t          t          | j        ¦  «        ¬¦  «        }d|› d|dz
  › d|› �|d<   t          ||z
  ¦  «        |d<    |dd	|j        d
œ¦  «        ƒ d {V —† |r |ddddœ¦  «        ƒ d {V —† d S t          j        | j        d¬¦  «        ƒ d {V —†4 ƒd {V —†}|                     |¦  «        ƒ d {V —† d}|rx| 	                    t          | j        ||z
  ¦  «        ¦  «        ƒ d {V —†}	|t          |	¦  «        z  }t          |	¦  «        | j        k    o||k     } |d|	|dœ¦  «        ƒ d {V —† |°x	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NrY   zbytes rñ   r  r]   zcontent-rangeró   rˆ   éÎ   r�   r‡   r6   FrÀ   r  r   T)r   ÚlistrQ   rM   rZ   r  r!  re   Úseekr"  Úminr#  rN   )
r3   r‚   r  r  r%  r  r%   r$  rÁ   rÂ   s
             r4   r  z!FileResponse._handle_single_rangeŽ  s¤  è è € õ !¥T¨$Ô*:Ñ%;Ô%;Ð<Ñ<Ô<ˆØ#I¨EÐ#IÐ#I°C¸!±GÐ#IÐ#I¸iÐ#IÐ#Iˆ�Ñ Ý$'¨¨e©Ñ$4Ô$4ˆÐ Ñ!ØˆdÐ1¸SÈWÌ[ÐYÐYÑZÔZÐZÐZÐZÐZÐZÐZÐZØð 
	fØ�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð fð fð fð fð fð fð fÀdØ—i’i Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø �	Øð fØ"&§)¢)­C°´ÀÀuÁÑ,MÔ,MÑ"NÔ"NÐNÐNÐNÐNÐNÐN�EØ�S ™ZœZÑ'�EÝ # E¡
¤
¨d¬oÒ =Ð MÀ%È#Â+�IØ˜$Ð(<ÀeÐZcÐdÐdÑeÔeÐeÐeÐeÐeÐeÐeÐeð	  ð fð fðfð fð fñ fô fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð fð føøøð fð fð fð fð fð fs   Â%BEÅ
EÅEr  úlist[tuple[int, int]]c           	   ƒ  ó¸  K  — t          d¦  «        }|                      |||| j        d         ¦  «        \  }}t          t	          | j        ¦  «        ¬¦  «        }d|› �|d<   t          |¦  «        |d<    |dd|j        dœ¦  «        ƒ d {V —† |r |d	d
ddœ¦  «        ƒ d {V —† d S t          j	        | j
        d¬¦  «        ƒ d {V —†4 ƒd {V —†}	|D ]¸\  }
} |d	 ||
|¦  «        ddœ¦  «        ƒ d {V —† |	                     |
¦  «        ƒ d {V —† |
|k     r^|	                     t          | j        ||
z
  ¦  «        ¦  «        ƒ d {V —†}|
t          |¦  «        z  }
 |d	|ddœ¦  «        ƒ d {V —† |
|k     °^ |d	dddœ¦  «        ƒ d {V —† Œ¹ |d	d|› d�                     d¦  «        ddœ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Né   zcontent-typerY   zmultipart/byteranges; boundary=ró   rˆ   r'  r�   r‡   r6   FrÀ   r  r   Ts   
ú--rA   )r   Úgenerate_multipartr%   r   r(  rQ   rM   rZ   r  r!  re   r)  r"  r*  r#  rN   r<   )r3   r‚   r  r%  r  ÚboundaryrU   Úheader_generatorr%   r$  r  r  rÂ   s                r4   r  z$FileResponse._handle_multiple_ranges¡  s\  è è € õ ˜R‘=”=ˆØ+/×+BÒ+BØ�H˜i¨¬°nÔ)Eñ,
ô ,
Ñ(ˆÐ(õ !¥T¨$Ô*:Ñ%;Ô%;Ð<Ñ<Ô<ˆØ"NÀHÐ"NÐ"Nˆ�ÑÝ$'¨Ñ$7Ô$7ˆÐ Ñ!ØˆdÐ1¸SÈWÌ[ÐYÐYÑZÔZÐZÐZÐZÐZÐZÐZÐZØð 	Ø�$Ð 4¸cÐPUÐVÐVÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWå"œ_¨T¬Y¸TÐBÑBÔBÐBÐBÐBÐBÐBÐBð ð ð ð ð ð ð ÀdØ"(ð cð c‘J�E˜3Ø˜$Ð(<ÐFVÐFVÐW\Ð^aÑFbÔFbÐquÐvÐvÑwÔwÐwÐwÐwÐwÐwÐwÐwØŸ)š) EÑ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø #š+˜+Ø&*§i¢iµ°D´OÀSÈ5Á[Ñ0QÔ0QÑ&RÔ&RÐ RÐ RÐ RÐ RÐ RÐ R˜Ø¥ U¡¤Ñ+˜Ø"˜dÐ,@È%Ð^bÐ#cÐ#cÑdÔdÐdÐdÐdÐdÐdÐdÐdð   #š+˜+ð ˜$Ð(<ÀgÐ\`ÐaÐaÑbÔbÐbÐbÐbÐbÐbÐbÐbÐbØ�dà 4Ø 1 XÐ 1Ð 1Ð 1× 8Ò 8¸Ñ CÔ CØ%*ðð ñô ð ð ð ð ð ð ð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÃC(G	Ç	
GÇGr  c                óF   — || j         d         k    p|| j         d         k    S )Nrô   rõ   )r%   )r3   r  s     r4   r  zFileResponse._should_use_rangeÅ  s(   € Ø ¤¨_Ô =Ò=ÐfÀÐRVÔR^Ð_eÔRfÒAfÐfr6   r  c                ó  ‡— g }	 |                      dd¦  «        \  }}n# t          $ r t          ¦   «         ‚w xY w|                     ¦   «                              ¦   «         }|dk    rt          d¦  «        ‚|                      |‰¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          ˆfd„|D ¦   «         ¦  «        rt          ‰¦  «        ‚t          d„ |D ¦   «         ¦  «        rt          d	¦  «        ‚t          |¦  «        dk    r|S | 	                    ¦   «          |d         g}|dd …         D ]C\  }}|d
         \  }	}
||
k    r|	t          |
|¦  «        f|d
<   Œ,|                     ||f¦  «         ŒD|S )Nú=r  r:   zOnly support bytes ranger   z%Range header: range must be requestedc              3  ó@   •K  — | ]\  }}d |cxk    o‰k     nc  V — ŒdS )r   NrH   )rC   r  Ú_r%  s      €r4   ú	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>Ú  sF   øè è € ÐCÐC±°°q�A˜Ð*Ð*Ò*Ð* Ò*Ð*Ð*Ð*Ð+ÐCÐCÐCÐCÐCÐCr6   c              3  ó(   K  — | ]\  }}||k    V — Œd S r.   rH   )rC   r  r  s      r4   r7  z3FileResponse._parse_range_header.<locals>.<genexpr>Ý  s*   è è € Ð4Ð4™z˜u cˆu�sŠ{Ð4Ð4Ð4Ð4Ð4Ð4r6   z)Range header: start must be less than endéÿÿÿÿ)rÔ   rz   rÙ   r|   rB   Ú_parse_rangesrN   ÚanyrÞ   ÚsortÚmaxrO   )Úclsr  r%  r  ÚunitsÚrange_Úresultr  r  Ú
last_startÚlast_ends     `        r4   r  z FileResponse._parse_range_headerÈ  s·  ø€ à(*ˆð	)Ø&×,Ò,¨S°!Ñ4Ô4‰MˆE�6�6øÝð 	)ð 	)ð 	)Ý&Ñ(Ô(Ð(ð	)øøøð —’‘”×#Ò#Ñ%Ô%ˆà�GÒÐÝ&Ð'AÑBÔBÐBà×"Ò" 6¨9Ñ5Ô5ˆåˆv‰;Œ;˜!ÒÐÝ&Ð'NÑOÔOÐOåÐCÐCÐCÐC¸FÐCÑCÔCÑCÔCð 	1Ý% iÑ0Ô0Ð0åÐ4Ð4¨VÐ4Ñ4Ô4Ñ4Ô4ð 	TÝ&Ð'RÑSÔSÐSåˆv‰;Œ;˜!ÒÐØˆMð 	�Š‰ŒˆØ)/°¬¨ˆØ    œ*ð 	,ð 	,‰JˆE�3Ø#)¨"¤:Ñ ˆJ˜Ø˜Ò Ð Ø(­#¨h¸Ñ*<Ô*<Ð=��r‘
�
à—’˜u c˜lÑ+Ô+Ð+Ð+àˆs   … Ÿ8r@  c                ó  — g }|                      d¦  «        D ]é}|                     ¦   «         }|r|dk    rŒd|vrŒ$|                      dd¦  «        \  }}|                     ¦   «         }|                     ¦   «         }	 |rt          |¦  «        nt          |t          |¦  «        z
  d¦  «        }|r'|r%t          |¦  «        |k     rt          |¦  «        dz   n|}|                     ||f¦  «         ŒÚ# t
          $ r Y Œæw xY w|S )Nr¤   rñ   r  r   )rÔ   r|   r$   r=  rO   rz   )	r>  r@  r%  r  ÚpartÚ	start_strÚend_strr  r  s	            r4   r:  zFileResponse._parse_rangesï  s&  € à(*ˆà—L’L Ñ%Ô%ð 	ð 	ˆDØ—:’:‘<”<ˆDð ð ˜4 3š;˜;Øð ˜$ˆˆØà!%§¢¨C°Ñ!3Ô!3ÑˆI�wØ!ŸšÑ)Ô)ˆIØ—m’m‘o”oˆGðØ*3ÐY�˜I™œ˜½¸YÍÈWÉÌÑ=UÐWXÑ9YÔ9Y�Ø*3Ðk¸ÐkÅCÈÁLÄLÐS\ÒD\ÐD\•c˜'‘l”l QÑ&Ð&Ðbk�Ø—’˜u c˜lÑ+Ô+Ð+Ð+øÝð ð ð à�ðøøøð ˆs   Á>A3C2Ã2
C?Ã>C?úSequence[tuple[int, int]]r0  rß   rV   ú'tuple[int, Callable[[int, int], bytes]]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}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}\r\n
        Content-Type: {content_type}\r\n
        Content-Range: bytes {start}-{end-1}/{max_size}\r\n
        \r\n
        ..........content...........\r\n
        --{boundary}--
        ```
        é1   c              3  ó¨   •K  — | ]L\  }}t          t          |¦  «        ¦  «        t          t          |d z
  ¦  «        ¦  «        z   ‰z   ||z
  z   V — ŒMdS )r  N)rN   rM   )rC   r  r  Ústatic_header_part_lens      €r4   r7  z2FileResponse.generate_multipart.<locals>.<genexpr>&  sr   øè è € ð 
ð 
ñ ��sõ •�U‘”‰_Œ_�s¥3 s¨Q¡w¡<¤<Ñ0Ô0Ñ0Ð3IÑIØ�U‰{ñð
ð 
ð 
ð 
ð 
ð 
r6   rÉ   c                óT   •— d‰› d‰› d| › d|dz
  › d‰› d�                      d¦  «        S )	Nr.  z
Content-Type: z
Content-Range: bytes rñ   r  r]   z

rA   )r<   )r  r  r0  rV   rß   s     €€€r4   ú<lambda>z1FileResponse.generate_multipart.<locals>.<lambda>/  sl   ø€ ðØðð àðð ð ðð ð " A™gðð ð )1ðð ð ÷ Šf�YÑÔð r6   )rN   rM   Úsum)r3   r  r0  rß   rV   Úboundary_lenrU   rM  s     ```  @r4   r/  zFileResponse.generate_multipart  s²   øøøø€ õ0 ˜8‘}”}ˆØ!# lÑ!2µS¸Ñ5FÔ5FÑ!FÍÍSÐQYÉ]Ì]ÑI[ÔI[Ñ![ÐÝð 
ð 
ð 
ð 
ð %ð
ñ 
ô 
ñ 
ô 
ð
 �Ññ
ˆð ð ð  ð  ð  ð  ð  ð

ð 
	
r6   )r!   NNNNNrã   )re   rä   r#   r$   r%   r&   r'   r(   r)   r*   rå   r(   ræ   rç   rè   rM   r+   r,   )ræ   rï   r+   r,   r”   )r‚   r   r  rh   r  rh   r+   r,   )r‚   r   r  r$   r  r$   r%  r$   r  rh   r+   r,   )
r‚   r   r  r+  r%  r$   r  rh   r+   r,   )r  rM   r+   rh   )r  rM   r%  r$   r+   r+  )r@  rM   r%  r$   r+   r+  )
r  rH  r0  rM   rß   r$   rV   rM   r+   rI  )r•   r–   r—   r#  r5   rì   r’   r  r  r  r  Úclassmethodr  r:  r/  rH   r6   r4   râ   râ   (  s$  € € € € € Ø€Jð
 Ø,0Ø!%Ø,0Ø#Ø-1Ø(4ð/ð /ð /ð /ð /ð>.ð .ð .ð .ð*$ð *$ð *$ð *$ðXfð fð fð fðfð fð fð fð&"ð "ð "ð "ðHgð gð gð gð ð$ð $ð $ñ „[ð$ðL ðð ð ñ „[ðð8+
ð +
ð +
ð +
ð +
ð +
r6   râ   )CÚ
__future__r   rø   Úhttp.cookiesru   rª   r  r	  rx   Úcollections.abcr   r   r   r   r   r	   r
   Úemail.utilsr   r   Ú	functoolsr   Ú	mimetypesr   Úsecretsr   Útypingr   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°   rM   r:   r;   ÚContentÚSyncContentStreamr¹   r»   r¸   Ú	ExceptionrÙ   rÞ   râ   rH   r6   r4   ú<module>rf     sx  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø /Ð /Ð /Ð /Ð /Ð /Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ /Ð /Ð /Ð /Ð /Ð /Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðM$ð M$ð M$ð M$ð M$ñ M$ô M$ð M$ð`ð ð ð ð �8ñ ô ð ðð ð ð ð ˜ñ ô ð ðð ð ð ð �8ñ ô ð ð.	Oð 	Oð 	Oð 	Oð 	O�xñ 	Oô 	Oð 	Oð �‰+˜
Ñ
"€Ø˜WÔ%Ð Ø" 7Ô+Ð Ø"Ð%6Ñ6€ð=$ð =$ð =$ð =$ð =$˜ñ =$ô =$ð =$ð@ð ð ð ð ˜9ñ ô ð ð
!ð !ð !ð !ð !˜)ñ !ô !ð !ð
O
ð O
ð O
ð O
ð O
�8ñ O
ô O
ð O
ð O
ð O
r6   