HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/lib/python3/dist-packages/twisted/test/__pycache__/test_ssl.cpython-38.pyc
U


W[&]�@s�dZddlmZmZddlmZddlmZddlm	Z	m
Z
mZmZddl
mZddlmZddlmZdd	lmZdd
lmZddlmZddlZddlZz0dd
lmamZddlmaddlm Z m!Z!Wn"e"k
r�dd�Z#e#�YnXzddlm$Z%Wne"k
�rdZ%YnXddl&m'Z'Gdd�dej(�Z)Gdd�dej(�Z*Gdd�de	j+�Z,Gdd�de	j+�Z-e'ej.�Gdd�de	j+��Z/dd�Z0d d!�Z1Gd"d#�d#�Z2tdk	�r�Gd$d%�d%tj3�Z4Gd&d'�d'eej5�Z6Gd(d)�d)ej5�Z7Gd*d+�d+e7�Z8Gd,d-�d-ej5�Z9Gd.d/�d/ej5e2�Z:Gd0d1�d1�Z;Gd2d3�d3ej5�Z<Gd4d5�d5ej5�Z=e�>e
d�dk�r�e6e7e8e9e:e<e=fD]Z?d6e?_@�qxdS)7z 
Tests for twisted SSL support.
�)�division�absolute_import)�FilePath)�unittest)�protocol�reactor�
interfaces�defer)�ConnectionDone)�basic)�
requireModule)�platform)�ProperlyCloseFilesMixin)�waitUntilAllDisconnectedN)�SSL�crypto)�ssl)�ClientTLSContext�certPathcCsdaadS�N)rr�rr�7/usr/lib/python3/dist-packages/twisted/test/test_ssl.py�_noSSLsr)�tls)�implementerc@sBeZdZdZdddgZddgZdd�Zd	d
�Zdd�Zd
d�Z	dS)�UnintelligentProtocola
    @ivar deferred: a deferred that will fire at connection lost.
    @type deferred: L{defer.Deferred}

    @cvar pretext: text sent before TLS is set up.
    @type pretext: C{bytes}

    @cvar posttext: text sent after TLS is set up.
    @type posttext: C{bytes}
    s
first lineslast thing before tls starts�STARTTLSsfirst thing after tls startedslast thing evercCst��|_dSr�r	�Deferred�deferred��selfrrr�__init__=szUnintelligentProtocol.__init__cCs|jD]}|�|�qdSr)�pretext�sendLine)r!�lrrr�connectionMadeAs
z$UnintelligentProtocol.connectionMadecCs@|dkr<|j�t�|jj�|jD]}|�|�q"|j��dS)N�READY)�	transport�startTLSr�factory�client�posttextr$�loseConnection)r!�liner%rrr�lineReceivedFs

z"UnintelligentProtocol.lineReceivedcCs|j�d�dSr�r�callback�r!�reasonrrr�connectionLostNsz$UnintelligentProtocol.connectionLostN)
�__name__�
__module__�__qualname__�__doc__r#r,r"r&r/r4rrrrr)s��rc@s:eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�
LineCollectoraJ
    @ivar deferred: a deferred that will fire at connection lost.
    @type deferred: L{defer.Deferred}

    @ivar doTLS: whether the protocol is initiate TLS or not.
    @type doTLS: C{bool}

    @ivar fillBuffer: if set to True, it will send lots of data once
        C{STARTTLS} is received.
    @type fillBuffer: C{bool}
    FcCs||_||_t��|_dSr)�doTLS�
fillBufferr	rr)r!r:r;rrrr"`szLineCollector.__init__cCsd|j_g|j_dS)N�)r*�rawdata�linesr rrrr&fszLineCollector.connectionMadecCsp|jj�|�|dkrl|jr4td�D]}|�d�q$|�d�|jrdtttd�}|j	�
||jj�n|��dS)Nri�s�XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr')ZprivateKeyFileNameZcertificateFileName)
r*r>�appendr;�ranger$r:�ServerTLSContextrr(r)�serverZ
setRawMode)r!r.�xZctxrrrr/ks
�zLineCollector.lineReceivedcCs|jj|7_|j��dSr)r*r=r(r-�r!�datarrr�rawDataReceived|szLineCollector.rawDataReceivedcCs|j�d�dSrr0r2rrrr4�szLineCollector.connectionLostN)F)	r5r6r7r8r"r&r/rFr4rrrrr9Ss
r9c@seZdZdZdd�ZdS)�SingleLineServerProtocolzK
    A protocol that sends a single line of data at C{connectionMade}.
    cCs|j�d�|j��dS)N�+OK <some crap>
)r(�write�getPeerCertificater rrrr&�sz'SingleLineServerProtocol.connectionMadeN)r5r6r7r8r&rrrrrG�srGc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�RecordingClientProtocolzv
    @ivar deferred: a deferred that will fire with first received content.
    @type deferred: L{defer.Deferred}
    cCst��|_dSrrr rrrr"�sz RecordingClientProtocol.__init__cCs|j��dSr)r(rJr rrrr&�sz&RecordingClientProtocol.connectionMadecCs|j�|�dSrr0rDrrr�dataReceived�sz$RecordingClientProtocol.dataReceivedN)r5r6r7r8r"r&rLrrrrrK�srKc@s eZdZdZdd�Zdd�ZdS)� ImmediatelyDisconnectingProtocolz�
    A protocol that disconnect immediately on connection. It fires the
    C{connectionDisconnected} deferred of its factory on connetion lost.
    cCs|j��dSr�r(r-r rrr�handshakeCompleted�sz3ImmediatelyDisconnectingProtocol.handshakeCompletedcCs|jj�d�dSr)r*�connectionDisconnectedr1r2rrrr4�sz/ImmediatelyDisconnectingProtocol.connectionLostN)r5r6r7r8rOr4rrrrrM�srMcCs�t��}|�tjd�t��}|��}||_||_|�|�|�	|d�t�
�}|�d�|�d�|�
d�|�|���|�|���|�|���|�	|d�|||fS)z�
    Create a certificate for given C{organization} and C{organizationalUnit}.

    @return: a tuple of (key, request, certificate) objects.
    iZmd5�r�<)rZPKeyZgenerate_keyZTYPE_RSAZX509ReqZget_subject�OZOUZ
set_pubkeyZsignZX509Zset_serial_numberZgmtime_adj_notBeforeZgmtime_adj_notAfterZ
set_issuerZset_subjectZ
get_pubkey)�organization�organizationalUnit�pkey�reqZsubject�certrrr�generateCertificateObjects�s"



rYc
Csnt||�\}}}d|tjfd|tjfd|tjffD]6\}}}tj�||f��d�}	t	|	��
|tj|��q2dS)z�
    Create certificate files key, req and cert prefixed by C{basename} for
    given C{organization} and C{organizationalUnit}.
    �keyrWrXzutf-8N)rYrZdump_privatekeyZdump_certificate_requestZdump_certificate�os�extsep�join�encoderZ
setContentZFILETYPE_PEM)
�basenamerTrUrVrWrXZext�objZdumpFuncZfNamerrr�generateCertificateFiles�s


�rac@s eZdZdZdd�Zdd�ZdS)�ContextGeneratingMixinah
    Offer methods to create L{ssl.DefaultOpenSSLContextFactory} for both client
    and server.

    @ivar clientBase: prefix of client certificate files.
    @type clientBase: C{str}

    @ivar serverBase: prefix of server certificate files.
    @type serverBase: C{str}

    @ivar clientCtxFactory: a generated context factory to be used in
        L{IReactorSSL.connectSSL}.
    @type clientCtxFactory: L{ssl.DefaultOpenSSLContextFactory}

    @ivar serverCtxFactory: a generated context factory to be used in
        L{IReactorSSL.listenSSL}.
    @type serverCtxFactory: L{ssl.DefaultOpenSSLContextFactory}
    cOsH|��}t|||�tjtj�|df�tj�|df�f|�|�}||fS)NrZrX)�mktemprar�DefaultOpenSSLContextFactoryr[r\r])r!�orgZorgUnit�argsZkwArgs�base�serverCtxFactoryrrr�makeContextFactory�s���z)ContextGeneratingMixin.makeContextFactorycCs,|j||�\|_|_|j||�\|_|_dSr)riZ
clientBase�clientCtxFactoryZ
serverBaserh)r!Z
clientArgsZclientKwArgsZ
serverArgsZserverKwArgsrrr�setupServerAndClients��z+ContextGeneratingMixin.setupServerAndClientN)r5r6r7r8rirkrrrrrb�srbc@seZdZdZdZdd�ZdS)rAze
        A context factory with a default method set to
        L{OpenSSL.SSL.TLSv1_METHOD}.
        FcOs"tj|d<tjj|f|�|�dS)NZ	sslmethod)rZTLSv1_METHODrrdr")r!rf�kwrrrr"s
zServerTLSContext.__init__N)r5r6r7r8ZisClientr"rrrrrA
srAc@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�StolenTCPTestszc
    For SSL transports, test many of the same things which are tested for
    TCP transports.
    cCs.tj�tt����}|��}tj||||d�S)zY
        Create an SSL server with a certificate using L{IReactorSSL.listenSSL}.
        �Z	interface)	rZPrivateCertificateZloadPEMrrZ
getContent�optionsr�	listenSSL)r!�address�
portNumberr*rX�contextFactoryrrr�createServers�zStolenTCPTests.createServercCst��}|�|||�S)zG
        Create an SSL client using L{IReactorSSL.connectSSL}.
        )rZCertificateOptions�
connectSSL)r!rqrrZ
clientCreatorrsrrr�
connectClient'szStolenTCPTests.connectClientcCstjS)z�
        Return L{OpenSSL.SSL.Error} as the expected error type which will be
        raised by a write to the L{OpenSSL.SSL.Connection} object after it has
        been closed.
        )r�Errorr rrr�getHandleExceptionType/sz%StolenTCPTests.getHandleExceptionTypecCs$td�dkrt��dkrtjSdgS)a
        Return the argument L{OpenSSL.SSL.Error} will be constructed with for
        this case. This is basically just a random OpenSSL implementation
        detail. It would be better if this test worked in a way which did not
        require this.
        ztwisted.protocols.tlsNZwin32)zSSL routinesZ	SSL_writezprotocol is shutdown)rr
ZgetType�errnoZWSAENOTSOCKr rrr�getHandleErrorCode8sz!StolenTCPTests.getHandleErrorCodeN)r5r6r7r8rtrvrxrzrrrrrms

	rmc@sFeZdZdZdZdZdZdd�Zddd�Zdd	�Z	d
d�Z
dd
�ZdS)�TLSTestsz�
    Tests for startTLS support.

    @ivar fillBuffer: forwarded to L{LineCollector.fillBuffer}
    @type fillBuffer: C{bool}
    FNcCs4|jjdk	r|jj��|jjdk	r0|jj��dSr)�clientProtor(r-�serverProtor rrr�tearDowncszTLSTests.tearDowncs��|_t��}|_�fdd�|_|r.d|_nd|_�|_t��}|_�fdd�|_|rbd|_nd|_t	j
d|dd�}|�|j�t	�
d|��j|�t��j�jg�S)	a�
        Helper method to run TLS tests.

        @param clientProto: protocol instance attached to the client
            connection.
        @param serverProto: protocol instance attached to the server
            connection.
        @param clientIsServer: flag indicated if client should initiate
            startTLS instead of server.

        @return: a L{defer.Deferred} that will fire when both connections are
            lost.
        cs�Srrr�r|rr�<lambda>zr<z#TLSTests._runTest.<locals>.<lambda>FTcs�Srrr�r}rrr��r<r�	127.0.0.1rn)r|r�
ClientFactory�
clientFactoryrBr+r}�
ServerFactory�
serverFactoryrZ	listenTCP�
addCleanup�
stopListeningZ
connectTCP�getHost�portr	�
gatherResultsr)r!r|r}ZclientIsServerZcfZsfr�r�r|r}r�_runTestjs zTLSTests._runTestcs,�fdd�}��t�td�j��}|�|�S)z~
        Test for server and client startTLS: client should received data both
        before and after the startTLS.
        cs���jjtjtj�dSr)�assertEqualr�r>rr#r,)�ignorer rr�check�s
�z TLSTests.test_TLS.<locals>.checkT�r�rr9r;�addCallback�r!r��drr r�test_TLS�s

�zTLSTests.test_TLScs,�fdd�}��t�td�j��}|�|�S)z�
        Test for server startTLS not followed by a startTLS in client: the data
        received after server startTLS should be received as raw.
        cs&���jjtj����jjd�dS)NzNo encrypted bytes received)r�r�r>rr#Z
assertTruer=�Zignoredr rrr��s�
�z"TLSTests.test_unTLS.<locals>.checkFr�r�rr r�
test_unTLS�s

�zTLSTests.test_unTLScs.�fdd�}��td�j�t�d�}|�|�S)z:
        Test startTLS first initiated by client.
        cs���jjtjtj�dSr)r�r�r>rr#r,r�r rrr��s
�z)TLSTests.test_backwardsTLS.<locals>.checkT)r�r9r;rr�r�rr r�test_backwardsTLS�s�zTLSTests.test_backwardsTLS)F)r5r6r7r8r;r|r}r~r�r�r�r�rrrrr{Vs
&r{c@seZdZdZdZdS)�SpammyTLSTestszA
    Test TLS features with bytes sitting in the out buffer.
    TN)r5r6r7r8r;rrrrr��sr�c@s$eZdZdZdZdd�Zdd�ZdS)�BufferingTestsNcCsB|jjdk	r|jj��|jjdk	r0|jj��tt|j|jg�Sr)r}r(r-r|rrr rrrr~�s
�zBufferingTests.tearDowncs�t��|_t��|_t��}t��}|_�fdd�|_�fdd�|_t�	t
t
�}t��}tj
d||dd�}|�|j�t�d|��j||�}|�|j��j�|jd�S)Ncs�Srrrr�rrr��r<z6BufferingTests.test_openSSLBuffering.<locals>.<lambda>cs�Srrrrrrr��r<rr�rnrH)rGr}rKr|rr�r�r+rrdr�ClientContextFactoryrrpr�r�rur�r�Z
disconnectrr�r�)r!rBr+ZsCTXZcCTXr�ZclientConnectorrr�r�test_openSSLBuffering�s&��z$BufferingTests.test_openSSLBuffering)r5r6r7r}r|r~r�rrrrr��s
r�c@s>eZdZdZdd�Zdd�Zedkr*de_dd	�Zd
d�Z	dS)�ConnectionLostTestsz'
    SSL connection closing tests.
    cs�d}��||dfi||dfi�t��}tj|_t�d|�j��_}t��}t	|_t
��|_t�
d|��j|�j�|j��fdd��S)N�twisted.test.test_ssl�, client�, serverrr�cs
�j��Sr)�
serverPortr�)Z
ignoredResultr rrr�r<z=ConnectionLostTests.testImmediateDisconnect.<locals>.<lambda>)rkrr��Protocolrrprhr�r�rMr	rrPrur�r�rjr�)r!re�serverProtocolFactoryr��clientProtocolFactoryrr r�testImmediateDisconnect�s0

��

�
�z+ConnectionLostTests.testImmediateDisconnectcs�ttj�Gdd�dtj��}d}|�||dfi||dfi�|��t��}�fdd�|_t�d||j	�}|�
|j�|��t��}�fd	d�|_t�
d
|��j||j�dd�}t��j�|��j�|�g�S)
z�
        Both sides of SSL connection close connection; the connections should
        close cleanly, and only after the underlying TCP connection has
        disconnected.
        c@s(eZdZdZdd�Zdd�Zdd�ZdS)	zMConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshakeFcSst��|_dSr)r	r�doner rrrr"szVConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.__init__cSs|j��dSrrNr rrrrOsz`ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.handshakeCompletedcSs|j�|�|`dSr)r�Zerrbackr2rrrr4sz\ConnectionLostTests.test_bothSidesLoseConnection.<locals>.CloseAfterHandshake.connectionLostN)r5r6r7ZgotDatar"rOr4rrrr�CloseAfterHandshakesr�r�r�r�cs�Srrr��serverProtocolrrr�&r<zBConnectionLostTests.test_bothSidesLoseConnection.<locals>.<lambda>rcs�Srrr��clientProtocolrrr�-r<r�cSs|�t�dSr)�trapr
)Zfailurerrr�checkResult1szEConnectionLostTests.test_bothSidesLoseConnection.<locals>.checkResult)rr�IHandshakeListenerrr�rkr�rrprhr�r�r�rur�r�rjr	r�r�Z
addErrback)r!r�rer�r�r�r�r�r�r�r�test_bothSidesLoseConnections>


���

��z0ConnectionLostTests.test_bothSidesLoseConnectionNz*Old SSL code doesn't always close cleanly.c	s�d}|�||dfi||dfi�dd�}|j���tj|�t��}t�	��|j
�_t��}�fdd�|_t
�d||j�|_}t��}t�	��|j
�_t��}�fd	d�|_t
�d
|��j||j�tj||gdd�}|�|j�S)
Nr�r�r�cWsdS)NFr)�arrr�verifyAsz4ConnectionLostTests.testFailedVerify.<locals>.verifycs�Srrrr�rrr�Ir<z6ConnectionLostTests.testFailedVerify.<locals>.<lambda>rcs�Srrrr�rrr�Qr<r�T)Z
consumeErrors)rkrj�
getContextZ
set_verifyrZVERIFY_PEERr	rrr�r1r4r�rrprhr�r�rur�r�ZDeferredListr��_cbLostConns)	r!rer�ZserverConnLostr�r�ZclientConnLostr�Zdlrr�r�testFailedVerify;s<

��
�z$ConnectionLostTests.testFailedVerifycCsh|\\}}\}}|�|�|�|�tjg}t��rJddlm}|�|�|j|�|j|�|j	�
�S)Nr)�ConnectionLost)�assertFalserrwr
Z	isWindows�twisted.internet.errorr�r?r�r�r�)r!ZresultsZsSuccessZsResultZcSuccessZcResultZacceptableErrorsr�rrrr�Ys





z ConnectionLostTests._cbLostConns)
r5r6r7r8r�r��newTLS�skipr�r�rrrrr��s,r�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�FakeContextzK
    L{OpenSSL.SSL.Context} double which can more easily be inspected.
    cCs||_d|_dS)Nr)�_method�_options)r!�methodrrrr"xszFakeContext.__init__cCs|j|O_dSr)r�)r!rorrr�set_options}szFakeContext.set_optionscCsdSrr�r!ZfileNamerrr�use_certificate_file�sz FakeContext.use_certificate_filecCsdSrrr�rrr�use_privatekey_file�szFakeContext.use_privatekey_fileN)r5r6r7r8r"r�r�r�rrrrr�ts
r�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�!DefaultOpenSSLContextFactoryTestsz8
    Tests for L{ssl.DefaultOpenSSLContextFactory}.
    cCs"tjtttd�|_|j��|_dS)N)�_contextFactory)rrdrr�rsr��contextr rrr�setUp�s�z'DefaultOpenSSLContextFactoryTests.setUpcCsV|�|jjtj�|�|jjtj@tj�|�|jjtj@�|�|jjtj	@�dS)z�
        L{ssl.DefaultOpenSSLContextFactory.getContext} returns an SSL context
        which can use SSLv3 or TLSv1 but not SSLv2.
        N�
r�r�r�rZ
SSLv23_METHODr�ZOP_NO_SSLv2r�ZOP_NO_SSLv3ZOP_NO_TLSv1r rrr�test_method�s�z-DefaultOpenSSLContextFactoryTests.test_methodcCs|�tjtjt|���dS)z�
        Instantiating L{ssl.DefaultOpenSSLContextFactory} with a certificate
        filename which does not identify an existing file results in the
        initializer raising L{OpenSSL.SSL.Error}.
        N)�assertRaisesrrwrrdrrcr rrr�test_missingCertificateFile�s�z=DefaultOpenSSLContextFactoryTests.test_missingCertificateFilecCs|�tjtj|��t�dS)z�
        Instantiating L{ssl.DefaultOpenSSLContextFactory} with a private key
        filename which does not identify an existing file results in the
        initializer raising L{OpenSSL.SSL.Error}.
        N)r�rrwrrdrcrr rrr�test_missingPrivateKeyFile�s�z<DefaultOpenSSLContextFactoryTests.test_missingPrivateKeyFileN)r5r6r7r8r�r�r�r�rrrrr��s
r�c@s eZdZdZdd�Zdd�ZdS)�ClientContextFactoryTestsz0
    Tests for L{ssl.ClientContextFactory}.
    cCs"t��|_t|j_|j��|_dSr)rr�rsr�r�r�r�r rrrr��s
zClientContextFactoryTests.setUpcCsV|�|jjtj�|�|jjtj@tj�|�|jjtj@�|�|jjtj	@�dS)z~
        L{ssl.ClientContextFactory.getContext} returns a context which can use
        SSLv3 or TLSv1 but not SSLv2.
        Nr�r rrrr��s�z%ClientContextFactoryTests.test_methodN)r5r6r7r8r�r�rrrrr��sr�z2Reactor does not support SSL, cannot run SSL tests)Ar8Z
__future__rrZtwisted.python.filepathrZ
twisted.trialrZtwisted.internetrrrr	r�r
Ztwisted.protocolsrZtwisted.python.reflectrZtwisted.python.runtimer
Ztwisted.test.test_tcprZtwisted.test.proto_helpersrr[ryZOpenSSLrrrZtwisted.test.ssl_helpersrr�ImportErrorrrr�Zzope.interfacerZLineReceiverrr9r�rGrKr�rMrYrarbrdrAZTestCasermr{r�r�r�r�r�r�ZIReactorSSLZtCaser�rrrr�<module>sf
*3(

?i(4�