Ë
    lQêjñI  ã                   óB  — d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	Z
d dl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 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 m!c m"c mZ d dl#m!c m"c m$Z$ d d	l%m&Z& d d
l'm(Z( dZ)dZ*dZ+dZ,dZ-dZ. ej^                   ej`                  d¬«      d¬«      Z1 ee1 ejd                  e1dd¬«      ¬«       ed e ej                   d¬«       ej                   d¬«      ¬«      d¬«      ded ejf                  d!ejh                  d"dfd#„«       «       Z5e ee1 ejd                  e1de*¬«       ejl                  «       ¬$«       ed e ej                   d%¬«       ej                   d&¬«      ¬«      ¬'«      ded ejf                  d!ejh                  d(e7d"df
d)„«       «       «       Z8e ee1 ejd                  e1e+e,d*dd*¬+«       ejl                  «       ¬$«       ed e ej                   d,¬«       ej                   d¬«      ¬«      ejr                  jt                  ejr                  jv                  ejr                  jx                  ejr                  jz                  g¬-«      ded ejf                  d!ejh                  d(e7d"df
d.„«       «       «       Z>	 	 d@ded ejf                  d!ejh                  d(e7d/e7d0e7d"dfd1„Z?	 	 dAd2e@d3e@d"ejh                  fd4„ZAe ee1 ejl                  «       ¬5«       edd¬6«      ded ejf                  d(e7d"dfd7„«       «       «       ZB ee1¬8«       edd¬6«      ded ejf                  d"dfd9„«       «       ZCejˆ                  j‹                  d:¬;«      ded"dfd<„«       ZFded"dfd=„ZGejˆ                  j‘                  ed>¬;«      ded"dfd?„«       ZIy)Bé    N)Úrandint)ÚcastÚListÚAnyÚDict)ÚgivenÚsettings)Ú	ClientAPI)Ú
EmbeddingsÚ	Metadatas)ÚDEFAULT_DATABASE)ÚDEFAULT_MCMR_DATABASEÚMULTI_REGION_ENABLEDÚNOT_CLUSTER_ONLYÚdatabase_nameÚoverride_hypothesis_profileÚcreate_isolated_databaseÚmulti_region_test)Úwait_for_version_increase)Úcreate_batchesé
   éú   é–   é,  iˆ  i˜:  T)Úwith_hnsw_paramsÚcoll)Úkeyé   é   ©Úmin_sizeÚmax_size)Ú
collectionÚ
record_setéd   )Úmax_examplesé(   )ÚnormalÚfasté   )ÚdeadlineÚparentr&   Úclientr#   r$   Úreturnc                 ó’   — | j                  «       j                  dk(  rt        j                  d«       t	        | ||dt
         ¬«       y )Nú'chromadb.api.async_fastapi.AsyncFastAPIúDTODO @jai, come back and debug why CI runners fail with async + syncT)Úalways_compact)Úget_settingsÚchroma_api_implÚpytestÚskipÚ	_test_addr   )r-   r#   r$   s      úd/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/property/test_add.pyÚtest_add_minisculer9   %   sE   € ð$ 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ô ˆf�j *¨dÔG[ÐC[Ö\ó    )r#   r$   Úshould_compacté2   é   )r+   r,   r;   c                 ó„   — | j                  «       j                  dk(  rt        j                  d«       t	        | |||«       y )Nr0   r1   ©r3   r4   r5   r6   r7   ©r-   r#   r$   r;   s       r8   Útest_add_smallrA   C   s?   € ð, 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ô ˆf�j *¨nÕ=r:   é   )r!   r"   Únum_unique_metadataÚmin_metadata_sizeÚmax_metadata_sizeé   )r+   r,   Úsuppress_health_checkc                 óˆ   — | j                  «       j                  dk(  rt        j                  d«       t	        | |||d¬«       y )Nr0   r1   T)Úbatch_ann_accuracyr?   r@   s       r8   Útest_add_mediumrJ   b   sC   € ðB 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ô ˆf�j *¨nÐQUÖVr:   rI   r2   c                 ó
  — t        | «       | j                  |j                  |j                  |j                  |j
                  ¬«      }t        t        |j                  «       d   «      }t        j                  |«      }t         xr |}	|}
d}d}t        t        t        |d   «      dz  «      }t        d|› �«       t!        | t        t"        t$           |d   «      t        t&        |d   «      t        t(        |d	   «      t        t"        t$           |d
   «      ¬«      D ]–  }t        dt        |d   «      «        |j*                  |Ž  |	sŒ-t        d«       |t        |d   «      z  }||k\  sŒOt        d|› �«       t        d|› �«       t        d|› d|› �«       t-        | |j                  |
«      }
d}d}Œ˜ t        s7|r5|s3t        |d   «      dkD  r"t        d«       t-        | |j                  |
«      }
t        j.                  |t        t0        j2                  |«      «       t        dt        |d   «      dz  «      }|r‰d}t5        dt        |d   «      |«      D ]j  }t        j6                  |t        t0        j2                  |«      ||j                  t9        t5        |t;        ||z   t        |d   «      «      «      «      ¬«       Œl y t        j6                  |t        t0        j2                  |«      ||j                  ¬«       y )N)ÚnameÚmetadataÚembedding_functionÚconfigurationÚversionr   FÚidsr   z.starting min_records_between_compaction_waits=Ú
embeddingsÚ	metadatasÚ	documents©ÚapirQ   rR   rS   rT   Úaddingzshould wait for compactionz records_since_compaction_wait = z'min_records_between_compaction_waits = zwaiting z >= Tzfinal wait for compactionr   r<   )Ú	n_resultsrN   Úquery_indices)rX   rN   )r   Úcreate_collectionrL   rM   rN   Úcollection_configr   ÚintÚ	get_modelÚ
invariantsÚwrap_allr   ÚmaxÚ$MIN_RECORDS_BETWEEN_COMPACTION_WAITSÚlenÚprintr   r   Ústrr   r   Úaddr   ÚcountÚ
strategiesÚ	RecordSetÚrangeÚann_accuracyÚlistÚmin)r-   r#   r$   r;   rI   r2   r   Úinitial_versionÚnormalized_record_setÚshould_wait_for_compactionÚcurrent_versionÚrecords_since_compaction_waitÚhas_waited_for_compactionÚ$min_records_between_compaction_waitsÚbatchrX   Ú
batch_sizeÚis                     r8   r7   r7   �   sø  € ô ˜VÔ$ð ×#Ñ#Ø�_‰_Ø×$Ñ$Ø%×8Ñ8Ø ×2Ñ2ð	 $ó €Dô œ3 §¡Ó 0°Ñ ;Ó<€Oä&×/Ñ/°
Ó;ÐÜ%5Ð!5Ò!H¸.ÐØ%€OØ$%Ð!Ø %ÐÜ+.Ü,¬cÐ2GÈÑ2NÓ.OÐSUÑ.Uó,Ð(ô 
Ð:Ð;_Ð:`Ð
aÔbô  ØÜ””c‘Ð1°%Ñ8Ó9Üœ
Ð$9¸,Ñ$GÓHÜ”yÐ"7¸Ñ"DÓEÜ”tœC‘yÐ"7¸Ñ"DÓEôò 1ˆô 	ˆhœ˜E !™H›Ô&Øˆ�‰�%ÑÚ%ÜÐ.Ô/Ø)¬S°°q±«]Ñ:Ð)Ø,Ð0TÓTÜÐ8Ð9VÐ8WÐXÔYÜÐ?Ð@dÐ?eÐfÔgÜ˜Ð!>Ð ?¸tÐDhÐCiÐjÔkÜ";Ø˜JŸO™O¨_ó#�ð 12Ð-Ø,0Ñ)ð)1õ2 ÙÙ)ÜÐ% eÑ,Ó-°Ò1äÐ)Ô*Ü3Ø�J—O‘O _ó
ˆô ×Ñ�Tœ4¤
× 4Ñ 4Ð6KÓLÔMÜ�AœÐ1°%Ñ8Ó9¸RÑ?ÓA€IáØˆ
Ü�qœ#Ð3°EÑ:Ó;¸ZÓHò 		ˆAÜ×#Ñ#ØÜ”Z×)Ñ)Ð+@ÓAØ#Ø#-×#@Ñ#@Ü"Ü˜!œS  Z¡´Ð5JÈ5Ñ5QÓ1RÓSÓTóöñ		ô 	×ÑØÜ”×%Ñ%Ð'<Ó=ØØ)×<Ñ<ö		
r:   r!   r"   c                 óš  — t        | |«      }t        |«      D �cg c]  }t        t        j                  «       «      ‘Œ! }}t        |«      D �cg c]  }d|› i‘Œ	 }}t        |«      D �cg c]  }d|› �‘Œ	 }}t        |«      D �cg c]  }g d¢‘Œ }}t        j                  |t        t        |«      ||¬«      }	|	S c c}w c c}w c c}w c c}w )NÚsome_keyz	Document ©r   r*   rF   ©rQ   rR   rS   rT   )	r   ri   rd   ÚuuidÚuuid4rg   rh   r   r   )
r!   r"   ÚsizeÚ_rQ   rv   rS   rT   rR   r$   s
             r8   Úcreate_large_recordsetr   ì   s½   € ô �8˜XÓ&€Dä&+¨D£kÖ
2 Œ3Œt�z‰z‹|ÕÐ
2€CÐ
2Ü/4°T«{Ö;¨!�*  Ò%Ð;€IÐ;Ü*/°«+Ö6 Q�9˜Q˜C’Ð6€IÐ6Ü%*¨4£[Ö1 ”)Ð1€JÐ1Ü×%Ñ%ØÜœ
 JÓ/ØØô	€Jð Ðùò 3ùÚ;ùÚ6ùÚ1s   š$B9ÁB>Á(CÂC)r#   r;   )r+   r&   c                 ó$  — t        | «       | j                  «       j                  dk(  rt        j                  d«       t        t        t        ¬«      }| j                  |j                  |j                  |j                  ¬«      }t        j                  |«      }t        t        |j!                  «       d   «      }t#        | t        t$        t&           |d   «      t        t(        |d   «      t        t*        |d   «      t        t$        t&           |d	   «      ¬
«      D ]  } |j,                  |Ž  Œ t.        s,|r*t1        |d   «      dkD  rt3        | |j                  |d¬«       t        j4                  |t        t6        j8                  |«      «       y )Nr0   r1   r    ©rL   rM   rN   rP   rQ   rR   rS   rT   rU   r   r   )Úadditional_time)r   r3   r4   r5   r6   r   ÚLARGE_MIN_RECORDSÚLARGE_MAX_RECORDSrZ   rL   rM   rN   r^   r_   r   r\   r]   r   r   rd   r   r   re   r   rb   r   rf   rg   rh   )r-   r#   r;   r$   r   rn   rm   rt   s           r8   Útest_add_larger…   ÿ   sc  € ô ˜VÔ$ð 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ô (Ü"Ü"ô€Jð ×#Ñ#Ø�_‰_Ø×$Ñ$Ø%×8Ñ8ð $ó €Dô
 '×/Ñ/°
Ó;ÐÜœ3 §¡Ó 0°Ñ ;Ó<€OäØÜ””c‘˜J uÑ-Ó.Üœ
 J¨|Ñ$<Ó=Ü”y *¨[Ñ"9Ó:Ü”tœC‘y *¨[Ñ"9Ó:ôò ˆð 	ˆ�‰�%Òðõ ÙÜÐ% eÑ,Ó-°Ò2ô 	"Ø�J—O‘O _Àcõ	
ô ×Ñ�Tœ4¤
× 4Ñ 4Ð6KÓLÕMr:   )r#   c                 óì  — t        | «       | j                  «       j                  dk(  rt        j                  d«       t        | j                  «       | j                  «       dz   ¬«      }| j                  |j                  |j                  |j                  ¬«      }t        j                  t        «      5 } |j                  di |¤Ž d d d «       dt        j                  «      v sJ ‚y # 1 sw Y   Œ#xY w)Nr0   r1   r%   r    r�   z
batch size© )r   r3   r4   r5   r6   r   Úget_max_batch_sizerZ   rL   rM   rN   ÚraisesÚ	Exceptionre   rd   Úvalue)r-   r#   r$   r   Úes        r8   Útest_add_large_exceedingr�   3  sá   € ô ˜VÔ$ð 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ô (Ø×*Ñ*Ó,Ø×*Ñ*Ó,Ø
ñô€Jð
 ×#Ñ#Ø�_‰_Ø×$Ñ$Ø%×8Ñ8ð $ó €Dô 
�‰”yÓ	!ð  QØˆ�‰Ñ�:Ò÷àœ3˜qŸw™w›<Ñ'Ð'Ñ'÷ð ús   Â5C*Ã*C3z`This is expected to fail right now. We should change the API to sort the     ids by input order.)Úreasonc                 óH  — | j                  «       j                  dk(  rt        j                  d«       g d¢}| j	                  dd„ ¬«      }|D �cg c]  }t        j                  g d¢«      ‘Œ }}|j                  ||¬«       |j                  |¬	«      d
   }||k(  sJ ‚y c c}w )Nr0   r1   )Ú40Ú05Ú8Ú6Ú10Ú01Ú00Ú3Ú04Ú20Ú02Ú9Ú30Ú11Ú13Ú2Ú0Ú7Ú06Ú5Ú50Ú12Ú03Ú4Ú1Útestc                 ó0   — | D �cg c]  }g d¢‘Œ c}S c c}w )Nry   r‡   )Úinputr~   s     r8   ú<lambda>z'test_out_of_order_ids.<locals>.<lambda>~  s   € ¸UÖ)C¸¬)Ò)C€ ùÒ)Cs   …)rN   ry   )rQ   rR   )rQ   rQ   )	r3   r4   r5   r6   rZ   ÚnpÚarrayre   Úget)r-   Úooo_idsr   r~   rR   Úget_idss         r8   Útest_out_of_order_idsr²   T  s«   € ð 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ò€Gð8 ×#Ñ#ØÙCð $ó €Dð <CÖC°aœbŸh™h¢yÕ1ÐC€JÐCØ‡H�H� Z€HÔ0Ø�h‰h˜7ˆhÓ# EÑ*€GØ�gÒÐÑùò Ds   ÁBc                 ód  — t        | «       | j                  «       j                  dk(  rt        j                  d«       | j                  d«      }|j                  g d¢g d¢g d¢g d¢gddiddd	igg d
¢¬«       |j                  «       }|d   g d¢k(  sJ ‚|d   ddiddd	igk(  sJ ‚|d   g d
¢k(  sJ ‚y)z>Tests adding a record set with some of the fields set to None.r0   r1   r©   )r¨   rŸ   r—   ry   Úar   NrF   )r´   ÚbNrz   rQ   rS   rT   )r   r3   r4   r5   r6   rZ   re   r¯   )r-   r   Úresultss      r8   Útest_add_partialr·   †  sÓ   € ô ˜VÔ$ð 	×ÑÓ×-Ñ-Ø4ò	5ô 	�‰ØRô	
ð ×#Ñ# FÓ+€Dà‡H�HÚâšyª)Ð4à˜�8˜T C¨ 8Ð,â"ð ô ð �h‰h‹j€GØ�5‰>š_Ò,Ð,Ð,Ø�;Ñ S¨! H¨d°S¸!°HÐ#=Ò=Ð=Ð=Ø�;ÑÒ#3Ò3Ð3Ñ3r:   z-GroupBy is only supported in distributed modec                 óŠ  — ddl m}m}m} ddlm} ddlm} t        | «       | j                  d¬«      }g d¢}t        t        g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g«      }ddddœddddœddddœddddœddddœddddœddddœddddœddddœddddœddddœddddœg}	|D �
cg c]  }
d|
› �‘Œ	 }}
|j                  |||	|¬«       g d¢}|j                   |«       j                   ||d¬ «      «      j                   | |d!«       ||j                   d¬"«      ¬#«      «      j#                  d«      «      }|d$   €J ‚|d$   d   }t%        |«      d&k(  sJ ‚h d'£}t'        |«      |k(  sJ ‚|j                   |«       j                   ||d¬ «      «      j                   | |d!«       |d(«      g ||j                   d¬"«      ¬#«      «      j#                  d«      «      }|d$   €J ‚|d$   d   }t%        |«      d&k(  sJ ‚h d)£}t'        |«      |k(  sJ ‚|j                   |«       j                   ||d¬ «      «      j                   | |d!«       | |d*«      |j                   gd¬"«      ¬#«      «      j#                  d«      «      }|d$   €J ‚|d$   d   }t%        |«      d&k(  sJ ‚h d+£}t'        |«      |k(  sJ ‚y%c c}
w ),zGTest GroupBy with single key, multiple keys, and multiple ranking keys.r   )ÚGroupByÚMinKÚKey)ÚSearch)ÚKnnÚtest_group_by)rL   )Ú
sci_2023_1Ú
sci_2023_2Ú
sci_2024_1Ú
sci_2024_2Útech_2023_1Útech_2023_2Útech_2024_1Útech_2024_2Úarts_2023_1Úarts_2023_2Úarts_2024_1Úarts_2024_2)ç      ð?ç        rÌ   rÌ   )çÍÌÌÌÌÌì?çš™™™™™¹?rÌ   rÌ   )çš™™™™™é?çš™™™™™É?rÌ   rÌ   )çffffffæ?ç333333Ó?rÌ   rÌ   )rÌ   rË   rÌ   rÌ   )rÌ   rÍ   rÎ   rÌ   )rÌ   rÏ   rÐ   rÌ   )rÌ   rÑ   rÒ   rÌ   )rÌ   rÌ   rË   rÌ   )rÌ   rÌ   rÍ   rÎ   )rÌ   rÌ   rÏ   rÐ   )rÌ   rÌ   rÑ   rÒ   Úscienceiç  r   )ÚcategoryÚyearÚpriorityr*   iè  rF   ÚtechÚartsÚdoc_rz   é   )ÚqueryÚlimitrÔ   )ÚkeysÚk)rÝ   Ú	aggregaterQ   Né   >   r¿   rÀ   rÉ   rÊ   rÅ   rÆ   rÕ   >   r¿   rÁ   rÈ   rÊ   rÄ   rÆ   rÖ   >   r¿   rÁ   rÈ   rÊ   rÄ   rÅ   )Ú&chromadb.execution.expression.operatorr¹   rº   r»   Ú"chromadb.execution.expression.planr¼   Úchromadb.execution.expressionr½   r   rZ   r   r   re   ÚsearchÚrankÚgroup_byÚSCORErÜ   rb   Úset)r-   r¹   rº   r»   r¼   r½   r   rQ   rR   rS   ÚidrT   rÛ   Úresults1Úresult1_idsÚ	expected1Úresults2Úresult2_idsÚ	expected2Úresults3Úresult3_idsÚ	expected3s                         r8   Útest_search_group_byró   ¥  s2  € ÷ JÑIÝ9Ý1ä˜VÔ$à×#Ñ#¨Ð#Ó9€Dò€Cô Üò !Ú Ú Ú â Ú Ú Ú â Ú Ú Ú ð	
ó€Jð* ¨¸!Ñ<Ø¨¸!Ñ<Ø¨¸!Ñ<Ø¨¸!Ñ<Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9Ø T°qÑ9ð€Ið (+Ö+ �4˜�t’Ð+€IÐ+à‡H�HØØØØð	 ô ò !€Eð �{‰{Ù‹ß	‰‰c˜ RÔ(Ó	)ß	‰‘'™s :›¹$ÀCÇIÁIÐQRÔ:SÔTÓ	Uß	‰ˆr‹ó	€Hð �E‰?Ð&Ð&Ð&Ø˜5‘/ !Ñ$€KÜˆ{Ó˜qÒ Ð Ð ò€Iô ˆ{Ó˜yÒ(Ð(Ð(ð �{‰{Ù‹ß	‰‰c˜ RÔ(Ó	)ß	‰ÙÙ˜*“o¡s¨6£{Ð3Ù C§I¡I°Ô3ôó

÷ 
‰ˆr‹ó
€Hð �E‰?Ð&Ð&Ð&Ø˜5‘/ !Ñ$€KÜˆ{Ó˜qÒ Ð Ð ò€Iô ˆ{Ó˜yÒ(Ð(Ð(ð �{‰{Ù‹ß	‰‰c˜ RÔ(Ó	)ß	‰ÙÙ˜“_Ù¡S¨£_°c·i±iÐ$@ÀAÔFôó

÷ 
‰ˆr‹ó
€Hð �E‰?Ð&Ð&Ð&Ø˜5‘/ !Ñ$€KÜˆ{Ó˜qÒ Ð Ð ò€Iô ˆ{Ó˜yÒ(Ð(Ñ(ùòk ,s   Â.K )FF)iÈ¯  iPÃ  )Jr{   Úrandomr   Útypingr   r   r   r   Ú
hypothesisÚnumpyr­   r5   Úhypothesis.strategiesrg   Ústr   r	   Úchromadb.apir
   Úchromadb.api.typesr   r   Úchromadb.configr   Úchromadb.test.conftestr   r   r   r   r   r   r   Ú!chromadb.test.property.strategiesr©   ÚpropertyÚ!chromadb.test.property.invariantsr^   Ú-chromadb.test.utils.wait_for_version_increaser   Úchromadb.utils.batch_utilsr   ra   ÚSMALL_MAX_RECORDSÚMEDIUM_MIN_RECORDSÚMEDIUM_MAX_RECORDSrƒ   r„   ÚsharedÚcollectionsÚcollection_stÚ
recordsetsÚ
Collectionrh   r9   ÚbooleansÚboolrA   ÚHealthCheckÚtoo_slowÚdata_too_largeÚlarge_base_exampleÚfunction_scoped_fixturerJ   r7   r\   r   r…   r�   ÚmarkÚxfailr²   r·   Úskipifró   r‡   r:   r8   ú<module>r     sØ  ðÛ Ý ß (Ó (Û Û Û Ý "ß &Ý "ß 4Ý ,÷÷ ñ ÷ 7Ó 6ß 6Ó 6Ý SÝ 5à')Ð $ØÐ ØÐ ØÐ ØÐ ØÐ ð �—	‘	Ð0˜*×0Ñ0À$ÔGÈVÔT€ñ ØØ$ˆz×$Ñ$ ]¸QÈÔKôñ 
ØÙ&Ø"ˆz×"Ñ"°Ô4Ø ˆZ× Ñ ¨bÔ1ôð ôð]Øð]à×%Ñ%ð]ð ×$Ñ$ð]ð 
ò	]óó	ð]ð$ ÙØØ$ˆz×$Ñ$Ø Ð,=ôð �2—;‘;“=ôñ 
ØÙ&Ø"ˆz×"Ñ"°Ô3Ø ˆZ× Ñ ¨bÔ1ôôð>Øð>à×%Ñ%ð>ð ×$Ñ$ð>ð ð	>ð
 
ò>óóó ð>ð  ÙØØ$ˆz×$Ñ$ØØ#Ø#ØØØôð �2—;‘;“=ôñ 
ØÙ&Ø"ˆz×"Ñ"°Ô2Ø ˆZ× Ñ ¨aÔ0ôð
 	×Ñ×'Ñ'Ø×Ñ×-Ñ-Ø×Ñ×1Ñ1Ø×Ñ×6Ñ6ð	ôðWØðWà×%Ñ%ðWð ×$Ñ$ðWð ð	Wð
 
òWóóó ð4Wð2  %Ø ñW
ØðW
à×%Ñ%ðW
ð ×$Ñ$ðW
ð ð	W
ð
 ðW
ð ðW
ð 
óW
ðz ØñØðàðð ×Ñóð& Ù�-°°·±³Ô>Ù	�4 aÔ(ð.NØð.Nà×%Ñ%ð.Nð ð.Nð 
ò	.Nó )ó ?ó ð.Nñb �-Ô Ù	�4 aÔ(ð(Øð(à×%Ñ%ð(ð 
ò(ó )ó !ð(ð> ‡�×Ñðð ó ð+ )ð +°ò +ó	ð+ð\4˜Yð 4¨4ó 4ð> ‡�×ÑØØ:ð ó ðQ) ð Q)¨tò Q)ó	ñQ)r:   