§
    ™Štjå5  ã                  óD  — d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
 dZ eh d£¦  «        Zd.d„Zd/d„Zd0d„Zd1d2d„Ze	d         Zd3d„Zd4d„Zd5d!„Z G d"„ d#e
¦  «        Z G d$„ d%¦  «        Z G d&„ d'¦  «        Z G d(„ d)¦  «        Z G d*„ d+¦  «        Z G d,„ d-¦  «        ZdS )6u;  Per-channel event â†’ items state machines.

Used both by the projection iterators (`_ValuesProjection`,
`_MessagesProjection`, `_ToolCallsProjection`, `_SubgraphsProjection`) on
`AsyncThreadStream` / `SyncThreadStream`, and by `interleave_projections`,
which drives multiple decoders from one shared subscription.
é    )Úannotations)ÚCallableÚIterableÚMapping)ÚAnyÚLiteralÚProtocol)ÚvaluesÚmessagesÚ
tool_callsÚ	subgraphsÚupdatesÚcheckpointsÚtasks>   ÚinputÚtoolsÚ	lifecycleÚchannelsú	list[str]ÚreturnÚNonec           
     ó–   — | D ]E}|t           v r:|dk    rdnd}t          |›d|› dd                     t          ¦  «        › d�¦  «        ‚ŒFdS )	aM  Reject reserved protocol channel names before they hit the fallback.

    Genuine extension names pass through untouched; only names that
    ``infer_channel`` treats as built-in methods without an interleave decoder
    are rejected, so a typo'd or unsupported protocol channel surfaces an error
    instead of an empty stream.
    r   z (use "tool_calls")Ú z. is not a valid interleave_projections channelz. Supported channels: z, z, or an extension name.N)ÚRESERVED_INTERLEAVE_CHANNELSÚ
ValueErrorÚjoinÚSUPPORTED_INTERLEAVE_CHANNELS)r   ÚchÚhints      ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langgraph_sdk/stream/decoders.pyÚvalidate_interleave_channelsr!   "   s‹   € ð ð ð ˆØÕ-Ð-Ð-Ø,.°'ªM¨MÐ(Ð(¸rˆDÝØð (ð (Àtð (ð (Ø'+§y¢yÕ1NÑ'OÔ'Oð(ð (ð (ñô ð ð .ðð ó    Úparams_fieldr   c                óª   — t          | t          ¦  «        sg S |                      d¦  «        pg }t          |t          ¦  «        rt          |¦  «        ng S )NÚ	namespace)Ú
isinstanceÚdictÚgetÚlist)r#   r%   s     r    Ú_event_namespacer*   4   sP   € Ý�l¥DÑ)Ô)ð Øˆ	Ø× Ò  Ñ-Ô-Ð3°€IÝ(¨µDÑ9Ô9ÐA�4�	‰?Œ?ˆ?¸rÐAr"   Údataúdict[str, Any]ú
str | Nonec                ó|   — |                       d¦  «        p|                       d¦  «        }|�t          |¦  «        nd S )NÚidÚ
message_id©r(   Ústr)r+   r0   s     r    Ú_message_event_idr3   ;   s7   € Ø—’˜$‘”Ð9 4§8¢8¨LÑ#9Ô#9€JØ(Ð4�3ˆz‰?Œ?ˆ?¸$Ð>r"   NÚfallbackr2   c                ó@   — t          | ¦  «        }|�d|› �S |�d|› �S dS )a  Return the routing key for a message-channel event in `active`.

    Keys on `message_id` when available so concurrent messages that share the
    same `run_id` (two AI turns in one agent step) route to independent streams
    rather than colliding on a shared `run:<run_id>` slot.
    Nzmessage:Ú
__single__)r3   )r+   r4   r0   s      r    Ú_message_route_keyr7   @   s>   € õ # 4Ñ(Ô(€JØÐØ&˜*Ð&Ð&Ð&ØÐØ$˜(Ð$Ð$Ð$Øˆ<r"   )ÚstartedÚ	completedÚfailedÚinterruptedÚsegmentútuple[str, str | None]c                óD   — |                       d¦  «        \  }}}||r|nd fS )Nú:)Ú	partition)r<   ÚnameÚsepÚtask_ids       r    Ú_parse_namespace_segmentrD   R   s0   € Ø ×*Ò*¨3Ñ/Ô/Ñ€Dˆ#ˆwØ˜CÐ)�� TÐ)Ð)r"   ú!tuple[SubgraphStatus, str | None]c                ó„   — |                       d¦  «        rdS |                       d¦  «        }|rdt          |¦  «        fS dS )NÚ
interrupts)r;   NÚerrorr:   )r9   Nr1   )r+   rH   s     r    Ú_terminal_from_tasks_resultrI   W   sN   € ð ‡x‚x�ÑÔð #Ø"Ð"Ø�HŠH�WÑÔ€EØð $Ø�˜U™œÐ#Ð#ØÐr"   r%   Úscopeútuple[str, ...]Úboolc                ó˜   — t          | ¦  «        t          |¦  «        dz   k    o't          | d t          |¦  «        …         ¦  «        |k    S )Né   )ÚlenÚtuple)r%   rJ   s     r    Ú_is_direct_childrQ   b   s?   € Ýˆy‰>Œ>�S ™ZœZ¨!™^Ò+ÐWµ°iÀÅ#ÀeÁ*Ä*ÀÔ6MÑ0NÔ0NÐRWÒ0WÐWr"   c                  ó   — e Zd Zdd„ZdS )ÚDecoderÚeventúMapping[str, Any]r   úIterable[Any]c                ó   — d S ©N© )ÚselfrT   s     r    ÚfeedzDecoder.feedg   s   € € € r"   N©rT   rU   r   rV   )Ú__name__Ú
__module__Ú__qualname__r[   rY   r"   r    rS   rS   f   s   € € € € € ØBÐBÐBÐBÐBÐBr"   rS   c                  ó$   — e Zd ZdZddd„Zdd„ZdS )ÚDataDecoderuW  Yields `params.data` from events of a single `method`.

    Covers the channels whose projection is just "emit the payload": `values`,
    `updates`, `checkpoints`, `tasks` â€” the SDK analog of local's
    `Values`/`Updates`/`Checkpoints`/`TasksTransformer`, all of which push
    `params["data"]` unchanged. The REST-state seeding for `values` stays at
    the projection layer; it is a one-shot pre-stream fetch, not part of the
    event state machine.

    Args:
        method: The protocol `method` this decoder consumes.
        namespace: When not `None`, events whose namespace differs are ignored
            (scope filter, mirroring the local transformers' `namespace != scope`
            check). `None` consumes every namespace â€” the historical `values`
            projection behavior, where subscription scoping is handled upstream.
    NÚmethodr2   r%   úlist[str] | Nonec                óD   — || _         |�t          |¦  «        nd | _        d S rX   )Ú_methodr)   Ú
_namespace)rZ   rb   r%   s      r    Ú__init__zDataDecoder.__init__|   s#   € ØˆŒØ-6Ð-B�$˜y™/œ/˜/ÈˆŒˆˆr"   rT   rU   r   rV   c              #  óô   K  — |                      d¦  «        | j        k    rd S |                      d¦  «        pi }| j        �t          |¦  «        | j        k    rd S |                      d¦  «        }|�|V — d S d S )Nrb   Úparamsr+   )r(   re   rf   r*   ©rZ   rT   ri   r+   s       r    r[   zDataDecoder.feed€   sˆ   è è € Ø�9Š9�XÑÔ $¤,Ò.Ð.ØˆFØ—’˜8Ñ$Ô$Ð*¨ˆØŒ?Ð&Õ+;¸FÑ+CÔ+CÀtÄÒ+VÐ+VØˆFØ�zŠz˜&Ñ!Ô!ˆØÐØˆJˆJˆJˆJˆJð Ðr"   rX   )rb   r2   r%   rc   r\   ©r]   r^   r_   Ú__doc__rg   r[   rY   r"   r    ra   ra   j   sP   € € € € € ðð ð"Mð Mð Mð Mð Mðð ð ð ð ð r"   ra   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚMessagesDecoderaW  Yields one chat-model stream per `message-start` event.

    Subsequent events route to the matching stream via `stream.dispatch(data)`.
    Mirrors the per-event body of `_MessagesProjection._messages_iter`
    (`_async/stream.py:404-458`). The subscription open/close and the
    `_root_messages_inbox` drain branch stay at the projection layer.

    Args:
        namespace: Events whose namespace differs are ignored (scope filter).
        stream_factory: Keyword-only `(namespace, node, message_id) -> stream`.
            Sync binds `ChatModelStream`; async binds `AsyncChatModelStream`.
    r%   r   Ústream_factoryúCallable[..., Any]c                óJ   — t          |¦  «        | _        || _        i | _        d S rX   )r)   rf   Ú_stream_factoryÚ_active)rZ   r%   ro   s      r    rg   zMessagesDecoder.__init__™   s$   € õ
 ˜y™/œ/ˆŒØ-ˆÔØ')ˆŒˆˆr"   rT   rU   r   rV   c              #  ó‚  K  — |                      d¦  «        dk    rd S |                      d¦  «        pi }t          |¦  «        | j        k    rd S |                      d¦  «        }t          |t          ¦  «        sd S |                      d¦  «        dk    rÅt          |¦  «        }t          ||¬¦  «        }t          |                      d¦  «        t          ¦  «        r|                      d¦  «        ni }|                      t          | j        ¦  «        |r|                      d	¦  «        nd |¬
¦  «        }|| j	        |<   | 
                    |¦  «         |V — d S t          |¦  «        }| j	                              |¦  «        }|€Q|dk    rKt          | j	        ¦  «        dk    r3t          t          | j	                             ¦   «         ¦  «        ¦  «        }|€d S | 
                    |¦  «         |                      d¦  «        dv r8t          | j	                             ¦   «         ¦  «        D ]\  }}	|	|u r| j	        |= Œd S d S )Nrb   r   ri   r+   rT   zmessage-start)r4   ÚmetadataÚlanggraph_node)r%   Únoder0   r6   rN   )zmessage-finishrH   )r(   r*   rf   r&   r'   r3   r7   rr   r)   rs   ÚdispatchrO   ÚnextÚiterr
   Úitems)
rZ   rT   ri   r+   r0   Úkeyru   ÚstreamÚ	route_keyÚ	candidates
             r    r[   zMessagesDecoder.feed¢   sG  è è € Ø�9Š9�XÑÔ *Ò,Ð,ØˆFØ—’˜8Ñ$Ô$Ð*¨ˆÝ˜FÑ#Ô# t¤Ò6Ð6ØˆFØ�zŠz˜&Ñ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	ØˆFØ�8Š8�GÑÔ Ò/Ð/Ý*¨4Ñ0Ô0ˆJÝ$ T°JÐ?Ñ?Ô?ˆCå(2°4·8²8¸JÑ3GÔ3GÍÑ(NÔ(NÐV�—’˜Ñ$Ô$Ð$ÐTVð ð ×)Ò)Ý˜tœÑ/Ô/Ø7?ÐI�X—\’\Ð"2Ñ3Ô3Ð3ÀTØ%ð *ñ ô ˆFð
 !'ˆDŒL˜ÑØ�OŠO˜DÑ!Ô!Ð!ØˆLˆLˆLˆLˆLå$ TÑ*Ô*ˆCØ”\×%Ò% cÑ*Ô*ˆFØˆ~ #¨Ò"5Ð"5½#¸d¼lÑ:KÔ:KÈqÒ:PÐ:PÝ�d 4¤<×#6Ò#6Ñ#8Ô#8Ñ9Ô9Ñ:Ô:�Øˆ~Ø�Ø�OŠO˜DÑ!Ô!Ð!Ø�xŠx˜Ñ Ô Ð$?Ð?Ð?Ý,0°´×1CÒ1CÑ1EÔ1EÑ,FÔ,Fð 4ð 4Ñ(�I˜yØ  FÐ*Ð*Ø œL¨Ð3øð @Ð?ð4ð 4r"   N)r%   r   ro   rp   r\   rk   rY   r"   r    rn   rn   ‹   sF   € € € € € ðð ð*ð *ð *ð *ð"4ð "4ð "4ð "4ð "4ð "4r"   rn   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚToolCallsDecodera¿  Yields one tool-call handle per `tool-started` event.

    Mirrors the per-event body of `_ToolCallsProjection._tool_calls_iter`
    (`_async/stream.py:1168-1217`). The thread register/unregister and the
    terminal-error-on-close finally stay at the projection / wrapper layer.

    Args:
        namespace: Events whose namespace differs are ignored.
        handle_factory: Keyword-only `(tool_call_id, name, input, namespace) -> handle`.
    r%   r   Úhandle_factoryrp   c                óJ   — t          |¦  «        | _        || _        i | _        d S rX   )r)   rf   Ú_handle_factoryrs   )rZ   r%   r‚   s      r    rg   zToolCallsDecoder.__init__Ó   s"   € Ý˜y™/œ/ˆŒØ-ˆÔØ')ˆŒˆˆr"   rT   rU   r   rV   c              #  óÆ  K  — |                      d¦  «        dk    rd S |                      d¦  «        pi }t          |¦  «        | j        k    rd S |                      d¦  «        }t          |t          ¦  «        sd S |                      d¦  «        }t          |t
          ¦  «        sd S |                      d¦  «        }|dk    rz|                      d¦  «        }|                      |t          |t
          ¦  «        r|nd	|                      d
¦  «        t          | j        ¦  «        ¬¦  «        }|| j        |<   |V — d S |dk    ra| j                              |¦  «        }|                      d¦  «        }|�,t          |t
          ¦  «        r| 	                    |¦  «         d S d S d S |dk    rI| j         
                    |d ¦  «        }|�*|                     |                      d¦  «        ¦  «         d S d S |dk    rg| j         
                    |d ¦  «        }|�L|                      d¦  «        }	|                     t          |	rt          |	¦  «        nd¦  «        ¦  «         d S d S d S )Nrb   r   ri   r+   Útool_call_idrT   ztool-startedÚ	tool_namer   r   )r†   rA   r   r%   ztool-output-deltaÚdeltaztool-finishedÚoutputz
tool-errorÚmessagezTool call errored)r(   r*   rf   r&   r'   r2   r„   r)   rs   Ú_push_deltaÚpopÚ_finishÚ_failÚRuntimeError)
rZ   rT   ri   r+   r†   Ú
event_typerA   Úhandlerˆ   rŠ   s
             r    r[   zToolCallsDecoder.feedØ   s~  è è € Ø�9Š9�XÑÔ 'Ò)Ð)ØˆFØ—’˜8Ñ$Ô$Ð*¨ˆÝ˜FÑ#Ô# t¤Ò6Ð6ØˆFØ�zŠz˜&Ñ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	ØˆFØ—x’x Ñ/Ô/ˆÝ˜,­Ñ,Ô,ð 	ØˆFØ—X’X˜gÑ&Ô&ˆ
Ø˜Ò'Ð'Ø—8’8˜KÑ(Ô(ˆDØ×)Ò)Ø)Ý'¨­cÑ2Ô2Ð:�T�T¸Ø—h’h˜wÑ'Ô'Ý˜tœÑ/Ô/ð	 *ñ ô ˆFð *0ˆDŒL˜Ñ&ØˆLˆLˆLˆLˆLØÐ.Ò.Ð.Ø”\×%Ò% lÑ3Ô3ˆFØ—H’H˜WÑ%Ô%ˆEØÐ!¥j°½Ñ&<Ô&<Ð!Ø×"Ò" 5Ñ)Ô)Ð)Ð)Ð)ð "Ð!Ð!Ð!à˜?Ò*Ð*Ø”\×%Ò% l°DÑ9Ô9ˆFØÐ!Ø—’˜tŸxšx¨Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2ð "Ð!à˜<Ò'Ð'Ø”\×%Ò% l°DÑ9Ô9ˆFØÐ!ØŸ(š( 9Ñ-Ô-�Ø—’Ý °Ð!Q¥ W¡¤ Ð>QÑRÔRñô ð ð ð ð	 (Ð'à!Ð!r"   N)r%   r   r‚   rp   r\   rk   rY   r"   r    r�   r�   Ç   sF   € € € € € ð	ð 	ð*ð *ð *ð *ð
&ð &ð &ð &ð &ð &r"   r�   c                  ó2   — e Zd ZdZdd„Zdd„Zdd„Zdd„ZdS )ÚSubgraphsDecoderaâ  Discovers child subgraph handles and fans out events to active ones.

    Mirrors the per-event body of `_SubgraphsProjection._subgraphs_iter`
    (`_async/stream.py:963-1041`) plus `_apply_tasks_result`. Root-inbox
    forwarding and terminal-status-on-close stay at the projection / wrapper
    layer.

    Args:
        scope: Tuple-form namespace of this decoder's parent. `()` for root.
        handle_factory: Keyword-only `(path, graph_name, trigger_call_id) -> handle`.
    rJ   rK   r‚   rp   c                óV   — || _         || _        i | _        t          ¦   «         | _        d S rX   )Ú_scoper„   rs   ÚsetÚ_seen)rZ   rJ   r‚   s      r    rg   zSubgraphsDecoder.__init__  s'   € ØˆŒØ-ˆÔØ35ˆŒÝ+.©5¬5ˆŒ
ˆ
ˆ
r"   rT   rU   r   rV   c              #  ó  K  — |                      d¦  «        pi }t          |¦  «        }|                      d¦  «        }t          |t          ¦  «        sd S |                      d¦  «        }t	          |¦  «        }| j                             ¦   «         D ]L\  }}t          |¦  «        }	t          |¦  «        |	k    r%|d |	…         |k    r|                     |¦  «          nŒM|dk    rPd|v r|  	                    ||¦  «         d S t          || j        ¦  «        r|                      |¦  «        E d {V —† d S d S |dk    rK|                      d¦  «        dk    r4t          || j        ¦  «        r!|                      |¦  «        E d {V —† d S d S d S d S )	Nri   r+   rb   r   Úresultr   rT   r8   )r(   r*   r&   r'   rP   rs   r{   rO   Ú_push_eventÚ_apply_tasks_resultrQ   r•   Ú	_discover)
rZ   rT   ri   r%   r+   rb   Úns_tupleÚ
child_pathÚchild_handleÚ	child_lens
             r    r[   zSubgraphsDecoder.feed  sÐ  è è € Ø—’˜8Ñ$Ô$Ð*¨ˆÝ$ VÑ,Ô,ˆ	Ø�zŠz˜&Ñ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	ØˆFØ—’˜8Ñ$Ô$ˆõ ˜Ñ#Ô#ˆØ(,¬×(:Ò(:Ñ(<Ô(<ð 	ð 	Ñ$ˆJ˜Ý˜J™œˆIÝ�8‰}Œ} 	Ò)Ð)¨h°z¸	°zÔ.BÀjÒ.PÐ.PØ×(Ò(¨Ñ/Ô/Ð/Ø�øð �WÒÐØ˜4ÐÐØ×(Ò(¨°DÑ9Ô9Ð9Ð9Ð9Ý! )¨T¬[Ñ9Ô9ð 5ØŸ>š>¨)Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð5ð 5ð �kÒ!Ð!Ø—’˜Ñ!Ô! YÒ.Ð.Ý  ¨D¬KÑ8Ô8ð /ð —~’~ iÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ð	 "Ð!Ø.Ð.Ð.Ð.r"   r%   r   c              #  óò   K  — t          |¦  «        }|| j        v rd S | j                             |¦  «         t          |d         ¦  «        \  }}|                      ||pd |¬¦  «        }|| j        |<   |V — d S )Néÿÿÿÿ)ÚpathÚ
graph_nameÚtrigger_call_id)rP   r—   ÚaddrD   r„   rs   )rZ   r%   r£   r¤   r¥   r‘   s         r    rœ   zSubgraphsDecoder._discover1  s’   è è € Ý�YÑÔˆØ�4”:ÐÐØˆFØŒ
�Š�tÑÔÐÝ&>¸tÀB¼xÑ&HÔ&HÑ#ˆ
�OØ×%Ò%ØØ!Ð) TØ+ð &ñ 
ô 
ˆð
 $ˆŒ�TÑØˆˆˆˆˆr"   r+   r,   r   c                óD  — |                      d¦  «        }|sd S t          |¦  «        }t          | j                             ¦   «         ¦  «        D ]P\  }}|d d…         |k    rŒ|j        |k    rŒ t          |¦  «        \  }}|                     ||¦  «         | j        |= ŒQd S )Nr/   r¢   )r(   rP   r)   rs   r{   r¥   rI   r�   )	rZ   r%   r+   Ú	result_idÚparent_pathrž   r‘   ÚstatusrH   s	            r    r›   z$SubgraphsDecoder._apply_tasks_result?  s¸   € Ø—H’H˜T‘N”Nˆ	Øð 	ØˆFÝ˜IÑ&Ô&ˆÝ"& t¤|×'9Ò'9Ñ';Ô';Ñ"<Ô"<ð 	)ð 	)ÑˆJ˜Ø˜#˜2˜#Œ +Ò-Ð-ØØÔ%¨Ò2Ð2ØÝ7¸Ñ=Ô=‰MˆF�EØ�NŠN˜6 5Ñ)Ô)Ð)Ø”˜ZÐ(Ð(ð	)ð 	)r"   N)rJ   rK   r‚   rp   r\   )r%   r   r   rV   )r%   r   r+   r,   r   r   )r]   r^   r_   rl   rg   r[   rœ   r›   rY   r"   r    r“   r“     sn   € € € € € ð
ð 
ð1ð 1ð 1ð 1ð1ð 1ð 1ð 1ð:ð ð ð ð)ð )ð )ð )ð )ð )r"   r“   c                  ó"   — e Zd ZdZdd„Zdd	„Zd
S )ÚExtensionsDecoderaI  Yields `params.data` from one named custom channel.

    Mirrors `_ExtensionProjection._iter` (`_async/stream.py:1278-1299`), with
    an added name filter so it can share one subscription in interleave.

    Args:
        name: The extension name. Only `custom` events whose `data["name"]`
            matches are consumed.
    rA   r2   c                ó6   — |st          d¦  «        ‚|| _        d S )Nz!extension name must be non-empty.)r   Ú_name)rZ   rA   s     r    rg   zExtensionsDecoder.__init__Y  s%   € Øð 	BÝÐ@ÑAÔAÐAØˆŒ
ˆ
ˆ
r"   rT   rU   r   rV   c              #  ó  K  — |                      d¦  «        dk    rd S |                      d¦  «        pi }|                      d¦  «        }t          |t          ¦  «        sd S |                      d¦  «        | j        k    rd S |V — d S )Nrb   Úcustomri   r+   rA   )r(   r&   r'   r®   rj   s       r    r[   zExtensionsDecoder.feed^  s‹   è è € Ø�9Š9�XÑÔ (Ò*Ð*ØˆFØ—’˜8Ñ$Ô$Ð*¨ˆØ�zŠz˜&Ñ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	ØˆFØ�8Š8�FÑÔ˜tœzÒ)Ð)ØˆFØˆ
ˆ
ˆ
ˆ
ˆ
r"   N)rA   r2   r\   rk   rY   r"   r    r¬   r¬   N  sF   € € € € € ðð ðð ð ð ð
	ð 	ð 	ð 	ð 	ð 	r"   r¬   )r   r   r   r   )r#   r   r   r   )r+   r,   r   r-   rX   )r+   r,   r4   r-   r   r2   )r<   r2   r   r=   )r+   r,   r   rE   )r%   r   rJ   rK   r   rL   )rl   Ú
__future__r   Úcollections.abcr   r   r   Útypingr   r   r	   r   Ú	frozensetr   r!   r*   r3   r7   ÚSubgraphStatusrD   rI   rQ   rS   ra   rn   r�   r“   r¬   rY   r"   r    ú<module>r¶      s6  ððð ð #Ð "Ð "Ð "Ð "Ð "à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð!Ð ð   )˜yÐ)HÐ)HÐ)HÑIÔIÐ ðð ð ð ð$Bð Bð Bð Bð?ð ?ð ?ð ?ð
ð ð ð ð ð ÐHÔI€ð*ð *ð *ð *ð
ð ð ð ðXð Xð Xð XðCð Cð Cð Cð Cˆhñ Cô Cð Cðð ð ð ð ñ ô ð ðB94ð 94ð 94ð 94ð 94ñ 94ô 94ð 94ðx7ð 7ð 7ð 7ð 7ñ 7ô 7ð 7ðtJ)ð J)ð J)ð J)ð J)ñ J)ô J)ð J)ðZð ð ð ð ñ ô ð ð ð r"   