Ë
    ÷Q(hã4  ã            	       ó°  — d Z ddlZddlmZmZ ddlZddl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 dd	lmZmZ dd
lmZ ddlmZmZmZmZ ddlmZm Z   e«       Z! e«       Z"d„ Z#ejH                  jK                  dee z   «      d„ «       Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+ejH                  jK                  dddg«      d„ «       Z,d„ Z-d„ Z.d„ Z/d„ Z0d„ Z1 ed ed1i dd i¤Ž¬!«      ejH                  jK                  d"d#d$g«      d%„ «       «       Z2 ed ed1i dd&i¤Ž¬!«      ejH                  jK                  d"d#d$g«      d'„ «       «       Z3d(„ Z4ejH                  jK                  d)e«      d*„ «       Z5d+„ Z6ejH                  jK                  dee z   «      d,„ «       Z7ejH                  jK                  d-d.d/g«      ejH                  jK                  dddg«      d0„ «       «       Z8y)2zD
Testing for Isolation Forest algorithm (sklearn.ensemble.iforest).
é    N)ÚMockÚpatch)Úparallel_backend)Úload_diabetesÚ	load_irisÚmake_classification)ÚIsolationForest)Ú_average_path_length)Úroc_auc_score)ÚParameterGridÚtrain_test_split)Úcheck_random_state)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equalÚignore_warnings)ÚCSC_CONTAINERSÚCSR_CONTAINERSc                 ó<  — t        j                  ddgddgg«      }t        j                  ddgddgg«      }t        dgg d¢ddgdœ«      }t        «       5  |D ]-  }t	        dd	| i|¤Žj                  |«      j                  |«       Œ/ 	 d
d
d
«       y
# 1 sw Y   y
xY w)z6Check Isolation Forest for various parameter settings.r   é   é   é   )ç      à?ç      ð?r   TF)Ún_estimatorsÚmax_samplesÚ	bootstrapÚrandom_stateN© )ÚnpÚarrayr   r   r	   ÚfitÚpredict)Úglobal_random_seedÚX_trainÚX_testÚgridÚparamss        úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/ensemble/tests/test_iforest.pyÚtest_iforestr*   "   s§   € ä�h‰h˜˜A˜  A Ð'Ó(€GÜ�X‰X˜˜1�v  1˜vÐ&Ó'€FäØ˜ª]È$ÐPUÈÑWó€Dô 
Ó	ñ Øò 	ˆFÜÑFÐ);ÐF¸vÑF×JÑJØóç‰g�f�oñ	÷÷ ñ ús   Á3BÂBÚsparse_containerc                 ó~  — t        | «      }t        t        j                  dd |¬«      \  }}t	        ddgddgdœ«      } ||«      } ||«      }|D ]j  }t        dd	| d
œ|¤Žj                  |«      }	|	j                  |«      }
t        dd	| d
œ|¤Žj                  |«      }|j                  |«      }t        |
|«       Œl y)z=Check IForest for various parameter settings on sparse input.Né2   ©r   r   r   TF)r   r   é
   )r   r   r   )	r   r   ÚdiabetesÚdatar   r	   r"   r#   r   )r$   r+   Úrngr%   r&   r'   ÚX_train_sparseÚX_test_sparser(   Úsparse_classifierÚsparse_resultsÚdense_classifierÚdense_resultss                r)   Útest_iforest_sparser9   2   sç   € ô Ð/Ó
0€CÜ&¤x§}¡}°S°bÐ'9ÈÔL�O€GˆVÜ¨#¨s¨À4ÈÀ-ÑPÓQ€Dá% gÓ.€NÙ$ VÓ,€Màò :ˆä+ð 
ØÐ*<ñ
Ø@Fñ
ç
‰#ˆnÓ
ð 	ð +×2Ñ2°=ÓAˆô +ð 
ØÐ*<ñ
Ø@Fñ
ç
‰#ˆg‹,ð 	ð )×0Ñ0°Ó8ˆä˜>¨=Õ9ñ:ó    c                  ó  — t         j                  } d}t        j                  t        |¬«      5  t        d¬«      j                  | «       ddd«       t        j                  «       5  t        j                  dt        «       t        d¬«      j                  | «       ddd«       t        j                  «       5  t        j                  dt        «       t        t        j                  d«      ¬«      j                  | «       ddd«       t        j                  t        «      5  t        «       j                  | «      j                  | dd…d	d…f   «       ddd«       y# 1 sw Y   �ŒxY w# 1 sw Y   ŒÏxY w# 1 sw Y   ŒvxY w# 1 sw Y   yxY w)
z7Test that it gives proper exception on deficient input.ú3max_samples will be set to n_samples for estimation©Úmatchéè  ©r   NÚerrorÚautor   r   )Úirisr1   ÚpytestÚwarnsÚUserWarningr	   r"   ÚwarningsÚcatch_warningsÚsimplefilterr    Úint64ÚraisesÚ
ValueErrorr#   )ÚXÚwarn_msgs     r)   Útest_iforest_errorrO   L   s)  € ä�	‰	€Að
 E€HÜ	�‰”k¨Ô	2ñ 1Ü DÔ)×-Ñ-¨aÔ0÷1ä	×	 Ñ	 Ó	"ñ 3Ü×Ñ˜g¤{Ô3Ü FÔ+×/Ñ/°Ô2÷3ô 
×	 Ñ	 Ó	"ñ 8Ü×Ñ˜g¤{Ô3Ü¤B§H¡H¨Q£KÔ0×4Ñ4°QÔ7÷8ô
 
�‰”zÓ	"ñ 3ÜÓ×Ñ˜aÓ ×(Ñ(¨ª1¨a©b¨5©Ô2÷3ð 3÷1ñ 1ú÷3ð 3ú÷8ð 8ú÷
3ð 3ús0   ®EÁ&6E*Â8A	E6Ä"2FÅE'Å*E3Å6E?ÆFc            
      ó  — t         j                  } t        «       j                  | «      }|j                  D ]O  }|j
                  t        t        j                  t        j                  | j                  d   «      «      «      k(  rŒOJ ‚ y)zDCheck max_depth recalculation when max_samples is reset to n_samplesr   N)rC   r1   r	   r"   Úestimators_Ú	max_depthÚintr    ÚceilÚlog2Úshape)rM   ÚclfÚests      r)   Útest_recalculate_max_depthrY   b   sd   € ä�	‰	€AÜ
Ó
×
Ñ
 Ó
"€CØ�‰ò BˆØ�}‰}¤¤B§G¡G¬B¯G©G°A·G±G¸A±JÓ,?Ó$@Ó AÓAÐAÐAñBr:   c                  óä  — t         j                  } t        «       j                  | «      }|j                  | j
                  d   k(  sJ ‚t        d¬«      }d}t        j                  t        |¬«      5  |j                  | «       d d d «       |j                  | j
                  d   k(  sJ ‚t        d¬«      j                  | «      }|j                  d| j
                  d   z  k(  sJ ‚y # 1 sw Y   ŒdxY w)Nr   iô  r@   r<   r=   gš™™™™™Ù?)	rC   r1   r	   r"   Úmax_samples_rV   rD   rE   rF   )rM   rW   rN   s      r)   Útest_max_samples_attributer\   j   sÉ   € Ü�	‰	€AÜ
Ó
×
Ñ
 Ó
"€CØ×Ñ˜qŸw™w q™zÒ)Ð)Ð)ä
 cÔ
*€CØD€HÜ	�‰”k¨Ô	2ñ Ø�‰�Œ
÷à×Ñ˜qŸw™w q™zÒ)Ð)Ð)ä
 cÔ
*×
.Ñ
.¨qÓ
1€CØ×Ñ˜s Q§W¡W¨Q¡ZÑ/Ò/Ð/Ñ/÷ð ús   Á1C&Ã&C/c                 ó¤  — t        | «      }t        t        j                  |¬«      \  }}t	        d| ¬«      j                  |«      }|j                  d¬«       |j                  |«      }|j                  d¬«       |j                  |«      }t        ||«       t	        d| ¬«      j                  |«      }|j                  |«      }t        ||«       y)zCheck parallel regression.r.   r   )Ún_jobsr   r   ©r^   r   N)	r   r   r0   r1   r	   r"   Ú
set_paramsr#   r   )r$   r2   r%   r&   ÚensembleÚy1Úy2Úy3s           r)   Ú test_iforest_parallel_regressionre   y   s·   € ä
Ð/Ó
0€Cä&¤x§}¡}À3ÔG�O€GˆVä aÐ6HÔI×MÑMÈgÓV€Hà×Ñ˜qÐÔ!Ø	×	Ñ	˜&Ó	!€BØ×Ñ˜qÐÔ!Ø	×	Ñ	˜&Ó	!€BÜ˜b "Ô%ä aÐ6HÔI×MÑMÈgÓV€Hà	×	Ñ	˜&Ó	!€BÜ˜b "Õ%r:   c                 óÀ  — t        | «      }d|j                  dd«      z  }|j                  t        j                  |dz   |dz
  f«      «      }|dd }|j                  ddd¬	«      }t        j                  |dd |f«      }t        j                  d
gdz  dgdz  z   «      }t        d|¬«      j                  |«      }|j                  |«       }t        ||«      dkD  sJ ‚y)z#Test Isolation Forest performs wellg333333Ó?iX  r   Nr?   éÿÿÿÿr   )éÈ   r   )ÚlowÚhighÚsizer   rh   éd   )r   r   g\�Âõ(\ï?)r   ÚrandnÚpermutationr    ÚvstackÚuniformr!   r	   r"   Údecision_functionr   )	r$   r2   rM   r%   Ú
X_outliersr&   Úy_testrW   Úy_preds	            r)   Útest_iforest_performanceru   �   så   € ô Ð/Ó
0€CØˆc�i‰i˜˜QÓÑ€AØ�‰œŸ	™	 1 q¡5¨!¨a©% .Ó1Ó2€AØ��ˆh€Gð —‘ ¨!°(�Ó;€JÜ�Y‰Y˜˜$˜%˜ *Ð-Ó.€FÜ�X‰X�q�c˜C‘i 1 #¨¡)Ñ+Ó,€Fô  c¸Ô
<×
@Ñ
@ÀÓ
I€Cð ×#Ñ# FÓ+Ð+€Fô ˜ Ó(¨4Ò/Ð/Ñ/r:   Úcontaminationç      Ð?rB   c           	      óN  — ddgddgddgddgddgddgddgddgg}t        || ¬	«      }|j                  |«       |j                  |«       }|j                  |«      }t	        j
                  |dd  «      t	        j                  |d d «      kD  sJ ‚t        |d
dgz  ddgz  z   «       y )Néþÿÿÿrg   r   r   é   é   éûÿÿÿé	   ©r   rv   é   )r	   r"   rq   r#   r    ÚminÚmaxr   )rv   r$   rM   rW   Údecision_funcÚpreds         r)   Útest_iforest_worksr„   ¥   s½   € ð ˆbˆ�B˜�8˜b "˜X¨¨1 v°°1¨v¸¸1°vÀÀ1¸vÈÈAÀwÐO€Aô Ð'9ÈÔ
W€CØ‡G�GˆA„JØ×*Ñ*¨1Ó-Ð-€MØ�;‰;�q‹>€Dä�6‰6�-  Ð$Ó%¬¯©¨}¸S¸bÐ/AÓ(BÒBÐBÐBÜ�t˜Q ! ™W q¨B¨4¡xÑ/Õ0r:   c                  óŒ   — t         j                  } t        «       j                  | «      }|j                  |j
                  k(  sJ ‚y ©N)rC   r1   r	   r"   r[   Ú_max_samples)rM   rW   s     r)   Útest_max_samples_consistencyrˆ   ´   s8   € ä�	‰	€AÜ
Ó
×
Ñ
 Ó
"€CØ×Ñ˜s×/Ñ/Ò/Ð/Ñ/r:   c                  óâ   — t        d«      } t        t        j                  d d t        j                  d d | ¬«      \  }}}}t        d¬«      }|j                  ||«       |j                  |«       y )Nr   r-   r.   gš™™™™™é?)Úmax_features)r   r   r0   r1   Útargetr	   r"   r#   )r2   r%   r&   Úy_trainrs   rW   s         r)   Ú test_iforest_subsampled_featuresr�   »   sb   € ä
˜QÓ
€CÜ'7Ü�‰�c�rÐœHŸO™O¨C¨RÐ0¸sô(Ñ$€GˆV�W˜fô  sÔ
+€CØ‡G�GˆG�WÔØ‡K�K�Õr:   c                  óp  — dt        j                  d«      t         j                  z   z  dz
  } dt        j                  d«      t         j                  z   z  dz
  }t        t	        dg«      dg«       t        t	        dg«      dg«       t        t	        d	g«      d
g«       t        t	        dg«      | g«       t        t	        dg«      |g«       t        t	        t        j
                  g d¢«      «      dd
| |g«       t	        t        j                  d«      «      }t        |t        j                  |«      «       y )Nç       @g      @gš™™™™™ù?g     0�@g}ÿ­¿Ì÷ÿ?r   g        r   r   r   é   éç  )r   r   r�   r‘   )	r    ÚlogÚeuler_gammar   r
   r!   Úaranger   Úsort)Ú
result_oneÚ
result_twoÚavg_path_lengths      r)   Ú test_iforest_average_path_lengthr™   Æ   sõ   € ð œŸ™˜s›¤b§n¡nÑ4Ñ5¸ÑG€JØœŸ™˜u›¬¯©Ñ6Ñ7Ð:MÑM€JÜÔ(¨!¨Ó-°¨uÔ5ÜÔ(¨!¨Ó-°¨uÔ5ÜÔ(¨!¨Ó-°¨uÔ5ÜÔ(¨!¨Ó-°
¨|Ô<ÜÔ(¨#¨Ó/°*°Ô>ÜÜœRŸX™X¢nÓ5Ó6Ø	ˆc�:˜zÐ*ôô
 +¬2¯9©9°Q«<Ó8€OÜ�¬¯©°Ó(@ÕAr:   c                  óÖ  — ddgddgddgg} t        d¬«      j                  | «      }t        «       j                  | «      }t        |j                  ddgg«      |j	                  ddgg«      |j
                  z   «       t        |j                  ddgg«      |j	                  ddgg«      |j
                  z   «       t        |j                  ddgg«      |j                  ddgg«      «       y )Nr   r   çš™™™™™¹?)rv   r�   )r	   r"   r   Úscore_samplesrq   Úoffset_)r%   Úclf1Úclf2s      r)   Útest_score_samplesr    Ú   sç   € Ø�1ˆv˜˜1�v  1˜vÐ&€GÜ¨Ô-×1Ñ1°'Ó:€DÜÓ× Ñ  Ó)€DÜØ×Ñ˜S #˜J˜<Ó(Ø×Ñ  c 
˜|Ó,¨t¯|©|Ñ;ôô Ø×Ñ˜S #˜J˜<Ó(Ø×Ñ  c 
˜|Ó,¨t¯|©|Ñ;ôô Ø×Ñ˜S #˜J˜<Ó(¨$×*<Ñ*<¸sÀC¸j¸\Ó*Jõr:   c                  ó<  — t        d«      } | j                  dd«      }t        dd| d¬«      }|j                  |«       |j                  d   }|j                  d¬«       |j                  |«       t        |j                  «      dk(  sJ ‚|j                  d   |u sJ ‚y)	z/Test iterative addition of iTrees to an iForestr   é   r   r/   T)r   r   r   Ú
warm_start)r   N)r   rm   r	   r"   rQ   r`   Úlen)r2   rM   rW   Útree_1s       r)   Útest_iforest_warm_startr¦   ë   s•   € ô ˜QÓ
€CØ�	‰	�"�aÓ€Aô Ø R°cÀdô€Cð ‡G�GˆA„Jà�_‰_˜QÑ€Fà‡N�N €NÔ#Ø‡G�GˆA„Jäˆs�‰Ó 2Ò%Ð%Ð%Ø�?‰?˜1Ñ Ñ'Ð'Ñ'r:   z*sklearn.ensemble._iforest.get_chunk_n_rowsÚreturn_valuer   )Úside_effectzcontamination, n_predict_calls)rw   r   )rB   r   c                 ó>   — t        ||«       | j                  |k(  sJ ‚y r†   ©r„   Ú
call_count©Úmocked_get_chunkrv   Ún_predict_callsr$   s       r)   Útest_iforest_chunks_works1r¯     ó#   € ô �}Ð&8Ô9Ø×&Ñ&¨/Ò9Ð9Ñ9r:   r/   c                 ó>   — t        ||«       | j                  |k(  sJ ‚y r†   rª   r¬   s       r)   Útest_iforest_chunks_works2r²     r°   r:   c                  ó¤  — t        j                  d«      } t        «       }|j                  | «       t         j                  j                  d«      }t        |j                  | «      dk(  «      sJ ‚t        |j                  |j                  dd«      «      dk(  «      sJ ‚t        |j                  | dz   «      dk(  «      sJ ‚t        |j                  | dz
  «      dk(  «      sJ ‚t        j                  |j                  dd«      dd«      } t        «       }|j                  | «       t        |j                  | «      dk(  «      sJ ‚t        |j                  |j                  dd«      «      dk(  «      sJ ‚t        |j                  t        j                  d«      «      dk(  «      sJ ‚|j                  dd«      } t        «       }|j                  | «       t        |j                  | «      dk(  «      sJ ‚t        |j                  |j                  dd«      «      dk(  «      sJ ‚t        |j                  t        j                  d«      «      dk(  «      sJ ‚y)z=Test whether iforest predicts inliers when using uniform data)rl   r/   r   r   rl   r/   N)
r    Úonesr	   r"   ÚrandomÚRandomStateÚallr#   rm   Úrepeat)rM   Úiforestr2   s      r)   Útest_iforest_with_uniform_datarº     sã  € ô 	�‰�	Ó€AÜÓ€GØ‡K�K�„Nä
�)‰)×
Ñ
 Ó
"€Cäˆw�‰˜qÓ! QÑ&Ô'Ð'Ð'Üˆw�‰˜sŸy™y¨¨bÓ1Ó2°aÑ7Ô8Ð8Ð8Üˆw�‰˜q 1™uÓ%¨Ñ*Ô+Ð+Ð+Üˆw�‰˜q 1™uÓ%¨Ñ*Ô+Ð+Ð+ô 	�	‰	�#—)‘)˜A˜rÓ" C¨Ó+€AÜÓ€GØ‡K�K�„Näˆw�‰˜qÓ! QÑ&Ô'Ð'Ð'Üˆw�‰˜sŸy™y¨¨bÓ1Ó2°aÑ7Ô8Ð8Ð8Üˆw�‰œrŸw™w yÓ1Ó2°aÑ7Ô8Ð8Ð8ð 	�	‰	�!�RÓ€AÜÓ€GØ‡K�K�„Näˆw�‰˜qÓ! QÑ&Ô'Ð'Ð'Üˆw�‰˜sŸy™y¨¨bÓ1Ó2°aÑ7Ô8Ð8Ð8Üˆw�‰œrŸw™w yÓ1Ó2°aÑ7Ô8Ð8Ñ8r:   Úcsc_containerc                 óp   — t        ddd¬«      \  }} | |«      }t        ddd¬«      j                  |«       y	)
zdCheck that Isolation Forest does not segfault with n_jobs=2

    Non-regression test for #23252
    iL rl   r   ©Ú	n_samplesÚ
n_featuresr   r/   é   r   )r   r   r^   N)r   r	   r"   )r»   rM   Ú_s      r)   Ú*test_iforest_with_n_jobs_does_not_segfaultrÂ   =  s7   € ô ¨¸CÈaÔP�D€A€qÙ�aÓ€AÜ °¸QÔ?×CÑCÀAÕFr:   c                  ót  — t        j                  d«      } t        j                  j	                  d«      }| j                  |j                  d«      dg¬«      }t        dd¬«      }t        j                  «       5  t        j                  dt        «       |j                  |«       d	d	d	«       y	# 1 sw Y   y	xY w)
z¾Check that feature names are preserved when contamination is not "auto".

    Feature names are required for consistency checks during scoring.

    Non-regression test for Issue #25844
    Úpandasr   r{   Úa)r1   Úcolumnsgš™™™™™©?r~   rA   N)rD   Úimportorskipr    rµ   r¶   Ú	DataFramerm   r	   rG   rH   rI   rF   r"   )Úpdr2   rM   Úmodels       r)   Ú#test_iforest_preserve_feature_namesrË   H  sŒ   € ô 
×	Ñ	˜XÓ	&€BÜ
�)‰)×
Ñ
 Ó
"€Cà
�‰˜#Ÿ)™) A›,°°ˆÓ6€AÜ¨¸$Ô?€Eä	×	 Ñ	 Ó	"ñ Ü×Ñ˜g¤{Ô3Ø�	‰	�!Œ÷÷ ñ ús   Á9,B.Â.B7c                 ó,  — t        ddd¬«      \  }} | |«      }|j                  «        d}t        d|d¬«      j                  |«      }|j	                  |«      }|dk  j                  «       |j                  d   z  t        j                  |«      k(  sJ ‚y)	zÀCheck that `IsolationForest` accepts sparse matrix input and float value for
    contamination.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27626
    r-   r{   r   r½   r›   r�   )r   rv   r   N)	r   Úsort_indicesr	   r"   rq   ÚsumrV   rD   Úapprox)r+   rM   rÁ   rv   r¹   Ú
X_decisions         r)   Ú-test_iforest_sparse_input_float_contaminationrÑ   Z  s�   € ô ¨¸ÈÔJ�D€A€qÙ˜Ó€AØ‡N�NÔØ€MÜØ mÀ!ôç	�cˆ!ƒfð ð ×*Ñ*¨1Ó-€JØ˜‰N×ÑÓ! A§G¡G¨A¡JÑ.´&·-±-ÀÓ2NÒNÐNÑNr:   r^   r   r   c           	      ó  — ddgddgddgddgddgddgddgddgg}t        | |d	¬
«      }|j                  |«       |j                  |«       }|j                  |«      }t	        j
                  |dd	 «      t	        j                  |d	d «      kD  sJ ‚t        |ddgz  ddgz  z   «       t        | |d¬
«      }|j                  |«       t        d|¬«      5  |j                  |«      }d	d	d	«       t        |«       y	# 1 sw Y   ŒxY w)z5Check that `IsolationForest.predict` is parallelized.ry   rg   r   r   rz   r{   r|   r}   N)r   rv   r^   r   Ú	threadingr_   )	r	   r"   rq   r#   r    r€   r�   r   r   )	r$   rv   r^   rM   rW   r‚   rƒ   Úclf_parallelÚpred_paralells	            r)   Útest_iforest_predict_parallelrÖ   n  s!  € ð
 ˆbˆ�B˜�8˜b "˜X¨¨1 v°°1¨v¸¸1°vÀÀ1¸vÈÈAÀwÐO€Aô Ø'°}ÈTô€Cð ‡G�GˆA„JØ×*Ñ*¨1Ó-Ð-€MØ�;‰;�q‹>€Dô �6‰6�-  Ð$Ó%¬¯©¨}¸S¸bÐ/AÓ(BÒBÐBÐBÜ�t˜Q ! ™W q¨B¨4¡xÑ/Ô0ä"Ø'°}ÈRô€Lð ×Ñ�QÔÜ	˜+¨fÔ	5ñ 0Ø$×,Ñ,¨QÓ/ˆ÷0ô �t˜]Õ+÷	0ð 0ús   ÃC:Ã:Dr   )9Ú__doc__rG   Úunittest.mockr   r   Únumpyr    rD   Újoblibr   Úsklearn.datasetsr   r   r   Úsklearn.ensembler	   Úsklearn.ensemble._iforestr
   Úsklearn.metricsr   Úsklearn.model_selectionr   r   Úsklearn.utilsr   Úsklearn.utils._testingr   r   r   r   Úsklearn.utils.fixesr   r   rC   r0   r*   ÚmarkÚparametrizer9   rO   rY   r\   re   ru   r„   rˆ   r�   r™   r    r¦   r¯   r²   rº   rÂ   rË   rÑ   rÖ   r   r:   r)   ú<module>rå      s  ðñó ß %ã Û Ý #ç JÑ JÝ ,Ý :Ý )ß CÝ ,÷ó ÷ ?ñ ƒ{€Ù‹?€òð  ‡�×ÑÐ+¨^¸nÑ-LÓMñ:ó Nð:ò23ò,Bò0ò&ò(0ð0 ‡�×Ñ˜¨4°¨.Ó9ñ1ó :ð1ò0òòBò(ò"(ñ. Ø0ÙÑ+˜¨Ð*Ñ+ôð ‡�×ÑÐ9¸IÀ{Ð;SÓTñ:ó Uó	ð
:ñ Ø0ÙÑ,˜¨Ð+Ñ,ôð ‡�×ÑÐ9¸IÀ{Ð;SÓTñ:ó Uó	ð
:ò9ðD ‡�×Ñ˜¨.Ó9ñGó :ðGòð$ ‡�×ÑÐ+¨^¸nÑ-LÓMñOó NðOð& ‡�×Ñ˜ A q 6Ó*Ø‡�×Ñ˜¨4°¨.Ó9ñ,ó :ó +ñ,r:   