
    -Ph                       d dl mZ ddlmZmZmZmZmZmZ d dl	m
Z
mZ ddlmZmZ d dl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 d dlZd dlZd dlZd dlZd dl Z!e!j"        rd d	l#m$Z$m%Z% dd
lm&Z&  G d de
          Z'dLdZ( G d d          Z)dMdZ* G d d          Z+ G d de+          Z, G d de+          Z- G d  d!e+          Z. G d" d#e+          Z/ G d$ d%e/          Z0 G d& d'e/          Z1e2dd(d)gfe3i dfd*e2ddfe2ddfe2dg d+fe3i dfd,e2ddfe2dg d-fe4g dfe2d.dfe2d/g d0fd1d2Z5e,e,e-e,e-e-e0e0d3e-e,e1e-e1e-e-e-e,e,e-d4e0e,e0e,e,d5d6Z6 G d7 d8          Z7d9d:d;d<d=d>d?d@Z8dNdDZ9dOdFZ:dOdGZ;dOdHZ<dOdIZ=e:e:e;e<e<e=e=dJZ>dK Z?dS )P    )annotations   )IntrospectionInterpreterBUILD_TARGET_FUNCTIONSAstConditionLevelAstIDGeneratorAstIndentationGenerator
AstPrinter)MesonExceptionsetup_vsenv)mlogenvironmentwraps)
Token	ArrayNodeArgumentNodeAssignmentNode
StringNodeBooleanNodeElementaryNodeIdNodeFunctionNode
SymbolNodeN)ArgumentParserHelpFormatter)BaseNodec                      e Zd ZdS )RewriterExceptionN)__name__
__module____qualname__     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/rewriter.pyr   r      s        Dr$   r   parserr   	formatter T.Callable[[str], HelpFormatter]returnNonec                   |                      ddt          ddd           |                      ddd	d
d           |                      dddd	d
d           |                     ddd          }|                    ddgd|          }|                     ddddd           |                     dd t          d         d!         d"         d#d$%           |                     dd&'           |                     d(g d)d*+           |                     d,d-d./           |                    d0d1|2          }|                     d(t          d0         d(         d"         d*+           |                     d3t          t                                                    d4+           |                     d5d6'           |                     d0d-d7/           |                    d8d9gd:|          }|                     d(t          d;         d(         d"         d*+           |                     d<d-d=/           |                    d>d?gd@|          }|                     dAdB'           d S )CNz-sz--sourcedir.SRCDIRzPath to source directory.)typedefaultmetavarhelpz-Vz	--verbose
store_trueFzEnable verbose output)actionr/   r1   z-Sz--skip-errorsskipzSkip errors instead of aborting)destr3   r/   r1   r.   zRewriter commandszRewrite command to execute)r5   titledescriptiontargettgtzModify a target)aliasesr1   formatter_classz--subdir subdirzASubdirectory of the new target (only for the "add_target" action))r/   r5   r1   z--typetgt_typetarget_type   
executablez<Type of the target to add (only for the "add_target" action))r5   choicesr/   r1   zName or ID of the target)r1   	operationaddrm
add_target	rm_targetadd_extra_filesrm_extra_filesinfozAction to execute)rB   r1   sources*zSources to add/remove)nargsr1   kwargszModify keyword arguments)r1   r;   functionzFunction type to modifyidz<ID of the function to modify (can be anything for "project")zPairs of keyword and valuedefault-optionsdefz"Modify the project default optionsdefault_optionsoptionsz(Key, value pairs of configuration optioncommandcmdz Execute a JSON array of commandsjsonzJSON string or file to execute)add_argumentstradd_subparsers
add_parserrewriter_keyslistrewriter_func_kwargskeys)r&   r'   
subparsers
tgt_parser	kw_parser
def_parser
cmd_parsers          r%   add_argumentsrf      s   
m#sH[vwww
k,Tklll
oF<Y^  fG  H  H  H&&F:M[w&xxJ &&x%GXjs&ttJD*bx  OR  S  S  SH:}X?VWd?efg?hr~!_  a a aH+EFFFK  2G  2G  2G!4  6 6 6IS7NOOO %%h5Oaj%kkI;h0G0TUV0W 3  5 5 5:t4H4M4M4O4O/P/P 9  ; ; ;4&deee835QRRR &&'85'Pt  GP&  Q  QJK?P1QR]1^_`1a!4  6 6 6IS7abbb &&y5'Hj  }F&  G  GJF)IJJJJJr$   c                      e Zd Zd Zd ZdS )RequiredKeysc                    || _         d S N)r`   )selfr`   s     r%   __init__zRequiredKeys.__init__A   s    			r$   c                @     t                     fd            }|S )Nc                 l   t          |           dk    sJ | d         }	j                                        D ]\  }}|d         }|d         }|d         }||vr0||||<   n(t          d                    |j                            t          ||         |          sAt          d                    ||j        t          ||                   j                            |Kt          |t                    sJ ||         |vr*t          d                    ||||                              | i |S )Nr@   r   r   z$Key "{}" is missing in object for {}z8Invalid type of "{}". Required is {} but provided was {}zCInvalid value of "{}": Possible values are {} but provided was "{}")	lenr`   itemsr   formatr    
isinstancer.   r^   )
wrapped_argswrapped_kwargsrW   keyvaltypr/   rB   frk   s
           r%   wrappedz&RequiredKeys.__call__.<locals>.wrappedE   sb   |$$))))q/C IOO-- Q QS!fa&a&c>>*#*C/0V17QZ1H1HJ J J!#c(C00 a+,f-3VCtCPSH~~G^-_-_a a a&%gt444443xw../0u17Wc#h1O1OQ Q Q1l5n555r$   r   )rk   rx   ry   s   `` r%   __call__zRequiredKeys.__call__D   s9    	q	6 	6 	6 	6 	6 
	6. r$   N)r    r!   r"   rl   rz   r#   r$   r%   rh   rh   @   s2              r$   rh   rv   rZ   r   c                F    t          t          dddddd|                     S )Nr<   r   r   r   )r   r   )rv   s    r%   _symbolr}   _   s$    eBAq!VS99:::r$   c                  d    e Zd ZdddZedd            Zed             Zd Zd Zd	 Z	d
 Z
d ZdS )	MTypeBaseNnodeT.Optional[BaseNode]c                    ||                                  | _        n|| _        d | _        |                                 D ]}t	          | j        |          r|| _        d S rj   )new_noder   	node_typesupported_nodesrr   )rk   r   is      r%   rl   zMTypeBase.__init__c   sg    <DIIDI%%'' 	# 	#A$)Q'' #!"	# 	#r$   c                     t          d          )Nz0Internal error: new_node of MTypeBase was calledr   clsvalues     r%   r   zMTypeBase.new_nodem   s       RSSSr$   c                    g S rj   r#   r   s    r%   r   zMTypeBase.supported_nodesr   	     	r$   c                    | j         d uS rj   )r   rk   s    r%   
can_modifyzMTypeBase.can_modifyw   s    ~T))r$   c                    | j         S rj   )r   r   s    r%   get_nodezMTypeBase.get_nodez   s
    yr$   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot add a value of type--> skippingr   warningboldr.   r    rk   r   s     r%   	add_valuezMTypeBase.add_value}   s1    149T$ZZ=P3Q3QSabbbbbr$   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot remove a value of typer   r   r   s     r%   remove_valuezMTypeBase.remove_value   1    4diT

@S6T6TVdeeeeer$   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot remove a regex in typer   r   r   s     r%   remove_regexzMTypeBase.remove_regex   r   r$   rj   r   r   )r    r!   r"   rl   classmethodr   r   r   r   r   r   r   r#   r$   r%   r   r   b   s        # # # # # T T T [T   [* * *  c c cf f ff f f f fr$   r   c                  P     e Zd Zdd fdZedd            Zed             Z xZS )	MTypeStrNr   r   c                J    t                                          |           d S rj   superrl   rk   r   	__class__s     r%   rl   zMTypeStr.__init__   !    r$   c                h    |d}t          t          dddddd t          |                              S )Nr<   stringr   r   r   rZ   r   s     r%   r   zMTypeStr.new_node   s4    =E%"aAtSZZHHIIIr$   c                    t           gS rj   r   r   s    r%   r   zMTypeStr.supported_nodes   
    |r$   rj   r   r    r!   r"   rl   r   r   r   __classcell__r   s   @r%   r   r      s               J J J [J
   [    r$   r   c                  P     e Zd Zdd fdZedd            Zed             Z xZS )		MTypeBoolNr   r   c                J    t                                          |           d S rj   r   r   s     r%   rl   zMTypeBool.__init__   r   r$   c                `    t          t          dddddd t          |                              S Nr<   r   )r   r   boolr   s     r%   r   zMTypeBool.new_node   s*    5RAq$UDDEEEr$   c                    t           gS rj   )r   r   s    r%   r   zMTypeBool.supported_nodes   s
    }r$   rj   r   r   r   s   @r%   r   r      s               F F F [F   [    r$   r   c                  P     e Zd Zdd fdZedd            Zed             Z xZS )	MTypeIDNr   r   c                J    t                                          |           d S rj   r   r   s     r%   rl   zMTypeID.__init__   r   r$   c                h    |d}t          t          dddddd t          |                              S r   r   r   rZ   r   s     r%   r   zMTypeID.new_node   s4    =EeBAq!T3u::>>???r$   c                    t           gS rj   r   r   s    r%   r   zMTypeID.supported_nodes   	    xr$   rj   r   r   r   s   @r%   r   r      s               @ @ @ [@
   [    r$   r   c                       e Zd Zdd fdZedd            Zed             Zd Zedd
            Z	edd            Z
d Zed             Zed             Zd Zd Zd ZddZ xZS )	MTypeListNr   r   c                J    t                                          |           d S rj   r   r   s     r%   rl   zMTypeList.__init__   r   r$   c                "    |g }n*t          |t                    s                     |          S t          t	          dddddd d                    } fd|D             |_        t          t          d          |t          d                    S )Nr<   r   c                :    g | ]}                     |          S r#   )_new_element_node).0r   r   s     r%   
<listcomp>z&MTypeList.new_node.<locals>.<listcomp>   s'    BBBq#//22BBBr$   [])rr   r^   r   r   r   	argumentsr   r}   )r   r   argss   `  r%   r   zMTypeList.new_node   s    =EEE4(( 	0((///E"b!Q4<<==BBBBEBBBtWS\\:::r$   c                     t          d          )Nz9Internal error: _new_element_node of MTypeList was calledr   r   s     r%   r   zMTypeList._new_element_node   s       [\\\r$   c                    t          | j        t                    s4| j        }|                                 | _        |g| j        j        _        d S d S rj   )rr   r   r   r   r   r   )rk   tmps     r%   _ensure_array_nodezMTypeList._ensure_array_node   sJ    $)Y// 	-)CDI(+uDIN$$$	- 	-r$   r)   r   c                    dS NFr#   r   r   s     r%   _check_is_equalzMTypeList._check_is_equal   	     ur$   regexrZ   c                    dS r   r#   r   r   s     r%   _check_regex_matcheszMTypeList._check_regex_matches   r   r$   c                    t          | j        t                    r9t          | j        j        j                  dk    r| j        j        j        d         S | j        S )Nr   r   )rr   r   r   ro   r   r   r   s    r%   r   zMTypeList.get_node   sJ    di++ 	349>+,,11y~/22yr$   c                    g S rj   r#   r   s    r%   supported_element_nodesz!MTypeList.supported_element_nodes   r   r$   c                <    t           g|                                 z   S rj   )r   r   r   s    r%   r   zMTypeList.supported_nodes   s    {S88::::r$   c                    t          |t                    s|g}|                                  |D ]0}| j        j        xj        |                     |          gz  c_        1d S rj   )rr   r^   r   r   r   r   r   )rk   r   r   s      r%   r   zMTypeList.add_value   sv    %&& 	GE!!! 	D 	DAIN$$)?)?)B)B(CC$$$	D 	Dr$   c                    fd}t          t                    sg|                                  g }| j        j        j        D ] |          s|gz  }|| j        j        _        d S )Nc                0    D ]} |          r dS dS )NTFr#   )r   j
equal_funcr   r   s     r%   check_remove_nodez3MTypeList._remove_helper.<locals>.check_remove_node   s7        :a##  44 5r$   )rr   r^   r   r   r   r   )rk   r   r   r   removed_listr   s    ``  @r%   _remove_helperzMTypeList._remove_helper   s    	 	 	 	 	 	 	 %&& 	GE!!!) 	$ 	$A$$Q'' $##/	   r$   c                <    |                      || j                   d S rj   )r   r   r   s     r%   r   zMTypeList.remove_value   s!    E4#788888r$   c                <    |                      || j                   d S rj   )r   r   )rk   r   s     r%   r   zMTypeList.remove_regex   s!    E4#<=====r$   rj   r   r)   r   r   rZ   r)   r   )r   rZ   )r    r!   r"   rl   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   s   @r%   r   r      sX              ; ; ; [; ] ] []- - -    \    \     [ ; ; [;D D D0 0 0 9 9 9> > > > > > > >r$   r   c                  ~     e Zd Zdd fdZed             Zedd            Zedd            Zed             Z	 xZ
S )MTypeStrListNr   r   c                J    t                                          |           d S rj   r   r   s     r%   rl   zMTypeStrList.__init__  r   r$   c                `    t          t          dddddd t          |                              S )Nr   r<   r   r   r   s     r%   r   zMTypeStrList._new_element_node  s*    %"aAtSZZHHIIIr$   r)   r   c                F    t          | t                    r| j        |k    S dS r   rr   r   r   r   s     r%   r   zMTypeStrList._check_is_equal  s&    dJ'' 	':&&ur$   r   rZ   c                h    t          | t                    rt          j        || j                  d uS dS r   rr   r   rematchr   r   s     r%   r   z!MTypeStrList._check_regex_matches  2    dJ'' 	;8E4:..d::ur$   c                    t           gS rj   r   r   s    r%   r   z$MTypeStrList.supported_element_nodes  r   r$   rj   r   r   r   r    r!   r"   rl   r   r   r   r   r   r   r   r   s   @r%   r   r      s               J J [J    \
    \
   [    r$   r   c                  ~     e Zd Zdd fdZed             Zedd            Zedd            Zed             Z	 xZ
S )MTypeIDListNr   r   c                J    t                                          |           d S rj   r   r   s     r%   rl   zMTypeIDList.__init__  r   r$   c                `    t          t          dddddd t          |                              S r   r   r   s     r%   r   zMTypeIDList._new_element_node  s*    eBAq!T3u::>>???r$   r)   r   c                F    t          | t                    r| j        |k    S dS r   rr   r   r   r   s     r%   r   zMTypeIDList._check_is_equal   s&    dF## 	':&&ur$   r   rZ   c                h    t          | t                    rt          j        || j                  d uS dS r   r   r   s     r%   r   z MTypeIDList._check_regex_matches&  r   r$   c                    t           gS rj   r   r   s    r%   r   z#MTypeIDList.supported_element_nodes,  r   r$   rj   r   r   r   r   r   s   @r%   r   r     s               @ @ [@    \
    \
   [    r$   r   setdelete)rC   rU   )r  r  rE   remover   rK   rP   rQ   rC   rO   )src_addsrc_rm	target_rm
target_addextra_files_addextra_files_rmrK   r<   rA   )both_librariesrA   jarlibraryshared_libraryshared_modulestatic_library)r8   rC   rL   r=   r?   rT   rO   r8   )languagemethodnativenot_found_messagerequiredstaticversionmodules)build_by_defaultbuild_rpathdependenciesgui_app	link_withexport_dynamicimplibinstallinstall_dirinstall_rpathpie)rT   meson_versionlicensesubproject_dirr  )
dependencyr8   projectc                      e Zd Zd#d$dZd	 Zd%dZd Zd Zd Zd&dZ	d'dZ
 eed                   d             Z eed                   d             Zd(dZ eed                   d             Zd  Zd! Zd"S ))RewriterninjaF	sourcedirrZ   	generatorskip_errorsr   c           	        || _         t          |d|t                      t                      t	                      g          | _        || _        g | _        g | _        g | _	        | j
        | j        | j        d| _        d | _        d S )Nr<   )visitorsr  )r-  r   r   r	   r   interpreterr/  modified_nodesto_remove_nodesto_add_nodesprocess_default_optionsprocess_kwargsprocess_target	functions	info_dump)rk   r-  r.  r/  s       r%   rl   zRewriter.__init__f  s    "3Ir9ZhZjZj  mD  mF  mF  HY  H[  H[  Z\  ]  ]  ]& !#;))
 

 r$   c           	        t          j        dt          j        t          j                            | j        t          j                                       | j	        
                                 t          j        dt          j        | j	        j        d                              t          j        dt          j        | j	        j        d                              d S )NzAnalyzing meson file:z  -- Project:descriptive_namez  -- Version:r  )r   logr   ospathjoinr-  r   build_filenamer2  analyzeproject_datacyanr   s    r%   analyze_mesonzRewriter.analyze_mesont  s    ($)BGLLQ\Qk4l4l*m*mnnn  """$)D,<,IJ\,]"^"^___$)D,<,I),T"U"UVVVVVr$   cmd_typecmd_iddatadictc                h    | j         i | _         || j         vr
i | j         |<   || j         |         |<   d S rj   )r:  )rk   rF  rG  rH  s       r%   add_infozRewriter.add_infoz  sA    >!DN4>))')DN8$+/x (((r$   c                    | j         d S t          j                            t	          j        | j         d                     d S )Nr@   )indent)r:  sysstdoutwriterX   dumpsr   s    r%   
print_infozRewriter.print_info  s<    >!F
DN1===>>>>>r$   c                    | j         r(t          j        d          t          j        d          fS t          j        d          t          j        d          fS )Nz-->skippingaborting)r/  r   rD  yellowredr   s    r%   on_errorzRewriter.on_error  sK     	=9U##T[%<%<<<y*!5!555r$   c                2    | j         rd S t          d          )Nz Rewriting the meson.build failed)r/  r   r   s    r%   handle_errorzRewriter.handle_error  s!     	4?@@@r$   r8   c           
     l    d fd} ||          }|rt          |          dk    r|d         S t          j        dt          j        |                     |D ]I}t          j        d	t          j        |d                   d
t          j        |d                              Jt          j        dg                                 R                                     d S d }| j        j        v rG j        j        |         }t          |t                    r |j
        j        dv r j        j        |         }|S )NnamerZ   r)   T.List[BaseNode]c                Z    g }j         j        D ]}| |d         |d         hv r||gz  }|S )Nr\  rQ   )r2  targets)r\  resultr   rk   s      r%   
check_listz(Rewriter.find_target.<locals>.check_list  sF    F%- " "AfIqw///qcMFMr$   r   r   z#There are multiple targets matchingz  -- Target namezwith IDrQ   z1Please try again with the unique ID of the target>   r  r  rA   r  r  r  r  )r\  rZ   r)   r]  )ro   r   errorr   rX  rZ  r2  assignmentsrr   r   	func_namer   assign_vals)rk   r8   ra  r_  r   r9   r   s   `      r%   find_targetzRewriter.find_target  sd   	 	 	 	 	 	 *V$$ 		7||q  qz!
@$)FBSBSTTT  h hAJ149QvY3G3GTXT]^_`d^eTfTfgggg
NaQUQ^Q^Q`Q`aaaa!!###t T%111#/7D$-- ?>'  ,S  S  S*6v>C
r$   r(  c                    d fd} ||          }||S | j         j        v rg j         j        |         }t          |t                    r@|j        j        dk    r0 j                             |j                  d         } ||          }|S )Nr\  rZ   c                F    j         j        D ]}| |d         k    r|c S d S )Nr\  )r2  r  )r\  r   rk   s     r%   ra  z,Rewriter.find_dependency.<locals>.check_list  s:    %2  1V9$$HHH %4r$   r(  r   )r\  rZ   )r2  rc  rr   r   rd  r   flatten_argsr   )rk   r(  ra  depr   r\  s   `     r%   find_dependencyzRewriter.find_dependency  s    	 	 	 	 	 	 j$$?J )555#/
;D$-- +>'<77+88CCAFD$*T**C
r$   rT   c                   ddddd |d                                          D             id}|                     |           |d         d	k    rd S d
|d<   g |d         d<   | j        j        }i d |j                                        D             d |j                                        D             d |j                                        D             d |j                                        D             d |j                                        D             }t          |d                                                   D ]\  }}||vrLt          j        dt          j	        |          g| 
                                R   |                                  V	 ||                             |          }n# t          $ ru}t          j        dt          j	        |          t          j        t          |                    g| 
                                R   |                                  Y d }~d }~ww xY w|d         dxx         | d| gz  cc<   |                     |           d S )Nr)  /r   rT   c                    g | ]}| d S )z=.*r#   r   xs     r%   r   z4Rewriter.process_default_options.<locals>.<listcomp>  s    #M#M#M!qIII#M#M#Mr$   rU   r  rC   r  rE   rO   c                4    i | ]\  }}t          |          |S r#   rZ   r   kvs      r%   
<dictcomp>z4Rewriter.process_default_options.<locals>.<dictcomp>  $    <<<TQs1vvq<<<r$   c                4    i | ]\  }}t          |          |S r#   rr  rs  s      r%   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r$   c                4    i | ]\  }}t          |          |S r#   rr  rs  s      r%   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r$   c                4    i | ]\  }}t          |          |S r#   rr  rs  s      r%   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r$   c                4    i | ]\  }}t          |          |S r#   rr  rs  s      r%   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r$   zUnknown optionszUnable to set=)r`   r7  r2  coredataoptstorerp   sortedr   rb  r   rX  rZ  validate_valuer   rW  rZ   )rk   rW   
kwargs_cmdcdatarU   ru   rv   es           r%   r6  z Rewriter.process_default_options  s    "'!#M#Ms9~7J7J7L7L#M#M#M	
 

 	J''' {u$$F"'
;24
8./ )
<<U^%9%9%;%;<<<
<<U^%9%9%;%;<<<
 =<U^%9%9%;%;<<<
 =<U^%9%9%;%;<<<	

 =<U^%9%9%;%;<<<
 s9~335566 	H 	HHC'!!
,dinnOt}}OOOO!!###cl11#66!   
?DIcNNDHSVV<L<L_t}}____!!###
 x !233337GG3333J'''''s   F66
H5 A+H00H5rO   c                   t          j        dt          j        |d                   dt          j        d|d         z   dz                        |d         t          vr?t          j        d|d         g|                                 R   |                                 S t          |d                  }d }d }|d         dk    rvdd	h                    |d         h          rDt          j        d
|d         z   dz   g|                                 R   |                                 S | j	        j
        }|j        }nq|d         dk    r-|                     |d                   }|r|d         }|j        }n8|d         dk    r,|                     |d                   }|r|d         }|j        }|st          j        d           t          |t                    sJ t          |t                     sJ d |j                                        D             |_        |d         dk    ri }t'          |j                                                  D ]y\  }}d ||<   t          |t(                    r|j        ||<   *t          |t,                    r:g }	|j        j        D ]&}
d }t          |
t(                    r|
j        }|	|gz  }	'|	||<   z|                     dd                    |d         |d                   |           d S d}t'          |d                                                   D ]\  }}||vrLt          j        dt          j        |          g|                                 R   |                                  V|d         dk    rd||j        vr)t          j        dt          j        |          d           t          j        dt          j        |          d           |j        |= n'|d         dk    rmt          j        dt          j        |          dt          j        t7          |                               ||                             |          |j        |<   n||j        vr
d |j        |<    ||         |j        |                   }|                                s*t          j        dt          j        |          d            t7          |          }|d         d!k    rQt          j        d"t          j        |          dt          j        |                     |                    |           n|d         d#k    rQt          j        d$t          j        |          d%t          j        |                     |                    |           n\|d         d&k    rPt          j        d't          j        |          d%t          j        |                     |                     |           |!                                |j        |<   |d(z  }d) |j                                        D             |_        |j                                        D ]\  }}|j"        |_"        |dk    r|| j#        vr| xj#        |gz  c_#        d S d S d S )*NzProcessing function typerP   zwith id'rQ   zUnknown function typer)  rm  z//z>The ID for the function type project must be "/" or "//" not ""r8   r   r(  z Unable to find the function nodec                $    i | ]\  }}|j         |S r#   r   rs  s      r%   rv  z+Rewriter.process_kwargs.<locals>.<dictcomp>  s     JJJ$!Q17AJJJr$   rC   rK   rO   z{}#{}r   zCannot modify unknown kwargr  z  -- Keyzis already deletedz  -- Deletingzfrom the kwargsr  z  -- Settingtoz  -- Skippingz#because it is too complex to modifyrE   z  -- Addingr  z  -- Removingfromr   z!  -- Removing all values matchingr   c                Z    i | ](\  }}t          t          d d dddd|                    |)S )r<   r   N)r   r   rs  s      r%   rv  z+Rewriter.process_kwargs.<locals>.<dictcomp>Y  s:    jjj$!Q6%B1aq"A"ABBAjjjr$   )$r   r=  r   rD  r_   rb  rX  rZ  
isdisjointr2  project_noder   rf  rk  rr   r   r   rO   rp   r  r   r   r   r   rK  rq   rV  rZ   r   r   r   r   r   r   levelr3  )rk   rW   
kwargs_defr   arg_noder   	info_dataru   rv   	data_listr   elementnum_changedmodifierval_strrt  ru  s                    r%   r7  zRewriter.process_kwargs  s   +TYs:-G-GTXT]^adghldm^mps^sTtTtuuuz?"666J.JR$--//RRRR$$&&&)#j/:
 z?i''
 T{%%s4yk22 +
[^abf^ggjmm  Aptp}p}pp  A  A  A  A((***#0DyHH_((""3t9--C %6{9_,,&&s4y11C %6{9 	;J9:::$-----(L11111JJ(/2G2G2I2IJJJ {v%%I"8?#8#8#:#:;; / /S!%	#c>22 	/%(YIcNNY// / "I X/ / /"&%a88 .&'gG!gY.		%.IcNMM(GNN3z?CI$N$NPYZZZF s8}224455 *	 *	HC*$$
8$)C..[4==??[[[[!!###;8++ho--HZ39MNNN$)C..:KLLLOC(([!U**3t{3s88?T?TUUU'1#'?'?'D'D$$ ho--+/HOC(*:c?8?3+?@@**,, H_dinn>cddd c(({#u,,H]DK,@,@$	RUWWW&&s++++%11H_dk'.B.BFDIVYNN[[[))#....%77H@$+gBVBVX^`d`ijm`n`nooo))#... (0'8'8':':$1KK kjRZRaRgRgRiRijjjO))++ 	 	DAqgAGG??t4+>>>D6) ?>>r$   r   r   r)   r   c                h    |j         r*|j         | j        j        v r| j        j        |j                  S d S rj   )ast_idr2  reverse_assignment)rk   r   s     r%   find_assignment_nodezRewriter.find_assignment_node_  s7    ; 	D4;$*:*MMM#6t{CCtr$   c                    !"#$%& t          j        dt          j        |d                   dt          j        |d                                                   |d                   &&]|d         dk    rQt          j        dt          j        |d                   g                                 R                                    S dJ &fd	%&%fd
|d         D             |d<   d !g }|d         dk    rd }&d         r&d         d         }n&d         }|J g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }t          t          |d                             D ]}||v r)t          j        dt          j        |          d           /t          j        dt          j        |          dt          j        |j         d|j                              t#          d|j        dddd |          }|t          |          gz  }d }	t          |t$          t&          f          r|j        }	nt          |t*                    r|}	|	J |	xj        |z  c_        |	|vrt          |t$                    s||	gz  }| j        vr xj        |gz  c_        	n|d         dk    r,!&fd}
|d         D ]} |
|          \  }}|)t          j        dt          j        |          d           <d }	t          |t$          t&          f          r|j        }	nt          |t*                    r|}	|	J t          j        dt          j        |          dt          j        |j         d|j                              |	j                            |           |	|vrt          |t$                    s||	gz  }| j        vr xj        |gz  c_        n|d         dk    r	&d         }d}	 &d         d         }n# t4          $ r 	 t7          d |j        j                                        D                       }|j        j        |         }n# t<          $ r t'          t?          d           t+          t#          d!|j        dddd d"                    t?          d#                    }||j        j        tA          t#          d|j        dddd d                    <   d$}| j        vr xj        |gz  c_        Y nw xY w|g&d<   Y nw xY wt          |t@                    r j!        j"        |j
                 }|g&d<   t          |t&                    sRt          j        d%t          j        |d                   d&g                                 R                                    S g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }t          t          |d                             D ]}||v r)t          j        d't          j        |          d           /t          j        d(t          j        |          dt          j        |j         d|j                              t#          d|j        dddd |          }|t          |          gz  }|j        }	|	xj        |z  c_        |	|vr||	gz  }|r| j        vr xj        |gz  c_        np|d         d)k    r!&fd*}
|d         D ]} |
|          \  }}|)t          j        d+t          j        |          d           ;|j        }	t          j        d,t          j        |          dt          j        |j         d|j                              |	j                            |           |	|vrt          |t$                    s||	gz  }| j        vr xj        |gz  c_        nt|d         dk    r)&Rt          j        d-t          j        |d                   d.g                                 R                                    S tG          j$        d/d0|d                   }|d1         d2k    r|d3z   nd4}|d5z   }tJ          j&        '                    |d6         tP          j)                  #t+          t#          d#dddd d!                    }t'          t?          d           |t?          d#                    }t+          t#          d#dddd d!                    }t%          tA          t#          d7#dddd8d9                    t?          d:          |t?          d;                    }tU          tA          t#          d7#dddd8|                    t?          d<          |          }#fd=|d         D             |_        |g|_        t+          t#          d#dddd d!                    }t%          tA          t#          d7#dddd8|d1                             t?          d:          |t?          d;                    }tU          tA          t#          d7#dddd8|                    t?          d<          |          }t          t#          d#dddd |d                             tA          t#          d#dddd |                    g|_        |+                    tY                                 |+                    tY                                  xj-        ||gz  c_-        n>|d         d>k    r .                    &d                   }|&d         } xj/        |gz  c_/        t          j        d?t          j        |d                   dt          j        |j         d|j                              n|d         d@k    rg }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1&dA         ||dB} 0                    d&d7         |           |D ]O}dC ""fdD  fdE$dF |j        D             }dG |j        D             }t          |$fdHI          }||z   |_        Pd S )KNzProcessing targetr8   rC   r  zUnknown targetsrcrZ   r)   c                   t           j                            t           j                            j        d                             }t           j                            |           r t           j                            | |          S t           j                            |           s| S t           j                            t           j                            |           |          S )Nr=   )r>  r?  abspathr@  r-  isabsrelpathexists)r  r=   rk   r8   s     r%   
rel_sourcez+Rewriter.process_target.<locals>.rel_sourcem  s    W__RW\\$.&BR%S%STTFw}}S!! wsF333W^^C(( 
7??27??3#7#7@@@r$   c                &    g | ]} |          S r#   r#   )r   rp  r  s     r%   r   z+Rewriter.process_target.<locals>.<listcomp>w  s!    DDDjjmmDDDr$   rL   c                4   g }t          | t                    rBt          | j        j                  }| j        j        t          v r|                    d           n>t          | t                    r| j        j        }nt          | t                    r| j        }|S )Nr   )rr   r   r^   r   r   rd  r   r   popr   r   )nr   s     r%   arg_list_from_nodez3Rewriter.process_target.<locals>.arg_list_from_nodez  s    D!\** #AF,--;$(>>>HHQKKKAy)) #v'A|,, #{Kr$   r  r   r   z  -- Sourcez.is already defined for the target --> skippingz  -- Adding sourceat:r   r  c                    d         D ]8} |          D ]*}t          |t                    r|j        | k    r||fc c S +9dS )NrL   NNr   r  r   r   r  r8   s      r%   	find_nodez*Rewriter.process_target.<locals>.find_node  sl    	* , ,A//22 , ,%a44 , w#~~'(!t, "zr$   z  -- Unable to find sourcezin the targetz  -- Removing sourcer  r	  Textra_filesc              3  Z   K   | ]&}t          |t                    |j        d k    "|V  'dS )r  Nr   )r   rt  s     r%   	<genexpr>z*Rewriter.process_target.<locals>.<genexpr>  sn        +M  +MYcdegmYnYn  +Mstsz  L  tL  tL1  tL  tL  tL  tL  +M  +Mr$   r   r<   z[]r   FTargetz#extra_files argument must be a listz  -- Extra filez  -- Adding extra filer
  c                    d         D ]8} |          D ]*}t          |t                    r|j        | k    r||fc c S +9dS )Nr  r  r   r  s      r%   r  z*Rewriter.process_target.<locals>.find_node  sl    . , ,A//22 , ,%a44 , w#~~'(!t, "zr$   z  -- Unable to find extra filez  -- Removing extra filezCan not add targetzbecause it already existsz[- ]_r?   rA   _exe_lib_sourcesr=   rQ   r|   files()r|  c                T    g | ]$}t          t          d dddd|                    %S )r   r   N)r   r   )r   rp  filenames     r%   r   z+Rewriter.process_target.<locals>.<listcomp>8  s9    %v%v%vbcjx1aQRTXZ[1\1\&]&]%v%v%vr$   r  z  -- Removing targetrK   r\  )r\  rL   r  c                p    |                                  rt          |           n|                                 S rj   )isdigitintlower)texts    r%   <lambda>z)Rewriter.process_target.<locals>.<lambda>e  s%    #P3t999DJJLL r$   c                F    fdt          j        d|           D             S )Nc                &    g | ]} |          S r#   r#   )r   cconverts     r%   r   z=Rewriter.process_target.<locals>.<lambda>.<locals>.<listcomp>f  s!    'V'V'Vq

'V'V'Vr$   z([0-9]+))r   split)ru   r  s    r%   r  z)Rewriter.process_target.<locals>.<lambda>f  s)    'V'V'V'VBHZQT<U<U'V'V'V r$   c                d      fdt                               d                    D             S )Nc                ^    g | ])\  }}                     d           |k     |          f*S )rm  )count)r   idxrp  alphanum_keyru   s      r%   r   z=Rewriter.process_target.<locals>.<lambda>.<locals>.<listcomp>g  s<    'y'y'yU[UXZ[33)>Q(P'y'y'yr$   rm  )	enumerater  )ru   r  s   `r%   r  z)Rewriter.process_target.<locals>.<lambda>g  s9    'y'y'y'y'y_hilirirsviwiw_x_x'y'y'y r$   c                <    g | ]}t          |t                    |S r#   rr   r   ro  s     r%   r   z+Rewriter.process_target.<locals>.<listcomp>i  s'    OOOQZ:5N5NOqOOOr$   c                <    g | ]}t          |t                    |S r#   r  ro  s     r%   r   z+Rewriter.process_target.<locals>.<listcomp>j  s'    KKKQAz1J1JKqKKKr$   c                $     | j                   S rj   r  )rp  path_sorters    r%   r  z)Rewriter.process_target.<locals>.<lambda>k  s    KK4H4H r$   )ru   )r  rZ   r)   rZ   )1r   r=  r   rD  rf  rb  rX  rZ  rr   r   r   r  r  greenrV  r  linenor   r   r   r   r   r   r3  r   r  
IndexErrornextrO   r`   StopIterationr}   r   r2  rc  r   subr>  r?  r@  r   rA  r   acceptr	   r5  r  r4  rK  )'rk   rW   to_sort_nodesr   src_listr   r   	to_appendtokenr  r  rootstring_nodetgt_function
mark_arrayextra_files_keyextra_files_listid_base	target_id	source_idsrc_arg_nodesrc_arr_nodesrc_far_nodesrc_fun_nodesrc_ass_nodetgt_arg_nodetgt_fun_nodetgt_ass_node	to_remove	test_dataunknownrL   r  r  r  r  r  r  r8   s'   `                               @@@@@@@r%   r8  zRewriter.process_targetd  s   $diH&>&>TYWZ[fWgMhMhiii!!#h-00>c+.,>>J'3x=)A)ATDMMOOTTTT$$&&&	A 	A 	A 	A 	A 	A 	A DDDDS^DDDC	N
	 
	 
	 {y((Di  &i(+f~### HI& . .++A.. . .A!!Z00 . QWI-.
 ICI//00 1 1==H]DJqMM;klll-tz!}}d%E%E%E%EFFH H Hhq!QaHHj//00		 H$y 9::  9D,//  ''')+ },,Zl5S5S,(+4...##v-##))" " " " " " ^ 2 2$-IaLL!k<L!=tz!}}o^^^  d\9$=>> $#yHHl33 $#H+++/A(<%S%S{?Q%S%STTV V V"))+666 =00D,9W9W0!hZ/Mt222''D61''-20 !222)/LJ/m,Q/ / / /	>&*  +M  +Ml6G6N6S6S6U6U  +M  +M  +M  'M  'MO',3ODDD$ > > >$WS\\<b,J_abdeghjnpt@u@u3v3vx  AD  yE  yE  F  FD ~BL%,VE(LDY[\^_abdhjw4x4x-y-yz!&J#4+>>>++~=++> *.}%%%/ $'' /'3DJ?)-}%dI.. +
8TYs8}%=%=?dwgkgtgtgvgvwwww((***  "M* 6 6++A.. 6 6A!!Z00 6(QWI5(6
 ICI//00 1 1(((H.
1?oppp14:a==$%E%E%E%EFFH H Hhq!QaHHj//00		 yH)+ },,(+  .d$*===##v-##!111" " " " " " ^ 2 2$-IaLL!k<L!A4:a==Rabbb  93TZ]]F(<%S%S{?Q%S%STTV V V"))+666 =00D,9W9W0!hZ/Mt222''D61''#2& --!
/3x=1I1IKfyimivivixixyyyy((***fWc3x=99G,/,>,,N,N&((TZI*,Iw||CM;3MNNH (h!Q4QS(T(TUUL$WS\\<NNL'h!Q4QS(T(TUUL'uT8Q1fV]/^/^(_(_ahilamamo{  ~E  FI  ~J  ~J  K  KL)&tXq!QPVXa1b1b*c*celmpeqeqs  A  AL%v%v%v%vgjktgu%v%v%vL"&2^L" (h!Q4QS(T(TUUL'uT8Q1fVYZgVh/i/i(j(jlstwlxlx  {G  IP  QT  IU  IU  V  VL)&tXq!QPVXa1b1b*c*celmpeqeqs  A  AL58Q1dCMRRSSuXxAq$	JJKK&L"
  7 9 9::: 7 9 9:::,!==,,11&.AAI "6N	  YK/  H+TZH-F-F[I$6!K!K9I!K!KLLN N N N ''HI& . .++A.. . .A!!Z00 . QWI-.  "M* 6 6++A.. 6 6A!!Z00 6(QWI5(6 v#/ I
 MM(F4L)<<<  	, 	,APPGVVVVLzzzzKOO!+OOOGKK!+KKKGW*H*H*H*HIIIG!G+AKK	, 	,s8   P T! AQ('T!(B*TT!T	T! T!c           	        d|vrt          d          |d         | j        vrMt          d                    |d         t          | j                                                                       | j        |d                  |           d S )Nr.   zCommand has no key "type"z0Unknown command "{}". Supported commands are: {})r   r9  rq   r^   r`   )rk   rW   s     r%   processzRewriter.processn  s    #$?@@@v;dn,,#$V%+VCKdn>Q>Q>S>S9T9T%U%UW W W#s6{#C(((((r$   c                   t          d | j        D                       sJ t          d | j        D                       sJ t          d | j        D                       sJ t          d | j        D                       sJ d | j        D             }|d | j        D             z  }t          |d d	          }|d
 | j        D             z  }g }|D ]}d}|d         dk    s|d         dk    rVt                      }|d                             |           |                                 |j        	                                }|d         j
        ||d         |d         d}||gz  }i |D ]$}|d         v rt          j                            t          j                            | j        |d                             }d}t          j                            |          s+t#          |dd          5  	 d d d            n# 1 swxY w Y   t#          |d          5 }	|	                                }d d d            n# 1 swxY w Y   |                    d          }
d}g }|
D ]}||gz  }|t)          |          z  }|||d|d         <   &fd|D ]I}|d         dv r |           |d         dk    r%|d                  dxx         |d         dz   z  cc<   J                                D ]w\  }}t-          j        dt-          j        |                     t#          |d         dd          5 }	|	                    |d                    d d d            n# 1 swxY w Y   xd S )Nc              3  v   K   | ]4}t          |d           ot          |d          ot          |d          V  5dS r  colnor  Nhasattrro  s     r%   r  z)Rewriter.apply_changes.<locals>.<genexpr>w  sK      xx_`71h''ZGAw,?,?ZGAzDZDZxxxxxxr$   c              3  v   K   | ]4}t          |d           ot          |d          ot          |d          V  5dS r  r  ro  s     r%   r  z)Rewriter.apply_changes.<locals>.<genexpr>x  sK      yy_`71h''ZGAw,?,?ZGAzDZDZyyyyyyr$   c              3  N   K   | ] }t          |t          t          f          V  !d S rj   )rr   r   r   ro  s     r%   r  z)Rewriter.apply_changes.<locals>.<genexpr>y  s1      YY:a)\!:;;YYYYYYr$   c              3  Z   K   | ]&}t          |t          t          t          f          V  'd S rj   )rr   r   r   r   ro  s     r%   r  z)Rewriter.apply_changes.<locals>.<genexpr>z  s4      jjPQ:a)^\!JKKjjjjjjr$   c                    g | ]}|d dS )modifyr   r3   r#   ro  s     r%   r   z*Rewriter.apply_changes.<locals>.<listcomp>|  s     SSS!qH55SSSr$   c                    g | ]}|d dS )rF   r  r#   ro  s     r%   r   z*Rewriter.apply_changes.<locals>.<listcomp>}  s     QQQqT22QQQr$   c                6    | d         j         | d         j        fS )Nr   )r  r  )rp  s    r%   r  z(Rewriter.apply_changes.<locals>.<lambda>~  s    qy7G66Y r$   T)ru   reversec                    g | ]}|d dS )rE   r  r#   ro  s     r%   r   z*Rewriter.apply_changes.<locals>.<listcomp>  s     OOOU33OOOr$   r<   r3   r  rE   r   filerZ   r   r3   r  wutf-8encodingr   )r?  rawoffsetsc                   | d                  d         }| d                  d         }| d         }|j         dz
  }|j        }||         |z   }|}t          |t          t          f          r||j        dz
           |j        z   }nt          |t                    r| d         dk    rt          |j        t          t          f          r/ 	| d         d|j        dd	           | d                  d         }||         d
k    r|dz  }||         d
k    |dz  }||         dv r|dz  }||         dv |d |         | d         z   ||d          z   | d                  d<   d S )Nr  r
  r	  r   r   r3   rF   r<   r  r|  >   	
 rZ   )	r  r  rr   r   r   
end_lineno	end_colnor   r   )
r   r
  r	  r   linecolstartendr  remove_nodes
           r%   r  z+Rewriter.apply_changes.<locals>.remove_node  s   AfI&y1G&	"5)CV9D;?D*CDMC'EC$L 9:: do12T^C D.11 akT6I6Idj9l*CDD 2K62tz]a b bccc&	*51C#h#oo1HC #h#ooq#h"3331HC #h"333 '*&5&kAeH&<s344y&HE!F)U###r$   >   rF   r  r	  rZ   r  	Rewritingr?  )allr3  r4  r  r5  r
   r  post_processr`  stripr  r>  r?  realpathr@  r-  r  openread
splitlinesro   rp   r   r=  rV  rP  )rk   
work_nodesstr_listr   new_dataprinterrH  fpathfdatafpm_linesoffsetline_offsetsr   ru   rv   r  r  s                   @@r%   apply_changeszRewriter.apply_changesv  s   xxdhdwxxxxxxxxyydhdxyyyyyyyyYYTEXYYYYYYYYjjUYUijjjjjjjjSSt?RSSS
QQD<PQQQQ
J,Y,Ycghhh
OOT=NOOOO
  	 	AH{h&&!H+*>*>$,,&	  )))$$&&&">//11&	*&	H+	 D HH  	 	AyE!!G$$RW\\$.!F)%L%LMMEE7>>%(( %w777                eg... ""		" " " " " " " " " " " " " " " &&t,,GFL ! !(#a&&  '   E!F)	I 	I 	I 	I 	I 	I0  	; 	;A{...A8%%ai '''1U8d?:'''  	% 	%HCH[$+c"2"2333c&k3999 %RU$$$% % % % % % % % % % % % % % %	% 	%s6   7HH		H		!II		I	>M&&M*	-M*	N)r,  F)r-  rZ   r.  rZ   r/  r   )rF  rZ   rG  rZ   rH  rI  )r8   rZ   )r(  rZ   )r   r   r)   r   )r    r!   r"   rl   rE  rK  rR  rX  rZ  rf  rk  rh   r]   r6  r7  r  r8  r  r(  r#   r$   r%   r+  r+  e  sm           W W W0 0 0 0? ? ?
6 6 6
A A A
   <   * \- 1233+( +( 43+(Z \-)**k* k* +*k*Z   
 \-)**G, G, +*G,R) ) )[% [% [% [% [%r$   r+  r  r  r  r  r	  r
  rK   rD   in_listT.List[str]T.Dict[str, str]c                    i }t          |           }	 |D ]}t          |          ||<   n# t          $ r t          d          w xY w|S )Nz;in_list parameter of list_to_dict must have an even length.)iterr  r  	TypeError)r)  r`  itr   s       r%   list_to_dictr0    st    F	gBW 	! 	!A RF1II		!
  W W WUVVVWMs	   + AT.List[dict]c                ^    d| j         t          | j                 | j        | j        | j        dgS )Nr8   )r.   r8   rC   rL   r=   r?   )r8   target_operation_maprC   rL   r=   r>   rU   s    r%   generate_targetr5    s9    .)'*;<?.'   r$   c                V    d| j         | j        | j        t          | j                  dgS )NrO   )r.   rP   rQ   rC   rO   )rP   rQ   rC   r0  rO   r4  s    r%   generate_kwargsr7    s7    $j&w~..   r$   c                >    d| j         t          | j                  dgS )NrT   )r.   rC   rU   )rC   r0  rU   r4  s    r%   generate_def_optsr9    s,    !&00   r$   c                   t           j                            | j                  rDt	          | j        d          5 }t          j        |          cd d d            S # 1 swxY w Y   d S t          j        | j                  S )Nr  r  )r>  r?  r  rX   r  loadloads)rU   r$  s     r%   generate_cmdr=    s    	w~~gl## (',111 	!R9R==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! z','''s   AA #A )r8   r9   rO   rR   rS   rV   rW   c                   t          j        d           | j        st          j                     	 t	                       t          | j        | j                  }|                                 | j	        *t          j
        d           	 t          j                     dS t          | j	                 |           }t          |t                    st          d          |D ];}t          |t                     st          d          |                    |           <|                                 |                                 	 t          j                     dS # t(          $ r}|d }~ww xY w# t          j                     w xY w)NT)r/  zNo command specifiedr   zCommand is not a listzCommand is not an objectr   )r   redirectverbose	set_quietr   r+  r-  r4   rE  r.   rb  set_verbosecli_type_maprr   r^   r.  objectr  r(  rR  	Exception)rU   rewritercommandsr   r  s        r%   runrH    s   M$? G-7<HHH   <J-...$ 	!  -g66(D)) 	53444 	  	 Aa(( < :;;;Q    	     	s+   AE B$E 
E)"E$$E))E, ,F)r&   r   r'   r(   r)   r*   )rv   rZ   r)   r   )r)  r*  r)   r+  )r)   r1  )@
__future__r   astr   r   r   r   r	   r
   mesonbuild.mesonlibr   r   r<   r   r   	functoolsr   mparserr   r   r   r   r   r   r   r   r   r   rX   r>  r   rN  typingTTYPE_CHECKINGargparser   r   r   r   rf   rh   r}   r   r   r   r   r   r   r   rZ   rI  r^   r]   r_   r+  r3  r0  r5  r7  r9  r=  rC  rH  r#   r$   r%   <module>rR     s   # " " " " " J  J  J  J  J  J  J  J  J  J  J  J  J  J  J  J ; ; ; ; ; ; ; ;               O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O  O                    ? "66666666!!!!!!	 	 	 	 	 	 	 	
!K !K !K !KF       >; ; ; ;%f %f %f %f %f %f %f %fN    y   
 
 
 
 
	 
 
 
    i   M> M> M> M> M>	 M> M> M>^    9   0    )   4 4%!23"d# 
 $%D$4![![![\T"	  d#4!~!~!~"d#D/\  ,S  ,S  ,S  T  , %	 	 &# #!  (!" 1  Bl	% l	% l	% l	% l	% l	% l	% l	%^ 
(&              ( ( ( ( (     r$   