Ë ‚Ö¦i›|ãóz—ddlZddlZddlZ ddlZddlmZddlmZddlmZddlm Z ddl m Z e�ejejfZGd„d ej«ZGd „d ej«Zd „Zd „ZGd„de j(e j*«ZGd„dej.«Zy#e$rdZYŒ§wxYw)éNé)Ú constants)Ú exceptions)Ú protocols)Ú transports)Úloggercó —eZdZdZdZdZdZdZy)ÚSSLProtocolStateÚ UNWRAPPEDÚ DO_HANDSHAKEÚWRAPPEDÚFLUSHINGÚSHUTDOWNN)Ú__name__Ú __module__Ú __qualname__r r r rr©óú)/usr/lib64/python3.12/asyncio/sslproto.pyr r s„Ø€IØ!€LØ€GØ€HØ�Hrr có—eZdZdZdZdZdZy)ÚAppProtocolStateÚ STATE_INITÚSTATE_CON_MADEÚ STATE_EOFÚSTATE_CON_LOSTN)rrrrrrrrrrrrs„ð€JØ%€NØ€IØ%�NrrcóZ—|r td«‚tj«}|sd|_|S)Nz(Server side SSL needs a valid SSLContextF)Ú ValueErrorÚsslÚcreate_default_contextÚcheck_hostname)Ú server_sideÚserver_hostnameÚ sslcontexts rÚ_create_transport_contextr$/s2€ÙÜÐCÓDÐDô ×+Ñ+Ó-€JÙ Ø$)ˆ Ô!Ø Ðrcó„—|€|€|dz}n |}d|z}n|}|€|dz}n|}||cxk\rdk\sntd|›d|›d�«‚||fS)Niérzhigh (z) must be >= low (z) must be >= 0)r)ÚhighÚlowÚkbÚhiÚlos rÚadd_flowcontrol_defaultsr,=sh€Ø €|Ø ˆ;Ø�d‘‰BàˆBØ�R‘‰Bà ˆØ €{Ø �1‰W‰à ˆà �Œ=�qŒ=ÝÚšbð"ó#ð #ð ˆrˆ6€Mrcóà—eZdZdZej j Zd„Zdd„Z d„Z d„Z d„Z d„Z efd „Zd „Zd „Zd „Zdd „Zd„Zd„Zdd„Zd„Zd„Zed„«Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!y)Ú_SSLProtocolTransportTcó.—||_||_d|_y)NF)Ú_loopÚ _ssl_protocolÚ_closed)ÚselfÚloopÚ ssl_protocols rÚ__init__z_SSLProtocolTransport.__init__Xs€ØˆŒ Ø)ˆÔ؈� rNcó:—|jj||«S)z#Get optional transport information.)r1Ú_get_extra_info©r3ÚnameÚdefaults rÚget_extra_infoz$_SSLProtocolTransport.get_extra_info]s€à×!Ñ!×1Ñ1°$¸Ó@Ð@rcó:—|jj|«y©N)r1Ú_set_app_protocol)r3Úprotocols rÚ set_protocolz"_SSLProtocolTransport.set_protocolas€Ø ×Ñ×,Ñ,¨XÕ6rcó.—|jjSr>)r1Ú _app_protocol©r3s rÚ get_protocolz"_SSLProtocolTransport.get_protocolds€Ø×!Ñ!×/Ñ/Ð/rcóR—|jxs|jj«Sr>)r2r1Ú_is_transport_closingrDs rÚ is_closingz _SSLProtocolTransport.is_closinggs €Ø�|‰|ÒI˜t×1Ñ1×GÑGÓIÐIrcón—|js"d|_|jj«yd|_y)a Close the transport. Buffered data will be flushed asynchronously. No more data will be received. After all buffered data is flushed, the protocol's connection_lost() method will (eventually) called with None as its argument. TN)r2r1Ú_start_shutdownrDs rÚclosez_SSLProtocolTransport.closejs,€ð�|Š|؈DŒLØ × Ñ × .Ñ .Õ 0à!%ˆDÕ rcóX—|jsd|_|jdt«yy)NTz9unclosed transport )r2ÚwarnÚResourceWarning)r3Ú _warningss rÚ__del__z_SSLProtocolTransport.__del__xs)€Ø�|Š|؈DŒLØ �N‰NðÜ*õ ,ðrcó0—|jj Sr>)r1Ú_app_reading_pausedrDs rÚ is_readingz _SSLProtocolTransport.is_readings€Ø×%Ñ%×9Ñ9Ð9Ð9rcó8—|jj«y)z”Pause the receiving end. No data will be passed to the protocol's data_received() method until resume_reading() is called. N)r1Ú_pause_readingrDs rÚ pause_readingz#_SSLProtocolTransport.pause_reading‚s€ð ×Ñ×)Ñ)Õ+rcó8—|jj«y)z…Resume the receiving end. Data received will once again be passed to the protocol's data_received() method. N)r1Ú_resume_readingrDs rÚresume_readingz$_SSLProtocolTransport.resume_readingŠs€ð ×Ñ×*Ñ*Õ,rcóp—|jj||«|jj«y)a¦Set the high- and low-water limits for write flow control. These two values control when to call the protocol's pause_writing() and resume_writing() methods. If specified, the low-water limit must be less than or equal to the high-water limit. Neither value can be negative. The defaults are implementation-specific. If only the high-water limit is given, the low-water limit defaults to an implementation-specific value less than or equal to the high-water limit. Setting high to zero forces low to zero as well, and causes pause_writing() to be called whenever the buffer becomes non-empty. Setting low to zero causes resume_writing() to be called only once the buffer is empty. Use of zero for either limit is generally sub-optimal as it reduces opportunities for doing I/O and computation concurrently. N)r1Ú_set_write_buffer_limitsÚ_control_app_writing©r3r'r(s rÚset_write_buffer_limitsz-_SSLProtocolTransport.set_write_buffer_limits’s,€ð& ×Ñ×3Ñ3°D¸#Ô>Ø ×Ñ×/Ñ/Õ1rcóZ—|jj|jjfSr>)r1Ú_outgoing_low_waterÚ_outgoing_high_waterrDs rÚget_write_buffer_limitsz-_SSLProtocolTransport.get_write_buffer_limits¨ó*€Ø×"Ñ"×6Ñ6Ø×"Ñ"×7Ñ7ð9ð 9rcó6—|jj«S)z-Return the current size of the write buffers.)r1Ú_get_write_buffer_sizerDs rÚget_write_buffer_sizez+_SSLProtocolTransport.get_write_buffer_size¬s€à×!Ñ!×8Ñ8Ó:Ð:rcóp—|jj||«|jj«y)a¯Set the high- and low-water limits for read flow control. These two values control when to call the upstream transport's pause_reading() and resume_reading() methods. If specified, the low-water limit must be less than or equal to the high-water limit. Neither value can be negative. The defaults are implementation-specific. If only the high-water limit is given, the low-water limit defaults to an implementation-specific value less than or equal to the high-water limit. Setting high to zero forces low to zero as well, and causes pause_reading() to be called whenever the buffer becomes non-empty. Setting low to zero causes resume_reading() to be called only once the buffer is empty. Use of zero for either limit is generally sub-optimal as it reduces opportunities for doing I/O and computation concurrently. N)r1Ú_set_read_buffer_limitsÚ_control_ssl_readingr]s rÚset_read_buffer_limitsz,_SSLProtocolTransport.set_read_buffer_limits°s,€ð& ×Ñ×2Ñ2°4¸Ô=Ø ×Ñ×/Ñ/Õ1rcóZ—|jj|jjfSr>)r1Ú_incoming_low_waterÚ_incoming_high_waterrDs rÚget_read_buffer_limitsz,_SSLProtocolTransport.get_read_buffer_limitsÆrcrcó6—|jj«S)z+Return the current size of the read buffer.)r1Ú_get_read_buffer_sizerDs rÚget_read_buffer_sizez*_SSLProtocolTransport.get_read_buffer_sizeÊs€à×!Ñ!×7Ñ7Ó9Ð9rcó.—|jjSr>)r1Ú_app_writing_pausedrDs rÚ_protocol_pausedz&_SSLProtocolTransport._protocol_pausedÎs€ð×!Ñ!×5Ñ5Ð5rcóº—t|tttf«s!t dt |«j ›�«‚|sy|jj|f«y)z�Write some data bytes to the transport. This does not block; it buffers the data and arranges for it to be sent out asynchronously. z+data: expecting a bytes-like instance, got N) Ú isinstanceÚbytesÚ bytearrayÚ memoryviewÚ TypeErrorÚtyperr1Ú_write_appdata©r3Údatas rÚwritez_SSLProtocolTransport.writeÓsX€ô ˜$¤¬ ´:Ð >Ô?Üð#Ü#'¨£:×#6Ñ#6Ð"7ð9ó:ð :áØ Ø ×Ñ×)Ñ)¨4¨'Õ2rcó:—|jj|«y)z¯Write a list (or any iterable) of data bytes to the transport. The default implementation concatenates the arguments and calls write() on the result. N)r1r|)r3Ú list_of_datas rÚ writelinesz _SSLProtocolTransport.writelinesàs€ð ×Ñ×)Ñ)¨,Õ7rcó—t‚)zuClose the write end after flushing buffered data. This raises :exc:`NotImplementedError` right now. )ÚNotImplementedErrorrDs rÚ write_eofz_SSLProtocolTransport.write_eofès €ô "Ð!rcó—y)zAReturn True if this transport supports write_eof(), False if not.FrrDs rÚ can_write_eofz#_SSLProtocolTransport.can_write_eofïs€àrcó&—|jd«y)zÝClose the transport immediately. Buffered data will be lost. No more data will be received. The protocol's connection_lost() method will (eventually) be called with None as its argument. N)Ú _force_closerDs rÚabortz_SSLProtocolTransport.abortós€ð ×ј$Õrcób—d|_|j�|jj|«yy©NT)r2r1Ú_abort©r3Úexcs rr‰z"_SSLProtocolTransport._force_closeüs.€ØˆŒ Ø × Ñ Ð )Ø × Ñ × %Ñ % cÕ *ð *rcóž—|jjj|«|jxjt |«z c_yr>)r1Ú_write_backlogÚappendÚ_write_buffer_sizeÚlenr}s rÚ_test__append_write_backlogz1_SSLProtocolTransport._test__append_write_backlogs7€à ×Ñ×)Ñ)×0Ñ0°Ô6Ø ×Ñ×-Ò-´°T³Ñ:Ö-rr>©NN)"rrrÚ_start_tls_compatiblerÚ _SendfileModeÚFALLBACKÚ_sendfile_compatibler6r<rArErHrKÚwarningsrPrSrVrYr^rbrfrjrnrqÚpropertyrtrr‚r…r‡rŠr‰r•rrrr.r.Rsª„ð!ÐØ$×2Ñ2×;Ñ;Ðòó Aò7ò0òJò &ð!)ó,ò:ò,ò-ó2ò,9ò;ó2ò,9ò:ðñ6óð6ò 3ò8ò"òò ò+ó ;rr.có —eZdZdZdZdZdZ d+d„Zd„Zd,d„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd,d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!d„Z"d„Z#d „Z$d!„Z%d-d"„Z&d#„Z'd$„Z(d%„Z)d-d&„Z*d'„Z+d(„Z,d)„Z-d.d*„Z.y)/Ú SSLProtocoliNc óÖ—t€ td«‚t|j«|_t |j«|_|€tj}n|dkrtd|›�«‚| €tj} n| dkrtd| ›�«‚|s t||«}||_ |r |s||_ nd|_ ||_t|¬«|_t#j$«|_d|_||_||_|j/|«d|_d|_d|_||_| |_tj:«|_tj:«|_t@jB|_"d|_#|rtHjJ|_&ntHjN|_&|jjQ|j<|j>|j|j¬«|_)d|_*d|_+d|_,d|_-d|_.|j_«d|_0d|_1d|_2d|_3|ji«|jk«y)Nzstdlib ssl module not availablerz7ssl_handshake_timeout should be a positive number, got z6ssl_shutdown_timeout should be a positive number, got )r#F)r!r")6rÚ RuntimeErrorrxÚmax_sizeÚ _ssl_bufferryÚ_ssl_buffer_viewrÚSSL_HANDSHAKE_TIMEOUTrÚSSL_SHUTDOWN_TIMEOUTr$Ú _server_sideÚ_server_hostnameÚ _sslcontextÚdictÚ_extraÚ collectionsÚdequer‘r“Ú_waiterr0r?Ú_app_transportÚ_app_transport_createdÚ _transportÚ_ssl_handshake_timeoutÚ_ssl_shutdown_timeoutÚ MemoryBIOÚ _incomingÚ _outgoingr r Ú_stateÚ _conn_lostrrÚ _app_staterÚwrap_bioÚ_sslobjÚ_ssl_writing_pausedrRÚ_ssl_reading_pausedrmrlrhÚ _eof_receivedrsrar`r[Ú_get_app_transport) r3r4Ú app_protocolr#Úwaiterr!r"Úcall_connection_madeÚssl_handshake_timeoutÚssl_shutdown_timeouts rr6zSSLProtocol.__init__sE€ô ˆ;ÜÐ@ÓAÐ Aä$ T§]¡]Ó3ˆÔÜ *¨4×+;Ñ+;Ó <ˆÔà Ð (Ü$-×$CÑ$CÑ !Ø " aÒ 'ÜðØ,Ð-ð/ó0ð 0ð Ð 'Ü#,×#AÑ#AÑ Ø ! QÒ &ÜðØ+Ð,ð.ó/ð /ñÜ2ؘ_ó.ˆJð(ˆÔÙ ¡;Ø$3ˆDÕ !à$(ˆDÔ !Ø%ˆÔô jÔ1ˆŒ ô*×/Ñ/Ó1ˆÔØ"#ˆÔàˆŒ ؈Œ Ø ×ј|Ô,Ø"ˆÔØ&+ˆÔ#àˆŒØ&;ˆÔ#Ø%9ˆÔ"䟙›ˆŒÜŸ™›ˆŒÜ&×0Ñ0ˆŒ ؈ŒÙ Ü.×9Ñ9ˆD�Oä.×=Ñ=ˆDŒOØ×'Ñ'×0Ñ0Ø �N‰N˜DŸN™NØ×)Ñ)Ø ×1Ñ1ð1ó3ˆŒ ð$)ˆÔ à#(ˆÔ à#(ˆÔ Ø$%ˆÔ!Ø#$ˆÔ Ø ×$Ñ$Ô&Ø"ˆÔà#(ˆÔ Ø$%ˆÔ!Ø#$ˆÔ Ø ×%Ñ%Ô'Ø ×ÑÕ!rcóÀ—||_t|d«rDt|tj«r*|j |_|j|_d|_ yd|_ y)NÚ get_bufferTF) rCÚhasattrrvrÚBufferedProtocolrÅÚ_app_protocol_get_bufferÚbuffer_updatedÚ_app_protocol_buffer_updatedÚ_app_protocol_is_buffer)r3r¿s rr?zSSLProtocol._set_app_protocolasP€Ø)ˆÔä �L ,Ô /ܘ<¬×)CÑ)CÔDØ,8×,CÑ,CˆDÔ )Ø0<×0KÑ0KˆDÔ -Ø+/ˆDÕ (à+0ˆDÕ (rcóà—|j€y|jj«s@|�#|jj|«d|_y|jjd«d|_yr>)r­Ú cancelledÚ set_exceptionÚ set_resultrŽs rÚ_wakeup_waiterzSSLProtocol._wakeup_waiterlsZ€Ø �<‰<Ð Ø Ø�|‰|×%Ñ%Ô'؈ؗ ‘ ×*Ñ*¨3Ô/ðˆ� ð— ‘ ×'Ñ'¨Ô-؈� rcó¤—|j€9|jr td«‚t|j|«|_d|_|jS)Nz$Creating _SSLProtocolTransport twiceT)r®r¯r r.r0rDs rr¾zSSLProtocol._get_app_transportvsJ€Ø × Ñ Ð &Ø×*Ò*Ü"Ð#IÓJÐJÜ"7¸¿ ¹ ÀDÓ"IˆDÔ Ø*.ˆDÔ 'Ø×"Ñ"Ð"rcóV—|jduxr|jj«Sr>)r°rHrDs rrGz!SSLProtocol._is_transport_closing~s#€Ø�‰ dÐ*ÒK¨t¯©×/IÑ/IÓ/KÐKrcó2—||_|j«y)zXCalled when the low-level connection is made. Start the SSL handshake. N)r°Ú_start_handshake)r3Ú transports rÚconnection_madezSSLProtocol.connection_made�s€ð $ˆŒØ ×ÑÕrcóH—|jj«|jj«|xjdz c_|j �d|j _|jtjk7r|jtjk(s|jtjk(rEtj|_ |jj!|j"j$|«|j'tj(«d|_d|_d|_|j-|«|j.r!|j.j1«d|_|j2r"|j2j1«d|_yy)zÝCalled when the low-level connection is lost or closed. The argument is an exception object or None (the latter meaning a regular EOF is received or the connection was aborted or closed). rNT)r‘ÚclearrµÚreadr·r®r2r¶r r r¸rrrrr0Ú call_soonrCÚconnection_lostÚ _set_stater r°rÐÚ_shutdown_timeout_handleÚcancelÚ_handshake_timeout_handlerŽs rrÛzSSLProtocol.connection_lost‰s9€ð ×Ñ×!Ñ!Ô#Ø �‰×ÑÔØ �Š˜1Ñ�ð × Ñ Ð *Ø*.ˆD× Ñ Ô 'à �;‰;Ô*×7Ñ7Ò 7à—‘Ô#3×#BÑ#BÒBØ—‘Ô#3×#=Ñ#=Ò=ä"2×"AÑ"A�”Ø— ‘ ×$Ñ$ T×%7Ñ%7×%GÑ%GÈÔMØ �‰Ô(×2Ñ2Ô3؈ŒØ"ˆÔØ!ˆÔØ ×јCÔ à × (Ò (Ø × )Ñ )× 0Ñ 0Ô 2Ø,0ˆDÔ )Ø × )Ò )Ø × *Ñ *× 1Ñ 1Ô 3Ø-1ˆDÕ *ð *rcóâ—|}|dks||jkDr |j}t|j«|kr*t|«|_t |j«|_|j S©Nr)r¡r”r¢rxryr£)r3ÚnÚwants rrÅzSSLProtocol.get_buffer­s`€ØˆØ �1Š9˜˜tŸ}™}Ò,Ø—=‘=ˆDÜ ˆt×ÑÓ  4Ò 'Ü(¨›ˆDÔ Ü$.¨t×/?Ñ/?Ó$@ˆDÔ !Ø×$Ñ$Ð$rcóÄ—|jj|jd|«|jtj k(r|j «y|jtjk(r|j«y|jtjk(r|j«y|jtjk(r|j«yyr>) r´rr£r¶r r Ú _do_handshaker Ú_do_readrÚ _do_flushrÚ _do_shutdown)r3Únbytess rrÉzSSLProtocol.buffer_updated¶s�€Ø �‰×јT×2Ñ2°7°FÐ;Ô<à �;‰;Ô*×7Ñ7Ò 7Ø × Ñ Õ à �[‰[Ô,×4Ñ4Ò 4Ø �M‰M�Oà �[‰[Ô,×5Ñ5Ò 5Ø �N‰NÕ à �[‰[Ô,×5Ñ5Ò 5Ø × Ñ Õ ð6rcóô—d|_ |jj«rtjd|«|j t jk(r|jt«y|j t jk(r=|jt j«|jry|j«y|j t jk(r@|j«|jt j «|j#«y|j t j k(r|j#«yy#t$$r|j&j)«‚wxYw)aCalled when the other end of the low-level stream is half-closed. If this returns a false value (including None), the transport will close itself. If it returns a true value, closing the transport is up to the protocol. Tz%r received EOFN)r½r0Ú get_debugrÚdebugr¶r r Ú_on_handshake_completeÚConnectionResetErrorr rÜrrRrçÚ _do_writerrèÚ Exceptionr°rKrDs rÚ eof_receivedzSSLProtocol.eof_receivedÅs€ð"ˆÔð Ø�z‰z×#Ñ#Ô%Ü— ‘ Ð.°Ô5à�{‰{Ô.×;Ñ;Ò;Ø×+Ñ+Ô,@ÕAà—‘Ô 0× 8Ñ 8Ò8Ø—‘Ô 0× 9Ñ 9Ô:Ø×+Ò+Øà—N‘NÕ$à—‘Ô 0× 9Ñ 9Ò9Ø—‘Ô Ø—‘Ô 0× 9Ñ 9Ô:Ø×!Ñ!Õ#à—‘Ô 0× 9Ñ 9Ò9Ø×!Ñ!Õ#ð:øôò Ø �O‰O× !Ñ !Ô #Ø ð ús&‰A"EÁ,AEÂ5EÃAEÄ#-EÅ%E7có�—||jvr|j|S|j�|jj||«S|Sr>)rªr°r<r9s rr8zSSLProtocol._get_extra_infoèsC€Ø �4—;‘;Ñ Ø—;‘;˜tÑ$Ð $Ø �_‰_Ð (Ø—?‘?×1Ñ1°$¸Ó@Ð @àˆNrcó&—d}|tjk(rd}nË|jtjk(r|tjk(rd}n˜|jtjk(r|tjk(rd}ne|jtjk(r|tj k(rd}n2|jtj k(r|tj k(rd}|r||_ytdj|j|««‚)NFTz!cannot switch state from {} to {}) r r r¶r r rrr Úformat)r3Ú new_stateÚalloweds rrÜzSSLProtocol._set_stateðsï€Øˆà Ô(×2Ñ2Ò 2؉Gð �K‰KÔ+×5Ñ5Ò 5Ø Ô)×6Ñ6Ò 6à‰Gð �K‰KÔ+×8Ñ8Ò 8Ø Ô)×1Ñ1Ò 1à‰Gð �K‰KÔ+×3Ñ3Ò 3Ø Ô)×2Ñ2Ò 2à‰Gð �K‰KÔ+×4Ñ4Ò 4Ø Ô)×2Ñ2Ò 2àˆGá Ø#ˆD�KôØ3×:Ñ:Ø—K‘K ó,ó-ð -rcón‡—‰jj«r6tjd‰«‰jj «‰_nd‰_‰j tj«‰jj‰jˆfd„«‰_ ‰j«y)Nz%r starts SSL handshakecó$•—‰j«Sr>)Ú_check_handshake_timeoutrDs€rÚz.SSLProtocol._start_handshake..$sø€¨$×*GÑ*GÔ*Ir) r0rërrìÚtimeÚ_handshake_start_timerÜr r Ú call_laterr±rßrårDs`rrÔzSSLProtocol._start_handshakes†ø€Ø �:‰:× Ñ Ô !Ü �L‰LÐ2°DÔ 9Ø)-¯©¯©Ó):ˆDÕ &à)-ˆDÔ &à �‰Ô(×5Ñ5Ô6ð �J‰J× !Ñ ! $×"=Ñ"=Û"Ió Kð Ô&ð ×ÑÕrcó”—|jtjk(r+d|j›d�}|j t |««yy)Nz$SSL handshake is taking longer than z! seconds: aborting the connection)r¶r r r±Ú _fatal_errorÚConnectionAbortedError)r3Úmsgs rrùz$SSLProtocol._check_handshake_timeout(sN€Ø �;‰;Ô*×7Ñ7Ò 7à6Ø×.Ñ.Ð/ð0*ð+ð ð × Ñ Ô4°SÓ9Õ :ð 8rcóò— |jj«|jd«y#t$r|j «Yyt j $r}|j|«Yd}~yd}~wwxYwr>)rºÚ do_handshakeríÚSSLAgainErrorsÚ_process_outgoingrÚSSLErrorrŽs rråzSSLProtocol._do_handshake1sb€ð .Ø �L‰L× %Ñ %Ô 'ð × 'Ñ '¨Õ -øô ò %Ø × "Ñ "Ö $Ü�|‰|ò -Ø × 'Ñ '¨× ,Ñ ,ûð -ús‚.®A6Á A6ÁA1Á1A6cóô—|j�!|jj«d|_|j} |€ |jtj «n|‚|j «}|jj«rA|jj!«|j"z }t%j&d||dz«|j(j+||j-«|j/«|¬«|j0t2j4k(r>t2j6|_|j8j;|j=««|j«|j?«y#t$rm}d}|jtj«t|tj«rd}nd}|j||«|j|«Yd}~yd}~wwxYw)Nz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg@�@)ÚpeercertÚcipherÚ compressionÚ ssl_object) rßrÞrºrÜr r Ú getpeercertrðr rvrÚCertificateErrorrÿrÐr0rërûrürrìrªÚupdater r r¸rrrrCrÖr¾ræ)r3Ú handshake_excÚsslobjrr�rÚdts rríz"SSLProtocol._on_handshake_complete;s‘€Ø × )Ñ )Ð 5Ø × *Ñ *× 1Ñ 1Ô 3Ø-1ˆDÔ *à—‘ˆð ØÐ$Ø—‘Ô 0× 8Ñ 8Õ9à#Ð#à×)Ñ)Ó+ˆHð �:‰:× Ñ Ô !Ø—‘—‘Ó" T×%?Ñ%?Ñ?ˆBÜ �L‰LÐ9¸4ÀÀcÁÔ Jð � ‰ ×Ñ HØ"(§-¡-£/Ø'-×'9Ñ'9Ó';Ø&,ð ô .ð �?‰?Ô.×9Ñ9Ò 9Ü.×=Ñ=ˆDŒOØ × Ñ × .Ñ .¨t×/FÑ/FÓ/HÔ IØ ×ÑÔØ � ‰ �øô1ò Ø ˆMØ �O‰OÔ,×6Ñ6Ô 7ܘ#œs×3Ñ3Ô4ØI‘à,�Ø × Ñ ˜c 3Ô 'Ø × Ñ  Ô $Ü ûð ús»4FÆ G7Æ A#G2Ç2G7cóЇ—‰jtjtjtjfvry‰j �d‰j _‰jtjk(r‰jd«y‰jtj«‰jj‰jˆfd„«‰_ ‰j«y)NTcó$•—‰j«Sr>)Ú_check_shutdown_timeoutrDs€rrúz-SSLProtocol._start_shutdown..usø€˜×4Ñ4Ô6r)r¶r rrr r®r2r r�rÜr0rýr²rÝrçrDs`rrJzSSLProtocol._start_shutdownds¯ø€à �K‰KÜ ×)Ñ)Ü ×)Ñ)Ü ×*Ñ*ðñ ð Ø × Ñ Ð *Ø*.ˆD× Ñ Ô 'Ø �;‰;Ô*×7Ñ7Ò 7Ø �K‰K˜Õ à �O‰OÔ,×5Ñ5Ô 6Ø,0¯J©J×,AÑ,AØ×*Ñ*Û6ó-ˆDÔ )ð �N‰NÕ rcóº—|jtjtjfvr/|jj t jd««yy)NzSSL shutdown timed out)r¶r rrr°r‰rÚ TimeoutErrorrDs rrz#SSLProtocol._check_shutdown_timeoutysN€à �K‰KÜ ×)Ñ)Ü ×)Ñ)ðñ ð �O‰O× (Ñ (Ü×'Ñ'Ð(@ÓAõ Cð  rcó‚—|j«|jtj«|j «yr>)rærÜr rrèrDs rrçzSSLProtocol._do_flushƒs*€Ø � ‰ ŒØ �‰Ô(×1Ñ1Ô2Ø ×ÑÕrcóJ— |js|jj«|j«|j «|j d«y#t $r|j«Yytj$r}|j |«Yd}~yd}~wwxYwr>) r½rºÚunwraprÚ_call_eof_receivedÚ_on_shutdown_completerrrrŽs rrèzSSLProtocol._do_shutdownˆsƒ€ð -Ø×%Ò%Ø— ‘ ×#Ñ#Ô%ð × "Ñ "Ô $Ø × #Ñ #Ô %Ø × &Ñ & tÕ ,øôò %Ø × "Ñ "Ö $Ü�|‰|ò ,Ø × &Ñ & s× +Ñ +ûð ,ús‚&AÁB"Á5B"ÂBÂB"cóä—|j�!|jj«d|_|r|j|«y|jj |j j «yr>)rÝrÞrÿr0rÚr°rK)r3Ú shutdown_excs rrz!SSLProtocol._on_shutdown_complete•sU€Ø × (Ñ (Ð 4Ø × )Ñ )× 0Ñ 0Ô 2Ø,0ˆDÔ )á Ø × Ñ ˜lÕ +à �J‰J× Ñ  §¡×!6Ñ!6Õ 7rcó’—|jtj«|j�|jj |«yyr>)rÜr r r°r‰rŽs rr�zSSLProtocol._abortŸs6€Ø �‰Ô(×2Ñ2Ô3Ø �?‰?Ð &Ø �O‰O× (Ñ (¨Õ -ð 'rcó8—|jtjtjtjfvrH|j t jk\rtjd«|xj dz c_y|D];}|jj|«|xjt|«z c_ Œ= |jtjk(r|j«yy#t $r}|j#|d«Yd}~yd}~wwxYw)NzSSL connection is closedrúFatal error on SSL protocol)r¶r rrr r·rÚ!LOG_THRESHOLD_FOR_CONNLOST_WRITESrÚwarningr‘r’r“r”r rïrðrÿ)r3r�r~Úexs rr|zSSLProtocol._write_appdata¦sã€à �K‰KÜ ×)Ñ)Ü ×)Ñ)Ü ×*Ñ*ðñ ð �‰¤)×"MÑ"MÒMÜ—‘Ð9Ô:Ø �OŠO˜qÑ �OØ ã ˆDØ × Ñ × &Ñ & tÔ ,Ø × #Ò #¤s¨4£yÑ 0Ö #ð!ð AØ�{‰{Ô.×6Ñ6Ò6Ø—‘Õ ð7øôò AØ × Ñ ˜bÐ"?× @Ñ @ûð AúsÃ-C4Ã4 DÃ=DÄDcó~— |jr‘|jd}|jj|«}t|«}||kr(||d|jd<|xj|zc_n"|jd=|xj|zc_|jrŒ‘|j «y#t $rYŒwxYwrá)r‘rºrr”r“rr)r3r~ÚcountÚdata_lens rrïzSSLProtocol._do_write¾s¸€ð Ø×%Ò%Ø×*Ñ*¨1Ñ-�ØŸ ™ ×*Ñ*¨4Ó0�ܘt›9�ؘ8Ò#Ø-1°%°&¨\�D×'Ñ'¨Ñ*Ø×+Ò+¨uÑ4Ö+à×+Ñ+¨AÐ.Ø×+Ò+¨xÑ7Õ+ð×%Ó%ð ×ÑÕ øôò Ù ð ús‚BB0Â0 B<Â;B<có¼—|js@|jj«}t|«r|jj |«|j «yr>)r»rµrÙr”r°rr\r}s rrzSSLProtocol._process_outgoingÎsB€Ø×'Ò'Ø—>‘>×&Ñ&Ó(ˆDÜ�4ŒyØ—‘×%Ñ% dÔ+Ø ×!Ñ!Õ#rcóœ—|jtjtjfvry |jsZ|j r|j «n|j«|jr|j«n|j«|j«y#t$r}|j|d«Yd}~yd}~wwxYw)Nr )r¶r r rrRrËÚ_do_read__bufferedÚ_do_read__copiedr‘rïrrirðrÿ)r3r#s rræzSSLProtocol._do_read×s«€à �K‰KÜ ×(Ñ(Ü ×)Ñ)ð ñ ð ð AØ×+Ò+Ø×/Ò/Ø×+Ñ+Õ-à×)Ñ)Ô+Ø×&Ò&Ø—N‘NÕ$à×*Ñ*Ô,Ø × %Ñ %Õ 'øÜò AØ × Ñ ˜bÐ"?× @Ñ @ûð Aús¯A6B&Â& C Â/CÃC có臗d}d}‰j‰j««}t|«} ‰jj ||«}|dkDrY|}||kr4‰jj ||z ||d«}|dkDr||z }nn$||krŒ4‰j j ˆfd„«|dkDr‰j|«|s!‰j«‰j«yy#t$rYŒEwxYw)Nrrcó$•—‰j«Sr>)rærDs€rrúz0SSLProtocol._do_read__buffered..s ø€°·±´r) rÈrpr”rºrÙr0rÚrrÊrrJ)r3Úoffsetr%ÚbufÚwantss` rr)zSSLProtocol._do_read__bufferedísùø€ØˆØˆà×+Ñ+¨D×,FÑ,FÓ,HÓIˆÜ�C“ˆð Ø—L‘L×%Ñ% e¨SÓ1ˆEà�qŠyØ�ؘu’nØ ŸL™L×-Ñ-¨e°f©n¸cÀ&À'¸lÓK�Eؘq’yØ %™™àð ˜u“nð—J‘J×(Ñ(Ó)@ÔAð �AŠ:Ø × -Ñ -¨fÔ 5Ùà × #Ñ #Ô %Ø × Ñ Õ "ðøô ò Ù ð ús±AC% C%Ã% C1Ã0C1có¦—d}d}d} |jj|j«}|sn$|rd}d}|}n|rd}|g}nj|«ŒL |r|j j «n,|s*|j j dj««|s!|j«|j«yy#t$rYŒywxYw)Nó1TFr) rºrÙr¡r’rrCÚ data_receivedÚjoinrrJ)r3ÚchunkÚzeroÚoneÚfirstr~s rr*zSSLProtocol._do_read__copied sÜ€ØˆØˆØˆð ØØŸ ™ ×)Ñ)¨$¯-©-Ó8�ÙØÙØ �DØ�CØ!‘EÙØ�CØ! 5˜>‘Dà—K‘K Ô&ððñ Ø × Ñ × ,Ñ ,¨UÕ 3ÙØ × Ñ × ,Ñ ,¨S¯X©X°d«^Ô <Ùà × #Ñ #Ô %Ø × Ñ Õ "ðøô ò Ù ð úsˆA Cà CÃCcó>— |jtjk(rHtj|_|jj «}|rt jd«yyy#ttf$r‚t$r}|j|d«Yd}~yd}~wwxYw)Nz?returning true from eof_received() has no effect when using sslzError calling eof_received()) r¸rrrrCrñrr"ÚKeyboardInterruptÚ SystemExitÚ BaseExceptionrÿ)r3Ú keep_openr#s rrzSSLProtocol._call_eof_received(s•€ð BØ�‰Ô"2×"AÑ"AÒAÜ"2×"<Ñ"<�”Ø ×.Ñ.×;Ñ;Ó=� ÙÜ—N‘Nð$BõCððBøô "¤:Ð.ò Ø Üò BØ × Ñ ˜bÐ"@× AÑ Aûð Bús‚A#A(Á(BÂBÂBcóZ—|j«}||jk\r/|js#d|_ |jj «y||jkr0|jr#d|_ |jj«yyy#t t f$r‚t$r4}|jjd||j|dœ«Yd}~yd}~wwxYw#t t f$r‚t$r4}|jjd||j|dœ«Yd}~yd}~wwxYw)NTzprotocol.pause_writing() failed©ÚmessageÚ exceptionrÕr@Fz protocol.resume_writing() failed) rerarsrCÚ pause_writingr9r:r;r0Úcall_exception_handlerr®r`Úresume_writing)r3Úsizer�s rr\z SSLProtocol._control_app_writing7s$€Ø×*Ñ*Ó,ˆØ �4×,Ñ,Ò ,°T×5MÒ5MØ'+ˆDÔ $ð Ø×"Ñ"×0Ñ0Õ2ð�T×-Ñ-Ò -°$×2JÒ2JØ',ˆDÔ $ð Ø×"Ñ"×1Ñ1Õ3ð3KÐ -øô&¤zÐ2ò ØÜ ò Ø— ‘ ×1Ñ1Ø@Ø!$Ø!%×!4Ñ!4Ø $ñ 3÷ñûð ûô&¤zÐ2ò ØÜ ò Ø— ‘ ×1Ñ1ØAØ!$Ø!%×!4Ñ!4Ø $ñ 3÷ñûð ús/´BÁ2CÂCÂ'*CÃCÃD*Ã6*D%Ä%D*cóH—|jj|jzSr>)rµÚpendingr“rDs rrez"SSLProtocol._get_write_buffer_sizeTs€Ø�~‰~×%Ñ%¨×(?Ñ(?Ñ?Ð?rcó\—t||tj«\}}||_||_yr>)r,rÚ!FLOW_CONTROL_HIGH_WATER_SSL_WRITErar`r]s rr[z$SSLProtocol._set_write_buffer_limitsWs.€Ü,Ø �#”y×BÑBóD‰ ˆˆcà$(ˆÔ!Ø#&ˆÕ rcó—d|_yrŒ)rRrDs rrUzSSLProtocol._pause_reading_s €Ø#'ˆÕ rcón‡—‰jr(d‰_ˆfd„}‰jj|«yy)NFcó•—‰jtjk(r‰j«y‰jtjk(r‰j «y‰jtj k(r‰j«yyr>)r¶r r rærrçrrèrDs€rÚresumez+SSLProtocol._resume_reading..resumefs`ø€Ø—;‘;Ô"2×":Ñ":Ò:Ø—M‘M•OØ—[‘[Ô$4×$=Ñ$=Ò=Ø—N‘NÕ$Ø—[‘[Ô$4×$=Ñ$=Ò=Ø×%Ñ%Õ'ð>r)rRr0rÚ)r3rLs` rrXzSSLProtocol._resume_readingbs2ø€Ø × #Ò #Ø',ˆDÔ $ô (ð �J‰J× Ñ  Õ (ð $rcó—|j«}||jk\r.|js"d|_|jj «y||j kr/|jr"d|_|jj «yyy)NTF)rprmr¼r°rVrlrY)r3rDs rriz SSLProtocol._control_ssl_readingqsu€Ø×)Ñ)Ó+ˆØ �4×,Ñ,Ò ,°T×5MÒ5MØ'+ˆDÔ $Ø �O‰O× )Ñ )Õ +Ø �T×-Ñ-Ò -°$×2JÒ2JØ',ˆDÔ $Ø �O‰O× *Ñ *Õ ,ð3KÐ -rcó\—t||tj«\}}||_||_yr>)r,rÚ FLOW_CONTROL_HIGH_WATER_SSL_READrmrlr]s rrhz#SSLProtocol._set_read_buffer_limitszs.€Ü,Ø �#”y×AÑAóC‰ ˆˆcà$(ˆÔ!Ø#&ˆÕ rcó.—|jjSr>)r´rFrDs rrpz!SSLProtocol._get_read_buffer_size€s€Ø�~‰~×%Ñ%Ð%rcó.—|jrJ‚d|_y)z\Called when the low-level transport's buffer goes over the high-water mark. TN)r»rDs rrAzSSLProtocol.pause_writing…s€ð×+Ò+Ð+Ð+Ø#'ˆÕ rcóN—|jsJ‚d|_|j«y)z^Called when the low-level transport's buffer drains below the low-water mark. FN)r»rrDs rrCzSSLProtocol.resume_writingŒs'€ð×'Ò'Ð'Ð'Ø#(ˆÔ Ø ×ÑÕ rcóf—|jr|jj|«t|t«r5|jj «rt jd||d¬«yyt|tj«s+|jj|||j|dœ«yy)Nz%r: %sT)Úexc_infor>) r°r‰rvÚOSErrorr0rërrìrÚCancelledErrorrB)r3r�r?s rrÿzSSLProtocol._fatal_error”sˆ€Ø �?Š?Ø �O‰O× (Ñ (¨Ô -ä �cœ7Ô #Ø�z‰z×#Ñ#Ô%Ü— ‘ ˜X t¨W¸tÖDð&ä˜C¤×!:Ñ!:Ô;Ø �J‰J× -Ñ -Ø"Ø Ø!Ÿ_™_Ø ñ /õ ðr–)zFatal error on transport)/rrrr¡rürßrÝr6r?rÐr¾rGrÖrÛrÅrÉrñr8rÜrÔrùrårírJrrçrèrr�r|rïrrær)r*rr\rer[rUrXrirhrprArCrÿrrrržržsû„Ø€Hà ÐØ $ÐØ#Ðð59Ø&*Ø'+Ø&*ó Q"òf 1óò#òLò ò"2òH%ò  ò!óFò$-òPò ;ò.ò%òRò*Còò -ò8ò.òAò0!ò $òAò,#ò:#ò< Bòò:@ó'ò(ò )ò-ó'ò &ò (ò!ô rrž)r«Úenumr›rÚ ImportErrorÚrrrrÚlogrÚSSLWantReadErrorÚSSLSyscallErrorrÚEnumr rr$r,Ú_FlowControlMixinÚ Transportr.rÇržrrrÚr`s·ðó Û ÛðÛõÝÝÝÝà€?Ø×*Ñ*¨C×,?Ñ,?Ð@€Nô�t—y‘yôô &�t—y‘yô &ò òô*r;˜J×8Ñ8Ø&×0Ñ0ôr;ôjZ �)×,Ñ,õZ øð{òØ ‚CðúsŽB0Â0B:Â9B: