
    {YhS\                    >   d dl m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m	Z	 d dl
mZmZmZmZ d dlmZmZmZmZ d dlZddlmZ ddlmZ erd dlZd d	lmZ dd
lmZ ddlmZ ddZ ej        e           Z!ej"        #                    e 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(          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&          Z/ G d% d&e&          Z0 G d' d(e&          Z1 G d) d*e1          Z2 G d+ d,e&          Z3 G d- d.e3          Z4 G d/ d0e&          Z5 G d1 d2e3          Z6 G d3 d4e3          Z7 G d5 d6e3          Z8 G d7 d8e3          Z9 G d9 d:e6          Z: G d; d<e	          Z; G d= d>e3          Z< G d? d@e&          Z= G dA dBe3          Z> G dC dDe&          Z? G dE dFe&          Z@ G dG dHeA          ZB G dI dJeA          ZC G dK dLe&          ZD G dM dNe&          ZE G dO dPeE          ZF G dQ dReE          ZG G dS dTeG          ZH G dU dVeG          ZI G dW dXeE          ZJ G dY dZeE          ZK G d[ d\eE          ZL G d] d^eE          ZM G d_ d`eE          ZNeOeFePeGeQeHeReJeSeIeTeKe%eLeUeMeVeNi	ZWdddZXdddeddmZYddpZZej[        j\        j]        ej[        j\        j^        ej[        j\        j_        ej[        j\        j`        ej[        j\        ja        fZbddvZc ed            ZeeeddwddzZfddZgddZheeddddZiddZj G d d          ZkdddZlddZmddZn	 dddZoddZpddZqddZr	 	 dddZs	 	 dddZtdS )    )annotationsN)autoEnum)extract_stack
format_excformat_listStackSummary)AnyNoReturnOptionalTYPE_CHECKING   )config)counters)	CompileId)InstructionTranslatorBase)DynamoFrameType	case_namestrreturnc                4    d|                      dd          z   S )NzhFor more information about this error, see: https://pytorch.org/docs/main/generated/exportdb/index.html#_-)replacer   s    c/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torch/_dynamo/exc.pyexportdb_error_messager   5   s%    	I


C
%
%	&    graph_breaksc                      e Zd ZdS )TorchDynamoExceptionN__name__
__module____qualname__ r   r   r!   r!   A           Dr   r!   c                      e Zd ZdS )InternalTorchDynamoErrorNr"   r&   r   r   r)   r)   E   r'   r   r)   c                  2     e Zd ZU ded<   ddd
 fd	Z xZS )RestartAnalysisOptional[str]restart_reasonN)r-   argsr
   r   Nonec               B    || _          t                      j        |  d S N)r-   super__init__)selfr-   r.   	__class__s      r   r3   zRestartAnalysis.__init__L   s%    ,$r   )r.   r
   r-   r,   r   r/   r#   r$   r%   __annotations__r3   __classcell__r5   s   @r   r+   r+   I   sX         !!!!CG                        r   r+   c                      e Zd ZdS )SpeculationRestartAnalysisNr"   r&   r   r   r;   r;   Q   r'   r   r;   c                      e Zd ZdS )UnspecializeRestartAnalysisNr"   r&   r   r   r=   r=   U   r'   r   r=   c                      e Zd ZdS ) CompileCollectiveRestartAnalysisNr"   r&   r   r   r?   r?   Y   r'   r   r?   c                      e Zd ZdS )TensorifyScalarRestartAnalysisNr"   r&   r   r   rA   rA   ]   r'   r   rA   c                      e Zd ZdS )	SkipFrameNr"   r&   r   r   rC   rC   a   r'   r   rC   c                      e Zd ZdS )TorchRuntimeErrorNr"   r&   r   r   rE   rE   e   r'   r   rE   c                        e Zd Zd fdZ xZS )InvalidBackendnamer   r   r/   c                R    t                                          d|d           d S )NzInvalid backend: z=, see `torch._dynamo.list_backends()` for available backends.r2   r3   )r4   rH   r5   s     r   r3   zInvalidBackend.__init__j   s7    eeee	
 	
 	
 	
 	
r   )rH   r   r   r/   r#   r$   r%   r3   r8   r9   s   @r   rG   rG   i   s=        
 
 
 
 
 
 
 
 
 
r   rG   c                        e Zd Zd fdZ xZS )ResetRequiredr   r/   c                n    t                                          t          j        d                     d S )Nz
                Must call `torch._dynamo.reset()` before changing backends.  Detected two calls to
                `torch.compile()` with a different backend compiler arguments.
                )r2   r3   textwrapdedent)r4   r5   s    r   r3   zResetRequired.__init__q   s=    O 	
 	
 	
 	
 	
r   r   r/   rK   r9   s   @r   rM   rM   p   s=        
 
 
 
 
 
 
 
 
 
r   rM   c                  (     e Zd Zd fdZdd
Z xZS )ShortenTracebackr.   r
   first_useful_frameOptional[types.FrameType]kwargsr   r/   c               H     t                      j        |i | || _        d S r1   )r2   r3   rT   )r4   rT   r.   rV   r5   s       r   r3   zShortenTraceback.__init__}   s/     	$)&)))"4r   typing.Selfc                    | j         }| j        |t          j        r| S |j        | j        ur!|j        }|
J d            |j        | j        u!|                     |          S )Nz#internal error, please report a bug)__traceback__rT   r   verbosetb_frametb_nextwith_traceback)r4   tbs     r   remove_dynamo_framesz%ShortenTraceback.remove_dynamo_frames   sq    "*bjFNjKk!888B>>#H>>> k!888 ""2&&&r   )r.   r
   rT   rU   rV   r
   r   r/   )r   rX   )r#   r$   r%   r3   r`   r8   r9   s   @r   rS   rS   |   sQ        5 5 5 5 5 5' ' ' ' ' ' ' 'r   rS   c                        e Zd Zd
 fd	Z xZS )BackendCompilerFailed
backend_fnr
   inner_exception	ExceptionrT   rU   r   r/   c                    t          |dd          | _        || _        d| j        dt          |          j         d| }t                                          ||           d S )Nr#   ?zbackend=z	 raised:
z: )rT   )getattrbackend_namerd   typer#   r2   r3   )r4   rc   rd   rT   msgr5   s        r   r3   zBackendCompilerFailed.__init__   sq     $J
C@@.k*kk_8M8M8VkkZikk1CDDDDDr   )rc   r
   rd   re   rT   rU   r   r/   rK   r9   s   @r   rb   rb      sG        	E 	E 	E 	E 	E 	E 	E 	E 	E 	Er   rb   c                  8     e Zd Zddd fd	Zdd
ZdddZ xZS )UnsupportedNr   rk   r   r   r,   r   r/   c                   t                                          |           t          j        j                                        | _        || _        d | _        | 	                                 || _
        d S r1   )r2   r3   torch_guardsTracingContextr   
real_stackrk   categoryadd_to_statsr   )r4   rk   r   r5   s      r   r3   zUnsupported.__init__   s^    -6DDFF'+(1r   c                    | j         J t          | j                  | j        xx         dz  cc<   t          | j                  | j                 dk    rt          | j                  | j        = d S d S )Nr   r   rs   r   rk   r4   s    r   remove_from_statszUnsupported.remove_from_stats   sm    }((()))Q.)))DM"48,11'111 21r   unimplementedrs   c                T    || _         t          |         | j        xx         dz  cc<   d S )Nr   rv   )r4   rs   s     r   rt   zUnsupported.add_to_stats   s2     48$$$)$$$$$r   )rk   r   r   r,   r   r/   rQ   )ry   )rs   r   r   r/   )r#   r$   r%   r3   rx   rt   r8   r9   s   @r   rm   rm      sw        ?C 2 2 2 2 2 2 2 22 2 2 2* * * * * * * * *r   rm   c                      e Zd ZdS )$UnknownPropertiesDuringBackwardTraceNr"   r&   r   r   r|   r|      r'   r   r|   c                      e Zd ZdS )RecompileErrorNr"   r&   r   r   r~   r~      r'   r   r~   c                        e Zd Zd fdZ xZS )ArgsMismatchErrorrk   r   r   r/   c                J    t                                          |           d S r1   rJ   r4   rk   r5   s     r   r3   zArgsMismatchError.__init__   !    r   rk   r   r   r/   rK   r9   s   @r   r   r      =                 r   r   c                        e Zd Zd fdZ xZS )AttributeMutationErrorrk   r   r   r/   c                J    t                                          |           d S r1   rJ   r   s     r   r3   zAttributeMutationError.__init__   r   r   r   rK   r9   s   @r   r   r      r   r   r   c                        e Zd Zd fdZ xZS )InfiniteGeneratorErrorrk   r   r   r/   c                J    t                                          |           d S r1   rJ   r   s     r   r3   zInfiniteGeneratorError.__init__   r   r   r   rK   r9   s   @r   r   r      s=                 r   r   c                        e Zd Zd fdZ xZS )SideEffectsErrorrk   r   r   r/   c                J    t                                          |           d S r1   rJ   r   s     r   r3   zSideEffectsError.__init__   r   r   r   rK   r9   s   @r   r   r      r   r   r   c                  $     e Zd ZdZd fdZ xZS )CondOpArgsMismatchErrorz?
    Internal error from cond() due to arguments mismatch.
    rk   r   r   r/   c                J    t                                          |           d S r1   rJ   r   s     r   r3   z CondOpArgsMismatchError.__init__   r   r   r   )r#   r$   r%   __doc__r3   r8   r9   s   @r   r   r      sG                  r   r   c                      e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	 e            Z
 e            ZdS )UserErrorTypeN)r#   r$   r%   r   DYNAMIC_CONTROL_FLOWANTI_PATTERNSTANDARD_LIBRARYCONSTRAINT_VIOLATIONDYNAMIC_DIMINVALID_INPUTINVALID_OUTPUT*UNSUPPORTED_ALIASED_MUTATED_DYNAMIC_INPUTSr&   r   r   r   r      sl        466466Ltvv466$&&KDFFMTVVN15...r   r   c                  $     e Zd Z	 dd fd
Z xZS )	UserErrorN
error_typer   rk   r   r   r,   r   r/   c                    |It          |t                    sJ |                    d          r|dz  }n|dz  }|t          |          z  }t	                                          |           || _        || _        dS )aG  
        Type of errors that would be valid in Eager, but not supported in TorchDynamo.
        The error message should tell user about next actions.

        error_type: Type of user error
        msg: Actionable error message
        case_name: (Optional) Unique name (snake case) for the usage example in exportdb.
        N. 
)
isinstancer   endswithr   r2   r3   r   message)r4   r   rk   r   r5   s       r   r3   zUserError.__init__   s      i-----||C   s
t))444C$r   r1   )r   r   rk   r   r   r,   r   r/   rK   r9   s   @r   r   r      sE        NR          r   r   c                      e Zd ZdS )SkipCodeRecursiveExceptionNr"   r&   r   r   r   r      r'   r   r   c                      e Zd ZdS )RecompileLimitExceededNr"   r&   r   r   r   r      r'   r   r   c                      e Zd ZdS )UnsafeScriptObjectErrorNr"   r&   r   r   r   r      r'   r   r   c                      e Zd ZdS )UncapturedHigherOrderOpErrorNr"   r&   r   r   r   r     r'   r   r   c                      e Zd ZdS )IncorrectUsageNr"   r&   r   r   r   r     r'   r   r   c                      e Zd ZdS )FailOnRecompileLimitHitNr"   r&   r   r   r   r     r'   r   r   c                      e Zd ZdS )PackageErrorNr"   r&   r   r   r   r     r'   r   r   c                      e Zd ZdS )ObservedExceptionNr"   r&   r   r   r   r             Dr   r   c                  ,     e Zd ZU ded<   d	 fdZ xZS )
ObservedUserStopIterationzOptional[Any]valuer.   r
   rV   r   r/   c                    t                                          d           t          |          dk    r|d         | _        d S d | _        d S )Nzunhandled `raise StopIteration`r   )r2   r3   lenr   )r4   r.   rV   r5   s      r   r3   z"ObservedUserStopIteration.__init__!  sE    :;;;t99q==aDJJJDJJJr   )r.   r
   rV   r
   r   r/   r6   r9   s   @r   r   r     sK                  r   r   c                      e Zd ZdS )ObservedLookupErrorNr"   r&   r   r   r   r   )  r   r   r   c                      e Zd ZdS )ObservedIndexErrorNr"   r&   r   r   r   r   .  r   r   r   c                      e Zd ZdS )ObservedKeyErrorNr"   r&   r   r   r   r   3  r   r   r   c                      e Zd ZdS )ObservedGeneratorExitNr"   r&   r   r   r   r   8  r'   r   r   c                      e Zd ZdS )ObservedAttributeErrorNr"   r&   r   r   r   r   <  r   r   r   c                      e Zd ZdS )ObservedRuntimeErrorNr"   r&   r   r   r   r   A  r   r   r   c                      e Zd ZdS )ObservedNotImplementedErrorNr"   r&   r   r   r   r   F  r'   r   r   c                      e Zd ZdS )ObservedTypeErrorNr"   r&   r   r   r   r   J  r   r   r   exc_typetype[Exception]type[ObservedException]c                    | t           vrAt          | dt          |                     }t          d| dt          fi           t           | <   t           |          S )Nr#   ObservedError)observed_exception_maprh   r   rj   r   )r   rH   s     r   get_dynamo_observed_exceptionr   \  s]    ---xS]];;+/"t"""%6$8",
 ,
x( "(++r   )r.   rV   txr   r.   Optional[list[Any]]rV   Optional[dict[str, Any]]r   c                   ddl m}  ||                               ||pg |pi           }|j                            |           t
          |          )Nr   )BuiltinVariable)	variablesr   call_functionexn_vt_stackset_current_exceptionr   )r   r   r.   rV   r   exception_vts         r   raise_observed_exceptionr   e  sc     +***** #?8,,::2tzr6<UWXXLO)),777
 
**r   r
   r/   c                8    | j                                          d S r1   )r   clear_current_exception)r   s    r   handle_observed_exceptionr   u  s    2 O++-----r   ere   codetypes.CodeTyperk   c                    t          | |          t          j                            dd fd           t                              d           t                              |           t          ||            d S )Nartifactc                     dddS Ndynamo_graph_break_reasonstring)rH   encodingr&   r&   r   r   <lambda>z,unimplemented_with_warning.<locals>.<lambda>      / 
 
 r   c                      S r1   r&   graph_break_msgs   r   r   z,unimplemented_with_warning.<locals>.<lambda>      ? r   metadata_fn
payload_fn%s)from_exc)	format_error_msg_verbosero   _loggingtrace_structuredgraph_breaks_logdebuglogwarningry   )r   r   rk   r   s      @r   unimplemented_with_warningr     s     /q$77O	N##
 
 +*** $    4111KK#""""""r   )r   r   r   r,   c                   | t           j                            dd          k    sJ |t          urt	          | |          |t	          | |          )NBREAKFr   )osenvironget_NOTHINGrm   )rk   r   r   s      r   ry   ry     sX     "*..%000000x#333A
cY
/
/
//r   gb_typecontextexplanationhints	list[str]c                    t          | |          t          j                            dd fd           t                              d           t          ||||| d           d S )Nr   c                     dddS r   r&   r&   r   r   r   z/unimplemented_v2_with_warning.<locals>.<lambda>  r   r   c                      S r1   r&   r   s   r   r   z/unimplemented_v2_with_warning.<locals>.<lambda>  r   r   r   r   Tr   log_warning)r   ro   r   r   r   r   unimplemented_v2)r   r   r  r  r  r	  r   s         @r   unimplemented_v2_with_warningr    s     /q$77O	N##
 
 +*** $    4111Wg{EASWXXXXXXr   c                    t          j        |d                                          }d                    d |D                       }t          j        |d                                          }|  d| d| d| d}|S )N    r   c              3  j   K   | ].}d t          j        |d                                          z   V  /dS )z  Hint: r  N)rO   indentlstrip).0hints     r   	<genexpr>z-format_graph_break_message.<locals>.<genexpr>  sP        @D
X_T62299;;;     r   z
  Explanation: z

  Developer debug context: )rO   r  r  join)r  r  r  r	  	hints_strrk   s         r   format_graph_break_messager    s     /+v66==??K		  HM    I ogv..5577G 	    
 $  C Jr   Fr  r  boolc                   t          | |||          }|rt                              |           |t          urt	          |          |t	          |          )a  
    Called within dynamo to cause a graph break.
    Args:
        gb_type: Context-free graph break type. It should be a short string without any
                 information specific to the tracing context (i.e. no dynamically-generated strings)
        context: Developer context for the graph break. It can contain tracing context/dynamic strings.
        explanation: User-facing context-dependent explanation for the graph break. Can be dynamic.
        hints: List of user-facing hints for the graph break.
    )r  r   r   r  rm   )r  r  r  r	  r   r  rk   s          r   r  r    s\    & %Wg{E
J
JC  Cx#H,
c

r   c                    t           d         | xx         dz  cc<   | t          j                            dd          k    sJ d S )Nwarningsr   r  F)r   r  r  r  )rk   s    r   r   r     sJ    Z""*..%00000000r   c                  &    e Zd Zd
dZddZddZd	S )KeyErrorMsgr   r
   r   r/   c                    || _         d S r1   )r   )r4   r   s     r   r3   zKeyErrorMsg.__init__  s    


r   r   c                *    t          | j                  S r1   )r   r   rw   s    r   __str__zKeyErrorMsg.__str__  s    4:r   c                *    |                                  S r1   )r%  rw   s    r   __repr__zKeyErrorMsg.__repr__!  s    ||~~r   N)r   r
   r   r/   )r   r   )r#   r$   r%   r3   r%  r'  r&   r   r   r"  r"    sP                   r   r"  r   excexportc                |   dd l }d | _        t          |           }|Nt          |          dk    r;|d         | _        |dd                    |                    |                     z  }t          j        r&t          | d          r|d| j	         d| j	         dz  }t          j
        st          | d	          r|d
z  }t          | d          r^t          | j        d          rIt          | j        d          r!|d| j        j         d| j        j         dz  }n|d| j        j         dz  }t          | j                  dk    rdnt          | j        d                   }t!          | t"                    r*t%          ||z             f| j        dd          z   | _        d S ||z   }|f| j        dd          z   | _        d S )Nr   z
from user code:
  record_filenamez!
Last frame execution written to zD. To run only this frame while debugging, run torch._dynamo.replay('z').
rr   z
Set TORCHDYNAMO_VERBOSE=1 for the internal stack trace (please do this especially if you're reporting a bug to PyTorch). For even more developer context, set TORCH_LOGS="+dynamo"
rd   minifier_pathbuck_commandz
Minifier script written to zW. Run this buck command to find the smallest traced graph which reproduces this error: r   zQ. Run this script to find the smallest traced graph which reproduces this error.
r   )	tracebackinnermost_user_frame_summaryget_real_stackr   r  r   r   replay_record_enabledhasattrr-  r[   rd   r.  r/  r.   r   r   KeyErrorr"  )r(  rk   r)  r0  rr   old_msgnew_msgs          r   augment_exc_messager8  %  s,   '+C$$$J#j//A"5"5+5b>(Rbggi.C.CJ.O.O&P&PRRR# 
5F(G(G 
31D 3 3+3 3 3	

 > 
gc<88 
J	
 s%&& 7_, ,  3&77 
	U0C0Q U U030C0PU U UCC _0C0Q _ _ _C
 MMQ&&bbC,<,<G#x   -#..038ABB<?C-:,r   
compile_idr   #tuple[Optional[str], Optional[int]]c                ^    d }d }| j         | j         j        }| j         j        }|| _        ||fS r1   )r1  filenamelinenor9  )r   r9  r<  r=  s       r   get_exc_messager>  T  s?     HF%11:/6ALVr   r	   c                 8    t          t                                S r1   )filter_stackr   r&   r   r   get_stack_above_dynamorA  `  s    (((r   frameOptional[DynamoFrameType]Optional[StackSummary]c                    t          | dd           }|d S |t                      }nt                      }t          j        ||z             S )Nrr   )rh   rA  r	   	from_list)r(  rB  rr   stack_above_dynamos       r   r2  r2  d  sZ     lD11Jt  455)^^!"4z"ABBBr   stackc                    t                      }| D ]D}|j        
d|j        v r n0d|j        v s|j        r
d|j        v r/|                    |           E|S )Nconvert_frame
eval_frameztorch._dynamo.optimize()r	   r<  lineappend)rH  
user_stackrB  s      r   r@  r@    s{    J 	! 	!>!en,,E5>))J *4
BB%    r   rH   c                p    ddl m} t          j        | d|           }|r|                    d          S d S )Nr   )TORCH_DYNAMO_RESUME_IN_PREFIXz_(\w+)_at_\d+)resume_executionrP  rematchgroup)rH   rP  rS  s      r   remove_resume_prefixrU    sL    ??????H5FFFMME {{1~~4r   c                    t                      }| D ]U}|j        
t          |j                  }|r |r|d         j        |k    r||d<   ||_        @|                    |           V|S )a1  
    When we graph break, we create a resume function and make a regular Python call
    to it, which gets intercepted by Dynamo. This behavior is normally shown in the
    traceback, which can be confusing to a user. So we can filter out resume frames
    for better traceback clarity.

    Example:
    File "..." line 3, in f
        <line 3>
    File "..." line 5, in torch_dynamo_resume_in_f_at_80
        <line 5>
    File "..." line 10, in torch_dynamo_resume_in_f_at_120
        <line 10>

    becomes
    File "..." line 10, in f
        <line 10>
    Nr+  )r	   r<  rU  rH   rM  )rH  	new_stackrB  rH   s       r   collapse_resume_framesrX    s    ( I $ $>!#EJ// 	$ 	$)B-"4"<"<!IbMEJJU####r   r-  c                    d|j          d|j         d|j         d}|dz  }|t                      z  }t	          | |          }|4|dz  }|d                    t          |                    z  }|dz  }|dz  }|S )	NWON'T CONVERT r    line r   z.========== TorchDynamo Stack Trace ==========
zY
========== The above exception occurred while processing the following code ==========

r,  z
==========)co_nameco_filenameco_firstlinenor   r2  r  r   )r(  r   r-  rB  rk   rr   s         r   r   r     s     	XWW(8WW@SWWW  CCC:<<CU++J	
 	rww{:..///txJr   c           	         t           j        rt          | |||          S d|j         d|j         d|j         dt                       S )NrZ  r   r[  z 
due to: 
)r   r[   r   r\  r]  r^  r   )r(  r   r-  rB  s       r   format_error_msgr`    sk     ~ K'T?EJJJ8DL 8 84+; 8 88 8)38 8 8r   )r   r   r   r   )r   r   r   r   )
r   r   r   r   r.   r   rV   r   r   r   )r   r
   r   r/   )r   re   r   r   rk   r   r   r   )rk   r   r   r
   r   r,   r   r   )r   re   r   r   r  r   r  r   r  r   r	  r
  r   r   )
r  r   r  r   r  r   r	  r
  r   r   )r  r   r  r   r  r   r	  r
  r   r
   r  r  r   r   r   )r   F)r(  re   rk   r   r)  r  r   r/   )r   re   r9  r   r   r:  )r   r	   r1   )r(  re   rB  rC  r   rD  )rH  r	   r   r	   )rH   r   r   r,   )NN)
r(  re   r   r   r-  r,   rB  rC  r   r   )u
__future__r   loggingr  rR  rO   typingenumr   r   r0  r   r   r   r	   r
   r   r   r   torch._guardsro   r,  r   utilsr   typesr   symbolic_convertr   r   r   	getLoggerr#   r   r   getArtifactLoggerr   RuntimeErrorr!   r)   r+   r;   r=   r?   rA   rC   rE   rG   rM   rS   rb   rm   r|   r~   r   r   r   r   r   r   r   r   r   r   r   re   r   r   r   r   r   r   r   r   r   r   r   r   r   StopIterationLookupError
IndexErrorGeneratorExitr5  AttributeErrorNotImplementedError	TypeErrorr   r   r   r   _subclassesfake_tensorDataDependentOutputExceptionDynamicOutputShapeExceptionUnsupportedOperatorExceptionUnsupportedFakeTensorException$UnsupportedMutationAliasingException!exceptions_allowed_to_be_fallbackr   objectr  ry   r  r  r  r   r"  r8  r>  rA  r2  r@  rU  rX  r   r`  r&   r   r   <module>r|     s
   " " " " " "2  				 				           J J J J J J J J J J J J 9 9 9 9 9 9 9 9 9 9 9 9                  'LLL'''''';;;;;;&&&&&&    g!!>33HnMM 	 	 	 	 	< 	 	 		 	 	 	 	3 	 	 	         *      	 	 	 	 	 	 	 		 	 	 	 	/ 	 	 		 	 	 	 	 	 	 		 	 	 	 	_ 	 	 		 	 	 	 	$ 	 	 		 	 	 	 	, 	 	 	
 
 
 
 
) 
 
 
	
 	
 	
 	
 	
( 	
 	
 	
' ' ' ' '+ ' ' '"
E 
E 
E 
E 
E, 
E 
E 
E* * * * *& * * *(	 	 	 	 	; 	 	 		 	 	 	 	) 	 	 	       
    [   
    [       {   
    /   8 8 8 8 8D 8 8 8       0	 	 	 	 	!5 	 	 		 	 	 	 	[ 	 	 		 	 	 	 	2 	 	 		 	 	 	 	#7 	 	 		 	 	 	 	Y 	 	 		 	 	 	 	i 	 	 		 	 	 	 	' 	 	 		 	 	 	 	, 	 	 	
     1   	 	 	 	 	+ 	 	 	
	 	 	 	 	, 	 	 	
	 	 	 	 	* 	 	 	
	 	 	 	 	- 	 	 		 	 	 	 	. 	 	 	
	 	 	 	 	, 	 	 	
	 	 	 	 	"3 	 	 		 	 	 	 	) 	 	 	 ,$"(*&4 
 , , , , !%'++ + + + + + . . . .< 
!>	!=	!>	!@	!F% !# # # #0 688 "*d0 0 0 0 0 0Y Y Y Y8   :      B1 1 1 1       ,- ,- ,- ,- ,-^	 	 	 	) ) ) )
 8<C C C C CB          J &*'+	    < &*'+		8 	8 	8 	8 	8 	8 	8r   