+
    üÐjí"  ã                   ó8  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
  ]! ]R4      t]! ]R4      t]! ]R4      t]! ]R	4      t]! ]R
4      t]! ]4       ! R R]P(                  ]P*                  4      4       tR tRR.tR#   ] d   t]! ]4      hRtAii ; i)zõ
An epoll() based implementation of the twisted main loop.

To install the event loop (and you should do this before any connections,
listeners or connectors are added)::

    from twisted.internet import epollreactor
    epollreactor.install()
N)Úimplementer)Ú	posixbase)ÚIReactorFDSet)ÚlogÚepollÚEPOLLHUPÚEPOLLERRÚEPOLLINÚEPOLLOUTc                   ó„   a € ] tR t^%t o Rt]],          t]t	]
tR tR tR tR tR tR tR tR	 tR
 tR tR t]tRtV tR# )ÚEPollReactora7  
A reactor that uses epoll(7).

@ivar _poller: A C{epoll} which will be used to check for I/O
    readiness.

@ivar _selectables: A dictionary mapping integer file descriptors to
    instances of C{FileDescriptor} which have been registered with the
    reactor.  All C{FileDescriptors} which are currently receiving read or
    write readiness notifications will be present as values in this
    dictionary.

@ivar _reads: A set containing integer file descriptors.  Values in this
    set will be registered with C{_poller} for read readiness notifications
    which will be dispatched to the corresponding C{FileDescriptor}
    instances in C{_selectables}.

@ivar _writes: A set containing integer file descriptors.  Values in this
    set will be registered with C{_poller} for write readiness
    notifications which will be dispatched to the corresponding
    C{FileDescriptor} instances in C{_selectables}.

@ivar _continuousPolling: A L{_ContinuousPolling} instance, used to handle
    file descriptors (e.g. filesystem files) that are not supported by
    C{epoll(7)}.
c                óä   € \        R4      V n        \        4       V n        \        4       V n        / V n        \        P                  ! V 4      V n        \        P                  P                  V 4       R# )zU
Initialize epoll object, file descriptor tracking dictionaries, and the
base class.
i   N)r   Ú_pollerÚsetÚ_readsÚ_writesÚ_selectablesr   Ú_ContinuousPollingÚ_continuousPollingÚPosixReactorBaseÚ__init__)Úselfs   &Ú?/usr/lib/python3/dist-packages/twisted/internet/epollreactor.pyr   ÚEPollReactor.__init__G   sP   € ô ˜T“{ˆŒÜ“eˆŒÜ“uˆŒØˆÔÜ"+×">Ò">¸tÓ"DˆÔÜ×"Ñ"×+Ñ+¨DÖ1ó    c                óî   € VP                  4       pWr9  d_   TpWs9   d%   W†,          pV P                  P                  Wx4       MV P                  P                  Wx4       VP	                  V4       WV&   R# R# )z¶
Private method for adding a descriptor from the event loop.

It takes care of adding it if  new or modifying it if already added
for another state (read -> read/write for example).
N)Úfilenor   ÚmodifyÚregisterÚadd)	r   ÚxerÚprimaryÚotherÚselectablesÚeventÚ	antieventÚfdÚflagss	   &&&&&&&  r   Ú_addÚEPollReactor._addV   sf   € ð �Z‰Z‹\ˆØÔØˆEð Œ{ØÕ"�Ø—‘×#Ñ# BÕ.à—‘×%Ñ% bÔ0ð �K‰K˜ŒOØ!˜‹Oñ! r   c                ó&  €  V P                  WP                  V P                  V P                  \        \
        4       R#   \         dG   pTP                  \        P                  8X  d"   T P                  P                  T4        Rp?R# h Rp?ii ; i)zB
Add a FileDescriptor for notification of data available to read.
N)r(   r   r   r   r	   r
   ÚOSErrorÚerrnoÚEPERMr   Ú	addReader)r   ÚreaderÚes   && r   r.   ÚEPollReactor.addReaderp   sj   € ð	Ø�I‰IØŸ™ T§\¡\°4×3DÑ3DÄgÌxöøô ô 	Ø�w‰wœ%Ÿ+™+Ô%ð ×'Ñ'×1Ñ1°&×9Ò9àûð	úó   ‚;? ¿BÁ
:BÂ
BÂBc                ó&  €  V P                  WP                  V P                  V P                  \        \
        4       R#   \         dG   pTP                  \        P                  8X  d"   T P                  P                  T4        Rp?R# h Rp?ii ; i)zC
Add a FileDescriptor for notification of data available to write.
N)r(   r   r   r   r
   r	   r+   r,   r-   r   Ú	addWriter)r   Úwriterr0   s   && r   r4   ÚEPollReactor.addWriter�   sk   € ð	Ø�I‰IØŸ™ d§k¡k°4×3DÑ3DÄhÔPWöøô ô 	Ø�w‰wœ%Ÿ+™+Ô%ð ×'Ñ'×1Ñ1°&×9Ò9àûð	úr2   c                ó,  € VP                  4       pVR8X  d#   VP                  4        F  w  rxWJ g   K   M	  R# Wr9   dU   Ws9   d   Tp	V P                  P                  Wy4       MWG V P                  P	                  V4       VP                  V4       R# R# )z—
Private method for removing a descriptor from the event loop.

It does the inverse job of _add, and also add a check in case of the fd
has gone away.
Néÿÿÿÿ)r   Úitemsr   r   Ú
unregisterÚremove)
r   r    r!   r"   r#   r$   r%   r&   Úfdesr'   s
   &&&&&&&   r   Ú_removeÚEPollReactor._remove’   s�   € ð �Z‰Z‹\ˆØ�Œ8Ø'×-Ñ-Ö/‘�Ø•;Ùñ 0ñ ØŒ=ØŒ{Ø!�à—‘×#Ñ# BÕ.à�Oà—‘×'Ñ'¨Ô+Ø�N‰N˜2Öñ r   c                óø   € V P                   P                  V4      '       d   V P                   P                  V4       R# V P                  WP                  V P
                  V P                  \        \        4       R# )zA
Remove a Selectable for notification of data available to read.
N)	r   Ú	isReadingÚremoveReaderr=   r   r   r   r	   r
   )r   r/   s   &&r   rA   ÚEPollReactor.removeReader«   sW   € ð ×"Ñ"×,Ñ,¨V×4Ò4Ø×#Ñ#×0Ñ0°Ô8ÙØ�‰Ø—K‘K §¡¨t×/@Ñ/@Ä'Ì8ö	
r   c                óø   € V P                   P                  V4      '       d   V P                   P                  V4       R# V P                  WP                  V P
                  V P                  \        \        4       R# )zB
Remove a Selectable for notification of data available to write.
N)	r   Ú	isWritingÚremoveWriterr=   r   r   r   r
   r	   )r   r5   s   &&r   rE   ÚEPollReactor.removeWriter¶   sW   € ð ×"Ñ"×,Ñ,¨V×4Ò4Ø×#Ñ#×0Ñ0°Ô8ÙØ�‰Ø—L‘L $§+¡+¨t×/@Ñ/@Ä(ÌGö	
r   c                ó   € T P                  V P                   Uu. uF  qP                  V,          NK  	  upV P                   Uu. uF  qP                  V,          NK  	  up4      V P                  P                  4       ,           # u upi u upi )z4
Remove all selectables, and return a list of them.
)Ú
_removeAllr   r   r   r   Ú	removeAll©r   r&   s   & r   rI   ÚEPollReactor.removeAllÁ   sx   € ð
 �O‰OØ15·²Ó=±¨2×"Ñ" 2×&Ð&±Ñ=Ø15·²Ó>±¨2×"Ñ" 2×&Ð&±Ñ>óð ×%Ñ%×/Ñ/Ó1õ	2ð	
ùâ=ùÚ>s   šBÁB
c                ó¢   € V P                    Uu. uF  qP                  V,          NK  	  upV P                  P                  4       ,           # u upi ©N)r   r   r   Ú
getReadersrJ   s   & r   rN   ÚEPollReactor.getReadersÍ   sJ   € à,0¯KªKó
Ù,7 b×Ñ˜b×!Ð!©Kñ
à×#Ñ#×.Ñ.Ó0õ1ð 	1ùò 
ó   �Ac                ó¢   € V P                    Uu. uF  qP                  V,          NK  	  upV P                  P                  4       ,           # u upi rM   )r   r   r   Ú
getWritersrJ   s   & r   rR   ÚEPollReactor.getWritersÒ   sJ   € à,0¯LªLó
Ù,8 b×Ñ˜b×!Ð!©Lñ
à×#Ñ#×.Ñ.Ó0õ1ð 	1ùò 
rP   c                óŽ  € Vf   Rp V P                   P                  V\        V P                  4      4      pT P                  pT F1  w  rV T P                  T,          p\        P                  ! YtYuT4       K3  	  R#   \         d,   pTP
                  \
        P                  8X  d    Rp?R# h Rp?ii ; i  \         d     K~  i ; i)z!
Poll the poller for new events.
Nr8   )r   ÚpollÚlenr   r+   r,   ÚEINTRÚ_doReadOrWriter   ÚcallWithLoggerÚKeyError)r   ÚtimeoutÚlÚerrÚ_drdwr&   r$   Ú
selectables   &&      r   ÚdoPollÚEPollReactor.doPoll×   s¶   € ð Š?ØˆGð	ð
 —‘×!Ñ! '¬3¨t×/@Ñ/@Ó+AÓBˆAð ×#Ñ#ˆÛ‰IˆBðMØ!×.Ñ.¨rÕ2�
ô ×"Ò" :°jÀeÖLó øô ô 	Ø�y‰yœEŸK™KÔ'Ýð
 ûð	ûô ô Úðús/   ˆ/A< ÁB5Á<B2ÂB-Â,B-Â-B2Â5CÃC)r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú_POLL_DISCONNECTEDr	   Ú_POLL_INr
   Ú	_POLL_OUTr   r(   r.   r4   r=   rA   rE   rI   rN   rR   r`   ÚdoIterationÚ__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r   r   r   %   s`   ø‡ € ñð8 " HÕ,ÐØ€HØ€Iò2ò"ò4ò"ò"ò2	
ò	
ò

ò1ò
1ò
Mð> †Kr   r   c                 ó6   € \        4       p ^ RIHp V! V 4       R# )z
Install the epoll() reactor.
)ÚinstallReactorN)r   Útwisted.internet.mainro   )Úpro   s     r   Úinstallrr   ù   s   € ô 	‹€AÝ4á�1Ör   rr   )rf   r,   ÚselectÚzope.interfacer   Útwisted.internetr   Útwisted.internet.interfacesr   Útwisted.pythonr   Úgetattrr   r   r   r	   r
   ÚAttributeErrorr0   ÚImportErrorr   Ú_PollLikeMixinr   rr   Ú__all__© r   r   Ú<module>r~      sÁ   ðñó Û å &å &Ý 5Ý ðñ
 �F˜GÓ$€EÙ�v˜zÓ*€HÙ�v˜zÓ*€HÙ�f˜iÓ(€GÙ�v˜zÓ*€Hñ
 ˆ]ÓôP�9×-Ñ-¨y×/GÑ/Gó Pó ðPòfð ˜9Ð
%‚øðE ô Ù
�a‹.Ðûðús   ¤-B ÂBÂBÂB