Ë
    zñ�jú^  ã                   óÒ   — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ d	„ Z G d
„ de«      Zd„ Z G d„ d«      Zy)z
Packet handling
é    N)ÚHMAC)Úutil)Úlinefeed_byteÚcr_byte_valueÚ	MSG_NAMESÚDEBUGÚ	xffffffffÚ	zero_byteÚbyte_ord)Úu)ÚSSHExceptionÚProxyCommandFailure)ÚMessagec                 ó8   — t        | ||«      j                  «       S ©N)r   Údigest)ÚkeyÚmessageÚdigest_classs      úP/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/paramiko/packet.pyÚcompute_hmacr   .   s   € Ü��W˜lÓ+×2Ñ2Ó4Ð4ó    c                   ó   — e Zd ZdZy)ÚNeedRekeyExceptionz1
    Exception indicating a rekey is needed.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   r   r   2   s   „ ñð 	r   r   c                 óŽ   — d }t        | j                  «      t        u r't        | j                  «      dkD  r| j                  d   }|S ©Nr   )ÚtypeÚargsÚtupleÚlen)ÚeÚargs     r   Ú	first_argr(   :   s7   € Ø
€CÜˆA�F‰Fƒ|”uÑ¤ Q§V¡V£¨q¢Ø�f‰f�Q‰iˆØ€Jr   c                   ó0  — e Zd ZdZ edd«      Z edd«      Z edd«      Z edd«      Zd„ Z	e
d„ «       Zd„ Zd„ Zd„ Z	 	 	 	 d$d
„Z	 	 	 d%d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd&d„Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d „ Z%d!„ Z&d"„ Z'd#„ Z(y	)'Ú
Packetizerz9
    Implementation of the base SSH packet protocol.
    é   é   c                 óÈ  — || _         d | _        d| _        d| _        d| _        d| _        t        «       | _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d | _        d| _        d | _        d | _        t        «       | _        t        «       | _        d | _        d | _        d| _        d| _        d| _        d| _        d| _         d| _!        d | _"        d | _#        tI        jJ                  «       | _&        d| _'        tQ        jP                  «       | _)        d | _*        d | _+        d| _,        d| _-        y )NFr   é   ).Ú_Packetizer__socketÚ_Packetizer__loggerÚ_Packetizer__closedÚ_Packetizer__dump_packetsÚ_Packetizer__need_rekeyÚ_Packetizer__init_countÚbytesÚ_Packetizer__remainderÚ_initial_kex_doneÚ_Packetizer__sent_bytesÚ_Packetizer__sent_packetsÚ_Packetizer__received_bytesÚ_Packetizer__received_packetsÚ$_Packetizer__received_bytes_overflowÚ&_Packetizer__received_packets_overflowÚ_Packetizer__block_size_outÚ_Packetizer__block_size_inÚ_Packetizer__mac_size_outÚ_Packetizer__mac_size_inÚ_Packetizer__block_engine_outÚ_Packetizer__block_engine_inÚ_Packetizer__sdctr_outÚ_Packetizer__mac_engine_outÚ_Packetizer__mac_engine_inÚ_Packetizer__mac_key_outÚ_Packetizer__mac_key_inÚ _Packetizer__compress_engine_outÚ_Packetizer__compress_engine_inÚ _Packetizer__sequence_number_outÚ_Packetizer__sequence_number_inÚ_Packetizer__etm_outÚ_Packetizer__etm_inÚ_Packetizer__aead_outÚ_Packetizer__aead_inÚ_Packetizer__iv_outÚ_Packetizer__iv_inÚ	threadingÚRLockÚ_Packetizer__write_lockÚ_Packetizer__keepalive_intervalÚtimeÚ_Packetizer__keepalive_lastÚ_Packetizer__keepalive_callbackÚ_Packetizer__timerÚ_Packetizer__handshake_completeÚ_Packetizer__timer_expired)ÚselfÚsockets     r   Ú__init__zPacketizer.__init__Q   se  € ØˆŒØˆŒØˆŒØ#ˆÔØ!ˆÔØˆÔÜ ›7ˆÔØ!&ˆÔð ˆÔØˆÔØ !ˆÔØ"#ˆÔØ)*ˆÔ&Ø+,ˆÔ(ð !"ˆÔØ ˆÔØˆÔØˆÔØ"&ˆÔØ!%ˆÔØ ˆÔØ $ˆÔØ#ˆÔÜ"›WˆÔÜ!›GˆÔØ%)ˆÔ"Ø$(ˆÔ!Ø%&ˆÔ"Ø$%ˆÔ!ØˆŒØˆŒð  ˆŒØˆŒØˆŒØˆŒô &ŸO™OÓ-ˆÔð %&ˆÔ!Ü $§	¡	£ˆÔØ$(ˆÔ!àˆŒØ$)ˆÔ!Ø$ˆÕr   c                 ó   — | j                   S r   )r1   ©r]   s    r   ÚclosedzPacketizer.closedˆ   s   € à�}‰}Ðr   c                 ó   — d| _         y r!   )rK   ra   s    r   Úreset_seqno_outzPacketizer.reset_seqno_outŒ   s
   € Ø%&ˆÕ"r   c                 ó   — d| _         y r!   )rL   ra   s    r   Úreset_seqno_inzPacketizer.reset_seqno_in�   s
   € Ø$%ˆÕ!r   c                 ó   — || _         y)z?
        Set the Python log object to use for logging.
        N)r0   )r]   Úlogs     r   Úset_logzPacketizer.set_log’   s   € ð ˆ�r   Nc
                 ó  — || _         || _        || _        || _        || _        || _        d| _        d| _        || _        || _	        |	| _
        | xj                  dz  c_        | j                  dk(  rd| _        d| _        yy)zd
        Switch outbound data cipher.
        :param etm: Set encrypt-then-mac from OpenSSH
        r   é   é   FN)rB   rD   r>   rE   r@   rG   r8   r9   rM   rO   rQ   r4   r3   )
r]   Úblock_engineÚ
block_sizeÚ
mac_engineÚmac_sizeÚmac_keyÚsdctrÚetmÚaeadÚiv_outs
             r   Úset_outbound_cipherzPacketizer.set_outbound_cipher˜   s�   € ð  #/ˆÔØ ˆÔØ *ˆÔØ *ˆÔØ&ˆÔØ$ˆÔØˆÔØˆÔØˆŒØˆŒØˆŒð 	×Ò˜QÑÕØ×Ñ Ò!Ø !ˆDÔØ %ˆDÕð "r   c	                 ó  — || _         || _        || _        || _        || _        d| _        d| _        d| _        d| _        || _	        || _
        || _        | xj                  dz  c_        | j                  dk(  rd| _        d| _        yy)zc
        Switch inbound data cipher.
        :param etm: Set encrypt-then-mac from OpenSSH
        r   r+   rl   FN)rC   r?   rF   rA   rH   r:   r;   r<   r=   rN   rP   rR   r4   r3   )	r]   rm   rn   ro   rp   rq   rs   rt   Úiv_ins	            r   Úset_inbound_cipherzPacketizer.set_inbound_cipherº   s—   € ð ".ˆÔØ)ˆÔØ)ˆÔØ%ˆÔØ#ˆÔØ !ˆÔØ"#ˆÔØ)*ˆÔ&Ø+,ˆÔ(ØˆŒØˆŒØˆŒð 	×Ò˜QÑÕØ×Ñ Ò!Ø !ˆDÔØ %ˆDÕð "r   c                 ó   — || _         y r   )rI   ©r]   Ú
compressors     r   Úset_outbound_compressorz"Packetizer.set_outbound_compressorÜ   s
   € Ø%/ˆÕ"r   c                 ó   — || _         y r   )rJ   r{   s     r   Úset_inbound_compressorz!Packetizer.set_inbound_compressorß   s
   € Ø$.ˆÕ!r   c                 óF   — d| _         | j                  j                  «        y ©NT)r1   r/   Úclosera   s    r   r‚   zPacketizer.closeâ   s   € ØˆŒØ�‰×ÑÕr   c                 ó   — || _         y r   ©r2   )r]   Úhexdumps     r   Úset_hexdumpzPacketizer.set_hexdumpæ   s
   € Ø%ˆÕr   c                 ó   — | j                   S r   r„   ra   s    r   Úget_hexdumpzPacketizer.get_hexdumpé   ó   € Ø×"Ñ"Ð"r   c                 ó   — | j                   S r   )rA   ra   s    r   Úget_mac_size_inzPacketizer.get_mac_size_inì   s   € Ø×!Ñ!Ð!r   c                 ó   — | j                   S r   )r@   ra   s    r   Úget_mac_size_outzPacketizer.get_mac_size_outï   r‰   r   c                 ó   — | j                   S )zæ
        Returns ``True`` if a new set of keys needs to be negotiated.  This
        will be triggered during a packet read or write, so it should be
        checked after every read or write, or at least after every few.
        ©r3   ra   s    r   Ú
need_rekeyzPacketizer.need_rekeyò   s   € ð × Ñ Ð r   c                 óR   — || _         || _        t        j                  «       | _        y)zÏ
        Turn on/off the callback keepalive.  If ``interval`` seconds pass with
        no data read from or written to the socket, the callback will be
        executed and the timer will be reset.
        N)rV   rY   rW   rX   )r]   ÚintervalÚcallbacks      r   Úset_keepalivezPacketizer.set_keepaliveú   s"   € ð %-ˆÔ!Ø$,ˆÔ!Ü $§	¡	£ˆÕr   c                 ó   — d| _         y r�   )r\   ra   s    r   Ú
read_timerzPacketizer.read_timer  s
   € Ø#ˆÕr   c                 ó®   — | j                   sIt        j                  t        |«      | j                  «      | _         | j                   j                  «        yy)zó
        Tells `Packetizer` that the handshake process started.
        Starts a book keeping timer that can signal a timeout in the
        handshake process.

        :param float timeout: amount of seconds to wait before timing out
        N)rZ   rS   ÚTimerÚfloatr–   Ústart)r]   Útimeouts     r   Ústart_handshakezPacketizer.start_handshake  s:   € ð �|Š|Ü$Ÿ?™?¬5°«>¸4¿?¹?ÓKˆDŒLØ�L‰L×ÑÕ ð r   c                 óN   — | j                   sy| j                  ry| j                  S )aR  
        Checks if the handshake has timed out.

        If `start_handshake` wasn't called before the call to this function,
        the return value will always be `False`. If the handshake completed
        before a timeout was reached, the return value will be `False`

        :return: handshake time out status, as a `bool`
        F)rZ   r[   r\   ra   s    r   Úhandshake_timed_outzPacketizer.handshake_timed_out  s&   € ð �|Š|ØØ×$Ò$ØØ×#Ñ#Ð#r   c                 ón   — | j                   r)| j                   j                  «        d| _        d| _        yy)zF
        Tells `Packetizer` that the handshake has completed.
        FTN)rZ   Úcancelr\   r[   ra   s    r   Úcomplete_handshakezPacketizer.complete_handshake#  s0   € ð �<Š<Ø�L‰L×ÑÔ!Ø#(ˆDÔ Ø(,ˆDÕ%ð r   c                 ó   — t        «       }t        | j                  «      dkD  r1| j                  d| }| j                  |d | _        |t        |«      z  }|dkD  r·d}| j                  «       r
t	        «       ‚	 | j
                  j                  |«      }t        |«      dk(  r
t	        «       ‚||z  }|t        |«      z  }|rL| j                  r
t	        «       ‚|r$t        |«      dk(  r| j                  r
t        «       ‚| j!                  «        |dkD  rŒ·|S # t        j                  $ r d}Y Œmt        j                  $ rB}t        |«      }|t        j                  k(  rd}n| j                  r
t	        «       ‚‚ Y d}~Œ¼d}~ww xY w)a&  
        Read as close to N bytes as possible, blocking as long as necessary.

        :param int n: number of bytes to read
        :return: the data read, as a `str`

        :raises:
            ``EOFError`` -- if the socket was closed before all the bytes could
            be read
        r   NFT)r5   r%   r6   rž   ÚEOFErrorr/   Úrecvr^   r›   Úerrorr(   ÚerrnoÚEAGAINr1   r3   r   Ú_check_keepalive)r]   ÚnÚcheck_rekeyÚoutÚgot_timeoutÚxr&   r'   s           r   Úread_allzPacketizer.read_all,  s\  € ô ‹gˆäˆt×ÑÓ  1Ò$Ø×"Ñ" 2 AÐ&ˆCØ#×/Ñ/°°Ð3ˆDÔØ”�S“‰MˆAØ�!ŠeØˆKØ×'Ñ'Ô)Ü“jÐ ðØ—M‘M×&Ñ& qÓ)�Ü�q“6˜Q’;Ü"›*Ð$Ø�q‘�Ø”S˜“V‘�ñ Ø—=’=Ü"›*Ð$Ù¤C¨£H°¢M°t×7HÒ7HÜ,Ó.Ð.Ø×%Ñ%Ô'ð9 �!‹eð: ˆ
øô' —>‘>ò #Ø"’Ü—<‘<ò 
ô   “l�Øœ%Ÿ,™,Ò&Ø"&‘KØ—]’]Ü"›*Ð$àô	  ûð
ús   Á6AD ÄE=Ä)E=Ä;8E8Å8E=c                 ó  — t        j                   «       | _        d}t        |«      dkD  rud}	 | j                  j	                  |«      }|rd}| j                  rd}ndk(  r|dkD  rd}|dz  }|dk  r
t        «       ‚|t        |«      k(  r	 y ||d  }t        |«      dkD  rŒuy # t
        j                  $ r d}Y Œot
        j                  $ r-}t        |«      }|t        j                  k(  rd}nd}Y d }~Œ©d }~wt        $ r ‚ t        $ r d}Y ŒÂw xY w)Nr   FTéÿÿÿÿé
   rk   )rW   rX   r%   r/   Úsendr^   r›   r¥   r(   r¦   r§   r   Ú	Exceptionr1   r£   )r]   r«   Ú#iteration_with_zero_as_return_valueÚretry_writer©   r&   r'   s          r   Ú	write_allzPacketizer.write_all\  s  € Ü $§	¡	£ˆÔØ./Ð+Ü�#‹h˜ŠlØˆKðØ—M‘M×&Ñ& sÓ+�ñ Ø�Ø—=’=Ø‘Aà˜’6ÐAÀBÒFð �AØ3°qÑ8Ð3Ø�1ŠuÜ“jÐ Ø”C˜“HŠ}Øàð �a�b�'ˆCôE �#‹h˜‹lðF 	øô? —>‘>ò #Ø"’Ü—<‘<ò Ü “l�Øœ%Ÿ,™,Ò&Ø"&‘Kà�AÿøÜ&ò ØÜò à’ðús#   ­B  Â DÂ7DÃ	#C1Ã1DÄ
Dc                 ó  — | j                   }t        |vr|| j                  |«      z  }t        |vrŒ|j                  t        «      }||dz   d | _         |d| }t	        |«      dkD  r|d   t
        k(  r|dd }t        |«      S )z‰
        Read a line from the socket.  We assume no data is pending after the
        line, so it's okay to attempt large reads.
        rk   Nr   r°   )r6   r   Ú_read_timeoutÚindexr%   r   r   )r]   r›   Úbufr©   s       r   ÚreadlinezPacketizer.readline„  s‹   € ð
 ×ÑˆÜ 3Ñ&Ø�4×%Ñ% gÓ.Ñ.ˆCô  3Ò&à�I‰I”mÓ$ˆØ˜q 1™u˜w˜<ˆÔØ�"�1ˆgˆÜ�‹H�qŠL˜s 2™w¬-Ò7Ø�c�r�(ˆCÜ�‹vˆr   c                 óz   — |dd  }t         j                  |d«      }|dz   }|j                  dd«      }|dd |z   }|S )Né   Úbigrk   r.   r   )ÚintÚ
from_bytesÚto_bytes)r]   ÚivÚiv_counter_bÚ
iv_counterÚinc_iv_counterÚinc_iv_counter_bÚnew_ivs          r   Ú_inc_iv_counterzPacketizer._inc_iv_counter“  sQ   € ð ˜!˜"�vˆÜ—^‘^ L°%Ó8ˆ
Ø# a™ˆØ)×2Ñ2°1°eÓ<Ðà�A�a�Ð+Ñ+ˆØˆr   c                 óø  — |j                  «       }t        |d   «      }|t        v r
t        |   }ndj                  |«      }t	        |«      }| j
                  j                  «        	 | j                  �| j                  |«      }| j                  |«      }| j                  rP| j                  t        dj                  ||«      «       | j                  t        t        j                  |d«      «       | j                  �­| j                  r%|dd | j                  j!                  |dd «      z   }n~| j"                  rT|dd | j                  j%                  | j&                  |dd |dd «      z   }| j)                  | j&                  «      | _        n| j                  j!                  |«      }n|}| j                  �p| j"                  sdt+        j,                  d| j.                  «      }|| j                  r|n|z   }|t1        | j2                  || j4                  «      d| j6                   z  }| j.                  dz   t8        z  }	|	dk(  r| j:                  st=        d	«      ‚|	| _        | j?                  |«       | xj@                  t	        |«      z  c_         | xjB                  dz  c_!        | jB                  | jD                  k\  xs | j@                  | jF                  k\  }
|
rf| jH                  sZd
}| j                  t        |j                  | jB                  | j@                  «      «       d| _%        d| _&        | jO                  «        | j
                  jQ                  «        y# | j
                  jQ                  «        w xY w)zR
        Write a block of data using the current cipher, as an SSH block.
        r   ú${:x}NzWrite packet <{}>, length {}zOUT: r½   ú>Irk   ú/Sequence number rolled over during initial kex!z(Rekeying (hit {} packets, {} bytes sent)))Úasbytesr   r   Úformatr%   rU   ÚacquirerI   Ú_build_packetr2   Ú_logr   r   Úformat_binaryrB   rM   ÚupdaterO   ÚencryptrQ   rÈ   ÚstructÚpackrK   r   rG   rE   r@   r	   r7   r   r¶   r8   r9   ÚREKEY_PACKETSÚREKEY_BYTESr3   r<   r=   Ú_trigger_rekeyÚrelease)r]   ÚdataÚcmdÚcmd_nameÚorig_lenÚpacketr«   ÚpackedÚpayloadÚnext_seqÚsent_too_muchÚmsgs               r   Úsend_messagezPacketizer.send_messagež  s  € ð
 �|‰|‹~ˆÜ�t˜A‘wÓˆØ”)ÑÜ  ‘~‰Hà—~‘~ cÓ*ˆHÜ�t“9ˆØ×Ñ×!Ñ!Ô#ð;	(Ø×)Ñ)Ð5Ø×1Ñ1°$Ó7�Ø×'Ñ'¨Ó-ˆFØ×"Ò"Ø—	‘	ÜØ2×9Ñ9¸(ÀHÓMôð —	‘	œ%¤×!3Ñ!3°F¸GÓ!DÔEØ×&Ñ&Ð2Ø—>’>à   1˜+¨×(?Ñ(?×(FÑ(FØ˜q˜r˜
ó)ñ ‘Cð —_’_ð !  1˜+¨×(?Ñ(?×(GÑ(GØŸ™ v¨a¨b z°6¸!¸A°;ó)ñ �Cð %)×$8Ñ$8¸¿¹Ó$G�D•Mà×1Ñ1×8Ñ8¸Ó@‘Cà�à×&Ñ&Ð2¸4¿?º?ÜŸ™ T¨4×+EÑ+EÓF�Ø ¨4¯>ª>¡C¸vÑF�Ø”|Ø×&Ñ&¨°×1FÑ1Fóà'�D×'Ñ'ð)ñ )�ð ×2Ñ2°QÑ6¼)ÑCˆHØ˜1Š} T×%;Ò%;Ü"ØEóð ð *2ˆDÔ&Ø�N‰N˜3Ôà×Ò¤ S£Ñ)ÕØ×Ò 1Ñ$Õà×#Ñ# t×'9Ñ'9Ñ9ò 9Ø×$Ñ$¨×(8Ñ(8Ñ8ð ñ  T×%6Ò%6à@�Ø—	‘	Ü˜3Ÿ:™: d×&9Ñ&9¸4×;LÑ;LÓMôð 23�Ô.Ø34�Ô0Ø×#Ñ#Ô%à×Ñ×%Ñ%Õ'øˆD×Ñ×%Ñ%Õ'ús   Á(KM ÍM9c           	      óx  — | j                  | j                  d¬«      }| j                  rÙt        j                  d|dd «      d   }|| j                  z
  dz   }|dd | j                  |d¬«      z   }| j                  | j
                  d¬«      }t        j                  d| j                  |«      |z   }t        | j                  || j                  «      d| j
                   }t        j                  ||«      st        d	«      ‚|}| j                  r t        j                  d|dd «      d   }|dd }|| j                  z
  dz   | j
                  z   }|dd | j                  |d¬«      z   }| j                  j!                  | j"                  ||«      }| j%                  | j"                  «      | _        | j                  �'| j                  s| j                  j'                  |«      }| j(                  r*| j+                  t,        t        j.                  |d
«      «       | j                  s| j                  r|}nÂt        j                  d|dd «      d   }|dd }	|t1        |	«      z
  | j                  z  dk7  rt        d«      ‚| j                  || j
                  z   t1        |	«      z
  «      }
|
d|t1        |	«      z
   }|
|t1        |	«      z
  d }| j                  �| j                  j'                  |«      }|	|z   }| j(                  r*| j+                  t,        t        j.                  |d
«      «       | j
                  dkD  rš| j                  sŽ| j                  s‚d| j
                   }t        j                  d| j                  «      |z   }t        | j                  || j                  «      d| j
                   }t        j                  ||«      st        d	«      ‚t3        |d   «      }|d|z
   }| j(                  r&| j+                  t,        dj5                  ||«      «       | j6                  �| j7                  |«      }t9        |dd «      }| j                  |_        | j                  dz   t<        z  }|dk(  r| j>                  st        d«      ‚|| _        || j
                  z   dz   }| xj@                  |z  c_         | xjB                  dz  c_!        | jD                  rg| xjF                  |z  c_#        | xjH                  dz  c_$        | jH                  | jJ                  k\  s| jF                  | jL                  k\  r—t        d«      ‚| jB                  | jN                  k\  s| j@                  | jP                  k\  rZd}| j+                  t,        |j5                  | jB                  | j@                  «      «       d| _#        d| _$        | jS                  «        t3        |d   «      }|tT        v r
tT        |   }ndj5                  |«      }| j(                  r/| j+                  t,        dj5                  |t1        |«      «      «       ||fS )zë
        Only one thread should ever be in this function (no other locking is
        done).

        :raises: `.SSHException` -- if the packet is mangled
        :raises: `.NeedRekeyException` -- if the transport should rekey
        T)rª   rË   Nr½   r   Fz>IIzMismatched MACzIN: zInvalid packet blockingrk   z"Got payload ({} bytes, {} padding)rÌ   z+Remote transport is ignoring rekey requestsz,Rekeying (hit {} packets, {} bytes received)rÊ   zRead packet <{}>, length {})+r®   r?   rN   rÕ   ÚunpackrA   rÖ   rL   r   rH   rF   r   Úconstant_time_bytes_eqr   rP   rC   ÚdecryptrR   rÈ   rÓ   r2   rÑ   r   rÒ   r%   r   rÎ   rJ   r   Úseqnor	   r7   r:   r;   r3   r<   r=   ÚREKEY_PACKETS_OVERFLOW_MAXÚREKEY_BYTES_OVERFLOW_MAXr×   rØ   rÙ   r   )r]   ÚheaderÚpacket_sizeÚ	remainingrß   ÚmacÚmac_payloadÚmy_macÚaadÚleftoverrº   Úpost_packetÚpaddingrá   rä   râ   Úraw_packet_sizeÚerrrÜ   rÝ   s                       r   Úread_messagezPacketizer.read_messageè  s×  € ð —‘˜t×3Ñ3À�ÓFˆØ�=Š=Ü Ÿ-™-¨¨f°R°a¨jÓ9¸!Ñ<ˆKØ# d×&:Ñ&:Ñ:¸QÑ>ˆIØ˜A˜B�Z $§-¡-°	Àu -Ó"MÑMˆFØ—-‘- × 2Ñ 2À�-ÓFˆCä—‘˜E 4×#<Ñ#<¸kÓJØñð ô "Ø×!Ñ! ;°×0DÑ0Dóà"�×"Ñ"ð$ˆFô ×.Ñ.¨v°sÔ;Ü"Ð#3Ó4Ð4ØˆFà�>Š>ô !Ÿ-™-¨¨f°R°a¨jÓ9¸!Ñ<ˆKØ˜˜!�*ˆCà˜d×2Ñ2Ñ2°QÑ6¸×9KÑ9KÑKð ð ˜A˜B�Z $§-¡-°	Àu -Ó"MÑMˆFØ×+Ñ+×3Ñ3°D·L±LÀ&È#ÓNˆFà×/Ñ/°·±Ó=ˆDŒLà×!Ñ!Ð-°d·n²nØ×+Ñ+×2Ñ2°6Ó:ˆFØ×ÒØ�I‰I”eœT×/Ñ/°¸Ó?Ô@ð
 �=Š=˜DŸNšNØ‰Fô !Ÿ-™-¨¨f°R°a¨jÓ9¸!Ñ<ˆKð ˜a˜b�zˆHØœc (›mÑ+¨t×/CÑ/CÑCÀqÒHÜ"Ð#<Ó=Ð=Ø—-‘-Ø˜d×0Ñ0Ñ0´3°x³=Ñ@óˆCð Ð6˜;¬¨X«Ñ6Ð7ˆFØ˜k¬C°«MÑ9Ð;Ð<ˆKà×%Ñ%Ð1Ø×/Ñ/×6Ñ6°vÓ>�Ø Ñ&ˆFà×ÒØ�I‰I”eœT×/Ñ/°¸Ó?Ô@à×Ñ Ò!¨$¯-ª-ÀÇÂØÐ2 × 2Ñ 2Ð3ˆCä—‘˜E 4×#<Ñ#<¸kÓJØñð ô "Ø×!Ñ! ;°×0DÑ0Dóà"�×"Ñ"ð$ˆFô ×.Ñ.¨v°sÔ;Ü"Ð#3Ó4Ð4Ü˜6 !™9Ó%ˆØ˜˜[¨7Ñ2Ð3ˆà×ÒØ�I‰IÜØ4×;Ñ;Ø óôð ×$Ñ$Ð0Ø×/Ñ/°Ó8ˆGä�g˜a˜b�kÓ"ˆØ×-Ñ-ˆŒ	Ø×-Ñ-°Ñ1´YÑ>ˆØ�qŠ= ×!7Ò!7ÜØAóð ð %-ˆÔ!ð &¨×(:Ñ(:Ñ:¸QÑ>ˆØ×Ò Ñ0ÕØ×Ò 1Ñ$ÕØ×Òð ×*Ò*¨oÑ=Õ*Ø×,Ò,°Ñ1Õ,à×0Ñ0Ø×2Ñ2ò3ð ×.Ñ.°$×2OÑ2OÒOä"ØAóð ð ×%Ñ%¨×);Ñ);Ò;Ø×!Ñ! T×%5Ñ%5Ò5ð AˆCØ�I‰IÜØ—
‘
˜4×2Ñ2°D×4IÑ4IÓJôð ./ˆDÔ*Ø/0ˆDÔ,Ø×ÑÔ!ä�w˜q‘zÓ"ˆØ”)ÑÜ  ‘~‰Hà—~‘~ cÓ*ˆHØ×ÒØ�I‰IÜØ-×4Ñ4°X¼sÀ7»|ÓLôð �Cˆxˆr   c                 óÐ   — | j                   €y t        t        |«      t        «      r$|D ]  }| j                   j	                  ||«       Œ  y | j                   j	                  ||«       y r   )r0   Ú
issubclassr"   Úlistrh   )r]   Úlevelrä   Úms       r   rÑ   zPacketizer._log}  sV   € Ø�=‰=Ð ØÜ”d˜3“i¤Ô&Øò ,�Ø—‘×!Ñ! %¨Õ+ñ,ð �M‰M×Ñ˜e SÕ)r   c                 óÞ   — | j                   r| j                  r| j                  ry t        j                  «       }|| j                  | j                   z   kD  r| j                  «        || _        y y r   )rV   rB   r3   rW   rX   rY   )r]   Únows     r   r¨   zPacketizer._check_keepalive†  s`   € à×)Ò)Ø×*Ò*Ø× Ò ð Ü�i‰i‹kˆØ�×&Ñ&¨×)BÑ)BÑBÒBØ×%Ñ%Ô'Ø$'ˆDÕ!ð Cr   c                 óZ  — t        j                   «       }	 	 | j                  j                  d«      }t        |«      dk(  r
t	        «       ‚	 |S # t
        j                  $ r Y nw xY w| j                  r
t	        «       ‚t        j                   «       }||z
  |k\  rt        j                  «       ‚Œ—)Né€   r   )rW   r/   r¤   r%   r£   r^   r›   r1   )r]   r›   rš   r­   r   s        r   r¸   zPacketizer._read_timeout“  s–   € Ü—	‘	“ˆØðØ—M‘M×&Ñ& sÓ+�Ü�q“6˜Q’;Ü"›*Ð$Øð ˆøô —>‘>ò Ùðúà�}Š}Ü“jÐ Ü—)‘)“+ˆCØ�U‰{˜gÒ%Ü—n‘nÓ&Ð&ð s   —3A ÁA#Á"A#c                 óV  — | j                   }| j                  s| j                  rdnd}d|z   t        |«      |z   |z  z
  }t	        j
                  dt        |«      |z   dz   |«      }||z  }| j                  s| j                  €|t        |z  z  }|S |t        j                  |«      z  }|S )Nr½   r.   rl   z>IBrk   )r>   rM   rO   r%   rÕ   rÖ   rD   rB   r
   ÚosÚurandom)r]   rá   ÚbsizeÚaddlenrö   rß   s         r   rÐ   zPacketizer._build_packet¤  s®   € à×%Ñ%ˆð —n’n¨¯ª‘¸QˆØ�e‘)¤ G£¨vÑ 5¸Ñ>Ñ?ˆÜ—‘˜U¤C¨£L°7Ñ$:¸QÑ$>ÀÓHˆØ�'ÑˆØ×Ò˜t×6Ñ6Ð>ð ”i 'Ñ)Ñ)ˆFð ˆð ”b—j‘j Ó)Ñ)ˆFØˆr   c                 ó   — d| _         y r�   r�   ra   s    r   rÙ   zPacketizer._trigger_rekey¶  s
   € à ˆÕr   )FFFN)FFN)F))r   r   r   r   Úpowr×   rØ   rë   rì   r_   Úpropertyrb   rd   rf   ri   rv   ry   r}   r   r‚   r†   rˆ   r‹   r�   r�   r”   r–   rœ   rž   r¡   r®   r¶   r»   rÈ   rå   rù   rÑ   r¨   r¸   rÐ   rÙ   r   r   r   r*   r*   A   s  „ ññ ˜˜2“J€MÙ�a˜“*€Kñ "% Q¨£Ðá" 1 b›zÐò5%ðn ñó ðò'ò&òð ØØØó &ðR ØØó &òD0ò/òò&ò#ò"ò#ò!ò,ò$ò
!ò$ò -ó.ò`&òPò	òH(òTQòj*ò(òò"ó$!r   r*   )r   r¦   r  r^   rÕ   rS   rW   Úhmacr   Úparamikor   Úparamiko.commonr   r   r   r   r	   r
   r   Úparamiko.utilr   Úparamiko.ssh_exceptionr   r   Úparamiko.messager   r   r³   r   r(   r*   r   r   r   ú<module>r     s`   ðñ&ó Û 	Û Û Û Û Ý å ÷÷ ñ õ ß DÝ $ò5ô	˜ô 	ò÷w	!ò w	!r   