§
    æ˜ºhw7  ã                   óæ   — d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlZd dlZd dlmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZ  G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚThreadPoolExecutor)ÚAnyÚDictÚListÚMappingÚOptionalÚSequenceÚ	TypedDict)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚ	LLMResult)ÚExtraÚFieldÚroot_validator)Úget_from_dict_or_env)Úenforce_stop_tokensc                   ó   — e Zd ZU dZeed<   dS )ÚTrainResultzTrain result.ÚlossN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚfloatÚ__annotations__© ó    úl/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/gradient_ai.pyr   r      s   € € € € € € ØÐà
€K€K�K€K€Kr   r   c                   ó>  — e Zd ZU dZ edd¬¦  «        Zeed<   	 dZe	e         ed<   	 dZ
e	e         ed<   	 dZe	e         ed	<   	 d
Zeed<   	 dZe	ej                 ed<   	  G d„ d¦  «        Z ed¬¦  «        dedefd„¦   «         Zedeeef         fd„¦   «         Zedefd„¦   «         Zdee         deeef         deeef         fd„Zdedeeef         deeef         fd„Z	 	 d$dede	ee                  de	e         dedef
d„Z	 	 d$dede	ee                  de	e          dedef
d„Z!	 	 d$dee         de	ee                  de	e         dede"f
d „Z#	 	 d$dee         de	ee                  de	e          dede"f
d!„Z$dee         dede%fd"„Z&dee         dede%fd#„Z'dS )%ÚGradientLLMa›  Gradient.ai LLM Endpoints.

    GradientLLM is a class to interact with LLMs on gradient.ai

    To use, set the environment variable ``GRADIENT_ACCESS_TOKEN`` with your
    API token and ``GRADIENT_WORKSPACE_ID`` for your gradient workspace,
    or alternatively provide them as keywords to the constructor of this class.

    Example:
        .. code-block:: python

            from langchain_community.llms import GradientLLM
            GradientLLM(
                model="99148c6d-c2a0-4fbe-a4a7-e7c05bdb8a09_base_ml_model",
                model_kwargs={
                    "max_generated_token_count": 128,
                    "temperature": 0.75,
                    "top_p": 0.95,
                    "top_k": 20,
                    "stop": [],
                },
                gradient_workspace_id="12345614fc0_workspace",
                gradient_access_token="gradientai-access_token",
            )

    Úmodelé   )ÚaliasÚ
min_lengthÚmodel_idNÚgradient_workspace_idÚgradient_access_tokenÚmodel_kwargszhttps://api.gradient.ai/apiÚgradient_api_urlÚ
aiosessionc                   ó$   — e Zd ZdZdZej        ZdS )úGradientLLM.Configz'Configuration for this pydantic object.TN)r   r   r   r   Úallow_population_by_field_namer   ÚforbidÚextrar   r   r    ÚConfigr.   L   s!   € € € € € Ø5Ð5à)-Ð&Ø”ˆˆˆr   r2   T)Úallow_reuseÚvaluesÚreturnc                 ó4  — t          |dd¦  «        |d<   t          |dd¦  «        |d<   |d         �t          |d         ¦  «        dk     rt          d¦  «        ‚|d         �t          |d         ¦  «        dk     rt          d	¦  «        ‚|d
         r¾|d
         }d|                     dd¦  «        cxk    rdk    sn t          d¦  «        ‚d|                     dd¦  «        cxk    rdk    sn t          d¦  «        ‚d|                     dd¦  «        k    rt          d¦  «        ‚d|                     dd¦  «        k    rt          d¦  «        ‚t          |dd¦  «        |d<   	 ddl}n/# t
          $ r t          j        d¦  «         Y nt          $ r Y nw xY w|S )z?Validate that api key and python package exists in environment.r)   ÚGRADIENT_ACCESS_TOKENr(   ÚGRADIENT_WORKSPACE_IDNé
   z0env variable `GRADIENT_ACCESS_TOKEN` must be seté   z0env variable `GRADIENT_WORKSPACE_ID` must be setr*   r   Útemperatureg      à?é   z-`temperature` must be in the range [0.0, 1.0]Útop_pz'`top_p` must be in the range [0.0, 1.0]Útop_kz`top_k` must be positiveÚmax_generated_token_countz,`max_generated_token_count` must be positiver+   ÚGRADIENT_API_URLzdDeprecationWarning: `GradientLLM` will use `pip install gradientai` in future releases of langchain.)	r   ÚlenÚ
ValueErrorÚgetÚ
gradientaiÚImportErrorÚloggingÚwarningÚ	Exception)Úclsr4   ÚkwrD   s       r    Úvalidate_environmentz GradientLLM.validate_environmentR   s   € õ +?ØÐ+Ð-Dñ+
ô +
ˆÐ&Ñ'õ +?ØÐ+Ð-Dñ+
ô +
ˆÐ&Ñ'ð
 Ð*Ô+Ð3Ý�6Ð1Ô2Ñ3Ô3°bÒ8Ð8åÐOÑPÔPÐPð Ð*Ô+Ð3Ý�6Ð1Ô2Ñ3Ô3°aÒ7Ð7åÐOÑPÔPÐPà�.Ô!ð 	QØ˜Ô'ˆBØ˜Ÿš˜}¨cÑ2Ô2Ð7Ð7Ò7Ð7°aÒ7Ð7Ð7Ð7Ý Ð!PÑQÔQÐQà˜Ÿš˜w¨Ñ,Ô,Ð1Ð1Ò1Ð1°Ò1Ð1Ð1Ð1Ý Ð!JÑKÔKÐKà�B—F’F˜7 CÑ(Ô(Ò(Ð(Ý Ð!;Ñ<Ô<Ð<à�B—F’FÐ6¸Ñ:Ô:Ò:Ð:Ý Ð!OÑPÔPÐPå%9ØÐ&Ð(:ñ&
ô &
ˆÐ!Ñ"ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝŒOðLñô ð ð ð õ ð 	ð 	ð 	ØˆDð	øøøð ˆs   Å$E) Å)FÆ		FÆFc                 ó2   — | j         pi }i d| j        i¥d|i¥S )zGet the identifying parameters.r+   r*   )r*   r+   )ÚselfÚ_model_kwargss     r    Ú_identifying_paramszGradientLLM._identifying_params‡   s8   € ð Ô)Ð/¨Rˆð
Ø! 4Ô#8Ð9ð
à˜}Ð-ð
ð 	
r   c                 ó   — dS )zReturn type of llm.Úgradientr   )rM   s    r    Ú	_llm_typezGradientLLM._llm_type�   s	   € ð ˆzr   ÚinputsÚkwargsc                 óR  — | j         pi }i |¥|¥}|                     dd¦  «        }t          | j        › d| j        › d�d| j        › �| j        › dddœt          |€t          d„ |D ¦   «         ¦  «        n&t          d	„ t          ||¦  «        D ¦   «         ¦  «        ¬
¦  «        ¬¦  «        S )úõBuild the kwargs for the Post request, used by sync

        Args:
            prompt (str): prompt used in query
            kwargs (dict): model kwargs in payload

        Returns:
            Dict[str, Union[str,dict]]: _description_
        ÚmultipliersNú/models/z
/fine-tuneúBearer úapplication/json©Úauthorizationzx-gradient-workspace-idÚacceptzcontent-typec              3   ó   K  — | ]}d |iV — Œ	dS )rS   Nr   )Ú.0Úinputs     r    ú	<genexpr>z=GradientLLM._kwargs_post_fine_tune_request.<locals>.<genexpr>¯   s?   è è € ð ð ð ð ! %ððð ð ð ð ð r   c              3   ó*   K  — | ]\  }}|d |idœV — ŒdS )Ú
multiplier)rS   ÚfineTuningParametersNr   )r_   r`   rc   s      r    ra   z=GradientLLM._kwargs_post_fine_tune_request.<locals>.<genexpr>¶   sP   è è € ð ð ñ *˜˜zð #(à(¨*ð1ðð ðð ð ð ð ð r   )Úsamples©ÚurlÚheadersÚjson)	r*   rC   Údictr+   r'   r)   r(   ÚtupleÚzip)rM   rS   rT   rN   Ú_paramsrW   s         r    Ú_kwargs_post_fine_tune_requestz*GradientLLM._kwargs_post_fine_tune_request•   s  € ð Ô)Ð/¨RˆØ-�]Ð- fÐ-ˆà—k’k -°Ñ6Ô6ˆåØÔ(ÐKÐK°$´-ÐKÐKÐKà!G¨4Ô+EÐ!GÐ!GØ.2Ô.HÐ+JØ,Ø 2ð	ð õ ð Ð&õ ð ð ð "(ð	ñ ô ñ ô ð õ ð ð õ .1°¸Ñ-EÔ-Eðñ ô ñ ô ðñ ô ð
ñ 
ô 
ð 	
r   Úpromptc                 óN  — | j         pi }i |¥|¥}t          | j        › d| j        › d�d| j        › �| j        › dddœt          ||                     dd¦  «        |                     dd¦  «        |                     d	d¦  «        |                     d
d¦  «        ¬¦  «        ¬¦  «        S )rV   rX   z	/completerY   rZ   r[   r?   Nr;   r>   r=   )ÚqueryÚmaxGeneratedTokenCountr;   ÚtopKÚtopPrf   )r*   rj   r+   r'   r)   r(   rC   )rM   ro   rT   rN   rm   s        r    Ú_kwargs_post_requestz GradientLLM._kwargs_post_requestÂ   sÔ   € ð Ô)Ð/¨RˆØ-�]Ð- fÐ-ˆåØÔ(ÐJÐJ°$´-ÐJÐJÐJà!G¨4Ô+EÐ!GÐ!GØ.2Ô.HÐ+JØ,Ø 2ð	ð õ ØØ'.§{¢{Ð3NÐPTÑ'UÔ'UØ#ŸKšK¨°tÑ<Ô<Ø—[’[ ¨$Ñ/Ô/Ø—[’[ ¨$Ñ/Ô/ðñ ô ð
ñ 
ô 
ð 	
r   ÚstopÚrun_managerc                 ó\  — 	 t          j        di |                      ||¦  «        ¤Ž}|j        dk    rt	          d|j        › d|j        › �¦  «        ‚n.# t           j        j        $ r}t	          d|› �¦  «        ‚d}~ww xY w|                     ¦   «         d         }|�t          ||¦  «        }|S )a  Call to Gradients API `model/{id}/complete`.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.
        éÈ   ú5Gradient returned an unexpected response with status ú: ú2RequestException while calling Gradient Endpoint: NÚgeneratedOutputr   )
ÚrequestsÚpostru   Ústatus_coderH   ÚtextÚ
exceptionsÚRequestExceptionri   r   )rM   ro   rv   rw   rT   ÚresponseÚer�   s           r    Ú_callzGradientLLM._callâ   sè   € ð 	VÝ”}ÐQÐQ t×'@Ò'@ÀÈÑ'PÔ'PÐQÐQˆHØÔ# sÒ*Ð*Ýð?ØÔ+ð?ð ?Ø/7¬}ð?ð ?ñô ð ð +øõ
 Ô"Ô3ð 	Vð 	Vð 	VÝÐTÐQRÐTÐTÑUÔUÐUøøøøð	Vøøøð �}Š}‰ŒÐ0Ô1ˆàÐå& t¨TÑ2Ô2ˆDàˆó   ‚AA ÁA=Á&A8Á8A=c           	   ‹   ó  K  — | j         sÕt          j        ¦   «         4 ƒd{V —†} |j        di |                      ||¬¦  «        ¤Ž4 ƒd{V —†	 }|j        dk    rt          d|j        › d|j        › �¦  «        ‚|                     ¦   «         ƒ d{V —†d         }ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   nœ | j         j        di |                      ||¬¦  «        ¤Ž4 ƒd{V —†	 }|j        dk    rt          d|j        › d|j        › �¦  «        ‚|                     ¦   «         ƒ d{V —†d         }ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   |�t          ||¦  «        }|S )a  Async Call to Gradients API `model/{id}/complete`.

        Args:
            prompt: The prompt to pass into the model.
            stop: Optional list of stop words to use when generating.

        Returns:
            The string generated by the model.
        N)ro   rT   ry   rz   r{   r}   r   )
r,   ÚaiohttpÚClientSessionr   ru   ÚstatusrH   r�   ri   r   )rM   ro   rv   rw   rT   Úsessionr„   r�   s           r    Ú_acallzGradientLLM._acall  sû  è è € ð  Œð 	BÝÔ,Ñ.Ô.ð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	F°'Ø'˜7œ<ð ð Ø×/Ò/°vÀfÐ/ÑMÔMðð ð Fð Fð Fð Fð Fð Fð Fð FàØ”¨#Ò-Ð-Ý'ðBØ'œðBð BØ2:´-ðBð Bñô ð ð #+§-¢-¡/¤/Ð1Ð1Ð1Ð1Ð1Ð1Ð3DÔE�Dð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ð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Føð ,�t”Ô+ð ð Ø×+Ò+°6À&Ð+ÑIÔIðð ð Bð Bð Bð Bð Bð Bð Bð BàØ”? cÒ)Ð)Ý#ð>Ø#œ?ð>ð >Ø.6¬mð>ð >ñô ð ð 'Ÿmšm™oœoÐ-Ð-Ð-Ð-Ð-Ð-Ð/@ÔA�ðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bð Ðå& t¨TÑ2Ô2ˆDàˆsI   £)CÁAB*ÂCÂ*
B4	Â4CÂ7B4	Â8CÃ
CÃCÄAE*Å*
E4Å7E4Úpromptsc                 óš  ‡ ‡‡‡— dt           dt          t                   fˆˆˆ ˆfd„}t          |¦  «        dk    rt	          t          ||¦  «        ¦  «        }net          t          dt          |¦  «        ¦  «        ¦  «        5 }t	          |                     ||¦  «        ¦  «        }ddd¦  «         n# 1 swxY w Y   t          |¬¦  «        S )ú*Run the LLM on the given prompt and input.ro   r5   c           	      óD   •— t           ‰j        d| ‰‰dœ‰¤Ž¬¦  «        gS )N)ro   rv   rw   ©r�   r   )r   r†   )ro   rT   rw   rM   rv   s    €€€€r    Ú_inner_generatez.GradientLLM._generate.<locals>._inner_generate:  sI   ø€ åØ#˜œð Ø%¨D¸kðð ØMSðð ðñ ô ðð r   r<   é   N©Úgenerations)	Ústrr   r   rA   ÚlistÚmapr   Úminr   )rM   rŽ   rv   rw   rT   r“   r–   Úps   ` ```   r    Ú	_generatezGradientLLM._generate0  s   øøøø€ ð	¥Cð 	­DµÔ,<ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ ˆw‰<Œ<˜1ÒÐÝ�s ?°GÑ<Ô<Ñ=Ô=ˆKˆKå#¥C¨­3¨w©<¬<Ñ$8Ô$8Ñ9Ô9ð D¸QÝ" 1§5¢5¨¸'Ñ#BÔ#BÑCÔC�ðDð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dõ  [Ð1Ñ1Ô1Ð1s   Â$B2Â2B6Â9B6c              ‹   óÆ   ‡ ‡‡‡K  — g }t          j        ˆˆˆ ˆfd„|D ¦   «         ¦  «        D ]&}|                     t          |¬¦  «        g¦  «         Œ't	          |¬¦  «        S )r�   c              3   ó<   •K  — | ]} ‰j         |f‰‰d œ‰¤ŽgV — ŒdS ))rv   rw   N)r�   )r_   ro   rT   rw   rM   rv   s     €€€€r    ra   z)GradientLLM._agenerate.<locals>.<genexpr>T  sU   øè è € ð )
ð )
àð ˆTŒ[˜ÐN d¸ÐNÐNÀvÐNÐNÐOð)
ð )
ð )
ð )
ð )
ð )
r   r’   r•   )ÚasyncioÚgatherÚappendr   r   )rM   rŽ   rv   rw   rT   r–   Ú
generations   ` ```  r    Ú
_ageneratezGradientLLM._agenerateK  s™   øøøøè è € ð ˆÝ!œ.ð )
ð )
ð )
ð )
ð )
ð )
ð )
à!ð)
ñ )
ô )
ñ 
ô 
ð 	>ð 	>ˆJð ×Ò¥
°
Ð ;Ñ ;Ô ;Ð<Ñ=Ô=Ð=Ð=Ý [Ð1Ñ1Ô1Ð1r   c                 ój  — 	 t          j        di |                      ||¦  «        ¤Ž}|j        dk    rt	          d|j        › d|j        › �¦  «        ‚n.# t           j        j        $ r}t	          d|› �¦  «        ‚d }~ww xY w|                     ¦   «         }|d         |d         z  }t          |¬¦  «        S )	Nry   rz   r{   r|   ÚsumLossÚnumberOfTrainableTokens©r   r   )
r~   r   rn   r€   rH   r�   r‚   rƒ   ri   r   )rM   rS   rT   r„   r…   Úresponse_jsonr   s          r    Útrain_unsupervisedzGradientLLM.train_unsupervised[  sù   € ð

	VÝ”}ð ð Ø×5Ò5°f¸fÑEÔEðð ˆHð Ô# sÒ*Ð*Ýð?ØÔ+ð?ð ?Ø/7¬}ð?ð ?ñô ð ð +øõ
 Ô"Ô3ð 	Vð 	Vð 	VÝÐTÐQRÐTÐTÑUÔUÐUøøøøð	Vøøøð !Ÿš™œˆØ˜YÔ'¨-Ð8QÔ*RÑRˆÝ Ð%Ñ%Ô%Ð%r‡   c           	   ‹   ó>  K  — | j         sßt          j        ¦   «         4 ƒd {V —†} |j        di |                      ||¦  «        ¤Ž4 ƒd {V —†	 }|j        dk    rt          d|j        › d|j        › �¦  «        ‚|                     ¦   «         ƒ d {V —†}|d         |d         z  }d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   n¦ | j         j        di |                      ||¦  «        ¤Ž4 ƒd {V —†	 }|j        dk    rt          d|j        › d|j        › �¦  «        ‚|                     ¦   «         ƒ d {V —†}|d         |d         z  }d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   t          |¬¦  «        S )Nry   rz   r{   r¥   r¦   r§   r   )
r,   r‰   rŠ   r   rn   r‹   rH   r�   ri   r   )rM   rS   rT   rŒ   r„   r¨   r   s          r    Úatrain_unsupervisedzGradientLLM.atrain_unsupervisedp  s«  è è € ð
 Œð 	ÝÔ,Ñ.Ô.ð ð ð ð ð ð ð °'Ø'˜7œ<ð ð Ø×9Ò9¸&À&ÑIÔIðð ð ð ð ð ð ð ð ð àØ”¨#Ò-Ð-Ý'ðBØ'œðBð BØ2:´-ðBð Bñô ð ð +3¯-ª-©/¬/Ð$9Ð$9Ð$9Ð$9Ð$9Ð$9�Mà% iÔ0Ø'Ð(AÔBñCð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð øð ,�t”Ô+ð ð Ø×5Ò5°f¸fÑEÔEðð ð ð ð ð ð ð ð ð àØ”? cÒ)Ð)Ý#ð>Ø#œ?ð>ð >Ø.6¬mð>ð >ñô ð ð '/§m¢m¡o¤oÐ 5Ð 5Ð 5Ð 5Ð 5Ð 5�à! )Ô,¨}Ð=VÔ/WÑWð ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð õ  Ð%Ñ%Ô%Ð%sI   £(CÁAB4Â"CÂ4
B>	Â>CÃB>	ÃCÃ
C!Ã$C!ÄAE>Å>
FÆF)NN)(r   r   r   r   r   r'   r—   r   r(   r   r)   r*   rj   r+   r,   r‰   rŠ   r2   r   r   rK   Úpropertyr   r   rO   rR   r	   rn   ru   r   r   r†   r   r�   r   rœ   r£   r   r©   r«   r   r   r    r"   r"      sî  € € € € € € ðð ð6 �E °AÐ6Ñ6Ô6€HˆcÐ6Ð6Ñ6Ø;à+/Ð˜8 Cœ=Ð/Ð/Ñ/Ø*à+/Ð˜8 Cœ=Ð/Ð/Ñ/ðð
 $(€L�(˜4”.Ð'Ð'Ñ'Ø1à9Ð�cÐ9Ð9Ñ9Øà26€J�˜Ô.Ô/Ð6Ð6Ñ6ØIðð ð ð ð ñ ô ð ð €^ Ð%Ñ%Ô%ð2¨$ð 2°4ð 2ð 2ð 2ñ &Ô%ð2ðh ð
 W¨S°#¨XÔ%6ð 
ð 
ð 
ñ „Xð
ð ð˜3ð ð ð ñ „Xðð+
Ø˜s”mð+
Ø-4°S¸#°XÔ->ð+
à	��c�Ô	ð+
ð +
ð +
ð +
ðZ
Øð
Ø#*¨3°¨8Ô#4ð
à	��c�Ô	ð
ð 
ð 
ð 
ðF %)Ø:>ð	 ð  àð ð �t˜C”yÔ!ð ð Ð6Ô7ð	 ð
 ð ð 
ð ð  ð  ð  ðJ %)Ø?Cð	*ð *àð*ð �t˜C”yÔ!ð*ð Ð;Ô<ð	*ð
 ð*ð 
ð*ð *ð *ð *ð^ %)Ø:>ð	2ð 2à�c”ð2ð �t˜C”yÔ!ð2ð Ð6Ô7ð	2ð
 ð2ð 
ð2ð 2ð 2ð 2ð< %)Ø?Cð	2ð 2à�c”ð2ð �t˜C”yÔ!ð2ð Ð;Ô<ð	2ð
 ð2ð 
ð2ð 2ð 2ð 2ð &à˜”ð&ð ð&ð 
ð	&ð &ð &ð &ð*"&à˜”ð"&ð ð"&ð 
ð	"&ð "&ð "&ð "&ð "&ð "&r   r"   ) rŸ   rF   Úconcurrent.futuresr   Útypingr   r   r   r   r   r	   r
   r‰   r~   Úlangchain_core.callbacksr   r   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   Úlangchain_core.pydantic_v1r   r   r   Úlangchain_core.utilsr   Úlangchain_community.llms.utilsr   r   r"   r   r   r    ú<module>rµ      so  ðØ €€€Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jà €€€Ø €€€ðð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 5Ð 5Ð 5Ð 5Ð 5Ð 5à >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð �)ñ ô ð ðx&ð x&ð x&ð x&ð x&�'ñ x&ô x&ð x&ð x&ð x&r   