§
    3�Åj6<  ã                  ó    — d dl mZ d dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ dd„Zdd„Zdd„Z	 	 	 	 dd d„ZdS )!é    )ÚannotationsN)ÚAttributeProtoÚFunctionProtoÚ
GraphProtoÚ
ModelProtoÚ	NodeProtoÚSparseTensorProtoÚTensorProto)	Úmake_attributeÚmake_functionÚ
make_graphÚ
make_modelÚ	make_nodeÚmake_tensorÚmake_tensor_value_infoÚset_model_propsÚtensor_dtype_to_np_dtype)Ú
from_arrayÚnoder   Ú	thresholdÚintÚvalue_constant_of_shapeÚfloatÚreturnúlist[NodeProto]c                ó¼  — | j         dk    rt          d| j         ›d�¦  «        ‚| j        D �].}|j        dk    rt	          d| j        ›d�¦  «        ‚|j        dk    rè|j        }|j        › d�}|j        }t          j        |t          j	        ¬	¦  «        }||k    r| gc S t          t          j        t          |¦  «        t          j	        ¬	¦  «        |¬
¦  «        }t          |j        ¦  «        }	t          dg |g|¬¦  «        }
t          d|g| j        t          t          j        |g|	¬	¦  «        ¦  «        ¬¦  «        }|
|gc S t	          d|j        ›�¦  «        ‚| gS )z¨Replaces a Constant node with a large tensor (with more than threshold elements) by a sequence of nodes that produces a dummy constant of same shape as original tensor.ÚConstantz!Node type must be 'Constant' not ú.Úsparse_valuezEThis feature is not yet implemented for a sparse constant (node name=ú).ÚvalueÚ__SHAPE©Údtype©Úname©r!   ÚConstantOfShapez'Replacement of constant with attribute )Úop_typeÚ	TypeErrorÚ	attributer&   ÚNotImplementedErrorÚtÚdimsÚnpÚprodÚint64r   ÚarrayÚlistr   Ú	data_typer   Úoutput)r   r   r   Úattr!   Únew_namer.   ÚsizeÚinitr$   Ú
node_shapeÚnew_nodes               úMC:\Projects\Historical\venv\Lib\site-packages\onnx/tools/replace_constants.pyÚ_replace_constantr=      s¥  € ð „|�zÒ!Ð!ÝÐM¸D¼LÐMÐMÐMÑNÔNÐNØŒ~ð 
ñ 
ˆØŒ8�~Ò%Ð%Ý%ð.Ø"œið.ð .ð .ñô ð ð Œ8�wÒÐØ”EˆEØœ*Ð-Ð-Ð-ˆHØ”:ˆDÝ”7˜4¥r¤xÐ0Ñ0Ô0ˆDØ�yÒ Ð Ø�v���Ý�bœh¥t¨D¡z¤z½¼ÐBÑBÔBÈÐRÑRÔRˆDÝ,¨U¬_Ñ=Ô=ˆEÝ"ØØØ�
Øð	ñ ô ˆJõ !Ø!Ø�
Ø”Ý ¥¤Ð+BÐ*CÈ5Ð!QÑ!QÔ!QÑRÔRð	ñ ô ˆHð  Ð)Ð)Ð)Ð)Ý!ØB°c´hÐBÐBñ
ô 
ð 	
ð ˆ6€Mó    ÚonxúGraphProto | FunctionProtoc           	     óÆ  ‡— t          | t          t          f¦  «        rt          | j        ¦  «        }n t          dt          | ¦  «        › d�¦  «        ‚t          ¦   «         Š|D ]0}‰t          |j        ¦  «        z  Š‰t          |j	        ¦  «        z  ŠŒ1ˆfd„}t          dg  |d¦  «        gd¬¦  «        }t          dg  |d¦  «        gd	¬¦  «        }i }t          |¦  «        D �]x\  }}|j        d
k    rŒ|j        d         }t          d|g ||› d�¦  «        g¦  «        }	t          d|j	        d         |	j	        d         |j	        d         g ||› d�¦  «        g¦  «        }
t          |j        ¦  «        d	k    r|j        d         j        j        }nt"          j        }t          d|
j	        d         g ||› d�¦  «        g|¬¦  «        }t          d|	j	        d         g ||› d�¦  «        g|¬¦  «        }t          d|j	        d         |j	        d         g ||› d�¦  «        g¦  «        }t          d|j	        d         |g|j	        ¦  «        }|	|
||||g||<   �Œzt'          |                     ¦   «         d¬¦  «        D ]\  }}||||d	z   …<   Œ|                     d|¦  «         |                     d	|¦  «         t          | t          ¦  «        r.t-          || j        | j        | j	        | j        | j        ¬¦  «        S t          | t          ¦  «        r.t5          | j        | j        | j        | j	        || j        ¬¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)z½Replaces all *ConstantOfShape* by node *Range* to avoid constant tensors.

    The function is not recursive. The recursivity is done by
    *replace_initializer_by_constant_of_shape*.
    úNot implemented for type r   c                ó�   •— | ‰vr‰                      | ¦  «         | S d}	 | › d|› �}|‰vr‰                      |¦  «         |S |dz  }Œ()Né   TÚ_é   )Úadd)ÚprefixÚir&   Úexisting_namess      €r<   Ú
_find_namez9_replace_constant_of_shape_with_range.<locals>._find_nameY   sr   ø€ Ø˜Ð'Ð'Ø×Ò˜vÑ&Ô&Ð&ØˆMØˆð	Ø�?�?˜q�?�?ˆDØ˜>Ð)Ð)Ø×"Ò" 4Ñ(Ô(Ð(Ø�Ø�‰FˆAð	r>   r   Úzeror   )Ú	value_intÚonerF   r(   Ú
ReduceProdÚ_NÚRangeÚ_RANGEÚCastÚ_RANGEf)ÚtoÚ_NfÚDivÚ_FLATÚReshapeT)Úreverse©ÚinitializerÚsparse_initializer©Úopset_imports)Ú
isinstancer   r   r3   r   r*   ÚtypeÚsetÚinputr5   r   Ú	enumerater)   Úlenr+   r-   r4   r
   ÚFLOATÚsortedÚitemsÚinsertr   r&   r\   r]   r   ÚdomainÚopset_import)r?   Únodesr   rK   Úcst0Úcst1ÚupdateÚinodeÚshapeÚnÚarU   ÚacÚclÚdÚreshÚuprJ   s                    @r<   Ú%_replace_constant_of_shape_with_rangery   G   s·  ø€ õ �#�
¥MÐ2Ñ3Ô3ð BÝ�S”X‘”ˆˆåÐ@µD¸±I´IÐ@Ð@Ð@ÑAÔAÐAå‘U”U€NØð +ð +ˆØ�#˜dœj™/œ/Ñ)ˆØ�#˜dœkÑ*Ô*Ñ*ˆˆð
ð 
ð 
ð 
ð 
õ �Z  j j°Ñ&8Ô&8Ð%9ÀQÐGÑGÔG€DÝ�Z  j j°Ñ&7Ô&7Ð%8ÀAÐFÑFÔF€DØ€FÝ  Ñ'Ô'ð 0ñ 0‰ˆˆtØŒ<Ð,Ò,Ð,ØØ”
˜1”ˆå�l U G¨j¨j¸E¸¸¸Ñ.FÔ.FÐ-GÑHÔHˆÝØØŒ[˜Œ^˜QœX aœ[¨$¬+°a¬.Ð9ØˆZ˜5Ð(Ð(Ð(Ñ)Ô)Ð*ñ
ô 
ˆõ
 ˆtŒ~ÑÔ !Ò#Ð#Ø” Ô"Ô$Ô.ˆBˆBåÔ"ˆBÝ�v ¤¨¤˜}¨z¨z¸UÐ:KÐ:KÐ:KÑ/LÔ/LÐ.MÐRTÐUÑUÔUˆÝ�v ¤¨¤˜}¨z¨z¸U¸-¸-¸-Ñ/HÔ/HÐ.IÈbÐQÑQÔQˆÝØ�B”I˜a”L "¤)¨A¤,Ð/°*°*À¸_¸_¸_Ñ2MÔ2MÐ1Nñ
ô 
ˆõ ˜ Q¤X¨a¤[°%Ð$8¸$¼+ÑFÔFˆØ˜A˜r 2 q¨$Ð/ˆˆu‰‰å˜FŸLšL™NœN°DÐ9Ñ9Ô9ð &ð &‰	ˆˆrØ#%ˆˆe�e˜a‘iÐÑ Ð Ø	‡L‚L��DÑÔÐØ	‡L‚L��DÑÔÐå�#•zÑ"Ô"ð 
ÝØØŒHØŒIØŒJØœØ"Ô5ð
ñ 
ô 
ð 	
õ �#•}Ñ%Ô%ð 
ÝØŒJØŒHØŒIØŒJØØÔ*ð
ñ 
ô 
ð 	
õ Ð<µ°S±	´	Ð<Ð<Ð<Ñ
=Ô
=Ð=r>   c                óŠ  — t          | t          t          f¦  «        rt          | j        ¦  «        }n t          dt          | ¦  «        › d�¦  «        ‚i }t          |¦  «        D ]œ\  }}|j        dk    rŒ|j	        d         j
        }t          |j        |j        dg|g¦  «        }t          d|j        |j        ¦  «        }t#          |j	        d         j        |¬¦  «        }	|j	                             |	¦  «         |||<   Œ�|                     ¦   «         D ]
\  }}
|
||<   Œt          | t          ¦  «        r.t)          || j        | j        | j        | j        | j        ¬¦  «        S t          | t          ¦  «        r.t/          | j        | j        | j        | j        || j        ¬¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)	z7Replaces all fill value of all nodes *ConstantOfShape*.rB   r   r(   r   rF   r'   r[   r^   )r`   r   r   r3   r   r*   ra   rd   r)   r+   r-   r   r&   r4   r   rc   r5   r   Úappendrh   r   r\   r]   r   rj   rk   )r?   r   rl   ro   rp   r   ÚtensorÚ
new_tensorr;   r6   rx   s              r<   Ú _replace_constant_of_shape_valuer~   ™   sÚ  € õ �#�
¥MÐ2Ñ3Ô3ð BÝ�S”X‘”ˆˆåÐ@µD¸±I´IÐ@Ð@Ð@ÑAÔAÐAà€FÝ  Ñ'Ô'ð 
!ð 
!‰ˆˆtØŒ<Ð,Ò,Ð,ØØ” Ô"Ô$ˆÝ ØŒK˜Ô)¨A¨3Ð1HÐ0Iñ
ô 
ˆ
õ Ð.°´
¸D¼KÑHÔHˆÝ˜Tœ^¨AÔ.Ô3¸:ÐFÑFÔFˆØÔ×!Ò! #Ñ&Ô&Ð&Ø ˆˆu‰ˆà—\’\‘^”^ð ð ‰	ˆˆrØˆˆe‰ˆå�#•zÑ"Ô"ð 
ÝØØŒHØŒIØŒJØœØ"Ô5ð
ñ 
ô 
ð 	
õ �#•}Ñ%Ô%ð 
ÝØŒJØŒHØŒIØŒJØØÔ*ð
ñ 
ô 
ð 	
õ Ð<µ°S±	´	Ð<Ð<Ð<Ñ
=Ô
=Ð=r>   é€   Fç      à?ú'FunctionProto | GraphProto | ModelProtoÚ
ir_versionú
int | NoneÚ	use_rangeÚboolc                óZ  ‡ ‡‡‡‡‡#— t          ‰ t          ¦  «        rìd}g }‰ j        D ]^}|j        dk    r<t	          |‰‰¦  «        }t          |¦  «        dk    rd}|                     |¦  «         ŒI|                     |¦  «         Œ_|rWt          ‰ j	        ‰ j
        ‰ j        ‰ j        |‰ j        ¬¦  «        }	‰rt          |	¦  «        S ‰dk    rt          |	‰¦  «        S |	S ‰rt          ‰ ¦  «        S ‰dk    rt          ‰ ‰¦  «        S ‰ S t          ‰ t           ¦  «        �rLt#          ‰ j        ‰p‰ j        ‰‰‰¬¦  «        }
ˆˆ ˆˆˆfd„‰ j        D ¦   «         }t+          |
|‰ j        ‰ j        ‰p‰ j        ‰ j        ‰ j	        ‰ j        ¬	¦  «        }t          ‰ j        ¦  «        d
k    r!d„ ‰ j        D ¦   «         }t7          ||¦  «         |j        dd…= ‰ j        D ]‘}|j                             ¦   «         }|j	        dk    r%|j        dk     r‰rt=          d|j        › d�¦  «        ‚|j	        dk    r#|j        dk     rt=          d|j        › d�¦  «        ‚|j	        |_	        |j        |_        Œ’|S t          ‰ t>          ¦  «        s tA          dtC          ‰ ¦  «        › d�¦  «        ‚d
}g }tE          ¦   «         Š#g }g }‰ j#        D �]t}tI          |j%        ¦  «        }tM          j'        |tL          j(        ¬¦  «        }|‰k    r|                     |¦  «         ŒS|dz  }|j
        › d�}|                     tS          tM          j*        tW          |¦  «        tL          j(        ¬¦  «        |¬¦  «        ¦  «         tY          |j-        ¦  «        }t]          d|g|j
        gtS          tM          j*        dg|¬¦  «        ¦  «        ¬¦  «        }|                     |¦  «         ‰#                     |j
        ¦  «         ‰�B‰dk    r<|                     t_          |t`          j1        t          |¦  «        g¦  «        ¦  «         �Œvg }‰ j2        D ]{}tI          |j%        ¦  «        }tM          j'        |tL          j(        ¬¦  «        }|‰k    r|                     |¦  «         ŒRtg          d|j4        j
        ›d|j5        j
        ›d�¦  «        ‚‰ j        D �]â}|j        dk    r?t	          |‰‰¦  «        }t          |¦  «        dk    r|dz  }|                     |¦  «         ŒMd}g }|j6        D �]}|j!        tn          j8        k    rk| 9                    d¦  «        rVt#          |j:        ‰‰‰‰¬¦  «        }tw          |¦  «        tw          |j:        ¦  «        k    rd}ty          |j
        |¦  «        }nƒ|j!        tn          j=        k    rng }|j>        D ]M}t#          |‰‰‰‰¬¦  «        } tw          | ¦  «        tw          |¦  «        k    rd}|                     | ¦  «         ŒN|rty          |j
        |¦  «        }|                     |¦  «         �Œ|rVt]          |j        |j        |j        ¦  «        }!|!j6                             |¦  «         |                     |!¦  «         |dz  }�ŒÍ|                     |¦  «         �Œä|d
k    r\t          |‰ j
        ˆ#fd „‰ j        D ¦   «         |z   ‰ j        ||¬!¦  «        }"‰rt          |"¦  «        S ‰dk    rt          |"‰¦  «        S |"S ‰rt          ‰ ¦  «        S ‰dk    rt          ‰ ‰¦  «        S ‰ S )"aô  Replace initializers or constant node by nodes *ConstantOfShape* to reduce the size.

    This reduce the cost to write a unit test about a specific graph structure.

    Args:
        onx: ModelProto
        threshold: every initializer under this threshold is not
            impacted
        ir_version: initializer must be specified as input for
            `ir_version <= 3`, this must be specified if onx is
            :class:`FunctionProto` or :class:`GraphProto`
        use_range: if uses operator *Range* instead of *ConstantOfShape*
            to avoid constant tensors
        value_constant_of_shape: value to use as a value for all nodes
            *ConstantOfShape*, a high value may produce nan or inf
            predictions

    Returns:
        onx, modified ModelProto

    The function is designed so that the function can be reapplied on a modified model
    and either replace *ConstantOfShape* with *Range* operators, either replace the fill value
    for every *ConstantOfShape*.
    Fr   rD   Tr^   rF   )r‚   r   r„   r   c           	     óF   •— g | ]}t          |‰‰p‰j        ‰‰¬ ¦  «        ‘ŒS )©r   r‚   r„   r   )Ú(replace_initializer_by_constant_of_shaper‚   )Ú.0Úfr‚   r?   r   r„   r   s     €€€€€r<   ú
<listcomp>z<replace_initializer_by_constant_of_shape.<locals>.<listcomp>  sP   ø€ ð 	
ð 	
ð 	
ð õ 5ØØ#Ø%Ð7¨¬Ø#Ø(?ðñ ô ð	
ð 	
ð 	
r>   )Ú	functionsÚproducer_nameÚproducer_versionr‚   Ú
doc_stringrj   Úmodel_versionr   c                ó(   — i | ]}|j         |j        “ŒS © )Úkeyr!   )rŠ   Úps     r<   ú
<dictcomp>z<replace_initializer_by_constant_of_shape.<locals>.<dictcomp>$  s   € ÐAÐAÐA¨�a”e˜QœWÐAÐAÐAr>   NÚ é   z.Range was introduced in opset 11 but opset is r   é	   z7ConstantOfShape was introduced in opset 9 but opset is z-onx should be a GraphProto at this stage not r#   r"   r%   r(   r€   r'   é   zKThis feature is not yet implemented for a sparse initializer (indices.name=z, values.name=r    Úgrˆ   c                ó&   •— g | ]}|j         ‰v¯|‘ŒS r“   r%   )rŠ   rI   Úremoveds     €r<   rŒ   z<replace_initializer_by_constant_of_shape.<locals>.<listcomp>—  s%   ø€ Ð;Ð;Ð;�1 Q¤V°7Ð%:Ð%:ˆQÐ%:Ð%:Ð%:r>   r[   )@r`   r   r   r)   r=   re   Úextendr{   r   rj   r&   rc   r5   rk   ry   r~   r   r‰   Úgraphr‚   r�   r   rŽ   r�   r�   r‘   Úmetadata_propsr   rG   ÚversionÚRuntimeErrorr   r*   ra   rb   r\   Útupler.   r/   r0   r1   r   r2   r3   r   r4   r   r   r
   ÚINT64r]   r,   ÚindicesÚvaluesr+   r   ÚGRAPHÚHasFieldr›   Úidr   ÚGRAPHSÚgraphsr   )$r?   r   r‚   r„   r   ÚmodifiedÚ	new_nodesr   Ú	cst_nodesÚnew_onxÚ	new_graphÚnew_functionsÚmodelr¦   ÚoimpÚop_setÚn_modificationsÚadditional_inputsÚ	new_initsr9   r.   r8   r7   r$   Únew_sparse_initsÚsp_initÚshape_nodesÚattsr6   r›   Ú
new_graphsÚsub_gÚnew_gr;   rŸ   r�   s$   `````                              @r<   r‰   r‰   Ç   sS  øøøøøø€ õ> �#•}Ñ%Ô%ð ØˆØ%'ˆ	Ø”Hð 	#ð 	#ˆDØŒ|˜zÒ)Ð)Ý-¨d°IÐ?VÑWÔW�	Ý�y‘>”> QÒ&Ð&Ø#�HØ× Ò  Ñ+Ô+Ð+ØØ×Ò˜TÑ"Ô"Ð"Ð"Øð 	Ý#Ø”
Ø”Ø”	Ø”
ØØ!Ô.ðñ ô ˆGð ð FÝ<¸WÑEÔEÐEØ&¨!Ò+Ð+Ý7ØÐ4ñô ð ð ˆNØð 	>Ý8¸Ñ=Ô=Ð=Ø" aÒ'Ð'Ý3°CÐ9PÑQÔQÐQØˆ
å�#•zÑ"Ô"ñ .Ý<ØŒIØ!Ð3 S¤^ØØØ$;ð
ñ 
ô 
ˆ	ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð ”]ð	
ñ 	
ô 	
ˆõ ØØ#ØÔ+Ø Ô1Ø!Ð3 S¤^Ø”~Ø”:ØÔ+ð	
ñ 	
ô 	
ˆõ ˆsÔ!Ñ"Ô" QÒ&Ð&ØAÐA¨cÔ.@ÐAÑAÔAˆFÝ˜E 6Ñ*Ô*Ð*àÔ˜q˜q˜qÐ!ØÔ$ð 	*ð 	*ˆDØÔ'×+Ò+Ñ-Ô-ˆFØŒ{˜bÒ Ð  T¤\°BÒ%6Ð%6¸9Ð%6Ý"ØTÀTÄ\ÐTÐTÐTñô ð ð Œ{˜bÒ Ð  T¤\°AÒ%5Ð%5Ý"ð<Ø,0¬Lð<ð <ð <ñô ð ð !œKˆFŒMØ!œ\ˆFŒNˆNØˆå�c�:Ñ&Ô&ð VÝÐTÍÈSÉ	Ì	ÐTÐTÐTÑUÔUÐUà€OØ€IÝ‰eŒe€GØÐà#%€IØ”ð ñ ˆÝ�T”YÑÔˆÝŒw�t¥2¤8Ð,Ñ,Ô,ˆØ�9ÒÐØ×Ò˜TÑ"Ô"Ð"ØØ˜1ÑˆØ”iÐ(Ð(Ð(ˆØ×ÒÝ•r”x¥ T¡
¤
µ"´(Ð;Ñ;Ô;À(ÐKÑKÔKñ	
ô 	
ð 	
õ )¨¬Ñ8Ô8ˆÝØØˆJØŒYˆKÝ�RœX s e°5Ð9Ñ9Ô9Ñ:Ô:ð	
ñ 
ô 
ˆð 	×Ò˜ÑÔÐØ�Š�D”IÑÔÐØÐ! j°A¢o oØ×$Ò$Ý& xµÔ1BÅSÈÁYÄYÀKÑPÔPñô ð ùð 13ÐØÔ)ð 

ð 

ˆÝ�W”\Ñ"Ô"ˆÝŒw�t¥2¤8Ð,Ñ,Ô,ˆØ�9ÒÐØ×#Ò# GÑ,Ô,Ð,ØÝ!ð5Ø$œ_Ô1ð5ð 5à"œ>Ô.ð5ð 5ð 5ñ
ô 
ð 	
ð ”ð +#ñ +#ˆØŒ<˜:Ò%Ð%Ý+¨D°)Ð=TÑUÔUˆKÝ�;ÑÔ 1Ò$Ð$Ø 1Ñ$�Ø×Ò˜[Ñ)Ô)Ð)ØØˆØˆØ”>ð 	ñ 	ˆCØŒx�>Ô/Ò/Ð/°C·L²LÀÑ4EÔ4EÐ/Ý<Ø”EØ'Ø)Ø'Ø,Cðñ ô �õ �a‘5”5�B˜sœu™IœIÒ%Ð%Ø#�HÝ(¨¬°1Ñ5Ô5�CøØ”�^Ô2Ò2Ð2Ø�
Ø œZð 
-ð 
-�EÝDØØ"+Ø#-Ø"+Ø0Gðñ ô �Eõ ˜%‘y”y¥B u¡I¤IÒ-Ð-Ø#'˜Ø×%Ò% eÑ,Ô,Ð,Ð,Øð ?Ý(¨¬°:Ñ>Ô>�CØ�KŠK˜ÑÔÐÑØð 	#Ý  ¤¨t¬z¸4¼;ÑGÔGˆHØÔ×%Ò% dÑ+Ô+Ð+Ø×Ò˜XÑ&Ô&Ð&Ø˜qÑ ˆO‰Oà×Ò˜TÑ"Ô"Ð"Ñ"à˜ÒÐÝØØŒHØ;Ð;Ð;Ð;˜œ	Ð;Ñ;Ô;Ð>OÑOØŒJØ!Ø/ð
ñ 
ô 
ˆð ð 	@Ý8¸Ñ?Ô?Ð?Ø" aÒ'Ð'Ý3°EÐ;RÑSÔSÐSØˆØð :Ý4°SÑ9Ô9Ð9Ø !Ò#Ð#Ý/°Ð5LÑMÔMÐMØ€Jr>   )r   r   r   r   r   r   r   r   )r?   r@   r   r@   )r?   r@   r   r   r   r@   )r   NFr€   )
r?   r�   r   r   r‚   rƒ   r„   r…   r   r   )Ú
__future__r   Únumpyr/   Úonnxr   r   r   r   r   r	   r
   Úonnx.helperr   r   r   r   r   r   r   r   r   Úonnx.numpy_helperr   r=   ry   r~   r‰   r“   r>   r<   ú<module>rÄ      s|  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð )Ð (Ð (Ð (Ð (Ð (ð%ð %ð %ð %ðPO>ð O>ð O>ð O>ðd+>ð +>ð +>ð +>ð` Ø!ØØ%(ð^ð ^ð ^ð ^ð ^ð ^ð ^r>   