+
    iT  c                   sp   ^ 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 ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHt ^ R
IH t  ^ RI!H"t"H#t# ^ RI$H%t% ^ RI&H't'H(t(H)t) ^ RI*H+t+ ^ RI,H-t-H.t. ^ RI/H0t0H1t1 ^ RI2H3t3 ]Ph                  ! R4      t5R R lt6 ! R R](4      t7RRRRRR/]Pp                  Ct8 ! R R]14      t9 ! R R ]Pt                  4      t;R! R" lt<R# R$ lt=R% R& lt> ! R' R(]+4      t? ! R) R*]04      t@R+ R, ltAR- R. ltB]CR/8X  d
   ]B! 4        R# R# )0i    NPath)DictLiteralOptionalSequence)	polyfills)ferny)
bootloader)BridgeBeibootHelper)parse_os_releasesetup_logging)ChannelRoutingRule)PackagesChannel)
JsonObjectget_str)supported_oses)PackagesPackagesLoaderpatch_libexecdir)Peer)CockpitProblemCockpitProtocolError)RouterRoutingRule)StdioTransportzcockpit.beibootc                s$    V ^8  d   QhR\         /# )   returnr    format   "4/usr/lib/python3.14/site-packages/cockpit/beiboot.py__annotate__r    %   s      d     c                 s   \         P                  P                  \        P                  4      R,          p V P                  4       p\        P                  P                  R4      pVf    \        P                  P                  R4      p\        P                  ! VRR7       \        VR4      p\        P                  RV4        VP                  4       V8w  d   \        P                  R4       \        hVP!                  4       P"                  ^@,          '       g   \        P                  R	4       \        h V#   \$        \        3 d<    \        P                  R
4       TP'                  T4       TP)                  R4        T# i ; i)zCreate askpass executable

We need this for the flatpak: ssh and thus the askpass program run on the host (via flatpak-spawn),
not the flatpak. Thus we cannot use the shipped cockpit-askpass program.
zinteraction_client.pyZXDG_CACHE_HOMEz~/.cacheT)Zexist_okzcockpit-client-askpasszChecking if %s exists...z.  ... it exists but is not the same version...z;  ... it has the correct contents, but is not executable...z  ... writing contents.i  )	importlibZ	resourcesZfilesr   __name__Z
read_bytesosZenvirongetpathZ
expanduserZmakedirsr   loggerdebugZ
ValueErrorZstatZst_modeZFileNotFoundErrorZwrite_bytesZchmod)Zsrc_pathZsrc_dataZxdg_cache_homeZ	dest_paths       r   ensure_ferny_askpassr)   %   s/    ""((8;RRH""$H ZZ^^$45N++J7KK.^%=>I
LL+Y7
!X-LLIJ~~''%//LLVW 0  z* ./h's   AD7 D7 7AFFc                   sP   a  ] tR t^Gt o V 3R lR ltV 3R lR ltV 3R ltRtV tR# )ProxyPackagesLoaderc                s6   < V ^8  d   QhRS[ S[S[3,          /# r   file_statusr   strboolr   __classdict__   "r   r     ProxyPackagesLoader.__annotate__J   s     ' 'DdO 'r!   c                s    Wn         R # Nr,   )selfr,      &&r   __init__ZProxyPackagesLoader.__init__J   s    &r!   c                s&   < V ^8  d   QhRS[ RS[/# )r   r&   r   )r.   r/   r0   r2   r   r    r3   M   s     1 1 1 1r!   c                s:    V P                   P                  VR 4      # )F)r,   r%   )r6   r&   r7   r   path_existsZProxyPackagesLoader.path_existsM   s    ##D%00r!   c                s<   < V ^8  d   Qh/ S[ S[S[3,          ;R&   # r+   r-   r0   r2   r   r    r3   G   s     c4i  r!   r5   N)	r#   
__module____qualname____firstlineno__r8   r9   __annotate_func____static_attributes____classdictcell__r1      @r   r*   r*   G   s      ' '1 1  r!   r*   report_existsz
    import os
    def report_exists(files):
        command('cockpit.report-exists', {name: os.path.exists(name) for name in files})
    check_os_releasez
    import os
    def check_os_release(_argv):
        try:
            with open('/etc/os-release') as f:
                command('cockpit.check-os-release', f.read())
        except OSError:
                command('cockpit.check-os-release', "")
    
force_execz
    import os
    def force_exec(argv):
        try:
            os.execvp(argv[0], argv)
        except OSError as e:
            command('cockpit.fail-no-cockpit', str(e))
    c                   sn   a a ] tR t^lt 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tRtVt	V ;t
# )	DefaultRoutingRulec                s    < V ^8  d   QhRS[ /# r   routerr   r0   r2   r   r    DefaultRoutingRule.__annotate__o   s     ! !v !r!   c                s&   < \         SV `  V4       R # r4   )superr8   )r6   rG   	__class__s   &&r   r8   ZDefaultRoutingRule.__init__o   s     r!   c                $   < V ^8  d   QhRS[ RR/# )r   optionsr   Peer | Noner   r0   r2   r   r    rI   r   s      *  r!   c                s    V P                   # r4   )peer)r6   rM   r7   r   
apply_ruleZDefaultRoutingRule.apply_ruler   s    yyr!   c                   < V ^8  d   QhRR/# r   r   N r0   r2   r   r    rI   u   s      $ r!   c                sZ    V P                   e   V P                   P                  4        R # R # r4   )rP   closer6      &r   shutdownZDefaultRoutingRule.shutdownu   s    99 IIOO !r!   c                $   < V ^8  d   Qh/ R;R&   # )r   rN   rP   rT   r0   r2   r   r    rI   l   s     
 r!   rT   )r#   r:   r;   r<   r8   rQ   rX   r=   r>   r?   __classcell__rK   r1      @@r   rE   rE   l   s*     ! !    r!   rE   c                   sf   a  ] tR t^zt o R
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	# )AuthorizeResponderc                s6   < V ^8  d   QhRS[ RS[S[,          /# )r   rG   basic_password)r   r   r.   r0   r2   r   r    AuthorizeResponder.__annotate__~   s     > >v >x} >r!   c                s0    Wn         W n        VR JV n        R # r4   )rG   r^   have_basic_password)r6   rG   r^   s   &&&r   r8   ZAuthorizeResponder.__init__~   s    ,#1#= r!   c          	      sB   < V ^8  d   QhRS[ RS[ RS[ RS[S[ ,          /# )r   messagesprompthintr   )r.   r   r0   r2   r   r    r_      s4     E E Ec E ERU Er!   c                s  "   \         P                  R W!V4       V P                  '       dO   RVP                  4       9   d:   V P                  e,   \         P                  RV4       V P                  pRV n        V# VR8X  d   R# \
        P                  ! RV4      p\
        P                  ! RV4      p/ pV'       dg   V'       d_   VP                  ^4      pVR8X  d   \         P                  RV4       R	# V R
VP                  ^4       R2VR&   VP                  ^4      VR&   \        P                  ! 4        R\        P                  ! 4        2p	RV	 2p
V
R
,           \        P                  ! VP                  4       4      P                  4       ,           pV P                  P                   ! V3RRRVRVRVRR/VB G Rj  xL
 pVP#                  V
4      '       g   \%        RV RV
 24      hVP'                  V
4      P)                  4       p\        P*                  ! VP                  4       4      P                  4       p\         P                  R\-        V4      4       V#  L5i)z3AuthorizeResponder: prompt %r, messages %r, hint %rz	password:Nz=AuthorizeResponder: sending Basic auth password for prompt %rZnonez&\n(\w+) key fingerprint is:? ([^.\n]+)zauthenticity of host '([^ ]+) z	127.0.0.1z,auto-accepting fingerprint for 127.0.0.1: %sZyes z login-datazhost-keydefault-zX-Conversation Ztimeoutra   rb   rc   ZechoFzAuthorizeResponder: response z does not match challenge zReturning a %d chars response)r'   r(   r`   Zlowerr^   reZsearchZgroupr$   Zgetpidtimebase64Z	b64encodeencodedecoderG   Zrequest_authorization
startswithr   ZremoveprefixZstrip	b64decodeZlen)r6   ra   rb   rc   ZreplyZfp_matchZ
host_matchargsZhostnameZchallenge_idZchallenge_prefix	challengeresponseZb64s   &&&&          r   
do_askpassZAuthorizeResponder.do_askpass   s@    JF^bc###v||~(E "".\^de++&*#6>  99FOYY@&I

!''*H;&KZX
 #+1X^^A->,?{KD&nnQ/DO))+a		}5,\N;$s*V-=-=fmmo-N-U-U-WW	::9 CCGCDLC CIC AE	C
 AFC >BC C ""#344&/z9STdSefh h##$45;;=##CJJL188:4c(mDCs&   B8I;IC:I=I>IBIc          
      sF   < V ^8  d   QhRS[ RS[RS[S[,          RS[ RR/# )r   commandrn   fdsstderrr   N)r.   tuplelistZintr0   r2   r   r    r_      s=     %H %Hs %H% %Hd3i %HY\ %Hae %Hr!   c                sP  a"   \         P                  R WV4       VR8X  dh   Vw  p\        \        V4      R7      V P                  n        V P                  P                  P                  ^ \        V P                  \        .4      4       VR8X  d   \        RV^ ,          R7      hVR8X  Ed   \        V^ ,          4      o\         P                  RS4       \         P                  R\        4       \         Fx  p\        ;QJ d-    V3R	 lVP                  4        4       F  '       d   K   R
M"	  RM! V3R	 lVP                  4        4       4      '       g   Ka  \         P                  RV4        R# 	  \         P                  RS4        \        R4      ;_uu_ 4       p\        VP!                  4       4      pRRR4       SP'                  R4      XP'                  R4      8X  d>   SP'                  R4      TP'                  R4      8X  d   \         P                  RT4       R# SP'                  RSP'                  RR4      4       RSP'                  RR4       2p
\        RT
R7      hR#   + '       g   i     L; i  \"         d"   p	\         P%                  RT	4        Rp	?	R# Rp	?	ii ; i5i)zGot ferny command %s %s %scockpit.report-exists)Zloadercockpit.fail-no-cockpitz
no-cockpit)messagecockpit.check-os-releasez'cockpit.check-os-release: remote OS: %rz,cockpit.check-os-release: supported OSes: %rc              3   sP   <"   T F  w  rSP                  V4      V8H  x  K  	  R # 5ir4   )r%   ).0ZkZv	remote_oss   &  r   	<genexpr>Z7AuthorizeResponder.do_custom_command.<locals>.<genexpr>   s!     Hy}}Q'1,s   #&FTz8cockpit.check-os-release: remote matches supported OS %rNz$cockpit.check-os-release: remote: %rz/etc/os-releasezIfailed to read local /etc/os-release, skipping OS compatibility check: %sZIDZ
VERSION_IDz7cockpit.check-os-release: remote OS matches local OS %rZNAMEZ?rd   Z )unsupported)r'   r(   r   r*   rG   packagesZrouting_rulesZinsertr   r   r   r
   r   ZallZitemsZopenZreadOSErrorZwarningr%   )r6   rr   rn   rs   rt   r,   ZosinfoZfZthis_osZer~   r|   s   &&&&&      @r   do_custom_commandZ$AuthorizeResponder.do_custom_command   s    17&I--LK#+3F{3S#TDKK KK%%,,Q0B4;;Q`Pa0bc// tAw??00(a1ILLBINLLGX(3HH333HHHHLL![]cd	 ) LL?K+,,.qvvx8G - }}T"gkk$&77IMM,<W[b[f[fgs[t<tVX_`&]]69==s3KLMQy}}]ikmOnNopK ;GG3 1 -, jlmnsa   D!J&')J&1J&I7 I$4I7 <B(J&$I4	/I7 3J&4I7 7J#JJ&J##J&c                s&   < V ^8  d   Qh/ S[ ;R&   # rF   rH   r0   r2   r   r    r_   z   s     N r!   )r^   r`   rG   N)zferny.askpassrw   rx   rz   )r#   r:   r;   r<   Zcommandsr8   rq   r   r=   r>   r?   r@   rA   r   r]   r]   z   s5     pH> >
E EN%H %Ha  r!   r]   c                s~    V ^8  d   QhR\         R\        \        \         ,          \        \         ,          3,          /# )r   commentr   )r.   ru   r   r   r   r   r    r       s,     2 2 2hsmXc].J(K 2r!   c                 s    R RRV  23R3# )Zpython3z-icz# rT   rT   )r   rW   r   python_interpreterr      s    u7)n-r11r!   c                s    V ^8  d   QhR\         \        ,          R\        R\        R\        R\        \         \        ,          \         \        ,          3,          /# )r   cmddestssh_askpassssh_optsr   )r   r.   r   ru   r   r   r   r    r       sL      # c   QVW_`cWdfnorfsWsQt r!   c                 sN   VP                  R 4      w  rEpVP                  4       '       dR   VP                  R 4      '       g;   VP                  R4      '       d   VP                  R4      '       d   V^R	 pRVRV.pMRV.pR.VOVO\        P
                  ! V 4      N5RV: 2RR33# )
:Z[Z]z-pz--ZsshzSSH_ASKPASS=z	DISPLAY=xzSSH_ASKPASS_REQUIRE=forcei)Z
rpartitionZisdigitZendswithrl   shlexZjoin)r   r   r   r   Zhost_Zportdestinations   &&&*    r   via_sshr      s    OOC(MDT||~~dmmC00??3DMM#$6$6":DT4.Tl 	&(-

3 {o& 	# r!   c          	      s    V ^8  d   QhR\         \        ,          R\         \        ,          R\        \         \        ,          \         \        ,          3,          /# )r   r   envr   )r   r.   ru   r   r   r   r    r      s>      x} 8C= U8C=RZ[^R_C_=` r!   c                 s&    R R.R V 4       OV O5R3# )zflatpak-spawnz--hostc              3   s,   "   T F
  pR V 2x  K  	  R# 5i)z--env=NrT   )r{   Zkvs   & r   r}   Z flatpak_spawn.<locals>.<genexpr>  s     	&#BF2$-#s   rT   rT   )r   r   r7   r   flatpak_spawnr     s2    	&#	& 
	 r!   c                   s   a a ] tR tR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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# )SshPeeri  c                s@   < V ^8  d   QhRS[ RS[RS[P                  /# )r   rG   r   rn   )r   r.   argparse	Namespacer0   r2   r   r    SshPeer.__annotate__  s(     ! !v !C !x?Q?Q !r!   c                s   < W n         VP                  V n        \        P                  ! 4       V n        \        V P                  P                  4      R ,          V n        RV n        \        SV `)  V4       R# )zuser-known-hostsN)r   remote_bridgetempfileZTemporaryDirectorytmpdirr   Znameknown_hosts_filer^   rJ   r8   )r6   rG   r   rn   rK   s   &&&&r   r8   ZSshPeer.__init__  sY    &!//113 $T[[%5%5 69K K,0 r!   c                rR   rS   rT   r0   r2   r   r    r      s     3 3D 3r!   c                s   "   \         P                  P                  R 4      '       d   V P                  4       G Rj  xL
  R# V P	                  4       G Rj  xL
  R#  L  L5i)z/.flatpak-infoN)r$   r&   existsconnect_from_flatpakconnect_from_bastion_hostrV   rW   r   do_connect_transportZSshPeer.do_connect_transport   sE     77>>*++++---00222 .2s!   9A AA AA A c                rR   rS   rT   r0   r2   r   r    r   '  s     " "D "r!   c                s   "   \        R 4      w  rV P                  R8w  d!   \        WP                  \        4       4      w  r\	        W4      w  rV P                  W4      G Rj  xL
  R#  L5i)cockpit-bridgeZ	localhostN)r   r   r   r)   r   boot)r6   r   r   s   &  r   r   ZSshPeer.connect_from_flatpak'  sX     %&67 {*s$4$46J6LMHC *ii!!!s   A A+"A)#A+c                rR   rS   rT   r0   r2   r   r    r   4  s     '" '" '"r!   c                s  "   R pRR.pV P                   P                  R4      G R j  xL
 p\        VR4      pVP                  R4      '       d   \        P
                  ! VR,          4      P                  4       pVP                  R4      w  rgpVP                  R4      w  rV n        V'       d"   \        P                  R	V4       VR
V.,          pV P                  f   VRR.,          p\        R4      w  r\        R4      p\        V4      pVP                  4       '       g   \        P                  RV4       \         P"                  ! R4      pVe   VRRV 2.,          pVe5   V P$                  P'                  V4       VRRV P$                  : 2.,          p\)        WP*                  V.VO5!  w  rV P-                  W4      G R j  xL
  R #  EL L	5i)Nz-ozNumberOfPasswordPrompts=1Z*rp   zBasic :i   NNZ r   z,got username %s and password from Basic authz-lzPasswordAuthentication=nor   z${libexecdir}/cockpit-askpassz+Could not find cockpit-askpass helper at %rZCOCKPIT_SSH_KNOWN_HOSTS_FILEzGlobalKnownHostsFile=zUserKnownHostsfile=)rG   Zrequest_authorization_objectr   rl   ri   rm   rk   Z	partitionr^   r'   r(   r   r   r   r   errorr$   Zgetenvr   Z
write_textr   r   r   )r6   known_hostsrn   Zauthrp   ZdecodedZuser_passwordr   Zuserr   r   Zaskpassr   Zenv_known_hostss   &             r   r   Z!SshPeer.connect_from_bastion_host4  s    12 [[==cBB4,x((&&x|4;;=G,3,=,=d,C)Mk+8+B+B3+G(DT(KTRt$&T677D &&67 ##BC7m!!##LLFP))$BC&T2?2CDEED"!!,,[9T01F1F0IJKKD3 0 0+EEii!!!C CB 	"s"   %GGFGGGGc                sJ   < V ^8  d   QhRS[ S[,          RS[ S[,          RR/# )r   r   r   r   N)r   r.   r0   r2   r   r    r   ]  s*     " "hsm "(3- "D "r!   c                s  "   \        V 4      p\        P                  ! \        V P                  V P
                  4      V.4      p\        P                  R W4       V P                  WVRR7      G Rj  xL
 pV P                  R8X  d	   RR.33.pM8V P                  R8X  d	   RR.33.pMV P                  R	8X  d   RR.33R
. 33.pM. p\        P                  ! . VOR\        \        P                  ! 4       4      .3NVP                  O\         R7      pVP#                  VP%                  4       4       VP'                  4       G Rj  xL
  R#  L L5i)z Launching command: cmd=%s env=%sT)rt   Zstart_new_sessionNautoZtry_execr   alwaysrD   	supportedrC   rB   )Zgadgets)r	   r   ZInteractionAgentr]   rG   r^   r'   r(   Zspawnr   r   Zmake_bootloaderrv   r   Zget_condition_filesZstepsBEIBOOT_GADGETSZwriterj   communicate)r6   r   r   Zbeiboot_helperZagentZ	transportZexec_cockpit_bridge_stepsZstage1s   &&&     r   r   ZSshPeer.boot]  s_    ,T2&&(:4;;H[H[(\^l'mn7B**Set*TT	'*48H7I6K)L(M%8+*6:J9K8M)N(O%;.*48H7I6K)LOadfchNi(j% )+% ++ -
&-
tN$F$F$HIJK-
 !!-
 #	$
 	( !!!- U, 	"s%   A/E1E2CEEEEc                rR   rS   rT   r0   r2   r   r    r   z  s     # # #r!   c                s    R V n         R # r4   )r^   rV   rW   r   do_superuser_init_doneZSshPeer.do_superuser_init_donez  s
    "r!   c                rL   )r   ry   r   NrO   r0   r2   r   r    r   }  s     e eJ e4 er!   c                s   \         P                  R WP                  RJ4       \        VR4      P	                  R4      '       dV   \        VR4      pV P                  e<   \         P                  R4       V P                  RW P                  R7       RV n        R# \         P                  R4       V P                  RXR	R
7       R# )z*SshPeer.do_authorize: %r; have password %sNro   zplain1:cookiez-SshPeer.do_authorize: responded with password	authorize)rr   r   rp   z0SshPeer.do_authorize: authentication-unavailablezauthentication-unavailable)rr   r   problem)r'   r(   r^   r   rl   write_control)r6   ry   r   s   && r   do_authorizeZSshPeer.do_authorize}  s    A7L_L_gkLkl7K(33I>>Wh/F"".LM"";vPcPc"d&*#GH;vGcdr!   c                rY   )r   zMLiteral["always"] | Literal["never"] | Literal["supported"] | Literal["auto"]ZmoderT   r0   r2   r   r    r     s     
YY r!   )r^   r   r   r   r   )r#   r:   r;   r<   r8   r   r   r   r   r   r   r=   r>   r?   rZ   r[   r\   r   r   r     sV     ! !3 3" "'" '"R" ":# #e eQ  r!   r   c                   sx   a a ] tR tRt oRtV3R lV 3R lltV3R lR ltR tV3R lR	 ltV3R
 lt	Rt
VtV ;t# )	SshBridgei  Nc                s4   < V ^8  d   QhRS[ P                  /# )r   rn   )r   r   r0   r2   r   r    SshBridge.__annotate__  s     	" 	"X// 	"r!   c                s   < \        V 4      p\        SV `	  V.4       \        WP                  V4      V n        V P
                  Vn        R # r4   )rE   rJ   r8   r   r   ssh_peerrP   )r6   rn   ZrulerK   s   && r   r8   ZSshBridge.__init__  s?     "$'$   &6&6=MM	r!   c                rR   rS   rT   r0   r2   r   r    r     s      d r!   c                s    R # r4   rT   rV   rW   r   do_send_initZSshBridge.do_send_init  s    r!   c                sh    \         P                  R V4       V P                  P                  V4       R# )zSshBridge.do_init: %rN)r'   r(   r   r   )r6   ry   r7   r   do_initZSshBridge.do_init  s%     	,g6##G,r!   c                rR   rS   rT   r0   r2   r   r    r     s     4 4t 4r!   c                sP    V P                   P                  V P                  4       R # r4   )r   Zadd_done_callbackrU   rV   rW   r   setup_sessionZSshBridge.setup_session  s    ''

3r!   c                sB   < V ^8  d   Qh/ S[ S[,          ;R&   S[;R&   # )r   r   r   )r   r   r   r0   r2   r   r    r     s      x '  r!   )r   )r#   r:   r;   r<   r   r8   r   r   r   r=   r>   r?   rZ   r[   r\   r   r   r     s4     #'H	" 	" -4 41  r!   r   c                    V ^8  d   QhRR/# rS   rT   r   r   r   r    r      s     D Dt Dr!   c                 s  "   \         P                  R 4       \        V 4      p\        \        P
                  ! 4       V4        \        VP                  P                  4       G Rj  xL
 4      pVP                  P                  P                  4       '       d:   VP                  RRRRVP                  P                  P                  4       /R7       VP                  R/ 4      p\        V\        4      '       g   VP                  RR	R
R7       R# RVR&   VP                  '       d-   \        P!                  VP                  P                  4      VR&   VP                  V4       VP                  P#                  4        \         P                  R4       TP?                  4         TPA                  4       G Rj  xL
  R#  ELX  \$        P&                   Edy   p\$        P(                  P+                  \-        T4      4      p\         P                  RYE4       \        T\$        P.                  4      '       d   RpM\        T\$        P0                  4      '       d   RpMa\        T\$        P2                  4      '       d   RpM>\        T\4        4      '       d   RpM%\        T\$        P6                  4      '       d   RpMRpTP                  P                  P                  4       '       dB   TP                  RT\-        T4      TP                  P                  P                  4       R7       MTP                  RT\-        T4      R7        Rp?R# Rp?i\8         d?   p\         P                  RT4       TP                  TP:                  RR7        Rp?R# Rp?i\        P<                   d    \         P                  R4        R# i ; i EL  \B         d     R# i ; i5i)zHi. How are you today?Nr   zx-login-datarf   zknown-hosts)rr   ro   r   Z
login_datacapabilitiesZinitzprotocol-errorzcapabilities must be a dict)rr   r   ry   Tzexplicit-superuserr   z.ferny.InteractionError: %s, interpreted as: %rzauthentication-failedzinvalid-hostkeyzunknown-hostkeyzunknown-hostzinternal-error)rr   r   ry   r   zCockpitProblem: %s)rr   z"Peer bridge got cancelled, exitingz/Startup done.  Looping until connection closes.)"r'   r(   r   r   asyncioZget_running_loopZdictr   Zstartr   r   r   Z	read_textZ
setdefaultZ
isinstancer   ZfromkeysZthaw_endpointr   ZInteractionErrorZ
ssh_errorsZget_exception_for_ssh_stderrr.   ZSshAuthenticationErrorZSshChangedHostKeyErrorZSshHostKeyErrorr   ZSshErrorr   ZattrsZCancelledErrorr   r   ZBrokenPipeError)rn   Zbridgery   r   Zexcr   r   s   &      r   runr     s    
LL)*t_F7++-v66V__22445??++2244  #~c!6??#C#C#M#M#OW !  ))."=,--  9ISp q-1)* ???"&--0H0H"IGJW%%%'@ LLBC
  """u 50 !!   ==c#hGEsReU99::-Gu;;<<'Gu4455'Gw''$Gu~~..-G&G??++2244  #e*-3__-M-M-W-W-Y ! [   #e* U )3/SYY7!! 9: 	# s   A O"G  %F=&1G  A5G  OG  &AG  =%O#O 6O7O ;O=G   ODM	%AM	O	OO3N
OO'O=O OOO OOOOc                r   rS   rT   r   r   r   r    r      s     - -d -r!   c                  sz   \         P                  ! 4        \        P                  ! R R7      p V P	                  R. RORRR7       V P	                  RRR7       V P	                  R	R
R7       V P                  4       p\        VP                  R7       \        P                  ! \        V4      VP                  R7       R# )z@cockpit-bridge is run automatically inside of a Cockpit session.)Zdescriptionz--remote-bridger   zHow to run cockpit-bridge from the remote host: auto: if installed (default), never: always copy the local one; supported: if not installed, copy local one for compatible OSes, fail otherwise; always: fail if not installed)Zchoicesre   helpz--debugZ
store_true)Zactionr   z5Name of the remote host to connect to, or 'localhost')r   )r(   N)r   Zneverr   r   )
r   Zinstallr   ZArgumentParserZadd_argumentZ
parse_argsr   r(   r   r   )Zparserrn   s     r   mainr     s    $$1stF
)3[ek8  9
 	,7
,cdD

#KKD	,r!   Z__main__)Dr   r   ri   Zimportlib.resourcesr"   Zloggingr$   rg   r   r   rh   Zpathlibr   Ztypingr   r   r   r   Zcockpitr   Zcockpit._vendorr   Zcockpit._vendor.beir   Zcockpit.beipackr	   Zcockpit.bridger
   r   Zcockpit.channelr   Zcockpit.channels.packagesr   Zcockpit.jsonutilr   r   Zcockpit.osinfor   Zcockpit.packagesr   r   r   Zcockpit.peerr   Zcockpit.protocolr   r   Zcockpit.routerr   r   Zcockpit.transportsr   Z	getLoggerr'   r)   r*   r   rE   ZAskpassHandlerr]   r   r   r   r   r   r   r   r#   rT   r!   r   <module>r      s"        	 	     4 4  ! * / : . 5 0 ) G G  A . -			,	-D1. 1  
    . /6 uH-- uHp2,sed sel4 4:DN-$ zF r!   