+
    üÐjB*  ã                   óx  € R t ^ RIt^ RIt^ RIHtHtHtHt ^ RIH	t	H
t
 ^ RIHtHt ^ RIHtHt  ]! ]R4      t]! ]R4      t]! ]R4      t]! ]R	4      t]! ]R
4      t ! R R]4      t]P6                  ! ]]4       ]! ]]4       ! R R]
P8                  4      4       tR tRR.tR#   ] d   t]! ]4      hRtAii ; i)am  
A kqueue()/kevent() based implementation of the Twisted main loop.

To use this reactor, start your application specifying the kqueue reactor::

   twistd --reactor kqueue ...

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

   from twisted.internet import kqreactor
   kqreactor.install()
N)Ú	AttributeÚ	InterfaceÚdeclarationsÚimplementer)ÚmainÚ	posixbase)ÚIReactorDaemonizeÚIReactorFDSet)ÚfailureÚlogÚ	KQ_EV_ADDÚKQ_EV_DELETEÚ	KQ_EV_EOFÚKQ_FILTER_READÚKQ_FILTER_WRITEc                   ó:   € ] tR t^*tRt]! R4      t]! R4      tRtR# )Ú_IKQueuez*
An interface for KQueue implementations.
zAn implementation of kqueue(2).zAn implementation of kevent(2).© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚkqueueÚkeventÚ__static_attributes__r   ó    Ú</usr/lib/python3/dist-packages/twisted/internet/kqreactor.pyr   r   *   s   † ññ Ð8Ó9€FÙÐ8Ó9„Fr   r   c                   ó|   a € ] tR t^6t o Rt]3R ltR 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# )ÚKQueueReactora%  
A reactor that uses kqueue(2)/kevent(2) and relies on Python 2.6 or higher
which has built in support for kqueue in the select module.

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

@ivar _impl: The implementation of L{_IKQueue} to use.

@ivar _selectables: A dictionary mapping integer file descriptors to
    instances of L{FileDescriptor} which have been registered with the
    reactor.  All L{FileDescriptor}s 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{_kq} for read readiness notifications
    which will be dispatched to the corresponding L{FileDescriptor}
    instances in C{_selectables}.

@ivar _writes: A set containing integer file descriptors.  Values in this
    set will be registered with C{_kq} for write readiness notifications
    which will be dispatched to the corresponding L{FileDescriptor}
    instances in C{_selectables}.
c                óØ   € Wn         V P                   P                  4       V n        \        4       V n        \        4       V n        / V n        \        P                  P                  V 4       R# )aF  
Initialize kqueue object, file descriptor tracking dictionaries, and
the base class.

See:
    - http://docs.python.org/library/select.html
    - www.freebsd.org/cgi/man.cgi?query=kqueue
    - people.freebsd.org/~jlemon/papers/kqueue.pdf

@param _kqueueImpl: The implementation of L{_IKQueue} to use. A
    hook for testing.
N)
Ú_implr   Ú_kqÚsetÚ_readsÚ_writesÚ_selectablesr   ÚPosixReactorBaseÚ__init__)ÚselfÚ_kqueueImpls   &&r   r(   ÚKQueueReactor.__init__Q   sK   € ð !Œ
Ø—:‘:×$Ñ$Ó&ˆŒÜ“eˆŒÜ“uˆŒØˆÔÜ×"Ñ"×+Ñ+¨DÖ1r   c                óv   € V P                   P                  V P                  P                  WV4      .^ ^ 4       R# )z�
Private method for changing kqueue registration on a given FD
filtering for events given filter/op. This will never block and
returns nothing.
N)r"   Úcontrolr!   r   )r)   ÚfdÚfilterÚops   &&&&r   Ú_updateRegistrationÚ!KQueueReactor._updateRegistratione   s.   € ð 	�‰×Ñ˜$Ÿ*™*×+Ñ+¨B¸Ó;Ð<¸aÀÖCr   c                óH   € V P                   P                  4        RV n         R# )z1
Implement L{IReactorDaemonize.beforeDaemonize}.
N)r"   Úclose)r)   s   &r   ÚbeforeDaemonizeÚKQueueReactor.beforeDaemonizem   s   € ð 	�‰�‰ÔØˆŽr   c                óü   € V P                   P                  4       V n        V P                   F  pV P	                  V\
        \        4       K   	  V P                   F  pV P	                  V\        \        4       K   	  R# )z0
Implement L{IReactorDaemonize.afterDaemonize}.
N)	r!   r   r"   r$   r1   r   r   r%   r   ©r)   r.   s   & r   ÚafterDaemonizeÚKQueueReactor.afterDaemonize}   sX   € ð —:‘:×$Ñ$Ó&ˆŒØ—+”+ˆBØ×$Ñ$ R¬¼ÖCñ à—,”,ˆBØ×$Ñ$ R¬¼)ÖDó r   c                óR  € VP                  4       pW P                  9  dH    V P                  V\        \        4       WP                  V&   V P                  P                  V4       R# R#   \
         d     L:i ; i  YP                  T&   T P                  P                  T4       i ; i)z'
Implement L{IReactorFDSet.addReader}.
N)Úfilenor$   r1   r   r   ÚOSErrorr&   Úadd)r)   Úreaderr.   s   && r   Ú	addReaderÚKQueueReactor.addReader‹   sŠ   € ð �]‰]‹_ˆØ—[‘[Ô ð$Ø×(Ñ(¨¬^¼YÔGð )/×!Ñ! "Ñ%Ø—‘—‘ Ö#ñ !øô ô Ùðûð )/×!Ñ! "Ñ%Ø—‘—‘ Õ#úó#   ¢A* Á*A8Á5A; Á7A8Á8A; Á;+B&c                óR  € VP                  4       pW P                  9  dH    V P                  V\        \        4       WP                  V&   V P                  P                  V4       R# R#   \
         d     L:i ; i  YP                  T&   T P                  P                  T4       i ; i)z'
Implement L{IReactorFDSet.addWriter}.
N)r<   r%   r1   r   r   r=   r&   r>   )r)   Úwriterr.   s   && r   Ú	addWriterÚKQueueReactor.addWriter™   sŽ   € ð �]‰]‹_ˆØ—\‘\Ô!ð%Ø×(Ñ(¨¬_¼iÔHð )/×!Ñ! "Ñ%Ø—‘× Ñ  Ö$ñ "øô ô Ùðûð )/×!Ñ! "Ñ%Ø—‘× Ñ  Õ$úrB   c                óÀ  € Rp VP                  4       pVR8X  d/   V P                  P                  4        F  w  r4WJ g   K  Rp M	  R# W0P                  9   da   V P                  P                  V4       W0P                  9  d   V P                  V V'       g    V P                  V\        \        4       R# R# R#   \         d    Rp L¶i ; i  \         d     R# i ; i)z*
Implement L{IReactorFDSet.removeReader}.
FTNéÿÿÿÿ)r<   ÚBaseExceptionr&   Úitemsr$   Úremover%   r1   r   r   r=   )r)   r?   ÚwasLostr.   Úfdess   &&   r   ÚremoveReaderÚKQueueReactor.removeReader§   sÐ   € ð ˆð	Ø—‘“ˆBð �Œ8Ø ×-Ñ-×3Ñ3Ö5‘�Ø•>Ø"�GÙñ 6ñ
 Ø—‘ÔØ�K‰K×Ñ˜rÔ"ØŸ™Ô%Ø×%Ñ% bÐ)ßðØ×,Ñ,¨R´ÄÖNñ ñ	 øô ô 	ØŠBð	ûô  ô Úðúó#   „B; ÂC Â;CÃ
CÃCÃCc                óÀ  € Rp VP                  4       pVR8X  d/   V P                  P                  4        F  w  r4WJ g   K  Rp M	  R# W0P                  9   da   V P                  P                  V4       W0P                  9  d   V P                  V V'       g    V P                  V\        \        4       R# R# R#   \         d    Rp L¶i ; i  \         d     R# i ; i)z*
Implement L{IReactorFDSet.removeWriter}.
FTNrH   )r<   rI   r&   rJ   r%   rK   r$   r1   r   r   r=   )r)   rD   rL   r.   rM   s   &&   r   ÚremoveWriterÚKQueueReactor.removeWriterÁ   sÐ   € ð ˆð	Ø—‘“ˆBð �Œ8Ø ×-Ñ-×3Ñ3Ö5‘�Ø•>Ø"�GÙñ 6ñ
 Ø—‘ÔØ�L‰L×Ñ Ô#ØŸ™Ô$Ø×%Ñ% bÐ)ßðØ×,Ñ,¨R´Ä,ÖOñ ñ	 øô ô 	ØŠBð	ûô  ô ÚðúrP   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      # u upi u upi )z'
Implement L{IReactorFDSet.removeAll}.
)Ú
_removeAllr$   r&   r%   r8   s   & r   Ú	removeAllÚKQueueReactor.removeAllÛ   s_   € ð �‰Ø-1¯[ª[Ó9©[ r×Ñ˜r×"Ð"©[Ñ9Ø-1¯\ª\Ó:©\ r×Ñ˜r×"Ð"©\Ñ:ó
ð 	
ùÚ9ùÚ:s   šA'ÁA,
c                ód   € V P                    Uu. uF  qP                  V,          NK  	  up# u upi )z(
Implement L{IReactorFDSet.getReaders}.
)r$   r&   r8   s   & r   Ú
getReadersÚKQueueReactor.getReadersä   s,   € ð 15·²Ó<±¨"×!Ñ! "×%Ð%±Ñ<Ð<ùÒ<ó   �-c                ód   € V P                    Uu. uF  qP                  V,          NK  	  up# u upi )z(
Implement L{IReactorFDSet.getWriters}.
)r%   r&   r8   s   & r   Ú
getWritersÚKQueueReactor.getWritersê   s,   € ð 15·²Ó=±¨"×!Ñ! "×%Ð%±Ñ=Ð=ùÒ=r[   c                ó¤  € Vf   ^p V P                   P                  . \        V P                  4      V4      pT P                  pT F;  pTP                  p T P                  T,          p\        P                  ! YtYvT4       K=  	  R#   \         d,   pTP
                  \
        P                  8X  d    Rp?R# h Rp?ii ; i  \         d     Kˆ  i ; i)z!
Poll the kqueue for new events.
N)r"   r-   Úlenr&   r=   ÚerrnoÚEINTRÚ_doWriteOrReadÚidentr   ÚcallWithLoggerÚKeyError)r)   ÚtimeoutÚeventsÚeÚ_drdwÚeventr.   Ú
selectables   &&      r   ÚdoKEventÚKQueueReactor.doKEventð   s¿   € ð Š?ØˆGð		Ø—X‘X×%Ñ% b¬#¨d×.?Ñ.?Ó*@À'ÓJˆFð ×#Ñ#ˆÛˆEØ—‘ˆBðMØ!×.Ñ.¨rÕ2�
ô ×"Ò" :°jÀeÖLó øô ô 	ð �w‰wœ%Ÿ+™+Ô%Ýàûð	ûô ô ò ðús/   ˆ0B ÁC ÂB=ÂB8Â7B8Â8B=Ã CÃCc                óP  € RpRpVP                   VP                  VP                  VP                  3w  rgr‰V\        ,          '       d"   V'       d   V	'       d   \
        P                  pMc VP                  4       R8X  d   Rp\        P                  pM:V\        8X  d   RpVP                  4       pV\        8X  d   RpVP                  4       pV'       d   V P'                  WV4       R# R#   \         d0    \        P                   ! 4       p\"        P$                  ! TR4        LWi ; i)zz
Private method called when a FD is ready for reading, writing or was
lost. Do the work and raise errors where necessary.
NFTzSAn exception was raised from application code while processing a reactor selectablerH   )r/   ÚflagsÚdataÚfflagsr   r   ÚCONNECTION_LOSTr<   r   Ú_NO_FILEDESCr   ÚdoReadr   ÚdoWriterI   r
   ÚFailurer   ÚerrÚ_disconnectSelectable)
r)   rl   r.   rk   ÚwhyÚinReadr/   rp   rq   rr   s
   &&&&      r   rc   ÚKQueueReactor._doWriteOrRead  sû   € ð
 ˆØˆà�L‰LØ�K‰KØ�J‰JØ�L‰Lð	)
Ñ%ˆ˜ð ”9×Ô§¯&Ü×&Ñ&‰CðØ×$Ñ$Ó&¨"Ô,Ø"�FÜ#×0Ñ0‘Cà¤Ô/Ø!%˜Ø(×/Ñ/Ó1˜Ø¤Ô0Ø!&˜Ø(×0Ñ0Ó2˜÷ Ø×&Ñ& z¸Ö?ñ øô !ô ô —o’oÓ'�Ü—’Øð=öð	ús   Á+'C+ Â:C+ Ã+7D%Ä$D%)r!   r"   r$   r&   r%   N)r   r   r   r   r   Úselectr(   r1   r5   r9   r@   rE   rN   rR   rV   rY   r]   rm   rc   ÚdoIterationr   Ú__classdictcell__)Ú__classdict__s   @r   r   r   6   s\   ø‡ € ñð2 $*ô 2ò(Dòò Eò$ò%òò4ò4
ò=ò>òMò<'@ðR †Kr   r   c                 ó6   € \        4       p ^ RIHp V! V 4       R# )z
Install the kqueue() reactor.
)ÚinstallReactorN)r   Útwisted.internet.mainr‚   )Úpr‚   s     r   Úinstallr…   :  s   € ô 	‹€AÝ4á�1Ör   r…   ) r   ra   r}   Úzope.interfacer   r   r   r   Útwisted.internetr   r   Útwisted.internet.interfacesr   r	   Útwisted.pythonr
   r   Úgetattrr   r   r   r   r   ÚAttributeErrorri   ÚImportErrorr   ÚdirectlyProvidesr'   r   r…   Ú__all__r   r   r   Ú<module>r�      sß   ðñ
ó Û ç JÓ Jç ,ß Hß 'ðñ
 ˜ Ó,€IÙ˜6 >Ó2€LÙ˜ Ó,€IÙ˜VÐ%5Ó6€NÙ˜fÐ&7Ó8€Oô
:ˆyô :ð × Ò ˜f hÔ /ñ ˆ]Ð-Ó.ô@�I×.Ñ.ó @ó /ð@òFð ˜IÐ
&‚øð} ô Ù
�a‹.Ðûðús   °-B% Â%B9Â,B4Â4B9