§
    Ètºf<S  ã                   ó  — d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZ dd	lmZmZ dd
lm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'  e	j(        d¦  «        Z)	 ddl*m+Z, e,Z+n# e-$ r dZ+Y nw xY w	 ddlm.Z/ e/Z.n# e-$ r dZ.Y nw xY we!dk    Z0dZ1e0r
ddlm2Z2m3Z3 dZ1 e j4        ¦   «         r	 ddl5Z5dZ1n# e-$ r dZ5Y nw xY w G d„ d¦  «        Z6 eeee¦  «         G d„ de6e¦  «        ¦   «         Z7 G d„ d¦  «        Z8 ee¦  «         G d„ de8e6¦  «        ¦   «         Z9e+€e.� ee7e¦  «         e0r ee7ee¦  «         e1r ee7e¦  «          e:edd¦  «        � ee7e¦  «         dgZ;dS )z
Posix reactor base class
é    N)ÚSequence)ÚclassImplementsÚimplementer)ÚerrorÚtcpÚudp)ÚReactorBase)
ÚIHalfCloseableDescriptorÚIReactorFDSetÚIReactorMulticastÚIReactorProcessÚIReactorSocketÚIReactorSSLÚIReactorTCPÚIReactorUDPÚIReactorUNIXÚIReactorUNIXDatagram)ÚCONNECTION_DONEÚCONNECTION_LOST)ÚfailureÚlog)ÚplatformÚplatformTypeé   )ÚSignalHandlingÚ_ChildSignalHandlingÚ_IWakerÚ_MultiSignalHandlingÚ_WakerzFile descriptor lost)Útls)ÚsslÚposixF)ÚprocessÚunixTc                   ó¤   — e Zd ZdZej         ej         ej        ¦   «         ¦  «        ej         ej         ej        ¦   «         ¦  «        ifd„Z	dS )Ú_DisconnectSelectableMixinz>
    Mixin providing the C{_disconnectSelectable} method.
    c                 ó¼  — |                       |¦  «         |                     |j        ¦  «        }|rn|r@|j        t          j        k    r+t          j        |¦  «        r|                     |¦  «         dS |                      |¦  «         | 	                    |¦  «         dS |                      |¦  «         | 	                    t          j        |¦  «        ¦  «         dS )z¿
        Utility function for disconnecting a selectable.

        Supports half-close notification, isRead should be boolean indicating
        whether error resulted from doRead().
        N)ÚremoveReaderÚgetÚ	__class__r   ÚConnectionDoner
   Ú
providedByÚreadConnectionLostÚremoveWriterÚconnectionLostr   ÚFailure)ÚselfÚ
selectableÚwhyÚisReadÚfaildictÚfs         úY/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/posixbase.pyÚ_disconnectSelectablez0_DisconnectSelectableMixin._disconnectSelectableR   sà   € ð  	×Ò˜*Ñ%Ô%Ð%Ø�LŠL˜œÑ'Ô'ˆØð 	<àð-à”M¥UÔ%9Ò9Ð9Ý,Ô7¸
ÑCÔCð :ð ×-Ò-¨aÑ0Ô0Ð0Ð0Ð0à×!Ò! *Ñ-Ô-Ð-Ø×)Ò)¨!Ñ,Ô,Ð,Ð,Ð,à×Ò˜jÑ)Ô)Ð)Ø×%Ò%¥g¤o°cÑ&:Ô&:Ñ;Ô;Ð;Ð;Ð;ó    N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r   r0   ÚConnectionLostr8   © r9   r7   r&   r&   M   sy   € € € € € ðð ð Ô  / '¤/Ð2F°%Ô2FÑ2HÔ2HÑ"IÔ"IØÔ  / '¤/Ð2F°%Ô2FÑ2HÔ2HÑ"IÔ"Ið
ð<ð <ð <ð <ð <ð <r9   r&   c                   ó2  ‡ — e Zd ZU dZdZdefd„Zd„ Zdefˆ fd„Z	di dddddfd	„Z
dd„Z	 d d„Zd!d„Zd"d„Zd#d„Z	 d$d„Zer%ej        ej        ej        fZeej                 ed<   nej        ej        fZd„ Zd„ Z	 d%d„Zd&d„Zd'd„Z	 d'd„Zd&d„Z d„ Z!ˆ xZ"S )(ÚPosixReactorBasezÄ
    A basis for reactors that use file descriptors.

    @ivar _childWaker: L{None} or a reference to the L{_SIGCHLDWaker}
        which is used to properly notice child process termination.
    NÚreturnc                 ó   — t          ¦   «         S ©N)r   ©r1   s    r7   Ú_wakerFactoryzPosixReactorBase._wakerFactory€   s   € Ý‰xŒxˆr9   c                 ó¼   — | j         sT|                      ¦   «         | _         | j                             | j         ¦  «         |                      | j         ¦  «         dS dS )zå
        Install a `waker' to allow threads and signals to wake up the IO thread.

        We use the self-pipe trick (http://cr.yp.to/docs/selfpipe.html) to wake
        the reactor. On Windows we use a pair of sockets.
        N)ÚwakerrF   Ú_internalReadersÚaddÚ	addReaderrE   s    r7   ÚinstallWakerzPosixReactorBase.installWakerƒ   s^   € ð Œzð 	'Ø×+Ò+Ñ-Ô-ˆDŒJØÔ!×%Ò% d¤jÑ1Ô1Ð1Ø�NŠN˜4œ:Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r9   c                 ó°   •— t          ¦   «                              ¦   «         }t          dk    r)t          |t	          | j        | j        ¦  «        f¦  «        S |S )zj
        Customize reactor signal handling to support child processes on POSIX
        platforms.
        r"   )ÚsuperÚ_signalsFactoryr   r   r   Ú_addInternalReaderÚ_removeInternalReader)r1   ÚbaseHandlingr*   s     €r7   rO   z PosixReactorBase._signalsFactory�   sb   ø€ õ
 ‘w”w×.Ò.Ñ0Ô0ˆå˜7Ò"Ð"å'ð !å(ØÔ/ØÔ2ñô ð	ñ
ô 
ð 
ð Ðr9   r?   r   c
                 óÂ  — t           dk    rK|r-|	�t          d¦  «        ‚t          j        | ||||||||¦	  «	        S t          j        | ||||||||	¦	  «	        S t           dk    rp|�t          d¦  «        ‚|�t          d¦  «        ‚|rt          d¦  «        ‚|	rt          d¦  «        ‚t
          rdd	lm}
  |
| |||||¦  «        S t          d
¦  «        ‚t          d¦  «        ‚)Nr"   z1Using childFDs is not supported with usePTY=True.Úwin32z,Setting UID is unsupported on this platform.z,Setting GID is unsupported on this platform.z1The usePTY parameter is not supported on Windows.z1Customizing childFDs is not supported on Windows.r   )ÚProcessz:spawnProcess not available since pywin32 is not installed.z0spawnProcess only available on Windows or POSIX.)r   Ú
ValueErrorr#   Ú
PTYProcessrU   Úwin32processÚtwisted.internet._dumbwin32procÚNotImplementedError)r1   ÚprocessProtocolÚ
executableÚargsÚenvÚpathÚuidÚgidÚusePTYÚchildFDsrU   s              r7   ÚspawnProcesszPosixReactorBase.spawnProcess©   sS  € õ ˜7Ò"Ð"Øð ØÐ'Ý$ØKñô ð õ Ô)Ø˜* d¨C°°ÈÈSÐRXñô ð õ ”ØØØØØØ#ØØØñ
ô 
ð 
õ ˜WÒ$Ð$ØˆÝ Ð!OÑPÔPÐPØˆÝ Ð!OÑPÔPÐPØð VÝ Ð!TÑUÔUÐUØð VÝ Ð!TÑUÔUÐUåð ØCÐCÐCÐCÐCÐCà�w˜t _°jÀ$ÈÈTÑRÔRÐRå)ØPñô ð õ &ØBñô ð r9   Ú é    c                 ó^   — t          j        ||||| ¦  «        }|                     ¦   «          |S )z‡Connects a given L{DatagramProtocol} to the given numeric UDP port.

        @returns: object conforming to L{IListeningPort}.
        )r   ÚPortÚstartListening)r1   ÚportÚprotocolÚ	interfaceÚmaxPacketSizeÚps         r7   Ú	listenUDPzPosixReactorBase.listenUDPã   s2   € õ
 ŒH�T˜8 Y°¸tÑDÔDˆØ	×ÒÑÔÐØˆr9   Fc                 ó`   — t          j        ||||| |¦  «        }|                     ¦   «          |S )z˜Connects a given DatagramProtocol to the given numeric UDP port.

        EXPERIMENTAL.

        @returns: object conforming to IListeningPort.
        )r   ÚMulticastPortri   )r1   rj   rk   rl   rm   ÚlistenMultiplern   s          r7   ÚlistenMulticastz PosixReactorBase.listenMulticastî   s<   € õ ÔØ�(˜I }°d¸Nñ
ô 
ˆð 	
×ÒÑÔÐØˆr9   é   c                 ó€   — t           s
J d¦   «         ‚t          j        |||| |¦  «        }|                     ¦   «          |S ©NúUNIX support is not present)ÚunixEnabledr$   Ú	ConnectorÚconnect)r1   ÚaddressÚfactoryÚtimeoutÚcheckPIDÚcs         r7   ÚconnectUNIXzPosixReactorBase.connectUNIXÿ   s@   € ÝÐ9Ð9Ð9Ñ9Ô9Ð9ÝŒN˜7 G¨W°d¸HÑEÔEˆØ	�	Š	‰ŒˆØˆr9   é2   é¶  c                 ó‚   — t           s
J d¦   «         ‚t          j        ||||| |¦  «        }|                     ¦   «          |S rv   )rx   r$   rh   ri   )r1   r{   r|   ÚbacklogÚmodeÚwantPIDrn   s          r7   Ú
listenUNIXzPosixReactorBase.listenUNIX  sG   € ÝÐ9Ð9Ð9Ñ9Ô9Ð9ÝŒI�g˜w¨°°t¸WÑEÔEˆØ	×ÒÑÔÐØˆr9   c                 ó€   — t           s
J d¦   «         ‚t          j        ||||| ¦  «        }|                     ¦   «          |S )z›
        Connects a given L{DatagramProtocol} to the given path.

        EXPERIMENTAL.

        @returns: object conforming to L{IListeningPort}.
        rw   )rx   r$   ÚDatagramPortri   )r1   r{   rk   rm   r…   rn   s         r7   ÚlistenUNIXDatagramz#PosixReactorBase.listenUNIXDatagram  sH   € õ Ð9Ð9Ð9Ñ9Ô9Ð9ÝÔ˜g x°ÀÀdÑKÔKˆØ	×ÒÑÔÐØˆr9   c                 ó‚   — t           s
J d¦   «         ‚t          j        |||||| ¦  «        }|                     ¦   «          |S )zd
        Connects a L{ConnectedDatagramProtocol} instance to a path.

        EXPERIMENTAL.
        rw   )rx   r$   ÚConnectedDatagramPortri   )r1   r{   rk   rm   r…   ÚbindAddressrn   s          r7   ÚconnectUNIXDatagramz$PosixReactorBase.connectUNIXDatagram  sQ   € õ Ð9Ð9Ð9Ñ9Ô9Ð9ÝÔ&Ø�X˜}¨d°KÀñ
ô 
ˆð 	
×ÒÑÔÐØˆr9   Ú_supportedAddressFamiliesc                 ó  — || j         vrt          j        |¦  «        ‚t          r2|t          j        k    r"t          j                             | ||¦  «        }n"t          j                             | |||¦  «        }| 
                    ¦   «          |S )a0  
        Create a new L{IListeningPort} from an already-initialized socket.

        This just dispatches to a suitable port implementation (eg from
        L{IReactorTCP}, etc) based on the specified C{addressFamily}.

        @see: L{twisted.internet.interfaces.IReactorSocket.adoptStreamPort}
        )r�   r   ÚUnsupportedAddressFamilyrx   ÚsocketÚAF_UNIXr$   rh   Ú_fromListeningDescriptorr   ri   )r1   ÚfileDescriptorÚaddressFamilyr|   rn   s        r7   ÚadoptStreamPortz PosixReactorBase.adoptStreamPort7  s‹   € ð  Ô >Ð>Ð>ÝÔ0°Ñ?Ô?Ð?åð 	˜=­F¬NÒ:Ð:Ý”	×2Ò2°4¸ÈÑQÔQˆAˆAå”×1Ò1Ø�n m°Wñô ˆAð 	
×ÒÑÔÐØˆr9   c                 óð   — || j         vrt          j        |¦  «        ‚t          r1|t          j        k    r!t          j                             ||| ¦  «        S t          j                             |||| ¦  «        S )zg
        @see:
            L{twisted.internet.interfaces.IReactorSocket.adoptStreamConnection}
        )
r�   r   r‘   rx   r’   r“   r$   ÚServerÚ_fromConnectedSocketr   )r1   r•   r–   r|   s       r7   ÚadoptStreamConnectionz&PosixReactorBase.adoptStreamConnectionL  st   € ð
  Ô >Ð>Ð>ÝÔ0°Ñ?Ô?Ð?åð 	˜=­F¬NÒ:Ð:Ý”;×3Ò3°NÀGÈTÑRÔRÐRå”:×2Ò2Ø ¨w¸ñô ð r9   c                 óÒ   — |t           j        t           j        fvrt          j        |¦  «        ‚t
          j                             | ||||¬¦  «        }|                     ¦   «          |S )N)rm   )	r’   ÚAF_INETÚAF_INET6r   r‘   r   rh   r”   ri   )r1   r•   r–   rk   rm   rn   s         r7   ÚadoptDatagramPortz"PosixReactorBase.adoptDatagramPort[  si   € ð ¥¤µ´Ð AÐAÐAÝÔ0°Ñ?Ô?Ð?åŒH×-Ò-Ø�. -°Èð .ñ 
ô 
ˆð 	
×ÒÑÔÐØˆr9   c                 ó^   — t          j        ||||| ¦  «        }|                     ¦   «          |S rD   )r   rh   ri   )r1   rj   r|   r„   rl   rn   s         r7   Ú	listenTCPzPosixReactorBase.listenTCPi  s0   € ÝŒH�T˜7 G¨Y¸Ñ=Ô=ˆØ	×ÒÑÔÐØˆr9   c                 ó`   — t          j        |||||| ¦  «        }|                     ¦   «          |S rD   )r   ry   rz   )r1   Úhostrj   r|   r}   r�   r   s          r7   Ú
connectTCPzPosixReactorBase.connectTCPn  s-   € ÝŒM˜$  g¨w¸ÀTÑJÔJˆØ	�	Š	‰ŒˆØˆr9   c           	      ó  — t           �5t                                |d|¦  «        }|                      |||||¦  «        S t          �6t                               ||||||| ¦  «        }|                     ¦   «          |S J d¦   «         ‚)NTFúSSL support is not present)r    ÚTLSMemoryBIOFactoryr¤   r!   ry   rz   )	r1   r£   rj   r|   ÚcontextFactoryr}   r�   Ú
tlsFactoryr   s	            r7   Ú
connectSSLzPosixReactorBase.connectSSLu  s„   € õ ˆ?Ý×0Ò0°ÀÀwÑOÔOˆJØ—?’? 4¨¨z¸7ÀKÑPÔPÐPÝˆ_Ý—’Ø�d˜G ^°W¸kÈ4ñô ˆAð �IŠI‰KŒKˆKØˆHà6Ð6Ñ6Ô6Ð6r9   c                 ó  — t           �=t                                |d|¦  «        }|                      ||||¦  «        }d|_        |S t          �5t                               |||||| ¦  «        }|                     ¦   «          |S J d¦   «         ‚)NFÚTLSr¦   )r    r§   r¡   Ú_typer!   rh   ri   )r1   rj   r|   r¨   r„   rl   r©   rn   s           r7   Ú	listenSSLzPosixReactorBase.listenSSL„  s‡   € Ýˆ?Ý×0Ò0°ÀÈÑPÔPˆJØ—>’> $¨
°G¸YÑGÔGˆDØˆDŒJØˆKÝˆ_Ý—’˜˜w¨¸ÀÈDÑQÔQˆAØ×ÒÑÔÐØˆHà6Ð6Ñ6Ô6Ð6r9   c                 óÚ   — t          |¦  «        | j        z
  }|D ]}|                      |¦  «         Œt          |¦  «        }|D ]}|                      |¦  «         Œt	          ||z  ¦  «        S )ag  
        Remove all readers and writers, and list of removed L{IReadDescriptor}s
        and L{IWriteDescriptor}s.

        Meant for calling from subclasses, to implement removeAll, like::

          def removeAll(self):
              return self._removeAll(self._reads, self._writes)

        where C{self._reads} and C{self._writes} are iterables.
        )ÚsetrI   r(   r.   Úlist)r1   ÚreadersÚwritersÚremovedReadersÚreaderÚremovedWritersÚwriters          r7   Ú
_removeAllzPosixReactorBase._removeAll‘  s�   € õ ˜W™œ¨Ô(=Ñ=ˆØ$ð 	&ð 	&ˆFØ×Ò˜fÑ%Ô%Ð%Ð%å˜W™œˆØ$ð 	&ð 	&ˆFØ×Ò˜fÑ%Ô%Ð%Ð%å�N ^Ñ3Ñ4Ô4Ð4r9   )re   rf   )re   rf   F)rt   r   )r�   r‚   r   )rf   r‚   )rf   r‚   N)rf   )r�   re   )rt   N)#r:   r;   r<   r=   Ú_childWakerr   rF   rL   r   rO   rd   ro   rs   r€   r‡   rŠ   rŽ   rx   r’   r�   rž   r“   r�   r   ÚAddressFamilyÚ__annotations__r—   r›   rŸ   r¡   r¤   rª   r®   r¸   Ú__classcell__)r*   s   @r7   rA   rA   s   s&  ø€ € € € € € ðð ð €Kð˜wð ð ð ð ð
'ð 
'ð 
'ð ð ð ð ð ð ð ð< ØØØØØØð6ð 6ð 6ð 6ðtð ð ð ð PUðð ð ð ð"ð ð ð ðð ð ð ðð ð ð ð NRðð ð ð ð" ð 

àŒNØŒOØŒNðE
Ð! 8¨FÔ,@Ô#Að 	
ð 	
ñ 	
ð 	
ð ŒNØŒOð%
Ð!ð
ð ð ð*ð ð ð  FJð
ð 
ð 
ð 
ðð ð ð ð
ð ð ð ð LPð7ð 7ð 7ð 7ð7ð 7ð 7ð 7ð5ð 5ð 5ð 5ð 5ð 5ð 5r9   rA   c                   ó   — e Zd ZdZd„ ZdS )Ú_PollLikeMixina¤  
    Mixin for poll-like reactors.

    Subclasses must define the following attributes::

      - _POLL_DISCONNECTED - Bitmask for events indicating a connection was
        lost.
      - _POLL_IN - Bitmask for events indicating there is input to read.
      - _POLL_OUT - Bitmask for events indicating output can be written.

    Must be mixed in to a subclass of PosixReactorBase (for
    _disconnectSelectable).
    c                 óâ  — d}d}|| j         z  r%|| j        z  s|| j        v r
d}t          }n¨t          }n 	 |                     ¦   «         dk    rt          }nB|| j        z  r|                     ¦   «         }d}|s || j        z  r| 	                    ¦   «         }d}n<# t          $ r/ t          j        ¦   «         d         }t          j        ¦   «          Y nw xY w|r|                      |||¦  «         dS dS )zg
        fd is available for read or write, do the work and raise errors if
        necessary.
        NFTéÿÿÿÿr   )Ú_POLL_DISCONNECTEDÚ_POLL_INÚ_readsr   r   ÚfilenoÚ_NO_FILEDESCÚdoReadÚ	_POLL_OUTÚdoWriteÚBaseExceptionÚsysÚexc_infor   Úerrr8   )r1   r2   ÚfdÚeventr3   ÚinReads         r7   Ú_doReadOrWritez_PollLikeMixin._doReadOrWrite·  s>  € ð
 ˆØˆØ�4Ô*Ñ*ð .	°E¸D¼MÑ4Ið .	ð �T”[Ð Ð ð
 �Ý%��õ &��ðð ×$Ò$Ñ&Ô&¨"Ò,Ð,õ '�C�Cà˜tœ}Ñ,ð &à(×/Ò/Ñ1Ô1˜Ø!%˜Øð ' 5¨4¬>Ñ#9ð 'ð )×0Ò0Ñ2Ô2˜Ø!&˜øøÝ ð ð ð õ ”l‘n”n QÔ'�Ý”‘	”	�	�	�	ð	øøøð
 ð 	@Ø×&Ò& z°3¸Ñ?Ô?Ð?Ð?Ð?ð	@ð 	@s   µA"B Â6CÃCN)r:   r;   r<   r=   rÐ   r?   r9   r7   r¾   r¾   ¨  s2   € € € € € ðð ð7@ð 7@ð 7@ð 7@ð 7@r9   r¾   c                   óf   — e 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„ Zd„ Zd„ Zd„ ZdS )Ú_ContinuousPollinga£  
    Schedule reads and writes based on the passage of time, rather than
    notification.

    This is useful for supporting polling filesystem files, which C{epoll(7)}
    does not support.

    The implementation uses L{_PollLikeMixin}, which is a bit hacky, but
    re-implementing and testing the relevant code yet again is unappealing.

    @ivar _reactor: The L{EPollReactor} that is using this instance.

    @ivar _loop: A C{LoopingCall} that drives the polling, or L{None}.

    @ivar _readers: A C{set} of C{FileDescriptor} objects that should be read
        from.

    @ivar _writers: A C{set} of C{FileDescriptor} objects that should be
        written to.
    r   é   é   c                 ón   — || _         d | _        t          ¦   «         | _        t          ¦   «         | _        d S rD   )Ú_reactorÚ_loopr°   Ú_readersÚ_writers)r1   Úreactors     r7   Ú__init__z_ContinuousPolling.__init__  s*   € ØˆŒØˆŒ
Ý™œˆŒÝ™œˆŒˆˆr9   c                 ó  — | j         s| j        rU| j        €Lddlm}m}  || j        ¦  «        | _        | j        | j        _        | j         	                    |d¬¦  «         dS dS | j        r"| j         
                    ¦   «          d| _        dS dS )zh
        Start or stop a C{LoopingCall} based on whether there are readers and
        writers.
        Nr   )Ú_EPSILONÚLoopingCallF)Únow)rØ   rÙ   r×   Útwisted.internet.taskrÝ   rÞ   ÚiteraterÖ   ÚclockÚstartÚstop)r1   rÝ   rÞ   s      r7   Ú
_checkLoopz_ContinuousPolling._checkLoop  s´   € ð
 Œ=ð 	˜DœMð 	ØŒzÐ!ØGÐGÐGÐGÐGÐGÐGÐGà(˜[¨¬Ñ6Ô6�”
Ø#'¤=�”
Ô ð ”
× Ò  ¨uÐ Ñ5Ô5Ð5Ð5Ð5ð "Ð!ð ŒZð 	ØŒJ�OŠOÑÔÐØˆDŒJˆJˆJð	ð 	r9   c                 óÒ   — t          | j        ¦  «        D ]}|                      ||| j        ¦  «         Œt          | j        ¦  «        D ]}|                      ||| j        ¦  «         ŒdS )zX
        Call C{doRead} and C{doWrite} on all readers and writers respectively.
        N)r±   rØ   rÐ   rÂ   rÙ   rÇ   )r1   rµ   r·   s      r7   rá   z_ContinuousPolling.iterate%  s~   € õ ˜4œ=Ñ)Ô)ð 	?ð 	?ˆFØ×Ò ¨°´Ñ>Ô>Ð>Ð>Ý˜4œ=Ñ)Ô)ð 	@ð 	@ˆFØ×Ò ¨°´Ñ?Ô?Ð?Ð?ð	@ð 	@r9   c                 ób   — | j                              |¦  «         |                      ¦   «          dS )zU
        Add a C{FileDescriptor} for notification of data available to read.
        N)rØ   rJ   rå   ©r1   rµ   s     r7   rK   z_ContinuousPolling.addReader.  ó0   € ð 	Œ×Ò˜&Ñ!Ô!Ð!Ø�ŠÑÔÐÐÐr9   c                 ób   — | j                              |¦  «         |                      ¦   «          dS )zV
        Add a C{FileDescriptor} for notification of data available to write.
        N)rÙ   rJ   rå   ©r1   r·   s     r7   Ú	addWriterz_ContinuousPolling.addWriter5  ré   r9   c                 óˆ   — 	 | j                              |¦  «         n# t          $ r Y dS w xY w|                      ¦   «          dS )zY
        Remove a C{FileDescriptor} from notification of data available to read.
        N)rØ   ÚremoveÚKeyErrorrå   rè   s     r7   r(   z_ContinuousPolling.removeReader<  sX   € ð	ØŒM× Ò  Ñ(Ô(Ð(Ð(øÝð 	ð 	ð 	ØˆFˆFð	øøøà�ŠÑÔÐÐÐó   ‚ �
+ª+c                 óˆ   — 	 | j                              |¦  «         n# t          $ r Y dS w xY w|                      ¦   «          dS )zb
        Remove a C{FileDescriptor} from notification of data available to
        write.
        N)rÙ   rî   rï   rå   rë   s     r7   r.   z_ContinuousPolling.removeWriterF  sX   € ð
	ØŒM× Ò  Ñ(Ô(Ð(Ð(øÝð 	ð 	ð 	ØˆFˆFð	øøøà�ŠÑÔÐÐÐrð   c                 ó¢   — t          | j        | j        z  ¦  «        }| j                             ¦   «          | j                             ¦   «          |S )z1
        Remove all readers and writers.
        )r±   rØ   rÙ   Úclear)r1   Úresults     r7   Ú	removeAllz_ContinuousPolling.removeAllQ  sI   € õ �d”m d¤mÑ3Ñ4Ô4ˆð 	Œ×ÒÑÔÐØŒ×ÒÑÔÐØˆr9   c                 ó*   — t          | j        ¦  «        S )z/
        Return a list of the readers.
        )r±   rØ   rE   s    r7   Ú
getReadersz_ContinuousPolling.getReaders\  ó   € õ �D”MÑ"Ô"Ð"r9   c                 ó*   — t          | j        ¦  «        S )z/
        Return a list of the writers.
        )r±   rÙ   rE   s    r7   Ú
getWritersz_ContinuousPolling.getWritersb  rø   r9   c                 ó   — || j         v S )aj  
        Checks if the file descriptor is currently being observed for read
        readiness.

        @param fd: The file descriptor being checked.
        @type fd: L{twisted.internet.abstract.FileDescriptor}
        @return: C{True} if the file descriptor is being observed for read
            readiness, C{False} otherwise.
        @rtype: C{bool}
        )rØ   ©r1   rÍ   s     r7   Ú	isReadingz_ContinuousPolling.isReadingh  ó   € ð �T”]Ð"Ð"r9   c                 ó   — || j         v S )al  
        Checks if the file descriptor is currently being observed for write
        readiness.

        @param fd: The file descriptor being checked.
        @type fd: L{twisted.internet.abstract.FileDescriptor}
        @return: C{True} if the file descriptor is being observed for write
            readiness, C{False} otherwise.
        @rtype: C{bool}
        )rÙ   rü   s     r7   Ú	isWritingz_ContinuousPolling.isWritingu  rþ   r9   N)r:   r;   r<   r=   rÁ   rÂ   rÇ   rÛ   rå   rá   rK   rì   r(   r.   rõ   r÷   rú   rý   r   r?   r9   r7   rÒ   rÒ   ñ  sç   € € € € € ðð ð, ÐØ€HØ€Iðð ð ðð ð ð$@ð @ð @ðð ð ðð ð ðð ð ð	ð 	ð 	ð	ð 	ð 	ð#ð #ð #ð#ð #ð #ð#ð #ð #ð#ð #ð #ð #ð #r9   rÒ   Úfromfd)<r=   r’   rÊ   Útypingr   Úzope.interfacer   r   Útwisted.internetr   r   r   Útwisted.internet.baser	   Útwisted.internet.interfacesr
   r   r   r   r   r   r   r   r   r   Útwisted.internet.mainr   r   Útwisted.pythonr   r   Útwisted.python.runtimer   r   Ú_signalsr   r   r   r   r   ÚConnectionFdescWentAwayrÅ   Útwisted.protocolsr    Ú_tlsÚImportErrorr!   Ú_sslrx   ÚprocessEnabledr#   r$   Ú	isWindowsrX   r&   rA   r¾   rÒ   ÚgetattrÚ__all__r?   r9   r7   ú<module>r     s:  ðð
ð ð
 €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø -Ð -Ð -Ð -Ð -Ð -ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð CÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð -ˆuÔ,Ð-CÑDÔD€ðØ-Ð-Ð-Ð-Ð-Ð-ð €C€Cøð ð ð ð Ø
€C€C€Cðøøøð
Ø,Ð,Ð,Ð,Ð,Ð,ð €C€Cøð ð ð ð Ø
€C€C€Cðøøøð
 ˜gÒ%€à€Øð Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à€Nð €8ÔÑÔð ðØÐÐÐàˆˆøØð ð ð Øˆˆˆðøøøð#<ð #<ð #<ð #<ð #<ñ #<ô #<ð #<ðL €ˆ[˜+Ð'8Ñ9Ô9ðq5ð q5ð q5ð q5ð q5Ð1°;ñ q5ô q5ñ :Ô9ðq5ðh	F@ð F@ð F@ð F@ð F@ñ F@ô F@ð F@ðR €ˆ]ÑÔðN#ð N#ð N#ð N#ð N#˜Ð)Cñ N#ô N#ñ ÔðN#ðb €?�c�oØ€OÐ$ kÑ2Ô2Ð2Øð JØ€OÐ$ lÐ4HÑIÔIÐIØð 7Ø€OÐ$ oÑ6Ô6Ð6Ø
€7ˆ6�8˜TÑ"Ô"Ð.Ø€OÐ$ nÑ5Ô5Ð5àÐ
€€€s6   Á8B ÂBÂ
BÂB ÂB"Â!B"Ã	C ÃCÃC