
    PiP                     @    d dl mZmZmZ ddlmZ  G d d          ZdS )    )CallableListOptional   )c_astc            	       h   e Zd ZU dZeed<   eed<   dkdeddfdZdefdZ	d	e
j        defd
Zd	ee
j                 defdZde
j        defdZde
j        defdZde
j        defdZde
j        defdZde
j        defdZde
j        defdZde
j        defdZi ddddddddddddd dd!d"d#d"d$d"d%d"d&d'd(d'd)d*d+d*d,d-d.d-d/d-iZde
j        defd0Zde
j         defd1Z!de
j"        defd2Z#de
j        defd3Z$dkde
j%        d4edefd5Z&de
j'        defd6Z(de
j)        defd7Z*de
j+        defd8Z,de
j-        defd9Z.de
j/        defd:Z0de
j1        defd;Z2de
j3        defd<Z4de
j5        defd=Z6de
j7        defd>Z8de
j9        defd?Z:de
j;        defd@Z<de
j=        defdAZ>de
j?        defdBZ@de
jA        defdCZBde
jC        defdDZDde
jE        defdEZFde
jG        defdFZHde
jI        defdGZJde
jK        defdHZLde
jM        defdIZNde
jO        defdJZPde
jQ        defdKZRde
jS        defdLZTde
jU        defdMZVde
jW        defdNZXde
jY        defdOZZde
j[        defdPZ\de
j]        defdQZ^de
j_        defdRZ`de
ja        defdSZbde
jc        defdTZdde
je        defdUZfde
jg        defdVZhde
ji        defdWZjde
jk        defdXZlde
jm        defdYZnde
jo        defdZZpde
ja        e
je        z  e
j1        z  d[edefd\Zqd]ere
j                 defd^Zsd]ere
j5                 defd_Ztdkde
j        d`edefdaZude
j%        defdbZvg dcfde
j        ddere
j                 deedefdfZwde
j        dgexe
j        gef         defdhZyde
j        defdiZzde
j        defdjZ{dS )l
CGeneratorzUses the same visitor pattern as c_ast.NodeVisitor, but modified to
    return a value from each visit method, using string accumulation in
    generic_visit.
    indent_levelreduce_parenthesesFreturnNc                 "    d| _         || _        dS )zConstructs C-code generator

        reduce_parentheses:
            if True, eliminates needless parentheses on binary operators
        r   N)r
   r   )selfr   s     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pycparser/c_generator.py__init__zCGenerator.__init__   s     "4    c                     d| j         z  S N )r
   )r   s    r   _make_indentzCGenerator._make_indent"   s    T&&&r   nodec                 ^    d|j         j        z   } t          | || j                  |          S )Nvisit_)	__class____name__getattrgeneric_visit)r   r   methods      r   visitzCGenerator.visit%   s0    DN338wtVT%788>>>r   c                 r     |dS d                      fd|                                D                       S )N c              3   H   K   | ]\  }}                     |          V  d S Nr   ).0c_namecr   s      r   	<genexpr>z+CGenerator.generic_visit.<locals>.<genexpr>-   s1      JJYVQ4::a==JJJJJJr   )joinchildren)r   r   s   ` r   r   zCGenerator.generic_visit)   s<    <277JJJJ$--//JJJJJJr   nc                     |j         S r"   )valuer   r*   s     r   visit_ConstantzCGenerator.visit_Constant/   s	    wr   c                     |j         S r"   namer-   s     r   visit_IDzCGenerator.visit_ID2   s	    vr   c                 2    d}|j         r|d|j         z   z  }|S )Nz#pragmar   )string)r   r*   rets      r   visit_PragmazCGenerator.visit_Pragma5   s&    8 	"3>!C
r   c                 |    |                      |j                  }|dz   |                     |j                  z   dz   S )N[])_parenthesize_unless_simpler1   r   	subscript)r   r*   arrrefs      r   visit_ArrayRefzCGenerator.visit_ArrayRef;   s9    11!&99|djj555;;r   c                     |                      |j                  }||j        z   |                     |j                  z   S r"   )r:   r1   typer   field)r   r*   srefs      r   visit_StructRefzCGenerator.visit_StructRef?   s6    //77af}tzz!'2222r   c                     |                      |j                  }|j        |                     |j                  nd}|dz   |z   dz   S )Nr    ())r:   r1   argsr   )r   r*   frefrF   s       r   visit_FuncCallzCGenerator.visit_FuncCallC   sJ    //77%&V%7tzz!&!!!RczD 3&&r   c                 8   |j         xdk    r d|                     |j                   dS xdk    r  |                     |j                  }| dS dk    r|                     |j                  }| dS 	 |                     |j                  }|j          | S )Nsizeofzsizeof(rE   zp++z++zp--z--)opr   exprr:   )r   r*   operands      r   visit_UnaryOpzCGenerator.visit_UnaryOpH   s    d 7AF!3!36666::16BB!~~~%::16BB!~~~%::16BB$))))r   z||r   z&&r   |   ^   &   z==   z!=>   z>=<z<=z>>   z<<+   -*	   /%c                                            j         fd          }                      j         fd          }| dj         d| S )Nc                                          |           pFj        o?t          | t          j                  o%j        | j                 j        j                 k     S r"   _is_simple_noder   
isinstancer   BinaryOpprecedence_maprK   dr*   r   s    r   <lambda>z+CGenerator.visit_BinaryOp.<locals>.<lambda>|   s^    $$Q'' K* Kq%.11K'-1DQT1JJ	 r   c                                          |           pFj        o?t          | t          j                  o%j        | j                 j        j                 k     S r"   rc   rh   s    r   rj   z+CGenerator.visit_BinaryOp.<locals>.<lambda>   s^    $$Q'' J* Jq%.11J'-0CAD0II	 r   r   )_parenthesize_ifleftrightrK   )r   r*   lval_strrval_strs   ``  r   visit_BinaryOpzCGenerator.visit_BinaryOpp   s     ((F    
 
  ((G    
 
 ..QT..H...r   c                     |                      |j        d           }|                     |j                   d|j         d| S )Nc                 6    t          | t          j                  S r"   )re   r   
Assignment)r*   s    r   rj   z-CGenerator.visit_Assignment.<locals>.<lambda>   s    
1e.> ? ? r   r   )rl   rvaluer   lvaluerK   )r   r*   rp   s      r   visit_AssignmentzCGenerator.visit_Assignment   sP    ((H??
 
 **QX&&:::::::r   c                 6    d                     |j                  S r   )r(   namesr-   s     r   visit_IdentifierTypezCGenerator.visit_IdentifierType   s    xx   r   c                    |xt           j        d x\    d|                     |          z   dz   S  xt           j        d x\   n xt           j        d x\   n  n d|                     |          z   dz   S 	 |                     |          S )N {}rD   rE   )r   InitListr   ExprListCompoundr-   s     r   _visit_exprzCGenerator._visit_expr   s    !!!!!!!TZZ]]*S00 "!!!!!!!!$4EN$4$4$4$4$4$4$4$4$4$4TZZ]]*S00zz!}}$r   no_typec                     |r|j         n|                     |          }|j        r |d|                     |j                  z   z  }|j        r |d|                     |j                  z   z  }|S )Nz :  = )r1   _generate_declbitsizer   initr   )r   r*   r   ss       r   
visit_DeclzCGenerator.visit_Decl   sw     9AFF4#6#6q#9#99 	/AI....A6 	2))!&1111Ar   c                                            |j        d                   }t          |j                  dk    r4|dd                     fd|j        dd          D                       z   z  }|S )Nr   r   , c              3   F   K   | ]}                     |d           V  dS )T)r   N)r   r$   declr   s     r   r'   z,CGenerator.visit_DeclList.<locals>.<genexpr>   sD       " "8<d33" " " " " "r   )r   declslenr(   r   r*   r   s   `  r   visit_DeclListzCGenerator.visit_DeclList   s    JJqwqz""qw<<!		 " " " "@A" " "    A r   c                     d}|j         r |d                    |j                   dz   z  }||                     |j                  z  }|S )Nr    r   )storager(   _generate_typer?   r   s      r   visit_TypedefzCGenerator.visit_Typedef   sM    9 	+!)$$s**A	T  (((r   c                     d|                      |j        d          z   dz   }|dz   |                     |j                  z   S )NrD   Femit_declnamerE   r   )r   to_typer:   rL   r   s      r   
visit_CastzCGenerator.visit_Cast   sE    $%%aiu%EEEK3w99!&AAAAr   c                     g }|j         D ]*}|                    |                     |                     +d                    |          S Nr   exprsappendr   r(   r   r*   visited_subexprsrL   s       r   visit_ExprListzCGenerator.visit_ExprList   Q    G 	< 	<D##D$4$4T$:$:;;;;yy)***r   c                     g }|j         D ]*}|                    |                     |                     +d                    |          S r   r   r   s       r   visit_InitListzCGenerator.visit_InitList   r   r   c                 0    |                      |d          S )Nenumr0   _generate_struct_union_enumr-   s     r   
visit_EnumzCGenerator.visit_Enum   s    ///???r   c                 \    d                     |                     |j                            S )Nz_Alignas({}))formatr   	alignmentr-   s     r   visit_AlignaszCGenerator.visit_Alignas   s$    $$TZZ%<%<===r   c                     |j         s.d                    |                                 |j                  S d                    |                                 |j        |                     |j                             S )Nz{indent}{name},
)indentr1   z{indent}{name} = {value},
)r   r1   r,   )r,   r   r   r1   r   r-   s     r   visit_EnumeratorzCGenerator.visit_Enumerator   s    w 
	&--((**V .   
 177((**Vjj)) 8   r   c                                           |j                  }d _                              |j                  }|j        r7d                     fd|j        D                       }|dz   |z   dz   |z   dz   S |dz   |z   dz   S )Nr   ;
c              3   B   K   | ]}                     |          V  d S r"   r#   )r$   pr   s     r   r'   z+CGenerator.visit_FuncDef.<locals>.<genexpr>   s-      !G!GA$**Q--!G!G!G!G!G!Gr   
)r   r   r
   bodyparam_declsr(   )r   r*   r   r   knrdeclss   `    r   visit_FuncDefzCGenerator.visit_FuncDef   s    zz!&!!zz!&!!= 	-zz!G!G!G!G!G!G!GGGH$;)E1D84??$;%,,r   c                    d}|j         D ]z}|xt          j        d x\    ||                     |          z  }/ t          j        d x\   ||                     |          dz   z  }] 	 ||                     |          dz   z  }{|S )Nr    r|   r   r   )extr   FuncDefr   Pragma)r   r*   r   r   s       r   visit_FileASTzCGenerator.visit_FileAST   s    5 	1 	1C$U]______C(AA %\^^^^^C4//AA $C500AAr   c                 
                                      dz   } xj        dz  c_        |j        r)|d                     fd|j        D                       z  } xj        dz  c_        |                                  dz   z  }|S )N{
rP   r    c              3   B   K   | ]}                     |          V  d S r"   _generate_stmt)r$   stmtr   s     r   r'   z,CGenerator.visit_Compound.<locals>.<genexpr>   s1      MMt,,T22MMMMMMr   z}
)r   r
   block_itemsr(   r   s   `  r   visit_CompoundzCGenerator.visit_Compound   s    %'Q= 	NMMMMq}MMMMMMAQ	T  5((r   c                 ~    d|                      |j                  z   dz   |                      |j                  z   dz   S )NrD   z){r~   )r   r?   r   r-   s     r   visit_CompoundLiteralz CGenerator.visit_CompoundLiteral  s8    TZZ'''$.AF1C1CCcIIr   c                     dS )N;r|   r-   s     r   visit_EmptyStatementzCGenerator.visit_EmptyStatement  s    sr   c                 P     d                      fd|j        D                       S )Nr   c              3   B   K   | ]}                     |          V  d S r"   r#   )r$   paramr   s     r   r'   z-CGenerator.visit_ParamList.<locals>.<genexpr>
  s/      AAuE**AAAAAAr   )r(   paramsr-   s   ` r   visit_ParamListzCGenerator.visit_ParamList	  s,    yyAAAAAAAAAAr   c                 ^    d}|j         r |d|                     |j                   z   z  }|dz   S )Nr   r   r   )rL   r   r   s      r   visit_ReturnzCGenerator.visit_Return  s7    6 	*tzz!&))))A3wr   c                     dS )Nzbreak;r|   r-   s     r   visit_BreakzCGenerator.visit_Break  s    xr   c                     dS )Nz	continue;r|   r-   s     r   visit_ContinuezCGenerator.visit_Continue  s    {r   c                     d|                      |j                  z   dz   }|d|                      |j                  z   dz   z  }|d|                      |j                  z   dz   z  }|S )NrD   z) ? z) : rE   )r   condiftrueiffalser   s      r   visit_TernaryOpzCGenerator.visit_TernaryOp  sn    $""16***V3	S4##AH---66	S4##AI...44r   c                    d}|j         r||                     |j                   z  }|dz  }||                     |j        d          z  }|j        r9||                                 dz   z  }||                     |j        d          z  }|S )Nzif ()
T
add_indentzelse
)r   r   r   r   r   r   r   s      r   visit_IfzCGenerator.visit_If  s    6 	$AF###A	U
	T  d ;;;9 	A""$$x//A$$QY4$@@@Ar   c                 J   d}|j         r||                     |j                   z  }|dz  }|j        r |d|                     |j                  z   z  }|dz  }|j        r |d|                     |j                  z   z  }|dz  }||                     |j        d          z  }|S )Nzfor (r   r   r   Tr   )r   r   r   nextr   r   r   s      r   	visit_ForzCGenerator.visit_For)  s    6 	$AF###A	S6 	*tzz!&))))A	S6 	*tzz!&))))A	U
	T  D 999r   c                     d}|j         r||                     |j                   z  }|dz  }||                     |j        d          z  }|S )Nwhile (r   Tr   )r   r   r   r   r   s      r   visit_WhilezCGenerator.visit_While7  sV    6 	$AF###A	U
	T  D 999r   c                     d}||                      |j        d          z  }||                                 dz   z  }|j        r||                     |j                  z  }|dz  }|S )Nzdo
Tr   r   z);)r   r   r   r   r   r   s      r   visit_DoWhilezCGenerator.visit_DoWhile?  sq    	T  D 999	T  9,,6 	$AF###A	T	r   c                     d}||                      |j                  z  }|j        r"|dz  }||                      |j                  z  }|dz  }|S )Nz_Static_assert(,rE   )r   r   messager   s      r   visit_StaticAssertzCGenerator.visit_StaticAssertH  sX    	TZZ9 	'HAAI&&&A	Sr   c                     d|                      |j                  z   dz   }||                     |j        d          z  }|S )Nzswitch (r   Tr   )r   r   r   r   r   s      r   visit_SwitchzCGenerator.visit_SwitchQ  sC    AF+++e3	T  D 999r   c                     d|                      |j                  z   dz   }|j        D ]}||                     |d          z  }|S )Nzcase :
Tr   )r   rL   stmtsr   r   r*   r   r   s       r   
visit_CasezCGenerator.visit_CaseV  sT    djj(((50G 	< 	<D$$Td$;;;AAr   c                 R    d}|j         D ]}||                     |d          z  }|S )Nz	default:
Tr   )r   r   r   s       r   visit_DefaultzCGenerator.visit_Default\  s<    G 	< 	<D$$Td$;;;AAr   c                 L    |j         dz   |                     |j                  z   S )Nr   )r1   r   r   r-   s     r   visit_LabelzCGenerator.visit_Labelb  s#    v~ 3 3AF ; ;;;r   c                     d|j         z   dz   S )Nzgoto r   r0   r-   s     r   
visit_GotozCGenerator.visit_Gotoe  s    #%%r   c                     dS )Nz...r|   r-   s     r   visit_EllipsisParamzCGenerator.visit_EllipsisParamh  s    ur   c                 .    |                      |d          S )Nstructr   r-   s     r   visit_StructzCGenerator.visit_Structk  s    //8<<<r   c                 6    |                      |j                  S r"   )r   r?   r-   s     r   visit_TypenamezCGenerator.visit_Typenamen  s    ""16***r   c                 .    |                      |d          S )Nunionr   r-   s     r   visit_UnionzCGenerator.visit_Unionq  s    //7;;;r   c                     d}|j         D ]H}t          |t          j                  r|d|j         z   z  }*|d|                     |          z   dz   z  }I|d|                     |j                  z   z  }|S )Nr    .r8   r9   r   )r1   re   r   IDr   r   rL   )r   r*   r   r1   s       r   visit_NamedInitializerz!CGenerator.visit_NamedInitializert  s    F 	2 	2D$)) 2S49_$S4::d+++c11	UT%%af----r   c                 ,    |                      |          S r"   r   r-   s     r   visit_FuncDeclzCGenerator.visit_FuncDecl~  s    ""1%%%r   c                 0    |                      |d          S NFr   r  r-   s     r   visit_ArrayDeclzCGenerator.visit_ArrayDecl      ""1E":::r   c                 0    |                      |d          S r  r  r-   s     r   visit_TypeDeclzCGenerator.visit_TypeDecl  r  r   c                 0    |                      |d          S r  r  r-   s     r   visit_PtrDeclzCGenerator.visit_PtrDecl  r  r   r1   c                    |dv r7t          |t          j        t          j        f          sJ |j        }| j        }n@|dk    sJ t          |t          j                  sJ |j        dn|j        j        }| j	        }|dz   |j
        pdz   }|i|dz  }||                                 z  }| xj        dz  c_        |dz  }| ||          z  }| xj        dz  c_        ||                                 d	z   z  }|S )
zlGenerates code for structs, unions, and enums. name should be
        'struct', 'union', or 'enum'.
        )r   r  r   Nr   r    r   rP   r   r~   )re   r   StructUnionr   _generate_struct_union_bodyEnumvaluesenumerators_generate_enum_bodyr1   r   r
   )r   r*   r1   membersbody_functionr   s         r   r   z&CGenerator._generate_struct_union_enum  s"    &&&a%,!<=====gG <MM6>>>>a,,,,,h.ddAH4HG 4M3J!&,B' IA""$$$A"JAw'''A"""$$s**Ar   r  c                 F     d                      fd|D                       S )Nr    c              3   B   K   | ]}                     |          V  d S r"   r   r   s     r   r'   z9CGenerator._generate_struct_union_body.<locals>.<genexpr>  s1      EETt**400EEEEEEr   r(   r   r  s   ` r   r  z&CGenerator._generate_struct_union_body  s*    wwEEEEWEEEEEEr   c                 \     d                      fd|D                       d d         dz   S )Nr    c              3   B   K   | ]}                     |          V  d S r"   r#   )r$   r,   r   s     r   r'   z1CGenerator._generate_enum_body.<locals>.<genexpr>  s/      >>Utzz%((>>>>>>r   r   r"  r#  s   ` r   r  zCGenerator._generate_enum_body  s8    ww>>>>g>>>>>ssCdJJr   r   c                    |r| xj         dz  c_         |                                 }|r| xj         dz  c_         |xxt          j        d x\   n xt          j        d x\   n xt          j        d x\   n xt          j        d x\   n xt          j        d x\   n xt          j        d x\   n xt          j	        d x\   n{ xt          j
        d x\   ng xt          j        d x\   nS xt          j        d x\   n? xt          j        d x\   n+ xt          j        d x\   n xt          j        d x\   n  n  ||                     |          z   dz   S xt          j        d x\    |                     |          S  t          j        d x\   ||                     |          z   S  	 ||                     |          z   dz   S )zGeneration from a statement node. This method exists as a wrapper
        for individual visit_* methods to handle different treatment of
        some statements in this context.
        rP   r|   Nr   r   )r
   r   r   Declrt   CastUnaryOprf   	TernaryOpFuncCallArrayRef	StructRefConstantr	  Typedefr   r   r   If)r   r*   r   r   s       r   r   zCGenerator._generate_stmt  s>   
  	#"""$$ 	#"#
$%"$$$$$$$%*,,,,,,,!%-///////"%."""""""#%/#######"%.""""""""%."""""""#%/#######"%."""""""%(*******!%-///////"%."""""""""""
 

1-55!!!!!!!
 zz!}}$ " 

1-- 

1-44r   c                 4   d}|j         rd                    |j                   dz   }|j        r |d                    |j                  dz   z  }|j        r&||                     |j        d                   dz   z  }||                     |j                  z  }|S )zGeneration from a Decl node.r    r   r   )funcspecr(   r   alignr   r   r?   r   s      r   r   zCGenerator._generate_decl  s    : 	+$$s*A9 	+!)$$s**A7 	.AGAJ''#--A	T  (((r   T	modifiersr   c                    |xt           j        d x\    d}|j        r |d                    |j                  dz   z  }||                     |j                  z  }|j        r	|r|j        nd}t          |          D ]c\  }}|xt           j        d x\    |dk    r+t          ||dz
           t           j
                  rd|z   dz   }|d	z  }|j        r |d                    |j                  dz   z  }|j        ||                     |j                  z  }|d
z  } xt           j        d xd\    |dk    r+t          ||dz
           t           j
                  rd|z   dz   }|j        |                     |j                  nd}|d|z   dz   z  } t           j
        d x<\   |j        r,d                    |j                  }	|rd| nd}
d|	 |
 }[d|z   }b e|r|d|z   z  }|S  xt           j        d x\    |                     |j                  S  xt           j        d x\    |                     |j        |          S  xt           j        d x \    d                    |j                  dz   S  xt           j        d x\   n+ xt           j
        d x\   n xt           j        d x\   n  n" |                     |j        ||gz   |          S 	 |                     |          S )zRecursive generation from a type node. n is the type node.
        modifiers collects the PtrDecl, ArrayDecl and FuncDecl modifiers
        encountered on the way down to a TypeDecl, to allow proper
        generation from it.
        r|   Nr    r   r   r   rD   rE   r8   r9   z* r]   r   )r   TypeDeclqualsr(   r   r?   declname	enumerate	ArrayDeclre   PtrDecl	dim_qualsdimFuncDeclrF   r(  r   Typenamer   IdentifierTypery   )r   r*   r5  r   r   nstrimodifierrF   r8  suffixs              r   r   zCGenerator._generate_type  s    !!!!!!!7 1!'**S00ATZZ'''%&ZIMIqzzr
 $-Y#7#7 2 2KAx".U_...... Avv*Yq1u5Eu}*U*Uv'*TzC'7 CKD'1 K $1C(D(Ds(J J'|7 $

8<(@(@ @ CKDD / .U^------ Avv*Yq1u5Eu}*U*Uv'*TzC'7 $,=#< !%

8= 9 9 9%' !
 !C$J$44DD . #]_____'~ 2(+(@(@7;)CT';E';6';';'*Tz -_  $tOAQ "R **16222 !!!!!!!**16*OOO "'%''''''xx((3.. (""""""""_U]_______7Gu~7G7G7G7G7G7G7G7G7G7G**FIO= +    zz!}}$r   	conditionc                 V    |                      |          } ||          rd|z   dz   S |S )zVisits 'n' and returns its string representation, parenthesized
        if the condition function applied to the node returns True.
        rD   rE   )r   )r   r*   rF  r   s       r   rl   zCGenerator._parenthesize_if&  s:     Q9Q<< 	7S= Hr   c                 6                           | fd          S )z$Common use case for _parenthesize_ifc                 0                         |            S r"   )rd   )ri   r   s    r   rj   z8CGenerator._parenthesize_unless_simple.<locals>.<lambda>4  s    d6J6J16M6M2M r   )rl   r-   s   ` r   r:   z&CGenerator._parenthesize_unless_simple2  s#    $$Q(M(M(M(MNNNr   c                     t          |t          j        t          j        t          j        t          j        t          j        f          S )zyReturns True for nodes that are "simple" - i.e. nodes that always
        have higher precedence than operators.
        )re   r   r/  r	  r-  r.  r,  r-   s     r   rd   zCGenerator._is_simple_node6  s1     ^UXu~uW
 
 	
r   )F)|r   
__module____qualname____doc__int__annotations__boolr   strr   r   Noder   r   r   r/  r.   r	  r2   r   r6   r-  r=   r.  rB   r,  rH   r*  rN   rg   rf   rq   rt   rw   rA  rz   r   r(  r   DeclListr   r0  r   r)  r   r   r   r   r   r  r   Alignasr   
Enumeratorr   r   r   FileASTr   r   r   CompoundLiteralr   EmptyStatementr   	ParamListr   Returnr   Breakr   Continuer   r+  r   r1  r   Forr   Whiler   DoWhiler   StaticAssertr   Switchr   Caser   Defaultr   Labelr   Gotor   EllipsisParamr   r  r  r@  r  r  r  NamedInitializerr
  r?  r  r;  r  r7  r  r<  r  r   r   r  r  r   r   r   r   rl   r:   rd   r|   r   r   r	   r	      s
         
 	5 	54 	5D 	5 	5 	5 	5'c ' ' ' '?%* ? ? ? ? ?K(5:"6 K3 K K K K 3    %( s    el s    < <3 < < < <3 3S 3 3 3 3' '3 ' ' ' '
*u} * * * * *" 	a 	a	
 	Q 	Q 	Q 	a 	a 	Q 	a 	Q 	a 	a 	a  	Q!" 	Q#$ 	Q%& 	Q'( 	Q) N.#/ #/3 #/ #/ #/ #/J;%"2 ;s ; ; ; ;!e&: !s ! ! ! !%UZ %C % % % %	 	EJ 	 	# 	 	 	 	 3    u}     BEJ B3 B B B B+ +3 + + + ++ +3 + + + +@EJ @3 @ @ @ @>u} > > > > >%"2 s    -u} - - - - -
u} 
 
 
 
 
 3    Ju'< J J J J Je&: s    B BS B B B Bel s    U[ S     3     S    	%( 	s 	 	 	 	59     U[ S    u}     E$6 3    el s    
EJ 3    u}     <U[ <S < < < <&EJ &3 & & & &U%8 S    =el =s = = = =+ +3 + + + +<U[ <S < < < <(> 3    & &3 & & & &; ;S ; ; ; ;; ;3 ; ; ; ;;u} ; ; ; ; ;+ej8@C	   8F4
3C F F F F FK40@+A Kc K K K K(5 (5
 (5 (5 (5 (5 (5 (5T

 
s 
 
 
 
 ')"	A% A%:A% 
#A% 	A%
 
A% A% A% A%F

(0%*t1C(D
	
 
 
 
OUZ OC O O O O
 
 
 
 
 
 
 
r   r	   N)typingr   r   r   r    r   r	   r|   r   r   <module>ri     ss    , + + + + + + + + +      o
 o
 o
 o
 o
 o
 o
 o
 o
 o
r   