§
    øžyjCö ã                   óè  — U d Z ddlZddlZddl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mZ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d`dededefd„Z e h d£¦  «        Z! e h d£¦  «        Z"dad„Z#dede$fd„Z%dede&de&fd„Z'dede(de(fd„Z)dede$dee(         fd„Z*dZ+	 dbdede$de(fd„Z,dedee$ef         fd„Z-dcdede$de$fd„Z.dddede$de$fd„Z/d e0d!e$de1e0e0f         fd"„Z2ded!e$dee$         dee$         fd#„Z3dfd!e$de$de$fd%„Z4d!e$de(de(fd&„Z5da6ee7         e8d'<    G d(„ d)e¦  «        Z9 e d*„ e9j:         ;                    ¦   «         D ¦   «         ¦  «        Z< e h d+£¦  «        Z=d,d-iZ>e0e$e$f         e8d.<   ded/e$d0ee0         defd1„Z?e G d2„ d3¦  «        ¦   «         Z@d4d5œd6e@d7eddfd8„ZAe G d9„ d:¦  «        ¦   «         ZBe G d;„ d<¦  «        ¦   «         ZCe9jD        d=e9jE        d>e9jF        d?e9jG        d@e9jH        dAe9jI        dBiZJe0d)e$f         e8dC<   e G dD„ dE¦  «        ¦   «         ZKdFZLe&e8dG<   dHZMe(e8dI<   dJZNe$e8dK<   e G dL„ dM¦  «        ¦   «         ZOdePdefdN„ZQe9jI        dO„ e9jR        dP„ e9jS        dQ„ e9jT        dR„ e9jU        dS„ e9jV        dT„ e9jW        dU„ e9jX        dV„ e9jY        dW„ e9jZ        dX„ i
Z[e0e9eeKgef         f         e8dY<   e G dZ„ d[¦  «        ¦   «         Z\de\fd\„Z]dgd^„Z^d]e\ddfd_„Z_dS )hzî
Gateway configuration management.

Handles loading and validating configuration for:
- Connected platforms (Telegram, Discord, WhatsApp, Weixin, and more)
- Home channels for each platform
- Session reset policies
- Delivery preferences
é    N)ÚPath)ÚasdictÚ	dataclassÚfieldÚis_dataclass)ÚDictÚListÚOptionalÚAnyÚCallable)ÚEnum©Úget_hermes_home)Úcurrent_secret_scopeÚ
get_secret)Úis_truthy_valueTÚvalueÚdefaultÚreturnc                 ó¾   — | €|S t          | t          ¦  «        r4|                      ¦   «                              ¦   «         }|dv rdS |dv rdS |S t	          | |¬¦  «        S )zDCoerce bool-ish config values, preserving a caller-provided default.N>   Ú1ÚonÚyesÚtrueT>   Ú0ÚnoÚoffÚfalseF)r   )Ú
isinstanceÚstrÚstripÚlowerr   )r   r   Úlowereds      ú4/home/ragecks/.hermes/hermes-agent/gateway/config.pyÚ_coerce_boolr%      sq   € à€}ØˆÝ�%�ÑÔð Ø—+’+‘-”-×%Ò%Ñ'Ô'ˆØÐ0Ð0Ð0Ø�4ØÐ1Ð1Ð1Ø�5ØˆÝ˜5¨'Ð2Ñ2Ô2Ð2ó    >   r   r   r   r   >   r   r   r   r   úbool | Nonec                  ó8  — t          j        d¦  «        } | €dS |                      ¦   «                              ¦   «         }|sdS |t          v rdS |t
          v rdS t                               d| t          t          ¦  «        t          t
          ¦  «        ¦  «         dS )uÇ  Resolve the GATEWAY_MULTIPLEX_PROFILES operator override.

    Returns ``True``/``False`` when the env var is set to a recognized truthy/
    falsy token, or ``None`` when it is unset, blank, or unrecognized â€” in which
    case the caller keeps the config.yaml value (env > config > default). Blank
    is deliberately ``None``, not ``False``: a provisioned-but-unpopulated Fly
    secret arrives as ``""`` and must NOT shadow a config.yaml opt-in.
    ÚGATEWAY_MULTIPLEX_PROFILESNTFzlIgnoring unrecognized GATEWAY_MULTIPLEX_PROFILES=%r (expected one of %s or %s); falling back to config.yaml.)	ÚosÚgetenvr!   r"   Ú_MULTIPLEX_TRUTHY_STRINGSÚ_MULTIPLEX_FALSY_STRINGSÚloggerÚwarningÚsorted)ÚrawÚtokens     r$   Ú _env_multiplex_profiles_overrider3   0   s¤   € õ Œ)Ð0Ñ
1Ô
1€CØ
€{ØˆtØ�IŠI‰KŒK×ÒÑÔ€EØð ØˆtØÕ)Ð)Ð)ØˆtØÕ(Ð(Ð(ØˆuÝ
‡N‚Nð	CàÝÕ(Ñ)Ô)ÝÕ'Ñ(Ô(ñô ð ð ˆ4r&   c                 óª   — | €dS t          | t          ¦  «        r| rdndS t          | ¦  «                             ¦   «                              ¦   «         pdS )a  Normalize a streaming transport/mode value to a canonical token.

    Handles the YAML 1.1 boolean quirk where bare ``on`` / ``off`` parse to
    Python ``True`` / ``False`` (see ``gateway/display_config.py`` ``_normalise``).
    Without this, ``mode: off`` arrives as boolean ``False`` and stringifying it
    yields ``"false"`` instead of the advertised ``"off"``, so streaming would be
    enabled instead of disabled. Booleans map to ``"auto"`` (True) / ``"off"``
    (False); anything else is lower-cased, defaulting to ``"auto"``.
    NÚautor   )r   Úboolr    r!   r"   ©r   s    r$   Ú_normalize_transport_tokenr8   M   sX   € ð €}ØˆvÝ�%�ÑÔð *ØÐ)ˆvˆv EÐ)Ýˆu‰:Œ:×ÒÑÔ×#Ò#Ñ%Ô%Ð/¨Ð/r&   c                 ó\   — | €|S 	 t          | ¦  «        S # t          t          f$ r |cY S w xY w)z>Coerce numeric config values, falling back on malformed input.)ÚfloatÚ	TypeErrorÚ
ValueError©r   r   s     r$   Ú_coerce_floatr>   ^   sF   € à€}ØˆðÝ�U‰|Œ|ÐøÝ•zÐ"ð ð ð Øˆˆˆðøøøó   † •+ª+c                 ó\   — | €|S 	 t          | ¦  «        S # t          t          f$ r |cY S w xY w)z>Coerce integer config values, falling back on malformed input.)Úintr;   r<   r=   s     r$   Ú_coerce_intrB   h   sF   € à€}ØˆðÝ�5‰zŒzÐøÝ•zÐ"ð ð ð Øˆˆˆðøøør?   Úkeyc                 ó  — | €dS t          | t          ¦  «        rt                               d|| ¦  «         dS 	 t          | t          ¦  «        r3|                      ¦   «         st          | ¦  «        ‚t          | ¦  «        }nGt          | t          ¦  «        r#t          |  	                    ¦   «         d¦  «        }nt          | ¦  «        }n4# t          t          f$ r  t                               d|| ¦  «         Y dS w xY w|dk    rdS |S )zÈCoerce an optional positive integer config value.

    ``None``/0/negative disable the setting. Malformed values are ignored with
    a warning so a typo never prevents the gateway from starting.
    NzEIgnoring invalid %s=%r (expected a positive integer; 0/null disables)é
   r   )r   r6   r.   r/   r:   Ú
is_integerr<   rA   r    r!   r;   )r   rC   Úparseds      r$   Ú_coerce_optional_positive_intrH   r   s   € ð €}ØˆtÝ�%�ÑÔð Ý�ŠØSØØñ	
ô 	
ð 	
ð
 ˆtðÝ�e�UÑ#Ô#ð 	 Ø×#Ò#Ñ%Ô%ð (Ý  Ñ'Ô'Ð'Ý˜‘Z”ZˆFˆFÝ˜�sÑ#Ô#ð 	 Ý˜Ÿš™œ¨Ñ+Ô+ˆFˆFå˜‘Z”ZˆFøøÝ•zÐ"ð ð ð Ý�ŠØSØØñ	
ô 	
ð 	
ð
 ˆtˆtðøøøð �‚{€{ØˆtØ€Ms   ¹BC	 Ã	-C:Ã9C:iÿÿÿú gateway.systemd_watchdog_secondsc                 óÐ  — | €dS t          | t          ¦  «        rt                               d|¦  «         dS t          | t          ¦  «        r| }nØt          | t
          ¦  «        r¦|                      ¦   «         }|r(|                     ¦   «         r|                     ¦   «         st                               d|¦  «         dS 	 t	          |d¦  «        }nV# t          t          t          f$ r t                               d|¦  «         Y dS w xY wt                               d|¦  «         dS |dk    rdS d|cxk     rt          k    s%n t                               d|t          ¦  «         dS |S )zÜReturn a bounded positive watchdog interval or zero when disabled.

    Runtime and service generation share this normalization so a value can
    never enable ``Type=notify`` while disabling application heartbeats.
    Nr   z1Ignoring invalid %s (expected a positive integer)rE   z6Ignoring invalid %s (expected an integer from 1 to %d))r   r6   r.   r/   rA   r    r!   ÚisasciiÚ	isdecimalr;   r<   ÚOverflowErrorÚ_SYSTEMD_WATCHDOG_MAX_SECONDS)r   rC   rG   r1   s       r$   Úcoerce_systemd_watchdog_secondsrO   ™   s{  € ð €}ØˆqÝ�%�ÑÔð Ý�ŠÐJÈCÑPÔPÐPØˆqÝ�%�ÑÔð ØˆˆÝ	�E�3Ñ	Ô	ð Ø�kŠk‰mŒmˆØð 	˜#Ÿ+š+™-œ-ð 	¨s¯}ª}©¬ð 	Ý�NŠNÐNÐPSÑTÔTÐTØ�1ð	Ý˜˜b‘\”\ˆFˆFøÝ�:¥}Ð5ð 	ð 	ð 	Ý�NŠNÐNÐPSÑTÔTÐTØ�1�1ð	øøøõ 	�ŠÐJÈCÑPÔPÐPØˆqØ�‚{€{ØˆqØˆvÐ6Ð6Ò6Ð6Õ6Ò6Ð6Ð6Ð6Ý�ŠØDØÝ)ñ	
ô 	
ð 	
ð
 ˆqØ€Ms   Ã C Ã2DÄDc                 ó4   — t          | t          ¦  «        r| ni S )z=Return *value* when it is a mapping, otherwise an empty dict.)r   Údictr7   s    r$   Ú_coerce_dictrR   Á   s   € å˜u¥dÑ+Ô+Ð3ˆ5ˆ5°Ð3r&   Úpairc                 óˆ   — t          | t          ¦  «        r,|                      ¦   «                              ¦   «         }|dv r|S |S )z8Normalize unauthorized DM behavior to a supported value.>   rS   Úignore©r   r    r!   r"   ©r   r   Ú
normalizeds      r$   Ú#_normalize_unauthorized_dm_behaviorrY   Æ   sD   € å�%�ÑÔð Ø—[’[‘]”]×(Ò(Ñ*Ô*ˆ
ØÐ+Ð+Ð+ØÐØ€Nr&   Úpublicc                 óˆ   — t          | t          ¦  «        r,|                      ¦   «                              ¦   «         }|dv r|S |S )z4Normalize notice delivery mode to a supported value.>   rZ   ÚprivaterV   rW   s      r$   Ú_normalize_notice_deliveryr]   Ï   sD   € å�%�ÑÔð Ø—[’[‘]”]×(Ò(Ñ*Ô*ˆ
ØÐ.Ð.Ð.ØÐØ€Nr&   Úplatforms_dataÚnamec                 óÒ   — |                       |i ¦  «        }t          |t          ¦  «        si }|| |<   |                      di ¦  «        }t          |t          ¦  «        si }||d<   ||fS )a  Get-or-create ``platforms_data[name]`` and its nested ``extra`` dict.

    Both slots are coerced to ``{}`` if a non-dict value is encountered, so
    callers can safely write keys without type-checking.  Returns
    ``(plat_data, extra)`` for in-place mutation.
    Úextra)Ú
setdefaultr   rQ   )r^   r_   Ú	plat_datara   s       r$   Ú_ensure_platform_extra_dictrd   Ø   s{   € ð ×)Ò)¨$°Ñ3Ô3€IÝ�i¥Ñ&Ô&ð )Øˆ	Ø(ˆ�tÑØ× Ò  ¨"Ñ-Ô-€EÝ�e�TÑ"Ô"ð #ØˆØ"ˆ	�'ÑØ�eÐÐr&   c                 ó”   — t          ¦   «         �t          | d¦  «        }|�|n|S t          j                             | ¦  «        }|�|S |S )aŠ  Read env vars through the active profile secret scope when present.

    ``load_gateway_config()`` runs in many contexts, including multiplexed
    profile startup where ``_profile_runtime_scope`` installs per-profile
    secrets. In that scope we must prefer the scoped value; outside it we keep
    legacy ``os.getenv`` behavior for single-profile callers and unscoped
    gateway reads.
    N)r   Ú_get_secretr*   ÚenvironÚget)r_   r   Ú	scope_valÚenv_vals       r$   Ú_getenvrk   ê   sQ   € õ ÑÔÐ)Ý  dÑ+Ô+ˆ	Ø%Ð1ˆyˆy°wÐ>ÝŒj�nŠn˜TÑ"Ô"€GØÐØˆØ€Nr&   Ú c                 ó.   — t          | |¦  «        }|�|n|S ©N)rk   )r_   r   Úvals      r$   Ú_getenv_strrp   ü   s   € Ý
�$˜Ñ
 Ô
 €CØ�/ˆ3ˆ3 wÐ.r&   c                 ó¼   — t          | d ¦  «        }|€|S 	 t          t          |¦  «                             ¦   «         d¦  «        S # t          t
          f$ r |cY S w xY w)NrE   )rk   rA   r    r!   r;   r<   )r_   r   r1   s      r$   Ú_getenv_intrr     si   € Ý
�$˜Ñ
Ô
€CØ
€{ØˆðÝ•3�s‘8”8—>’>Ñ#Ô# RÑ(Ô(Ð(øÝ•zÐ"ð ð ð Øˆˆˆðøøøs   –.A ÁAÁAÚ_Platform__bundled_plugin_namesc                   ó¤   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZed„ ¦   «         Zedefd„¦   «         ZdS )ÚPlatforma?  Supported messaging platforms.

    Built-in platforms have explicit members.  Plugin platforms use dynamic
    members created on-demand by ``_missing_()`` so that
    ``Platform("irc")`` works without modifying this enum.  Dynamic members
    are cached in ``_value2member_map_`` for identity-stable comparisons.
    ÚlocalÚtelegramÚdiscordÚwhatsappÚwhatsapp_cloudÚslackÚsignalÚ
mattermostÚmatrixÚhomeassistantÚemailÚsmsÚdingtalkÚ
api_serverÚwebhookÚmsgraph_webhookÚfeishuÚwecomÚwecom_callbackÚweixinÚbluebubblesÚqqbotÚyuanbaoÚrelayc                 ój  — t          |t          ¦  «        r|                     ¦   «         sdS |                     ¦   «                              ¦   «         }|| j        v r| j        |         S t
          €|                      ¦   «         a|t
          v r}t                               | ¦  «        }||_	        | 
                    ¦   «                              dd¦  «                             dd¦  «        |_        || j        |<   || j        |j        <   |S 	 ddlm} |                     |¦  «        r}t                               | ¦  «        }||_	        | 
                    ¦   «                              dd¦  «                             dd¦  «        |_        || j        |<   || j        |j        <   |S n# t"          $ r Y nw xY wdS )a  Accept unknown platform names only for known plugin adapters.

        Creates a pseudo-member cached in ``_value2member_map_`` so that
        ``Platform("irc") is Platform("irc")`` holds True (identity-stable).
        Arbitrary strings are rejected to prevent enum pollution.
        NÚ-Ú_Ú r   ©Úplatform_registry)r   r    r!   r"   Ú_value2member_map_rs   Ú_scan_bundled_plugin_platformsÚobjectÚ__new__Ú_value_ÚupperÚreplaceÚ_name_Ú_member_map_Úgateway.platform_registryr“   Úis_registeredÚ	Exception)Úclsr   Úpseudor“   s       r$   Ú	_missing_zPlatform._missing_0  s°  € õ ˜%¥Ñ%Ô%ð 	¨U¯[ª[©]¬]ð 	Ø�4à—’‘”×#Ò#Ñ%Ô%ˆà�CÔ*Ð*Ð*ØÔ)¨%Ô0Ð0õ
 +Ð2Ø.1×.PÒ.PÑ.RÔ.RÐ+ØÕ3Ð3Ð3Ý—^’^ CÑ(Ô(ˆFØ"ˆFŒNØ!ŸKšK™MœM×1Ò1°#°sÑ;Ô;×CÒCÀCÈÑMÔMˆFŒMØ,2ˆCÔ" 5Ñ)Ø.4ˆCÔ˜Vœ]Ñ+ØˆMð
	ØCÐCÐCÐCÐCÐCØ ×.Ò.¨uÑ5Ô5ð ÝŸš¨Ñ,Ô,�Ø!&�”Ø %§¢¡¤× 5Ò 5°c¸3Ñ ?Ô ?× GÒ GÈÈSÑ QÔ Q�”Ø06�Ô& uÑ-Ø28�Ô  ¤Ñ/Ø�ðøõ ð 	ð 	ð 	ØˆDð	øøøð ˆts   Ä
BF# Æ#
F0Æ/F0r   c                 óî  — t          ¦   «         }	 t          t          ¦  «        j        j        dz  dz  }|                     ¦   «         rœ|                     ¦   «         D ]‡}|                     ¦   «         rq|dz                       ¦   «         rZ|dz                       ¦   «         s|dz                       ¦   «         r,|                     |j         	                    ¦   «         ¦  «         Œˆn# t          $ r Y nw xY w|S )zFReturn names of bundled platform plugins under ``plugins/platforms/``.ÚpluginsÚ	platformsz__init__.pyzplugin.yamlz
plugin.yml)Úsetr   Ú__file__ÚparentÚis_dirÚiterdirÚexistsÚaddr_   r"   rŸ   )r    ÚnamesÚplatforms_dirÚchilds       r$   r•   z'Platform._scan_bundled_plugin_platforms]  s  € õ ‘U”Uˆð	Ý ¥™NœNÔ1Ô8¸9ÑDÀ{ÑRˆMØ×#Ò#Ñ%Ô%ð 
6Ø*×2Ò2Ñ4Ô4ð 	6ð 	6�EàŸš™œð6à" ]Ñ2×:Ò:Ñ<Ô<ð6ð # ]Ñ2×:Ò:Ñ<Ô<ð	6ð
 !&¨Ñ 4×<Ò<Ñ>Ô>ð6ð Ÿ	š	 %¤*×"2Ò"2Ñ"4Ô"4Ñ5Ô5Ð5øøøÝð 	ð 	ð 	ØˆDð	øøøàˆs   �CC% Ã%
C2Ã1C2N) Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚLOCALÚTELEGRAMÚDISCORDÚWHATSAPPÚWHATSAPP_CLOUDÚSLACKÚSIGNALÚ
MATTERMOSTÚMATRIXÚHOMEASSISTANTÚEMAILÚSMSÚDINGTALKÚ
API_SERVERÚWEBHOOKÚMSGRAPH_WEBHOOKÚFEISHUÚWECOMÚWECOM_CALLBACKÚWEIXINÚBLUEBUBBLESÚQQBOTÚYUANBAOÚRELAYÚclassmethodr¢   r¦   r•   © r&   r$   ru   ru     sÙ   € € € € € ðð ð €EØ€HØ€GØ€HØ%€NØ€EØ€FØ€JØ€FØ#€MØ€EØ
€CØ€HØ€JØ€GØ'€OØ€FØ€EØ%€NØ€FØ€KØ€EØ€GØ€EØð*ð *ñ „[ð*ðX ð¨sð ð ð ñ „[ðð ð r&   ru   c              #   ó$   K  — | ]}|j         V — Œd S rn   r7   )Ú.0Úms     r$   ú	<genexpr>rÑ   u  s$   è è € Ð$TÐ$T° Q¤WÐ$TÐ$TÐ$TÐ$TÐ$TÐ$Tr&   >	   r�   Úliner†   r„   rƒ   rŠ   rˆ   rz   r…   r†   r„   ÚPORT_BINDING_CONDITIONAL_MODESÚplatform_valuera   c                 óò   — | t           vrdS t                               | ¦  «        }|�Ot          |pi                      dd¦  «        ¦  «                             ¦   «                              ¦   «         }||k    S dS )záReturn True when *platform_value* actually binds a port for *extra* config.

    Mode-conditional platforms (Feishu) only bind in their listener mode;
    everything else in ``PORT_BINDING_PLATFORM_VALUES`` always binds.
    FNÚconnection_modeÚ	websocketT)ÚPORT_BINDING_PLATFORM_VALUESrÓ   rh   r    r!   r"   )rÔ   ra   Úexpected_modeÚactuals       r$   Úplatform_binds_portrÛ   •  sx   € ð Õ9Ð9Ð9ØˆuÝ2×6Ò6°~ÑFÔF€MØÐ Ý�e�k˜r×&Ò&Ð'8¸+ÑFÔFÑGÔG×MÒMÑOÔO×UÒUÑWÔWˆØ˜Ò&Ð&Øˆ4r&   c                   óÌ   — e Zd ZU dZeed<   eed<   eed<   dZee         ed<   dZ	ee         ed<   dZ
ee         ed<   d	eeef         fd
„Zedeeef         d	d fd„¦   «         ZdS )ÚHomeChannela@  
    Default destination for a platform.
    
    When a cron job specifies deliver="telegram" without a specific chat ID,
    messages are sent to this home channel. Thread-aware platforms may also
    store a thread/topic ID so the bare platform target routes to the exact
    conversation where /sethome was run.
    ÚplatformÚchat_idr_   NÚ	thread_idÚuser_idÚscope_idr   c                 ó    — | j         j        | j        | j        dœ}| j        r
| j        |d<   | j        r
| j        |d<   | j        r
| j        |d<   |S )N)rÞ   rß   r_   rà   rá   râ   )rÞ   r   rß   r_   rà   rá   râ   ©ÚselfÚresults     r$   Úto_dictzHomeChannel.to_dict¸  si   € àœÔ+Ø”|Ø”Ið
ð 
ˆð
 Œ>ð 	1Ø"&¤.ˆF�;ÑØŒ<ð 	-Ø $¤ˆF�9ÑØŒ=ð 	/Ø!%¤ˆF�:ÑØˆr&   Údatac                 ó”  —  | t          |d         ¦  «        t          |d         ¦  «        |                     dd¦  «        |                     d¦  «        rt          |d         ¦  «        nd |                     d¦  «        rt          |d         ¦  «        nd |                     d¦  «        rt          |d         ¦  «        nd ¬¦  «        S )	NrÞ   rß   r_   ÚHomerà   rá   râ   ©rÞ   rß   r_   rà   rá   râ   )ru   r    rh   ©r    rè   s     r$   Ú	from_dictzHomeChannel.from_dictÆ  s¼   € àˆsÝ˜d :Ô.Ñ/Ô/Ý˜˜YœÑ(Ô(Ø—’˜& &Ñ)Ô)Ø04·²¸Ñ0EÔ0EÐO•c˜$˜{Ô+Ñ,Ô,Ð,È4Ø,0¯HªH°YÑ,?Ô,?ÐI•C˜˜YœÑ(Ô(Ð(ÀTØ.2¯hªh°zÑ.BÔ.BÐL•S˜˜jÔ)Ñ*Ô*Ð*Èð
ñ 
ô 
ð 	
r&   )r°   r±   r²   r³   ru   Ú__annotations__r    rà   r
   rá   râ   r   r   rç   rÌ   rí   rÍ   r&   r$   rÝ   rÝ   ¤  s×   € € € € € € ðð ð ÐÐÑØ€L€L�LØ
€I€I�IØ#€Iˆx˜Œ}Ð#Ð#Ñ#ð "€GˆX�cŒ]Ð!Ð!Ñ!Ø"€Hˆh�sŒmÐ"Ð"Ñ"ð˜˜c 3˜hœð ð ð ð ð ð
˜T # s (œ^ð 
°ð 
ð 
ð 
ñ „[ð
ð 
ð 
r&   rÝ   F)Úenabled_if_newÚhomerï   c                óŽ  — ddl m}m}  |¦   «         }|                     di ¦  «        }t	          |t
          ¦  «        si }||d<   |                     | j        j        i ¦  «        }t	          |t
          ¦  «        si }||| j        j        <   |r|                     dd¦  «         |                      ¦   «         |d<    ||¦  «         dS )zHPersist a logical home without falsely enabling a Relay-fronted adapter.r   )Úload_configÚsave_configr¥   ÚenabledTÚhome_channelN)	Úhermes_cli.configrò   ró   rb   r   rQ   rÞ   r   rç   )rð   rï   rò   ró   Úconfigr¥   Úplatform_configs          r$   Úpersist_home_channelrù   Ò  sá   € à:Ð:Ð:Ð:Ð:Ð:Ð:Ð:àˆ[‰]Œ]€FØ×!Ò! +¨rÑ2Ô2€IÝ�i¥Ñ&Ô&ð (Øˆ	Ø'ˆˆ{ÑØ×*Ò*¨4¬=Ô+>ÀÑCÔC€OÝ�o¥tÑ,Ô,ð 9ØˆØ)8ˆ	�$”-Ô%Ñ&Øð 4Ø×"Ò" 9¨dÑ3Ô3Ð3Ø&*§l¢l¡n¤n€O�NÑ#Ø€K�ÑÔÐÐÐr&   c                   ó´   — e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed	<   d
Zeed<   dZeed<   deeef         fd„Zedeeef         dd fd„¦   «         ZdS )ÚSessionResetPolicyuT  
    Controls when sessions reset (lose context).
    
    Modes:
    - "daily": Reset at a specific hour each day
    - "idle": Reset after N minutes of inactivity
    - "both": Whichever triggers first (daily boundary OR idle timeout)
    - "none": Never auto-reset (context managed only by compression)

    Default is "none" â€” sessions never auto-reset unless the user opts in
    via the `session_reset` section in config.yaml (or gateway.json
    overrides). Changed July 2026 from "both" (24h idle + daily 4am), which
    surprised users who expected their conversations to persist.
    ÚnoneÚmodeé   Úat_houré   Úidle_minutesTÚnotify©rƒ   r„   Únotify_exclude_platformsé   Úbg_process_max_age_hoursr   c                 ój   — | j         | j        | j        | j        t	          | j        ¦  «        | j        dœS )N©rý   rÿ   r  r  r  r  )rý   rÿ   r  r  Úlistr  r  ©rå   s    r$   rç   zSessionResetPolicy.to_dict  s:   € à”IØ”|Ø Ô-Ø”kÝ(,¨TÔ-JÑ(KÔ(KØ(,Ô(Eð
ð 
ð 	
r&   rè   c           	      óœ  — t          |¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        } | |�|nd|�|nd|�|nd	t          |d
¦  «        |�t          |¦  «        nd|�|nd¬¦  «        S )Nrý   rÿ   r  r  r  r  rü   rþ   r   Tr  r  r  )rR   rh   r%   Útuple)r    rè   rý   rÿ   r  r  ÚexcludeÚ
bg_max_ages           r$   rí   zSessionResetPolicy.from_dict  sà   € å˜DÑ!Ô!ˆà�xŠx˜ÑÔˆØ—(’(˜9Ñ%Ô%ˆØ—x’x Ñ/Ô/ˆØ—’˜(Ñ#Ô#ˆØ—(’(Ð5Ñ6Ô6ˆØ—X’XÐ8Ñ9Ô9ˆ
ØˆsØÐ)��¨vØ&Ð2�G�G¸Ø)5Ð)A˜˜ÀtÝ ¨Ñ-Ô-Ø7>Ð7J¥U¨7¡^¤^ ^ÐPiØ3=Ð3I Z ZÈrð
ñ 
ô 
ð 	
r&   N)r°   r±   r²   r³   rý   r    rî   rÿ   rA   r  r  r6   r  r  r  r   r   rç   rÌ   rí   rÍ   r&   r$   rû   rû   å  sà   € € € € € € ðð ð €Dˆ#ÐÐÑØ€GˆSÐÐÑØ€L�#ÐÐÑØ€FˆDÐÐÑØ&?Ð˜eÐ?Ð?Ñ?ð %'Ð˜cÐ&Ð&Ñ&ð
˜˜c 3˜hœð 
ð 
ð 
ð 
ð ð
˜T # s (œ^ð 
Ð0Dð 
ð 
ð 
ñ „[ð
ð 
ð 
r&   rû   c                   ó®   — e Zd ZU dZdZee         ed<   dZee         ed<   dZ	ee         ed<   de
eef         fd„Zede
eef         dd fd	„¦   «         ZdS )
ÚChannelOverridea"  
    Per-channel override for model, provider, and system prompt.

    Used in config under platforms.<name>.channel_overrides[channel_id].
    Enables different channels (e.g. Discord #daily vs #dev) to use different
    models and personas without running separate gateway instances.
    NÚmodelÚproviderÚsystem_promptr   c                 óp   — i }| j         �
| j         |d<   | j        �
| j        |d<   | j        �
| j        |d<   |S )Nr  r  r  ©r  r  r  )rå   Úouts     r$   rç   zChannelOverride.to_dict,  sH   € Ø ˆØŒ:Ð!Øœ:ˆC�‰LØŒ=Ð$Ø"œmˆC�
‰OØÔÐ)Ø#'Ô#5ˆC�Ñ Øˆ
r&   rè   c                 ó¨   — |s
 | ¦   «         S  | |                      d¦  «        |                      d¦  «        |                      d¦  «        ¬¦  «        S )Nr  r  r  r  )rh   rì   s     r$   rí   zChannelOverride.from_dict6  s[   € àð 	Ø�3‘5”5ˆLØˆsØ—(’(˜7Ñ#Ô#Ø—X’X˜jÑ)Ô)ØŸ(š( ?Ñ3Ô3ð
ñ 
ô 
ð 	
r&   )r°   r±   r²   r³   r  r
   r    rî   r  r  r   r   rç   rÌ   rí   rÍ   r&   r$   r  r    s¸   € € € € € € ðð ð  €Eˆ8�CŒ=ÐÐÑØ"€Hˆh�sŒmÐ"Ð"Ñ"Ø#'€M�8˜C”=Ð'Ð'Ñ'ð˜˜c 3˜hœð ð ð ð ð ð
˜T # s (œ^ð 
Ð0Að 
ð 
ð 
ñ „[ð
ð 
ð 
r&   r  ÚTELEGRAM_BOT_TOKENÚDISCORD_BOT_TOKENÚSLACK_BOT_TOKENÚMATTERMOST_TOKENÚMATRIX_ACCESS_TOKENÚWEIXIN_TOKENÚPLATFORM_TOKEN_ENV_NAMESc                   ód  — e Zd ZU dZdZeed<   dZee	         ed<   dZ
ee	         ed<   dZee         ed<   dZe	ed	<   d
Zeed<   d
Zeed<   dZee	         ed<    ee¬¦  «        Zee	ef         ed<    ee¬¦  «        Zee	ef         ed<   dee	ef         fd„Zedee	ef         dd fd„¦   «         ZdS )ÚPlatformConfigz.Configuration for a single messaging platform.Frô   Nr2   Úapi_keyrõ   ÚfirstÚreply_to_modeTÚgateway_restart_notificationÚtyping_indicatorÚtyping_status_text©Údefault_factoryÚchannel_overridesra   r   c                 óN  — | j         | j        | j        | j        | j        dœ}| j        �
| j        |d<   | j        r
| j        |d<   | j        r
| j        |d<   | j        r| j         	                    ¦   «         |d<   | j
        r&d„ | j
                             ¦   «         D ¦   «         |d<   |S )N)rô   ra   r#  r$  r%  r&  r2   r!  rõ   c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS rÍ   ©rç   )rÏ   ÚcidÚovs      r$   ú
<dictcomp>z*PlatformConfig.to_dict.<locals>.<dictcomp>�  s3   € ð +ð +ð +Ù&- c¨2��R—Z’Z‘\”\ð+ð +ð +r&   r)  )rô   ra   r#  r$  r%  r&  r2   r!  rõ   rç   r)  Úitemsrä   s     r$   rç   zPlatformConfig.to_dict~  sØ   € à”|Ø”ZØ!Ô/Ø,0Ô,MØ $Ô 5ð
ð 
ˆð Ô"Ð.Ø+/Ô+BˆFÐ'Ñ(ØŒ:ð 	)Ø"œjˆF�7‰OØŒ<ð 	-Ø $¤ˆF�9ÑØÔð 	AØ%)Ô%6×%>Ò%>Ñ%@Ô%@ˆF�>Ñ"ØÔ!ð 	ð+ð +Ø15Ô1G×1MÒ1MÑ1OÔ1Oð+ñ +ô +ˆFÐ&Ñ'ð ˆr&   rè   c                 ó(  — t          |¦  «        }d }t          |                     d¦  «        t          ¦  «        r t                               |d         ¦  «        }t          |                     di ¦  «        ¦  «        }|                     d¦  «        }|€|                     d¦  «        }|                     d¦  «        }|€|                     d¦  «        }|                     d¦  «        }|€|                     d¦  «        }i }|                     d¦  «        pi }t          |t          ¦  «        rY|                     ¦   «         D ]D\  }	}
t          |
t          ¦  «        r*t                               |
¦  «        |t          |	¦  «        <   ŒE | t          |                     d¦  «        d¦  «        |                     d	¦  «        |                     d
¦  «        ||                     dd¦  «        t          |d¦  «        t          |d¦  «        |||¬¦
  «
        S )Nrõ   ra   r$  r%  r&  r)  rô   Fr2   r!  r#  r"  T)
rô   r2   r!  rõ   r#  r$  r%  r&  r)  ra   )
rR   r   rh   rQ   rÝ   rí   r0  r  r    r%   )r    rè   rõ   ra   Ú_grnÚ_typingÚ_typing_textr)  Úraw_overridesr-  Úov_datas              r$   rí   zPlatformConfig.from_dict”  só  € å˜DÑ!Ô!ˆØˆÝ�d—h’h˜~Ñ.Ô.µÑ5Ô5ð 	GÝ&×0Ò0°°nÔ1EÑFÔFˆLõ ˜TŸXšX g¨rÑ2Ô2Ñ3Ô3ˆØ�xŠxÐ6Ñ7Ô7ˆØˆ<Ø—9’9Ð;Ñ<Ô<ˆDð
 —(’(Ð-Ñ.Ô.ˆØˆ?Ø—i’iÐ 2Ñ3Ô3ˆGð —x’xÐ 4Ñ5Ô5ˆØÐØ Ÿ9š9Ð%9Ñ:Ô:ˆLà8:ÐØŸšÐ!4Ñ5Ô5Ð;¸ˆÝ�m¥TÑ*Ô*ð 	UØ -× 3Ò 3Ñ 5Ô 5ð Uð U‘��WÝ˜g¥tÑ,Ô,ð UÝ2A×2KÒ2KÈGÑ2TÔ2TÐ%¥c¨#¡h¤hÑ/øàˆsÝ  §¢¨)Ñ!4Ô!4°eÑ<Ô<Ø—(’(˜7Ñ#Ô#Ø—H’H˜YÑ'Ô'Ø%ØŸ(š( ?°GÑ<Ô<Ý)5°d¸DÑ)AÔ)AÝ)¨'°4Ñ8Ô8Ø+Ø/Øð
ñ 
ô 
ð 	
r&   )r°   r±   r²   r³   rô   r6   rî   r2   r
   r    r!  rõ   rÝ   r#  r$  r%  r&  r   rQ   r)  r   r  ra   r   rç   rÌ   rí   rÍ   r&   r$   r   r   Q  sc  € € € € € € à8Ð8Ø€GˆTÐÐÑØ€Eˆ8�CŒ=ÐÐÑØ!€GˆX�cŒ]Ð!Ð!Ñ!Ø*.€L�(˜;Ô'Ð.Ð.Ñ.ð !€M�3Ð Ð Ñ ð *.Ð  $Ð-Ð-Ñ-ð "Ð�dÐ!Ð!Ñ!ð )-Ð˜ œÐ,Ð,Ñ,ð 5:°EÈ$Ð4OÑ4OÔ4OÐ�t˜C Ð0Ô1ÐOÐOÑOð "˜E°$Ð7Ñ7Ô7€Eˆ4��S�Œ>Ð7Ð7Ñ7ð˜˜c 3˜hœð ð ð ð ð, ð.
˜T # s (œ^ð .
Ð0@ð .
ð .
ð .
ñ „[ð.
ð .
ð .
r&   r   gš™™™™™é?ÚDEFAULT_STREAMING_EDIT_INTERVALr  Ú"DEFAULT_STREAMING_BUFFER_THRESHOLDu    â–‰ÚDEFAULT_STREAMING_CURSORc                   ó´   — e Zd ZU dZdZeed<   dZeed<   e	Z
eed<   eZeed<   eZeed<   d	Zeed
<   deeef         fd„Zedeeef         dd fd„¦   «         ZdS )ÚStreamingConfigzCConfiguration for real-time token streaming to messaging platforms.Frô   r5   Ú	transportÚedit_intervalÚbuffer_thresholdÚcursorç        Úfresh_final_after_secondsr   c                 óP   — | j         | j        | j        | j        | j        | j        dœS )N©rô   r<  r=  r>  r?  rA  rC  r
  s    r$   rç   zStreamingConfig.to_dictñ  s2   € à”|ØœØ!Ô/Ø $Ô 5Ø”kØ)-Ô)Gð
ð 
ð 	
r&   rè   c                 óp  — t          |t          ¦  «        r|s
 | ¦   «         S |                     d¦  «        }|                     d¦  «        }|�|n|}t          |¦  «        }d|v r$t	          |                     d¦  «        d¦  «        }n|�t          |¦  «        dk    }nd} | ||t          |                     d¦  «        t          ¦  «        t          |                     d¦  «        t          ¦  «        |                     dt          ¦  «        t          |                     d	¦  «        d
¦  «        ¬¦  «        S )Nr<  rý   rô   Fr   r=  r>  r?  rA  r@  rC  )
r   rQ   rh   r8   r%   r>   r7  rB   r8  r9  )r    rè   Úraw_transportÚraw_modeÚpickedr<  rô   s          r$   rí   zStreamingConfig.from_dictû  sC  € å˜$¥Ñ%Ô%ð 	¨Tð 	Ø�3‘5”5ˆLð  Ÿš Ñ-Ô-ˆØ—8’8˜FÑ#Ô#ˆð #0Ð";��ÀˆÝ.¨vÑ6Ô6ˆ	à˜ÐÐÝ" 4§8¢8¨IÑ#6Ô#6¸Ñ>Ô>ˆGˆGØÐ!õ 1°Ñ:Ô:¸eÒCˆGˆGàˆGàˆsØØÝ'Ø—’˜Ñ)Ô)Õ+Jñô õ )Ø—’Ð+Ñ,Ô,Õ.Pñô ð —8’8˜HÕ&>Ñ?Ô?Ý&3Ø—’Ð4Ñ5Ô5°sñ'ô 'ð
ñ 
ô 
ð 	
r&   N)r°   r±   r²   r³   rô   r6   rî   r<  r    r7  r=  r:   r8  r>  rA   r9  r?  rA  r   r   rç   rÌ   rí   rÍ   r&   r$   r;  r;  Ð  sÜ   € € € € € € àMÐMØ€GˆTÐÐÑð" €IˆsÐÐÑØ:€M�5Ð:Ð:Ñ:Ø>Ð�cÐ>Ð>Ñ>Ø*€FˆCÐ*Ð*Ñ*ð (+Ð˜uÐ*Ð*Ñ*ð
˜˜c 3˜hœð 
ð 
ð 
ð 
ð ð0
˜T # s (œ^ð 0
Ð0Að 0
ð 0
ð 0
ñ „[ð0
ð 0
ð 0
r&   r;  c                 ó¸   — | sdS 	 ddl m} nB# t          $ r5 t          t	          | ¦  «                             ¦   «         ¦  «        dk    cY S w xY w || d¬¦  «        S )a#  True when API_SERVER_KEY is present and strong enough to be usable.

    Mirrors the startup guard in ``gateway/platforms/api_server.py``
    (``has_usable_secret`` with ``min_length=16``) so the platform is only
    enrolled at load time when the adapter would actually agree to start.
    Fr   ©Úhas_usable_secreté   ©Ú
min_length)Úhermes_cli.authrJ  ÚImportErrorÚlenr    r!   )rC   rJ  s     r$   Ú_has_usable_api_server_keyrQ  6  s…   € ð ð Øˆuð+Ø5Ð5Ð5Ð5Ð5Ð5Ð5øÝð +ð +ð +Ý•3�s‘8”8—>’>Ñ#Ô#Ñ$Ô$¨Ò*Ð*Ð*Ð*ð+øøøàÐ˜S¨RÐ0Ñ0Ô0Ð0s   † �<AÁAc                 ó’   — t          | j                             d¦  «        o | j        p| j                             d¦  «        ¦  «        S )NÚ
account_idr2   )r6   ra   rh   r2   ©Úcfgs    r$   ú<lambda>rV  G  s;   € ¥ØŒ	�Š�lÑ#Ô#ÐM¨¬Ð)L°c´i·m²mÀGÑ6LÔ6Lñ"ô "€ r&   c                 ó„   — t          | j                             d¦  «        o| j                             d¦  «        ¦  «        S )NÚphone_number_idÚaccess_token©r6   ra   rh   rT  s    r$   rV  rV  J  s5   € ­ØŒ	�ŠÐ'Ñ(Ô(ÐJ¨S¬Y¯]ª]¸>Ñ-JÔ-Jñ*ô *€ r&   c                 óP   — t          | j                             d¦  «        ¦  «        S )NÚhttp_urlrZ  rT  s    r$   rV  rV  M  s   € ¥ c¤i§m¢m°JÑ&?Ô&?Ñ!@Ô!@€ r&   c                 óX   — t          | r| j                             d¦  «        nd ¦  «        S )NrC   )rQ  ra   rh   rT  s    r$   rV  rV  N  s,   € Õ%?Ø #Ð-ˆŒ	�Š�eÑÔÐ¨ñ&ô &€ r&   c                 ó   — dS )NTrÍ   rT  s    r$   rV  rV  Q  s   €  $€ r&   c                 ó’   — t          t          | j                             d¦  «        pd¦  «                             ¦   «         ¦  «        S )NÚclient_staterl   )r6   r    ra   rh   r!   rT  s    r$   rV  rV  R  s:   € ­$ÝˆCŒI�MŠM˜.Ñ)Ô)Ð/¨RÑ0Ô0×6Ò6Ñ8Ô8ñ+ô +€ r&   c                 ó„   — t          | j                             d¦  «        o| j                             d¦  «        ¦  «        S )NÚ
server_urlÚpasswordrZ  rT  s    r$   rV  rV  U  s4   € ¥dØŒ	�Š�lÑ#Ô#ÐA¨¬	¯ª°jÑ(AÔ(Añ'ô '€ r&   c                 ó„   — t          | j                             d¦  «        o| j                             d¦  «        ¦  «        S )NÚapp_idÚclient_secretrZ  rT  s    r$   rV  rV  X  s4   € ¥ØŒ	�Š�hÑÔÐB C¤I§M¢M°/Ñ$BÔ$Bñ!ô !€ r&   c                 ó„   — t          | j                             d¦  «        o| j                             d¦  «        ¦  «        S )Nre  Ú
app_secretrZ  rT  s    r$   rV  rV  [  s4   € ¥$ØŒ	�Š�hÑÔÐ? C¤I§M¢M°,Ñ$?Ô$?ñ#ô #€ r&   c                 ó„   — t          | j                             d¦  «        p| j                             d¦  «        ¦  «        S )NÚ	relay_urlÚurlrZ  rT  s    r$   rV  rV  b  s4   € ¥ØŒ	�Š�kÑ"Ô"Ð: c¤i§m¢m°EÑ&:Ô&:ñ!ô !€ r&   Ú_PLATFORM_CONNECTED_CHECKERSc                   ób  — e Zd ZU dZ ee¬¦  «        Zeee	f         e
d<    ee¬¦  «        Zee
d<    ee¬¦  «        Zeeef         e
d<    ee¬¦  «        Zeeef         e
d<    ed„ ¬¦  «        Zee         e
d<    ee¬¦  «        Zeeef         e
d	<    ed
„ ¬¦  «        Zee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee
d<   dZee          e
d<   dZ!ee
d<   dZ"e e
d<   dZ#ee
d<   dZ$ee
d<    ee%¬¦  «        Z&e%e
d<   dZ'e e
d<    ee(¬¦  «        Z)e(e
d <   d/d"„Z*d!ee         fd#„Z+d$ed%e	d!efd&„Z,d$ed!ee-         fd'„Z.	 	 d0d$ee         d(ee         d!efd)„Z/d!eeef         fd*„Z0e1d+eeef         d!d fd,„¦   «         Z2d1d$ee         d!efd-„Z3d1d$ee         d!efd.„Z4dS )2ÚGatewayConfigzy
    Main gateway configuration.
    
    Manages all platform connections, session policies, and delivery settings.
    r'  r¥   Údefault_reset_policyÚreset_by_typeÚreset_by_platformc                  ó
   — ddgS )Nú/newú/resetrÍ   rÍ   r&   r$   rV  zGatewayConfig.<lambda>x  s   € ¸vÀxÐ>P€ r&   Úreset_triggersÚquick_commandsc                  ó$   — t          ¦   «         dz  S )NÚsessionsr   rÍ   r&   r$   rV  zGatewayConfig.<lambda>~  s   € µÑ7HÔ7HÈ:Ñ7U€ r&   Úsessions_dirTÚwrite_sessions_jsonÚalways_log_localÚfilter_silence_narrationÚstt_enabledÚstt_echo_transcriptsÚgroup_sessions_per_userFÚthread_sessions_per_userNÚmax_concurrent_sessionsÚmultiplex_profilesr   Úsystemd_watchdog_secondsÚloop_watchdogrS   Úunauthorized_dm_behaviorÚ	streamingéZ   Úsession_store_max_age_daysÚprofile_routesr   c                 ó8   — t          | j        ¦  «        | _        d S rn   )rO   rƒ  r
  s    r$   Ú__post_init__zGatewayConfig.__post_init__¾  s    € Ý(GØÔ)ñ)
ô )
ˆÔ%Ð%Ð%r&   c                 óÎ   — g }| j                              ¦   «         D ]8\  }}|j        sŒ|                      ||¦  «        r|                     |¦  «         Œ9t          |d„ ¬¦  «        S )už  Return list of platforms that are enabled and configured.

        Sorted by platform value so the rendered "Connected Platforms" list
        (and the home-channel blocks derived from it) is byte-stable across
        gateway restarts and mid-process platform registration â€” dict
        insertion order is not a stable contract and a reorder busts the
        prompt cache without any semantic change.
        c                 ó*   — t          | j        ¦  «        S rn   )r    r   )Úps    r$   rV  z7GatewayConfig.get_connected_platforms.<locals>.<lambda>Ò  s   € ­s°1´7©|¬|€ r&   )rC   )r¥   r0  rô   Ú_is_platform_connectedÚappendr0   )rå   Ú	connectedrÞ   r÷   s       r$   Úget_connected_platformsz%GatewayConfig.get_connected_platformsÃ  s|   € ð ˆ	Ø $¤× 4Ò 4Ñ 6Ô 6ð 	+ð 	+ÑˆH�fØ”>ð ØØ×*Ò*¨8°VÑ<Ô<ð +Ø× Ò  Ñ*Ô*Ð*øÝ�iÐ%;Ð%;Ð<Ñ<Ô<Ð<r&   rÞ   r÷   c                 óD  — |t           j        k    rHt          |j                             d¦  «        o |j        p|j                             d¦  «        ¦  «        S |j        s|j        rdS t                               |¦  «        }|� ||¦  «        S 	 ddlm	} 	 ddl
m}  |¦   «          n# t          $ r Y nw xY w|                     |j        ¦  «        }|r:|j        �|                     |¦  «        S |j        �|                     |¦  «        S dS n# t          $ r Y nw xY wdS )	z;Check whether a single platform is sufficiently configured.rS  r2   TNr   r’   ©Údiscover_pluginsF)ru   rÇ   r6   ra   rh   r2   r!  rl  r�   r“   Úhermes_cli.pluginsr•  rŸ   r   Úis_connectedÚvalidate_config)rå   rÞ   r÷   Úcheckerr“   r•  Úentrys          r$   r�  z$GatewayConfig._is_platform_connectedÔ  sƒ  € ð •x”Ò&Ð&ÝØ”× Ò  Ñ.Ô.ð @Ø”\Ð> V¤\×%5Ò%5°gÑ%>Ô%>ñô ð ð Œ<ð 	˜6œ>ð 	Ø�4õ /×2Ò2°8Ñ<Ô<ˆØÐØ�7˜6‘?”?Ð"ð	ØCÐCÐCÐCÐCÐCðØ?Ð?Ð?Ð?Ð?Ð?Ø Ð Ñ"Ô"Ð"Ð"øÝð ð ð Ø�ðøøøà%×)Ò)¨(¬.Ñ9Ô9ˆEØð ØÔ%Ð1Ø ×-Ò-¨fÑ5Ô5Ð5ØÔ(Ð4Ø ×0Ò0°Ñ8Ô8Ð8Ø�tðøõ ð 	ð 	ð 	ØˆDð	øøøð ˆus<   ÂD ÂB) Â(D Â)
B6Â3D Â5B6Â6:D Ã1D Ä
DÄDc                 óL   — | j                              |¦  «        }|r|j        S dS )z$Get the home channel for a platform.N)r¥   rh   rõ   )rå   rÞ   r÷   s      r$   Úget_home_channelzGatewayConfig.get_home_channelþ  s-   € à”×#Ò# HÑ-Ô-ˆØð 	'ØÔ&Ð&Øˆtr&   Úsession_typec                 óp   — |r|| j         v r| j         |         S |r|| j        v r| j        |         S | j        S )zˆ
        Get the appropriate reset policy for a session.
        
        Priority: platform override > type override > default
        )rq  rp  ro  )rå   rÞ   r�  s      r$   Úget_reset_policyzGatewayConfig.get_reset_policy  sU   € ð ð 	4˜ DÔ$:Ð:Ð:ØÔ)¨(Ô3Ð3ð ð 	4˜L¨DÔ,>Ð>Ð>ØÔ% lÔ3Ð3àÔ(Ð(r&   c                 óv  — i dd„ | j                              ¦   «         D ¦   «         “d| j                             ¦   «         “dd„ | j                             ¦   «         D ¦   «         “dd„ | j                             ¦   «         D ¦   «         “d| j        “d	| j        “d
t          | j	        ¦  «        “d| j
        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “d| j        “| j        | j        | j                             ¦   «         | j        d„ | j        D ¦   «         dœ¥S )Nr¥   c                 óH   — i | ]\  }}|j         |                     ¦   «         “Œ S rÍ   ©r   rç   )rÏ   rŽ  Úcs      r$   r/  z)GatewayConfig.to_dict.<locals>.<dictcomp>  s5   € ð ð ð Ù)-¨¨A�”˜Ÿš™œðð ð r&   ro  rp  c                 ó>   — i | ]\  }}||                      ¦   «         “ŒS rÍ   r,  ©rÏ   ÚkÚvs      r$   r/  z)GatewayConfig.to_dict.<locals>.<dictcomp>  s3   € ð ð ð Ù#' 1 a��1—9’9‘;”;ðð ð r&   rq  c                 óH   — i | ]\  }}|j         |                     ¦   «         “Œ S rÍ   r¢  )rÏ   rŽ  r§  s      r$   r/  z)GatewayConfig.to_dict.<locals>.<dictcomp>"  s5   € ð "ð "ð "Ù)-¨¨A�”˜Ÿš™œð"ð "ð "r&   ru  rv  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  c                 óx   — g | ]7}t          |¦  «        r$t          |t          ¦  «        st          |¦  «        n|‘Œ8S rÍ   )r   r   Útyper   )rÏ   Úrs     r$   ú
<listcomp>z)GatewayConfig.to_dict.<locals>.<listcomp>6  sL   € ð ð ð àõ *¨!™_œ_ÐOµZÀÅ4Ñ5HÔ5HÐO•�q‘	”	�	Èaðð ð r&   )r„  r…  r†  rˆ  r‰  )r¥   r0  ro  rç   rp  rq  ru  rv  r    ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  rˆ  r‰  r
  s    r$   rç   zGatewayConfig.to_dict  sá  € ð 
Øð ð Ø15´×1EÒ1EÑ1GÔ1Gðñ ô ð 
ð # DÔ$=×$EÒ$EÑ$GÔ$Gð	 
ð
 ð ð Ø+/Ô+=×+CÒ+CÑ+EÔ+Eðñ ô ð 
ð  ð "ð "Ø15Ô1G×1MÒ1MÑ1OÔ1Oð"ñ "ô "ð 
ð ˜dÔ1ð 
ð ˜dÔ1ð 
ð �C Ô 1Ñ2Ô2ð 
ð " 4Ô#;ð 
ð  Ô 5ð 
ð  '¨Ô(Eð! 
ð" ˜4Ô+ð# 
ð$ # DÔ$=ð% 
ð& & tÔ'Cð' 
ð( '¨Ô(Eð) 
ð* & tÔ'Cð+ 
ð, ! $Ô"9ð- 
ð. '¨Ô(Eð/ 
ð0 "Ô/Ø(,Ô(EØœ×/Ò/Ñ1Ô1Ø*.Ô*Iðð àÔ,ðñ ô ð9 
ð  
ð  
ð  	
r&   rè   c                 ó<  — t          |¦  «        }i }t          |                     di ¦  «        ¦  «        }|                     ¦   «         D ]X\  }}t          |t          ¦  «        sŒ	 t          |¦  «        }t                               |¦  «        ||<   ŒI# t          $ r Y ŒUw xY wi }t          |                     di ¦  «        ¦  «                             ¦   «         D ]"\  }}	t                               |	¦  «        ||<   Œ#i }
t          |                     di ¦  «        ¦  «                             ¦   «         D ]B\  }}		 t          |¦  «        }t                               |	¦  «        |
|<   Œ3# t          $ r Y Œ?w xY wt          ¦   «         }d|v r t                               |d         ¦  «        }t          ¦   «         dz  }d|v rt          |d         ¦  «        }|                     di ¦  «        }t          |t          ¦  «        si }|                     d¦  «        }|€St          |                     d	¦  «        t          ¦  «        r)|                     d	i ¦  «                             d
¦  «        nd }|                     d¦  «        }|€St          |                     d	¦  «        t          ¦  «        r)|                     d	i ¦  «                             d¦  «        nd }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }t          |                     d¦  «        t          ¦  «        r|                     d¦  «        ni }d|v r|                     d¦  «        }d}n|                     d¦  «        }d}t          ||¦  «        }d|v r|                     d¦  «        }n|                     d¦  «        }t          |d¦  «        }|€*t          |t          ¦  «        r|                     d¦  «        }t          ¦   «         }|�|}d|v r|                     d¦  «        }d}n|                     d¦  «        }d}t          ||¦  «        }t!          |                     d¦  «        d¦  «        }	 t#          |                     dd¦  «        ¦  «        }t%          |d¦  «        }n# t&          t          f$ r d}Y nw xY wddlm}  ||                     d¦  «        pg ¦  «        }  | d&i d|“d|“d|“d|
“d|                     ddd g¦  «        “d|“d|“d!t          |                     d!¦  «        d¦  «        “d"t          |                     d"¦  «        d¦  «        “d#t          |                     d#¦  «        d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d¦  «        “dt          |d$¦  «        “dt          |d$¦  «        “d|“d|“d|“d|“d%t,                               |                     d%i ¦  «        ¦  «        “d|“d| “ŽS )'Nr¥   rp  rq  ro  rx  ry  rv  r}  Ústtrô   r~  Úecho_transcriptsr  r€  r‚  Úgatewayrƒ  rI   r„  Tr�  zgateway.max_concurrent_sessionsr…  rS   rˆ  r‡  r   )Úparse_profile_routesr‰  ru  rs  rt  rz  r{  r|  Fr†  rÍ   )rR   rh   r0  r   rQ   ru   r   rí   r<   rû   r   r   rO   r%   r3   rH   rY   rA   Úmaxr;   Úgateway.profile_routingr±  r;  )!r    rè   r¥   r^   Úplatform_nameÚplatform_datarÞ   rp  Ú	type_nameÚpolicy_datarq  Údefault_policyry  rv  r}  r~  r  r€  r‚  Únested_gatewayÚsystemd_watchdog_rawÚsystemd_watchdog_keyrƒ  Úloop_watchdog_rawr„  Úenv_multiplexÚmax_concurrent_rawÚmax_concurrent_keyr�  r…  rˆ  r±  r‰  s!                                    r$   rí   zGatewayConfig.from_dict<  s"  € å˜DÑ!Ô!ˆØˆ	Ý% d§h¢h¨{¸BÑ&?Ô&?Ñ@Ô@ˆØ,:×,@Ò,@Ñ,BÔ,Bð 	ð 	Ñ(ˆM˜=Ý˜m­TÑ2Ô2ð ØðÝ# MÑ2Ô2�Ý&4×&>Ò&>¸}Ñ&MÔ&M�	˜(Ñ#Ð#øÝð ð ð Ø�ðøøøð ˆÝ&2°4·8²8¸OÈRÑ3PÔ3PÑ&QÔ&Q×&WÒ&WÑ&YÔ&Yð 	Qð 	QÑ"ˆI�{Ý'9×'CÒ'CÀKÑ'PÔ'PˆM˜)Ñ$Ð$àÐÝ*6°t·x²xÐ@SÐUWÑ7XÔ7XÑ*YÔ*Y×*_Ò*_Ñ*aÔ*að 	ð 	Ñ&ˆM˜;ðÝ# MÑ2Ô2�Ý.@×.JÒ.JÈ;Ñ.WÔ.WÐ! (Ñ+Ð+øÝð ð ð Ø�ðøøøõ ,Ñ-Ô-ˆØ! TÐ)Ð)Ý/×9Ò9¸$Ð?UÔ:VÑWÔWˆNå&Ñ(Ô(¨:Ñ5ˆØ˜TÐ!Ð!Ý  ^Ô 4Ñ5Ô5ˆLàŸšÐ"2°BÑ7Ô7ˆÝ˜.­$Ñ/Ô/ð 	 ØˆNà—h’h˜}Ñ-Ô-ˆØÐÝ@JÈ4Ï8Ê8ÐTYÉ?Ì?Õ\`Ñ@aÔ@aÐk˜$Ÿ(š( 5¨"Ñ-Ô-×1Ò1°)Ñ<Ô<Ð<ÐgkˆKØ#ŸxšxÐ(>Ñ?Ô?ÐØÐ'õ ˜dŸhšh u™oœo­tÑ4Ô4ð�—’˜ Ñ#Ô#×'Ò'Ð(:Ñ;Ô;Ð;àð !ð #'§(¢(Ð+DÑ"EÔ"EÐØ#'§8¢8Ð,FÑ#GÔ#GÐ Ø!ŸXšXÐ&:Ñ;Ô;ÐÝ0:¸4¿8º8ÀIÑ;NÔ;NÕPTÑ0UÔ0UÐ]˜Ÿš )Ñ,Ô,Ð,Ð[]ˆØ%¨Ð-Ð-Ø#'§8¢8Ð,FÑ#GÔ#GÐ Ø#=Ð Ð à#1×#5Ò#5Ð6PÑ#QÔ#QÐ Ø#EÐ Ý#BØ Ð"6ñ$
ô $
Ð ð ˜dÐ"Ð"Ø $§¢¨Ñ 9Ô 9ÐÐà .× 2Ò 2°?Ñ CÔ CÐÝ$Ð%6¸Ñ=Ô=ˆØÐ%­*°^ÅTÑ*JÔ*JÐ%ð "0×!3Ò!3Ð4HÑ!IÔ!IÐõ 9Ñ:Ô:ˆØÐ$Ø!.ÐØ$¨Ð,Ð,Ø!%§¢Ð*CÑ!DÔ!DÐØ!:ÐÐà!/×!3Ò!3Ð4MÑ!NÔ!NÐØ!BÐÝ"?ØØñ#
ô #
Ðõ $GØ�HŠHÐ/Ñ0Ô0Øñ$
ô $
Ð ð
	,Ý),¨T¯XªXÐ6RÐTVÑ-WÔ-WÑ)XÔ)XÐ&Ý),Ð-GÈÑ)KÔ)KÐ&Ð&øÝ�:Ð&ð 	,ð 	,ð 	,Ø)+Ð&Ð&Ð&ð	,øøøð 	AÐ@Ð@Ð@Ð@Ð@Ø-Ð-¨d¯hªhÐ7GÑ.HÔ.HÐ.NÈBÑOÔOˆàˆsð 
ð 
ð 
Ø�ið
à!/ ð
ð (˜-ð
ð 0Ð/ð	
ð
  Ÿ8š8Ð$4°v¸xÐ6HÑIÔIÐIð
ð *˜>ð
ð &˜ð
õ !-¨T¯XªXÐ6KÑ-LÔ-LÈdÑ SÔ SÐ Sð
õ *¨$¯(ª(Ð3EÑ*FÔ*FÈÑMÔMÐMð
õ &2Ø—’Ð3Ñ4Ô4°dñ&ô &ð &ð
õ % [°$Ñ7Ô7Ð7ð
õ ".Ð.BÀDÑ!IÔ!IÐ!Ið
õ %1Ð1HÈ$Ñ$OÔ$OÐ$Oð
õ  &2Ð2JÈEÑ%RÔ%RÐ%Rð!
õ"  ,Ð,>ÀÑFÔFÐFð#
ð$ &>Ð%=ð%
ð& (˜-ð'
ð( %<Ð$;ð)
ð* &>Ð%=ð+
õ, &×/Ò/°·²¸ÀbÑ0IÔ0IÑJÔJÐJð-
ð. (BÐ'Að/
ð0 *˜>ð1
ð 	
s6   Á%,BÂ
BÂBÄ9,E&Å&
E3Å2E3Ñ83R, Ò,SÓSc                 óÜ   — |rd| j                              |¦  «        }|r6d|j        v r-t          |j                             d¦  «        | j        ¦  «        S |t
          j        k    rdS | j        S )a*  Return the effective unauthorized-DM behavior for a platform.

        Email is inbox-shaped, not chat-shaped, so it defaults to ``"ignore"``
        unless ``platforms.email.unauthorized_dm_behavior`` explicitly opts
        into pairing. A global default does not opt email into pairing.
        r…  rU   )r¥   rh   ra   rY   r…  ru   r¾   ©rå   rÞ   Úplatform_cfgs      r$   Úget_unauthorized_dm_behaviorz*GatewayConfig.get_unauthorized_dm_behaviorÃ  s�   € ð ð 	 Øœ>×-Ò-¨hÑ7Ô7ˆLØð Ð :¸lÔ>PÐ PÐ PÝ:Ø Ô&×*Ò*Ð+EÑFÔFØÔ1ñô ð ð �8œ>Ò)Ð)Ø�xØÔ,Ð,r&   c                 ó¤   — |rM| j                              |¦  «        }|r1d|j        v r(t          |j                             d¦  «        d¦  «        S dS )z9Return the effective notice-delivery mode for a platform.Únotice_deliveryrZ   )r¥   rh   ra   r]   rÁ  s      r$   Úget_notice_deliveryz!GatewayConfig.get_notice_deliveryÕ  sf   € àð 	Øœ>×-Ò-¨hÑ7Ô7ˆLØð Ð 1°\Ô5GÐ GÐ GÝ1Ø Ô&×*Ò*Ð+<Ñ=Ô=Øñô ð ð ˆxr&   )r   N)NNrn   )5r°   r±   r²   r³   r   rQ   r¥   r   ru   r   rî   rû   ro  rp  r    rq  ru  r	   rv  r   ry  r   rz  r6   r{  r|  r}  r~  r  r€  r�  r
   rA   r‚  rƒ  r„  r…  r;  r†  rˆ  r	  r‰  r‹  r’  r�  rÝ   rœ  rŸ  rç   rÌ   rí   rÃ  rÆ  rÍ   r&   r$   rn  rn  h  sä  € € € € € € ðð ð 16°ÀdÐ0KÑ0KÔ0K€Iˆt�H˜nÐ,Ô-ÐKÐKÑKð 05¨uÐEWÐ/XÑ/XÔ/XÐÐ,ÐXÐXÑXØ38°5ÈÐ3NÑ3NÔ3N€M�4˜Ð/Ð/Ô0ÐNÐNÑNØ<A¸EÐRVÐ<WÑ<WÔ<WÐ�t˜HÐ&8Ð8Ô9ÐWÐWÑWð !& Ð6PÐ6PÐ QÑ QÔ Q€N�D˜”IÐQÐQÑQð &+ U¸4Ð%@Ñ%@Ô%@€N�D˜˜c˜”NÐ@Ð@Ñ@ð ˜Ð/UÐ/UÐVÑVÔV€L�$ÐVÐVÑVð !%Ð˜Ð$Ð$Ñ$ð "Ð�dÐ!Ð!Ñ!ð &*Ð˜dÐ)Ð)Ñ)ð €K�ÐÐÑØ!%Ð˜$Ð%Ð%Ñ%ð %)Ð˜TÐ(Ð(Ñ(Ø%*Ð˜dÐ*Ð*Ñ*Ø-1Ð˜X cœ]Ð1Ð1Ñ1ð  %Ð˜Ð$Ð$Ñ$ð %&Ð˜cÐ%Ð%Ñ%ð €M�4ÐÐÑð %+Ð˜cÐ*Ð*Ñ*ð "' °Ð!GÑ!GÔ!G€IˆÐGÐGÑGð ')Ð Ð(Ð(Ñ(ð
 !˜5°Ð6Ñ6Ô6€N�DÐ6Ð6Ñ6ð
ð 
ð 
ð 
ð
=¨¨h¬ð =ð =ð =ð =ð"(¨xð (Àð (ÐTXð (ð (ð (ð (ðT¨ð °h¸{Ô6Kð ð ð ð ð (,Ø&*ð)ð )à˜8Ô$ð)ð ˜s”mð)ð 
ð	)ð )ð )ð )ð(!
˜˜c 3˜hœð !
ð !
ð !
ð !
ðF ðD
˜T # s (œ^ð D
°ð D
ð D
ð D
ñ „[ðD
ðL-ð -°X¸hÔ5Gð -ÐSVð -ð -ð -ð -ð$	ð 	¨H°XÔ,>ð 	È#ð 	ð 	ð 	ð 	ð 	ð 	r&   rn  c                  ó  ‡2— t          ¦   «         } i }| dz  }|                     ¦   «         r�	 t          |dd¬¦  «        5 }t          j        |¦  «        pi }ddd¦  «         n# 1 swxY w Y   t
                               d|¦  «         n3# t          $ r&}t
                               d||¦  «         Y d}~nd}~ww xY w	 ddl	}| d	z  }|                     ¦   «         �r<t          |d¬¦  «        5 }| 
                    |¦  «        pi }ddd¦  «         n# 1 swxY w Y   dd
lm} |                     |¦  «        }|                     d¦  «        }	|                     d¦  «        }
d|vr*t          |	t           ¦  «        r|	                     d¦  «        }
|
rt          |
t           ¦  «        r|
|d<   |                     d¦  «        }|€*t          |	t           ¦  «        r|	                     d¦  «        }|�Ht          |t           ¦  «        r||d<   n-t
                               dt#          |¦  «        j        ¦  «         |                     d¦  «        }d|vr*t          |	t           ¦  «        r|	                     d¦  «        }t          |t           ¦  «        r||d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   |                     d¦  «        }d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r|d         |d<   |                     d¦  «        }|€*t          |	t           ¦  «        r|	                     d¦  «        }t          |t&          ¦  «        r||d<   t          |	t           ¦  «        r1d|	v rd|vr|	d         |d<   d|	v r|	d         |d<   d|	v r|	d         |d<   d|v r|d         |d<   |                     d¦  «        }t          |t           ¦  «        s*t          |	t           ¦  «        r|	                     d¦  «        }t          |t           ¦  «        r||d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r|d         |d<   n$t          |	t           ¦  «        rd|	v r|	d         |d<   d|v r't)          |                     d¦  «        d¦  «        |d<   n?t          |	t           ¦  «        r*d|	v r&t)          |	                     d¦  «        d¦  «        |d<   t          |t           ¦  «        r|                     d¦  «        nd}|                     di ¦  «        Š2t          ‰2t           ¦  «        si Š2‰2|d<   d t,          d!dfˆ2fd"„} ||¦  «          ||                     d¦  «        ¦  «         t          |t           ¦  «        rri }|                     ¦   «         D ]N\  }}|dk    rŒ	 t1          |¦  «         n# t2          t4          f$ r Y Œ0w xY wt          |t           ¦  «        r|||<   ŒO|r ||¦  «         ‰2                     d#¦  «        }t          |t           ¦  «        rV|                     d$¦  «        }t          |t           ¦  «        si }||d$<   d%D ]"}||v r||vr|                     |¦  «        ||<   Œ#‰2r‰2|d<   	 dd&lm}  |¦   «          dd'lm} n4# t          $ r'}t
                                d(|¦  «         d}Y d}~nd}~ww xY wt'          t0          ¦  «        }|�]| !                    ¦   «         D ]H}	 t1          |j"        ¦  «        }n# t2          tF          f$ r Y Œ+w xY w||vr| $                    |¦  «         ŒI|D �]i}|t0          j%        k    rŒ|                     |j&        ¦  «        }t          |t           ¦  «        }|sb||                     d¦  «        fD ]J}t          |t           ¦  «        r3|                     |j&        ¦  «        } t          | t           ¦  «        r| } nŒKt          |t           ¦  «        sŒ½i }!d|v r:t)          |                     d¦  «        |                     dd¦  «        ¦  «        |!d<   d)|v r&tO          |                     d)¦  «        d*¦  «        |!d)<   d+|v r|d+         |!d+<   d,|v r|d,         |!d,<   d-|v r|d-         |!d-<   d.|v r|d.         |!d.<   d/|v r|d/         |!d/<   |t0          j(        k    rd0|v r|d0         |!d0<   |t0          j(        k    rd1|v r|d1         |!d1<   |t0          j(        k    rd2|v r|d2         |!d2<   d3|v r|d3         |!d3<   d4|v r|d4         |!d4<   d5|v r|d5         |!d5<   |t0          j(        k    rd6|v r|d6         |!d6<   d7|v r|d7         |!d7<   d8|v r|d8         |!d8<   d9|v r|d9         |!d9<   d:|v r|d:         |!d:<   d;|v r|d;         |!d;<   d<|v r|d<         |!d<<   d=|v r|d=         |!d=<   d>|v r|d>         |!d><   |t0          j)        t0          j*        hv rd?|v r|d?         |!d?<   d@|v rD|d@         }"t          |"t           ¦  «        r"dA„ |"                     ¦   «         D ¦   «         |!d@<   n|"|!d@<   dB|v r|dB         |!dB<   dC|v r|dC         |!dC<   dD|v r|dD         |!dD<   |t0          j+        t0          j,        hv r,dED ])}||v r#||                     d$i ¦  «        vr||         |!|<   Œ*|t0          j-        k    r,dFD ])}||v r#||                     d$i ¦  «        vr||         |!|<   Œ*dG|v }#|#rc|                     dG¦  «        }$t          |$t           ¦  «        r9t]          ‰2|j&        ¦  «        \  }%}&dH„ |$                     ¦   «         D ¦   «         |%dG<   |odI|v }'|!s|'s|#s�Œ*t]          ‰2|j&        ¦  «        \  }%}(|'r|dI         |%dI<   dJ|(dK<   |( /                    |!¦  «         �Œk|��^| 0                    ¦   «         D �]H})|)j1        €Œ|                     |)j"        ¦  «        }t          |t           ¦  «        sb||                     d¦  «        fD ]J}t          |t           ¦  «        r3|                     |)j"        ¦  «        } t          | t           ¦  «        r| } nŒKt          |t           ¦  «        sŒ²	 |) 1                    ||¦  «        }*n8# t          $ r+}t
                                dL|)j"        |¦  «         Y d}~Œúd}~ww xY wt          |*t           ¦  «        r|*s�Œt]          ‰2|)j"        ¦  «        \  }+}(|( /                    |*¦  «         �ŒJ|                     d.¦  «        },|,�®|                     dM¦  «        pi }-d.|-vr“‰2                     t0          j(        j&        i ¦  «        }.|.                     d$i ¦  «        }/|/                     d.|,¦  «         te          j3        dN¦  «        s.ti          |,¦  «         5                    ¦   «         td          j6        dN<   |                     dOi ¦  «        }0t          |0t           ¦  «        rLd.|0v rHte          j3        dP¦  «        s4ti          |0d.         ¦  «         5                    ¦   «         td          j6        dP<   n6# t          $ r)}t
                               dQ| d	z  |¦  «         Y d}~nd}~ww xY wtn           8                    |¦  «        }1ts          |1¦  «         tu          |1¦  «         |1S )Ru  
    Load gateway configuration from multiple sources.

    Priority (highest to lowest):
    1. Environment variables
    2. ~/.hermes/config.yaml (primary user-facing config)
    3. ~/.hermes/gateway.json (legacy â€” provides defaults under config.yaml)
    4. Built-in defaults
    zgateway.jsonr«  zutf-8)ÚencodingNu<   Loaded legacy %s â€” consider moving settings to config.yamlzFailed to load %s: %sr   zconfig.yaml)Úmanaged_scoper°  Úsession_resetro  rv  zIIgnoring invalid quick_commands in config.yaml (expected mapping, got %s)r®  r~  r  r€  r‚  r‰  r�  rƒ  r†  ru  r{  rz  r|  r…  rS   r¥   Úsource_platformsr   c                 ó‚  •— t          | t          ¦  «        sd S |                      ¦   «         D ]‘\  }}t          |t          ¦  «        sŒ‰                     |i ¦  «        }t          |t          ¦  «        si }i |                     di ¦  «        ¥|                     di ¦  «        ¥}d|v rd|d<   i |¥|¥}|r||d<   |‰|<   Œ’d S )Nra   rô   TÚ_enabled_explicit)r   rQ   r0  rh   )rË  Ú	plat_nameÚ
plat_blockÚexistingÚmerged_extraÚmergedr^   s         €r$   Ú_merge_platform_mapz0load_gateway_config.<locals>._merge_platform_map—  sö   ø€ Ý!Ð"2µDÑ9Ô9ð Ø�FØ-=×-CÒ-CÑ-EÔ-Eð 7ð 7Ñ)�I˜zÝ% jµ$Ñ7Ô7ð !Ø Ø-×1Ò1°)¸RÑ@Ô@�HÝ% hµÑ5Ô5ð &Ø#%˜à#_ h§l¢l°7¸BÑ&?Ô&?Ð#_À:Ç>Â>ÐRYÐ[]ÑC^ÔC^Ð#_�LØ  JÐ.Ð.Ø<@˜Ð%8Ñ9Ø7 Ð7¨JÐ7�FØ#ð 7Ø*6˜˜w™Ø06�N 9Ñ-Ð-ð7ð 7r&   rƒ   ra   )ÚportrC   ÚhostÚcors_originsÚ
model_namer”  r’   zplugin discovery skipped: %srÅ  rZ   Úreply_prefixÚreply_in_threadÚcron_continuable_surfaceÚrequire_mentionÚsend_read_receiptsÚallowed_chatsÚgroup_allowed_chatsÚallowed_topicsÚfree_response_channelsÚmention_patternsÚexclusive_bot_mentionsÚ"observe_unmentioned_group_messagesÚ	dm_policyÚ
allow_fromÚallow_admin_fromÚuser_allowed_commandsÚgroup_policyÚgroup_allow_fromÚgroup_allow_admin_fromÚgroup_user_allowed_commandsÚchannel_skill_bindingsÚchannel_promptsc                 ó4   — i | ]\  }}t          |¦  «        |“ŒS rÍ   )r    r¥  s      r$   r/  z'load_gateway_config.<locals>.<dictcomp>6  s$   € Ð5dÐ5dÐ5dÁDÀAÀqµc¸!±f´f¸aÐ5dÐ5dÐ5dr&   r$  r%  r&  )rÔ  rÕ  Úsecret)rÔ  rÕ  r)  c                 ó^   — i | ]*\  }}t          |t          ¦  «        ¯t          |¦  «        |“Œ+S rÍ   )r   rQ   r    )rÏ   r-  r6  s      r$   r/  z'load_gateway_config.<locals>.<dictcomp>X  sD   € ð :ð :ð :á ,  WÝ)¨'µ4Ñ8Ô8ð:Ý ™HœH gð:ð :ð :r&   rô   TrÍ  z&apply_yaml_config_fn for %s raised: %srw   ÚTELEGRAM_REQUIRE_MENTIONr|   ÚSIGNAL_REQUIRE_MENTIONus   Failed to process config.yaml â€” falling back to .env / gateway.json values. Check %s for syntax errors. Error: %s);r   r«   ÚopenÚjsonÚloadr.   ÚinforŸ   r/   ÚyamlÚ	safe_loadÚ
hermes_clirÉ  Úapply_managed_overlayrh   r   rQ   rª  r°   r	  rY   rb   r   r0  ru   r<   ÚAttributeErrorÚpopr–  r•  r�   r“   ÚdebugÚplugin_entriesr_   ÚKeyErrorr�  r´   r   r]   rµ   r¶   r¹   rÂ   rÃ   rÁ   rd   ÚupdateÚall_entriesÚapply_yaml_config_fnr*   r+   r    r"   rg   rn  rí   Ú_apply_env_overridesÚ_validate_gateway_config)3Ú_homeÚgw_dataÚgateway_json_pathÚfÚer÷  Úconfig_yaml_pathÚyaml_cfgrÉ  Úgateway_sectionÚsrÚqcÚstt_cfgÚgateway_cfgÚ_prÚstreaming_cfgÚgateway_platformsrÓ  Ú_nested_platformsÚ_kÚ_vÚ	_api_platÚ
_api_extraÚ_bridge_keyr•  Ú_shared_loop_targetsÚ_entryÚ_platÚplatrÂ  Ú_cfg_toplevelÚ_srcÚ
_candidateÚbridgedrí  Úhas_channel_overridesr5  rc   Ú_extraÚenabled_was_explicitra   rš  Úseededr�   Ú_tl_require_mentionÚ_tg_sectionÚ_tg_platÚ	_tg_extraÚ
signal_cfgr÷   r^   s3                                                     @r$   Úload_gateway_configr+  á  s  ø€ õ ÑÔ€EØ€Gð  Ñ.ÐØ×ÒÑ!Ô!ð 	Jð	JÝÐ'¨°wÐ?Ñ?Ô?ð -À1Ýœ) A™,œ,Ð,¨"�ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -å�KŠKØNØ!ñô ð ð øõ ð 	Jð 	Jð 	JÝ�NŠNÐ2Ð4EÀqÑIÔIÐIÐIÐIÐIÐIÐIøøøøð	JøøøðO
ØˆˆˆØ  =Ñ0ÐØ×"Ò"Ñ$Ô$ñ u	fÝÐ&°Ð9Ñ9Ô9ð 3¸QØŸ>š>¨!Ñ,Ô,Ð2°�ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð 1Ð0Ð0Ð0Ð0Ð0Ø$×:Ò:¸8ÑDÔDˆHð 'Ÿlšl¨9Ñ5Ô5ˆOð —’˜oÑ.Ô.ˆBØ hÐ.Ð.µ:¸oÍtÑ3TÔ3TÐ.Ø$×(Ò(¨Ñ9Ô9�Øð 5•j ¥TÑ*Ô*ð 5Ø24�Ð.Ñ/à—’Ð.Ñ/Ô/ˆBØˆz�j¨½$Ñ?Ô?ˆzØ$×(Ò(Ð)9Ñ:Ô:�Øˆ~Ý˜b¥$Ñ'Ô'ð Ø02�GÐ,Ñ-Ð-å—N’Nð5å˜R™œÔ)ñô ð ð —l’l 5Ñ)Ô)ˆGØ˜HÐ$Ð$­°OÅTÑ)JÔ)JÐ$Ø)×-Ò-¨eÑ4Ô4�Ý˜'¥4Ñ(Ô(ð )Ø!(�˜‘Ø%¨Ð1Ð1Ø2:Ð;QÔ2R�Ð.Ñ/Ð/Ý˜O­TÑ2Ô2ð ZÐ7MÐQ`Ð7`Ð7`Ø2AÐBXÔ2Y�Ð.Ñ/à"Ÿ,š, yÑ1Ô1ˆKà(¨HÐ4Ð4Ø5=Ð>WÔ5X�Ð1Ñ2Ð2Ý˜O­TÑ2Ô2ð `Ð7PÐTcÐ7cÐ7cØ5DÐE^Ô5_�Ð1Ñ2à)¨XÐ5Ð5Ø6>Ð?YÔ6Z�Ð2Ñ3Ð3Ý˜O­TÑ2Ô2ð bÐ7QÐUdÐ7dÐ7dØ6EÐF`Ô6a�Ð2Ñ3ð
 $ xÐ/Ð/Ø08Ð9MÔ0N�Ð,Ñ-ð
 —,’,Ð/Ñ0Ô0ˆCØˆ{�z¨/½4Ñ@Ô@ˆ{Ø%×)Ò)Ð*:Ñ;Ô;�Ý˜#�tÑ$Ô$ð 0Ø,/�Ð(Ñ)å˜/­4Ñ0Ô0ð 	Ø'¨?Ð:Ð:Ð?SÐ[bÐ?bÐ?bà4CÐDXÔ4Y�GÐ0Ñ1Ø,°Ð?Ð?Ø9HÐIbÔ9c�GÐ5Ñ6Ø-°Ð@Ð@Ø:IØ2ô;�GÐ6Ñ7ð )¨HÐ4Ð4Ø5=Ð>WÔ5X�Ð1Ñ2à$ŸLšL¨Ñ5Ô5ˆMÝ˜m­TÑ2Ô2ð AµzÀ/ÕSWÑ7XÔ7Xð Að !0× 3Ò 3°KÑ @Ô @�Ý˜-­Ñ.Ô.ð 5Ø'4�˜Ñ$à 8Ð+Ð+Ø,4Ð5EÔ,F�Ð(Ñ)Ð)Ý˜O­TÑ2Ô2ð NÐ7GÈ?Ð7ZÐ7ZØ,;Ð<LÔ,M�Ð(Ñ)à! XÐ-Ð-Ø.6Ð7IÔ.J�Ð*Ñ+Ð+Ý˜O­TÑ2Ô2ð RÐ7IÈ_Ð7\Ð7\Ø.=Ð>PÔ.Q�Ð*Ñ+ð %¨Ð0Ð0Ø19Ð:OÔ1P�Ð-Ñ.Ð.Ý˜O­TÑ2Ô2ð XÐ7LÐP_Ð7_Ð7_Ø1@ÐAVÔ1W�Ð-Ñ.à)¨XÐ5Ð5Ø6>Ø.ô7�Ð2Ñ3Ð3õ ˜O­TÑ2Ô2ð Ð7QÐUdÐ7dÐ7dØ6EØ.ô7�Ð2Ñ3ð *¨XÐ5Ð5Ý6YØ—L’LÐ!;Ñ<Ô<Øñ7ô 7�Ð2Ñ3Ð3õ ˜O­TÑ2Ô2ð Ð7QÐUdÐ7dÐ7dÝ6YØ#×'Ò'Ð(BÑCÔCØñ7ô 7�Ð2Ñ3õ AKÈ;ÕX\Ñ@]Ô@]Ð g §¢°Ñ <Ô <Ð <ÐcgÐØ$×/Ò/°¸RÑ@Ô@ˆNÝ˜n­dÑ3Ô3ð 6Ø!#�Ø'5�˜Ñ$ð7µcð 7¸dð 7ð 7ð 7ð 7ð 7ð 7ð$  ÐÐ 1Ñ2Ô2Ð2ØÐ §¢¨[Ñ 9Ô 9Ñ:Ô:Ð:õ ˜+¥tÑ,Ô,ð ;Ø*,Ð!Ø)×/Ò/Ñ1Ô1ð 3ð 3‘F�B˜Ø˜[Ò(Ð(Ø ð!Ý  ™œ˜˜øÝ&­Ð7ð !ð !ð !Ø ˜ð!øøøå! "¥dÑ+Ô+ð 3Ø02Ð)¨"Ñ-øØ$ð ;Ø'Ð'Ð(9Ñ:Ô:Ð:ð '×*Ò*¨<Ñ8Ô8ˆIÝ˜)¥TÑ*Ô*ð MØ&Ÿ]š]¨7Ñ3Ô3�
Ý! *­dÑ3Ô3ð 4Ø!#�JØ)3�I˜gÑ&Ø#Xð Mð M�KØ" iÐ/Ð/°KÀzÐ4QÐ4QØ2;·-²-ÀÑ2LÔ2L˜
 ;Ñ/øàð 6Ø'5�˜Ñ$ðØ?Ð?Ð?Ð?Ð?Ð?Ø Ð Ñ"Ô"Ð"ØNÐNÐNÐNÐNÐNÐNøÝð ð ð Ý—’Ð;¸QÑ?Ô?Ð?Ø������øøøøðøøøõ *.­h©¬Ð ØˆØ!×0Ò0Ñ2Ô2ð ;ð ;�Fð!Ý (¨¬Ñ 5Ô 5˜˜øÝ&­Ð1ð !ð !ð !Ø ˜ð!øøøàÐ$8Ð8Ð8Ø,×3Ò3°EÑ:Ô:Ð:øà,ð E&ñ E&�Ø�8œ>Ò)Ð)ØØ'Ÿ|š|¨D¬JÑ7Ô7�Ý *¨<½Ñ >Ô >�ð %ð &Ø!2°H·L²LÀÑ4MÔ4MÐ Nð &ð &˜Ý% d­DÑ1Ô1ð &Ø)-¯ª°$´*Ñ)=Ô)=˜JÝ)¨*µdÑ;Ô;ð &Ø/9 Ø % øÝ! ,µÑ5Ô5ð Øà�Ø-°Ð=Ð=Ý:]Ø$×(Ò(Ð)CÑDÔDØŸšÐ$>ÀÑGÔGñ;ô ;�GÐ6Ñ7ð %¨Ð4Ð4Ý1KØ$×(Ò(Ð):Ñ;Ô;Ø ñ2ô 2�GÐ-Ñ.ð " \Ð1Ð1Ø.:¸>Ô.J�G˜NÑ+Ø$¨Ð4Ð4Ø1=Ð>OÔ1P�GÐ-Ñ.Ø-°Ð=Ð=Ø:FÐGaÔ:b�GÐ6Ñ7Ø$¨Ð4Ð4Ø1=Ð>OÔ1P�GÐ-Ñ.Ø'¨<Ð7Ð7Ø4@ÐAUÔ4V�GÐ0Ñ1Ø�8Ô,Ò,Ð,°ÀLÐ1PÐ1PØ/;¸OÔ/L�G˜OÑ,Ø�8Ô,Ò,Ð,Ð1FÈ,Ð1VÐ1VØ5AÐBWÔ5X�GÐ1Ñ2Ø�8Ô,Ò,Ð,Ð1AÀ\Ð1QÐ1QØ0<Ð=MÔ0N�GÐ,Ñ-Ø+¨|Ð;Ð;Ø8DÐE]Ô8^�GÐ4Ñ5Ø%¨Ð5Ð5Ø2>Ð?QÔ2R�GÐ.Ñ/Ø+¨|Ð;Ð;Ø8DÐE]Ô8^�GÐ4Ñ5Ø�8Ô,Ò,Ð,Ð1UÐYeÐ1eÐ1eØDPÐQuÔDv�GÐ@ÑAØ ,Ð.Ð.Ø+7¸Ô+D�G˜KÑ(Ø <Ð/Ð/Ø,8¸Ô,F�G˜LÑ)Ø%¨Ð5Ð5Ø2>Ð?QÔ2R�GÐ.Ñ/Ø*¨lÐ:Ð:Ø7CÐD[Ô7\�GÐ3Ñ4Ø! \Ð1Ð1Ø.:¸>Ô.J�G˜NÑ+Ø%¨Ð5Ð5Ø2>Ð?QÔ2R�GÐ.Ñ/Ø+¨|Ð;Ð;Ø8DÐE]Ô8^�GÐ4Ñ5Ø0°LÐ@Ð@Ø=IÐJgÔ=h�GÐ9Ñ:Ø�HÔ,­h¬nÐ=Ð=Ð=ÐBZÐ^jÐBjÐBjØ8DÐE]Ô8^�GÐ4Ñ5Ø$¨Ð4Ð4Ø&2Ð3DÔ&E�OÝ! /µ4Ñ8Ô8ð EØ5dÐ5dÈO×LaÒLaÑLcÔLcÐ5dÑ5dÔ5d˜Ð 1Ñ2Ð2à5D˜Ð 1Ñ2Ø1°\ÐAÐAØ>JÐKiÔ>j�GÐ:Ñ;Ø%¨Ð5Ð5Ø2>Ð?QÔ2R�GÐ.Ñ/Ø'¨<Ð7Ð7Ø4@ÐAUÔ4V�GÐ0Ñ1ð �HÔ,­hÔ.FÐGÐGÐGØ'Að Mð M˜Ø&¨,Ð6Ð6¸;Èl×N^ÒN^Ð_fÐhjÑNkÔNkÐ;kÐ;kØ3?ÀÔ3L˜G KÑ0øØ�8Ô.Ò.Ð.Ø'7ð Mð M˜Ø&¨,Ð6Ð6¸;Èl×N^ÒN^Ð_fÐhjÑNkÔNkÐ;kÐ;kØ3?ÀÔ3L˜G KÑ0øØ(;¸|Ð(KÐ%Ø(ð 
Ø$0×$4Ò$4Ð5HÑ$IÔ$I�MÝ! -µÑ6Ô6ð Ý,GØ*¨D¬Jñ-ô -Ñ)˜	 6ð:ð :à0=×0CÒ0CÑ0EÔ0Eð:ñ :ô :˜	Ð"5Ñ6ð
 (5Ð'R¸ÀlÐ9RÐ$Øð Ð';ð ÐDYð ÙÝ#>¸~ÈtÌzÑ#ZÔ#ZÑ �	˜5Ø'ð 6Ø+7¸	Ô+B�I˜iÑ(ð 26�EÐ-Ñ.Ø—’˜WÑ%Ô%Ð%Ñ%ð ‰Ø Ÿ_š_Ñ.Ô.ð )ñ )�EØÔ1Ð9Ø Ø#+§<¢<°´
Ñ#;Ô#;�Lõ & lµDÑ9Ô9ð *Ø%6¸¿ºÀ[Ñ8QÔ8QÐ$Rð *ð *˜DÝ)¨$µÑ5Ô5ð *Ø-1¯XªX°e´jÑ-AÔ-A 
Ý#-¨j½$Ñ#?Ô#?ð !*Ø3= LØ$) EøÝ% lµDÑ9Ô9ð !Ø ð!Ø!&×!;Ò!;¸HÀlÑ!SÔ!S˜˜øÝ$ð !ð !ð !ÝŸšØDØ!œJ¨ñô ð ð !˜˜˜˜øøøøð!øøøõ & f­dÑ3Ô3ð !¸6ð !Ù Ý:¸>È5Ì:ÑVÔV‘H�A�uØ—L’L Ñ(Ô(Ð(Ñ(ð #+§,¢,Ð/@Ñ"AÔ"AÐØ"Ð.Ø&Ÿlšl¨:Ñ6Ô6Ð<¸"�Ø$¨KÐ7Ð7Ø-×8Ò8½Ô9JÔ9PÐRTÑUÔU�HØ (× 3Ò 3°G¸RÑ @Ô @�IØ×(Ò(Ð):Ð<OÑPÔPÐPõ œ9Ð%?Ñ@Ô@ð bÝADÐEXÑAYÔAY×A_ÒA_ÑAaÔAa�œ
Ð#=Ñ>ð "Ÿš h°Ñ3Ô3ˆJÝ˜*¥dÑ+Ô+ð fØ$¨
Ð2Ð2½2¼9ÐE]Ñ;^Ô;^Ð2Ý;>¸zÐJ[Ô?\Ñ;]Ô;]×;cÒ;cÑ;eÔ;e•B”JÐ7Ñ8øøõ" ð 
ð 
ð 
Ý�Šð4à�MÑ!Øñ		
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøõ ×$Ò$ WÑ-Ô-€Fõ ˜Ñ Ô Ð õ ˜VÑ$Ô$Ð$à€Ms  ¬B ¾A!ÁB Á!A%Á%B Á(A%Á)B Â
B8ÂB3Â3B8Â</| Ã+DÄ| ÄDÄ| ÄDÄU| Ù7ZÚ| ÚZÚ| ÚZÚB2| Ý]% Ý$| Ý%
^Ý/^Þ| Þ^Þ/| ß_ß| ß_/ß,| ß._/ß/U| õuõ| õ
võ$!v
ö| ö
vöF| ü
}
ü!}ý}
r÷   c           	      ó¢  — | j         }d|j        cxk    rdk    s)n t                               d|j        ¦  «         d|_        |j        �|j        dk    r't                               d|j        ¦  «         d|_        t
          }| j                             ¦   «         D ]e\  }}|j        sŒ| 	                    |¦  «        }|rA|j
        �:|j
                             ¦   «         s!t                               d|j        |¦  «         Œf	 dd	lm} n# t          $ r d}Y nw xY w|�¯| j                             ¦   «         D ]—\  }}|j        sŒ| 	                    |¦  «        }|sŒ%|j
        }|rg|                     ¦   «         rS ||d¬
¦  «        sFt                               d|j        ||                     ¦   «         dd…         dz   ¦  «         d|_        Œ–dS dS )z¿Validate and sanitize a loaded GatewayConfig in place.

    Called by ``load_gateway_config()`` after all config sources are merged.
    Extracted as a separate function for testability.
    r   é   z3Invalid at_hour=%s (must be 0-23). Using default 4.rþ   Nz?Invalid idle_minutes=%s (must be positive). Using default 1440.r   zG%s is enabled but %s is empty. The adapter will likely fail to connect.rI  rL  z�%s is enabled but %s is set to a placeholder value ('%s'). Set a real bot token before starting the gateway. The adapter will NOT be started.é   z...F)ro  rÿ   r.   r/   r  r  r¥   r0  rô   rh   r2   r!   r   rN  rJ  rO  Úerror)r÷   ÚpolicyÚ_token_env_namesrÞ   ÚpconfigÚenv_namerJ  r2   s           r$   r  r  Ù  sH  € ð Ô(€Fà�”Ð%Ð%Ò%Ð% 2Ò%Ð%Ð%Ð%Ý�ŠØAÀ6Ä>ñ	
ô 	
ð 	
ð ˆŒàÔÐ" fÔ&9¸QÒ&>Ð&>Ý�ŠØMØÔñ	
ô 	
ð 	
ð #ˆÔõ 0ÐØ#Ô-×3Ò3Ñ5Ô5ð 	ð 	Ñˆ�'ØŒð 	ØØ#×'Ò'¨Ñ1Ô1ˆØð 	˜œÐ1¸'¼-×:MÒ:MÑ:OÔ:OÐ1Ý�NŠNð;à” ñô ð øð!Ø5Ð5Ð5Ð5Ð5Ð5Ð5øÝð !ð !ð !Ø ÐÐÐð!øøøð Ð$Ø!'Ô!1×!7Ò!7Ñ!9Ô!9ð 	(ð 	(ÑˆH�gØ”?ð ØØ'×+Ò+¨HÑ5Ô5ˆHØð ØØ”MˆEØð (˜Ÿš™œð (Ð/@Ð/@ÀÐSTÐ/UÑ/UÔ/Uð (Ý—’ð7ð ”N H¨e¯kªk©m¬m¸B¸Q¸BÔ.?À%Ñ.Gñ	ô ð ð #(�”øð %Ð$ð	(ð 	(s   ÄD
 Ä
DÄDc                 ó®G  ‡ — t           }t          }dt          dt          fˆ fd„} |d¦  «        }|r |t          j        ¦  «        }||_         |dd¦  «                             ¦   «         }|dv rOt          j        ‰ j        vr t          ¦   «         ‰ j        t          j        <   |‰ j        t          j                 _         |dd¦  «        }|rot          j        ‰ j        vr t          ¦   «         ‰ j        t          j        <   d	„ | 	                    d
¦  «        D ¦   «         ‰ j        t          j                 j
        d<    |d¦  «        }|r_t          j        ‰ j        v rLt          t          j        | |dd¦  «         |d¦  «        pd¬¦  «        ‰ j        t          j                 _         |d¦  «        }	|	r |t          j        ¦  «        }
|	|
_         |d¦  «        }|r_t          j        ‰ j        v rLt          t          j        | |dd¦  «         |d¦  «        pd¬¦  «        ‰ j        t          j                 _         |dd¦  «                             ¦   «         }|dv rOt          j        ‰ j        vr t          ¦   «         ‰ j        t          j        <   |‰ j        t          j                 _        t           |dd¦  «        ¦  «        } |dd¦  «                             ¦   «         dv }t          j        ‰ j        v r+‰ j        t          j                 }|rd|_        n.|rd|_        n$|r"t          d¬¦  «        ‰ j        t          j        <    |d¦  «        }|r_t          j        ‰ j        v rLt          t          j        | |dd¦  «         |d¦  «        pd¬¦  «        ‰ j        t          j                 _         |d¦  «        } |d ¦  «        }|�r|�r t          j        ‰ j        vr t          ¦   «         ‰ j        t          j        <   d‰ j        t          j                 _        ‰ j        t          j                 j
                             ||d!œ¦  «          |d"¦  «        }|r|‰ j        t          j                 j
        d#<    |d$¦  «        }|r|‰ j        t          j                 j
        d%<    |d&¦  «        }|r|‰ j        t          j                 j
        d'<    |d(¦  «        }|r|‰ j        t          j                 j
        d)<    |d*¦  «        }|r|‰ j        t          j                 j
        d+<    |d,¦  «        }|r>	 t'          |¦  «        ‰ j        t          j                 j
        d-<   n# t(          $ r Y nw xY w |d.¦  «        }|r|‰ j        t          j                 j
        d/<    |d0¦  «        }|r|‰ j        t          j                 j
        d1<    |d2¦  «        }|r_t          j        ‰ j        v rLt          t          j        | |d3d¦  «         |d4¦  «        pd¬¦  «        ‰ j        t          j                 _         |d5¦  «        }|r»t          j        ‰ j        vr=t          ¦   «         ‰ j        t          j        <   d‰ j        t          j                 _        nO‰ j        t          j                 }t-          |j
                             d6d¦  «        ¦  «        }|j        s	|sd|_        |‰ j        t          j                 _         |d7¦  «        }|r˜‰ j                             t          j        t          d¬¦  «        ¦  «        }|j        } | duo
| j        |k    }!t          t          j        | |d8d¦  «         |d9¦  «        pd| r	|!r| j        nd| r	|!r| j        nd¬:¦  «        |_         |d;¦  «        }" |d<¦  «        }#|"rL|#rJ |t          j        ¦  «        }$|$j
                             |"|#t           |d=d>¦  «        ¦  «        d?œ¦  «          |d@¦  «        }%|%r_t          j        ‰ j        v rLt          t          j        |% |dAd¦  «         |dB¦  «        pd¬¦  «        ‰ j        t          j                 _         |dC¦  «        }&|&rN |dDd¦  «        }'|'st:                               dE¦  «          |t          j        ¦  «        }(|&|(_        |'|(j
        dF<    |dG¦  «        })|)r_t          j        ‰ j        v rLt          t          j        |) |dHd¦  «         |dI¦  «        pd¬¦  «        ‰ j        t          j                 _         |dJ¦  «        }* |dKd¦  «        }+|*s |dL¦  «        rï|+st:                               dM¦  «          |t          j         ¦  «        },|*r|*|,_        |+|,j
        dN<    |dOd¦  «        }-|-r
|-|,j
        dP<    |dLd¦  «        }.|.r
|.|,j
        dQ<    |dRd¦  «         !                    ¦   «                              ¦   «         }/|/dSv pt           |dTd¦  «        ¦  «        }0|0|,j
        dU<   |/r
|/|,j
        dV<    |dWd¦  «        }1|1r
|1|,j
        dX<    |dY¦  «        }2|2r_t          j         ‰ j        v rLt          t          j         |2 |dZd¦  «         |d[¦  «        pd¬¦  «        ‰ j        t          j                  _         |d\¦  «        }3|3r—t          j"        ‰ j        vr t          ¦   «         ‰ j        t          j"        <   d‰ j        t          j"                 _        |3‰ j        t          j"                 _         |d]¦  «        }4|4r|4‰ j        t          j"                 j
        dF<    |d^¦  «        }5 |d_¦  «        }6 |d`¦  «        }7 |da¦  «        }8tG          |5|6|7|8g¦  «        r‚t          j$        ‰ j        vr t          ¦   «         ‰ j        t          j$        <   d‰ j        t          j$                 _        ‰ j        t          j$                 j
                             |5|7|8dbœ¦  «          |dc¦  «        }9|9r_t          j$        ‰ j        v rLt          t          j$        |9 |ddd¦  «         |de¦  «        pd¬¦  «        ‰ j        t          j$                 _         |df¦  «        }:|:rut          j%        ‰ j        vr t          ¦   «         ‰ j        t          j%        <   d‰ j        t          j%                 _         |dgd¦  «        ‰ j        t          j%                 _&         |dh¦  «        };|;r_t          j%        ‰ j        v rLt          t          j%        |; |did¦  «         |dj¦  «        pd¬¦  «        ‰ j        t          j%                 _         |dkd¦  «        }< |dld¦  «        }= |dm¦  «        }> |dn¦  «        }?tO          |<¦  «        �rŽt          j(        ‰ j        vr t          ¦   «         ‰ j        t          j(        <   ‰ j        t          j(                 j
         )                    d6d¦  «        }@|@r‰ j        t          j(                 j        rd‰ j        t          j(                 _        |<r|<‰ j        t          j(                 j
        do<   |=r@dp„ |= 	                    d
¦  «        D ¦   «         }A|Ar|A‰ j        t          j(                 j
        dq<   |>r>	 t'          |>¦  «        ‰ j        t          j(                 j
        dr<   n# t(          $ r Y nw xY w|?r|?‰ j        t          j(                 j
        ds<    |dtd¦  «        }B|Br|B‰ j        t          j(                 j
        du<   t           |dvd¦  «        ¦  «        }C |dw¦  «        }D |dxd¦  «        }E|Cr°t          j*        ‰ j        vr t          ¦   «         ‰ j        t          j*        <   d‰ j        t          j*                 _        |Dr>	 t'          |D¦  «        ‰ j        t          j*                 j
        dr<   n# t(          $ r Y nw xY w|Er|E‰ j        t          j*                 j
        dy<   t           |dzd¦  «        ¦  «        }F |d{¦  «        }G |d|d¦  «        }H |d}d¦  «        }I |d~d¦  «        }J|Fst          j+        ‰ j        v s	|Gs|Hs|Is|J�r6t          j+        ‰ j        vr t          ¦   «         ‰ j        t          j+        <   |Frd‰ j        t          j+                 _        |Gr>	 t'          |G¦  «        ‰ j        t          j+                 j
        dr<   n# t(          $ r Y nw xY w|Hr|H‰ j        t          j+                 j
        d<   |Ir@d€„ |I 	                    d
¦  «        D ¦   «         }K|Kr|K‰ j        t          j+                 j
        d�<   |Jr@d‚„ |J 	                    d
¦  «        D ¦   «         }L|Lr|L‰ j        t          j+                 j
        dƒ<    |d„¦  «        }M |d…¦  «        }N|MrÜ|NrÚt          j,        ‰ j        vr t          ¦   «         ‰ j        t          j,        <   d‰ j        t          j,                 _        ‰ j        t          j,                 j
                             |M|Nd†œ¦  «          |d‡¦  «        }O|OrLt          t          j,        |O |dˆd¦  «         |d‰¦  «        pd¬¦  «        ‰ j        t          j,                 _         |dŠ¦  «        }P |d‹¦  «        }Q|P�rM|Q�rJt          j-        ‰ j        vr t          ¦   «         ‰ j        t          j-        <   d‰ j        t          j-                 _        ‰ j        t          j-                 j
                             |P|Q |dŒd�¦  «         |dŽd�¦  «        d�œ¦  «          |d‘d¦  «        }R|Rr|R‰ j        t          j-                 j
        d’<    |d“d¦  «        }S|Sr|S‰ j        t          j-                 j
        d”<    |d•¦  «        }T|TrLt          t          j-        |T |d–d¦  «         |d—¦  «        pd¬¦  «        ‰ j        t          j-                 _         |d˜¦  «        }U |d™¦  «        }V|U�r
|V�rt          j.        ‰ j        vr t          ¦   «         ‰ j        t          j.        <   d‰ j        t          j.                 _        ‰ j        t          j.                 j
                             |U|Vdšœ¦  «          |d›d¦  «        }W|Wr|W‰ j        t          j.                 j
        dœ<    |d�¦  «        }X|XrLt          t          j.        |X |džd¦  «         |dŸ¦  «        pd¬¦  «        ‰ j        t          j.                 _         |d ¦  «        }Y |d¡¦  «        }Z|Yrº|Zr¸t          j/        ‰ j        vr t          ¦   «         ‰ j        t          j/        <   d‰ j        t          j/                 _        ‰ j        t          j/                 j
                             |Y|Z |d¢d¦  «         |d£d¦  «         |d¤d¦  «         |d¥d¦  «         |d¦d§¦  «        d¨œ¦  «          |d©¦  «        }[ |dª¦  «        }\|[s|\�rIt          j0        ‰ j        vr t          ¦   «         ‰ j        t          j0        <   d‰ j        t          j0                 _        |[r|[‰ j        t          j0                 _        ‰ j        t          j0                 j
        }]|\r|\|]d«<    |d¬d¦  «         !                    ¦   «         }^|^r|^ 1                    d­¦  «        |]d®<    |d¯d¦  «         !                    ¦   «         }_|_r|_ 1                    d­¦  «        |]d°<    |d±d¦  «         !                    ¦   «                              ¦   «         }`|`r|`|]d²<    |d³d¦  «         !                    ¦   «                              ¦   «         }a|ar|a|]d´<    |dµd¦  «         !                    ¦   «         }b|br|b|]d¶<    |d·d¦  «         !                    ¦   «         }c|cr|c|]d¸<    |d¹d¦  «         !                    ¦   «         }d|dr|d|]dº<    |d»d¦  «         !                    ¦   «         }e|erLt          t          j0        |e |d¼d¦  «         |d½¦  «        pd¬¦  «        ‰ j        t          j0                 _         |d¾¦  «        }f |d¿¦  «        }g|f�r•|g�r’t          j2        ‰ j        vr t          ¦   «         ‰ j        t          j2        <   d‰ j        t          j2                 _        ‰ j        t          j2                 j
                             |f 1                    d­¦  «        |g |dÀdÁ¦  «         |dÂd§¦  «         |dÃdÄ¦  «        t           |dÅd>¦  «        ¦  «        dÆœ¦  «          |dÇ¦  «        }h|h�3|h                     ¦   «         dÈv ‰ j        t          j2                 j
        dÉ<    |dÊ¦  «        }i|irx	 tg          j4        |i¦  «        }jnC# tj          $ r6 dË„ |i 6                    dÌd
¦  «         	                    d
¦  «        D ¦   «         }jY nw xY w|j‰ j        t          j2                 j
        dÍ<    |dÎ¦  «        }k|kr_t          j2        ‰ j        v rLt          t          j2        |k |dÏd¦  «         |dÐ¦  «        pd¬¦  «        ‰ j        t          j2                 _         |dÑ¦  «        }l |dÒ¦  «        }m|ls|m�r™t          j7        ‰ j        vr t          ¦   «         ‰ j        t          j7        <   d‰ j        t          j7                 _        ‰ j        t          j7                 j
        }]|lr|l|]d#<   |mr|m|]dÓ<    |dÔd¦  «         !                    ¦   «         }n|nr|n|]d¶<    |dÕd¦  «         !                    ¦   «         }o|or|o|]d¸<    |dÖd¦  «         !                    ¦   «         }pd×}q|psP |dØd¦  «         !                    ¦   «         }r|rr0|r}pdÙ}qtq          j9        tt          ¦  «                             dÚ¦  «         |prbt          t          j7        |p |d×¦  «        p ||qd¦  «         |dÛ¦  «        p |dÜ¦  «        pd¬¦  «        ‰ j        t          j7                 _         |dÝ¦  «        p
 |dÞ¦  «        }s |dß¦  «        }t|s�r©|t�r¦t          j;        ‰ j        vr t          ¦   «         ‰ j        t          j;        <   d‰ j        t          j;                 _        ‰ j        t          j;                 j
        }]|s|]d#<   |t|]d%<    |dà¦  «        }u|ur|u|]dá<    |dâ¦  «        }v|vr|v|]dã<    |dä¦  «        }w|wr|w|]då<    |dæ¦  «        }x|xr|x|]dç<    |dè¦  «        }y|yrLt          t          j;        |y |déd¦  «         |dê¦  «        pd¬¦  «        ‰ j        t          j;                 _         |dë¦  «        }z|zr)|z !                    ¦   «                              ¦   «         |]d²<    |dì¦  «        }{|{r|{|]dí<    |dî¦  «        }|||r)|| !                    ¦   «                              ¦   «         |]d´<    |dï¦  «        }}|}r|}|]d¸<    |dð¦  «        }~|~r+	 t'          |~¦  «        ‰ j<        _=        n# t(          $ r Y nw xY w |dñ¦  «        }|r+	 t'          |¦  «        ‰ j<        _>        n# t(          $ r Y nw xY w	 dòdól?m@}€  |€¦   «          dòdôlAmB}� |� C                    ¦   «         D �]ò}‚	 t          |‚jD        ¦  «        }ƒn8# tj          $ r+}„t:           E                    dõ|‚jD        |„¦  «         Y d}„~„ŒId}„~„ww xY w‰ j                             |ƒ¦  «        }…|…�2|…j        s+t-          |…j
        pi                      d6d¦  «        ¦  «        rŒŸd}†|‚jF        �P	 |‚ F                    ¦   «         }†n:# tj          $ r-}„t:           E                    dö|‚jD        |„¦  «         d}†Y d}„~„nd}„~„ww xY w|…�|…j        �sJ|‚jG        ��B	 |…�/|…}‡|‡j        s%t          dt‘          |‡j
        pi ¦  «        ¬÷¦  «        }‡nt          d¬¦  «        }‡t“          |†t�          ¦  «        rj|†rht‘          t•          |‡døi ¦  «        pi ¦  «        }ˆ|† K                    ¦   «         D ]"\  }‰}Š|‰dùk    rŒ|ˆ                     |‰|Š¦  «         Œ#t          d|ˆ¬÷¦  «        }‡t-          |‚ G                    |‡¦  «        ¦  «        }‹n:# tj          $ r-}Œt:           E                    dú|‚jD        |Œ¦  «         d}‹Y d}Œ~Œnd}Œ~Œww xY w|‹s"t:           E                    dû|‚jD        ¦  «         �ŒL	 t-          |‚ L                    ¦   «         ¦  «        }�n:# tj          $ r-}„t:           E                    dü|‚jD        |„¦  «         d}�Y d}„~„nd}„~„ww xY w|�s	|‚jM        €�Œ´|ƒ‰ j        vrt          ¦   «         ‰ j        |ƒ<   d‰ j        |ƒ         _        t“          |†t�          ¦  «        rø|†röt‘          |†¦  «        }Ž|Ž )                    dùd¦  «        }�‰ j        |ƒ         j
                             |Ž¦  «         t“          |�t�          ¦  «        r—|�                     dý¦  «        r‚t          |ƒt�          |�dý         ¦  «        t�          |�                     dþ¦  «        pd¦  «        |�                     dÿ¦  «        rt�          |�dÿ         ¦  «        nd¬¦  «        ‰ j        |ƒ         _        �Œôn3# tj          $ r&}„t:           E                    �d |„¦  «         Y d}„~„nd}„~„ww xY wtŸ          jP        �dd¦  «         !                    ¦   «         }�d}‘‰ j                             t          jQ        ¦  «        }’|’�<t�          |’j
                             �d¦  «        pd¦  «         !                    ¦   «         }‘|�p|‘}“|“r3 |t          jQ        ¦  «        }”|“ 1                    d­¦  «        |”j
        �d<   ‰ j         R                    ¦   «         D ]}•|•j
         )                    d6d¦  «         ŒdS (  z/Apply environment variable overrides to config.rÞ   r   c                 óî   •— | ‰j         vr%t          d¬¦  «        ‰j         | <   ‰j         |          S ‰j         |          }t          |j                             dd¦  «        ¦  «        }|j        s	|sd|_        |S )NT©rô   rÍ  F)r¥   r   r6   ra   rh   rô   )rÞ   rø   r$  r÷   s      €r$   Ú_enable_from_envz._apply_env_overrides.<locals>._enable_from_env  sŠ   ø€ Ø˜6Ô+Ð+Ð+Ý)7ÀÐ)EÑ)EÔ)EˆFÔ˜XÑ&ØÔ# HÔ-Ð-à Ô*¨8Ô4ˆõ  $ OÔ$9×$=Ò$=Ð>QÐSXÑ$YÔ$YÑZÔZÐØÔ&ð 	+Ð/Cð 	+Ø&*ˆOÔ#ØÐr&   r  ÚTELEGRAM_REPLY_TO_MODErl   >   Úallr   r"  ÚTELEGRAM_FALLBACK_IPSc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rÍ   ©r!   )rÏ   Úips     r$   r¬  z(_apply_env_overrides.<locals>.<listcomp>>  sD   € ð E
ð E
ð E
ØÀRÇXÂXÁZÄZðE
Ø�HŠH‰JŒJðE
ð E
ð E
r&   Ú,Úfallback_ipsÚTELEGRAM_HOME_CHANNELÚTELEGRAM_HOME_CHANNEL_NAMErê   ÚTELEGRAM_HOME_CHANNEL_THREAD_IDN)rÞ   rß   r_   rà   r  ÚDISCORD_HOME_CHANNELÚDISCORD_HOME_CHANNEL_NAMEÚDISCORD_HOME_CHANNEL_THREAD_IDÚDISCORD_REPLY_TO_MODEÚWHATSAPP_ENABLED>   r   r   r   FTr6  ÚWHATSAPP_HOME_CHANNELÚWHATSAPP_HOME_CHANNEL_NAMEÚWHATSAPP_HOME_CHANNEL_THREAD_IDÚWHATSAPP_CLOUD_PHONE_NUMBER_IDÚWHATSAPP_CLOUD_ACCESS_TOKEN)rX  rY  ÚWHATSAPP_CLOUD_APP_IDre  ÚWHATSAPP_CLOUD_APP_SECRETrh  ÚWHATSAPP_CLOUD_WABA_IDÚwaba_idÚWHATSAPP_CLOUD_VERIFY_TOKENÚverify_tokenÚWHATSAPP_CLOUD_WEBHOOK_HOSTÚwebhook_hostÚWHATSAPP_CLOUD_WEBHOOK_PORTÚwebhook_portÚWHATSAPP_CLOUD_WEBHOOK_PATHÚwebhook_pathÚWHATSAPP_CLOUD_API_VERSIONÚapi_versionÚWHATSAPP_CLOUD_HOME_CHANNELÚ WHATSAPP_CLOUD_HOME_CHANNEL_NAMEÚ%WHATSAPP_CLOUD_HOME_CHANNEL_THREAD_IDr  rÍ  ÚSLACK_HOME_CHANNELÚSLACK_HOME_CHANNEL_NAMEÚSLACK_HOME_CHANNEL_THREAD_IDrë   ÚSIGNAL_HTTP_URLÚSIGNAL_ACCOUNTÚSIGNAL_IGNORE_STORIESr   )r\  ÚaccountÚignore_storiesÚSIGNAL_HOME_CHANNELÚSIGNAL_HOME_CHANNEL_NAMEÚSIGNAL_HOME_CHANNEL_THREAD_IDr  ÚMATTERMOST_URLz2MATTERMOST_TOKEN set but MATTERMOST_URL is missingrk  ÚMATTERMOST_HOME_CHANNELÚMATTERMOST_HOME_CHANNEL_NAMEÚ!MATTERMOST_HOME_CHANNEL_THREAD_IDr  ÚMATRIX_HOMESERVERÚMATRIX_PASSWORDzHMATRIX_ACCESS_TOKEN/MATRIX_PASSWORD set but MATRIX_HOMESERVER is missingÚ
homeserverÚMATRIX_USER_IDrá   rc  ÚMATRIX_E2EE_MODE)ÚrequiredÚrequireÚoptionalÚpreferÚ	preferredÚMATRIX_ENCRYPTIONÚ
encryptionÚ	e2ee_modeÚMATRIX_DEVICE_IDÚ	device_idÚMATRIX_HOME_ROOMÚMATRIX_HOME_ROOM_NAMEÚMATRIX_HOME_ROOM_THREAD_IDÚ
HASS_TOKENÚHASS_URLÚEMAIL_ADDRESSÚEMAIL_PASSWORDÚEMAIL_IMAP_HOSTÚEMAIL_SMTP_HOST)ÚaddressÚ	imap_hostÚ	smtp_hostÚEMAIL_HOME_ADDRESSÚEMAIL_HOME_ADDRESS_NAMEÚEMAIL_HOME_ADDRESS_THREAD_IDÚTWILIO_ACCOUNT_SIDÚTWILIO_AUTH_TOKENÚSMS_HOME_CHANNELÚSMS_HOME_CHANNEL_NAMEÚSMS_HOME_CHANNEL_THREAD_IDÚAPI_SERVER_KEYÚAPI_SERVER_CORS_ORIGINSÚAPI_SERVER_PORTÚAPI_SERVER_HOSTrC   c                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rÍ   r<  )rÏ   Úorigins     r$   r¬  z(_apply_env_overrides.<locals>.<listcomp>o  s2   € ÐiÐiÐi¨&ÐZ`×ZfÒZfÑZhÔZhÐi�v—|’|‘~”~ÐiÐiÐir&   rÖ  rÔ  rÕ  ÚAPI_SERVER_MODEL_NAMEr×  ÚWEBHOOK_ENABLEDÚWEBHOOK_PORTÚWEBHOOK_SECRETrï  ÚMSGRAPH_WEBHOOK_ENABLEDÚMSGRAPH_WEBHOOK_PORTÚMSGRAPH_WEBHOOK_CLIENT_STATEÚ"MSGRAPH_WEBHOOK_ACCEPTED_RESOURCESÚ$MSGRAPH_WEBHOOK_ALLOWED_SOURCE_CIDRSr`  c                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rÍ   r<  )rÏ   Úresources     r$   r¬  z(_apply_env_overrides.<locals>.<listcomp>­  sB   € ð ð ð àØ—>’>Ñ#Ô#ðØ—’Ñ Ô ðð ð r&   Úaccepted_resourcesc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rÍ   r<  )rÏ   Úcidrs     r$   r¬  z(_apply_env_overrides.<locals>.<listcomp>·  s>   € ð ð ð àØ—:’:‘<”<ðØ—
’
‘”ðð ð r&   Úallowed_source_cidrsÚDINGTALK_CLIENT_IDÚDINGTALK_CLIENT_SECRET)Ú	client_idrf  ÚDINGTALK_HOME_CHANNELÚDINGTALK_HOME_CHANNEL_NAMEÚDINGTALK_HOME_CHANNEL_THREAD_IDÚFEISHU_APP_IDÚFEISHU_APP_SECRETÚFEISHU_DOMAINr†   ÚFEISHU_CONNECTION_MODEr×   )re  rh  ÚdomainrÖ   ÚFEISHU_ENCRYPT_KEYÚencrypt_keyÚFEISHU_VERIFICATION_TOKENÚverification_tokenÚFEISHU_HOME_CHANNELÚFEISHU_HOME_CHANNEL_NAMEÚFEISHU_HOME_CHANNEL_THREAD_IDÚWECOM_BOT_IDÚWECOM_SECRET)Úbot_idrï  ÚWECOM_WEBSOCKET_URLÚwebsocket_urlÚWECOM_HOME_CHANNELÚWECOM_HOME_CHANNEL_NAMEÚWECOM_HOME_CHANNEL_THREAD_IDÚWECOM_CALLBACK_CORP_IDÚWECOM_CALLBACK_CORP_SECRETÚWECOM_CALLBACK_AGENT_IDÚWECOM_CALLBACK_TOKENÚWECOM_CALLBACK_ENCODING_AES_KEYÚWECOM_CALLBACK_HOSTÚWECOM_CALLBACK_PORTiÅ!  )Úcorp_idÚcorp_secretÚagent_idr2   Úencoding_aes_keyrÕ  rÔ  r  ÚWEIXIN_ACCOUNT_IDrS  ÚWEIXIN_BASE_URLú/Úbase_urlÚWEIXIN_CDN_BASE_URLÚcdn_base_urlÚWEIXIN_DM_POLICYrä  ÚWEIXIN_GROUP_POLICYrè  ÚWEIXIN_ALLOWED_USERSrå  ÚWEIXIN_GROUP_ALLOWED_USERSré  ÚWEIXIN_SPLIT_MULTILINE_MESSAGESÚsplit_multiline_messagesÚWEIXIN_HOME_CHANNELÚWEIXIN_HOME_CHANNEL_NAMEÚWEIXIN_HOME_CHANNEL_THREAD_IDÚBLUEBUBBLES_SERVER_URLÚBLUEBUBBLES_PASSWORDÚBLUEBUBBLES_WEBHOOK_HOSTz	127.0.0.1ÚBLUEBUBBLES_WEBHOOK_PORTÚBLUEBUBBLES_WEBHOOK_PATHz/bluebubbles-webhookÚBLUEBUBBLES_SEND_READ_RECEIPTS)rb  rc  rT  rV  rX  rÜ  ÚBLUEBUBBLES_REQUIRE_MENTION>   r   r   r   r   rÛ  ÚBLUEBUBBLES_MENTION_PATTERNSc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rÍ   r<  )rÏ   Úparts     r$   r¬  z(_apply_env_overrides.<locals>.<listcomp>_	  s>   € ð #ð #ð #àØ—z’z‘|”|ð#Ø—J’J‘L”Lð#ð #ð #r&   Ú
rá  ÚBLUEBUBBLES_HOME_CHANNELÚBLUEBUBBLES_HOME_CHANNEL_NAMEÚ"BLUEBUBBLES_HOME_CHANNEL_THREAD_IDÚ	QQ_APP_IDÚQQ_CLIENT_SECRETrf  ÚQQ_ALLOWED_USERSÚQQ_GROUP_ALLOWED_USERSÚQQBOT_HOME_CHANNELÚQQBOT_HOME_CHANNEL_NAMEÚQQ_HOME_CHANNELÚQQ_HOME_CHANNEL_NAMEzoQQ_HOME_CHANNEL is deprecated; rename to QQBOT_HOME_CHANNEL in your .env for consistency with the platform key.ÚQQBOT_HOME_CHANNEL_THREAD_IDÚQQ_HOME_CHANNEL_THREAD_IDÚYUANBAO_APP_IDÚYUANBAO_APP_KEYÚYUANBAO_APP_SECRETÚYUANBAO_BOT_IDr¹  ÚYUANBAO_WS_URLÚws_urlÚYUANBAO_API_DOMAINÚ
api_domainÚYUANBAO_ROUTE_ENVÚ	route_envÚYUANBAO_HOME_CHANNELÚYUANBAO_HOME_CHANNEL_NAMEÚYUANBAO_HOME_CHANNEL_THREAD_IDÚYUANBAO_DM_POLICYÚYUANBAO_DM_ALLOW_FROMÚdm_allow_fromÚYUANBAO_GROUP_POLICYÚYUANBAO_GROUP_ALLOW_FROMÚSESSION_IDLE_MINUTESÚSESSION_RESET_HOURr   r”  r’   zunknown platform name %r: %sz#env_enablement_fn for %s raised: %s)rô   ra   ra   rõ   u6   is_connected for %s raised: %s â€” skipping enablementuc   Plugin platform '%s' available but not configured (is_connected returned False) â€” skipping enablezcheck_fn for %s raised: %srß   r_   rà   z&Plugin platform enable pass failed: %sÚGATEWAY_RELAY_URLrj  )Srp   rr   ru   r   rµ   r2   r"   r¥   r#  Úsplitra   rÝ   rõ   r¶   r   r·   rô   r¸   r   rA   r<   r¹   r6   rh   rb   rß   rá   râ   rº   r.   r/   r»   r¼   r!   r½   r9  r¾   r¿   r!  rQ  rÁ   rü  rÂ   rÃ   rÀ   rÄ   rÅ   rÆ   rÇ   ÚrstriprÈ   rô  ÚloadsrŸ   rš   rÉ   ÚloggingÚ	getLoggerr°   rÊ   ro  r  rÿ   r–  r•  r�   r“   rþ  r_   rý  Úenv_enablement_fnr—  rQ   r   Úgetattrr0  Úcheck_fnÚensure_deps_fnr    r*   r+   rË   Úvalues)–r÷   r+   Ú
getenv_intr7  Útelegram_tokenÚtelegram_configÚtelegram_reply_modeÚtelegram_fallback_ipsÚtelegram_homeÚdiscord_tokenÚdiscord_configÚdiscord_homeÚdiscord_reply_modeÚwhatsapp_enabledÚwhatsapp_disabled_explicitlyÚwa_cfgÚwhatsapp_homeÚwhatsapp_cloud_phone_idÚwhatsapp_cloud_tokenÚwa_cloud_app_idÚwa_cloud_app_secretÚwa_cloud_waba_idÚwa_cloud_verify_tokenÚwa_cloud_hostÚwa_cloud_portÚwa_cloud_pathÚwa_cloud_api_versionÚwhatsapp_cloud_homeÚslack_tokenÚslack_configr$  Ú
slack_homeÚexisting_homeÚ	same_homeÚ
signal_urlÚsignal_accountÚsignal_configÚsignal_homeÚmattermost_tokenÚmattermost_urlÚmattermost_configÚmattermost_homeÚmatrix_tokenÚmatrix_homeserverÚmatrix_configÚmatrix_userÚmatrix_passwordÚmatrix_e2ee_modeÚmatrix_e2eeÚmatrix_device_idÚmatrix_homeÚ
hass_tokenÚhass_urlÚ
email_addrÚ	email_pwdÚ
email_imapÚ
email_smtpÚ
email_homeÚ
twilio_sidÚsms_homeÚapi_server_keyÚapi_server_cors_originsÚapi_server_portÚapi_server_hostÚapi_server_explicitÚoriginsÚapi_server_model_nameÚwebhook_enabledrV  Úwebhook_secretÚmsgraph_webhook_enabledÚmsgraph_webhook_portÚmsgraph_webhook_client_stateÚmsgraph_webhook_resourcesÚmsgraph_webhook_allowed_cidrsÚ	resourcesÚcidrsÚdingtalk_client_idÚdingtalk_client_secretÚdingtalk_homeÚfeishu_app_idÚfeishu_app_secretÚfeishu_encrypt_keyÚfeishu_verification_tokenÚfeishu_homeÚwecom_bot_idÚwecom_secretÚwecom_ws_urlÚ
wecom_homeÚwecom_callback_corp_idÚwecom_callback_corp_secretÚweixin_tokenÚweixin_account_idra   Úweixin_base_urlÚweixin_cdn_base_urlÚweixin_dm_policyÚweixin_group_policyÚweixin_allowed_usersÚweixin_group_allowed_usersÚweixin_split_multilineÚweixin_homeÚbluebubbles_server_urlÚbluebubbles_passwordÚbluebubbles_require_mentionÚbluebubbles_mention_patternsÚparsed_patternsÚbluebubbles_homeÚ	qq_app_idÚqq_client_secretÚqq_allowed_usersÚqq_group_allowedÚqq_homeÚqq_home_name_envÚlegacy_homeÚyuanbao_app_idÚyuanbao_app_secretÚyuanbao_bot_idÚyuanbao_ws_urlÚyuanbao_api_domainÚyuanbao_route_envÚyuanbao_homeÚyuanbao_dm_policyÚyuanbao_dm_allow_fromÚyuanbao_group_policyÚyuanbao_group_allow_fromr  Ú
reset_hourr•  r“   rš  rÞ   r	  Úexisting_cfgÚseed_for_probeÚ	probe_cfgÚprobe_extrar¦  r§  Ú
configuredÚexcÚdeps_okÚseedrð   Úrelay_url_envÚrelay_url_yamlÚexisting_relayÚrelay_url_valÚrelay_configrø   s–   `                                                                                                                                                     r$   r  r    sö(  ø€ å€FÝ€Jð¥8ð µð ð ð ð ð ð ð$ �VÐ0Ñ1Ô1€NØð /Ø*Ð*­8Ô+<Ñ=Ô=ˆØ .ˆÔð !˜&Ð!9¸2Ñ>Ô>×DÒDÑFÔFÐØÐ5Ð5Ð5ÝÔ FÔ$4Ð4Ð4Ý2@Ñ2BÔ2BˆFÔ�XÔ.Ñ/Ø<OˆÔ�Ô*Ô+Ô9à"˜FÐ#:¸BÑ?Ô?ÐØð 
ÝÔ FÔ$4Ð4Ð4Ý2@Ñ2BÔ2BˆFÔ�XÔ.Ñ/ðE
ð E
Ø!6×!<Ò!<¸SÑ!AÔ!AðE
ñ E
ô E
ˆÔ�Ô*Ô+Ô1°.ÑAð �FÐ2Ñ3Ô3€MØð 
�Ô*¨fÔ.>Ð>Ð>Ý;FÝÔ&Ø!Ø�Ð4°fÑ=Ô=Ø�fÐ>Ñ?Ô?ÐGÀ4ð	<
ñ <
ô <
ˆÔ�Ô*Ô+Ô8ð �FÐ.Ñ/Ô/€MØð -Ø)Ð)­(Ô*:Ñ;Ô;ˆØ,ˆÔà�6Ð0Ñ1Ô1€LØð 
�Ô(¨FÔ,<Ð<Ð<Ý:EÝÔ%Ø Ø�Ð3°VÑ<Ô<Ø�fÐ=Ñ>Ô>ÐFÀ$ð	;
ñ ;
ô ;
ˆÔ�Ô)Ô*Ô7ð  ˜Ð 7¸Ñ<Ô<×BÒBÑDÔDÐØÐ4Ð4Ð4ÝÔ 6Ô#3Ð3Ð3Ý1?Ñ1AÔ1AˆFÔ�XÔ-Ñ.Ø;MˆÔ�Ô)Ô*Ô8õ ' v vÐ.@À"Ñ'EÔ'EÑFÔFÐØ#) 6Ð*<¸bÑ#AÔ#A×#GÒ#GÑ#IÔ#IÐMaÐ#aÐ ÝÔ˜FÔ,Ð,Ð,àÔ!¥(Ô"3Ô4ˆØ'ð 	"Ø"ˆFŒNˆNØð 	"Ø!ˆFŒNøà	ð KÝ.<ÀTÐ.JÑ.JÔ.JˆÔ�Ô*Ñ+Ø�FÐ2Ñ3Ô3€MØð 
�Ô*¨fÔ.>Ð>Ð>Ý;FÝÔ&Ø!Ø�Ð4°fÑ=Ô=Ø�fÐ>Ñ?Ô?ÐGÀ4ð	<
ñ <
ô <
ˆÔ�Ô*Ô+Ô8ð %˜fÐ%EÑFÔFÐØ!˜6Ð"?Ñ@Ô@ÐØñ 'bÐ#7ñ 'bÝÔ"¨&Ô*:Ð:Ð:Ý8FÑ8HÔ8HˆFÔ�XÔ4Ñ5Ø<@ˆÔ�Ô0Ô1Ô9ØÔ�Ô0Ô1Ô7×>Ò>Ø6Ø0ð@
ð @
ñ 	ô 	ð 	ð
 !˜&Ð!8Ñ9Ô9ˆØð 	XØHWˆFÔ�XÔ4Ô5Ô;¸HÑEØ$˜fÐ%@ÑAÔAÐØð 	`ØL_ˆFÔ�XÔ4Ô5Ô;¸LÑIà!˜6Ð":Ñ;Ô;ÐØð 	ZØIYˆFÔ�XÔ4Ô5Ô;¸IÑFà & Ð'DÑ EÔ EÐØ ð 	dØNcˆFÔ�XÔ4Ô5Ô;¸NÑKà˜Ð<Ñ=Ô=ˆØð 	\ØN[ˆFÔ�XÔ4Ô5Ô;¸NÑKØ˜Ð<Ñ=Ô=ˆØð 	ðÝRUÐVcÑRdÔRd�Ô ¥Ô!8Ô9Ô?ÀÑOÐOøÝð ð ð Ø�ðøøøà˜Ð<Ñ=Ô=ˆØð 	\ØN[ˆFÔ�XÔ4Ô5Ô;¸NÑKà%˜vÐ&BÑCÔCÐØð 	bØMaˆFÔ�XÔ4Ô5Ô;¸MÑJØ ˜&Ð!>Ñ?Ô?ÐØð 
�xÔ6¸&Ô:JÐJÐJÝALÝÔ,Ø'Ø�Ð:¸FÑCÔCØ�fÐDÑEÔEÐMÈð	B
ñ B
ô B
ˆÔ�Ô0Ô1Ô>ð �&Ð*Ñ+Ô+€KØð =ÝŒ> Ô!1Ð1Ð1å/=Ñ/?Ô/?ˆFÔ�Xœ^Ñ,Ø7;ˆFÔ�Xœ^Ô,Ô4Ð4à!Ô+­H¬NÔ;ˆLõ $(¨Ô(:×(>Ò(>Ð?RÐTYÑ(ZÔ(ZÑ#[Ô#[Ð ØÔ'ð ,Ð0Dð ,ð (,�Ô$ð 2=ˆÔ�œÔ(Ô.Ø�Ð,Ñ-Ô-€JØð 
ØÔ'×2Ò2ÝŒNÝ 5Ð)Ñ)Ô)ñ
ô 
ˆð %Ô1ˆØ!¨Ð-ÐU°-Ô2GÈ:Ò2Uˆ	Ý$/Ý”^ØØ�Ð1°2Ñ6Ô6Ø�fÐ;Ñ<Ô<ÐDÀØ-:ÐR¸yÐR�MÔ)Ð)ÈdØ/<ÐTÀÐT�]Ô+Ð+ÐPTð%
ñ %
ô %
ˆÔ!ð �Ð)Ñ*Ô*€JØ�VÐ,Ñ-Ô-€NØð �nð Ø(Ð(­¬Ñ9Ô9ˆØÔ×"Ò"Ø"Ø%Ý-¨f¨fÐ5LÈfÑ.UÔ.UÑVÔVð$
ð $
ñ 	ô 	ð 	ð
 �&Ð.Ñ/Ô/€KØð 
•x”¨&Ô*:Ð:Ð:Ý9DÝ”_ØØ�Ð2°FÑ;Ô;Ø�fÐ<Ñ=Ô=ÐEÀð	:
ñ :
ô :
ˆÔ�œÔ)Ô6ð �vÐ0Ñ1Ô1ÐØð 8Ø˜Ð 0°"Ñ5Ô5ˆØð 	QÝ�NŠNÐOÑPÔPÐPØ,Ð,­XÔ-@ÑAÔAÐØ"2ÐÔØ)7ÐÔ Ñ&Ø�fÐ6Ñ7Ô7€OØð 
�8Ô.°&Ô2BÐBÐBÝ=HÝÔ(Ø#Ø�Ð6¸Ñ?Ô?Ø�fÐ@ÑAÔAÐIÀTð	>
ñ >
ô >
ˆÔ�Ô,Ô-Ô:ð �6Ð/Ñ0Ô0€LØ˜Ð2°BÑ7Ô7ÐØð @�v�vÐ/Ñ0Ô0ð @Ø ð 	gÝ�NŠNÐeÑfÔfÐfØ(Ð(­¬Ñ9Ô9ˆØð 	/Ø".ˆMÔØ,=ˆÔ˜LÑ)Ø�fÐ-¨rÑ2Ô2ˆØð 	9Ø-8ˆMÔ 	Ñ*Ø ˜&Ð!2°BÑ7Ô7ˆØð 	>Ø.=ˆMÔ 
Ñ+Ø!˜6Ð"4°bÑ9Ô9×?Ò?ÑAÔA×GÒGÑIÔIÐàÐ ZÐZð @Ý˜v˜vÐ&9¸2Ñ>Ô>Ñ?Ô?ð 	ð -8ˆÔ˜LÑ)Øð 	@Ø/?ˆMÔ Ñ,Ø!˜6Ð"4°bÑ9Ô9ÐØð 	@Ø/?ˆMÔ Ñ,Ø�&Ð+Ñ,Ô,€KØð 
•x”¨&Ô*:Ð:Ð:Ý9DÝ”_ØØ�Ð/°Ñ8Ô8Ø�fÐ9Ñ:Ô:ÐB¸dð	:
ñ :
ô :
ˆÔ�œÔ)Ô6ð �˜Ñ%Ô%€JØð MÝÔ!¨Ô)9Ð9Ð9Ý7EÑ7GÔ7GˆFÔ�XÔ3Ñ4Ø;?ˆÔ�Ô/Ô0Ô8Ø9CˆÔ�Ô/Ô0Ô6Ø�6˜*Ñ%Ô%ˆØð 	MØDLˆFÔ�XÔ3Ô4Ô:¸5ÑAð �˜Ñ(Ô(€JØ�Ð'Ñ(Ô(€IØ�Ð)Ñ*Ô*€JØ�Ð)Ñ*Ô*€JÝ
ˆJ˜	 :¨zÐ:Ñ;Ô;ð ÝŒ> Ô!1Ð1Ð1Ý/=Ñ/?Ô/?ˆFÔ�Xœ^Ñ,Ø37ˆÔ�œÔ(Ô0ØÔ�œÔ(Ô.×5Ò5Ø!Ø#Ø#ð7
ð 7
ñ 	ô 	ð 	ð
 �Ð,Ñ-Ô-€JØð 
•h”n¨Ô(8Ð8Ð8Ý8CÝ”^ØØ�Ð1°6Ñ:Ô:Ø�fÐ;Ñ<Ô<ÐDÀð	9
ñ 9
ô 9
ˆÔ�œÔ(Ô5ð �Ð,Ñ-Ô-€JØð QÝŒ<˜vÔ/Ð/Ð/Ý-;Ñ-=Ô-=ˆFÔ�Xœ\Ñ*Ø15ˆÔ�œÔ&Ô.Ø17°Ð8KÈRÑ1PÔ1PˆÔ�œÔ&Ô.ØˆvÐ(Ñ)Ô)€HØð 
•H”L FÔ$4Ð4Ð4Ý6AÝ”\ØØ�Ð/°Ñ8Ô8Ø�fÐ9Ñ:Ô:ÐB¸dð	7
ñ 7
ô 7
ˆÔ�œÔ&Ô3ð �VÐ,¨bÑ1Ô1€NØ$˜fÐ%>ÀÑCÔCÐØ�fÐ.Ñ/Ô/€OØ�fÐ.Ñ/Ô/€Oõ " .Ñ1Ô1ñ ^ÝÔ fÔ&6Ð6Ð6Ý4BÑ4DÔ4DˆFÔ�XÔ0Ñ1ð %Ô.­xÔ/BÔCÔI×MÒMÐNaÐchÑiÔiÐØ"ð 	A fÔ&6µxÔ7JÔ&KÔ&Sð 	AØ<@ˆFÔ�XÔ0Ô1Ô9Øð 	PØAOˆFÔ�XÔ0Ô1Ô7¸Ñ>Ø"ð 	VØiÐiÐ4K×4QÒ4QÐRUÑ4VÔ4VÐiÑiÔiˆGØð VØNU�Ô ¥Ô!4Ô5Ô;¸NÑKØð 	ðÝFIÈ/ÑFZÔFZ�Ô ¥Ô!4Ô5Ô;¸FÑCÐCøÝð ð ð Ø�ðøøøàð 	RØBQˆFÔ�XÔ0Ô1Ô7¸Ñ?Ø & Ð'>ÀÑ CÔ CÐØ ð 	^ØH]ˆFÔ�XÔ0Ô1Ô7¸ÑEõ & f fÐ->ÀÑ&CÔ&CÑDÔD€OØ�6˜.Ñ)Ô)€LØ�VÐ,¨bÑ1Ô1€NØð 
PÝÔ 6Ô#3Ð3Ð3Ý1?Ñ1AÔ1AˆFÔ�XÔ-Ñ.Ø59ˆÔ�Ô)Ô*Ô2Øð 	ðÝCFÀ|ÑCTÔCT�Ô ¥Ô!1Ô2Ô8¸Ñ@Ð@øÝð ð ð Ø�ðøøøàð 	PØAOˆFÔ�XÔ-Ô.Ô4°XÑ>õ .¨f¨fÐ5NÐPRÑ.SÔ.SÑTÔTÐØ!˜6Ð"8Ñ9Ô9ÐØ#) 6Ð*HÈ"Ñ#MÔ#MÐ Ø & Ð'KÈRÑ PÔ PÐØ$* FØ.°ñ%ô %Ð!ð 	 ð*åÔ# vÔ'7Ð7Ð7Øð 8à'ð 8ð %ð 8ð )ñ	 8õ Ô#¨6Ô+;Ð;Ð;Ý9GÑ9IÔ9IˆFÔ�XÔ5Ñ6Ø"ð 	FØAEˆFÔ�XÔ5Ô6Ô>Øð 	ðÝKNØ(ñLô L�Ô ¥Ô!9Ô:Ô@ÀÑHÐHøõ ð ð ð Ø�ðøøøà'ð 	à,ð Ô�XÔ5Ô6Ô<¸^ÑLð %ð 		ðð à 9× ?Ò ?ÀÑ DÔ Dðñ ô ˆIð
 ð ð ð Ô ¥Ô!9Ô:Ô@Ø(ñð )ð 		ðð à9×?Ò?ÀÑDÔDðñ ô ˆEð
 ð ð ð Ô ¥Ô!9Ô:Ô@Ø*ñð
  ˜Ð 4Ñ5Ô5ÐØ#˜VÐ$<Ñ=Ô=ÐØð Ð4ð ÝÔ FÔ$4Ð4Ð4Ý2@Ñ2BÔ2BˆFÔ�XÔ.Ñ/Ø6:ˆÔ�Ô*Ô+Ô3ØÔ�Ô*Ô+Ô1×8Ò8Ø+Ø3ð:
ð :
ñ 	ô 	ð 	ð ˜Ð6Ñ7Ô7ˆØð 	Ý?JÝ!Ô*Ø%Ø�VÐ8¸&ÑAÔAØ ˜&Ð!BÑCÔCÐKÀtð	@ñ @ô @ˆFÔ�XÔ.Ô/Ô<ð �F˜?Ñ+Ô+€MØ˜Ð2Ñ3Ô3ÐØñ Ð*ñ ÝŒ? &Ô"2Ð2Ð2Ý0>Ñ0@Ô0@ˆFÔ�Xœ_Ñ-Ø48ˆÔ�œÔ)Ô1ØÔ�œÔ)Ô/×6Ò6Ø#Ø+Ø�f˜_¨hÑ7Ô7Ø%˜vÐ&>ÀÑLÔLð	8
ð 8
ñ 	ô 	ð 	ð $˜VÐ$8¸"Ñ=Ô=ÐØð 	XØEWˆFÔ�Xœ_Ô-Ô3°MÑBØ$* FÐ+FÈÑ$KÔ$KÐ!Ø$ð 	fØLeˆFÔ�Xœ_Ô-Ô3Ð4HÑIØ�fÐ2Ñ3Ô3ˆØð 	Ý=HÝ!œØ#Ø�VÐ6¸Ñ?Ô?Ø ˜&Ð!@ÑAÔAÐIÀTð	>ñ >ô >ˆFÔ�Xœ_Ô-Ô:ð �6˜.Ñ)Ô)€LØ�6˜.Ñ)Ô)€LØñ ˜ñ ÝŒ> Ô!1Ð1Ð1Ý/=Ñ/?Ô/?ˆFÔ�Xœ^Ñ,Ø37ˆÔ�œÔ(Ô0ØÔ�œÔ(Ô.×5Ò5Ø"Ø"ð7
ð 7
ñ 	ô 	ð 	ð �vÐ3°RÑ8Ô8ˆØð 	SØFRˆFÔ�Xœ^Ô,Ô2°?ÑCØ�VÐ0Ñ1Ô1ˆ
Øð 	Ý<GÝ!œØ"Ø�VÐ5°vÑ>Ô>Ø ˜&Ð!?Ñ@Ô@ÐHÀDð	=ñ =ô =ˆFÔ�Xœ^Ô,Ô9ð $˜VÐ$<Ñ=Ô=ÐØ!' Ð(DÑ!EÔ!EÐØð Ð"<ð ÝÔ"¨&Ô*:Ð:Ð:Ý8FÑ8HÔ8HˆFÔ�XÔ4Ñ5Ø<@ˆÔ�Ô0Ô1Ô9ØÔ�Ô0Ô1Ô7×>Ò>Ø-Ø5Ø˜Ð8¸"Ñ=Ô=Ø�VÐ2°BÑ7Ô7Ø & Ð'HÈ"Ñ MÔ Mð �FÐ0°"Ñ5Ô5Ø�JÐ4°dÑ;Ô;ð@
ð @
ñ 	ô 	ð 	ð �6˜.Ñ)Ô)€LØ˜Ð2Ñ3Ô3ÐØð %Ð(ñ %ÝŒ? &Ô"2Ð2Ð2Ý0>Ñ0@Ô0@ˆFÔ�Xœ_Ñ-Ø48ˆÔ�œÔ)Ô1Øð 	CØ6BˆFÔ�Xœ_Ô-Ô3ØÔ ¥¤Ô1Ô7ˆØð 	4Ø"3ˆE�,ÑØ ˜&Ð!2°BÑ7Ô7×=Ò=Ñ?Ô?ˆØð 	<Ø /× 6Ò 6°sÑ ;Ô ;ˆE�*ÑØ$˜fÐ%:¸BÑ?Ô?×EÒEÑGÔGÐØð 	DØ$7×$>Ò$>¸sÑ$CÔ$CˆE�.Ñ!Ø!˜6Ð"4°bÑ9Ô9×?Ò?ÑAÔA×GÒGÑIÔIÐØð 	2Ø!1ˆE�+ÑØ$˜fÐ%:¸BÑ?Ô?×EÒEÑGÔG×MÒMÑOÔOÐØð 	8Ø$7ˆE�.Ñ!Ø%˜vÐ&<¸bÑAÔA×GÒGÑIÔIÐØð 	7Ø"6ˆE�,ÑØ%+ VÐ,HÈ"Ñ%MÔ%M×%SÒ%SÑ%UÔ%UÐ"Ø%ð 	CØ(BˆEÐ$Ñ%Ø!' Ð(IÈ2Ñ!NÔ!N×!TÒ!TÑ!VÔ!VÐØ!ð 	GØ0FˆEÐ,Ñ-Ø�fÐ2°BÑ7Ô7×=Ò=Ñ?Ô?ˆØð 	Ý=HÝ!œØ#Ø�VÐ6¸Ñ?Ô?Ø ˜&Ð!@ÑAÔAÐIÀTð	>ñ >ô >ˆFÔ�Xœ_Ô-Ô:ð $˜VÐ$<Ñ=Ô=ÐØ!˜6Ð"8Ñ9Ô9ÐØñ _Ð"6ñ _ÝÔ vÔ'7Ð7Ð7Ý5CÑ5EÔ5EˆFÔ�XÔ1Ñ2Ø9=ˆÔ�Ô-Ô.Ô6ØÔ�Ô-Ô.Ô4×;Ò;Ø0×7Ò7¸Ñ<Ô<Ø,Ø"˜FÐ#=¸{ÑKÔKØ&˜JÐ'AÀ4ÑHÔHØ"˜FÐ#=Ð?UÑVÔVÝ"1°&°&Ð9YÐ[aÑ2bÔ2bÑ"cÔ"cð=
ð =
ñ 	ô 	ð 	ð '- fÐ-JÑ&KÔ&KÐ#Ø&Ð2à+×1Ò1Ñ3Ô3Ð7QÐQð Ô�XÔ1Ô2Ô8Ð9JÑKð (. vÐ.LÑ'MÔ'MÐ$Ø'ð 		_ðÝ"&¤*Ð-IÑ"JÔ"J��øÝð ð ð ð#ð #à <× DÒ DÀTÈ3Ñ OÔ O× UÒ UÐVYÑ ZÔ Zð#ñ #ô #���ðøøøð P_ˆFÔ�XÔ1Ô2Ô8Ð9KÑLØ�vÐ8Ñ9Ô9ÐØð 
�HÔ0°FÔ4DÐDÐDÝ>IÝÔ)Ø$Ø�Ð7¸Ñ@Ô@Ø�fÐAÑBÔBÐJÀdð	?
ñ ?
ô ?
ˆÔ�Ô-Ô.Ô;ð ��{Ñ#Ô#€IØ�vÐ0Ñ1Ô1ÐØð %Ð$ñ %ÝŒ> Ô!1Ð1Ð1Ý/=Ñ/?Ô/?ˆFÔ�Xœ^Ñ,Ø37ˆÔ�œÔ(Ô0ØÔ ¥¤Ô0Ô6ˆØð 	(Ø'ˆE�(‰OØð 	6Ø%5ˆE�/Ñ"Ø!˜6Ð"4°bÑ9Ô9×?Ò?ÑAÔAÐØð 	3Ø"2ˆE�,ÑØ!˜6Ð":¸BÑ?Ô?×EÒEÑGÔGÐØð 	9Ø(8ˆEÐ$Ñ%Ø�&Ð-¨rÑ2Ô2×8Ò8Ñ:Ô:ˆØ4ÐØð 		à ˜&Ð!2°BÑ7Ô7×=Ò=Ñ?Ô?ˆKØð Ø%�Ø#9Ð ÝÔ!¥(Ñ+Ô+×3Ò3ðJñô ð ð ð 
	Ý<GÝ!œØØ�VÐ5Ñ6Ô6ÐZ¸&¸&ÐAQÐSYÑ:ZÔ:Zà�FÐ9Ñ:Ô:ð Ø�vÐ9Ñ:Ô:ðàð	=ñ 	=ô 	=ˆFÔ�Xœ^Ô,Ô9ð �VÐ,Ñ-Ô-ÐJ°°Ð8IÑ1JÔ1J€NØ˜Ð 4Ñ5Ô5ÐØñ &AÐ,ñ &AÝÔ 6Ô#3Ð3Ð3Ý1?Ñ1AÔ1AˆFÔ�XÔ-Ñ.Ø59ˆÔ�Ô)Ô*Ô2ØÔ ¥Ô!1Ô2Ô8ˆØ(ˆˆh‰Ø0ˆˆlÑØ˜Ð 0Ñ1Ô1ˆØð 	-Ø,ˆE�(‰OØ˜Ð 0Ñ1Ô1ˆØð 	-Ø,ˆE�(‰OØ#˜VÐ$8Ñ9Ô9ÐØð 	5Ø"4ˆE�,ÑØ"˜FÐ#6Ñ7Ô7ÐØð 	3Ø!2ˆE�+ÑØ�vÐ4Ñ5Ô5ˆØð 	Ý>IÝ!Ô)Ø$Ø�VÐ7¸Ñ@Ô@Ø ˜&Ð!AÑBÔBÐJÀdð	?ñ ?ô ?ˆFÔ�XÔ-Ô.Ô;ð #˜FÐ#6Ñ7Ô7ÐØð 	CØ!2×!8Ò!8Ñ!:Ô!:×!@Ò!@Ñ!BÔ!BˆE�+ÑØ & Ð'>Ñ ?Ô ?ÐØ ð 	;Ø%:ˆE�/Ñ"Ø%˜vÐ&<Ñ=Ô=ÐØð 	IØ$8×$>Ò$>Ñ$@Ô$@×$FÒ$FÑ$HÔ$HˆE�.Ñ!Ø#) 6Ð*DÑ#EÔ#EÐ Ø#ð 	AØ(@ˆEÐ$Ñ%ð �6Ð0Ñ1Ô1€LØð ð	Ý7:¸<Ñ7HÔ7HˆFÔ'Ô4Ð4øÝð 	ð 	ð 	ØˆDð	øøøð �Ð,Ñ-Ô-€JØð ð	Ý25°j±/´/ˆFÔ'Ô/Ð/øÝð 	ð 	ð 	ØˆDð	øøøð*KBØ7Ð7Ð7Ð7Ð7Ð7ØÐÑÔÐØ?Ð?Ð?Ð?Ð?Ð?Ø&×5Ò5Ñ7Ô7ð E	ñ E	ˆEðÝ# E¤JÑ/Ô/��øÝð ð ð Ý—’Ð;¸U¼ZÈÑKÔKÐKØ����øøøøðøøøð "Ô+×/Ò/°Ñ9Ô9ˆLð Ð(Ø$Ô,ð )å˜,Ô,Ð2°×7Ò7Ð8KÈUÑSÔSÑTÔTð )ð ð "ˆNØÔ&Ð2ð*Ø%*×%<Ò%<Ñ%>Ô%>�N�NøÝ ð *ð *ð *Ý—L’LØ=¸u¼zÈ1ñô ð ð &*�N�N�N�N�N�Nøøøøð	*øøøð Ð#¨<Ô+?Ñ#ØÔ%Ñ1ð$+ð (Ð3Ø(4˜IØ#,Ô#4ð "Ý,:Ø,0Ý*.¨y¬Ð/DÀ"Ñ*EÔ*Eð-"ñ -"ô -" 	øõ
 )7¸tÐ(DÑ(DÔ(D˜IÝ% nµdÑ;Ô;ð Àð õ +/­w°yÀ'È2Ñ/NÔ/NÐ/TÐRTÑ*UÔ*U˜KØ(6×(<Ò(<Ñ(>Ô(>ð =ð =¡  1Ø#$¨Ò#6Ð#6Ø$,Ø +× 6Ò 6°q¸!Ñ <Ô <Ð <Ð <Ý(6Ø(,Ø&1ð)ñ )ô )˜Iõ &*¨%×*<Ò*<¸YÑ*GÔ*GÑ%HÔ%H˜
˜
øÝ$ð +ð +ð +ÝŸšØTØ!œJ¨ñô ð ð &+˜
˜
˜
˜
˜
˜
øøøøð+øøøð &ð !ÝŸšðPà!œJñô ð ñ
 !ð Ý˜uŸ~š~Ñ/Ô/Ñ0Ô0��øÝð  ð  ð  Ý—’Ð9¸5¼:ÀqÑIÔIÐIØ������øøøøð øøøð ð ˜uÔ3Ð;ÙØ˜vÔ/Ð/Ð/Ý-;Ñ-=Ô-=�Ô  Ñ*Ø15ˆFÔ˜XÔ&Ô.õ ˜.­$Ñ/Ô/ð °Nð Ý˜NÑ+Ô+�ð —x’x °Ñ5Ô5�ØÔ  Ô*Ô0×7Ò7¸Ñ=Ô=Ð=Ý˜d¥DÑ)Ô)ð 
¨d¯hªh°yÑ.AÔ.Að 
Ý>IØ!)Ý # D¨¤OÑ 4Ô 4Ý  §¢¨&Ñ!1Ô!1Ð!;°VÑ<Ô<ð  $Ÿxšx¨Ñ4Ô4ð&�C  [Ô 1Ñ2Ô2Ð2à!%ð	?ñ 	?ô 	?�FÔ$ XÔ.Ô;ùðyE	øõL ð Bð Bð BÝ�ŠÑ=¸qÑAÔAÐAÐAÐAÐAÐAÐAøøøøðBøøøõ ”IÑ1°2Ñ6Ô6×<Ò<Ñ>Ô>€MØ€NØÔ%×)Ò)­(¬.Ñ9Ô9€NØÐ!Ý˜^Ô1×5Ò5±kÑBÔBÐHÀbÑIÔI×OÒOÑQÔQˆØ!Ð3 ^€MØð DØ'Ð'­¬Ñ7Ô7ˆØ*7×*>Ò*>¸sÑ*CÔ*CˆÔ™;Ñ'à!Ô+×2Ò2Ñ4Ô4ð =ð =ˆØÔ×!Ò!Ð"5°tÑ<Ô<Ð<Ð<ð=ð =sœ  Ô;,U( Õ(
U5Õ4U5ú?,{, û,
{9û8{9ÿ,; ÿ;
A@Á@A@ÁC&,AD ÁD
AD ÁDAD Áf2Ag Ág=AhÁhAhÁx$Ax> Áx>
AyÁy
AyÁyAy6 Áy6
AzÁzAzÁz-BJ& Áz5A{
Á{	BJ& Á{

A{?Á{!A{:Á{5BJ& Á{:A{?Á{?ABJ& Á}A}/Á}.BJ& Á}/
A~&Á}9#A~!Á~BJ& Á~!A~&Á~&BJ& Á~<C"BBÂBBJ& ÂB
BCÂB)#BCÂCBJ& ÂCBCÂC'BJ& ÂC>!BD ÂDBJ& ÂD 
BEÂD*#BEÂEBJ& ÂEBEÂEEBJ& ÂJ&
BKÂJ0BKÂKBK)T)r   r'   )rI   )rS   )rZ   rn   )rl   )r÷   rn  r   N)`r³   r	  r*   rô  Úpathlibr   Údataclassesr   r   r   r   Útypingr   r	   r
   r   r   Úenumr   rö   r   Úagent.secret_scoper   r   rf   Úutilsr   r
  r°   r.   r6   r%   Ú	frozensetr,   r-   r3   r    r8   r:   r>   rA   rB   rH   rN   rO   rR   rY   r]   rQ   r  rd   rk   rp   rr   rs   r¦   rî   ru   Ú__members__r  Ú_BUILTIN_PLATFORM_VALUESrØ   rÓ   rÛ   rÝ   rù   rû   r  rµ   r¶   r¹   r»   r¼   rÇ   r  r   r7  r8  r9  r;  r–   rQ  r¸   rº   rÁ   rÂ   rÃ   rÈ   rÉ   rÊ   rË   rl  rn  r+  r  r  rÍ   r&   r$   ú<module>rŸ     sÿ  ððð ð ð €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø Ð Ð Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ !Ð !Ð !Ð !Ð !Ð !à	ˆÔ	˜8Ñ	$Ô	$€ð3ð 3˜ð 3 dð 3°dð 3ð 3ð 3ð 3ð$ &˜IÐ&@Ð&@Ð&@ÑAÔAÐ Ø$˜9Ð%@Ð%@Ð%@ÑAÔAÐ ðð ð ð ð:0 cð 0¨cð 0ð 0ð 0ð 0ð"˜ð  uð °ð ð ð ð ð�sð  Sð ¨Sð ð ð ð ð!¨ð !°3ð !¸8ÀC¼=ð !ð !ð !ð !ðH !.Ð ð >ð%ð %Øð%Øð%àð%ð %ð %ð %ðP4˜ð 4  S¨# X¤ð 4ð 4ð 4ð 4ð
ð ¨sð ¸Sð Ècð ð ð ð ðð  cð °Cð Àsð ð ð ð ð°ð ¸Cð ÀEÈ$ÐPTÈ*ÔDUð ð ð ð ð$ð �#ð  ¨¤ð ¸À#¼ð ð ð ð ð$/ð /�cð / Cð /°ð /ð /ð /ð /ð
�cð  Cð ¨Cð ð ð ð ð 26Ð  ¨#¤Ð 5Ð 5Ñ 5ð`ð `ð `ð `ð `ˆtñ `ô `ð `ðJ %˜9Ð$TÐ$T°hÔ6J×6QÒ6QÑ6SÔ6SÐ$TÑ$TÔ$TÑTÔTÐ ð  )˜yð 
*ð 
*ð 
*ñ 
 ô 
 Ð ð" ˆið2Ð   S¨# X¤ð ð ñ ð
ð ¨ð °H¸T´Nð Èdð ð ð ð ð ð*
ð *
ð *
ð *
ð *
ñ *
ô *
ñ „ð*
ðZ GLð ð ð ˜{ð ¸tð ÐPTð ð ð ð ð& ð6
ð 6
ð 6
ð 6
ð 6
ñ 6
ô 6
ñ „ð6
ðr ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ðP ÔÐ+ØÔÐ)Ø„NÐ%ØÔÐ+Ø„OÐ*Ø„O�^ð3Ð ˜$˜z¨3˜Ô/ð ð ñ ð ðq
ð q
ð q
ð q
ð q
ñ q
ô q
ñ „ðq
ðr *-Ð  Ð ,Ð ,Ñ ,Ø*,Ð " CÐ ,Ð ,Ñ ,Ø &Ð ˜#Ð &Ð &Ñ &ð ð[
ð [
ð [
ð [
ð [
ñ [
ô [
ñ „ð[
ðJ1 Fð 1¨tð 1ð 1ð 1ð 1ð" „Oð ð ð Ôð ð ð „OÐ@Ð@ØÔð ð ð ÔÐ&Ð&ØÔð ð ð Ôð ð ð „Nð ð ð Ôð ð ð „Nð ð ð9RÐ ˜d 8¨X°~Ð6FÈÐ6LÔ-MÐ#MÔNð ð ñ ðD ðuð uð uð uð uñ uô uñ „ðuðpu˜]ð uð uð uð uðp;(ð ;(ð ;(ð ;(ð|n= ð n=°4ð n=ð n=ð n=ð n=ð n=ð n=r&   