+
    lHàj—„  ã                  ó>  € R t ^ RIHt ^ RIHt ^RIHtHtHt ^RI	H
t
HtHtHtHtHtHt ^RIHtHt ^RIHt  ! R R]4      t ! R	 R
]4      t ! R R]4      t]! R]RR7       ]! R]RR7        ! R R]4      t ! R R]4      t ! R R]4      t]! R]RR7       ]! R]RR7       ]! R]RR7        ! R R]4      t]! R ]R!R7        ! R" R#]4      t]! R$]R%R7        ! R& R']4      t]! R(]R)R7        ! R* R+]4      t ! R, R-]4      t ]! R.] R/R7       ]! R0]R1R7       ]! R2]R3R7       ]! R4]R5R7        ! R6 R7]4      t!]! R8]!R9R7        ! R: R;]4      t" ! R< R=]4      t# ! R> R?]4      t$ ! R@ RA]4      t% ! RB RC]4      t& ! RD RE]4      t' ! RF RG]4      t( ! RH RI]4      t)]! RJ])RKR7        ! RL RM]4      t*]! RN]*ROR7        ! RP RQ]4      t+]! RR]+RSR7        ! RT RU]4      t,]! RV],RWR7        ! RX RY]4      t-]! RZ]-R[R7        ! R\ R]]4      t.]! R^].R_R7        ! R` Ra]4      t/]! Rb]/RcR7        ! Rd Re]4      t0]! Rf]0RgR7        ! Rh Ri]4      t1]! Rj]1RkR7        ! Rl Rm]4      t2]! Rn]2RoR7        ! Rp Rq]4      t3]! Rr]3RsR7        ! Rt Ru]4      t4]! Rv]4RwR7        ! Rx Ry]4      t5]! Rz]5R{R7        ! R| R}]4      t6 ! R~ R]4      t7]! R€]6R�R7       ]! R‚]7RƒR7        ! R„ R…]4      t8]! R†]8R‡R7       ]! Rˆ]R‰R7        ! RŠ R‹]4      t9 ! RŒ R�]4      t:]! RŽ]:R�R7        ! R� R‘]4      t;]! R’];R“R7        ! R” R•]4      t<]! R–]<R—R7        ! R˜ R™]4      t=]! Rš]=R›R7        ! Rœ R�]4      t>]! Rž]>RŸR7        ! R  R¡]4      t?]! R¢]?R£R7       ]! R¤]?R¥R7       ]! R¦]?R§R7        ! R¨ R©]4      t@]! Rª]@R«R7        ! R¬ R­]4      tA ! R® R¯]4      tBER F  w  tCtD]! ]C]B]DR7       K  	   ! R° R±]4      tE ! R² R³]4      tF ! R´ Rµ]4      tG ! R¶ R·]4      tH]! R¸]ER¹R7       ]! Rº]FR»R7       ]! R¼]GR½R7       ]! R¾]HR¿R7        ! RÀ RÁ]4      tI ! RÂ RÃ]4      tJ]! RÄ]IRÅR7       ]! RÆ]JRÇR7        ! RÈ RÉ]4      tK]! RÊ]KRËR7        ! RÌ RÍ]4      tL]! RÎ]LRÏR7        ! RÐ RÑ]4      tM ! RÒ RÓ]4      tN]! RÔ]MRÕR7       ]! RÖ]NR×R7        ! RØ RÙ]4      tO]! RÚ]ORÛR7        ! RÜ RÝ]4      tP ! RÞ Rß]4      tQ]! Rà]PRáR7       ]! Râ]QRãR7       ]! RäRåRæR7        ! Rç Rè]4      tR ! Ré Rê]4      tS ! Rë Rì]4      tT ! Rí Rî]4      tU]! Rï]RRðR7       ]! Rñ]SRòR7       ]! Ró]TRôR7       ]! Rõ]URöR7        ! R÷ Rø]4      tV ! Rù Rú]4      tW ! Rû Rü]4      tX]! Rý]VRþR7       ]! Rÿ]WER R7       ]! ER]XERR7        ! ER ER]4      tY]! ER]YERR7       ]! ER]YERR7       ]! ER	]YER
R7       ]! ER]YERR7       ]! ER]YERR7       ]! ER]YERR7       ]! ER]YERR7       . RENR�NRßNRÝNRÙNERNRNRCNERNRNRINR7NERNRÍNR³NR·NRµNR±NR#NRNR}NRNRÉNRøNRúNRüNRÃNRÁNR©NRYNR‹NR]NERNR™NR‘NR�NRUNRQNRNR¡NR
NRMNR+NR¯NR­NRÓNRÑNR…NRyNRiNRmNERNERNRqNRuNReNR;NRêNRèNRìNRîNtZRå# (  u¡  Notification payloads: every ``event`` frame the gateway emits (``params.payload``).

One ``Payload`` model per event name, registered with ``event(...)``; ``request.cancel`` lives in
``server_requests.py`` next to the requests it withdraws. Each model's docstring names the Python
emitter it was typed from â€” that emitter is the source of truth, the hand-written TS in
``apps/shared/src/gateway-events.ts`` was only the map. Fields the emitter always sets are required;
anything conditional is ``X | None = None``.

A handful of payloads stay ``extra="allow"`` on purpose: their closed shape is owned by another
module (the skin engine, the pet store, the goal/loop/heartbeat state files, the free-tier bootstrap
record) or they are watcher signals whose payload is ``{}`` today and may grow. Everything else is
closed, so a drifted emitter fails the suite (``registry.check_payload`` raises under
``HERMES_TEST_ISOLATION``).
)Úannotations)ÚField)Ú	JsonValueÚPayloadÚWireEnum)ÚMessageReactionÚ	PlanGaugeÚSessionLiveInfoÚSubagentStatusÚ	ToolLabelÚToolLabelKindÚUsage)ÚFreeTierChallengePayloadÚSessionControlSnapshot)Úeventc                  óD   € ] tR t^tRt]P                  RR/,          tRtR# )ÚOpenPayloadzMA payload whose known keys are typed but whose closed set is owned elsewhere.ÚextraÚallow© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Úmodel_configÚ__static_attributes__r   ó    ÚA/home/ubuntu/.hermes/hermes-agent/tui_gateway/contracts/events.pyr   r      s   † ÙWà×'Ñ'¨7°GÐ*<Õ<„Lr   r   c                  óà   € ] tR t^#t$ RtRtR]R&   RtR]R&   ]! ]	R7      t
R]R&   ]! ]	R7      tR]R	&   ]! ]	R7      tR]R
&   ]! ]	R7      tR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )ÚSkinPayloadu³   ``tui_gateway/change_watcher.py::resolve_skin`` â€” the resolved active skin (``HermesSkin``).
``{}`` when the skin engine failed to load. Colour maps are token â†’ colour string.Ú ÚstrÚnameÚdescription©Údefault_factoryzdict[str, str]ÚcolorsÚlight_colorsÚdark_colorsÚbrandingÚbanner_logoÚbanner_heroÚtool_prefixÚhelp_headerr   N)r   r   r   r   r   r#   Ú__annotations__r$   r   Údictr'   r(   r)   r*   r+   r,   r-   r.   r   r   r   r   r    r    #   s�   ‡ ñ\ð €Dˆ#ƒNØ€K�ÓÙ"°4Ô8€FˆNÓ8Ù#(¸Ô#>€L�.Ó>Ù"'¸Ô"=€K�Ó=Ù$°TÔ:€HˆnÓ:Ø€K�ÓØ€K�ÓØ€K�ÓØ€K�×r   r    c                  óV   € ] tR t^3t$ RtR]R&   R]R&   R]R&   RtR	]R
&   RtR	]R&   RtR# )ÚGatewayReadyPayloadzQ``tui_gateway/entry.py`` (stdio) / ``tui_gateway/ws.py`` (WebSocket) first frame.r    ÚskinÚboolÚchange_eventsr"   Úreplay_epochNúbool | NoneÚ	heartbeatÚsession_authorityr   )	r   r   r   r   r   r/   r8   r9   r   r   r   r   r2   r2   3   s.   ‡ Ù[à
ÓØÓØÓØ!€Iˆ{Ó!ð &*Ð�{×)r   r2   zgateway.readyzaFirst frame of a connection: the resolved skin, the change-event capability and the replay epoch.)Údoczskin.changedzSThe active skin moved (name switch or live colour edit); repaint from this palette.c                  óš   € ] tR t^Et$ RtR]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R
tR]R&   RtR]R&   RtR]R&   Rt	R]R&   R]R&   Rt
R# )ÚSetupReadyPayloadz>``hermes_cli/free_tier_bootstrap.py::SetupRecord.as_payload``.r4   Úprovider_configuredr"   Úinference_providerÚfree_tier_accountÚfree_tier_routeÚhas_identityÚother_providersr!   ÚerrorNú
str | NoneÚ
error_coder7   Ú	retryableú
int | NoneÚretry_afterÚfloatÚfinished_atr   )r   r   r   r   r   r/   rC   rE   rF   rH   r   r   r   r   r<   r<   E   sV   ‡ ÙHàÓØÓØÓØÓØÓØÓØ€Eˆ3ƒOà!€J�
Ó!Ø!€Iˆ{Ó!Ø"€K�Ó"Ø×r   r<   c                  ó&   € ] tR t^VtRtRtRtRtRtR# )ÚOnboardingOutcomeÚdoneÚskippedÚreplacedÚdeletedr   N)	r   r   r   r   rM   rN   rO   rP   r   r   r   r   rL   rL   V   s   † Ø€DØ€GØ€HØ„Gr   rL   c                  ó:   € ] tR t^]t$ RtR]R&   R]R&   R]R&   RtR# )	ÚOnboardingEndedPayloada$  ``agent/onboarding_record.py::_transition``: the run ``run_id`` stopped being in progress.
``stored_session_id`` is its chat at the compression tip. ``done``: the first-task card was answered;
``skipped``: Skip setup; ``replaced``: a rerun opened a new run; ``deleted``: its chat was deleted.r"   Úrun_idÚstored_session_idrL   Úoutcomer   N©r   r   r   r   r   r/   r   r   r   r   rR   rR   ]   s   ‡ ñkð ƒKØÓØ×r   rR   zonboarding.endedzAA first-run onboarding run ended; sent to every connected window.zsetup.readyzXThe free-tier bootstrap finished (broadcast); the desktop's setup gate reads the record.zfree_tier.challengez”The account service wants a browser challenge cleared before the free-tier token exchange (broadcast); the desktop loads ``url`` in a hidden window.c                  ó&   € ] tR t^rt$ RtR]R&   RtR# )ÚErrorPayloadu<   Every ``_emit("error", â€¦)`` site sets exactly ``message``.r"   Úmessager   NrV   r   r   r   rX   rX   r   s
   ‡ ÙFà‡Lr   rX   rC   zWA session-level failure outside a turn (agent init, model switch, compression, resume).c                  ó&   € ] tR t^{t$ RtR]R&   RtR# )ÚNoticePayloadz:``tui_gateway/model_switch.py`` capability-refresh notice.r"   rY   r   NrV   r   r   r   r[   r[   {   s
   ‡ ÙDà‡Lr   r[   ÚnoticezAInformational one-liner for the session (capabilities refreshed).c                  óT   € ] tR t^‡t$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R&   Rt
R# )	ÚMessageStartPayloadah  ``message.start``. Empty from the TUI gateway's emitters and for an ordinary admission;
``gateway/session_authority._stamp_claim`` adds an automation admission's async-result card
(``session_automation.admission_display``: a background-process completion) and its model
text, so a viewer that did not submit the turn paints the same header the submitter would.NrD   Údisplay_kindÚdisplay_textÚnotification_categoryÚtextr   )r   r   r   r   r   r_   r/   r`   ra   rb   r   r   r   r   r^   r^   ‡   s3   ‡ ñbð
  $€L�*Ó#Ø#€L�*Ó#Ø(,Ð˜:Ó,Ø€Dˆ*×r   r^   zmessage.startzIA turn began streaming; an automation turn carries its async-result card.c                  óB   € ] tR t^—t$ RtR]R&   RtR]R&   RtR]R&   R	tR# )
ÚStreamDeltaPayloada   ``prompt_turn._invoke_agent._stream`` (message.delta: ``text`` + optional ``rendered``),
``agent_callbacks._agent_cbs`` (reasoning.delta / thinking.delta), ``tool_progress._progress_reasoning``
(reasoning.available). ``verbose`` rides only when the session's verbose reasoning mode is on.r"   rb   NrD   Úrenderedr7   Úverboser   )	r   r   r   r   r   r/   re   rf   r   r   r   r   rd   rd   —   s#   ‡ ñfð ƒIØ€HˆjÓØ€Gˆ[×r   rd   c                  ó&   € ] tR t^¡t$ RtR]R&   RtR# )ÚMessageDeltaPayloada  ``message.delta``. A session-authority local-viewer turn also publishes ``text: null``: the
reply segment boundary (the agent's ``stream_delta_callback(None)``, before tool lines) that
closes the classic CLI's reply box. Every other viewer ignores an empty chunk.rD   rb   r   NrV   r   r   r   rh   rh   ¡   s   ‡ ñVð ×r   rh   zmessage.deltazHOne streamed chunk of the assistant reply (null text: segment boundary).zreasoning.deltaz,One streamed chunk of the model's reasoning.zreasoning.availablez6A completed reasoning block (non-streaming providers).zthinking.deltaz/Legacy thinking-text chunk (thinking_callback).c                  ó0   € ] tR t^¯t$ RtR]R&   R]R&   RtR# )ÚMessageInterimPayloadzW``prompt_turn._interim_assistant_cb`` / ``agent_callbacks`` interim_assistant_callback.r"   rb   r4   Úalready_streamedr   NrV   r   r   r   rj   rj   ¯   s   ‡ Ùaà
ƒIØ×r   rj   zmessage.interimzPInterim assistant commentary (text beside tool calls) sealed as its own segment.c                  ó&   € ] tR t^ºtRtRtRtRtRtR# )Ú
TurnStatusz``prompt_turn._result_status``.ÚcompleterC   Úinterruptedr   N)	r   r   r   r   r   rn   rC   ro   r   r   r   r   rm   rm   º   s   † Ù)à€HØ€EØ„Kr   rm   c                  óH   € ] tR t^Ât$ RtR]R&   R]R&   R]R&   RtR]R&   RtR	# )
ÚUsageLimitSuggestionub   ``agent/plan_limits.py::ModelSuggestion`` â€” a recommended model that still works past the limit.r"   ÚmodelÚlabelÚnoteÚnousÚproviderr   N)r   r   r   r   r   r/   rv   r   r   r   r   rq   rq   Â   s   ‡ ÙlàƒJØƒJØ
ƒIØ€Hˆc×r   rq   c                  ó&   € ] tR t^Ët$ RtR]R&   RtR# )ÚUsageLimitCreditsu·   ``agent/plan_limits.py::CreditsOption`` â€” ``use_credits`` (turn on Keep going), ``add_credits``, or
``add_credits_and_keep_going`` (both: Keep going is off and there is no balance).r"   Úactionr   NrV   r   r   r   rx   rx   Ë   s   ‡ ñYð ‡Kr   rx   c                  óŠ   € ] tR t^Òt$ RtR]R&   R]R&   R]R&   RtR]R&   R]R	&   ]! ]R
7      t	R]R&   Rt
R]R&   RtR]R&   RtR# )Ú
UsageLimitu¯   ``agent/plan_limits.py::LimitHit`` â€” a usage-window plan's limit: what ran out, when it resets, and
the one-click ways on (switch to a recommended model, use / add credits).r"   Úgauge_idÚscopeÚ
limit_nameNrG   Úresets_at_msrY   r%   zlist[UsageLimitSuggestion]ÚsuggestionszUsageLimitCredits | NoneÚcreditsr!   Úcurrent_modelr   )r   r   r   r   r   r/   r   r   Úlistr€   r�   r‚   r   r   r   r   r{   r{   Ò   sM   ‡ ñQð ƒMØƒJØƒOØ#€L�*Ó#ØƒLÙ.3ÀDÔ.I€KÐ+ÓIØ(,€GÐ%Ó,Ø€M�3×r   r{   c                  óœ   € ] tR t^àt$ RtR]R&   R]R&   R]R&   RtR]R	&   RtR]R
&   RtR]R&   Rt	R]R&   ]
P                  RR/,          tRtR# )ÚErrorSurfaceuã   ``agent/error_surface.py::_surface`` â€” advisory {layer, code, retryable} (+ identity, + auth hint,
+ ``resets_at`` epoch seconds when the provider named when its limit lifts, + ``usage_limit`` on a
usage-window plan's limit).r"   ÚlayerÚcoder4   rF   NrD   rv   rr   úfloat | NoneÚ	resets_atzUsageLimit | NoneÚusage_limitr   r   r   )r   r   r   r   r   r/   rv   rr   r‰   rŠ   r   r   r   r   r   r   r…   r…   à   sV   ‡ ñ#ð ƒJØ
ƒIØƒOØ€HˆjÓØ€Eˆ:ÓØ"€Iˆ|Ó"Ø%)€KÐ"Ó)Ø×'Ñ'¨7°GÐ*<Õ<„Lr   r…   c                  óf   € ] tR t^ït$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   RtR]R&   RtR# )ÚBillingBlockz[``agent/billing_links.py::BillingBlock.to_dict`` (+ ``unverified`` from conversation_loop).r"   rv   Úprovider_labelrr   rD   Úbilling_urlr4   Úis_nousrY   Nr7   Ú
unverifiedr   )r   r   r   r   r   r/   r�   r   r   r   r   rŒ   rŒ   ï   s/   ‡ ÙeàƒMØÓØƒJØÓØƒMØƒLØ"€J�×"r   rŒ   c                  óh   € ] tR t^ût$ RtR]R&   R]R&   RtR]R&   RtR]R	&   RtR
]R&   Rt	R]R&   Rt
R# )ÚPersistedTurna¤  Committed SQLite row addresses for the agent's current-turn suffix. Missing ids are
unproven, never negative acknowledgements. ``complete`` permits retiring the whole local
turn only when the original turn boundary, every row and final body are still accounted
for; compaction, redirects and partial writes conservatively leave it false. Row ids are
scoped to the owning profile's store, as in ``SessionMessage.row_id``.z	list[int]Úrow_idsr4   rn   NrG   Úuser_row_idÚfinal_assistant_row_idzlist[int] | NoneÚuser_row_idsrD   Úsubmission_idr   )r   r   r   r   r   r/   r”   r•   r–   r—   r   r   r   r   r’   r’   û   sA   ‡ ñNð ÓØƒNØ"€K�Ó"Ø)-Ð˜JÓ-ð &*€LÐ"Ó)à $€M�:×$r   r’   c                  óü   € ] tR tRt$ RtRtR]R&   RtR]R&   RtR	]R
&   Rt	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )ÚMessageCompletePayloadi  zã``prompt_turn._complete_turn_payload`` / ``session_auto_continue._emit_terminal_turn_error`` /
``agent_callbacks._mirror_subagent_to_child`` (child watch mirror: ``text`` only) /
``compute_host_bridge`` (``text`` + ``status``).r!   zstr | JsonValuerb   NúUsage | NoneÚusagezTurnStatus | NoneÚstatusrD   Ú	reasoningÚwarningr7   Úresponse_previewedÚresponse_reusedÚresponse_transformedzBillingBlock | NoneÚbillingÚfailure_reasonre   rC   ÚrecoverablezErrorSurface | NoneÚerror_surfaceÚpartialzPersistedTurn | NoneÚpersisted_turnr   )r   r   r   r   r   rb   r/   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   re   rC   r¤   r¥   r¦   r§   r   r   r   r   r™   r™     s¯   ‡ ñ8ð €Dˆ/ÓØ€Eˆ<ÓØ $€FÐÓ$Ø €IˆzÓ Ø€GˆZÓØ&*Ð˜Ó*à#'€O�[Ó'Ø(,Ð˜+Ó,Ø#'€GÐ Ó'Ø!%€N�JÓ%Ø€HˆjÓØ€Eˆ:ÓØ#€K�Ó#Ø)-€MÐ&Ó-Ø€Gˆ[ÓØ+/€NÐ(×/r   r™   zmessage.completez.The turn ended: final text, usage and outcome.c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )ÚStatusUpdatePayloadi(  zV``server._status_update`` and the direct emitters (goal / loop / heartbeat / process).r"   Úkindrb   r   NrV   r   r   r   r©   r©   (  s   ‡ Ù`à
ƒIØ
‡Ir   r©   zstatus.updateua   Transient status line (kind: status, lifecycle, compacting, goal, loop, heartbeat, process, â€¦).c                  óz  € ] tR tRt$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R	&   Rt
R]R
&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R &   RtR!]R"&   R#tR# )$ÚSessionUsagePayloadi2  a  ``usage``: the status-bar view (``server._get_usage``), sent by the embedded backend's ticker
(``server._start_usage_ticker``) and by a canonical local viewer's gateway after every API call
and at turn end (``gateway/session_usage.py::usage_frame``). Read this.

Deprecated: the top-level session-cumulative counters (``usage_stats``, the ``session.stats``
dict) that the gateway frame also carries. They are kept for existing readers; new readers use
``usage``, or ``session.stats`` for the raw counters. The embedded ticker never sends them.Nrš   r›   rG   Úinput_tokensÚoutput_tokensÚcache_read_tokensÚcache_write_tokensÚprompt_tokensÚcompletion_tokensÚtotal_tokensÚreasoning_tokensÚ	api_callsÚlast_prompt_tokensÚcontext_tokensÚcontext_lengthÚconfig_context_lengthrD   Úcontext_sourceÚcompression_countrˆ   Úavg_latency_sÚtokens_per_sÚlast_turn_tokensúdict[str, JsonValue] | NoneÚ
rate_limitÚactive_subagentsrr   rv   Úfallback_modelzPlanGauge | NoneÚ
plan_gauger   ) r   r   r   r   r   r›   r/   r­   r®   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   rÀ   rÁ   rr   rv   rÂ   rÃ   r   r   r   r   r¬   r¬   2  s  ‡ ñcð €Eˆ<ÓØ#€L�*Ó#Ø $€M�:Ó$Ø$(Ð�zÓ(Ø%)Ð˜
Ó)Ø $€M�:Ó$Ø$(Ð�zÓ(Ø#€L�*Ó#Ø#'Ð�jÓ'Ø €IˆzÓ Ø%)Ð˜
Ó)Ø!%€N�JÓ%Ø!%€N�JÓ%Ø(,Ð˜:Ó,Ø!%€N�JÓ%Ø$(Ð�zÓ(Ø"&€M�<Ó&Ø!%€L�,Ó%Ø#'Ð�jÓ'Ø.2€JÐ+Ó2Ø#'Ð�jÓ'Ø€Eˆ:ÓØ€HˆjÓØ!%€N�JÓ%Ø#'€JÐ ×'r   r¬   zsession.usagezLMid-turn usage tick; message.complete carries the authoritative final usage.c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )ÚSessionTitlePayloadiY  z9``prompt_turn._invoke_agent`` ``_on_session_title`` hook.r"   Ú
session_idÚtitler   NrV   r   r   r   rÅ   rÅ   Y  s   ‡ ÙCàƒOØ‡Jr   rÅ   zsession.titlezDAuto-titling renamed the session (``session_id`` is the stored key).c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚReactionPayloadic  z&``agent_callbacks`` reaction_callback.r"   rª   r   NrV   r   r   r   rÉ   rÉ   c  ó
   ‡ Ù0à
‡Ir   rÉ   Úreactionz@Affection reaction detected in the user's message (hearts etc.).c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚReviewSummaryPayloadil  z&``server`` background_review_callback.r"   rb   r   NrV   r   r   r   rÍ   rÍ   l  rÊ   r   rÍ   zreview.summaryz,Background review of the last turn finished.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚAgentPrintPayloadiu  zÕA session-authority local-viewer turn: one line the agent printed through ``_print_fn``
(subagent completion, compaction, errors, budget notices), which main's classic CLI rendered
through ``_agent_status_print``.r"   rb   r   NrV   r   r   r   rÏ   rÏ   u  s   ‡ ñ(ð ‡Ir   rÏ   zagent.printz=A status line the agent printed during a local viewer's turn.c                  óv   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   RtR	]R
&   RtR]R&   Rt	R]R&   Rt
R]R&   RtR# )ÚToolStartPayloadiƒ  a  ``tool_progress._on_tool_start`` (+ ``agent_callbacks._mirror_subagent_to_child`` rows with
``preview`` and empty ``args``). ``todos``/``revision`` are NOT set by the emitter; kept optional
because tool.start rows may pass through connector redaction unchanged.r"   Útool_idr#   NrD   Úcontextr¿   ÚargsÚ	args_textÚpreviewúlist[ToolLabel] | NoneÚlabelsr   )r   r   r   r   r   r/   rÓ   rÔ   rÕ   rÖ   rØ   r   r   r   r   rÑ   rÑ   ƒ  sH   ‡ ñOð ƒLØ
ƒIØ€GˆZÓØ(,€DÐ
%Ó,Ø €IˆzÓ Ø€GˆZÓØ%)€FÐ"×)r   rÑ   z
tool.startz*A tool call began (stable id + full args).c                  ó®   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   RtR	]R
&   RtR]R&   Rt	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )ÚToolCompletePayloadi”  zY``tool_progress._on_tool_complete``; ``todos``/``revision`` merged in for the todo tools.r"   rÒ   r#   Nr¿   rÔ   rˆ   Ú
duration_sr   ÚresultrD   ÚsummaryÚresult_textÚinline_diffzlist[JsonValue] | NoneÚtodosrG   Úrevisionr×   rØ   r   )r   r   r   r   r   r/   rÔ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   rØ   r   r   r   r   rÚ   rÚ   ”  sl   ‡ ÙcàƒLØ
ƒIØ(,€DÐ
%Ó,Ø#€J�Ó#Ø€FˆIÓØ€GˆZÓØ"€K�Ó"Ø"€K�Ó"Ø$(€EÐ!Ó(Ø€HˆjÓØ%)€FÐ"×)r   rÚ   ztool.completezLA tool call finished: parsed result, summary, optional diff / todo snapshot.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚToolGeneratingPayloadi§  z&``agent_callbacks`` tool_gen_callback.r"   r#   r   NrV   r   r   r   rã   rã   §  rÊ   r   rã   ztool.generatingz.The model is emitting a tool call's arguments.c                  óN   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚToolOutputRiskPayloadi°  z(``tool_progress._progress_output_risk``.r"   rÒ   r#   Úriskú	list[str]Úfindingsr4   Úredactedr   NrV   r   r   r   rå   rå   °  s   ‡ Ù2àƒLØ
ƒIØ
ƒIØÓØ‡Nr   rå   ztool.output_riskzITool output was classified as risky (prompt-injection / secret findings).c                  ód   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	]R
&   RtR]R&   RtR]R&   Rt	R# )ÚToolProgressPayloadi½  uœ   ``agent.tool_progress_relay.tool_progress_payload`` â€” an MCP server's
``notifications/progress`` for a running call, throttled to one per 500 ms per call.r"   rÒ   r#   rI   ÚprogressNrˆ   ÚtotalrG   ÚpercentrD   rY   r   )
r   r   r   r   r   r/   rí   rî   rY   r   r   r   r   rë   rë   ½  s7   ‡ ñ\ð ƒLØ
ƒIØƒOØ€Eˆ<ÓØ€GˆZÓØ€GˆZ×r   rë   ztool.progresszBLive progress of a running tool call (MCP notifications/progress).c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )	ÚTodoUpdatedPayloadiÌ  u?   ``tool_progress._normalize_todo_state`` â€” full task snapshot.zlist[JsonValue]rà   Úintrá   r   NrV   r   r   r   rð   rð   Ì  s   ‡ ÙIàÓØ‡Mr   rð   ztodo.updatedz)Full todo snapshot after a todo tool ran.c                  ór   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR]R	&   RtR
]R&   RtR
]R&   Rt	R
]R&   Rt
R# )ÚNotificationShowPayloadiÙ  aq  ``agent/credits_tracker.py::AgentNotice`` via notice_callback, and ``server._await_agent_ready``'s
slow-build notice. ``level``: info | warn | error | success; ``kind``: sticky | ttl | agent.
``detail``: the full text behind a short ``text`` (the low-disk auto-prune question): Desktop shows
it in the toast's expandable body, the Ink TUI prints it into the transcript.r"   rb   Úlevelrª   NrG   Úttl_msrD   ÚkeyÚidÚdetailr   )r   r   r   r   r   r/   rõ   rö   r÷   rø   r   r   r   r   ró   ró   Ù  sA   ‡ ñUð
 ƒIØƒJØ
ƒIØ€FˆJÓØ€CˆÓØ€Bˆ
ÓØ€FˆJ×r   ró   c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚNotificationClearPayloadiè  r"   rö   r   N©r   r   r   r   r/   r   r   r   r   rú   rú   è  s   ‡ Ø	‡Hr   rú   znotification.showz@Show / replace a keyed out-of-band notice (toast or status bar).znotification.clearz"Withdraw the notice with this key.c                  óL   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   RtR]R	&   R
tR# )ÚTipShowPayloadið  z``tools/tip_tool.py``.r"   Úselectorrb   NrD   rÇ   Úsider   )	r   r   r   r   r   r/   rÇ   rÿ   r   r   r   r   rý   rý   ð  s#   ‡ Ù àƒMØ
ƒIØ€Eˆ:ÓØ€Dˆ*×r   rý   ztip.showz6Point at a desktop element with a one-line tip bubble.zsession.infozgLive session settings snapshot (``server._session_info``); also the ``info`` of create/resume/activate.c                  ó"   € ] tR tRtRtRtRtRtR# )ÚResumePhaseStatusi  Úloadingrn   Úfailedr   N)r   r   r   r   r  rn   r  r   r   r   r   r  r    s   † Ø€GØ€HØ„Fr   r  c                  óL   € ] tR tRt$ RtR]R&   R]R&   RtR]R	&   RtR
]R&   RtR# )ÚSessionResumeProgressPayloadi  z#``server._hydrate_resume_history``.r"   Úphaser  rœ   NrG   Úmessage_countrD   rY   r   )	r   r   r   r   r   r/   r  rY   r   r   r   r   r  r    s$   ‡ Ù-àƒJØÓØ $€M�:Ó$Ø€GˆZ×r   r  zsession.resume_progressz#Deferred resume hydration progress.c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR# )	ÚSessionReclaimedPayloadi  z>``session_lifecycle._announce_session_reclaimed`` (broadcast).r"   rÆ   rT   Úreasonr   NrV   r   r   r   r	  r	    s   ‡ ÙHàƒOØÓØ‡Kr   r	  zsession.reclaimedz@The backend reclaimed a live session out from under its clients.c                  óN   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )ÚApprovalCancelledPayloadi"  uª  ``session_lifecycle._announce_cancelled_gateway_approvals`` (broadcast).

One frame for every pending approval dropped by an interrupt / reap / teardown (#106678) â€” the
deny-resolve is silent without it, so a reconnecting client's prompt looks lost rather than cancelled.
``cancelled_count`` is the number of dropped entries; ``request_ids`` omits empty/missing ids, so the
two can disagree when an entry has no request_id.
r"   rÆ   rT   r
  rñ   Úcancelled_countrç   Úrequest_idsr   NrV   r   r   r   r  r  "  s%   ‡ ñð ƒOØÓØƒKØÓØ×r   r  zapproval.cancelledzrPending gateway approvals were dropped by interrupt/reap/teardown; the wait resolved as deny (not a user refusal).c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚSessionControlUpdatePayloadi6  r   Úcontrolr   Nrû   r   r   r   r  r  6  s   ‡ Ø#×#r   r  zsession.control.updatez0Persisted goal / loop / heartbeat state changed.c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )Ú BillingStepUpVerificationPayloadi=  z4``methods_session`` billing.step_up on_verification.r"   Úverification_urlÚ	user_coder   NrV   r   r   r   r  r  =  s   ‡ Ù>àÓØ‡Nr   r  zbilling.step_up.verificationzSDevice-flow URL + code for the billing scope step-up; the client opens the browser.c                  ó>   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   R	tR# )
ÚSideAgentCompletePayloadiK  zZ``methods_prompt._spawn_side_agent``: ``{task_id, **extra, text}``; btw adds ``question``.r"   Útask_idrb   NrD   Úquestionr   )r   r   r   r   r   r/   r  r   r   r   r   r  r  K  s   ‡ ÙdàƒLØ
ƒIØ€Hˆj×r   r  zbackground.completez"A /background side agent finished.zbtw.completez"A /btw side question was answered.zpreview.restart.completez*The hidden preview-restart agent finished.c                  ó>   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   R	tR# )
ÚPreviewRestartProgressPayloadiX  zQ``methods_prompt`` restart body + ``agent_callbacks._preview_restart_callbacks``.r"   r  rb   NrD   rô   r   )r   r   r   r   r   r/   rô   r   r   r   r   r  r  X  s   ‡ Ù[àƒLØ
ƒIØ€Eˆ:×r   r  zpreview.restart.progressz-Progress line from the preview-restart agent.c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	# )
ÚSubagentOutputTailEntryif  z=``tools/delegate_tool_results.py::_extract_output_tail`` row.r"   ÚtoolrÖ   r4   Úis_errorr   NrV   r   r   r   r  r  f  s   ‡ ÙGà
ƒIØƒLØ‡Nr   r  c                  ó`  € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	]R
&   RtR	]R&   RtR	]R&   Rt	R	]R&   Rt
R]R&   RtR	]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR	]R&   RtR	]R&   RtR]R&   RtR	]R &   RtR!]R"&   RtR	]R#&   R$tR# )%ÚSubagentEventPayloadin  u·   ``tool_progress._progress_subagent`` â€” every ``subagent.*`` frame; identity fields are optional
because older emitters omit them and the TUI spawn tree falls back to flat rendering.r"   Úgoalrñ   Ú
task_countÚ
task_indexNrD   Úsubagent_idÚ	parent_idÚchild_session_idÚdelegation_idrG   Údepthrr   Ú
tool_countzlist[str] | NoneÚtoolsetsr­   r®   r´   rµ   Ú
files_readÚfiles_writtenz$list[SubagentOutputTailEntry] | NoneÚoutput_tailÚ	tool_namerb   zSubagentStatus | Nonerœ   rÝ   rˆ   Úduration_secondsÚtool_previewr   )r   r   r   r   r   r/   r%  r&  r'  r(  r)  rr   r*  r+  r­   r®   r´   rµ   r,  r-  r.  r/  rb   rœ   rÝ   r0  r1  r   r   r   r   r!  r!  n  só   ‡ ñ]ð ƒIØƒOØƒOØ"€K�Ó"Ø €IˆzÓ Ø#'Ð�jÓ'Ø $€M�:Ó$Ø€Eˆ:ÓØ€Eˆ:ÓØ!€J�
Ó!Ø!%€HÐÓ%Ø#€L�*Ó#Ø $€M�:Ó$Ø#'Ð�jÓ'Ø €IˆzÓ Ø#'€JÐ Ó'Ø&*€MÐ#Ó*Ø8<€KÐ5Ó<Ø €IˆzÓ Ø€Dˆ*ÓØ$(€FÐ!Ó(Ø€GˆZÓØ%)Ð�lÓ)Ø#€L�*×#r   r!  c                  óL   € ] tR tRt$ RtR]R&   R]R&   RtR]R&   RtR]R	&   R
tR# )ÚMoaReferencePayloadiš  z*``tool_progress._progress_moa_reference``.r"   rs   rb   NrG   ÚindexÚcountr   )	r   r   r   r   r   r/   r4  r5  r   r   r   r   r3  r3  š  s#   ‡ Ù4àƒJØ
ƒIØ€Eˆ:ÓØ€Eˆ:×r   r3  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚMoaAggregatingPayloadi£  r"   Ú
aggregatorr   Nrû   r   r   r   r7  r7  £  ó   ‡ Ø‡Or   r7  c                  ó6   € ] tR tRt$ R]R&   R]R&   R]R&   RtR# )	ÚMoaProgressPayloadi§  r"   rs   rñ   Ú	refs_doneÚ
refs_totalr   Nrû   r   r   r   r;  r;  §  s   ‡ ØƒJØƒNØ‡Or   r;  c                  óL   € ] tR tRt$ R]R&   RtR]R&   RtR]R&   RtR]R	&   R
tR# )ÚMoaPhasePayloadi­  r"   r  NrG   r<  r=  rD   r8  r   )	r   r   r   r   r/   r<  r=  r8  r   r   r   r   r?  r?  ­  s%   ‡ ØƒJØ €IˆzÓ Ø!€J�
Ó!Ø!€J�
×!r   r?  zmoa.referencez!One MoA reference model's output.zmoa.aggregatingzThe MoA aggregator started.zmoa.progressz)MoA reference fan-out progress (n/total).z	moa.phasez5MoA phase transition (currently only ``aggregator``).c                  ó4   € ] tR tRt$ RtR]R&   RtR]R&   RtR# )	ÚPreviewOpenPayloadi½  z``tools/open_preview_tool.py``.r"   Úurlr!   rs   r   N)r   r   r   r   r   r/   rs   r   r   r   r   rA  rA  ½  s   ‡ Ù)à	ƒHØ€Eˆ3‡Or   rA  c                  ó*   € ] tR tRt$ RtRtR]R&   RtR# )ÚPreviewClosePayloadiÄ  zY``tools/preview_tool.py`` / ``tools/close_preview_tool.py``; ``url`` '' closes every tab.r!   r"   rB  r   N)r   r   r   r   r   rB  r/   r   r   r   r   rD  rD  Ä  s   ‡ Ùcà€Cˆ‡Mr   rD  zpreview.openz.Open a URL / file in the desktop preview pane.zpreview.closez"Close the preview pane or one tab.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚPaneRevealPayloadiÎ  z``tools/focus_pane_tool.py``.r"   Úpaner   NrV   r   r   r   rF  rF  Î  s
   ‡ Ù'à
‡Ir   rF  zpane.revealz$Focus / reveal a named desktop pane.c                  ó:   € ] tR tRt$ RtR]R&   R]R&   R]R&   R	tR
# )ÚMessageReactionPayloadi×  z#``tools/react_to_message_tool.py``.rñ   Úrow_idzlist[MessageReaction]Ú	reactionsr"   Úroler   NrV   r   r   r   rI  rI  ×  s   ‡ Ù-àƒKØ$Ó$Ø
‡Ir   rI  zmessage.reactionz.The agent reacted to a message; paint it live.c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )ÚTerminalOutputPayloadiâ  z5``session_notifications`` process_registry.on_output.r"   Ú
process_idÚchunkr   NrV   r   r   r   rN  rN  â  s   ‡ Ù?àƒOØ‡Jr   rN  c                  ó"   € ] tR tRt$ R]R&   RtR# )ÚTerminalClosePayloadié  r"   rO  r   Nrû   r   r   r   rR  rR  é  r9  r   rR  zagent.terminal.outputz4Output chunk from an agent-owned background process.zterminal.closez)An agent-owned background process closed.c                  ó0   € ] tR tRt$ RtR]R&   R]R&   RtR# )ÚBrowserProgressPayloadiñ  z?``methods_browser`` announce(); ``level``: info | warn | error.r"   rY   rô   r   NrV   r   r   r   rT  rT  ñ  s   ‡ ÙIàƒLØ‡Jr   rT  zbrowser.progressz.Browser (CDP) connect / install progress line.c                  ód   € ] tR tRt$ RtR]R&   R]R&   R]R&   RtR	]R
&   RtR	]R&   RtR	]R&   Rt	R# )ÚBrowserControllerCommandPayloadiþ  z;``gateway/browser_control_broker.py`` FRAME_COMMAND params.r"   Ú
command_idry   zdict[str, JsonValue]Ú	argumentsNrD   Úcontroller_idÚbrowser_profile_idÚtool_call_idr   )
r   r   r   r   r   r/   rY  rZ  r[  r   r   r   r   rV  rV  þ  s4   ‡ ÙEàƒOØƒKØ#Ó#Ø $€M�:Ó$Ø%)Ð˜
Ó)Ø#€L�*×#r   rV  c                  ó4   € ] tR tRt$ RtR]R&   RtR]R&   RtR# )	ÚBrowserControllerCancelPayloadi	  z5``gateway/browser_control_broker.py::_cancel_frame``.r"   rW  NrD   r[  r   )r   r   r   r   r   r/   r[  r   r   r   r   r]  r]  	  s   ‡ Ù?àƒOØ#€L�*×#r   r]  zbrowser.controller.commandz7Dispatch one browser action to the attached controller.zbrowser.controller.cancelz&Withdraw a pending controller command.zvoice.interruptedNzCBarge-in: the spoken interjection interrupted the turn; no payload.c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚVoiceStatusPayloadi  ue   ``methods_voice._vr_on_status``; states come from the recorder (idle / listening / transcribing â€¦).r"   Ústater   NrV   r   r   r   r_  r_    s
   ‡ Ùoà‡Jr   r_  c                  ó&   € ] tR tRt$ RtR]R&   RtR# )ÚVoicePartialPayloadi   u[   ``methods_voice`` voice.record ``on_partial`` â€” live STT text so far (``stt.streaming``).r"   rb   r   NrV   r   r   r   rb  rb     s
   ‡ Ùeà
‡Ir   rb  c                  óT   € ] tR tRt$ RtRtR]R&   RtR]R&   RtR]R&   Rt	R]R	&   R
t
R# )ÚVoiceTranscriptPayloadi&  zd``methods_voice._vr_transcript`` / ``_deliver_fd_transcript`` / typed stop phrase in methods_prompt.NrD   rb   r7   Ústop_phraseÚtypedÚno_speech_limitr   )r   r   r   r   r   rb   r/   re  rf  rg  r   r   r   r   rd  rd  &  s-   ‡ Ùnà€Dˆ*ÓØ#€K�Ó#Ø€Eˆ;ÓØ#'€O�[×'r   rd  c                  ó>   € ] tR tRt$ RtR]R&   RtR]R&   R]R	&   R
tR# )ÚWakeDetectedPayloadi/  z/``methods_voice`` wake detector ``_on_detect``.r"   ÚphraseNrD   Úprofiler4   Ústart_new_sessionr   )r   r   r   r   r   r/   rk  r   r   r   r   ri  ri  /  s   ‡ Ù9àƒKØ€GˆZÓØ×r   ri  zvoice.statuszVoice recorder state changed.zvoice.partialz6Live STT text so far while the user is still speaking.zvoice.transcriptzAA voice capture produced text (or a stop phrase / silence limit).zwake.detectedzA wake phrase fired.c                  ó^   € ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR	]R
&   Rt	R]R&   Rt
R# )ÚPetChangedPayloadi@  ud   ``change_watcher._pet_changed_payload`` â€” ``pet.info.meta``-shaped; ``{enabled: false}`` when off.r4   ÚenabledNrD   ÚslugÚdisplayNamerˆ   ÚscaleÚspritesheetRevisionr   )r   r   r   r   r   r/   rp  rq  rr  rs  r   r   r   r   rn  rn  @  s3   ‡ ÙnàƒMØ€Dˆ*ÓØ"€K�Ó"Ø€Eˆ<ÓØ&*Ð˜×*r   rn  c                  óL   € ] tR tRt$ RtR]R&   R]R&   RtR]R	&   RtR
]R&   RtR# )ÚPetGenerateProgressPayloadiJ  zL``methods_session`` pet.generate: token-only init frame, then one per draft.r"   Útokenrñ   r5  NrG   r4  rD   ÚdataUrir   )	r   r   r   r   r   r/   r4  rw  r   r   r   r   ru  ru  J  s#   ‡ ÙVàƒJØƒJØ€Eˆ:ÓØ€GˆZ×r   ru  c                  ó^   € ] tR tRt$ RtR]R&   RtR]R&   RtR]R&   RtR]R	&   Rt	R]R
&   Rt
R# )ÚPetHatchProgressPayloadiS  z[``methods_session`` pet.hatch ``_on_progress``: ``{event, detail}`` or the parsed row form.r"   r   NrD   rø   r`  rM   rí   r   )r   r   r   r   r   r/   rø   r`  rM   rí   r   r   r   r   ry  ry  S  s2   ‡ ÙeàƒJØ€FˆJÓØ€Eˆ:ÓØ€Dˆ*ÓØ€Eˆ:×r   ry  zpet.changedz3The active pet / its spritesheet changed (watcher).zpet.generate.progressz#Pet base-draft generation progress.zpet.hatch.progressz!Pet hatch (row drawing) progress.c                  ó   € ] tR tRtRtRtR# )ÚChangeSignalPayloadie  u\   ``change_watcher._CHANGE_WATCHES`` payload fn â€” ``{}`` for every watch except pet.changed.r   N)r   r   r   r   r   r   r   r   r   r{  r{  e  s   † Ýfr   r{  zcron.changedz,cron/jobs.json moved; refetch the cron list.zsessions.changedz)state.db moved; refetch the session list.zplatforms.changedz2gateway_state.json moved; refetch platform status.zprojects.changedz3projects.db moved; refetch the project list + tree.zpairing.changedz%Pairing state moved; refetch pairing.zskills.changedz\A skill root moved (installed/removed elsewhere); refetch commands.catalog from the gateway.zbot_relay.outbox.pendingz0A bot-relay outbox envelope is queued; drain it.r   r   r   r   r   ))zsubagent.spawn_requestedz>delegate_task accepted a child goal (before the child starts).)zsubagent.startz"A delegated child started running.)zsubagent.progressz(Batched tool-name progress from a child.)zsubagent.thinkingzA child's reasoning chunk.)zsubagent.toolzA child called a tool.)zsubagent.completez1A child finished (status + observability rollup).)[r   Ú
__future__r   Úpydanticr   Úbaser   r   r   Úcommonr   r   r	   r
   r   r   r   Úconfig_free_tier_controlr   r   Úregistryr   r   r    r2   r<   rL   rR   rX   r[   r^   rd   rh   rj   rm   rq   rx   r{   r…   rŒ   r’   r™   r©   r¬   rÅ   rÉ   rÍ   rÏ   rÑ   rÚ   rã   rå   rë   rð   ró   rú   rý   r  r  r	  r  r  r  r  r  r  r!  Ú_nameÚ_docr3  r7  r;  r?  rA  rD  rF  rI  rN  rR  rT  rV  r]  r_  rb  rd  ri  rn  ru  ry  r{  Ú__all__r   r   r   Ú<module>r…     s2
  ðñõ #å ç .Ñ .ß p× pÑ pß VÝ ô=�'ô =ô�+ô ô 	*˜'ô 	*ñ €oÐ*Ø
mõoá €n�kØ
_õaô˜ô ô"˜ô ô˜Wô ñ ÐÐ0Ø
MõOá €mÐ&Ø
dõfñ ÐÐ5ðGõHô
�7ô ñ €gˆ|Ð!zÕ {ô�Gô ñ €h�Ð#fÕ gô	˜'ô 	ñ €oÐ*Ø
UõWô ˜ô  ôÐ,ô ñ €oÐ*Ð0zÕ {Ù ÐÐ+Ð1_Õ `Ù ÐÐ/Ð5mÕ nÙ ÐÐ*Ð0aÕ bô˜Gô ñ ÐÐ.Ø
\õ^ô �ô  ô˜7ô ô˜ô ô�ô ô=�7ô =ô	#�7ô 	#ô%�Gô %ô$0˜Wô 0ñ0 ÐÐ0Ð6fÕ gô˜'ô ñ €oÐ*ð  1Tõ  Uô!(˜'ô !(ñH €oÐ*Ð0~Õ ô˜'ô ñ €oÐ*Ð0vÕ wô�gô ñ €j�/Ð'iÕ jô˜7ô ñ ÐÐ,Ð2`Õ aô˜ô ñ €mÐ&Ð,kÕ lô*�wô *ñ €lÐ$Ð*VÕ Wô*˜'ô *ñ  €oÐ*Ð0~Õ ô˜Gô ñ ÐÐ.Ð4dÕ eô˜Gô ñ ÐÐ/ð  6Aõ  Bô	˜'ô 	ñ €oÐ*Ð0tÕ uô˜ô ñ €nÐ(Ð.YÕ Zô˜gô ô˜wô ñ ÐÐ2Ð8zÕ {Ù ÐÐ4Ð:^Õ _ô�Wô ñ €j�.Ð&^Õ _ñ €n�oØ
sõuô˜ô ô 7ô ñ ÐÐ!=ÐChÕ iô˜gô ñ ÐÐ2Ð8zÕ {ô˜wô ñ  ÐÐ4Ø
~õ@ô$ 'ô $ñ ÐÐ ;ÐAsÕ tô wô ñ Ð$Ð&FØ
_õaô ˜wô  ñ ÐÐ5Ð;_Õ `Ù €nÐ.Ð4XÕ YÙ Ð Ð":Ð@lÕ mô Gô ñ Ð Ð"?ÐEtÕ uô˜gô ô$˜7ô $ô<�K€Eˆ4ñ 
ˆ%Ð%¨4×0ñô˜'ô ô˜Gô ô˜ô ô"�gô "ñ €oÐ*Ð0SÕ TÙ ÐÐ.Ð4QÕ RÙ €nÐ(Ð.YÕ ZÙ €k�?Ð(_Õ `ô˜ô ô˜'ô ñ €nÐ(Ð.^Õ _Ù €oÐ*Ð0TÕ Uô˜ô ñ €mÐ&Ð,RÕ Sô˜Wô ñ ÐÐ0Ð6fÕ gô˜Gô ô˜7ô ñ ÐÐ4Ð:pÕ qÙ ÐÐ,Ð2]Õ ^ô˜Wô ñ ÐÐ0Ð6fÕ gô$ gô $ô$ Wô $ñ Ð"Ð$Cð  JCõ  DÙ Ð!Ð#AÐGoÕ pñ Ð˜4Ð%jÕ kô˜ô ô˜'ô ô(˜Wô (ô˜'ô ñ €nÐ(Ð.MÕ NÙ €oÐ*Ð0hÕ iÙ ÐÐ0Ð6yÕ zÙ €oÐ*Ð0FÕ Gô+˜ô +ô ô ô˜kô ñ €mÐ&Ð,aÕ bÙ ÐÐ9Ñ?dÕ eÙ ÑÐ3Ñ9\Õ ]ög˜+ô gñ �nÐ)Ñ/]Õ ^Ù ÑÐ-Ñ3^Õ _Ù ÑÐ.Ñ4hÕ iÙ ÑÐ-Ñ3hÕ iÙ ÑÐ,Ñ2YÕ ZÙ ÑÐ+Ù
hõjá Ñ Ð"5Ñ;mÕ nðØðØ6ðØ8Xðà%ðà'?ðáAVðàXfðð ðñ /ðð 1Fðð ð	ð 6ð	ñ 8Ið	ð Kcð	ð e|ð	ð
 ðð
 ,ðð
 .Cðð
 ETðð ðð !:ðð <Iðð K^ðð ðð 6ðð 8Qðð Shðð ðð :ðð <Mðð Obðð ðñ 5ðð 7Tðð ðð  >ðð @Uðð Wlðð ðð 4ðð 6Cðð EZðð ðð 1ðð 3Lðð Ndðð ðð .ðð 0Dðð F[ðð ðñ )ðñ +:ðð <Sðð Ujðð ðð  ð!ð  (ð!ð  *>ð!ð" ð#ð" 4ð#‚r   