§
    �Ÿj7  ã                   ó6  — d Z ddlZddlm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 ddlmZmZ ddl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 ddlmZ ej         dk    rej!        nej"        Z#e#d„ ¦   «         Z$d„ Z%de%_&        d„ Z'd„ Z(d*d„Z)d+d„Z*	 	 d,d„Z+ G d„ dej,        ¦  «        Z-dZ.d„ Z/eZ0 e1 ej2        d¦  «        ¦  «        Z3dZ4 G d „ d!e5¦  «        Z6d"Z7 G d#„ d$e6¦  «        Z8e	d%„ ¦   «         Z9e	d&„ ¦   «         Z:d'„ Z;d-d(„Z<d-d)„Z=dS ).zWGeneric testing tools.

Authors
-------
- Fernando Perez <Fernando.Perez@berkeley.edu>
é    N)ÚPath)Úcontextmanager)ÚStringIO)ÚPopenÚPIPE)Úpatch)ÚConfig)Úget_output_error_code)Úlist_strings)Útemp_pyfileÚTee)Ú	py3compaté   )Ú
decorators)ÚskipdoctestÚwin32c                 óˆ   ‡— t          |¦  «        }t          j                             | ¦  «        d         Šˆfd„|D ¦   «         S )aP  Make full paths for all the listed files, based on startPath.

    Only the base part of startPath is kept, since this routine is typically
    used with a script's ``__file__`` variable as startPath. The base of startPath
    is then prepended to all the listed files, forming the output list.

    Parameters
    ----------
    startPath : string
      Initial path to use as the base for the results.  This path is split
      using os.path.split() and only its first component is kept.

    files : string or list
      One or more files.

    Examples
    --------

    >>> full_path('/foo/bar.py',['a.txt','b.txt'])
    ['/foo/a.txt', '/foo/b.txt']

    >>> full_path('/foo',['a.txt','b.txt'])
    ['/a.txt', '/b.txt']

    If a single file is given, the output is still a list::

        >>> full_path('/foo','a.txt')
        ['/a.txt']
    r   c                 óP   •— g | ]"}t           j                             ‰|¦  «        ‘Œ#S © )ÚosÚpathÚjoin)Ú.0ÚfÚbases     €úb/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/IPython/testing/tools.pyú
<listcomp>zfull_path.<locals>.<listcomp>H   s)   ø€ Ð2Ð2Ð2 a�RŒW�\Š\˜$˜qÑ!Ô!Ð2Ð2Ð2ó    )r   r   r   Úsplit)Ú	startPathÚfilesr   s     @r   Ú	full_pathr"   &   sE   ø€ õ@ ˜ÑÔ€EÝŒ7�=Š=˜Ñ#Ô# AÔ&€DØ2Ð2Ð2Ð2¨5Ð2Ñ2Ô2Ð2r   c                 ó  — t          j        d| t           j        ¦  «        }|r(t          |                     d¦  «        ¦  «        }d}||fS t          j        d| t           j        ¦  «        }|r(d}t          |                     d¦  «        ¦  «        }||fS t          j        d| t           j        ¦  «        }|rHt          |                     d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }||fS dS )a  Parse the output of a test run and return errors, failures.

    Parameters
    ----------
    txt : str
      Text output of a test run, assumed to contain a line of one of the
      following forms::

        'FAILED (errors=1)'
        'FAILED (failures=1)'
        'FAILED (errors=1, failures=1)'

    Returns
    -------
    nerr, nfail
      number of errors and failures.
    z^FAILED \(errors=(\d+)\)r   r   z^FAILED \(failures=(\d+)\)z(^FAILED \(errors=(\d+), failures=(\d+)\)é   )r   r   )ÚreÚsearchÚ	MULTILINEÚintÚgroup)ÚtxtÚerr_mÚnerrÚnfailÚfail_mÚboth_ms         r   Úparse_test_outputr0   K   sî   € õ& ŒIÐ1°3½¼ÑEÔE€EØð Ý�5—;’;˜q‘>”>Ñ"Ô"ˆØˆØ�e�ÐåŒYÐ4°c½2¼<ÑHÔH€FØð ØˆÝ�F—L’L ‘O”OÑ$Ô$ˆØ�e�ÐåŒYÐBÀCÝ”|ñ%ô %€Fàð Ý�6—<’< ‘?”?Ñ#Ô#ˆÝ�F—L’L ‘O”OÑ$Ô$ˆØ�e�Ðð ˆ4r   Fc                  ó
   — g d¢S )zEReturn a valid default argv for creating testing instances of ipython)z--quickz--colors=NoColorz--no-term-titlez--no-bannerz--autocall=0r   r   r   r   Údefault_argvr2   y   s   € ðð ð ð r   c                  ó  — t          ¦   «         } d| j        _        d| j        _        d| j        _        t          j        dd¬¦  «        }t          |j	        ¦  «        | j
        _        |                     ¦   «          d| j
        _        | S )z6Return a config object with good defaults for testing.ÚNoColor©Fr   ztest_hist.sqliteF)ÚsuffixÚdeletei'  )r	   ÚTerminalInteractiveShellÚcolorsÚ TerminalTerminalInteractiveShellÚ
term_titleÚautocallÚtempfileÚNamedTemporaryFiler   ÚnameÚHistoryManagerÚ	hist_fileÚcloseÚdb_cache_size)Úconfigr   s     r   Údefault_configrE   ‚   sr   € å‰XŒX€FØ-6€FÔ#Ô*Ø9?€FÔ+Ô6Ø/0€FÔ#Ô,ÝÔ#Ð+>ÀuÐMÑMÔM€AÝ&*¨1¬6¡l¤l€FÔÔ#Ø‡G‚G�I„I€IØ*/€FÔÔ'Ø€Mr   c                 óR   — t           j        ddg}| rd                     |¦  «        }|S )aW  
    Return appropriate IPython command line name. By default, this will return
    a list that can be used with subprocess.Popen, for example, but passing
    `as_string=True` allows for returning the IPython command as a string.

    Parameters
    ----------
    as_string: bool
        Flag to allow to return the command as a string.
    z-mÚIPythonú )ÚsysÚ
executabler   )Ú	as_stringÚipython_cmds     r   Úget_ipython_cmdrM   �   s1   € õ ”> 4¨Ð3€Kàð ,Ø—h’h˜{Ñ+Ô+ˆàÐr   r   c                 ó&  — d}|€g }t          ¦   «         |z   }t          j                             t          ¦  «        }t          ¦   «         }t          j                             || ¦  «        }||z   d|gz   }t          j                             ¦   «         }	d|	d<   |	 	                    dd¦  «         |	 
                    ¦   «         D ]*\  }
}t          |t          ¦  «        st          |
|¦  «         Œ+t          |t          t          t          |	¬¦  «        }|                     t#          j        d                     |¦  «        ¦  «        pd¬	¦  «        \  }}t#          j        |¦  «        t#          j        |¦  «        }}|rt)          j        d
d|¦  «        }||fS )a  Utility to call 'ipython filename'.

    Starts IPython with a minimal and safe configuration to make startup as fast
    as possible.

    Note that this starts IPython in a subprocess!

    Parameters
    ----------
    fname : str, Path
      Name of file to be executed (should have .py or .ipy extension).

    options : optional, list
      Extra command-line flags to be passed to IPython.

    commands : optional, list
      Commands to send in on stdin

    Returns
    -------
    ``(stdout, stderr)`` of ipython subprocess.
    TNz--ÚignoreÚPYTHONWARNINGSÚPYCHARM_HOSTED)ÚstdoutÚstderrÚstdinÚenvú
)Úinputz\x1b\[[^h]+hÚ )r2   r   r   ÚdirnameÚ__file__rM   r   ÚenvironÚcopyÚpopÚitemsÚ
isinstanceÚstrÚprintr   r   Úcommunicater   ÚencodeÚdecoder%   Úsub)ÚfnameÚoptionsÚcommandsÚ__tracebackhide__ÚcmdargsÚtest_dirrL   Ú
full_fnameÚfull_cmdrU   ÚkÚvÚpÚoutÚerrs                  r   Úipexecrs   ¡   sk  € ð. Ðà€Øˆå‰nŒn˜wÑ&€GåŒw�Š�xÑ(Ô(€Hå!Ñ#Ô#€Kå”—’˜h¨Ñ.Ô.€JØ˜WÑ$¨¨jÐ'9Ñ9€HÝ
Œ*�/Š/Ñ
Ô
€Cð %€CÐÑð ‡G‚GÐ˜dÑ#Ô#Ð#Ø—	’	‘”ð ð ‰ˆˆ1õ ˜!�SÑ!Ô!ð 	Ý�!�Q‰KŒKˆKøÝˆh�t­D½À#ÐFÑFÔF€AØ�}Š}¥9Ô#3°D·I²I¸hÑ4GÔ4GÑ#HÔ#HÐ#PÈDˆ}ÑQÔQ�H€CˆÝÔ Ñ$Ô$¥iÔ&6°sÑ&;Ô&;ˆ€Cð ð /ÝŒf�_ b¨#Ñ.Ô.ˆØ�ˆ8€Or   rX   c                 ó>  — d}t          | ||¦  «        \  }}|rŽ|rwd                     |                     ¦   «                              ¦   «         ¦  «        d                     |                     ¦   «                              ¦   «         ¦  «        k    sJ ‚nt	          d| ›d|›�¦  «        ‚d                     |                     ¦   «                              ¦   «         ¦  «        d                     |                     ¦   «                              ¦   «         ¦  «        k    sJ ‚dS )a9  Utility to call 'ipython filename' and validate output/error.

    This function raises an AssertionError if the validation fails.

    Note that this starts IPython in a subprocess!

    Parameters
    ----------
    fname : str, Path
      Name of the file to be executed (should have .py or .ipy extension).

    expected_out : str
      Expected stdout of the process.

    expected_err : optional, str
      Expected stderr of the process.

    options : optional, list
      Extra command-line flags to be passed to IPython.

    Returns
    -------
    None
    TrV   zRunning file z produced error: N)rs   r   ÚstripÚ
splitlinesÚ
ValueError)rf   Úexpected_outÚexpected_errrg   rh   ri   rq   rr   s           r   Úipexec_validaterz   Û   s,  € ð4 Ðå�e˜W hÑ/Ô/�H€Cˆð
 ð +Øð 	+Ø—9’9˜SŸYšY™[œ[×3Ò3Ñ5Ô5Ñ6Ô6¸$¿)º)Ø×"Ò"Ñ$Ô$×/Ò/Ñ1Ô1ñ;ô ;ò ð ð ð ð õ �*Ø#˜e˜e S Sð*ñ +ô +ð +ð �9Š9�S—Y’Y‘[”[×+Ò+Ñ-Ô-Ñ.Ô.°$·)²)Ø×ÒÑÔ×'Ò'Ñ)Ô)ñ3ô 3ò ð ð ð ð ð r   c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )	ÚTempFileMixinzcUtility class to create temporary Python/IPython files.

    Meant as a mixin class for test cases.ú.pyc                 ó–   — t          ||¦  «        }t          | d¦  «        sg | _        | j                             |¦  «         || _        dS )zMake a valid python temp file.ÚtmpsN)r   Úhasattrr   Úappendrf   )ÚselfÚsrcÚextrf   s       r   ÚmktmpzTempFileMixin.mktmp  sK   € å˜C Ñ%Ô%ˆÝ�t˜VÑ$Ô$ð 	ØˆDŒIØŒ	×Ò˜ÑÔÐØˆŒ
ˆ
ˆ
r   c                 óv   — t          | d¦  «        r&| j        D ] }	 t          j        |¦  «         Œ#  Y ŒxY wd S d S )Nr   )r€   r   r   Úunlink)r‚   rf   s     r   ÚtearDownzTempFileMixin.tearDown  sc   € õ �4˜Ñ Ô ð 		Øœð ð �ðÝ”I˜eÑ$Ô$Ð$Ð$øðð �Døøøð		ð 		ðð s   ›0°4c                 ó   — | S ©Nr   ©r‚   s    r   Ú	__enter__zTempFileMixin.__enter__%  s   € Øˆr   c                 ó.   — |                       ¦   «          d S rŠ   )rˆ   )r‚   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zTempFileMixin.__exit__(  s   € Ø�Š‰Œˆˆˆr   N)r}   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r…   rˆ   rŒ   r‘   r   r   r   r|   r|   
  s_   € € € € € ð.ð .ðð ð ð ðð ð ðð ð ðð ð ð ð r   r|   z8Testing {0}

In:
  {1!r}
Expected:
  {2!r}
Got:
  {3!r}
c           	      óÆ   — d}t          | dt          | dd¦  «        ¦  «        }|D ];\  }} | |¦  «        }||k    s%J t                               ||||¦  «        ¦   «         ‚Œ<dS )a—  Utility function for the common case of checking a function with a
    sequence of input/output pairs.

    Parameters
    ----------
    func : callable
      The function to be tested. Should accept a single argument.
    pairs : iterable
      A list of (input, expected_output) tuples.

    Returns
    -------
    None. Raises an AssertionError if any output does not match the expected
    value.
    TÚ	func_namer’   z	<unknown>N)ÚgetattrÚpair_fail_msgÚformat)ÚfuncÚpairsri   r?   ÚinpÚexpectedrq   s          r   Úcheck_pairsrŸ   3  s~   € ð  Ðå�4˜¥g¨d°JÀÑ&LÔ&LÑMÔM€DØð Oð O‰ˆˆXØˆd�3‰iŒiˆØ�hŠˆˆ¥× 4Ò 4°T¸3ÀÈ#Ñ NÔ N‰ŒˆˆðOð Or   zEDid not find {0!r} in printed output (on {1}):
-------
{2!s}
-------
c                   ó&   — e Zd ZdZdd„Zd„ Zd„ ZdS )	ÚAssertPrintszØContext manager for testing that code prints certain text.

    Examples
    --------
    >>> with AssertPrints("abc", suppress=False):
    ...     print("abcd")
    ...     print("def")
    ...
    abcd
    def
    rR   Tc                 óŒ   — || _         t          | j         t          t          f¦  «        r| j         g| _         || _        || _        d S rŠ   )Úsr_   r`   Ú_re_typeÚchannelÚsuppress)r‚   r£   r¥   r¦   s       r   Ú__init__zAssertPrints.__init__a  s>   € ØˆŒÝ�d”f�s¥H˜oÑ.Ô.ð 	Ø”f�XˆDŒFØˆŒØ ˆŒˆˆr   c                 ó  — t          t          | j        ¦  «        | _        t	          ¦   «         | _        t          | j        | j        ¬¦  «        | _        t          t          | j        | j	        r| j        n| j        ¦  «         d S )N)r¥   )
r˜   rI   r¥   Úorig_streamÚ
MyStringIOÚbufferr   ÚteeÚsetattrr¦   r‹   s    r   rŒ   zAssertPrints.__enter__h  sb   € Ý"¥3¨¬Ñ5Ô5ˆÔÝ ‘l”lˆŒÝ�t”{¨D¬LÐ9Ñ9Ô9ˆŒÝ•�T”\°$´-Ð#M 4¤; ;ÀTÄXÑNÔNÐNÐNÐNr   c                 ó|  — d}	 |�	 | j                              ¦   «          dS | j                              ¦   «          t          t          | j        | j        ¦  «         | j                             ¦   «         }| j	        D ]ˆ}t          |t          ¦  «        rD|                     |¦  «        s.J t                               |j        | j        |¦  «        ¦   «         ‚Œ[||v s)J t                               || j        |¦  «        ¦   «         ‚Œ‰	 | j                              ¦   «          dS # | j                              ¦   «          w xY w©NTF)r¬   rB   Úflushr­   rI   r¥   r©   r«   Úgetvaluer£   r_   r¤   r&   Únotprinted_msgrš   Úpattern©r‚   ÚetypeÚvaluer�   ri   Úprintedr£   s          r   r‘   zAssertPrints.__exit__n  s+  € Ø Ðð	ØÐ àð ŒH�NŠNÑÔÐÐÐð ŒH�NŠNÑÔÐÝ•C˜œ tÔ'7Ñ8Ô8Ð8Ø”k×*Ò*Ñ,Ô,ˆGØ”Vð Yð Y�Ý˜a¥Ñ*Ô*ð YØŸ8š8 GÑ,Ô,ÐeÐe­n×.CÒ.CÀAÄIÈtÌ|Ð]dÑ.eÔ.eÑeÔeÐeÐeà ˜<˜<˜<­×)>Ò)>¸qÀ$Ä,ÐPWÑ)XÔ)X™<œ<˜<˜<ØàŒH�NŠNÑÔÐÐÐøˆDŒH�NŠNÑÔÐÐøøøs   „D  ¢C"D  Ä D;N)rR   T)r’   r“   r”   r•   r§   rŒ   r‘   r   r   r   r¡   r¡   U  sS   € € € € € ð
ð 
ð!ð !ð !ð !ðOð Oð Oðð ð ð ð r   r¡   z>Found {0!r} in printed output (on {1}):
-------
{2!s}
-------
c                   ó   — e Zd ZdZd„ ZdS )ÚAssertNotPrintszcContext manager for checking that certain output *isn't* produced.

    Counterpart of AssertPrintsc                 ó®  — d}	 |�5| j                              ¦   «          	 | j                              ¦   «          dS | j                              ¦   «          t          t          | j        | j        ¦  «         | j                             ¦   «         }| j	        D ]ˆ}t          |t          ¦  «        rD|                     |¦  «        r.J t                               |j        | j        |¦  «        ¦   «         ‚Œ[||vs)J t                               || j        |¦  «        ¦   «         ‚Œ‰	 | j                              ¦   «          dS # | j                              ¦   «          w xY wr¯   )r¬   rB   r°   r­   rI   r¥   r©   r«   r±   r£   r_   r¤   r&   Úprinted_msgrš   r³   r´   s          r   r‘   zAssertNotPrints.__exit__‹  sW  € Ø Ðð	ØÐ à”—’Ñ Ô Ð Øð ŒH�NŠNÑÔÐÐÐð ŒH�NŠNÑÔÐÝ•C˜œ tÔ'7Ñ8Ô8Ð8Ø”k×*Ò*Ñ,Ô,ˆGØ”Vð 2ð 2�Ý˜a¥Ñ*Ô*ð 2Ø Ÿxšx¨Ñ0Ô0ð :ð :µ×1CÒ1CØœ	 4¤<°ñ2:ô 2:ñ :ô :ð :ð :ð  GÐ+Ð+Ð+­[×-?Ò-?Ø˜4œ<¨ñ.2ô .2Ñ+Ô+Ð+Ð+ààŒH�NŠNÑÔÐÐÐøˆDŒH�NŠNÑÔÐÐøøøs   „D9 »C"D9 Ä9EN)r’   r“   r”   r•   r‘   r   r   r   r¹   r¹   ‡  s-   € € € € € ð#ð #ðð ð ð ð r   r¹   c               #   ód   K  — ddl m}  | j        }d„ | _        	 d V — || _        d S # || _        w xY w)Nr   )Úwarnc                  ó   — d S rŠ   r   )ÚaÚkws     r   ú<lambda>zmute_warn.<locals>.<lambda>¥  s   €  € r   )ÚIPython.utilsr½   )r½   Ú	save_warns     r   Ú	mute_warnrÄ   ¡  sU   è è € à"Ð"Ð"Ð"Ð"Ð"Ø”	€IØ%Ð%€D„IðØˆˆˆàˆŒ	ˆ	ˆ	ø�IˆŒ	ÐÐÐÐs   ™& ¦	/c              #   ó¶   K  — t          | dd¬¦  «                             ¦   «          	 dV — t          j        | ¦  «         dS # t          j        | ¦  «         w xY w)zGCreate an empty, named, temporary file for the duration of the context.Úwzutf-8)ÚencodingN)ÚopenrB   r   r‡   )r?   s    r   Úmake_tempfilerÉ   «  sZ   è è € õ 	ˆˆs˜WÐ%Ñ%Ô%×+Ò+Ñ-Ô-Ð-ðØˆˆˆå
Œ	�$‰Œˆˆˆø�Œ	�$‰Œˆˆøøøs   ¨A ÁAc                 óN   ‡— t          | ¦  «        Šdˆfd„	}t          d|¦  «        S )a  Temporarily replace the input() function to return the given values

    Use as a context manager:

    with fake_input(['result1', 'result2']):
        ...

    Values are returned in order. If input() is called again after the last value
    was used, EOFError is raised.
    rX   c                 óh   •— 	 t          ‰¦  «        S # t          $ r}t          d¦  «        |‚d }~ww xY w)NzNo more inputs given)ÚnextÚStopIterationÚEOFError)ÚpromptÚeÚits     €r   Ú
mock_inputzfake_input.<locals>.mock_inputÀ  sC   ø€ ð	:Ý˜‘8”8ˆOøÝð 	:ð 	:ð 	:ÝÐ1Ñ2Ô2¸Ð9øøøøð	:øøøs   ƒ ’
1œ,¬1zbuiltins.input©rX   )Úiterr   )ÚinputsrÒ   rÑ   s     @r   Ú
fake_inputrÖ   ´  sA   ø€ õ 
ˆf‰Œ€Bð:ð :ð :ð :ð :ð :õ Ð! :Ñ.Ô.Ð.r   c                 óš   — t          ¦   «         | dgz   }t          |¦  «        \  }}}|dk    s
J |¦   «         ‚d|vsJ ‚d|v sJ ‚d|v sJ ‚||fS )z)test that `ipython [subcommand] -h` worksz-hr   Ú	TracebackÚOptionsú
--help-all©rM   r
   ©Ú
subcommandÚcmdrq   rr   Úrcs        r   Úhelp_output_testrà   È  sy   € å
Ñ
Ô
˜z¨4Ð0Ñ
0€CÝ(¨Ñ-Ô-�L€CˆˆbØ�Š7ˆ7ˆ7�C‰7Œ7ˆ7Ø˜cÐ!Ð!Ð!Ð!Ø˜ÐÐÐÐØ˜3ÐÐÐÐØ�ˆ8€Or   c                 óš   — t          ¦   «         | dgz   }t          |¦  «        \  }}}|dk    s
J |¦   «         ‚d|vsJ ‚d|v sJ ‚d|v sJ ‚||fS )z1test that `ipython [subcommand] --help-all` worksrÚ   r   rØ   rÙ   ÚClassrÛ   rÜ   s        r   Úhelp_all_output_testrã   Ó  su   € å
Ñ
Ô
˜z¨<Ð8Ñ
8€CÝ(¨Ñ-Ô-�L€CˆˆbØ�Š7ˆ7ˆ7�C‰7Œ7ˆ7Ø˜cÐ!Ð!Ð!Ð!Ø˜ÐÐÐÐØ�cˆ>ˆ>ˆ>ˆ>Ø�ˆ8€Or   r5   )Nr   )rX   Nr   rÓ   )>r•   r   Úpathlibr   r%   rI   r=   ÚunittestÚ
contextlibr   Úior   Ú
subprocessr   r   Úunittest.mockr   Útraitlets.config.loaderr	   ÚIPython.utils.processr
   ÚIPython.utils.textr   ÚIPython.utils.ior   r   rÂ   r   rX   r   Údecr   ÚplatformÚskip_doctestÚ	null_decoÚdoctest_decor"   r0   Ú__test__r2   rE   rM   rs   rz   ÚTestCaser|   r™   rŸ   rª   ÚtypeÚcompiler¤   r²   Úobjectr¡   r»   r¹   rÄ   rÉ   rÖ   rà   rã   r   r   r   ú<module>rø      s  ððð ð 
€	€	€	Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€à %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
 ,/¬<¸7Ò+BÐ+Bˆ{Ô'Ð'ÈÌ€àð!3ð !3ñ „ð!3ðH'ð 'ð 'ðV #Ð Ô ðð ð ð
ð 
ð 
ðð ð ð ð$7ð 7ð 7ð 7ðt 79Ø+-ð,ð ,ð ,ð ,ð^ð ð ð ð �HÔ%ñ ô ð ðD€ðOð Oð Oð0 €
àˆ4�
�”
˜3‘”Ñ Ô €ð€ð*ð *ð *ð *ð *�6ñ *ô *ð *ðX€ðð ð ð ð �lñ ô ð ð4 ðð ñ „ðð ðð ñ „ðð/ð /ð /ð(ð ð ð ðð ð ð ð ð r   