§
    ~Štj|;  ã                  ó.  — 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mZ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  ej        e¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z d)d„Z!d*d„Z"d+d„Z#d,d„Z$d-d„Z%d.d$„Z&d/d(„Z'dS )0é    )ÚannotationsN)ÚIterable)ÚBufferedReader)ÚLiteralÚOptionalÚUnionÚcast)Úschemas)Ú_orjson)ÚCompressedTraces)ÚMultipartPartÚMultipartPartsAndContext)Ú
dumps_jsonc                  ó²   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   dZ	 	 	 	 	 	 	 ddd„Zd d„Zd!d„Zd"d„ZdS )#ÚSerializedRunOperationúLiteral['post', 'patch']Ú	operationú	uuid.UUIDÚidÚtrace_idÚbytesÚ_noneúOptional[bytes]ÚinputsÚoutputsÚeventsÚextraÚerrorÚ
serializedú Optional[ls_schemas.Attachments]Úattachments©r   r   r   r   r   r   r   r   r   r   r!   NÚreturnÚNonec                ó    — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        d S ©Nr"   )Úselfr   r   r   r   r   r   r   r   r   r   r!   s               ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/_internal/_operations.pyÚ__init__zSerializedRunOperation.__init__3   sX   € ð #ˆŒØˆŒØ ˆŒØˆŒ
ØˆŒØˆŒØˆŒØˆŒ
ØˆŒ
Ø$ˆŒØ&ˆÔÐÐó    Úintc                óH  — d}| j         r|t          | j         ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        r|t          | j        ¦  «        z  }| j        rF| j         	                    ¦   «         D ],\  }}t          |t          ¦  «        r|t          |¦  «        z  }Œ-|S )ú3Calculate actual serialized size of this operation.r   )r   Úlenr   r   r   r   r   r   r!   ÚvaluesÚ
isinstancer   )r'   ÚsizeÚcontent_typeÚdata_or_paths       r(   Úcalculate_serialized_sizez0SerializedRunOperation.calculate_serialized_sizeM   s+  € àˆØŒ:ð 	$Ø•C˜œ
‘O”OÑ#ˆDØŒ;ð 	%Ø•C˜œÑ$Ô$Ñ$ˆDØŒ<ð 	&Ø•C˜œÑ%Ô%Ñ%ˆDØŒ;ð 	%Ø•C˜œÑ$Ô$Ñ$ˆDØŒ:ð 	$Ø•C˜œ
‘O”OÑ#ˆDØŒ:ð 	$Ø•C˜œ
‘O”OÑ#ˆDØŒ?ð 	)Ø•C˜œÑ(Ô(Ñ(ˆDØÔð 	.Ø.2Ô.>×.EÒ.EÑ.GÔ.Gð .ð .Ñ*�˜lÝ˜l­EÑ2Ô2ð .Ø�C Ñ-Ô-Ñ-�DøØˆr*   Údictc                ó
  — t          j        | j        ¦  «        }| j        �t          j        | j        ¦  «        |d<   | j        �t          j        | j        ¦  «        |d<   | j        �t          j        | j        ¦  «        |d<   |S )zFDeserialize the main run info (_none and extra, error and serialized).Nr   r   r   )r   Úloadsr   r   r   r   )r'   Úrun_infos     r(   Údeserialize_run_infoz+SerializedRunOperation.deserialize_run_infod   sr   € å”= ¤Ñ,Ô,ˆØŒ:Ð!Ý '¤¨d¬jÑ 9Ô 9ˆH�WÑàŒ:Ð!Ý '¤¨d¬jÑ 9Ô 9ˆH�WÑàŒ?Ð&Ý%,¤]°4´?Ñ%CÔ%CˆH�\Ñ"àˆr*   ÚotherÚobjectÚboolc                ó@  — t          |t          ¦  «        o‰| j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        f|j        |j        |j        |j        |j        |j        |j        |j	        |j
        |j        |j        fk    S r&   )r0   r   r   r   r   r   r   r   r   r   r   r   r!   ©r'   r:   s     r(   Ú__eq__zSerializedRunOperation.__eq__r   sœ   € Ý˜%Õ!7Ñ8Ô8ð 
ØŒNØŒGØŒMØŒJØŒKØŒLØŒKØŒJØŒJØŒOØÔð>
ð ŒOØŒHØŒNØŒKØŒLØŒMØŒLØŒKØŒKØÔØÔð
ò>
ð 	
r*   )NNNNNNN)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#   r5   ©r:   r;   r#   r<   )	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Ú	__slots__r)   r4   r9   r?   © r*   r(   r   r      s	  € € € € € € Ø'Ð'Ð'Ñ'Ø€M€M�MØÐÐÑð €L€L�LàÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ1Ð1Ð1Ñ1ð€Ið( #'Ø#'Ø"&Ø!%Ø!%Ø&*Ø8<ð'ð 'ð 'ð 'ð 'ð4ð ð ð ð.ð ð ð ð
ð 
ð 
ð 
ð 
ð 
r*   r   c                  óJ   — e Zd ZU ded<   ded<   ded<   dZdd	„Zdd„Zdd„ZdS )ÚSerializedFeedbackOperationr   r   r   r   Úfeedback©r   r   rJ   r#   r$   c                ó0   — || _         || _        || _        d S r&   rK   )r'   r   r   rJ   s       r(   r)   z$SerializedFeedbackOperation.__init__•   s   € ØˆŒØ ˆŒØ ˆŒˆˆr*   r+   c                ó*   — t          | j        ¦  «        S )r-   )r.   rJ   )r'   s    r(   r4   z5SerializedFeedbackOperation.calculate_serialized_sizeš   s   € å�4”=Ñ!Ô!Ð!r*   r:   r;   r<   c                ó€   — t          |t          ¦  «        o)| j        | j        | j        f|j        |j        |j        fk    S r&   )r0   rI   r   r   rJ   r>   s     r(   r?   z"SerializedFeedbackOperation.__eq__ž   sG   € Ý˜%Õ!<Ñ=Ô=ð 8ØŒGØŒMØŒMðC
ð Œh˜œ¨¬Ð7ò	C8ð 	8r*   N)r   r   r   r   rJ   r   r#   r$   r@   rA   )rB   rC   rD   rE   rF   r)   r4   r?   rG   r*   r(   rI   rI   Ž   su   € € € € € € Ø€M€M�MØÐÐÑØ€O€O�Oà.€Ið!ð !ð !ð !ð
"ð "ð "ð "ð8ð 8ð 8ð 8ð 8ð 8r*   rI   rJ   ú&Union[ls_schemas.FeedbackCreate, dict]r#   c                ó–  — t          | d¦  «        r2t          t          | d¦  «        ¦  «        r|                      ¦   «         }nt	          t
          | ¦  «        }|                     dd¦  «        }|s
d|d<   d|d<   d|vrt          j        ¦   «         |d<   n8t          |d         t          ¦  «        rt          j        |d         ¦  «        |d<   d|vrt          j        ¦   «         |d<   n8t          |d         t          ¦  «        rt          j        |d         ¦  «        |d<   t          |d         |d         t          |¦  «        ¬¦  «        S )	NÚ
model_dumpÚextend_trace_retentionTÚ_skip_trace_upgradeFr   r   rK   )ÚhasattrÚcallableÚgetattrrQ   r	   r5   ÚpopÚuuidÚuuid4r0   ÚstrÚUUIDrI   Ú_dumps_json)rJ   Úfeedback_createrR   s      r(   Úserialize_feedback_dictr^   ¦   sX  € õ ˆx˜Ñ&Ô&ð /­8µG¸HÀlÑ4SÔ4SÑ+TÔ+Tð /Ø (× 3Ò 3Ñ 5Ô 5ˆˆå�t XÑ.Ô.ˆØ,×0Ò0Ð1IÈ4ÑPÔPÐØ!ð :Ø15ˆÐ-Ñ.ð 5:ˆÐ0Ñ1Ø�?Ð"Ð"Ý $¤
¡¤ˆ˜ÑÐÝ	�O DÔ)­3Ñ	/Ô	/ð AÝ $¤	¨/¸$Ô*?Ñ @Ô @ˆ˜ÑØ˜Ð(Ð(Ý&*¤j¡l¤lˆ˜
Ñ#Ð#Ý	�O JÔ/µÑ	5Ô	5ð MÝ&*¤i°À
Ô0KÑ&LÔ&Lˆ˜
Ñ#å&Ø˜4Ô Ø  Ô,Ý˜_Ñ-Ô-ðñ ô ð r*   r   r   Úpayloadr5   c                óp  — |                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }|                      dd ¦  «        }t          | |d         |d	         t          |¦  «        |�t          |¦  «        nd |�t          |¦  «        nd |�t          |¦  «        nd |�t          |¦  «        nd |�t          |¦  «        nd |�t          |¦  «        nd |�|nd ¬
¦  «        S )Nr   r   r   r   r   r   r!   r   r   r"   )rW   r   r\   )	r   r_   r   r   r   r   r   r   r!   s	            r(   Úserialize_run_dictra   Ä   sG  € ð �[Š[˜ 4Ñ(Ô(€FØ�kŠk˜) TÑ*Ô*€GØ�[Š[˜ 4Ñ(Ô(€FØ�KŠK˜ Ñ&Ô&€EØ�KŠK˜ Ñ&Ô&€EØ—’˜\¨4Ñ0Ô0€JØ—+’+˜m¨TÑ2Ô2€KÝ!ØØ�4Œ=Ø˜Ô$Ý˜'Ñ"Ô"Ø&,Ð&8�{˜6Ñ"Ô"Ð"¸dØ(/Ð(;•˜GÑ$Ô$Ð$ÀØ&,Ð&8�{˜6Ñ"Ô"Ð"¸dØ$)Ð$5�k˜%Ñ Ô Ð ¸4Ø$)Ð$5�k˜%Ñ Ô Ð ¸4Ø.8Ð.D•;˜zÑ*Ô*Ð*È$Ø#.Ð#:�K�KÀðñ ô ð r*   Úopsú@list[Union[SerializedRunOperation, SerializedFeedbackOperation]]c                óÜ  — d„ | D ¦   «         }g }| D �]§}t          |t          ¦  «        �ry|j        dk    rŒ%|                     |j        ¦  «        }|€|                     |¦  «         ŒW|j        �Œ|j        |j        k    r|t          j        |j        ¦  «        }d„ t          j        |j        ¦  «         	                    ¦   «         D ¦   «         }| 
                    |¦  «         t          j        |¦  «        |_        |j        �|j        |_        |j        �|j        |_        |j        �|j        |_        |j        �|j        |_        |j        �|j        |_        |j        �|j        |_        |j        �-|j        €i |_        |j         
                    |j        ¦  «         �Œ’|                     |¦  «         �Œ©t'          t)          j        |                     ¦   «         |¦  «        ¦  «        S )Nc                ó^   — i | ]*}t          |t          ¦  «        r|j        d k    ¯"|j        |“Œ+S )Úpost)r0   r   r   r   )Ú.0Úops     r(   ú
<dictcomp>z7combine_serialized_queue_operations.<locals>.<dictcomp>à   sH   € ð ð ð àÝ�bÕ0Ñ1Ô1ðð 79´lÀfÒ6LÐ6Lð 	Œˆrà6LÐ6LÐ6Lr*   rf   c                ó   — i | ]
\  }}|®||“ŒS r&   rG   ©rg   ÚkÚvs      r(   ri   z7combine_serialized_queue_operations.<locals>.<dictcomp>ø   s&   € ð ð ð Ù!˜Q ÈÈ�A�qÈÈÈr*   )r0   r   r   Úgetr   Úappendr   r   r7   ÚitemsÚupdateÚdumpsr   r   r   r   r   r   r!   ÚlistÚ	itertoolsÚchainr/   )rb   Úcreate_ops_by_idÚpassthrough_opsrh   Ú	create_opÚcreate_op_dictÚop_dicts          r(   Ú#combine_serialized_queue_operationsr{   Ý   sô  € ðð àðñ ô Ðð 	ð ð ð ''ñ ''ˆÝ�bÕ0Ñ1Ô1ñ &	'ØŒ|˜vÒ%Ð%Øð )×,Ò,¨R¬UÑ3Ô3ˆIØÐ Ø×&Ò& rÑ*Ô*Ð*ØàŒxÐ#¨¬°I´OÒ(CÐ(Cõ ")¤¨y¬Ñ!?Ô!?�ðð Ý%,¤]°2´8Ñ%<Ô%<×%BÒ%BÑ%DÔ%Dðñ ô �ð ×%Ò% gÑ.Ô.Ð.Ý")¤-°Ñ"?Ô"?�	”àŒyÐ$Ø#%¤9�	Ô ØŒzÐ%Ø$&¤J�	Ô!ØŒyÐ$Ø#%¤9�	Ô ØŒxÐ#Ø"$¤(�	”ØŒxÐ#Ø"$¤(�	”ØŒ}Ð(Ø')¤}�	Ô$ØŒ~Ð)ØÔ(Ð0Ø,.�IÔ)ØÔ%×,Ò,¨R¬^Ñ<Ô<Ð<ùà×"Ò" 2Ñ&Ô&Ð&Ñ&Ý•	”Ð 0× 7Ò 7Ñ 9Ô 9¸?ÑKÔKÑLÔLÐLr*   rh   r   c                ó¬   — t          d| j        › �d | j        ddt          t	          | j        ¦  «        ¦  «        iffgd| j        › d| j        › �¦  «        S )Nz	feedback.úapplication/jsonúContent-Lengthútrace=ú,id=)r   r   rJ   rZ   r.   r   )rh   s    r(   Ú<serialized_feedback_operation_to_multipart_parts_and_contextr�     sr   € õ $ð $˜BœEÐ#Ð#àØ”KØ&Ø%¥s­3¨r¬{Ñ+;Ô+;Ñ'<Ô'<Ð=ð	ðð
	
ð 	*�”Ð)Ð) "¤%Ð)Ð)ñô ð r*   ú:tuple[MultipartPartsAndContext, dict[str, BufferedReader]]c                óØ  — g }i }|                      | j        › d| j        › �d | j        ddt	          t          | j        ¦  «        ¦  «        iff¦  «         d| j        fd| j        fd| j        fd| j	        fd| j
        fd	| j        ffD ]S\  }}|€Œ|}|                      | j        › d| j        › d|› �d |ddt	          t          |¦  «        ¦  «        iff¦  «         ŒT| j        �rg| j                             ¦   «         D �]L\  }\  }}d|v r't                               d
|› d| j        › d�¦  «         Œ4t!          |t"          ¦  «        rC|                      d| j        › d|› �d ||dt	          t          |¦  «        ¦  «        iff¦  «         ŒŒ	 t$          j                             |¦  «        }	t+          |d¦  «        }
n1# t,          $ r$ t                               d| j        |¦  «         Y Œêw xY w|
|t	          |¦  «        t	          t/          j        ¦   «         ¦  «        z   <   |                      d| j        › d|› �d |
|› d|	› �i ff¦  «         �ŒNt3          |d| j        › d| j        › �¦  «        |fS )Nú.r}   r~   r   r   r   r   r   r   z Skipping logging of attachment 'z
' for run zx: Invalid attachment name.  Attachment names must not contain periods ('.'). Please rename the attachment and try again.zattachment.Úrbz(Attachment file not found for run %s: %sz	; length=r   r€   )ro   r   r   r   rZ   r.   r   r   r   r   r   r   r!   rp   ÚloggerÚwarningr0   r   ÚosÚpathÚgetsizeÚopenÚFileNotFoundErrorrX   rY   r   r   )rh   Ú	acc_partsÚopened_files_dictÚkeyÚvalueÚvalbÚnr2   r3   Ú	file_sizeÚfiles              r(   Ú7serialized_run_operation_to_multipart_parts_and_contextr•   &  s8  € ð &(€IØ35Ðà×ÒàŒ|Ð%Ð%˜bœeÐ%Ð%àØ”Ø"Ø!¥3¥s¨2¬8¡}¤}Ñ#5Ô#5Ð6ð	ð	
ñ
ô 
ð 
ð 
�2”9ÐØ	�B”JÐØ	�2”9ÐØ	�"”(ÐØ	�"”(ÐØ	�r”}Ð%ðð 
ð 
‰
ˆˆUð ˆ=ØØˆØ×Òà”<Ð/Ð/ "¤%Ð/Ð/¨#Ð/Ð/àØØ&Ø%¥s­3¨t©9¬9¡~¤~Ð6ð	ðñ
	
ô 
	
ð 
	
ð 
	
ð 
„~ñ +Ø/1¬~×/CÒ/CÑ/EÔ/Eð *	ñ *	Ñ+ˆAÑ+�˜lØ�aˆxˆxÝ—’ðR°qð Rð RØ!œuðRð Rð Rñô ð ð å˜,­Ñ.Ô.ð  Ø× Ò à1 b¤eÐ1Ð1¨aÐ1Ð1à Ø(Ø(Ø-­sµ3°|Ñ3DÔ3DÑ/EÔ/EÐFð	ðñ
ô 
ð 
ð 
ðÝ "¤§¢°Ñ =Ô =�IÝ ¨dÑ3Ô3�D�DøÝ(ð ð ð Ý—N’NØBÀBÄEÈ<ñô ð ð �Hð	øøøð
 LPÐ!¥# lÑ"3Ô"3µc½$¼*¹,¼,Ñ6GÔ6GÑ"GÑHØ× Ò à1 b¤eÐ1Ð1¨aÐ1Ð1à Ø Ø+ÐAÐA°iÐAÐAØð	ðñ
ô 
ð 
ñ 
õ 	! Ð,M°R´[Ð,MÐ,MÀbÄeÐ,MÐ,MÑNÔNØðð s   Æ	/F9Æ9+G'Ç&G'Úparts_and_contextÚboundaryrZ   ú4Iterable[tuple[bytes, Union[bytes, BufferedReader]]]c              #  óF  K  — | j         D ]–\  }\  }}}}d|› d�d|› d�g}|r|                     d|› d�¦  «         |                     d|› d�gd„ |                     ¦   «         D ¦   «         ¢d‘¦  «         d                     |¦  «                             ¦   «         |fV — Œ—d S )	Nz--ú
z&Content-Disposition: form-data; name="ú"z; filename="z
Content-Type: c                ó$   — g | ]\  }}|› d |› d�‘ŒS )z: rš   rG   rk   s      r(   ú
<listcomp>z6encode_multipart_parts_and_context.<locals>.<listcomp>�  s(   € Ð>Ð>Ð>¡d a¨�Q�/�/˜!�/�/�/Ð>Ð>Ð>r*   Ú )Úpartsro   Úextendrp   ÚjoinÚencode)r–   r—   Ú	part_nameÚfilenameÚdatar2   ÚheadersÚheader_partss           r(   Ú"encode_multipart_parts_and_contextr¨     s  è è € ð ?PÔ>Uð 5ð 5Ñ:ˆ	Ñ:�H˜d L°'à�ÐÐÐØA°YÐAÐAÐAð
ˆð
 ð 	<Ø×ÒÐ :¨xÐ :Ð :Ð :Ñ;Ô;Ð;à×Òà7 \Ð7Ð7Ð7ðà>Ð>¨g¯mªm©o¬oÐ>Ñ>Ô>ðð ðñ	
ô 	
ð 	
ð �wŠw�|Ñ$Ô$×+Ò+Ñ-Ô-¨tÐ4Ð4Ð4Ð4Ð4ð#5ð 5r*   Úcompressed_tracesr   r<   c                óÌ  — |j         j        }g }d}t          | |¦  «        D ]”\  }}t          |t          t
          f¦  «        sJt          |t          ¦  «        r|                     ¦   «         n t          |¦  «         	                    ¦   «         }| 
                    ||f¦  «         |t          |¦  «        z  }Œ•t          |dd¦  «        }|�6|dk    r0|j        }	|	dk    r#|	|z   |k    rddlm}
  |
d|	› d|› d�¦  «         dS |D ]C\  }} ||¦  «         |xj        t          |¦  «        z  c_         ||¦  «          |d	¦  «         ŒD|j         
                    | j        ¦  «         d
S )zïCompress multipart parts into the shared compressed buffer.

    Returns True if the parts were enqueued into the compressed buffer, or False
    if they were rejected because the configured in-memory size limit would be
    exceeded.
    r   Úmax_uncompressed_size_bytesN)Ú_log_tracing_dropzcompressed traces buffer full (ú/z bytes)Fs   
T)Úcompressor_writerÚwriter¨   r0   r   Ú	bytearrayr   ÚreadrZ   r¢   ro   r.   rV   Úuncompressed_sizeÚlangsmith.clientr¬   Ú_contextÚcontext)r–   r©   r—   r¯   rŸ   Úop_uncompressed_sizer¦   r¥   Ú	max_bytesÚcurrent_sizer¬   s              r(   Ú$compress_multipart_parts_and_contextr¹   —  s´  € ð Ô/Ô5€Eà')€EØÐå;Ø˜8ñô ð 
*ð 
*‰ˆ�õ ˜$¥­	Ð 2Ñ3Ô3ð 	å)¨$µÑ?Ô?ÐW�—	’	‘”�ÅSÈÁYÄY×EUÒEUÑEWÔEWð ð 	�Š�g˜t�_Ñ%Ô%Ð%Ø¥ D¡	¤	Ñ)ÐÐåÐ)Ð+HÈ$ÑOÔO€IØÐ ¨Q¢ Ø(Ô:ˆØ˜!ÒÐ Ð/CÑ CÀiÒ OÐ OØ:Ð:Ð:Ð:Ð:Ð:àÐØS°,ÐSÐSÀÐSÐSÐSñô ð ð �5àð ð ‰ˆ�Øˆˆg‰ŒˆØÐ+Ô+­s°4©y¬yÑ8Ð+Ô+Øˆˆd‰ŒˆØˆˆg‰ŒˆˆàÔ×%Ò%Ð&7Ô&?Ñ@Ô@Ð@Øˆ4r*   )rJ   rO   r#   rI   )r   r   r_   r5   r#   r   )rb   rc   r#   rc   )rh   rI   r#   r   )rh   r   r#   r‚   )r–   r   r—   rZ   r#   r˜   )r–   r   r©   r   r—   rZ   r#   r<   )(Ú
__future__r   rt   Úloggingrˆ   rX   Úcollections.abcr   Úior   Útypingr   r   r   r	   Ú	langsmithr
   Ú
ls_schemasÚlangsmith._internalr   Ú&langsmith._internal._compressed_tracesr   Úlangsmith._internal._multipartr   r   Úlangsmith._internal._serder   r\   Ú	getLoggerrB   r†   r   rI   r^   ra   r{   r�   r•   r¨   r¹   rG   r*   r(   ú<module>rÆ      sñ  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à +Ð +Ð +Ð +Ð +Ð +Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø CÐ CÐ CÐ CÐ CÐ CØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ @Ð @Ð @Ð @Ð @Ð @à	ˆÔ	˜8Ñ	$Ô	$€ðw
ð w
ð w
ð w
ð w
ñ w
ô w
ð w
ðt8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð0ð ð ð ð<ð ð ð ð23Mð 3Mð 3Mð 3Mðlð ð ð ð&Vð Vð Vð Vðr5ð 5ð 5ð 5ð0.ð .ð .ð .ð .ð .r*   