
    Xi6                       d dl mZ d dlmZ d dlmZmZ ddlT ddlmZm	Z	 ddl
mZmZmZmZmZ ddlT d Zd ZdZ G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zd Zeeeeeee e!e"eiZ#e$de%dede!de&de'de(diZ) G d de          Z* e*e$ e+d                    Z, G d  d!e          Z-dZ. G d" d#e          Z/d$S )%    )print_function)array)calcsizeunpack   )*)Formatnearest_colour_index)FMLA_TYPE_CELLFMLA_TYPE_SHAREDdecompile_formuladump_formularangename2d))show_formulasr   )show_grid_linesr   )show_sheet_headersr   )panes_are_frozenr   )show_zero_valuesr   )automatic_grid_line_colourr   )columns_from_right_to_leftr   )show_outline_symbolsr   )'remove_splits_if_pane_freeze_is_removedr   )sheet_selectedr   )sheet_visibler   )show_in_page_break_previewr   c                   p   e Zd ZdZdZdZdZdZi Zi Z	g Z
g Zg Zi ZdZdZdZdZdZdZdZdZdZg Zi Zi ZdZdZdZdZdZdZg Z g Z!d Z"d Z#d Z$d	 Z%d
 Z&d Z'd Z(d Z)d Z*e*Z+d(dZ,d(dZ-d(dZ.d(dZ/d(dZ0d(dZ1e/Z2d Z3d Z4d Z5d Z6d Z7d Z8d)dZ9d*dZ:d*dZ;d Z<d Z=d  Z>d! Z?d" Z@d# ZAd$ ZBd% ZCd& ZDd' ZEdS )+Sheetaj  
    Contains the data for one worksheet.

    In the cell access functions, ``rowx`` is a row index, counting from
    zero, and ``colx`` is a column index, counting from zero.
    Negative values for row/column indexes and slice positions are supported in
    the expected fashion.

    For information about cell types and cell values, refer to the documentation
    of the :class:`Cell` class.

    .. warning::

      You don't instantiate this class yourself. You access :class:`Sheet`
      objects via the :class:`~xlrd.book.Book` object that
      was returned when you called :func:`xlrd.open_workbook`.
     Nr   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 F   || _         |j        | _        || _        |j        | _        t	          dt
          g          | _        t	          ddg          | _        || _        || _	        |j
        | _
        |j        | _        |j        | _        | j        r| j        | _        n| j        | _        |j        | _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        g | _        g | _        d | _        d | _        d | _        d| _        d| _        d| _        d| _         i | _!        i | _"        g | _#        g | _$        g | _%        i | _&        g | _'        g | _(        g d| _)        |j*        |         | _+        tX          D ]\  }}t[          | ||           d| _.        d| _/        d| _0        d | _1        g | _2        i | _3        i | _4        d| _5        d| _6        d| _7        d| _8        d | _9        d | _:        i | _;        | j        d	k    rd
| _<        nd| _<        d| _=        d| _>        d S )NBhr   )r   r   r   r   @   <   d   P   i    @     )?bookbiff_version	_positionlogfiler   XL_CELL_EMPTYbtbfnamenumber	verbosityformatting_inforagged_rowsput_cell_raggedput_cellput_cell_unragged_xf_index_to_xl_type_mapnrowsncols_maxdatarowx_maxdatacolx	_dimnrows	_dimncols_cell_values_cell_types_cell_xf_indexesdefcolwidthstandardwidthdefault_row_heightdefault_row_height_mismatchdefault_row_hiddendefault_additional_space_abovedefault_additional_space_belowcolinfo_maprowinfo_mapcol_label_rangesrow_label_rangesmerged_cellsrich_text_runlist_maphorizontal_page_breaksvertical_page_breaks_xf_index_stats_sheet_visibility
visibility_WINDOW2_optionssetattrfirst_visible_rowxfirst_visible_colxgridline_colour_indexgridline_colour_rgbhyperlink_listhyperlink_mapcell_note_map$cooked_page_break_preview_mag_factorcooked_normal_view_mag_factor$cached_page_break_preview_mag_factorcached_normal_view_mag_factorscl_mag_factor_ixfe_cell_attr_to_xfxutter_max_rowsutter_max_cols_first_full_rowx)selfr)   positionr0   r1   attrdefvals          5/usr/local/lib/python3.11/dist-packages/xlrd/sheet.py__init__zSheet.__init__@  sL   	 -!|m_--bT""	#3+ 	3 0DMM 2DM(,(E%

 "!"&+,("#./+./+ " "%'"&(#$&!+||08, 	( 	(LD&D$''''"#"#%)"#'   571-0* 561-.*"
!#"""'D"'D! "    c                     | j         r|                     ||          }nd}t          | j        |         |         | j        |         |         |          S )zC
        :class:`Cell` object in the given row and column.
        N)r3   cell_xf_indexCellr@   r?   rg   rowxcolxxfxs       rk   cellz
Sheet.cell  s`      	$$T400CCCT"4(d#D)
 
 	
rm   c                 (    | j         |         |         S )z.Value of the cell in the given row and column.r?   rg   rr   rs   s      rk   
cell_valuezSheet.cell_value  s     &t,,rm   c                 (    | j         |         |         S )z
        Type of the cell in the given row and column.

        Refer to the documentation of the :class:`Cell` class.
        r@   rx   s      rk   	cell_typezSheet.cell_type  s     %d++rm   c                    |                                   | j        |         |         }|dk    r| j        dxx         dz  cc<   |S 	 | j        |         j        }|dk    r| j        dxx         dz  cc<   |S n# t
          $ r Y nw xY w	 | j        |         j        }|dk    rd}| j        dxx         dz  cc<   |S # t
          $ r | j        dxx         dz  cc<   Y dS w xY w)z
        XF index of the cell in the given row and column.
        This is an index into :attr:`~xlrd.book.Book.xf_list`.

        .. versionadded:: 0.6.1
        r"   r   r            )req_fmt_inforA   rQ   rJ   xf_indexKeyErrorrI   rq   s       rk   ro   zSheet.cell_xf_index  sE    	#D)$/88 ###q(###J	"4(1CRxx$Q'''1,'''
   	 	 	D		"4(1Cbyy# ###q(###J 	 	 	 ###q(###22	s$   .A6 6
BB0B8 8CCc                 6    t          | j        |                   S )z
        Returns the effective number of cells in the given row. For use with
        ``open_workbook(ragged_rows=True)`` which is likely to produce rows
        with fewer than :attr:`~Sheet.ncols` cells.

        .. versionadded:: 0.7.2
        )lenr?   rg   rr   s     rk   row_lenzSheet.row_len  s     4$T*+++rm   c                 n      fdt          t           j                                     D             S )zS
        Returns a sequence of the :class:`Cell` objects in the given row.
        c                 <    g | ]}                     |          S  ru   .0rs   rr   rg   s     rk   
<listcomp>zSheet.row.<locals>.<listcomp>  7     
 
 
 IIdD!!
 
 
rm   )xranger   r?   r   s   ``rk   rowz	Sheet.row  sL    
 
 
 
 
s4#4T#:;;<<
 
 
 	
rm   c                     	 |\  }}|                      ||          S # t          $ r |                     |          cY S w xY w)z
        Takes either rowindex or (rowindex, colindex) as an index,
        and returns either row or cell respectively.
        )ru   	TypeErrorr   )rg   itemrowixcolixs       rk   __getitem__zSheet.__getitem__  s[    
	+LE5 99UE***  	" 	" 	" 88D>>!!!	"s    ??c                 D      fdt           j                  D             S )z3Returns a generator for iterating through each row.c              3   B   K   | ]}                     |          V  d S N)r   )r   indexrg   s     rk   	<genexpr>z!Sheet.get_rows.<locals>.<genexpr>  s-      ??E??????rm   )ranger9   rg   s   `rk   get_rowszSheet.get_rows  s'    ????U4:->->????rm   c                 Z    || j         |         |d         S | j         |         ||         S )zM
        Returns a slice of the types of the cells in the given row.
        Nr{   rg   rr   
start_colxend_colxs       rk   	row_typeszSheet.row_types  s9     #D)*++66%j&9::rm   c                 Z    || j         |         |d         S | j         |         ||         S )zN
        Returns a slice of the values of the cells in the given row.
        Nrw   r   s       rk   
row_valueszSheet.row_values  s9     $T*:;;77 &z(':;;rm   c                      t           j                           }|dk     r||z  }|dk     rd}|||k    r|}n|dk     r||z  } fdt          ||          D             S )zP
        Returns a slice of the :class:`Cell` objects in the given row.
        r   Nc                 <    g | ]}                     |          S r   r   r   s     rk   r   z#Sheet.row_slice.<locals>.<listcomp>  r   rm   )r   r?   r   )rg   rr   r   r   ncs   ``   rk   	row_slicezSheet.row_slice  s     "4())>>"JA~~
x"}}HH\\NH
 
 
 
 
z844
 
 
 	
rm   c                       j         }|dk     r||z  }|dk     rd}|||k    r|}n|dk     r||z  } fdt          ||          D             S )zS
        Returns a slice of the :class:`Cell` objects in the given column.
        r   Nc                 <    g | ]}                     |          S r   r   r   rr   rs   rg   s     rk   r   z#Sheet.col_slice.<locals>.<listcomp>$  r   rm   r9   r   rg   rs   
start_rowxend_rowxnrs   ``   rk   	col_slicezSheet.col_slice       Z>>"JA~~
x"}}HH\\NH
 
 
 
 
z844
 
 
 	
rm   c                       j         }|dk     r||z  }|dk     rd}|||k    r|}n|dk     r||z  } fdt          ||          D             S )zQ
        Returns a slice of the values of the cells in the given column.
        r   Nc                 6    g | ]}j         |                  S r   rw   r   s     rk   r   z$Sheet.col_values.<locals>.<listcomp>6  s6     
 
 
 d#D)
 
 
rm   r   r   s   ``   rk   
col_valueszSheet.col_values)  r   rm   c                       j         }|dk     r||z  }|dk     rd}|||k    r|}n|dk     r||z  } fdt          ||          D             S )zP
        Returns a slice of the types of the cells in the given column.
        r   Nc                 6    g | ]}j         |                  S r   r{   r   s     rk   r   z#Sheet.col_types.<locals>.<listcomp>H  s6     
 
 
 T"4(
 
 
rm   r   r   s   ``   rk   	col_typeszSheet.col_types;  r   rm   c           
      X   | j         dk    r!t          | j        d| j        | j                   | j        rdx}}| j        }| j        }| j        D ]h}|\  }}}}	d|cxk    r|cxk     r|k    rn nd|cxk    r|	cxk     r|k    s$n t          | j        d| j        | j	        |           ||k    r|}|	|k    r|	}i|| j        k    r|| _        d| _
        || j        k    r.|                     |dz
  dt          t          d          d           | j         dk    rY| j        | j        k    s| j        | j        k    r9t          | j        d	| j        | j	        | j        | j        | j        | j                   | j        s| j        }
| j        }| j        }| j        }| j        }| j
        dk    r| j        }n| j
        }t+          |          D ]j}||         }t-          |          }|
|z
  }|dk    rDt          d          g|z  ||         |d <   | j        |z  ||d <   |r| j        |z  ||         |d <   id S d S )
Nr   z$tidy_dimensions: nrows=%d ncols=%d 
r   r   z6*** WARNING: sheet #%d (%r), MERGEDCELLS bad range %r
r   r"   z?NOTE *** sheet %d (%r): DIMENSIONS R,C = %d,%d should be %d,%d
)r2   fprintfr,   r9   r:   rM   rd   re   r1   r0   rf   r6   r-   UNICODE_LITERALr=   r>   r4   r@   r?   rA   r3   r   r   r.   r/   )rg   r   r   umaxrowsumaxcolscrangerlorhiclochir:   s_cell_typess_cell_valuess_cell_xf_indexes
s_fmt_infouboundrr   trowrlennextras                       rk   tidy_dimensionszSheet.tidy_dimensionsR  s   >Q7
DJ  
 " 	OKB*H*H+ & &%+"S#sS222232222(22222A<V<V<V<Vs<V<V<V<Vh<V<V<V<VDLQTY8 8 8 88#R88#RDJ
(*%DJ bdA}ob6I6I2NNNNat~--t~1M1MR	

	 	 	  	JJE+L -M $ 5-J$**.v J J#D)4yyA::2A"2E2E1F1OM$'."&'F"2DK! J9=69I)$/6)	J 	JJ Jrm   c                    || j         |         }d|cxk    r| j        k     sn J d|cxk    r| j        k     sn J | j        }	 |dz   }| j        |k     rz| j        j        }| j        j        }	| j        j        }
| j	        }| j
        }t          | j        |          D ]+} ||dz              |	g            |r |
|dz             ,|| _        | j        |         }| j        |         }|r| j        |         }t          |          }|| j        k    r
|dz   | _        ||z
  }|sC|                    |           |                    |           |r|                    |           d S |dk    r=|dz  }| j	        |z  ||d <   t          d          g|z  ||d <   |r| j
        |z  ||d <   |||<   |||<   |r|||<   d S d S #  t          d||| j                    xY w)Nr   r   r   r6   file)r8   re   rd   r3   r9   r@   appendr?   rA   r.   r/   r   r   r:   r   printr,   )rg   rr   rs   ctypevaluer   fmt_infor   sctascvascxar.   r/   _unused	types_row
values_rowfmt_rowltr	num_emptys                      rk   r5   zSheet.put_cell_ragged  ss   =1(;ED....4.......D....4.......'1	BzB'.(/,3WW%dj"55 % %GDaLLLDHHH %R!V
(.I*40J 6/5i..Ctz!!!AX
s
I    '''!!%((( -NN8,,,1}}Q	 #''I"5	#$$$3B$7$7#89#D
344  8$(Gi$7GCDDM#IdO$Jt ) () )	*dDt|<<<<s   DF= %AF= =Gc                 &   || j         |         }	 || j        |         |<   || j        |         |<   | j        r|| j        |         |<   d S d S # t
          $ r  |dz   }|dz   }d|cxk    r| j        k    sn J d|cxk    r| j        k    sn J || j        k    r6|| _        || j	        k     rd| _
        n|| j
        cxk    rdk    r
n n|| _
        || j	        k    r| j        |         }| j        t          |          z
  }	|	dk    r}|                    | j        |	z             | j        r(| j        |                             | j        |	z             | j        |                             t          d          g|	z             n| j        j        }
| j        j        }| j        j        }| j        }| j        }| j        }| j        }t#          | j	        |          D ]<} |
||z              |t          d          g|z             |r |||z             =|| _	        	 || j        |         |<   || j        |         |<   | j        r|| j        |         |<   Y d S Y d S #  t%          d||| j                    xY w t%          d||| j                    xY w)Nr   r   r   r   r6   r   )r8   r@   r?   r3   rA   
IndexErrorre   rd   r:   r9   rf   r   extendr.   r/   r   r   r   r   r,   )rg   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r.   r/   r   s                    rk   r7   zSheet.put_cell_unragged  s=   =1(;E@	+0DT"4(,1Dd#D)# =4<%d+D111= = 8	 8	 8	 BB1111d11111111111d1111111DJ

 
?? -/D))D16666B66666,0D)TZ '-c$ii/A::KK& 0111+ M-d3::47V;KLLL%d+22OB4G4G3H63QRRR'.(/,3/ZWW%dj"55 & &GDbMMMD/"--.3444 &R"W
/4 &t,05!$'-' A8@D)$/5555A A Aj$4<@@@@	*dDt|<<<<s   7A GJ7II33Jc                  <   d}|p
| j         dk    }|p
| j         dk    }d}d}|j        }| j        |_        t          t          t          t
          t          t          f}| j        }	t          }
|j
        }| j        }| j        }|o|j        }i }i }d}	  |            \  }}}|t          k    r* |
d|d d                   \  }}}} |	||d ||           n|t          k    r\ |
d|          \  }}}} |	||t           |j        |         |           |r(|j                            |          }|r|| j        ||f<   n|t(          k    rx |
d|dd	                   \  }}}|t*          k     r-t-          |d	|j        p|                                d
          }nt3          |d	d
          } |	||t           ||           n|t4          k    r |
d|dd	                   \  }}}|t*          k     rt7          |d	|j        p|                                d
          \  }}t9          ||                   }|dz  }g }t;          |          D ]5}|                    t          d|||dz                                 |dz  }6|t?          |          k    sJ ntA          |d	d
          \  }}t          d|||dz                      d         }|dz  }g }t;          |          D ]5}|                    t          d|||dz                                 |dz  }6|t?          |          k    sJ  |	||t           ||           || j        ||f<   nu|tB          k    r@ |
d|d d	                   \  }}}tE          |d	d                   } |	||d ||           n*|tF          k    r |
d|dd                   \  }}  |
d|dd                    \  }!d}t;          | |!dz             D ]L} |
d|||dz                      \  }tE          ||dz   |d	z                      }|d	z  } |	||d ||           Mn|tH          k    rX|s |
d|dd                   \  }}"}#d|cxk    r| j%        k     s$n tM          d|| j%        fz  | j'                   |"|#f}$|                    |$          }%|%tQ                      x||$<   }%|"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	  dz  |%_0        |#dz	  dz  |%_1        |#dz	  dz  |%_2        |%j/        sd|%_0        |%| j3        |<   	 |r?tM          d||"|#| j'                   |%6                    | j'        d| j5        |fz             n*|tn          v r|d k    r |
d!|dd                   \  }}}}&}'nR|d"k    r |
d!|dd                   \  }}}}&}'n1 |
d#|dd                   \  }}}(}&}'| 8                    |(||          }|rUti          | j'        d$||            |
d|d%d&                   d         })ts          ||d&d          |)tt          ||d|'           |&d	d(         d)k    rt9          |&d                   }*|*dk    red}+	 |
                                \  },}-}.|,tv          k    s|,tx          k    rd}+n|,t          k    r8 |
d*|.d d                   \  }/}0}1}2}3}4|rti          | j'        d+|/|0|1|2|3           n}|,t          k    r\ |
d,|.d d                   \  }/}0}1}2}5}4|r>ti          | j'        d-|/|0|1|2|5           ts          ||.dd          |4tz          d|||.           n|,|vrt}          d/|,z            |+s:|
                                \  },}6}.|,tv          tx          fvrt}          d0|,z            | ?                    |.          }|                     ||t           ||           n|*dk    r+t9          |&d                   }7 |	||t          |7|           n|*dk    r+t9          |&d                   }7 |	||t          |7|           nd|*d1k    r |	||t           d2|           nHt}          d3|*z             |
d4|&          d         } |	||d ||           n|t          k    r? |
d5|d d(                   \  }}}}7}8t          t          f|8         }9 |	|||9|7|           n|t          k    r|swt                      }: |
d6|d d                   \  };}<|:_E        |:_0        }'d|;cxk    r|<cxk    rd7k    s n tM          d8|;|<fz  | j'                   ~:t          |:|'d9           t;          |;|<dz             D ]}|d:k    r n|:| jG        |<   |rFti          | j'        d<| j5        |;|<|:jE        |:j0        |'           |:6                    | j'        d=           n|t          k    r |
d|d d                   \  | _I        n|t          k    rH|dk    r%tM          d?|t          |          | j'                    |
d|d d                   \  | _L        nV|t          k    r|s	|dAk    sJ |dd         dBk    sJ t          dC|ddA                   }=g }>|=D ]1}?t;          dD          D ]}@|>                    |?dz             |?dz  }? 2t          |>          | _O        n|t          k    r2|s
u |
d|d d	                   \  }}} |	||t          d2|           n|t          k    rt|s
|dz	  }B |
dI|Bz  |          }C|Cd d         \  }}D|Cd         }E|B|Edz   |Dz
  k    sJ d}t;          |D|Edz             D ]!} |	||t          d2|C|                    |dz  }"n|t          k    s|t          k    r|dk    r@|dJk     r |
dK|dd(                   }Fn |
dL|ddM                   }FdN\  | _Y        | _Z        |F\  | _[        | _\        |dOv r1| j]        j^        r%| j]        j_        s| j]        `                                 |r-ti          | j'        dP| j5        | ja        | j\        | j[                   n>|t          k    r| c                    |           n|t          k    r| e                    |           n|t          k    rd}|rtM          dQ| j'                   d}n|t          k    r$| h                    |          }G|Gr	|Gji        }Hnd }Hn|t          k    r| k                    |||           n~|t          k    r"| m                    |          }I|Ir	|Hr|I||H<   d }HnQ|t          k    r| o                    ||           n.|t          k    r| q                    |           n|t          v r |
d|dd                   \  }J}K|KdDk    r(tM          dR||j        |z
  dz
  |J|Kfz  | j'                   	 |
                                \  }L}}|Lt          k    rn%|rtM          dS| j'                   n~|t          k    r|t                    |           n\|t          k    r>d}t          | jw        |||d(T          }t          | jx        |||d(T          }||k    sJ n|t          k    r: |
d*|d d                   \  }/}0}1}2}3}4|rtM          dU|/|0|1|2|3| j'                   n|t          k    r^ |
d,|d d                   \  }/}0}1}2}5}4|r?tM          dV|/|0|1|2|5| j'                   ts          ||dd          |4tz          d|||.           ne|t          k    r|s|dJk    sJ t          dW|ddM                   \  }M}N}O}P}Q}R| j         dk    r:ti          | j'        dX| j5        | ja        |M|Nt          |O|Pdz   |Q|Rdz                        g }St          |S|dM|d(T          }| j         dk    rAti          | j'        dYt?          |S          dZP                    d[ |SD                                  n|t          k    rw|st          d\|dd                   \  }T}U}V}W}'|'d]z	  dz  }X|'dz	  dz  }Y|'dz	  dz  }Z| j         dk    rti          | j'        d^|T|U|V|W|'|X|Y|Z
  
         dM}|Xryt          d_|||d`z                      \	  }[}\}]}^}_}`}a}b}c|adk    dz  }d|\dk    dz  }e|adk    dz  }f|\dk    dz  }g| j         dk    r ti          | j'        da|[|]|^|_|`|b|c|d|e|f|g           |d`z  }|Yr|d(z  }|Zr|dz  }||||Vz            }h||Vz  }|r,|Vr*ti          | j'        db           t          ||h|V|ddc           ||||Wz            }i||Wz  }||k    sJ |r,|Wr*ti          | j'        dd           t          ||i|W|ddc           n|t          k    r|dk    r!t          d|d d                   \  }?| _~        nM|dk    r/t          d|          \  | _~        d}?ti          | j'        de           nd}?ti          | j'        df|           |?dz  | _        |?dz	  dz  | _        |?dz	  dz  | _        |?d1z	  dz  | _        nQ|t          k    rR|st          | j        |d|d(T          }|rti          | j'        dg|dz
  d(z             ||k    sJ dh||fz              
n|t
          k    r|dJk    r?|dk    r9t          di|d d                   \  }j| _        | _        | _        | _        | _        nr|d"k    sJ t          d|d d	                   \  }j| _        | _        t          dj|d	dk                   | _        t          | j]        j        | j        dl          | _        t          D ]\  }k}lt          | |k|jdz             |jdz  }j 
n|t           k    rgt          d|          \  }m}nd}C|nr|mdmz  |nz  }Cd|Ccxk    rdnk    s2n |s| j         dk    r!tM          do| j5        |m|nfz  | j'                   dm}C|C| _        	n|t$          k    r@t          dp|d dk                   \  | _        | _        | _        | _        | _        d| _        	nG|t2          k    r|s |
d|d d                   \  }o|odd|dJk    z  z   z  dz   |k    sJ d}|dJk     rK||k     rC| j                             |
d|||dz                      d         dd:f           |dz  }||k     Cn||k     r:| j                             |
d|||d	z                                 |d	z  }||k     :nt|t6          k    r|s |
d|d d                   \  }o|odd|dJk    z  z   z  dz   |k    sJ d}|dJk     rK||k     rC| j                             |
d|||dz                      d         ddqf           |dz  }||k     Cn||k     r:| j                             |
d|||d	z                                 |d	z  }||k     :n|drk    r|t:          k    s|t<          k    r|                    ||           nj|t@          k    s|tB          k    r|                    |           n;|tF          k    r<| j]        j_        s| j]        `                                 |                    |           n|tJ          k    r|                    |           n|tN          k    r|                    |           n|tR          k    s|tT          k    s|tV          k    r|                    |           nr|tZ          k    r|                    |           nO|t^          k    r|                    |           n,|tb          k    r|                    |           n	|tf          k    r|                    |           n|tj          k    r |
d|          d         | _        n|tn          k    r7 |
ds|          \  }}}(} |	||d || 8                    |(||                     n~|tp          k    rE |
dt|          \  }}}(} |	||d ts          |          | 8                    |(||                     n-|tt          k    ro |
du|dd                   \  }}}(t-          |d|j        p|                                d
          } |	||t           || 8                    |(||                     n|tv          k    rL |
dv|          \  }}}(}7}8t          t          f|8         }9 |	|||9|7| 8                    |(||                     nZ|tx          k    rG|s |
du|d d                   \  }}}( |	||t          d2| 8                    |(||                     n|tz          k    r|                    |           n|t~          k    rZ|s^ |
dw|ddx                   \  }}"}#d|cxk    r| j%        k     s$n tM          dy|| j%        fz  | j'                   |#dz  sd}n\|dzk    r4 |
d|ddz                   d         }p| 8                    d |d|p{          }n"|d|d         }(| 8                    |(|d}          }|"|#|f}$|                    |$          }%|%;tQ                      x||$<   }%|"dz  |%_)        |"dz	  dz  |%_*        |#dz  |%_/        ||%_0        |%| j3        |<   	 |r>tM          d~||"| j'                   |%6                    | j'        d| j5        |fz             n}|t          k    r|s |
d|d d                   \  };}<}q|;|<k    stM          d|;|<fz  | j'                   t;          |;|<dz             D ]8}|| jG        v r| jG        |         }:nt                      }:|:| jG        |<   |q|:_E        9|rti          | j'        d| j5        |;|<|q           n|t          k    r|s} |
d|d d                   \  };}<|rti          | j'        d| j5        |;|<           d|;cxk    r|<cxk     rd7k    s.n tM          d|;|<fz  | j'                   t          |<d7          }<t;          |;|<          D ]h}dd1||;z
  z  z   }r||r|rd1z            }(| 8                    |(d|          }|| jG        v r| jG        |         }:nt                      }:|:| jG        |<   ||:_0        in|t          k    rd}st          |s|dd                   D ])\  }k}tt          | |kt          |tdk                         *t          d|dd                   \  | _        | _        | _        t          dj|dd|                   | _        t          | j]        j        | j        dl          | _        n	 2|st}          d| j5        | ja        fz            |                                  |                                  ||_        dS )Nr   r      r   z<HHHd   z<HHHi<HHH   lenlenz<BBz<H<HH
   r   z<H4xH4xi   zT*** NOTE: ROW record has row index %d; should have 0 <= rowx < %d -- record ignored!r   i  r~                 r"   z**ROW %d %d %d
ROWz--- sh #%d, rowx=%d ---header2   z<HHH8sH   z<HH3s8sBzFORMULA: rowx=%d colx=%d
      )browxbcolxblahr1c1   s   z<HHBBBxxxxxHzARRAY: %d %d %d %d %d
z<HHBBxBHzSHRFMLA (sub): %d %d %d %d %d
)r   r   r   r   z@Expected SHRFMLA, ARRAY, TABLEOP* or STRING record; found 0x%04xz$Expected STRING record; found 0x%04xr   r   z+unexpected special case (0x%02x) in FORMULA<dz<HHHBBz<HHHHHr(   zr*** NOTE: COLINFO record has first col index %d, last %d; should have 0 <= first <= last <= 255 -- record ignored!))r   r   hidden)r   r   	bit1_flag)r   i   outline_level)   i   	collapsed   z**COL %d %d %d
z>COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x
z===DEFCOLWIDTHz*** ERROR *** STANDARDWIDTHSTANDARDWIDTH"   s     z<8i    c                     d|          S )NzF r   )xs    rk   <lambda>zSheet.read.<locals>.<lambda>)  s
    DG rm    .zGCW:z<%dHr&   z<HxxHz<ixxHr  r   r   )   r   (   z+sheet %d(%r) DIMENSIONS: ncols=%d nrows=%d
zSHEET.READ: EOFzM*** Unexpected embedded BOF (0x%04x) at offset %d: version=0x%04x type=0x%04xz---> found EOF)	addr_sizezARRAY:zSHRFMLA (main):z<6Hz
*** WARNING: Ignoring CONDFMT (conditional formatting) record
*** in Sheet %d (%r).
*** %d CF record(s); needs_recalc_or_redraw = %d
*** Bounding box is %s
z#*** %d individual range(s):
*** %s
z, c              3   (   K   | ]}t          | V  d S r   )r   )r   coordss     rk   r   zSheet.read.<locals>.<genexpr>  s'      !K!K6+v"6!K!K!K!K!K!Krm   z<BBHHi   z
*** WARNING: Ignoring CF (conditional formatting) sub-record.
*** cf_type=%d, cmp_op=%d, sz1=%d, sz2=%d, flags=0x%08x
*** optional data blocks: font=%d, border=%d, pattern=%d
z <64x i i H H B 3x i 4x i i i 18xv   z*** Font info: height=%d, weight=%d, escapement=%d,
*** underline=%d, colour_index=%d, esc=%d, underl=%d,
*** style=%d, posture=%d, canc=%d, cancellation=%d
z*** formula 1:
)reldeltar   z*** formula 2:
zR*** WARNING: DEFAULTROWHEIGHT record len is 2, should be 4; assuming BIFF2 format
zR*** WARNING: DEFAULTROWHEIGHT record len is %d, should be 4; ignoring this record
zMERGEDCELLS: %d ranges
zMERGEDCELLS: pos=%d data_len=%dz	<HHHHxxHH<BBB	   )debugr%     zHWARNING *** SCL rcd sheet %d: should have 0.1 <= num/den <= 4; got %d/%dz<HHHHB  -   z<HH3sdz<HH3sHz<HH3sz<HH3sBBz<H4xH2xB   zW*** NOTE: ROW_B2 record has row index %d; should have 0 <= rowx < %d -- record ignored!   )	cell_attrrr   rs   true_xfx   )rs   ROW_B2z<BBHzg*** NOTE: COLWIDTH record has first col index %d, last %d; should have first <= last -- record ignored!z&COLWIDTH sheet #%d cols %d-%d: wid=%d
z.COLUMNDEFAULT sheet #%d cols in range(%d, %d)
zd*** NOTE: COLUMNDEFAULT record has first col index %d, last %d; should have 0 <= first < last <= 256)rr   rs   )r   r   r   r   r       z<HHBz Sheet %d (%r) missing EOF record)r2   r+   
XL_SHRFMLAXL_ARRAY
XL_TABLEOPXL_TABLEOP2	XL_ARRAY2XL_TABLEOP_B2r6   r   get_record_partsr*   r3   _rich_text_runlist_map	XL_NUMBERXL_LABELSSTXL_CELL_TEXT_sharedstringsgetrN   XL_LABELBIFF_FIRST_UNICODEunpack_stringencodingderive_encodingunpack_unicode
XL_RSTRINGunpack_string_update_pos	BYTES_ORDr   r   r   unpack_unicode_update_posXL_RK	unpack_RKXL_MULRKXL_ROWrd   r   r,   Rowinfoheighthas_default_heightr  outline_group_starts_endsr   height_mismatchhas_default_xf_indexr   additional_space_aboveadditional_space_belowrJ   r   r1   dumpXL_FORMULA_OPCODESfixed_BIFF2_xfindexr   r   	XL_STRINGXL_STRING_B2r   	XLRDErrorstring_record_contentsXL_CELL_BOOLEANXL_CELL_ERROR
XL_BOOLERR
XL_COLINFOColinfowidthupkbitsrI   XL_DEFCOLWIDTHrB   XL_STANDARDWIDTHreprrC   XL_GCWtuplegcwjoinmaprstripreplaceXL_BLANKXL_CELL_BLANKXL_MULBLANKXL_DIMENSIONXL_DIMENSION2r9   r:   r=   r>   r)   xf_list_xf_epilogue_donexf_epiloguer0   XL_HLINKhandle_hlinkXL_QUICKTIPhandle_quicktipXL_EOFXL_OBJ
handle_objidXL_MSO_DRAWINGhandle_msodrawingetcXL_TXO
handle_txoXL_NOTEhandle_note	XL_FEAT11handle_feat11bofcodes
XL_COUNTRYhandle_countryXL_LABELRANGES)unpack_cell_range_address_list_update_posrL   rK   
XL_CONDFMTr   XL_CFr   XL_DEFAULTROWHEIGHTrD   rE   rF   rG   rH   XL_MERGEDCELLSrM   
XL_WINDOW2rV   rW   rX   r_   r`   rY   r
   
colour_maprT   rU   XL_SCLra   XL_PANEvert_split_poshorz_split_poshorz_split_first_visiblevert_split_first_visiblesplit_active_panehas_pane_recordXL_HORIZONTALPAGEBREAKSrO   XL_VERTICALPAGEBREAKSrP   	XL_FORMAT
XL_FORMAT2handle_formatXL_FONTXL_FONT_B3B4handle_fontXL_STYLEhandle_style
XL_PALETTEhandle_paletteXL_BUILTINFMTCOUNThandle_builtinfmtcountXL_XF4XL_XF3XL_XF2	handle_xfXL_DATEMODEhandle_datemodeXL_CODEPAGEhandle_codepageXL_FILEPASShandle_filepassXL_WRITEACCESShandle_writeaccessXL_IXFErb   XL_NUMBER_B2
XL_INTEGERfloatXL_LABEL_B2XL_BOOLERR_B2XL_BLANK_B2XL_EFONThandle_efont	XL_ROW_B2XL_COLWIDTHXL_COLUMNDEFAULTminXL_WINDOW2_B2zipintr   r   update_cooked_mag_factors)urg   bkDEBUGr   	blah_rowsblah_formulasr   oldposXL_SHRFMLA_ETC_ETCself_put_celllocal_unpackbk_get_record_partsbvr   do_sst_rich_textrowinfo_sharing_dicttxos	eof_foundrcdata_lendatarr   rs   r   dsstindexrunliststrgposnrtr   	mulrk_rowmulrk_first
mulrk_lastbits1bits2keyr
result_strflagsr  fmlalen
first_byte	gotstringrc2	data2_lendata2row1xrownxcol1xcolnxarray_flagstokslennfmlas_unused_lenr   is_errcelltyc
first_colx	last_colxiguffrZ  bitsjshowgcwnitemsresult	mul_firstmul_last	dim_tuple	saved_objsaved_obj_idtxoversionboftypecodenum_CFsneeds_recalcbrowx1browx2bcolx1bcolx2olistcf_typecmp_opsz1sz2
font_block
bord_block
patt_blockfont_heightfont_optionsweight
escapement	underlinefont_colour_indextwo_bitsfont_escfont_underl
font_styleposture	font_canccancellationfmla1fmla2optionsri   _unused_defvalnumden
num_breaksrt   rS  offset
attr_namescharsu                                                                                                                        rk   readz
Sheet.read  s%   +!+0T^q0	~*k}
  1'#A(A!	r
	!4!4!6!6B$ Y +7,wSbS	*J*J'dHa dD$8<<<<{""1=gt1L1L.dHhdD,8I(8SU]^^^# K 7;;HEEG KCJ2D$<@x'3|FD1I'F'F$dH***(q"+2UASASAUAU^_```DD)$!<<<DdD,hGGGGz!!'3|FD1I'F'F$dH*** 8q"+BeQSQcQcQeQeno p p pID##DI..C1HC G#)#;; ! !veT#c!e)_'E'EFFFq#d))+++++ 9$! L L LID# tCAI77:C1HC G#)#;; ! !veT#c!e)_'E'EFFFq#d))++++dD,hGGG;B*D$<88u'3|FD!H'E'E$dHd1R4j))dD$8<<<<x)5eT!A#Y)G)G&	;*l4bcc;;
";
1== F FD ,T4CE	? C CIH!$s1uSU{"344A1HC!M)T4HEEEE	F
 v  )%1\*d1R4j%I%I"eUD66664#66666 H!456<@LJ J J J en(,,S1194;II=(-$  %v~AH,1RK1+<A(&+aiAO38A:2BA/ %
a/AH).!q(8A%.3qjA-=A*"'2+!6AJ05q/@A,05q/@A,1 (%'
)* &7  P%ue$,GGGGFF4<8DK;NN  P P P))) 88>Jl9VZ[\]_[_V`>a>a;D$*ee2XX>Jl9VZ[\]_[_V`>a>a;D$*ee@LZY]^_`b^bYc@d@d=D$	J $ 8 8D$ O OH  CDL*FdSSS*l4be==a@G%b$rss)Wn"$QTC C C Cac?k11!*:a=!9!9J!Q$%	n464G4G4I4I1CE"i//3,3F3F,-		!$$0Lss$L$L !QueUK#0 !Q$+DL:S(-ueUK%Q %Q %Q "%
!2!2$0LU3B3Z$H$H !LueUFG#0 !S$+DL:[(-ueUF%L %L %L$5b%*gO_-.d$T%S %S %S %S!$,>!>!>&/$fil$l'n 'n !n  ) ^686I6I6K6K3Ce"9l*CCC&/0VY\0\&]&] ]#::5AAdD,hOOOO#q )*Q- 8 8%dD/5(SSSS#q )*Q- 8 8%dD-QQQQ#q%dD,HMMMM'(UXb(bccc %T:66q9A!M$dAx@@@@z!!6Bl8TRTSTRTX6V6V3dHeV *=9&AdD&%BBBBz!!)II"l8T#2#Y77 B
Iqw
E J::::)::::s::::  S%y128<F F F F 5 #    #:y{;; ; ;Dczz55-.D$T*;  7YZAGQZQV  
 FF4<F666~%%$0LtBQBx$@$@! O'''q==74::TXT`aaaa&2l4bqb&B&B#"Sv)2~~~~AaCyK////ud1R4j11! # #D#BZZ # #

4!8,,,
# !::> x)'3|FD!H'E'E$dHdD-XFFFF{"")!Q%fvot<<"(!*i!":A	!99999"9hl;;  D!M$mRMMM1HCC |##r]':':q== 77 ,Wd1Q3i @ @II ,Wd1R4j A AI)-&
DJ1:.%%$)*;%DID_%I))+++ FTY  
 x!!$''''{""$$T****vE% 1EEEE	v OOD11	 *Y\ll%)ll~%%))"h====vood++ (< (),D&#'Lw  t,,,,y""4((((x#/<tAaCy#A#A d??ir|h6:GWMNTXT`b b b b+-+>+>+@+@(D(Dv~~ D% 0t|DDDDz!!!!$''''~%%?)4bA   @)4bA   hx Lcrc;; AueUK  `(E5%RVR^____z!! LT#2#Y77 <ueUFG  C+UE5%VZVbcccc%b$rss)W>Nd$TC C C Cz!!)Rxxxx5$qt*-- Fvvvv>Q&&3 TY#FF1HffQhGG   ?4R16 6 6 >Q&&#E

		!K!KU!K!K!KKK   u)39(D2J3O3O0c5#rkQ.
#rkQ.
#rkQ.
>Q&&U  c5"J
    KQRtvz{~  @C  DG  @G  |G  wH  LI  LII[,
I&(K"*Q,!!3J+a/14G!)A 2I$01$4#9L~** LS (Y-x&L   3JC 1HC 1HCSS[)s
 IC IDL*<=== UCaaHHHHSS[)s
h IC IDL*<=== UCaaHHHH***q==4:5$rr(4K4K1D$11]]/5dD/A/A,D+DDL?@ @ @ @ DDL> " " " 48!80+/19/'7;qyAo37;qyAo33~%%)?%tQaA A A DDL2S1WND D Dh5hG 'z!!88B {D"I66/1H2A:: 8888 vtBQBx00/1H/5fd1Q3i/H/HD,1E	,d.Fa2Q 2Q 2QD.  -= " "(D.D$!444MGG" v!%..S 0!CiC/FV****s**** ! 3 3f#{C56!%   
 !F&,##w 8T"1"X..''11*'($$...)*l4bqb::
!QbBh%781<HHHH77..3::LLtTWX[\]X]T]<_<_`a<bdegj;klllq .. ..3::<<PTUXY\]^Y^U^P_;`;`aaaq .. ,,,)*l4bqb::
!QbBh%781<HHHH77..188,,tTRUVYZ[V[R[_:]:]^_:`bcej9klllq .. ..188fdSVWZ[\W\S\o9^9^___q .. r??bJ&6&6$$T2....7]]bL&8&8NN4((((8^^96 0	--///OOD)))):%%%%d++++-----d33336\\R6\\R6\\LL&&&&;&&&&t,,,,;&&&&t,,,,;&&&&t,,,,>))))$////7]]!-dD!9!9!!<DJJ<''/;|Hd/K/K,D$	1!M$dAt7O7OPY[_ae7f7fgggg:%%/;|Hd/K/K,D$	1!M$dE!HHd>V>VW`bfhl>m>mnnnn;&&,8L$qs),L,L)D$	(q"+2UASASAUAU^_```D!M$lD$BZBZ[dfjlpBqBqrrrr=((;G<	SW;X;X8D$	5&-}=fEF!M$feT=U=UV_aegk=l=lmmmm;&&#-X,8L$rr(,K,K)D$	!M$mRAYAYZceikoApApqqqq8^^OOD))))9__#-X)5j$qt*)M)M&D%::::t'::::: L#T%89:@DN N N N !!AI V#%!R*l4be==a@#'#;#;dQU\^il#;#m#m$(BK	#'#;#;ItRT#;#U#U %2C,0055Ay8?		A,S1A#(6>05q/@,16.%-
 ./D$T*; ! The$,GGGGt|#<T?R#R  T T T;&&#-X&,vtBQBx88 1J	5%22 K)956<@LJ J J J ! &z9Q; ? ? ( (4#333 $ 0 6AA '		A56D,T2"'  LE KY  
 +++#-X,8LRaR,I,I)J	  LM KY  
 
====Y====#==== C)956<@LJ J J J %(	3$7$7	 &z9 = = 	. 	.!"Q$*;%<!<$(q$9	#'#;#;IBUY#;#Z#Z4#333 $ 0 6AA '		A56D,T2%-

	. =(("@J&)*d1Q3i&@&@ @ @
ddC,>,>???? vtAbDz22/1H7/5fd2b5k/J/JD,1E	,d.Fa2Q 2Q 2QD. er
	f  	,>;	*+ , , ,&&(((qrm   c                 Z   | j         }| j        }|dk    dz   }t          dd|dz
           z   |d |                   d         }|}|dk     r|j        p|                                }d}t          d          }		 |dk    r%t          ||                   dz  }
d|
         }|dz  }t          ||d          |          }|	|z  }	|t          |          z  }||k    r|	S ||k    rd	||fz  }t          |          |
                                \  }}}|t          k    rt          d
|z            d})Nr   r   <BHr   r&   r   )latin_1	utf_16_lez,STRING/CONTINUE: expected %d chars, found %dz2Expected CONTINUE record; found record-type 0x%04X)r*   r)   r   r4  r5  r   r9  unicoder   rL  r*  XL_CONTINUE)rg   r  r  r  r   nchars_expectedr  encnchars_foundr  flagchunkmsgr  r  s                  rk   rM  zSheet.string_record_contents  sj   Y(a tFQJ'7!7gvgGGJ77+5!3!3!5!5C $$	Rxx f..2.t4!DM3//EeOFCJJ&L..o--E&56nn$$&$7$7$9$9!BT[  H2MO O OF%	rm   c                    t           p
| j        dk    }| j        rh| j        d| _        n| j        | _        | j        }d|cxk    rdk    s0n |r%t          d| j        | j        fz  | j                   | j        }|| _	        d S | j        d| _	        n| j        | _	        | j
        }|sd}n>d|cxk    rdk    s1n |r&t          d| j        d	| j
        | j                   | j	        }|| _        d S )
Nr   r%   r   r  zGWARNING *** WINDOW2 rcd sheet %d: Bad cached_normal_view_mag_factor: %dr   r$   zWARNING *** WINDOW2 rcd sheet z,: Bad cached_page_break_preview_mag_factor: )r  r2   r   ra   r]   r`   r   r1   r,   r^   r_   )rg   r   zooms      rk   r  zSheet.update_cooked_mag_factors  sd    *** !	="*<?99<@<O95D$$$$$$$$$ a;(JKL!\   
 @15D... "*5822595H2<D 
:D''''C'''' E;;;(Q(QS!\   
 98<D555rm   c                 J   d}|p
| j         dk    }| j        dk    ra| j        j        rB||}nt	          |d                   dz  }|dk    r| j        t          d          | j        }|S dx| _        | j        _        t	          |d                   dz  }|dk    sJ | j                            |          }||S |rt          | j
        d|||           | j        j        s-t          d          D ]}|                     d	|d
k                |                     |          }|S )Nr   r   r  ?   z?BIFF2 cell record has XF index 63 but no preceding IXFE record.r   zNew cell_attr %r at (%r, %r)
r   s   @  r~   )r  style)r  )r2   r*   r)   rd  r9  rb   rL  rc   r0  r   r,   r   insert_new_BIFF20_xf)	rg   r  rr   rs   r   r  r   rt   xfx_slots	            rk   rI  zSheet.fixed_BIFF2_xfindex1  s]   +!+""y  '"CC#IaL11D8C$;;z)'(ijjj*C
 
9;;D	 6Yq\**T11}}}}$((33?J 	[DL"BItUYZZZy  	Ubzz U U))O3QS8)TTTT'')'<<
rm   c           
         d}|p
| j         dk    }| j        }t          |j                  }|                     ||          }||_        |j                            |           |r |                    | j        d|z  d           |j	        |j
        vr|j	        r)d}t          | j        ||j        |j	        |j	                   t          |j	        t          t          d                    }	|	|j
        |j	        <   |j                            |	           t           t"          t          t"          t$          t"          t&          t(          t*          t"          i}
|j
        |j	                 }	|
|	j                 }|| j        |j        <   || j        |<   |S )Nr   r   z=== Faked XF %d ===z======r   footerz1ERROR *** XF[%d] unknown format key (%d, 0x%04x)
General)r2   r)   r   rd  fake_XF_from_BIFF20_cell_attrr   r   rG  r,   
format_key
format_mapr   r	   FUNr   format_listFNUXL_CELL_NUMBERFGEFDTXL_CELL_DATEFTXtyper8   rc   )rg   r  r.  r  r   r)   rt   xfr)  fmtcellty_from_fmttyr  s               rk   r/  zSheet.insert_new_BIFF20_xfS  sn   +!+y$,//	5AAB 	WGGDL)>)DXGVVV=//} CJcR]BMC C C_Y-G-GHHC-0DOBM*##C(((
 obm,"38,5;%bk2,/y)
rm   c                 j   ddl m}m}m}m}m}  |            } |            |_        d|j        _        d|j        _        d|j        _	         |            |_
        d|j
        _        d|j
        _        d|j
        _        d|j
        _         |            |_         |            |_        t#          d|          \  }	}
}|
dz  |_        |
dz  dz	  |_        t)          |j        |	d           |d	z  |j        _        d
D ]G\  }}||z  rd\  }}nd\  }}t-          |j
        |dz   |           t-          |j
        |dz   |           H|j        }|dz  rd|_        nd|_        d|_        d|_        d|         |_        d|j        _        d|j        _        g d}|D ]}d|z   dz   }t-          ||d           |S )Nr   )XFXFAlignmentXFBorderXFBackgroundXFProtectionr   r  r-     r   ))r   r#   cell_locked)r      formula_hiddenr   ))r   left)r   right)r  top)r#   bottom)r   r   r  _colour_index_line_stylerL     r  r   )r   r   r   )formatfont	alignmentborder
background
protection__flag)
formattingrE  rF  rG  rH  rI  rW  indent_levelshrink_to_fittext_directionrX  diag_up	diag_downdiag_colour_indexdiag_line_stylerY  rZ  r   r6  
font_indexrT  	hor_alignrU   fill_patternbackground_colour_indexpattern_colour_indexparent_style_index
vert_alignrotation)rg   r  r.  rE  rF  rG  rH  rI  rA  	prot_bitsfont_and_format
halign_etcmasksidecolour_index
line_stylebg
attr_stems	attr_stemri   s                       rk   r5  z#Sheet.fake_XF_from_BIFF20_cell_attrr  s   UUUUUUUUUUUUUURTT"{}}$%!%&"&'#HJJ			&'	#$%	!$$39&)3L3L0OZ'$.(4/A5y +
 	 	 	 ",d!2\ 	A 	AJD$D  0+/(jj+/(jBIto5|DDDBItm3Z@@@@] 	  BOOBO%&""# +E 2"# !
 
 

 $ 	! 	!I?W,DBa    	rm   c                 2    | j         st          d          d S )Nz9Feature requires open_workbook(..., formatting_info=True))r3   rL  r   s    rk   r   zSheet.req_fmt_info  s)    # 	YWXXX	Y 	Yrm   c                    |                                   | j        dk    r3| j                            |d          }||j        S | j        | j        S n{| j        dk    rA| j        |         r| j        | j        S nT| j                            |d          }||j        S n/| j        dk    r$| j                            |d          }||j        S | j        
| j        dz  S dS )a  
        Determine column display width.

        :param colx:
          Index of the queried column, range 0 to 255.
          Note that it is possible to find out the width that will be used to
          display columns with no cell information e.g. column IV (colx=255).

        :return:
          The column width that will be used for displaying
          the given column by Excel, in units of 1/256th of the width of a
          standard character (the digit zero in the first font).

        .. versionadded:: 0.6.1
        r&   Nr  r   r(   i   )r   r*   rI   r0  rS  rC   rZ  rB   )rg   rs   colinfos      rk   computed_column_widthzSheet.computed_column_width  s     	""&**466G"}$!-)) ."$$x~ )%1-- 2 *..tT::&"=( '"$$&**466G"}$'#c))wrm   c                 
   t           rt          d| j                   t          |          }t	                      }t          d|d d                   \  |_        |_        |_        |_	        }}}|dk    sJ |dk    sJ t           rt          d|z  | j                   d}d }|d	z  r |||          \  |_
        }|d
z  r |||          \  |_        }|dz  r|dz  st          d|||dz                      \  }	t           rt          | j        d|	           |dz  }|	dk    r/t          d          |_        t          d|||dz                      d         }
|dz  }t          ||||
z            d          |_        t           r.t          | j        d|j        t          |j                             |j                            d          }t           rt          d|z  | j                   |j        d |         |_        d|dz   z  }||z  }|
|z
  }||||z            }||z  }t           rt          | j        d|j        ||
||           |dv sJ n|	dk    rt          d          |_        t          d|||dz                      \  }}
|dz  }d |z  ||||
z   dz
           z   }t           rt          | j        d!||           ||
z  }|d"z  }t          d#|||dz                      d         }t           rt          d$|z  | j                   |dz  }|rSt          d#|||dz                      d         }|dz  }|dz  }t          ||||z            d          }||z  }||_        n||_        n{t          | j        d%|	           nd|d&z  d'k    r)t          d(          |_         |||          \  |_        }n2|d)z  d*k    rt          d+          |_        nt          d,          |_        |d*z  r |||          \  |_        }t           r*|                    d-.           t          d/||fz             ||z
  }|dk    r@t          | j        d0|j        dz   |j        dz   |t)          || d                               n|dk     rt+          d1          | j                            |           t1          |j        |j        dz             D ].}t1          |j        |j	        dz             D ]}|| j        ||f<   /d S )2Nz
=== hyperlink ===r   z<HHHH16s4sir  s   y  Ks      zoptions: %08Xc                     t          d| ||dz                      d         dz  }|dz  }t          | |||z            d          d d         }||z  }||fS )N<Lr   r   r   UTF-16ler"   )r   r"  )bufofsnbucs       rk   get_nul_terminated_unicodez6Sheet.handle_hlink.<locals>.get_nul_terminated_unicode  sf    c#c!e)n--a014B1HCSRZ*55crc:B2ICs7Nrm   r   rL  r   r(   z<16sr   z	clsid=%r
s   y  Kurlr}  r   r   r~  zinitial url=%r len=%d
 z	endpos=%dr   z9url=%r
extra=%r
nbytes=%d true_nbytes=%d extra_nbytes=%d
)   r   s               Fz
local filez<Hir   s   ..\zuplevels=%d shortpath=%r
r  <izsz=%dz*** unknown clsid %r
ic  i  uncik  r   workbookunknownz... object dump ...r   zoffset=%d record_size=%dz=*** WARNING: hyperlink at R%dC%d has %d extra data bytes: %s
z:Bug or corrupt file, send copy of input file for debugging)r  r   r,   r   	Hyperlinkr   frowxlrowxfcolxlcolxdesctargetr   r   r@  r"  url_or_pathfindtextmarkrG  REPRrL  rZ   r   r   r[   )rg   r  record_sizer!   guid0dummyr  r  r  clsidnbytesendpostrue_nbytesextra_nbytes
extra_datauplevels	shortpathszxlextended_pathrr   rs   s                         rk   rh  zSheet.handle_hlink  s   A%-DLAAAA$iiKKDJ=Z^_b`b_bZcDdDdA!'17E5'[[[[[+++++E%'1EEEE	 	 	 T> 	F77fEENAFFT> 	H99$GGAHfaK <	0'E/ <	0FD);$<==FEAgdlL5AAAbLF[[[ )//d6&1*+<&=>>qA! 'VFVO-C(Dj Q Qm'$,0I1=Z]^_^kZlZlmmm++F33H%f 44<HHHH !gvg 66A:.+%%3!&,)>">?
,& Vz6;  
 $w.....]]](66#)%fVaZ6G1H#I#I &!#h.fVf_q=P6P1QQ	b'$,0LhXabbb& "D$vfqj'8"9::1=@%"4<@@@@! .d6&1*+<&=>>qABaKFaKF$+D1C,Dj$Q$QMbLF$1AMM$-AMM &>FFFFu_%%$U++AF$>$>tV$L$L!AM66u_!!$Z00AFF$Y//AFS= 	J!;!;D&!I!IAJ 	FFF/F000,/DDEEE"V+!P!!T<-..)**    AXYYY""1%%%17AGAI.. 	3 	3Dqw	22 3 312"4:..3	3 	3rm   c                 *   t          d|d d                   \  }}}}}|t          k    sJ | j        sJ | j        d         }||||f|j        |j        |j        |j        fk    sJ |dd          dk    sJ t          |dd         d          |_        d S )N<5Hr   r"   r   s     r!  )	r   ri  rZ   r  r  r  r  r"  quicktip)rg   r  rcxr  r  r  r  r!   s           rk   rj  zSheet.handle_quicktipB  s    *0SbS	*B*B'UE5%k!!!!""""#ueU+!'17/SSSSSBCCyK''''T"R%[+66


rm   c           	         t           sd S d}| j        dk     rd S t                      }d}||k     rt          d|||dz                      \  }}}	|dz  }
|dz	  dz  }|
dk    rd}n|	}|r6t	          |||dz   d| j        	           t          | j        d
|||
|	|	           |dk    rI|dk    sJ t          d||dz   |dz   |z                      \  |_        |_        |_	        |_
        |_        n|dk    r|	dk    sJ |dz   |k    sJ n	 ||dz   z  }||k     ||k    sJ |r|                    | j        dd           d S d S )Nr   r&   r   z<HHIr   r~   r   r   basefoutz.fbt:0x%04X  inst:%d  ver:0x%X  cb:%d (0x%04X)
i  r  z<Hiiiii  z=== MSODrawing ===r  r2  )OBJ_MSO_DEBUGr*   
MSODrawingr   hex_char_dumpr,   r   
anchor_unkanchor_colx_loanchor_rowx_loanchor_colx_hianchor_rowx_hirG  )rg   recidr  r  r  or  tmpfbtcbverinstndbs                rk   rp  zSheet.handle_msodrawingetcK  s    	Fr!!FLLHnn!&$s3q5y/::LCb)C1H%Dczz ,dCqqt|LLLLEsB, , , f}}byyyy 7=XtCPQERUVWRWX[R[OG\6]6]4 !"2 !"2"2QwwwwQw(*****37NC1 Hnn6 (???? 	KFF4<(<cFJJJJJ	K 	Krm   c                 |   | j         dk     rd S t                      }t          |          }d}t          rt	          | j        d|           ||k     rt          d|||dz                      \  }}t          r4t	          | j        d|||           t          |||dz   d| j                   |dk    r*|dk    r|d	k    s| j        rt	          | j        d
           d S |dk    rF|dk    sJ t          d||dz   |dz                      \  |_	        |_
        }t          ||d           n|dk    rZ|||         d||z
  z  k    rnd}t	          | j        d|z             t          ||||z
  d| j                   t          |          |dk    rIt          d||dz   |d	z                      }	t          |	d          D ]\  }
}t          |d|z   |
           n3|dk    rt          rt	          | j        d           n|dk    r	|j        rnn	 ||dz   z  }||k     	 t          r|                    | j        dd           |S )Nr&   r   z... OBJ record len=%d...
r   r   zpos=%d ft=0x%04X cb=%d
r  r  r  z6*** WARNING Ignoring antique or corrupt OBJECT record
r   r   ))r   r   locked)r   r   	printable)r   r(   
autofilter)r     scrollbar_flag)r!  i    autofill)r   r'   autoliner#  z'Unexpected data at end of OBJECT recordz*** ERROR %s
r  r  r   )r   r  maxincpage
scrollbar_r!  z.*** OBJ record has ft==0x0D 'notes' structure
   z=== MSOBj ===r  r2  )r*   MSObjr   r  r   r,   r   r  r2   r@  rn  rT  rL  r  rU   r  rG  )rg   r  r  r  r  ftr  option_flagsr)  valuesr   tags               rk   rm  zSheet.handle_objs  s   r!!4GGt99 	JDL">IIIHnnE4CE	?33FB L&@#r2NNNdCaadlKKKKaxxtb> eDL*cdddtTzzaxxxx-3FDQs2v<N-O-O*l< *     tH%(S.)AAA?&6&<===dCCadlSSSSnn$ttCE#b&L'9::"%f.T"U"U : :JE3A|c159999:t j'$,8i"j"j"jt<  26MCQ HnnV  	FFF4<FEEErm   c                    t           r;t          | j        d           t          |dt	          |          d| j                   t                      }t	          |          }| j        dk     r{t          d|d d                   \  |_        |_	        }t	          |          dz
  }||k    sJ |dd          g}||z  }|dk    r| j
                                        \  }}	}
|t          k    sJ t          d|
d d                   \  }}|dk    sJ ||	dz
  k    sJ |                    |
dd                     ||z  }|dk    |dk    sJ | j
        j        p| j
                                        }t!          d	                    |          |          |_        d
g|_        d|_        d|_        d|_        t/          d          |_        d |_        || j        |j        |j	        f<   d S t          d|d d                   \  |_        |_	        }|_        |dz	  dz  |_        |dz	  dz  |_        |dz	  dz  |_        t7          |dd          \  |_        }||z
  dv sJ t           r|                    | j        dd           |                    |j                  }|r0|j        |_        |j        |_        || j        |j        |j	        f<   d S d S )Nz... NOTE record ...
r   r  r&   r   r   z<H2xHr  rm   r  r   z<4Hr   r   r   r   r   )r   r   z=== Note ===r  r2  )r  r   r,   r  r   Noter*   r   rr   rs   r)   r*  rs  r   r4  r5  r"  r[  textrich_text_runlistshow
row_hidden
col_hiddenr   author
_object_idr\   r:  rG  r0  )rg   r  r  r  r  expected_bytesr  piecesr  r  r  
dummy_rowxr%  r  r  r  s                   rk   rt  zSheet.handle_note  s    	IDL"9:::$3t9914<HHHHFFt99r!!-3FD!H-E-E*AFAFNTQB''''122hZFb N 1$$(,	(B(B(D(D%Yg~~~~!'rr!;!;
B!V++++Y]****eABBi((("$ !1$$ "Q&&&&)$C	(A(A(C(CCSXXf--s33AF#)(AAFALAL&r**AHAL12Dqvqv~.F5;E485L5L2al!#q($)Q.$)Q. 5T1QGGG& 6!f,,,, 	EFF4<FDDDhhq|$$ 	3XAF"%"7A12Dqvqv~...	3 	3rm   c                    | j         dk     rd S t                      }d}t          |          }t          ||d |                   \  }|_        }}}|_        ||d          |_        t          ||d           d}	t          d          |_	        |	|k     r| j
                                        \  }
}}|
t          k    sJ t          rt          |d|d| j                   t!          |d                   }|dz
  }|r|dz  dk    sJ |dz  }t#          |d|	          \  }}||k    sJ |xj	        |z  c_	        |	|z  }	|	|k     g |_        d}||k     r| j
                                        \  }}}|t          k    sJ |d
z  dk    sJ t'          d|d
          D ]<}t          d|||d
z                      }|j                            |           |d
z  }=||k     |j        r=|j        d         d         |k    r&|j        d= |j        r|j        d         d         |k    &t          r8|                    | j        dd           t-          |j        | j                   |S )Nr&   z<HH6sHHH))r   r   
horz_align)r   p   rk  )r  r  	lock_text)r   r'   	just_last)r~   i   secret_editr   r   r  r   r   )	known_lenr   z<HH4xr"   z=== MSTxo ===r  r2  r   )r*   MSTxor   r   rot	ifntEmptyfmlarT  r   r  r)   r*  r#  r  r  r,   r9  r:  r  r   r   rG  r   )rg   r  r  rB  fmtsizer  controlInfocchTextcbRunstotcharsr  r  r  r  ncharsutextr  totrunsrc3	data3_lendata3r  runs                          rk   rr  zSheet.handle_txo  s   r!!FGG3--IOPSUYZb[bZbUcIdIdFae['61;ghh< "
 	 	 	  $$  $(I$>$>$@$@!CE+%%%% NeQ	MMMM58$$B]F zQ15eQ&QQQME6Y&&&&FFeOFFH    !$(I$>$>$@$@!CE+%%%%q=A%%%%aA..  WeCAI&677#**3///1  ! 	(a&9"&=a&@G&K&K#B' ! 	(a&9"&=a&@G&K&K 	:FF4<FEEE!%DL9999rm   c                    t           sd S t          d|dd                   \
  }}}}}}}}	}
}|dk    sJ |
dk    sJ |dk    sJ |dk    sJ |dk    sJ ||k    sJ t          | j        d||||	           t          d|dd                   \  }}}}}}}}}}}}}}}t          d	|||||||||||||||fz  | j        
           d S )Nz<HH8sHBiHiH8sr   #   r   ir  z3FEAT11: grbitFrt=%d  Ref0=%r cref=%d cbFeatData=%d
z<iiiiiiHHiiiii16sHe   zlt=%d  idList=%d crwHeader=%d  crwTotals=%d  idFieldNext=%d cbFSData=%d
rupBuild=%d  unusedShort=%d listFlags=%04X  lPosStmCache=%d  cbStmCache=%d
cchStmCache=%d  lem=%d  rgbHashParam=%r  cchName=%dr   )r  r   r   r,   )rg   r  rtgrbitFrtRef0isffHdr	reserved0cref
cbFeatData	reserved1Ref1ltidList	crwHeader	crwTotalsidFieldNextcbFSDatarupBuildunusedShort	listFlagslPosStmCache
cbStmCachecchStmCachelemrgbHashParamcchNames                              rk   rv  zSheet.handle_feat11  sX    	F W]]lnrstuwswnxVyVySHdCy$
ItA~~~~A~~~~axxxxU{{{{qyyyyt||||dlRT\^bdhjtuuu( 4::NPTUWX]U]P^3_3_	1VY	;+y,
S, B FIy+x+izS,E99
 @D|	M 	M 	M 	M 	M 	Mrm   c                 B    d                     | j        | j                  S )NzSheet {:>2}:<{}>)rU  r1   r0   r   s    rk   __repr__zSheet.__repr__@  s    !((di@@@rm   )r   Nr   )r   )F__name__
__module____qualname____doc__r0   r)   r9   r:   rI   rJ   rK   rL   rM   rN   rB   rC   rD   rE   rF   rG   rH   rS   rZ  rZ   r[   r\   r  r  r  r  r  r  rO   rP   rl   ru   ry   r|   ro   r   r   r   r   __iter__r   r   r   r   r   r   colr   r5   r7   r  rM  r  rI  r/  r5  r   rz  rh  rj  rp  rm  rt  rr  rv  r  r   rm   rk   r   r   2   se        & D D E E K K"  6 L0   K M
 
 #'
 
 &*"
 &*" J C N M M N N  !  !  O   M# M# M#h
 
 
- - -, , ,  >, , ,
 
 
+ + +@ @ @
 H; ; ; ;< < < <
 
 
 
$
 
 
 
$
 
 
 
$
 
 
 
$ C
;J ;J ;Jz9 9 9vF F FVO O Ob  <+= += +=Z       D   >2 2 2 2hY Y Y& & &Pn3 n3 n3`7 7 7%K %K %KP6 6 6p13 13 13f0 0 0d.M .M .M`A A A A Arm   r   c                       e Zd ZdS )r  Nr  r  r  r   rm   rk   r  r  D          Drm   r  c                       e Zd ZdS )r  Nr  r   rm   rk   r  r  H  r  rm   r  c                       e Zd ZdS )r  Nr  r   rm   rk   r  r  L  r  rm   r  c                   V    e Zd ZdZ ed          ZdZdZdZdZ	dZ
dZ ed          ZdS )r  z
    Represents a user "comment" or "note".
    Note objects are accessible through :attr:`Sheet.cell_note_map`.

    .. versionadded:: 0.7.2
    r   r   N)r  r  r  r  r   r  r  rs   r  r  rr   r  r  r   rm   rk   r  r  P  se          _R  F J D
  J D D ?2DDDrm   r  c                   :    e 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S )r  z
    Contains the attributes of a hyperlink.
    Hyperlink objects are accessible through :attr:`Sheet.hyperlink_list`
    and :attr:`Sheet.hyperlink_map`.

    .. versionadded:: 0.7.2
    N)r  r  r  r  r  r  r  r  r@  r  r  r  r  r  r   rm   rk   r  r  s  s^          E E E E D K D F
 H HHHrm   r  c           
      (   t          | d                   }|dz  r0t          d|           \  }|dz  }|dz  r|dz  S t          |          S t          ddt          t	          |dz                      z   | dd	         z             \  }|dz  r|dz  S |S )
Nr   r   r  r   g      Y@r   s          r   )r9  r   r  BYTES_LITERALchr)rk_strr  ir  s       rk   r<  r<    s    fQi  Eqy T6""	a19 	u9Qxx D+c%#+6F6F(G(GG&QRSTQT+UVV19 	u9rm   emptyr  r1   xldateboolerrorblankc                   (    e Zd ZdZg dZddZd ZdS )rp   a  
    Contains the data for one cell.

    .. warning::
      You don't call this class yourself. You access :class:`Cell` objects
      via methods of the :class:`Sheet` object(s) that you found in the
      :class:`~xlrd.book.Book` object that was returned when you called
      :func:`~xlrd.open_workbook`

    Cell objects have three attributes: ``ctype`` is an int, ``value``
    (which depends on ``ctype``) and ``xf_index``.
    If ``formatting_info`` is not enabled when the workbook is opened,
    ``xf_index`` will be ``None``.

    The following table describes the types of cells and how their values
    are represented in Python.

    .. raw:: html

        <table border="1" cellpadding="7">
        <tr>
        <th>Type symbol</th>
        <th>Type number</th>
        <th>Python value</th>
        </tr>
        <tr>
        <td>XL_CELL_EMPTY</td>
        <td align="center">0</td>
        <td>empty string ''</td>
        </tr>
        <tr>
        <td>XL_CELL_TEXT</td>
        <td align="center">1</td>
        <td>a Unicode string</td>
        </tr>
        <tr>
        <td>XL_CELL_NUMBER</td>
        <td align="center">2</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_DATE</td>
        <td align="center">3</td>
        <td>float</td>
        </tr>
        <tr>
        <td>XL_CELL_BOOLEAN</td>
        <td align="center">4</td>
        <td>int; 1 means TRUE, 0 means FALSE</td>
        </tr>
        <tr>
        <td>XL_CELL_ERROR</td>
        <td align="center">5</td>
        <td>int representing internal Excel codes; for a text representation,
        refer to the supplied dictionary error_text_from_code</td>
        </tr>
        <tr>
        <td>XL_CELL_BLANK</td>
        <td align="center">6</td>
        <td>empty string ''. Note: this type will appear only when
        open_workbook(..., formatting_info=True) is used.</td>
        </tr>
        </table>
    r   r   r   Nc                 0    || _         || _        || _        d S r   r(  )rg   r   r   r   s       rk   rl   zCell.__init__	  s    

 rm   c                     | j         t          | j                 d| j        S t          | j                 d| j        d| j         dS )N:z (XF:))r   
ctype_textr   r   r   s    rk   r  zCell.__repr__	  sL    = (444djjAA&0&<&<&<djjj$---XXrm   r   )r  r  r  r  	__slots__rl   r  r   rm   rk   rp   rp     sT        ? ?B /..I! ! ! !
Y Y Y Y Yrm   rp   r   c                   *    e Zd ZdZdZdZdZdZdZdZ	dS )rR  aR  
    Width and default formatting information that applies to one or
    more columns in a sheet. Derived from ``COLINFO`` records.

    Here is the default hierarchy for width, according to the OOo docs:

      In BIFF3, if a ``COLINFO`` record is missing for a column,
      the width specified in the record ``DEFCOLWIDTH`` is used instead.

      In BIFF4-BIFF7, the width set in this ``COLINFO`` record is only used,
      if the corresponding bit for this column is cleared in the ``GCW``
      record, otherwise the column width set in the ``DEFCOLWIDTH`` record
      is used (the ``STANDARDWIDTH`` record is always ignored in this case [#f1]_).

      In BIFF8, if a ``COLINFO`` record is missing for a column,
      the width specified in the record ``STANDARDWIDTH`` is used.
      If this ``STANDARDWIDTH`` record is also missing,
      the column width of the record ``DEFCOLWIDTH`` is used instead.

    .. [#f1] The docs on the ``GCW`` record say this:

      If a bit is set, the corresponding column uses the width set in the
      ``STANDARDWIDTH`` record. If a bit is cleared, the corresponding column
      uses the width set in the ``COLINFO`` record for this column.

      If a bit is set, and the worksheet does not contain the ``STANDARDWIDTH``
      record, or if the bit is cleared, and the worksheet does not contain the
      ``COLINFO`` record, the ``DEFCOLWIDTH`` record of the worksheet will be
      used instead.

    xlrd goes with the GCW version of the story.
    Reference to the source may be useful: see
    :meth:`Sheet.computed_column_width`.

    .. versionadded:: 0.6.1
    r   r"   N)
r  r  r  r  rS  r   r   r   r  r  r   rm   rk   rR  rR  $	  sC        # #N E H F I M IIIrm   rR  c                   ,    e Zd ZdZerdZd Zd Zd ZdS )r?  z
    Height and default formatting information that applies to a row in a sheet.
    Derived from ``ROW`` records.

    .. versionadded:: 0.6.1
    
r@  rA  r  rB  r   rC  rD  r   rE  rF  c                     d | _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d S r   r1  r   s    rk   rl   zRowinfo.__init__x	  sg     #' "
 *.&   $ %)!  '+# '+###rm   c           
      ~    | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        f
S r   r1  r   s    rk   __getstate__zRowinfo.__getstate__	  sE    K#*K %M''
 	
rm   c                     |\
  | _         | _        | _        | _        | _        | _        | _        | _        | _        | _	        d S r   r1  )rg   states     rk   __setstate__zRowinfo.__setstate__	  sK     	
K#*K %M''''rm   N)	r  r  r  r  
_USE_SLOTSr.  rl   r4  r7  r   rm   rk   r?  r?  b	  s]           

	&+ &+ &+P
 
 
    rm   r?  N)0
__future__r   r   structr   r   biffhr]  r	   r
   formular   r   r   r   r   timemachiner  r  rT   
BaseObjectr   r  r  r  r  r  r<  r:  r;  r8  r<  r=  r>  r?  rC  r-   r.  rN  rO  r`  r-  rp   r   
empty_cellrR  r8  r?  r   rm   rk   <module>r@     s   & % % % % %       # # # # # # # #     4 4 4 4 4 4 4 4                 	 8O A O A O A O A O AJ O A O A O Ad@	 	 	 	 	 	 	 		 	 	 	 	J 	 	 		 	 	 	 	J 	 	 	         :      F4 4 4 4 4
 4 4 4p  &   7&H(V77
MY MY MY MY MY: MY MY MY^ T-!4!455

9 9 9 9 9j 9 9 9v 
X X X X Xj X X X X Xrm   