<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

].l                 @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d d l m Z d d l m Z d d l m	 Z	 d d l m
 Z
 d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d d d g Z d  Z d Z d Z d Z d Z d Z Gd d   d e	 j  Z Gd d   d e	 j  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z  Gd  d!   d! e j!  Z" Gd" d   d e
 j#  Z$ Gd# d   d  Z% Gd$ d%   d% e j&  Z' e" Z( Gd& d'   d' e j)  Z* e* Z+ d S)(    N   )events)base_subprocess)futures)proactor_events)selector_events)tasks)windows_utils)_overlapped)	coroutine)loggerSelectorEventLoopProactorEventLoopIocpProactorDefaultEventLoopPolicyl    i  i  gMbP?g?c                   s|   e  Z d  Z d d   f d d  Z   f d d   Z d d   Z   f d	 d
   Z   f d d   Z   f d d   Z   S)_OverlappedFutureloopNc               s3   t    j d |  |  j r& |  j d =| |  _ d  S)Nr   r   )super__init___source_traceback_ov)selfovr   )	__class__ 3/opt/alt/python35/lib64/python3.5/windows_events.pyr   -   s    	
z_OverlappedFuture.__init__c                sZ   t    j   } |  j d  k	 rV |  j j r0 d n d } | j d d | |  j j f  | S)NpendingZ	completedr   zoverlapped=<%s, %#x>)r   
_repr_infor   r   insertaddress)r   infostate)r   r   r   r   3   s
     z_OverlappedFuture._repr_infoc             C   s   |  j  d  k r d  Sy |  j  j   Wnc t k
 r } zC d d d | d |  i } |  j rg |  j | d <|  j j |  WYd  d  } ~ Xn Xd  |  _  d  S)Nmessagez&Cancelling an overlapped future failed	exceptionfuturesource_traceback)r   cancelOSErrorr   _loopcall_exception_handler)r   exccontextr   r   r   _cancel_overlapped:   s    	#z$_OverlappedFuture._cancel_overlappedc                s   |  j    t   j   S)N)r-   r   r'   )r   )r   r   r   r'   J   s    
z_OverlappedFuture.cancelc                s   t    j |  |  j   d  S)N)r   set_exceptionr-   )r   r$   )r   r   r   r.   N   s    z_OverlappedFuture.set_exceptionc                s   t    j |  d  |  _ d  S)N)r   
set_resultr   )r   result)r   r   r   r/   R   s    z_OverlappedFuture.set_result)	__name__
__module____qualname__r   r   r-   r'   r.   r/   r   r   )r   r   r   '   s   r   c                   s   e  Z d  Z d d   f d d  Z d d   Z   f d d   Z d	 d
   Z d d   Z   f d d   Z   f d d   Z	   f d d   Z
   S)_BaseWaitHandleFuturer   Nc               sN   t    j d |  |  j r& |  j d =| |  _ | |  _ | |  _ d |  _ d  S)Nr   r   Tr   )r   r   r   r   _handle_wait_handle_registered)r   r   handlewait_handler   )r   r   r   r   Z   s    	
			z_BaseWaitHandleFuture.__init__c             C   s   t  j |  j d  t  j k S)Nr   )_winapiZWaitForSingleObjectr5   ZWAIT_OBJECT_0)r   r   r   r   _pollh   s    z_BaseWaitHandleFuture._pollc                s~   t    j   } | j d |  j  |  j d  k	 rW |  j   rD d n d } | j |  |  j d  k	 rz | j d |  j  | S)Nz
handle=%#xsignaledZwaitingzwait_handle=%#x)r   r   appendr5   r;   r6   )r   r!   r"   )r   r   r   r   m   s    z _BaseWaitHandleFuture._repr_infoc             C   s   d  |  _  d  S)N)r   )r   futr   r   r   _unregister_wait_cbw   s    z)_BaseWaitHandleFuture._unregister_wait_cbc             C   s   |  j  s d  Sd |  _  |  j } d  |  _ y t j |  Wny t k
 r } zY | j t j k r d d d | d |  i } |  j r |  j | d <|  j j	 |  d  SWYd  d  } ~ Xn X|  j
 d   d  S)NFr#   z$Failed to unregister the wait handler$   r%   r&   )r7   r6   r
   ZUnregisterWaitr(   winerrorERROR_IO_PENDINGr   r)   r*   r?   )r   r9   r+   r,   r   r   r   _unregister_wait|   s"    					z&_BaseWaitHandleFuture._unregister_waitc                s   |  j    t   j   S)N)rB   r   r'   )r   )r   r   r   r'      s    
z_BaseWaitHandleFuture.cancelc                s   |  j    t   j |  d  S)N)rB   r   r.   )r   r$   )r   r   r   r.      s    
z#_BaseWaitHandleFuture.set_exceptionc                s   |  j    t   j |  d  S)N)rB   r   r/   )r   r0   )r   r   r   r/      s    
z _BaseWaitHandleFuture.set_result)r1   r2   r3   r   r;   r   r?   rB   r'   r.   r/   r   r   )r   r   r4   W   s   
r4   c                   sF   e  Z d  Z d d   f d d  Z d d   Z   f d d   Z   S)	_WaitCancelFuturer   Nc               s)   t    j | | | d | d  |  _ d  S)Nr   )r   r   _done_callback)r   r   eventr9   r   )r   r   r   r      s    z_WaitCancelFuture.__init__c             C   s   t  d   d  S)Nz'_WaitCancelFuture must not be cancelled)RuntimeError)r   r   r   r   r'      s    z_WaitCancelFuture.cancelc                s3   t  t |   j   |  j d  k	 r/ |  j |   d  S)N)r   rC   _schedule_callbacksrD   )r   )r   r   r   rG      s    z%_WaitCancelFuture._schedule_callbacks)r1   r2   r3   r   r'   rG   r   r   )r   r   rC      s   rC   c                   sF   e  Z d  Z d d   f d d  Z   f d d   Z d d   Z   S)	_WaitHandleFuturer   Nc               sV   t    j | | | d | | |  _ d |  _ t j d  d d d   |  _ d  |  _ d  S)Nr   TF)r   r   	_proactorZ_unregister_proactorr
   ZCreateEvent_event
_event_fut)r   r   r8   r9   proactorr   )r   r   r   r      s
    		z_WaitHandleFuture.__init__c                sa   |  j  d  k	 r1 t j |  j   d  |  _  d  |  _ |  j j |  j  d  |  _ t   j |  d  S)N)	rJ   r:   CloseHandlerK   rI   _unregisterr   r   r?   )r   r>   )r   r   r   r?      s    				z%_WaitHandleFuture._unregister_wait_cbc             C   s   |  j  s d  Sd |  _  |  j } d  |  _ y t j | |  j  Wny t k
 r } zY | j t j k r d d d | d |  i } |  j r |  j | d <|  j	 j
 |  d  SWYd  d  } ~ Xn X|  j j |  j |  j  |  _ d  S)NFr#   z$Failed to unregister the wait handler$   r%   r&   )r7   r6   r
   ZUnregisterWaitExrJ   r(   r@   rA   r   r)   r*   rI   _wait_cancelr?   rK   )r   r9   r+   r,   r   r   r   rB      s$    					z"_WaitHandleFuture._unregister_wait)r1   r2   r3   r   r?   rB   r   r   )r   r   rH      s   rH   c               @   sR   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z e Z d S)
PipeServerc             C   s@   | |  _  t j   |  _ d  |  _ d  |  _ |  j d  |  _ d  S)NT)_addressweakrefWeakSet_free_instances_pipe_accept_pipe_future_server_pipe_handle)r   r    r   r   r   r      s
    			zPipeServer.__init__c             C   s    |  j  |  j d  } |  _  | S)NF)rU   rW   )r   tmpr   r   r   _get_unconnected_pipe   s    z PipeServer._get_unconnected_pipec          	   C   s   |  j    r d  St j t j B} | r3 | t j O} t j |  j | t j t j Bt j	 Bt j
 t j t j t j t j  } t j |  } |  j j |  | S)N)closedr:   ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperQ   ZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ	PIPE_WAITZPIPE_UNLIMITED_INSTANCESr	   BUFSIZEZNMPWAIT_WAIT_FOREVERNULL
PipeHandlerT   add)r   firstflagshpiper   r   r   rW      s    	zPipeServer._server_pipe_handlec             C   s   |  j  d  k S)N)rQ   )r   r   r   r   rZ     s    zPipeServer.closedc             C   su   |  j  d  k	 r% |  j  j   d  |  _  |  j d  k	 rq x |  j D] } | j   q> Wd  |  _ d  |  _ |  j j   d  S)N)rV   r'   rQ   rT   closerU   clear)r   rb   r   r   r   rc     s    			zPipeServer.closeN)	r1   r2   r3   r   rY   rW   rZ   rc   __del__r   r   r   r   rP      s   
rP   c               @   s   e  Z d  Z d d   Z d S)_WindowsSelectorEventLoopc             C   s
   t  j   S)N)r	   
socketpair)r   r   r   r   _socketpair&  s    z%_WindowsSelectorEventLoop._socketpairN)r1   r2   r3   rh   r   r   r   r   rf   #  s   rf   c                   sj   e  Z d  Z d   f d d  Z d d   Z e d d    Z e d d	    Z e d d
 d   Z   S)r   Nc                s)   | d  k r t    } t   j |  d  S)N)r   r   r   )r   rL   )r   r   r   r   -  s    	zProactorEventLoop.__init__c             C   s
   t  j   S)N)r	   rg   )r   r   r   r   rh   2  s    zProactorEventLoop._socketpairc             c   sN   |  j  j |  } | Ed  H} |   } |  j | | d d | i } | | f S)Nextraaddr)rI   connect_pipe_make_duplex_pipe_transport)r   protocol_factoryr    frb   protocoltransr   r   r   create_pipe_connection5  s    	z(ProactorEventLoop.create_pipe_connectionc                sA   t      d        f d d    j    g S)Nc                sb  d  } y |  rj |  j    }  j j |   j   rE | j   d  S   }  j | | d d   i  j   } | d  k r d  S j j |  }  Wn t	 k
 r#} zh | r | j
   d k r  j d d d | d | i  | j   n  j rt j d | d	 d
 WYd  d  } ~ Xn; t j k
 rG| rC| j   Yn X|   _ |  j   d  S)Nri   rj   r   r#   zPipe accept failedr$   rb   zAccept pipe failed on pipe %rexc_infoTr   )r0   rT   discardrZ   rc   rl   rY   rI   accept_piper(   filenor*   Z_debugr   warningr   CancelledErrorrV   add_done_callback)rn   rb   ro   r+   )r    loop_accept_piperm   r   serverr   r   ry   B  s<    
				z>ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_pipe)rP   Z	call_soon)r   rm   r    r   )r    ry   rm   r   rz   r   start_serving_pipe>  s    !(z$ProactorEventLoop.start_serving_pipec	             k   s   |  j    }
 t |  | | | | | | | d |
 d | |	 } y |
 Ed  HWn+ t k
 rv } z | } WYd  d  } ~ Xn Xd  } | d  k	 r | j   | j   Ed  H|  | S)Nwaiterri   )create_future_WindowsSubprocessTransport	Exceptionrc   _wait)r   ro   argsshellstdinstdoutstderrbufsizeri   kwargsr|   Ztranspr+   errr   r   r   _make_subprocess_transportm  s    		
z,ProactorEventLoop._make_subprocess_transport)	r1   r2   r3   r   rh   r   rq   r{   r   r   r   )r   r   r   *  s   	/c               @   s0  e  Z d  Z d d d  Z d d   Z d d   Z d d	 d
  Z d d   Z d d d  Z d d d  Z	 d d   Z
 d d   Z d d   Z e d d    Z d d d  Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d d( d)  Z d* d+   Z d, d-   Z d. d/   Z d S)0r   l    c             C   sd   d  |  _  g  |  _ t j t j t d |  |  _ i  |  _ t j	   |  _
 g  |  _ t j	   |  _ d  S)Nr   )r)   _resultsr
   CreateIoCompletionPortINVALID_HANDLE_VALUEr\   _iocp_cacherR   rS   r7   _unregistered_stopped_serving)r   Zconcurrencyr   r   r   r     s    				zIocpProactor.__init__c             C   s)   d |  j  j t |  j  t |  j  f S)Nz<%s overlapped#=%s result#=%s>)r   r1   lenr   r   )r   r   r   r   __repr__  s    zIocpProactor.__repr__c             C   s   | |  _  d  S)N)r)   )r   r   r   r   r   set_loop  s    zIocpProactor.set_loopNc             C   s,   |  j  s |  j |  |  j  } g  |  _  | S)N)r   r;   )r   timeoutrX   r   r   r   select  s
    			zIocpProactor.selectc             C   s    |  j  j   } | j |  | S)N)r)   r}   r/   )r   valuer>   r   r   r   _result  s    zIocpProactor._resultr   c             C   s   |  j  |  t j t  } yH t | t j  rM | j | j   | |  n | j | j   |  Wn t	 k
 r |  j
 d  SYn Xd d   } |  j | | |  S)N    c             S   sa   y | j    SWnL t k
 r\ } z, | j t j k rG t | j    n   WYd  d  } ~ Xn Xd  S)N)	getresultr(   r@   r
   ERROR_NETNAME_DELETEDConnectionResetErrorr   )rp   keyr   r+   r   r   r   finish_recv  s    z&IocpProactor.recv.<locals>.finish_recv)_register_with_iocpr
   
Overlappedr\   
isinstancesocketZWSARecvru   ZReadFileBrokenPipeErrorr   	_register)r   connnbytesr`   r   r   r   r   r   recv  s    	zIocpProactor.recvc             C   s   |  j  |  t j t  } t | t j  rJ | j | j   | |  n | j | j   |  d d   } |  j	 | | |  S)Nc             S   sa   y | j    SWnL t k
 r\ } z, | j t j k rG t | j    n   WYd  d  } ~ Xn Xd  S)N)r   r(   r@   r
   r   r   r   )rp   r   r   r+   r   r   r   finish_send  s    z&IocpProactor.send.<locals>.finish_send)
r   r
   r   r\   r   r   ZWSASendru   Z	WriteFiler   )r   r   bufr`   r   r   r   r   r   send  s    	zIocpProactor.sendc                s   |  j    |  j  j    t j t  } | j  j     j       f d d   } t d d    } |  j	 |  |  } | |    } t
 j | d |  j | S)Nc                s^   | j    t j d  j    }   j t j t j |    j	  j
        j   f S)Nz@P)r   structpackru   
setsockoptr   
SOL_SOCKETr
   ZSO_UPDATE_ACCEPT_CONTEXT
settimeout
gettimeoutgetpeername)rp   r   r   r   )r   listenerr   r   finish_accept  s    
z*IocpProactor.accept.<locals>.finish_acceptc             s   s6   y |  Ed  HWn" t  j k
 r1 | j     Yn Xd  S)N)r   rw   rc   )r%   r   r   r   r   accept_coro  s
    
z(IocpProactor.accept.<locals>.accept_coror   )r   _get_accept_socketfamilyr
   r   r\   ZAcceptExru   r   r   r   Zensure_futurer)   )r   r   r   r   r   r%   coror   )r   r   r   accept  s    		zIocpProactor.acceptc                s   |  j     y t j   j     j  WnS t k
 r } z3 | j t j k rT     j	   d d k rm   WYd  d  } ~ Xn Xt j
 t  } | j   j   |    f d d   } |  j |   |  S)Nr   r   c                s'   | j      j t j t j d    S)Nr   )r   r   r   r   r
   ZSO_UPDATE_CONNECT_CONTEXT)rp   r   r   )r   r   r   finish_connect  s    
z,IocpProactor.connect.<locals>.finish_connect)r   r
   Z	BindLocalru   r   r(   r@   errnoZ	WSAEINVALgetsocknamer   r\   Z	ConnectExr   )r   r   r    er   r   r   )r   r   connect  s    zIocpProactor.connectc                si   |  j     t j t  } | j   j    } | rD |  j    S  f d d   } |  j |   |  S)Nc                s   | j      S)N)r   )rp   r   r   )rb   r   r   finish_accept_pipe  s    
z4IocpProactor.accept_pipe.<locals>.finish_accept_pipe)r   r
   r   r\   ZConnectNamedPiperu   r   r   )r   rb   r   Z	connectedr   r   )rb   r   rt     s    zIocpProactor.accept_pipec             c   s   t  } x y t j |  } PWn: t k
 rY } z | j t j k rG   WYd  d  } ~ Xn Xt | d t  } t j	 | d |  j
 Ed  Hq	 Wt j |  S)N   r   )CONNECT_PIPE_INIT_DELAYr
   ZConnectPiper(   r@   ZERROR_PIPE_BUSYminCONNECT_PIPE_MAX_DELAYr   sleepr)   r	   r]   )r   r    delayr8   r+   r   r   r   rk     s    zIocpProactor.connect_pipec             C   s   |  j  | | d  S)NF)_wait_for_handle)r   r8   r   r   r   r   wait_for_handle*  s    zIocpProactor.wait_for_handlec             C   s"   |  j  | d  d  } | | _ | S)NT)r   rD   )r   rE   Zdone_callbackr>   r   r   r   rO   2  s    	zIocpProactor._wait_cancelc                s   | d  k r t  j } n t j | d  } t j t  } t j | |  j | j	 |  } | r| t
 | | | d |  j   n t | | | |  d |  j     j r   j d =  f d d   }   | d | f |  j | j	 <  S)Ng     @@r   r   c                s
     j    S)N)r;   )rp   r   r   )rn   r   r   finish_wait_for_handleM  s    z=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handler   r   )r:   INFINITEmathceilr
   r   r\   ZRegisterWaitWithQueuer   r    rC   r)   rH   r   r   )r   r8   r   Z
_is_cancelmsr   r9   r   r   )rn   r   r   9  s    	
	zIocpProactor._wait_for_handlec             C   sB   | |  j  k r> |  j  j |  t j | j   |  j d d  d  S)Nr   )r7   r^   r
   r   ru   r   )r   objr   r   r   r   Y  s    z IocpProactor._register_with_iocpc             C   s   t  | d |  j } | j r( | j d =| j s y | d  d  |  } Wn2 t k
 r{ } z | j |  WYd  d  } ~ Xn X| j |  | | | | f |  j | j <| S)Nr   r   r   )	r   r)   r   r   r(   r.   r/   r   r    )r   r   r   callbackrn   r   r   r   r   r   r   c  s    	
	 
zIocpProactor._registerc             C   s   |  j  j |  d  S)N)r   r=   )r   r   r   r   r   rN     s    zIocpProactor._unregisterc             C   s    t  j  |  } | j d  | S)Nr   )r   r   )r   r   sr   r   r   r     s    zIocpProactor._get_accept_socketc             C   s  | d  k r t  } nF | d k  r0 t d   n+ t j | d  } | t  k r[ t d   xut j |  j |  } | d  k r Pd } | \ } } } } y" |  j j |  \ } }	 }
 } Wnr t	 k
 r.|  j
 j   r|  j
 j d d d d | | | | f i  | d t j f k r't j |  w^ Yn X|
 |  j k rK| j   q^ | j   s^ y | | | |	  } WnB t k
 r} z" | j |  |  j j |  WYd  d  } ~ Xq^ X| j |  |  j j |  q^ Wx' |  j D] }	 |  j j |	 j d   qW|  j j   d  S)	Nr   znegative timeoutg     @@ztimeout too bigr#   z8GetQueuedCompletionStatus() returned an unexpected eventstatusz)err=%s transferred=%s key=%#x address=%#x)r   
ValueErrorr   r   r
   ZGetQueuedCompletionStatusr   r   popKeyErrorr)   Z	get_debugr*   r   r:   rM   r   r'   doner(   r.   r   r=   r/   r   r    rd   )r   r   r   r   r   Ztransferredr   r    rn   r   r   r   r   r   r   r   r   r;     sJ    	"	#zIocpProactor._pollc             C   s   |  j  j |  d  S)N)r   r^   )r   r   r   r   r   _stop_serving  s    zIocpProactor._stop_servingc             C   s7  x t  |  j j    D] \ } \ } } } } | j   r= q t | t  rO q y | j   Wq t k
 r } zR |  j d  k	 r d d d | d | i } | j	 r | j	 | d <|  j j
 |  WYd  d  } ~ Xq Xq Wx) |  j r|  j d  s t j d  q Wg  |  _ |  j d  k	 r3t j |  j  d  |  _ d  S)Nr#   zCancelling a future failedr$   r%   r&   r   z"taking long time to close proactor)listr   items	cancelledr   rC   r'   r(   r)   r   r*   r;   r   debugr   r   r:   rM   )r   r    r>   r   r   r   r+   r,   r   r   r   rc     s,    .	'	zIocpProactor.closec             C   s   |  j    d  S)N)rc   )r   r   r   r   re     s    zIocpProactor.__del__)r1   r2   r3   r   r   r   r   r   r   r   r   r   rt   r   rk   r   rO   r   r   r   rN   r   r;   r   rc   re   r   r   r   r   r     s,   
 
	7 c               @   s   e  Z d  Z d d   Z d S)r~   c       
         sw   t  j | d | d | d | d | d | |   _   f d d   }   j j j t   j j   }	 |	 j |  d  S)Nr   r   r   r   r   c                s      j  j   }   j |  d  S)N)_procpollZ_process_exited)rn   
returncode)r   r   r   r     s    z4_WindowsSubprocessTransport._start.<locals>.callback)	r	   Popenr   r)   rI   r   intr5   rx   )
r   r   r   r   r   r   r   r   r   rn   r   )r   r   _start  s    !z"_WindowsSubprocessTransport._startN)r1   r2   r3   r   r   r   r   r   r~     s   r~   c               @   s   e  Z d  Z e Z d S)_WindowsDefaultEventLoopPolicyN)r1   r2   r3   r   Z_loop_factoryr   r   r   r   r     s   r   ),r:   r   r   r   r   rR    r   r   r   r   r   r   r	   r
   Z
coroutinesr   logr   __all__r\   r   ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr   r   Futurer   r4   rC   rH   objectrP   ZBaseSelectorEventLooprf   ZBaseProactorEventLoopr   r   ZBaseSubprocessTransportr~   r   ZBaseDefaultEventLoopPolicyr   r   r   r   r   r   <module>   sH   		0J4;] j