
    Ng]                     ^   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	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mZ d d
lmZmZmZmZmZ ddlmZm Z m!Z!m"Z"  ej#        e$          j%        &                                Z'dZ( ej)        dd          *                                dvZ+ ej)        dd          *                                dk    Z,de de-e         fdZ.de de-e         fdZ/de de-e         de	j0        fdZ1d Z2d Z3de fdZ4e	j5        6                    e+ d          e	j5        6                    e,d          d                         Z7e	j5        6                    e+ d          e	j5        6                    e,d          d                          Z8e	j5        6                    e+ d          e	j5        6                    e,d          d!                         Z9e	j5        6                    e+ d          e	j5        6                    e,d          d"                         Z:d# Z;d$ Z<d% Z=d& Z>d' Z?de fd(Z@de fd)ZAde fd*ZBde	j0        de fd+ZCd, ZDde fd-ZEd. ZFd/ ZGd0 ZHd1 ZIe	j5        6                    e+ d          e	j5        6                    e,d          d2                         ZJe	j5        6                    e+ d          d3             ZKd4ZL G d5 d6          ZM G d7 d8          ZN G d9 d:          ZO e	jP                    d;             ZQdS )<    N)Any)Mock)General)shared)PartitionRequest)PartitionParameters)retries)ElementTypeNarrativeText)$DEFAULT_RETRIES_MAX_ELAPSED_TIME_SEC DEFAULT_RETRIES_MAX_INTERVAL_SECget_retries_configpartition_multiple_via_apipartition_via_api   )ANYFixtureRequestexample_doc_pathmethod_mockz1https://api.unstructuredapp.io/general/v0/generalCI >   r   0ffalseGITHUB_REF_NAMEmainrequestexpected_call_c                    t          | t          dt          d                    }t          t	          d                    } |j        |  t          |j        d         j        d         t                    sJ t          |          dk    sJ |d         t          d	          k    sJ |d         j        j        d
k    sJ d S )N	partition   status_codereturn_valueeml/fake-email.emlfilenamer      +This is a test email to use for unit tests.message/rfc822)r   r   FakeResponser   r   assert_called_once_with
isinstancecall_args_listargslenr   metadatafiletype)r   r   partition_mock_elementss       `/var/www/html/ai-engine/env/lib/python3.11/site-packages/test_unstructured/partition/test_api.py8test_partition_via_api_with_filename_correctly_calls_sdkr7   %   s     "+LS4Q4Q4Q  O !*:;O*P*PQQQH+O+^<<o4Q7<Q?IIIIIx==AA;-(UVVVVVVA;(,<<<<<<<    c                 8   t          | t          dt          d                    }t          t	          d          d          5 }t          |t	          d                    }d d d            n# 1 swxY w Y   |d d          }||d         j        j        _         |j	        |  t          |j        d	         j        d	         t                    sJ t          |          dk    sJ |d	         t          d
          k    sJ |d	         j        j        dk    sJ d S )Nr    r!   r"   r$   r&   rb)filemetadata_filenamer)   r   r*   r+   )r   r   r,   openr   r   partition_parametersfilescontentr-   r.   r/   r0   r1   r   r2   r3   )r   r   r4   r   r5   modified_expected_calls         r6   4test_partition_via_api_with_file_correctly_calls_sdkrB   5   sp    "+LS4Q4Q4Q  O 
344d	;	; 
q$&67K&L&L
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ,AAA.CD128@+O+-CDDo4Q7<Q?IIIIIx==AA;-(UVVVVVVA;(,<<<<<<<   A//A36A3caplogc                 z   t          | t          dt          d                    }t          t	          d          d          5 }t          |t	          d                     d d d            n# 1 swxY w Y   |d d          }||d         j        j        _         |j	        |  d	|j
        v sJ d
|j
        v sJ d S )Nr    r!   r"   r$   r&   r:   )r;   file_filenamer)   WARNINGz*The file_filename kwarg will be deprecated)r   r   r,   r=   r   r   r>   r?   r@   r-   text)r   r   rD   r4   r   rA   s         r6   Atest_partition_via_api_warns_with_file_and_filename_and_calls_sdkrI   L   s)    "+LS4Q4Q4Q  O 
344d	;	; Xqq0@AU0V0VWWWWX X X X X X X X X X X X X X X ,AAA.CD128@+O+-CDD####76;FFFFFFrC   c                      t          d          } t          | d          5 }t          j        t                    5  t          || |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   r:   )r;   rF   r<   )r   r=   pytestraises
ValueErrorr   )r(   r   s     r6   Ktest_partition_via_api_from_file_raises_with_metadata_and_file_and_filenamerN   _   s    455H	h		 VFM*$=$= V VqHUUUUV V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V Vs4   A1AA1A	A1 A	!A11A58A5c                      t          t          d          d          5 } t          j        t                    5  t          |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   r:   )r;   )r=   r   rK   rL   rM   r   )r   s    r6   8test_partition_via_api_from_file_raises_without_filenamerP   f   s    	344d	;	; "q&-PZB[B[ " "q!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s4   A-A	A-A	A-A	A--A14A1c                    t          | t          dt          d                    }t          j        t
                    5  t          t          d                     d d d            n# 1 swxY w Y   |                                 d S )Nr      r"   r$   r&   r'   )	r   r   r,   rK   rL   rM   r   r   assert_called_once)r   r4   s     r6   /test_partition_via_api_raises_with_bad_responserT   k   s    !+LS4Q4Q4Q  O 
z	"	" K K#34H#I#IJJJJK K K K K K K K K K K K K K K&&(((((s    A**A.1A.zSkipping test run outside of CI)reasonz(Skipping test run outside of main branchc                     t          d          } t          | dt                      t          dg          }t          | dt                      t          dg          }t          | dt                      t          dg          }t	          |          t	          |          k    sJ t	          |          t	          |          k    sJ |d         j        j        J d S )Nzpdf/loremipsum-flat.pdfautopdf)r(   strategyapi_keyapi_urlskip_infer_table_typeshi_resfastr   )r   r   get_api_keyAPI_URLr1   r2   coordinates)	test_fileelements_no_strategyelements_hi_reselements_fast_ress       r6   'test_partition_via_api_with_no_strategyrf   u   s     !!:;;I, %w   ( %w  O * %w   #$$O(<(<<<<<3'8#9#99999 1&2:::::r8   c                      t          t          d          ddt                      t                    } | d         j        j        J d S )Nzpdf/fake-memo.pdfr]   true)r(   rY   ra   rZ   r[   r   )r   r   r_   r`   r2   ra   r5   s    r6   Ftest_partition_via_api_with_image_hi_res_strategy_includes_coordinatesrj      sR     !!"566  H A;+77777r8   c                  2   t          t          d          dddgt                      t                    } d | D             }|D ]S}|j        j        J |j        j        J t          j        |j        j                  }t          |t                    sJ Td S )Npdf/embedded-images-tables.pdfr]   imagetable)r(   rY   extract_image_block_typesrZ   r[   c                 <    g | ]}|j         t          j        k    |S  )categoryr
   IMAGE).0els     r6   
<listcomp>zAtest_partition_via_api_image_block_extraction.<locals>.<listcomp>   s'    PPPRr{k>O/O/Ob/O/O/Or8   )r   r   r_   r`   r2   image_base64image_mime_typebase64	b64decoder.   bytes)r5   image_elementsru   
image_datas       r6   -test_partition_via_api_image_block_extractionr~      s     !!"BCC#*G"4  H QP8PPPN - -{'333{*666%bk&>??
*e,,,,,,	- -r8   c                      t          t          d          dt                      t          ddddd	  	        } t	          |           d	k    sJ d S )
Nrl   r^         d   Tg      ?)	r(   rY   rZ   r[   retries_initial_intervalretries_max_intervalretries_max_elapsed_timeretries_connection_errorsretries_exponentr   )r   r   r_   r`   r1   ri   s    r6   %test_partition_via_api_retries_configr      s_     !!"BCC!"!$"&  H x==1r8   c                      t                      } t          ddddd|           }|j        sJ |j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ |j        j        dk    sJ d S )NT      ?   i  r   r   r   r   r   r   sdk)r   r   retry_connection_errorsbackoffexponentinitial_intervalmax_elapsed_timemax_intervalr   retries_configs     r6   'test_retries_config_with_parameters_setr      s    
&&C'"&!#!%   N 1111!*d2222!2b8888!2d::::!.#555555r8   c                  T    t                      } t          d d d d d |           }|J d S )Nr   )r   r   r   s     r6   7test_retries_config_none_parameters_return_empty_configr      sE    
&&C'"&!%!%!  N !!!!!r8   c                     t                      } d | j        _        t          dddd d |           }|j        sJ |j        j        dk    sJ |j        j        dk    sJ |j        j        t          k    sJ |j        j
        t          k    sJ d S )NTGz?  r   )r   sdk_configurationretry_configr   r   r   r   r   r   r   r   r   r   s     r6   =test_retry_config_with_empty_sdk_retry_config_returns_defaultr      s    
&&C)-C&'"&!%!%!  N 1111!*d2222!2d::::!26ZZZZZ!.2RRRRRRRr8   c            	      \   t          j        dt          j        dddd          d          } t                      }| |j        _        t          dd d d d |          }|j        sJ |j        j	        dk    sJ |j        j
        dk    sJ |j        j        dk    sJ |j        j        dk    sJ d S )Nr   r   i
 r   i@w Tr   )r	   RetryConfigBackoffStrategyr   r   r   r   r   r   r   r   r   r   r   r   r   s      r6   *test_retries_config_with_no_parameters_setr     s    &7*4wGG L &&C)5C&'"&!%!%!  N 1111!*d2222!2d::::!2g====!.&888888r8   c            	      p   t          j        dt          j        dddd           d          } t                      }| |j        _        t          dddd d |	          }|j        rJ |j        j	        dk    sJ |j        j
        dk    sJ |j        j        t          k    sJ |j        j        t          k    sJ d S )
Nr   r   r   r   TFr   r   r   )r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s      r6   test_retries_config_cascader   "  s     &7*4D$?? L &&C)5C&'"'!#!%!  N 5555!*d2222!2b8888!26ZZZZZ!.2RRRRRRRr8   c           	         t          | t          dt          d                    }t          d          }t	          |g          }|                    ddt          d	i d
t          d          t          d ffg           |d         d         t          d          k    sJ |d         d         j        j	        dk    sJ d S )Npostr!   r"   r$   r&   	filenames.https://api.unstructured.io/general/v0/generalapplication/jsonACCEPTzUNSTRUCTURED-API-KEYr?   headersdatar?   r   r*   r+   )
r   requestsr,   r   r   r-   r   r   r2   r3   )r   r4   r(   r5   s       r6   4test_partition_multiple_via_api_with_single_filenamer   :  s    !60M0M0M  O   455H)XJ???H++8-sKK*+?@@#tLMN	 ,    A;q>]+XYYYYYYA;q>"+/???????r8   c           
         t          | t          dt          d                    }t          d          t          d          g}t	          |          }|                    dd	t          d
i dt          d          t          d ffdt          d          t          d ffg           t          |          dk    sJ |d         d         t          d          k    sJ |d         d         j	        j
        dk    sJ d S )Nr   r!   r"   r$   r&   	fake.docxr   r   r   r   r?   r   r   r   r*   r+   )r   r   FakeMultipleResponser   r   r-   r   r1   r   r2   r3   )r   r4   r   r5   s       r6   .test_partition_multiple_via_api_from_filenamesr   L  s   !60DQT0U0U0U  O ""6779I+9V9VWI)I>>>H++8-sKK'(<==sDIJ'44c4@A
	 ,    x==AA;q>]+XYYYYYYA;q>"+/???????r8   c           
      n   t          | t          dt          d                    }t          d          t          d          g}t	          j                    5 fd|D             }t          ||          }d d d            n# 1 swxY w Y   |                    d	d
t          di dt          d          t          d ffdt          d          t          d ffg           t          |          dk    sJ |d         d         t          d          k    sJ |d         d         j        j        dk    sJ d S )Nr   r!   r"   r$   r&   r   c                 V    g | ]%}                     t          |d                     &S r:   enter_contextr=   rt   r(   stacks     r6   rv   z>test_partition_multiple_via_api_from_files.<locals>.<listcomp>i  1    UUUx$$T(D%9%9::UUUr8   )r?   metadata_filenamesr   r   r   r?   r   r   r   r*   r+   )r   r   r   r   
contextlib	ExitStackr   r-   r   r1   r   r2   r3   )r   r4   r   r?   r5   r   s        @r6   *test_partition_multiple_via_api_from_filesr   b  s   !60DQT0U0U0U  O ""6779I+9V9VWI				 
5UUUU9UUU-(
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ++8-sKK'(<==sDIJ'44c4@A
	 ,    x==AA;q>]+XYYYYYYA;q>"+/???????    BB	B	c           
         t          |t          dt          d                    }t          d          t          d          g}t	          j                    5 fd|D             }t          ||           d d d            n# 1 swxY w Y   |                    d	d
t          di dt          d          t          d ffdt          d          t          d ffg           d| j	        v sJ d| j	        v sJ d S )Nr   r!   r"   r$   r&   r   c                 V    g | ]%}                     t          |d                     &S r   r   r   s     r6   rv   zLtest_partition_multiple_via_api_warns_with_file_filename.<locals>.<listcomp>  r   r8   )r?   file_filenamesr   r   r   r?   r   rG   z+The file_filenames kwarg will be deprecated)
r   r   r   r   r   r   r   r-   r   rH   )rD   r   r4   r   r?   r   s        @r6   8test_partition_multiple_via_api_warns_with_file_filenamer   }  sx    "60DQT0U0U0U  O ""6779I+9V9VWI				 
5UUUU9UUU"$	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ++8-sKK'(<==sDIJ'44c4@A
	 ,    ####8FKGGGGGGr   c                  >   t          d          t          d          g} t          j                    5 fd| D             }t          j        t
                    5  t          || |            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   r   c                 V    g | ]%}                     t          |d                     &S r   r   r   s     r6   rv   zZtest_partition_multiple_via_api_raises_with_file_and_metadata_filename.<locals>.<listcomp>  r   r8   )r?   r   r   r   r   r   rK   rL   rM   r   r   r?   r   s     @r6   Ftest_partition_multiple_via_api_raises_with_file_and_metadata_filenamer     s-   !"6779I+9V9VWI				 5UUUU9UUU]:&& 	 	&#,(   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s5   (BA:.B:A>	>BA>	BBBc           
         t          | t          dt          d                    }t          d          t          d          g}t	          j        t                    5  t          |           d d d            n# 1 swxY w Y   |                    dd	t          d
i dt          d          t          d ffdt          d          t          d ffg           d S )Nr   rR   r"   r$   r&   r   r   r   r   r   r?   r   )
r   r   r   r   rK   rL   rM   r   r-   r   )r   r4   r   s      r6   8test_partition_multiple_via_api_raises_with_bad_responser     s.   !60DQT0U0U0U  O ""6779I+9V9VWI	z	"	" 8 8"Y77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8++8-sKK'(<==sDIJ'44c4@A
	 ,     s   A;;A?A?c                      t          d          t          d          g} t          j        t                    5  t	          | dg           d d d            d S # 1 swxY w Y   d S )Nr&   r   
text/plain)r   content_types)r   rK   rL   rM   r   r   s    r6   Gtest_partition_multiple_via_api_raises_with_content_types_size_mismatchr     s    !"6779I+9V9VWI	z	"	" 
 
"'.	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AAAc                  @   t          d          t          d          g} t          j                    5 fd| D             }t          j        t
                    5  t          || dg           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   r   c                 V    g | ]%}                     t          |d                     &S r   r   r   s     r6   rv   zXtest_partition_multiple_via_api_from_files_raises_with_size_mismatch.<locals>.<listcomp>  r   r8   r   )r?   r   r   r   r   s     @r6   Dtest_partition_multiple_via_api_from_files_raises_with_size_mismatchr     s/   !"6779I+9V9VWI				 5UUUU9UUU]:&& 	 	&#,+n   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s5   (BA;/B;A?	?BA?	BBBc                  :   t          d          t          d          g} t          j                    5 fd| D             }t          j        t
                    5  t          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr&   r   c                 V    g | ]%}                     t          |d                     &S r   r   r   s     r6   rv   zWtest_partition_multiple_via_api_from_files_raises_without_filenames.<locals>.<listcomp>  r   r8   )r?   r   r   s     @r6   Ctest_partition_multiple_via_api_from_files_raises_without_filenamesr     s'   !"6779I+9V9VWI				 5UUUU9UUU]:&& 	 	&   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s5   (BA8,B8A<	<B?A<	 BBBc                  P    t          j        d          } | t          d          | S )NUNS_API_KEYz(UNS_API_KEY environment variable not set)osgetenvrM   )rZ   s    r6   r_   r_     s*    i&&GCDDDNr8   c                  (   t          d          t          d          g} t          | dt                      t                    }t	          |          dk    sJ t          |d         t                    sJ t          |d         t                    sJ d S )Nzfake-text.txtzfake-email.txtr^   r   rY   rZ   r[   r   r   r)   )r   r   r_   r`   r1   r.   list)r   list_of_lists_of_elementss     r6   9test_partition_multiple_via_api_valid_request_data_kwargsr     s     	)))**I
 !;	! ! ! ())Q..../2D99999/2D9999999r8   c                      t          d          t          d          g} t          j        t                    5  t	          | dt                      t                     d d d            d S # 1 swxY w Y   d S )Nz pdf/layout-parser-paper-fast.pdfz img/layout-parser-paper-fast.jpgnot_a_strategyr   )r   rK   rL   rM   r   r_   r`   r   s    r6   ;test_partition_multiple_via_api_invalid_request_data_kwargsr     s     	;<<;<<I 
z	"	" 
 
"%MM	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   %A**A.1A.a  [
    {
        "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
        "text": "This is a test email to use for unit tests.",
        "type": "NarrativeText",
        "metadata": {
            "sent_from": [
                "Matthew Robinson <mrobinson@unstructured.io>"
            ],
            "sent_to": [
                "Matthew Robinson <mrobinson@unstructured.io>"
            ],
            "subject": "Test Email",
            "filename": "fake-email.eml",
            "filetype": "message/rfc822"
        }
    }
]c                   6    e Zd ZdefdZd Zed             ZdS )r,   r#   c                 L    || _         t                      | _        ddi| _        d S )NzContent-Typer   )r#   FakeRawResponseraw_responser   selfr#   s     r6   __init__zFakeResponse.__init__  s+    & ,--&(:;r8   c                 4    t          j        | j                  S NjsonloadsrH   r   s    r6   r   zFakeResponse.json#      z$)$$$r8   c                     t           S r   )	MOCK_TEXTr   s    r6   rH   zFakeResponse.text&  s    r8   N__name__
__module____qualname__intr   r   propertyrH   rq   r8   r6   r,   r,     sY        <C < < < <% % %   X  r8   r,   c                       e Zd Zd ZdS )r   c                     t           | _        d S r   )r   rH   r   s    r6   r   zFakeRawResponse.__init__,  s    			r8   N)r   r   r   r   rq   r8   r6   r   r   +  s#            r8   r   c                   6    e Zd ZdefdZd Zed             ZdS )r   r#   c                     || _         d S r   r"   r   s     r6   r   zFakeMultipleResponse.__init__1  s    &r8   c                 4    t          j        | j                  S r   r   r   s    r6   r   zFakeMultipleResponse.json4  r   r8   c                     dS )Na  [
    [
        {
            "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
            "text": "This is a test email to use for unit tests.",
            "type": "NarrativeText",
            "metadata": {
                "sent_from": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "sent_to": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "subject": "Test Email",
                "filename": "fake-email.eml",
                "filetype": "message/rfc822"
            }
        }
    ],
    [
        {
            "element_id": "f49fbd614ddf5b72e06f59e554e6ae2b",
            "text": "This is a test email to use for unit tests.",
            "type": "NarrativeText",
            "metadata": {
                "sent_from": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "sent_to": [
                    "Matthew Robinson <mrobinson@unstructured.io>"
                ],
                "subject": "Test Email",
                "filename": "fake-email.eml",
                "filetype": "message/rfc822"
            }
        }
    ]
]rq   r   s    r6   rH   zFakeMultipleResponse.text7  s    % %r8   Nr   rq   r8   r6   r   r   0  sY        'C ' ' ' '% % % & & X& & &r8   r   c                     t          t          d          d          5 } |                                 }d d d            n# 1 swxY w Y   t          t	          t          d$i dt          j        |t          d                    dd dd ddd	d d
d dd dd dd dddd dd dddd dd dt          j        j	        dddddddd dd dddddd d t          j
        j        d!dd"d#          d gS )%Nr&   r:   r?   )r@   	file_namechunking_strategycombine_under_n_charsra   Fencodingro   gz_uncompressed_content_typehi_res_model_nameinclude_orig_elementsinclude_page_breaks	languagesmax_charactersmultipage_sectionsTnew_after_n_charsocr_languagesoutput_formatoverlapr   overlap_allpdf_infer_table_structuresimilarity_thresholdr\   split_pdf_concurrency_levelr   split_pdf_pagestarting_page_numberrY   unique_element_idsxml_keep_tags)r>   rq   )r=   r   readr   r   r   r   FilesOutputFormatAPPLICATION_JSONStrategyHI_RES)r   
file_bytess     r6   r   r   a  s'   	344d	;	; qVVXX
               	!4 " " "l&./CDD   "
 #'$" '+d" "E" " +/$" .2T" #'$" '+d" %*E" $"  $t"  $(4!"" #'$#"$ #d%"& %1BB'"( )"* "E+", +/$-". &*T/"0 (,t1"2 -.A3"4  $t5"6 &*T7"8  //9": $)5;"< $e="!	
 !	
 !	
D 	I% %s   ?AA)Rry   r   r   r   pathlibtypingr   unittest.mockr   rK   r   unstructured_client.generalr   unstructured_client.modelsr   %unstructured_client.models.operationsr   !unstructured_client.models.sharedr   unstructured_client.utilsr	   unstructured.documents.elementsr
   r   unstructured.partition.apir   r   r   r   r   
unit_utilsr   r   r   r   Path__file__parentresolve	DIRECTORYr`   r   loweris_in_ciskip_not_on_mainr   r7   rB   LogCaptureFixturerI   rN   rP   rT   markskipifrf   rj   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   r   r   r   r,   r   r   fixturer   rq   r8   r6   <module>r7     sd         				                / / / / / / - - - - - - B B B B B B A A A A A A - - - - - - F F F F F F F F              L K K K K K K K K K K KGL"")1133	 >29T2$$&&.EE29.3399;;vE ==-1#Y= = = = ==-1#Y= = = =.GG-1#YG@F@XG G G G&V V V" " "
)^ ) ) ) ) L)JKK$-WXX#; #; YX LK#;L L)JKK$-WXX
8 
8 YX LK
8 L)JKK$-WXX- - YX LK-" L)JKK$-WXX  YX LK06 6 6$" " "S S S&9 9 9,S S S0@. @ @ @ @$@N @ @ @ @,@ @ @ @ @6H$H/=H H H H8
 
 
n    &
 
 

 
 
     L)JKK$-WXX: : YX LK:$ L)JKK
 
 LK
	(       "       
. . . . . . . .b ( ( ( ( (r8   