
    AHj	              %          U d dl Z d dlZd dl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 erd dlm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 d dl m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z,  e'       Z-e'e.d<   d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZFmGZGmHZH d dl*mIZImJZJmKZKmLZL daMed   e.d<   d@dZNedeIfd       ZOe	 	 	 	 	 	 	 	 	 	 	 	 dAd ePd!eeP   d"eeQ   d#eeePeBf      d$eeP   d%eeP   d&eeP   d'eeP   d(eeP   d)eeP   d*eeP   d+ed,   deeeeIf   fd-       ZRe	 	 	 	 	 	 	 	 	 	 	 	 dAd.d/d ePd!eeP   d"eeQ   d#eeePeBf      d$eeP   d%eeP   d&eeP   d'eeP   d(eeP   d)eeP   d*eeP   d+ed.   deIfd0       ZRe	 	 	 	 	 	 	 	 	 	 	 	 dAd ePd!eeP   d"eeQ   d#eeePeBf      d$eeP   d%eeP   d&eeP   d'eeP   d(eeP   d)eeP   d*eeP   deeIeeeeIf   f   fd1       ZRedeIfd2       ZSe	 	 	 	 	 dBd3e0d!ePd"eQd$ed4   d%eeP   d'eeP   deIfd5       ZTe	 	 	 	 	 	 	 	 	 	 	 	 	 	 dCd3eee0e
e0   f      d eeP   d!eeP   d6eeP   d"eeQ   d#eeePeBf      d$eeP   d%eeP   d'eeP   d7ee	ePef      d8ee	ePef      d9ee	ePef      d:eeeUej                  f      d;eeP   deeIeeeeIf   f   fd<       ZWe	 	 	 	 	 	 	 	 	 	 	 dDd3ee0e
e0   f   d!ePd ePd6eeP   d"eeQ   d#eeePeBf      d$eeP   d%eeP   d'eeP   d7ee	ePef      d8ee	ePef      d9ee	ePef      d:eeeUej                  f      d;eeP   deIfd=       ZXd>ePdefd?ZYy)E    N)partial)
TYPE_CHECKINGAny	CoroutineDictListLiteralOptionalUnioncastoverloadImageEditRequestUtils)client)DEFAULT_IMAGE_ENDPOINT_MODEL)request_timeout)LiteLLMUnknownProvider)Logging)mock_image_generation)BaseImageEditConfigBaseImageGenerationConfig)AsyncHTTPHandlerHTTPHandler)BaseLLMHTTPHandler)	CustomLLM)exception_typeget_litellm_paramsllm_http_handler)	FileTypes)bfl_image_edit)bfl_image_generation)azure_chat_completionsbase_llm_aiohttp_handlerbase_llm_http_handlerbedrock_image_editbedrock_image_generationopenai_chat_completionsopenai_image_variations)get_secret_str)ImageEditOptionalRequestParams)ImageGenerationRequestQuality)GenericLiteLLMParams)!LITELLM_IMAGE_VARIATION_PROVIDERSLlmProvidersall_litellm_params)ImageResponseProviderConfigManagerget_llm_providerget_optional_params_image_genr   _ImageEditRequestUtils_cachereturnc                  t    t         %t        j                  t              } | j                  a t         J t         S )z7Get ImageEditRequestUtils, loading it lazily if needed.)r4   	importlibimport_module__name__r   )modules    K/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/images/main.py_get_ImageEditRequestUtilsr<   M   s8     $+((2'-'C'C$'333''    c                  x  K   t        j                         }t        |       dkD  r| d   n|d   }d|d<   d}	 t        t        g| i |}t        j                         }t        |j                  |      }t        ||j                  dd            \  }}}}|j                  d|       d{   }	d}
t        |	t              rt        di |	}
n2t        |	t              r|	}
nt        j                  |	      r
|	 d{   }
|
t        d      |
S 7 c7 # t         $ r}|xs d	}t#        |||| |
      d}~ww xY ww)a  
    Asynchronously calls the `image_generation` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_generation` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_generation` function.

    Returns:
    - `response` (Any): The response returned by the `image_generation` function.
    r   modelTaimg_generationNapi_baser?   rA   z?Unable to get Image Response. Please pass a valid llm_provider.openair?   custom_llm_provideroriginal_exceptioncompletion_kwargsextra_kwargs )asyncioget_event_looplenr   image_generationcontextvarscopy_contextrunr2   getrun_in_executor
isinstancedictr0   iscoroutine
ValueError	Exceptionr   argskwargsloopr?   rE   funcctxfunc_with_context_init_responseresponsees               r;   aimage_generationrc   Y   sY     !!#D4y1}DG&/E $F%
'9$9&9 &&(#CGGT2'7&**Z">(
$1
 #2249JKK,0mT*$5}5H}5$H  /**HQ   L +  
1=X 3 "
 	

sN   4D:A4D +D,AD ;D<D D:D D 	D7D22D77D:promptr?   nqualityresponse_formatsizestyleuserapi_keyrA   api_versionr@   Tc                     y NrI   rd   r?   re   rf   rg   rh   ri   rj   timeoutrk   rA   rl   rE   r@   rZ   s                  r;   rM   rM          & r=   F)r@   c                     y rn   rI   ro   s                  r;   rM   rM      rq   r=   c                    	 t               }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d      }|j                  d
i       }|j                  d      }|j                  dd      }|j                  dd      }|j                  dd      xs i }|j                  dd      }||j                  |       t        j                  j                         }d}||t        |||
      \  }}}}
nd}d}||j                  d<   g d}t        }||z   } |j                         D !"ci c]  \  }!}"|!| vs|!|" }#}!}"d}$|D|t        j                  j                         v r$t        j                  |xs |t        |            }$t        dB|xs |||||||||$d	|#}%t!        dBi |}&|}'|'j#                  ||||%|d||||di d|       d|'j$                  vr||'j$                  d<   |t'        ||      S |dk(  ret)        d      xs d}(|
xs t        j*                  xs t)        d      }
|xs t        j,                  xs t)        d      }|	xs< t        j.                  xs* t        j0                  xs t)        d      xs t)        d       }	|%j3                  d!d      xs t)        d"      })|`d#d$lm}* |&j                  d%      }+|&j                  d&      },|&j                  d'      }-|&j                  d(      xs d)}.|+r|,r|-r |*|+|,|-|.*      }d+d,i}/|	|	|/d-<   |/j                         D ]  \  }!}"|!|vs|"||!<    t9        j:                  || ||	|
|)|||%||||||&.      }|S |t        j                  j<                  t        j                  j>                  t        j                  j@                  t        j                  jB                  t        j                  jD                  t        j                  jF                  t        j                  jH                  t        j                  jJ                  fv rH|$tM        d/|       |
xs t        j*                  }0|0|&d0<   tN        jQ                  |	|| |$|%||&|||1
      S |d2k(  r,|tS        d3      tU        j:                  || ||%|&|||||4
      S |d5k(  rd#d6l+m,}1 |1j[                  |
      }
|1j]                  |	      }	|||%d<   d+d,i}/|	|	|/d-<   |/j                         D ]  \  }!}"|!|vs|"||!<    t9        j:                  || ||	|
d|||%||||||&.      }|S |dk(  s/|t        j^                  j`                  k(  s|t        jb                  v r@|||%d<   |j                  d7d      }2te        j:                  || ||	xs ||
||%||2|||8      }|S |d9k(  r.|tS        d:      tg        j:                  || |||%||||
|	;
      }|S |t        jh                  v rd}3t        jj                  D ]  }4|4d<   |k(  s|4d=   }3 |3tm        ||>      |d?u r2d}5|to        |tp              r|}5|3js                  || |	|
||%|||5@	      }|S d}6|to        |tt              r|}6|3j;                  || |	|
||%|||6@	      }|S c c}"}!w # tR        $ r}7tw        |||7t               |A      d}7~7ww xY w)Czv
    Maps the https://api.openai.com/v1/images/generations endpoint.

    Currently supports just Azure + OpenAI.
    r@   Flitellm_call_idN	logger_fnmock_responseproxy_server_requestazure_ad_token_provider
model_infometadatalitellm_logging_objr   extra_headersheaders
base_model)r?   rE   rA   dall-e-2rC   r?   )rj   r   rA   rl   rk   deployment_idorganizationbase_urldefault_headersrp   max_retriesre   rf   rh   ri   r?   provider)	r?   re   rf   rg   rh   ri   rj   rE   provider_config)rp   azurert   ru   rw   ry   preset_cache_keystream_responserZ   r?   rj   optional_paramslitellm_paramsrE   rE   )r?   rv   r   AZURE_API_TYPEAZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYazure_ad_tokenAZURE_AD_TOKENr   ) get_azure_ad_token_from_entra_id	tenant_id	client_idclient_secretazure_scopez,https://cognitiveservices.azure.com/.default)r   r   r   scopezContent-Typezapplication/jsonzapi-key)r?   rd   rp   rk   rA   r   rx   logging_objr   model_responserl   r@   r   r}   r   z-image generation config is not supported for rA   )
rk   r?   rd    image_generation_provider_config(image_generation_optional_request_paramsrE   r   r   rp   r   black_forest_labs+Model needs to be set for black_forest_labs)
r?   rd   r   r   r   r   rp   r|   r   r@   azure_ai)AzureFoundryModelInfor   )r?   rd   rp   rk   rA   r   r   r   r   r@   r   r}   bedrock!Model needs to be set for bedrock)
r?   rd   rp   r   r   r   r@   r   rA   rk   r   custom_handlerr?   rE   T)	r?   rd   rk   rA   r   r   r   rp   r   rD   rI   )<localsrQ   updatelitellmutilsr0   r2   _hidden_paramsr/   itemsr.   _member_map_valuesr1   $get_provider_image_generation_configr3   r   update_from_kwargsmodel_call_detailsr   r)   rA   rl   rk   	azure_keypoplitellm.llms.azure.common_utilsr   r"   rM   RECRAFTAIMLGEMINIFAL_AI	STABILITYRUNWAYML	VERTEX_AI
OPENROUTERrV   r   image_generation_handlerrW   r!   "litellm.llms.azure_ai.common_utilsr   get_api_baseget_api_keyLITELLM_PROXYvalueopenai_compatible_providersr'   r&   _custom_providerscustom_provider_mapr   rS   r   rc   r   r   )8rd   r?   re   rf   rg   rh   ri   rj   rp   rk   rA   rl   rE   rZ   rY   r@   rt   ru   rv   rw   rx   ry   rz   r{   r   r|   r}   r~   r   dynamic_api_keyopenai_paramsr   default_paramskvnon_default_paramsimage_generation_configr   litellm_params_dictloggingapi_typer   r   r   r   r   r   r   	_api_baser   r   r   itemasync_custom_clientcustom_clientrb   s8                                                           r;   rM   rM      s   ,k
x **%6> **%6=JJ{D1	'-zz/4'H%zz*@$G"(**-F"MZZd3
::j"-17<Q1RHd+

?D9

9d39rZZd3
$NN=)(/(C(C(E)- 3 ?DT$7!EAE& E"*16%%g.
" ,&7#\\^
Qq/FAqD
 
 HL+#|'@'@'G'G'II &JJ$-)*=> $ 8 
%+ 33
 !
 1:6:.""+"#2&(<($(#%	 !4 	# 	
" !(B(BB@SG&&'<=$(uMRR')%&67B7HW7#3#3W~FV7WH  7&&7!"56   3??3$$3 ""893 "/2  -00 $ 2 01 
 '.
 033K@	/33K@	 3 7 7 H'++M: FE  }.N"+"+&3)	/+  2O
 "-4	*'--/ #1G#!"GAJ# 4DD!-(?/ /-' /2N@ Y !  ((  %%  ''  ''  **  ))  **  ++	%
 	
 '. CDWCXY 
 !4G$4$4I.7
+#<<1H9H$72/ =   !$77} MNN'88- /2/+ /  !J.P,99(CH+77@G(3@0  2O
 "-4	*'--/ #1G#!"GAJ# 4DD!#(?/ /-' /2NR o  8+"l&@&@&F&FF"g&I&II(3@0*0**^T*JL4EE2?!/ /-) /N^ C !I-} CDD5FF/ /- /!N| c  7#<#<< 37N33 <
#'::%)*:%;N< %,5H 
 $&BF#%*V=M*N*0' "0!A!A!#%#1$3 3#. "B 
": # 8<%*V[*I$*M "0!@!@!#%#1$3 3#( "A 
" e	
f	  
 3 $h
 	

sx   E7[ 9[[B<[ D=[ ,[ 3D[ 0[ 8A[ ,[ ?A3[ 32[ &/[ A[ "1[ [ 	\ #[;;\ c                    K   t        j                         }|j                  dd      }|j                  dd      }d|d<   	 t        t        g| i |}t        j                         }t        |j                  |      }|$|"t        ||j                  dd            \  }}}}|j                  d|       d{   }	t        |	t              st        |	t              rt        |	t              rt        d
i |	}	|	}
|
S t        j                  |	      r|	 d{   }
|
S |j                  d|       d{   }
|
S 7 7 $7 
# t        $ r}|xs d}t        |||| |	      d}~ww xY ww)a  
    Asynchronously calls the `image_variation` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_variation` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_variation` function.

    Returns:
    - `response` (Any): The response returned by the `image_variation` function.
    r?   NrE   T
async_callrA   rB   rC   rD   rI   )rJ   rK   rQ   r   image_variationrN   rO   rP   r2   rR   rS   rT   r0   rU   rW   r   rX   s               r;   aimage_variationr   I  s     !!#DJJw%E **%:DAF<#
888 &&(#CGGT2&5+<+;fjjT&B,(A"Aq
 #2249JKKmT*j=/
 -. - > >$H    /**H  "11$8IJJH L + K 
1=X 3 "
 	

sy   >E'A8E  9D::AE  <E'=E  D<E  E'E  3D>4E  9E':E  <E  >E   	E$	EE$$E'image)urlb64_jsonc                 *   |j                  dd       }t        t        |j                  d            }t        di |}	t	        ||	j                  dd       |	j                  dd       |	j                  dd             \  }}
}}	 t        |
      }t        |      }t               }d }t        j                  |xs d	|
      }|t        d|
 dt               |j                  |	j                  dd             }|j                  |	j                  dd             }|t        j                  k(  rJ|t        d      |t        d      t        j                  ||||| |	j                  dd       |
|i |	
      }ne|t        j                   k(  rR|t        d      |t        d      t#        j                  ||||| |	j                  dd       xs t$        |
|i |	|      }|t        d|
 dt               |S # t        $ r t        d|
 dt               w xY w)Nr   r{   rE   rA   rk   )r?   rE   rA   rk   z"Invalid image variation provider: z. Supported providers are:  r   z_image variation provider has no known model info config - required for getting api keys, etc.: z/API key is required for OpenAI image variationsz0API base is required for OpenAI image variationsrp   )
r   rk   rA   r?   r   rp   rE   r   r   r   z.API key is required for Topaz image variationsz/API base is required for Topaz image variations)r   rk   rA   r?   r   rp   rE   r   r   r   r   rI   )rQ   r   LiteLLMLoggingObjr   r2   r.   r-   rV   r0   r1   get_provider_model_infor   r   OPENAIr(   image_variationsTOPAZr#   DEFAULT_REQUEST_TIMEOUT)r   r?   re   rg   rh   rj   rZ   r   r{   r   rE   r   rA   llm_providerimage_variation_providerr   ra   r   rk   s                      r;   r   r     s    ZZ$'F0&**=R2ST (1&1N<L*../DdK##J5""9d3	=9E
#$78#D\#R 
 #_N(,H+CCkrO
 m  oB  nC  C^  _@  ^A  B
 	
 )).*<*<Y*MNG++N,>,>z4,PQH#D#K#KK?NOOOPP*;;)"&&y$7 3+)
 
"%F%L%L	L?MNNNOO+<<)"&&y$7R;R 3+)
 01D0EE`  bC  aD  E
 	
 OA  
01D0EE`  bC  aD  E
 	

s   G3 3Hmaskr|   extra_query
extra_bodyrp   rE   c                 	   t               }	 g d}t        }||z   }|j                         D ci c]  \  }}||vs|| }}}|j                  d      }|j                  dd      }|j                  dd      }|j                  di       }|j	                  dd      d	u }t        | t              r| n| | gng }|j                  d
      }i }t        |t              r|j                  |       t        |	t              r|j                  |	       |rt        |      }	t        d"i |}t        |xs t        |      \  }}}}|t        j                  v r8d} t        j                  D ]  }!|!d   |k(  s|!d   }  | t        ||      t!               }"|r|d}#|j                  d      0t        |j                  d      t"              r|j                  d      }#| j%                  ||||"|j                  d      |j                  d      ||||#
      S d}$|j                  d      0t        |j                  d      t&              r|j                  d      }$| j)                  ||||"|j                  d      |j                  d      ||||$
      S t+        j,                  |t        j.                  |            }%|%t1        d|       |j                  |       t3               j5                  |      }&t3               j7                  ||%|&|j                  d      |j                  d            }'|j9                  |||t        |'      i |'||d|       |dk(  rt|t;        d      |'j                  |       t=        j(                  ||||||'t!               ||j                  d      |j                  d      |	|j                  d            S |dk(  rJ|'j                  |       t?        j@                  ||||%|'||||	||xs tB        ||j                  d            S |dk(  rT|t;        d      |'j                  |       tE        j(                  ||||'|||xs tB        |	|j                  d      | 
      S t?        j@                  ||||%|'||||	||xs tB        ||j                  d            S c c}}w # t:        $ r}(t        jF                  |||(||!      d}(~(ww xY w)#zW
    Maps the image edit functionality, similar to OpenAI's images/edits endpoint.
    )rj   r   rA   rl   rk   r   r   r   r   rp   r   re   rf   rh   ri   r   r{   rt   Nry   rz   r   FTr}   r   r   r   r   rk   rA   )
r?   r   rd   r   rk   rA   r   r   rp   r   r   z image edit is not supported for drop_paramsadditional_drop_params)r?   image_edit_provider_configimage_edit_optional_paramsr   r   )rt   ry   r   r   r   )r?   r   rd   rp   r   r   r   aimage_editr   rA   r|   rk   	stability)r?   r   rd   r   "image_edit_optional_request_paramsrE   r   r   r|   r   rp   	_is_asyncr   r   r   )
r?   r   rd   r   r   r   rp   r|   r   r   rD   rI   )$r   r/   r   rQ   r   rS   listrT   r   r,   r2   r   r   r   r   r   r0   r   r   r   
image_editr1   get_provider_image_edit_configr.   rV   r<   'get_requested_image_edit_optional_paramget_optional_params_image_editr   rW   r%   r$   image_edit_handlerr   r    r   ))r   rd   r?   r   re   rf   rg   rh   rj   r|   r   r   rp   rE   rZ   
local_varsr   litellm_params_listr   r   r   r   r{   rt   ry   rz   r   imagesheaders_from_kwargsmerged_extra_headersr   r_   r   r   r   r   r   r   r   image_edit_request_paramsrb   s)                                            r;   r   r     s   0 Ja

$ 1&)<<#\\^
Qq/FAqD
 
 28<Q1R)/4Et)LZZd3
::j"-JJ|U3t;	  t,Ee>OE7UW 	 %jj3/1)40 ''(;<mT* ''6 !56M .77+;77 3,
("Aq '";";;26N33 <
#'::%)*:%;N< %,5H  +_NBF#::h'3
JJx(*:9 +1**X*>'%11 !#1"JJy1#ZZ
3$* 3#. 2   8<::h'3
JJx(+9 %+JJx$8M%00 !#1"JJy1#ZZ
3$* 3#( 1    "@@))*=>
 	# &-?@S?TUVV&! '(PP 	# '(GG+E+E"JJ}5'-zz2J'K H  	" 	.. !:;+#2(
 !4 	/ 	
 )+} CDD%,,-?@%00/ 9,%zz(+J/+

9-  !K/%,,-?@(;;+E3L$7-/+%:#:#zz(+  !$77} MNN%,,-?@!,,3L-/:#:+zz(+%  %77'A/H 3)+'!66::h'
 	
k
J  
$$ 3 (
 	

sW   "R0 R*R* D.R0 /BR0 A;R0 	D?R0 	AR0 AR0 18R0 *R0 0	S9SSc                 @  K   t               }	 t        j                         }d|d<   |,t        j                  ||j                  dd            \  }}}}t        | t              r| n| g}t        t        f|||||||||||d|}t        j                         }t        |j                  |      }|j                  d|       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}t        j                   |||||      d}~ww xY ww)a}  
    Asynchronously calls the `image_edit` function with the given arguments and keyword arguments.

    Parameters:
    - `args` (tuple): Positional arguments to be passed to the `image_edit` function.
    - `kwargs` (dict): Keyword arguments to be passed to the `image_edit` function.

    Returns:
    - `response` (Any): The response returned by the `image_edit` function.
    Tr   Nr   rB   )r   rd   r   r?   re   rf   rg   rh   rj   rp   rE   rD   )r   rJ   rK   r   r2   rQ   rS   r   r   r   rN   rO   rP   rR   rU   rW   r   )r   r?   rd   r   re   rf   rg   rh   rj   r|   r   r   rp   rE   rZ   r   r[   r_   r   r\   r]   r^   r`   ra   rb   s                            r;   r   r     sN    > J-
%%'#| &+2+C+CjnnZ&F,(A"Aq %UD1w
+ 3
 
  &&(#CGGT2"2249JKK}-**H  %H L +
  
$$ 3 (
 	

sY   DB7C3 C/C3 $C1%C3 *D+C3 .D/C3 1C3 3	D<DDDnamec                     | dk(  r0ddl m} t        j                  t              }||j
                  d<   |S t        dt        d|       )z*Lazy import handler for images.main moduler      r   zmodule z has no attribute )r   r   r7   r8   r9   __dict__AttributeError)r   _ImageEditRequestUtilsr:   s      r;   __getattr__r  -  sN    &&J ((23I/0%%
78,.@I
JJr=   )r5   r   )NNNNNNNiX  NNNN)r   r   r   NN)NNNNNNNNNNNNNN)NNNNNNNNNNN)ZrJ   rN   r7   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   litellm.images.utilsr   httpxr   r   litellm.constantsr   r   r   litellm.exceptionsr   *litellm.litellm_core_utils.litellm_loggingr   r   )litellm.litellm_core_utils.mock_functionsr   litellm.llms.base_llmr   r   &litellm.llms.custom_httpx.http_handlerr   r   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.llms.custom_llmr   litellm.utilsr   r   r   __annotations__.openai.types.audio.transcription_create_paramsr   1litellm.llms.black_forest_labs.image_edit.handlerr    7litellm.llms.black_forest_labs.image_generation.handlerr!   litellm.mainr"   r#   r$   r%   r&   r'   r(   litellm.secret_managers.mainr)   litellm.types.images.mainr*   litellm.types.llms.openair+   litellm.types.routerr,   litellm.types.utilsr-   r.   r/   r0   r1   r2   r3   r4   r<   rc   strintrM   r   r   floatTimeoutr   r   r  rI   r=   r;   <module>r      sJ         :    : H 5 > S K P P I - < (:'; $ ; D M X   8 D C 5 
  CG h'>? F( 5
 5
 5
v 
  CG%)!"!%C= } eC!>>?@	
 c] 3- C= 3- c] sm # T]" sC&'# 
. 
  CG%)!"!% ',C= } eC!>>?@	
 c] 3- C= 3- c] sm # U^" # 
.   CG%)!"!%@
@
C=@
 }@
 eC!>>?@	@

 c]@
 3-@
 C=@
 3-@
 c]@
 sm@
 #@
 =)Cm$;<=>@
 @
F 3
} 3
 3
l  27\\\ \ ./	\
 3-\ 3-\ \ \~ 9= CG%) /3,0+/59)-#y
E)T)_456y
SMy
 C=y
 3-	y

 }y
 eC!>>?@y
 c]y
 3-y
 3-y
 DcN+y
 $sCx.)y
 c3h(y
 eE5==012y
" "##y
& =)Cm$;<<='y
 y
x 
 CG%) /3,0+/59)-#L
DO+,L
L
 L
 3-	L

 }L
 eC!>>?@L
 c]L
 3-L
 3-L
 DcN+L
 $sCx.)L
 c3h(L
 eE5==012L
" "##L
& 'L
 L
^
Kc 
Kc 
Kr=   