
    Qiʃ                     T   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mZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ 	 d dlmZ dZg dZd	gZ d
Z!dZ" G d d      Z#ed   Z$ edi deed   eee%ef      f   de%dee%ee%e&f   f   de%dee'   de%deee%ef      de%deed   eee%ef      f   de$de%de%dee%e%f   dee%   ded    d!e&d"e%ee%e&f   e%eee%e&f      ee%e&f   eee%   eed   eee%ef      f   ee   e%ed#   ee%e&f   ee%e&f   d$d%&      Z( ed'd(d(      Z) ejT                  d)      Z+d*Z,d+ Z-d, Z.d]d-Z/ G d. d/      Z0e
r ed0      Z1ee0e1f   Z2d1 Z3d2 Z4d3d4d5e5fd6Z6d7 Z7	 	 	 d^d8Z8	 d]d9Z9d: Z:d; Z;d< Z<	 	 d_d=Z=d> Z>d? Z?	 	 	 	 d`d@Z@ eAeBdA      ZCeCrdB ZDndC ZD	 	 	 	 dadDZE	 d]dEZFdF ZGdG ZHdH ZId^dIZJd]dJZKdK ZLdL ZMdM ZNdN ZOdO ZPdP ZQdQ ZRdR ZSdS ZTd]dTZUdU ZVdV ZWdW ZXdbdXZYdY ZZ	 dcdZZ[d[ Z\d\ Z]y# e$ r dZY w xY w)d    N)datetime)	FrameTypeTracebackType)TYPE_CHECKINGAnyDictIteratorListLiteralOptionalPatternSetTuple	TypedDictTypeVarUnioncast)ExceptionArgExcInfo)BaseExceptionGroup   )z(?i).*password.*z(?i).*secret.*z(?i).*passwd.*z(?i).*pwd.*z(?i).*api_key.*z(?i).*apikey.*z(?i).*auth.*z(?i).*credentials.*z(?i).*privatekey.*z(?i).*private_key.*z(?i).*token.*z(?i).*aws_access_key_id.*z(?i).*_passz	(?i)sk_.*z(?i).*jwt.*z^__.*z-$$_posthog_redacted_based_on_masking_rules_$$i P  c                   (    e Zd ZefdZd Zd Zd Zy)VariableSizeLimiterc                      || _         d| _        y )Nr   max_sizecurrent_size)selfr   s     S/mnt/e/genesis-system/.venv/lib/python3.12/site-packages/posthog/exception_utils.py__init__zVariableSizeLimiter.__init__G   s         c                 :    | j                   |z   | j                  k  S N)r   r   r   sizes     r   can_addzVariableSizeLimiter.can_addK   s      4'4==88r!   c                 .    | xj                   |z  c_         y r#   )r   r$   s     r   addzVariableSizeLimiter.addN   s    T!r!   c                 4    | j                   | j                  z
  S r#   r   )r   s    r   get_remaining_spacez'VariableSizeLimiter.get_remaining_spaceQ   s    }}t0000r!   N)__name__
__module____qualname__"DEFAULT_TOTAL_VARIABLES_SIZE_LIMITr    r&   r(   r*    r!   r   r   r   F   s     B 9"1r!   r   )fatalcriticalerrorwarninginfodebugEventbreadcrumbsvaluescheck_in_idcontextsdistdurationenvironmenterrorsevent_id	exceptionlevelloggermessagemodulesmonitor_slugplatformpythonprofilerelease)check_intransaction)requestserver_namespans
stacktracestart_timestampstatusthreads	timestamprK   typeuser_metrics_summaryF)totali     z^[a-zA-Z0-9/+=]*$z
[Filtered]c                 0    | t         z
  j                         S r#   )epochtotal_secondsvalues    r   to_timestampr^      s    EM((**r!   c                 $    | j                  d      S )Nz%Y-%m-%dT%H:%M:%S.%fZ)strftimer\   s    r   format_timestampra      s    >>122r!   c                 \    | t        j                         } nt        |       } | d   d} d| iS )z+Creates a hint with the exc info filled in.Nr   exc_info)sysrc   exc_info_from_errorrc   s    r   event_hint_with_exc_inforg      s9     <<>&x0{!!r!   c                   P    e Zd ZdZdZd Zd Zed        Zed        Z	ed        Z
y)	AnnotatedValuezA
    Meta information for a data field in the event payload.
    r]   metadatac                      || _         || _        y r#   rj   )r   r]   rk   s      r   r    zAnnotatedValue.__init__   s    
 r!   c                     t        |t              sy| j                  |j                  k(  xr | j                  |j                  k(  S )NF)
isinstanceri   r]   rk   )r   others     r   __eq__zAnnotatedValue.__eq__   s4    %0zzU[[(LT]]enn-LLr!   c                 &    t        ddddggi      S )zxThe value was removed because it could not be parsed. This is done for request body values that are not json nor a form. remz!rawxrj   ri   clss    r   removed_because_raw_dataz'AnnotatedValue.removed_because_raw_data   s,     

 
	
r!   c                 &    t        ddddggi      S )zThe actual value was removed because the size of the field exceeded the configured maximum size (specified with the max_request_body_size sdk option)rr   rs   !configrt   rj   ru   rv   s    r   removed_because_over_size_limitz.AnnotatedValue.removed_because_over_size_limit   s,     !

 
	
r!   c                 .    t        t        dddggi      S )zHThe actual value was removed because it contained sensitive information.rs   rz   srj   )ri   SENSITIVE_DATA_SUBSTITUTErv   s    r   +substituted_because_contains_sensitive_dataz:AnnotatedValue.substituted_because_contains_sensitive_data   s,     +!

 
	
r!   N)r+   r,   r-   __doc__	__slots__r    rp   classmethodrx   r{   r   r/   r!   r   ri   ri      sU     &I!
M 
 
 
 
 
 
r!   ri   Tc                 :    t        | dd       xs t        | dd       S )Nr-   r+   getattrrv   s    r   get_type_namer      s    3-Oj$1OOr!   c                 *    t        | dd       }|dvr|S y )Nr,   )Nbuiltins__builtins__r   )rw   mods     r   get_type_moduler      s!    
#|T
*C
44
r!   framer   returnc                     	 | j                   d   }|j                  d      ry	 dD ]  }	 | j                  |   r y y# t        t        f$ r Y +w xY w# t
        $ r Y 8w xY w)Nr+   zsentry_sdk.T)__traceback_hide____tracebackhide__F)	f_globals
startswithAttributeErrorKeyErrorf_locals	Exception)r   r   	flag_names      r   should_hide_framer     s    ooj)>>-( )
 ? 		~~i( )  H%   		s     > AAA	AAc              #   f   K   | }|)t        |j                        s| |j                  }|(y y wr#   )r   tb_frametb_next)tbtb_s     r   iter_stacksr     s1     
C
/ .Ikk /s   ,11c                    d}d }|0t        |d      r$	 |j                  |      }||j	                         }|	 t        j                  |       }|sg d g fS t        d||z
        }t        |dz   |z   t        |            }		 ||| D 
cg c]  }
t        |
j                  d      |        }}
t        ||   j                  d      |      }||dz   |	 D 
cg c]  }
t        |
j                  d      |        }}
|||fS # t        t        f$ r d }Y w xY w# t        t        f$ r g d g fcY S w xY wc c}
w c c}
w # t        $ r g d g fcY S w xY w)N   
get_sourcer   rX   z
)
max_length)hasattrr   ImportErrorIOError
splitlines	linecachegetlinesOSErrormaxminlenstrip_stringstrip
IndexError)filenamelinenor   loadermodulecontext_linessource
source_strlower_boundupper_boundlinepre_contextcontext_linepost_contexts                 r   get_lines_from_filer     s    MFgfl;	**62J !**,F~	 ''1F 4|a-/0Kfqj=0#f+>K {62
 F+
C
 
 $F6N$8$8$@ZX 
k:
 F+
C
 
 L,667 W% 	J	 ! 	 tR<	 



  4|sR   D  D D; #D1++D; #D69D;  DDD.-D.1
D; ;EEc                    	 | j                   j                  }	 | j                  d   }	 | j                  d   }|dz
  }||rt	        |||||      S g d g fS # t        $ r d }Y Kw xY w# t        $ r g d g fcY S w xY w# t        $ r d }Y Pw xY w)Nr+   
__loader__rX   )r   r   )f_codeco_filenamer   r   r   )r   	tb_linenomax_value_lengthabs_pathr   r   r   s          r   get_source_contextr   K  s    <<++,. ]Fh"f.vf
 	
 tR<    4|  s3   A A' A; A$#A$'A87A8;B	B	c                 N    	 t        |       S # t        $ r t        |       cY S w xY wr#   )strr   	safe_reprr\   s    r   safe_strr   e  s+     5z   s   
 $$c                 8    	 t        |       S # t        $ r Y yw xY w)Nz<broken repr>)reprr   r\   s    r   r   r   m  s#    E{ s   
 	c                    |r| s|S 	 |j                  d      r|d d }| j                  dd      d   }|| k(  rt        j                  j	                  |      S t
        j                  |   j                  }|s|S |j                  |j                  t        j                  d      d   d      d   j                  t        j                        S # t        $ r |cY S w xY w)Nz.pyc.rX   r      )endswithsplitospathbasenamerd   rD   __file__rsplitseplstripr   )r   r   base_modulebase_module_paths       r   filename_for_moduler   u  s    6V$}Hll3*1-& 77##H--;;{3<<O~~.55bffa@CQGKRRFF
 	
  s   AC  C 8AC CCc                    t        | dd       }|sd }d }n,| j                  j                  }| j                  j                  }	 | j                  d   }|| j                  }dt        ||      xs d |rt        j                  j                  |      nd |xs d||d}t        | ||      \  |d<   |d<   |d<   |S # t
        $ r d }Y sw xY w)	Nr   r+   rG   z	<unknown>)rF   r   r   functionr   r   r   r   r   )r   r   r   co_namer   r   f_linenor   r   r   abspathr   )r   r   r   r   r   r   r   rvs           r   serialize_framer     s     UHd+F<<++<<'', NN	 '9AT19BGGOOH-t+
B ASy*A=B}r.)2n+= I'  s   B7 7CCc                     t        | dd       S )Nerrnor   )	exc_values    r   	get_errnor     s    9gt,,r!   c                 X    t        | dd      xs t        | dd      xs | }t        |      S )NrC   rr   detail)r   r   )r   rC   s     r   get_error_messager     s;     		9b) 	9h+	  Gr!   c                 ~   i }|r|j                         nddd|d<   |||d   d<   |t        |      }nd}|5|d   j                  di       j                  di       j                  d	|       |||d   d
<   |dk(  }	|	s|||d   d<   d|d   d<   |	rd|d   vrd|d   d<   t        duxr t	        |t              }
|
rd|d   d<   t        |       |d<   t        |       |d<   t        |      |d<   t        }t        |      D cg c]$  }t        |j                  |j                  |      & }}|r|dd|d<   |S c c}w )zJ
    Creates a dict that goes into the events `exception.values` list
    genericT)rT   handled	mechanismNexception_idmetar   numberr   r   	parent_idchainedrT   is_exception_groupr   r]   )r   r   raw)framesrT   rO   )copyr   
setdefaultr   rn   r   r   r   DEFAULT_MAX_VALUE_LENGTHr   r   r   r   )exc_typer   r   r   r   r   r   exception_valuer   is_root_exceptionr   r   r   s                r   !single_exception_from_error_tupler     s    O%	I$+O K  7C$^4)$$//;FFR	

*Xu
%17$X.$)!64=$[1/8$V,V?;+GG/8$V,+47 J%= =A$%9: / 9OH+H5OF0;OG/ b/  	KKll-	
F  395(I%s   )D:__suppress_context__c              #   h  K   | \  }}}g }t               }||t        |      |vr|||f |j                  |       |j                  t        |             |j                  r|j
                  }n|j                  }|y t        |      }|}t        |dd       }||t        |      |vry y y y y y w)N__traceback__)	setidappendr(   r   	__cause____context__rT   r   )rc   r   r   r   seen_exceptionsseen_exception_idscauses          r   walk_exception_chainr	  
  s     "*)R U  %9%77Ir))
 ""9-""2i=1--!++!--}E{HI6B)  %9%77 & !7 & !s   B)B2,B2c              #      K   |  y wr#   r/   rf   s    r   r	  r	  *  s     s   c                    t        | ||||||      }|g}|}|dz  }t        |d      xr |j                  }	|	rh|xr t        |d      xr |j                  du}
|
r|j                  }t	        t        |      |t        |dd      ||d      \  }}|j                  |       ng|xr t        |d      xr |j                  du}|rE|j                  }t	        t        |      |t        |dd      ||d      \  }}|j                  |       |xr t        |d	      }|rZt        |j                        D ]B  \  }}t	        t        |      |t        |dd      |||d
|z        \  }}|j                  |       D ||fS )zx
    Creates the list of exceptions.
    This can include chained exceptions and exceptions from an ExceptionGroup.
    )r   r   r   r   r   r   r   rX   r   r  Nr   )r   r   r   r   r   r   r  
exceptionszexceptions[%s])r   r   r   r  exceptions_from_errorrT   r   extendr  	enumerater  )r   r   r   r   r   r   r   parentr  should_supress_contextexception_has_causer  child_exceptionsexception_has_contentcontextr   idxes                     r   r  r  /  s    /!F JIAL 		12Uy7U7U    0	;/0##4/ 	
 ''E/De5/48#)"0,\+ ./  2	=12%%T1 	
 !++G/Dg!7OT:#)$0,\+ ./ #Gwy,'G	 4 45 
	0FC/Da1ot4#)#'#-0,\+ ./
	0 *%%r!   c           	          | \  }}}t         d uxr t        |t               }|rt        ||||dd      \  }}n3g }t        |       D ]#  \  }}}|j	                  t        ||||             % |j                          |S )Nr   )r   r   r   r   r   r   )r   rn   r  r	  r  r   reverse)rc   r   r   r   r   r   _r  s           r   exceptions_from_error_tupler    s    
 'Hi+47 J%= /
J 
';H'E 	#Hi1(Ir9U	
 r!   c                 T    	 t        |       S # t        $ r t        |       dd cY S w xY w)NrX   r   )r   UnicodeDecodeErrorr   r\   s    r   	to_stringr    s1    !5z !E{1R  !s   
 ''c              #      K   d| v r| d    d| v r)| d   j                  d      xs dD ]  }d|v s|d     d| v r*| d   j                  d      xs dD ]  }d|v s|d     y y w)NrO   rR   r8   r/   r@   )get)eventthreadr@   s      r   iter_event_stacktracesr#    s     uL!!EI&**84: 	+Fv%\**	+ e{+//9?R 	.Iy(--	. s   /A*,A*A*c              #   h   K   t        |       D ]   }|j                  d      xs dD ]  }|  " y w)Nr   r/   )r#  r   )r!  rO   r   s      r   iter_event_framesr%    s<     ,U3 
^^H-3 	EK	s   02c                 b    t        |       D ]   }t        |j                  d      |||       " | S )Nr   )in_app_excludein_app_includeproject_root)r#  set_in_app_in_framesr   )r!  r'  r(  r)  rO   s        r   handle_in_appr+    s:    ,U3 

NN8$))%		

 Lr!   c                    | sy | D ]  }|j                  d      }||j                  d      }t        ||      rd|d<   :t        ||      rd|d<   L|j                  d      }|`t        |      rd|d<   qt        ||      s~d|d<    | S )Nin_appr   TFr   )r   _module_in_list_is_external_source_is_in_project_root)r   r'  r(  r)  r   current_in_appr   r   s           r   r*  r*    s     8,%8$ 6>2"E(O 6>2#E(O 99Z(x(#E(Ox6"E(O;> Mr!   c                     t        | t              rt        | d      S t        | t              r&t	        |       dkD  r| d   d uxr t        | d   d      S y)N__posthog_exception_capturedrX   F)rn   BaseExceptionr   tupler   )r2   s    r   exception_is_already_capturedr6    s\    %'u<== 
E5	!c%j1nQxt# 
!H4)
 	
 r!   c                     t        | t              rt        | dd       t        | d|       y t        | t              r6t	        |       dkD  r'| d   !t        | d   dd       t        | d   d|       y y y y )Nr3  T__posthog_exception_uuidrX   )rn   r4  setattrr5  r   )r2   uuids     r   mark_exception_as_capturedr;  	  su    %'5t<148 
E5	!c%j1n8E!H<dCE!H8$?   '5	!r!   c                    t        | t              rt        |       dk(  r| \  }}}n|t        | t              rU	 t	        |        t        | dd       }|t        |       }| }nCt        j                         \  }}}|| ur'd }| }t        |       }nt        dt        |       z        |||f}t        rt        t        |      }|S # t
        $ r Y w xY w)N   r   z,Expected Exception object to report, got %s!)rn   r5  r   r4  construct_artificial_tracebackr   r   rT   rd   rc   
ValueErrorr   r   r   )r2   r   r   r   rc   s        r   re   re     s    %CJ!O"')R	E=	)	*51 UOT2>E{HI&)lln#Hi%!	; G$u+UVV)R(H *O/  		s   B? ?	C
Cc                 F   t        | dd       y d}g }	 	 t        j                  |      }|dz  }|j	                  |       -# t        $ r Y nw xY w|j                          d }|D ].  }t        j                  |||j                  |j                        }0 t        | d|       y )Nr   r   rX   )r   rd   	_getframer?  r  r  typesr   f_lastir   r9  )r  depthr   r   r   s        r   r>  r>  7  s    q/4(4EF
	MM%(EQJE 	e   		
 NN	B K  UEMM5>>JK A#s   A 	AAc                 T    | y|sy|D ]  }|| k(  s| j                  |dz         s y y)NFr   Tr   )nameitemsitems      r   r.  r.  P  s=    | 4<4??4#:6 r!   c                 6    t        j                  d|       d u}|S )Nz [\\/](?:dist|site)-packages[\\/])research)r   external_sources     r   r/  r/  _  s%     			5x@L  r!   c                 .    |y| j                  |      ryy)NFTrF  )r   r)  s     r   r0  r0  h  s!     <(r!   c                 \    | j                  d      d|dz
   j                  dd      }|dz   S )zd
    Truncate a UTF-8-encodable string to the last full codepoint so that it fits in max_bytes.
    utf-8Nr=  ignore)r>   ...)encodedecode)string	max_bytes	truncateds      r   _truncate_by_bytesrX  t  s8    
 g&Q7>>wx>XIur!   c                 b    	 t        | j                  d            S # t        t        f$ r Y y w xY w)NrP  )r   rS  UnicodeEncodeErrorr  r\   s    r   _get_size_in_bytesr[  ~  s3    5<<()) 23 s    ..c                     | s| S |t         }t        |       }t        |       }|||kD  rt        | |      }n|||kD  r| d |dz
   dz   }n| S t	        ||xs |dd|dz
  |ggd      S )Nr=  rR  z!limitrt   )r   rs   rj   )r   r[  r   rX  ri   )r]   r   	byte_size	text_sizetruncated_values        r   r   r     s    -
"5)IE
IZ!7,UJ?		9z#9 0*q.1E9)	sJNJ?@
 r!   c                     g }| D ]'  }	 |j                  t        j                  |             ) |S # t        $ r Y 7w xY wr#   )r  rK  compiler   )patternscompiledpatterns      r   _compile_patternsre    sK    H 	OOBJJw/0
 O  		s   $1	==c                 8    |D ]  }|j                  |       s y y)NTF)rL  )rG  rb  rd  s      r   _pattern_matchesrg    s%     >>$ r!   c                    |s| S t        | t              r^i }| j                         D ]G  \  }}t        |t              st        |      n|}t	        ||      r
t
        ||<   9t        ||      ||<   I |S t        | t        t        f      r*| D cg c]  }t        ||       }} t        |       |      S t        | t              rt	        | |      rt
        S | S | S c c}w r#   )
rn   dictrH  r   rg  CODE_VARIABLES_REDACTED_VALUE_mask_sensitive_datalistr5  rT   )r]   compiled_maskresultkvkey_strrI  masked_itemss           r   rk  rk    s    %KKM 	CDAq$.q#$6c!fAG79q	0MBq		C 	ED%=	)NSTd,T=ATTtE{<((	E3	E=100 Us   Cc                    	 | d}nt        | t              rt        |       }nt        | t        t        f      r9t        t        |             }|j                  |      sy |j                  |       | S t        | t              r|rt        | |      rt        }n$| }n!t        | |      }t        j                  |      }t        |      |kD  r|d |dz
   dz   }t        |      }|j                  |      sy |j                  |       |S # t        $ r 	 t        |       }t        |      |kD  r|d |dz
   dz   }t        |      }|j                  |      sY y |j                  |       |cY S # t        $ r 	 dt        |       j                    d}t        |      }|j                  |      sY Y y |j                  |       |cY cY S # t        $ r< d}t        |      }|j                  |      sY Y Y y |j                  |       |cY cY cY S w xY ww xY ww xY w)NNoner=  rR  <>z<unserializable object>)rn   boolr   intfloatr   r&   r(   rg  rj  rk  jsondumpsr   r   rT   r+   )	r]   limiterr   rm  rn  result_sizemasked_valuefallbackfallback_sizes	            r   _serialize_variable_valuer    s   6 =Ft$ZFU|,c%j/K??;/KK$Ls#!1%!G6/}ELZZ-Fv;#,j1n-5F&k{+K   	 %[F6{Z' 0*q.1E9f+K??;/KK$M 	  tE{334A6 #H}5M*  4 #H}5M* 	  s   AD D 2A>D 1D 	HA E%E%"H%	H/5F>$H'F>9H:H>'H%H&H)H<H>HHHHc                 V    t        | t        d       t        t        t        t
        f      S r#   )rn   rT   rw  rx  ry  r   r\   s    r   _is_simple_typer    s    ed4j$UC@AAr!   c                    |g }|g }t        |      }t        |      }	 | j                  j                         }i }i }	|j	                         D ](  \  }
}t        |
|      rt        |      r|||
<   $||	|
<   * i }i ||	}t        t        |j                                     t        t        |	j                                     z   }|D ]g  }
||
   }t        |
|      r<t        }t        |      }|j                  |      s |S |j                  |       |||
<   Pt        ||||      }| |S |||
<   i |S # t        $ r i cY S w xY wr#   )re  r   r   r   rH  rg  r  rl  sortedkeysrj  r   r&   r(   r  )r   r|  mask_patternsignore_patternsr   rm  compiled_ignore
local_varssimple_varscomplex_varsrG  r]   rn  all_varsordered_namesredacted_valueredacted_size
serializeds                     r   serialize_code_variablesr  
  s    %m4M'8O^^((*
 KL!'') 'eD/25! %K!&L' F.+..H 0 0 234tF<CTCTCV<W7XXM &D-0:N/M??=1 M KK&)F4L2w
MJ ! M &F4L!&$ MM  	s   D4 4EEc                 @    	 t        | |||       y # t        $ r Y y w xY wr#   )attach_code_variables_to_framesr   )all_exceptionsrc   r  r  s       r   #try_attach_code_variables_to_framesr  @  s,    'Hm_	
  s    	c           	      0   |\  }}}|y t        t        |            }|sy t               }| D ]g  }	|	j                  d      }
|
rd|
vr|
d   }t	        ||      D ]9  \  }}|j                  d      st        |j                  |||d      }|s5||d<   ; i y )NrO   r   r-  r   )r  r  r   code_variables)rl  r   r   r   zipr  r   )r  rc   r  r  r   r   	traceback	tb_framesr|  r@   rO   serialized_framesserialized_frametb_item	variabless                  r   r  r  K  s     &."Hi[+,I!#G# ?	]]<0
XZ7&x0),->	)J 	?%g#''10  + /I 5> !12	??r!   r#   )NNN)NN)NNNN)Nr   r   N)r   N)NNr   )^rz  r   r   rK  rd   rB  r   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   posthog.argsr   r   r   r   r   r   $DEFAULT_CODE_VARIABLES_MASK_PATTERNS&DEFAULT_CODE_VARIABLES_IGNORE_PATTERNSrj  r.   r   LogLevelStrr   objectry  r6   rZ   ra  BASE64_ALPHABETr~   r^   ra   rg   ri   r   	Annotatedr   r   rw  r   r   r   r   r   r   r   r   r   r   r   r   r   HAS_CHAINED_EXCEPTIONSr	  r  r  r  r#  r%  r+  r*  r6  r;  re   r>  r.  r/  r0  rX  r[  r   re  rg  rk  r  r  r  r  r  r/   r!   r   <module>r     s     	 	 
   *   " /+   ( $$ +3 & O %. "1 1 NO0tHtDcN33
0 	s	0
 	Dd3;//00 	0 	HUO0 	s0 	$tCH~&0 	C0 	THtDcN33
0  	!0$ 	#%0( 	3)0* 	4S>+0. 	/00 	GH%102 	6304 	3506 V$d3;'(K
 $3- HtDcN33
 h'12S&[! f-_0b g4	n 	q! "**12( +
3
	"A
 A
H Ana'(IP
[ T $ +b 4 4 "J-
 AH !,BC 7@ W&x B!.
$N
@B$2	:07 tB
 JN3l#?K!  s   H H'&H'