
    wi)                     :   g d 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
Zn# e$ r ddlZY nw xY wddlmZ ddlmZmZ ddlmZ ej        Z	 ddlZddlmZmZmZmZ n# e$ r ej        dk    r dZY nw xY w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          Z'er G d de'          Z( G d de'          Z) G d de*          Z+d<dZ,ej        dk    rd=dZ-nd=dZ- G d d e*          Z.d! Z/ej        dk    r G d" d#e*          Z0d$ Z1d%Z2d&Z3d'Z4d(Z5d) Z6d* Z7 G d+ d,e*          Z8d- Z9d. Z: G d/ d0e+          Z;d1 Z<ej        dk    rd2 Z=ej>        ej?        hZ@d>d3ZAn#ddlBZB e!eBd4          reBjC        ZDneBjE        ZDd>d5ZAej        dk    r0d6 ZFd7 ZG ejH        e)eF           d8 ZId9 ZJ ejH        e(eI           dS d: ZFd; ZG ejH        e)eF           dS )?)ClientListenerPipewait    N   )util)AuthenticationErrorBufferTooShort)	reduction)WAIT_OBJECT_0WAIT_ABANDONED_0WAIT_TIMEOUTINFINITEwin32i    g      4@AF_INETAF_UNIXAF_PIPEc                 X     t          t          dt          j                              | z   S N	monotonicgetattrtime)timeouts    o/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/multiprocess/connection.py_init_timeoutr   ?   s#    .74DI..007::    c                 Z     t          t          dt          j                              | k    S r   r   )ts    r   _check_timeoutr    B   s#    .74DI..00144r   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_addressr0   I   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_familyr6   W   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 st	          j        |           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   is_abstract_socket_namespacer-   )addresss    r   address_typer>   c   s}     G}}y	g#		'"4"4V"<"<	y	g#		!B7!K!K	y:WDEEEr   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S )_ConnectionBaseNTc                     |                                 }|dk     rt          d          |s|st          d          || _        || _        || _        d S )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)	__index__r-   _handle	_readable	_writable)selfhandlereadablewritables       r   __init__z_ConnectionBase.__init__y   sm    !!##A::-... 	J 	JHJ J J!!r   c                 @    | j         |                                  d S d S NrC   _closerF   s    r   __del__z_ConnectionBase.__del__   s#    <#KKMMMMM $#r   c                 2    | j         t          d          d S )Nhandle is closed)rC   OSErrorrO   s    r   _check_closedz_ConnectionBase._check_closed   s!    <,---  r   c                 2    | j         st          d          d S )Nzconnection is write-only)rD   rS   rO   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)rE   rS   rO   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)rE   rD   closerS   rO   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rC   rO   s    r   closedz_ConnectionBase.closed   s     |t##r   c                     | j         S )z"True if the connection is readable)rD   rO   s    r   rH   z_ConnectionBase.readable        ~r   c                     | j         S )z"True if the connection is writable)rE   rO   s    r   rI   z_ConnectionBase.writable   r`   r   c                 8    |                                   | j        S )z+File descriptor or handle of the connection)rT   rC   rO   s    r   filenoz_ConnectionBase.fileno   s    |r   c                 h    | j         *	 |                                  d| _         dS # d| _         w xY wdS )zClose the connectionNrM   rO   s    r   rZ   z_ConnectionBase.close   sB    <#$#t####	 $#s   & 	/r   c                    |                                   |                                  t          |          }|j        dk    r|                    d          }|j        }|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   Br   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rT   rX   
memoryviewitemsizecastnbytesr-   _send_bytes)rF   bufoffsetsizemns         r   
send_bytesz_ConnectionBase.send_bytes   s    sOO:>>sAH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                              |                     dS )zSend a (picklable) objectN)rT   rX   rk   _ForkingPicklerdumpsrF   objs     r   sendz_ConnectionBase.send   sN    ..s3344444r   c                     |                                   |                                  ||dk     rt          d          |                     |          }||                                  |                                S )z7
        Receive bytes data as a bytes object.
        Nr   znegative maxlength)rT   rV   r-   _recv_bytesr[   getvalue)rF   	maxlengthrl   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)rT   rV   rg   rh   lenr-   ry   tellr
   rz   seekreadinto)rF   rl   rm   ro   rh   bytesizeresultrn   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OOAf0%}9: ; < < <!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CDDDc                     |                                   |                                  |                                 }t                              |                                          S )zReceive a (picklable) object)rT   rV   ry   rs   loads	getbuffer)rF   rl   s     r   recvz_ConnectionBase.recv   sS      $$S]]__555r           c                 |    |                                   |                                  |                     |          S )z/Whether there is any input available to be read)rT   rV   _pollrF   r   s     r   pollz_ConnectionBase.poll   s8    zz'"""r   c                     | S rL    rO   s    r   	__enter__z_ConnectionBase.__enter__      r   c                 .    |                                   d S rL   rZ   rF   exc_type	exc_valueexc_tbs       r   __exit__z_ConnectionBase.__exit__	      

r   )TT)r   NrL   )r   )r   )__name__
__module____qualname__rC   rJ   rP   rT   rV   rX   r[   propertyr^   rH   rI   rc   rZ   rq   rw   r|   r   r   r   r   r   r   r   r   r@   r@   v   ss       G	" 	" 	" 	"  . . .6 6 65 5 5, , , $ $ X$   X   X  
$ $ $2 2 2 2(5 5 5      26 6 6# # # #      r   r@   c                   H    e Zd 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.
        FNc                 `    | j         }||                                  || j                   d S rL   )_send_ovcancelrC   )rF   _CloseHandleovs      r   rN   zPipeConnection._close  s3    B~		L&&&&&r   c                 H   | j         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          \  }}n$# d | _         |                    d          \  }}w xY w|t          j        k    rt          t          j        d          |dk    sJ |t!          |          k    sJ d S )Nz/concurrent send_bytes() calls are not supportedT
overlappedFrR   r   )r   r-   _winapi	WriteFilerC   ERROR_IO_PENDINGWaitForMultipleObjectseventr   r   r   GetOverlappedResultERROR_OPERATION_ABORTEDrS   errnoEPIPEr~   )rF   rl   r   errwaitresnwrittens         r   rk   zPipeConnection._send_bytes  s:   }(  "5 6 6 6'cdKKKGBDM
='222%<
E85 5G"m3333		 $ " 6 6t < <## !% " 6 6t < <#<<<<g555 ek+=>>>!8888s3xx''''''s   >A= <B7 =BB7 7!Cc                    | 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   ReadFilerC   r   r   r   r   r   r   r   writer   ERROR_MORE_DATA_get_more_datarS   winerrorERROR_BROKEN_PIPEEOFErrorRuntimeError)	rF   maxsizebsizer   r   r   nreadfes	            r   ry   zPipeConnection._recv_bytes9  s   & */'z||#&C4E4E%.t|U;?A A A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%>>>&	
 OPPPsg   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   PeekNamedPiperC   boolr   r   s     r   r   zPipeConnection._pollY  sI    ' -dl;;A>!CC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   rC   r~   r[   r   r   )rF   r   r   rl   r   leftr   rbytess           r   r   zPipeConnection._get_more_data_  s    ,,..C
AGGCLLL(66q9D!8888"s3xx$'@'@((***&t|TdKKKGB0066KFC!8888T>>>>GGBLLNN###Hr   rL   )r   r   r   __doc__r   r   r   CloseHandlerN   rk   ry   r   r   r   r   r   r   r     s        	 	
 #&-&9 	' 	' 	' 	'	( 	( 	(4	Q 	Q 	Q 	Q@	/ 	/ 	/	 	 	 	 	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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 rL   r]   rF   rN   s     r   rN   zConnection._closev      F4<     r   c                 &     || j                    d S rL   r]   r   s     r   rN   zConnection._close{  r   r   c                 t    t          |          }	  || j        |          }||z  }|dk    rd S ||d          }))NTr   )r~   rC   )rF   rl   r   	remainingrp   s        r   _sendzConnection._send  sN    HH		dlC((ANIA~~abb'C	r   c                    t          j                    }| j        }|}|dk    r] |||          }t          |          }|dk    r||k    rt          t          d          |                    |           ||z  }|dk    ]|S )Nr   zgot end of file during message)r   r   rC   r~   r   rS   r   )rF   rn   readrl   rG   r   chunkrp   s           r   _recvzConnection._recv  s    jll	!mmD++EE

AAvv$$"N!"BCCCIIeNI !mm 
r   c                    t          |          }|dk    rkt          j        dd          }t          j        d|          }|                     |           |                     |           |                     |           d S t          j        d|          }|dk    r,|                     |           |                     |           d S |                     ||z              d S )Ni!i!Qi @  )r~   structpackr   )rF   rl   rp   
pre_headerheaders        r   rk   zConnection._send_bytes  s    HHz>>T2..J[q))FJJz"""JJvJJsOOOOO [q))F5yy 

6"""

3 

6C<(((((r   Nc                 D   |                      d          }t          j        d|                                          \  }|dk    r>|                      d          }t          j        d|                                          \  }|||k    rd S |                      |          S )N   r   r      r   )r   r   unpackrz   )rF   r   rl   rn   s       r   ry   zConnection._recv_bytes  s    jjmmdCLLNN332::**Q--CM$77ED4'>>4zz$r   c                 B    t          | g|          }t          |          S rL   )r   r   )rF   r   rs      r   r   zConnection._poll  s    $!!Awwr   rL   )r   r   r   r   r   _multiprocessingclosesocketrN   rw   _writer   _readr)   rZ   r   r   r   r   rk   ry   r   r   r   r   r   r   o  s         
  	 0 < 	! 	! 	! 	!!& % " 	! 	! 	! 	!%      %     ) ) ).           r   r   c                   ^    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|r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_familyr0   r6   PipeListener	_listenerSocketListener
isinstancebytes	TypeError_authkey)rF   r=   r/   backlogauthkeys        r   rJ   zListener.__init__  s     #G=W(=(= #" 	6.v66   Y)'7;;DNN+GVWEEDNz'5'A'A=>>>r   c                     | j         t          d          | j                                         }| j        *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   rS   acceptr   deliver_challengeanswer_challenge)rF   cs     r   r   zListener.accept  s_     >!.///N!!##=$a///Q...r   c                 R    | j         }|d| _         |                                 dS dS )zA
        Close the bound socket or named pipe of `self`.
        N)r   rZ   )rF   listeners     r   rZ   zListener.close  s6     >!DNNN  r   c                     | j         j        S rL   )r   _addressrO   s    r   r=   zListener.address  s    ~&&r   c                     | j         j        S rL   )r   _last_acceptedrO   s    r   last_acceptedzListener.last_accepted  s    ~,,r   c                     | S rL   r   rO   s    r   r   zListener.__enter__  r   r   c                 .    |                                   d S rL   r   r   s       r   r   zListener.__exit__  r   r   )NNr   N)r   r   r   r   rJ   r   rZ   r   r=   r  r   r   r   r   r   r   r     s                      ' ' X' - - X-      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>   r6   
PipeClientSocketClientr   r   r   r   r   )r=   r/   r   r   s       r   r   r     s     ,|G,,FVw!!:gu#=#=9:::G$$$!W%%%Hr   Tc                    | rt          j                    \  }}|                    d           |                    d           t          |                                          }t          |                                          }n8t          j                    \  }}t          |d          }t          |d          }||fS )L
        Returns pair of connection objects at either end of a pipe
        TFrI   rH   )r5   
socketpairsetblockingr   detachr)   pipe)duplexs1s2c1c2fd1fd2s          r   r   r     s      		1&((FBNN4   NN4   BIIKK((BBIIKK((BBwyyHCC%000BC%000B2vr   c           
      &   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  r   r   r   NTr   r  r  )r0   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=   openmodeaccessobsizeibsizeh1h2r   _r   r  r  s                r   r   r   +  sb    $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        |          s*t#          j        | t          j        |fd          | _        d S d | _        d S )Nposixr   Tr   r   argsexitpriority)r5   r   _socketr)   name
setsockopt
SOL_SOCKETSO_REUSEADDRr  bindlistengetsocknamer  rS   rZ   _familyr  r   r<   Finalizeunlink_unlink)rF   r=   r/   r   s       r   rJ   zSocketListener.__init__[  sF   }WVV%<%<==	w'!!''(9(.(;Q@ @ @L$$T***Lg&&&L((( L4466DMM 	 	 	L   	 "Yt'H'Q'Q=biwjq  DLLL  DLLLs   B,C %D c                     | j                                         \  }| _        |                    d           t	          |                                          S )NT)r:  r   r  r  r   r  rF   ss     r   r   zSocketListener.acceptt  sE    !%!4!4!6!64	d!((**%%%r   c                     	 | j                                          | j        }|d | _         |             d S d S # | j        }|d | _         |             w w xY wrL   )r:  rZ   rE  )rF   rD  s     r   rZ   zSocketListener.closey  sr    	L   \F!# "! \F!# "s	   9 AN)r   )r   r   r   r   rJ   r   rZ   r   r   r   r   r   W  sP                2& & &
    r   r   c                 8   t          |           }t          j        t          t          |                    5 }|                    d           |                    |            t          |                                          cddd           S # 1 swxY w Y   dS )zO
    Return a connection object connected to the socket given by `address`
    TN)r>   r5   r   r  connectr   r  )r=   r/   rH  s      r   r  r    s     '""F	//	1	1 &Q	d			'!((**%%& & & & & & & & & & & & & & & & & &s   ABBB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   r7  )
r  _new_handle_handle_queuer  r   	sub_debugrC  r   _finalize_pipe_listenerrZ   )rF   r=   r   s      r   rJ   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 rL   )r   r  r"  r#  r!  r  r$  r%  r&  PIPE_UNLIMITED_INSTANCESr  r'  r(  )rF   rN  flagss      r   rO  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)rP  appendrO  popr   r,  r   r   r   r   r   r   rS   r   ERROR_NO_DATAr   )rF   rG   r   resr3  r   r   s          r   r   zPipeListener.accept  sT   %%d&6&6&8&8999'++A..F$-fFFF	$!8
E85 5CCIIKKK'///   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   rQ  r   r   )queuer=   rG   s      r   rR  z$PipeListener._finalize_pipe_listener  sB    N=wGGG , ,#F++++, ,r   rL   )F)	r   r   r   r   rJ   rO  r   staticmethodrR  r   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                  }nG# t          $ r9}|j
        t          j        t          j        f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"  rS   r   ERROR_SEM_TIMEOUTERROR_PIPE_BUSYr    r+  r%  r   )r=   r   hr   s       r   r
  r
    s    OO	%gt444&W1G4IIw|W%:0',      :g&?&-&=&? ? ?BPQRBSBS?? ? ? ? ?	" 	'w,dD	 	 	 a   s   A.B   
C
/B>>C   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c                    dd l }t          |t                    s/t          d                    t          |                              t          j        t                    }| 	                    t          |z              |                    ||d                                          }|                     d          }||k    r| 	                    t                     d S | 	                    t                     t!          d          )Nr    Authkey must be bytes, not {0!s}md5   zdigest received was wrong)hmacr   r   r-   formatr8   r)   urandomMESSAGE_LENGTHrq   	CHALLENGEnewdigestr|   WELCOMEFAILUREr	   
connectionr   ri  messagero  responses         r   r   r     s    KKKgu%% F.55d7mmDDF F 	Fj((G)g-...XXgw..5577F$$S))H6g&&&&&g&&&!"=>>>r   c                 6   dd l }t          |t                    s/t          d                    t          |                              |                     d          }|d t          t                             t          k    sJ d|z              |t          t                    d          }|	                    ||d          
                                }|                     |           |                     d          }|t          k    rt          d          d S )Nr   rf  rh  zmessage = %rrg  zdigest sent was rejected)ri  r   r   r-   rj  r8   r|   r~   rm  rn  ro  rq   rp  r	   rr  s         r   r   r     s   KKKgu%% F.55d7mmDDF F 	F##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)rc   rZ   r   r|   rq   )_conn_dumps_loadsr   setattr)rF   connrt   r   attrrv   s         r   rJ   zConnectionWrapper.__init__  sT    
K 	% 	%D$%%CD$$$$$	% 	%r   c                 d    |                      |          }| j                            |           d S rL   )r{  rz  rq   )rF   rv   rH  s      r   rw   zConnectionWrapper.send  s/    KK
a     r   c                 ^    | j                                         }|                     |          S rL   )rz  r|   r|  rG  s     r   r   zConnectionWrapper.recv  s%    J!!##{{1~~r   N)r   r   r   rJ   rw   r   r   r   r   rx  rx    sA        % % %! ! !    r   rx  c                 f    t                               | fd d d d                              d          S )Nr   utf-8)	xmlrpclibrt   encode)rv   s    r   
_xml_dumpsr     s,    ??C64tQ77>>wGGGr   c                 j    t                               |                     d                    \  \  }}|S )Nr  )r  r   decode)rH  rv   methods      r   
_xml_loadsr  #  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   rx  r  r  ru   s     r   r   zXmlListener.accept(  s7    ))))))ood## j*===r   N)r   r   r   r   r   r   r   r  r  '  s#        > > > > >r   r  c                  X    dd l ma t          t	          | i |t
          t                    S r  )r  r  r  rx  r   r  r  )r8  kwdss     r   	XmlClientr  .  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   r   r   r~   r   r   rW  )handlesr   LreadyrZ  s        r   _exhaustive_waitr  9  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%&&	AG  	 r   c                   
 |t           }n|dk     rd}nt          |dz  dz             }t          |           } i g }t                      
t                      }	 | D ]B}	 t	          |d          }	 t          j         |            dd          \  }}n*# t          $ r}d|j        }}|t          vr Y d}~nd}~ww xY w|t
          j
        k    r |                    |           ||j        <   |rpt          j                    dd         dk    rQ	 |                    d	          \  }	}n# t          $ r}|j        }Y d}~nd}~ww xY w|st!          |d
          rd|_        
                    |           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   r_  g      ?rc   T   )   r  Fr   c              3   (   K   | ]}|         V  d S rL   r   ).0rc  waithandle_to_objs     r   	<genexpr>zwait.<locals>.<genexpr>  s)      IIa.q1IIIIIIr   c                     g | ]}|v |	S r   r   )r  oready_objectss     r   
<listcomp>zwait.<locals>.<listcomp>  s#    ===a!}*<*<*<*<*<r   )r   intr  setr   r   r   rS   r   _ready_errorsr   rW  r   r2   getwindowsversionr   r4   r   addAttributeErrorrB   r  keysr   r   update)object_listr   ov_listready_handlesr  rc   r   r   r   r3  r  r  s             @@r   r   r   O  sX    ?GGq[[GG'D.3.//G;''6	8  $ $$$Q11F
"")"26688Q"E"ECC" " " ""&
Cm33! 43333" g666r***67)"(33
  <#"7"9"9"1""="G"G1)+)?)?)F)F33#* 1 1 1&'j1#& <716J+K+K <7; 4%))!,,,"#7 & 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   I3 !E92!BI3 
B;B61I3 6B;;AI3 D)(I3 )
E3D?:I3 ?E5I3 9!FI3 F%I3 !G::
HHH3L$J+*L$+
K	5K	L$K	AL$PollSelectorc                    t                      5 }| D ]"}|                    |t          j                   #|+ t	          t
          dt
          j                              |z   }	 |                    |          }|rd |D             cddd           S |?| t	          t
          dt
          j                              z
  }|dk     r|cddd           S q# 1 swxY w Y   dS )r  Nr   Tc                 "    g | ]\  }}|j         S r   )fileobj)r  keyeventss      r   r  zwait.<locals>.<listcomp>  s    CCCMS&CKCCCr   r   )_WaitSelectorregister	selectors
EVENT_READr   r   select)r  r   selectorrv   deadliner  s         r   r   r     sQ    __ 	)" = =!!#y';<<<<">74DI>>@@7J) 00 )CCUCCC	) 	) 	) 	) 	) 	) 	) 	) *"*-PWT+di-P-P-R-R"R"Q;;#(	) 	) 	) 	) 	) 	) 	) 	))	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   A6C4CCCC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)rc   r5   fromfdr   SOCK_STREAMr%   r  	DupSocketrebuild_connectionrH   rI   )r~  rG   rH  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                 p    |                                  }t          |                                 ||          S rL   r  r   )r  rH   rI   socks       r   r  r    s)    yy{{$++--8<<<r   c                     | j         rt          j        nd| j        rt          j        ndz  }t          j        |                                 |          }t          || j         | j        ffS r  )	rH   r   FILE_GENERIC_READrI   FILE_GENERIC_WRITEr   	DupHandlerc   rebuild_pipe_connection)r~  r.  dhs      r   reduce_pipe_connectionr    s^    04D7,,115E7--AG 77&T]DM(JJJr   c                 L    |                                  }t          |||          S rL   )r  r   )r  rH   rI   rG   s       r   r  r    s!    fh999r   c                 z    t          j        |                                           }t          || j        | j        ffS rL   )r   DupFdrc   r  rH   rI   )r~  dfs     r   r  r    s/    _T[[]]++!Bt}#EEEr   c                 L    |                                  }t          |||          S rL   r  )r  rH   rI   fds       r   r  r    s!    YY[["h111r   )NN)TrL   )K__all__r   r   r)   r2   r5   r   r   r&   	itertools_multiprocessr   ImportErrorr%   r   r	   r
   contextr   ForkingPicklerrs   r   r   r   r   r   r3   r  CONNECTION_TIMEOUTcountr,   r   familiesr4   r   r    r0   r6   r>   r@   r   r   objectr   r   r   r   r  r   r
  rl  rm  rp  rq  r   r   rx  r  r  r  r  r  r   ERROR_NETNAME_DELETEDr  r   r  r  r  SelectSelectorr  r  r  r  r  r   r   r   <module>r     s   3
2
2  				 				 



        ,,,,,          1 1 1 1 1 1 1 1      *NNNOOOOOOOOOOOOO   
|wGGG  	!!;
769 NH<7NH - ; ; ; ;5 5 50 0 0
F 
F 
FF F F&T T T T T T T Tn  _] ] ] ] ] ] ] ]@M M M M M M M Mh; ; ; ; ;v ; ; ;|   * <7    && & & &X) ) ) ) )V ) ) )X& & & <76, 6, 6, 6, 6,v 6, 6, 6,p! ! !> 	

? ? ?> > >$       H H H  > > > > >( > > >L L L <7  ( .0MNML> L> L> L> L>` 
 wy.)) 1!.!0) ) ) )6 <7J J J= = = Iz#4555K K K
: : : I~'=>>>>>F F F2 2 2 Iz#455555s   / 	;;A+ +B B