
    hW                       % S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJrJrJrJrJr  S SKJrJr  S SKJr  S SK J!r!J"r"J#r#  \(       a>  S SKJ$r$  S SK
J%r%  S SK&J'r'  S SK(J)r)  S SK*J+r+  S SKJ,r,J-r-J.r.  S SK/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7  S8S9S jjr8Sr9Sr:\S\S\S0r;S\<S'    " S S5      r=S:S  jr>S;S! jr?    S<S" jr@              S=S# jrA\S$S%.           S>S& jj5       rB\            S?S' j5       rBS(S%.           S@S) jjrB          SAS* jrCS+S+S,.         SBS- jjrD              SCS. jrESDS/ jrF         SE                       SFS0 jjrG    SGS1 jrHS2S3.       SHS4 jjrI SI     SJS5 jjrJSKS6 jrKSLS7 jrLg+)M    )annotations)Sequence)BytesIO)PathLike)Path)TYPE_CHECKINGAnyoverload)	functions)json)qualified_type_name)DateDatetimeFloat64Int64Time)FLOAT_DTYPESINTEGER_DTYPES)DuplicateError)_expand_selector_dicts_expand_selectorsnumeric)Iterable)LiteralWorkbookFormat	Worksheet)	DataFrameSchemaSeries)ColumnFormatDictColumnTotalsDefinitionConditionalFormatDictOneOrMoreDataTypesPolarsDataTypeRowTotalsDefinition)Exprc                ,    [        [        U 5      /U-  6 $ N)zipiter)iterablens     \/home/james-whalen/.local/lib/python3.13/site-packages/polars/io/spreadsheet/_write_utils.py_clusterr2   +   s    h 1$%%    z#,##0.000;[Red]-#,##0.000z#,##0;[Red]-#,##0zyyyy-mm-dd hh:mm:sszyyyy-mm-dd;@z
hh:mm:ss;@zdict[PolarsDataType, str]_XL_DEFAULT_DTYPE_FORMATS_c                  @    \ rS rSrSrSS jr\S	S j5       rS
S jrSr	g)_XLFormatCache8   zGCreate/cache only one Format object per distinct set of format options.c                    0 U l         Xl        g r,   _cachewb)selfr;   s     r1   __init___XLFormatCache.__init__;   s    )+r3   c                6    [         R                  " U S[        S9$ )NT)	sort_keysdefault)r   dumpsstr)fmts    r1   _key_XLFormatCache._key?   s    zz#s;;r3   c                    [        U[        5      (       d  UnU$ U R                  U5      nU R                  R	                  U5      nUc)  U R
                  R                  U5      nX R                  U'   U$ r,   )
isinstancedictrE   r:   getr;   
add_format)r<   rD   wbfmtkeys       r1   rJ   _XLFormatCache.getC   sf    #t$$E  ))C.CKKOOC(E}**3/#(C r3   r9   N)r;   r   returnNone)rD   dict[str, Any]rO   rC   )rD   zdict[str, Any] | FormatrO   r   )
__name__
__module____qualname____firstlineno____doc__r=   staticmethodrE   rJ   __static_attributes__ r3   r1   r6   r6   8   s#    Q < <	r3   r6   c           	        ^  [        U 4S jU 5       5      nU[        [        [        U5      [        U5      S-   5      5      :w  a  gT R                  nUS   XCS      S.US'   US   XCS      S.US'   g	)
z>Indicate if the given columns are all adjacent to one another.c              3  F   >#    U  H  nTR                  U5      v   M     g 7fr,   )get_column_index).0coldfs     r1   	<genexpr>!_adjacent_cols.<locals>.<genexpr>Q   s     ;ds"%%c**ds   !   Fr   )idxnameminmaxT)sortedrangere   rg   columns)r_   colsmin_maxidxsrj   s   `    r1   _adjacent_colsrn   O   st    ;d;;DveCIs4y1}566**!%a'q'2BC!%b783DEr3   c                .   ^ [        U4S jU  5       5      $ )z4Indicate if the given columns are all integer-typed.c              3  J   >#    U  H  nTU   R                  5       v   M     g 7fr,   )
is_integer)r]   r^   schemas     r1   r`   $_all_integer_cols.<locals>.<genexpr>]   s!     84Cvc{%%''4s    #)all)rk   rr   s    `r1   _all_integer_colsru   [   s    84888r3   c                    [        U [        5      (       d  U $ 0 nU R                  5        H?  u  p#[        U[        5      (       d  [        U[        5      (       d  U4nU H  nX1U'   M	     MA     U$ )zCUnpack multi-col dictionary into equivalent single-col definitions.)rH   rI   itemsrC   r   )dunpackedrM   valueks        r1   _unpack_multi_column_dictr|   `   se     a!Hggi
c3z#x'@'@&CAQK   
 Or3   c          	        SSK Jn  [        XSSSS9R                  5        GH+  u  px[	        U[
        5      (       d#  [        U5      S:X  a  [        [        U5      5      n[	        U[
        [        45      (       a  U/nU H  n	[	        U	[        5      (       d  SU	0n	[	        U[
        5      (       a  [        XXtS9n
O2[        XXtS9n
S	U
;   a"  [        [        U5      5      nXS
'   [        XXS9n
SU	;   aD  U	S   n[	        X5      (       a  UO)UR                  [	        U[
        5      (       a  SU0OU5      U	S'   UR                  X5        M     GM.     g)zJTake all conditional formatting options and apply them to the table/range.r   r   TFexpand_keysexpand_values
tuple_keysrb   typeinclude_header multi_rangeformat
num_formatN)xlsxwriter.formatr   r   rw   rH   rC   lennextr.   rI   _xl_column_range_xl_column_multi_rangerJ   conditional_format)r_   wsconditional_formatstable_startr   format_cacher   rk   formatsrD   	col_ranger^   fs                r1   _xl_apply_conditional_formatsr   o   sJ    )/
TSWeg $$$TaT
#DgT{++iGCc4((sm$$$,T	 3T	 )#tDz*C)2& 0!I 3M "!,, %))-73-?-?q)Q H !!)17 r3   .)as_rangec                   g r,   rY   r_   r   r^   r   r   s        r1   r   r      s     r3   c                   g r,   rY   r   s        r1   r   r      s     !$r3   Tc               N   US   [        U5      -   US   [        U[        5      (       a  U R                  U5      OUS   -   4nUS   U R                  -   S-
  US   [        U[        5      (       a  SO
US   US   -
  -   4nU(       a  SR                  [        / UQUQ76 5      $ XV-   $ )zKReturn the Excel sheet range of a named column, accounting for all offsets.r   rb    )intrH   rC   r\   heightjoin_xl_rowcols_to_range)r_   r   r^   r   r   	col_start
col_finishs          r1   r   r      s     	A^,,Ajc6J6J"--c2PSTUPVWI
 	!ryy 1$!ZS11AQIJ ww+DYDDEE%%r3   c                  ^ ^^ 0 n[        T X$S9(       a  [        T TUS   S   US   S   4TS9$ SR                  U UU4S jU 5       5      $ )zNReturn column ranges as an xlsxwriter 'multi_range' string, or spanning range.rl   re   rc   rg   r   r   c              3  <   >#    U  H  n[        TTUTS 9v   M     g7f)r   N)r   )r]   r^   r_   r   r   s     r1   r`   )_xl_column_multi_range.<locals>.<genexpr>   s#      C 	[#nMs   )rn   r   r   )r_   r   rk   r   ms   `` ` r1   r   r      sb     Ab$*uXe_ahuo.)	
 	
 88   r3   N)dtypeexprc                 ^^^^ [        U R                  5      mU R                  R                  5       n0 mUR                  5        H  u  pVUT;   a  SU< S3n[	        U5      e[        U[        5      (       d  UR                  U5        ME  UR                  S5      TU'   UR                  S5      nUR                  S5      n	U	c  Uc  UR                  U5        M  Uc  UR                  U	5      S-   OUR                  U5      n
UR                  X5        M     Tc  [        R                  " S5      OTmU R                  UUUU4S jU 5       5      n U $ )	zHInsert dummy frame columns in order to create empty/named table columns.zcannot create a second z columnreturn_dtypeinsert_beforeinsert_afterNrb   c           
   3     >#    U  H  nUT;   a  UOuT(       d  TR                  U5      bL  TR                  TR                  U[        T[        5      (       a  TR                  U[        5      OT5      5      OTR                  U5      v   M     g 7fr,   )rJ   castrH   rI   r   alias)r]   r^   cast_lookupdf_original_columnsr   r   s     r1   r`   1_xl_inject_dummy_table_columns.<locals>.<genexpr>  s       "C ))  [__S1= 		OO3=eT3J3J		#w/PU eCj "s   BB)setrj   copyrw   r   rH   rI   appendrJ   indexinsertFlitselect)r_   coldefsr   r   df_select_colsr^   
definitionmsgr   r   
insert_idxr   r   s     ``       @@r1   _xl_inject_dummy_table_columnsr      s8    bjj/ZZ__&NK"==?%%+C7':C %%J--!!#&)~~n=K&NN?;M%>>.9L#(=%%c* %, #((6:'--m< 
 %%j6' +* ,155;DD	  " 
B" Ir3   c                  SSK Jn  0 n[        U[        5      (       a  UR	                  S5      OUnU(       d  Sn	[        U	5      e[        XUS9(       d  Sn	[        U	5      e[        XX4SS9u  p  nUS	   US
   S   -   nUS	   US   S   -   n[        U[        5      (       d  0 nOKUR                  5        VVs0 s H  u  nnUS;  d  M  UU_M     nnnSU;  a  UR	                  S5      S;   US'   [        UR                  5       H4  nU" X5      nU" X5      nU SU 3US'   U R                  XU5        U
S	-  n
M6     gs  snnf )z@Inject sparklines into (previously-created) empty table columns.r   xl_rowcol_to_cellrj   z;supplying 'columns' param value is mandatory for sparklinesr   z.sparkline data range/cols must all be adjacentF)r   r   rb   re   rc   rg   )rj   r   r   negative_pointsr   )columnwin_loss:ri   N)xlsxwriter.utilityr   rH   rI   rJ   
ValueErrorrn   RuntimeErrorr   rw   ri   r   add_sparkline)r   r_   r   r^   r   paramsr   r   	data_colsr   spk_rowspk_col_data_start_coldata_end_coloptionsrd   val
data_startdata_ends                       r1   _xl_inject_sparklinesr     se    5A)3FD)A)A

9%vIKoB15>3-
eGa !^ahuo5Nq>AeHUO3Lfd##
 $\\^
+	cGG D#I+ 	 

 G+)0V)<@V)VG%&299&w?
$W;(\8*5
731 
s   7D=D=c                    ^ SSK Jm  U4S j[        U 5       5       n[        U5       VVs/ s H  u  p#U SU 3PM     snn$ s  snnf )z@Return list of "A1:B2" range refs from pairs of row/col indexes.r   r   c              3  8   >#    U  H  u  pT" X5      v   M     g 7fr,   rY   )r]   rowr^   r   s      r1   r`   '_xl_rowcols_to_range.<locals>.<genexpr>M  s     U=T"3,,=Ts   r   )r   r   r2   )row_col_pairs	cell_refs
cell_startcell_endr   s       @r1   r   r   I  sB    4UXm=TUICKICVWCV+?:zl!H:&CVWWWs   Ac                ,   SS jnU R                   R                  5        VVs/ s He  u  pUR                  5       (       d  UR                  5       (       d  M1  [        R
                  " U5      R                  U5      R                  U5      PMg     nnnU(       a  U R                  U5      n [        [        XSSSS95      nU(       d  Sn0 nGOU R                   nUR                  5        VVs1 s H  u  pUR                  5       (       d  M  UiM      nnn[        U[        5      (       d  [        UU5      (       a  [        O[         nUSL a  UO+[        U["        5      (       a  U1O[%        ['        X5      5      n[)        S U R*                   5       5      nUU R,                  S-  :  a  SOS	 S
3nU[/        U US5      0nU/nO[        XSSS9nUR                  5        VVs0 s H+  u  nnU[        USL a  UOUU5      (       a  [        O[         _M-     nnnUR                  5        VVs0 s H  u  nnU[/        U USL a  UOUS5      _M     nnnUSL a,  [1        5       S0[        R3                  U=(       d    SS5      EnOP[        U["        5      (       a;  UR5                  5       n[1        5       U0[        R3                  U=(       d    SU5      En[        [        U[        5      (       a  [        XSSS9O
['        X5      5      n[        U[6        5      (       a  [        R3                  US5      O&[        U[        5      (       a  UR9                  5       O0 nU=(       d    0 R                  5        VVs0 s H"  u  nnU[        U["        5      (       a  SU0OU_M$     nnn[        U=(       d    0 5      n[        U=(       d    0 5      n[;        U5       HS  n[        U[<        [>        45      (       d  M   URA                  [        R3                  XRC                  U5      5      5        MU     URE                  5        H7  n[        U["        5      (       a  M  SU< S[G        U5      < S3n[I        U5      e   U(       a  [K        X5      n U(       a  [K        U U5      n U(       a  [K        U UUS9n URM                  SS05      nU
c  [N        n [P        n!O2[N        RS                  SS5      S   n [P        RS                  SS5      S   n![T         H  nU [V        U'   M     SU	-  n"U"(       d  U OU!RY                  SSU" 35      n#[V        R                  5        H  u  nnUR[                  UU5        M     [\         H  nUR[                  UU#5        M     UR                  5        H
  u  nnUXM'   M     U R                   R                  5        HL  u  pUR_                  5       n$U$U;   a&  URM                  XU$   5      nUR[                  UU5        X;  d  MH  UX<'   MN     UR                  5        H  u  nn[        U["        5      (       a  URM                  USS.5      X<'   M3  [        U[        5      (       d  MJ  SU;  a'  U R                   RM                  U5      nX;   a  XM   US'   SU;  a  SUS'   URM                  U5      X<'   M     U(       a  URM                  U5      OSn%U R*                   VV&V's/ s H}  nUX<   U%URM                  U5      URM                  U5      =(       d!    URM                  U0 5      RM                  S5      S.R                  5        V&V's0 s H  u  n&n'U'c  M  U&U'_M     sn'n&PM     n(n&nn'U(X04$ s  snnf s  snnf s  snnf s  snnf s  snnf s  sn'n&f s  sn'n&nf )z7Setup and unify all column-related formatting/defaults.c           	         U R                  U R                  U R                  5        Vs/ s H  oc  S O
[        U5      PM     sn5      $ s  snf r,   )	__class__rd   to_listrC   )svs     r1   _map_str)_xl_setup_table_columns.<locals>._map_stra  s?    {{FFaiikJkidSV3kJ
 	
Js   A	
TFr~   Nc              3  X   #    U  H   o(       a  US    OSR                  5       v   M"     g7f)r   r   N)isupperr]   cs     r1   r`   *_xl_setup_table_columns.<locals>.<genexpr>  s$     LA11Q4"5577s   (*   Ttotalsum)r   r   rY   formulazinvalid dtype_format value: z (expected format string, got ))r   valignvcenter;rb   r   0z.000.)r   r   r   )headerr   header_formattotal_functionr   )r   r#   rO   r#   )0rr   rw   	is_nested	is_objectr   r^   map_batchesr   with_columnsr|   r   
is_numericrH   rI   ru   r   r   rC   r   r   r   rj   width_xl_table_formular   fromkeyslowerr   r   listtuple	frozensetupdatepopvaluesr   	TypeErrorr   rJ   _XL_DEFAULT_INTEGER_FORMAT__XL_DEFAULT_FLOAT_FORMAT_splitr   r4   replace
setdefaultr   	base_type))r_   r   column_totalscolumn_formatsdtype_formatsr   
sparklinesformulas
row_totalsfloat_precisiontable_styler   r^   tp	cast_colsrow_totals_dtyperow_total_funcsrr   numeric_colssum_colsn_ucasetotalnmrk   rd   fncolumn_total_funcsr   column_formulasrD   r   fmt_defaultint_base_fmtflt_base_fmtzeros	fmt_floatr  col_header_formatr{   r   table_columnss)                                            r1   _xl_setup_table_columnsr.  Q  s"    
 yy((GC<<>>R\\^ 	4c
x(..s3(  
 __Y' /DRV	
N +1<<>M>R]]_>M*d++*<@@g 
 %  "*c22  L.r>?  LLLG&Q6sSAFE$&7He&LMOJ/EJ !+ 0 0 2  !3HB (4QWXX  !
 !3    #-"2"2"4	 #5JD$ '4%  #5	    ETT]]:;KU-ST	M3	'	'  " BN$--
8Hb"*MN-mT** 	rdRWXr1M mX.. 	mU+&0&E&Em  "2  &^2244LC 	Z%=%=i!7J4   ..B/N,"-M=!b5),--  r3D3DR3H!IJ " ##%#s##07UVijmVnUqqrsCC.  & +B;+B@+BGWX ""Hi#89K20 388a@C066sA>qA)5"2&  /!E$)|/C/CFaPUwK/XI .335C  S) 6  Y/  &&(C ) 99??$LLN	%##Bi(@AC%%c3/$"-N % #((*Sc3"."2"2"i8#N T""3&YY]]3'&(5(9C%s" )H"."2"23"7N + <I((7d$ :: C (-!2"4"8"8"=#'', C&**3377	B	 eg		
	1  AqD		
   " .,,[* N, 4`	
sH   0]+8]++]1
]12]7'"]=/)^A'^
^	^	^	^c                    [        U [        5      (       aF  SnU  H  nX!;  d  M
  SU< 3n[        U5      e   U R                  5       nUR	                  SS5      n X4$ 0 nX4$ )zESetup table options, distinguishing style name from other formatting.)stylebanded_columnsbanded_rowsfirst_columnlast_columnzinvalid table style key: r0  N)rH   rI   r   r   r
  )r  valid_optionsrM   r   table_optionss        r1   _xl_setup_table_optionsr7    s}     +t$$
 C'1#9 o% 
 $((*#''6 %% %%r3   Freturn_worksheetc                  ^ [        U4S jU R                  5        5       5      (       a  U(       a  T$ S$ SU R                  < STR                  < 3n[	        U5      e)Nc              3  ,   >#    U  H	  nTUL v   M     g 7fr,   rY   )r]   sheetr   s     r1   r`   ,_xl_worksheet_in_workbook.<locals>.<genexpr>2  s     
4O52;Os   Tzthe given workbook object z  is not the parent of worksheet )any
worksheetsfilenamerd   r   )r;   r   r9  r   s    `  r1   _xl_worksheet_in_workbookrA  /  sR     
4BMMO
444%r/4/&r{{o5UVXV]V]U`
aC
S/r3   c                   SSK Jn  SSKJn  [	        X5      (       a5  U SpT[	        X5      (       a  [        XA5      (       a  UOUR                  US9nO[	        X5      (       a  SU < 3n[        U5      eSS[        [           S.n[	        U [        5      (       a  U" X5      S	SpVnOU c  [        S
5      n	O#[	        U [        5      (       a  [        U 5      n	OU n	[	        U	[        5      (       a?  U	R                  (       a  U	OU	R                  S5      R!                  5       R#                  SS9n	U" X5      nSu  peUc*  [	        X5      (       a  [        XASS9nOUR%                  US9nXFU4$ )z2Establish the target Excel workbook and worksheet.r   r   r   F)rd   zEworksheet object requires the parent workbook object; found workbook=T)nan_inf_to_errorsstrings_to_formulasdefault_date_formatNzdataframe.xlsxz.xlsx)strict)NTr8  )
xlsxwriterr   xlsxwriter.worksheetr    rH   rA  get_worksheet_by_namer  r4   r   r   r   rC   r   suffixwith_suffix
expanduserresolveadd_worksheet)
workbook	worksheetr   r    r;   	can_closer   r   workbook_optionsfiles
             r1   _xl_setup_workbookrT  8  sc   
 $.(%% %I 900-b<< 
 ))y)9 	 
I	)	)UV^Uabn "&#(#=d#C

 h(( ( DdDIBI,-Hc**H~$))![[Td.>.>w.GZ\WEW* 
 $1B&MB	zi++*24PB!!y!1B9r3   c                    0 n[        U[        5      (       a  U/n[        XUS9(       a&  SUR                  5        SUS   S    SUS   S    S3$ S	R	                  S
 U 5       5      nSUR                  5        SU S3$ )zIReturn a formula using structured references to columns in a named table.r   =z([@[re   rd   z]:[rg   z]]),c              3  .   #    U  H  nS U S3v   M     g7f)z[@[z]]NrY   r   s     r1   r`   $_xl_table_formula.<locals>.<genexpr>v  s     51S2;s   (r   )rH   rC   rn   upperr   )r_   rk   funcr   colrefss        r1   r  r  n  s    A$vb*4::<.QuXf%5$6c!E(6:J9K3OO((5554::<.'!,,r3   c                   ^ Sm[        5       nU R                  5        H(  nUR                  U4S jUR                   5       5        M*     [	        U5      nT U 3nXA;   a  US-  nT U 3nXA;   a  M  U$ )z4Establish a unique (per-workbook) table object name.Framec              3  b   >#    U  H$  oS    R                  T5      (       d  M  US    v   M&     g7f)rd   N)
startswith)r]   tbltable_prefixs     r1   r`   (_xl_unique_table_name.<locals>.<genexpr>  s)      
#,CF0F0F|0TKCK9s   //rb   )r   r?  r	  tablesr   )r;   polars_tablesr   r0   
table_namerc  s        @r1   _xl_unique_table_namerh  z  s    L!eMmmo 
#%99
 	
  	MA >!%J

%	Q$~aS)
 
% r3   )r   )r/   Iterable[Any]r0   r   rO   ri  )r_   r!   rk   Iterable[str]rl   rQ   rO   bool)rk   rj  rr   r"   rO   rk  )rx   z$dict[str | Sequence[str], Any] | AnyrO   zdict[str, Any] | Any)r_   r!   r   r    r   r&   r   tuple[int, int]r   rk  r   r6   rO   rP   )r_   r!   r   rl  r^   str | tuple[int, int]r   rk  r   zLiteral[True]rO   rC   )r_   r!   r   rl  r^   rm  r   rk  r   zLiteral[False]rO   ztuple[int, int, int, int])r_   r!   r   rl  r^   rm  r   rk  r   rk  rO   ztuple[int, int, int, int] | str)
r_   r!   r   rl  rk   rj  r   rk  rO   rC   )
r_   r!   r   rQ   r   z1dict[str, PolarsDataType] | PolarsDataType | Noner   zExpr | NonerO   r!   )r   r    r_   r!   r   rl  r^   rC   r   rk  r   zSequence[str] | dict[str, Any]rO   rP   )r   r   rO   z	list[str])	NNNNNNN   N)r_   r!   r   r6   r  zColumnTotalsDefinition | Noner  zColumnFormatDict | Noner  z$dict[OneOrMoreDataTypes, str] | Noner   zdict[str, Any] | Noner  z0dict[str, Sequence[str] | dict[str, Any]] | Noner  z&dict[str, str | dict[str, str]] | Noner  zRowTotalsDefinition | Noner  r   r  dict[str, Any] | str | NonerO   zHtuple[list[dict[str, Any]], dict[str | tuple[str, ...], str], DataFrame])r  ro  rO   z2tuple[dict[str, Any] | str | None, dict[str, Any]])r;   r   r   r    r9  rk  rO   zbool | Worksheetr,   )rO  z&Workbook | BytesIO | Path | str | NonerP  zstr | Worksheet | NonerO   z tuple[Workbook, Worksheet, bool])r_   r!   rk   rj  r\  rC   rO   rC   )r;   r   rO   rC   )M
__future__r   collections.abcr   ior   osr   pathlibr   typingr   r	   r
   polarsr   r   polars._dependenciesr   polars._utils.variousr   polars.datatypesr   r   r   r   r   polars.datatypes.groupr   r   polars.exceptionsr   polars.selectorsr   r   r   r   r   rG  r   r   r   rH  r    r!   r"   r#   polars._typingr$   r%   r&   r'   r(   r)   polars.exprr*   r2   r  r  r4   __annotations__r6   rn   ru   r|   r   r   r   r   r   r   r.  r7  rA  rT  r  rh  rY   r3   r1   <module>r     s   " $    / / ! % 5  @ , O O(#(.00  !& 8 1 #.,9 5  .	9
+/2/2/2 /	/2
 !/2 /2 !/2 
/2d 
 "  

   	 
 
$$ $ 
$
 $ $ $ 
$  && & 
&
 & & %&.  
  	4 @D333 =	3
 3 3l,,, !, 
	, , +, 
,^X 48.2:>+/CG7;-1/3B-B- B- 1B- ,	B-
 8B- )B- AB- 5B- +B- B- -B- NB-J&,&7&4 >C6: )-343%3 &3l	-r3   