MINI MINI MANI MO

Path : /lib64/python3.6/asyncio/__pycache__/
File Upload :
Current File : //lib64/python3.6/asyncio/__pycache__/unix_events.cpython-36.pyc

3


 \
@s dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddl
mZddl
m
Z
ddl
mZddl
mZdd	l
mZdd
l
mZddl
mZddl
mZdd
l
mZddlmZddlmZdddddgZejdkredddZy
ejZWnek
r,ddZYnXGdddejZ e!edrVddZ"nddl#Z#d dZ"Gd!d"d"ej$Z%Gd#d$d$ej&ej'Z(e!ed%rej)Z*nddl#Z#d&d'Z*Gd(d)d)ej+Z,Gd*ddZ-Gd+d,d,e-Z.Gd-dde.Z/Gd.dde.Z0Gd/d0d0ej1Z2e Z3e2Z4dS)1z2Selector event loop for Unix with signal handling.N)base_events)base_subprocess)compat)	constants)
coroutines)events)futures)selector_events)	selectors)
transports)	coroutine)loggerSelectorEventLoopAbstractChildWatcherSafeChildWatcherFastChildWatcherDefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCsdS)zDummy signal handler.N)signumframerr+/usr/lib64/python3.6/asyncio/unix_events.py_sighandler_noop%srcCs|S)Nr)pathrrr<lambda>.srcseZdZdZd"fdd	ZddZfddZd	d
ZddZd
dZ	ddZ
ddZd#ddZd$ddZ
ed%ddZddZeddddddZed&ddddd d!ZZS)'_UnixSelectorEventLoopzdUnix event loop.

    Adds signal handling and UNIX Domain Socket support to SelectorEventLoop.
    Ncstj|i|_dS)N)super__init___signal_handlers)selfselector)	__class__rrr7sz_UnixSelectorEventLoop.__init__cCstjS)N)socketZ
socketpair)rrrr_socketpair;sz"_UnixSelectorEventLoop._socketpaircs^tjtjs2xFt|jD]}|j|qWn(|jrZtjd|dt	|d|jj
dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal)source)rclosesys
is_finalizinglistrremove_signal_handlerwarningswarnResourceWarningclear)rsig)r!rrr%>s
z_UnixSelectorEventLoop.closecCs"x|D]}|sq|j|qWdS)N)_handle_signal)rdatarrrr_process_self_dataLs
z)_UnixSelectorEventLoop._process_self_datac+GsHtj|stj|rtd|j||jytj|jj	Wn2t
tfk
rt}ztt
|WYdd}~XnXtj|||}||j|<ytj|ttj|dWntk
rB}zz|j|=|jsytjdWn4t
tfk
r}ztjd|WYdd}~XnX|jtjkr0tdj|nWYdd}~XnXdS)zAdd a handler for a signal.  UNIX only.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        z3coroutines cannot be used with add_signal_handler()NFrzset_wakeup_fd(-1) failed: %szsig {} cannot be caught)rZiscoroutineZiscoroutinefunction	TypeError
_check_signalZ
_check_closedsignal
set_wakeup_fdZ_csockfileno
ValueErrorOSErrorRuntimeErrorstrrZHandlerrsiginterruptrinfoerrnoEINVALformat)rr.callbackargsexchandleZnexcrrradd_signal_handlerSs0



z)_UnixSelectorEventLoop.add_signal_handlercCs8|jj|}|dkrdS|jr*|j|n
|j|dS)z2Internal helper that is the actual signal handler.N)rgetZ
_cancelledr)Z_add_callback_signalsafe)rr.rDrrrr/sz%_UnixSelectorEventLoop._handle_signalc&Cs|j|y|j|=Wntk
r*dSX|tjkr>tj}ntj}ytj||Wn@tk
r}z$|jtj	krt
dj|nWYdd}~XnX|jsytjdWn2t
tfk
r}ztjd|WYdd}~XnXdS)zwRemove a handler for a signal.  UNIX only.

        Return True if a signal handler was removed, False if not.
        Fzsig {} cannot be caughtNrzset_wakeup_fd(-1) failed: %sTr2)r4rKeyErrorr5SIGINTdefault_int_handlerSIG_DFLr9r>r?r:r@r6r8rr=)rr.ZhandlerrCrrrr)s(

z,_UnixSelectorEventLoop.remove_signal_handlercCsHt|tstdj|d|ko,tjknsDtdj|tjdS)zInternal helper to validate a signal.

        Raise ValueError if the signal number is invalid or uncatchable.
        Raise RuntimeError if there is a problem setting up the handler.
        zsig must be an int, not {!r}rzsig {} out of range(1, {})N)
isinstanceintr3r@r5NSIGr8)rr.rrrr4s

z$_UnixSelectorEventLoop._check_signalcCst|||||S)N)_UnixReadPipeTransport)rpipeprotocolwaiterextrarrr_make_read_pipe_transportsz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||S)N)_UnixWritePipeTransport)rrOrPrQrRrrr_make_write_pipe_transportsz1_UnixSelectorEventLoop._make_write_pipe_transportc	kstj}
|j}t||||||||f||d|	}|
j|j|j|y|EdHWn&tk
r~}
z
|
}WYdd}
~
XnXd}|dk	r|j|j	EdH|WdQRX|S)N)rQrR)
rget_child_watcherZ
create_future_UnixSubprocessTransportadd_child_handlerZget_pid_child_watcher_callback	Exceptionr%Z_wait)rrPrBshellstdinstdoutstderrbufsizerRkwargswatcherrQtransprCerrrrr_make_subprocess_transports$




z1_UnixSelectorEventLoop._make_subprocess_transportcCs|j|j|dS)N)Zcall_soon_threadsafeZ_process_exited)rpid
returncoderbrrrrYsz._UnixSelectorEventLoop._child_watcher_callback)sslsockserver_hostnameccs|dkst|tst|r,|dkr<tdn|dk	r<td|dk	r|dk	rTtdtjtjtjd}y |jd|j||EdHWq|j	YqXnB|dkrtd|j
tjkstj|j
rtdj||jd|j||||EdH\}}||fS)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslz3path and sock can not be specified at the same timerFzno path and sock were specifiedz2A UNIX Domain Stream Socket was expected, got {!r})rKr;AssertionErrorr8r"AF_UNIXSOCK_STREAMsetblockingZsock_connectr%familyr_is_stream_sockettyper@Z_create_connection_transport)rprotocol_factoryrrgrhri	transportrPrrrcreate_unix_connections:


z-_UnixSelectorEventLoop.create_unix_connectiond)rhbacklogrgc
!Cst|trtd|dk	r0|dk	r,tdt|}tjtjtj}|dd
kry tj	t
j|jrnt
j|WnBt
k
rYn0tk
r}ztjd||WYdd}~XnXy|j|Wnjtk
r}z8|j|jtjkrdj|}ttj|dnWYdd}~Xn|jYnXn>|dkrBtd|jtjks`tj|jrntdj|tj||g}	|j||jd	|j||||	|	S)Nz*ssl argument must be an SSLContext or Nonez3path and sock can not be specified at the same timerz2Unable to check or remove stale UNIX socket %r: %rzAddress {!r} is already in usez-path was not specified, and no sock specifiedz2A UNIX Domain Stream Socket was expected, got {!r}F)rrv)rKboolr3r8_fspathr"rkrlstatS_ISSOCKosst_moderemoveFileNotFoundErrorr9rerrorZbindr%r>Z
EADDRINUSEr@rnrrorpZServerZlistenrmZ_start_serving)
rrqrrhrurgrcrCmsgZserverrrrcreate_unix_serversP

 




z)_UnixSelectorEventLoop.create_unix_server)N)NN)NN)N)N)__name__
__module____qualname____doc__rr#r%r1rEr/r)r4rSrUr
rdrYrsr
__classcell__rr)r!rr1s,-
 


%rset_blockingcCstj|ddS)NF)r{r)fdrrr_set_nonblockingBsrcCs,tj|tj}|tjB}tj|tj|dS)N)fcntlZF_GETFLr{
O_NONBLOCKZF_SETFL)rflagsrrrrGs
cseZdZdZd fdd	ZddZdd	Zd
dZdd
ZddZ	ddZ
ddZddZe
jrhddZd!ddZddZddZZS)"rNiNcstj|||jd<||_||_|j|_||_d|_t	j
|jj}tj
|pbtj|pbtj|s~d|_d|_d|_tdt|j|jj|jj||jj|jj|j|j|dk	r|jjtj|ddS)NrOFz)Pipe transport is for pipes/sockets only.)rr_extra_loop_piper7_fileno	_protocol_closingr{fstatr|ryS_ISFIFOrzS_ISCHRr8r	call_soonconnection_made_add_reader_read_readyr	_set_result_unless_cancelled)rlooprOrPrQrRmode)r!rrrQs,






z_UnixReadPipeTransport.__init__cCs|jjg}|jdkr |jdn|jr0|jd|jd|jt|jdd}|jdk	r|dk	rtj	||jt
j}|r|jdq|jdn |jdk	r|jdn
|jddd	j|S)
Nclosedclosingzfd=%s	_selectorpollingidleopenz<%s> )
r!rrappendrrgetattrrr
_test_selector_eventrZ
EVENT_READjoin)rr=r rrrr__repr__ns$




z_UnixReadPipeTransport.__repr__cCsytj|j|j}WnDttfk
r,Yntk
rX}z|j|dWYdd}~Xn^X|rl|jj	|nJ|j
jrtj
d|d|_|j
j|j|j
j|jj|j
j|jddS)Nz"Fatal read error on pipe transportz%r was closed by peerT)r{readrmax_sizeBlockingIOErrorInterruptedErrorr9_fatal_errorrZ
data_receivedr	get_debugrr=r_remove_readerrZeof_received_call_connection_lost)rr0rCrrrrs
z"_UnixReadPipeTransport._read_readycCs|jj|jdS)N)rrr)rrrr
pause_readingsz$_UnixReadPipeTransport.pause_readingcCs|jj|j|jdS)N)rrrr)rrrrresume_readingsz%_UnixReadPipeTransport.resume_readingcCs
||_dS)N)r)rrPrrrset_protocolsz#_UnixReadPipeTransport.set_protocolcCs|jS)N)r)rrrrget_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jS)N)r)rrrr
is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|jddS)N)r_close)rrrrr%sz_UnixReadPipeTransport.closecCs,|jdk	r(tjd|t|d|jjdS)Nzunclosed transport %r)r$)rr*r+r,r%)rrrr__del__s
z_UnixReadPipeTransport.__del__Fatal error on pipe transportcCsZt|tr4|jtjkr4|jjrLtjd||ddn|jj||||j	d|j
|dS)Nz%r: %sT)exc_info)message	exceptionrrrP)rKr9r>ZEIOrrrdebugcall_exception_handlerrr)rrCrrrrrs
z#_UnixReadPipeTransport._fatal_errorcCs(d|_|jj|j|jj|j|dS)NT)rrrrrr)rrCrrrrsz_UnixReadPipeTransport._closecCs4z|jj|Wd|jjd|_d|_d|_XdS)N)rconnection_lostrr%r)rrCrrrrs
z,_UnixReadPipeTransport._call_connection_losti)NN)r)rrrrrrrrrrrrr%rPY34rrrrrrr)r!rrNMs
rNcseZdZd%fdd	ZddZddZdd	Zd
dZdd
ZddZ	ddZ
ddZddZddZ
ddZejr|ddZddZd&dd Zd'd!d"Zd#d$ZZS)(rTNc
stj||||jd<||_|j|_||_t|_d|_	d|_
tj|jj
}tj|}tj|}tj|}	|px|px|	sd|_d|_d|_tdt|j|jj|jj||	s|rtjjdr|jj|jj|j|j|dk	r|jjtj|ddS)NrOrFz?Pipe transport is only for pipes, sockets and character devicesaix)rrrrr7rr	bytearray_buffer
_conn_lostrr{rr|ryrrrzr8rrrrr&platform
startswithrrr	r)
rrrOrPrQrRrZis_charZis_fifoZ	is_socket)r!rrrs2






z _UnixWritePipeTransport.__init__cCs|jjg}|jdkr |jdn|jr0|jd|jd|jt|jdd}|jdk	r|dk	rtj	||jt
j}|r|jdn
|jd|j}|jd|n |jdk	r|jdn
|jdd	d
j
|S)Nrrzfd=%srrrz
bufsize=%srz<%s>r)r!rrrrrrrr
rrZEVENT_WRITEget_write_buffer_sizer)rr=r rr_rrrrs(





z _UnixWritePipeTransport.__repr__cCs
t|jS)N)lenr)rrrrrsz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|jjrtjd||jr*|jtn|jdS)Nz%r was closed by peer)rrrr=rrBrokenPipeError)rrrrrs

z#_UnixWritePipeTransport._read_readycCs0t|tttfstt|t|tr.t|}|s6dS|jsB|jrj|jtj	krXt
jd|jd7_dS|jsyt
j|j|}WnTttfk
rd}Yn:tk
r}z|jd7_|j|ddSd}~XnX|t|krdS|dkrt||d}|jj|j|j|j|7_|jdS)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rrz#Fatal write error on pipe transport)rKbytesr
memoryviewrjreprrrrZ!LOG_THRESHOLD_FOR_CONNLOST_WRITESrwarningrr{writerrrrZrrrZ_add_writer_write_readyZ_maybe_pause_protocol)rr0nrCrrrrs4


z_UnixWritePipeTransport.writecCs|jstdytj|j|j}Wnjttfk
r:Yntk
r}z8|jj|j	d7_	|j
j|j|j|dWYdd}~XnfX|t
|jkr|jj|j
j|j|j|jr|j
j|j|jddS|dkr|jd|=dS)NzData should not be emptyrz#Fatal write error on pipe transportr)rrjr{rrrrrZr-rr_remove_writerrrZ_maybe_resume_protocolrrr)rrrCrrrr>s(


z$_UnixWritePipeTransport._write_readycCsdS)NTr)rrrr
can_write_eofXsz%_UnixWritePipeTransport.can_write_eofcCsB|jr
dS|jstd|_|js>|jj|j|jj|jddS)NT)	rrrjrrrrrr)rrrr	write_eof[s
z!_UnixWritePipeTransport.write_eofcCs
||_dS)N)r)rrPrrrrdsz$_UnixWritePipeTransport.set_protocolcCs|jS)N)r)rrrrrgsz$_UnixWritePipeTransport.get_protocolcCs|jS)N)r)rrrrrjsz"_UnixWritePipeTransport.is_closingcCs|jdk	r|jr|jdS)N)rrr)rrrrr%msz_UnixWritePipeTransport.closecCs,|jdk	r(tjd|t|d|jjdS)Nzunclosed transport %r)r$)rr*r+r,r%)rrrrrvs
z_UnixWritePipeTransport.__del__cCs|jddS)N)r)rrrrabort|sz_UnixWritePipeTransport.abortFatal error on pipe transportcCsPt|tjr*|jjrBtjd||ddn|jj||||jd|j	|dS)Nz%r: %sT)r)rrrrrP)
rKrZ_FATAL_ERROR_IGNORErrrrrrr)rrCrrrrrs
z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|jj|j|jj|jj|j|jj|j|dS)NT)	rrrrrr-rrr)rrCrrrrs
z_UnixWritePipeTransport._closecCs4z|jj|Wd|jjd|_d|_d|_XdS)N)rrrr%r)rrCrrrrs
z-_UnixWritePipeTransport._call_connection_lost)NN)r)N)rrrrrrrrrrrrrrr%rrrrrrrrrr)r!rrTs$%	!	

rTset_inheritablecCsNttdd}tj|tj}|s4tj|tj||Bntj|tj||@dS)NZ
FD_CLOEXECr)rrZF_GETFDZF_SETFD)rZinheritableZcloexec_flagoldrrr_set_inheritables
rc@seZdZddZdS)rWc		Ksvd}|tjkr*|jj\}}t|jdtj|f||||d|d||_|dk	rr|jt	|j
d|d|j_dS)NF)r[r\r]r^Zuniversal_newlinesr_wb)	buffering)
subprocessPIPErr#rr7Popen_procr%rdetachr\)	rrBr[r\r]r^r_r`Zstdin_wrrr_starts
z_UnixSubprocessTransport._startN)rrrrrrrrrWsrWc@s@eZdZdZddZddZddZdd	Zd
dZdd
Z	dS)raHAbstract base class for monitoring child processes.

    Objects derived from this class monitor a collection of subprocesses and
    report their termination or interruption by a signal.

    New callbacks are registered with .add_child_handler(). Starting a new
    process must be done within a 'with' block to allow the watcher to suspend
    its activity until the new process if fully registered (this is needed to
    prevent a race condition in some implementations).

    Example:
        with watcher:
            proc = subprocess.Popen("sleep 1")
            watcher.add_child_handler(proc.pid, callback)

    Notes:
        Implementations of this class must be thread-safe.

        Since child watcher objects may catch the SIGCHLD signal and call
        waitpid(-1), there should be only one active object per process.
    cGs
tdS)aRegister a new child handler.

        Arrange for callback(pid, returncode, *args) to be called when
        process 'pid' terminates. Specifying another callback for the same
        process replaces the previous handler.

        Note: callback() must be thread-safe.
        N)NotImplementedError)rrerArBrrrrXs	z&AbstractChildWatcher.add_child_handlercCs
tdS)zRemoves the handler for process 'pid'.

        The function returns True if the handler was successfully removed,
        False if there was nothing to remove.N)r)rrerrrremove_child_handlersz)AbstractChildWatcher.remove_child_handlercCs
tdS)zAttach the watcher to an event loop.

        If the watcher was previously attached to an event loop, then it is
        first detached before attaching to the new loop.

        Note: loop may be None.
        N)r)rrrrrattach_loopsz AbstractChildWatcher.attach_loopcCs
tdS)zlClose the watcher.

        This must be called to make sure that any underlying resource is freed.
        N)r)rrrrr%szAbstractChildWatcher.closecCs
tdS)zdEnter the watcher's context and allow starting new processes

        This function must return selfN)r)rrrr	__enter__szAbstractChildWatcher.__enter__cCs
tdS)zExit the watcher's contextN)r)rabcrrr__exit__	szAbstractChildWatcher.__exit__N)
rrrrrXrrr%rrrrrrrs
c@sDeZdZddZddZddZddZd	d
ZddZd
dZ	dS)BaseChildWatchercCsd|_i|_dS)N)r
_callbacks)rrrrrszBaseChildWatcher.__init__cCs|jddS)N)r)rrrrr%szBaseChildWatcher.closecCs
tdS)N)r)rexpected_pidrrr_do_waitpidszBaseChildWatcher._do_waitpidcCs
tdS)N)r)rrrr_do_waitpid_allsz BaseChildWatcher._do_waitpid_allcCs~|dkst|tjst|jdk	r<|dkr<|jr<tjdt|jdk	rT|jj	t
j||_|dk	rz|jt
j|j
|jdS)NzCA loop is being detached from a child watcher with pending handlers)rKrZAbstractEventLooprjrrr*r+RuntimeWarningr)r5SIGCHLDrE	_sig_chldr)rrrrrrs
zBaseChildWatcher.attach_loopcCsFy|jWn4tk
r@}z|jjd|dWYdd}~XnXdS)Nz$Unknown exception in SIGCHLD handler)rr)rrZrr)rrCrrrr1szBaseChildWatcher._sig_chldcCs2tj|rtj|Stj|r*tj|S|SdS)N)r{WIFSIGNALEDWTERMSIG	WIFEXITEDWEXITSTATUS)rstatusrrr_compute_returncode=s



z$BaseChildWatcher._compute_returncodeN)
rrrrr%rrrrrrrrrrsrcsPeZdZdZfddZddZddZdd	Zd
dZdd
Z	ddZ
ZS)rad'Safe' child watcher implementation.

    This implementation avoids disrupting other code spawning processes by
    polling explicitly each process in the SIGCHLD handler instead of calling
    os.waitpid(-1).

    This is a safe solution but it has a significant overhead when handling a
    big number of children (O(n) each time SIGCHLD is raised)
    cs|jjtjdS)N)rr-rr%)r)r!rrr%Vs
zSafeChildWatcher.closecCs|S)Nr)rrrrrZszSafeChildWatcher.__enter__cCsdS)Nr)rrrrrrrr]szSafeChildWatcher.__exit__cGs.|jdkrtd||f|j|<|j|dS)NzICannot add child handler, the child watcher does not have a loop attached)rr:rr)rrerArBrrrrX`s

z"SafeChildWatcher.add_child_handlercCs&y|j|=dStk
r dSXdS)NTF)rrG)rrerrrrks
z%SafeChildWatcher.remove_child_handlercCs"xt|jD]}|j|qWdS)N)r(rr)rrerrrrrsz SafeChildWatcher._do_waitpid_allcCs|dkstytj|tj\}}Wn(tk
rJ|}d}tjd|Yn0X|dkrXdS|j|}|jj	rztj
d||y|jj|\}}Wn.t
k
r|jj	rtjd|ddYnX|||f|dS)Nrz8Unknown child process pid %d, will report returncode 255z$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rT)r)rjr{waitpidWNOHANGChildProcessErrorrrrrrrrpoprG)rrrerrfrArBrrrrws,


zSafeChildWatcher._do_waitpid)rrrrr%rrrXrrrrrr)r!rrKs	csTeZdZdZfddZfddZddZdd	Zd
dZdd
Z	ddZ
ZS)raW'Fast' child watcher implementation.

    This implementation reaps every terminated processes by calling
    os.waitpid(-1) directly, possibly breaking other code spawning processes
    and waiting for their termination.

    There is no noticeable overhead when handling a big number of children
    (O(1) each time a child terminates).
    cs$tjtj|_i|_d|_dS)Nr)rr	threadingZLock_lock_zombies_forks)r)r!rrrs

zFastChildWatcher.__init__cs"|jj|jjtjdS)N)rr-rrr%)r)r!rrr%s

zFastChildWatcher.closec
Cs$|j|jd7_|SQRXdS)Nr)rr)rrrrrszFastChildWatcher.__enter__c
CsV|j:|jd8_|js$|jr(dSt|j}|jjWdQRXtjd|dS)Nrz5Caught subprocesses termination from unknown pids: %s)rrrr;r-rr)rrrrZcollateral_victimsrrrrs
zFastChildWatcher.__exit__cGsz|jstd|jdkr td|j:y|jj|}Wn"tk
rZ||f|j|<dSXWdQRX|||f|dS)NzMust use the context managerzICannot add child handler, the child watcher does not have a loop attached)	rrjrr:rrrrGr)rrerArBrfrrrrXs
z"FastChildWatcher.add_child_handlercCs&y|j|=dStk
r dSXdS)NTF)rrG)rrerrrrs
z%FastChildWatcher.remove_child_handlercCsxytjdtj\}}Wntk
r,dSX|dkr:dS|j|}|jvy|jj|\}}WnBtk
r|j	r||j
|<|jjrt
jd||wd}YnX|jjrt
jd||WdQRX|dkrt
jd||q|||f|qWdS)Nrrz,unknown process %s exited with returncode %sz$process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %dr2)r{rrrrrrrrGrrrrrrr)rrerrfrArBrrrrs6





z FastChildWatcher._do_waitpid_all)rrrrrr%rrrXrrrrr)r!rrs	csHeZdZdZeZfddZddZfddZdd	Z	d
dZ
ZS)_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.cstjd|_dS)N)rr_watcher)r)r!rrrs
z$_UnixDefaultEventLoopPolicy.__init__c
CsHtj8|jdkr:t|_ttjtjr:|jj|j	j
WdQRXdS)N)rrrrrKrcurrent_thread_MainThreadr_localr)rrrr
_init_watchers
z)_UnixDefaultEventLoopPolicy._init_watchercs6tj||jdk	r2ttjtjr2|jj|dS)zSet the event loop.

        As a side effect, if a child watcher was set before, then calling
        .set_event_loop() from the main thread will call .attach_loop(loop) on
        the child watcher.
        N)rset_event_looprrKrrrr)rr)r!rrrs
z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|j|jS)zzGet the watcher for child processes.

        If not yet set, a SafeChildWatcher object is automatically created.
        N)rr)rrrrrV&s
z-_UnixDefaultEventLoopPolicy.get_child_watchercCs4|dkst|tst|jdk	r*|jj||_dS)z$Set the watcher for child processes.N)rKrrjrr%)rrarrrset_child_watcher0s

z-_UnixDefaultEventLoopPolicy.set_child_watcher)rrrrrZ
_loop_factoryrrrrVrrrr)r!rrs
r)5rr>r{r5r"ryrr&rr*rrrrrrr	r
rrr
logr__all__rImportErrorrfspathrxAttributeErrorZBaseSelectorEventLooprhasattrrrZ
ReadTransportrNZ_FlowControlMixinZWriteTransportrTrrZBaseSubprocessTransportrWrrrrZBaseDefaultEventLoopPolicyrrrrrrr<module>sn


O
F=On2

OHA YOOOO