§
    ‰eîid9  ã                   óV  — d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	  ej
        ¦   «         dk    ZdZdefd„Z e¦   «         Zddedz  d	edz  defd
„Zdefd„ZeZdZdedefd„Zdeee         ef         fd„Zdee         fd„Zdedee         defd„Z G d„ de¦  «        ZdS )uE   Local execution environment â€” spawn-per-call with session snapshot.é    N)ÚBaseEnvironmentÚ_pipe_stdinÚWindowsÚ_HERMES_FORCE_Úreturnc                  ó`  — t          ¦   «         } 	 ddlm} |                     ¦   «         D ]=}|                      |j        ¦  «         |j        r|                      |j        ¦  «         Œ>n# t          $ r Y nw xY w	 ddl	m
} |                     ¦   «         D ]d\  }}|                     d¦  «        }|dv r|                      |¦  «         Œ4|dk    r*|                     d¦  «        r|                      |¦  «         Œen# t          $ r Y nw xY w|                      h d£¦  «         t          | ¦  «        S )	z=Derive the blocklist from provider, tool, and gateway config.r   )ÚPROVIDER_REGISTRY)ÚOPTIONAL_ENV_VARSÚcategory>   ÚtoolÚ	messagingÚsettingÚpassword>;   ÚGH_TOKENÚHASS_URLÚ	LLM_MODELÚ
HASS_TOKENÚXAI_API_KEYÚGROQ_API_KEYÚEMAIL_ADDRESSÚGITHUB_APP_IDÚOPENAI_ORG_IDÚWHATSAPP_MODEÚCOHERE_API_KEYÚEMAIL_PASSWORDÚGOOGLE_API_KEYÚMODAL_TOKEN_IDÚOPENAI_API_KEYÚSIGNAL_ACCOUNTÚANTHROPIC_TOKENÚDAYTONA_API_KEYÚEMAIL_IMAP_HOSTÚEMAIL_SMTP_HOSTÚMISTRAL_API_KEYÚOPENAI_API_BASEÚOPENAI_BASE_URLÚSIGNAL_HTTP_URLÚDEEPSEEK_API_KEYÚHELICONE_API_KEYÚPARALLEL_API_KEYÚTOGETHER_API_KEYÚWHATSAPP_ENABLEDÚFIRECRAWL_API_KEYÚFIRECRAWL_API_URLÚFIREWORKS_API_KEYÚANTHROPIC_BASE_URLÚEMAIL_HOME_ADDRESSÚMODAL_TOKEN_SECRETÚOPENROUTER_API_KEYÚPERPLEXITY_API_KEYÚSLACK_HOME_CHANNELÚDISCORD_AUTO_THREADÚOPENAI_ORGANIZATIONÚSIGNAL_HOME_CHANNELÚSLACK_ALLOWED_USERSÚDISCORD_HOME_CHANNELÚSIGNAL_ALLOWED_USERSÚGATEWAY_ALLOWED_USERSÚSIGNAL_IGNORE_STORIESÚTELEGRAM_HOME_CHANNELÚWHATSAPP_ALLOWED_USERSÚCLAUDE_CODE_OAUTH_TOKENÚDISCORD_REQUIRE_MENTIONÚEMAIL_HOME_ADDRESS_NAMEÚSLACK_HOME_CHANNEL_NAMEÚSIGNAL_HOME_CHANNEL_NAMEÚDISCORD_HOME_CHANNEL_NAMEÚGITHUB_APP_INSTALLATION_IDÚSIGNAL_GROUP_ALLOWED_USERSÚTELEGRAM_HOME_CHANNEL_NAMEÚGITHUB_APP_PRIVATE_KEY_PATHÚDISCORD_FREE_RESPONSE_CHANNELS)ÚsetÚhermes_cli.authr	   ÚvaluesÚupdateÚapi_key_env_varsÚbase_url_env_varÚaddÚImportErrorÚhermes_cli.configr
   ÚitemsÚgetÚ	frozenset)Úblockedr	   Úpconfigr
   ÚnameÚmetadatar   s          ú:/home/div/.hermes/hermes-agent/tools/environments/local.pyÚ_build_provider_env_blocklistr\      s�  € å™œ€GðØ5Ð5Ð5Ð5Ð5Ð5Ø(×/Ò/Ñ1Ô1ð 	6ð 	6ˆGØ�NŠN˜7Ô3Ñ4Ô4Ð4ØÔ'ð 6Ø—’˜GÔ4Ñ5Ô5Ð5øð	6øõ ð ð ð Øˆðøøøð	Ø7Ð7Ð7Ð7Ð7Ð7Ø/×5Ò5Ñ7Ô7ð 	"ð 	"‰NˆD�(Ø—|’| JÑ/Ô/ˆHØÐ0Ð0Ð0Ø—’˜DÑ!Ô!Ð!Ð!Ø˜YÒ&Ð&¨8¯<ª<¸
Ñ+CÔ+CÐ&Ø—’˜DÑ!Ô!Ð!øð	"øõ ð ð ð Øˆðøøøð ‡N‚Nð <ð <ð <ñ <ô <ð <õz �WÑÔÐs%   �AA) Á)
A6Á5A6Á:A?C: Ã:
DÄDÚbase_envÚ	extra_envc                 óð  — 	 ddl m} n# t          $ r d„ }Y nw xY wi }| pi                      ¦   «         D ]9\  }}|                     t
          ¦  «        rŒ |t          vs ||¦  «        r|||<   Œ:|pi                      ¦   «         D ]Z\  }}|                     t
          ¦  «        r"|t          t
          ¦  «        d…         }|||<   ŒA|t          vs ||¦  «        r|||<   Œ[ddlm	}  |¦   «         }|r||d<   |S )z<Filter Hermes-managed secrets from a subprocess environment.r   ©Úis_env_passthroughc                 ó   — dS ©NF© ©Ú_s    r[   ú<lambda>z*_sanitize_subprocess_env.<locals>.<lambda>s   ó   €  E€ ó    N©Úget_subprocess_homeÚHOME)
Útools.env_passthroughra   Ú	ExceptionrT   Ú
startswithÚ!_HERMES_PROVIDER_ENV_FORCE_PREFIXÚ_HERMES_PROVIDER_ENV_BLOCKLISTÚlenÚhermes_constantsrk   )	r]   r^   Ú_is_passthroughÚ	sanitizedÚkeyÚvalueÚreal_keyrk   Ú_profile_homes	            r[   Ú_sanitize_subprocess_envrz   n   sf  € ð*ØOÐOÐOÐOÐOÐOÐOøÝð *ð *ð *Ø)˜/ˆˆˆð*øøøð !#€Ià�~ 2×,Ò,Ñ.Ô.ð #ð #‰
ˆˆUØ�>Š>Õ;Ñ<Ô<ð 	ØØÕ4Ð4Ð4¸¸ÈÑ8LÔ8LÐ4Ø"ˆI�c‰Nøà � B×-Ò-Ñ/Ô/ð #ð #‰
ˆˆUØ�>Š>Õ;Ñ<Ô<ð 	#Ø�3Õ@ÑAÔAÐBÐBÔCˆHØ"'ˆI�hÑÐØÕ6Ð6Ð6¸/¸/È#Ñ:NÔ:NÐ6Ø"ˆI�c‰Nøð 5Ð4Ð4Ð4Ð4Ð4Ø'Ð'Ñ)Ô)€MØð *Ø)ˆ	�&ÑàÐó   ‚	 ‰˜c            	      ó¨  — t           s{t          j        d¦  «        pft          j                             d¦  «        rdndpCt          j                             d¦  «        rdndp t          j                             d¦  «        pdS t          j                             d¦  «        } | r!t          j                             | ¦  «        r| S t          j        d¦  «        }|r|S t          j                             t          j                             dd	¦  «        d
dd¦  «        t          j                             t          j                             dd¦  «        d
dd¦  «        t          j                             t          j                             dd¦  «        dd
dd¦  «        fD ]'}|r#t          j                             |¦  «        r|c S Œ(t          d¦  «        ‚)z Find bash for command execution.Úbashz/usr/bin/bashNz	/bin/bashÚSHELLz/bin/shÚHERMES_GIT_BASH_PATHÚProgramFileszC:\Program FilesÚGitÚbinzbash.exezProgramFiles(x86)zC:\Program Files (x86)ÚLOCALAPPDATAÚ ÚProgramsz®Git Bash not found. Hermes Agent requires Git for Windows on Windows.
Install it from: https://git-scm.com/download/win
Or set HERMES_GIT_BASH_PATH to your bash.exe location.)
Ú_IS_WINDOWSÚshutilÚwhichÚosÚpathÚisfileÚenvironrU   ÚjoinÚRuntimeError)ÚcustomÚfoundÚ	candidates      r[   Ú
_find_bashr’   �   s§  € åð 
åŒL˜Ñ Ô ð Ý#%¤7§>¢>°/Ñ#BÔ#BÐL��Èðå!œwŸ~š~¨kÑ:Ô:ÐD��Àðõ Œz�~Š~˜gÑ&Ô&ðð ð	
õ ŒZ�^Š^Ð2Ñ3Ô3€FØð •"”'—.’. Ñ(Ô(ð ØˆåŒL˜Ñ Ô €EØð Øˆõ 	Œ�Š•R”Z—^’^ NÐ4GÑHÔHÈ%ÐQVÐXbÑcÔcÝ
Œ�Š•R”Z—^’^Ð$7Ð9RÑSÔSÐUZÐ\aÐcmÑnÔnÝ
Œ�Š•R”Z—^’^ N°BÑ7Ô7¸ÀUÈEÐS]Ñ^Ô^ðð ð ˆ	ð
 ð 	�œŸš¨	Ñ2Ô2ð 	ØÐÐÐøå
ð	Añô ð ri   za/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binÚenvc                 ó  — 	 ddl m} n# t          $ r d„ }Y nw xY wt          t          j        | z  ¦  «        }i }|                     ¦   «         D ]Z\  }}|                     t          ¦  «        r"|t          t          ¦  «        d…         }|||<   ŒA|t          vs ||¦  «        r|||<   Œ[|                     dd¦  «        }d|                     d¦  «        vr|r|› dt          › �nt          |d<   dd	lm}  |¦   «         }	|	r|	|d
<   |S )zDBuild a run environment with a sane PATH and provider-var stripping.r   r`   c                 ó   — dS rc   rd   re   s    r[   rg   z_make_run_env.<locals>.<lambda>¿   rh   ri   NÚPATHr„   z/usr/binú:rj   rl   )rm   ra   rn   Údictr‰   rŒ   rT   ro   rp   rr   rq   rU   ÚsplitÚ
_SANE_PATHrs   rk   )
r“   rt   ÚmergedÚrun_envÚkÚvrx   Úexisting_pathrk   ry   s
             r[   Ú_make_run_envr    º   s^  € ð*ØOÐOÐOÐOÐOÐOÐOøÝð *ð *ð *Ø)˜/ˆˆˆð*øøøõ •"”*˜sÑ"Ñ#Ô#€FØ€GØ—’‘”ð ð ‰ˆˆ1Ø�<Š<Õ9Ñ:Ô:ð 	Ø�Õ>Ñ?Ô?Ð@Ð@ÔAˆHØ !ˆG�HÑÐØÕ4Ð4Ð4¸¸ÈÑ8JÔ8JÐ4ØˆG�A‰JøØ—K’K ¨Ñ+Ô+€MØ˜×,Ò,¨SÑ1Ô1Ð1Ð1Ø=JÐZ˜]Ð9Ð9­ZÐ9Ð9Ð9ÕPZˆ�‰ð
 5Ð4Ð4Ð4Ð4Ð4Ø'Ð'Ñ)Ô)€MØð (Ø'ˆ�‰à€Nr{   c                  ó<  — 	 ddl m}   | ¦   «         pi }|                     d¦  «        pi }|                     d¦  «        pg }t          |t          ¦  «        sg }t          |                     dd¦  «        ¦  «        }d„ |D ¦   «         |fS # t          $ r g dfcY S w xY w)uÐ   Return (shell_init_files, auto_source_bashrc) from config.yaml.

    Best-effort â€” returns sensible defaults on any failure so terminal
    execution never breaks because the config file is unreadable.
    r   )Úload_configÚterminalÚshell_init_filesÚauto_source_bashrcTc                 ó0   — g | ]}|¯t          |¦  «        ‘ŒS rd   )Ústr)Ú.0Úfs     r[   ú
<listcomp>z4_read_terminal_shell_init_config.<locals>.<listcomp>ç   s#   € Ð+Ð+Ð+˜1¨Ð+•�A‘”Ð+Ð+Ð+ri   )rS   r¢   rU   Ú
isinstanceÚlistÚboolrn   )r¢   ÚcfgÚterminal_cfgÚfilesÚauto_bashrcs        r[   Ú _read_terminal_shell_init_configr²   Ø   sÎ   € ðØ1Ð1Ð1Ð1Ð1Ð1àˆk‰mŒmÐ!˜rˆØ—w’w˜zÑ*Ô*Ð0¨bˆØ× Ò Ð!3Ñ4Ô4Ð:¸ˆÝ˜%¥Ñ&Ô&ð 	ØˆEÝ˜<×+Ò+Ð,@À$ÑGÔGÑHÔHˆØ+Ð+ Ð+Ñ+Ô+¨[Ð8Ð8øÝð ð ð Ø�4ˆxˆˆˆðøøøs   ‚BB
 Â
BÂBc                  ó²  — t          ¦   «         \  } }g }| r|                     | ¦  «         n |rt          s|                     g d¢¦  «         g }|D ]†}	 t          j                             t          j                             |¦  «        ¦  «        }n# t          $ r Y ŒLw xY w|r4t          j                             |¦  «        r| 	                    |¦  «         Œ‡|S )uh  Resolve the list of files to source before the login-shell snapshot.

    Expands ``~`` and ``${VAR}`` references and drops anything that doesn't
    exist on disk, so a missing ``~/.bashrc`` never breaks the snapshot.
    The ``auto_source_bashrc`` path runs only when the user hasn't supplied
    an explicit list â€” once they have, Hermes trusts them.
    )z
~/.profilez~/.bash_profilez	~/.bashrc)
r²   Úextendr†   r‰   rŠ   Ú
expandvarsÚ
expanduserrn   r‹   Úappend)Úexplicitr±   Ú
candidatesÚresolvedÚrawrŠ   s         r[   Ú_resolve_shell_init_filesr¼   ì   sü   € õ =Ñ>Ô>Ñ€Hˆkà€JØð JØ×Ò˜(Ñ#Ô#Ð#Ð#Ø	ð J�[ð Jð  	×ÒÐHÐHÐHÑIÔIÐIà€HØð "ð "ˆð	Ý”7×%Ò%¥b¤g×&8Ò&8¸Ñ&=Ô&=Ñ>Ô>ˆDˆDøÝð 	ð 	ð 	ØˆHð	øøøàð 	"•B”G—N’N 4Ñ(Ô(ð 	"Ø�OŠO˜DÑ!Ô!Ð!øØ€Os   Á<BÂ
BÂBÚ
cmd_stringr°   c                 ó¸   — |s| S dg}|D ]4}|                      dd¦  «        }|                     d|› d|› d�¦  «         Œ5d                     |¦  «        dz   }|| z   S )a  Prepend ``source <file>`` lines (guarded + silent) to a bash script.

    Each file is wrapped so a failing rc file doesn't abort the whole
    bootstrap: ``set +e`` keeps going on errors, ``2>/dev/null`` hides
    noisy prompts, and ``|| true`` neutralises the exit status.
    zset +eú'z'\''z[ -r 'z
' ] && . 'z' 2>/dev/null || trueÚ
)Úreplacer·   r�   )r½   r°   Úprelude_partsrŠ   ÚsafeÚpreludes         r[   Ú_prepend_shell_initrÅ     s‹   € ð ð ØÐà�J€MØð Sð Sˆð �|Š|˜C Ñ)Ô)ˆØ×ÒÐQ dÐQÐQ°dÐQÐQÐQÑRÔRÐRÐRØ�iŠi˜Ñ&Ô&¨Ñ-€GØ�ZÑÐri   c                   óŒ   ‡ — e Zd ZdZddededefˆ fd„Zd	efd
„Zddddœdede	dededz  d	e
j        f
d„Zd„ Zdefd„Zd„ Zˆ xZS )ÚLocalEnvironmentzàRun commands directly on the host machine.

    Spawn-per-call: every execute() spawns a fresh bash process.
    Session snapshot preserves env vars across calls.
    CWD persists via file-based read after each command.
    r„   é<   NÚcwdÚtimeoutr“   c                 óž   •— t          ¦   «                              |pt          j        ¦   «         ||¬¦  «         |                      ¦   «          d S )N)rÉ   rÊ   r“   )ÚsuperÚ__init__r‰   ÚgetcwdÚinit_session)ÚselfrÉ   rÊ   r“   Ú	__class__s       €r[   rÍ   zLocalEnvironment.__init__3  sE   ø€ Ý‰Œ×Ò˜SÐ/¥B¤I¡K¤K¸ÀcÐÑJÔJÐJØ×ÒÑÔÐÐÐri   r   c                 óú  — dD ]k}| j                              |¦  «        pt          j                             |¦  «        }|r.|                     d¦  «        r|                     d¦  «        pdc S Œlt          j                             d¦  «        r.t          j        dt          j	        t          j
        z  ¦  «        rdS t          j        ¦   «         }|                     d¦  «        r|                     d¦  «        pdS dS )a6  Return a shell-safe writable temp dir for local execution.

        Termux does not provide /tmp by default, but exposes a POSIX TMPDIR.
        Prefer POSIX-style env vars when available, keep using /tmp on regular
        Unix systems, and only fall back to tempfile.gettempdir() when it also
        resolves to a POSIX path.

        Check the environment configured for this backend first so callers can
        override the temp root explicitly (for example via terminal.env or a
        custom TMPDIR), then fall back to the host process environment.
        )ÚTMPDIRÚTMPÚTEMPú/z/tmp)r“   rU   r‰   rŒ   ro   ÚrstriprŠ   ÚisdirÚaccessÚW_OKÚX_OKÚtempfileÚ
gettempdir)rÐ   Úenv_varr‘   s      r[   Úget_temp_dirzLocalEnvironment.get_temp_dir7  sï   € ð 1ð 	4ð 	4ˆGØœŸš WÑ-Ô-ÐHµ´·²ÀÑ1HÔ1HˆIØð 4˜Y×1Ò1°#Ñ6Ô6ð 4Ø ×'Ò'¨Ñ,Ô,Ð3°Ð3Ð3Ð3øåŒ7�=Š=˜Ñ Ô ð 	¥R¤Y¨vµr´wÅÄÑ7HÑ%IÔ%Ið 	Ø�6åÔ'Ñ)Ô)ˆ	Ø×Ò Ñ$Ô$ð 	0Ø×#Ò# CÑ(Ô(Ð/¨CÐ/àˆvri   Féx   )ÚloginrÊ   Ú
stdin_datar½   rá   râ   c                ó�  — t          ¦   «         }|r t          ¦   «         }|rt          ||¦  «        }|r|dd|gn|d|g}t          | j        ¦  «        }t          j        |d|ddt
          j        t
          j        |�t
          j        nt
          j	        t          rd nt          j        | j        ¬¦
  «
        }	|�t          |	|¦  «         |	S )Nz-lz-cTzutf-8rÁ   )	Útextr“   ÚencodingÚerrorsÚstdoutÚstderrÚstdinÚ
preexec_fnrÉ   )r’   r¼   rÅ   r    r“   Ú
subprocessÚPopenÚPIPEÚSTDOUTÚDEVNULLr†   r‰   ÚsetsidrÉ   r   )
rÐ   r½   rá   rÊ   râ   r}   Ú
init_filesÚargsrœ   Úprocs
             r[   Ú	_run_bashzLocalEnvironment._run_bashQ  sÛ   € õ ‰|Œ|ˆð ð 	IÝ2Ñ4Ô4ˆJØð IÝ0°¸ZÑHÔH�
Ø16ÐT��d˜D *Ð-Ð-¸TÀ4ÈÐ<TˆÝ ¤Ñ)Ô)ˆåÔØØØØØÝ”?ÝÔ$Ø%/Ð%;•*”/�/ÅÔASÝ*Ð9�t�tµ´	Ø”ð
ñ 
ô 
ˆð Ð!Ý˜˜jÑ)Ô)Ð)àˆri   c                 óÈ  — 	 t           r|                     ¦   «          dS t          j        |j        ¦  «        }t          j        |t          j        ¦  «         	 |                     d¬¦  «         dS # t          j
        $ r# t          j        |t          j        ¦  «         Y dS w xY w# t          t          f$ r+ 	 |                     ¦   «          Y dS # t          $ r Y Y dS w xY ww xY w)z-Kill the entire process group (all children).g      ð?)rÊ   N)r†   Ú	terminater‰   ÚgetpgidÚpidÚkillpgÚsignalÚSIGTERMÚwaitrë   ÚTimeoutExpiredÚSIGKILLÚProcessLookupErrorÚPermissionErrorÚkillrn   )rÐ   ró   Úpgids      r[   Ú_kill_processzLocalEnvironment._kill_processt  s   € ð	Ýð 4Ø—’Ñ Ô Ð Ð Ð å”z $¤(Ñ+Ô+�Ý”	˜$¥¤Ñ/Ô/Ð/ð4Ø—I’I c�IÑ*Ô*Ð*Ð*Ð*øÝ!Ô0ð 4ð 4ð 4Ý”I˜d¥F¤NÑ3Ô3Ð3Ð3Ð3Ð3ð4øøøøå"¥OÐ4ð 	ð 	ð 	ðØ—	’	‘”����øÝð ð ð Ø���ðøøøð	øøøsL   ‚B% Ÿ8B% ÁA0 Á0.B"ÂB% Â!B"Â"B% Â%C!Â7CÃ
CÃC!ÃCÃC!Úresultc                 óä   — 	 t          | j        ¦  «                             ¦   «                              ¦   «         }|r|| _        n# t
          t          f$ r Y nw xY w|                      |¦  «         dS )z;Read CWD from temp file (local-only, no round-trip needed).N)ÚopenÚ	_cwd_fileÚreadÚstriprÉ   ÚOSErrorÚFileNotFoundErrorÚ_extract_cwd_from_output)rÐ   r  Úcwd_paths      r[   Ú_update_cwdzLocalEnvironment._update_cwd†  s€   € ð	Ý˜DœNÑ+Ô+×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ˆHØð $Ø#�”øøÝÕ*Ð+ð 	ð 	ð 	ØˆDð	øøøð 	×%Ò% fÑ-Ô-Ð-Ð-Ð-s   ‚AA ÁAÁAc                 ór   — | j         | j        fD ]'}	 t          j        |¦  «         Œ# t          $ r Y Œ$w xY wdS )zClean up temp files.N)Ú_snapshot_pathr  r‰   Úunlinkr
  )rÐ   r©   s     r[   ÚcleanupzLocalEnvironment.cleanup’  sY   € àÔ% t¤~Ð6ð 	ð 	ˆAðÝ”	˜!‘”��øÝð ð ð Ø�ðøøøð	ð 	s   ’'§
4³4)r„   rÈ   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r§   Úintr˜   rÍ   rß   r­   rë   rì   rô   r  r  r  Ú__classcell__)rÑ   s   @r[   rÇ   rÇ   +  s  ø€ € € € € ðð ðð ˜Cð ¨sð ¸dð ð ð ð ð ð ð˜cð ð ð ð ð4 ;@Ø!$Ø+/ð!ð !ð ! Cð !°4ð !Øð!à! D™jð!à4>Ô4Dð!ð !ð !ð !ðFð ð ð$
. $ð 
.ð 
.ð 
.ð 
.ðð ð ð ð ð ð ri   rÇ   )N)r  r‰   Úplatformr‡   rú   rë   rÜ   Útools.environments.baser   r   Úsystemr†   rp   rV   r\   rq   r˜   rz   r§   r’   Ú_find_shellrš   r    Útupler¬   r­   r²   r¼   rÅ   rÇ   rd   ri   r[   ú<module>r     sä  ðØ KÐ Kà 	€	€	€	Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @àˆhŒoÑÔ 9Ò,€ð %5Ð !ðU yð Uð Uð Uð Uðp "?Ð!>Ñ!@Ô!@Ð ðð  t¨d¡{ð ¸tÀd¹{ð ÐVZð ð ð ð ð>�Cð ð ð ð ðF €ð
Cð ð�tð  ð ð ð ð ð<¨%°°S´	¸4°Ô*@ð ð ð ð ð(' 4¨¤9ð 'ð 'ð 'ð 'ðT  Cð  °°S´	ð  ¸cð  ð  ð  ð  ð*mð mð mð mð m�ñ mô mð mð mð mri   