§
    …ßj†…  ã                   ó  — d dl m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
 d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ d dlmZmZ dadadZ d	„ Z!d
Z" G d„ de¦  «        Z# G d„ de¦  «        Z$ G d„ de¦  «        Z%dZ&dZ'dZ(dZ) ej*        d ej+        e)¦  «        z  ¦  «        Z, ej*        d¦  «        Z- ej*        d¦  «        Z. ej*        d¦  «        Z/ e0d¦  «        Z1d„ Z2 G d„ d¦  «        Z3 G d„ de3¦  «        Z4dS )é    )ÚIntEnumN)ÚChunkedReaderÚLengthReaderÚ	EOFReaderÚBody)ÚInvalidHeaderÚInvalidHeaderNameÚ
NoMoreDataÚInvalidRequestLineÚInvalidRequestMethodÚInvalidHTTPVersionÚLimitRequestLineÚLimitRequestHeadersÚUnsupportedTransferCodingÚObsoleteFoldingÚExpectationFailed)ÚInvalidProxyLineÚInvalidProxyHeaderÚForbiddenProxyRequest)ÚInvalidSchemeHeaders)Úbytes_to_strÚsplit_request_uri)Úpermit_obsolete_foldingÚstrip_header_spacesc                 óâ  — t          | dd¦  «        }|dk    rdS t          €	 ddl}da|an# t          $ r daY nw xY wt          s|dk    rt          d	¦  «        ‚t          sdS t          t          d
¦  «        s|dk    rt          d¦  «        ‚dS g }t          D ](}t          | |d¦  «        r|                     |¦  «         Œ)|r-|dk    r%t          dd 	                    |¦  «        z  ¦  «        ‚dS dS )aë  Check if fast C parser is available and should be used.

    Returns False if:
    - http_parser='python' is explicitly set
    - gunicorn_h1c is not installed (in 'auto' mode)
    - gunicorn_h1c < 0.4.1 (in 'auto' mode)
    - Incompatible compatibility flags are enabled (in 'auto' mode)

    Raises RuntimeError if:
    - http_parser='fast' but gunicorn_h1c is not installed
    - http_parser='fast' but gunicorn_h1c < 0.4.1
    - http_parser='fast' but incompatible flags are enabled
    Úhttp_parserÚautoÚpythonFNr   TÚfastz1gunicorn_h1c not installed but http_parser='fast'r   zigunicorn_h1c >= 0.4.1 required for http_parser='fast'. Please upgrade: pip install --upgrade gunicorn_h1czqhttp_parser='fast' is incompatible with compatibility flags: %s. Use http_parser='python' or disable these flags.z, )
ÚgetattrÚ_fast_parser_availableÚgunicorn_h1cÚ_fast_parser_moduleÚImportErrorÚRuntimeErrorÚhasattrÚ_FAST_PARSER_INCOMPATIBLE_FLAGSÚappendÚjoin)ÚcfgÚparser_settingr"   ÚincompatibleÚflags        úH/var/www/html/venv/lib/python3.11/site-packages/gunicorn/http/message.pyÚ_check_fast_parserr/   #   sm  € õ  ˜S -°Ñ8Ô8€NØ˜Ò!Ð!ØˆuåÐ%ð	+ØÐÐÐØ%)Ð"Ø".ÐÐøÝð 	+ð 	+ð 	+Ø%*Ð"Ð"Ð"ð	+øøøõ "ð P n¸Ò&>Ð&>ÝÐNÑOÔOÐOå!ð Øˆuõ Õ&Ð(:Ñ;Ô;ð Ø˜VÒ#Ð#ÝðEñô ð ð
 ˆuð €LÝ/ð &ð &ˆÝ�3˜˜eÑ$Ô$ð 	&Ø×Ò Ñ%Ô%Ð%øàð Ø˜VÒ#Ð#ÝðCà—)’)˜LÑ)Ô)ñ*ñô ð ð ˆuàˆ4s   ¢+ «:¹:s   

 
QUIT
c                   ó   — e Zd ZdZdZdZdS )Ú	PPCommandzPROXY protocol v2 commands.r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚLOCALÚPROXY© ó    r.   r1   r1   f   s   € € € € € Ø%Ð%Ø€EØ€E€E€Er:   r1   c                   ó"   — e Zd ZdZdZdZdZdZdS )ÚPPFamilyz#PROXY protocol v2 address families.r   r2   é   é   N)r3   r4   r5   r6   ÚUNSPECÚINETÚINET6ÚUNIXr9   r:   r.   r<   r<   l   s(   € € € € € Ø-Ð-Ø€FØ€DØ€EØ€D€D€Dr:   r<   c                   ó   — e Zd ZdZdZdZdZdS )Ú
PPProtocolz&PROXY protocol v2 transport protocols.r   r2   r=   N)r3   r4   r5   r6   r?   ÚSTREAMÚDGRAMr9   r:   r.   rD   rD   t   s#   € € € € € Ø0Ð0Ø€FØ€FØ€E€E€Er:   rD   iþ  i €  z!#$%&'*+-.^_`|~z[%s0-9a-zA-Z]+z[a-z#]zHTTP/(\d)\.(\d)z[\x00-\x08\x0a-\x1f\x7f])ÚHOSTúCONTENT-LENGTHúTRANSFER-ENCODINGÚTRAILERÚAUTHORIZATIONÚTEc                 óx   — d|v rdS 	 t          j        | ¦  «        }n# t          $ r Y dS w xY w|D ]	}||v r dS Œ
dS )z÷Check if IP address is in the allow list.

    Args:
        ip_str: The IP address string to check
        allow_list: The original allow list (strings, may contain "*")
        networks: Pre-computed ipaddress.ip_network objects from config
    Ú*TF)Ú	ipaddressÚ
ip_addressÚ
ValueError)Úip_strÚ
allow_listÚnetworksÚipÚnetworks        r.   Ú_ip_in_allow_listrW   —   sv   € ð ˆjÐÐØˆtðÝÔ! &Ñ)Ô)ˆˆøÝð ð ð Øˆuˆuðøøøàð ð ˆØ�ˆ=ˆ=Ø�4�4ð àˆ5s   ˆ �
+ª+c                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Z	 dd„Zdd„Zd„ Z	d	„ Z
d
S )ÚMessagec                 ó4  — || _         || _        || _        || _        d | _        g | _        g | _        d | _        |j        rdnd| _	        d| _
        d| _        |j        | _        | j        dk    s| j        t          k    rt          | _        |j        | _        | j        dk    rt          | _        | j        pt          }| j        |dz   z  dz   | _        |                      | j        ¦  «        }| j                             |¦  «         |                      ¦   «          d S )NÚhttpsÚhttpFr   r=   é   )r*   ÚunreaderÚ	peer_addrÚremote_addrÚversionÚheadersÚtrailersÚbodyÚis_sslÚschemeÚ
must_closeÚ_expected_100_continueÚlimit_request_fieldsÚMAX_HEADERSÚlimit_request_field_sizeÚDEFAULT_MAX_HEADERFIELD_SIZEÚmax_buffer_headersÚparseÚunreadÚset_body_reader)Úselfr*   r^   r_   Úmax_header_field_sizeÚunuseds         r.   Ú__init__zMessage.__init__¬   s"  € ØˆŒØ ˆŒØ"ˆŒØ$ˆÔØˆŒØˆŒØˆŒØˆŒ	Ø!$¤Ð7�g�g°ˆŒØˆŒØ&+ˆÔ#ð %(Ô$<ˆÔ!ØÔ%¨Ò*Ð*ØÔ,­{Ò:Ð:Ý(3ˆDÔ%Ø(+Ô(DˆÔ%ØÔ(¨AÒ-Ð-Ý,HˆDÔ)ð !%Ô =Ð ]ÕA]ÐØ"&Ô";Ø" QÑ&ñ#(Ø*+ñ#,ˆÔð —’˜DœMÑ*Ô*ˆØŒ×Ò˜VÑ$Ô$Ð$Ø×ÒÑÔÐÐÐr:   c                 ó   — d| _         d S )NT)rg   ©rq   s    r.   Úforce_closezMessage.force_closeË   s   € ØˆŒˆˆr:   c                 ó   — t          ¦   «         ‚©N)ÚNotImplementedError)rq   r^   s     r.   rn   zMessage.parseÎ   s   € Ý!Ñ#Ô#Ð#r:   c                 óÎ   — | j         }t          | j        t          ¦  «        r3t	          | j        d         |j        |                     ¦   «         ¦  «        r|j        |j        fS i g fS )a>  Return the (secure_scheme_headers, forwarder_headers) the peer is allowed to set.

        When the peer's address is not in ``forwarded_allow_ips`` (or networks),
        configured forwarding/secure-scheme policy must be ignored to prevent
        spoofing.  Returns ``({}, [])`` when the peer is untrusted.
        r   )	r*   Ú
isinstancer_   ÚtuplerW   Úforwarded_allow_ipsÚforwarded_allow_networksÚsecure_scheme_headersÚforwarder_headers)rq   r*   s     r.   Ú_peer_trusted_for_forwardedz#Message._peer_trusted_for_forwardedÑ   sn   € ð ŒhˆÝ˜4œ>­5Ñ1Ô1ð 	DÝ$ T¤^°AÔ%6¸Ô8OØ%(×%AÒ%AÑ%CÔ%CñEô Eð	Dð Ô,¨cÔ.CÐCÐCØ�2ˆvˆr:   Fc                 ó–  — |sA|dk    r;|                      ¦   «         dk    r| j        dk     rnd| _        nt          |¦  «        ‚||v r@|||         k    }|rdnd}|d         r|| j        k    rt          ¦   «         ‚nd|d<   || _        d|v r;||v sd	|v rn2| j        j        d
k    rn!| j        j        dk    rdS t          |¦  «        ‚||fS )a   Apply per-header policy shared between Python and fast parsers.

        Mutates ``self._expected_100_continue`` and ``self.scheme`` as needed.
        ``scheme_state`` is a single-element list used as a mutable sentinel
        so the caller can detect repeated scheme headers.

        Returns the (name, value) pair to retain, or ``None`` to drop the
        header (per ``header_map='drop'``).  Raises the same exceptions the
        Python path raises so behavior is identical regardless of parser.
        ÚEXPECTz100-continue©r2   r2   Tr[   r\   r   Ú_rN   Ú	dangerousÚdropN)	Úlowerra   rh   r   rf   r   r*   Ú
header_mapr	   )	rq   ÚnameÚvalueÚscheme_stater€   r�   Úfrom_trailerÚsecurerf   s	            r.   Ú_apply_header_policyzMessage._apply_header_policyß   s'  € ð ð 	/ ¨Ò 0Ð 0ð �{Š{‰}Œ} Ò.Ð.Ø”< &Ò(Ð(ð à26�DÔ/Ð/õ (¨Ñ.Ô.Ð.àÐ(Ð(Ð(ØÐ3°DÔ9Ò9ˆFØ &Ð2�W�W¨FˆFØ˜AŒð %Ø˜Tœ[Ò(Ð(Ý.Ñ0Ô0Ð0ð )ð #'�˜Q‘Ø$�”ð �$ˆ;ˆ;ØÐ(Ð(Ð(¨CÐ3DÐ,DÐ,DàØ”Ô$¨Ò3Ð3àØ”Ô$¨Ò.Ð.ð �tõ (¨Ñ-Ô-Ð-à�eˆ}Ðr:   c                 óÆ  — g }d„ |                      d¦  «        D ¦   «         }dg}|ri g }}n|                      ¦   «         \  }}|�r›t          |¦  «        | j        k    rt	          d¦  «        ‚|                     d¦  «        }t          |¦  «        t          d¦  «        z   }	|                     d¦  «        dk    rt          |¦  «        ‚|                      dd¦  «        \  }
}| j        j	        r|
 
                    d	¦  «        }
t                               |
¦  «        st          |
¦  «        ‚|
                     ¦   «         }
|r|
t          v rt          |
¦  «        ‚|                     d	¦  «        g}|rÖ|d                              d
¦  «        r»| j        j        st'          |
¦  «        ‚|                     d¦  «        }|	t          |¦  «        t          d¦  «        z   z  }	|	| j        cxk    rdk    rn nt	          d¦  «        ‚|                     |                     d¦  «        ¦  «         |r|d                              d
¦  «        °»d                     |¦  «        }t.                               |¦  «        rt          |
¦  «        ‚|	| j        cxk    rdk    rn nt	          d¦  «        ‚|                      |
|||||¬¦  «        }|€�Œ†|                     |¦  «         |�°›|S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   ©r   )Ú.0Úlines     r.   ú
<listcomp>z)Message.parse_headers.<locals>.<listcomp>  s    € ÐDÐDÐD¨•˜dÑ#Ô#ÐDÐDÐDr:   ó   
Fzlimit request headers fieldsr   z
ú:r2   ú 	)ú ú	z!limit request headers fields sizez	 rš   ©rŽ   )Úsplitr‚   Úlenri   r   ÚpopÚfindr   r*   r   ÚrstripÚTOKEN_REÚ	fullmatchr	   ÚupperÚRFC9110_6_5_1_FORBIDDEN_TRAILERÚstripÚ
startswithr   r   rk   r(   r)   Ú!RFC9110_5_5_INVALID_AND_DANGEROUSÚsearchr�   )rq   ÚdatarŽ   rb   Úlinesr�   r€   r�   ÚcurrÚheader_lengthr‹   rŒ   Úkepts                r.   Úparse_headerszMessage.parse_headers  s   € Øˆð EÐD°·
²
¸7Ñ0CÔ0CÐDÑDÔDˆð �wˆØð 	Zð 8:¸2Ð#4Ð!Ð!à7;×7WÒ7WÑ7YÔ7YÑ4Ð!Ð#4ð ñ 5	!Ý�7‰|Œ|˜tÔ8Ò8Ð8Ý)Ð*HÑIÔIÐIð —9’9˜Q‘<”<ˆDÝ ™IœI­¨F©¬Ñ3ˆMØ�yŠy˜‰~Œ~ Ò"Ð"Ý# DÑ)Ô)Ð)ØŸ*š* S¨!Ñ,Ô,‰KˆD�%ØŒxÔ+ð *Ø—{’{ 5Ñ)Ô)�Ý×%Ò% dÑ+Ô+ð .Ý'¨Ñ-Ô-Ð-ð —:’:‘<”<ˆDð ð . Õ(GÐ GÐ GÝ'¨Ñ-Ô-Ð-à—[’[ Ñ'Ô'Ð(ˆEð ð 	0˜E !œH×/Ò/°Ñ<Ô<ð 	0à”xÔ7ð 0Ý)¨$Ñ/Ô/Ð/Ø—y’y ‘|”|�Ø¥ T¡¤­S°©[¬[Ñ!8Ñ8�Ø  4Ô#@ÐDÐDÒDÐDÀ1ÒDÐDÐDÐDÐDÝ-ð /<ñ =ô =ð =à—’˜TŸZšZ¨Ñ.Ô.Ñ/Ô/Ð/ð ð 	0˜E !œH×/Ò/°Ñ<Ô<ð 	0ð —H’H˜U‘O”OˆEå0×7Ò7¸Ñ>Ô>ð *Ý# DÑ)Ô)Ð)à˜tÔ<Ð@Ð@Ò@Ð@¸qÒ@Ð@Ð@Ð@Ð@Ý)Ð*MÑNÔNÐNà×,Ò,Ø�e˜\Ø%Ð'8Ø)ð -ñ ô ˆDð
 ˆ|ÙØ�NŠN˜4Ñ Ô Ð ðk ñ 5	!ðn ˆr:   c                 óJ  — d}d }| j         D ]ñ\  }}|dk    r|�t          d| ¬¦  «        ‚|}Œ!|dk    rÊd„ |                     d¦  «        D ¦   «         }|D ]¨}|                     ¦   «         dk    r|rt          d| ¬¦  «        ‚d}Œ0|                     ¦   «         d	k    r|rt          d| ¬¦  «        ‚Œ\|                     ¦   «         d
v r(|rt          d| ¬¦  «        ‚|                      ¦   «          Œšt          |¦  «        ‚Œò|rX| j        dk     rt          d| ¬¦  «        ‚|�t          d| ¬¦  «        ‚t          t          | | j	        ¦  «        ¦  «        | _
        d S |�£	 t          |¦  «                             ¦   «         rt          |¦  «        }nt          d| ¬¦  «        ‚n# t          $ r t          d| ¬¦  «        ‚w xY w|dk     rt          d| ¬¦  «        ‚t          t          | j	        |¦  «        ¦  «        | _
        d S t          t!          | j	        ¦  «        ¦  «        | _
        d S )NFrH   )ÚreqrI   c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r9   )r¦   )r”   Úvs     r.   r–   z+Message.set_body_reader.<locals>.<listcomp>q  s    € Ð<Ð<Ð< a˜Ÿš™	œ	Ð<Ð<Ð<r:   ú,ÚchunkedTÚidentity)ÚcompressÚdeflateÚgzipr…   r   )rb   r   r�   r‰   rw   r   ra   r   r   r^   rd   ÚstrÚ	isnumericÚintrQ   r   r   )rq   rµ   Úcontent_lengthr‹   rŒ   ÚvalsÚvals          r.   rp   zMessage.set_body_readere  s—  € ØˆØˆà!œ\ð 	?ð 	?‰MˆT�5ØÐ'Ò'Ð'Ø!Ð-Ý'Ð(8¸dÐCÑCÔCÐCØ!&��ØÐ,Ò,Ð,ð =Ð<¨5¯;ª;°sÑ+;Ô+;Ð<Ñ<Ô<�Øð ?ð ?�CØ—y’y‘{”{ iÒ/Ð/à"ð OÝ"/Ð0CÈÐ"NÑ"NÔ"NÐNØ"&˜˜ØŸš™œ¨
Ò2Ð2ð #ð OÝ"/Ð0CÈÐ"NÑ"NÔ"NÐNðOàŸš™œÐ(GÐGÐGà"ð OÝ"/Ð0CÈÐ"NÑ"NÔ"NÐNØ×(Ò(Ñ*Ô*Ð*Ð*å7¸Ñ>Ô>Ð>øàð 	7ð Œ|˜fÒ$Ð$å#Ð$7¸TÐBÑBÔBÐBØÐ)õ $Ð$4¸$Ð?Ñ?Ô?Ð?Ý�]¨4°´Ñ?Ô?Ñ@Ô@ˆDŒIˆIˆIØÐ'ð@Ý�~Ñ&Ô&×0Ò0Ñ2Ô2ð DÝ%(¨Ñ%8Ô%8�N�Nå'Ð(8¸dÐCÑCÔCÐCð #øõ ð @ð @ð @Ý#Ð$4¸$Ð?Ñ?Ô?Ð?ð@øøøð  Ò!Ð!Ý#Ð$4¸$Ð?Ñ?Ô?Ð?å�\¨$¬-¸ÑHÔHÑIÔIˆDŒIˆIˆIå�Y t¤}Ñ5Ô5Ñ6Ô6ˆDŒIˆIˆIs   ÅAF ÆF:c                 óÆ   — | j         rdS | j        D ]F\  }}|dk    r;|                     ¦   «                              d¦  «        }|dk    r dS |dk    r dS  nŒG| j        dk    S )NTÚ
CONNECTIONr™   Úclosez
keep-aliveF©r2   r   )rg   rb   r‰   r¦   ra   )rq   Úhr³   s      r.   Úshould_closezMessage.should_close¡  s…   € ØŒ?ð 	Ø�4Ø”lð 	ð 	‰FˆQ�Ø�LÒ Ð Ø—G’G‘I”I—O’O EÑ*Ô*�Ø˜’<�<Ø˜4˜4Ø˜,Ò&Ð&Ø ˜5˜5Ø�ð !ð Œ|˜vÒ%Ð%r:   N©F)r3   r4   r5   rt   rw   rn   r‚   r�   r¯   rp   rÅ   r9   r:   r.   rY   rY   «   s¢   € € € € € ðð ð ð>ð ð ð$ð $ð $ðð ð ð  +0ð:ð :ð :ð :ðxHð Hð Hð HðT:7ð :7ð :7ðx&ð &ð &ð &ð &r:   rY   c                   óx   ‡ — e Zd Zdˆ fd„	Zdd„Zd„ Zd„ Zd„ Zdd„Zdd
„Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zˆ fd„Zˆ xZS )ÚRequestr2   c                 ó®  •— d | _         d | _        d | _        d | _        d | _        |j        | _        | j        dk     rt          | _        | j        dk    rd| _        n5| j        t          k    rt          | _        t          | _        n| j        | _        || _        d | _	        t          |¦  «        | _        t          ¦   «                              |||¦  «         d S )Nr   i   )ÚmethodÚuriÚpathÚqueryÚfragmentÚlimit_request_lineÚMAX_REQUEST_LINEÚ_fast_limit_request_lineÚ
req_numberÚproxy_protocol_infor/   Ú	_use_fastÚsuperrt   )rq   r*   r^   r_   rÒ   Ú	__class__s        €r.   rt   zRequest.__init__°  sÓ   ø€ ØˆŒØˆŒØˆŒ	ØˆŒ
ØˆŒð #&Ô"8ˆÔØÔ" QÒ&Ð&Ý&6ˆDÔ#ð Ô" aÒ'Ð'Ø,7ˆDÔ)Ð)ØÔ$Õ(8Ò8Ð8Ý,<ˆDÔ)Ý&6ˆDÔ#Ð#à,0Ô,CˆDÔ)à$ˆŒØ#'ˆÔ õ ,¨CÑ0Ô0ˆŒå‰Œ×Ò˜˜h¨	Ñ2Ô2Ð2Ð2Ð2r:   Fc                 ó¾   — |                      ¦   «         }|s1|rt          ¦   «         ‚t          |                     ¦   «         ¦  «        ‚|                     |¦  «         d S ry   )ÚreadÚStopIterationr
   ÚgetvalueÚwrite©rq   r^   ÚbufÚstoprª   s        r.   Úget_datazRequest.get_dataÍ  sR   € Ø�}Š}‰ŒˆØð 	-Øð &Ý#‘o”oÐ%Ý˜SŸ\š\™^œ^Ñ,Ô,Ð,Ø�	Š	�$‰Œˆˆˆr:   c                 ó  — t          ¦   «         }|                      ||d¬¦  «         | j        j        }|dk    r"| j        dk    r|                      |||¦  «        }| j        r|                      ||¦  «        S |                      ||¦  «        S )NT)rÞ   Úoffr2   )	Ú	bytearrayÚ	read_intor*   Úproxy_protocolrÒ   Ú_handle_proxy_protocolrÔ   Ú_parse_fastÚ_parse_python©rq   r^   rÝ   Úmodes       r.   rn   zRequest.parseÕ  s“   € Ý‰kŒkˆØ�Š�x ¨4ˆÑ0Ô0Ð0ð ŒxÔ&ˆØ�5Š=ˆ=˜Tœ_°Ò1Ð1Ø×-Ò-¨h¸¸TÑBÔBˆCð Œ>ð 	3Ø×#Ò# H¨cÑ2Ô2Ð2à×!Ò! (¨CÑ0Ô0Ð0r:   c           	      ór  — t          |¦  «        }d}	 	 t                               ||| j        | j        | j        | j        j        | j        j        ¬¦  «        }�n½# t          j	        $ rg t          |¦  «        }|                      ||¦  «         t          |¦  «        }t          |¦  «        | j        | j        z   k    rt          d¦  «        ‚Y �nFt          j        $ r!}t          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t!          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t#          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t%          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t'          t          |¦  «        ¦  «        ‚d}~wt          j        $ r!}t+          t          |¦  «        ¦  «        ‚d}~ww xY w�Œt-          |d         ¦  «        | _        t-          |d         ¦  «        | _        | j        j        r| j                             ¦   «         | _        t          | j        ¦  «        dk    rt+          | j        ¦  «        ‚	 t7          | j        ¦  «        }n"# t8          $ r t+          | j        ¦  «        ‚w xY w|j        pd| _        |j        pd| _        |j        pd| _        d	|d
         f| _         g | _!        dg}|  "                    ¦   «         \  }	}
|d         D ]k\  }}t-          |¦  «                             ¦   «         }t-          |¦  «        }|  #                    ||||	|
¦  «        }|€ŒQ| j!         $                    |¦  «         Œl|d         }||d…         S )z:Parse request using fast C parser (gunicorn_h1c >= 0.4.1).r   T)Úlast_lenrÏ   ri   rk   Ú!permit_unconventional_http_methodÚ"permit_unconventional_http_versionúmax buffer headersNrÊ   rÌ   Ú r2   Úminor_versionFrb   Úconsumed)%Úbytesr#   Úparse_requestrÑ   ri   rk   r*   rì   rí   ÚIncompleteErrorrž   rã   rm   r   r   rº   r   r   r	   r   Ú
ParseErrorr   r   rÊ   rË   Úcasefold_http_methodr¤   r   rQ   rÌ   rÍ   rÎ   ra   rb   r‚   r�   r(   )rq   r^   rÝ   rª   rë   ÚresultÚeÚpartsr�   r€   r�   Ú
name_bytesÚvalue_bytesr‹   rŒ   r®   rñ   s                    r.   ræ   zRequest._parse_fastä  sÞ  € õ �S‰zŒzˆØˆð!	1ð 1õ -×:Ò:ØØ%Ø'+Ô'DØ)-Ô)BØ-1Ô-JØ6:´hÔ6`Ø7;´xÔ7bð ;ñ ô �ñ øÝ&Ô6ð Dð Dð DÝ˜t™9œ9�Ø—’˜x¨Ñ-Ô-Ð-Ý˜S‘z”z�Ý�t‘9”9˜tÔ6¸Ô9VÑVÒVÐVÝ-Ð.BÑCÔCÐCð WÑVå&Ô7ð /ð /ð /Ý&¥s¨1¡v¤vÑ.Ô.Ð.øøøøÝ&Ô:ð 2ð 2ð 2Ý)­#¨a©&¬&Ñ1Ô1Ð1øøøøÝ&Ô;ð 3ð 3ð 3Ý*­3¨q©6¬6Ñ2Ô2Ð2øøøøÝ&Ô9ð 1ð 1ð 1Ý(­¨Q©¬Ñ0Ô0Ð0øøøøÝ&Ô8ð 0ð 0ð 0Ý'­¨A©¬Ñ/Ô/Ð/øøøøÝ&Ô4ð ,ð ,ð ,Ý#¥C¨¡F¤FÑ+Ô+Ð+øøøøÝ&Ô1ð 1ð 1ð 1Ý(­¨Q©¬Ñ0Ô0Ð0øøøøð1øøøñA!	1õH # 6¨(Ô#3Ñ4Ô4ˆŒÝ  v¤Ñ/Ô/ˆŒð Œ8Ô(ð 	.Øœ+×+Ò+Ñ-Ô-ˆDŒKõ ˆtŒx‰=Œ=˜AÒÐÝ$ T¤XÑ.Ô.Ð.ð	/Ý% d¤hÑ/Ô/ˆEˆEøÝð 	/ð 	/ð 	/Ý$ T¤XÑ.Ô.Ð.ð	/øøøà”JÐ$ "ˆŒ	Ø”[Ð& BˆŒ
ØœÐ,¨"ˆŒð ˜6 /Ô2Ð3ˆŒð ˆŒØ�wˆØ37×3SÒ3SÑ3UÔ3UÑ0ÐÐ0Ø'-¨iÔ'8ð 
	&ð 
	&Ñ#ˆJ˜Ý 
Ñ+Ô+×1Ò1Ñ3Ô3ˆDÝ  Ñ-Ô-ˆEà×,Ò,Ø�e˜\Ø%Ð'8ñô ˆDð ˆ|ØØŒL×Ò Ñ%Ô%Ð%Ð%ð ˜*Ô%ˆØ�H�I�IŒÐss   ”AA ÁA2HÃHÃC9Ã9HÄD'Ä'HÄ9EÅHÅ'FÆHÆF1Æ1HÇGÇHÇ1HÈHÊ"J7 Ê7Kc                 óL  — |                       ||| j        ¦  «        \  }}|                      |¦  «         t          |¦  «        }|dd…         dk    }	 |                     d¦  «        }|dd…         dk    }|dk     rO|sM|                      ||¦  «         t          |¦  «        }t          |¦  «        | j        k    rt          d¦  «        ‚nnŒz|r$| j	         
                    |dd…         ¦  «         dS |                      |d|…         d	¬
¦  «        | _        ||dz   d…         }|S )z'Parse request using pure Python parser.Nr=   r—   Ts   

r   rî   r:   Frœ   r]   )Ú	read_linerÏ   Úparse_request_linerò   r    rã   rž   rm   r   r^   ro   r¯   rb   )rq   r^   rÝ   r•   rª   ÚdoneÚidxÚrets           r.   rç   zRequest._parse_python;  s>  € ð —N’N 8¨S°$Ô2IÑJÔJ‰	ˆˆcà×Ò Ñ%Ô%Ð%õ �S‰zŒzˆà�B�Q�BŒx˜7Ò"ˆð
	Ø—)’)˜KÑ(Ô(ˆCØ˜˜˜”8˜wÒ&ˆDà�QŠwˆw˜tˆwØ—’˜x¨Ñ-Ô-Ð-Ý˜S‘z”z�Ý�t‘9”9˜tÔ6Ò6Ð6Ý-Ð.BÑCÔCÐCð 7ð ð
	ð ð 	ØŒM× Ò   a b b¤Ñ*Ô*Ð*Ø�3à×)Ò)¨$¨t°¨t¬*À5Ð)ÑIÔIˆŒà�3˜‘7�8�8ŒnˆØˆ
r:   c                 ó´   — |                      ¦   «         }|s,|rt          ¦   «         ‚t          t          |¦  «        ¦  «        ‚|                     |¦  «         dS )z7Read data from unreader and append to bytearray buffer.N)rØ   rÙ   r
   rò   ÚextendrÜ   s        r.   rã   zRequest.read_into[  sU   € à�}Š}‰ŒˆØð 	)Øð &Ý#‘o”oÐ%Ý�U 3™ZœZÑ(Ô(Ð(Ø�
Š
�4ÑÔÐÐÐr:   r   c                 ó¨  — t          |¦  «        }	 |                     d¦  «        }|dk    r!||cxk    rdk    rn nt          ||¦  «        ‚nct          |¦  «        dz
  |cxk    rdk    r n nt          t          |¦  «        |¦  «        ‚|                      ||¦  «         t          |¦  «        }ŒŸ|d|…         t          ||dz   d…         ¦  «        fS )z<Read a line from buffer, returning (line, remaining_buffer).Tr—   r   r=   N)rò   r    r   rž   rã   râ   )rq   r^   rÝ   Úlimitrª   r   s         r.   rý   zRequest.read_lined  sì   € å�S‰zŒzˆð
	Ø—)’)˜GÑ$Ô$ˆCØ�aŠxˆxà˜�?�?’?�? ’?�?�?�?�?Ý*¨3°Ñ6Ô6Ð6ØÝ�4‰yŒy˜1‰}˜uÐ(Ð(Ò(Ð( qÒ(Ð(Ð(Ð(Ð(Ý&¥s¨4¡y¤y°%Ñ8Ô8Ð8Ø�NŠN˜8 SÑ)Ô)Ð)Ý˜‘:”:ˆDð
	ð �T�c�T”
Ý˜$˜s Q™w˜x˜xœ.Ñ)Ô)ð+ð 	+r:   c                 óÖ   — t          |¦  «        |k     r)|                      ||¦  «         t          |¦  «        |k     °)t          |d|…         ¦  «        t          ||d…         ¦  «        fS )z.Read exactly count bytes from buffer/unreader.N)rž   rã   rò   râ   )rq   r^   rÝ   Úcounts       r.   Ú
read_byteszRequest.read_bytesw  se   € å�#‰hŒh˜ÒÐØ�NŠN˜8 SÑ)Ô)Ð)õ �#‰hŒh˜ÒÐå�S˜˜%˜”[Ñ!Ô!¥9¨S°°°¬[Ñ#9Ô#9Ð9Ð9r:   c                 óx  — t          |¦  «        dk     r)|                      ||¦  «         t          |¦  «        dk     °)|dv r=|dd…         t          k    r*|                      ¦   «          |                      ||¦  «        S |dv r8|dd…         dk    r*|                      ¦   «          |                      ||¦  «        S |S )ztHandle PROXY protocol detection and parsing.

        Returns the buffer with proxy protocol data consumed.
        é   )Úv2r   N)Úv1r   é   s   PROXY )rž   rã   ÚPP_V2_SIGNATUREÚproxy_protocol_access_checkÚ_parse_proxy_protocol_v2Ú_parse_proxy_protocol_v1rè   s       r.   rå   zRequest._handle_proxy_protocol}  sÍ   € õ �#‰hŒh˜ŠmˆmØ�NŠN˜8 SÑ)Ô)Ð)õ �#‰hŒh˜Šmˆmð �>Ð!Ð! c¨#¨2¨#¤hµ/Ò&AÐ&AØ×,Ò,Ñ.Ô.Ð.Ø×0Ò0°¸3Ñ?Ô?Ð?ð �>Ð!Ð! c¨"¨1¨"¤g°Ò&:Ð&:Ø×,Ò,Ñ.Ô.Ð.Ø×0Ò0°¸3Ñ?Ô?Ð?ð ˆ
r:   c                 óì   — t          | j        t          ¦  «        rWt          | j        d         | j        j        | j                             ¦   «         ¦  «        st          | j        d         ¦  «        ‚dS dS )z2Check if proxy protocol is allowed from this peer.r   N)r|   r_   r}   rW   r*   Úproxy_allow_ipsÚproxy_allow_networksr   rv   s    r.   r  z#Request.proxy_protocol_access_check“  sv   € å�t”~¥uÑ-Ô-ð 	;Ý% d¤n°QÔ&7¸¼Ô9QØ&*¤h×&CÒ&CÑ&EÔ&EñGô Gð	;õ (¨¬°qÔ(9Ñ:Ô:Ð:ð	;ð 	;ð 	;ð 	;r:   c                 ót  — t          |¦  «        }d|vr)|                      ||¦  «         t          |¦  «        }d|v°)|                     d¦  «        }t          |d|…         ¦  «        }t	          ||dz   d…         ¦  «        }|                     d¦  «        }t          |¦  «        dk    rt          |¦  «        ‚|d         }|d         }	|d         }
|dvrt          d	|z  ¦  «        ‚|d
k    r]	 t          j	        t          j
        |	¦  «         t          j	        t          j
        |
¦  «         n€# t          $ r t          |¦  «        ‚w xY w|dk    r]	 t          j	        t          j        |	¦  «         t          j	        t          j        |
¦  «         n# t          $ r t          |¦  «        ‚w xY w	 t          |d         ¦  «        }t          |d         ¦  «        }n # t          $ r t          d|z  ¦  «        ‚w xY wd|cxk    rdk    rn nd|cxk    rdk    sn t          d|z  ¦  «        ‚||	||
|dœ| _        |S )z`Parse PROXY protocol v1 (text format).

        Returns buffer with v1 header consumed.
        r—   Nr=   rš   r  r2   r>   )ÚTCP4ÚTCP6zprotocol '%s' not supportedr  r  r]   é   zinvalid port %sr   iÿÿ  ©rä   Úclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)rò   rã   r    r   râ   r�   rž   r   ÚsocketÚ	inet_ptonÚAF_INETÚOSErrorÚAF_INET6r¼   rQ   rÓ   )rq   r^   rÝ   rª   r   r•   Ú	remainingÚbitsÚprotoÚs_addrÚd_addrÚs_portÚd_ports                r.   r  z Request._parse_proxy_protocol_v1š  sŒ  € õ �S‰zŒzˆØ˜TÐ!Ð!Ø�NŠN˜8 SÑ)Ô)Ð)Ý˜‘:”:ˆDð ˜TÐ!Ð!ð �iŠi˜Ñ Ô ˆÝ˜D  # œJÑ'Ô'ˆÝ˜d 3¨¡7 8 8œnÑ-Ô-ˆ	à�zŠz˜#‰Œˆåˆt‰9Œ9˜Š>ˆ>Ý" 4Ñ(Ô(Ð(ð �Q”ˆØ�a”ˆØ�a”ˆð Ð(Ð(Ð(Ý"Ð#@À5Ñ#HÑIÔIÐIØ�FŠ?ˆ?ð-ÝÔ ¥¤°Ñ8Ô8Ð8ÝÔ ¥¤°Ñ8Ô8Ð8Ð8øÝð -ð -ð -Ý& tÑ,Ô,Ð,ð-øøøà�fŠ_ˆ_ð-ÝÔ ¥¤°&Ñ9Ô9Ð9ÝÔ ¥¤°&Ñ9Ô9Ð9Ð9øÝð -ð -ð -Ý& tÑ,Ô,Ð,ð-øøøð	=Ý˜˜aœ‘\”\ˆFÝ˜˜aœ‘\”\ˆFˆFøÝð 	=ð 	=ð 	=Ý"Ð#4°tÑ#;Ñ<Ô<Ð<ð	=øøøð �fÐ%Ð%Ò%Ð% Ò%Ð%Ð%Ð%Ð%¨A°Ð,@Ð,@Ò,@Ð,@¸5Ò,@Ð,@Ð,@Ð,@Ý"Ð#4°tÑ#;Ñ<Ô<Ð<ð $Ø!Ø!Ø Ø ð$
ð $
ˆÔ ð Ðs$   Ã/>D. Ä.EÅ>F ÆF+Æ/*G ÇG7c                 óØ  — t          |¦  «        dk     r)|                      ||¦  «         t          |¦  «        dk     °)|d         }|d         }t          j        dt	          |dd…         ¦  «        ¦  «        d         }|dz  dz	  }|d	k    rt          d
|z  ¦  «        ‚|dz  }|t          j        t          j        fvrt          d|z  ¦  «        ‚d|z   }t          |¦  «        |k     r)|                      ||¦  «         t          |¦  «        |k     °)|t          j        k    r$ddddddœ| _	        t          ||d…         ¦  «        S |dz  dz	  }	|dz  }
|
t          j        k    rt          d¦  «        ‚t	          |dd|z   …         ¦  «        }|	t          j        k    r­|dk     rt          d¦  «        ‚t          j        t          j        |dd…         ¦  «        }t          j        t          j        |dd…         ¦  «        }t          j        d|dd…         ¦  «        d         }t          j        d|dd…         ¦  «        d         }d}�n|	t          j        k    r¬|dk     rt          d¦  «        ‚t          j        t          j        |dd…         ¦  «        }t          j        t          j        |dd…         ¦  «        }t          j        d|dd…         ¦  «        d         }t          j        d|dd…         ¦  «        d         }d}nF|	t          j        k    r$ddddddœ| _	        t          ||d…         ¦  «        S t          d|	z  ¦  «        ‚|||||dœ| _	        t          ||d…         ¦  «        S )zbParse PROXY protocol v2 (binary format).

        Returns buffer with v2 header consumed.
        é   r
  é   z>Hé   r   éð   r]   r=   zunsupported version %dé   zunsupported command %dr7   Nr  zonly TCP protocol is supportedz"insufficient address data for IPv4é   é
   r  é$   z"insufficient address data for IPv6é    é"   r  r?   zunsupported address family %d)rž   rã   ÚstructÚunpackrò   r   r1   r7   r8   rÓ   râ   rD   rE   r<   r@   r  Ú	inet_ntopr   rA   r"  r?   )rq   r^   rÝ   Úver_cmdÚ	fam_protoÚlengthra   ÚcommandÚtotal_header_sizeÚfamilyÚprotocolÚ	addr_datar&  r'  r(  r)  r%  s                    r.   r  z Request._parse_proxy_protocol_v2×  s”  € õ �#‰hŒh˜ŠmˆmØ�NŠN˜8 SÑ)Ô)Ð)õ �#‰hŒh˜Šmˆmð �b”'ˆØ˜”Gˆ	Ý”˜t¥U¨3¨r°"¨u¬:Ñ%6Ô%6Ñ7Ô7¸Ô:ˆð ˜T‘> aÑ'ˆØ�aŠ<ˆ<Ý$Ð%=ÀÑ%GÑHÔHÐHð ˜D‘.ˆØ�9œ?­I¬OÐ<Ð<Ð<Ý$Ð%=ÀÑ%GÑHÔHÐHð  ™KÐÝ�#‰hŒhÐ*Ò*Ð*Ø�NŠN˜8 SÑ)Ô)Ð)õ �#‰hŒhÐ*Ò*Ð*ð •i”oÒ%Ð%à")Ø#Ø#Ø"Ø"ð(ð (ˆDÔ$õ ˜SÐ!2Ð!3Ð!3Ô4Ñ5Ô5Ð5ð ˜dÑ" qÑ(ˆØ˜tÑ#ˆð •zÔ(Ò(Ð(Ý$Ð%EÑFÔFÐFå˜#˜b  f¡˜nÔ-Ñ.Ô.ˆ	à•X”]Ò"Ð"Ø˜Š{ˆ{Ý(Ð)MÑNÔNÐNÝÔ%¥f¤n°iÀÀ!À´nÑEÔEˆFÝÔ%¥f¤n°iÀÀ!À´nÑEÔEˆFÝ”] 4¨°1°R°4¬Ñ9Ô9¸!Ô<ˆFÝ”] 4¨°2°b°5Ô)9Ñ:Ô:¸1Ô=ˆFØˆE‰Eà•x”~Ò%Ð%Ø˜Š{ˆ{Ý(Ð)MÑNÔNÐNÝÔ%¥f¤o°yÀÀ2À´ÑGÔGˆFÝÔ%¥f¤o°yÀÀBÀÔ7GÑHÔHˆFÝ”] 4¨°2°b°5Ô)9Ñ:Ô:¸1Ô=ˆFÝ”] 4¨°2°b°5Ô)9Ñ:Ô:¸1Ô=ˆFØˆEˆEà•x”Ò&Ð&ð #+Ø#Ø#Ø"Ø"ð(ð (ˆDÔ$õ ˜SÐ!2Ð!3Ð!3Ô4Ñ5Ô5Ð5õ %Ð%DÀvÑ%MÑNÔNÐNð $Ø!Ø!Ø Ø ð$
ð $
ˆÔ õ ˜Ð.Ð/Ð/Ô0Ñ1Ô1Ð1r:   c                 ó2  — d„ |                      dd¦  «        D ¦   «         }t          |¦  «        dk    rt          t          |¦  «        ¦  «        ‚|d         | _        | j        j        sit                               | j        ¦  «        rt          | j        ¦  «        ‚dt          |d         ¦  «        cxk    rdk    sn t          | j        ¦  «        ‚t                               | j        ¦  «        st          | j        ¦  «        ‚| j        j        r| j                             ¦   «         | _        |d         | _        t          | j        ¦  «        dk    rt          t          |¦  «        ¦  «        ‚| j        dk    r'| j        d	k    rt          t          |¦  «        ¦  «        ‚| j        d
k    rJ| j        dk    r?| j                             d¦  «        s%d| j        vrt          t          |¦  «        ¦  «        ‚	 t!          | j        ¦  «        }n*# t"          $ r t          t          |¦  «        ¦  «        ‚w xY w|j        pd| _        |j        pd| _        |j        pd| _        t*                               |d         ¦  «        }|€t-          |d         ¦  «        ‚t/          |                     d¦  «        ¦  «        t/          |                     d¦  «        ¦  «        f| _        d| j        cxk    rdk     s"n | j        j        st-          | j        ¦  «        ‚d S d S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r9   r“   )r”   Úbits     r.   r–   z.Request.parse_request_line.<locals>.<listcomp>5  s    € ÐGÐGÐG c•˜SÑ!Ô!ÐGÐGÐGr:   ó    r=   r>   r   é   r2   rN   ÚOPTIONSÚCONNECTú/z://rï   rÃ   )r=   r   )r�   rž   r   r   rÊ   r*   rì   ÚMETHOD_BADCHAR_REr©   r   r¢   r£   rö   r¤   rË   r§   r   rQ   rÌ   rÍ   rÎ   Ú
VERSION_REr   r¼   Úgroupra   rí   )rq   Ú
line_bytesr$  rù   Úmatchs        r.   rþ   zRequest.parse_request_line4  sð  € ØGÐG¨Z×-=Ò-=¸dÀAÑ-FÔ-FÐGÑGÔGˆÝˆt‰9Œ9˜Š>ˆ>Ý$¥\°*Ñ%=Ô%=Ñ>Ô>Ð>ð ˜1”gˆŒð ŒxÔ9ð 	8Ý ×'Ò'¨¬Ñ4Ô4ð 8Ý*¨4¬;Ñ7Ô7Ð7Ø�˜D œG™œÐ*Ð*Ò*Ð*¨Ò*Ð*Ð*Ð*Ý*¨4¬;Ñ7Ô7Ð7å×!Ò! $¤+Ñ.Ô.ð 	4Ý& t¤{Ñ3Ô3Ð3ð Œ8Ô(ð 	.Øœ+×+Ò+Ñ-Ô-ˆDŒKð ˜”7ˆŒõ ˆtŒx‰=Œ=˜AÒÐÝ$¥\°*Ñ%=Ô%=Ñ>Ô>Ð>ð Œ8�sŠ?ˆ?˜tœ{¨iÒ7Ð7Ý$¥\°*Ñ%=Ô%=Ñ>Ô>Ð>ð
 ŒK˜9Ò$Ð$Ø”H ’O�OØœ×+Ò+¨CÑ0Ô0ð $à ¤Ð)Ð)Ý$¥\°*Ñ%=Ô%=Ñ>Ô>Ð>ð	?Ý% d¤hÑ/Ô/ˆEˆEøÝð 	?ð 	?ð 	?Ý$¥\°*Ñ%=Ô%=Ñ>Ô>Ð>ð	?øøøà”JÐ$ "ˆŒ	Ø”[Ð& BˆŒ
ØœÐ,¨"ˆŒõ ×$Ò$ T¨!¤WÑ-Ô-ˆØˆ=Ý$ T¨!¤WÑ-Ô-Ð-Ý˜EŸKšK¨™NœNÑ+Ô+­S°·²¸Q±´Ñ-@Ô-@ÐAˆŒØ˜œÐ.Ð.Ò.Ð.¨Ò.Ð.Ð.Ð.à”8Ô>ð 7Ý(¨¬Ñ6Ô6Ð6ð /Ð.ð7ð 7s   Ç8H È'H4c                 óØ   •— t          ¦   «                              ¦   «          t          | j        j        t
          ¦  «        r)t          t          | j        d¦  «        ¦  «        | _        d S d S )Nr   )	rÕ   rp   r|   rd   Úreaderr   r   r   r^   )rq   rÖ   s    €r.   rp   zRequest.set_body_readerx  sY   ø€ Ý‰Œ×ÒÑ!Ô!Ð!Ý�d”iÔ&­	Ñ2Ô2ð 	=Ý�\¨$¬-¸Ñ;Ô;Ñ<Ô<ˆDŒIˆIˆIð	=ð 	=r:   )r2   rÆ   )r   )r3   r4   r5   rt   rß   rn   ræ   rç   rã   rý   r  rå   r  r  r  rþ   rp   Ú__classcell__)rÖ   s   @r.   rÈ   rÈ   ¯  s'  ø€ € € € € ð3ð 3ð 3ð 3ð 3ð 3ð:ð ð ð ð1ð 1ð 1ðUð Uð Uðnð ð ð@ð ð ð ð+ð +ð +ð +ð&:ð :ð :ðð ð ð,;ð ;ð ;ð;ð ;ð ;ðz[2ð [2ð [2ðzB7ð B7ð B7ðH=ð =ð =ð =ð =ð =ð =ð =ð =r:   rÈ   )5Úenumr   rO   Úrer  r5  Úgunicorn.http.bodyr   r   r   r   Úgunicorn.http.errorsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úgunicorn.utilr   r   r!   r#   r'   r/   r  r1   r<   rD   rÐ   rj   rl   ÚRFC9110_5_6_2_TOKEN_SPECIALSÚcompileÚescaper¢   rH  rI  r¨   Ú	frozensetr¥   rW   rY   rÈ   r9   r:   r.   ú<module>rY     sì  ðð
 Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø €€€à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ]Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ð Ð ØÐ ð#Ð ð<ð <ð <ð@ F€ðð ð ð ð �ñ ô ð ðð ð ð ð ˆwñ ô ð ðð ð ð ð �ñ ô ð ð Ð Ø€Ø#Ð ð  2Ð Øˆ2Œ:Ð'¨9¨2¬9Ð5QÑ+RÔ+RÑSÑTÔT€Ø�B”J˜xÑ(Ô(Ð àˆRŒZÐ*Ñ+Ô+€
ð %/ B¤JÐ/JÑ$KÔ$KÐ !ð
 #, )ð -ñ #ô #Ð ðð ð ð(A&ð A&ð A&ð A&ð A&ñ A&ô A&ð A&ðHL=ð L=ð L=ð L=ð L=ˆgñ L=ô L=ð L=ð L=ð L=r:   