§
    2@Äj’!  ã                   ó¬  — d Z ddlZddlZddl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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 ddlmZ ddlZej        Ze                     d	¦  «        pe                     d
¦  «        pdev Z ej        ed¦  «        Z ej        ed¦  «        Z  ej!        ¦   «         Z"e"dv Z# ej        e#d¦  «        Z$ej%         &                    dd¦  «        dk    Z' ej        e'd¦  «        Z( ed¦  «        Z) e
d¬¦  «        Z* edd¬¦  «        Z+d„ Z,d„ Z-d„ Z.e$e G d„ de¦  «        ¦   «         ¦   «         Z/e$ee G d„ de¦  «        ¦   «         ¦   «         ¦   «         Z0e0 1                    ¦   «          e$ee G d„ de¦  «        ¦   «         ¦   «         ¦   «         Z2e  G d „ d!e¦  «        ¦   «         Z3e4d"k    r ej5        ¦   «          dS dS )#z
Tests gdb bindings
é    N)Úpermutations)ÚnjitÚgdbÚgdb_initÚgdb_breakpointÚprange)Úerrors)Újit)ÚTestCaseÚcaptured_stdoutÚtagÚskip_parfors_unsupported)Ú	needs_gdbÚlinuxÚdarwinÚbsdzunix-like OS is requiredznon unix-like OS is required>   Úarmv7lÚaarch64ztesting disabled on ARMÚGDB_TESTÚ1zneeds gdb harnessÚlong_runningT)Údebug)Úforceobjr   c                 óp   — t          dddddd¦  «         | dz   }| dz  }| ||f}t          | |||¦  «         d S ©Nú-exúset confirm offÚcÚqé   ç¸…ëQ¸@)r   Úprint©ÚaÚbr   Úds       úNC:\Projects\Historical\venv\Lib\site-packages\numba/tests/test_gdb_bindings.pyÚimpl_gdb_callr(   ,   sR   € ÝˆÐ  %¨¨e°SÑ9Ô9Ð9Ø	ˆA‰€AØ	ˆD‰€AØ	
ˆAˆqˆ	€AÝ	ˆ!ˆQ��1ÑÔÐÐÐó    c                 óŒ   — t          dddddd¦  «         | dz   }| dz  }| ||f}t          ¦   «          t          | |||¦  «         d S r   )r   r   r"   r#   s       r'   Úimpl_gdb_call_w_bpr+   4   s^   € ÝˆUÐ% u¨c°5¸#Ñ>Ô>Ð>Ø	ˆA‰€AØ	ˆD‰€AØ	
ˆAˆqˆ	€AÝÑÔÐÝ	ˆ!ˆQ��1ÑÔÐÐÐr)   c                 óº   — t          dddddd¦  «         | dz  } t          d¦  «        D ]1}| dz   }| dz  }| ||f}t          ¦   «          t          | |||¦  «         Œ2d S )	Nr   r   r   r   é   é   r    r!   )r   r   r   r"   )r$   Úir%   r   r&   s        r'   Ú(impl_gdb_split_init_and_break_w_parallelr0   =   sƒ   € ÝˆUÐ% u¨c°5¸#Ñ>Ô>Ð>Øˆ�F€AÝ�A‰YŒYð ð ˆØ�‰EˆØ�‰HˆØ��1ˆIˆÝÑÔÐÝˆa��A�qÑÔÐÐðð r)   c                   ó  — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
eed„ ¦   «         ¦   «         Zeed	„ ¦   «         ¦   «         Zeed
„ ¦   «         ¦   «         ZdS )ÚTestGdbBindImplsa  
    Contains unit test implementations for gdb binding testing. Test must be
    decorated with `@needs_gdb_harness` to prevent their running under normal
    test conditions, the test methods must also end with `_impl` to be
    considered for execution. The tests themselves are invoked by the
    `TestGdbBinding` test class through the parsing of this class for test
    methods and then running the discovered tests in a separate process. Test
    names not including the word `quick` will be tagged as @tag('long_running')
    c                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ©Né
   )r   r(   ©Úselfs    r'   Ú$test_gdb_cmd_lang_cpython_quick_implz5TestGdbBindImpls.test_gdb_cmd_lang_cpython_quick_implU   s€   € åÑÔð 	ð 	Ý˜"ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ó   �,¬0³0c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   Ú	_dbg_njitr(   r6   s    r'   Ú%test_gdb_cmd_lang_nopython_quick_implz6TestGdbBindImpls.test_gdb_cmd_lang_nopython_quick_implZ   sŠ   € åÑÔð 	)ð 	)Ø$�I•mÑ$Ô$ RÑ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	)ð 	)ó   �:º>Á>c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   Ú_dbg_jitr(   r6   s    r'   Ú$test_gdb_cmd_lang_objmode_quick_implz5TestGdbBindImpls.test_gdb_cmd_lang_objmode_quick_impl_   sŠ   € åÑÔð 	(ð 	(Ø#�H•]Ñ#Ô# BÑ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(r=   c                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_cpython_implz;TestGdbBindImpls.test_gdb_split_init_and_break_cpython_impld   s€   € åÑÔð 	#ð 	#Ý˜rÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r9   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r;   r+   r6   s    r'   Ú+test_gdb_split_init_and_break_nopython_implz<TestGdbBindImpls.test_gdb_split_init_and_break_nopython_impli   s‹   € åÑÔð 	.ð 	.Ø)�IÕ(Ñ)Ô)¨"Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.r=   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r?   r+   r6   s    r'   Ú*test_gdb_split_init_and_break_objmode_implz;TestGdbBindImpls.test_gdb_split_init_and_break_objmode_impln   s‹   € åÑÔð 	-ð 	-Ø(�HÕ'Ñ(Ô(¨Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-r=   c                 ór   — t          ¦   «         5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r0   r6   s    r'   Ú5test_gdb_split_init_and_break_w_parallel_cpython_implzFTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_cpython_impls   s‚   € õ ÑÔð 	9ð 	9Ý4°RÑ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9r9   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r;   r0   r6   s    r'   Ú6test_gdb_split_init_and_break_w_parallel_nopython_implzGTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_nopython_imply   s¡   € õ ÑÔð 	Dð 	DØ?�IÕ>Ñ?Ô?ÀÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Dr=   c                 óŽ   — t          ¦   «         5   t          t          ¦  «        d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r4   )r   r?   r0   r6   s    r'   Ú5test_gdb_split_init_and_break_w_parallel_objmode_implzFTestGdbBindImpls.test_gdb_split_init_and_break_w_parallel_objmode_impl   s¡   € õ ÑÔð 	Cð 	CØ>�HÕ=Ñ>Ô>¸rÑBÔBÐBð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cr=   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úneeds_gdb_harnessr8   r<   r@   rB   rD   rF   r   rH   rJ   rL   © r)   r'   r2   r2   H   sC  € € € € € ðð ð ðð ñ Ôðð ð)ð )ñ Ôð)ð ð(ð (ñ Ôð(ð ð#ð #ñ Ôð#ð ð.ð .ñ Ôð.ð ð-ð -ñ Ôð-ð Øð9ð 9ñ Ôñ Ôð9ð ØðDð Dñ Ôñ ÔðDð ØðCð Cñ Ôñ ÔðCð Cð Cr)   r2   c                   óT   — e Zd ZdZdZdZd	d„Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )
ÚTestGdbBindingz¿
    This test class is used to generate tests which will run the test cases
    defined in TestGdbBindImpls in isolated subprocesses, this is for safety
    in case something goes awry.
    FTc           	      ó&  ‡	— t          j        |t           j        t           j        |d¬¦  «        Š	ˆ	fd„}t          j        d|¦  «        }	 |                     ¦   «          ‰	                     ¦   «         \  }}‰	j        }|dk    r<t          d|›d| 	                    ¦   «         ›d| 	                    ¦   «         ›�¦  «        ‚| 	                    ¦   «         | 	                    ¦   «         f| 
                    ¦   «          S # | 
                    ¦   «          w xY w)	NT)ÚstdoutÚstderrÚenvÚshellc                  ó”   •— ‰ j                              ¦   «          ‰ j                             ¦   «          ‰                      ¦   «          d S ©N)rV   ÚflushrW   Úkill)Úpopens   €r'   r]   z$TestGdbBinding.run_cmd.<locals>.kill�   s<   ø€ ØŒL×ÒÑ Ô Ð ØŒL×ÒÑ Ô Ð Ø�JŠJ‰LŒLˆLˆLˆLr)   g      4@r   zprocess failed with code z: stderr follows
z	
stdout :)Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚstartÚcommunicateÚ
returncodeÚAssertionErrorÚdecodeÚcancel)
r7   ÚcmdlinerX   Ú
kill_is_okr]   ÚtimeoutÚoutÚerrÚretcoder^   s
            @r'   Úrun_cmdzTestGdbBinding.run_cmd•   s  ø€ ÝÔ  Ý(2¬Ý(2¬Ø%(Ø'+ð	-ñ -ô -ˆð	ð 	ð 	ð 	ð 	õ ”/ # tÑ,Ô,ˆð	Ø�MŠM‰OŒOˆOØ×(Ò(Ñ*Ô*‰HˆC�ØÔ&ˆGØ˜!Š|ˆ|Ý$�nð %, G G¨S¯ZªZ©\¬\¨\¨\¸3¿:º:¹<¼<¸<ðIñJô Jð Jð —:’:‘<”< §¢¡¤Ð-à�NŠNÑÔÐÐøˆG�NŠNÑÔÐÐøøøs   Á
BC: Ã:Dc                 ó¶   — t           j                             ¦   «         }d|d<   d|d<   t          j        dd|g} | j        d                     |¦  «        |fi |¤ŽS )Nr   Ú	NUMBA_OPTr   z-mznumba.runtestsú )ÚosÚenvironÚcopyÚsysÚ
executablerp   Újoin)r7   ÚtestÚkwargsÚenv_copyrj   s        r'   Úrun_test_in_separate_processz+TestGdbBinding.run_test_in_separate_process°   sb   € Ý”:—?’?Ñ$Ô$ˆØ #ˆ�Ñð  #ˆ�ÑÝ”> 4Ð)9¸4Ð@ˆØˆtŒ|˜CŸHšH WÑ-Ô-¨xÐBÐB¸6ÐBÐBÐBr)   c                 ó  ‡— t           j        }t           j        }|                     d¦  «        sJ ‚|                     dd¦  «        }|›d|›d|›�Šˆfd„}d|v rt          | ||¦  «         d S t          | |t          |¦  «        ¦  «         d S )NÚ_implÚ ú.c                 óˆ  •— |                       ‰¦  «        \  }}d|› d|› d�}t          j        d|¦  «        }|�(|                      |                     d¦  «        ¦  «         |                      d||¬¦  «         |                      d||¬¦  «         |                      d	||¬¦  «         |                      d
||¬¦  «         d S )Nz
STDOUT=z
STDERR=ú
z\.\.\. skipped '(.*?)'r    zGNU gdb)ÚmsgÚOKÚFAILÚERROR)r}   ÚreÚsearchÚskipTestÚgroupÚassertInÚassertNotIn)r7   ÚoÚeÚdbgmsgÚmÚinjected_methods        €r'   Útest_templatez-TestGdbBinding._inject.<locals>.test_templateÂ   sÓ   ø€ Ø×4Ò4°_ÑEÔE‰DˆAˆqØ2 Ð2Ð2¨QÐ2Ð2Ð2ˆFõ ”	Ð3°QÑ7Ô7ˆAØˆ}Ø—’˜aŸgšg a™jœjÑ)Ô)Ð)Ø�MŠM˜) Q¨FˆMÑ3Ô3Ð3Ø�MŠM˜$  vˆMÑ.Ô.Ð.Ø×Ò˜V Q¨FÐÑ3Ô3Ð3Ø×Ò˜W a¨VÐÑ4Ô4Ð4Ð4Ð4r)   Úquick)r2   rN   rM   ÚendswithÚreplaceÚsetattrr   )ÚclsÚnameÚthemodÚtheclsÚmethnamer“   r’   s         @r'   Ú_injectzTestGdbBinding._inject¹   s°   ø€ å!Ô,ˆÝ!Ô*ˆà�}Š}˜WÑ%Ô%Ð%Ð%Ð%Ø—<’< ¨Ñ,Ô,ˆØ(.¨¨°°°¸¸Ð=ˆð	5ð 	5ð 	5ð 	5ð 	5ð �dˆ?ˆ?Ý�C˜ =Ñ1Ô1Ð1Ð1Ð1å�C˜¥<°Ñ#>Ô#>Ñ?Ô?Ð?Ð?Ð?r)   c                 óˆ   — t          t          ¦  «        D ],}|                     d¦  «        r|                      |¦  «         Œ-d S )NÚtest_gdb)Údirr2   Ú
startswithr�   )r˜   r™   s     r'   ÚgeneratezTestGdbBinding.generateÓ   sK   € åÕ(Ñ)Ô)ð 	"ð 	"ˆDØ�Š˜zÑ*Ô*ð "Ø—’˜DÑ!Ô!Ð!øð	"ð 	"r)   N)F)rM   rN   rO   rP   Ú_numba_parallel_test_Ú_DEBUGrp   r}   Úclassmethodr�   r¢   rR   r)   r'   rT   rT   †   sŠ   € € € € € ðð ð "Ðà€Fðð ð ð ð6Cð Cð Cð ð@ð @ñ „[ð@ð2 ð"ð "ñ „[ð"ð "ð "r)   rT   c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚTestGdbMiscc                 óÆ   ‡ ‡— d„ }dŠˆˆ fd„}t          t          t          g¦  «        D ]\  }} |||¦  «        } ||¦  «         Œt          d„ ¦   «         } ||¦  «         d S )Nc                 ó0   ‡ ‡— t           ˆ ˆfd„¦   «         }|S )Nc                  ó>   •— d}  ‰¦   «          d} ‰¦   «          | |z   S ©Nr    é   rR   )r$   r%   Úf1Úf2s     €€r'   Úimplz:TestGdbMisc.test_call_gdb_twice.<locals>.gen.<locals>.implå   s,   ø€ à�Ø�‘”�Ø�Ø�‘”�Ø˜1‘u�r)   )r   )r­   r®   r¯   s   `` r'   Úgenz,TestGdbMisc.test_call_gdb_twice.<locals>.genä   s3   øø€ Ýðð ð ð ð ñ ŒTðð ˆKr)   z8Calling either numba.gdb() or numba.gdb_init() more thanc                 óÚ   •— ‰                      t          j        ¦  «        5 } | ¦   «          d d d ¦  «         n# 1 swxY w Y   ‰                     ‰t	          |j        ¦  «        ¦  «         d S r[   )ÚassertRaisesr	   ÚUnsupportedErrorrŒ   ÚstrÚ	exception)ÚfuncÚraisesÚmsg_headr7   s     €€r'   Úcheckz.TestGdbMisc.test_call_gdb_twice.<locals>.checkð   sœ   ø€ Ø×"Ò"¥6Ô#:Ñ;Ô;ð ¸vØ�‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�MŠM˜(¥C¨Ô(8Ñ$9Ô$9Ñ:Ô:Ð:Ð:Ð:s   ¡8¸<¿<c                  óL   — d} t          ¦   «          d}t          ¦   «          | |z   S r«   )r   r   )r$   r%   s     r'   Úuse_globalsz4TestGdbMisc.test_call_gdb_twice.<locals>.use_globalsù   s'   € àˆAÝ‰EŒEˆEØˆAÝ‰JŒJˆJØ�q‘5ˆLr)   )r   r   r   r   )r7   r°   r¹   Úg1Úg2r¶   r»   r¸   s   `      @r'   Útest_call_gdb_twicezTestGdbMisc.test_call_gdb_twiceâ   s©   øø€ ð	ð 	ð 	ð Nˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;õ
 #¥C­ ?Ñ3Ô3ð 	ð 	‰FˆB�Ø�3�r˜2‘;”;ˆDØˆE�$‰KŒKˆKˆKå	ð	ð 	ñ 
Œð	ð 	ˆˆkÑÔÐÐÐr)   N)rM   rN   rO   r   r¾   rR   r)   r'   r§   r§   Ý   s/   € € € € € ð
 ðð ñ „\ðð ð r)   r§   c                   ó   — e Zd Zd„ ZdS )ÚTestGdbExceptionsc                 óX  ‡— d„ }|t          d¬¦  «        t          fD ]Œ}t          t          fD ]{Šˆfd„}|                      t
          j        ¦  «        5 }  ||¦  «        ¦   «          d d d ¦  «         n# 1 swxY w Y   d}|                      |t          |j	        ¦  «        ¦  «         Œ|Œ�d S )Nc                 ó   — | S r[   rR   )Úxs    r'   Únop_compilerz5TestGdbExceptions.test_call_gdb.<locals>.nop_compiler  s   € ØˆHr)   T)r   c                  ó   •—  ‰ ¦   «          d S r[   rR   )Úmeths   €r'   Úpython_funcz4TestGdbExceptions.test_call_gdb.<locals>.python_func  s   ø€ Ø�D‘F”F�F�F�Fr)   z2gdb support is only available on unix-like systems)
r
   r   r   r   r²   r	   ÚTypingErrorrŒ   r´   rµ   )r7   rÄ   ÚcompilerrÇ   r·   r„   rÆ   s         @r'   Útest_call_gdbzTestGdbExceptions.test_call_gdb  s  ø€ ð	ð 	ð 	à%¥s°DÐ'9Ñ'9Ô'9½4Ð@ð 	:ð 	:ˆHÝ�h˜ð :ð :�ðð ð ð ð à×&Ò&¥vÔ'9Ñ:Ô:ð ,¸fØ)�H�H˜[Ñ)Ô)Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,àJ�Ø—’˜c¥3 vÔ'7Ñ#8Ô#8Ñ9Ô9Ð9Ð9ð:ð	:ð 	:s   ÁA3Á3A7Á:A7N)rM   rN   rO   rÊ   rR   r)   r'   rÀ   rÀ     s#   € € € € € ð
:ð 
:ð 
:ð 
:ð 
:r)   rÀ   Ú__main__)6rP   rt   Úplatformrˆ   r_   rw   rb   Ú	itertoolsr   Únumbar   r   r   r   r   Ú
numba.corer	   r
   Únumba.tests.supportr   r   r   r   Únumba.tests.gdb_supportr   ÚunittestÚ	_platformr¡   Ú
_unix_likeÚ
skipUnlessÚ	unix_onlyÚskipIfÚnot_unixÚmachineÚ
_arch_nameÚ_is_armÚnot_armru   ÚgetÚ	_gdb_condrQ   r   r;   r?   r(   r+   r0   r2   rT   r¢   r§   rÀ   rM   ÚmainrR   r)   r'   ú<module>rà      s‰  ððð ð 
€	€	€	Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;à -Ð -Ð -Ð -Ð -Ð -Ø €€€ð ŒL€	à×"Ò" 7Ñ+Ô+ð &Ø×%Ò% hÑ/Ô/ð&à˜9Ð$ð ð  ˆHÔ 
Ð,FÑGÔG€	Øˆ8Œ?˜:Ð'EÑFÔF€àˆXÔÑÔ€
Ø
Ð-Ð
-€Ø
ˆ(Œ/˜'Ð#<Ñ
=Ô
=€àŒJ�NŠN˜: tÑ,Ô,°Ò3€	Ø'�HÔ'¨	Ð3FÑGÔGÐ àˆs�>Ñ"Ô"€àˆD�tÐÑÔ€	Øˆ3˜ DÐ)Ñ)Ô)€ðð ð ðð ð ðð ð ð 	Ø
ð9Cð 9Cð 9Cð 9Cð 9C�xñ 9Cô 9Cñ „ñ 	„ð9Cðx 	Ø
Ø
ðN"ð N"ð N"ð N"ð N"�Xñ N"ô N"ñ „ñ „ñ 	„ðN"ðb × Ò Ñ Ô Ð ð 	Ø
Ø
ð!ð !ð !ð !ð !�(ñ !ô !ñ „ñ „ñ 	„ð!ðH 
ð:ð :ð :ð :ð :˜ñ :ô :ñ 
„ð:ð ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr)   