
    Vi;                     &   S r SSKrSSKrSSKrSSK7  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
   SS
KJr  \R                  " 5          SSKJr   SSKJr  \R$                  " S5      rSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"Sr#Sr$Sr% " S S\5      r& " S S\&5      r' " S S\'5      r( " S  S!\'5      r) " S" S#\&5      r* " S$ S%\+5      r, " S& S'\,\-5      r. " S( S)\5      r/ " S* S+\05      r1 " S, S-\,\-5      r2 " S. S/\-5      r3S0 r4 " S1 S2\,\35      r5 " S3 S4\,\65      r7SAS5 jr8 " S6 S7\-5      r9 " S8 S9\+5      r: " S: S;\5      r;SBS< jr< " S= S>\+5      r= " S? S@\>5      r?g! \ a     GN%f = f! \ a    S r GN.f = f!   Sr GN2= f)Czr
Collection of postgres-specific extensions, currently including:

* Support for hstore, a key/value type storage
    N)*)
ColumnBase)
Expression)Node)NodeList)__deprecated__)__exception_wrapper__)compat)register_hstorec                     g N )cgloballys     i/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/playhouse/postgres_ext.pyr   r      s        )Jsonpeeweez@>z?&?z?|->z||z<@z&&z@@-#>c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )_LookupNode:   c                 B   > Xl         X l        [        [        U ]  5         g r   )nodepartssuperr   __init__)selfr   r   	__class__s      r   r    _LookupNode.__init__;   s    	
k4)+r   c                 `    [        U 5      " U R                  [        U R                  5      5      $ r   )typer   listr   r!   s    r   clone_LookupNode.clone@   s     Dz$))T$**%566r   c                 V    [        U R                  R                  [        U 5      45      $ r   )hashr"   __name__idr'   s    r   __hash___LookupNode.__hash__C   s     T^^,,bh788r   )r   r   )	r,   
__module____qualname____firstlineno__r    r(   r.   __static_attributes____classcell__r"   s   @r   r   r   :   s    ,
79 9r   r   c                      ^  \ rS rSrSU 4S jjrS r\R                  SS j5       rS r	S r
S rS rS	 rS
 rS rSrU =r$ )_JsonLookupBaseG   c                 8   > [         [        U ]  X5        X0l        g r   )r   r7   r    _as_json)r!   r   r   as_jsonr"   s       r   r    _JsonLookupBase.__init__H   s    ot-d:r   c                 v    [        U 5      " U R                  [        U R                  5      U R                  5      $ r   )r%   r   r&   r   r:   r'   s    r   r(   _JsonLookupBase.cloneL   s&    Dz$))T$**%5t}}EEr   c                     Xl         g r   r:   )r!   r;   s     r   r;   _JsonLookupBase.as_jsonO   s    r   c                     [        U[        5      (       d  [        U5      n[        U R	                  S5      [
        R                  U5      $ NT)
isinstancer   r   r   r;   OPCONCAT)r!   rhss     r   concat_JsonLookupBase.concatS   s4    #t$$s)C$,,t,bii==r   c                 T    [        U R                  S5      [        [        U5      5      $ rC   )r   r;   JSONB_CONTAINSr   r!   others     r   contains_JsonLookupBase.containsX   s    $,,t,nd5kJJr   c                 T    [        U R                  S5      [        [        U5      5      $ rC   )r   r;   JSONB_CONTAINED_BYr   rL   s     r   contained_by_JsonLookupBase.contained_by[   s    $,,t,.@$u+NNr   c           	      d    [        U R                  S5      [        [        [	        U5      SS95      $ NTFunpack)r   r;   JSONB_CONTAINS_ANY_KEYValuer&   r!   keyss     r   contains_any_JsonLookupBase.contains_any^   s,    LL"$t*U+- 	-r   c           	      d    [        U R                  S5      [        [        [	        U5      SS95      $ rU   )r   r;   JSONB_CONTAINS_ALL_KEYSrY   r&   rZ   s     r   contains_all_JsonLookupBase.contains_alld   s,    LL#$t*U+- 	-r   c                 B    [        U R                  S5      [        U5      $ rC   )r   r;   JSONB_CONTAINS_KEYr!   keys     r   has_key_JsonLookupBase.has_keyj   s    $,,t,.@#FFr   c                 8    [        U R                  S5      U5      $ rC   )JsonPathr;   rZ   s     r   path_JsonLookupBase.pathm   s    T*D11r   r@   )FT)r,   r0   r1   r2   r    r(   r   copyr;   rH   rN   rR   r\   r`   rf   rj   r3   r4   r5   s   @r   r7   r7   G   sQ     F 
YY   >
KO--G2 2r   r7   c                        \ rS rSrS rS rSrg)
JsonLookupq   c                 `    [        U R                  U R                  U/-   U R                  5      $ r   )ro   r   r   r:   r!   values     r   __getitem__JsonLookup.__getitem__r   s$    $))TZZ5'%94==IIr   c                 J   UR                  U R                  5        U R                  S S  H#  nUR                  S5      R                  U5        M%     U R                  (       a@  UR                  U R                  (       a  SOS5      R                  U R                  S   5        U$ )Nr   z->>)sqlr   r   literalr:   )r!   ctxparts      r   __sql__JsonLookup.__sql__u   sp    		JJsODKK!!$' $::gdmmd7c$**R.!
r   r   N)r,   r0   r1   r2   rt   r|   r3   r   r   r   ro   ro   q   s    J	r   ro   c                       \ rS rSrS rSrg)ri      c                     UR                  U R                  5      R                  U R                  (       a  SOS5      R                  [	        SSR                  [        [        U R                  5      5      -  5      5      $ )Nr   z#>>z{%s},)	rx   r   ry   r:   rY   joinmapstrr   r!   rz   s     r   r|   JsonPath.__sql__   sR    TYYE:U6CHHSdjj-A$BBCD	Fr   r   N)r,   r0   r1   r2   r|   r3   r   r   r   ri   ri      s    Fr   ri   c                   0    \ rS rSr\S 5       rS rS rSrg)ObjectSlice   c                 R   [        U[        5      (       a+  UR                  =(       d    SUR                  =(       d    S/nO[[        U[        5      (       a  U/nOB[        U[
        5      (       a  UnO*UR                  S5       Vs/ s H  n[	        U5      PM     nnU " X5      $ s  snf )Nr   :)rD   slicestartstopintr   split)clsr   rs   r   is        r   createObjectSlice.create   s    eU##[[%AuzzQ7Es##GEt$$E &+[[%56%5SV%5E64 7s   B$c                 X   UR                  U R                  5        [        U R                  [        5      (       a;  UR                  S5      R                  U R                  5      R                  S5        U$ UR                  SSR                  S U R                   5       5      -  5        U$ )N[]z[%s]r   c              3   >   #    U  H  n[        US -   5      v   M     g7f)   N)r   ).0ps     r   	<genexpr>&ObjectSlice.__sql__.<locals>.<genexpr>   s     )Ij#a!e**js   )rx   r   rD   r   r   ry   r   r   s     r   r|   ObjectSlice.__sql__   s{    		djj$''KK  ,44S9 
 KK)Idjj)I!IIJ
r   c                 ,    [         R                  X5      $ r   r   r   rr   s     r   rt   ObjectSlice.__getitem__       !!$..r   r   N)	r,   r0   r1   r2   classmethodr   r|   rt   r3   r   r   r   r   r      s    
  
 /r   r   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )IndexedFieldMixin   GINc                 R   > UR                  SS5        [        [        U ]  " U0 UD6  g )NindexT)
setdefaultr   r   r    r!   argskwargsr"   s      r   r    IndexedFieldMixin.__init__   s(    '4(/@@r   r   )r,   r0   r1   r2   default_index_typer    r3   r4   r5   s   @r   r   r      s    A Ar   r   c                   n  ^  \ rS rSrSr\SSS4U 4S jjrSU 4S jjrS rS	 r	S
 r
S rS rS r\" \R                  5      r\" \R"                  5      r\" \R&                  5      r\" \R*                  5      r\" \R.                  5      r\" \R2                  5      r\R8                  rS rS rS rSr U =r!$ )
ArrayField   TNr   Fc                    > U" S0 U=(       d    0 D6U l         X0l        X@l        U R                   R                  U l        [        [
        U ]  " U0 UD6  g )Nr   )_ArrayField__field
dimensionsconvert_values
field_typer   r   r    )r!   field_classfield_kwargsr   r   r   r   r"   s          r   r    ArrayField.__init__   sG    ":l&8b:$,,,11j$($9&9r   c                 p   > [         [        U ]  XU5      nU R                  R                  USU-  S5        U$ )Nz
__array_%sF)r   r   bindr   )r!   modelnameset_attributeretr"   s        r   r   ArrayField.bind   s6    J*5F%!4e<
r   c                 |    U R                   R                  U5      n[        U[        SU R                  -  5      4SS9$ )Nz[] glue)r   ddl_datatyper   SQLr   )r!   rz   	data_types      r   r   ArrayField.ddl_datatype   s6    LL--c2	Ct(>$?@rJJr   c                     Ub  [        U[        5      (       a  U$ U R                  (       a0  U R                  U R                  R
                  XR                  5      $ [        U[        5      (       a  U$ [        U5      $ r   )rD   r   r   _processr   db_valuer   r&   rr   s     r   r   ArrayField.db_value   s[    =Jud33L  ==!6!6OO&ud335DeDr   c                     U R                   (       aR  UbO  U R                  R                  n[        U[        5      (       a  U R                  X!U R                  5      $ U" U5      $ U$ r   )r   r   python_valuerD   r&   r   r   )r!   rs   convs      r   r   ArrayField.python_value   sP    5#4<<,,D%&&}}T$//BBE{"Lr   c                     US-  nUS:X  a  U Vs/ s H
  oA" U5      PM     sn$ U Vs/ s H  o@R                  XU5      PM     sn$ s  snf s  snf )Nr   r   )r   )r!   r   rs   r   vs        r   r   ArrayField._process   sQ    a
?%*+UDGU++@EF1MM$:6FF ,Fs
   AAc                 ,    [         R                  X5      $ r   r   rr   s     r   rt   ArrayField.__getitem__   r   r   c                    ^  U 4S jnU$ )Nc                 0   > [        U T[        X5      5      $ r   )r   
ArrayValue)r!   rG   ops     r   innerArrayField._e.<locals>.inner   s    dB
4(=>>r   r   )r   r   s   ` r   _eArrayField._e   s    	?r   c                 6    [        U [        [        X5      5      $ r   )r   	ACONTAINSr   r!   itemss     r   rN   ArrayField.contains   s    $	:d+BCCr   c                 6    [        U [        [        X5      5      $ r   )r   ACONTAINS_ANYr   r   s     r   r\   ArrayField.contains_any       $z$/FGGr   c                 6    [        U [        [        X5      5      $ r   )r   ACONTAINED_BYr   r   s     r   rR   ArrayField.contained_by   r   r   )__fieldr   r   r   rl   )"r,   r0   r1   r2   passthroughIntegerFieldr    r   r   r   r   r   rt   r   rE   EQ__eq__NE__ne__GT__gt__GTE__ge__LT__lt__LTE__le__Fieldr.   rN   r\   rR   r3   r4   r5   s   @r   r   r      s    K#/de:
KEG/ YFYFYFZFYFZF~~HDHH Hr   r   c                        \ rS rSrS rS rSrg)r      c                     Xl         X l        g r   fieldrs   )r!   r   rs   s      r   r    ArrayValue.__init__   s    

r   c                     UR                  [        U R                  SS95      R                  S5      R                  U R                  R                  U5      5      $ )NFrV   z::)rx   rY   rs   ry   r   r   r   s     r   r|   ArrayValue.__sql__   sA    U4::e45TZZ,,S12	4r   r   N)r,   r0   r1   r2   r    r|   r3   r   r   r   r   r      s    4r   r   c                       \ rS rSrSrSrg)DateTimeTZField   TIMESTAMPTZr   Nr,   r0   r1   r2   r   r3   r   r   r   r  r     s    Jr   r  c                   r    \ rS rSrSr\R                  rS rS rS r	S r
S rS rS	 rS
 rS rS rS rSrg)HStoreFieldi  HSTOREc                 6    [        U [        [        U5      5      $ r   )r   HKEYrY   rd   s     r   rt   HStoreField.__getitem__  s    $eCj11r   c                 ,    [         R                  U 5      $ r   )fnakeysr'   s    r   r[   HStoreField.keys      xx~r   c                 ,    [         R                  U 5      $ r   )r  avalsr'   s    r   valuesHStoreField.values  r  r   c                 ,    [         R                  U 5      $ r   )r  hstore_to_matrixr'   s    r   r   HStoreField.items  s    ""4((r   c                 P    [         R                  U [        [        U5      SS95      $ NFrV   )r  r   rY   r&   )r!   r   s     r   r   HStoreField.slice  s    xxeDJu=>>r   c                 ,    [         R                  X5      $ r   )r  existrd   s     r   existsHStoreField.exists  s    xx""r   c                 ,    [         R                  X5      $ r   )r  definedrd   s     r   r"  HStoreField.defined  s    zz$$$r   c                 $    [        U [        U5      $ r   )r   HUPDATE)r!   datas     r   updateHStoreField.update  s    $..r   c                 P    [         R                  U [        [        U5      SS95      $ r  )r  deleterY   r&   rZ   s     r   r*  HStoreField.delete  s    yyuT$Z>??r   c                     [        U[        5      (       a  [        USS9n[        U [        U5      $ [        U[
        [        45      (       a  [        USS9n[        U [        U5      $ [        U [        U5      $ r  )	rD   dictrY   r   HCONTAINS_DICTr&   tupleHCONTAINS_KEYSHCONTAINS_KEY)r!   rs   rG   s      r   rN   HStoreField.contains   se    eT""e,CdNC88e}--e,CdNC88$u55r   c           	      F    [        U [        [        [        U5      SS95      $ r  )r   HCONTAINS_ANY_KEYrY   r&   rZ   s     r   r\   HStoreField.contains_any)  s'    $ 15d@E4G H 	Hr   r   N)r,   r0   r1   r2   r   r   r.   rt   r[   r  r   r   r  r"  r'  r*  rN   r\   r3   r   r   r   r	  r	    sI    J~~H2)?#%/@6Hr   r	  c                   R   ^  \ rS rSrSrSrS
U 4S jjrS rS rS r	U 4S jr
S	rU =r$ )	JSONFieldi.  JSONjsonc                 j   > U=(       d    [         R                  U l        [        [        U ]  " U0 UD6  g r   )r9  dumpsr   r7  r    )r!   r;  r   r   r"   s       r   r    JSONField.__init__2  s'    (djj
i'88r   c                     Uc  U$ [        U[        5      (       d%  [        U R                  U5      U R                  5      $ U$ r   )rD   r   Castr;  _json_datatyperr   s     r   r   JSONField.db_value6  s:    =L%&&

5)4+>+>??r   c                     [        X/5      $ r   )ro   rr   s     r   rt   JSONField.__getitem__=  s    $((r   c                     [        X5      $ r   )ri   rZ   s     r   rj   JSONField.path@  s    ##r   c                 j   > [        U[        5      (       d  [        U5      n[        [        U ]  U5      $ r   )rD   r   r   r   r7  rH   )r!   rs   r"   s     r   rH   JSONField.concatC  s+    %&&KEY,U33r   )r;  r   )r,   r0   r1   r2   r   r?  r    r   rt   rj   rH   r3   r4   r5   s   @r   r7  r7  .  s+    JN9)$4 4r   r7  c                 ,    [        U [        S5      4SS9$ )Nz::jsonbr   r   )r   r   )r   s    r   
cast_jsonbrH  I  s    T3y>*44r   c                   X    \ rS rSrSrSr\R                  rS rS r	S r
S rS rS	 rS
rg)BinaryJSONFieldiM  JSONBjsonbc                     [        U[        5      (       a  [        U [        U5      $ [        U [        [	        U5      5      $ r   )rD   r7  r   rK   r   rL   s     r   rN   BinaryJSONField.containsR  s1    eY''dNE::$U<<r   c                 H    [        [        U 5      [        [        U5      5      $ r   )r   rH  rQ   r   rL   s     r   rR   BinaryJSONField.contained_byW  s    *T*,>ULLr   c           	      X    [        [        U 5      [        [        [	        U5      SS95      $ r  )r   rH  rX   rY   r&   r   s     r   r\   BinaryJSONField.contains_anyZ  s(    t"$u+e,. 	.r   c           	      X    [        [        U 5      [        [        [	        U5      SS95      $ r  )r   rH  r_   rY   r&   r   s     r   r`   BinaryJSONField.contains_all`  s(    t#$u+e,. 	.r   c                 6    [        [        U 5      [        U5      $ r   )r   rH  rc   rd   s     r   rf   BinaryJSONField.has_keyf  s    *T*,>DDr   c           	      X    [        [        U 5      [        [        [	        U5      SS95      $ r  )r   rH  JSONB_REMOVErY   r&   r   s     r   removeBinaryJSONField.removei  s(    t$u+e,. 	.r   r   N)r,   r0   r1   r2   r   r?  r   r.   rN   rR   r\   r`   rf   rY  r3   r   r   r   rJ  rJ  M  s5    JN~~H=
M..E.r   rJ  c                   :    \ rS rSrSr\R                  rSS jrSrg)TSVectorFieldip  TSVECTORNc                     Ub  X!4OU4nU(       a  [         R                  O[         R                  n[        U [        U" U6 5      $ r   )r  plainto_tsquery
to_tsqueryr   TS_MATCH)r!   querylanguageplainparamsfuncs         r   matchTSVectorField.matcht  s9    &.&:("%*r!!$$-88r   r   NF)	r,   r0   r1   r2   r   r   r.   rg  r3   r   r   r   r\  r\  p  s    J~~H9r   r\  c                     Ub  X!4OU4nUb  X 4OU 4n[        [        R                  " U6 [        [        R                  " U6 5      $ r   )r   r  to_tsvectorra  r`  )r   rb  rc  re  field_paramss        r   Matchrm  z  sL    "*"6hUHF(0(<H$5(L
%
v   r   c                       \ rS rSrSrSrg)IntervalFieldi  INTERVALr   Nr  r   r   r   ro  ro    s    Jr   ro  c                   J    \ rS rSrSrSS jrS r\S 5       rS r	S r
S	 rS
rg)FetchManyCursori  )cursor
array_size	exhaustediterableNc                 |    Xl         U=(       d    UR                  U l        SU l        U R	                  5       U l        g ri  )rs  itersizert  ru  row_genrv  )r!   rs  rt  s      r   r    FetchManyCursor.__init__  s+    $7r   c                     U R                   (       a8  U R                   R                  (       d   U R                   R                  5         g g g ! [         a     g f = fr   )rs  closedclose	Exceptionr'   s    r   __del__FetchManyCursor.__del__  sE    ;;t{{11!!#  2;  s   A 
AAc                 .    U R                   R                  $ r   )rs  descriptionr'   s    r   r  FetchManyCursor.description  s    {{&&&r   c                 8    U R                   R                  5         g r   )rs  r}  r'   s    r   r}  FetchManyCursor.close  s    r   c              #      #      U R                   R                  U R                  5      nU(       d   U R                  5         g U H  nUv   M	     MM  ! U R                  5         f = f7fr   )rs  	fetchmanyrt  r}  )r!   rowsrows      r   ry  FetchManyCursor.row_gen  sX     	{{,,T__= JJL  CI  	  JJLs!   A'-A A'A A$$A'c                     U R                   (       a  g  [        U R                  5      $ ! [         a
    SU l          g f = frC   )ru  nextrv  StopIterationr'   s    r   fetchoneFetchManyCursor.fetchone  s6    >>	"&& 	"!DN	"s   ) ==)rt  rs  ru  rv  r   )r,   r0   r1   r2   	__slots__r    r  propertyr  r}  ry  r  r3   r   r   r   rr  rr    s4    AI' ' '	"r   rr  c                   0    \ rS rSrSS jrS rS rS rSrg)	ServerSideQueryi  Nc                 *    Xl         X l        S U l        g r   )rb  rt  _cursor_wrapper)r!   rb  rt  s      r   r    ServerSideQuery.__init__  s    
$#r   c                 8    U R                   R                  U5      $ r   )rb  r|   r   s     r   r|   ServerSideQuery.__sql__  s    zz!!#&&r   c                     U R                   c%  U R                  U R                  R                  5        [	        U R                   R                  5       5      $ r   )r  _executerb  	_databaseiteriteratorr'   s    r   __iter__ServerSideQuery.__iter__  s>    'MM$**../D((11344r   c                     U R                   cE  UR                  U R                  SU R                  S9nU R                  R	                  U5      U l         U R                   $ )NT)named_cursorrt  )r  executerb  rt  _get_cursor_wrapper)r!   databasers  s      r   r  ServerSideQuery._execute  sV    '%%djjt15 & BF#'::#A#A&#ID ###r   )r  rt  rb  r   )	r,   r0   r1   r2   r    r|   r  r  r3   r   r   r   r  r    s    $
'5
$r   r  c              #   V   #    Uc  U R                   n[        XS9nU H  nUv   M	     g 7f)N)rt  )r  r  )rb  r  rt  server_side_queryr  s        r   
ServerSider    s.     ??'E 	 !s   ')c                   "    \ rS rSrSrS r\rSrg)_empty_objecti  r   c                     gri  r   r'   s    r   __nonzero___empty_object.__nonzero__  s    r   N)r,   r0   r1   r2   r  r  __bool__r3   r   r   r   r  r    s    IHr   r  c                   R   ^  \ rS rSrU 4S jrU 4S jrSS jrS	S jrS
S jrSr	U =r
$ )PostgresqlExtDatabasei  c                    > UR                  SS5      U l        UR                  SS5      U l        [        [        U ]  " U0 UD6  g )Nr   Fserver_side_cursors)pop_register_hstore_server_side_cursorsr   r  r    r   s      r   r    PostgresqlExtDatabase.__init__  s@     &

+<e D$*JJ/De$L!#T3TDVDr   c                 b   > [         [        U ]  5       nU R                  (       a
  [	        USS9  U$ )NT)r   )r   r  _connectr  r   )r!   connr"   s     r   r  PostgresqlExtDatabase._connect  s+    *D:<  D40r   c                 |   Ub  [        S5        U R                  5       (       a-  U R                  (       a  U R                  5         O[	        S5      eU(       aB  U R
                  R                  R                  [        [        R                  " 5       5      SS9nU$ U R
                  R                  R                  5       $ )N,"commit" has been deprecated and is a no-op.z&Error, database connection not opened.T)r   withhold)r   	is_closedautoconnectconnectInterfaceError_stater  rs  r   uuiduuid1)r!   commitr  curss       r   rs  PostgresqlExtDatabase.cursor  s    IJ>>$%MNN;;##**DJJL0A48 + :DK{{&&((r   c                 0   Ub  [        S5        U R                  " S0 UD6nUR                  U5      R                  5       u  pxU=(       d)    U R                  =(       a    US S R                  5       S:H  nU R                  XxUS9n	U(       a  [        X5      n	U	$ )Nr     selectr  r   )r   get_sql_contextrx   rb  r  lowerexecute_sqlrr  )
r!   rb  r  r  rt  context_optionsrz   rx   re  rs  s
             r   r  PostgresqlExtDatabase.execute  s    IJ""5_5ggen**,# E(A(A )D(+BQ8(C 	!!#L!I$V8Fr   c                     Ub  [        S5        [        R                  X45        [           U R	                  US9nUR                  X=(       d    S5        S S S 5        U$ ! , (       d  f       W$ = f)Nr  r  r   )r   loggerdebugr	   rs  r  )r!   rx   re  r  r  rs  s         r   r  !PostgresqlExtDatabase.execute_sql  s^    IJc]#"[[l[;FNN3"- #  #" s   *A
A.)r  r  NN)NFN)NNN)r,   r0   r1   r2   r    r  rs  r  r  r3   r4   r5   s   @r   r  r    s"    E
) r   r  r   r  )@__doc__r9  loggingr  r   r   r   r   r   r   r	   psycopg2cffir
   registerImportErrorpsycopg2.extrasr   r   	getLoggerr  r.  r0  r1  r4  r  r%  r   r   r   ra  rK   rQ   rc   rX   r_   JSONB_EXISTSrX  
JSONB_PATHr   r7   ro   ri   r   objectr   r   r   r   DateTimeFieldr  r	  r7  rH  rJ  	TextFieldr\  rm  ro  rr  r  r  r  PostgresqlDatabaser  r   r   r   <module>r     s  
         ! (	#
OO/$
 
		8	$  
	    

9* 
9'2k '2T  F F/+ /4A ACH"E CHL	4 	4m *H#U *HZ4 465 .'  .F9%y 9 E ("f ("V$d $,F .. .E  		
  
Ds/   E, E9 F	 ,E65E69	FF	F