+
    jHàjpC  ã                  óÞ   € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ]P,                  ! R4      t^tR R	 lt ! R
 R4      tR# )a~  Plugin and user extension points on the inbound pipeline (moved out of ``gateway/run_inbound.py``).

``pre_gateway_dispatch`` (before auth), ``post_gateway_admission`` (once per admitted inbound
message, #129958), ``pre_command`` / ``command:<name>`` hooks, user ``quick_commands`` and
plugin-registered slash commands. Bound onto ``GatewayRunner`` through ``GatewayInboundMixin``.
)ÚannotationsN)ÚOptionalÚTuple)Út)ÚMessageEvent)ÚSessionSourceÚbuild_session_contextzgateway.runc               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚNone© )Úformats   "Ú>/home/ubuntu/.hermes/hermes-agent/gateway/run_inbound_hooks.pyÚ__annotate__r       s   € ÷ 7ñ 7 4ñ 7ó    c              ƒ  óv  "  € V P                   f/   ^ RIHp \        P                  ! WP
                  4      G Rj  x€L
  \        P                  R8w  d`   \        P                  ! \        \        4      ;_uu_ 4        \        P                  ! V P
                  \        P                  4       RRR4       \        P                  ! \         4      ;_uu_ 4        \        P"                  ! V P%                  4       ^R7      G Rj  x€L
  RRR4       R#  LÓ  + '       g   i     Lm; i L#  + '       g   i     R# ; i5i)a9  Kill an exec quick command's shell and everything it started, then reap the shell (bounded).

Killing only the shell leaves ``sleep 120 & wait``'s sleep running. ``kill_process_tree`` reaches
descendants (``taskkill /T`` on Windows); on POSIX the group the shell led also catches members
that already outlived it.N)Úkill_process_treeÚwin32©Útimeout)Ú
returncodeÚagent.deadliner   ÚasyncioÚ	to_threadÚpidÚsysÚplatformÚ
contextlibÚsuppressÚProcessLookupErrorÚPermissionErrorÚosÚkillpgÚsignalÚSIGKILLÚTimeoutErrorÚwait_forÚwait)Úprocr   s   & r   Ú_stop_exec_treer*       sº   é € ð ‡�ÒÝ4Ü×ÒÐ 1·8±8Ó<×<Ð<Ü
‡|�|�wÔÜ× Ò Ô!3´_×EÕEÜ�IŠI�d—h‘h¤§¡Ô/÷ Fä	×	Ò	œ\×	*Õ	*Ü×Ò˜tŸy™y›{°AÔ6×6Ð6÷ 
+Ñ	*ñ	 	=çE×Eúñ 	7÷ 
+×	*Ð	*üsR   ‚8D9ºD»A D9Á;0DÂ+*D9Ã*D%Ã?D#Ä D%ÄD9ÄD 	ÄD9Ä#D%Ä%D6	Ä0	D9c                  ó˜   € ] tR t^0tRtR R ltR R ltR R lt]R R	 l4       t	R
 R lt
RR R lltR R ltR R ltRR R lltRtR# )ÚGatewayInboundHooksMixinzLHook, quick-command and plugin-command dispatch for ``GatewayInboundMixin``.c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   Úeventr   Úsourcer   Úsession_keyÚstrr   ztuple[bool, Optional[str]]r   )r   s   "r   r   Ú%GatewayInboundHooksMixin.__annotate__3   s2   € ÷ Oñ OØ!ðOØ+8ðOØGJðOà	#ñOr   c              ƒ  óx   "  € ^ RI Hp VP                  4       '       d   R# ^ RIHp V! WW#4      G Rj  x€L
 #  L5i)a:  ``post_gateway_admission`` exactly once per inbound message: ``(consumed, reply)``.

Never while an admitted row EXECUTES (first run or restart replay): the authority path
already offered the message at ingress, before its commit, so a consumed message is never
admitted and an admitted one is never offered twice.©Úexecuting_admissionN)Úrun_post_admission_hook)FN)Úgateway.session_ingressr5   ÚgetÚgateway.run_inbound_consumerr6   )Úselfr.   r/   r0   r5   r6   s   &&&&  r   Ú_hm_post_admission_consumeÚ3GatewayInboundHooksMixin._hm_post_admission_consume3   s6   é € õ 	@Ø×"Ñ"×$Ò$ØÐÝHÙ,¨T¸&ÓN×NÐNÑNùs   ‚1:³8´:c               ó$   € V ^8„  d   QhRRRRRR/# )r
   r.   r   r/   r   r   zOptional[MessageEvent]r   )r   s   "r   r   r2   A   s$   € ÷ /ñ /Ø!ð/Ø+8ð/à	ñ/r   c           
   ƒ  óþ  "  € ^ RI Hp VP                  4       '       d   V#  ^ RIHp V! RW\        V RR4      R7      G Rj  x€L
 pV Fû  p\        V\        4      '       g   K  VP                  R4      pVR	8X  dg   \        P                  R
VP                  R4      VP                  '       d   VP                  P                  MRVP                  ;'       g    R4        R# VR8X  dR   VP                  R4      p	\        V	\        4      '       d(   ^ RIHp
 \$        P&                  ! WR7      pV
! W4       Tp V# VR8X  g   Kú   V# 	  V#  EL  \         d$   p\        P                  RT4       . p Rp?EL/Rp?ii ; i5i)u  Run the ``pre_gateway_dispatch`` plugin hook; None = drop, else the (maybe rewritten) event.
Results: ``{"action": "skip"}`` â†’ drop; ``{"action": "rewrite", "text"}`` â†’ replace ``event.text``;
``allow``/None â†’ normal dispatch. On the messaging path it runs BEFORE auth so plugins can handle
unauthorized senders; on the producer path (webhook/relay, ``admit_producer``) it runs AFTER the
delivery's authorization, which preparing its payload performs, so it never sees a refused sender.

Once per inbound message, at ingress (here, or ``admit_producer`` for webhook/relay), never
while an admitted row EXECUTES: a messaging turn already passed it before its commit, and a
local CLI/TUI/Desktop turn never fired it on main, so a skip must not drop committed input.r4   )Úainvoke_hookÚpre_gateway_dispatchÚsession_storeN)r.   ÚgatewayrA   z*pre_gateway_dispatch invocation failed: %sÚactionÚskipz8pre_gateway_dispatch skip: reason=%s platform=%s chat=%sÚreasonÚunknownÚrewriteÚtext)Úcarry_callback)rH   Úallow)r7   r5   r8   Úhermes_cli.lifecycler?   ÚgetattrÚ	ExceptionÚloggerÚwarningÚ
isinstanceÚdictÚinfor   ÚvalueÚchat_idr1   Úgateway.session_ingress_contextrI   ÚdataclassesÚreplace)r:   r.   r/   r5   Ú_ainvoke_hookÚ_hook_resultsÚ	_hook_excÚ_resultÚ_actionÚ	_new_textrI   Ú	rewrittens   &&&         r   Ú_hm_pre_gateway_dispatch_hookÚ6GatewayInboundHooksMixin._hm_pre_gateway_dispatch_hookA   sO  é € õ 	@Ø×"Ñ"×$Ò$ØˆLð		ÝJÙ"/Ø&¨eä% d¨O¸TÓBô#÷ ˆMó %ˆGÜ˜g¤t×,Ò,ÙØ—k‘k (Ó+ˆGØ˜&Ô Ü—‘ØNØ—K‘K Ó)ÀFÇOÇOÀO¨6¯?©?×+@Ò+@ÐYbØ—N‘N×/Ð/ iôò
 Ø˜)Ô#Ø#ŸK™K¨Ó/�	Ü˜i¬×-Ò-ÝNÜ +× 3Ò 3°EÔ J�IÙ" 5Ô4Ø%�EØð ˆð ˜'Ö!ØØˆñ+ %ð* ˆò=øô
 ô 	Ü�N‰NÐGÈÔSØŽMûð	üsT   ‚E=¢E ÁE	ÁE ÁA&E=Â-)E=ÃA&E=ÅE=Å	E ÅE:ÅE5Å/E=Å5E:Å:E=c               ó   € V ^8„  d   QhRR/# )r
   r   rQ   r   )r   s   "r   r   r2   r   s   € ÷ 2ñ 2 Dñ 2r   c                óÊ   € V P                   p\        V\        4      '       d   VP                  R4      M\	        VRR4      ;'       g    / p\        V\        4      '       d   V# / # )zVUser-defined ``quick_commands`` mapping from config (empty dict when unset/malformed).Úquick_commandsN)ÚconfigrP   rQ   r8   rL   )r:   ÚcfgÚqcs   &  r   Ú_hm_quick_commandsÚ+GatewayInboundHooksMixin._hm_quick_commandsr   sS   € à�k‰kˆÜ+5°c¼4×+@Ò+@ˆc�g‰gÐ&Ô'ÄgÈcÐScÐeiÓFj×qÐqÐoqˆÜ ¤D×)Ò)ˆrÐ1¨rÐ1r   c               ó$   € V ^8„  d   QhRRRRRR/# )r
   r.   r   ÚqcmdrQ   r   úOptional[str]r   )r   s   "r   r   r2   y   s&   € ÷ Oñ O¨lð OÀ$ð OÈ=ñ Or   c                ót  € VP                  R4      ;'       g    RP                  4       pV'       g   R# VP                  R4      '       d   TMRV 2pV RV P                  4       P                  4        2P                  4       V n        VP                  R4      pV'       d   VP                  4       ^ ,          # T# )zXRewrite ``event.text`` to an alias quick command's target; returns the new command name.ÚtargetÚ NÚ/Ú )r8   ÚstripÚ
startswithÚget_command_argsrH   ÚlstripÚsplit)r.   rj   rm   Útarget_commands   &&  r   Ú_hm_expand_alias_quick_commandÚ7GatewayInboundHooksMixin._hm_expand_alias_quick_commandx   s�   € ð —(‘(˜8Ó$×*Ð*¨×1Ñ1Ó3ˆßÙØ!×,Ñ,¨S×1Ò1‘¸¸6¸(°|ˆØ�x˜q ×!7Ñ!7Ó!9×!?Ñ!?Ó!AÐ BÐC×IÑIÓKˆŒ
ØŸ™ sÓ+ˆß,:ˆ~×#Ñ#Ó% aÕ(ÐNÀÐNr   c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r
   r.   r   r/   r   Ú
_quick_keyr1   ÚcommandÚ	canonicalr   ú)tuple[bool, Optional[str], Optional[str]]r   )r   s   "r   r   r2   ƒ   s<   € ÷ -!ñ -!Ø!ð-!Ø+8ð-!ØFIð-!ØTWð-!Ødgð-!à	2ñ-!r   c              ƒ  óô  "  € VP                  4       P                  4       pVP                  '       d   VP                  P                  MRp ^ RIHp V! R\        V4      \        V4      WcVR7       R	VR
VP                  RVRVRVRV/p
 V P                  P                  RV 2V
4      G Rj  x€L
 pV EFW  p\        V\        4      '       g   K  \        VP                  RR4      4      P                  4       P!                  4       pVP                  R4      p\        V\        4      '       d   V'       d   TMRpVR8X  d   RT;'       g    \#        RVR7      R3u # VR8X  d   RVR3u # VR8X  g   KÀ  \        VP                  RR4      4      P                  4       P%                  R4      pV'       g   EK  RV R\        VP                  RR4      4      P                  4        2P                  4       Vn        RRVP)                  4       3u # 	  R#   \         d$   p	\        P                  RT	RR7        Rp	?	ELÉRp	?	ii ; i EL–  \         d&   p\        P                  RY\RR7       . p Rp?EL¿Rp?ii ; i5i)uM  Fire ``pre_command`` (observer) and ``command:<canonical>`` (interceptor) hooks â†’
``(handled, result, new_command)`` (``new_command`` set when a handler rewrote the command).
The running-agent path deliberately does NOT fire these â€” a slow or hostile plugin must not
interfere with the operator's escape hatches for a live agent.rn   )Úfire_pre_command_hookrB   )Úsurfacer{   Ú
alias_usedÚargs_rawr0   r   z0pre_command hook dispatch failed (non-fatal): %sT©Úexc_infoNr   Úuser_idr{   Úraw_commandÚargsÚraw_argszcommand:z/command:%s hook dispatch failed (non-fatal): %sÚdecisionÚmessageÚdenyzgateway.hooks.command_blocked©r{   ÚhandledrG   Úcommand_namero   rp   F)FNN)rs   rq   r   rS   Úhermes_cli.pluginsr   r1   rM   rN   Údebugr…   ÚhooksÚemit_collectrP   rQ   r8   Úlowerr   rt   rH   Úget_command)r:   r.   r/   rz   r{   r|   rˆ   r   r   Ú_pre_cmd_errÚhook_ctxÚhook_resultsÚ	_hook_errÚhook_resultr‰   rŠ   Únew_commands   &&&&&&           r   Ú_hm_command_hooksÚ*GatewayInboundHooksMixin._hm_command_hooksƒ   s1  é € ð ×)Ñ)Ó+×1Ñ1Ó3ˆØ,2¯O¯O¨O�6—?‘?×(Ò(Àˆð	jÝ@Ù!Ø!¬3¨y«>ÄcÈ'ÃlØ!ÀHõð ˜ )¨V¯^©^¸YÈ	Ø˜7 F¨H°jÀ(ð
ˆð	Ø!%§¡×!8Ñ!8¸8ÀIÀ;Ð9OÐQYÓ!Z×ZˆLô
 (ˆKÜ˜k¬4×0Ò0ÙÜ˜;Ÿ?™?¨:°rÓ:Ó;×AÑAÓC×IÑIÓKˆHØ!—o‘o iÓ0ˆGÜ!+¨G´S×!9Ò!9¿g‘gÈ4ˆGØ˜6Ô!Ø˜W×[Ð[¬Ð*IÐSZÔ([Ð]aÐaÒaØ˜9Ô$Ø˜W dÐ*Ò*Ø˜9Ö$Ü! +§/¡/°.À"Ó"EÓF×LÑLÓN×UÑUÐVYÓZ�ß’;Ø#$ [ M°´3°{·±ÀzÐSUÓ7VÓ3W×3]Ñ3]Ó3_Ð2`Ð!a×!gÑ!gÓ!i�E”JØ  $¨×(9Ñ(9Ó(;Ð;Ò;ñ (ð !Ð øô= ô 	jÜ�L‰LÐKÈ\ÐdhˆL×iÒiûð	júò [øÜô 	Ü�L‰LÐJÈIÐkoˆLÔpØŽLûð	üs†   ‚A	I8Á%H Á1I8Â
"I Â,IÂ-I Â1BI8Ä5I8Å
$I8Å3=I8Æ6AI8ÈH?ÈH:È4I8È:H?È?I8ÉI ÉI5ÉI0É*I8É0I5É5I8Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )r
   r{   r1   Úexec_cmdÚcwdrk   r   r   )r   s   "r   r   r2   ²   s*   € ÷ =ñ =¸ð =Àsð =ÐQ^ð =Ðjmñ =r   c           	   ƒ  ó$  "  € Rp ^ RI Hp \        P                  ! V\        P                  P
                  \        P                  P
                  V! 4       VRR7      G Rj  x€L
 p\        P                  ! VP                  4       \        R7      G Rj  x€L
 w  rgT;'       g    TP                  4       P                  4       pV'       d   ^ RIHp	 V	! V4      pT;'       g    \        R4      #  L‹ L[  \        \        P                  3 dc   p
Te)   \        P                   ! \#        T4      4      G Rj  x€L 
  \%        T
\        P                  4      '       d   h \        R4      u Rp
?
# Rp
?
i\&         d   p\        R	TR
7      u Rp?# Rp?ii ; i5i)aM  Run a ``type: exec`` quick command as a host shell of the gateway process: sanitized env
(the gateway process has every API key in os.environ), redacted output, its process tree
killed after 30 s or when the awaiting task is cancelled (gateway shutdown).
``cwd`` is a local session's folder; None keeps the gateway's own (messaging).N)Úbuild_subprocess_envT)ÚstdoutÚstderrÚenvrŸ   Ústart_new_sessionr   )Úredact_sensitive_textzgateway.quick_command.no_outputzgateway.quick_command.timed_outzgateway.quick_command.error)Úerror)Útools.environments.localr¡   r   Úcreate_subprocess_shellÚ
subprocessÚPIPEr'   ÚcommunicateÚ_EXEC_QUICK_COMMAND_TIMEOUTÚdecoderq   Úagent.redactr¦   r   r&   ÚCancelledErrorÚshieldr*   rP   rM   )r:   r{   rž   rŸ   r)   r¡   r¢   r£   Úoutputr¦   ÚstoppedÚes   &&&&        r   Ú_hm_run_exec_quick_commandÚ3GatewayInboundHooksMixin._hm_run_exec_quick_command²   s8  é € ð
 ˆð	=ÝEÜ ×8Ò8Ø¤×!3Ñ!3×!8Ñ!8Ä×ASÑAS×AXÑAXÙ(Ó*°ð #'ô÷ ˆDô $+×#3Ò#3°D×4DÑ4DÓ4FÔPkÔ#l×l‰NˆFØ×&Ð& ×.Ñ.Ó0×6Ñ6Ó8ˆFßÝ>Ù.¨vÓ6�Ø×AÐAœQÐ@ÓAÐAññ møô œg×4Ñ4Ð5ô 	8àÒÜ—n’n¤_°TÓ%:Ó;×;Ñ;Ü˜'¤7×#9Ñ#9×:Ò:ØÜÐ6Ó7Õ7ûÜô 	=ÜÐ2¸!Ô<Õ<ûð	=üs•   ‚F†AC0 Á C,Á!1C0 ÂC.ÂC0 Â"&C0 Ã	C0 Ã C0 Ã+FÃ,C0 Ã.C0 Ã0FÄ&E(Ä1D4Ä20E(Å"FÅ#FÅ(FÅ5FÅ6FÆFÆFÆFÆFc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   r.   r   r/   r   r{   rk   r   r}   r   )r   s   "r   r   r2   Ñ   s2   € ÷ "Nñ "NØ!ð"NØ+8ð"NØCPð"Nà	2ñ"Nr   c              ƒ  ó„  "  € V P                   '       d   R\        RV P                  4       R7      V3# V'       d    V P                  4       P	                  V4      MRpVe¶   V P                  W#4      pVe   RWS3# VP	                  R4      pVR8X  dG   VP	                  RR4      pV'       g   R\        R	VR
7      V3# RV P                  W74      G Rj  x€L
 V3# VR8w  d   R\        RVR
7      V3# V P                  W4      pVf   R\        RVR
7      V3# TpV'       g   RRV3# V P                  WV4      G Rj  x€L
 #  Lk L5i)uŸ   Drain gate, user-defined quick commands (exec/alias) and plugin slash commands â†’
``(handled, result, command)``; an alias quick command rewrites ``command``.Tz$gateway.busy.drain_rejected_new_work)rC   NÚtypeÚexecr{   rn   z gateway.quick_command.no_commandrŒ   Úaliasz&gateway.quick_command.unsupported_typezgateway.quick_command.no_targetF)	Ú	_drainingr   Ú_status_action_gerundrg   r8   Ú_check_slash_accessrµ   rw   Ú_hm_dispatch_plugin_command)	r:   r.   r/   r{   rj   Ú_deniedÚqtyperž   rš   s	   &&&&     r   Ú&_hm_dispatch_quick_and_plugin_commandsÚ?GatewayInboundHooksMixin._hm_dispatch_quick_and_plugin_commandsÑ   sT  é € ð
 �>�>ˆ>ØœÐAÈ$×JdÑJdÓJfÔgÐipÐpÐp÷ :Aˆt×&Ñ&Ó(×,Ñ,¨WÔ5ÀdˆØÒð ×.Ñ.¨vÓ?ˆGØÒ"Ø˜WÐ-Ð-Ø—H‘H˜VÓ$ˆEØ˜ŒØŸ8™8 I¨rÓ2�ßØ¤Ð#EÈwÔ!WÐY`Ð`Ð`Ø 4×#BÑ#BÀ7Ó#U×UÐW^Ð^Ð^Ø˜ÔØœQÐGÐQXÔYÐ[bÐbÐbØ×=Ñ=¸eÓJˆKØÒ"ØœQÐ@È'ÔRÐT[Ð[Ð[Ø!ˆGçØ˜$ Ð'Ð'Ø×5Ñ5°eÀWÓM×MÐMñ Vñ Nùs6   ‚8E »A/E Â+%E ÃD<ÃAE ÄE Ä7D>Ä8E Ä>E c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r
   r.   r   r/   r   r{   r1   r   r}   r   )r   s   "r   r   r2   õ   s,   € ÷ $ñ $Ø!ð$Ø+8ð$ØCFð$à	2ñ$r   c              ƒ  ó  "  € V'       dF    ^ RI Hp V! VP                  RR4      4      pV'       d   RV P                  WQV4      G Rj  x€L
 V3#  RRV3#  L  \         d#   p\
        P                  RTRR7        Rp?L/Rp?ii ; i5i)	u§   Plugin-registered slash command *command* â†’ ``(handled, result, command)``. No quick
commands: a local session resolves those in its own profile before calling this.)Úget_plugin_command_handlerÚ_Ú-TNz"Plugin command dispatch failed: %srƒ   F)r�   rÆ   rW   Ú_hm_run_plugin_handlerrM   rN   rO   )r:   r.   r/   r{   rÆ   Úplugin_handlerr´   s   &&&&   r   r¿   Ú4GatewayInboundHooksMixin._hm_dispatch_plugin_commandõ   s�   é € ÷ ðWÝIÙ!;¸G¿O¹OÈCÐQTÓ<UÓ!V�ß!Ø t×'BÑ'BÀ>ÐZ`Ó'a×!aÐcjÐjÐjð "ð �d˜GÐ#Ð#ñ "bøÜô WÜ—‘ÐCÀQÐQU�×VÑVûðWüsE   ‚	BŒ%A ²A ÁAÁ	A ÁBÁA ÁBÁ"A?Á:BÁ?BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )r
   r.   r   r/   r   r   rk   r   )r   s   "r   r   r2     s$   € ÷ (/ñ (/Ø%1ð(/Ø;Hð(/à	ñ(/r   c              ƒ  óZ  "  € VfB   \        V RR4      e3   V P                  P                  V P                  V4      4      G Rj  x€L
 p\	        W0P
                  V4      pVf   V P                  V4      Vn        Vf   VP                  4       P                  4       MTp^ RI	H
p ^ RIHp	 ^ RIHp
 \        P                   ! Y�YsVP"                  ;'       g    RVP                  ;'       g    RVP$                  P&                  R7      pV P)                  V4      ;_uu_ 4        V	! V4      ;_uu_ 4        V
! WV P                  V4      4      ;_uu_ 4        \*        P,                  ! V4      '       d   V! 4       G Rj  x€L
 pM?V P/                  V4      G Rj  x€L
 p\*        P0                  ! V4      '       d   VG Rj  x€L
 pRRR4       RRR4       RRR4       X'       d   \3        V4      # R#  EL¦ Lt L\ L8  + '       g   i     L>; i  + '       g   i     LI; i  + '       g   i     LT; i5i)uS  Run a resolved plugin command handler for *source* â†’ its reply text or None; raises what
the handler raises (``gateway/session_commands.py`` resolves the exact registered name).
*args* is the argument as typed (a local session's command); otherwise the message's
command arguments, with the messaging dash repair of ``get_command_args``.NrA   )Úinvoke_plugin_command)Úbind_live_source)Úchat_choicesrn   )r/   Ú
session_idr0   r   )rL   Úasync_session_storeÚlookup_by_session_keyÚ_session_key_for_sourcer   rd   r0   rs   rq   Ú"hermes_cli.plugin_command_dispatchrÎ   Úgateway.plugin_messagesrÏ   Úgateway.plugin_command_choicerÐ   Ú	functoolsÚpartialrÑ   r   rS   Ú_session_env_scopeÚinspectÚiscoroutinefunctionÚ_run_in_executor_with_contextÚisawaitabler1   )r:   rÊ   r.   r/   Úsession_entryr‡   Ú_plugin_contextÚ	user_argsrÎ   rÏ   rÐ   ÚcallÚresults   &&&&&&       r   rÉ   Ú/GatewayInboundHooksMixin._hm_run_plugin_handler  s   é € ð Ò ¤W¨T°?ÀDÓ%IÒ%Uð #'×":Ñ":×"PÑ"PØ×,Ñ,¨VÓ4ó#6÷ 6ˆMä/°¿¹À]ÓSˆØÒ Ø*.×*FÑ*FÀvÓ*NˆOÔ'Ø8<º�E×*Ñ*Ó,×2Ñ2Ô4È$ˆ	ÝLÝ<Ý>Ü× Ò Ø!°9Ø&×1Ñ1×7Ð7°RÀ_×E`ÑE`×EfÐEfÐdfØ—_‘_×*Ñ*ô,ˆð ×%Ñ% o×6Õ6Ñ8HÈ×8PÕ8PÙ˜4¨×)EÑ)EÀfÓ)M×NÕNÜ×*Ò*¨>×:Ò:Ù#›vŸ‘à#×AÑAÀ$ÓG×G�Ü×&Ò& v×.Ò.Ø#)Ÿ\�F÷ O÷ 9Q×6÷ %Œs�6‹{Ð.¨$Ð.ò/6ñ$ &áGá)÷ O×Nú÷ 9Q×8Pú×6×6üs©   ‚AH+ÁG)ÁBH+ÃH+Ã(6H+ÄHÄ/!H	Å'G2Å7G,Å8G2ÆG.ÆG2Æ2G2Æ7G0Æ8G2Æ<H	ÇHÇH+ÇH+Ç,G2Ç.G2Ç0G2Ç2HÇ=H	ÈHÈHÈH(	È#H+r   )N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r;   r_   rg   Ústaticmethodrw   r›   rµ   rÂ   r¿   rÉ   Ú__static_attributes__r   r   r   r,   r,   0   sM   † ÙVõOõ/õb2ð ôOó ðOõ-!÷^=õ>"NõH$÷"(/ó (/r   r,   )ré   Ú
__future__r   r   r   rV   rØ   rÛ   Úloggingr"   r$   r   Útypingr   r   Ú
agent.i18nr   Úgateway.platforms.eventr   Úgateway.sessionr   r   Ú	getLoggerrN   r­   r*   r,   r   r   r   Ú<module>ró      sa   ðñõ #ã Û Û Û Û Û Û 	Û Û 
ß "å Ý 0ß @ð 
×	Ò	˜=Ó	)€ð !Ð õ7÷ ~/ó ~/r   