
    &`iu              "       l   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ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mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dl m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 dZ5dZ6dZ7dej8        fdZ9de:fdZ;d Z<dee:         dee:e:f         fdZ=d Z> ej?        d e@ddg                     d!             ZAeAB                    d"#           ejC        d$d%e jD        E                    d&d'          d(e:e6)           ejC        d*e%d(e:d+e% d,)           ejC        d-e&d(eFd.e& d,)           ejC        d/e*jG        d( ejH         eIe*                    d0)           ejC        d1e+jJ        d( ejH         eIe+                    d2)           ejC        d3e$d(eFd4e$ d,)           ejC        d5g d(d6d78          d9                                                                                                 ZKd:e:d;ee:         d<ee:e:f         d=eee:ef                  de3f
d>ZLeAB                    d?d@A           ejM        d:           ejM        d<dBd(C           ejC        dDe:dd(dEF           ejC        dGe:dd(dHF           ejC        dIe:dd(dJF           ejC        dKd(de:dLM           ejC        d$d%e jD        E                    dNdO          d(e:e7)          d:e:d<ee:         d=e:dPe:dQe:d;ee:         dRe:fdS                                                                                                ZNeAB                    dTdUA           ejM        d:           ejM        d<dBd(C           ejC        dDe:dd(dVF           ejC        dGe:dd(dWF           ejC        dIe:dd(dXF           ejC        dYdZd,e:e5[           ejC        d$d%e jD        E                    d&d          d(e:e6)           ejC        d\d6d]^           ejC        d_d`d6dab           ejC        dcd(e:dddef           ejC        dKd(e'e:dgM          d:e:d<ee:         d=e:dPe:dQe:dhe:dRe:dieOdjeOdke:d;e:fdl                                                                                                                                                ZPeAB                    dm#           ejC        d$d%e jD        E                    dNdO          d(e:e7)           ejC        dKdnd(e:dop          dRe:d;ee:         fdq                                    ZQeAB                    drdsA           ejC        d$d%e jD        E                    dNdO          d(e:e7)           ejC        dKdndd(e:dt)          dRe:d;ee:         fdu                                    ZReAB                    dv#           ejC        d$d%e jD        E                    dNdO          d(e:e7)           ejC        dwdxd6dyb          dRe:dzeOfd{                                    ZSeAB                    d|d}A           ejM        d~dBd6C           ejC        dYdZd,e:e5[           ejC        ddde:d[           ejC        d5g d(d6d78          d~ee:         dhe:dee:         dee:         fd                                                            ZT G d dejU                  ZVdej8        de	fdZWeVX                    e	eW           eVY                    e:e9           dS )    N)asdict)Enum)AnyDictListOptionalTuple)serve)import_attr)
cli_logger)parse_runtime_env_args)ServeSubmissionClient)api)BuiltApplication	build_app)DEFAULT_GRPC_PORTDEFAULT_HTTP_HOSTDEFAULT_HTTP_PORTSERVE_DEFAULT_APP_NAMESERVE_NAMESPACE)DeploymentModeProxyLocationgRPCOptions)Applicationdeployment_to_schema)LoggingConfigServeApplicationSchemaServeDeploySchemaServeInstanceDetailszLocal directory to look for the IMPORT_PATH (will be inserted into PYTHONPATH). Defaults to '.', meaning that an object in ./main.py can be imported as 'main.object'. Not relevant if you're importing from an installed module.zZAddress to use for ray.init(). Can also be set using the RAY_ADDRESS environment variable.zAddress for the Ray dashboard. Defaults to http://localhost:8265. Can also be set using the RAY_DASHBOARD_ADDRESS environment variable.dumperc                     t          |                                          dk    r|                     d|d          S |                     d|          S )z
    A custom representer to write multi-line strings in block notation using a literal
    style.

    Ensures strings with newline characters print correctly.
       tag:yaml.org,2002:str|)style)len
splitlinesrepresent_scalarr    datas     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/serve/scripts.pystr_presenterr,   =   sT     4??!!&&'>C&PPP""#:DAAA    inputc                 l    t          j        dt           j                  }|                    d|           S )z)Removes ANSI escape sequences in a stringa  
        \x1B  # ESC
        (?:   # 7-bit C1 Fe (except CSI)
            [@-Z\\-_]
        |     # or [ for CSI, followed by a control sequence
            \[
            [0-?]*  # Parameter bytes
            [ -/]*  # Intermediate bytes
            [@-~]   # Final byte
        )
     )recompileVERBOSEsub)r.   ansi_escapes     r+   remove_ansi_escape_sequencesr6   K   s5    *
	 	
 K ??2u%%%r-   c                     |                                  D ]x\  }}t          |t                    rt          |          | |<   t          |t                    rd |D             | |<   Qt          |t
                    rt          |          | |<   y| S )a  
    Removes ANSI escape sequences recursively for all strings in dict.

    We often need to use yaml.dump() to print dictionaries that contain exception
    tracebacks, which can contain ANSI escape sequences that color printed text. However
    yaml.dump() will format the tracebacks incorrectly if ANSI escape sequences are
    present, so we need to remove them before dumping.
    c                 ,    g | ]}t          |          S  )process_dict_for_yaml_dump).0items     r+   
<listcomp>z.process_dict_for_yaml_dump.<locals>.<listcomp>m   s!    FFFD1$77FFFr-   )items
isinstancedictr:   liststrr6   )r*   kvs      r+   r:   r:   _   s     

 6 61a 	4033DGa 	6FFAFFFDGG3 	62155DGKr-   argsreturnc                    t                      }| D ]n}|                    dd          }t          |          dk    st          |d                   dk    rt          j        d| d          |d         ||d         <   o|S )N=r"   )maxsplit   r   zInvalid application argument 'z%', must be of the form '<key>=<val>'.)r@   splitr&   clickClickException)rE   	args_dictargrK   s       r+   convert_args_to_dictrP   t   s    I ' '		#	**u::??c%(mmq00&5 5 5 5  
 $Ah	%(r-   c                  N    dt           j        v rt          j        d           d S d S )NRAY_AGENT_ADDRESSzThe `RAY_AGENT_ADDRESS` env var has been deprecated in favor of the `RAY_DASHBOARD_ADDRESS` env var. The `RAY_AGENT_ADDRESS` is ignored.)osenvironr   warningr9   r-   r+   warn_if_agent_address_setrV      s;    bj((	
 	
 	
 	
 	
 )(r-   z5CLI for managing Serve applications on a Ray cluster.z--helpz-h)help_option_names)helpcontext_settingsc                      d S Nr9   r9   r-   r+   clir\      s	    
 	Dr-   zStart Serve on the Ray cluster.)rX   z	--addressz-aRAY_ADDRESSautoF)defaultrequiredtyperX   z--http-hostz0Host for HTTP proxies to listen on. Defaults to .z--http-portz0Port for HTTP proxies to listen on. Defaults to z--http-locationz+DEPRECATED: Use `--proxy-location` instead.z--proxy-locationz/Location of the proxies. Defaults to EveryNode.z--grpc-portz0Port for gRPC proxies to listen on. Defaults to z--grpc-servicer-functionsTz|Servicer function for adding the method handler to the gRPC server. Defaults to an empty list and no gRPC server is started.)r_   r`   multiplerX   c                     |t           j        k    rt          j        d           |}t	          j        | t                     t          j        |t          ||          t          ||                     d S )NzZThe `--http-location` flag to `serve start` is deprecated, use `--proxy-location` instead.)address	namespacehostportri   grpc_servicer_functions)proxy_locationhttp_optionsgrpc_options)r   HeadOnlyr   rU   rayinitr   r
   startr@   r   )re   	http_host	http_porthttp_locationrl   	grpc_portrk   s          r+   rr   rr      s    z ///.	
 	
 	

 'H!    
K%
 
 
 !$;
 
 

 
 
 
 
 
r-   config_or_import_pathname	argumentsruntime_envc                   t          j        |                                           r| }t          j        d| d           t          |          dk    rt          j        d          t          |d          5 }|r't          |          dk    rt          j	        d           |t          j	        d           t          j        |          }t          j        |          }ddd           n# 1 swxY w Y   nF| }t          j        d	| d           t          |||
          }	|||	_        t          |	g          }|S )zCGenerates a deployable config schema for the passed application(s).zDeploying from config file: ''.r   z<Application arguments cannot be specified for a config file.rz7Passed in runtime_env is ignored when using config fileNz0Passed in name is ignored when using config filezDeploying from import path: ')import_pathrz   rE   )applications)pathlibPathis_filer   printr&   rL   rM   openrU   yaml	safe_loadr   	parse_objr   rx   )
rw   rx   ry   rz   config_pathconfig_fileconfig_dictconfigr~   apps
             r+   )_generate_config_from_file_or_import_pathr      s    |)**2244 7+HHHHIIIy>>A&N  
 +s## 	>{ s;//!33"M   "#UVVV.55K&0==F	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> ,HHHHIII$##
 
 

 CH"666Ms   8A(C,,C03C0z/Deploy an application or group of applications.a  Deploy an application from an import path (e.g., main:app) or a group of applications from a YAML config file.

Passed import paths must point to an Application object or a function that returns one. If a function is used, arguments can be passed to it in 'key=val' format after the import path, for example:

serve deploy main:app model_path='/path/to/model.pkl' num_replicas=5

This command makes a REST API request to a running Ray cluster.)
short_helprX   )nargsr`   z--runtime-envziPath to a local YAML file containing a runtime_env definition. Ignored when deploying from a config file.)ra   r_   r`   rX   z--runtime-env-jsonzRJSON-serialized runtime_env dictionary. Ignored when deploying from a config file.z--working-dirzDirectory containing files that your application(s) will run in. This must be a remote URI to a .zip file (e.g., S3 bucket). This overrides the working_dir in --runtime-env if both are specified. Ignored when deploying from a config file.z--namezKCustom name for the application. Ignored when deploying from a config file.)r`   r_   ra   rX   RAY_DASHBOARD_ADDRESSzhttp://localhost:8265runtime_env_jsonworking_dirre   c                    t          |          }t          |||          }t          | |||          }	t          |                              |	                    d                     t          j        d           d S )Nrz   r   r   )rx   ry   rz   Texclude_unsetz
Sent deploy request successfully.
 * Use `serve status` to check applications' statuses.
 * Use `serve config` to see the current application config(s).
)rP   r   r   r   deploy_applicationsr@   r   success)
rw   ry   rz   r   r   rx   re   rN   final_runtime_envr   s
             r+   deployr     s    L %Y//I.)   7%	  F '""66$''   	K    r-   z,Run an application or group of applications.aY  Run an application from an import path (e.g., my_script:app) or a group of applications from a YAML config file.

Passed import paths must point to an Application object or a function that returns one. If a function is used, arguments can be passed to it in 'key=val' format after the import path, for example:

serve run my_script:app model_path='/path/to/model.pkl' num_replicas=5

If passing a YAML config, existing applications with no code changes will not be updated.

By default, this will block and stream logs to the console. If you Ctrl-C the command, it will shut down Serve on the cluster.zPath to a local YAML file containing a runtime_env definition. This will be passed to ray.init() as the default for deployments.ziJSON-serialized runtime_env dictionary. This will be passed to ray.init() as the default for deployments.a  Directory containing files that your application(s) will run in. Can be a local directory or a remote URI to a .zip file (S3, GS, HTTP). This overrides the working_dir in --runtime-env if both are specified. This will be passed to ray.init() as the default for deployments.z	--app-dirz-d)r_   ra   rX   z--blocking/--non-blockingzWhether or not this command should be blocking. If blocking, it will loop and log status until Ctrl-C'd, then clean up the app.)r_   rX   z--reloadz-rzThis is an experimental feature - Listens for changes to files in the working directory, --working-dir or the working_dir in the --runtime-env, and automatically redeploys the application. This will block until Ctrl-C'd, then clean up the app.)is_flagrX   z--route-prefix/zRoute prefix for the application. This should only be used when running an application specified by import path and will be ignored if running a config file.)r`   ra   r_   rX   zName of the application. This should only be used when running an application specified by import path and will be ignored if running a config file.app_dirblockingreloadroute_prefixc                 8   t           j                            d|           t          |          }t	          |||          }t          j        |                                           rt          |          dk    rt          j
        d           d}| }t          j        d| d           t          |d          5 }t          j        |          }t          j        |          }d d d            n# 1 swxY w Y   n>d}| }t          j        d	| d           t#          j        t'          |          |          }t)          j                    st)          j        |t.          |
           nT|R|dk    rL|t)          j                    j        k    r0t)          j                    j        }t          j
        d| d           ddi}t5                      }|rxt7          |t                    rct9          j        |j                  j        |d<   |j         !                                }i ||}t5          di |j"        !                                }t#          j#        ||          }	 |rD|$                    |d           t          j%        d           |r	 tM          j'        d           n|o| }tQ          j)        |||
|	           |r|stU          j+        d          |r|}n|}tY          j-        |dd          D ]{}|ru	 t#          j        t'          |d          |          }tQ          j)        |d|
|	           B# t\          $ r* t_          j0                     t          j1        d           Y uw xY wzd S d S # td          $ r> t          j3        d           tQ          j4                     t          j5                     Y d S t\          $ rQ t_          j0                     t          j1        d           tQ          j4                     t          j5                     Y d S w xY w)Nr   r   z=Application arguments are ignored when running a config file.TzRunning config file: 'r|   r}   FzRunning import path: ')re   rf   rz   r^   zlAn address was passed to `serve run` but the imported module also connected to Ray at a different address: 'zJ'. You do not need to call `ray.init` in your code when using `serve run`.location	EveryNode)rm   rn   )	_blockingz%Submitted deploy config successfully.
   )r   rx   r   z=The --non-blocking option conflicts with the --reload option.i'  )rust_timeoutyield_on_timeout)reload_module)targetr   rx   r   z7Deploying the latest version of the application failed.z'Got KeyboardInterrupt, shutting down...zNReceived unexpected error, see console logs for more details. Shutting down...r9   )6syspathinsertrP   r   r   r   r   r&   r   rU   r   r   r   r   r   r   _private_api,call_user_app_builder_with_args_if_necessaryr   rp   is_initializedrq   r   get_runtime_contextgcs_addressr   r?   r   _to_deployment_moderl   valuerm   r@   rn   serve_startdeploy_appsr   timesleepr
   runrL   rM   
watchfileswatch	Exception	traceback	print_excerrorKeyboardInterruptinfoshutdownexit)rw   ry   rz   r   r   r   re   r   r   r   rx   rN   r   	is_configr   r   r   r   r~   r   ray_addressrm   rn   config_http_optionsclientshould_block	watch_dirchangess                               r+   r   r   s  s@   f HOOAw$Y//I.)   |)**2244 
y>>AO   	+A+AAABBB+s## 	>{.55K&0==F	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	+A+AAABBBG$$i
 

  
DU	
 	
 	
 	
 	
 	vs.00<<< -//;K9DK K K	
 	
 	
 ,L==L AZ(9:: A#0#D!$
 $

 	Z  %16688>->>"@@V%8%=%=%?%?@@%!!  F
; 
	Xv777FGGG ##JrNNN## $2F
LIcLt,WWWW  	 *S    $'		#	%+"!%    
   +W'4HHH)  	#&%*!%)5	     %   !+---"(U     	  	 0    ABBB





   	
 	
 	
 	





sQ   ;)C00C47C4!BM8 ?<L<;M8 <1M0-M8 /M00M8 8AP?APPz>Gets the current configs of Serve applications on the cluster.z-nzName of an application. Only applies to multi-application mode. If set, this will only fetch the config for the specified application.)r`   ra   rX   c                 *   t                       t          di t          |                                           }|j        }|Wd |                                D             }|r&t          d                    |          d           d S t          d           d S |                    |          }||j	        t          d| d           d S |j	        
                    d	          }t          t          j        |t          d
          d           d S )Nc                     g | ]>}|j         	t          j        |j                             d          t          d          ?S )NTr   FDumper	sort_keys)deployed_app_configr   dumpr@   ServeDeploySchemaDumper)r;   r   s     r+   r=   zconfig.<locals>.<listcomp>  s]     
 
 
 &2 I',,4,@@.   322r-   z
---

r0   endzNo configuration was found.z-No config has been deployed for application "z".Tr   Fr   r9   )rV   r   r   get_serve_detailsr   valuesr   joingetr   r@   r   r   r   )re   rx   serve_detailsr   configsr   r   s          r+   r   r   g  sW   ( (  

(
(
:
:
<
< M !-L |
 
 $**,,
 
 
  	1+""7++444444/00000 t$$;#19J$JJJKKKKK,111EEF	&)@ERRR     r-   z@Get the current status of all Serve applications on the cluster.a  Prints status information about all applications on the cluster.

An application may be:

- NOT_STARTED: the application does not exist.
- DEPLOYING: the deployments in the application are still deploying and haven't reached the target number of replicas.
- RUNNING: all deployments are healthy.
- DEPLOY_FAILED: the application failed to deploy or reach a running state.
- DELETING: the application is being deleted, and the deployments in the application are being teared down.

The deployments within each application may be:

- HEALTHY: all replicas are acting normally and passing their health checks.
- UNHEALTHY: at least one replica is not acting normally and may not be passing its health check.
- UPDATING: the deployment is updating.z_Name of an application. If set, this will display only the status of the specified application.c                    t                       t          di t          |                                           }t	          |                                          }|;t          t          j        t          |          t          dd          d           d S ||j        vrt          j        d| d           d S t          t          j        t          |d         |                   t          dd          d           d S )	NF)r   default_flow_styler   r0   r   zApplication "z" does not exist.r   r9   )rV   r   r   r   r   _get_statusr   r   r   r:   r   r   r   r   )re   rx   r   statuss       r+   r   r     s<   N (  

(
(
:
:
<
< M M--//00F |I*622.#(   		
 		
 		
 		
 		
 		
 }111DTDDDEEEEE	.vn/Ed/KLL2',#   	 	 	 	 	 	r-   z;Shuts down Serve on the cluster, deleting all applications.z--yesz-yzBypass confirmation prompt.yesc                    t                       	 t          d
i t          |                                           }|j        j        t          j        d|  d           d S n2# t          $ r%}t          j	        d|  d|            Y d }~d S d }~ww xY w|st          j        d|  dd           t          |                                            t          j        d	           d S )Nz2No Serve instance found running on the cluster at rb   z3Unable to shutdown Serve on the cluster at address z: z5This will shut down Serve on the cluster at address "z=" and delete all applications there. Do you want to continue?T)abortzCSent shutdown request; applications will be deleted asynchronously.r9   )rV   r   r   r   controller_infonode_idr   rU   r   r   rL   confirmdelete_applicationsr   )re   r   r   es       r+   r   r     sW    , 
 
#G,,>>@@
 
 (08OWOOO   F	 9
    P'PPQPP	
 	
 	
 		  
       		
 	
 	
 	
 '""66888M    s   AA" "
B,BBz6Generate a config file for the specified applications.a  Imports the applications at IMPORT_PATHS and generates a structured, multi-application config for them. If the flag --single-app is set, accepts one application and generates a single-application config. Config outputted from this command can be used by `serve deploy` or the REST API. import_pathsz--output-pathz-ozyLocal path where the output config will be written in YAML format. If not provided, the config will be printed to STDOUT.output_pathrk   c           	          t           j                            d|           ddt          dt          f fd}dt          j         d}g }t                     D ]+\  }}|                     ||d|dz    	                     ,d
dddt          |dt                      
                                |d}	t          j        |	           |t          j        |	t          dddd          z  }t!          j        d           |                    d          dz   }|rt'          |d          nt           j        5 }
|
                    |           d d d            d S # 1 swxY w Y   d S )Nr   r~   rx   c                 V   t          |           }t          |t                    s#t          d|  dt	          |           d          t          ||          }t          |t                    dk    rdnd| | i d |j        D                       }|	                    d	
          S )Nz
Expected 'z' to be an Application but got rb   rx   r"   r   c                 ,    g | ]}t          |          S r9   )r   )r;   ds     r+   r=   z3build.<locals>.build_app_config.<locals>.<listcomp>O  s!    PPPQ-a00PPPr-   )rx   r   r~   rz   deploymentsTr   )
r   r?   r   	TypeErrorra   r   r   r&   r   r@   )r~   rx   r   	built_appschemar   s        r+   build_app_configzbuild.<locals>.build_app_configB  s    &{33#{++ 	U[UUcUUU   '0$&?&?&?	' #L 1 1Q 6 6JJJ#PP):OPPP
 
 
 {{{...r-   zB# This file was generated using the `serve build` command on Ray vz.

r   r"   r   r   z0.0.0.0i@  rg   rj   )rl   rm   rn   logging_configr   FP   rJ   )r   r   r   widthindentz^The auto-generated application names default to `app1`, `app2`, ... etc. Rename as necessary.

wr[   )r   r   r   rB   rp   __version__	enumerateappendr   r   r@   r   r   r   r   r   r   r   rstripr   stdoutwrite)r   r   r   rk   r   
config_strapp_configs	app_indexr~   deploy_configfs   `          r+   buildr    s   R HOOAw/ /c / / / / / / /&	*?	* 	* 	* 
 K"+L"9"9 V V	;++K>SIPQM>S>STTTUUUU &
 

 &'>
 
 (//..00# M ...$)&    J O	!   ""4((4/J#.	>k3			CJ !	
                 s   5EEEc                   $     e Zd ZdZd fd	Z xZS )r   a  YAML dumper object with custom formatting for ServeDeploySchema.

    Reformat config to follow this spacing with appropriate line breaks:
    ---------------------------------------------------------------
    proxy_location: EveryNode

    http_options:
      host: 0.0.0.0
      port: 8000

    grpc_options:
      port: 9000
      grpc_servicer_functions: []

    logging_config:
      # ...

    applications:
      - name: app1
        import_path: app1.path
        # ...
    Nc                     t                                          |           t          | j                  dk    r"t                                                       d S d S )Nr"   )superwrite_line_breakr&   indents)selfr*   	__class__s     r+   r  z(ServeDeploySchemaDumper.write_line_break  sV      &&& t|!!GG$$&&&&& "!r-   r[   )__name__
__module____qualname____doc__r  __classcell__)r  s   @r+   r   r     sG         .' ' ' ' ' ' ' ' ' 'r-   r   r*   c                 R    |                      dt          |j                            S )zCustom representer for Enum objects to serialize as their string values.
    This tells PyYAML when it encounters an Enum object, serialize it as
    a string scalar using its .value attribute.r#   )r(   rB   r   r)   s     r+   enum_representerr    s#     ""#:C
OOLLLr-   )ZrS   r   r1   r   r   r   dataclassesr   enumr   typingr   r   r   r   r	   rL   r   r   rp   r
   ray._common.utilsr   "ray.autoscaler._private.cli_loggerr   #ray.dashboard.modules.dashboard_sdkr   ray.dashboard.modules.serve.sdkr   ray.serve._privater   r   ray.serve._private.build_appr   r   ray.serve._private.constantsr   r   r   r   r   ray.serve.configr   r   r   ray.serve.deploymentr   r   ray.serve.schemar   r   r   r   APP_DIR_HELP_STRRAY_INIT_ADDRESS_HELP_STRRAY_DASHBOARD_ADDRESS_HELP_STRr   r,   rB   r6   r:   rP   rV   groupr@   r\   commandoptionrT   r   intro   ChoicerA   r   rr   r   argumentr   boolr   r   r   r   r  
SafeDumperr   r  add_multi_representeradd_representerr9   r-   r+   <module>r-     s   				  				 



                  3 3 3 3 3 3 3 3 3 3 3 3 3 3       



       ) ) ) ) ) ) 9 9 9 9 9 9 F F F F F F A A A A A A 2 2 2 2 2 2 D D D D D D D D                      
 C B B B B B B B             , 
L 
B$+ 
B 
B 
B 
B& & & & &(  *uSz d38n    
 
 
 	@TXt,<===  	 		 	 344JNN=&11		"   		S?P	S	S	S   		S?P	S	S	S   #	dd>**	+	+	6   #	dd=))	*	*	:   		S?P	S	S	S   
?           54hD(( 3-( CH~	(
 $sCx.)( ( ( ( (V @	J    '((2666		-	 	 	 			 	 	 		   		V   JNN24KLL		'  Sz  	
  3-      	 		 	 76 )( zB =		F    '((2666	
H   	
1   		   		   JNN=$//		"   	J	   	
 
 
 		4
 
 
 "		4
 
 
KKSzK K 	K
 K K K K K K K K K
 

 

 
       76 )( LK\ RSSJNN24KLL		'   		D	 	 	!C !x} ! ! !	 	  TS&!H Q	2   & JNN24KLL		'   		!
 
 
!C !x} ! ! !
 
 ' L!H 	F    JNN24KLL		'   gtT0MNNN c         ON   F G	V    b4888		   		A	 	 	 
?  E*EE #E "#Y	E E E 	 	  98 FEP' ' ' ' 'do ' ' 'BMT[ M M M M M  - -d4D E E E  ' '] ; ; ; ; ;r-   