
    =OgD                     t   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                     d           n# e$ r dZY nw xY wd Z ej        ej        e           d dD             Zd ZeD ]Z ej        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j)        ej*        fej+        ej,        fd!Z- G d" d#e          Z. G d$ d%e/          Z0 G d& d'e          Z1d( Z2i fd)Z3	 	 dcd*Z4 G d+ d,e          Z5 G d- d.e          Z6ddd/Z7 G d0 d1e1          Z8 G d2 d3e1          Z9 G d4 d5e9          Z: G d6 d7e1          Z; G d8 d9e1          Z< G d: d;e1          Z= G d< d=e1          Z> e3d>d?          Z? G d@ dAe?          Z@ e3dBdC          ZAdDdEieA_B         e3dFdG          ZC e3dHdI          ZDdJdJdJdEdEdKeD_B         G dL dHeD          ZE G dM dNe.          ZFeF                    dOejG                   eF                    dPejG                   eF                    dQejH        e;           eF                    dRejI        e9           eF                    dSejJ        e9           eF                    dTejK        e9           eF                    dUejL        e9           eF                    dVejM        e:           eF                    dWejN        e<           eF                    dXejO        eE           eF                    dYePe@           eF                    dZeQeA           eF                    d.e6e>           eF                    d[e7eC           eF                    d,e5e=           eF                    dEe8d\           eF                    dJd]           er+ G d^ d_          ZR G d` dae'          ZS G db de.          ZTdS dS )e)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTSharedMemoryManagerFc                 P    t           j         | j        |                                 ffS N)arraytypecodetobytes)as    1/usr/lib64/python3.11/multiprocessing/managers.pyreduce_arrayr   /   s    ;QYY[[111    c           	      X    g | ]'}t           t          i |                                (S  )typegetattr.0names     r   
<listcomp>r$   3   s3    NNNDd$72t$$&&''NNNr   )itemskeysvaluesc                 0    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S )r   typeidaddressidc                 2    |||c| _         | _        | _        d S r   r.   )selfr/   r0   r1   s       r   __init__zToken.__init__D   s    06,dlDGGGr   c                 *    | j         | j        | j        fS r   r.   r3   s    r   __getstate__zToken.__getstate__G   s    T\4733r   c                 0    |\  | _         | _        | _        d S r   r.   r3   states     r   __setstate__zToken.__setstate__J   s    /4,dlDGGGr   c                 P    | j         j        d| j        d| j        d| j        dS )Nz(typeid=z
, address=z, id=))	__class____name__r/   r0   r1   r6   s    r   __repr__zToken.__repr__M   s4    '''dlllDGGGM 	Mr   N)r?   
__module____qualname__	__slots__r4   r7   r;   r@   r   r   r   r   r   >   sd         ,IE E E4 4 45 5 5M M M M Mr   r   r   c                     	 |                      ||||f           |                                 \  }}|dk    r|S t          ||          )N#RETURN)sendrecvconvert_to_error)cr1   
methodnameargskwdskindresults          r   dispatchrO   U   sU     FFB
D$'(((6688LD&y
4
(
((r   c           	      8   | dk    r|S | dv rmt          |t                    s1t          d                    || t	          |                              | dk    rt          d|z            S t          |          S t          d                    |                     S )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrS   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformatr   RemoteError
ValueError)rM   rN   s     r   rH   rH   _   s    x	2	2	2&#&& 	1@GGD$v,,0 01 1 1 $$$=FGGGv&&&:AA$GGHHHr   c                       e Zd Zd ZdS )rX   c                 B    dt          | j        d                   z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rU   rK   r6   s    r   __str__zRemoteError.__str__o   s     $s49Q<'8'886ABr   N)r?   rA   rB   r\   r   r   r   rX   rX   n   s(        C C C C Cr   rX   c                     	 g }t          |           D ]6}t          | |          }t          |          r|                    |           7|S r   )dirr    callableappend)r+   tempr#   funcs       r   all_methodsrc   v   sX     DC  sD!!D>> 	KKKr   c                 6    	 d t          |           D             S )Nc                 *    g | ]}|d          dk    |S )r   _r   r!   s     r   r$   z"public_methods.<locals>.<listcomp>   s!    @@@TaCDr   )rc   r*   s    r   public_methodsrg      s&     A@[--@@@@r   c                       e 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dS )Server)	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                    t          |t                    s0t          d                    |t	          |                              || _        t          j        |          | _        t          |         \  }} ||d          | _
        | j
        j        | _        ddi| _        i | _        i | _        t          j                    | _        d S )Nz&Authkey {0!r} is type {1!s}, not bytes   )r0   backlog0Nr   )rT   bytesrV   rW   r   registryr   AuthenticationStringauthkeylistener_clientlistenerr0   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r3   ry   r0   r{   
serializerListenerClients          r   r4   zServer.__init__   s    '5)) 	-8??T']], ,- - - !3G<<*:6& !#>>>},z* %'"^%%


r   c                 `   	 t          j                    | _        | t          j                    _        	 t          j        | j                  }d|_        |	                                 	 | j        
                                s3| j                            d           | j        
                                3n# t          t          f$ r Y nw xY wt          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           d S # t          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           w xY w)N)targetTr	   zresetting stdout, stderrr   )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)r3   r   s     r   serve_foreverzServer.serve_forever   sU   	 $/++48!!1	 't}===H"HONN/0022 ,O((+++ /0022 ,%z2    zS^++
5666 ^
 ^
HQKKKKK	 zS^++
5666 ^
 ^
HQKKKKs1   5D= )AB6 5D= 6C
D= 	C

D= =A0F-c                     	 	 | j                                         }n# t          $ r Y (w xY wt          j        | j        |f          }d|_        |                                 c)NTr   rK   )r}   acceptOSErrorr   r   handle_requestr   r   )r3   rI   ts      r   r   zServer.accepter   st    	M((**    (;1$GGGAAHGGIII	s    
**c                    d }	 t          j        || j                   t          j        || j                   |                                }|\  }}}}t          | |          }	  ||g|R i |}d|f}	n@# t          $ r dt                      f}	Y n$w xY w# t          $ r dt                      f}	Y nw xY w	 |                    |	           d S # t          $ r}
	 |                    dt                      f           n# t          $ r Y nw xY wt          j
        d|	           t          j
        d|           t          j
        d|
           Y d }
~
d S d }
~
ww xY w)NrE   rR   zFailure to send message: %rz ... request was %r ... exception was %r)r
   deliver_challenger{   answer_challengerG   r    	Exceptionr   rF   r   info)r3   rI   requestignorefuncnamerK   rL   rb   rN   msges              r   _handle_requestzServer._handle_request   s   	*(DL999'4<888ffhhG+2(FHdD4**D*a/$///$// !&)  3 3 3#Z\\23  	/ 	/ 	/.CCC	/		2FF3KKKKK 	2 	2 	2jll34444   I3S999I+W555I-q111111111	2s[   AB $A5 5BBB21B26C 
E#C<;E<
D	ED		AEEc                     	 	 |                      |           n# t          $ r Y nw xY w|                                 d S # |                                 w xY wr   )r   r   closer3   conns     r   r   zServer.handle_request   sh    		  &&&& 	 	 	D	 JJLLLLLDJJLLLLs    ? 
&? &? Ac                 D   	 t          j        dt          j                    j                   |j        }|j        }| j        }| j        	                                s	 d x}} |            }|\  }}}	}
	 ||         \  }}}n:# t          $ r-}	 | j        |         \  }}}n# t          $ r |w xY wY d }~nd }~ww xY w||vr%t          d|dt          |          d|          t          ||          }	  ||	i |
}|o|                    |d           }|r7|                     |||          \  }}t#          || j        |          }d||ff}n d|f}n# t&          $ r}d|f}Y d }~nd }~ww xY wn# t          $ rX |dt)                      f}nB	 | j        |         } || |||g|	R i |
}d|f}n # t&          $ r dt)                      f}Y nw xY wY nit,          $ rB t          j        d	t          j                    j                   t/          j        d
           Y nt&          $ r dt)                      f}Y nw xY w	 	  ||           n)# t&          $ r  |dt)                      f           Y nw xY wn# t&          $ r}t          j        dt          j                    j                   t          j        d|           t          j        d|           |                                 t/          j        d           Y d }~nd }~ww xY w| j        	                                d S d S )Nz$starting server thread to service %rzmethod z of z object is not in exposed=#PROXYrE   rQ   rR   z$got EOF -- exiting thread serving %rr   rS   zexception in thread serving %rz ... message was %rr   r	   )r   r   r   current_threadr#   rG   rF   r~   r   r   KeyErrorr   AttributeErrorr   r    getrk   r   r0   r   r   fallback_mappingEOFErrorr   r   r   r   )r3   r   rG   rF   r~   rJ   r+   r   identrK   rL   exposed	gettypeidkefunctionresr/   ridentrexposedtokenr   r   fallback_funcrN   s                           r   serve_clientzServer.serve_client   sI   	 	
9+--2	4 	4 	4 yyN	/((** D	53#''
S$&&07-z4!.7.>+C)) ! ! !! 6u= 0Wii# ! ! ! ! '0iiii! W,,(.#T#YYYY9  
 #3
33/"(D1D11C 'J9==T+J+JF /+/;;tVS+I+I( %fdlF C C'(E):;(#. ! ( ( (#Q-CCCCCC( " ; ; ;%'6CC;(,(=j(I!. $s"59" " "=A" "  )&1$ ; ; ;+Z\\:;    
A$355:< < < 3 3 3#Z\\23<DIIII  < < <D+Z\\:;;;;;<   	:!02279 9 9	/555	11555

} /((** D	 D	 D	 D	 D	s   E. 3B  ?E.  
B7BB2B**B2-E. 2B77<E. 4E <AE. 
E*E% E. %E**E. .H5 F-,H5-G
H5	G

H5AH5H54H5:I I0 #I,)I0 +I,,I0 0
L:A=K<<Lc                     |S r   r   r3   r   r   r+   s       r   fallback_getvaluezServer.fallback_getvalue?  s    
r   c                      t          |          S r   rU   r   s       r   fallback_strzServer.fallback_strB  s    3xxr   c                      t          |          S r   )reprr   s       r   fallback_reprzServer.fallback_reprE  s    Cyyr   )r\   r@   	#GETVALUEc                     d S r   r   r3   rI   s     r   rp   zServer.dummyN  s    r   c                    	 | j         5  g }t          | j                                                  }|                                 |D ]W}|dk    rO|                    d|d| j        |         dt          | j        |         d                   d d                    Xd                    |          cd d d            S # 1 swxY w Y   d S )Nrv   z  z:       refcount=z
    r   K   
)	r   r)   r   r&   sortr`   rU   r~   join)r3   rI   rN   r&   r   s        r   rn   zServer.debug_infoQ  s*   	 Z 		% 		%F+002233DIIKKK H HC<<MMM#(55$*=e*D*D*D#&t~e'<Q'?#@#@"#E#E#G H H H 99V$$		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		%s   B+CCCc                 ,    	 t          | j                  S r   )lenr   r   s     r   ro   zServer.number_of_objectsa  s    	 4&'''r   c                 
   	 	 t          j        d           |                    d           n#  dd l}|                                 Y nxY w| j                                         d S # | j                                         w xY w)Nz!manager received shutdown messagerE   Nr   )r   r   rF   	traceback	print_excr   set)r3   rI   r   s      r   rj   zServer.shutdownh  s    		"J:;;;FF$%%%%	"!!!!!O!!!!!DO!!!!s   )- A' A	A' 'Bc          	         	 | j         5  | j        |         \  }}}}|-|st          |          dk    rt          d          |d         }	n ||i |}	|t	          |	          }|dt          |t                    s0t          d                    |t          |                              t          |          t          |          z   }dt          |	          z  }
t          j        d||
           |	t          |          |f| j        |
<   |
| j        vr
d| j        |
<   d d d            n# 1 swxY w Y   |                     ||
           |
t%          |          fS )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   ry   r   rY   rg   rT   dictrV   rW   r   r)   r1   r   r   r   r~   r   rq   tuple)r3   rI   r/   rK   rL   r_   r   method_to_typeid	proxytyper+   r   s              r   rk   zServer.createu  s   	 Z 	/ 	/mF+ ;Hg/  PCIINN$NP P P1gh---(--+!"2D99 G#FMM,d3C.D.DF FG G G w--$/?*@*@@2c77NEJ?OOO%(#g,,8H$IDN5!D///-.#E*7	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/: 	AueGnn$$s   DD++D/2D/c                 N    	 t          | j        |j                 d                   S )Nr	   )r   r~   r1   )r3   rI   r   s      r   rm   zServer.get_methods  s%    	 T^EH-a0111r   c                     	 |t          j                    _        |                    d           |                     |           d S )Nr   )r   r   r#   rF   r   )r3   rI   r#   s      r   rl   zServer.accept_connection  sG    	 +/	 ""'	 !!!!r   c                 D   | j         5  	 | j        |xx         dz  cc<   nh# t          $ r[}|| j        v rFd| j        |<   | j        |         | j        |<   | j        |         \  }}}t          j        d|           n|Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )Nr	   z&Server re-enabled tracking & INCREF %r)r   r   r   r   r~   r   r   )r3   rI   r   r   r+   r   r   s          r   rq   zServer.incref  s(   Z 	 	#E***a/****   
 D66612D'.259 N5).2nU.C+C)JGOOOOH POOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   B B
BAB ;B BBBBc           	      ,   || j         vr || j        v rt          j        d|           d S | j        5  | j         |         dk    r:t          d                    || j        |         | j         |                             | j         |xx         dz  cc<   | j         |         dk    r| j         |= d d d            n# 1 swxY w Y   || j         vrId| j        |<   t          j        d|           | j        5  | j        |= d d d            d S # 1 swxY w Y   d S d S )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   AssertionErrorrW   r~   )r3   rI   r   s      r   rr   zServer.decref  s   +++T///J2E:::FZ 	/ 	/"5)Q..$AHHt~e4+E24 45 5 5 &&&!+&&&"5)Q..'.	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ +++ %5DN5!J4e<<< * *N5)* * * * * * * * * * * * * * * * * * ,+s$   A:B77B;>B;1	DDDN)r?   rA   rB   publicr4   r   r   r   r   r   r   r   r   r   rp   rn   ro   rj   rk   rm   rl   rq   rr   r   r   r   ri   ri      sX       N N NF& & &$  ,  2 2 2<
 
 
O O Ob        %
 
  % % % ( ( (" " ""% "% "%H2 2 2    $* * * * *r   ri   c                        e Zd ZdgZdZdZdZdS )Statevaluer   r	      N)r?   rA   rB   rC   INITIALSTARTEDSHUTDOWNr   r   r   r   r     s$        	IGGHHHr   r   )pickle	xmlrpclibc                       e 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dS )r   Nr   g      ?)shutdown_timeoutc                F   |t          j                    j        }|| _        t          j        |          | _        t                      | _        t          j        | j        _	        || _
        t          |         \  | _        | _        |pt                      | _        || _        d S r   )r   r   r{   _addressrz   _authkeyr   _stater   r   _serializerr|   	_Listener_Clientr   _ctx_shutdown_timeout)r3   r0   r{   r   ctxr   s         r   r4   zBaseManager.__init__  s    ?-//7G4W==gg!M%'6z'B$(;==	!1r   c                    	 | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            t          | j	        | j
        | j        | j                  S )NAlready started serverManager has shut downUnknown state {!r})r   r   r   r   r   r   r   rW   ri   	_registryr   r   r   r6   s    r   
get_serverzBaseManager.get_server   s    	 ;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D DdndmmT%57 7 	7r   c                     	 t           | j                 \  }} || j        | j                  }t	          |d d           t
          j        | j        _        d S )Nr{   rp   )	r|   r   r   r   rO   r   r   r   r   )r3   r   r   r   s       r   connectzBaseManager.connect  sW    	 +4+;<&vdmT];;;tW%%%!Mr   r   c           
      d   	 | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            |t          |          st          d          t          j        d          \  }}| j                            t          |           j        | j        | j        | j        | j        |||f          | _        d                    d	 | j        j        D                       }t          |           j        d
z   |z   | j        _        | j                                         |                                 |                                | _        |                                 t          j        | j         _        t9          j        | t          |           j        | j        | j        | j        | j         | j        | j         fd          | _!        d S )Nr   r   r  zinitializer must be a callableF)duplexr   :c              3   4   K   | ]}t          |          V  d S r   r   )r"   is     r   	<genexpr>z$BaseManager.start.<locals>.<genexpr>1  s(      AAAQAAAAAAr   -r   rK   exitpriority)"r   r   r   r   r   r   r   rW   r_   rV   r
   Piper   Processr   _run_serverr  r   r   r   _processr   	_identityr?   r#   r   r   rG   r   Finalize_finalize_managerr   r   rj   )r3   initializerinitargsreaderwriterr   s         r   r   zBaseManager.start  s   	 ;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D D "8K+@+@"<=== $666 	))::).$-"FKC *  
 AA)@AAAAA!$ZZ0C7%? 	 "M$t**.-t{, 68	  r   c                 P   	 t          j         t           j        t           j                   | ||  |                     ||||          }|                    |j                   |                                 t          j        d|j                   |	                                 d S )Nzmanager serving at %r)
signalSIGINTSIG_IGN_ServerrF   r0   r   r   r   r   )	clsry   r0   r{   r   r  r  r  servers	            r   r  zBaseManager._run_serverC  s    	 	fmV^444"K"" XwDD 	FN### 		)6>:::r   c                   	 |                      | j        | j                  }	 t          |d d|f|z   |          \  }}|                                 n# |                                 w xY wt          || j        |          |fS )Nr  rk   )r   r   r   rO   r   r   )r3   r/   rK   rL   r   r1   r   s          r   _createzBaseManager._createZ  s    	 ||DM4=|AA	"4x&4NNKBJJLLLLDJJLLLLVT]B//88s   A A)c                     	 | j         <| j                             |           | j                                         sd | _         d S d S d S r   )r  r   is_aliver3   timeouts     r   r   zBaseManager.joinf  sZ    	 =$Mw'''=))++ % $ %$% %r   c                     	 |                      | j        | j                  }	 t          |d d          |                                 S # |                                 w xY w)Nr  rn   r   r   r   rO   r   r   s     r   _debug_infozBaseManager._debug_infoo  sW    	 ||DM4=|AA	D$55JJLLLLDJJLLLL   A	 	Ac                     	 |                      | j        | j                  }	 t          |d d          |                                 S # |                                 w xY w)Nr  ro   r)  r   s     r   _number_of_objectszBaseManager._number_of_objectsy  sX    	 ||DM4=|AA	D$(;<<JJLLLLDJJLLLLr+  c                    | j         j        t          j        k    r|                                  | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            | S )NzUnable to start serverr   r  )	r   r   r   r   r   r   r   r   rW   r6   s    r   	__enter__zBaseManager.__enter__  s    ;--JJLLL;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D Dr   c                 .    |                                   d S r   )rj   r3   exc_typeexc_valexc_tbs       r   __exit__zBaseManager.__exit__  s    r   c                    	  | j                     r,t          j        d           	  |||          }	 t          |d d           |                                 n# |                                 w xY wn# t
          $ r Y nw xY w | j        |            | j                     rt          j        d           t          | d          rut          j        d            | j                      | j        |            | j                     r2t          j        d            | j	                      | j                     t          j        |_        	 t          j        |= d S # t          $ r Y d S w xY w)	Nz#sending shutdown message to managerr  rj   )r'  zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r%  r   r   rO   r   r   r   hasattrr7  killr   r   r   r   _address_to_localr   )r   r0   r{   r:   r   r   r   s          r   r  zBaseManager._finalize_manager  s   	 7 	'I;<<<ww888!T4444JJLLLLDJJLLLLL    GL!12222w!! 	'	/0007K00 'IGHHH%G%''' GL)9::::'w')) '	"GHHH$$n	+G444 	 	 	DD	s:   A5 A A5 A11A5 5
BBE 
E-,E-c                     | j         S r   )r   r6   s    r   r0   zBaseManager.address  s
    }r   Tc                 j   	 d| j         vr| j                                        | _        t          |pt	          dd           }|pt	          dd           }|r't          |                                          D ]\  }}|||f| j        <   |r fd}	|	_        t          | |	           d S d S )Nr  	_exposed__method_to_typeid_c                    t          j        d            | j        g|R i |\  }} || j        | | j        |          }|                     |j        | j                  }t          |d d|j        f           |S )Nz)requesting creation of a shared %r objectmanagerr{   r   r  rr   )	r   r   r#  r   r   r   r0   rO   r1   )	r3   rK   rL   r   expproxyr   r   r/   s	          r   ra   z"BaseManager.register.<locals>.temp  s    
FOOO)T\&@4@@@4@@
s!	4+T M3   ||EM4=|IItX{;;;r   )	__dict__r  copy	AutoProxyr    r)   r%   r?   setattr)
r   r/   r_   r   r   r   create_methodkeyr   ra   s
    ` `      r   registerzBaseManager.register  s   	 cl**M..00CM!IBWYTBB+ J"9.BDII 	  	H"#3#9#9#;#;<< H H
UU
 g/!f  	'	 	 	 	 	 	 #DMC&&&&&	' 	'r   )NNr   Nrw   r   )NNNNT)r?   rA   rB   r  ri   r  r4   r  r  r   classmethodr  r#  r   r*  r-  r/  r5  staticmethodr  propertyr0   rJ  r   r   r   r   r     s^        IG>F2/22 2 2 2 27 7 7* * *) ) ) )V /1   [,
9 
9 
9% % % %             \ D   X EI6:%' %' %' [%' %' %'r   r   c                       e Zd Zd Zd ZdS )ProcessLocalSetc                 2    t          j        | d            d S )Nc                 *    |                                  S r   )clearr*   s    r   <lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>  s    399;; r   )r   register_after_forkr6   s    r   r4   zProcessLocalSet.__init__  s     '>'>?????r   c                 $    t          |           dfS rw   )r   r6   s    r   
__reduce__zProcessLocalSet.__reduce__  s    Dzz2~r   N)r?   rA   rB   r4   rV  r   r   r   rO  rO    s5        @ @ @    r   rO  c                       e 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dS )r   NTFc                    t           j        5  t           j                            |j        d           }|5t          j                    t                      f}|t           j        |j        <   d d d            n# 1 swxY w Y   |d         | _        |d         | _	        || _
        | j
        j        | _        || _        || _        t          |         d         | _        || _        |t%          j        |          | _        n6| j        | j        j        | _        nt%          j                    j        | _        |r|                                  t          j        | t           j                   d S )Nr   r	   )r   _mutexr:  r   r0   r   ForkAwareLocalrO  _tls_idset_tokenr1   _id_managerr   r|   r   _owned_by_managerr   rz   r   r   r{   _increfrT  _after_fork)	r3   r   r   rA  r{   r   rq   manager_owned	tls_idsets	            r   r4   zBaseProxy.__init__  s    	G 	G!377tLLI  /11?3D3DD	=F	+EM:		G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G aL	
  l;>%&z215 "/#8AADMM]& M2DMM#355=DM 	LLNNN y'<=====s   AA66A:=A:c                 \   t          j        d           t          j                    j        }t          j                    j        dk    r|dt          j                    j        z   z  }|                     | j        j	        | j
                  }t          |d d|f           || j        _        d S )Nzmaking connection to manager
MainThread|r  rl   )r   r   r   r   r#   r   r   r   r]  r0   r   rO   r[  r
   )r3   r#   r   s      r   _connectzBaseProxy._connect   s    
1222&((-#%%*l::C)244999D||DK/|GGt04':::#	r   r   c                    	 	 | j         j        }n[# t          $ rN t          j        dt          j                    j                   |                                  | j         j        }Y nw xY w|	                    | j
        |||f           |                                \  }}|dk    r|S |dk    r|\  }}| j        j        |j                 d         }	| j        j        |_         |	|| j        | j        | j        |          }
|                     |j        | j                  }t)          |d d|j        f           |
S t-          ||          )Nz#thread %r does not own a connectionrE   r   r@  r  rr   )r[  r
   r   r   r   r   r   r#   rh  rF   r^  rG   r_  r  r/   r]  r0   r   r   r   rO   r1   rH   )r3   rJ   rK   rL   r   rM   rN   r   r   r   rC  s              r   _callmethodzBaseProxy._callmethod)  s[   		(9'DD 	( 	( 	(J< /1168 8 8MMOOO9'DDD		( 			48Zt4555yy{{f9MX#NGU/=bAI K/EMIt'w  E <<t}<EEDT4EH;777LtV,,,s    AA('A(c                 .    	 |                      d          S )Nr   rk  r6   s    r   	_getvaluezBaseProxy._getvalueG  s    	 ,,,r   c           
          | j         r!t          j        d| j        j                   d S |                     | j        j        | j                  }t          |d d| j	        f           t          j        d| j        j                   | j
                            | j	                   | j        o| j        j        }t          j        | t          j        | j        | j        || j        | j
        | j        fd          | _        d S )Nz%owned_by_manager skipped INCREF of %rr  rq   z	INCREF %r
   r  )r`  r   r   r]  r1   r   r0   r   rO   r^  r\  addr_  r   r  r   _decrefr[  _close)r3   r   r:   s      r   ra  zBaseProxy._increfM  s    ! 	J>OOOF||DK/|GGtX{333
;///!!!6$-"6m)#+t}e)T[$,8	  r   c                 8   |                     | j                   ||j        t          j        k    rr	 t          j        d| j                    || j        |          }t          |d d| j        f           nF# t          $ r}t          j        d|           Y d }~n"d }~ww xY wt          j        d| j                   |sXt          |d          rJt          j        dt          j                    j                   |j                                         |`d S d S d S )Nz	DECREF %rr  rr   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)discardr1   r   r   r   r   r   r0   rO   r   r8  r   r   r#   r
   r   )r   r{   r:   tlsidsetr   r   r   s           r   rr  zBaseProxy._decrefa  s?   eh =EK5=886
;111wu}g>>>tX{;;;; 6 6 6
11555555556 J>III  	l33 	JF /1168 8 8N  """		 	 	 	s   AA8 8
B!BB!c                     d | _         	 |                                  d S # t          $ r"}t          j        d|z             Y d }~d S d }~ww xY w)Nzincref failed: %s)r_  ra  r   r   r   )r3   r   s     r   rb  zBaseProxy._after_forkz  sf    	/LLNNNNN 	/ 	/ 	/I)A-.........	/s    
AAAc                     i }t                      
| j        |d<   t          | dd          r&| j        |d<   t          t
          | j        | j        |ffS t          t          |           | j        | j        |ffS )Nr{   _isautoFr   )	r   r   r    r=  RebuildProxyrF  r]  r   r   r3   rL   s     r   rV  zBaseProxy.__reduce__  s    +"mDO4E** 	G"nDO T-=tDF F !$ZZd.>EG Gr   c                 *    |                                  S r   )rn  )r3   memos     r   __deepcopy__zBaseProxy.__deepcopy__  s    ~~r   c                 d    dt          |           j        | j        j        t	          |           fz  S )Nz<%s object, typeid %r at %#x>)r   r?   r]  r/   r1   r6   s    r   r@   zBaseProxy.__repr__  s/    .T

#T[%7DBC 	Cr   c                     	 	 |                      d          S # t          $ r t          |           d d         dz   cY S w xY w)Nr@   rj  z; '__str__()' failed>)rk  r   r   r6   s    r   r\   zBaseProxy.__str__  s[    		=##J/// 	= 	= 	=::crc?%<<<<<	=s    $??NNNTF)r?   rA   rB   r:  r   ForkAwareThreadLockrY  r4   rh  rk  rn  ra  rL  rr  rb  rV  r  r@   r\   r   r   r   r   r     s         %T%''F26HM'> '> '> '>R$ $ $ ,.B - - - -<- - -  (   \0/ / /G G G     C C C= = = = =r   r   c                    	 t          t          j                    dd           }|rW|j        |j        k    rGt	          j        d|           d|d<   |j        |j        vr|j        |j                 |j        |j        <   |	                    dd          o"t          t          j                    dd           } | ||fd|i|S )Nr   z*Rebuild a proxy owned by manager, token=%rTrc  rq   _inheritingF)
r    r   r   r0   r   r   r1   r   r~   pop)rb   r   r   rL   r!  rq   s         r   r{  r{    s     W,..0A4HHF +&.EM11
?GGG $_86777 * (2 	4   	EG+--}eDDD  4z99&9D9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 )Nzdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r   execr   r   r=  )r#   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper    s     GnnGtWo&&    C H H6:ddDDDBCF	H 	H 	H 	H TI<--I!I'FD'?s   	 
))c                    	 t           |         d         }|T || j        |          }	 t          |d d| f          }|                                 n# |                                 w xY w|	||j        }|t          j                    j        }t          d| j	        z  |          }	 |	| |||||          }
d|
_
        |
S )Nr	   r  rm   zAutoProxy[%s])rA  r{   rq   rc  T)r|   r0   rO   r   r   r   r   r{   r  r/   rz  )r   r   rA  r{   r   rq   rc  r   r   r  rC  s              r   rF  rF    s     j)!,Gwu}g666	tT=5(CCGJJLLLLDJJLLLL7.")++3o<gFFIIeZ'#=B B BEEMLs   A A(c                       e Zd Zd Zd ZdS )	Namespacec                :    | j                             |           d S r   )rD  updater|  s     r   r4   zNamespace.__init__  s    T"""""r   c                 2   t          | j                                                  }g }|D ]4\  }}|                    d          s|                    |d|           5|                                 | j        j        dd                    |          dS )Nrf   =(, r=   )	r)   rD  r%   
startswithr`   r   r>   r?   r   )r3   r%   ra   r#   r   s        r   r@   zNamespace.__repr__  s    T]((**++  	5 	5KD%??3'' 5tttUU3444		>222DIIdOOOODDr   N)r?   rA   rB   r4   r@   r   r   r   r  r    s7        # # #E E E E Er   r  c                   @    e Zd ZddZd Zd Zd Z eee          ZdS )ValueTc                 "    || _         || _        d S r   )	_typecode_value)r3   r   r   locks       r   r4   zValue.__init__  s    !r   c                     | j         S r   r  r6   s    r   r   z	Value.get  s
    {r   c                     || _         d S r   r  r3   r   s     r   r   z	Value.set  s    r   c                 P    t          |           j        d| j        d| j        dS )Nr  r  r=   )r   r?   r  r  r6   s    r   r@   zValue.__repr__  s*    !$ZZ000$...$+++NNr   NT)	r?   rA   rB   r4   r   r   r@   rM  r   r   r   r   r  r    sc               O O OHS#EEEr   r  c                 ,    t          j         | |          S r   )r   )r   sequencer  s      r   Arrayr    s    ;x***r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )IteratorProxy)__next__rF   throwr   c                     | S r   r   r6   s    r   __iter__zIteratorProxy.__iter__      r   c                 .    |                      d|          S )Nr  rm  r3   rK   s     r   r  zIteratorProxy.__next__  s    
D111r   c                 .    |                      d|          S )NrF   rm  r  s     r   rF   zIteratorProxy.send  s    ---r   c                 .    |                      d|          S )Nr  rm  r  s     r   r  zIteratorProxy.throw      ...r   c                 .    |                      d|          S )Nr   rm  r  s     r   r   zIteratorProxy.close  r  r   N)	r?   rA   rB   r=  r  r  rF   r  r   r   r   r   r  r  
  sd        6I  2 2 2. . ./ / // / / / /r   r  c                   ,    e Zd ZdZddZd Zd Zd ZdS )	AcquirerProxy)acquirereleaseTNc                 @    ||fn||f}|                      d|          S Nr  rm  )r3   blockingr'  rK   s       r   r  zAcquirerProxy.acquire  s,    %o{{Hg3F	4000r   c                 ,    |                      d          S Nr  rm  r6   s    r   r  zAcquirerProxy.release      	***r   c                 ,    |                      d          S r  rm  r6   s    r   r/  zAcquirerProxy.__enter__  r  r   c                 ,    |                      d          S r  rm  r1  s       r   r5  zAcquirerProxy.__exit__!  r  r   )TN)r?   rA   rB   r=  r  r  r/  r5  r   r   r   r  r    sZ        &I1 1 1 1+ + ++ + ++ + + + +r   r  c                   0    e Zd ZdZddZd	dZd ZddZdS )
ConditionProxy)r  r  r   notify
notify_allNc                 0    |                      d|f          S Nr   rm  r&  s     r   r   zConditionProxy.wait'      
333r   r	   c                 0    |                      d|f          S )Nr  rm  )r3   ns     r   r  zConditionProxy.notify)  s    1$///r   c                 ,    |                      d          S )Nr  rm  r6   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n!|                     |            |            }|@|S )Nr   )time	monotonicr   )r3   	predicater'  rN   endtimewaittimes         r   wait_forzConditionProxy.wait_for-  s     	Mn&&0GGGH 	!""T^%5%55q==IIhY[[F  	! r   r   )r	   )r?   rA   rB   r=  r   r  r  r  r   r   r   r  r  %  sd        FI4 4 4 40 0 0 0. . .     r   r  c                   ,    e Zd ZdZd Zd Zd ZddZdS )
EventProxy)r   r   rR  r   c                 ,    |                      d          S )Nr   rm  r6   s    r   r   zEventProxy.is_setB  s    )))r   c                 ,    |                      d          S Nr   rm  r6   s    r   r   zEventProxy.setD      &&&r   c                 ,    |                      d          S )NrR  rm  r6   s    r   rR  zEventProxy.clearF      (((r   Nc                 0    |                      d|f          S r  rm  r&  s     r   r   zEventProxy.waitH  r  r   r   )r?   rA   rB   r=  r   r   rR  r   r   r   r   r  r  @  sZ        2I* * *' ' ') ) )4 4 4 4 4 4r   r  c                   h    e Zd ZdZd	dZd Zd Zed             Zed             Z	ed             Z
dS )
BarrierProxy)__getattribute__r   abortresetNc                 0    |                      d|f          S r  rm  r&  s     r   r   zBarrierProxy.waitN  r  r   c                 ,    |                      d          S )Nr  rm  r6   s    r   r  zBarrierProxy.abortP  r  r   c                 ,    |                      d          S )Nr  rm  r6   s    r   r  zBarrierProxy.resetR  r  r   c                 .    |                      dd          S )Nr  )partiesrm  r6   s    r   r  zBarrierProxy.partiesT  s     2LAAAr   c                 .    |                      dd          S )Nr  )	n_waitingrm  r6   s    r   r  zBarrierProxy.n_waitingW  s     2NCCCr   c                 .    |                      dd          S )Nr  )brokenrm  r6   s    r   r  zBarrierProxy.brokenZ  s     2K@@@r   r   )r?   rA   rB   r=  r   r  r  rM  r  r  r  r   r   r   r  r  L  s        >I4 4 4 4) ) )) ) )B B XBD D XDA A XA A Ar   r  c                   $    e Zd ZdZd Zd Zd ZdS )NamespaceProxy)r  __setattr____delattr__c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   rf   rk  r  )objectr  r3   rI  
callmethods      r   __getattr__zNamespaceProxy.__getattr__a  sO    q6S==**4555,,T=AA
z,sf555r   c                     |d         dk    rt                               | ||          S t                               | d          } |d||f          S )Nr   rf   rk  r  )r  r  r  )r3   rI  r   r  s       r   r  zNamespaceProxy.__setattr__f  sR    q6S==%%dC777,,T=AA
z-#u666r   c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   rf   rk  r  )r  r  r  r  s      r   r  zNamespaceProxy.__delattr__k  sN    q6S==%%dC000,,T=AA
z-#000r   N)r?   rA   rB   r=  r  r  r  r   r   r   r  r  _  sF        BI6 6 6
7 7 7
1 1 1 1 1r   r  c                   V    e Zd ZdZd Zd Z eee          Z ee	j
                  ZdS )
ValueProxy)r   r   c                 ,    |                      d          S )Nr   rm  r6   s    r   r   zValueProxy.gett  r  r   c                 0    |                      d|f          S r  rm  r  s     r   r   zValueProxy.setv  s    x000r   N)r?   rA   rB   r=  r   r   rM  r   rK  typesGenericAlias__class_getitem__r   r   r   r  r  r  sW        I' ' '1 1 1HS#E#E$67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dS )	ListProxyc                 4    |                      d|f           | S )Nr  rm  r  s     r   __iadd__zListProxy.__iadd__  s    E8,,,r   c                 4    |                      d|f           | S )Nr
  rm  r  s     r   r
  zListProxy.__imul__  s    eX...r   N)r?   rA   rB   r  r
  r   r   r   r  r    s2              r   r  	DictProxy)r  r  r  r  r  r  rR  rE  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_asyncr7  AsyncResult)r  r  r  r  r  c                       e Zd Zd Zd ZdS )r  c                     | S r   r   r6   s    r   r/  zPoolProxy.__enter__  r  r   c                 .    |                                   d S r   )r7  r1  s       r   r5  zPoolProxy.__exit__  s    r   N)r?   rA   rB   r/  r5  r   r   r   r  r    s2              r   c                       e Zd ZdS )r   N)r?   rA   rB   r   r   r   r   r     s         r   r   QueueJoinableQueuer   r   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr)   r   r  )r   rH  )rH  c                   >    e Zd Z	 g fdZd Zd Zd Zd Zd Zd Z	dS )	_SharedMemoryTrackerc                 "    || _         || _        d S r   shared_memory_context_namesegment_names)r3   r#   r0  s      r   r4   z_SharedMemoryTracker.__init__  s    .2D+!.Dr   c                     	 t          j        d|dt                                  | j                            |           d S )NzRegister segment  in pid )r   r   r   r0  r`   r3   segment_names     r   register_segmentz%_SharedMemoryTracker.register_segment  sG    DJM<MM688MMNNN%%l33333r   c                     	 t          j        d|dt                                  | j                            |           t          j        |          }|                                 |                                 d S )NzDestroy segment r2  )	r   r   r   r0  r  r   SharedMemoryr   unlink)r3   r4  segments      r   destroy_segmentz$_SharedMemoryTracker.destroy_segment  sw    EJL,LL&((LLMMM%%l333#0>>GMMOOONNr   c                 V    	 | j         d d          D ]}|                     |           d S r   )r0  r:  r3  s     r   r8  z_SharedMemoryTracker.unlink  sA    J $ 2111 5 3 3$$\22223 3r   c                     t          j        d| j        j         dt	                                  |                                  d S )NzCall z.__del__ in )r   r   r>   r?   r   r8  r6   s    r   __del__z_SharedMemoryTracker.__del__  s=    JNt~6NNFHHNNOOOKKMMMMMr   c                     | j         | j        fS r   r.  r6   s    r   r7   z!_SharedMemoryTracker.__getstate__  s    3T5GHHr   c                      | j         |  d S r   )r4   r9   s     r   r;   z!_SharedMemoryTracker.__setstate__  s    DM5!!!!r   N)
r?   rA   rB   r4   r5  r:  r8  r=  r7   r;   r   r   r   r,  r,    s        5/1 	/ 	/ 	/ 	/	4 	4 	4
	 	 		3 	3 	3
	 	 		I 	I 	I	" 	" 	" 	" 	"r   r,  c                   J    e Zd Zej        g dz   Zd Zd Zd Zd Zd Z	d Z
dS )	SharedMemoryServer)track_segmentrelease_segmentlist_segmentsc                 "   t          j        | g|R i | | j        }t          |t                    rt          j        |          }t          d| dt                                 | _	        t          j        dt                                  d S )Nshm_rf   z"SharedMemoryServer started by pid )ri   r4   r0   rT   rx   osfsdecoder,  r   shared_memory_contextr   r   )r3   rK   kwargsr0   s       r   r4   zSharedMemoryServer.__init__  s    OD242226222lG'5)) /+g..$%@G%@%@fhh%@%@AA &JFFHHFFGGGGGr   c                    	 t          | j        |         d         d          r
| j        |d<   t          j        | ||g|R i |S )Nrj  _shared_memory_proxyrI  )r8  ry   rI  ri   rk   )r3   rI   r/   rK   rJ  s        r   rk   zSharedMemoryServer.create	  s\    M
 t}V,R02HII M262L./=q&B4BBB6BBBr   c                 l    	 | j                                          t                              | |          S r   )rI  r8  ri   rj   r   s     r   rj   zSharedMemoryServer.shutdown  s.    O&--///??4+++r   c                 <    	 | j                             |           d S r   )rI  r5  r3   rI   r4  s      r   rB  z SharedMemoryServer.track_segment  s"    M&77EEEEEr   c                 <    	 | j                             |           d S r   )rI  r:  rO  s      r   rC  z"SharedMemoryServer.release_segment  s%    K&66|DDDDDr   c                     	 | j         j        S r   )rI  r0  r   s     r   rD  z SharedMemoryServer.list_segments!  s    &-;;r   N)r?   rA   rB   ri   r   r4   rk   rj   rB  rC  rD  r   r   r   rA  rA    s        FFFG	H 	H 	H	C 	C 	C	, 	, 	,
	F 	F 	F	E 	E 	E
	< 	< 	< 	< 	<r   rA  c                   2    e Zd Z	 eZd Zd Zd Zd Zd Z	dS )r   c                     t           j        dk    rddlm} |                                 t          j        | g|R i | t          j        | j	        j
         dt                                  d S )Nposixr	   )resource_trackerz created by pid )rG  r#    rU  ensure_runningr   r4   r   r   r>   r?   r   )r3   rK   rJ  rU  s       r   r4   zSharedMemoryManager.__init__3  s    w'!! /..... //111 7777777J$.1MM688MMNNNNNr   c                 d    t          j        | j        j         dt	                                  d S )Nz.__del__ by pid )r   r   r>   r?   r   r6   s    r   r=  zSharedMemoryManager.__del__?  s/    J$.1MM688MMNNNNNr   c                    	 | j         j        t          j        k    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                  S )Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr  )r   r   r   r   r   r   r   rW   r  r  r   r   r   r6   s    r   r  zSharedMemoryManager.get_serverB  s    N{ EM11;$55&'KLLL[&%.88&'JKKK&,33DK4EFFH H H<< $t/?A A Ar   c                 .   	 |                      | j        | j                  5 }t          j        d d|          }	 t          |d d|j        f           n(# t          $ r}|                                 |d }~ww xY w	 d d d            n# 1 swxY w Y   |S )Nr  T)rk   sizerB  )	r   r   r   r   r7  rO   r#   BaseExceptionr8  )r3   r[  r   smsr   s        r   r7  z SharedMemoryManager.SharedMemoryO  s    4dmT]CC t#0dNNNT438+FFFF$   JJLLLG G               Js4   B
AB

A:A55A::B

BBc                 <   	 |                      | j        | j                  5 }t          j        |          }	 t          |d d|j        j        f           n-# t          $ r }|j        	                                 |d }~ww xY w	 d d d            n# 1 swxY w Y   |S )Nr  rB  )
r   r   r   r   ShareableListrO   shmr#   r\  r8  )r3   r  r   slr   s        r   r_  z!SharedMemoryManager.ShareableList[  s    FdmT]CC t"0::T426;.IIII$   FMMOOOG J               Is4   BAB
B!A<<BBBBN)
r?   rA   rB   rA  r  r4   r=  r  r7  r_  r   r   r   r   r   '  st        	 %
	O 
	O 
	O	O 	O 	O	A 	A 	A
	 
	 
	
	 
	 
	 
	 
	r   r  r  )U__all__r   r   r  r   queuer  r  rG  r   r   r   rV  r
   contextr   r   r   r   r   r   r   r   	HAS_SHMEMr`   ImportErrorr   rJ  
view_typesr,   	view_typer  r   rO   rH   r   rX   rc   rg   ri   r   r   r   XmlListener	XmlClientr|   r   r   rO  r   r{  r  rF  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,  rA  r   r   r   r   <module>rl     s   A
@
@ 


          				                         @ @ @ @ @ @ @ @ @ @                        * INN())))	    III2 2 2 	 5; - - -NN4MNNN
   3 3IIy/2222zM M M M MF M M M. &(b ) ) ) )I I IC C C C C) C C C	 	 	A A AG* G* G* G* G*V G* G* G*\
    F    #Z%67):+?@ t' t' t' t' t'& t' t' t't    c   m= m= m= m= m= m= m= m=f: : :* )+    , 8<7<   :
E 
E 
E 
E 
E 
E 
E 
E
 
 
 
 
F 
 
 
+ + + +/ / / / /I / / /
+ 
+ 
+ 
+ 
+I 
+ 
+ 
+    ]   6	4 	4 	4 	4 	4 	4 	4 	4A A A A A9 A A A&1 1 1 1 1Y 1 1 1&8 8 8 8 8 8 8 8 o 0          M+ (  	 
 	 
 ]< *  

 k ,  
 !" $ $         	 	 	 	 	+ 	 	 	   Wek * * *   _ek 2 2 2   Wioz : : :   VY^] ; ; ;   Wio} = = =   [)"5} E E E   ')C"$ $ $   [)"5~ F F F   Y	 1< @ @ @   VTY	 2 2 2   VT9 - - -   VT9 - - -   WeZ 0 0 0   WeZ 0 0 0   [)^ < < <   Z=  N N N   ]%  8 8 8  Q"" "" "" "" "" "" "" ""J*< *< *< *< *<V *< *< *<Z> > > > >k > > > > >gQ Qs   A8 8BB