§
    X›j:  ã                   ó@  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ dd	lm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 erd
dlm Z   ej!        e"¦  «        Z# ej$        d¦  «        Z%dZ&dddœZ'e G d„ d¦  «        ¦   «         Z(e	 	 	 	 d9dee(         de)dz  de)de)de)dz  de)dz  de*e)e)f         dz  de+e)         dz  de,e+e*         e+e*         e)dz  f         fd„¦   «         Z- G d„ d e¦  «        Z. G d!„ d"e¦  «        Z/	 	 	 d:d#d$d%e*de)dz  de*e)e)f         dz  de)dz  ddfd&„Z0d'e*fd(„Z1d)e*fd*„Z2d+e*fd,„Z3d#d$d-e)ddfd.„Z4d#d$d/e*d0e5d-e)ddf
d1„Z6d/e*d2e(d0e5de+e)         fd3„Z7d4e+e*         d5e)de/fd6„Z8d#d$d7e+e)         d0e5de+e*         fd8„Z9dS );z.Git LFS related type definitions and utilitiesé    N)ÚIterable)Ú	dataclass)Úceil)Úgetsize)ÚTYPE_CHECKINGÚBinaryIOÚ	TypedDict)Úunquote)Ú	constantsé   )Úbuild_hf_headersÚfix_hf_endpoint_in_urlÚhf_raise_for_statusÚhttp_backoffÚloggingÚvalidate_hf_hub_args)ÚSliceFileObj)Úsha256Úsha_fileobj)ÚCommitOperationAddz^[0-9a-f]{40}$zlfs-multipart-uploadzapplication/vnd.git-lfs+json)ÚAcceptzContent-Typec                   ó†   — e Zd ZU dZeed<   eed<   eed<   edefd„¦   «         Z	edefd„¦   «         Z
ed	efd
„¦   «         ZdS )Ú
UploadInfoad  
    Dataclass holding required information to determine whether a blob
    should be uploaded to the hub using the LFS protocol or the regular protocol

    Args:
        sha256 (`bytes`):
            SHA256 hash of the blob
        size (`int`):
            Size in bytes of the blob
        sample (`bytes`):
            First 512 bytes of the blob
    r   ÚsizeÚsampleÚpathc                 óä   — t          |¦  «        }t          |d¦  «        5 }|                     d¦  «        d d…         }t          |¦  «        }d d d ¦  «         n# 1 swxY w Y    | |||¬¦  «        S )NÚrbé   ©r   r   r   )r   ÚopenÚpeekr   )Úclsr   r   Úfiler   Úshas         úP/home/lighthouse/health/venv/lib/python3.11/site-packages/huggingface_hub/lfs.pyÚ	from_pathzUploadInfo.from_pathI   s­   € å�t‰}Œ}ˆÝ�$˜ÑÔð 	$ Ø—Y’Y˜s‘^”^ D S DÔ)ˆFÝ˜dÑ#Ô#ˆCð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð ˆs˜ S°Ð8Ñ8Ô8Ð8s    -AÁAÁ AÚdatac                 óŠ   — t          |¦  «                             ¦   «         } | t          |¦  «        |d d…         |¬¦  «        S )Nr   )r   r   r   )r   ÚdigestÚlen)r#   r(   r%   s      r&   Ú
from_byteszUploadInfo.from_bytesQ   s>   € å�T‰lŒl×!Ò!Ñ#Ô#ˆØˆs�˜D™	œ	¨$¨t°¨t¬*¸SÐAÑAÔAÐAó    Úfileobjc                 ó  — |                      d¦  «        }|                     dt          j        ¦  «         t	          |¦  «        }|                     ¦   «         }|                     dt          j        ¦  «          | |||¬¦  «        S )Nr   r   r    )ÚreadÚseekÚioÚSEEK_SETr   Útell)r#   r.   r   r%   r   s        r&   Úfrom_fileobjzUploadInfo.from_fileobjV   sp   € à—’˜cÑ"Ô"ˆØ�Š�Q�œÑ$Ô$Ð$Ý˜'Ñ"Ô"ˆØ�|Š|‰~Œ~ˆØ�Š�Q�œÑ$Ô$Ð$Øˆs˜ S°Ð8Ñ8Ô8Ð8r-   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚbytesÚ__annotations__ÚintÚclassmethodÚstrr'   r,   r   r5   © r-   r&   r   r   6   sµ   € € € € € € ðð ð €M€M�MØ
€I€I�IØ€M€M�Màð9˜Sð 9ð 9ð 9ñ „[ð9ð ðB˜eð Bð Bð Bñ „[ðBð ð9 8ð 9ð 9ð 9ñ „[ð9ð 9ð 9r-   r   Úupload_infosÚtokenÚ	repo_typeÚrepo_idÚrevisionÚendpointÚheadersÚ	transfersÚreturnc                 ó|  — |�|nt           j        }d}|t           j        v rt           j        |         }|› d|› |› d�}	d|�|nddgd„ | D ¦   «         d	d
œ}
|�dt          |¦  «        i|
d<   i t          ¥t          |¬¦  «        ¥|pi ¥}t          d|	||
¬¦  «        }t          |¦  «         |                     ¦   «         }| 	                    dd¦  «        }t          |t          ¦  «        st          d¦  «        ‚| 	                    d¦  «        }t          |t          ¦  «        r|nd}d„ |D ¦   «         d„ |D ¦   «         |fS )aå  
    Requests the LFS batch endpoint to retrieve upload instructions

    Learn more: https://github.com/git-lfs/git-lfs/blob/main/docs/api/batch.md

    Args:
        upload_infos (`Iterable` of `UploadInfo`):
            `UploadInfo` for the files that are being uploaded, typically obtained
            from `CommitOperationAdd.upload_info`
        token (`str` or `None`):
            An authentication token (see https://huggingface.co/settings/token).
            Pass `None` to fall back to the local cached token (or no token if unauthenticated).
        repo_type (`str`):
            Type of the repo to upload to: `"model"`, `"dataset"` or `"space"`.
        repo_id (`str`):
            A namespace (user or an organization) and a repo name separated
            by a `/`.
        revision (`str`, *optional*):
            The git revision to upload to.
        endpoint (`str`, *optional*):
            The Hub endpoint to send the request to. Defaults to the value of `HF_ENDPOINT`.
        headers (`dict`, *optional*):
            Additional headers to include in the request
        transfers (`list`, *optional*):
            List of transfer methods to use. Defaults to ["basic", "multipart"].

    Returns:
        `LfsBatchInfo`: 3-tuple:
            - First element is the list of upload instructions from the server
            - Second element is a list of errors, if any
            - Third element is the chosen transfer adapter if provided by the server (e.g. "basic", "multipart", "xet")

    Raises:
        [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError)
            If an argument is invalid or the server response is malformed.
        [`HfHubHTTPError`]
            If the server returned an error.
    NÚ ú/z.git/info/lfs/objects/batchÚuploadÚbasicÚ	multipartc                 óP   — g | ]#}|j                              ¦   «         |j        d œ‘Œ$S )©Úoidr   )r   Úhexr   )Ú.0rL   s     r&   ú
<listcomp>z'post_lfs_batch_info.<locals>.<listcomp>™   sG   € ð 
ð 
ð 
ð
 ð ”}×(Ò(Ñ*Ô*Øœðð ð
ð 
ð 
r-   r   )Ú	operationrG   ÚobjectsÚ	hash_algoÚnameÚref)rA   ÚPOST©rF   ÚjsonrV   zMalformed response from serverÚtransferc                 ó4   — g | ]}d |v¯t          |¦  «        ‘ŒS ©Úerror)Ú_validate_batch_actions©rS   Úobjs     r&   rT   z'post_lfs_batch_info.<locals>.<listcomp>¶   s+   € ÐOÐOÐO¨#¸GÈ3Ð<NÐ<NÕ	  Ñ	%Ô	%Ð<NÐ<NÐ<Nr-   c                 ó4   — g | ]}d |v ¯t          |¦  «        ‘ŒS r_   )Ú_validate_batch_errorrb   s     r&   rT   z'post_lfs_batch_info.<locals>.<listcomp>·   s&   € ÐIÐIÐI¨¸'ÀS¸.¸.Õ	˜sÑ	#Ô	#¸.¸.¸.r-   )r   ÚENDPOINTÚREPO_TYPES_URL_PREFIXESr
   ÚLFS_HEADERSr   r   r   r\   ÚgetÚ
isinstanceÚlistÚ
ValueErrorr>   )r@   rA   rB   rC   rD   rE   rF   rG   Ú
url_prefixÚ	batch_urlÚpayloadÚrespÚ
batch_inforV   Úchosen_transfers                  r&   Úpost_lfs_batch_infors   `   s¤  € ðb $Ð/ˆxˆxµYÔ5G€HØ€JØ•IÔ5Ð5Ð5ÝÔ6°yÔAˆ
ØÐNÐN˜jÐN¨'ÐNÐNÐN€IàØ"+Ð"7�Y�Y¸gÀ{Ð=Sð
ð 
ð
 'ð
ñ 
ô 
ð ðð €Gð ÐØ ¥'¨(Ñ"3Ô"3Ð4ˆ�‰ðÝ
ðå
 Ð
'Ñ
'Ô
'ðð ˆ=�bð€Gõ
 ˜ 	°7ÀÐIÑIÔI€DÝ˜ÑÔÐØ—’‘”€Jà�nŠn˜Y¨Ñ-Ô-€GÝ�g�tÑ$Ô$ð ;ÝÐ9Ñ:Ô:Ð:à —n’n ZÑ0Ô0€OÝ)3°OÅSÑ)IÔ)IÐS�o�oÈt€Oð 	PÐO°ÐOÑOÔOØIÐI¨wÐIÑIÔIØðð r-   c                   ó$   — e Zd ZU eed<   eed<   dS )ÚPayloadPartTÚ
partNumberÚetagN)r6   r7   r8   r<   r;   r>   r?   r-   r&   ru   ru   ¼   s"   € € € € € € Ø€O€O�OØ
€I€I�I€I€Ir-   ru   c                   ó4   — e Zd ZU dZeed<   ee         ed<   dS )ÚCompletionPayloadTz?Payload that will be sent to the Hub when uploading multi-part.rQ   ÚpartsN)r6   r7   r8   r9   r>   r;   rk   ru   r?   r-   r&   ry   ry   Á   s2   € € € € € € ØIÐIà	€H€H�HØ�ÔÐÐÑÐÐr-   ry   rU   r   Úlfs_batch_actionc                 ó¸  — t          |¦  «         |                     d¦  «        }|€%t                               d| j        › d�¦  «         dS |d         d         }t          |¦  «         |d                              d¦  «        }|�t          |¦  «         |                     di ¦  «        }|                     d¦  «        }	t          |d	         |¬
¦  «        }
|	�M	 t          |	¦  «        }	n(# t          t          f$ r t          d|	› d�¦  «        ‚w xY wt          | ||	|
¬¦  «         nt          | |
¬¦  «         |�t          |¦  «         t          |d	         |¦  «        }t          d|t          ||¬¦  «        | j        j                             ¦   «         | j        j        dœ¬¦  «        }t%          |¦  «         t                               | j        › d�¦  «         dS )a½  
    Handles uploading a given object to the Hub with the LFS protocol.

    Can be a No-op if the content of the file is already present on the hub large file storage.

    Args:
        operation (`CommitOperationAdd`):
            The add operation triggering this upload.
        lfs_batch_action (`dict`):
            Upload instructions from the LFS batch endpoint for this object. See [`~utils.lfs.post_lfs_batch_info`] for
            more details.
        token (`str`, *optional*):
            An authentication token (see https://huggingface.co/settings/token). Used to call the
            optional LFS verify step at the end of the upload. If `None`, falls back to the local
            cached token.
        headers (`dict`, *optional*):
            Headers to include in the request, including authentication and user agent headers.
        endpoint (`str`, *optional*):
            The Hub endpoint to send the request to. Defaults to the value of `HF_ENDPOINT`.

    Raises:
        [`ValueError`](https://docs.python.org/3/library/exceptions.html#ValueError)
            If `lfs_batch_action` is improperly formatted
        [`HfHubHTTPError`]
            If the upload resulted in an error
    ÚactionsNzContent of file z. is already present upstream - skipping uploadrL   ÚverifyÚheaderÚ
chunk_sizeÚhref)rE   zTMalformed response from LFS batch endpoint: `chunk_size` should be an integer. Got 'z'.)rU   r   r€   Ú
upload_url)rU   r‚   rZ   )rA   rF   rP   r[   z: Upload successful)ra   ri   ÚloggerÚdebugÚpath_in_repoÚ_validate_lfs_actionr   r<   rl   Ú	TypeErrorÚ_upload_multi_partÚ_upload_single_partr   r   Úupload_infor   rR   r   r   )rU   r{   rA   rF   rE   r}   Úupload_actionÚverify_actionr   r€   r‚   Ú
verify_urlÚverify_resps                r&   Ú
lfs_uploadr�   È   s  € õD Ð,Ñ-Ô-Ð-Ø×"Ò" 9Ñ-Ô-€GØ€å�ŠÐn¨	Ô(>ÐnÐnÐnÑoÔoÐoØˆð % YÔ/°Ô9€MÝ˜Ñ'Ô'Ð'Ø$ YÔ/×3Ò3°HÑ=Ô=€MØÐ Ý˜]Ñ+Ô+Ð+ð ×Ò˜x¨Ñ,Ô,€FØ—’˜LÑ)Ô)€JÝ'¨°fÔ(=ÈÐQÑQÔQ€JØÐð	Ý˜Z™œˆJˆJøÝ�IÐ&ð 	ð 	ð 	ÝØuÐgqÐuÐuÐuñô ð ð	øøøõ 	 Y°vÈ*ÐakÐlÑlÔlÐlÐlå i¸JÐGÑGÔGÐGð Ð Ý˜]Ñ+Ô+Ð+Ý+¨M¸&Ô,AÀ8ÑLÔLˆ
Ý"ØØÝ$¨5¸'ÐBÑBÔBØ"Ô.Ô5×9Ò9Ñ;Ô;ÀYÔEZÔE_Ð`Ð`ð	
ñ 
ô 
ˆõ 	˜KÑ(Ô(Ð(Ý
‡L‚L�IÔ*Ð?Ð?Ð?Ñ@Ô@Ð@Ð@Ð@s   ÃC* Ã*%DÚ
lfs_actionc                 óî   — t          |                      d¦  «        t          ¦  «        r=|                      d¦  «        �7t          |                      d¦  «        t          ¦  «        st	          d¦  «        ‚| S )ú.validates response from the LFS batch endpointr�   r   Nz"lfs_action is improperly formatted)rj   ri   r>   Údictrl   )r�   s    r&   r†   r†     se   € õ 	�:—>’> &Ñ)Ô)­3Ñ/Ô/ð?à�^Š^˜HÑ%Ô%Ð-µ¸J¿NºNÈ8Ñ<TÔ<TÕVZÑ1[Ô1[Ð-åÐ=Ñ>Ô>Ð>ØÐr-   Úlfs_batch_actionsc                 ó¬  — t          |                      d¦  «        t          ¦  «        r(t          |                      d¦  «        t          ¦  «        st	          d¦  «        ‚|                      di ¦  «                             d¦  «        }|                      di ¦  «                             d¦  «        }|�t          |¦  «         |�t          |¦  «         | S )r’   rQ   r   z)lfs_batch_actions is improperly formattedr}   rL   r~   )rj   ri   r>   r<   rl   r†   )r”   r‹   rŒ   s      r&   ra   ra     sÊ   € åÐ(×,Ò,¨UÑ3Ô3µSÑ9Ô9ð F½jÐIZ×I^ÒI^Ð_eÑIfÔIfÕhkÑ>lÔ>lð FÝÐDÑEÔEÐEà%×)Ò)¨)°RÑ8Ô8×<Ò<¸XÑFÔF€MØ%×)Ò)¨)°RÑ8Ô8×<Ò<¸XÑFÔF€MØÐ Ý˜]Ñ+Ô+Ð+ØÐ Ý˜]Ñ+Ô+Ð+ØÐr-   Úlfs_batch_errorc                 óÖ  — t          |                      d¦  «        t          ¦  «        r(t          |                      d¦  «        t          ¦  «        st	          d¦  «        ‚|                      d¦  «        }t          |t
          ¦  «        rPt          |                     d¦  «        t          ¦  «        r(t          |                     d¦  «        t          ¦  «        st	          d¦  «        ‚| S )r’   rQ   r   z'lfs_batch_error is improperly formattedr`   ÚmessageÚcode)rj   ri   r>   r<   rl   r“   )r–   Ú
error_infos     r&   re   re   -  sÑ   € å�×*Ò*¨5Ñ1Ô1µ3Ñ7Ô7ð D½JÀ×GZÒGZÐ[aÑGbÔGbÕdgÑ<hÔ<hð DÝÐBÑCÔCÐCØ ×$Ò$ WÑ-Ô-€Jå�:�tÑ$Ô$ðDå�z—~’~ iÑ0Ô0µ#Ñ6Ô6ðDõ �z—~’~ fÑ-Ô-­sÑ3Ô3ðDõ
 ÐBÑCÔCÐCØÐr-   r‚   c                 ó¦   — |                       d¬¦  «        5 }t          d||¬¦  «        }t          |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )aK  
    Uploads `fileobj` as a single PUT HTTP request (basic LFS transfer protocol)

    Args:
        upload_url (`str`):
            The URL to PUT the file to.
        fileobj:
            The file-like object holding the data to upload.

    Raises:
        [`HfHubHTTPError`]
            If the upload resulted in an error.
    T©Ú	with_tqdmÚPUT©r(   N)Úas_filer   r   )rU   r‚   r.   Úresponses       r&   r‰   r‰   ;  sž   € ð 
×	Ò	 TÐ	Ñ	*Ô	*ð &¨gå  z¸Ð@Ñ@Ô@ˆÝ˜HÑ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s   —"AÁA
ÁA
r   r€   c           	      óú   — t          || j        |¬¦  «        }t          | ||¬¦  «        }t          d|t	          || j        j                             ¦   «         ¦  «        t          ¬¦  «        }t          |¦  «         dS )z@
    Uploads file using HF multipart LFS transfer protocol.
    )r   rŠ   r€   )rU   Úsorted_parts_urlsr€   rZ   )r\   rF   N)	Ú_get_sorted_parts_urlsrŠ   Ú_upload_parts_iterativelyr   Ú_get_completion_payloadr   rR   rh   r   )rU   r   r€   r‚   r£   Úresponse_headersÚcompletion_ress          r&   rˆ   rˆ   O  s‘   € õ
 /°fÈ)ÔJ_ÐlvÐwÑwÔwÐõ 1ØÐ/@ÈZðñ ô Ðõ "ØØÝ$Ð%5°yÔ7LÔ7S×7WÒ7WÑ7YÔ7YÑZÔZÝð	ñ ô €Nõ ˜Ñ'Ô'Ð'Ð'Ð'r-   rŠ   c                 óè   — d„ t          d„ |                      ¦   «         D ¦   «         d„ ¬¦  «        D ¦   «         }t          |¦  «        }|t          |j        |z  ¦  «        k    rt          d¦  «        ‚|S )Nc                 ó   — g | ]\  }}|‘ŒS r?   r?   )rS   Ú_r‚   s      r&   rT   z*_get_sorted_parts_urls.<locals>.<listcomp>g  s,   € ð 
ð 
ð 
áˆAˆzð 	ð
ð 
ð 
r-   c                 ó†   — g | ]>\  }}|                      ¦   «         r%t          |¦  «        d k    ¯,t          |d¦  «        |f‘Œ?S )r   é
   )Úisdigitr+   r<   )rS   Úpart_numr‚   s      r&   rT   z*_get_sorted_parts_urls.<locals>.<listcomp>j  s\   € ð ð ð á(�H˜jØ×#Ò#Ñ%Ô%ðõ +.¨h©-¬-¸!Ò*;Ð*;õ �X˜rÑ"Ô" JÐ/à*;Ð*;Ð*;r-   c                 ó   — | d         S )Nr   r?   )Úts    r&   ú<lambda>z(_get_sorted_parts_urls.<locals>.<lambda>o  s
   € ˜!˜Aœ$€ r-   )Úkeyz0Invalid server response to upload large LFS file)ÚsortedÚitemsr+   r   r   rl   )r   rŠ   r€   Úsorted_part_upload_urlsÚ	num_partss        r&   r¤   r¤   f  s›   € ð
ð 
å#ðð à,2¯LªL©N¬Nðñ ô ð
 �ð
ñ 
ô 
ð
ñ 
ô 
Ðõ Ð+Ñ,Ô,€IØ•D˜Ô)¨JÑ6Ñ7Ô7Ò7Ð7ÝÐKÑLÔLÐLØ"Ð"r-   r§   rQ   c                 óÚ   — g }t          | ¦  «        D ]U\  }}|                     d¦  «        }|�|dk    rt          d|› d|dz   › �¦  «        ‚|                     |dz   |dœ¦  «         ŒV||dœS )Nrw   rJ   zInvalid etag (`z`) returned for part r   )rv   rw   )rQ   rz   )Ú	enumerateri   rl   Úappend)r§   rQ   rz   Úpart_numberr   rw   s         r&   r¦   r¦   x  s¥   € Ø "€EÝ(Ð)9Ñ:Ô:ð 	
ð 	
Ñˆ�VØ�zŠz˜&Ñ!Ô!ˆØˆ<˜4 2š:˜:ÝÐ[¨tÐ[Ð[È+ÐXYÉ/Ð[Ð[Ñ\Ô\Ð\Ø�Šà)¨A™oØðð ñ	
ô 	
ð 	
ð 	
ð  Ð'Ð'Ð'r-   r£   c                 ób  — g }|                       d¬¦  «        5 }t          |¦  «        D ]m\  }}t          |||z  |¬¦  «        5 }t          d||¬¦  «        }t	          |¦  «         |                     |j        ¦  «         d d d ¦  «         n# 1 swxY w Y   Œn	 d d d ¦  «         n# 1 swxY w Y   |S )NTrœ   )Ú	seek_fromÚ
read_limitrž   rŸ   )r    r¹   r   r   r   rº   rF   )	rU   r£   r€   rF   r.   Úpart_idxÚpart_upload_urlÚfileobj_sliceÚpart_upload_ress	            r&   r¥   r¥   ‡  sK  € ð €GØ	×	Ò	 TÐ	Ñ	*Ô	*ð 
8¨gÝ)2Ð3DÑ)EÔ)Eð 		8ð 		8Ñ%ˆH�oÝØØ$ xÑ/Ø%ðñ ô ð 8ð å".¨u°oÈMÐ"ZÑ"ZÔ"Z�Ý# OÑ4Ô4Ð4Ø—’˜Ô6Ñ7Ô7Ð7ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8øð		8ð
8ð 
8ð 
8ñ 
8ô 
8ð 
8ð 
8ð 
8ð 
8ð 
8ð 
8øøøð 
8ð 
8ð 
8ð 
8ð €Ns5   ™*B$Á<BÁ?B$ÂBÂB$ÂBÂB$Â$B(Â+B()NNNN)NNN):r9   r2   ÚreÚcollections.abcr   Údataclassesr   Úmathr   Úos.pathr   Útypingr   r   r	   Úurllib.parser
   Úhuggingface_hubr   Úutilsr   r   r   r   r   r   Ú
utils._lfsr   Ú	utils.shar   r   Ú_commit_apir   Ú
get_loggerr6   rƒ   ÚcompileÚ	OID_REGEXÚLFS_MULTIPART_UPLOAD_COMMANDrh   r   r>   r“   rk   Útuplers   ru   ry   r�   r†   ra   re   r‰   r<   rˆ   r¤   r¦   r¥   r?   r-   r&   ú<module>rÔ      sÉ  ðð 5Ð 4à 	€	€	€	Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø  Ð  Ð  Ð  Ð  Ð  à %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð %Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ð ð 0Ø/Ð/Ð/Ð/Ð/Ð/à	ˆÔ	˜HÑ	%Ô	%€àˆBŒJÐ(Ñ)Ô)€	à5Ð ð -Ø2ðð €ð ð&9ð &9ð &9ð &9ð &9ñ &9ô &9ñ „ð&9ðR ð  ØØ%)Ø"&ðXð XØ˜:Ô&ðXà�‰:ðXð ðXð ð	Xð
 �D‰jðXð �D‰jðXð �#�s�(Œ^˜dÑ"ðXð �CŒy˜4ÑðXð ˆ4�Œ:�t˜D”z 3¨¡:Ð-Ô.ðXð Xð Xñ ÔðXðvð ð ð ð �9ñ ô ð ð
ð ð ð ð ˜ñ ô ð ð Ø%)ØðJAð JAØ#ðJAàðJAð �‰:ðJAð �#�s�(Œ^˜dÑ"ð	JAð
 �D‰jðJAð 
ðJAð JAð JAð JAðZ Tð ð ð ð ð¨tð ð ð ð ð¨4ð ð ð ð ð&Ð#7ð &ÀSð &ÈTð &ð &ð &ð &ð((Ð"6ð (Àð (ÐRUð (Ðcfð (Ðkoð (ð (ð (ð (ð.# 4ð #°jð #Ècð #ÐVZÐ[^ÔV_ð #ð #ð #ð #ð$(¨d°4¬jð (¸sð (ÐGYð (ð (ð (ð (ðØ#ðØ8<¸S¼	ðØORðà	ˆ$„Zðð ð ð ð ð r-   