ó
    Ö›‘h·h  ã                   óB  • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  \" \R                  5       " S	 S
5      5       r " S S\R"                  5      r " S S\R"                  5      r " S S\R(                  5      r " S S\R"                  5      rg)z$
Tests for L{twisted.conch.telnet}.
é    )Úimplementer)ÚverifyObject)Útelnet)Údefer)Ú	iterbytes)Úproto_helpers)Úunittestc                   ód   • \ rS rSrSrSrS rS rS rS r	S r
S rS	 rS
 rS rS rS rS rSrg)ÚTestProtocolé   © c                 óf   • SU l         / U l        / U l        / U l        / U l        / U l        / U l        g )Nó    )ÚdataÚsubcmdÚcallsÚenabledLocalÚenabledRemoteÚdisabledLocalÚdisabledRemote©Úselfs    ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/conch/test/test_telnet.pyÚ__init__ÚTestProtocol.__init__   s7   € ØˆŒ	ØˆŒØˆŒ
àˆÔØˆÔØˆÔØ ˆÕr   c                 óº   ^ • 0 =o!l         T R                  US'   UR                  R                  5       =o!l        S H  nU4U 4S jjU[	        [
        U5      '   M     g )Nó   )
ÚEORÚNOPÚDMÚBRKÚIPÚAOÚAYTÚECÚELÚGAc                 ó:   >• TR                   R                  U5      $ ©N)r   Úappend)ÚargÚcmdr   s     €r   Ú<lambda>Ú-TestProtocol.makeConnection.<locals>.<lambda>)   s   ø€ ¸4¿:¹:×;LÑ;LÈSÔ;Qr   )ÚnegotiationMapÚneg_TEST_COMMANDÚ
commandMapÚcopyÚgetattrr   )r   Ú	transportÚdr,   s   `   r   ÚmakeConnectionÚTestProtocol.makeConnection#   sV   ø€ Ø')Ð)ˆÔ$Ø×*Ñ*ˆˆ'‰
à#,×#7Ñ#7×#<Ñ#<Ó#>Ð>ˆÔ ÛSˆCØ69Ö&QˆAŒg”f˜cÓ"Ó#ò Tr   c                 ó.   • U =R                   U-  sl         g r)   )r   ©r   r   s     r   ÚdataReceivedÚTestProtocol.dataReceived+   s   € Ø�	Š	�TÑŽ	r   c                 ó   • g r)   r   )r   Úreasons     r   ÚconnectionLostÚTestProtocol.connectionLost.   s   € Ør   c                 ó   • Xl         g r)   )r   )r   Úpayloads     r   r0   ÚTestProtocol.neg_TEST_COMMAND1   s   € Ø�r   c                 óZ   • XR                   ;   a  U R                  R                  U5        gg©NTF)ÚlocalEnableabler   r*   ©r   Úoptions     r   ÚenableLocalÚTestProtocol.enableLocal4   s(   € Ø×)Ñ)Ó)Ø×Ñ×$Ñ$ VÔ,ØØr   c                 ó:   • U R                   R                  U5        g r)   )r   r*   rF   s     r   ÚdisableLocalÚTestProtocol.disableLocal:   s   € Ø×Ñ×!Ñ! &Õ)r   c                 óZ   • XR                   ;   a  U R                  R                  U5        ggrD   )ÚremoteEnableabler   r*   rF   s     r   ÚenableRemoteÚTestProtocol.enableRemote=   s(   € Ø×*Ñ*Ó*Ø×Ñ×%Ñ% fÔ-ØØr   c                 ó:   • U R                   R                  U5        g r)   )r   r*   rF   s     r   ÚdisableRemoteÚTestProtocol.disableRemoteC   s   € Ø×Ñ×"Ñ" 6Õ*r   c                 ó   • g r)   r   r   s    r   ÚconnectionMadeÚTestProtocol.connectionMadeF   ó   € àr   c                 ó   • g r)   r   )r   ÚcommandÚarguments      r   ÚunhandledCommandÚTestProtocol.unhandledCommandJ   rW   r   c                 ó   • g r)   r   ©r   rY   r   s      r   ÚunhandledSubnegotiationÚ$TestProtocol.unhandledSubnegotiationN   rW   r   )r   r   r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rE   rN   r   r6   r:   r>   r0   rH   rK   rO   rR   rU   r[   r_   Ú__static_attributes__r   r   r   r   r      sJ   † à€OØÐò!òRòòòòò*òò+òòõr   r   c                   ó   • \ rS rSrS rSrg)ÚInterfacesTestséS   c                 ób   • [         R                  " 5       n[        [         R                  U5        g)z?
L{telnet.TelnetProtocol} implements L{telnet.ITelnetProtocol}
N)r   ÚTelnetProtocolr   ÚITelnetProtocol)r   Úps     r   Útest_interfaceÚInterfacesTests.test_interfaceT   s"   € ô ×!Ò!Ó#ˆÜ”V×+Ñ+¨QÕ/r   r   N)ra   rb   rc   rd   rm   re   r   r   r   rg   rg   S   s   † õ0r   rg   c                   ó  • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS r/ / / / 4S jrS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S(r*g))*ÚTelnetTransportTestsé\   z&
Tests for L{telnet.TelnetTransport}.
c                 óÀ   • [         R                  " [        5      U l        [        R
                  " 5       U l        U R                  R                  U R                  5        g r)   )r   ÚTelnetTransportr   rl   r   ÚStringTransportÚtr6   r   s    r   ÚsetUpÚTelnetTransportTests.setUpa   s:   € Ü×'Ò'¬Ó5ˆŒÜ×.Ò.Ó0ˆŒØ�‰×Ñ˜dŸf™fÕ%r   c                 óÖ   • U R                   R                  n/ SQnU H  nU R                   R                  U5        M      U R                  UR                  SR                  U5      5        g )N)s   here are some bytes la la las   some more arrive heres   lots of bytes to play withs   la la las   ta de das   dumr   )rl   Úprotocolr:   ÚassertEqualr   Újoin©r   ÚhÚLÚbs       r   ÚtestRegularBytesÚ%TelnetTransportTests.testRegularBytesf   sT   € ð �F‰F�O‰Oˆò
ˆó ˆAØ�F‰F×Ñ Ö"ñ ð 	×Ñ˜Ÿ™ §¡¨!£Õ-r   c                 ó  • U R                   R                  n/ SQnU H  nU R                   R                  U5        M      U R                  UR                  US   S S S-   US   S S -   S-   US   S S -   S-   US   S S -   S-   5        g )	N)s   here is the first line
s   here is the second line s   here is the third line
s   here is the last line r   éþÿÿÿó   
é   ó   é   é   )rl   ry   r:   rz   r   r|   s       r   ÚtestNewlineHandlingÚ(TelnetTransportTests.testNewlineHandlingy   sº   € ð �F‰F�O‰Oˆò
ˆó ˆAØ�F‰F×Ñ Ö"ñ ð 	×ÑØ�F‰FØˆa‰D��"ˆIØñà�‰d�3�Bˆiñð ñð �‰d�3�Bˆiñ	ð
 ñð �‰d�3�Bˆiñð ñõ
	
r   c                 óö   • U R                   R                  n/ SQnU H  nU R                   R                  U5        M      U R                  UR                  SR                  U5      R                  SS5      5        g )N)s*   here are some bytesÿÿ with an embedded IACs&   and here is a test of a border escapeÿs   ÿ did you get that IAC?r   s   ÿÿó   ÿ)rl   ry   r:   rz   r   r{   Úreplacer|   s       r   ÚtestIACEscapeÚ"TelnetTransportTests.testIACEscape”   sa   € ð �F‰F�O‰Oˆò
ˆó ˆAØ�F‰F×Ñ Ö"ñ ð 	×Ñ˜Ÿ™ §¡¨!£×!4Ñ!4°[À'Ó!JÕKr   c                 ó~  • U R                   R                  n[        R                  [	        [        U5      -   nSSU-   S-   /nU H  nU R                   R                  U5        M      U R                  UR                  U/5        U R                  UR                  SR                  U5      R                  US5      5        g )Ns   Here's some bytes, tra la las   But ono!s    an interruptr   )rl   ry   r   ÚIACr3   r:   rz   r   r   r{   r�   )r   ÚcmdNamer}   r,   r~   r   s         r   Ú_simpleCommandTestÚ'TelnetTransportTests._simpleCommandTest¥   s˜   € ð �F‰F�O‰Oˆä�j‰jœ7¤6¨7Ó3Ñ3ˆØ,¨k¸CÑ.?ÐBRÑ.RÐSˆãˆAØ�F‰F×Ñ Ö"ñ ð 	×Ñ˜Ÿ™ 7 )Ô,Ø×Ñ˜Ÿ™ §¡¨!£×!4Ñ!4°S¸#Ó!>Õ?r   c                 ó&   • U R                  S5        g )Nr"   ©r“   r   s    r   ÚtestInterruptÚ"TelnetTransportTests.testInterrupt´   ó   € Ø×Ñ Õ%r   c                 ó&   • U R                  S5        g )Nr   r–   r   s    r   ÚtestEndOfRecordÚ$TelnetTransportTests.testEndOfRecord·   ó   € Ø×Ñ Õ&r   c                 ó&   • U R                  S5        g )Nr   r–   r   s    r   ÚtestNoOperationÚ$TelnetTransportTests.testNoOperationº   r�   r   c                 ó&   • U R                  S5        g )Nr    r–   r   s    r   ÚtestDataMarkÚ!TelnetTransportTests.testDataMark½   r™   r   c                 ó&   • U R                  S5        g )Nr!   r–   r   s    r   Ú	testBreakÚTelnetTransportTests.testBreakÀ   r�   r   c                 ó&   • U R                  S5        g )Nr#   r–   r   s    r   ÚtestAbortOutputÚ$TelnetTransportTests.testAbortOutputÃ   r™   r   c                 ó&   • U R                  S5        g )Nr$   r–   r   s    r   ÚtestAreYouThereÚ$TelnetTransportTests.testAreYouThereÆ   r�   r   c                 ó&   • U R                  S5        g )Nr%   r–   r   s    r   ÚtestEraseCharacterÚ'TelnetTransportTests.testEraseCharacterÉ   r™   r   c                 ó&   • U R                  S5        g )Nr&   r–   r   s    r   ÚtestEraseLineÚ"TelnetTransportTests.testEraseLineÌ   r™   r   c                 ó&   • U R                  S5        g )Nr'   r–   r   s    r   ÚtestGoAheadÚ TelnetTransportTests.testGoAheadÏ   r™   r   c                 óä  • U R                   R                  n[        R                  [        R                  -   S-   [        R                  -   [        R
                  -   nSU-   S/nU H  nU R                   R                  U5        M      U R                  UR                  SR                  U5      R                  US5      5        U R                  UR                  [        [        S5      5      5        g )Ns   hello worlds   These are some bytes but soons   there will be some morer   s   hello world)rl   ry   r   r‘   ÚSBÚSEr:   rz   r   r{   r�   r   Úlistr   ©r   r}   r,   r~   r   s        r   ÚtestSubnegotiationÚ'TelnetTransportTests.testSubnegotiationÒ   s°   € ð �F‰F�O‰Oˆä�j‰jœ6Ÿ9™9Ñ$Ð'9Ñ9¼F¿J¹JÑFÌÏÉÑRˆØ-°Ñ3Ð5OÐPˆãˆAØ�F‰F×Ñ Ö"ñ ð 	×Ñ˜Ÿ™ §¡¨!£×!4Ñ!4°S¸#Ó!>Ô?Ø×Ñ˜Ÿ™¤4¬	°.Ó(AÓ#BÕCr   c                 ó  • U R                   R                  n[        R                  [        R                  -   S-   [        R
                  -   [        R                  -   [        R
                  -   nSU-   S-   S/nU H  nU R                   R                  U5        M      U R                  UR                  SR                  U5      R                  US5      5        U R                  UR                  [        R
                  /5        g )Nr   s   Some bytes are heres   and herer   )rl   ry   r   r‘   r·   r¸   r:   rz   r   r{   r�   r   rº   s        r   Ú testSubnegotiationWithEmbeddedSEÚ5TelnetTransportTests.testSubnegotiationWithEmbeddedSEà   s¸   € ð �F‰F�O‰Oˆä�j‰jœ6Ÿ9™9Ñ$ wÑ.´·±Ñ:¼V¿Z¹ZÑGÌ&Ï)É)ÑSˆà# cÑ)¨KÑ7¸ÐEˆãˆAØ�F‰F×Ñ Ö"ñ ð 	×Ñ˜Ÿ™ §¡¨!£×!4Ñ!4°S¸#Ó!>Ô?Ø×Ñ˜Ÿ™¤F§I¡I ;Õ/r   c           
      óº  • [         R                  [         R                  -   S-   [         R                  -   S-   [         R                  -   [         R                  -   n[	        [        U5      5       Hé  n[        5       =o0R                  l        UR                  U R                  5        US U XS  pTSU-   US-   /nU H  nU R                  R                  U5        M      U R                  UR                  SR                  U5      R                  US5      5        U R                  UR                  [         R                  /[!        [#        S5      5      -   5        Më     g )Nr   s   hellos
   first parts	   last partr   )r   r‘   r·   r¸   ÚrangeÚlenr   rl   ry   r6   r:   rz   r   r{   r�   r   r¹   r   )r   r,   Úir}   Úar   r~   r   s           r   ÚtestBoundarySubnegotiationÚ/TelnetTransportTests.testBoundarySubnegotiationï   s#  € ô
 �J‰JÜ�i‰iñàñô �i‰iñð ñ	ô
 �j‰jñô �i‰iñð 	ô ”s˜3“x–ˆAÜ".£.Ð0ˆA—‘”Ø×Ñ˜TŸV™VÔ$à�r˜�7˜C ˜GˆqØ Ñ" A¨Ñ$4Ð5ˆAã�Ø—‘×#Ñ# DÖ)ñ ð ×Ñ˜QŸV™V S§X¡X¨a£[×%8Ñ%8¸¸cÓ%BÔCØ×Ñ˜QŸX™X¬¯	©	 {´T¼)ÀHÓ:MÓ5NÑ'NÖOò !r   c                 óä   • U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        U R                  UR                  U5        g r)   )rz   r   r   r   r   )r   ÚoÚeLÚeRÚdLÚdRs         r   Ú_enabledHelperÚ#TelnetTransportTests._enabledHelper
  sT   € Ø×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™¨"Ô-Ø×Ñ˜Ÿ™¨"Ô-Ø×Ñ˜×)Ñ)¨2Õ.r   c                 óô  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R	                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  U R                  R                  5        g ©Nr   s   surrounding bytess   to spice things upr   )r   r‘   ÚWILLrl   r:   rz   ry   r   r�   ru   ÚvalueÚDONTrÍ   ©r   r,   r   s      r   ÚtestRefuseWillÚ#TelnetTransportTests.testRefuseWill  s¦   € ä�j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆà# cÑ)Ð,AÑAˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLØ×Ñ˜DŸF™FŸO™OÕ,r   c                 óô  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R	                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  U R                  R                  5        g rÐ   )r   r‘   ÚDOrl   r:   rz   ry   r   r�   ru   rÒ   ÚWONTrÍ   rÔ   s      r   ÚtestRefuseDoÚ!TelnetTransportTests.testRefuseDo  s¦   € ä�j‰jœ6Ÿ9™9Ñ$ wÑ.ˆà# cÑ)Ð,AÑAˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLØ×Ñ˜DŸF™FŸO™OÕ,r   c                 ó†  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R                  nSUl        U R                  R                  U5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  US/S9  g )Nó   ó   paddings   trailer)rÝ   )rÉ   )r   r‘   rØ   rl   ry   rE   r:   rz   ru   rÒ   rÑ   rÍ   ©r   r,   r   r}   s       r   ÚtestAcceptDoÚ!TelnetTransportTests.testAcceptDo&  s’   € ô �j‰jœ6Ÿ9™9Ñ$ wÑ.ˆØ˜CÑ *Ñ,ˆà�F‰F�O‰OˆØ&ˆÔØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLØ×Ñ˜A 7 )ÐÒ,r   c                 ó†  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R                  nSUl        U R                  R                  U5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  US/S9  g )Nó   ‘s   headerrÞ   )rã   ©rÊ   )r   r‘   rÑ   rl   ry   rN   r:   rz   ru   rÒ   rØ   rÍ   rß   s       r   ÚtestAcceptWillÚ#TelnetTransportTests.testAcceptWill3  s�   € ä�j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆØ˜3‰ Ñ+ˆà�F‰F�O‰OˆØ'ˆÔØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™›¬¯©´f·i±iÑ)?À'Ñ)IÔJØ×Ñ˜A 7 )ÐÒ,r   c                 ó’  • [         R                  [         R                  -   S-   nU R                  R	                  S5      nSUR
                  l        SU-   nU R                  R                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  UR
                  R                  S5        U R                  U R                  R                  S/S9  g )Nó   )Úyess
   fiddle deer   Úno©rÌ   )r   r‘   rÙ   rl   ÚgetOptionStateÚhimÚstater:   rz   ry   r   r�   ru   rÒ   rÓ   rÍ   ©r   r,   Úsr   s       r   ÚtestAcceptWontÚ#TelnetTransportTests.testAcceptWont?  sâ   € ô �j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆð
 �F‰F×!Ñ! 'Ó*ˆØˆ�‰Œà˜sÑ"ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLØ×Ñ˜Ÿ™Ÿ™ dÔ+Ø×Ñ˜DŸF™FŸO™O°°	ÐÒ:r   c                 ó’  • [         R                  [         R                  -   S-   nU R                  R	                  S5      nSUR
                  l        SU-   nU R                  R                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       [         R                  [         R                  -   S-   5        U R                  UR
                  R                  S5        U R                  U R                  R                  S/S9  g )Nrè   ré   s   fiddle dum r   rê   )rË   )r   r‘   rÓ   rl   rì   Úusrî   r:   rz   ry   r   r�   ru   rÒ   rÙ   rÍ   rï   s       r   ÚtestAcceptDontÚ#TelnetTransportTests.testAcceptDontS  sâ   € ô �j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆð
 �F‰F×!Ñ! 'Ó*ˆØˆ�‰Œ
à Ñ#ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLØ×Ñ˜Ÿ™Ÿ™ TÔ*Ø×Ñ˜DŸF™FŸO™O°°	ÐÒ:r   c                 ó°  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R	                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       S5        U R                  U R                  R                  5        g ©Nó   Gó
   dum de dumó	   tra la lar   )r   r‘   rÙ   rl   r:   rz   ry   r   r�   ru   rÒ   rÍ   rÔ   s      r   ÚtestIgnoreWontÚ#TelnetTransportTests.testIgnoreWontg  s•   € ô �j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆà˜sÑ" \Ñ1ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¨Ô-Ø×Ñ˜DŸF™FŸO™OÕ,r   c                 ó°  • [         R                  [         R                  -   S-   nSU-   S-   nU R                  R	                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       S5        U R                  U R                  R                  5        g rø   )r   r‘   rÓ   rl   r:   rz   ry   r   r�   ru   rÒ   rÍ   rÔ   s      r   ÚtestIgnoreDontÚ#TelnetTransportTests.testIgnoreDonts  s•   € ô �j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆà˜sÑ" \Ñ1ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¨Ô-Ø×Ñ˜DŸF™FŸO™OÕ,r   c                 ó  • [         R                  [         R                  -   S-   nU R                  R	                  S5      nSUR
                  l        SU-   S-   nU R                  R                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       S5        U R                  U R                  R                  5        g ©Nó   Vré   rû   rú   r   )r   r‘   rÑ   rl   rì   rí   rî   r:   rz   ry   r   r�   ru   rÒ   rÍ   rï   s       r   ÚtestIgnoreWillÚ#TelnetTransportTests.testIgnoreWill€  s¶   € ô �j‰jœ6Ÿ;™;Ñ&¨Ñ0ˆð
 �F‰F×!Ñ! 'Ó*ˆØˆ�‰Œà˜cÑ! MÑ1ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¨Ô-Ø×Ñ˜DŸF™FŸO™OÕ,r   c                 ó  • [         R                  [         R                  -   S-   nU R                  R	                  S5      nSUR
                  l        SU-   S-   nU R                  R                  U5        U R                  U R                  R                  R                  UR                  US5      5        U R                  U R                  R                  5       S5        U R                  U R                  R                  5        g r  )r   r‘   rØ   rl   rì   rô   rî   r:   rz   ry   r   r�   ru   rÒ   rÍ   rï   s       r   ÚtestIgnoreDoÚ!TelnetTransportTests.testIgnoreDo“  s¶   € ô �j‰jœ6Ÿ9™9Ñ$ wÑ.ˆð
 �F‰F×!Ñ! 'Ó*ˆØˆ�‰Œ
à˜cÑ! MÑ1ˆØ�‰×Ñ˜DÔ!à×Ñ˜Ÿ™Ÿ™×-Ñ-¨t¯|©|¸CÀÓ/EÔFØ×Ñ˜Ÿ™Ÿ™›¨Ô-Ø×Ñ˜DŸF™FŸO™OÕ,r   c                 óð  ^ ^• T R                   R                  S5      nT R                   R                  mSTl        T R	                  T R
                  R                  5       [        R                  [        R                  -   S-   5        T R                   R                  [        R                  [        R                  -   S-   5        UR                  T R                  S5        UR                  UU 4S j5        U$ )Nó   B©r
  Tc                 ó&   >• TR                  TS/S9$ )Nr
  rä   )rÍ   )Ú_r}   r   s    €€r   r-   Ú@TelnetTransportTests.testAcceptedEnableRequest.<locals>.<lambda>µ  s   ø€  × 3Ñ 3°A¸7¸)Ð 3Ñ Dr   )rl   Údory   rN   rz   ru   rÒ   r   r‘   rØ   r:   rÑ   ÚaddCallback)r   r5   r}   s   ` @r   ÚtestAcceptedEnableRequestÚ.TelnetTransportTests.testAcceptedEnableRequest¦  s¢   ù€ ð
 �F‰F�I‰I�gÓˆà�F‰F�O‰OˆØ'ˆÔà×Ñ˜Ÿ™Ÿ™›¬¯©´f·i±iÑ)?À'Ñ)IÔJà�‰×ÑœFŸJ™J¬¯©Ñ4°wÑ>Ô?à	�‰�d×&Ñ&¨Ô-Ø	�‰ÕDÔEØˆr   c                 ó€  ^ ^• ST R                   R                  l        T R                   R                  S5      nT R	                  T R
                  R                  5       [        R                  [        R                  -   S-   5        T R                   R                  S5      mT R	                  TR                  R                  S5        T R	                  TR                  R                  S5        T R                  TR                  R                  5        T R!                  TR                  R                  5        T R                   R#                  [        R                  [        R$                  -   S-   5        T R'                  U[        R(                  5      nUR+                  U 4S j5        UR+                  UU 4S j5        U$ )zž
If the peer refuses to enable an option we request it to enable, the
L{Deferred} returned by L{TelnetProtocol.do} fires with an
L{OptionRefused} L{Failure}.
r  r
  rê   c                 óN   >• TR                  TR                  R                  5      $ r)   ©rÍ   rl   ry   ©Úignoredr   s    €r   r-   Ú@TelnetTransportTests.test_refusedEnableRequest.<locals>.<lambda>Ð  ó   ø€  d×&9Ñ&9¸$¿&¹&¿/¹/Ô&Jr   c                 óN   >• TR                  TR                  R                  5      $ r)   )ÚassertFalserí   Únegotiating©r  rð   r   s    €€r   r-   r  Ñ  s   ø€  d×&6Ñ&6°q·u±u×7HÑ7HÔ&Ir   )rl   ry   rN   r  rz   ru   rÒ   r   r‘   rØ   rì   rí   rî   rô   Ú
assertTruer  r  r:   rÙ   ÚassertFailureÚOptionRefusedr  ©r   r5   rð   s   ` @r   Útest_refusedEnableRequestÚ.TelnetTransportTests.test_refusedEnableRequest¸  s   ù€ ð ,6ˆ�‰�‰Ô(Ø�F‰F�I‰I�gÓˆà×Ñ˜Ÿ™Ÿ™›¬¯©´f·i±iÑ)?À'Ñ)IÔJà�F‰F×!Ñ! 'Ó*ˆØ×Ñ˜Ÿ™Ÿ™ dÔ+Ø×Ñ˜Ÿ™Ÿ™ TÔ*Ø�‰˜Ÿ™×)Ñ)Ô*Ø×Ñ˜Ÿ™×)Ñ)Ô*à�‰×ÑœFŸJ™J¬¯©Ñ4°wÑ>Ô?à×Ñ˜q¤&×"6Ñ"6Ó7ˆØ	�‰ÔJÔKØ	�‰ÕIÔJØˆr   c                 ó€  ^ ^• ST R                   R                  l        T R                   R                  S5      nT R	                  T R
                  R                  5       [        R                  [        R                  -   S-   5        T R                   R                  S5      mT R	                  TR                  R                  S5        T R	                  TR                  R                  S5        T R                  TR                  R                  5        T R!                  TR                  R                  5        T R                   R#                  [        R                  [        R$                  -   S-   5        T R'                  U[        R(                  5      nUR+                  U 4S j5        UR+                  UU 4S j5        U$ )z”
If the peer refuses to allow us to enable an option, the L{Deferred}
returned by L{TelnetProtocol.will} fires with an L{OptionRefused}
L{Failure}.
r  r
  rê   c                 óN   >• TR                  TR                  R                  5      $ r)   r  r  s    €r   r-   Ú>TelnetTransportTests.test_refusedEnableOffer.<locals>.<lambda>ì  r  r   c                 óN   >• TR                  TR                  R                  5      $ r)   )r  rô   r  r  s    €€r   r-   r&  í  s   ø€  d×&6Ñ&6°q·t±t×7GÑ7GÔ&Hr   )rl   ry   rE   Úwillrz   ru   rÒ   r   r‘   rÑ   rì   rí   rî   rô   r  r  r  r:   rÓ   r  r   r  r!  s   ` @r   Útest_refusedEnableOfferÚ,TelnetTransportTests.test_refusedEnableOfferÔ  s   ù€ ð +5ˆ�‰�‰Ô'Ø�F‰F�K‰K˜Ó ˆà×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLà�F‰F×!Ñ! 'Ó*ˆØ×Ñ˜Ÿ™Ÿ™ dÔ+Ø×Ñ˜Ÿ™Ÿ™ TÔ*Ø×Ñ˜Ÿ™×*Ñ*Ô+Ø�‰˜Ÿ™×(Ñ(Ô)à�‰×ÑœFŸJ™J¬¯©Ñ4°wÑ>Ô?à×Ñ˜q¤&×"6Ñ"6Ó7ˆØ	�‰ÔJÔKØ	�‰ÕHÔIØˆr   c                 ó
  ^ • T R                   R                  S5      nSUR                  l        T R                   R	                  S5      nT R                  T R                  R                  5       [        R                  [        R                  -   S-   5        T R                   R                  [        R                  [        R                  -   S-   5        UR                  T R
                  S5        UR                  U 4S j5        U$ )Nr
  ré   Tc                 óN   >• TR                  TR                  R                  S/S9$ )Nr
  rë   r  ©r  r   s    €r   r-   ÚATelnetTransportTests.testAcceptedDisableRequest.<locals>.<lambda>ÿ  s   ø€  × 3Ñ 3°D·F±F·O±OÈÈ	Ð 3Ñ Rr   )rl   rì   rí   rî   Údontrz   ru   rÒ   r   r‘   rÓ   r:   rÙ   r  ©r   rð   r5   s   `  r   ÚtestAcceptedDisableRequestÚ/TelnetTransportTests.testAcceptedDisableRequestð  s¬   ø€ ð
 �F‰F×!Ñ! 'Ó*ˆØˆ�‰Œà�F‰F�K‰K˜Ó ˆà×Ñ˜Ÿ™Ÿ™›¬¯©´f·k±kÑ)AÀGÑ)KÔLà�‰×ÑœFŸJ™J¬¯©Ñ4°wÑ>Ô?à	�‰�d×&Ñ&¨Ô-Ø	�‰ÔRÔSØˆr   c                 ó  ^ • T R                   R                  S5      nSUR                  l        T R                   R	                  S5        U 4S jnU 4S jnU 4S jnU" S 5      nUR                  U5        UR                  U5        U$ )Nó   $ré   c                 óz   >• TR                   R                  S5      nTR                  U[        R                  5      $ ©Nr4  )rl   r  r  r   ÚAlreadyNegotiating©Úxr5   r   s     €r   Ú_doÚITelnetTransportTests.testNegotiationBlocksFurtherNegotiation.<locals>._do
  s.   ø€ Ø—‘—	‘	˜'Ó"ˆAØ×%Ñ% a¬×)BÑ)BÓCÐCr   c                 óz   >• TR                   R                  S5      nTR                  U[        R                  5      $ r6  )rl   r/  r  r   r7  r8  s     €r   Ú_dontÚKTelnetTransportTests.testNegotiationBlocksFurtherNegotiation.<locals>._dont  s.   ø€ Ø—‘—‘˜GÓ$ˆAØ×%Ñ% a¬×)BÑ)BÓCÐCr   c                 ó  >• TR                   R                  [        R                  [        R                  -   S-   5        TR                  TR                   R                  S/S9  STR                   R                  l        TR                   R                  S5      nTR                   R                  [        R                  [        R                  -   S-   5        UR                  TR                  S5        UR                  U4S j5        U$ )Nr4  rë   )r4  Tc                 óR   >• TR                  TR                  R                  S/S/S9$ )Nr4  )rÊ   rÌ   r  r-  s    €r   r-   Ú^TelnetTransportTests.testNegotiationBlocksFurtherNegotiation.<locals>._final.<locals>.<lambda>  s(   ø€ ˜$×-Ñ-Ø—F‘F—O‘O¨¨	°w°ið .ñ r   )rl   r:   r   r‘   rÙ   rÍ   ry   rN   r  rÑ   r  rz   r8  s     €r   Ú_finalÚLTelnetTransportTests.testNegotiationBlocksFurtherNegotiation.<locals>._final  s¶   ø€ Ø�F‰F×Ñ¤§
¡
¬V¯[©[Ñ 8¸7Ñ BÔCà×Ñ §¡§¡°W°IÐÑ>à/9ˆD�F‰F�O‰OÔ,Ø—‘—	‘	˜'Ó"ˆAØ�F‰F×Ñ¤§
¡
¬V¯[©[Ñ 8¸7Ñ BÔCØ�M‰M˜$×*Ñ*¨DÔ1Ø�M‰Môôð
 ˆHr   )rl   rì   rí   rî   r/  r  )r   rð   r:  r=  rB  r5   s   `     r   Ú'testNegotiationBlocksFurtherNegotiationÚ<TelnetTransportTests.testNegotiationBlocksFurtherNegotiation  sm   ø€ ð �F‰F×!Ñ! 'Ó*ˆØˆ�‰ŒØ�‰�‰�GÔõ	Dõ	Dõ	ñ  �‹IˆØ	�‰�eÔØ	�‰�fÔØˆr   c                 óx   • U R                   R                  S5      nU R                  U[        R                  5      $ )Nó   «)rl   r/  r  r   ÚAlreadyDisabled)r   r5   s     r   Ú#testSuperfluousDisableRequestRaisesÚ8TelnetTransportTests.testSuperfluousDisableRequestRaises'  s-   € à�F‰F�K‰K˜Ó ˆØ×!Ñ! !¤V×%;Ñ%;Ó<Ð<r   c                 óÐ   • U R                   R                  S5      nSUR                  l        U R                   R	                  S5      nU R                  U[        R                  5      $ )NrG  ré   )rl   rì   rí   rî   r  r  r   ÚAlreadyEnabledr0  s      r   Ú"testSuperfluousEnableRequestRaisesÚ7TelnetTransportTests.testSuperfluousEnableRequestRaises,  sL   € à�F‰F×!Ñ! 'Ó*ˆØˆ�‰ŒØ�F‰F�I‰I�gÓˆØ×!Ñ! !¤V×%:Ñ%:Ó;Ð;r   c                 óš  • U R                   R                  S5      nU R                   R                  S5      nU R                   R                  S5      n " S S[        5      nU R                   R                  U" S5      5        U R	                  X5      nU R	                  X$5      nU R	                  X45      n[
        R                  " XU/5      $ )Nr   ó   #ó   4c                   ó   • \ rS rSrSrg)ÚLTelnetTransportTests.testLostConnectionFailsDeferreds.<locals>.TestExceptioni8  r   N)ra   rb   rc   rd   re   r   r   r   ÚTestExceptionrS  8  s   † Úr   rT  zTotal failure!)rl   r  Ú	Exceptionr>   r  r   ÚgatherResults)r   Úd1Úd2Úd3rT  s        r   Ú testLostConnectionFailsDeferredsÚ5TelnetTransportTests.testLostConnectionFailsDeferreds3  s£   € Ø�V‰V�Y‰Y�wÓˆØ�V‰V�Y‰Y�wÓˆØ�V‰V�Y‰Y�wÓˆô	œIô 	ð 	�‰×Ñ™mÐ,<Ó=Ô>à×Ñ Ó2ˆØ×Ñ Ó2ˆØ×Ñ Ó2ˆÜ×"Ò" B¨B <Ó0Ð0r   )rl   ru   N)+ra   rb   rc   rd   Ú__doc__rv   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  r"  r)  r1  rD  rI  rM  rZ  re   r   r   r   rp   rp   \   sÐ   † ñò&ò
.ò&
ò6Lò"@ò&ò'ò'ò&ò'ò&ò'ò&ò&ò&òDò0òPð6 $&¨"°¸ô /ò	-ò	-ò-ò
-ò;ò(;ò(
-ò-ò-ò&-ò&ò$ò8ò8ò$#òJ=ò
<õ1r   rp   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Ú
TestTelnetiC  zH
A trivial extension of the telnet protocol class useful to unit tests.
c                 óP   • [         R                  R                  U 5        / U l        g r)   )r   ÚTelnetr   Úeventsr   s    r   r   ÚTestTelnet.__init__H  s   € Ü�‰×Ñ˜tÔ$Øˆ�r   c                 ó>   • U R                   R                  SU45        g)z*
Record the given data in C{self.events}.
ÚbytesN©ra  r*   r9   s     r   ÚapplicationDataReceivedÚ"TestTelnet.applicationDataReceivedL  s   € ð 	�‰×Ñ˜G T˜?Õ+r   c                 ó>   • U R                   R                  SX45        g)z-
Record the given command in C{self.events}.
rY   Nre  r^   s      r   r[   ÚTestTelnet.unhandledCommandR  s   € ð 	�‰×Ñ˜I wÐ5Õ6r   c                 ó>   • U R                   R                  SX45        g)z<
Record the given subnegotiation command in C{self.events}.
Ú	negotiateNre  r^   s      r   r_   Ú"TestTelnet.unhandledSubnegotiationX  s   € ð 	�‰×Ñ˜K¨Ð7Õ8r   )ra  N)
ra   rb   rc   rd   r\  r   rf  r[   r_   re   r   r   r   r^  r^  C  s   † ñòò,ò7õ9r   r^  c                   óx   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)ÚTelnetTestsi_  z 
Tests for L{telnet.Telnet}.

L{telnet.Telnet} implements the TELNET protocol (RFC 854), including option
and suboption negotiation, and option state tracking.
c                 ó"   • [        5       U l        g)z=
Create an unconnected L{telnet.Telnet} to be used by tests.
N)r^  ry   r   s    r   rv   ÚTelnetTests.setUpg  s   € ô #›ˆ�r   c                 óX   • U R                  U R                  R                  S5      5        g)z|
L{telnet.Telnet.enableLocal} should reject all options, since
L{telnet.Telnet} does not know how to implement any options.
ó    N)r  ry   rH   r   s    r   Útest_enableLocalÚTelnetTests.test_enableLocalm  s!   € ð
 	×Ñ˜Ÿ™×2Ñ2°5Ó9Õ:r   c                 óX   • U R                  U R                  R                  S5      5        g)z}
L{telnet.Telnet.enableRemote} should reject all options, since
L{telnet.Telnet} does not know how to implement any options.
rr  N)r  ry   rO   r   s    r   Útest_enableRemoteÚTelnetTests.test_enableRemotet  s!   € ð
 	×Ñ˜Ÿ™×3Ñ3°EÓ:Õ;r   c                 óZ   • U R                  [        U R                  R                  S5        g)zá
It is an error for L{telnet.Telnet.disableLocal} to be called, since
L{telnet.Telnet.enableLocal} will never allow any options to be enabled
locally.  If a subclass overrides enableLocal, it must also override
disableLocal.
rr  N)ÚassertRaisesÚNotImplementedErrorry   rK   r   s    r   Útest_disableLocalÚTelnetTests.test_disableLocal{  s!   € ð 	×ÑÔ-¨t¯}©}×/IÑ/IÈ5ÕQr   c                 óZ   • U R                  [        U R                  R                  S5        g)zæ
It is an error for L{telnet.Telnet.disableRemote} to be called, since
L{telnet.Telnet.enableRemote} will never allow any options to be
enabled remotely.  If a subclass overrides enableRemote, it must also
override disableRemote.
rr  N)ry  rz  ry   rR   r   s    r   Útest_disableRemoteÚTelnetTests.test_disableRemote„  s!   € ð 	×ÑÔ-¨t¯}©}×/JÑ/JÈEÕRr   c                 óÜ   • [         R                  " 5       nU R                  R                  U5        U R                  R	                  SS5        U R                  UR                  5       S5        g)z‘
L{telnet.Telnet.requestNegotiation} formats the feature byte and the
payload bytes into the subnegotiation format and sends them.

See RFC 855.
ó   s   s   ÿúÿðN©r   rt   ry   r6   ÚrequestNegotiationrz   rÒ   ©r   r4   s     r   Útest_requestNegotiationÚ#TelnetTests.test_requestNegotiation�  sS   € ô "×1Ò1Ó3ˆ	Ø�‰×$Ñ$ YÔ/Ø�‰×(Ñ(¨°+Ô>Ø×ÑØ�O‰OÓà+õ	
r   c                 óÜ   • [         R                  " 5       nU R                  R                  U5        U R                  R	                  SS5        U R                  UR                  5       S5        g)zŽ
If the payload for a subnegotiation includes I{IAC}, it is escaped by
L{telnet.Telnet.requestNegotiation} with another I{IAC}.

See RFC 855.
r�  rŒ   s   ÿúÿÿÿðNr‚  r„  s     r   Ú!test_requestNegotiationEscapesIACÚ-TelnetTests.test_requestNegotiationEscapesIAC�  sP   € ô "×1Ò1Ó3ˆ	Ø�‰×$Ñ$ YÔ/Ø�‰×(Ñ(¨°'Ô:Ø×Ñ˜Ÿ™Ó*Ð,KÕLr   c                 ó”   • / =o0R                   l        U R                   R                  U5        U R                  U[	        U5      5        g)zg
Pass the given bytes to the protocol's C{dataReceived} method and
assert that the given events occur.
N)ry   ra  r:   rz   r¹   )r   r   ÚexpectedÚreceiveds       r   Ú_deliverÚTelnetTests._deliver©  s9   € ð
 +-Ð,ˆ—=‘=Ô'Ø�‰×"Ñ" 4Ô(Ø×Ñ˜¤4¨£>Õ2r   c                 ó(   • U R                  SS5        g)zK
One application-data byte in the default state gets delivered right
away.
ó   a)rd  r�  N©r�  r   s    r   Útest_oneApplicationDataByteÚ'TelnetTests.test_oneApplicationDataByte²  s   € ð
 	�‰�d˜OÕ,r   c                 ó(   • U R                  SS5        g)zI
Two application-data bytes in the default state get delivered
together.
ó   bc)rd  r•  Nr‘  r   s    r   Útest_twoApplicationDataBytesÚ(TelnetTests.test_twoApplicationDataBytes¹  s   € ð
 	�‰�eÐ-Õ.r   c                 óJ   • U R                  S[        R                  -   S5        g)zf
Three application-data bytes followed by a control byte get
delivered, but the control byte doesn't.
ó   def)rd  r™  N©r�  r   r‘   r   s    r   Útest_threeApplicationDataBytesÚ*TelnetTests.test_threeApplicationDataBytesÀ  s   € ð
 	�‰�fœvŸz™zÑ)Ð+<Õ=r   c                 ó®   • U R                  [        R                  5        U R                  [        R                  S-   S[        R                  S-   45        g)za
IAC in the escaped state gets delivered and so does another
application-data byte following it.
ó   grd  Nrš  r   s    r   Útest_escapedControlÚTelnetTests.test_escapedControlÇ  s9   € ð
 	�‰”f—j‘jÔ!Ø�‰”f—j‘j 4Ñ'¨'´6·:±:ÀÑ3DÐ)EÕFr   c                 óø  • U R                  S5        U R                  SS5        U R                  SS5        U R                  S5        U R                  SS5        U R                  SS5        U R                  S5        U R                  SS	5        U R                  S
S	5        U R                  S5        U R                  [        R                  [        R                  -   S-   SS[        R                  -   S-   45        g)a�  
A carriage return only puts the protocol into the newline state.  A
linefeed in the newline state causes just the newline to be
delivered.  A nul in the newline state causes a carriage return to
be delivered.  An IAC in the newline state causes a carriage return
to be delivered and puts the protocol into the escaped state.
Anything else causes a carriage return and that thing to be
delivered.
r†   r„   )rd  r„   s   
rr  )rd  r†   s    r�  )rd  ó   ar¢  ó   xrd  Nrš  r   s    r   Útest_carriageReturnÚTelnetTests.test_carriageReturnÏ  sÄ   € ð 	�‰�eÔØ�‰�eÐ-Ô.Ø�‰�gÐ/Ô0à�‰�eÔØ�‰�eÐ-Ô.Ø�‰�gÐ/Ô0à�‰�eÔØ�‰�dÐ-Ô.Ø�‰�fÐ/Ô0à�‰�eÔØ�‰Ü�J‰JœŸ™Ñ# dÑ*¨W°e¼f¿j¹jÑ6HÈ4Ñ6OÐ,Põ	
r   c                 ó�   • U R                  S[        R                  -   [        R                  -   SS[        R                  S45        g)z\
Application bytes received before a command are delivered before the
command is processed.
r£  )rd  r£  rY   N)r�  r   r‘   r   r   s    r   Ú'test_applicationDataBeforeSimpleCommandÚ3TelnetTests.test_applicationDataBeforeSimpleCommandê  s6   € ð
 	�‰Ø”6—:‘:Ñ¤§
¡
Ñ*ØØœŸ
™
 DÐ)õ	
r   c                 ó¸   • 0 U R                   l        U R                  S[        R                  -   [        R
                  -   S-   SS[        R
                  S45        g)zf
Application bytes received before a WILL/WONT/DO/DONT are delivered
before the command is processed.
ó   yrr  )rd  rª  rY   N)ry   r1   r�  r   r‘   rÑ   r   s    r   Ú!test_applicationDataBeforeCommandÚ-TelnetTests.test_applicationDataBeforeCommandõ  sG   € ð
 $&ˆ�‰Ô Ø�‰Ø”6—:‘:Ñ¤§¡Ñ+¨gÑ5ØØœŸ™ WÐ-õ	
r   c                 óÀ   • U R                  S[        R                  -   [        R                  -   S-   [        R                  -   [        R                  -   SSSS/45        g)zo
Application bytes received before a subnegotiation command are
delivered before the negotiation is processed.
ó   zs   Qx)rd  r®  rk  ó   Qr£  N)r�  r   r‘   r·   r¸   r   s    r   Ú(test_applicationDataBeforeSubnegotiationÚ4TelnetTests.test_applicationDataBeforeSubnegotiation  sK   € ð
 	�‰Ø”6—:‘:Ñ¤§	¡	Ñ)¨EÑ1´F·J±JÑ>ÄÇÁÑJØØ˜$  Ð'õ	
r   )ry   N)ra   rb   rc   rd   r\  rv   rs  rv  r{  r~  r…  rˆ  r�  r’  r–  r›  rŸ  r¤  r§  r«  r°  re   r   r   r   rn  rn  _  s[   † ñò%ò;ò<òRòSò
ò 
Mò3ò-ò/ò>òGò
ò6	
ò

õ	
r   rn  N)r\  Úzope.interfacer   Úzope.interface.verifyr   Útwisted.conchr   Útwisted.internetr   Útwisted.python.compatr   Útwisted.testr   Útwisted.trialr	   rk   r   ÚTestCaserg   rp   r`  r^  rn  r   r   r   Ú<module>rº     s‘   ðñ
õ
 'Ý .å  Ý "Ý +Ý &Ý "ñ ˆV×#Ñ#Ó$÷;ð ;ó %ð;ô|0�h×'Ñ'ô 0ôd1˜8×,Ñ,ô d1ôN9�—‘ô 9ô8k
�(×#Ñ#õ k
r   