+
    jHàj™>  ã                   ó¶   € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
HtHtHt ^ RIHt ^ RIHtHt ^ RIHt R	t ! R
 R]]4      tR tR tR tRR ltR# )zHAuthority-bound hosted service; no legacy session server is constructed.N©Únullcontext)ÚPath)Ú	Principal)Úactive_authorityÚall_authoritiesÚowner_scopeÚserving_authorities)ÚHostedControls)ÚRuntimeStoreErrorÚ_epoch)ÚHostedRoomServicezgateway.hosted.owner.v1:c                   ó’   a a€ ] tR t^t oV 3R ltR tR tR tR tR t	V 3R lt
R tR	R
RR/R ltR tV 3R ltR tR tRtVtV ;t# )ÚCanonicalHostedRoomServicec                ó|   <€ WuV n         V n        / V n        \        SV `  R VP
                  P                  R7       R # )N)Údb_path)Ú	authorityÚloopÚmember_rpcsÚsuperÚ__init__Údbr   )Úselfr   r   Ú	__class__s   &&&€ÚC/home/ubuntu/.hermes/hermes-agent/gateway/session_hosted_service.pyr   Ú#CanonicalHostedRoomService.__init__   s5   ø€ Ø$-Ð!ˆŒ˜œ	ØˆÔÜ‰Ñ˜ y§|¡|×';Ñ';ÐÖ<ó    c                ó   € V # ©N© )r   Úservers   &&r   Ú	_make_rpcÚ$CanonicalHostedRoomService._make_rpc   s	   € ð ˆr   c                ó@   € ^ RI Hp V! V P                  4      ^ ,          # )é    )Úmember_roster)Úgateway.session_hosted_membersr%   r   )r   r%   s   & r   Úprofile_homesÚ(CanonicalHostedRoomService.profile_homes   s   € Ý@Ù˜TŸ^™^Ó,¨QÕ/Ð/r   c                ó4   € \        V P                  4       4      # r   )Útupler'   )r   s   &r   Úlocal_profilesÚ)CanonicalHostedRoomService.local_profiles   s   € Ü�T×'Ñ'Ó)Ó*Ð*r   c                óÄ  € VP                  R4      ;'       g    R Uu0 uF…  p\        V\        4      '       g   K  \        VP                  R4      \        4      '       g   KB  VP                  R4      ;'       g    / P                  RR4      R8X  g   Kt  VP                  R4      kK‡  	  pp\	        \        \        V P                  4       4      V,          4      4      # u upi )zõA saved room keeps every local member it seated: unserving one bot must not stop the
others. That member's own turns still fail (``_resolve_member_transport`` and ``attest``
need a live home), and a new group cannot seat it (``local_profiles``).ÚmembersÚprofileÚtargetÚkindÚlocalr   )ÚgetÚ
isinstanceÚdictÚstrr*   ÚsortedÚsetr+   )r   ÚroomÚmÚseateds   &&  r   Úroom_profilesÚ(CanonicalHostedRoomService.room_profiles"   s¹   € ð -1¯H©H°YÓ,?×,EÐ,EÀ2Ð,Eó OÑ,E qÜ ¤4×(ô #Ü-7¸¿¹¸iÓ8HÌ#×-Nô #à—u‘u˜X“×,Ð,¨"×1Ñ1°&¸'ÓBÀgÑMô #�!—%‘%˜	Ö"Ñ,Eˆð Oô ”VœC × 3Ñ 3Ó 5Ó6¸Õ?Ó@ÓAÐAùòOs   žC»"CÁ"CÁ:CÂCc                ó¦  aaa€ ^ RI Hp ^ RIHp \	        S4      0 Rm8w  d   \        R4      hV3R lR  4       w  pooV P                  V4      pV P                  V4       V P                  V4      p\        ;QJ d'    VV3R lVR,           4       F  '       g   K   RM	  RM! VV3R lVR,           4       4      '       g   \        R	4      hV P                  4       P                  S4      p	V	e    VP                  R
4      \        V	4      8w  d   \        R	4      hRVR\        V	4      /p
VR!9   Ed   V! V P                  VR7       Uu. uEF^  pV! VR,          4      VP                  R4      8X  g   K)  VR,          VP                  R4      8X  g   KH  VR,          R8X  g   KX  VR,          P                  RVR,          R,          4      S8X  g   K†  VR,          R,          S8X  g   K�  VR8X  g¹   RV9   dQ   \        P                  ! VR,          R,          P!                  R4      4      P#                  4       VR,          8X  g   Kú  M'VR,          R,          VP                  R4      8X  g   EK"  VR,          P                  R. 4      VP                  R4      ;'       g    . 8X  g   EK\  VNEKa  	  pp\%        V4      ^8w  d   \        R	4      hV^ ,          R,          pVR8X  d3   ^ RIHp V
P+                  V! V SWmP                  R. 4      V4      4       V
# ^ RIHp VP                  R. 4      pV
P+                  VR,          VV! V SVV4      R7       V
# u upi )"r$   )Úasdict)Ú
list_tasksÚinvalid_paramsc              3   ó6   <"  € T F  pSV,          x € K  	  R # 5ir   r   )Ú.0ÚkÚselectors   & €r   Ú	<genexpr>Ú4CanonicalHostedRoomService.attest.<locals>.<genexpr>0   s   øé € Ð#]Ñ9\°A H¨Q§K¢KÓ9\ùs   ƒc              3   ó¾   <"  € T FR  pVR ,          S8H  ;'       d:    VR,          S8H  ;'       d&    VP                  R/ 4      P                  RR4      R8H  x € KT  	  R# 5i)Ú	member_idr/   r0   r1   r2   N)r3   ©rC   r:   Úmemberr/   s   & €€r   rF   rG   4   sk   øé € ð eÙTcÈqð �[•> VÑ+÷ Kð K°°)µÀÑ0G÷ Kð KØ—u‘u˜X rÓ*×.Ñ.¨v°wÓ?À7ÑJôKÛTcùs   ƒA›A¯.Ar.   TFÚpermission_deniedÚ_target_homeÚownerÚtarget_homeÚexecuteÚ
attachment©Úroom_idÚidentityÚtaskÚexecution_generationÚstatusÚrunningÚpayloadÚtarget_member_idÚtarget_profileÚprompt_sha256Úpromptzutf-8Úattachments)Úsource_attachment_chunk)Úsource_attachment_digests)r]   r^   Úattachment_digests>   r/   rS   rI   )rS   rI   r/   >   ÚsubmitrP   rQ   )Údataclassesr?   Úgateway.hosted_room_driverr@   r8   r   Ú_ownerÚ_owned_authorityÚ_roomÚanyr'   r3   r6   r   ÚhashlibÚsha256ÚencodeÚ	hexdigestÚlenÚ gateway.session_hosted_transportr_   Úupdater`   )r   rE   Ú	operationÚparamsr?   r@   rS   rN   r9   rO   ÚresultÚtÚmatchesrY   r_   r`   ÚmanifestrK   r/   s   &f&&             @@r   ÚattestÚ!CanonicalHostedRoomService.attest+   s  ú€ Ý&Ý9Üˆx‹=Ò?Ô?Ü#Ð$4Ó5Ð5Ü#]Ñ9\Ó#]Ñ ˆ�˜Ø—‘˜GÓ$ˆØ×Ñ˜gÔ&Ø�z‰z˜'Ó"ˆß‹sõ eØTXÐYbÖTcóe�s�sŠsõ eØTXÐYbÖTcóe÷ eò eä#Ð$7Ó8Ð8Ø×(Ñ(Ó*×.Ñ.¨wÓ7ˆØÒ &§*¡*¨^Ó"<ÄÀKÓ@PÔ"PÜ#Ð$7Ó8Ð8Ø˜5 -´°[Ó1AÐBˆØÐ;Õ;Ù",¨T¯\©\À7Õ"Kó 
kÒ"K˜QÙ   :¥Ó/°6·:±:¸fÓ3EÑEô àÐ3Õ4¸¿
¹
ÐCYÓ8ZÑZô ð ˜X�;¨)Ñ3ô ð ˜Y�<×+Ñ+Ð,>ÀÀ)ÅÐM]Õ@^Ó_ÐciÑiô	 ð
 ˜Y�<Ð(8Õ9¸WÑDô ð &¨Ô2à:IÈVÔ:Sô $ŸNšN¨1¨Y­<¸Õ+A×+HÑ+HÈÓ+QÓR×\Ñ\Ó^Ø% oÕ6ñ7ô ð7à!" 9¥¨hÕ!7¸6¿:¹:ÀhÓ;OÑ!Oõ ð  ! �|×/Ñ/°¸rÓBÀvÇzÁzÐR_ÓG`×GfÐGfÐdfÑg÷ ’qÑ"KˆGð 
kô �7‹|˜qÔ Ü'Ð(;Ó<Ð<Ø˜a•j Õ+ˆGØ˜LÔ(õ UØ—‘Ñ5°d¸FÀGÏ[É[ÐYfÐhjÓMkÐmsÓtÔuð ˆõ	 WØ"Ÿ;™; }°bÓ9�Ø—‘ W¨XÕ%6ÀHÙ1JÈ4ÐQWÐY`ÐbjÓ1kð ô màˆùò1
ks=   Å&MÅ0MÆMÆ)MÇMÇ$AMÉ"MÉ)/MÊMÊ#Mc           	     ó¼  <a€ V P                   P                  P                  4       ;_uu_ 4       pVP                  R \        R,           34       Uu0 uF  q"^ ,          \        \        4      R kK  	  upoRRR4       \        ;QJ d#    . V3R l\        SV `!  4        4       F  NK  	  5# ! V3R l\        SV `!  4        4       4      # u upi   + '       g   i     L_; i)z+SELECT key FROM state_meta WHERE key LIKE ?Ú%Nc              3   óL   <"  € T F  qP                   S9   g   K  Vx € K  	  R # 5ir   rR   )rC   ÚbÚowneds   & €r   rF   Ú6CanonicalHostedRoomService.bindings.<locals>.<genexpr>[   s   øé € ÐIÑ 2˜1·i±iÀ5Ñ6H—Q’QÓ 2ùs   ƒ$š
$)	r   r   Ú	_read_ctxrP   Ú_OWNERrm   r*   r   Úbindings)r   ÚconnÚrr|   r   s   &  @€r   r€   Ú#CanonicalHostedRoomService.bindingsW   sª   ù€ Ø�^‰^×Ñ×(Ñ(×*Ô*¨dØ15·±Ø=ÄÈÅ¸ô2Pó Qñ 2P¨A�q•Tœ#œf›+˜,Ó'ñ 2Pñ QˆE÷ +÷ ŒuÔI¤¡Ñ 0Ô 2ÓI�uÐIˆuÔI¤¡Ñ 0Ô 2ÓIÓIÐIùòQ÷ +×*ús   ¯!CÁ!CÁ1CÃCÃC	c                ó   € \        4       # r   r   )r   r/   s   &&r   Ú
_turn_lockÚ%CanonicalHostedRoomService._turn_lock]   s
   € Ü‹}Ðr   ÚcreateFr�   Nc               óV  a aaa€ ^ RI Hp \        S\        4      '       dF   S'       d>   \        S\        4      '       d(   \	        S4      ^€8”  g   VP                  S4      '       g   \        R4      hVVVV 3R lpVe	   V! V4      # S P                  P                  P                  V4      # )z«Check (or, with ``create``, claim) room ownership. A ``conn`` runs the claim inside
the caller's room-creation transaction, so owner and room commit or roll back together.)ÚIDENTIFIER_RErA   c                 ón  <€ \        V SP                  P                  4       \        S,           pV P	                  R V34      P                  4       pVfE   S'       d=   V P	                  RSS34      P                  4       pVf   V P	                  RVS34       R# Ve   V^ ,          S8w  d   \        R4      hR# )ú(SELECT value FROM state_meta WHERE key=?zjSELECT 1 FROM hosted_rooms WHERE room_id=? UNION ALL SELECT 1 FROM hosted_room_retired_ids WHERE room_id=?z-INSERT INTO state_meta(key,value) VALUES(?,?)TrL   )r   r   Úepochr   rP   Úfetchoner   )r�   ÚkeyÚrowÚ
historicalÚactor_subjectr‡   rS   r   s   &   €€€€r   ÚwriteÚ8CanonicalHostedRoomService.authorize_room.<locals>.writeh   s¬   ø€ Ü�4˜Ÿ™×-Ñ-Ô.Ü˜7Õ"ˆCØ—,‘,ÐIÈCÈ6ÓR×[Ñ[Ó]ˆCØŠ{ŸvØ!Ÿ\™\ðLà˜gÐ&ó(÷ )1©«
ð ð Ò%Ø—L‘LÐ!PÐSVÐXeÐRfÔgÙØŠ{˜c !�f¨Ô5Ü'Ð(;Ó<Ð<Ùr   )
Úgateway.hosted_rooms_commonr‰   r4   r6   rm   Ú	fullmatchr   r   r   Ú_execute_write)r   r‘   rS   r‡   r�   r‰   r’   s   fffd$  r   Úauthorize_roomÚ)CanonicalHostedRoomService.authorize_room`   s‚   û€ õ 	>Ü˜=¬#×.Ò.·mÜ! '¬3×/Ò/´3°w³<À#Ô3EØ$×.Ñ.¨w×7Ò7Ü#Ð$4Ó5Ð5÷	ð 	ð #Ò.‰u�T‹{Ð[°D·N±N×4EÑ4E×4TÑ4TÐUZÓ4[Ð[r   c                ó  € V P                   P                  P                  4       ;_uu_ 4       pVP                  R \        V,           34      P                  4       pRRR4       Xf   \        R4      hV^ ,          #   + '       g   i     L(; i)r‹   NrL   )r   r   r~   rP   r   r�   r   )r   rS   r�   r�   s   &&  r   re   Ú!CanonicalHostedRoomService._ownery   sh   € Ø�^‰^×Ñ×(Ñ(×*Ô*¨dØ—,‘,ÐIÌFÐU\ÕL\ÐK^Ó_×hÑhÓjˆC÷ +àŠ;Ü#Ð$7Ó8Ð8Ø�1�vˆ÷	 +×*ús   ­-A:Á:B
	c                óÀ  <a aa
aaaa€ S P                  SP                  \        VR ,          P                  R4      ;'       g    VR ,          P                  R4      4      4      '       d   \        SS `  SV4      # ^ RIHp VR ,          p\        VP                  R4      ;'       g    VP                  R4      4      oVR,          oS P                  SP                  4      oS P                  4       P                  S4      oSf   \        R4      hSP                  SSS\        S4      3pVS P                  9  Ed   S\        S P                  P                  4      8w  dR   ^ RIHp V! SS P                  P                  SP                  SSR7      S P                  V&   S P                  V,          # VVVVVV 3R lo
V
V 3R lpV
3R	 lp\#        SS P                  P                  \%        0 Rm4      R
SP                  ,           R,           S,           4      p	V! S P                  S P&                  SP                  SSW—VR7      S P                  V&   S P                  V,          # )rY   rZ   r[   )ÚHostedRoomAuthorityRPCrL   )ÚHostedRoomOwnerRPC)ÚhomeÚsource_homerS   rI   r/   c                 ó^  <€ ^ RI Hp ^ RIHp \	        V SP
                  P                  4       V P                  R\        SP                  ,           34      P                  4       pVe   V^ ,          S8w  d   R# V P                  RSP                  34      P                  4       pVe   VR,          e   R# V! V4      pVR,          VR,          3SP                  SP                  38w  d   R# VR	,          p	\        ;QJ d     VV3R
 lV	 4       F  '       g   K   RM	  RM! VV3R
 lV	 4       4      '       g   R# SP                  4       P                  S4      S8w  d   R# VeÌ   V P                  RSP                  VP                   34      P                  4       pVf   R# V! V4      p
V
R,          V8H  ;'       dt    V
R,          V8H  ;'       d`    V
R,          P                  R4      S8H  ;'       d=    V
R,          P                  RS4      S8H  ;'       d    V
R,          VR9   d   R0MRR09   # R# )r$   )Ú_room_from_row)Ú_task_from_rowr‹   Fz*SELECT * FROM hosted_rooms WHERE room_id=?Údisbanded_atÚauthority_gateway_idÚauthority_epochr.   c              3   óP  <"  € T F›  pVP                  R 4      S8H  ;'       d{    VP                  R4      S8H  ;'       d_    VP                  R4      RJ ;'       gD    \        VP                  R4      \        4      ;'       d    VR,          P                  RR4      R8H  x € K�  	  R# 5i)rI   r/   r0   Nr1   r2   )r3   r4   r5   rJ   s   & €€r   rF   Ú[CanonicalHostedRoomService._resolve_member_transport.<locals>.authorized.<locals>.<genexpr>¥   sª   øé € ð -ñ %,˜qð	 Ÿ5™5 Ó-°Ñ7÷ Qð Q¸A¿E¹EÀ)Ó<LÐPWÑ<W÷ Qð QØ !§¡ h£°4Ð 7÷ !Pð !PÜ)¨!¯%©%°«/¼4Ó@÷  Oð  OØ#$ X¥;§?¡?°6¸7Ó#CÀwÑ#NôQó %,ùs   ƒB&£B&¿B&Á&B&Â%B&TzDSELECT * FROM hosted_room_driver_tasks WHERE room_id=? AND task_id=?rT   rV   rY   r[   rZ   rW   rX   Ústopping>   rb   rP   )Úgateway.hosted_roomsr¡   rd   r¢   r   r   rŒ   rP   r   rS   r�   Ú
gateway_idr¥   rh   r'   r3   Útask_id)r�   rp   rT   Ú
generationr¡   r¢   r|   Ústoredr9   r.   ÚcurrentÚbindingrž   rK   rN   r/   r   s   &&&&       €€€€€€r   Ú
authorizedÚHCanonicalHostedRoomService._resolve_member_transport.<locals>.authorized“   s"  ø€ õ @ÝEÜ�t˜TŸ^™^×1Ñ1Ô2ØŸ™Ð%OÜ&,¨w¯©Õ&>Ð%@óBßBJÁ(Ã*ð à’= E¨!¥H°Ô$5Ù ØŸ™Ð&RØ'.§¡Ð&8ó:ß:B¹(»*ð à’> V¨NÕ%;Ò%GÙ Ù% fÓ-�ØÐ/Õ0°$Ð7HÕ2IÐJÈw×OaÑOaÐcj×czÑczÐN{Ô{Ù Ø˜y�/�ß“sõ -ñ %,ó	-—s—s’sõ -ñ %,ó	-÷ -ò -ñ
 !Ø×%Ñ%Ó'×+Ñ+¨GÓ4¸Ô<Ù ØÒ'Ø!Ÿ\™\Ð*pØ+2¯?©?¸H×<LÑ<LÐ*MóOßOWÉxËzð à’~Ù$Ù,¨VÓ4�GØ# JÕ/°8Ñ;÷ Uð UÀÐH^Õ@_ÐcmÑ@m÷ Uð UØ '¨	Õ 2× 6Ñ 6Ð7GÓ HÈGÑ S÷Uð Uà '¨	Õ 2× 6Ñ 6Ð7IÈ7Ó SÐW]Ñ ]÷Uð Uð !(¨Õ 1ÀYÐRgÔEg°y±kØ=FÈ
Ð<Sñ!UðVñ
 r   c                 ó¬   <€ SP                   P                  P                  4       ;_uu_ 4       pS! W0W4      uuR R R 4       #   + '       g   i     R # ; ir   )r   r   r~   )rp   rT   r¬   r�   r°   r   s   &&& €€r   Ú	authorizeÚGCanonicalHostedRoomService._resolve_member_transport.<locals>.authorize¹   s7   ø€ Ø—^‘^×&Ñ&×0Ñ0×2Ô2°dÙ% d°xÓL÷ 3×2×2Ó2ús   ®	AÁA	c                 ó>   <€ S! V R W4      '       g   \        R4      hR# )rb   rL   T)r   )r�   rT   r¬   r°   s   &&&€r   Úauthorize_writeÚMCanonicalHostedRoomService._resolve_member_transport.<locals>.authorize_write¼   s#   ø€ ñ " $¨°(×GÒGÜ+Ð,?Ó@Ð@Ùr   úhosted:Ú:)rS   rI   r/   Ú	principalr³   r¶   >   úsession:readúsession:createúsession:submitúsession:approveúsession:control)Ú_member_is_peerrS   r6   r3   r   Ú_resolve_member_transportÚgateway.session_hosted_rpcrœ   re   r'   r   r   r   r   Ú
profile_idrn   r�   r   Ú	frozensetr   )r   r¯   rU   rœ   rY   rŽ   r�   r³   r¶   rº   r°   rž   rK   rN   r/   r   s   ff&       @@@@@€r   rÁ   Ú4CanonicalHostedRoomService._resolve_member_transport€   s  ÿ€ Ø×Ñ §¡´°T¸)µ_×5HÑ5HÐI[Ó5\÷  6Fð  6FÐ`dÐenÕ`o×`sÑ`sð  uEó  aFó  2G÷  Hò  HÜ‘7Ñ4°W¸dÓCÐCÝEØ�y•/ˆÜ�W—[‘[Ð!3Ó4×UÐU¸¿¹ÐDTÓ8UÓVˆØÐ*Õ+ˆØ—‘˜GŸO™OÓ,ˆØ×!Ñ!Ó#×'Ñ'¨Ó0ˆØŠ<Ü#Ð$7Ó8Ð8Ø�o‰o˜v w°´s¸4³yÐ@ˆØ�d×&Ñ&Õ&Ø”t˜DŸN™N×5Ñ5Ó6Ô6ÝOÙ(:ÀØ $§¡× 9Ñ 9À7Ç?Á?Ø$¨gô)7�× Ñ  Ñ%ð ×'Ñ'¨Õ,Ð,÷%ò %öLMõô " %¨¯©×)BÑ)BÜÒtÓuØ˜GŸO™OÕ+¨cÕ1°FÕ:ó<ˆIñ %;¸4¿>¹>È4Ï9É9ØŸ™°6À7ÐV_Ø /ô%1ˆD×Ñ˜SÑ!ð ×Ñ Õ$Ð$r   c                óä  aa€ ^ RI p^ RIHpHp ^ RIHp ^ RIHp  VR,          P                  R4      '       g   \        R4      hVP                  VR,          R,          4      w  ooV! R/ SB o\        S4      \        Jg   S^8  d   \        R	4      hV P                  SP                  4      pW‚R
,          8w  d   \        R4      hV P                  SP                  4      p	\!        VV3R lV! V P"                  SP                  R7       4       4      p
V P%                  V! SP                  V	R,          V	R,          4      V
4      p\'        VRR4      V8w  g_   V
R,          R8w  gQ   VR,          V! WºR,          R,          V
R,          P)                  R4      4      8w  g   VP+                  RSS4      RJd   \        R4      hV
#   \        \,        \.        \0        3 d   p\3        R4      ThRp?ii ; i)zFReconstruct the private producer from durable task state before claim.N)ÚTaskIdentityr@   )Úcommitted_submission_payload)ÚHostedRoomBindingÚ
request_idr¸   znot a hosted admission:é   NNzinvalid generationÚprincipal_idzforeign ownerc              3   óh   <"  € T F'  pVR ,          S8X  g   K  VR,          S8X  g   K#  Vx € K)  	  R# 5i)rT   rV   Nr   )rC   rs   r¬   rT   s   & €€r   rF   Ú=CanonicalHostedRoomService.check_admission.<locals>.<genexpr>Û   s;   øé € ð bÑ#U˜aØ˜Z�=¨HÑ4ô Ø9:Ð;QÕ9RÐV`Ñ9`÷ šÓ#Uùs   ƒ2˜2¨
2rR   r¤   r¥   ÚrefrW   rX   rY   r]   r^   rP   Tzchanged hosted bindingrL   r   )Újsonrd   rÇ   r@   Ú"gateway.session_hosted_attachmentsrÈ   Útui_gateway.hosted_room_driverrÉ   Ú
startswithÚ
ValueErrorÚloadsÚtypeÚintre   rS   rg   Únextr   rÁ   Úgetattrr3   Ú
authorizerÚ	TypeErrorÚKeyErrorÚStopIterationr   )r   rÏ   r�   rÐ   rÇ   r@   rÈ   rÉ   rN   r9   rU   ÚrpcÚexcr¬   rT   s   &&&          @@r   Úcheck_admissionÚ*CanonicalHostedRoomService.check_admissionÊ   sÉ  ù€ ãßGÝSÝDð	BØ�|Õ$×/Ñ/°	×:Ò:Ü Ð!9Ó:Ð:Ø#'§:¡:¨c°,Õ.?ÀÕ.CÓ#DÑ ˆH�jÙ#Ñ/ hÑ/ˆHÜ�JÓ¤sÓ*¨j¸1¬nÜ Ð!5Ó6Ð6Ø—K‘K × 0Ñ 0Ó1ˆEØ˜NÕ+Ô+Ü  Ó1Ð1Ø—:‘:˜h×.Ñ.Ó/ˆDÜõ b¡:¨d¯l©lÀH×DTÑDTÕ#Uó bó bˆDà×0Ñ0Ñ1BÀ8×CSÑCSØÐ+Õ,¨dÐ3DÕ.Eó2GØHLóNˆCä˜˜U DÓ)¨SÔ0°D¸µNÀiÔ4OØ˜9•~Ñ)EÀcÐPYÍ?Ð[cÕKdÐfjÐktÕfu×fyÑfyð  {Hó  gIó  *Jô  JØ—~‘~ i°¸:ÓFÈdÓRÜ Ð!9Ó:Ð:ØˆKøÜœI¤x´Ð?ô 	BÜ#Ð$7Ó8¸cÐAûð	Bús   œG ºFG ÇG/ÇG*Ç*G/c               ó¤   a€ \        V3R  lV P                  P                  4        4       R4      pVf   \        R4      hVP	                  SW#R7      # )c              3   ó`   <"  € T F#  qP                   P                  S8X  g   K  Vx € K%  	  R # 5ir   )rÏ   Ú
session_id)rC   r‚   rä   s   & €r   rF   Ú5CanonicalHostedRoomService.approve.<locals>.<genexpr>è   s%   øé € Ð[Ñ8˜!¿E¹E×<LÑ<LÐPZÑ<Z—A’AÓ8ùs   ƒ.¤
.NrL   )rä   rÊ   Úchoice)rØ   r   Úvaluesr   Úapprove)r   rä   rÊ   ræ   rÞ   s   &d$$ r   rè   Ú"CanonicalHostedRoomService.approveç   sI   ø€ ÜÔ[˜t×/Ñ/×6Ñ6Ô8Ó[Ð]aÓbˆØŠ;Ü#Ð$7Ó8Ð8Ø�{‰{ j¸Zˆ{ÓWÐWr   )r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r!   r'   r+   r<   rv   r€   r…   r—   re   rÁ   rà   rè   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   Ú__classdict__s   @@r   r   r      sd   ù‡ € õ=ò
ò
0ò+òBò)õXJòð\¸uð \È4ô \ò2õH%òTB÷:Xò Xr   r   c              ƒ  óº   "  € \        V 4      pVf   \        R4      h\        V 4       F  p\        W4      G Rj  x€L
  K  	  \	        V 4       VP
                  #  L5i)zEPrepare every transport before readiness can release any coordinator.NÚprofile_mismatch)r   r   r	   Ú_ensure_hosted_serviceÚstart_ready_hosted_servicesÚhosted_room_service)ÚrunnerÚactiver   s   &  r   Úensure_hosted_servicerù   î   sV   é € ä˜fÓ%€FØ‚~ÜÐ 2Ó3Ð3Ü(¨Ö0ˆ	Ü$ VÓ7×7Ò7ñ 1ä Ô'Ø×%Ñ%Ð%ñ 	8ùs   ‚7A¹Aº Ac           	   ƒ   ó¶  "  € \        V4      ;_uu_ 4        \        VR R4      pVf?   \        P                  ! 4       p\        P                  ! \
        W4      G Rj  x€L
 pW!n        \        VRR4      '       gA   ^ RIHp V! V P                  V\        P                  ! 4       VP                  R7       RVn        RRR4       R#  Lg  + '       g   i     R# ; i5i)rö   NÚ_transport_installedF)Úinstall_hosted_transport)rv   T)r   rÙ   ÚasyncioÚget_running_loopÚ	to_threadr   rö   rn   rü   Úsession_control_serverrv   rû   )r÷   r   Úservicer   rü   s   &&   r   rô   rô   ù   s¦   é € Ü	�Y×	Õ	Ü˜)Ð%:¸DÓAˆØŠ?Ü×+Ò+Ó-ˆDÜ#×-Ò-Ô.HÈ)ÓZ×ZˆGØ,3Ô)Ü�wÐ 6¸×>Ò>ÝQÙ$ V×%BÑ%BÀIÌw×OgÒOgÓOiØ,3¯N©Nõ<à+/ˆGÔ(÷ 
 Ñ	ñ [÷	 
 ×	Ð	üs0   ‚C–ACÁCÁACÂ9
CÃCÃC	Ã	Cc                óp  € \        V R/ 4      P                  R4      R8w  g   \        V RR4      '       d   R# \        V 4       Uu. uF  p\        VRR4      NK  	  pp\        ;QJ d    R V 4       F  '       g   K   R	M	  RM! R V 4       4      '       d   R# V F  pVP	                  4        K  	  R# u upi )
zGStart only a fully prepared served set behind the published ready gate.Úsession_runtime_descriptorÚstateÚreadyÚ	_drainingFNrö   c              3   ó\   "  € T F"  qR J ;'       g    \        VRR4      '       * x € K$  	  R # 5i)Nrû   F)rÙ   )rC   r  s   & r   rF   Ú.start_ready_hosted_services.<locals>.<genexpr>  s-   é € Ð
jÑaiÐV]�dˆ?×QÐQ¤'¨'Ð3IÈ5Ó"QÔQÔQÓaiùs   ‚,‘,T)rÙ   r3   r	   rh   Ústart)r÷   r   Úservicesr  s   &   r   rõ   rõ     s–   € ä�Ð4°bÓ9×=Ñ=¸gÓFÈ'ÔQÜ�v˜{¨E×2Ò2ÙÜQdÐekÔQlÓmÑQlÀI”˜	Ð#8¸$Ö?ÑQl€HÐmß
ƒsÑ
jÑaiÓ
j‡s‡s‚sÑ
jÑaiÓ
j×jÒjÙÛˆà�‰Žó ùò ns   ÁB3c           
   ƒ   ór  "  € \         P                  ! 4       pVP                  4       \        ^ V4      ,           RrC\	        V 4       Fj  p\        VRR4      pVf   K  \         P                  ! VP                  \        ^ W2P                  4       ,
          4      R7      G Rj  x€L
 pT;'       d    TpKl  	  V#  L5i)r$   Trö   N)Útimeout)rý   rþ   ÚtimeÚmaxr   rÙ   rÿ   Ústop)r÷   r  r   ÚdeadlineÚstoppedr   r  rr   s   &&      r   Ústop_hosted_servicer    s•   é € Ü×#Ò#Ó%€DØŸ	™	›¤c¨!¨W£oÕ5°tˆgÜ$ VÖ,ˆ	Ü˜)Ð%:¸DÓAˆØÔÜ"×,Ò,¨W¯\©\Ä3ÀqÈ(×U^ÑU^ÓU`ÕJ`ÓCaÔb×bˆFØ×(Ð( ŠGñ	 -ð
 €Nñ cùs   ‚AB7ÁAB7ÂB5ÂB7Â,
B7)é   )Ú__doc__rý   ri   Ú
contextlibr   Úpathlibr   Úgateway.session_contractr   Úgateway.session_authoritiesr   r   r   r	   Úgateway.session_hosted_controlsr
   Úhermes_state_runtimer   r   Útui_gateway.hosted_room_servicer   r   r   rù   rô   rõ   r  r   r   r   Ú<module>r     sS   ðÙ NÛ Û Ý "Ý å .ß kÓ kÝ :ß :Ý =à	#€ô[X Ð1Bô [Xò|&ò0ò
ör   