+
    jHàjÒF  ã                  ó`  € 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t^ RIHtHt  ^ RIt]
P"                  P%                  R4      '       * t. ROtRtR	t^tR
tRtR R lt ! R R]4      tRtRtR R lt R R lt!R R lt" ! R R4      t#R#   ] d    RtRt LNi ; i)aˆ  PTY bridge for `hermes dashboard` chat tab.

Wraps a child process behind a pseudo-terminal so its ANSI output can be streamed to xterm.js and
keystrokes fed back in; the only caller is the ``/api/pty`` WebSocket endpoint in
``hermes_cli.web_server``. POSIX-only: depends on ``fcntl``, ``termios`` and ``ptyprocess`` (native
Windows would need a separate ConPTY/``pywinpty`` implementation).
)ÚannotationsN)ÚOptionalÚSequenceÚwinFÚ	PtyBridgeÚPtyUnavailableErrorÚHERMES_PTY_HOSTÚ	dashboardiÐ  iè  c               ó$   € V ^8„  d   QhRRRRRR/# )é   ÚvalueÚintÚmaximumÚreturn© )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/hermes_cli/pty_bridge.pyÚ__annotate__r   /   s!   € ÷ 0ñ 0˜Cð 0¨#ð 0°#ñ 0ó    c                ó�   €  \        V 4      p\        \        \        Y!4      4      #   \        \        \        3 d
    \        u # i ; i)zšClamp into ``[_MIN_DIMENSION, maximum]``; non-integer / non-finite values fall back to
``_MIN_DIMENSION`` so a bad probe can never reach ``struct.pack``.
)r   Ú	TypeErrorÚ
ValueErrorÚOverflowErrorÚ_MIN_DIMENSIONÚmaxÚmin)r   r   Úns   && r   Ú_clamp_dimensionr   /   sA   € ðÜ�‹Jˆô Œ~œs 1›Ó/Ð/øô ”z¤=Ð1ô ÜÒðús   ‚& ¦AÁAc                  ó   € ] tR t^:tRtRtR# )r   z�PTY cannot be created here (native Windows, or ``ptyprocess`` missing); the dashboard
surfaces the message as a chat-tab banner.
r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r   r   r   r   :   s   † õr   g      ø?g       @c               ó   € V ^8„  d   QhRR/# )r   r   Úfloatr   )r   s   "r   r   r   H   s   € ÷ 	[ñ 	[ ñ 	[r   c                 ó´   € ^ RI Hp  V ! RR4      p\        P                  ! V4      '       d   V^ 8:  d   Rp\	        \        \        VR,           4      \        4      # )é    )Ú	env_floatÚ#HERMES_TUI_GATEWAY_SHUTDOWN_GRACE_Sg      ð?ç      à?)Úutilsr)   ÚmathÚisfiniter   r   Ú_HELPER_SHUTDOWN_GRACE_SÚ_MAX_HELPER_SHUTDOWN_GRACE_S)r)   Úgateways     r   Ú_helper_shutdown_gracer2   H   sH   € õ  áÐ=¸sÓC€GÜ�=Š=˜×!Ò! W°¤\ØˆÜŒsÔ+¨W°s­]Ó;Ô=YÓZÐZr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpgidr   r   Úboolr   )r   s   "r   r   r   T   s   € ÷ ñ  ð ¨ñ r   c                óZ   €  \         P                  ! V ^ 4       R#   \         d     R# i ; i)r(   FT)ÚosÚkillpgÚOSError)r4   s   &r   Ú_process_group_existsr:   T   s.   € ðÜ
�	Š	�$˜Ôñ øô ô Úðús   ‚ ›*©*c               ó   € V ^8„  d   QhRR/# ©r   r   r5   r   )r   s   "r   r   r   \   s   € ÷ ñ ˜4ñ r   c                óš   €  ^ RI pV P                  4       ;'       d    V P                  4       VP                  8g  #   \         d     R# i ; i)zuBest-effort 'is this psutil Process still alive' for the shutdown cadence;
zombies count as dead and it never raises.NF)ÚpsutilÚ
is_runningÚstatusÚSTATUS_ZOMBIEÚ	Exception)Úprocr>   s   & r   Ú_psutil_aliverD   \   sB   € ðÛà�‰Ó ×JÐJ T§[¡[£]°f×6JÑ6JÑ%JÐJøÜô Úðús   ‚; �; »A
Á	A
c            	      ó  € ] tR t^gtRtRtR R lt]R R l4       t]RRRRR	^PR
^/R R ll4       t	]
R R l4       tR R ltR(R R lltR R ltRR/R R lltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR'tR# ))r   aA  Thin wrapper around ``ptyprocess.PtyProcess`` for byte streaming. Not thread-safe: owned by
the WebSocket handler that spawned it; reads run in an executor thread, writes are awaited on
the loop. The master fd is non-blocking so input backpressure suspends only the owning
WebSocket task, never the dashboard event loop.
Nc               ó   € V ^8„  d   QhRR/# )r   rC   zptyprocess.PtyProcessr   )r   s   "r   r   ÚPtyBridge.__annotate__p   s   € ÷ 0ñ 0Ð2ñ 0r   c                	ó:  € Wn         VP                  V n        R V n         \        P
                  ! VP                  4      V n        \        P                  ! V P                  R 4       ^ RI
Hp V! V P                  4      V n        R#   \         d    RT n         LTi ; i)FN)Úopen_fd_waiter)Ú_procÚfdÚ_fdÚ_closedr7   ÚgetpgidÚpidÚ_pgidr9   Úset_blockingÚtools.environments.fd_waitrI   Ú_waiter)ÚselfrC   rI   s   && r   Ú__init__ÚPtyBridge.__init__p   ss   € ØŒ
ØŸ™ˆŒØˆŒð	Ü(*¯
ª
°4·8±8Ó(<ˆDŒJô 	�Š˜Ÿ™ %Ô(õ 	>á% d§h¡hÓ/ˆŽøô ô 	ØˆDŽJð	ús    %B ÂBÂBc               ó   € V ^8„  d   QhRR/# r<   r   )r   s   "r   r   rG   ‚   s   € ÷ $ñ $˜Tñ $r   c                ó    € \        \        4      # )z.True if a PTY can be spawned on this platform.)r5   Ú_PTY_AVAILABLE)Úclss   &r   Úis_availableÚPtyBridge.is_available�   s   € ô ”NÓ#Ð#r   ÚcwdÚenvÚcolsÚrowsc               ó0   € V ^8„  d   QhRRRRRRRRR	RR
R/# )r   ÚargvzSequence[str]r]   zOptional[str]r^   zOptional[dict]r_   r   r`   r   r   r   )r   s   "r   r   rG   ‡   s<   € ÷ ñ Ø ðØ*7ðØESðØbeðØruðà	ñr   c               óØ  € \         '       g<   \        P                  P                  R4      '       d   \	        R4      h\	        R4      h^ RIHp Vf   V! RRR7      MVP                  4       pVP                  R4      '       g   RVR&   \        V\        &   \        P                  P                  \        V4      W'WT3R	7      p V ! V4      #   \         d    TP!                  R
R7       h i ; i)z4Spawn ``argv`` behind a new PTY and return a bridge.r   z^Pseudo-terminals are unavailable on this platform. Hermes Agent supports Windows only via WSL.zOThe `ptyprocess` package is missing. Run hermes pm repair, then restart Hermes.)Úbuild_subprocess_envF)Úscrub_secretsÚinherit_profile_homeÚTERMzxterm-256color)r]   r^   Ú
dimensionsT©Úforce)rY   ÚsysÚplatformÚ
startswithr   Útools.environments.localrd   ÚcopyÚgetÚPTY_HOST_DASHBOARDÚPTY_HOST_ENVÚ
ptyprocessÚ
PtyProcessÚspawnÚlistr9   Úclose)	rZ   rb   r]   r^   r_   r`   rd   Ú	spawn_envrC   s	   &&$$$$   r   ru   ÚPtyBridge.spawn†   sæ   € ÷
 ‹~Ü�|‰|×&Ñ& u×-Ò-Ü)ð +Xó Yð Yä%ð 'Só Tð Tõ
 	BØ]`Ò]hÑ(°uÐSXÕYÐnq×nvÑnvÓnxˆ	Ø�}‰}˜V×$Ò$Ø 0ˆI�fÑô
 #5ˆ	”,ÑÜ×$Ñ$×*Ñ*¬4°«:¸3Ð[_ÐZfÐ*Ógˆð	Ù�t“9ÐøÜô 	Ø�J‰J˜TˆJÔ"Øð	ús   ÃC
 Ã
C)c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   rG   ¥   s   € ÷ #ñ #�Sñ #r   c                	ó@   € \        V P                  P                  4      # ©N)r   rJ   rO   ©rT   s   &r   rO   ÚPtyBridge.pid¤   s   € ä�4—:‘:—>‘>Ó"Ð"r   c               ó   € V ^8„  d   QhRR/# r<   r   )r   s   "r   r   rG   ¨   s   € ÷ ñ ˜$ñ r   c                	ó    €  V P                   '       * ;'       d$    \        V P                  P                  4       4      #   \         d     R # i ; i)F)rM   r5   rJ   ÚisaliverB   r}   s   &r   Úis_aliveÚPtyBridge.is_alive¨   s@   € ð	Ø—|‘|Ô#×BÐB¬¨T¯Z©Z×-?Ñ-?Ó-AÓ(BÐBøÜô 	Úð	ús   ‚> š#> ¾AÁAc               ó    € V ^8„  d   QhRRRR/# )r   Útimeoutr&   r   zOptional[bytes]r   )r   s   "r   r   rG   ®   s   € ÷ ñ ˜Eð ¨Oñ r   c                ó  € V P                   '       g   V P                  f   R#  V P                  P                  V4      pT'       g   R#  \
        P                  ! T P                  R4      pT;'       g    R#   \        \        3 d     R# i ; i  \         dq   pTP                  \        P                  \        P                  09   d    Rp?R# TP                  \        P                  \        P                  09   d    Rp?R# h Rp?ii ; i)z™Read up to 64 KiB from the PTY master, blocking at most ``timeout`` seconds.

``b""`` = nothing yet; ``None`` = EOF / closed (also after :meth:`close`).
Nr   é   )rM   rS   Úwaitr9   r   r7   ÚreadrL   ÚerrnoÚEIOÚEBADFÚEAGAINÚEWOULDBLOCK)rT   r…   ÚreadableÚdataÚexcs   &&   r   r‰   ÚPtyBridge.read®   sÊ   € ð
 �<�<ˆ<˜4Ÿ<™<Ò/Ùð	Ø—|‘|×(Ñ(¨Ó1ˆH÷ Ùð
	Ü—7’7˜4Ÿ8™8 UÓ+ˆDð �|ˆ|�tÐøô œÐ$ô 	Úð	ûô ô 	à�y‰yœUŸY™Y¬¯©Ð4Ô4Ýð �y‰yœUŸ\™\¬5×+<Ñ+<Ð=Ô=ÝØûð	ús5   ¤A7 Á
!B Á7BÂBÂD
Â/DÃ/DÄDÄD
c               ó    € V ^8„  d   QhRRRR/# )r   r…   r&   r   r5   r   )r   s   "r   r   rG   È   s   € ÷ ñ ¨Eð °dñ r   c              ƒ  ó¶  a"  € V P                   '       g   V^ 8:  d   R# \        P                  ! 4       pVP                  4       oR V3R llp VP	                  V P
                  V4       \        P                  ! SVR7      G Rj  x€L
  V P                   '       *  VP                  V P
                  4       #  L1  \        \        3 d     # i ; i  \        \        \        3 d9      TP                  T P
                  4       R#   \        \        3 d     R# i ; ii ; i   TP                  T P
                  4       i   \        \        3 d     i i ; i; i5i)zDWait without blocking the event loop until the master accepts input.Fc               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r   s   "r   r   Ú.PtyBridge._wait_writable.<locals>.__annotate__Ï   s   € ÷ 	'ñ 	'˜Tñ 	'r   c                 óZ   <€ S P                  4       '       g   S P                  R 4       R # R # r|   )ÚdoneÚ
set_result)Úreadys   €r   Ú_mark_readyÚ-PtyBridge._wait_writable.<locals>._mark_readyÏ   s!   ø€ Ø—:‘:—<’<Ø× Ñ  Ö&ñ  r   )r…   N)rM   ÚasyncioÚget_running_loopÚcreate_futureÚ
add_writerrL   Úwait_forÚremove_writerr9   r   ÚTimeoutError)rT   r…   Úloopr�   rœ   s   &&  @r   Ú_wait_writableÚPtyBridge._wait_writableÈ   s  øé € à�<�<ˆ<˜7 aœ<ÙÜ×'Ò'Ó)ˆØ×"Ñ"Ó$ˆ÷	'ð 	'ð
	Ø�O‰O˜DŸH™H kÔ2Ü×"Ò" 5°'Ô:×:Ð:Ø—|‘|Ô#ðØ×"Ñ" 4§8¡8Õ,ñ ;øô œZÐ(ô Ùðûô œg¤zÐ2ô 	ØðØ×"Ñ" 4§8¡8Ö,øÜœZÐ(ô Úðúð	ûðØ×"Ñ" 4§8¡8Õ,øÜœZÐ(ô Ùðÿs®   ƒA
EÁ7C ÂB7ÂC ÂB9Â6EÂ7C Â9CÃ
EÃCÃEÃDÃ&D! Ã(D ÄEÄDÄEÄDÄEÄDÄD! Ä!EÄ#D?Ä>EÄ?EÅEÅEÅEÅEr…   g      $@c               ó$   € V ^8„  d   QhRRRRRR/# )r   r�   Úbytesr…   r&   r   r5   r   )r   s   "r   r   rG   ß   s!   € ÷ &ñ & ð &°5ð &ÀDñ &r   c             ƒ  óD  "  € V P                   '       d   R# V'       g   R# \        P                  ! 4       pVP                  4       \	        RV4      ,           p\        V4      pV'       d£   V P                   '       d   R#  \        P                  ! V P                  V4      pT^ 8”  d-   YVR pT'       d   \        P                   ! ^ 4      G Rj  x€L
  Kq  YCP                  4       ,
          pT P#                  T4      G Rj  x€L
 '       d   K¨  R# R#   \         d�   pTP                  \        P                  \        P                  \        P                  09   d    Rp?R# TP                  \        P                  \        P                  09   d   ^ p Rp?Lóh Rp?ii ; i LÏ L 5i)a  Write all raw bytes without ever blocking the dashboard event loop.

Returns ``False`` when the bridge closes or the child leaves its input
buffer full for ``timeout`` seconds. Callers can then recycle only the
affected terminal session while the rest of the dashboard stays live.
FTg        N)rM   rŸ   r    Útimer   Ú
memoryviewr7   ÚwriterL   r9   rŠ   r‹   rŒ   ÚEPIPEr�   rŽ   Úsleepr§   )	rT   r�   r…   r¦   ÚdeadlineÚviewr   r‘   Ú	remainings	   &&$      r   r®   ÚPtyBridge.writeß   s(  é € ð �<�<ˆ<ÙßÙä×'Ò'Ó)ˆØ—9‘9“;¤ S¨'Ó!2Õ2ˆÜ˜$ÓˆßØ�|�|ˆ|ÙðÜ—H’H˜TŸX™X tÓ,�ð �1ŒuØ˜B�x�÷ Ü!Ÿ-š-¨Ó*×*Ð*Ùà §9¡9£;Õ.ˆIØ×,Ñ,¨YÓ7×7×7Ð7ÙÙøô% ô Ø—9‘9¤§¡¬E¯K©K¼¿¹Ð EÔEÝ Ø—9‘9¤§¡¬u×/@Ñ/@Ð AÔAØ•Aàûðúñ +ñ 8ùsw   ‚F ŸA
F Á*F Á<F Á?!D Â ,F ÃFÃ0F Ã=FÃ>F Ä
F ÄFÄ>FÅF Å1FÆ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   s   "r   r   rG     s!   € ÷ ñ ˜3ð  cð ¨dñ r   c                ó   € V P                   '       d   R# \        P                  ! R\        V\        4      \        V\
        4      ^ ^ 4      p \        P                  ! V P                  \        P                  V4       R#   \         d     R# i ; i)u4  Forward a terminal resize to the child via ``TIOCSWINSZ``.

Clamped first: WSL2 via xterm.js reports garbage like ``columns=131072, rows=1`` and an
unclamped unsigned-short pack raises ``struct.error`` (not ``OSError``), leaving the TUI
laid out for a one-row screen â€” the blank/disappearing-text symptom.
NÚHHHH)rM   ÚstructÚpackr   Ú	_MAX_ROWSÚ	_MAX_COLSÚfcntlÚioctlrL   ÚtermiosÚ
TIOCSWINSZr9   )rT   r_   r`   Úwinsizes   &&& r   ÚresizeÚPtyBridge.resize  sk   € ð �<�<ˆ<Ùä—+’+˜fÔ&6°t¼YÓ&GÔIYÐZ^Ô`iÓIjÐlmÐopÓqˆð	Ü�KŠK˜Ÿ™¤'×"4Ñ"4°gÖ>øÜô 	Úð	ús   Á0A> Á>BÂBc               ó    € V ^8„  d   QhRRRR/# )r   r…   r&   r   r—   r   )r   s   "r   r   rG     s   € ÷ 	ñ 	 uð 	°ñ 	r   c                	ó  €  V P                   eK   V P                   P                  V4      '       d*   \        P                  ! V P                  R4      '       d   R # \        P                  ! T4       R #   \
        \        3 d     L+i ; i)Nr‡   )	rS   rˆ   r7   r‰   rL   r9   r   r¬   r°   )rT   r…   s   &&r   Ú_discard_outputÚPtyBridge._discard_output  sg   € ð	Ø�|‰|Ò'¨D¯L©L×,=Ñ,=¸g×,FÒ,FÌ2Ï7Ê7ÐSW×S[ÑS[Ð]b×KcÒKcÙô 	�
Š
�7Öøô œÐ$ô 	Ùð	ús   ‚.A2 ±&A2 Á2BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )r   r4   r   r…   r&   r   r—   r   )r   s   "r   r   rG   "  s!   € ÷ 'ñ '¨ð '°uð 'Àñ 'r   c                	ó¾   € \         P                  ! 4       V,           p\        V4      '       d0   \         P                  ! 4       V8  d   V P                  R 4       K>  R# R# )ç{®Gáz”?N)r¬   Ú	monotonicr:   rÅ   )rT   r4   r…   r±   s   &&& r   Ú_wait_for_group_exitÚPtyBridge._wait_for_group_exit"  sC   € Ü—>’>Ó# gÕ-ˆÜ# D×)Ò)¬d¯nªnÓ.>ÀÔ.IØ× Ñ  Ö&ñ /JÑ)r   c               ó   € V ^8„  d   QhRR/# r–   r   )r   s   "r   r   rG   '  s   € ÷ Zñ Z�tñ Zr   c                óÞ  € V P                   '       d   R# RV n         V P                  pV P                  P                  4       p. pVe_   WP                  P                  8w  dE   V'       d;    ^ RIpVP                  V P                  P                  4      P                  RR7      pRp\        P                  \        P                  \        P                  3 FÈ  pV P                  P                  4       '       g    M§ Ve   \        P                  ! W4       MV P                  P                  V4        \         P"                  ! 4       R,           pV P                  P                  4       '       g   K›  \         P"                  ! 4       V8  g   K·  V P%                  R4       KQ  	  Ve§   \'        4       pV'       d   \        P                  3M\        P                  \        P                  3pV'       d   V P)                  W4       V FB  p \        P                  ! W4       T P)                  Y\        P                  8X  d   TMR4       KD  	  EMV'       Ed   \'        4       p\        P                  \        P                  3 Fá  pV F<  p	 V\        P                  8X  d   V	P-                  V4       K,  V	P                  4        K>  	  V\        P                  8X  g   K\  \         P"                  ! 4       V,           p\.        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       g   K´  \         P"                  ! 4       V8  g   KÐ  V P%                  R4       Kk  	   V P                  P1                  RR7       V P3                  4        R#   \         d    . p ELþi ; i  \         d     EL‚i ; i  \*         d      Kd  i ; i  \         d     EKW  i ; i  \         d     Lki ; i)	u  Terminate the child's process group (SIGHUP â†’ SIGTERM â†’ SIGKILL, 0.5s grace each while
the leader lives, then up to the helper grace for the rest of the group), reap the leader so
the dashboard never leaks zombies, and close fds. Idempotent; blocks, so call it off the
event loop.
NT)Ú	recursiver+   rÉ   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir|   )rD   )Ú.0Úcs   & r   Ú	<genexpr>Ú"PtyBridge.close.<locals>.<genexpr>z  s   é € ÐOÑ8N°1œm¨A×.Ð.Ó8Nùs   ‚Fri   )rM   rP   rJ   r�   rO   r>   ÚProcessÚchildrenrB   ÚsignalÚSIGHUPÚSIGTERMÚSIGKILLr7   r8   Úkillr¬   rÊ   rÅ   r2   rË   r9   Úsend_signalÚanyrw   Ú_close_waiter)
rT   r4   Úleader_was_aliveÚnon_leader_descendantsr>   Úsigr±   ÚgraceÚsweepÚchilds
   &         r   rw   ÚPtyBridge.close'  sç  € ð �<�<ˆ<ÙØˆŒà�z‰zˆØŸ:™:×-Ñ-Ó/Ðð (*ÐØÒ ¯
©
¯©Ô 6÷  ð0Û!à-3¯^©^¸D¿J¹J¿N¹NÓ-K×-TÑ-TÐ_cÐ-TÓ-dÐ*ð ˆDô —M‘M¤6§>¡>´6·>±>ÓBˆCØ—:‘:×%Ñ%×'Ò'ÙðØÒ#Ü—I’I˜dÕ(à—J‘J—O‘O CÕ(ô —~’~Ó'¨#Õ-ˆHØ—*‘*×$Ñ$×&Ô&¬4¯>ª>Ó+;¸hÖ+FØ×$Ñ$ TÖ*ñ Cð* ÒÜ*Ó,ˆEß)9”V—^‘^Ñ%ÄÇÁÌvÏ~É~Ð?^ˆEßØ×)Ñ)¨$Ô6Û�ðÜ—I’I˜dÔ(ð ×)Ñ)¨$ÄÇÁÔ9M±ÐSVÖWó ÷ $Ð#ô +Ó,ˆEÜŸ™¤v§~¡~Ó6�Û3�EðØ¤&§-¡-Ô/Ø!×-Ñ-¨cÖ2à!ŸJ™JžLñ 4ð œ&Ÿ-™-Ö'Ü#Ÿ~š~Ó/°%Õ7�Hß›#ÑOÑ8NÓOŸ#Ÿ#š#ÑOÑ8NÓO×OÔOÔTX×TbÒTbÓTdÐgoÖToØ×,Ñ,¨TÖ2ñ 7ð	Ø�J‰J×Ñ 4ÐÔ(ð 	×ÑÖøôA !ô 0Ø-/Ó*ð0ûô ô Úðûô* ô Ûðûô$ %ô Ûðûô ô 	Ùð	úsf   Á+9N Ã;N&ÄN&ÈN8Ê&OÊ/OÍ$O ÎN#Î"N#Î&N5Î4N5Î8OÏOÏOÏOÏO,Ï+O,c               ó   € V ^8„  d   QhRR/# r–   r   )r   s   "r   r   rG   ƒ  s   € ÷ !ñ !˜tñ !r   c                	óZ   € V P                   e   V P                   P                  4        R # R # r|   )rS   rw   r}   s   &r   rÞ   ÚPtyBridge._close_waiterƒ  s!   € Ø�<‰<Ò#Ø�L‰L×ÑÖ ñ $r   c               ó   € V ^8„  d   QhRR/# )r   r   r   r   )r   s   "r   r   rG   ‡  s   € ÷ ñ ˜9ñ r   c                	ó   € V # r|   r   r}   s   &r   Ú	__enter__ÚPtyBridge.__enter__‡  s   € Øˆr   c               ó   € V ^8„  d   QhRR/# r–   r   )r   s   "r   r   rG   Š  s   € ÷ ñ  ñ r   c                	ó&   € V P                  4        R # r|   )rw   )rT   Ú_excs   &*r   Ú__exit__ÚPtyBridge.__exit__Š  s   € Ø�
‰
Žr   )rM   rL   rP   rJ   rS   )gš™™™™™É?)r   r    r!   r"   r#   rS   rU   Úclassmethodr[   ru   ÚpropertyrO   r‚   r‰   r§   r®   rÁ   rÅ   rË   rw   rÞ   rë   rð   r$   r   r   r   r   r   g   sµ   † ñð €Gõ0ð" ô$ó ð$ð ðØ:>ðØVZðØhjðØxzöó ðð: ô#ó ð#õ÷õ4ð.&¸4÷ &õPõ 	õ'õ
Zõx!õ÷ñ r   )rq   rr   r   r   )$r#   Ú
__future__r   rŸ   rŠ   r¼   r-   r7   r×   r¸   rk   r¾   r¬   Útypingr   r   rs   rl   rm   rY   ÚImportErrorÚ__all__rr   rq   r   r»   rº   r   ÚRuntimeErrorr   r/   r0   r2   r:   rD   r   r   r   r   Ú<module>rù      sÎ   ðñõ #ã Û Û Û Û 	Û Û Û 
Û Û ß %ðÛØŸ™×0Ñ0°Ó7Ô7€Nò U€ð !€Ø Ð ð €Ø€	Ø€	õ0ô˜,ô ð Ð ð  #Ð õ	[õõ÷dó døð[ ô Ø€JØ‚Nðús   º$B ÂB-Â,B-