
    Rh               
          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m	Z	 ddl
mZ ddlmZ ddlmZmZ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Ze j1                  d       d Z ej6                  ej                  e       dD  cg c]  }  e  ei |                     c} Zd ZeD ]  Z  ej6                  e e        [ [ G d de!      Z"di fdZ#d Z$ G d de%      Z&d Z'd Z( G d de!      Z) G d de!      Z*ejV                  ejX                  fejZ                  ej\                  fd Z/ G d! d"e!      Z0 G d# d$e1      Z2 G d% d&e!      Z3d' Z4i fd(Z5	 	 dbd)Z6 G d* d+e!      Z7 G d, d-e!      Z8dcd.Z9 G d/ d0e3      Z: G d1 d2e3      Z; G d3 d4e;      Z< G d5 d6e3      Z= G d7 d8e3      Z> G d9 d:e3      Z? G d; d<e3      Z@ e5d=d>      ZA G d? d@eA      ZB e5dAdB      ZCdCdDieC_D         e5dEdF      ZE e5dGdH      ZFdIdIdIdDdDdJeF_D         G dK dGeF      ZG G dL dMe0      ZHeHj7                  dNej                         eHj7                  dOej                         eHj7                  dPej                  e=       eHj7                  dQej                  e;       eHj7                  dRej                  e;       eHj7                  dSej                  e;       eHj7                  dTej                  e;       eHj7                  dUej                  e<       eHj7                  dVej                  e>       eHj7                  dWej                  eG       eHj7                  dXeReB       eHj7                  dYeSeC       eHj7                  d-e8e@       eHj7                  dZe9eE       eHj7                  d+e7e?       eHj7                  dDe:d[       eHj7                  dId\       er! G d] d^      ZT G d_ d`e)      ZU G da de0      ZVyy# e$ r dZY w xY wc c} w )d)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTSharedMemoryManagerFc                 Z    t         j                   | j                  | j                         ffS N)arraytypecodetobytes)as    //usr/lib/python3.12/multiprocessing/managers.pyreduce_arrayr   /   s     ;;QYY[111    )itemskeysvaluesc                 &    t         t        |       ffS r   )listobjs    r   rebuild_as_listr$   4   s    $s)r   c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)r   z3
    Type to uniquely identify a shared object
    typeidaddressidc                 0    |||c| _         | _        | _        y r   r&   )selfr'   r(   r)   s       r   __init__zToken.__init__D   s    06,dlDGr   c                 H    | j                   | j                  | j                  fS r   r&   r+   s    r   __getstate__zToken.__getstate__G   s    T\\47733r   c                 .    |\  | _         | _        | _        y r   r&   r+   states     r   __setstate__zToken.__setstate__J   s    /4,dlDGr   c                     | j                   j                  d| j                  d| j                  d| j                  dS )Nz(typeid=z
, address=z, id=))	__class____name__r'   r(   r)   r.   s    r   __repr__zToken.__repr__M   s-    ''dllDGGM 	Mr   N)	r7   
__module____qualname____doc__	__slots__r,   r/   r3   r8    r   r   r   r   >   s$     ,IE45Mr   r   r=   c                 x    | j                  ||||f       | j                         \  }}|dk(  r|S t        ||      )zL
    Send a message to manager using connection `c` and return response
    #RETURN)sendrecvconvert_to_error)cr)   
methodnameargskwdskindresults          r   dispatchrI   U   sB     FFB
D$'(668LD&y
4
((r   c           	          | dk(  r|S | dv rSt        |t              s%t        dj                  || t	        |                  | dk(  rt        d|z        S t        |      S t        dj                  |             S )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrM   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformattypeRemoteError
ValueError)rG   rH   s     r   rB   rB   _   s    x	2	2&#&@GGD$v,01 1 $$=FGGv&&:AA$GHHr   c                       e Zd Zd Zy)rS   c                 >    dt        | j                  d         z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rO   rE   r.   s    r   __str__zRemoteError.__str__o   s    $s499Q<'886ABr   N)r7   r9   r:   rW   r=   r   r   rS   rS   n   s    Cr   rS   c                 |    g }t        |       D ]+  }t        | |      }t        |      s|j                  |       - |S )z4
    Return a list of names of methods of `obj`
    )dirgetattrcallableappend)r#   tempnamefuncs       r   all_methodsr`   v   sB     DC sD!D>KK Kr   c                 P    t        |       D cg c]  }|d   dk7  s| c}S c c}w )zP
    Return a list of names of methods of `obj` which do not start with '_'
    r   _)r`   )r#   r^   s     r   public_methodsrc      s'     )-@TaCD@@@s   ##c                       e Zd ZdZg dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZeeedZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ServerzM
    Server class which runs in a process controlled by a manager object
    )	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                 z   t        |t              s$t        dj                  |t	        |                  || _        t        j                  |      | _        t        |   \  }} ||d      | _
        | j                  j                  | _        ddi| _        i | _        i | _        t        j                          | _        y )Nz&Authkey {0!r} is type {1!s}, not bytes   )r(   backlog0Nr=   )rN   bytesrP   rQ   rR   registryr   AuthenticationStringauthkeylistener_clientlistenerr(   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r+   ru   r(   rw   
serializerListenerClients          r   r,   zServer.__init__   s    '5)8??T'],- - !33G<*:6& !#>}},,z* %'"^^%
r   c                    t        j                         | _        | t        j                         _        	 t        j                  | j                        }d|_        |j                          	 | j                  j                         s6| j                  j                  d       | j                  j                         s6t        j                  t        j                   k7  rGt#        j$                  d       t        j                   t        _        t        j&                  t        _        t        j*                  d       y# t        t        f$ r Y w xY w# t        j                  t        j                   k7  rGt#        j$                  d       t        j                   t        _        t        j&                  t        _        t        j*                  d       w xY w)z(
        Run the server forever
        )targetTr	   zresetting stdout, stderrr   N)r}   Event
stop_eventr   current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExitsysstdout
__stdout__r   debug
__stderr__stderrexit)r+   r   s     r   serve_foreverzServer.serve_forever   s     $//+48!1	 ''t}}=H"HONN//002OO((+ //002
 zzS^^+

56 ^^
 ^^
HHQK &z2  zzS^^+

56 ^^
 ^^
HHQKs+   7E ,AD: :E	E EE A?Gc                     	 	 | j                   j                         }t        j                  | j
                  |f      }d|_        |j                          U# t        $ r Y aw xY w)NTr   rE   )ry   acceptOSErrorr}   r   handle_requestr   r   )r+   rC   ts      r   r   zServer.accepter   sa    MM((*   (;(;1$GAAHGGI   s   A 	A#"A#c                    d }	 t        j                  || j                         t        j                  || j                         |j	                         }|\  }}}}|| j
                  v s
J d|z         t        | |      }	  ||g|i |}d|f}		 |j                  |	       y # t        $ r dt               f}	Y *w xY w# t        $ r dt               f}	Y Ew xY w# t        $ rx}
	 |j                  dt               f       n# t        $ r Y nw xY wt        j                  d|	       t        j                  d|       t        j                  d|
       Y d }
~
y d }
~
ww xY w)Nz%r unrecognizedr?   rL   zFailure to send message: %rz ... request was %r ... exception was %r)r
   deliver_challengerw   answer_challengerA   publicrZ   	Exceptionr   r@   r   info)r+   rC   requestignorefuncnamerE   rF   r_   rH   msges              r   _handle_requestzServer._handle_request   sO   	*((DLL9''4<<8ffhG+2(FHdDt{{*H,=,HH*4*D*a/$/$/ !&)		2FF3K  3#Z\23  	/.C	/  	2jl34 II3S9II+W5II-q11	2s[   A;B>  B# C #B;:B;>CC	E#C?>E?	DE
DAEEc                     	 | j                  |       |j                          y# t        $ r Y w xY w# |j                          w xY w)z)
        Handle a new connection
        N)r   r   closer+   conns     r   r   zServer.handle_request   s@    	  &
 JJL	  		 JJLs   $ 	03 03 Ac                 $   t        j                  dt        j                         j                         |j
                  }|j                  }| j                  }| j                  j                         s	 dx}} |       }|\  }}}	}
	 ||   \  }}}||vrt        d|dt        |      d|      t        ||      }	  ||	i |
}|xr |j                  |d      }|r4| j!                  |||      \  }}t#        || j$                  |      }d||ff}nd|f}	 	 	  |       | j                  j                         syy# t        $ r.}	 | j                  |   \  }}}n# t        $ r |w xY wY d}~d}~ww xY w# t&        $ r}d|f}Y d}~sd}~ww xY w# t        $ rQ d	t)               f}n?	 | j*                  |   } || |g	i 
}d|f}n# t&        $ r d	t)               f}Y nw xY wY t,        $ rK t        j                  d
t        j                         j                         t/        j0                  d       Y &t&        $ r d	t)               f}Y =w xY w# t&        $ r  |dt)               f       Y Uw xY w# t&        $ r}t        j2                  dt        j                         j                         t        j2                  d       t        j2                  d|       |j5                          t/        j0                  d       Y d}~d}~ww xY w)zQ
        Handle requests from the proxies in a particular process/thread
        z$starting server thread to service %rNzmethod z of z object is not in exposed=#PROXYr?   rK   rL   z$got EOF -- exiting thread serving %rr   rM   zexception in thread serving %rz ... message was %rr   r	   )r   r   r}   current_threadr^   rA   r@   rz   r   r   KeyErrorr|   AttributeErrorrR   rZ   getrg   r   r(   r   r   fallback_mappingEOFErrorr   r   r   r   )r+   r   rA   r@   rz   rD   r#   r   identrE   rF   exposed	gettypeidkefunctionresr'   ridentrexposedtokenr   r   fallback_funcrH   s                           r   serve_clientzServer.serve_client   s    	

9++-22	4 yyyyNN	//((*53#''
S&07-z4!.7.>+C) W,(#T#Y9 
 #3
3/"D1D1C 'J9==T+JF+/;;tVS+I( %fdllF C'(E):;(#..<Iw //((*   !! 66u= 0Wi# ! ! '0!" ! (#Q-C( " ;%'6C;(,(=(=j(I!. $s"59"=A"  )&1$ ;+Z\:;  

A$335::< 3#Z\23 ! <+Z\:;< 		:!002779		/5		115

s   2F 	D< -F <E6 AF I <	E3EE.E&&E.)F .E33F 6	F?FF FF I)"GIG$!I#G$$I)AI;III51I8 4I55I8 8	LBL

Lc                     |S r   r=   r+   r   r   r#   s       r   fallback_getvaluezServer.fallback_getvalue?  s    
r   c                     t        |      S r   rO   r   s       r   fallback_strzServer.fallback_strB  s    3xr   c                     t        |      S r   )reprr   s       r   fallback_reprzServer.fallback_reprE  s    Cyr   )rW   r8   	#GETVALUEc                      y r   r=   r+   rC   s     r   rl   zServer.dummyN  s    r   c                 r   | j                   5  g }t        | j                  j                               }|j	                          |D ]K  }|dk7  s	|j                  d|d| j                  |   dt        | j                  |   d         dd        M dj                  |      cddd       S # 1 sw Y   yxY w)	zO
        Return some info --- useful to spot problems with refcounting
        rr   z  z:       refcount=z
    r   NK   
)	r   r!   r{   r   sortr\   rO   rz   join)r+   rC   rH   r   r   s        r   rj   zServer.debug_infoQ  s    
 ZZ 		%F++0023DIIK HC<MM#($*=*=e*D#&t~~e'<Q'?#@"#E#G HH
 99V$		% 		% 		%s   A B-AB--B6c                 ,    t        | j                        S )z*
        Number of shared objects
        )lenr{   r   s     r   rk   zServer.number_of_objectsa  s    
 4&&''r   c                     	 t        j                  d       |j                  d       | j
                  j                          y#  ddl}|j	                          Y 3xY w# | j
                  j                          w xY w)z'
        Shutdown this process
        z!manager received shutdown messager?   Nr   N)r   r   r@   	traceback	print_excr   set)r+   rC   r   s      r   rf   zServer.shutdownh  sZ    	"JJ:;FF$%
 OO!		"!OO!s   &A AA A:c          	      n   | j                   5  | j                  |   \  }}}}|!|st        |      dk7  rt        d      |d   }	n ||i |}	|t	        |	      }|Kt        |t              s$t        dj                  |t        |                  t        |      t        |      z   }dt        |	      z  }
t        j                  d||
       |	t        |      |f| j                  |
<   |
| j                   vrd| j                   |
<   ddd       | j#                  |
       |
t%              fS # 1 sw Y   (xY w)z>
        Create a new shared object and return its id
        Nr	   z4Without callable, must have one non-keyword argumentr   z,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r   ru   r   rT   rc   rN   dictrP   rQ   rR   r!   r)   r   r   r   rz   r{   rm   tuple)r+   rC   r'   rE   rF   r[   r   method_to_typeid	proxytyper#   r   s              r   rg   zServer.createu  sM    ZZ 	/mmF+ ;Hg/ CIN$NP P1g--(-+!"2D9#FMM,d3C.DFG G w-$/?*@@2c7NEJJ?O%(#g,8H$IDNN5!D///-.##E*7	/: 	AueGn$$=	/ 	/s   C7D++D4c                 L    t        | j                  |j                     d         S )zL
        Return the methods of the shared object indicated by token
        r	   )r   rz   r)   )r+   rC   r   s      r   ri   zServer.get_methods  s!     T^^EHH-a011r   c                 z    |t        j                         _        |j                  d       | j	                  |       y)z=
        Spawn a new thread to serve this connection
        r   N)r}   r   r^   r@   r   )r+   rC   r^   s      r   rh   zServer.accept_connection  s0     +/	  "'	 !!r   c                 F   | j                   5  	 | j                  |xx   dz  cc<   d d d        y # t        $ r\}|| j                  v rBd| j                  |<   | j                  |   | j                  |<   t        j                  d|       n|Y d }~id }~ww xY w# 1 sw Y   y xY w)Nr	   z&Server re-enabled tracking & INCREF %r)r   r{   r   r|   rz   r   r   )r+   rC   r   r   s       r   rm   zServer.incref  s    ZZ 	##E*a/*	 	  
 D66612D''.2259 NN5)JJGOH P	 	s,   B/	BAB
BBBB c           	      l   || j                   vr%|| j                  v rt        j                  d|       y | j                  5  | j                   |   dk  r6t        dj                  || j                  |   | j                   |               | j                   |xx   dz  cc<   | j                   |   dk(  r| j                   |= d d d        || j                   vrHd| j                  |<   t        j                  d|       | j                  5  | j                  |= d d d        y y # 1 sw Y   `xY w# 1 sw Y   y xY w)NzServer DECREF skipping %rr   z+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	   )Nr=   Nzdisposing of obj with id %r)r{   r|   r   r   r   AssertionErrorrQ   rz   )r+   rC   r   s      r   rn   zServer.decref  s0   +++T///JJ2E:ZZ 	/""5)Q.$AHHt~~e4++E245 5 &!+&""5)Q.''.	/ +++ %5DNN5!JJ4e< *NN5)* * ,	/ 	/$* *s    A?DD*D'*D3N)r7   r9   r:   r;   r   r,   r   r   r   r   r   r   r   r   r   rl   rj   rk   rf   rg   ri   rh   rm   rn   r=   r   r   re   re      s    NF&$,2<
Ob  %
% (""%H2"*r   re   c                       e Zd ZdgZdZdZdZy)Statevaluer   r	      N)r7   r9   r:   r<   INITIALSTARTEDSHUTDOWNr=   r   r   r   r     s    	IGGHr   r   )pickle	xmlrpclibc                       e Zd ZdZi ZeZ	 	 ddddZd Zd Z	ddZ
e	 dd	       Zd
 ZddZd Zd Zd Zd Zed        Zed        Ze	 	 dd       Zy)r   z!
    Base class for managers
    Ng      ?)shutdown_timeoutc                P   |t        j                         j                  }|| _        t        j                  |      | _        t               | _        t        j                  | j                  _	        || _
        t        |   \  | _        | _        |xs
 t               | _        || _        y r   )r   r   rw   _addressrv   _authkeyr   _stater   r   _serializerrx   	_Listener_Clientr   _ctx_shutdown_timeout)r+   r(   rw   r   ctxr   s         r   r,   zBaseManager.__init__  s~    ?--/77G44W=g!MM%'6z'B$(;=	!1r   c                    | j                   j                  t        j                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              t        | j                  | j                  | j                  | j                        S )zX
        Return server object with serve_forever() method and address attribute
        Already started serverManager has shut downUnknown state {!r})r   r   r   r   r   r   r   rQ   re   	_registryr   r   r   r.   s    r   
get_serverzBaseManager.get_server  s     ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD DdnndmmmmT%5%57 	7r   c                     t         | j                     \  }} || j                  | j                        }t	        |dd       t
        j                  | j                  _        y)z>
        Connect manager object to the server process
        rw   Nrl   )	rx   r   r   r   rI   r   r   r   r   )r+   r   r   r   s       r   connectzBaseManager.connect  sI     +4+;+;<&dmmT]];tW%!MMr   c           
         | j                   j                  t        j                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              |t        |      st        d      t        j                  d      \  }}| j                  j                  t        |       j                  | j                   | j"                  | j$                  | j&                  |||f      | _        d	j+                  d
 | j(                  j,                  D              }t        |       j.                  dz   |z   | j(                  _        | j(                  j3                          |j5                          |j7                         | _        |j5                          t        j                  | j                   _        t9        j:                  | t        |       j<                  | j(                  | j"                  | j$                  | j                   | j>                  | j@                  fd      | _!        y)z@
        Spawn a server process for this manager object
        r   r   r   Nzinitializer must be a callableF)duplexr   :c              3   2   K   | ]  }t        |        y wr   r   ).0is     r   	<genexpr>z$BaseManager.start.<locals>.<genexpr>0  s     AAQAs   -r   rE   exitpriority)"r   r   r   r   r   r   r   rQ   r[   rP   r
   Piper   ProcessrR   _run_serverr   r   r   r   _processr   	_identityr7   r^   r   r   rA   r   Finalize_finalize_managerr   r   rf   )r+   initializerinitargsreaderwriterr   s         r   r   zBaseManager.start  s    ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD D "8K+@<== $6 		)):))..$--""FKC * 
 A)@)@AA!$Z00C7%? 	 "MM$t*..--t{{,, 6 68	r   c                 T   t        j                   t         j                  t         j                         | ||  | j                  ||||      }|j	                  |j
                         |j                          t        j                  d|j
                         |j                          y)z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
signalSIGINTSIG_IGN_Serverr@   r(   r   r   r   r   )	clsru   r(   rw   r   r  r  r  servers	            r   r  zBaseManager._run_serverB  sz     	fmmV^^4"" XwD 	FNN# 			)6>>:r   c                V   | j                   j                  t        j                  k(  sJ d       | j	                  | j
                  | j                        }	 t        |dd|f|z   |      \  }}|j                          t        || j
                  |      |fS # |j                          w xY w)zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr  Nrg   )
r   r   r   r   r   r   r   rI   r   r   )r+   r'   rE   rF   r   r)   r   s          r   _createzBaseManager._createY  s     {{  EMM1K3KK1||DMM4==|A	"4x&4NKBJJLVT]]B/88 JJLs   B B(c                     | j                   >| j                   j                  |       | j                   j                         sd| _         yyy)zC
        Join the manager process (if it has been spawned)
        N)r  r   is_aliver+   timeouts     r   r   zBaseManager.joine  sA     ==$MMw'==))+ $ , %r   c                     | j                  | j                  | j                        }	 t        |dd      |j	                          S # |j	                          w xY w)zS
        Return some info about the servers shared objects and connections
        r  Nrj   r   r   r   rI   r   r   s     r   _debug_infozBaseManager._debug_infon  sB     ||DMM4==|A	D$5JJLDJJL   A Ac                     | j                  | j                  | j                        }	 t        |dd      |j	                          S # |j	                          w xY w)z5
        Return the number of shared objects
        r  Nrk   r&  r   s     r   _number_of_objectszBaseManager._number_of_objectsx  sC     ||DMM4==|A	D$(;<JJLDJJLr(  c                    | j                   j                  t        j                  k(  r| j	                          | j                   j                  t        j
                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              | S )NzUnable to start serverr   r   )	r   r   r   r   r   r   r   r   rQ   r.   s    r   	__enter__zBaseManager.__enter__  s    ;;-JJL;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD Dr   c                 $    | j                          y r   )rf   r+   exc_typeexc_valexc_tbs       r   __exit__zBaseManager.__exit__  s    r   c                     | j                          rt        j                  d       	  |||      }	 t        |dd       |j	                          	  | j                  |        | j                          rt        j                  d       t        | d      rt        j                  d        | j                           | j                  |        | j                          r7t        j                  d	        | j                           | j                          t        j                  |_        	 t        j                  |= y# |j	                          w xY w# t
        $ r Y w xY w# t        $ r Y yw xY w)
zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr  Nrf   )r$  zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r"  r   r   rI   r   r   r   hasattrr4  killr   r   r   r   _address_to_localr   )r   r(   rw   r2   r   r   r   s          r   r  zBaseManager._finalize_manager  s*    7II;<w8!T44JJL GLL!12w!		/07K0IIGH%G%%' GLL)9:'w'')		"GH$$nn	++G4% JJL $  		s:   
E E  E .E%  EE 	E"!E"%	E10E1c                     | j                   S r   )r   r.   s    r   r(   zBaseManager.address  s    }}r   c                    d| j                   vr| j                  j                         | _        t        |xs t	        dd      }|xs t	        dd      }|rWt        |j                               D ];  \  }}t        |      t        u s
J d|z         t        |      t        u r3J d|z          |||f| j                  <   |rfd}	|	_	        t        | |	       yy)z9
        Register a typeid with the manager type
        r   N	_exposed__method_to_typeid_z%r is not a stringc                (   t        j                  d        | j                  g|i |\  }} || j                  | | j                  |      }| j                  |j                  | j                        }t        |d d|j                  f       |S )Nz)requesting creation of a shared %r objectmanagerrw   r   r  rn   )	r   r   r   r   r   r   r(   rI   r)   )	r+   rE   rF   r   expproxyr   r   r'   s	          r   r]   z"BaseManager.register.<locals>.temp  s    

FO)T\\&@4@4@
s!4++T MM3 ||EMM4==|ItX{;r   )__dict__r   copy	AutoProxyrZ   r!   r   rR   rO   r7   setattr)
r  r'   r[   r   r   r   create_methodkeyr   r]   s
    ` `      r   registerzBaseManager.register  s    cll*MM..0CM!IBWYTB+ J"9.BDI 	 "#3#9#9#;< H
UCyC'C)=)CC'E{c)G+?%+GG)H
 g/!f 	 #DMC& r   )NNr   Nrs   r   )NNNNT)r7   r9   r:   r;   r   re   r  r,   r   r  r   classmethodr  r   r   r'  r*  r,  r2  staticmethodr  propertyr(   rG  r=   r   r   r   r     s     IG>F2/227*)V /1 ,
9%    D   EI6:%' %'r   r   c                       e Zd Zd Zd Zy)ProcessLocalSetc                 2    t        j                  | d        y )Nc                 "    | j                         S r   )clearr"   s    r   <lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>  s    399; r   )r   register_after_forkr.   s    r   r,   zProcessLocalSet.__init__  s      '>?r   c                     t        |       dfS rs   )rR   r.   s    r   
__reduce__zProcessLocalSet.__reduce__  s    Dz2~r   N)r7   r9   r:   r,   rS  r=   r   r   rL  rL    s    @r   rL  c                       e Zd ZdZi Z ej                         Z	 	 ddZd Z	di fdZ
d Zd Zed	        Zd
 Zd Zd Zd Zd Zy)r   z.
    A base for proxies of shared objects
    Nc                    t         j                  5  t         j                  j                  |j                  d       }|;t        j                         t               f}|t         j                  |j                  <   d d d        d   | _        |d   | _	        || _
        | j                  j                  | _        || _        || _        t        |   d   | _        || _        |t%        j&                  |      | _        nK| j                  | j                  j(                  | _        n#t%        j*                         j,                  | _        |r| j/                          t        j0                  | t         j2                         y # 1 sw Y   xY w)Nr   r	   )r   _mutexr7  r   r(   r   ForkAwareLocalrL  _tls_idset_tokenr)   _id_managerr   rx   r   _owned_by_managerr   rv   r   r   rw   _increfrQ  _after_fork)	r+   r   r   r>  rw   r   rm   manager_owned	tls_idsets	            r   r,   zBaseProxy.__init__  s6    	G!3377tLI  //1?3DD	=F	++EMM:		G aL	
  l;;>>%&z215 "/#88ADM]]& MM22DM#335==DMLLN  y'<'<=K	G 	Gs   A(E<<Fc                    t        j                  d       t        j                         j                  }t        j                         j                  dk7  r$|dt        j                         j                  z   z  }| j                  | j                  j                  | j                        }t        |d d|f       || j                  _        y )Nzmaking connection to manager
MainThread|r  rh   )r   r   r   r   r^   r}   r   r   rZ  r(   r   rI   rX  r
   )r+   r^   r   s      r   _connectzBaseProxy._connect  s    

12&&(--##%**l:C)2249999D||DKK//|Gt04':#		r   r=   c                    	 | j                   j                  }|j                  | j                  |||f       |j                         \  }}|dk(  r|S |dk(  r|\  }}| j                  j                  |j                     d   }	| j                  j                   |_         |	|| j"                  | j                  | j$                  |      }
| j'                  |j                   | j$                        }t)        |dd|j*                  f       |
S t-        ||      # t        $ r\ t        j                  dt        j                         j                         | j                          | j                   j                  }Y aw xY w)	zV
        Try to call a method of the referent and return a copy of the result
        z#thread %r does not own a connectionr?   r   r=  r  Nrn   )rX  r
   r   r   r   r}   r   r^   re  r@   r[  rA   r\  r   r'   rZ  r(   r   r   r   rI   r)   rB   )r+   rD   rE   rF   r   rG   rH   r   r   r   r@  s              r   _callmethodzBaseProxy._callmethod(  s<   	(99''D 			488Zt45yy{f9MX#NGU//=bAI KK//EMt''wE <<t}}<EDT4EHH;7LtV,,-  	(JJ< //1668MMO99''D		(s   D A!E:9E:c                 $    | j                  d      S )z9
        Get a copy of the value of the referent
        r   rh  r.   s    r   	_getvaluezBaseProxy._getvalueF  s     ,,r   c           
         | j                   r+t        j                  d| j                  j                         y | j                  | j                  j                  | j                        }t        |d d| j                  f       t        j                  d| j                  j                         | j                  j                  | j                         | j                  xr | j                  j                  }t        j                  | t        j                   | j                  | j                  || j"                  | j                  | j
                  fd      | _        y )Nz%owned_by_manager skipped INCREF of %rr  rm   z	INCREF %r
   r  )r]  r   r   rZ  r)   r   r(   r   rI   r[  rY  addr\  r   r  r   _decrefrX  _close)r+   r   r2   s      r   r^  zBaseProxy._increfL  s    !!JJ>O||DKK//|GtX{3

;/!6$--"6"6mm)##++t}}e))T[[$,,8	r   c                 j   |j                  | j                         ||j                  t        j                  k(  rO	 t        j                  d| j                          || j                  |      }t        |d d| j                  f       n t        j                  d| j                         |s\t        |d      rOt        j                  dt        j                         j                         |j                  j                          |`y y y # t        $ r }t        j                  d|       Y d }~d }~ww xY w)Nz	DECREF %rr  rn   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)discardr)   r   r   r   r   r   r(   rI   r   r5  r}   r   r^   r
   r   )r   rw   r2   tlsidsetr   r   r   s           r   ro  zBaseProxy._decref`  s    ehh =EKK5==86

;1u}}g>tX{;
 JJ>I l3JJF //1668NN  "	 4u  6

11556s   AD	 		D2D--D2c                     d | _         	 | j                          y # t        $ r"}t        j                  d|z         Y d }~y d }~ww xY w)Nzincref failed: %s)r\  r^  r   r   r   )r+   r   s     r   r_  zBaseProxy._after_forky  s<    	/LLN 	/II)A-..	/s    	AA  Ac                 
   i }t               | j                  |d<   t        | dd      r3| j                  |d<   t        t
        | j                  | j                  |ffS t        t        |       | j                  | j                  |ffS )Nrw   _isautoFr   )	r   r   rZ   r:  RebuildProxyrC  rZ  r   rR   r+   rF   s     r   rS  zBaseProxy.__reduce__  s    +"mmDO4E*"nnDO T-=-=tDF F !$Zd.>.>EG Gr   c                 "    | j                         S r   )rk  )r+   memos     r   __deepcopy__zBaseProxy.__deepcopy__  s    ~~r   c                 r    dt        |       j                  | j                  j                  t	        |       fz  S )Nz<%s object, typeid %r at %#x>)rR   r7   rZ  r'   r)   r.   s    r   r8   zBaseProxy.__repr__  s3    .T
##T[[%7%7DBC 	Cr   c                 f    	 | j                  d      S # t        $ r t        |       dd dz   cY S w xY w)zV
        Return representation of the referent (or a fall-back if that fails)
        r8   Nrg  z; '__str__()' failed>)rh  r   r   r.   s    r   rW   zBaseProxy.__str__  s=    	=##J// 	=:cr?%<<<	=s    00NNNTF)r7   r9   r:   r;   r7  r   ForkAwareThreadLockrV  r,   re  rh  rk  r^  rI  ro  r_  rS  r|  r8   rW   r=   r   r   r   r     su     %T%%'F26HM'>R$ ,.B -<-(  0/G C=r   r   c                    t        t        j                         dd      }|r||j                  |j                  k(  rct	        j
                  d|       d|d<   |j                  |j                  vr0|j                  |j                     |j                  |j                  <   |j                  dd      xr  t        t        j                         dd       } | ||fd|i|S )	z5
    Function used for unpickling proxy objects.
    r   Nz*Rebuild a proxy owned by manager, token=%rTr`  rm   _inheritingF)
rZ   r   r   r(   r   r   r)   r|   rz   pop)r_   r   r   rF   r  rm   s         r   rx  rx    s     W,,.0A4HF&..EMM1

?G $_886777  * ((2 	4  	EG++-}eDD  z9&9D99r   c                     t        |      }	 || |f   S # t        $ r Y nw xY wi }|D ]  }t        d|d|d|        t        | t        f|      }||_        ||| |f<   |S )zB
    Return a proxy type whose methods are given by `exposed`
    zdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r   execrR   r   r:  )r^   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper    s     GnGtWo&&  C H6:DBCF	HH TI<-I!I'FD'?s    	  c                 p   t         |   d   }|4 || j                  |      }	 t        |dd| f      }|j                          |||j                  }|t        j                         j                  }t        d| j                  z  |      }	 |	| |||||      }
d|
_
        |
S # |j                          w xY w)z*
    Return an auto-proxy for `token`
    r	   Nr  ri   zAutoProxy[%s])r>  rw   rm   r`  T)rx   r(   rI   r   r   r   r   rw   r  r'   rw  )r   r   r>  rw   r   rm   r`  r   r   r  r@  s              r   rC  rC    s    
 j)!,Gu}}g6	tT=5(CGJJL7.""))+33o<gFIeZ'#=BEEML JJLs   B# #B5c                       e Zd Zd Zd Zy)	Namespacec                :    | j                   j                  |       y r   )rA  updatery  s     r   r,   zNamespace.__init__  s    T"r   c                 &   t        | j                  j                               }g }|D ]-  \  }}|j                  d      r|j	                  |d|       / |j                          | j                  j                  ddj                  |      dS )Nrb   =(, r5   )	r!   rA  r   
startswithr\   r   r6   r7   r   )r+   r   r]   r^   r   s        r   r8   zNamespace.__repr__  sv    T]]((*+  	5KD%??3'tU34	5 			>>22DIIdODDr   N)r7   r9   r:   r,   r8   r=   r   r   r  r    s    #Er   r  c                   8    e Zd ZddZd Zd Zd Z eee      Zy)Valuec                      || _         || _        y r   )	_typecode_value)r+   r   r   locks       r   r,   zValue.__init__  s    !r   c                     | j                   S r   r  r.   s    r   r   z	Value.get  s    {{r   c                     || _         y r   r  r+   r   s     r   r   z	Value.set  s	    r   c                 f    t        |       j                  d| j                  d| j                  dS )Nr  r  r5   )rR   r7   r  r  r.   s    r   r8   zValue.__repr__  s!    !$Z00$..$++NNr   NT)	r7   r9   r:   r,   r   r   r8   rJ  r   r=   r   r   r  r    s#    OS#Er   r  c                 .    t        j                   | |      S r   )r   )r   sequencer  s      r   Arrayr    s    ;;x**r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)IteratorProxy)__next__r@   throwr   c                     | S r   r=   r.   s    r   __iter__zIteratorProxy.__iter__      r   c                 &    | j                  d|      S )Nr  rj  r+   rE   s     r   r  zIteratorProxy.__next__  s    
D11r   c                 &    | j                  d|      S )Nr@   rj  r  s     r   r@   zIteratorProxy.send  s    --r   c                 &    | j                  d|      S )Nr  rj  r  s     r   r  zIteratorProxy.throw      ..r   c                 &    | j                  d|      S )Nr   rj  r  s     r   r   zIteratorProxy.close  r  r   N)	r7   r9   r:   r:  r  r  r@   r  r   r=   r   r   r  r  	  s     6I2.//r   r  c                   *    e Zd ZdZddZd Zd Zd Zy)AcquirerProxy)acquirereleaseNc                 8    ||fn||f}| j                  d|      S Nr  rj  )r+   blockingr$  rE   s       r   r  zAcquirerProxy.acquire  s'    %o{Hg3F	400r   c                 $    | j                  d      S Nr  rj  r.   s    r   r  zAcquirerProxy.release      	**r   c                 $    | j                  d      S r  rj  r.   s    r   r,  zAcquirerProxy.__enter__  r  r   c                 $    | j                  d      S r  rj  r.  s       r   r2  zAcquirerProxy.__exit__   r  r   )TN)r7   r9   r:   r:  r  r  r,  r2  r=   r   r   r  r    s    &I1+++r   r  c                   .    e Zd ZdZddZddZd ZddZy)	ConditionProxy)r  r  r   notify
notify_allNc                 (    | j                  d|f      S Nr   rj  r#  s     r   r   zConditionProxy.wait&      
33r   c                 (    | j                  d|f      S )Nr  rj  )r+   ns     r   r  zConditionProxy.notify(  s    1$//r   c                 $    | j                  d      S )Nr  rj  r.   s    r   r  zConditionProxy.notify_all*  s    --r   c                      |       }|r|S |t        j                         |z   }nd }d }|s<||t        j                         z
  }|dk  r	 |S | j                          |       }|s<|S )Nr   )time	monotonicr   )r+   	predicater$  rH   endtimewaittimes         r   wait_forzConditionProxy.wait_for,  s~    Mnn&0GGH""T^^%55q=  IIh[F  r   r   )r	   )r7   r9   r:   r:  r   r  r  r  r=   r   r   r  r  $  s    FI40.r   r  c                   *    e Zd ZdZd Zd Zd ZddZy)
EventProxy)r   r   rO  r   c                 $    | j                  d      S )Nr   rj  r.   s    r   r   zEventProxy.is_setA  s    ))r   c                 $    | j                  d      S Nr   rj  r.   s    r   r   zEventProxy.setC      &&r   c                 $    | j                  d      S )NrO  rj  r.   s    r   rO  zEventProxy.clearE      ((r   Nc                 (    | j                  d|f      S r  rj  r#  s     r   r   zEventProxy.waitG  r  r   r   )r7   r9   r:   r:  r   r   rO  r   r=   r   r   r  r  ?  s    2I*')4r   r  c                   T    e Zd ZdZd	dZd Zd Zed        Zed        Z	ed        Z
y)
BarrierProxy)__getattribute__r   abortresetNc                 (    | j                  d|f      S r  rj  r#  s     r   r   zBarrierProxy.waitM  r  r   c                 $    | j                  d      S )Nr  rj  r.   s    r   r  zBarrierProxy.abortO  r  r   c                 $    | j                  d      S )Nr  rj  r.   s    r   r  zBarrierProxy.resetQ  r  r   c                 &    | j                  dd      S )Nr  )partiesrj  r.   s    r   r  zBarrierProxy.partiesS  s     2LAAr   c                 &    | j                  dd      S )Nr  )	n_waitingrj  r.   s    r   r  zBarrierProxy.n_waitingV  s     2NCCr   c                 &    | j                  dd      S )Nr  )brokenrj  r.   s    r   r  zBarrierProxy.brokenY  s     2K@@r   r   )r7   r9   r:   r:  r   r  r  rJ  r  r  r  r=   r   r   r  r  K  sR    >I4))B BD DA Ar   r  c                   "    e Zd ZdZd Zd Zd Zy)NamespaceProxy)r  __setattr____delattr__c                 ~    |d   dk(  rt         j                  | |      S t         j                  | d      } |d|f      S )Nr   rb   rh  r  )objectr  r+   rF  
callmethods      r   __getattr__zNamespaceProxy.__getattr__`  sB    q6S=**455,,T=A
,sf55r   c                     |d   dk(  rt         j                  | ||      S t         j                  | d      } |d||f      S )Nr   rb   rh  r  )r  r  r  )r+   rF  r   r  s       r   r  zNamespaceProxy.__setattr__e  sE    q6S=%%dC77,,T=A
-#u66r   c                 ~    |d   dk(  rt         j                  | |      S t         j                  | d      } |d|f      S )Nr   rb   rh  r  )r  r  r  r  s      r   r  zNamespaceProxy.__delattr__j  sA    q6S=%%dC00,,T=A
-#00r   N)r7   r9   r:   r:  r  r  r  r=   r   r   r  r  ^  s    BI6
7
1r   r  c                   R    e Zd ZdZd Zd Z eee      Z ee	j                        Zy)
ValueProxy)r   r   c                 $    | j                  d      S )Nr   rj  r.   s    r   r   zValueProxy.gets  r  r   c                 (    | j                  d|f      S r  rj  r  s     r   r   zValueProxy.setu  s    x00r   N)r7   r9   r:   r:  r   r   rJ  r   rH  typesGenericAlias__class_getitem__r=   r   r   r  r  q  s.    I'1S#E#E$6$67r   r  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__r\   countextendindexinsertr  removereverser   __imul__c                       e Zd Zd Zd Zy)	ListProxyc                 ,    | j                  d|f       | S )Nr  rj  r  s     r   __iadd__zListProxy.__iadd__  s    E8,r   c                 ,    | j                  d|f       | S )Nr  rj  r  s     r   r  zListProxy.__imul__  s    eX.r   N)r7   r9   r:   r  r  r=   r   r   r	  r	    s    r   r	  	DictProxy)r  r  r  r  r  r   rO  rB  r   r   r   r  popitem
setdefaultr  r   r  Iterator
ArrayProxy)r  r  r   	PoolProxy)applyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr4  AsyncResult)r  r  r  r  r  c                       e Zd Zd Zd Zy)r  c                     | S r   r=   r.   s    r   r,  zPoolProxy.__enter__  r  r   c                 $    | j                          y r   )r4  r.  s       r   r2  zPoolProxy.__exit__  s    r   N)r7   r9   r:   r,  r2  r=   r   r   r  r    s    r   c                       e Zd ZdZy)r   a(  
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `multiprocessing.Manager()` function creates started instances of
    this class.
    N)r7   r9   r:   r;   r=   r   r   r   r     s    r   r   QueueJoinableQueuer   r~   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr!   r   r  )r   rE  )rE  c                   >    e Zd ZdZg fdZd Zd Zd Zd Zd Z	d Z
y	)
_SharedMemoryTrackerz+Manages one or more shared memory segments.c                      || _         || _        y r   shared_memory_context_namesegment_names)r+   r^   r-  s      r   r,   z_SharedMemoryTracker.__init__  s    .2D+!.Dr   c                     t        j                  d|dt                       | j                  j	                  |       y)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)r   r   r   r-  r\   r+   segment_names     r   register_segmentz%_SharedMemoryTracker.register_segment  s3    JJ*<*:(68*MN%%l3r   c                     t        j                  d|dt                       | j                  j	                  |       t        j                  |      }|j                          |j                          y)zCalls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r/  N)	r   r   r   r-  r  r   SharedMemoryr   unlink)r+   r1  segments      r   destroy_segmentz$_SharedMemoryTracker.destroy_segment  sX     JJ),)9&(LM%%l3#00>GMMONNr   c                 N    | j                   dd D ]  }| j                  |        y)z<Calls destroy_segment() on all tracked shared memory blocks.N)r-  r7  r0  s     r   r5  z_SharedMemoryTracker.unlink  s*     $ 2 21 5 3$$\23r   c                     t        j                  d| j                  j                   dt	                       | j                          y )NzCall z.__del__ in )r   r   r6   r7   r   r5  r.   s    r   __del__z_SharedMemoryTracker.__del__  s1    JJt~~667|FH:NOKKMr   c                 2    | j                   | j                  fS r   r+  r.   s    r   r/   z!_SharedMemoryTracker.__getstate__  s    33T5G5GHHr   c                 "     | j                   |  y r   )r,   r1   s     r   r3   z!_SharedMemoryTracker.__setstate__  s    DMM5!r   N)r7   r9   r:   r;   r,   r2  r7  r5  r:  r/   r3   r=   r   r   r)  r)    s,    5/1 	/	4
		3
		I	"r   r)  c                   R    e Zd Zej                  g dz   Zd Zd Zd Zd Zd Z	d Z
y)	SharedMemoryServer)track_segmentrelease_segmentlist_segmentsc                    t        j                  | g|i | | j                  }t        |t              rt        j                  |      }t        d| dt                      | _	        t        j                  dt                       y )Nshm_rb   z"SharedMemoryServer started by pid )re   r,   r(   rN   rt   osfsdecoder)  r   shared_memory_contextr   r   )r+   rE   kwargsr(   s       r   r,   zSharedMemoryServer.__init__  sn    OOD24262llG'5)++g.$tG9AfhZ%@A &JJ;FH:FGr   c                    t        | j                  |   d   d      r| j                  |d<   t        j                  | ||g|i |S )zCreate a new distributed-shared object (not backed by a shared
            memory block) and return its id to be used in a Proxy Object.rg  _shared_memory_proxyrF  )r5  ru   rF  re   rg   )r+   rC   r'   rE   rG  s        r   rg   zSharedMemoryServer.create  sK     t}}V,R02HI262L2L./==q&B4B6BBr   c                 b    | j                   j                          t        j                  | |      S )zACall unlink() on all tracked shared memory, terminate the Server.)rF  r5  re   rf   r   s     r   rf   zSharedMemoryServer.shutdown  s%    &&--/??4++r   c                 :    | j                   j                  |       y)z?Adds the supplied shared memory block name to Server's tracker.N)rF  r2  r+   rC   r1  s      r   r?  z SharedMemoryServer.track_segment  s    &&77Er   c                 :    | j                   j                  |       y)zCalls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)rF  r7  rL  s      r   r@  z"SharedMemoryServer.release_segment  s     &&66|Dr   c                 .    | j                   j                  S )zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)rF  r-  r   s     r   rA  z SharedMemoryServer.list_segments   s     --;;;r   N)r7   r9   r:   re   r   r,   rg   rf   r?  r@  rA  r=   r   r   r>  r>    s6    FG	H	C	,
	F	E
	<r   r>  c                   2    e Zd ZdZeZd Zd Zd Zd Z	d Z
y)r   a  Like SyncManager but uses SharedMemoryServer instead of Server.

        It provides methods for creating and returning SharedMemory instances
        and for creating a list-like object (ShareableList) backed by shared
        memory.  It also provides methods that create and return Proxy Objects
        that support synchronization across processes (i.e. multi-process-safe
        locks and semaphores).
        c                     t         j                  dk(  rddlm} |j	                          t        j                  | g|i | t        j                  | j                  j                   dt                       y )Nposixr	   )resource_trackerz created by pid )rD  r^    rR  ensure_runningr   r,   r   r   r6   r7   r   )r+   rE   rG  rR  s       r   r,   zSharedMemoryManager.__init__2  s\    ww'! / //1  777JJ$..1122B68*MNr   c                 p    t        j                  | j                  j                   dt	                       y )Nz.__del__ by pid )r   r   r6   r7   r   r.   s    r   r:  zSharedMemoryManager.__del__>  s'    JJ$..1122B68*MNr   c                    | j                   j                  t        j                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              | j                  | j                  | j                  | j                  | j                        S )z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr   )r   r   r   r   r   r   r   rQ   r  r   r   r   r   r.   s    r   r   zSharedMemoryManager.get_serverA  s    {{  EMM1;;$$5&'KLL[[&&%..8&'JKK&,33DKK4E4EFH H<< $t/?/?A Ar   c                 ,   | j                  | j                  | j                        5 }t        j                  dd|      }	 t        |dd|j                  f       	 ddd       |S # t        $ r}|j                          |d}~ww xY w# 1 sw Y   S xY w)zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.r  NT)rg   sizer?  )	r   r   r   r   r4  rI   r^   BaseExceptionr5  )r+   rX  r   smsr   s        r   r4  z SharedMemoryManager.SharedMemoryN  s     dmmT]]C t#00dNT4388+F J % JJLG	 Js)   B	A&&	B/BBB		Bc                 N   | j                  | j                  | j                        5 }t        j                  |      }	 t        |dd|j                  j                  f       	 ddd       |S # t        $ r!}|j                  j                          |d}~ww xY w# 1 sw Y   S xY w)zReturns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.r  Nr?  )
r   r   r   r   ShareableListrI   shmr^   rY  r5  )r+   r  r   slr   s        r   r\  z!SharedMemoryManager.ShareableListZ  s     dmmT]]C t"00:T4266;;.I I % FFMMOG	 Is(   B#A--	B6BBBB$N)r7   r9   r:   r;   r>  r  r,   r:  r   r4  r\  r=   r   r   r   r   &  s*    	 %
	O	O	A
	
	r   r  r  )W__all__r   r}   r  r   queuer  r  rD  r   r   r   rS  r
   contextr   r   r   r   r   r   r   r   	HAS_SHMEMr\   ImportErrorr   rG  rR   rZ   
view_typesr$   	view_typer  r   rI   rB   r   rS   r`   rc   re   r   r   r   XmlListener	XmlClientrx   r   r   rL  r   rx  r  rC  r  r  r  r  r  r  r  r  r  r  r  r	  r  r;  r  BasePoolProxyr  r   r   r   r~   r"  r#  r$  r%  r&  r'  r!   r   r)  r>  r   )r^   s   0r   <module>ri     sW   A        	     @ @    * INN()2 	  5;; -4MNDd$72t$&'N
 3IIy/23zMF M. &(b )IC) C	AF*V F*Z
F  ##Z%6%67)):+?+?@t'& t'tc m= m=f:* )+ , 8<7<:
E 
E
F 
+/I /
+I 
+] 6	4 	4A9 A&1Y 1&8 8 o 0   + ( 	 
 	 
 < * 

 k , 
 !" $   	+ 	   Wekk *   _ekk 2   Wiooz :   VY^^] ;   Wioo} =   [)"5"5} E   ')C)C"$   [)"5"5~ F   Y	 1 1< @   VTYY	 2   VT9 -   VT9 -   WeZ 0   WeZ 0   [)^ <   Z=  N   ]%  8 "" ""J*<V *<Z>k >g ]%  I Os   O; P	;PP