Ë
    [^(h0O  ã            $       ó0  — d Z ddlmZmZm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mZmZmZmZmZmZ ddgZ G d	„ de«      Zd
de› de› de› de› de
› d�z   e_         dee   dee   dee   dee   dee   dee   dedededededededededef d„Zdee   dee   dee   dee   dee   dee   dedededededededededef d „Z ee¬!«      	 	 	 	 	 d$dee   dee   dee   dee   dee   dee   d"ee   dedededededededededef"d#„«       Zy)%z)Implementation for the RMSprop algorithm.é    )ÚcastÚOptionalÚUnionN)ÚTensoré   )Ú_capturable_docÚ_default_to_fused_or_foreachÚ_differentiable_docÚ_disable_dynamo_if_unsupportedÚ_foreach_docÚ!_get_capturable_supported_devicesÚ_get_scalar_dtypeÚ_maximize_docÚ_params_docÚ_use_grad_for_differentiableÚ_view_as_realÚ	OptimizerÚParamsTÚRMSpropÚrmspropc                   ó”   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 ddedeeef   dedededededed	ee   d
edefˆ fd„Z	ˆ fd„Z
d„ Zedd„«       Zˆ xZS )r   ÚparamsÚlrÚalphaÚepsÚweight_decayÚmomentumÚcenteredÚ
capturableÚforeachÚmaximizeÚdifferentiablec                 ój  •— t        |t        «      r|j                  «       dk7  rt        d«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚d|k  st        d|› �«      ‚t	        ||||||||	|
|¬	«
      }t
        ‰| �  ||«       y )
Nr   zTensor lr must be 1-elementg        zInvalid learning rate: zInvalid epsilon value: zInvalid momentum value: zInvalid weight_decay value: zInvalid alpha value: )
r   r   r   r   r   r   r   r    r!   r"   )Ú
isinstancer   ÚnumelÚ
ValueErrorÚdictÚsuperÚ__init__)Úselfr   r   r   r   r   r   r   r   r    r!   r"   ÚdefaultsÚ	__class__s                €úQ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/optim/rmsprop.pyr)   zRMSprop.__init__   sã   ø€ ô �bœ&Ô! b§h¡h£j°A¢oÜÐ:Ó;Ð;Ø�bŠyÜÐ6°r°dÐ;Ó<Ð<Ø�cŠzÜÐ6°s°eÐ<Ó=Ð=Ø�hŠÜÐ7¸°zÐBÓCÐCØ�lÒ"ÜÐ;¸L¸>ÐJÓKÐKØ�eŠ|ÜÐ4°U°GÐ<Ó=Ð=äØØØØØØ%Ø!ØØØ)ô
ˆô 	‰Ñ˜ Õ*ó    c                 ó|  •— t         ‰| �  |«       | j                  D �]  }|j                  dd«       |j                  dd«       |j                  dd «       |j                  dd«       |j                  dd«       |j                  dd«       |d	   D ]¥  }| j                  j                  |g «      }t        |«      dk7  sŒ.t        j                  |d
   «      rŒGt        |d
   «      }|d   r*t        j                  |t        «       |j                  ¬«      nt        j                  |t        «       ¬«      |d
<   Œ§ �Œ y )Nr   r   r   Fr    r!   r"   r   r   Ústep©ÚdtypeÚdevice©r2   )r(   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorÚfloatÚtensorr   r3   )r*   r8   ÚgroupÚpÚp_stateÚstep_valr,   s         €r-   r5   zRMSprop.__setstate__F   s  ø€ Ü‰Ñ˜UÔ#Ø×&Ñ&ó 	ˆEØ×Ñ˜Z¨Ô+Ø×Ñ˜Z¨Ô/Ø×Ñ˜Y¨Ô-Ø×Ñ˜Z¨Ô/Ø×ÑÐ-¨uÔ5Ø×Ñ˜\¨5Ô1Ø˜8‘_ò 
�ØŸ*™*Ÿ.™.¨¨BÓ/�Ü�w“< 1Ó$¬U¯_©_¸WÀV¹_Õ-MÜ$ W¨V¡_Ó5�Hð
 ! Ò.ô Ÿ™Ø$Ô,=Ó,?ÈÏÉõô #Ÿ\™\¨(Ô:KÓ:MÔNð ˜F’Oò	
ñ	r.   c                 óª  — d}|d   D �]Ç  }	|	j                   €Œ|t        j                  |	«      z  }|j                  |	«       |	j                   j                  rt        d«      ‚|j                  |	j                   «       | j                  |	   }
t        |
«      dk(  rÖ|d   r*t        j                  dt        «       |	j                  ¬«      nt        j                  dt        «       ¬«      |
d	<   t        j                  |	t        j                  ¬
«      |
d<   |d   dkD  r(t        j                  |	t        j                  ¬
«      |
d<   |d   r(t        j                  |	t        j                  ¬
«      |
d<   |j                  |
d   «       |j                  |
d	   «       |d   dkD  r|j                  |
d   «       |d   s�Œ´|j                  |
d   «       �ŒÊ |S )NFr   z)RMSprop does not support sparse gradientsr   r   © r1   r4   r0   )Úmemory_formatÚ
square_avgr   Úmomentum_bufferr   Úgrad_avg)Úgradr;   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr8   r:   Úzerosr   r3   Ú
zeros_likeÚpreserve_format)r*   r?   Úparams_with_gradÚgradsÚsquare_avgsÚmomentum_buffer_listÚ	grad_avgsÚstate_stepsÚhas_complexr@   r8   s              r-   Ú_init_groupzRMSprop._init_group[   s¶  € ð ˆØ�x‘ó $	4ˆAØ�v‰vˆ~ØØœ5×+Ñ+¨AÓ.Ñ.ˆKØ×#Ñ# AÔ&à�v‰v×ÒÜ"Ð#NÓOÐOØ�L‰L˜Ÿ™Ô à—J‘J˜q‘MˆEô �5‹z˜QŠð ˜\Ò*ô —K‘K Ô*;Ó*=ÀaÇhÁhÕOäŸ™ RÔ/@Ó/BÔCð �f‘ô
 ',×&6Ñ&6Ø¤U×%:Ñ%:ô'��lÑ#ð ˜Ñ$ qÒ(Ü/4×/?Ñ/?Ø¬×)>Ñ)>ô0�EÐ+Ñ,ð ˜Ò$Ü(-×(8Ñ(8Ø¬×)>Ñ)>ô)�E˜*Ñ%ð ×Ñ˜u \Ñ2Ô3Ø×Ñ˜u V™}Ô-à�ZÑ  1Ò$Ø$×+Ñ+¨EÐ2CÑ,DÔEØ�ZÔ Ø× Ñ   zÑ!2Ö3ðI$	4ðL Ðr.   c                 ój  — | j                  «        d}|�$t        j                  «       5   |«       }ddd«       | j                  D ]_  }g }g }g }g }g }g }	| j	                  |||||||	«      }
t        ||||||	|d   |d   |d   |d   |d   |d   |d   |d	   |d
   |d   |
¬«       Œa |S # 1 sw Y   ŒyxY w)z°Perform a single optimization step.

        Args:
            closure (Callable, optional): A closure that reevaluates the model
                and returns the loss.
        Nr   r   r   r   r   r   r    r!   r"   r   )r   r   r   r   r   r   r    r!   r"   r   rW   )Ú _cuda_graph_capture_health_checkr;   Úenable_gradr6   rX   r   )r*   ÚclosureÚlossr?   rQ   rR   rS   rU   rT   rV   rW   s              r-   r0   zRMSprop.stepŽ   s  € ð 	×-Ñ-Ô/àˆØÐÜ×"Ñ"Ó$ñ !Ù“y�÷!ð ×&Ñ&ò $	ˆEØ-/ÐØ"$ˆEØ(*ˆKØ&(ˆIØ13Ð Ø(*ˆKà×*Ñ*ØØ ØØØ$ØØóˆKô Ø ØØØØ$ØØ˜‘;Ø˜G‘nØ˜%‘LØ" >Ñ2Ø˜zÑ*Ø˜zÑ*Ø˜iÑ(Ø˜zÑ*Ø$Ð%5Ñ6Ø  Ñ.Ø'ö#ð%$	ðL ˆ÷S!ð !ús   ©B)Â)B2)
g{®Gáz„?g®Gáz®ï?g:Œ0âŽyE>r   r   FFNFF©N)Ú__name__Ú
__module__Ú__qualname__r   r   r=   r   Úboolr   r)   r5   rX   r   r0   Ú__classcell__)r,   s   @r-   r   r      sÁ   ø„ ð $(ØØØØØØ Ø"&ØØ$ñ'+àð'+ð �%˜�-Ñ ð'+ð ð	'+ð
 ð'+ð ð'+ð ð'+ð ð'+ð ð'+ð ˜$‘ð'+ð ð'+ð õ'+ôRò*1ðf "ò4ó "ô4r.   aj  Implements RMSprop algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \alpha \text{ (alpha)}, \: \gamma \text{ (lr)},
                \: \theta_0 \text{ (params)}, \: f(\theta) \text{ (objective)}                   \\
            &\hspace{13mm}   \lambda \text{ (weight decay)},\: \mu \text{ (momentum)},
                \: centered, \: \epsilon \text{ (epsilon)}                                       \\
            &\textbf{initialize} : v_0 \leftarrow 0 \text{ (square average)}, \:
                \textbf{b}_0 \leftarrow 0 \text{ (buffer)}, \: g^{ave}_0 \leftarrow 0     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\
            &\hspace{5mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})           \\
            &\hspace{5mm}if \: \lambda \neq 0                                                    \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm}v_t           \leftarrow   \alpha v_{t-1} + (1 - \alpha) g^2_t
                \hspace{8mm}                                                                     \\
            &\hspace{5mm} \tilde{v_t} \leftarrow v_t                                             \\
            &\hspace{5mm}if \: centered                                                          \\
            &\hspace{10mm} g^{ave}_t \leftarrow g^{ave}_{t-1} \alpha + (1-\alpha) g_t            \\
            &\hspace{10mm} \tilde{v_t} \leftarrow \tilde{v_t} -  \big(g^{ave}_{t} \big)^2        \\
            &\hspace{5mm}if \: \mu > 0                                                           \\
            &\hspace{10mm} \textbf{b}_t\leftarrow \mu \textbf{b}_{t-1} +
                g_t/ \big(\sqrt{\tilde{v_t}} +  \epsilon \big)                                   \\
            &\hspace{10mm} \theta_t \leftarrow \theta_{t-1} - \gamma \textbf{b}_t                \\
            &\hspace{5mm} else                                                                   \\
            &\hspace{10mm}\theta_t      \leftarrow   \theta_{t-1} -
                \gamma  g_t/ \big(\sqrt{\tilde{v_t}} + \epsilon \big)  \hspace{3mm}              \\
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    For further details regarding the algorithm we refer to
    `lecture notes <https://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf>`_ by G. Hinton.
    and centered version `Generating Sequences
    With Recurrent Neural Networks <https://arxiv.org/pdf/1308.0850v5.pdf>`_.
    The implementation here takes the square root of the gradient average before
    adding epsilon (note that TensorFlow interchanges these two operations). The effective
    learning rate is thus :math:`\gamma/(\sqrt{v} + \epsilon)` where :math:`\gamma`
    is the scheduled learning rate and :math:`v` is the weighted moving average
    of the squared gradient.
    z
    Args:
        a0  
        lr (float, Tensor, optional): learning rate (default: 1e-2)
        alpha (float, optional): smoothing constant (default: 0.99)
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-8)
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        momentum (float, optional): momentum factor (default: 0)
        centered (bool, optional) : if ``True``, compute the centered RMSProp,
            the gradient is normalized by an estimation of its variance
        z	
        z

    r   rR   rS   rU   rT   rV   r   r   r   r   r   r   r!   r"   r   rW   c       
         óp  — t        | «      D �]'  \  }}||   }t        j                  j                  «       s\|rZt	        «       }|j
                  j                  |j
                  j                  k(  r|j
                  j                  |v sJ d|› d�«       ‚||   }|s|n| }||   }|dz  }|	dk7  r|j                  ||	¬«      }t        j                  |«      }|r?t        j                  |«      }t        j                  |«      }t        j                  |«      }|j                  |«      j                  ||d|z
  ¬«       |rT||   }|rt        j                  |«      }|j                  |d|z
  «       |j                  ||d¬«      j                  «       }n|j                  «       }|r|j                  |«      }n|j!                  |«      }|
dkD  rS||   }|rt        j                  |«      }|j                  |
«      j#                  ||«       |j!                  || ¬«       �Œ|j#                  ||| ¬«       �Œ* y )NúIIf capturable=True, params and state_steps must be on supported devices: ú.r   r   ©r   ©Úvalueéÿÿÿÿ)Ú	enumerater;   ÚcompilerÚis_compilingr   r3   ÚtypeÚaddrJ   Úview_as_realÚmul_Úaddcmul_Úlerp_ÚaddcmulÚsqrt_ÚsqrtÚadd_Úaddcdiv_)r   rR   rS   rU   rT   rV   r   r   r   r   r   r   r!   r"   r   rW   ÚiÚparamr0   Úcapturable_supported_devicesrI   rF   Úis_complex_paramrH   ÚavgÚbufs                             r-   Ú_single_tensor_rmspropr     s  € ô& ˜fÓ%ó 11‰ˆˆ5Ø˜1‰~ˆô �~‰~×*Ñ*Ô,±Ü+LÓ+NÐ(à—‘×!Ñ! T§[¡[×%5Ñ%5Ò5Ø—L‘L×%Ñ%Ð)EÑEð{ð [Ð[wÐZxÐxyÐzó{ðFð �Q‰xˆÙ#‰t¨$¨ˆØ  ‘^ˆ
à�‰	ˆà˜1ÒØ—8‘8˜E¨�8Ó6ˆDä ×+Ñ+¨EÓ2ÐÙÜ×&Ñ& uÓ-ˆEÜ×%Ñ% dÓ+ˆDÜ×+Ñ+¨JÓ7ˆJà�‰˜Ó×'Ñ'¨¨d¸!¸e¹)Ð'ÔDáØ  ‘|ˆHÙÜ ×-Ñ-¨hÓ7�Ø�N‰N˜4  U¡Ô+Ø×$Ñ$ X¨x¸rÐ$ÓB×HÑHÓJ‰Cà—/‘/Ó#ˆCáØ—'‘'˜#“,‰Cà—(‘(˜3“-ˆCà�aŠ<Ø& qÑ)ˆCÙÜ×(Ñ(¨Ó-�Ø�H‰H�XÓ×'Ñ'¨¨cÔ2Ø�J‰J�s 2 #ˆJÖ&à�N‰N˜4 ¨R¨CˆNÖ0ñc11r.   c       
         ó2  ‡!— t        | «      dk(  ry |rJ d«       ‚t        j                  j                  «       s5|r3t	        «       Š!t        ˆ!fd„t        | |«      D «       «      sJ d‰!› d�«       ‚t        j                  | |||||g«      }|j                  «       D �]|  \  \  }}}}}}}t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }t        t        t           |«      }|rg||g}|
dkD  r(t        t        t           |«      }|j                  |«       |r(t        t        t           |«      }|j                  |«       t        |g|¢­Ž  |rt        j                  |«      }t        j                  j                  «       s=|d   j                   r.t        j"                  |t        j$                  dd¬«      d¬	«       nt        j"                  |d
«       |	dk7  r3|rt        j"                  |||	¬	«       nt        j&                  |||	¬	«      }t        j(                  ||«       t        j*                  |||d
|z
  ¬«       |rvt        t        t           |«      }t        j,                  ||d
|z
  «       t        j.                  |||d¬«      }t        j0                  |«       t        j"                  ||«       n+t        j2                  |«      }t        j"                  ||«       |
dkD  rªt        t        t           |«      }t        j(                  ||
«       t        j4                  |||«       |rIt7        |t        j                  «      r/t        j8                  || «      } t        j"                  || «       �Œüt        j"                  ||| ¬	«       �Œ|rJt7        |t        j                  «      r0t        j:                  || «       t        j4                  |||«       �Œct        j4                  |||| ¬«       �Œ y )Nr   z#_foreach ops don't support autogradc              3   ó²   •K  — | ]N  \  }}|j                   j                  |j                   j                  k(  xr |j                   j                  ‰v –— ŒP y ­wr^   )r3   rn   )Ú.0r@   r0   r{   s      €r-   ú	<genexpr>z(_multi_tensor_rmsprop.<locals>.<genexpr>i  sQ   øè ø€ ò 
ñ ��4ð �H‰H�M‰M˜TŸ[™[×-Ñ-Ñ-ò >Ø—‘—‘Ð!=Ð=ó>ñ
ùs   ƒAAre   rf   g      ð?Úcpu)r3   rg   r   rh   rj   )r:   r;   rl   rm   r   ÚallÚzipr   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   Úlistr   rK   r   Ú_foreach_negÚis_cpuÚ_foreach_add_r>   Ú_foreach_addÚ_foreach_mul_Ú_foreach_addcmul_Ú_foreach_lerp_Ú_foreach_addcmulÚ_foreach_sqrt_Ú_foreach_sqrtÚ_foreach_addcdiv_r$   Ú_foreach_mulÚ_foreach_div_)"r   rR   rS   rU   rT   rV   r   r   r   r   r   r   r!   r"   r   rW   Úgrouped_tensorsÚgrouped_params_Úgrouped_grads_Úgrouped_square_avgs_Úgrouped_grad_avgs_Úgrouped_momentum_buffer_list_Úgrouped_state_steps_Ú_Úgrouped_paramsÚgrouped_gradsÚgrouped_square_avgsÚgrouped_state_stepsÚstate_and_gradsÚgrouped_momentum_buffer_listÚgrouped_grad_avgsr}   Úmomentum_lrr{   s"                                    @r-   Ú_multi_tensor_rmspropr§   N  sÄ  ø€ ô& ˆ6ƒ{�aÒØáÐDÐDÓDÐô �>‰>×&Ñ&Ô(©ZÜ'HÓ'JÐ$Üó 
ô ˜v {Ó3ô
ô 
ð 	wð WÐWsÐVtÐtuÐvó		wð 
ô  ×BÑBØ	�˜ YÐ0DÀkÐRó€Oð ×"Ñ"Ó$óYWñ 			ñ	
ØØØ ØØ)Ø àÜœd¤6™l¨OÓ<ˆÜœT¤&™\¨>Ó:ˆÜ"¤4¬¡<Ð1EÓFÐÜ"¤4¬¡<Ð1EÓFÐáØ,Ð.AÐBˆOØ˜!Š|Ü/3Üœ‘LÐ"?ó0Ð,ð  ×&Ñ&Ð'CÔDÙÜ$(¬¬f©Ð7IÓ$JÐ!Ø×&Ñ&Ð'8Ô9Ü˜.Ð;¨?Ó;áÜ!×.Ñ.¨}Ó=ˆMô �~‰~×*Ñ*Ô,Ð1DÀQÑ1G×1NÒ1NÜ×ÑØ#¤U§\¡\°#¸eÔ%DÈCöô ×ÑÐ 3°QÔ7à˜1ÒáÜ×#Ñ# M°>ÈÖVä %× 2Ñ 2Ø! >¸ô!�ô 	×ÑÐ/°Ô7Ü×ÑØ °ÀQÈÁYõ	
ñ Ü $¤T¬&¡\Ð3EÓ FÐÜ× Ñ Ð!2°MÀ1ÀuÁ9ÔMÜ×(Ñ(Ø#Ð%6Ð8IÐQSôˆCô × Ñ  Ô%Ü×Ñ  SÕ)ä×%Ñ%Ð&9Ó:ˆCÜ×Ñ  SÔ)à�aŠ<Ü+/Ü”V‘Ð;ó,Ð(ô ×ÑÐ <¸hÔGÜ×#Ñ#Ð$@À-ÐQTÔUñ œj¨¬U¯\©\Ô:Ü#×0Ñ0Ð1MÐPRÈsÓS�Ü×#Ñ# N°KÖ@ä×#Ñ#Ø"Ð$@ÈÈ÷ñ œj¨¬U¯\©\Ô:Ü×#Ñ# C¨"¨Ô-Ü×'Ñ'¨¸ÀsÖKä×'Ñ'¨¸ÀsÐSUÐRU×VñsYWr.   )Úsingle_tensor_fnr    c                ó€  — t         j                  j                  «       st        d„ |D «       «      st	        d«      ‚|€t        | |d¬«      \  }}|r)t         j                  j                  «       rt	        d«      ‚|r%t         j                  j                  «       st        }nt        } || |||||||||||||	||
¬«       y)ztFunctional API that performs rmsprop algorithm computation.

    See :class:`~torch.optim.RMSProp` for details.
    c              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr^   )r$   r;   r   )r‚   Úts     r-   rƒ   zrmsprop.<locals>.<genexpr>ë  s    è ø€ ò 5Ø()Œ
�1”e—l‘l×#ñ5ùs   ‚$&zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF)Ú	use_fusedz6torch.jit.script not supported with foreach optimizers)
r   r   r   r   r   r   r!   r   r"   rW   )
r;   rl   rm   r…   rM   r	   ÚjitÚis_scriptingr§   r   )r   rR   rS   rU   rT   rV   r    r!   r"   r   rW   r   r   r   r   r   r   rž   Úfuncs                      r-   r   r   Î  sÊ   € ô: �>‰>×&Ñ&Ô(´ñ 5Ø-8ô5ô 2ô Ø^ó
ð 	
ð €Ü1Ø�N¨eô
‰
ˆˆ7ñ ”5—9‘9×)Ñ)Ô+ÜÐSÓTÐTá”u—y‘y×-Ñ-Ô/Ü$‰ä%ˆáØØØØØØØØØØ!ØØØØØ%Øö!r.   )NFFFF)Ú__doc__Útypingr   r   r   r;   r   Ú	optimizerr   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú__all__r   r‰   r=   rb   r   r§   r   rD   r.   r-   ú<module>r´      s?  ðá 0ß (Ñ (ã Ý ÷÷ ÷ õ ð" �iÐ
 €ôgˆiô gðV+ðX	à	ˆð 		ð 
Ðð 	Ø	ˆð 	Ø	ˆð 	Ø	Ðð ðñY<ð „ðBD1Ø�‰LðD1à�‰<ðD1ð �f‘ðD1ð �F‰|ð	D1ð
 ˜v™,ðD1ð �f‘ðD1ð 	ðD1ð ðD1ð 
ðD1ð ðD1ð ðD1ð ðD1ð ðD1ð ðD1ð  ð!D1ð" ó#D1ðN}WØ�‰Lð}Wà�‰<ð}Wð �f‘ð}Wð �F‰|ð	}Wð
 ˜v™,ð}Wð �f‘ð}Wð 	ð}Wð ð}Wð 
ð}Wð ð}Wð ð}Wð ð}Wð ð}Wð ð}Wð  ð!}Wð" ó#}Wñ@  Ð1GÔHð #ØØ ØØñAØ�‰LðAà�‰<ðAð �f‘ðAð �F‰|ð	Að
 ˜v™,ðAð �f‘ðAð �d‰^ðAð ðAð ðAð ðAð ðAð 	ðAð  ð!Að" 
ð#Að$ ð%Að& ð'Að( ò)Aó IñAr.   