
     h                        d dl mZ 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Zd dl	Z	d dl
Z
ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ 	 ddlmZ ej        dk    rej        Zej        Zej        Zej        Zn# e$ r ej        dk    r dZY nw xY wg dZ e ed          Z!dZ"dZ# e
j$                    Z%dZ&dgZ' e ed          rdZ&e'dgz  Z'ej        dk    rdZ&e'dgz  Z'e#fdZ(d Z)d Z*d Z+d Z, G d de-          Z. G d de-          Z/er G d de/          Z0 G d d e/          Z1 G d! d"e-          Z2dHd#Z3d$ Z4ej        dk    rdId'Z5ndId(Z5 G d) d*e-          Z6d+ Z7ej        dk    r G d, d-e-          Z8ej9        ej:        ffd.Z;d/Z<d0Z=d1Z>d2Z?d3 Z@d4 ZA G d5 d6e-          ZBd7 ZCd8 ZD G d9 d:e2          ZEd; ZFej        dk    rd< ZGejH        ejI        hZJdJd=ZKn e ed>          rd? ZLnd@ ZLdJdAZKej        dk    r0dB ZMdC ZN ejO        e1eM           dD ZPdE ZQ ejO        e0eP           dS dF ZMdG ZN ejO        e1eM           dS )K    )absolute_importN   )	reduction)util)AuthenticationErrorBufferTooShort)	_billiard)setblockingsend_offset	monotonic)ForkingPickler)_winapiwin32)ClientListenerPipewaitpypy_version_infoi    g      4@AF_INETAF_UNIXAF_PIPEc                 $    t                      | z   S Nr   )timeouts    O/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/billiard/connection.py_init_timeoutr   H   s    ;;      c                 &    t                      | k    S r   r   )ts    r   _check_timeoutr!   L   s    ;;?r   c                    | dk    rdS | dk    r't          j        dt          j                              S | dk    r>t          j        dt	          j                    t          t                    fz  d          S t          d	          )
z?
    Return an arbitrary free address for the given family
    r   )	localhostr   r   z	listener-)prefixdirr   z\\.\pipe\pyc-%d-%d- zunrecognized family)	tempfilemktempr   get_temp_dirosgetpidnext_mmap_counter
ValueErrorfamilys    r   arbitrary_addressr1   T   s     	9		kt7H7J7JKKKK	9		&< "	T--@-@A'BGIK K K 	K .///r   c                     t           j        dk    r| dk    rt          d| z            t           j        dk    r-| dk    r)t          t          |           st          d| z            dS dS dS )zD
    Checks if the family is valid for the current environment.
    r   r   zFamily %s is not recognized.r   N)sysplatformr.   hasattrsocketr/   s    r   _validate_familyr7   c   s     |w6Y#6#67&@AAA
|w6Y#6#6vv&& 	F;fDEEE #6#6	F 	Fr   c                     t          |           t          k    rdS t          |           t          u r|                     d          rdS t          |           t          u rdS t	          d| z            )z]
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    r   z\\r   r   zaddress type of %r unrecognized)typetuplestr
startswithr.   )addresss    r   address_typer>   p   sm     G}}y	g#		'"4"4V"<"<	y	g#		y:WDEEEr   c                       e Zd Zd ZdS )_SocketContainerc                     || _         d S r   sock)selfrC   s     r   __init__z_SocketContainer.__init__   s    			r   N)__name__
__module____qualname__rE    r   r   r@   r@      s#            r   r@   c                       e Zd ZdZddZd Zd Zd Zd Zd Z	e
d	             Ze
d
             Ze
d             Zd Zd ZddZd ZddZddZd ZddZd Zd Zd Zd ZdS )_ConnectionBaseNTc                    t          |t                    r%|j        | _        |j                                        }|                                }|dk     rt          d          |s|st          d          || _        || _        || _	        d S )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)

isinstancer@   rC   _socketfileno	__index__r.   _handle	_readable	_writable)rD   handlereadablewritables       r   rE   z_ConnectionBase.__init__   s    f.// 	*!;DL[''))F!!##A::-... 	J 	JHJ J J!!r   c                 @    | j         |                                  d S d S r   rQ   _closerD   s    r   __del__z_ConnectionBase.__del__   s#    <#KKMMMMM $#r   c                 2    | j         t          d          d S )Nzhandle is closed)rQ   OSErrorrZ   s    r   _check_closedz_ConnectionBase._check_closed   s!    <,---  r   c                 2    | j         st          d          d S )Nzconnection is write-only)rR   r]   rZ   s    r   _check_readablez_ConnectionBase._check_readable   s%    ~ 	64555	6 	6r   c                 2    | j         st          d          d S )Nzconnection is read-only)rS   r]   rZ   s    r   _check_writablez_ConnectionBase._check_writable   s%    ~ 	53444	5 	5r   c                 f    | j         rd| _        n|                                  t          d          )NFzbad message length)rS   rR   closer]   rZ   s    r   _bad_message_lengthz#_ConnectionBase._bad_message_length   s1    > 	"DNNJJLLL*+++r   c                     | j         du S )z True if the connection is closedNrQ   rZ   s    r   closedz_ConnectionBase.closed   s     |t##r   c                     | j         S )z"True if the connection is readable)rR   rZ   s    r   rU   z_ConnectionBase.readable        ~r   c                     | j         S )z"True if the connection is writable)rS   rZ   s    r   rV   z_ConnectionBase.writable   rj   r   c                 8    |                                   | j        S )z+File descriptor or handle of the connection)r^   rQ   rZ   s    r   rO   z_ConnectionBase.fileno   s    |r   c                 h    | j         *	 |                                  d| _         dS # d| _         w xY wdS )zClose the connectionNrX   rZ   s    r   rd   z_ConnectionBase.close   sB    <#$#t####	 $#s   & 	/r   c                    |                                   |                                  t          |          }|j        dk    rt          t	          |                    }t          |          }|dk     rt          d          ||k     rt          d          |||z
  }n-|dk     rt          d          ||z   |k    rt          d          |                     ||||z                       dS )z,Send the bytes data from a bytes-like objectr   r   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)r^   rb   
memoryviewitemsizebyteslenr.   _send_bytes)rD   bufoffsetsizemns         r   
send_bytesz_ConnectionBase.send_bytes   s    sOO:>>588$$AFFA::1222v::5666<v:DDAXX/000d]Q<===6&4-/011111r   c                     |                                   |                                  |                     t          j        |                     dS )zSend a (picklable) objectN)r^   rb   rs   r   dumpsrD   objs     r   sendz_ConnectionBase.send   sK    -c2233333r   c                     |                                   |                                  ||dk     rt          d          |                     |          }||                                  |                                S )z7
        Receive bytes data as a bytes object.
        Nr   znegative maxlength)r^   r`   r.   _recv_bytesre   getvalue)rD   	maxlengthrt   s      r   
recv_bytesz_ConnectionBase.recv_bytes   s}     	 Y]]1222y));$$&&&||~~r   c                 H   |                                   |                                  t          |          5 }|j        }|t	          |          z  }|dk     rt          d          ||k    rt          d          |                                 }|                                }|||z   k     r!t          |	                                          |
                    d           |                    |||z  ||z   |z                      |cddd           S # 1 swxY w Y   dS )zq
        Receive bytes data into a writeable bytes-like object.
        Return the number of bytes read.
        r   znegative offsetzoffset too largeN)r^   r`   ro   rp   rr   r.   r   tellr   r   seekreadinto)rD   rt   ru   rw   rp   bytesizeresultrv   s           r   recv_bytes_intoz_ConnectionBase.recv_bytes_into   sj   
 	__ 	zH#a&&(Hzz !2333("" !3444%%''F;;==D&4-''$V__%6%6777KKNNNOOA("FTMh#>>    #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CDDDc                     |                                   |                                  |                                 }t          j        |          S )zReceive a (picklable) object)r^   r`   r   r   loadbuf)rD   rt   s     r   recvz_ConnectionBase.recv  sH      %c***r           c                 |    |                                   |                                  |                     |          S )z/Whether there is any input available to be read)r^   r`   _pollrD   r   s     r   pollz_ConnectionBase.poll  s8    zz'"""r   c                     | S r   rI   rZ   s    r   	__enter__z_ConnectionBase.__enter__      r   c                 .    |                                   d S r   rd   rD   exc_type	exc_valueexc_tbs       r   __exit__z_ConnectionBase.__exit__"      

r   c                 H    t          |                                 ||          S r   )r   rO   )rD   rt   ru   s      r   r   z_ConnectionBase.send_offset%  s    4;;==#v666r   c                 J    t          |                                 |           d S r   )r
   rO   )rD   blockings     r   r
   z_ConnectionBase.setblocking(  s     DKKMM8,,,,,r   )TT)r   Nr   )r   )r   )rF   rG   rH   rQ   rE   r[   r^   r`   rb   re   propertyrh   rU   rV   rO   rd   ry   r~   r   r   r   r   r   r   r   r
   rI   r   r   rK   rK      s       G" " " "   . . .6 6 65 5 5, , , $ $ X$   X   X  
$ $ $2 2 2 2*4 4 4      4+ + +# # # #    7 7 7- - - - -r   rK   c                   D    e Zd ZdZdZej        fdZd Zd	dZ	d Z
d ZdS )
PipeConnectionz
        Connection class based on a Windows named pipe.
        Overlapped I/O is used, so the handles must have been created
        with FILE_FLAG_OVERLAPPED.
        Fc                 &     || j                    d S r   rg   )rD   _CloseHandles     r   rY   zPipeConnection._close6  s    L&&&&&r   c                    t          j        | j        |d          \  }}	 |t           j        k    r.t          j        |j        gdt                    }|t          k    sJ n#  |                                  xY w|	                    d          \  }}n# |	                    d          \  }}w xY w|dk    sJ |t          |          k    sJ d S )NT
overlappedFr   )r   	WriteFilerQ   ERROR_IO_PENDINGWaitForMultipleObjectseventINFINITEWAIT_OBJECT_0cancelGetOverlappedResultrr   )rD   rt   overrwaitresnwrittens         r   rs   zPipeConnection._send_bytes9  s    'cdKKKGB
='222%<
E85 5G #m3333		 " 6 6t < <## 6 6t < <#<<<<!8888s3xx''''''s   >A  B  A77B B-Nc                    | j         rd| _         t          j                    S |dnt          |d          }	 t	          j        | j        |d          \  }}	 |t          j        k    r.t	          j        |j	        gdt                    }|t          k    sJ n#  |                                  xY w|                    d          \  }}|dk    r<t          j                    }|                    |                                           |S |t          j        k    r|                     ||          S n# |                    d          \  }}|dk    r@t          j                    }|                    |                                           |c cY S |t          j        k    r|                     ||          c cY S w xY wn/# t$          $ r"}|j        t          j        k    rt*           d }~ww xY wt-          d          )NF   Tr   r   z.shouldn't get here; expected KeyboardInterrupt)_got_empty_messageioBytesIOminr   ReadFilerQ   r   r   r   r   r   r   r   write	getbufferERROR_MORE_DATA_get_more_datar]   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	rD   maxsizebsizer   r   r   nreadfes	            r   r   zPipeConnection._recv_bytesI  s   & */'z||#&C4E4E%.e  GBD'":::&-&D!#
E8'= '=G#*m#;#;#;#;		%'%;%;D%A%A
s!88 "
AGGBLLNN333#$H G$;;;#'#6#6r7#C#CC < &(%;%;D%A%A
s!88 "
AGGBLLNN333#$HHHHH G$;;;#'#6#6r7#C#CCCCCCCCCC <   zW%>>>&	
 @B B Bsg   F? >B D1 B--D1 0AF? 
%F? 0F? 1AF;F? (F;8F? :F;;F? ?
G+	G&&G+c                     | j         s#t          j        | j                  d         dk    rdS t	          t          | g|                    S )Nr   T)r   r   PeekNamedPiperQ   boolr   r   s     r   r   zPipeConnection._pollk  sI    ' )$,77:a??tdVW--...r   c                     |                                 }t          j                    }|                    |           t	          j        | j                  d         }|dk    sJ |*t          |          |z   |k    r|                                  t	          j	        | j        |d          \  }}|
                    d          \  }}|dk    sJ ||k    sJ |                    |                                            |S )Nr   r   Tr   )r   r   r   r   r   r   rQ   rr   re   r   r   )rD   r   r   rt   r   leftr   rbytess           r   r   zPipeConnection._get_more_dataq  s    ,,..C
AGGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>>GGBLLNN###Hr   r   )rF   rG   rH   __doc__r   r   CloseHandlerY   rs   r   r   r   rI   r   r   r   r   .  s        	 	
 #&-&9 	' 	' 	' 	'	( 	( 	(  	B  	B  	B  	BD	/ 	/ 	/	 	 	 	 	r   r   c                       e Zd ZdZerej        fdZej        Z	ej
        Znej        fdZej        Z	ej        Ze	fdZefdZefdZd
dZd	 ZdS )
Connectionzo
    Connection class based on an arbitrary file descriptor (Unix only), or
    a socket handle (Windows).
    c                 &     || j                    d S r   rg   rD   rY   s     r   rY   zConnection._close      F4<     r   c                 &     || j                    d S r   rg   r   s     r   rY   zConnection._close  r   r   c                 
   t          |          }	 	  || j        |          }||z  }|dk    rd S ||d          }nI# t          t          t          j        f$ r*}t          |dd           t          j        k    r Y d }~nd }~ww xY wt)NTr   errno)	rr   rQ   r]   IOErrorr6   errorgetattrr   EINTR)rD   rt   r   	remainingrx   excs         r   _sendzConnection._send  s    HH	
		E$,,,
 Q	>>E!""g Wfl3   3..%+== >====
	s   ; B A<<Bc                    t          j                    }| j        }|}|dk    r	  |||          }t          |          }|dk    r||k    rt          t          d          |                    |           ||z  }nI# t
          t          t          j	        f$ r*}t          |dd           t          j        k    r Y d }~nd }~ww xY w|dk    |S )Nr   zgot end of file during messager   )r   r   rQ   rr   r   r]   r   r   r6   r   r   r   r   )	rD   rv   readrt   rT   r   chunkrx   r   s	            r   _recvzConnection._recv  s    jll	!mmVY//
 JJ66 D((&%&FGGG		%   Q		 Wfl3   3..%+== >==== !mm 
s   A< <C B==Cc                 *   t          |          }t          j        d|          }|dk    r,|                     |           |                     |           d S t	          ||          r|                                }|                     ||z              d S )N!ii @  )rr   structpackr   rM   tobytes)rD   rt   ro   rx   headers        r   rs   zConnection._send_bytes  s    HHT1%%u99 JJvJJsOOOOO #z** $kkmmJJv|$$$$$r   Nc                     |                      d          }t          j        d|                                          \  }|||k    rd S |                      |          S )N   r   )r   r   unpackr   )rD   r   rt   rv   s       r   r   zConnection._recv_bytes  sQ    jjmmdCLLNN334'>>4zz$r   c                 B    t          | g|          }t          |          S r   )r   r   )rD   r   rs      r   r   zConnection._poll  s    $!!Awwr   r   )rF   rG   rH   r   r   r	   closesocketrY   r~   _writer   _readr*   rd   r   r   r   r   ro   rs   r   r   rI   r   r   r   r     s         
  	 ) 5 	! 	! 	! 	! " 	! 	! 	! 	!%      %    * +5 % % % %$           r   r   c                   b    e Zd ZdZddZd Zd Z ed           Z ed           Z	d	 Z
d
 ZdS )r   z
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    Nr   c                 8   |p|ot          |          pt          }|pt          |          }t          |           |dk    rt	          ||          | _        nt          |||          | _        |$t          |t                    st          d          || _
        d S )Nr   authkey should be a byte string)r>   default_familyr1   r7   PipeListener	_listenerSocketListenerrM   rq   	TypeError_authkey)rD   r=   r0   backlogauthkeys        r   rE   zListener.__init__  s     H4|G44H9G 	6.v66   Y)'7;;DNN+GVWEEDNz'5'A'A=>>>r   c                     | j         t          d          | j                                         }| j        r*t	          || j                   t          || j                   |S )zz
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        Nzlistener is closed)r   r]   acceptr   deliver_challengeanswer_challenge)rD   cs     r   r   zListener.accept  sa     >!.///N!!##= 	/a///Q...r   c                 R    | j         }|d| _         |                                 dS dS )zA
        Close the bound socket or named pipe of `self`.
        N)r   rd   )rD   listeners     r   rd   zListener.close  s6     >!DNNN  r   c                     | j         j        S r   )r   _addressrZ   s    r   <lambda>zListener.<lambda>  s    DN$; r   c                     | j         j        S r   )r   _last_acceptedrZ   s    r   r  zListener.<lambda>  s    $.*G r   c                     | S r   rI   rZ   s    r   r   zListener.__enter__  r   r   c                 .    |                                   d S r   r   r   s       r   r   zListener.__exit__  r   r   )NNr   N)rF   rG   rH   r   rE   r   rd   r   r=   last_acceptedr   r   rI   r   r   r   r     s                      h;;<<GHGGHHM      r   r   c                     |pt          |           }t          |           |dk    rt          |           }nt          |           }|$t	          |t
                    st          d          | t          ||           t          ||           |S )z=
    Returns a connection to the address of a `Listener`
    r   Nr   )	r>   r7   
PipeClientSocketClientrM   rq   r   r   r   )r=   r0   r   r  s       r   r   r     s     ,|G,,FVw!!:gu#=#=9:::G$$$!W%%%Hr   c                 h    t          | d          r|                                 S t          |           S )Ndetach)r5   r  r@   rB   s    r   r  r  $  s2    tX {{}} D!!!r   TFc                    | r{t          j                    \  }}|                    |            |                    |            t          t	          |                    }t          t	          |                    }n\t          j                    \  }}|rt          |d           |rt          |d           t          |d          }t          |d          }||fS )L
        Returns pair of connection objects at either end of a pipe
        r   FrV   rU   )r6   
socketpairr
   r   r  r*   pipe)	duplex	rnonblock	wnonblocks1s2c1c2fd1fd2s	            r   r   r   .  s      	1&((FBNNy=)))NNy=)))F2JJ''BF2JJ''BBwyyHC $C### $C###C%000BC%000B2vr   c           
      V   |r
J d            |r
J d            t          d          }| r4t          j        }t          j        t          j        z  }t
          t
          }}n!t          j        }t          j        }dt
          }}t          j        ||t          j        z  t          j	        z  t          j
        t          j        z  t          j        z  d||t          j        t          j                  }t          j        ||dt          j        t          j        t          j        t          j                  }	t          j        |	t          j        dd           t          j        |d          }
|
                    d          \  }}|dk    sJ t)          || 	          }t)          |	| 
          }||fS )r  z"rnonblock not supported on windowsz"wnonblock not supported on windowsr   r   r   NTr   r  r  )r1   r   PIPE_ACCESS_DUPLEXGENERIC_READGENERIC_WRITEBUFSIZEPIPE_ACCESS_INBOUNDCreateNamedPipeFILE_FLAG_OVERLAPPEDFILE_FLAG_FIRST_PIPE_INSTANCEPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE	PIPE_WAITNMPWAIT_WAIT_FOREVERNULL
CreateFileOPEN_EXISTINGSetNamedPipeHandleStateConnectNamedPiper   r   )r  r  r  r=   openmodeaccessobsizeibsizeh1h2r   _r   r  r  s                  r   r   r   E  s    BBBBB}BBBBB}#I.. 	(1H)G,AAF$gFFF2H*FFF$X <<12%(EEvvw;L
 
 VQg.C(',
 
 	'-tT	
 	
 	
 -bTBBB
//553axxxxB000B0002vr   c                   &    e Zd ZdZddZd Zd ZdS )r   zO
    Representation of a socket which is bound to an address and listening
    r   c                    t          j         t          t           |                    | _        	 t          j        dk    r0| j                            t           j        t           j        d           | j                            d           | j        	                    |           | j        
                    |           | j                                        | _        n(# t          $ r | j                                          w xY w|| _        d | _        |dk    r*t#          j        | t          j        |fd          | _        d S d | _        d S )Nposixr   Tr   r   argsexitpriority)r6   r   rN   r*   name
setsockopt
SOL_SOCKETSO_REUSEADDRr
   bindlistengetsocknamer  r]   rd   _familyr  r   Finalizeunlink_unlink)rD   r=   r0   r   s       r   rE   zSocketListener.__init__x  s6   }WVV%<%<==	w'!!''(9(.(;Q@ @ @L$$T***Lg&&&L((( L4466DMM 	 	 	L   	 "Y=biwjq  DLLL  DLLLs   B,C %D c                 @   	 	 | j                                         \  }| _        nJ# t          t          t
          j        f$ r*}t          |dd           t          j	        k    r Y d }~nd }~ww xY wm|
                    d           t          t          |                    S )NTr   )rN   r   r  r]   r   r6   r   r   r   r   r
   r   r  )rD   sr   s      r   r   zSocketListener.accept  s    	)-)<)<)>)>&4&
 	 Wfl3   3..%+== >====	 	
d&))$$$s   !% A+ A&&A+c                     	 | j                                          | j        }|d | _         |             d S d S # | j        }|d | _         |             w w xY wr   )rN   rd   rI  )rD   rH  s     r   rd   zSocketListener.close  sr    	L   \F!# "! \F!# "s	   9 AN)r   )rF   rG   rH   r   rE   r   rd   rI   r   r   r   r   t  sP                0
% 
% 
%    r   r   c                     t          |           }t          j        t          t          |                    }|                    d           |                    |            t          t          |                    S )zO
    Return a connection object connected to the socket given by `address`
    T)r>   r6   r   r
   connectr   r  )r=   r0   rK  s      r   r  r    sb     '""Fgff--..AMM$IIgfQii   r   c                   >    e Zd ZdZddZd	dZd Zed             ZdS )
r   z0
        Representation of a named pipe
        Nc                     || _         |                     d          g| _        d | _        t	          j        d| j                    t	          j        | t          j        | j        | j         fd          | _	        d S )NT)firstz listener created with address=%rr   r<  )
r  _new_handle_handle_queuer  r   	sub_debugrG  r   _finalize_pipe_listenerrd   )rD   r=   r   s      r   rE   zPipeListener.__init__  su    #DM"&"2"2"2">">!?D"&DN=t}MMMl:($-8q  DJJJr   Fc           
      .   t           j        t           j        z  }|r|t           j        z  }t          j        | j        |t           j        t           j        z  t           j        z  t           j	        t          t          t           j        t           j                  S r   )r   r!  r'  r(  r&  r  r)  r*  r+  PIPE_UNLIMITED_INSTANCESr$  r,  r-  )rD   rQ  flagss      r   rR  zPipeListener._new_handle  sp    .1MME ?>>*u)G,II!"0'7,gl  r   c                 d   | j                             |                                            | j                             d          }	 t	          j        |d          }	 t	          j        |j        gdt                     n.#  |	                                 t	          j
        |            xY w	 |                    d          \  }}|dk    sJ nR# |                    d          \  }}|dk    sJ w xY w# t          $ r }|j        t          j        k    r Y d }~nd }~ww xY wt          |          S )Nr   Tr   F)rS  appendrR  popr   r1  r   r   r   r   r   r   r]   r   ERROR_NO_DATAr   )rD   rT   r   r8  r   r   s         r   r   zPipeListener.accept  sZ   %%d&6&6&8&8999'++A..F$-fFFF	$2
E85 5 5 5IIKKK'///5  33D99FAs!88888  33D99FAs!88888888    :!666 76666  "&)))s6   C6 !B  C +B,,C "C36
D  DD c                 b    t          j        d|           | D ]}t          j        |           d S )Nz closing listener with address=%r)r   rT  r   r   )queuer=   rT   s      r   rU  z$PipeListener._finalize_pipe_listener  sB    N=wGGG , ,#F++++, ,r   r   )F)	rF   rG   rH   r   rE   rR  r   staticmethodrU  rI   r   r   r   r     sp        	 			 		 		 		
	 
	 
	 
		* 	* 	*. 
	, 	, 
	, 	, 	,r   r   c           	         t                      }	 	 t          j        | d           t          j        | t          j        t          j        z  dt          j        t          j        t          j        t          j                  }n1# t          $ r#}|j
        |vst          |          r Y d}~nd}~ww xY wt          j        |t          j        dd           t          |          S )zU
        Return a connection object connected to the pipe given by `address`
        r     r   N)r   r   WaitNamedPiper.  r"  r#  r-  r/  r'  r]   r   r!   r0  r*  r   )r=   _ignorer    hr   s        r   r  r    s    
 OO	%gt444&W1G4IIw|W%:0',  	    :W,,q0A0A, -,,,,	  	'w,dD	
 	
 	
 a   s   A.B   
B-
B((B-   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                    dd l }t          |t                    sJ t          j        t
                    }|                     t          |z              |                    ||d          	                                }| 
                    d          }||k    r|                     t                     d S |                     t                     t          d          )Nr   md5   zdigest received was wrong)hmacrM   rq   r*   urandomMESSAGE_LENGTHry   	CHALLENGEnewdigestr   WELCOMEFAILUREr   
connectionr   ri  messagern  responses         r   r   r     s    KKKgu%%%%%j((G)g-...XXgw..5577F$$S))H6g&&&&&g&&&!"=>>>r   c                    dd l }t          |t                    sJ |                     d          }|d t	          t
                             t
          k    sJ d|z              |t	          t
                    d          }|                    ||d                                          }|                     |           |                     d          }|t          k    rt          d          d S )Nr   rh  zmessage = %rrg  zdigest sent was rejected)ri  rM   rq   r   rr   rl  rm  rn  ry   ro  r   rq  s         r   r   r   "  s    KKKgu%%%%%##C((G?C	NN?#y000.72J000c)nnoo&GXXgw..5577F&!!!$$S))H7!"<=== r   c                        e Zd Zd Zd Zd ZdS )ConnectionWrapperc                 |    || _         || _        || _        dD ]#}t          ||          }t	          | ||           $d S )N)rO   rd   r   r   ry   )_conn_dumps_loadsr   setattr)rD   connr{   loadsattrr}   s         r   rE   zConnectionWrapper.__init__5  sT    
K 	% 	%D$%%CD$$$$$	% 	%r   c                 d    |                      |          }| j                            |           d S r   )rz  ry  ry   )rD   r}   rK  s      r   r~   zConnectionWrapper.send=  s/    KK
a     r   c                 ^    | j                                         }|                     |          S r   )ry  r   r{  )rD   rK  s     r   r   zConnectionWrapper.recvA  s%    J!!##{{1~~r   N)rF   rG   rH   rE   r~   r   rI   r   r   rw  rw  3  sA        % % %! ! !    r   rw  c                 j    t                               | fd d d d          }|                    d          S )Nr   utf-8)	xmlrpclibr{   encode)r}   os     r   
_xml_dumpsr  F  s/    tT155A88Gr   c                 j    t                               |                     d                    \  \  }}|S )Nr  )r  r~  decode)rK  r}   methods      r   
_xml_loadsr  K  s*    __QXXg%6%677NFSFJr   c                       e Zd Zd ZdS )XmlListenerc                 x    dd l ma t                              |           }t          |t          t                    S Nr   )xmlrpc.clientclientr  r   r   rw  r  r  r|   s     r   r   zXmlListener.acceptR  s7    ))))))ood## j*===r   N)rF   rG   rH   r   rI   r   r   r  r  P  s#        > > > > >r   r  c                  X    dd l ma t          t	          | i |t
          t                    S r  )r  r  r  rw  r   r  r  )r=  kwdss     r   	XmlClientr  Y  s3    %%%%%%VT2T22J
KKKr   c                    t          |           }g }|rt          j        |d|          }|t          k    rnt          |cxk    rt          t          |          z   k     rn n|t          z  }nDt          |cxk    rt          t          |          z   k     rn n|t          z  }nt          d          |                    ||                    ||dz   d          }d}||S )NFzShould not get herer   r   )	listr   r   WAIT_TIMEOUTr   rr   WAIT_ABANDONED_0r   rZ  )handlesr   Lreadyress        r   _exhaustive_waitr  d  s     MM 	0E7CCCl""#>>>>A(>>>>>>}$!SDDDD+;c!ff+DDDDDD''"#8999LL3   #'((AG  	 r   c                   
 |t           }n|dk     rd}nt          |dz  dz             }t          |           } i g }t                      
t                      }	 | D ]}	 t	          |d          }	 t          j         |            dd          \  }}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j
        k    r |                    |           ||j        <   
                    |           d}# t          $ r ||                                <   Y w xY wt!                                          |          }|D ]}|                                 |D ]}	 |                    d          \  }	}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j        k    r?|j                 }
                    |           |dk    rt+          |d          rd|_        n# |D ]}|                                 |D ]}	 |                    d          \  }	}n(# t          $ r}|j        }|t          vr Y d}~nd}~ww xY w|t
          j        k    r?|j                 }
                    |           |dk    rt+          |d          rd|_        w xY w
                    fd|D                        
fd	| D             S )

        Wait till an object in object_list is ready/readable.

        Returns list of those objects in object_list which are ready/readable.
        Nr   ra  g      ?rO   Tr   c              3   (   K   | ]}|         V  d S r   rI   ).0rd  waithandle_to_objs     r   	<genexpr>zwait.<locals>.<genexpr>  s)      IIa.q1IIIIIIr   c                     g | ]}|v |	S rI   rI   )r  pready_objectss     r   
<listcomp>zwait.<locals>.<listcomp>  s#    ===a!}*<*<*<*<*<r   )r   intr  setr   r   r   r]   r   _ready_errorsr   rZ  r   addAttributeErrorrP   r  keysr   r   ERROR_OPERATION_ABORTEDr5   r   update)object_listr   ov_listready_handlesr  rO   r   r   r   r8  r  r  s             @@r   r   r   z  s    ?GGq[[GG'D.3.//G;''-	8  $ $$$Q11F
"")"26688Q"E"ECC" " " "jm33! 43333" g666r***67)"(33
 &))!,,,"#% & 9 9 978%akkmm4449( -->-C-C-E-EwOOM   		  8 833D99FAss   *C-// 0//// '999)"(3A!%%a(((axx #1&:;; 837A08	   		  8 833D99FAss   *C-// 0//// '999)"(3A!%%a(((axx #1&:;; 837A08  	IIII=IIIIII====;====s   G<  D1!BG< 
B8B3.G< 3B88AG< !D'$G< &D''%G< *F
F(F##F(<J-H43J-4
I	>I	J-I	AJ-r   c                    |t          |dz            }i }t          j                    }| D ]O}|                    |t          j                   t          |d          r|||                                <   J|||<   Pg }|                    |          D ]A\  }}|t          j        z  rt          d|z            |	                    ||                    B|S )Nra  rO   zinvalid file descriptor %i)
r  selectr   registerPOLLINr5   rO   POLLNVALr.   rZ  )fdsr   fd_mappollsterfdlsr   s          r   r   r     s    "gn--F{}}H $ $!!"fm4442x(( $*,F299;;''!#F2JJB%]]733 & &	E6?* H$%AB%FGGG		&*%%%%Ir   c                 <    t          j         | g g |          d         S r  )r  )r  r   s     r   r   r     s    =b"g66q99r   c                    |'|dk    rt          | d          S t                      |z   }	 	 t          | |          S # t          t          t          j        f$ r }|j        t          j        k    r Y d}~nd}~ww xY w||t                      z
  }d)r  Nr   )r   r   r]   r   r6   r   r   r   )r  r   deadliner   s       r   r   r     s     !||[!,,,$;;0	1['222Wfl3   7ek)) *)))) ""Y[[0	1s   < A8A33A8c                    |                                  }t          j        |t          j        t          j                  5 }ddlm} |                    |          }t          || j	        | j
        ffcd d d            S # 1 swxY w Y   d S )Nr   )resource_sharer)rO   r6   fromfdr   SOCK_STREAMr&   r  	DupSocketrebuild_connectionrU   rV   )r}  rT   rK  r  dss        r   reduce_connectionr    s    ]66>63EFF 	J!)))))) **1--B%DM4='II	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js   1A==BBc                 f    |                                  }t          t          |          ||          S r   )r  r   )r  rU   rV   rC   s       r   r  r    s'    yy{{&,,(;;;r   c                     | j         rt          j        nd| j        rt          j        ndz  }t          j        |                                 |          }t          || j         | j        ffS r  )	rU   r   FILE_GENERIC_READrV   FILE_GENERIC_WRITEr   	DupHandlerO   rebuild_pipe_connection)r}  r3  dhs      r   reduce_pipe_connectionr    s^    04D7,,115E7--AG 77&T]DM(JJJr   c                 >    t          t          |           ||          S r   )r   r  )r  rU   rV   s      r   r  r    s    fRjj(H===r   c                 z    t          j        |                                           }t          || j        | j        ffS r   )r   DupFdrO   r  rU   rV   )r}  dfs     r   r  r    s/    _T[[]]++!Bt}#EEEr   c                 >    t          t          |           ||          S r   )r   r  )r  rU   rV   s      r   r  r    s    &**h999r   )NN)TFFr   )R
__future__r   r   r   r*   r3   r6   r  r   r'   	itertoolsr&   r   r   r   r   _extr	   compatr
   r   fiver   r   r   r4   r   r  r  r   ImportError__all__r5   is_pypyr$  CONNECTION_TIMEOUTcountr-   r   familiesr   r!   r1   r7   r>   objectr@   rK   r   r   r   r   r  r   r   r  r   ERROR_SEM_TIMEOUTERROR_PIPE_BUSYr  rk  rl  ro  rp  r   r   rw  r  r  r  r  r  r   ERROR_NETNAME_DELETEDr  r   r   r  r  r  r  r  rI   r   r   <module>r     sd   ' & & & & &  				 				 



                     1 1 1 1 1 1 1 1       , , , , , , , ,       % % % % % %$ |w-"3+#    
|wGGG 1
0
0
'#*
+
+  	!!;
769 NH<7NH - ! ! ! !  0 0 0
F 
F 
FF F F(    v   _- _- _- _- _-f _- _- _-D  RP P P P P P P PfO O O O O O O Ol5 5 5 5 5v 5 5 5p   *" " " <7    .( ( ( (^/ / / / /V / / /d! ! ! <76, 6, 6, 6, 6,v 6, 6, 6,p &-%>%,%<%> ! ! ! !> 	

? ? ?
> 
> 
>"       &  
  
> > > > >( > > >L L L <7  ( .0MNMC> C> C> C> C>N wvv :	 	 	 	$	: 	: 	:1 1 1 10 <7J J J< < < Iz#4555K K K> > >I~'=>>>>>F F F: : :Iz#455555s   B BB