
    eL                        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
mZmZmZmZmZ d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zej                            dddg edd          gddg          ej                            dddgddg          d                         Z ej                            dddg edd          gddg          ej                            dddgddg          d                          Z!ej                            dddg edd          gddg          ej                            dddgddg          d!                         Z"ej                            dddg edd          gddg          ej                            dddgddg          d"                         Z#ej                            dddg edd          gddg          ej                            dddgddg          d#                         Z$ej                            dddg edd          gddg          ej                            dddgddg          d$                         Z%ej                            dddg edd          gddg          ej                            dddgddg          d%                         Z&ej                            dddg edd          gddg          ej                            dddgddg          d&                         Z'ej                            dddg edd          gddg          ej                            dddgddg          d'                         Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4ed4             Z5dS )5    )OrderedDictN)panel)mpl_available)ColorMapCrossSelectorMultiChoiceMultiSelectSelectToggleGroupc                  J    t          ddgd          } | j        ddgk    sJ d S )NA   optionsvalue)r
   r   )selects    ?lib/python3.11/site-packages/panel/tests/widgets/test_select.pytest_select_list_constructorr      s5    S!HA...F>c1X%%%%%%    c                      ddd} t          | dd          }|j        dk    sJ d|_        |j        dk    sJ d|_        |j        dk    sJ d S )NgQ	@g       @r   1r
   r   r   name   r
   r   optsr   s     r   &test_select_float_option_with_equalityr      sp    C  DD8<<<F<4FL<3FL<4r   c                      ddd} t          | dd          }|j        dk    sJ d|_        |j        dk    sJ d|_        |j        dk    sJ d S )NABCDEFr   r
   r   r   r   s     r   %test_select_text_option_with_equalityr#      sp    U##DDH===F<5    FL<5    FL<5      r   c                    ddd}t          ||d         d          }|                    | |          }t          ||j                  sJ |j        dk    sJ |j        t          |d                   k    sJ |j        d |                                D             k    sJ |	                    d	t          |d
                   i           |j        |d
         k    sJ t          |d                   |_        |d         |_        |j        |d         k    sJ |d
         |_        |j        t          |d
                   k    sJ d S )Nar   r   r   r
   r   commc                 6    g | ]\  }}t          |          |fS  str.0kvs      r   
<listcomp>ztest_select.<locals>.<listcomp>3   &    AAASQqs1vvajAAAr   r   r   )
r
   get_root
isinstance_widget_typetitler   r+   r   items_process_eventsdocumentr'   r   r   widgets        r   test_selectr;   *   sJ   1DDS	AAAF__XD_11Fff122222<8####<3tCy>>))))>AADJJLLAAAAAAA
GSc^^4555<49$$$$tCy>>FL9FL<49$$$$9FL<3tCy>>))))))r   c                      t          dd          } t          d          }t          dd          }t          | ||g|           }|j        g dk    sJ d S )	NValue1V1)r   Value2Value3V3r   )r>   zMarkdown(str)rA   )r   r
   labels)c1c2c3r   s       r   'test_select_parameterized_option_labelsrF   @   si    	xd	#	#	#B	xB	xd	#	#	#BRRL333F=999999999r   c                    t          ddgdg          }t          |d         d         |d          }|                    | |	          }t          ||j                  sJ |j        dk    sJ |j        t          |d         d                   k    sJ |j        d
 |	                                D             k    sJ |
                    dt          |d         d                   i           |j        |d         d         k    sJ |
                    dt          |d         d                   i           |j        |d         d         k    sJ |d         d         |_        |j        t          |d         d                   k    sJ d S )Nr   r      r%   br%   r   r
   r   groupsr   r&   c                 .    i | ]\  }}|d  |D             S )c                 J    g | ] }t          |          t          |          f!S r)   r*   )r-   r/   s     r   r0   z>test_select_groups_list_options.<locals>.<dictcomp>.<listcomp>R   s)    "D"D"DCFFCFF#3"D"D"Dr   r)   )r-   grvaluess      r   
<dictcomp>z3test_select_groups_list_options.<locals>.<dictcomp>R   s-    fffVb"D"DV"D"D"Dfffr   r   )dictr
   r2   r3   r4   r5   r   r+   r   r6   r7   r9   r'   rL   r   r:   s        r   test_select_groups_list_optionsrT   I   s   QFqc"""F&+a.hGGGF__XD_11Fff122222<8####<3vc{1~......>ffW]WcWcWeWefffffff
GSQ%8%89:::<6#;q>))))
GSQ%8%89:::<6#;q>))))#;q>FL<3vc{1~........r   c                    t          t          dd          t          d                    }t          |d         d         |d	
          }|                    | |          }t          ||j                  sJ |j        d	k    sJ |j        t          |d         d                   k    sJ |j        ddgdgdk    sJ |	                    dt          |d         d                   i           |j        |d         d         k    sJ |	                    dt          |d         d                   i           |j        |d         d         k    sJ |d         d         |_        |j        t          |d         d                   k    sJ d S )Nr   r   rI   rH   cr   Br   r%   r
   rK   r&   )r   r%   )2rJ   )3rW   r   rY   rW   rJ   )
rR   r
   r2   r3   r4   r5   r   r+   r   r7   rS   s        r   test_select_groups_dict_optionsr\   ^   s   D1NNNdQiii000F&+c*6IIIF__XD_11Fff122222<8####<3vc{3/000000>J
#;:,OOOOOO
GSS)9%:%:;<<<<6#;s+++++
GSS)9%:%:;<<<<6#;s+++++#;s#FL<3vc{3/00000000r   c                    t          t          dd          t          d                    }t          |d         d         |d	
          }|                    | |          }t          t          d          t          dd                    }||_        |j        |d         d         k    sJ |j        t          |d         d                   k    sJ |j        dgddgdk    sJ i |_        |j        J |j        dk    sJ d S )Nr   r   rI   rH   rV   rX   r   r%   r
   rK   r&      )d      )ef)CDrd   r_   )4r_   )5rb   )6rc    )rR   r
   r2   rL   r   r+   r   )r9   r'   rL   r   r:   
new_groupss         r   test_select_change_groupsrk   s   s   D1NNNdQiii000F&+c*6IIIF__XD_11Fq			TA^^^444JFM<:c?3/////<3z#s3444444>J<z:6NOOOOOOFM<<2r   c                     t          j        t                    5  t          ddgt	          dgdg          d           d d d            n# 1 swxY w Y   g d} t	          ddgdg          }t          | d          }t          j        t                    5  ||_        d d d            n# 1 swxY w Y   t          |d	          }t          j        t                    5  | |_        d d d            d S # 1 swxY w Y   d S )
Nr   r   rI   r
   )r   rL   r   r   r   rH   rH   )r   r   )rL   r   )pytestraises
ValueErrorr
   rR   rL   r   )r   rL   r   s      r   %test_select_groups_error_with_optionsrq      s   	z	"	" I I1vdaSQC&8&8&8xHHHHI I I I I I I I I I I I I I I 99DQFqc"""F Dx000F	z	"	"                 6111F	z	"	"                   s5   &AAAB--B14B1"C77C;>C;c                     ddd}t          ||d         d          }|                    | |          }ddi|_        |j        |d         k    sJ |j        t	          |d                   k    sJ i |_        |j        J |j        d	k    sJ d S )
Nr%   r   r   r   r
   r   r&   r   ri   )r
   r2   r   r   r+   r8   s        r   test_select_change_optionsrs      s    1DDS	AAAF__XD_11F3ZFN<49$$$$<3tCy>>))))FN<<2r   c                    t          j        g d          t          j        g d          d}t          ||d         d          }|                    | |          }|d         |_        |j        |d         u sJ |j        t          |d                   k    sJ |                    d           ||_        |j        |d         u sJ |j        t          |d                   k    sJ d S )	Nrm   )rH   r^   r`   r   r   r
   r   r&   r   )nparrayr
   r2   r   r+   popr   r8   s        r    test_select_non_hashable_optionsrx      s    )))$$28III+>+>??DDS	AAAF__XD_11F9FL<49$$$$<3tCy>>))))HHSMMMFN<49$$$$<3tCy>>))))))r   c           	      J   t          dg dfdg dfdt          dd          fg          }t          ||d         d	
          }|                    | |          }t	          ||j                  sJ |j        d	k    sJ |j        t          |d                   k    sJ |j	        d |
                                D             k    sJ t          |d                   |_        |                    dt          |d                   i           |j        |d         k    sJ t          |d                   |_        |                    dt          |d                   i           |j        |d         k    sJ |d         |_        |j        t          |d                   k    sJ d S )Nr   rm   rY   )r   r^   ra   rd   r   r   rI   r
   r   r&   c                 6    g | ]\  }}t          |          |fS r)   r*   r,   s      r   r0   z(test_select_mutables.<locals>.<listcomp>   r1   r   r   )r   rR   r
   r2   r3   r4   r5   r   r+   r   r6   r7   r8   s        r   test_select_mutablesr{      s   ggggggdQmmm8LMNNDDS	AAAF__XD_11Fff122222<8####<3tCy>>))))>AADJJLLAAAAAAAtCy>>FL
GSc^^4555<49$$$$tCy>>FL
GSc^^4555<49$$$$9FL<3tCy>>))))))r   c                    t          t          dddt          fg          dd          fd}j                            |d                               | |	          }d
_        |j        t          t          j	        
                                          d                   k    sJ |j	        d j	                                        D             k    sJ d S )Nr   r   r   r   rd   r   r
   r   c                 N    | j         dk    rt          ddg          _        d S d S Nr   )re   r   )Er%   newr   r   eventr   s    r   set_optionsz8test_select_change_options_on_watch.<locals>.set_options   s-    9>>((J)?@@FNNN >r   r   r&   r   r   c                 6    g | ]\  }}t          |          |fS r)   r*   r,   s      r   r0   z7test_select_change_options_on_watch.<locals>.<listcomp>   s&    JJJCAac!ffQZJJJr   )r
   r   objectparamwatchr2   r   r+   listr   rP   r6   r9   r'   r   modelr   s       @r   #test_select_change_options_on_watchr      s    KXV}(MNN"3 3 3FA A A A A L{G,,,OOH4O00EFL;#d6>#8#8#:#:;;A>??????=JJ6>3G3G3I3IJJJJJJJJJr   r   
      rX   r   rR   )idssizer   r   zsize=1zsize>1c                     t          | dg|          }|                    ||          }t          ||j                  sJ |j        dgk    sJ d S )Nr   r   disabled_optionsr   r&   )r
   r2   r3   r4   r   r   r   r9   r'   r   r:   s         r   !test_select_disabled_options_initr      sd     GrdFFFF__XD_11Fff122222"rd******r   c                     t          | |          }dg|_        |                    ||          }t          ||j                  sJ |j        dgk    sJ d S )Nr   r   r   r&   )r
   r   r2   r3   r4   r   s         r   'test_select_disabled_options_after_initr      sj     G$///F!dF__XD_11Fff122222"rd******r   c                     t          j        t          d          5  t          | dg           d d d            d S # 1 swxY w Y   d S )Nz$as it is one of the disabled optionsmatchr   )r   r   rn   ro   rp   r
   r   s     r   *test_select_disabled_options_error_on_initr      s     
z)O	P	P	P 7 7w"66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   <A A c                     t          j        t          d          5  t          | ddg|           d d d            d S # 1 swxY w Y   d S )NAll the optionsr   r   r   r   r   r   s     r   5test_select_disabled_options_all_raises_error_on_initr      s     
z):	;	;	; F Fw"bEEEEF F F F F F F F F F F F F F F F F Fs   >AAc                     t          | |          }t          j        t          d          5  ddg|_        d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   r
   rn   ro   rp   r   r   r   r   s      r   8test_select_disabled_options_all_raises_error_after_initr     s     G$///F	z):	;	;	; + +#%r(+ + + + + + + + + + + + + + + + + +s   
AAAc                     t          j        t          d          5  t          | dg|           d d d            d S # 1 swxY w Y   d S )Nz#Cannot disable non existing optionsr      r   r   r   s     r   Btest_select_disabled_options_error_disabled_options_not_in_optionsr     s     
z)N	O	O	O B Bw"DAAAAB B B B B B B B B B B B B B B B B Bs   =AAc                     t          | dg|          }t          j        t          d          5  d|_        d d d            d S # 1 swxY w Y   d S )Nr   r   zas it is a disabled optionr   )r
   rn   ro   rp   r   r   s      r   ,test_select_disabled_options_error_set_valuer     s     GrdFFFF	z)E	F	F	F                   s   AAAc                     t          d| |          }t          j        t          d          5  dg|_        d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r   zCannot set disabled_optionsr   r   r   s      r   7test_select_disabled_options_error_set_disabled_optionsr     s     "gD999F	z)F	G	G	G ' '#%$' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   	AAAc                     t          | dg|          }|j                            ddg           |                    ||          }|j        dk    sJ |j        dk    sJ |j        dgk    sJ d S )Nr   r   r   )r   r   r&   20)r
   r   updater2   r   r   r   s         r   ;test_select_disabled_options_set_value_and_disabled_optionsr   "  s     GrdFFFF
LbB4888__XD_11F<4<2"rd******r   c                    t          t          dddt          fg          t          dgd          }|                    | |          }t	          ||j                  sJ |j        dk    sJ |j        ddgk    sJ |j        g d	k    sJ dg|_        |	                    d
dgi           |j        dgk    sJ ddg|_        |	                    d
ddgi           |j        dt          gk    sJ t          dg|_        |j        ddgk    sJ d S )Nr}   r~   rd   r   r
   r   r&   r   r   r   rd   r   r   )
r	   r   r   r2   r3   r4   r5   r   r   r7   )r9   r'   r   r:   s       r   test_multi_selectr   /  sE   j(S&M-R!S!S &{; ; ;F __XD_11Fff122222<8####<C:%%%%>___,,,,5FL
GcU+,,,<A3:FL
Gc3Z0111<C=((((C=FL<C:%%%%%%r   c                    t          t          dddt          fg          t          dgd          }|                    | |          }t	          ||j                  sJ |j        dk    sJ |j        ddgk    sJ |j        g d	k    sJ dg|_        |	                    d
dgi           |j        dgk    sJ ddg|_        |	                    d
ddgi           |j        dt          gk    sJ t          dg|_        |j        ddgk    sJ d S )Nr}   r~   rd   r   r   r   r&   r   r   r   r   )
r   r   r   r2   r3   r4   r5   r   r   r7   )r9   r'   choicer:   s       r   test_multi_choicer   F  sH   j(S&M-R!S!S &{@ @ @F __XD_11Fff122222<=((((<C:%%%%>___,,,,5FL
GcU+,,,<A3:FL
Gc3Z0111<C=((((C=FL<C:%%%%%%r   c                    t          t          dddt          fg          t          dgd          fd}j                            |d                               | |	          }dg_        |j        g k    sJ |j        d
dgk    sJ d S )Nr}   r~   rd   r   r
   r   c                 P    | j         dgk    rt          ddg          _        d S d S r   r   r   s    r   r   z5test_multi_select_change_options.<locals>.set_optionsa  s2    9((J)?@@FNNN r   r   r&   re   r   )r	   r   r   r   r   r2   r   r   r   s       @r    test_multi_select_change_optionsr   ]  s    j(S&M-R!S!S &{; ; ;FA A A A A L{G,,,OOH4O00E3FL;"=S#J&&&&&&r   c           	         t          j        t                    5  t          t	          dddt
          fg          dddd           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          dddt
          fg          dt
          gddd	           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          dddt
          fg          dt
          gdd
           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          dddt
          fg          dt
          gdd           d d d            d S # 1 swxY w Y   d S )Nr}   r~   rd   r   RadioButtonGroupbuttoncheckr   r   r   widget_typebehaviorradiobuttons)r   r   r   r   checks)r   r   r   r   )rn   ro   rp   r   r   r   )r9   r'   s     r   test_toggle_group_error_initr   m  s   	z	"	" < <KXV}(MNN"4 (7	< 	< 	< 	<< < < < < < < < < < < < < < <
 
z	"	" < <KXV}(MNNf+,> (7	< 	< 	< 	<< < < < < < < < < < < < < < <
 
z	"	" + +KXV}(MNNf+,> )	+ 	+ 	+ 	++ + + + + + + + + + + + + + +
 
z	"	" ' 'KXV}(MNNf+,>%	' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'sG   ,AAA63B55B9<B92DDD;2E::E>E>c           	         t           j        D ]k}t          t          dddt          fg          dt          gd|d          }|                    | |          }t          ||j                  sJ |j        dd	gk    sJ |j        g d
k    sJ d	g|_        |	                    dd	gi           |j
        t          gk    sJ dd	g|_        |	                    ddd	gi           |j
        dt          gk    sJ t          dg|_
        |j        d	dgk    sJ g |_        |	                    dg i           |j
        g k    sJ ddg|_
        ddg|_        ddg|_        |j        |j        d                  dk    sJ md S )Nr}   r~   rd   r   CheckButtonGroupr   r   r&   r   r   activer   r   rY   )r   _widgets_typer   r   r2   r3   r4   r   rB   r7   r   r   r9   r'   r   r   r:   s        r   test_toggle_group_checkr     s   "0 6 6[*hf1V%W%W&'[7I+6J J J 55&&"566666}A&&&&}////1#///|x''''A1a&1222|V},,,,}}A&&&&"~...|r!!!!Szss}V]1-.#55555;6 6r   c           	         t           j        D ]}t          t          dddt          fg          dd|d          }|                    | |          }t          ||j                  sJ |j        dk    sJ |j        g d	k    sJ d
|_        |	                    dd
i           |j
        t          k    sJ d|_
        |j        dk    sJ d S )Nr}   r~   rd   r   r   r   r   r&   r   r   r   r   r   )r   r   r   r   r2   r3   r4   r   rB   r7   r   r   s        r   test_toggle_group_radior     s    "0 " "[*hf1V%W%W%&-?+6J J J 55&&"566666}!!!!}////!}---|v%%%%}!!!!!!" "r   c                     t          g dddgd          } | j        d         j        ddgk    sJ | j        d         j        g d	k    sJ d
dg| _        | j        d         j        d
dgk    sJ | j        d         j        g dk    sJ ddd| _        | j        d         j        g k    sJ | j        d         j        ddgk    sJ d| _        | j        d         j        dk    sJ | j        d         j        dk    sJ d| j        d         _        | j        d         j        dgk    sJ | j        d         j        	                    d           | j        d         j        dgk    sJ | j        d         j        g k    sJ | j        d         j        dgk    sJ | j        d         j        g k    sJ d| j        d         _        | j        d         j        	                    d           | j        d         j        ddgk    sJ | j        d         j        dgk    sJ | j        d         j        g k    sJ d| j        d         _        | j        d         j        g k    sJ d S )Nr   rY   rd   r   r   rH   r   r   r`   r   r   r   Tr   F)rY   rd   rZ   r[   rY   r   rZ   )r   rd   r   r[   re   r^   )re   rf   rf   clicksri   )
r   _listsr   r   r   _searchvalue_input_buttonsr   triggercross_selects    r   test_cross_select_constructorr     s    )A)A)A#qXYZZZLt$,c
::::u%-1E1E1EEEEE qLt$,c
::::u%-1E1E1EEEEE "%1--Lt$,2222u%-#s;;;; Lt$)Q....u%*a//// /2L+u%+u4444 $%--h777u%-#6666u%+r1111t$,5555u%+r1111 .1L*% &..x888u%-#s;;;;u%+u4444t$,2222 /1L+u%+r111111r   c                      t          g dddgd          } ddg| j        d         _        d| j        d         _        | j        g k    sJ | j        d         j        g k    sJ d S )	Nr   r   r   r`   r   r   TFr   r   r   r   r   r   r   s    r   -test_cross_select_move_selected_to_unselectedr     s|     )A)A)A#qXYZZZL'*CjL#*+L% '####t$,222222r   c                      t          g dddgd          } ddg| j        d         _        d| j        d	         _        | j        g d
k    sJ | j        d	         j        g dk    sJ d S )Nr   r   r   r`   r   rY   r[   FTr   r   rY   rH   )r   rY   r   r[   r   r   s    r   -test_cross_select_move_unselected_to_selectedr     s     )A)A)A#qXYZZZL(+SzL$)*L$&!1!1!11111t$,0D0D0DDDDDDDr   c                      t          g dddgdd          } ddg| j        d         _        d| j        d	         _        | j        g d
k    sJ | j        d	         j        g dk    sJ d S )N)rY   r   rd   r   r   rH   r   r   r`   F)r   r   r   definition_orderrY   r[   Tr   )r   r   rY   r[   r   r   s    r   Btest_cross_select_move_unselected_to_selected_not_definition_orderr     s     )A)A)A#qXYlqrrrL(+SzL$)*L$&!1!1!11111t$,0D0D0DDDDDDDr   c                     t          ddgddgdddg          }|                    | |          }|j        dk    sJ |j        dk    sJ ddg|_        |j        d	k    sJ |j        d	k    sJ d S )
N#ff0#0ff#00f#f00rX   r   r&   rY   r   r   r2   r   
value_namer9   r'   	color_mapr   s       r   test_colormap_set_value_namer     s    '7vv>N!O!OX^`fWghhhIxd33E;#3&&&&v&IO;#3&&&&&&r   c                     t          ddgddgdd          }|                    | |          }|j        dk    sJ |j        ddgk    sJ d	|_        |j        d	k    sJ |j        ddgk    sJ d S )
Nr   r   r   r   rX   rY   r   r   r&   r   r   r   s       r   test_colormap_set_valuer     s    '7vv>N!O!O\_```Ixd33E;#?vv.....I;#?vv.......r   c                     ddl m}m} t          ||dd          }|                    | |          }|j        dg dfdg d	fgk    sJ d S )
Nr   )Set1tab10)r   r   r   r   r&   r   )
zrgba(31, 119, 180, 1)zrgba(255, 127, 14, 1)zrgba(44, 160, 44, 1)zrgba(214, 39, 40, 1)zrgba(148, 103, 189, 1)zrgba(140, 86, 75, 1)zrgba(227, 119, 194, 1)zrgba(127, 127, 127, 1)zrgba(188, 189, 34, 1)zrgba(23, 190, 207, 1))	zrgba(228, 26, 28, 1)zrgba(55, 126, 184, 1)zrgba(77, 175, 74, 1)zrgba(152, 78, 163, 1)zrgba(255, 127, 0, 1)zrgba(255, 255, 51, 1)zrgba(166, 86, 40, 1)zrgba(247, 129, 191, 1)zrgba(153, 153, 153, 1))matplotlib.cmr   r   r   r2   r6   )r9   r'   r   r   r   r   s         r   test_colormap_mpl_cmapr     s    ))))))))5$!?!?FSSSIxd33E;	 
 
 
 	 
 

 

 

 
	      r   )6collectionsr   numpyru   rn   
panel.paner   panel.tests.utilr   panel.widgetsr   r   r   r	   r
   r   r   r   r#   r;   rF   rT   r\   rk   rq   rs   rx   r{   r   markparametrizerR   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   <module>r      s   # # # # # #            * * * * * *               
& & &
	  	  	 	! 	! 	!* * *,: : :/ / /*1 1 1*  "  &  * * * * * *.K K K  b"XttbB/?/?/?$@vvFVWW!Qh-ABB+ + CB XW+ b"XttbB/?/?/?$@vvFVWW!Qh-ABB+ + CB XW+ b"XttbB/?/?/?$@vvFVWW!Qh-ABB7 7 CB XW7
 b"XttbB/?/?/?$@vvFVWW!Qh-ABBF F CB XWF
 b"XttbB/?/?/?$@vvFVWW!Qh-ABB+ + CB XW+ b"XttbB/?/?/?$@vvFVWW!Qh-ABBB B CB XWB
 b"XttbB/?/?/?$@vvFVWW!Qh-ABB  CB XW b"XttbB/?/?/?$@vvFVWW!Qh-ABB' ' CB XW' b"XttbB/?/?/?$@vvFVWW!Qh-ABB+ + CB XW+& & &.& & &.' ' ' ' ' ',6 6 6D" " "*)2 )2 )2X3 3 3E E EE E E' ' '/ / /     r   