+
    O×iÓ/  ã                   ó2  € ^ RI t ^ RIt^ RIt^ RIHtHtHt ^RIHtH	t	 ^RI
Ht ^RIHtHtHt ^RIHtHtHt ^RIHtHt ]P.                  ! ]4      t ! R R	]4      t ! R
 R]4      t ! R R]]]4      t ! R R]4      t ! R R]4      t ! R R]4      t R# )é    N)ÚAnyÚCallableÚSequence)Ú
JsonObjectÚ	JsonValue)ÚBridgeConfig)ÚCockpitProblemÚCockpitProtocolÚCockpitProtocolError)ÚEndpointÚRouterÚRoutingRule)ÚSubprocessProtocolÚSubprocessTransportc                   ó   € ] tR t^tRtR# )Ú	PeerError© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú./usr/lib/python3/dist-packages/cockpit/peer.pyr   r      s   † Ûr   r   c                   ó2   a € ] tR t^t o V 3R lR ltRtV tR# )Ú
PeerExitedc                ó    <€ V ^8„  d   QhRS[ /# )é   Ú	exit_code)Úint)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚPeerExited.__annotate__   s   ø€ ÷ #ñ #¡#ñ #r   c                ó   € Wn         R # ©N©r   )Úselfr   s   &&r   Ú__init__ÚPeerExited.__init__   s   € Ø"Žr   r'   N)r   r   r   r   r)   r   Ú__classdictcell__©r"   s   @r   r   r      s   ø‡ € ÷#ö #r   r   c                   ó„  a a€ ] tR t^t oV3R lV 3R lltV3R lR ltV3R lR ltR'V3R lR lltR'V3R	 lR
 lltV3R lR lt	V3R lR lt
V3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR ltV3R lR  ltV3R! lR" ltV3R# lR$ ltV3R% ltR&tVtV ;t# )(ÚPeerc                ó    <€ V ^8„  d   QhRS[ /# )r   Úrouter)r   )r!   r"   s   "€r   r#   ÚPeer.__annotate__!   s   ø€ ÷ !ñ !™vñ !r   c                ó¤   <€ \         SV `  V4       V P                  4        \        P                  ! 4       P                  4       V n        . V n        R # r&   )Úsuperr)   Úfreeze_endpointÚasyncioÚget_running_loopÚcreate_futureÚinit_futureÚdone_callbacks)r(   r0   Ú	__class__s   &&€r   r)   ÚPeer.__init__!   s@   ø€ Ü‰Ñ˜Ô ð 	×ÑÔä"×3Ò3Ó5×CÑCÓEˆÔØ ˆÖr   c                ó   <€ V ^8„  d   QhRR/# ©r   ÚreturnNr   )r!   r"   s   "€r   r#   r1   +   s   ø€ ÷ "ñ "¨Dñ "r   c              ƒ  ó   "  € \         h5ir&   )ÚNotImplementedError©r(   s   &r   Údo_connect_transportÚPeer.do_connect_transport+   s   é € Ü!Ð!ùs   ‚	c                óf   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[RS[P                  /# )r   ÚargvÚenvÚkwargsr>   )r   Ústrr   r5   Ú	Transport)r!   r"   s   "€r   r#   r1   .   s>   ø€ ÷ añ a¡©¥ð a±H¹SµMð aÉSð aÑU\×UfÑUfñ ar   c           	   ‹  ó¦   "  € \         P                  ! 4       p\        R  V 4       4      p\        W@V3R\        \        P
                  3/ VB /VB # 5i)c              3   óD   "  € T F  qP                  R ^4      x € K  	  R# 5i)Ú=N)Úsplit)Ú.0Úes   & r   Ú	<genexpr>ÚPeer.spawn.<locals>.<genexpr>1   s   é € Ð5±¨AŸ™  QŸ˜³ùs   ‚ rF   )r5   r6   Údictr   ÚosÚenviron)r(   rE   rF   rG   ÚloopÚuser_envs   &&&,  r   ÚspawnÚ
Peer.spawn.   sI   é € ä×'Ò'Ó)ˆÜÑ5±Ó5Ó5ˆÜ" 4¨tÑ`¼¼b¿j¹jÑ9UÈHÑ9UÐ`ÐY_Ñ`Ð`ùs   ‚AAc                ó*   <€ V ^8„  d   QhRRRS[ RS[/# )r   Ú	init_hostú
str | NonerG   r>   )r   r   )r!   r"   s   "€r   r#   r1   4   s#   ø€ ÷ >ñ > \ð >ÁIð >ÑR\ñ >r   c           	   ‹  óf  a a"  € S P                   f   Q hR VV 3R llp\        P                  ! S P                  4       4      oSP	                  V4        S P                   G Rj  x€L
 p RS n         SP                  4       '       g   SP                  4        Te?   \        P                  RT4       S P                  ! R	RRR^RT/TB  S P                  4        T#  Lv  \
        \        3 d    SG Rj  x€L 
  h i ; i  RS n         SP                  4       '       g   SP                  4        i i ; i5i)
a€  Request that the Peer is started and connected to the router.

Creates the transport, connects it to the protocol, and participates in
exchanging of init messages.  If anything goes wrong, the connection
will be closed and an exception will be raised.

The Peer starts out in a frozen state (ie: attempts to send messages to
it will initially be queued). If init_host is not None then an init
message is sent with the given 'host' field, plus any extra kwargs, and
the queue is thawed. Otherwise, the caller is responsible for sending
the init message and thawing the peer.

In any case, the return value is the init message from the peer.
Nc                ó    € V ^8„  d   QhRRRR/# )r   Útaskzasyncio.Task[None]r>   Nr   )r!   s   "r   r#   Ú Peer.start.<locals>.__annotate__E   s   € ÷ 	 ñ 	 Ð%9ð 	 ¸dñ 	 r   c                 ó¼   <€ V SJ g   Q h V P                  4        R #   \        P                   d     R # \         d   pSP	                  T4        R p?R # R p?ii ; ir&   )Úresultr5   ÚCancelledErrorÚ	ExceptionÚclose)r^   ÚexcÚconnect_taskr(   s   & €€r   Ú_connect_task_doneÚ&Peer.start.<locals>._connect_task_doneE   sM   ø€ Ø˜<Ó'Ð'Ð'ð Ø—‘–øÜ×)Ñ)ô ÚÜô  Ø—
‘
˜3—’ûð ús   ‹ �AµA¾A¿AÁAz$  sending init message back, host %sÚcommandÚinitÚversionÚhostr&   )r8   r5   Úcreate_taskrB   Úadd_done_callbackr   ÚBrokenPipeErrorÚdoneÚcancelÚloggerÚdebugÚwrite_controlÚthaw_endpoint)r(   rZ   rG   rg   Úinit_messagerf   s   f&,  @r   ÚstartÚ
Peer.start4   s'  ùé € ð ×ÑÒ+Ð+Ð+÷	 ñ 	 ô ×*Ò*¨4×+DÑ+DÓ+FÓGˆØ×&Ñ&Ð'9Ô:ð	&ð "&×!1Ñ!1×1‰Lð  $ˆDÔð  ×$Ñ$×&Ò&Ø×#Ñ#Ô%àÒ Ü�L‰LÐ?ÀÔKà×ÒÑY¨VÐY¸QÐYÀYÐYÐRXÒYð ×ÑÔ àÐñ5 2øäœOÐ,ô 	ð
 ×Ñàð	ûð  $ˆDÔð  ×$Ñ$×&Ò&Ø×#Ñ#Õ%ð 'üsO   „AD1ÁC Á$CÁ%C Á*D1ÂAD1ÃC ÃC;Ã3C6Ã4C;Ã;C> Ã>0D.Ä.D1c                ó(   <€ V ^8„  d   QhRRRS[ RR/# )r   rZ   r[   rG   r>   N)r   )r!   r"   s   "€r   r#   r1   u   s#   ø€ ÷ 
7ñ 
7¨\ð 
7ÉIð 
7ÐZ^ñ 
7r   c                óŠ   a€ R  V3R llp\         P                  ! V P                  ! V3/ VB 4      oSP                  V4       R# )c                ó    € V ^8„  d   QhRRRR/# )r   r^   zasyncio.Task[JsonObject]r>   Nr   )r!   s   "r   r#   Ú.Peer.start_in_background.<locals>.__annotate__v   s   € ÷ 	ñ 	Ð#=ð 	À$ñ 	r   c                 ó’   <€ V SJ g   Q h V P                  4        R #   \        \        \        \        P
                  3 d     R # i ; ir&   )ra   ÚOSErrorr   r	   r5   rb   )r^   Ú
start_tasks   &€r   Ú_start_task_doneÚ2Peer.start_in_background.<locals>._start_task_donev   s@   ø€ Ø˜:Ó%Ð%Ð%ðØ—‘–øÜœZ¬¼×9OÑ9OÐPô Úðús   ‹ �%AÁAN)r5   rm   rw   rn   )r(   rZ   rG   r€   r   s   &&, @r   Ústart_in_backgroundÚPeer.start_in_backgroundu   s<   ø€ ÷	ð 	ô ×(Ò(¨¯ª°IÑ)HÀÑ)HÓIˆ
Ø×$Ñ$Ð%5Ö6r   c                ó6   <€ V ^8„  d   QhRS[ . R3,          RR/# )r   ÚcallbackNr>   )r   )r!   r"   s   "€r   r#   r1   ‚   s$   ø€ ÷ -ñ -©(°2°t°8Õ*<ð -Àñ -r   c                ó<   € V P                   P                  V4       R # r&   )r9   Úappend)r(   r…   s   &&r   rn   ÚPeer.add_done_callback‚   s   € Ø×Ñ×"Ñ" 8Ö,r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   r1   †   s   ø€ ÷ ñ ¨ñ r   c                ó   € R # r&   r   rA   s   &r   Údo_superuser_init_doneÚPeer.do_superuser_init_done†   ó   € Ùr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úmessager>   N©r   )r!   r"   s   "€r   r#   r1   ‰   s   ø€ ÷ ñ ¡Jð °4ñ r   c                ó   € R # r&   r   )r(   r�   s   &&r   Údo_authorizeÚPeer.do_authorize‰   r�   r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   ri   r�   r>   N©rH   r   )r!   r"   s   "€r   r#   r1   Œ   s'   ø€ ÷ 	Yñ 	Y±#ð 	YÁ
ð 	YÈtñ 	Yr   c                ó  € VR 8X  dA   V P                   e3   \        P                  R4       V P                   P                  V4       R# VR8X  d   V P	                  V4       R# VR8X  d   V P                  4        R# \        RV 24      h)rj   Nz:Got init message with active init_future.  Setting result.Ú	authorizezsuperuser-init-donez$Received unexpected control message )r8   rr   rs   Ú
set_resultr’   r‹   r   )r(   ri   r�   s   &&&r   Útransport_control_receivedÚPeer.transport_control_receivedŒ   st   € Ø�fÔ ×!1Ñ!1Ò!=Ü�L‰LÐUÔVØ×Ñ×'Ñ'¨Ö0Ø˜Ô#Ø×Ñ˜gÖ&ØÐ-Ô-Ø×'Ñ'Ö)ä&Ð)MÈgÈYÐ'WÓXÐXr   c                ó    <€ V ^8„  d   QhRS[ /# )r   r>   )Úbool)r!   r"   s   "€r   r#   r1   —   s   ø€ ÷ ñ ™dñ r   c                óZ   € \         P                  R V P                  P                  4       R# )zPeer %s received unexpected EOFT)rr   rs   r:   r   rA   s   &r   Úeof_receivedÚPeer.eof_received—   s    € ô 	�‰Ð6¸¿¹×8OÑ8OÔPÙr   c                ó"   <€ V ^8„  d   QhRRRR/# )r   re   zException | Noner>   Nr   )r!   r"   s   "€r   r#   r1   ¡   s   ø€ ÷ ñ Ð/ð °Dñ r   c                ó  € \         P                  R V P                  P                  \	        V4      V4       Vf   V P                  RR7       M»\        V\        4      '       dF   VP                  ^8X  d   V P                  RR7       M�V P                  RRVP                   2R7       M`\        V\        4      '       d   V P                  VP                  4       M.V P                  RRVP                  P                   R	V: 2R7       V P                  e[   V P                  P                  4       '       g;   Ve   V P                  P                  V4       MV P                  P                  4        V P                   F
  pV! 4        K  	  R# )
zPeer %s connection lost %s %sNÚ
terminated)Úproblemz
no-cockpitzPeer exited with status )r£   r�   zinternal-errorÚ[z] )rr   rs   r:   r   ÚtypeÚshutdown_endpointÚ
isinstancer   r   r	   Úattrsr8   rp   Úset_exceptionrq   r9   )r(   re   r…   s   && r   Ú	do_closedÚPeer.do_closed¡   s;  € Ü�‰Ð4°d·n±n×6MÑ6MÌtÐTWËyÐZ]Ô^àŠ;Ø×"Ñ"¨<Ð"Õ8Ü˜œZ×(Ò(à�}‰} Ô#Ø×&Ñ&¨|Ð&Õ<à×&Ñ&¨|ÐG_Ð`c×`mÑ`mÐ_nÐEoÐ&ÕpÜ˜œ^×,Ò,Ø×"Ñ" 3§9¡9Õ-à×"Ñ"Ð+;Ø-.¨s¯}©}×/EÑ/EÐ.FÀbÈÉÐ+Pð #ô Rð
 ×ÑÒ'°×0@Ñ0@×0EÑ0E×0GÒ0GØŠØ× Ñ ×.Ñ.¨sÕ3à× Ñ ×'Ñ'Ô)à×+Ô+ˆHÙŽJó ,r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   r1   ½   s   ø€ ÷ +ñ + ñ +r   c                óh  € \        V P                  \        4      '       g   Q h\        P	                  R V P
                  P                  V P                  P                  4       4       V P                  P                  4       p\        V\        4      '       g   Q hV P                  \        V4      4       R# )zPeer %s exited, status %dN)r§   Ú	transportr   rr   rs   r:   r   Úget_returncoder    rd   r   )r(   Ú
returncodes   & r   Úprocess_exitedÚPeer.process_exited½   sx   € Ü˜$Ÿ.™.Ô*=×>Ò>Ð>Ð>Ü�‰Ð0°$·.±.×2IÑ2IÈ4Ï>É>×KhÑKhÓKjÔkØ—^‘^×2Ñ2Ó4ˆ
Ü˜*¤c×*Ò*Ð*Ð*Ø�
‰
”:˜jÓ)Ö*r   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# ©r   Úchannelri   r�   r>   Nr•   )r!   r"   s   "€r   r#   r1   Å   s*   ø€ ÷ =ñ =±ð =¹cð =ÉJð =Ð[_ñ =r   c                ó\   € V P                   e   \        R4      hV P                  WV4       R # )Nz7Received unexpected channel control message before init)r8   r   Úsend_channel_control©r(   rµ   ri   r�   s   &&&&r   Úchannel_control_receivedÚPeer.channel_control_receivedÅ   s*   € Ø×ÑÒ'Ü&Ð'`ÓaÐaØ×!Ñ! '°GÖ<r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# ©r   rµ   Údatar>   N©rH   Úbytes)r!   r"   s   "€r   r#   r1   Ê   s"   ø€ ÷ .ñ .©Sð .¹ð .À$ñ .r   c                óZ   € V P                   e   \        R4      hV P                  W4       R # )Nz,Received unexpected channel data before init)r8   r   Úsend_channel_data©r(   rµ   r½   s   &&&r   Úchannel_data_receivedÚPeer.channel_data_receivedÊ   s(   € Ø×ÑÒ'Ü&Ð'UÓVÐVØ×Ñ˜wÖ-r   c                ó0   <€ V ^8„  d   QhRS[ RS[ RS[RR/# r´   r•   )r!   r"   s   "€r   r#   r1   Ð   s*   ø€ ÷ $ñ $©#ð $¹ð $Ájð $ÐUYñ $r   c                óH   € V P                   e   Q hV P                  V4       R # r&   ©r8   rt   r¸   s   &&&&r   Údo_channel_controlÚPeer.do_channel_controlÐ   ó"   € Ø×ÑÒ'Ð'Ð'Ø×Ñ˜7Ö#r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# r¼   r¾   )r!   r"   s   "€r   r#   r1   Ô   s"   ø€ ÷ /ñ /¡sð /±%ð /¸Dñ /r   c                óH   € V P                   e   Q hV P                  W4       R # r&   )r8   Úwrite_channel_datarÂ   s   &&&r   Údo_channel_dataÚPeer.do_channel_dataÔ   s"   € Ø×ÑÒ'Ð'Ð'Ø×Ñ Ö.r   c                ó,   <€ V ^8„  d   QhRRRRRS[ RR/# )r   rl   r[   Úgroupr�   r>   Nr�   )r!   r"   s   "€r   r#   r1   Ø   s*   ø€ ÷ $ñ $˜Lð $°ð $É
ð $ÐW[ñ $r   c                óH   € V P                   e   Q hV P                  V4       R # r&   rÇ   )r(   rl   rÑ   r�   s   &&&&r   Údo_killÚPeer.do_killØ   rÊ   r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   r1   Ü   s   ø€ ÷ ñ ˜$ñ r   c                ó&   € V P                  4        R # r&   )rd   rA   s   &r   Údo_closeÚPeer.do_closeÜ   s   € Ø�
‰
Žr   c                ó.   <€ V ^8„  d   Qh/ R;R&   R;R&   # )r   zlist[Callable[[], None]]r9   z!asyncio.Future[JsonObject] | Noner8   r   )r!   r"   s   "€r   r#   r1      s   ø‡ ‚ Ø.Ñ.ñ à4Ñ4ò r   )r9   r8   r&   )r   r   r   r   r)   rB   rW   rw   r‚   rn   r‹   r’   r™   rž   rª   r±   r¹   rÃ   rÈ   rÎ   rÓ   r×   Ú__annotate_func__r   r+   Ú__classcell__©r:   r"   s   @@r   r.   r.      sÆ   ù‡ € ÷!ó !÷"ð "÷að a÷>ò >÷B
7ò 
7÷-ð -÷ð ÷ð ÷	Yð 	Y÷ð ÷ð ÷8+ð +÷=ð =÷
.ð .÷$ð $÷/ð /÷$ð $÷ð ÷ … r   r.   c                   ó\   a a€ ] tR t^àt oV3R lV 3R lltV3R lR ltV3R ltRtVtV ;t	# )ÚConfiguredPeerc                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r   r0   Úconfig©r   r   )r!   r"   s   "€r   r#   ÚConfiguredPeer.__annotate__æ   s   ø€ ÷ !ñ !™vð !©|ñ !r   c                ó˜   <€ W n         VP                  V n        VP                  V n        VP                  V n        \        SV `  V4       R # r&   )rá   ÚmethodrW   ÚargsrT   rF   r3   r)   ©r(   r0   rá   r:   s   &&&€r   r)   ÚConfiguredPeer.__init__æ   s6   ø€ ØŒØ—m‘mˆŒØ—L‘LˆŒ	Ø—>‘>ˆŒÜ‰Ñ˜Ö r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   rã   í   s   ø€ ÷ .ñ .¨Dñ .r   c              ƒ  óŽ   "  € V P                   f   Q hV P                  V P                   V P                  4      G R j  x€L
  R #  L5ir&   )ræ   rW   rF   rA   s   &r   rB   Ú#ConfiguredPeer.do_connect_transportí   s1   é € Ø�y‰yÒ$Ð$Ð$Ø�j‰j˜Ÿ™ D§H¡HÓ-×-Ô-ùs   ‚:A¼A½Ac                ój   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   # )r   rá   rå   ræ   rF   )r   rH   r   )r!   r"   s   "€r   r#   rã   à   s<   ø‡ ‚ ÙÑñ á�Kñ ñ ‘3�-Ññ ñ 
‘#�Ñò	 r   )ræ   rá   rF   rå   )
r   r   r   r   r)   rB   rÚ   r   r+   rÛ   rÜ   s   @@r   rÞ   rÞ   à   s    ù‡ € ÷!ó !÷.ð .÷ … r   rÞ   c                   ó€   a a€ ] tR t^òt oV3R lV 3R lltV3R lR ltV3R lR ltV3R lR ltV3R	 ltR
t	Vt
V ;t# )ÚPeerRoutingRulec                ó&   <€ V ^8„  d   QhRS[ RS[/# rà   râ   )r!   r"   s   "€r   r#   ÚPeerRoutingRule.__annotate__÷   s   ø€ ÷ ñ ™vð ©|ñ r   c                ób   <€ \         SV `  V4       W n        VP                  V n        R V n        R # r&   )r3   r)   rá   ÚmatchÚpeerrç   s   &&&€r   r)   ÚPeerRoutingRule.__init__÷   s'   ø€ Ü‰Ñ˜Ô ØŒØ—\‘\ˆŒ
ØˆŽ	r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úoptionsr>   úPeer | Noner�   )r!   r"   s   "€r   r#   rð   ý   s   ø€ ÷ ñ ¡*ð °ñ r   c                óR  € V P                   P                  4        FX  w  r#W!9  d   \        P                  R V4        R# Vf   K*  W,          V8w  g   K9  \        P                  RW!V,          V4        R# 	  V P                  f™   \        V P                  V P                  4      V n        V P                  P                  V P                  4       V P                  P                  '       g   Q hV P                  P                  V P                  P                  R7       V P                  # )z+        rejecting because key %s is missingNz;        rejecting because key %s has wrong value %s (vs %s))rZ   )rò   Úitemsrr   rs   ró   rÞ   r0   rá   rn   Úpeer_closedrZ   r‚   )r(   rö   ÚkeyÚvalues   &&  r   Ú
apply_ruleÚPeerRoutingRule.apply_ruleý   sÙ   € ð Ÿ*™*×*Ñ*Ö,‰JˆCØÔ!Ü—‘ÐJÈCÔPÚØÔ  W¥\°UÖ%:Ü—‘ÐZÐ\_ÐilÕamÐotÔuÚñ -ð �9‰9ÒÜ& t§{¡{°D·K±KÓ@ˆDŒIØ�I‰I×'Ñ'¨×(8Ñ(8Ô9Ø—;‘;×(×(Ð(Ð(Ð(Ø�I‰I×)Ñ)°D·K±K×4IÑ4IÐ)ÔJà�y‰yÐr   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   rð     s   ø€ ÷ ñ ˜Tñ r   c                ó   € R V n         R # r&   )ró   rA   s   &r   rú   ÚPeerRoutingRule.peer_closed  s	   € ØˆŽ	r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   rð     s   ø€ ÷ ñ ˜$ñ r   c                óZ   € V P                   e   V P                   P                  4        R # R # r&   )ró   rd   rA   s   &r   ÚshutdownÚPeerRoutingRule.shutdown  s   € Ø�9‰9Ò Ø�I‰I�O‰OÖñ !r   c                ó<   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   R;R&   # )r   rá   rò   r÷   ró   )r   r   )r!   r"   s   "€r   r#   rð   ò   s(   ø‡ ‚ ÙÑñ áÑñ ð Ñò r   )rá   rò   ró   )r   r   r   r   r)   rý   rú   r  rÚ   r   r+   rÛ   rÜ   s   @@r   rî   rî   ò   s5   ù‡ € ÷
ó ÷ð ÷(ð ÷ð ÷E … r   rî   c                   óf   a € ] tR tRt o . tV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltR	t	V t
R
# )ÚPeersRoutingRulei  c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   rö   r>   zEndpoint | Noner�   )r!   r"   s   "€r   r#   ÚPeersRoutingRule.__annotate__  s   ø€ ÷ 	ñ 	¡*ð 	Ð1Bñ 	r   c                óX  € \         P                  R \        V P                  4      4       V P                   F[  p\         P                  RVP                  P
                  4       VP                  V4      pVf   KD  \         P                  R4       Vu # 	  \         P                  R4       R# )z    considering %d rulesz      considering %sNz        selectedz      no peer rules matched)rr   rs   ÚlenÚrulesrá   Únamerý   )r(   rö   ÚruleÚendpoints   &&  r   rý   ÚPeersRoutingRule.apply_rule  sx   € Ü�‰Ð/´°T·Z±Z³ÔAØ—J”JˆDÜ�L‰LÐ/°·±×1AÑ1AÔBØ—‘ wÓ/ˆHØÔ#Ü—‘Ð/Ô0Ø’ñ ô 	�‰Ð2Ô3Ùr   c                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r   Úbridge_configsr>   N)r   r   )r!   r"   s   "€r   r#   r
  '  s    ø€ ÷ ñ ©(±<Õ*@ð ÀTñ r   c                óˆ  € V P                   p. V n         V F�  pVP                  '       g   R VP                  9   d   K(  \        V4       F'  pVP                  V8X  g   K  VP                  V4        M	  \        V P                  V4      pV P                   P                  V4       K‘  	  V F  pVP                  4        K  	  R# )rl   N)
r  Ú
privilegedrò   Úlistrá   Úremoverî   r0   r‡   r  )r(   r  Ú	old_rulesrá   r  s   &&   r   Úset_configsÚPeersRoutingRule.set_configs'  sœ   € Ø—J‘Jˆ	ØˆŒ
ã$ˆFà× × Ð  F¨f¯l©lÔ$:Ùô ˜Yž�Ø—;‘; &Ö(Ø×$Ñ$ TÔ*Ùñ (ô ' t§{¡{°FÓ;�à�J‰J×Ñ˜dÖ#ñ %ó" ˆDØ�M‰MŽOó r   c                ó   <€ V ^8„  d   QhRR/# r=   r   )r!   r"   s   "€r   r#   r
  ?  s   ø€ ÷ ñ ˜$ñ r   c                óL   € V P                    F  pVP                  4        K  	  R # r&   )r  r  )r(   r  s   & r   r  ÚPeersRoutingRule.shutdown?  s   € Ø—J”JˆDØ�M‰MŽOó r   c                ó$   <€ V ^8„  d   Qh/ R;R&   # )r   zlist[PeerRoutingRule]r  r   )r!   r"   s   "€r   r#   r
    s   ø‡ ‚ Ø"Ñ'ò r   )r  N)r   r   r   r   r  rý   r  r  rÚ   r   r+   r,   s   @r   r  r    s0   ø‡ € Ø%'€E÷	ð 	÷ð ÷0ð ÷M ƒ r   r  )!r5   ÚloggingrS   Útypingr   r   r   Újsonutilr   r   Úpackagesr   Úprotocolr	   r
   r   r0   r   r   r   Ú
transportsr   r   Ú	getLoggerr   rr   r   rc   r   r.   rÞ   rî   r  r   r   r   Ú<module>r&     sŒ   ðó Û Û 	ß *Ñ *ç +Ý "ß KÑ Kß 1Ñ 1ß ?à	×	Ò	˜8Ó	$€ô	�ô 	ô#�ô #ô
@ˆ?Ð.°ô @ôF.�Tô .ô$$�kô $ôN(�{ö (r   