§
    ŒŸjè/  ã                   ó‚  — d dl 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
 d dlmZ d dlmZmZmZmZ d d	lmZmZmZ d d
lmZmZmZ d dlmZ d dlmZ d d„Z G d„ de¦  «        Z d„ Z!d„ Z"d„ Z# G d„ d¦  «        Z$ G d„ de$¦  «        Z%d„ Z& G d„ de%¦  «        Z' G d„ de%¦  «        Z( G d„ de$¦  «        Z)d!d„Z*d„ Z+dS )"é    N)Úzip_longest)ÚAny)Útree)Údebug)ÚPushBackIterator)Úanalysis)ÚLazyKnownValueÚLazyKnownValuesÚLazyTreeValueÚget_merged_lazy_value)Ú	ParamNameÚTreeNameDefinitionÚAnonymousParamName)Ú	NO_VALUESÚValueSetÚContextualizedNode)Úiterable)Ú%inference_state_as_method_param_cachec                 ó´   — |dk    rdS | D ]L}	 |j         } |¦   «         D ]'}t          |                     ¦   «         |dz   ¦  «         Œ(Œ=# t          $ r Y ŒIw xY wdS )z"Helper method for static analysis.é
   Né   )Ú
py__iter__Útry_iter_contentÚinferÚAttributeError)ÚtypesÚdepthÚtypÚfÚ
lazy_values        úe/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/jedi/inference/arguments.pyr   r      s    € àˆr‚z€zð 	ˆàð @ð @ˆð	@Ø”ˆAð  ˜a™cœcð @ð @�
Ý  ×!1Ò!1Ñ!3Ô!3°U¸Q±YÑ?Ô?Ð?Ð?ð@øõ ð 	ð 	ð 	ØˆDð	øøøð@ð @s   ŽAÁ
AÁAc                   ó   — e Zd ZdS )Ú
ParamIssueN)Ú__name__Ú
__module__Ú__qualname__© ó    r!   r#   r#   #   s   € € € € € Ø€Dr(   r#   c                 ó   ‡ — ˆ fd„}|S )aN  
    Transforms a function or method with arguments to the signature that is
    given as an argument clinic notation.

    Argument clinic is part of CPython and used for all the functions that are
    implemented in C (Python 3.7):

        str.split.__text_signature__
        # Results in: '($self, /, sep=None, maxsplit=-1)'
    c                 ó   •‡ — ˆˆ fd„}|S )Nc                 óŒ   •— 	 t          t          | j        |‰¦  «        ¦  «        } ‰| g|¢R Ž S # t          $ r
 t          cY S w xY w©N)ÚtupleÚiterate_argument_clinicÚinference_stater#   r   )ÚvalueÚ	argumentsÚargsÚclinic_stringÚfuncs      €€r!   Úwrapperz?repack_with_argument_clinic.<locals>.decorator.<locals>.wrapper3   ss   ø€ ð	*ÝÕ4ØÔ)ØØ!ñô ñ ô �ð �t˜EÐ) DÐ)Ð)Ð)Ð)øõ ð !ð !ð !Ý Ð Ð Ð ð!øøøs   ƒ#/ ¯AÁAr'   )r4   r5   r3   s   ` €r!   Ú	decoratorz.repack_with_argument_clinic.<locals>.decorator2   s)   øø€ ð
	*ð 
	*ð 
	*ð 
	*ð 
	*ð 
	*ð ˆr(   r'   )r3   r6   s   ` r!   Úrepack_with_argument_clinicr7   '   s$   ø€ ðð ð ð ð ð Ðr(   c              #   óô  K  — t          t          |¦  «        ¦  «        }t          |                     ¦   «         ¦  «        }t	          |¦  «        D �]'\  }\  }}}}	|	dk    rbg }
|D ]5\  }}|�|                     ||f¦  «          n|
                     |¦  «         Œ6t          t          j	        | |
¦  «        g¦  «        V — |
 Œs|	dk    rt          ¦   «         ‚t          |d¦  «        \  }}|�t          j        d¦  «         t          ‚|€-|s+t          j        d|t          |¦  «        |¦  «         t          ‚|€t           n|                     ¦   «         }|s|st          j        d|¦  «         t          ‚|V — �Œ)dS )z;Uses a list with argument clinic information (see PEP 436).r   Né   )NNzAKeyword arguments in argument clinic are currently not supported.z4TypeError: %s expected at least %s arguments, got %sz$argument_clinic "%s" not resolvable.)ÚlistÚ_parse_argument_clinicr   ÚunpackÚ	enumerateÚ	push_backÚappendr   r   Ú	FakeTupleÚNotImplementedErrorÚnextr   Úwarningr#   Úlenr   r   )r/   r1   r3   Úclinic_argsÚiteratorÚiÚnameÚoptionalÚallow_kwargsÚstarsÚlazy_valuesÚkeyÚargumentÚ	value_sets                 r!   r.   r.   C   s²  è è € åÕ-¨mÑ<Ô<Ñ=Ô=€Kå 	× 0Ò 0Ñ 2Ô 2Ñ3Ô3€HÝ4=¸kÑ4JÔ4Jð ñ Ñ0ˆÑ0ˆD�(˜L¨%Ø�AŠ:ˆ:ØˆKØ!)ð -ð -‘��XØ�?Ø×&Ò&¨¨X Ñ7Ô7Ð7Ø�Eà×"Ò" 8Ñ,Ô,Ð,Ð,Ý�HÔ.¨ÀÑLÔLÐMÑNÔNÐNÐNÐNØˆKØØ�aŠZˆZÝ%Ñ'Ô'Ð'Ý˜X |Ñ4Ô4‰ˆˆXØˆ?ÝŒMÐ]Ñ^Ô^Ð^ÝÐØÐ HÐÝŒMÐPØ¥ KÑ 0Ô 0°!ñ5ô 5ð 5åÐà!)Ð!1•I�I°x·~²~Ñ7GÔ7Gˆ	àð 	 ð 	õ ŒMÐ@À$ÑGÔGÐGÝÐØˆˆˆ‰ð?ð r(   c              #   ó”  K  — d}d}| r¿t          j        d| ¦  «        }| t          |                     d¦  «        ¦  «        d …         } |                     d¦  «        sd}ŒY|p!t	          |                     d¦  «        ¦  «        }|                     d¦  «        }|                     d¦  «        }||d …         }||||fV — |rd}| °½d S d S )NFz%(?:(?:(\[),? ?|, ?|)(\**\w+)|, ?/)\]*r   r9   Tr   Ú*)ÚreÚmatchrD   ÚgroupÚboolÚcount)ÚstringrJ   rI   rS   ÚwordrK   s         r!   r;   r;   j   sï   è è € Ø€LØ€HØ
ð  õ
 ”ÐAÀ6ÑJÔJˆØ�˜EŸKšK¨™NœNÑ+Ô+Ð,Ð,Ô-ˆØ�{Š{˜1‰~Œ~ð 	ØˆLØØÐ3�t E§K¢K°¡N¤NÑ3Ô3ˆØ�{Š{˜1‰~Œ~ˆØ—
’
˜3‘”ˆØ�E�F�FŒ|ˆØ�X˜|¨UÐ3Ð3Ð3Ð3Øð 	 ØˆLð! ð  ð  ð  ð  ð  r(   c                   ó   — e Zd Zdd„Zd„ ZdS )Ú_AbstractArgumentsMixinNc                 ó   — t           ‚r,   ©rA   )ÚselfÚfuncdefs     r!   r<   z_AbstractArgumentsMixin.unpack�   ó   € Ý!Ð!r(   c                 ó   — g S r,   r'   ©r]   s    r!   Úget_calling_nodesz)_AbstractArgumentsMixin.get_calling_nodes„   s   € Øˆ	r(   r,   )r$   r%   r&   r<   rb   r'   r(   r!   rZ   rZ   €   s7   € € € € € ð"ð "ð "ð "ðð ð ð ð r(   rZ   c                   ó&   — e Zd ZU dZdZeed<   dZdS )ÚAbstractArgumentsNÚargument_node)r$   r%   r&   Úcontextre   r   Ú__annotations__Útrailerr'   r(   r!   rd   rd   ˆ   s*   € € € € € € Ø€GØ€M�3ÐÐÑØ€G€G€Gr(   rd   c              #   óà  K  — | €d S | j         dk    r"| j         dk    r| j        d         dv sd| fV — d S t          | j        ¦  «        }|D ]£}|dk    rŒ	|dv r-t          |d ¦  «        }|€J ‚t	          |j        ¦  «        |fV — Œ:|j         dk    rX|j        d         dv rIt	          |j        ¦  «        dk    sJ ‚t	          |j        d         j        ¦  «        |j        d         fV — Œ�d|fV — Œ¤d S )NÚarglistrN   r   )rQ   z**ú,r9   r   )ÚtypeÚchildrenÚiterrB   rD   r0   )rj   rF   ÚchildÚcs       r!   Úunpack_arglistrq   Ž   s=  è è € Ø€Øˆà„|�yÒ Ð ØŒL˜JÒ&Ð&¨7Ô+;¸AÔ+>À+Ð+MÐ+MØ�ˆjÐÐÐØˆå�GÔ$Ñ%Ô%€HØð ð ˆØ�CŠ<ˆ<ØØ�kÐ!Ð!Ý�X˜tÑ$Ô$ˆAØ�=�=�=Ý�e”kÑ"Ô" AÐ%Ð%Ð%Ð%Ð%ØŒZ˜:Ò%Ð%Ø”˜qÔ! [Ð0Ð0Ý�u”~Ñ&Ô&¨!Ò+Ð+Ð+Ð+Ý�e”n QÔ'Ô-Ñ.Ô.°´¸qÔ0AÐAÐAÐAÐAÐAà�U�(ˆNˆNˆNˆNðð r(   c                   óx   — e Zd ZU eed<   d
d„Ze e¦   «         d„ ¦   «         ¦   «         Zd
d„Z	d„ Z
d„ Zd„ Zd	„ ZdS )ÚTreeArgumentsrf   Nc                 ó>   — || _         || _        || _        || _        dS )zS
        :param argument_node: May be an argument_node or a list of nodes.
        N)re   rf   Ú_inference_staterh   )r]   r/   rf   re   rh   s        r!   Ú__init__zTreeArguments.__init__ª   s&   € ð +ˆÔØˆŒØ /ˆÔØˆŒˆˆr(   c                 ó   —  | |i |¤ŽS r,   r'   )Úclsr2   Úkwargss      r!   Úcreate_cachedzTreeArguments.create_cached³   s   € ð ˆs�DÐ#˜FÐ#Ð#Ð#r(   c           	   #   ót  ‡ ‡‡K  — g }t          ‰ j        ¦  «        D �]’\  }Š|dk    ra‰ j                             ‰¦  «        }ˆˆˆ fd„|D ¦   «         }t	          t          |Ž ¦  «        D ]}d t          d„ |D ¦   «         ¦  «        fV — Œ Œm|dk    r=‰ j                             ‰¦  «        }|D ]}t          ‰ j        |‰‰¦  «        E d {V —† Œ Œ°‰j        dk    r¾‰j	        }t          |¦  «        dk    r=|                     |d         j        t          ‰ j        |d         ¦  «        f¦  «         �Œ‰j	        d         }	|	j        dk    r|	j	        d         }	t          j        ‰ j        ‰ j        |	‰j	        d         ¬	¦  «        }
d t#          |
¦  «        fV — �Œyd t          ‰ j        ‰¦  «        fV — �Œ”|E d {V —† d S )
Nr   c                 ó>   •— g | ]}t          ‰j        |‰‰¦  «        ‘ŒS r'   )Ú_iterate_star_argsrf   )Ú.0ÚaÚelr^   r]   s     €€€r!   ú
<listcomp>z(TreeArguments.unpack.<locals>.<listcomp>½   s9   ø€ ð .ð .ð .Ø!"õ 0°´¸aÀÀWÑMÔMð .ð .ð .r(   c                 ó   — g | ]}|®|‘ŒS r,   r'   )r~   Úvs     r!   r�   z(TreeArguments.unpack.<locals>.<listcomp>Á   s   € Ð<Ð<Ð<˜q¨a¨m˜¨m¨m¨mr(   r9   rN   é   r   Úcomp_for)Údefining_contextÚsync_comp_for_nodeÚ
entry_node)rq   re   rf   Ú
infer_noder:   r   r   Ú_star_star_dictrl   rm   rD   r?   r0   r   r   ÚGeneratorComprehensionru   r	   )r]   r^   Ú
named_argsÚ
star_countÚarraysÚ	iteratorsÚvaluesÚdctrp   Úsync_comp_forÚcompr€   s   ``         @r!   r<   zTreeArguments.unpack¸   sI  øøøè è € Øˆ
Ý,¨TÔ-?Ñ@Ô@ð 	@ñ 	@‰NˆJ˜Ø˜QŠˆØœ×0Ò0°Ñ4Ô4�ð.ð .ð .ð .ð .ð .Ø&,ð.ñ .ô .�	å"¥;°	Ð#:Ñ;Ô;ð ð �FØÕ 5Ø<Ð< FÐ<Ñ<Ô<ñ!ô !ð ð ð ð ð ðð ˜q’�Øœ×0Ò0°Ñ4Ô4�Ø!ð Oð O�CÝ.¨t¬|¸SÀ"ÀgÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNðOð ”7˜jÒ(Ð(Øœ�AÝ˜1‘v”v ’{�{Ø"×)Ò)¨1¨Q¬4¬:µ}ÀTÄ\ÐSTÐUVÔSWÑ7XÔ7XÐ*ZÑ[Ô[Ð[Ñ[ð )+¬°A¬˜Ø(Ô-°Ò;Ð;Ø,9Ô,BÀ1Ô,E˜MÝ'Ô>Ø Ô1Ø-1¬\Ø/<Ø')¤{°1¤~ð	 ñ  ô  ˜ð #¥N°4Ñ$8Ô$8Ð8Ð8Ð8Ð8Ñ8à¥¨d¬l¸BÑ ?Ô ?Ð?Ð?Ð?Ð?Ñ?ð ÐÐÐÐÐÐÐÐÐr(   c              #   ó¼   K  — t          | j        ¦  «        D ]D\  }}d }|j        dk    r+t          |j        ¦  «        dk    r|j        d d d…         \  }}|||fV — ŒEd S )NrN   r„   r9   )rq   re   rl   rD   rm   )r]   r�   rN   Údefaults       r!   Ú_as_tree_tuple_objectsz$TreeArguments._as_tree_tuple_objectsß   s…   è è € Ý$2°4Ô3EÑ$FÔ$Fð 	0ð 	0Ñ ˆJ˜ØˆGØŒ} 
Ò*Ð*Ý�xÔ(Ñ)Ô)¨QÒ.Ð.Ø(0Ô(9¸#¸#¸A¸#Ô(>Ñ%�H˜gØ˜G ZÐ/Ð/Ð/Ð/Ð/ð	0ð 	0r(   c              #   ó¨   K  — |                       ¦   «         D ]:\  }}}|rt          |t          j        ¦  «        sŒ#t	          | j        |¦  «        V — Œ;d S r,   )r–   Ú
isinstancer   ÚNamer   rf   )r]   rH   r•   r�   s       r!   Úiter_calling_names_with_starz*TreeArguments.iter_calling_names_with_starç   sk   è è € Ø)-×)DÒ)DÑ)FÔ)Fð 	9ð 	9Ñ%ˆD�'˜:àð ¥Z°µd´iÑ%@Ô%@ð Øå$ T¤\°4Ñ8Ô8Ð8Ð8Ð8Ð8ð	9ð 	9r(   c                 ó2   — d| j         j        ›d| j        ›d�S ©Nú<z: ú>)Ú	__class__r$   re   ra   s    r!   Ú__repr__zTreeArguments.__repr__ï   s#   € € Ø!œ^Ô4Ð4Ð4°dÔ6HÐ6HÐ6HÐIÐIr(   c                 ój  — g }| }||vræt          |t          ¦  «        snÐ|                     |¦  «         t          t	          |                     ¦   «         ¦  «        ¦  «        D ]ˆ}|                     ¦   «         }t          |¦  «        dk    r n^t          |d         t          ¦  «        rg c S t          |d         t          ¦  «        s n"|d          
                    ¦   «         }|j        } ||v°æ|j        �t          |j        |j        ¦  «        gS |j        �t          |j        |j        ¦  «        gS g S )Nr   r   )r˜   rs   r?   Úreversedr:   rš   ÚgotorD   r   r   Úget_executed_param_namer1   re   r   rf   rh   )r]   Úold_arguments_listr1   Úcalling_nameÚnamesÚexecuted_param_names         r!   rb   zTreeArguments.get_calling_nodesò   sI  € ØÐØˆ	àÐ1Ð1Ð1Ý˜i­Ñ7Ô7ð Øà×%Ò% iÑ0Ô0Ð0Ý (­¨i×.TÒ.TÑ.VÔ.VÑ)WÔ)WÑ XÔ Xð ð �Ø$×)Ò)Ñ+Ô+�Ý�u‘:”: ’?�?Ø�EÝ˜e AœhÕ(:Ñ;Ô;ð ð �I�I�IÝ! %¨¤(­IÑ6Ô6ð Ø�EØ&+¨A¤h×&FÒ&FÑ&HÔ&HÐ#Ø/Ô9�	Øð# Ð1Ð1Ð1ð& Ô"Ð.Ý& yÔ'8¸)Ô:QÑRÔRÐSÐSØÔÐ(Ý& yÔ'8¸)Ô:KÑLÔLÐMÐMØˆ	r(   r,   )r$   r%   r&   r   rg   rv   Úclassmethodr   rz   r<   r–   rš   r    rb   r'   r(   r!   rs   rs   §   s¶   € € € € € € Ø€L€L�Lðð ð ð ð Ø*Ð*Ñ,Ô,ð$ð $ñ -Ô,ñ „[ð$ð%ð %ð %ð %ðN0ð 0ð 0ð9ð 9ð 9ðJð Jð Jðð ð ð ð r(   rs   c                   ó"   — e Zd Zd„ Zdd„Zd„ ZdS )ÚValuesArgumentsc                 ó   — || _         d S r,   )Ú_values_list)r]   Úvalues_lists     r!   rv   zValuesArguments.__init__  s   € Ø'ˆÔÐÐr(   Nc              #   óD   K  — | j         D ]}d t          |¦  «        fV — Œd S r,   )r­   r
   )r]   r^   r�   s      r!   r<   zValuesArguments.unpack  s>   è è € ØÔ'ð 	0ð 	0ˆFØ�¨Ñ/Ô/Ð/Ð/Ð/Ð/Ð/ð	0ð 	0r(   c                 ó2   — d| j         j        ›d| j        ›d�S rœ   )rŸ   r$   r­   ra   s    r!   r    zValuesArguments.__repr__  s#   € € Ø!œ^Ô4Ð4Ð4°dÔ6GÐ6GÐ6GÐHÐHr(   r,   )r$   r%   r&   rv   r<   r    r'   r(   r!   r«   r«     sK   € € € € € ð(ð (ð (ð0ð 0ð 0ð 0ðIð Ið Ið Ið Ir(   r«   c                   ój   — e Zd Zd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd	d„Zd„ Z	d„ Z
dS )
ÚTreeArgumentsWrapperc                 ó   — || _         d S r,   )Ú_wrapped_arguments)r]   r1   s     r!   rv   zTreeArgumentsWrapper.__init__  s   € Ø"+ˆÔÐÐr(   c                 ó   — | j         j        S r,   )r´   rf   ra   s    r!   rf   zTreeArgumentsWrapper.context   ó   € àÔ&Ô.Ð.r(   c                 ó   — | j         j        S r,   )r´   re   ra   s    r!   re   z"TreeArgumentsWrapper.argument_node$  s   € àÔ&Ô4Ð4r(   c                 ó   — | j         j        S r,   )r´   rh   ra   s    r!   rh   zTreeArgumentsWrapper.trailer(  r¶   r(   Nc                 ó   — t           ‚r,   r\   )r]   r4   s     r!   r<   zTreeArgumentsWrapper.unpack,  r_   r(   c                 ó4   — | j                              ¦   «         S r,   )r´   rb   ra   s    r!   rb   z&TreeArgumentsWrapper.get_calling_nodes/  s   € ØÔ&×8Ò8Ñ:Ô:Ð:r(   c                 ó2   — d| j         j        ›d| j        ›d�S rœ   )rŸ   r$   r´   ra   s    r!   r    zTreeArgumentsWrapper.__repr__2  s#   € € Ø!œ^Ô4Ð4Ð4°dÔ6MÐ6MÐ6MÐNÐNr(   r,   )r$   r%   r&   rv   Úpropertyrf   re   rh   r<   rb   r    r'   r(   r!   r²   r²     s«   € € € € € ð,ð ,ð ,ð ð/ð /ñ „Xð/ð ð5ð 5ñ „Xð5ð ð/ð /ñ „Xð/ð"ð "ð "ð "ð;ð ;ð ;ðOð Oð Oð Oð Or(   r²   c              #   óÞ   K  — |                      d¦  «        s,|�*d|j        j        ›d|›�}t          j        | d||¬¦  «         	 |j        } |¦   «         E d {V —† d S # t          $ r Y d S w xY w)NÚ__iter__úTypeError: z,() argument after * must be a sequence, not ztype-error-star©Úmessage)Úpy__getattribute__rH   r0   r   Úaddr   r   )rf   ÚarrayÚ
input_noder^   ÚmÚiter_s         r!   r}   r}   6  s²   è è € Ø×#Ò# JÑ/Ô/ð LØÐÐð ”<Ô%Ð%Ð% u uð.ˆAåŒL˜Ð"3°ZÈÐKÑKÔKÐKðØÔ ˆð �5‘7”7ÐÐÐÐÐÐÐÐÐøõ ð ð ð Øˆˆðøøøs   ÁA Á
A,Á+A,c                 ó   — ddl m} t          ||¦  «        r|j        j        dk    ri S t          |t
          j        ¦  «        r|j        dk    r|                     ¦   «         S |�*d|j        j	        ›d|›�}t          j        | d||¬¦  «         i S )Nr   )ÚCompiledInstanceÚdictr¿   z* argument after ** must be a mapping, not ztype-error-star-starrÀ   )Újedi.inference.value.instancerÉ   r˜   rH   Ústring_namer   ÚSequenceÚ
array_typeÚexact_key_itemsr0   r   rÃ   )rf   rÄ   rÅ   r^   rÉ   rÆ   s         r!   rŠ   rŠ   E  s²   € Ø>Ð>Ð>Ð>Ð>Ð>Ý�%Ð)Ñ*Ô*ð ¨u¬zÔ/EÈÒ/OÐ/Oð ˆ	Ý	�E�8Ô,Ñ	-Ô	-ð °%Ô2BÀfÒ2LÐ2LØ×$Ò$Ñ&Ô&Ð&àÐÐà”<Ô%Ð%Ð% u uð.ˆAåŒL˜Ð"8¸*ÈaÐPÑPÔPÐPØˆ	r(   )r   r,   ),rR   Ú	itertoolsr   Útypingr   Úparso.pythonr   Újedir   Újedi.inference.utilsr   Újedi.inferencer   Újedi.inference.lazy_valuer	   r
   r   r   Újedi.inference.namesr   r   r   Újedi.inference.base_valuer   r   r   Újedi.inference.valuer   Újedi.inference.cacher   r   Ú	Exceptionr#   r7   r.   r;   rZ   rd   rq   rs   r«   r²   r}   rŠ   r'   r(   r!   ú<module>rÜ      s¯  ðØ 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø #Ð #Ð #Ð #Ð #Ð #ð)ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ )Ð )Ð )Ð )Ð )Ð )Ø FÐ FÐ FÐ FÐ FÐ Fð@ð @ð @ð @ð"	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ðð ð ð8$ð $ð $ðN ð  ð  ð,ð ð ð ð ñ ô ð ðð ð ð ð Ð/ñ ô ð ðð ð ð2fð fð fð fð fÐ%ñ fô fð fðR	Ið 	Ið 	Ið 	Ið 	IÐ'ñ 	Iô 	Ið 	IðOð Oð Oð Oð OÐ2ñ Oô Oð Oð4ð ð ð ðð ð ð ð r(   