summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--formula/inc/core_resource.hrc6
-rw-r--r--include/formula/compiler.hxx2
-rw-r--r--include/formula/opcode.hxx2
-rw-r--r--sc/README.md1
-rw-r--r--sc/inc/helpids.h1
-rw-r--r--sc/inc/queryiter.hxx60
-rw-r--r--sc/inc/scfuncs.hrc18
-rw-r--r--sc/qa/extras/scfunctionlistobj.cxx2
-rw-r--r--sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods4553
-rw-r--r--sc/qa/unit/ucalc.cxx1
-rw-r--r--sc/qa/unit/ucalc_sort.cxx4
-rw-r--r--sc/source/core/data/funcdesc.cxx1
-rw-r--r--sc/source/core/data/queryiter.cxx184
-rw-r--r--sc/source/core/inc/interpre.hxx61
-rw-r--r--sc/source/core/tool/interpr1.cxx1116
-rw-r--r--sc/source/core/tool/interpr4.cxx1
-rw-r--r--sc/source/core/tool/parclass.cxx1
-rw-r--r--sc/source/core/tool/token.cxx1
-rw-r--r--sc/source/filter/excel/xlformula.cxx13
-rw-r--r--sc/source/filter/oox/formulabase.cxx15
20 files changed, 5758 insertions, 285 deletions
diff --git a/formula/inc/core_resource.hrc b/formula/inc/core_resource.hrc
index baed318f586e..835d928ea4a8 100644
--- a/formula/inc/core_resource.hrc
+++ b/formula/inc/core_resource.hrc
@@ -275,6 +275,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
+ { "COM.MICROSOFT.XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -722,6 +723,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
+ { "_xlfn.XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "_xlfn.ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -1172,6 +1174,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
+ { "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -1623,6 +1626,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
+ { "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -2072,6 +2076,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
+ { "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA },
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -2502,6 +2507,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "COUNTIFS") , SC_OPCODE_COUNT_IFS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LOOKUP") , SC_OPCODE_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "VLOOKUP") , SC_OPCODE_V_LOOKUP },
+ { NC_("RID_STRLIST_FUNCTION_NAMES", "XLOOKUP") , SC_OPCODE_X_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "HLOOKUP") , SC_OPCODE_H_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MULTIRANGE") , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ NC_("RID_STRLIST_FUNCTION_NAMES", "OFFSET") , SC_OPCODE_OFFSET },
diff --git a/include/formula/compiler.hxx b/include/formula/compiler.hxx
index fcf7326d3e0f..479008dfb1a2 100644
--- a/include/formula/compiler.hxx
+++ b/include/formula/compiler.hxx
@@ -398,7 +398,7 @@
#define SC_OPCODE_CELL 385
#define SC_OPCODE_ISPMT 386
#define SC_OPCODE_HYPERLINK 387
-// free: 388
+#define SC_OPCODE_X_LOOKUP 388
// free: 389
#define SC_OPCODE_GET_PIVOT_DATA 390
#define SC_OPCODE_EUROCONVERT 391
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index d92ae0b1d41d..ad056a9b0b50 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -316,6 +316,7 @@ enum OpCode : sal_uInt16
ocCountIfs = SC_OPCODE_COUNT_IFS,
ocLookup = SC_OPCODE_LOOKUP,
ocVLookup = SC_OPCODE_V_LOOKUP,
+ ocXLookup = SC_OPCODE_X_LOOKUP,
ocHLookup = SC_OPCODE_H_LOOKUP,
ocMultiArea = SC_OPCODE_MULTI_AREA,
ocOffset = SC_OPCODE_OFFSET,
@@ -798,6 +799,7 @@ inline std::string OpCodeEnumToString(OpCode eCode)
case ocCountIfs: return "CountIfs";
case ocLookup: return "Lookup";
case ocVLookup: return "VLookup";
+ case ocXLookup: return "XLookup";
case ocHLookup: return "HLookup";
case ocMultiArea: return "MultiArea";
case ocOffset: return "Offset";
diff --git a/sc/README.md b/sc/README.md
index 826bb71a9e9b..a778661d46f9 100644
--- a/sc/README.md
+++ b/sc/README.md
@@ -75,6 +75,7 @@ https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocume
* LOOKUP
* MATCH
* VLOOKUP
+ * XLOOKUP
* Mathematical Functions
* SUMIF
* SUMIFS
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index eb3f590beb3c..3dfc8892aef6 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -593,5 +593,6 @@ inline constexpr OUString HID_FUNC_REGEX = u"SC_HID_FUNC_REGEX"_ustr;
inline constexpr OUString HID_FUNC_FOURIER = u"SC_HID_FUNC_FOURIER"_ustr;
inline constexpr OUString HID_FUNC_RAND_NV = u"SC_HID_FUNC_RAND_NV"_ustr;
inline constexpr OUString HID_FUNC_RANDBETWEEN_NV = u"SC_HID_FUNC_RANDBETWEEN_NV"_ustr;
+inline constexpr OUString HID_FUNC_XLOOKUP_MS = u"SC_HID_FUNC_XLOOKUP_MS"_ustr;
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx
index 1d0066de7fb8..e34a7be20e13 100644
--- a/sc/inc/queryiter.hxx
+++ b/sc/inc/queryiter.hxx
@@ -62,7 +62,7 @@ class ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >
{
protected:
ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext,
- const ScQueryParam& rParam );
+ const ScQueryParam& rParam, bool bReverseSearch );
// Initialize position for new column.
void InitPos();
// Increase position (next row).
@@ -71,12 +71,19 @@ protected:
// should call IncPos().
void IncBlock();
+ // Decrease position (prev row).
+ void DecPos();
+ // Prev mdds block. If access is not direct/linear, then
+ // should call DecPos().
+ void DecBlock();
+
// These members needs to be available already in the base class.
typedef sc::CellStoreType::const_position_type PositionType;
PositionType maCurPos;
ScQueryParam maParam;
ScDocument& rDoc;
ScInterpreterContext& mrContext;
+ bool mbReverseSearch;
SCTAB nTab;
SCCOL nCol;
SCROW nRow;
@@ -98,19 +105,24 @@ public:
bool IncPosImpl();
protected:
ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext,
- const ScQueryParam& rParam );
+ const ScQueryParam& rParam, bool bReverseSearch );
void InitPosStart();
- void InitPosFinish( SCROW beforeRow, SCROW lastRow );
+ void InitPosFinish( SCROW beforeRow, SCROW lastRow, bool bFirstMatch );
void IncPos() { IncPosImpl<false>(); }
bool IncPosFast() { return IncPosImpl<true>(); }
void IncBlock() { IncPos(); } // Cannot skip entire block, not linear.
+ // Initialize for backward search. (no need for SortedCache)
+ static void DecPos() {};
+ static void DecBlock() {};
+
// These members needs to be available already in the base class.
typedef sc::CellStoreType::const_position_type PositionType;
PositionType maCurPos;
ScQueryParam maParam;
ScDocument& rDoc;
ScInterpreterContext& mrContext;
+ bool mbReverseSearch;
SCTAB nTab;
SCCOL nCol;
SCROW nRow;
@@ -163,17 +175,24 @@ protected:
sal_uInt8 nTestEqualCondition;
bool bAdvanceQuery;
bool bIgnoreMismatchOnLeadingStrings;
+ bool bSortedBinarySearch;
+ bool bXLookUp;
+ SCCOL nBestFitCol;
+ SCROW nBestFitRow;
// Make base members directly visible here (templated bases need 'this->').
using AccessBase::maCurPos;
using AccessBase::maParam;
using AccessBase::rDoc;
using AccessBase::mrContext;
+ using AccessBase::mbReverseSearch;
using AccessBase::nTab;
using AccessBase::nCol;
using AccessBase::nRow;
using AccessBase::IncPos;
using AccessBase::IncBlock;
+ using AccessBase::DecPos;
+ using AccessBase::DecBlock;
using typename AccessBase::BinarySearchCellType;
using AccessBase::MakeBinarySearchIndexer;
using TypeBase::HandleItemFound;
@@ -227,9 +246,14 @@ protected:
bool IsEqualConditionFulfilled() const
{ return nTestEqualCondition == nTestEqualConditionFulfilled; }
+ void HandleBestFitItemFound(SCCOL nBFitCol, SCROW nBFitRow)
+ {
+ nBestFitCol = nBFitCol;
+ nBestFitRow = nBFitRow;
+ }
public:
ScQueryCellIteratorBase(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
- const ScQueryParam& aParam, bool bMod);
+ const ScQueryParam& aParam, bool bMod, bool bReverse);
// when !bMod, the QueryParam has to be filled
// (bIsString)
@@ -238,6 +262,12 @@ public:
void SetAdvanceQueryParamEntryField( bool bVal )
{ bAdvanceQuery = bVal; }
void AdvanceQueryParamEntryField();
+
+ void SetSortedBinarySearchMode( bool bVal )
+ { bSortedBinarySearch = bVal; }
+
+ void SetXlookupMode( bool bVal )
+ { bXLookUp = bVal; }
};
@@ -259,11 +289,13 @@ class ScQueryCellIterator
using Base::maParam;
using Base::rDoc;
using Base::mrContext;
+ using Base::mbReverseSearch;
using Base::nTab;
using Base::nCol;
using Base::nRow;
using Base::InitPos;
using Base::IncPos;
+ using Base::DecPos;
using Base::bIgnoreMismatchOnLeadingStrings;
using Base::SetStopOnMismatch;
using Base::SetTestEqualCondition;
@@ -279,13 +311,17 @@ class ScQueryCellIterator
using Base::nTestEqualConditionEnabled;
using Base::PerformQuery;
using Base::getThisResult;
+ using Base::nBestFitCol;
+ using Base::nBestFitRow;
+ using Base::bSortedBinarySearch;
+ using Base::bXLookUp;
bool GetThis();
public:
ScQueryCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
- const ScQueryParam& aParam, bool bMod)
- : Base( rDocument, rContext, nTable, aParam, bMod ) {}
+ const ScQueryParam& aParam, bool bMod, bool bReverse)
+ : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
bool GetFirst();
bool GetNext();
SCCOL GetCol() const { return nCol; }
@@ -320,8 +356,8 @@ class ScQueryCellIteratorSortedCache
typedef ScQueryCellIterator< ScQueryCellIteratorAccess::SortedCache > Base;
public:
ScQueryCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext,
- SCTAB nTable, const ScQueryParam& aParam, bool bMod)
- : Base( rDocument, rContext, nTable, aParam, bMod ) {}
+ SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse )
+ : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
// Returns true if this iterator can be used for the given query.
static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam,
SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData,
@@ -357,8 +393,8 @@ protected:
public:
ScCountIfCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
- const ScQueryParam& aParam, bool bMod)
- : Base( rDocument, rContext, nTable, aParam, bMod ) {}
+ const ScQueryParam& aParam, bool bMod, bool bReverse)
+ : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
sal_uInt64 GetCount();
};
@@ -370,8 +406,8 @@ class ScCountIfCellIteratorSortedCache
typedef ScCountIfCellIterator< ScQueryCellIteratorAccess::SortedCache > Base;
public:
ScCountIfCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext,
- SCTAB nTable, const ScQueryParam& aParam, bool bMod)
- : Base( rDocument, rContext, nTable, aParam, bMod ) {}
+ SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse)
+ : Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
// Returns true if this iterator can be used for the given query.
static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam,
SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData,
diff --git a/sc/inc/scfuncs.hrc b/sc/inc/scfuncs.hrc
index 8fb9f59e9029..279ba37b6b92 100644
--- a/sc/inc/scfuncs.hrc
+++ b/sc/inc/scfuncs.hrc
@@ -3377,6 +3377,24 @@ const TranslateId SC_OPCODE_V_LOOKUP_ARY[] =
NC_("SC_OPCODE_V_LOOKUP", "If the value is TRUE or not given, the search column of the array represents a series of ranges, and must be sorted in ascending order.")
};
+// -=*# Resource for function XLOOKUP #*=-
+const TranslateId SC_OPCODE_X_LOOKUP_ARY[] =
+{
+ NC_("SC_OPCODE_X_LOOKUP", "Extended vertical search and reference to indicated cells."),
+ NC_("SC_OPCODE_X_LOOKUP", "Search criterion"),
+ NC_("SC_OPCODE_X_LOOKUP", "The value to be found in the first column."),
+ NC_("SC_OPCODE_X_LOOKUP", "Search Array"),
+ NC_("SC_OPCODE_X_LOOKUP", "The array or range to search."),
+ NC_("SC_OPCODE_X_LOOKUP", "Result Array"),
+ NC_("SC_OPCODE_X_LOOKUP", "The array or range to return."),
+ NC_("SC_OPCODE_X_LOOKUP", "Result if not found"),
+ NC_("SC_OPCODE_X_LOOKUP", "If given, return given text, otherwise return #N/A."),
+ NC_("SC_OPCODE_X_LOOKUP", "Match Mode"),
+ NC_("SC_OPCODE_X_LOOKUP", "0, -1, 1 or 2 "), // TODO : add explanation of values
+ NC_("SC_OPCODE_X_LOOKUP", "Search Mode"),
+ NC_("SC_OPCODE_X_LOOKUP", "1, -1, 2 or -2 ") // TODO : add explanation of values
+};
+
// -=*# Resource for function INDEX #*=-
const TranslateId SC_OPCODE_INDEX_ARY[] =
{
diff --git a/sc/qa/extras/scfunctionlistobj.cxx b/sc/qa/extras/scfunctionlistobj.cxx
index 940aba8c3983..03cd76733f9f 100644
--- a/sc/qa/extras/scfunctionlistobj.cxx
+++ b/sc/qa/extras/scfunctionlistobj.cxx
@@ -78,7 +78,7 @@ public:
ScFunctionListObj::ScFunctionListObj()
: UnoApiTest("/sc/qa/extras/testdocuments")
, XElementAccess(cppu::UnoType<uno::Sequence<beans::PropertyValue>>::get())
- , XIndexAccess(395)
+ , XIndexAccess(396)
, XNameAccess("IF")
, XServiceInfo("stardiv.StarCalc.ScFunctionListObj", "com.sun.star.sheet.FunctionDescriptions")
{
diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
new file mode 100644
index 000000000000..16abcbcacb4b
--- /dev/null
+++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
@@ -0,0 +1,4553 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet">
+ <office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT52M13S</meta:editing-duration><meta:editing-cycles>14</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/8f959fffda28199c3d97aea8d5468776a0e43d90</meta:generator><dc:date>2024-01-26T18:16:42.850000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="754" meta:object-count="0"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item>
+ <config:config-item config:name="VisibleAreaLeft" config:type="int">0</config:config-item>
+ <config:config-item config:name="VisibleAreaWidth" config:type="int">15882</config:config-item>
+ <config:config-item config:name="VisibleAreaHeight" config:type="int">5013</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view1</config:config-item>
+ <config:config-item-map-named config:name="Tables">
+ <config:config-item-map-entry config:name="Sheet1">
+ <config:config-item config:name="CursorPositionX" config:type="int">2</config:config-item>
+ <config:config-item config:name="CursorPositionY" config:type="int">0</config:config-item>
+ <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
+ <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionBottom" config:type="int">0</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
+ <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ <config:config-item-map-entry config:name="Sheet2">
+ <config:config-item config:name="CursorPositionX" config:type="int">0</config:config-item>
+ <config:config-item config:name="CursorPositionY" config:type="int">104</config:config-item>
+ <config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
+ <config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
+ <config:config-item config:name="PositionBottom" config:type="int">81</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
+ <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-named>
+ <config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item>
+ <config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1835</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
+ <config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
+ <config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
+ <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item>
+ <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
+ <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
+ <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AutoCalculate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="ForbiddenCharacters">
+ <config:config-item-map-entry>
+ <config:config-item config:name="Language" config:type="string">en</config:config-item>
+ <config:config-item config:name="Country" config:type="string">US</config:config-item>
+ <config:config-item config:name="Variant" config:type="string"/>
+ <config:config-item config:name="BeginLine" config:type="string"/>
+ <config:config-item config:name="EndLine" config:type="string"/>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ <config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
+ <config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="IsDocumentShared" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">3</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item>
+ <config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
+ <config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
+ <config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SyntaxStringRef" config:type="short">7</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item-map-named config:name="ScriptConfiguration">
+ <config:config-item-map-entry config:name="Sheet1">
+ <config:config-item config:name="CodeName" config:type="string">Sheet1</config:config-item>
+ </config:config-item-map-entry>
+ <config:config-item-map-entry config:name="Sheet2">
+ <config:config-item config:name="CodeName" config:type="string">Sheet2</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-named>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Lucida Sans" svg:font-family="&apos;Lucida Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Microsoft YaHei" svg:font-family="&apos;Microsoft YaHei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="&apos;WenQuanYi Micro Hei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="table-cell">
+ <style:paragraph-properties style:tab-stop-distance="1.27cm"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="&apos;Segoe UI&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:style style:name="Default" style:family="graphic"/>
+ <style:style style:name="Note" style:family="graphic" style:parent-style-name="Default">
+ <style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="&apos;WenQuanYi Micro Hei&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/>
+ </style:style>
+ <number:number-style style:name="N0">
+ <number:number number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:currency-style style:name="N149P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N149">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N149P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N151P0" style:volatile="true">
+ <number:text>\</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:number-style>
+ <number:number-style style:name="N151">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>\-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N151P0"/>
+ </number:number-style>
+ <number:percentage-style style:name="N152">
+ <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/>
+ <number:text>%</number:text>
+ </number:percentage-style>
+ <number:number-style style:name="N156P0" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N156P1" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N156P2" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N156">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N156P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N156P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N156P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N158P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N158">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N158P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N159">
+ <number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N163P0" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N163P1" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N163P2" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N163">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N163P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N163P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N163P2"/>
+ </number:text-style>
+ <number:date-style style:name="N164">
+ <number:day number:style="long"/>
+ <number:text>.</number:text>
+ <number:month number:style="long"/>
+ <number:text>.</number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:number-style style:name="N166P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N166">
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N166P0"/>
+ </number:number-style>
+ <number:currency-style style:name="N168P0" style:volatile="true">
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N168">
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> -</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N168P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N170P0" style:volatile="true">
+ <number:text>$</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N170">
+ <number:text>($</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N170P0"/>
+ </number:number-style>
+ <number:number-style style:name="N174P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N174P1" style:volatile="true">
+ <number:text> (</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N174P2" style:volatile="true">
+ <number:text> - </number:text>
+ </number:number-style>
+ <number:text-style style:name="N174">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N174P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N174P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N174P2"/>
+ </number:text-style>
+ <number:date-style style:name="N175">
+ <number:text>⌀ </number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:number-style style:name="N179P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> € </number:text>
+ </number:number-style>
+ <number:number-style style:name="N179P1" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> € </number:text>
+ </number:number-style>
+ <number:number-style style:name="N179P2" style:volatile="true">
+ <number:text> - € </number:text>
+ </number:number-style>
+ <number:text-style style:name="N179">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N179P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N179P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N179P2"/>
+ </number:text-style>
+ <number:number-style style:name="N180">
+ <number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N181">
+ <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:currency-style style:name="N182P0" style:volatile="true">
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N182">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>-</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N182P0"/>
+ </number:currency-style>
+ <number:date-style style:name="N183">
+ <number:month number:style="long"/>
+ <number:text>-</number:text>
+ <number:day number:style="long"/>
+ <number:text>-</number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:currency-style style:name="N185P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N185">
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N185P0"/>
+ </number:currency-style>
+ <number:date-style style:name="N186">
+ <number:day number:style="long"/>
+ <number:text>-</number:text>
+ <number:month number:style="long"/>
+ </number:date-style>
+ <number:number-style style:name="N187">
+ <number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N188">
+ <number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N192P0" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N192P1" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N192P2" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N192">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N192P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N192P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N192P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N194P0" style:volatile="true">
+ <number:currency-symbol>€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N194">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>(</number:text>
+ <number:currency-symbol>€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N194P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N195">
+ <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N196">
+ <number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N197">
+ <number:text>$</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:number-style>
+ <number:number-style style:name="N198P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N198">
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N198P0"/>
+ </number:number-style>
+ <number:currency-style style:name="N200P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N200">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N200P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N202P0" style:volatile="true">
+ <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N202">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N202P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N206P0" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N206P1" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N206P2" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N206">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N206P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N206P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N206P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N208P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N208">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N208P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N210P0" style:volatile="true">
+ <number:text>Yes</number:text>
+ </number:number-style>
+ <number:number-style style:name="N210P1" style:volatile="true">
+ <number:text>Yes</number:text>
+ </number:number-style>
+ <number:number-style style:name="N210">
+ <number:text>No</number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N210P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N210P1"/>
+ </number:number-style>
+ <number:number-style style:name="N211">
+ <number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N212">
+ <number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:currency-style style:name="N214P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol>EUR</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N214">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol>EUR</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N214P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N216P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N216">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N216P0"/>
+ </number:number-style>
+ <number:number-style style:name="N218P0" style:volatile="true">
+ <number:text>\</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:number-style>
+ <number:number-style style:name="N218">
+ <number:text>\-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N218P0"/>
+ </number:number-style>
+ <number:number-style style:name="N222P0" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N222P1" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N222P2" style:volatile="true">
+ <number:text> \</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N222">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N222P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N222P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N222P2"/>
+ </number:text-style>
+ <number:number-style style:name="N223">
+ <number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N224">
+ <number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N225">
+ <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:number-style style:name="N227P0" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N227P1" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N227P2" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N227">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N227P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N227P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N227P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N228P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N228">
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N228P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N229">
+ <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="1" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:number-style style:name="N230">
+ <number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:currency-style style:name="N232P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol>EUR</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N232">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol>EUR</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N232P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N233P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N233">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N233P0"/>
+ </number:number-style>
+ <number:date-style style:name="N234">
+ <number:month number:style="long"/>
+ <number:text>-</number:text>
+ <number:day/>
+ <number:text>-</number:text>
+ <number:year/>
+ </number:date-style>
+ <number:number-style style:name="N238P0" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N238P1" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N238P2" style:volatile="true">
+ <number:text> $</number:text>
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N238">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N238P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N238P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N238P2"/>
+ </number:text-style>
+ <number:number-style style:name="N242P0" style:volatile="true">
+ <number:text> $</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N242P1" style:volatile="true">
+ <number:text> $(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N242P2" style:volatile="true">
+ <number:text> $- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N242">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N242P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N242P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N242P2"/>
+ </number:text-style>
+ <number:date-style style:name="N243">
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:number-style style:name="N244">
+ <number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:currency-style style:name="N246P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N246">
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N246P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N248P0" style:volatile="true">
+ <number:text>On</number:text>
+ </number:number-style>
+ <number:number-style style:name="N248P1" style:volatile="true">
+ <number:text>On</number:text>
+ </number:number-style>
+ <number:number-style style:name="N248">
+ <number:text>Off</number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N248P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N248P1"/>
+ </number:number-style>
+ <number:number-style style:name="N250P0" style:volatile="true">
+ <number:text>$</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N250">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>($</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N250P0"/>
+ </number:number-style>
+ <number:number-style style:name="N252P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N252">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N252P0"/>
+ </number:number-style>
+ <number:number-style style:name="N253">
+ <number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N254P0" style:volatile="true">
+ <number:text>$</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N254">
+ <number:text>($</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N254P0"/>
+ </number:number-style>
+ <number:number-style style:name="N255P0" style:volatile="true">
+ <number:text>$</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N255">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>($</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N255P0"/>
+ </number:number-style>
+ <number:number-style style:name="N256">
+ <number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N258P0" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N258P1" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N258P2" style:volatile="true">
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N258">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N258P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N258P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N258P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N259P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N259">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N259P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N260">
+ <number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N262P0" style:volatile="true">
+ <number:text>True</number:text>
+ </number:number-style>
+ <number:number-style style:name="N262P1" style:volatile="true">
+ <number:text>True</number:text>
+ </number:number-style>
+ <number:number-style style:name="N262">
+ <number:text>False</number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N262P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N262P1"/>
+ </number:number-style>
+ <number:number-style style:name="N266P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> € </number:text>
+ </number:number-style>
+ <number:number-style style:name="N266P1" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> € </number:text>
+ </number:number-style>
+ <number:number-style style:name="N266P2" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> € </number:text>
+ </number:number-style>
+ <number:text-style style:name="N266">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N266P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N266P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N266P2"/>
+ </number:text-style>
+ <number:number-style style:name="N267">
+ <number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N271P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N271P1" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N271P2" style:volatile="true">
+ <number:text> - </number:text>
+ </number:number-style>
+ <number:text-style style:name="N271">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N271P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N271P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N271P2"/>
+ </number:text-style>
+ <number:date-style style:name="N272">
+ <number:month number:style="long"/>
+ <number:text>/</number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:currency-style style:name="N273P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N273">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N273P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N275P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N275">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N275P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N279P0" style:volatile="true">
+ <number:text> $</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N279P1" style:volatile="true">
+ <number:text> $(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N279P2" style:volatile="true">
+ <number:text> $-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N279">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N279P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N279P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N279P2"/>
+ </number:text-style>
+ <number:number-style style:name="N283P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N283P1" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N283P2" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N283">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N283P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N283P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N283P2"/>
+ </number:text-style>
+ <number:number-style style:name="N285P0" style:volatile="true">
+ <number:text>WAHR</number:text>
+ </number:number-style>
+ <number:number-style style:name="N285P1" style:volatile="true">
+ <number:text>WAHR</number:text>
+ </number:number-style>
+ <number:number-style style:name="N285">
+ <number:text>FALSCH</number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N285P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N285P1"/>
+ </number:number-style>
+ <number:date-style style:name="N286">
+ <number:month number:style="long"/>
+ <number:text>.</number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:currency-style style:name="N288P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N288">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N288P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N290P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N290">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N290P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N291">
+ <number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N294P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N294P1" style:volatile="true">
+ <number:text> (</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N294P2" style:volatile="true">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N294">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N294P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N294P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N294P2"/>
+ </number:text-style>
+ <number:time-style style:name="N295">
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long" number:decimal-places="1"/>
+ </number:time-style>
+ <number:time-style style:name="N296">
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long"/>
+ </number:time-style>
+ <number:currency-style style:name="N298P0" style:volatile="true">
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N298">
+ <number:text>-</number:text>
+ <number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N298P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N299P0" style:volatile="true">
+ <number:text>\</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:number-style>
+ <number:number-style style:name="N299">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>\-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N299P0"/>
+ </number:number-style>
+ <number:currency-style style:name="N301P0" style:volatile="true">
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> </number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ </number:currency-style>
+ <number:currency-style style:name="N301">
+ <number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
+ <number:text> -</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N301P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N303P0" style:volatile="true">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N303">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N303P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N304">
+ <number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N305">
+ <number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:number-style style:name="N306P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N306">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N306P0"/>
+ </number:number-style>
+ <number:currency-style style:name="N307P0" style:volatile="true">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ </number:currency-style>
+ <number:currency-style style:name="N307">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N307P0"/>
+ </number:currency-style>
+ <number:time-style style:name="N308" number:truncate-on-overflow="false">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long"/>
+ </number:time-style>
+ <number:number-style style:name="N309P0" style:volatile="true">
+ <number:text>\</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ </number:number-style>
+ <number:number-style style:name="N309">
+ <number:text>\-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N309P0"/>
+ </number:number-style>
+ <number:date-style style:name="N10129" number:language="en" number:country="US">
+ <number:month/>
+ <number:text>/</number:text>
+ <number:day/>
+ <number:text>/</number:text>
+ <number:year number:style="long"/>
+ </number:date-style>
+ <number:date-style style:name="N10130" number:language="en" number:country="US">
+ <number:day/>
+ <number:text>-</number:text>
+ <number:month number:textual="true"/>
+ <number:text>-</number:text>
+ <number:year/>
+ </number:date-style>
+ <number:date-style style:name="N10131" number:language="en" number:country="US">
+ <number:day/>
+ <number:text>-</number:text>
+ <number:month number:textual="true"/>
+ </number:date-style>
+ <number:date-style style:name="N10132" number:language="en" number:country="US">
+ <number:month number:textual="true"/>
+ <number:text>-</number:text>
+ <number:year/>
+ </number:date-style>
+ <number:time-style style:name="N10133" number:language="en" number:country="US">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text> </number:text>
+ <number:am-pm/>
+ </number:time-style>
+ <number:time-style style:name="N10134" number:language="en" number:country="US">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long"/>
+ <number:text> </number:text>
+ <number:am-pm/>
+ </number:time-style>
+ <number:time-style style:name="N10135" number:language="en" number:country="US">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ </number:time-style>
+ <number:time-style style:name="N10136" number:language="en" number:country="US">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long"/>
+ </number:time-style>
+ <number:date-style style:name="N10137" number:language="en" number:country="US">
+ <number:month/>
+ <number:text>/</number:text>
+ <number:day/>
+ <number:text>/</number:text>
+ <number:year number:style="long"/>
+ <number:text> </number:text>
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ </number:date-style>
+ <number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10139" number:language="en" number:country="US">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10139P0"/>
+ </number:number-style>
+ <number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10141" number:language="en" number:country="US">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10141P0"/>
+ </number:number-style>
+ <number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10143" number:language="en" number:country="US">
+ <number:text>(</number:text>
+ <number:currency-symbol/>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10143P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10144" number:language="en" number:country="US">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>(</number:text>
+ <number:currency-symbol/>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10144P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N10146P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10146" number:language="en" number:country="US">
+ <number:text>(</number:text>
+ <number:currency-symbol/>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10146P0"/>
+ </number:currency-style>
+ <number:currency-style style:name="N10147P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10147" number:language="en" number:country="US">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>(</number:text>
+ <number:currency-symbol/>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10147P0"/>
+ </number:currency-style>
+ <number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10148" number:language="en" number:country="US">
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10148P0"/>
+ </number:number-style>
+ <number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10149" number:language="en" number:country="US">
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N10149P0"/>
+ </number:number-style>
+ <number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10153P1" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N10153P2" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:number-style>
+ <number:text-style style:name="N10153" number:language="en" number:country="US">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N10153P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N10153P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N10153P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:text>- </number:text>
+ </number:currency-style>
+ <number:text-style style:name="N10157" number:language="en" number:country="US">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N10157P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N10157P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N10157P2"/>
+ </number:text-style>
+ <number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N10161P1" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:number-style>
+ <number:number-style style:name="N10161P2" style:volatile="true" number:language="en" number:country="US">
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:text-style style:name="N10161" number:language="en" number:country="US">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N10161P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N10161P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N10161P2"/>
+ </number:text-style>
+ <number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:text>(</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text>)</number:text>
+ </number:currency-style>
+ <number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US">
+ <number:currency-symbol/>
+ <number:fill-character> </number:fill-character>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
+ <number:text> </number:text>
+ </number:currency-style>
+ <number:text-style style:name="N10165" number:language="en" number:country="US">
+ <number:text-content/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;0" style:apply-style-name="N10165P0"/>
+ <style:map style:condition="value()&lt;0" style:apply-style-name="N10165P1"/>
+ <style:map style:condition="value()=0" style:apply-style-name="N10165P2"/>
+ </number:text-style>
+ <number:number-style style:name="N10166" number:language="en" number:country="US">
+ <number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:number-style style:name="N10167" number:language="en" number:country="US">
+ <number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
+ </number:number-style>
+ <number:date-style style:name="N20114" number:language="de" number:country="DE">
+ <number:day number:style="long"/>
+ <number:text>. </number:text>
+ <number:month number:textual="true"/>
+ <number:text> </number:text>
+ <number:year/>
+ </number:date-style>
+ <number:date-style style:name="N20115" number:language="de" number:country="DE">
+ <number:day number:style="long"/>
+ <number:text>. </number:text>
+ <number:month number:textual="true"/>
+ </number:date-style>
+ <number:date-style style:name="N20116" number:language="de" number:country="DE">
+ <number:month number:textual="true"/>
+ <number:text> </number:text>
+ <number:year/>
+ </number:date-style>
+ <number:time-style style:name="N20117" number:language="de" number:country="DE">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text> </number:text>
+ <number:am-pm/>
+ </number:time-style>
+ <number:time-style style:name="N20118" number:language="de" number:country="DE">
+ <number:hours/>
+ <number:text>:</number:text>
+ <number:minutes number:style="long"/>
+ <number:text>:</number:text>
+ <number:seconds number:style="long"/>
+ <number:text> </number:text>
+ <number:am-pm/>
+ </number:time-style>
+ <number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N20120" number:language="de" number:country="DE">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20120P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N20121" number:language="de" number:country="DE">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20121P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N20123" number:language="de" number:country="DE">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20123P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ </number:number-style>
+ <number:number-style style:name="N20124" number:language="de" number:country="DE">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> </number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20124P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N20126" number:language="de" number:country="DE">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20126P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N20127" number:language="de" number:country="DE">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20127P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N20129" number:language="de" number:country="DE">
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20129P0"/>
+ </number:number-style>
+ <number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ </number:number-style>
+ <number:number-style style:name="N20130" number:language="de" number:country="DE">
+ <style:text-properties fo:color="#ff0000"/>
+ <number:text>-</number:text>
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
+ <number:text> €</number:text>
+ <style:map style:condition="value()&gt;=0" style:apply-style-name="N20130P0"/>
+ </number:number-style>
+ <style:style style:name="Default" style:family="table-cell"/>
+ <style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default">
+ <style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading">
+ <style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading">
+ <style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
+ </style:style>
+ <style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/>
+ <style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text">
+ <style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/>
+ <style:text-properties fo:color="#333333"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text">
+ <style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text">
+ <style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/>
+ </style:style>
+ <style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/>
+ <style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ccffcc"/>
+ <style:text-properties fo:color="#006600"/>
+ </style:style>
+ <style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ffffcc"/>
+ <style:text-properties fo:color="#996600"/>
+ </style:style>
+ <style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#ffcccc"/>
+ <style:text-properties fo:color="#cc0000"/>
+ </style:style>
+ <style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status">
+ <style:text-properties fo:color="#cc0000"/>
+ </style:style>
+ <style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status">
+ <style:table-cell-properties fo:background-color="#cc0000"/>
+ <style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#000000"/>
+ <style:text-properties fo:color="#ffffff"/>
+ </style:style>
+ <style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#808080"/>
+ <style:text-properties fo:color="#ffffff"/>
+ </style:style>
+ <style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent">
+ <style:table-cell-properties fo:background-color="#dddddd"/>
+ </style:style>
+ <style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default">
+ <style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="false" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties fo:background-color="#ff3333"/>
+ </style:style>
+ <style:style style:name="true" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties fo:background-color="#99ff66"/>
+ </style:style>
+ <draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/>
+ <loext:theme loext:name="Office">
+ <loext:theme-colors loext:name="LibreOffice">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#000000"/>
+ <loext:color loext:name="light2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="co1" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/>
+ </style:style>
+ <style:style style:name="co2" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="1.365cm"/>
+ </style:style>
+ <style:style style:name="co3" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/>
+ </style:style>
+ <style:style style:name="co4" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/>
+ </style:style>
+ <style:style style:name="co5" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="3.341cm"/>
+ </style:style>
+ <style:style style:name="co6" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="1.473cm"/>
+ </style:style>
+ <style:style style:name="co7" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="13.19cm"/>
+ </style:style>
+ <style:style style:name="co8" style:family="table-column">
+ <style:table-column-properties fo:break-before="auto" style:column-width="5.657cm"/>
+ </style:style>
+ <style:style style:name="ro1" style:family="table-row">
+ <style:table-row-properties style:row-height="1.614cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ro2" style:family="table-row">
+ <style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ro3" style:family="table-row">
+ <style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ro4" style:family="table-row">
+ <style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ro5" style:family="table-row">
+ <style:table-row-properties style:row-height="1.656cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
+ </style:style>
+ <style:style style:name="ta1" style:family="table" style:master-page-name="Default">
+ <style:table-properties table:display="true" style:writing-mode="lr-tb"/>
+ </style:style>
+ <number:number-style style:name="N2">
+ <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/>
+ </number:number-style>
+ <number:boolean-style style:name="N99">
+ <number:boolean/>
+ </number:boolean-style>
+ <style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties fo:wrap-option="wrap"/>
+ <style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
+ <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
+ <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
+ <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
+ <style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
+ <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
+ <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
+ <style:map style:condition="cell-content()=&quot;&quot;" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
+ </style:style>
+ <style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default">
+ <style:map style:condition="cell-content()=&quot;&quot;" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
+ </style:style>
+ <style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
+ <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ <style:map style:condition="cell-content()=&quot;&quot;" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
+ </style:style>
+ <style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
+ <style:map style:condition="cell-content()=&quot;&quot;" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
+ <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
+ </style:style>
+ <style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
+ <style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
+ </style:style>
+ <style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/>
+ <style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
+ <style:map style:condition="cell-content()=&quot;&quot;" style:apply-style-name="Default" style:base-cell-address="Sheet2.C2"/>
+ <style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.C2"/>
+ <style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.C2"/>
+ </style:style>
+ <style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default">
+ <style:table-cell-properties fo:wrap-option="wrap"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties style:writing-mode="lr-tb"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties style:writing-mode="lr-tb"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0">
+ <style:background-image/>
+ </style:header-footer-properties>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0">
+ <style:background-image/>
+ </style:header-footer-properties>
+ </style:footer-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Default" style:page-layout-name="pm1">
+ <style:header>
+ <text:p><text:sheet-name>???</text:sheet-name></text:p>
+ </style:header>
+ <style:header-left style:display="false"/>
+ <style:header-first style:display="false"/>
+ <style:footer>
+ <text:p>Page <text:page-number>1</text:page-number></text:p>
+ </style:footer>
+ <style:footer-left style:display="false"/>
+ <style:footer-first style:display="false"/>
+ </style:master-page>
+ <style:master-page style:name="Report" style:page-layout-name="pm2">
+ <style:header>
+ <style:region-left>
+ <text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p>
+ </style:region-left>
+ <style:region-right>
+ <text:p><text:date style:data-style-name="N2" text:date-value="2024-01-26">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="18:11:05.851000000">00:00:00</text:time></text:p>
+ </style:region-right>
+ </style:header>
+ <style:header-left style:display="false"/>
+ <style:header-first style:display="false"/>
+ <style:footer>
+ <text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p>
+ </style:footer>
+ <style:footer-left style:display="false"/>
+ <style:footer-first style:display="false"/>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:spreadsheet>
+ <table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/>
+ <table:table table:name="Sheet1" table:style-name="ta1">
+ <table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
+ <table:table-column table:style-name="co2" table:default-cell-style-name="ce5"/>
+ <table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
+ <table:table-row table:style-name="ro1">
+ <table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string">
+ <text:p>XLOOKUP Function</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="Default"/>
+ <table:table-cell/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell/>
+ <table:table-cell table:style-name="Default"/>
+ <table:table-cell/>
+ </table:table-row>
+ <table:table-row table:style-name="ro3">
+ <table:table-cell table:style-name="ce11" office:value-type="string" calcext:value-type="string">
+ <text:p>Result</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce14" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="3">
+ <table:table-cell table:number-columns-repeated="3"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro4">
+ <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string">
+ <text:p>Sheet</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string">
+ <text:p>Result</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string">
+ <text:p>Description</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.C2:.C201])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string">
+ <text:p>Simple XLOOKUP formulas with local references and values</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="20">
+ <table:table-cell/>
+ <table:table-cell table:style-name="ce17"/>
+ <table:table-cell/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="21">
+ <table:table-cell table:number-columns-repeated="3"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="3"/>
+ </table:table-row>
+ <calcext:conditional-formats>
+ <calcext:conditional-format calcext:target-range-address="Sheet1.B3:Sheet1.B50">
+ <calcext:condition calcext:apply-style-name="Default" calcext:value="=&quot;&quot;" calcext:base-cell-address="Sheet1.B3"/>
+ <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B3"/>
+ <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B3"/>
+ </calcext:conditional-format>
+ </calcext:conditional-formats>
+ </table:table>
+ <table:table table:name="Sheet2" table:style-name="ta1">
+ <table:table-column table:style-name="co5" table:number-columns-repeated="2" table:default-cell-style-name="Default"/>
+ <table:table-column table:style-name="co6" table:default-cell-style-name="ce10"/>
+ <table:table-column table:style-name="co7" table:default-cell-style-name="Default"/>
+ <table:table-column table:style-name="co8" table:default-cell-style-name="Default"/>
+ <table:table-column table:style-name="co4" table:number-columns-repeated="15" table:default-cell-style-name="Default"/>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Function</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Expected</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Correct</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>FunctionString</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Comment</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>XL-test</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Country</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Abr</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Prefix</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Asc</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Desc</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
+ <text:p>5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
+ <text:p>4</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="6"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G2];[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+55" calcext:value-type="string">
+ <text:p>+55</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+55</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A2]=[.B2]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A2])" office:value-type="string" office:string-value="=XLOOKUP(G2;H2:H11;J2:J11)" calcext:value-type="string">
+ <text:p>=XLOOKUP(G2;H2:H11;J2:J11)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Brazil</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>China</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>CN</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+86</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float">
+ <text:p>0</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="10" calcext:value-type="float">
+ <text:p>10</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;India&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
+ <text:p>+91</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+91</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A3]=[.B3]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="=XLOOKUP(&quot;India&quot;;H2:H11;J2:J11)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;India&quot;;H2:H11;J2:J11)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>India</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>IN</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+91</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
+ <text:p>9</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;INDIA&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
+ <text:p>+91</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+91</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A4]=[.B4]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="=XLOOKUP(&quot;INDIA&quot;;H2:H11;J2:J11)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;INDIA&quot;;H2:H11;J2:J11)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>United States</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>US</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="8" calcext:value-type="float">
+ <text:p>8</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Nigeria</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>NG2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>00234</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float">
+ <text:p>7</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];&quot;&quot;)">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A6]=[.B6]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;&quot;)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;&quot;)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Indonesia</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>ID</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+62</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
+ <text:p>4</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];-99)" office:value-type="float" office:value="-99" calcext:value-type="float">
+ <text:p>-99</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-99" calcext:value-type="float">
+ <text:p>-99</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A7]=[.B7]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;-99)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;-99)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Brazil</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>BR</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+55</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2" office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Ireland&quot;;[.H2:.H11];[.J2:.J11];&quot;Not here&quot;)" office:value-type="string" office:string-value="Not here" calcext:value-type="string">
+ <text:p>Not here</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Not here</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A8]=[.B8]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;Not here&quot;)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Ireland&quot;;H2:H11;J2:J11;&quot;Not here&quot;)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Pakistan</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>PK</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+92</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
+ <text:p>4</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;&quot;;[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="=XLOOKUP(&quot;&quot;;H2:H11;J2:J11)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;&quot;;H2:H11;J2:J11)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Nigeria</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>NG</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+234</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="7" calcext:value-type="float">
+ <text:p>7</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Nigeria&quot;;[.H2:.H11];[.J2:.J11];;;1)" office:value-type="string" office:string-value="00234" calcext:value-type="string">
+ <text:p>00234</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>00234</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A10]=[.B10]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Nigeria&quot;;H2:H11;J2:J11;;;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Nigeria&quot;;H2:H11;J2:J11;;;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Bangladesh</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>BD</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+880</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="8" calcext:value-type="float">
+ <text:p>8</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;Nigeria&quot;;[.H2:.H11];[.J2:.J11];;;-1)" office:value-type="string" office:string-value="+234" calcext:value-type="string">
+ <text:p>+234</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+234</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A11]=[.B11]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="=XLOOKUP(&quot;Nigeria&quot;;H2:H11;J2:J11;;;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;Nigeria&quot;;H2:H11;J2:J11;;;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Russia</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>RU</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+7</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
+ <text:p>9</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Mexico</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>MX</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>+52</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="10" calcext:value-type="float">
+ <text:p>10</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0" calcext:value-type="float">
+ <text:p>0</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4390;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Ned Lanning" calcext:value-type="string">
+ <text:p>Ned Lanning</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Ned Lanning</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float">
+ <text:p>8299</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>EmpID</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="4390" calcext:value-type="float">
+ <text:p>4390</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="8604" calcext:value-type="float">
+ <text:p>8604</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="8389" calcext:value-type="float">
+ <text:p>8389</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="4937" calcext:value-type="float">
+ <text:p>4937</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float">
+ <text:p>8299</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2643" calcext:value-type="float">
+ <text:p>2643</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="5243" calcext:value-type="float">
+ <text:p>5243</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="9693" calcext:value-type="float">
+ <text:p>9693</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1636" calcext:value-type="float">
+ <text:p>1636</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6703" calcext:value-type="float">
+ <text:p>6703</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Marketing" calcext:value-type="string">
+ <text:p>Marketing</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Marketing</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Name</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Ned Lanning</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Margo Hendrix</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Dianne Pugh</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Mia Arnold</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Jorge Fellows</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Rose Winters</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Carmela Hahn</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Delia Cochran</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Marguerite Cervantes</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string">
+ <text:p>Mia Arnold</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Mia Arnold</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Dept</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Marketing</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Sales</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Finance</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Operations</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Executive</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Sales</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Finance</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Marketing</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string">
+ <text:p>Operations</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Operations</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G18];[.I14:.R14];[.I15:.R16];&quot;ID not found&quot;)" office:value-type="string" office:string-value="ID not found" calcext:value-type="string">
+ <text:p>ID not found</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>ID not found</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;&quot;ID not found&quot;)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G18;I14:R14;I15:R16;&quot;ID not found&quot;)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="float" office:value="5678" calcext:value-type="float">
+ <text:p>5678</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="13"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="ID not found" calcext:value-type="string">
+ <text:p>ID not found</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>ID not found</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;&quot;ID not found&quot;)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G18;I14:R14;I15:R16;&quot;ID not found&quot;)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;&quot;;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=XLOOKUP(&quot;&quot;;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(&quot;&quot;;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=XLOOKUP(&quot;&quot;;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(&quot;&quot;;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A22]=[.B22]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="15"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A23]=[.B23]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="15"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;-1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A24]=[.B24]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A25]=[.B25]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Earlene McCartney</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A26]=[.B26]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Accounting</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A27]=[.B27]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;1)" office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A29]=[.B29]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="float" office:value="46523" calcext:value-type="float">
+ <text:p>46523</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>tax rate</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>max income</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;2)" office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" office:value-type="string" calcext:value-type="string">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="0.1" calcext:value-type="float">
+ <text:p>0,1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-9700" calcext:value-type="float">
+ <text:p>-9700</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;-1;2)" office:value-type="float" office:value="0.22" calcext:value-type="float">
+ <text:p>0,22</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float">
+ <text:p>0,22</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A31]=[.B31]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float">
+ <text:p>0,22</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="39475" calcext:value-type="float">
+ <text:p>39475</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;2;2)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;2;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(G29;I30:I35;H30:H35;;2;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="84200" calcext:value-type="float">
+ <text:p>84200</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="float" office:value="0.32" calcext:value-type="float">
+ <text:p>0,32</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="160726" calcext:value-type="float">
+ <text:p>160726</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="float" office:value="0.35" calcext:value-type="float">
+ <text:p>0,35</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="204100" calcext:value-type="float">
+ <text:p>204100</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="float" office:value="0.37" calcext:value-type="float">
+ <text:p>0,37</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="510300" calcext:value-type="float">
+ <text:p>510300</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="25000" calcext:value-type="float">
+ <text:p>25000</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float">
+ <text:p>25000</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A37]=[.B37]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
+ <text:p>=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Q1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>income stmnt</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Total sales</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cost of sales</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>gross profit</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>depriciation</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>interest</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>earnings before tax</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>tax</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>net profit</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>profit [%]</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.S37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="19342" calcext:value-type="float">
+ <text:p>19342</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float">
+ <text:p>19342</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A38]=[.B38]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
+ <text:p>=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Q1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="50000" calcext:value-type="float">
+ <text:p>50000</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-25000" calcext:value-type="float">
+ <text:p>-25000</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float">
+ <text:p>25000</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-899" calcext:value-type="float">
+ <text:p>-899</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-513" calcext:value-type="float">
+ <text:p>-513</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="23588" calcext:value-type="float">
+ <text:p>23588</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-4246" calcext:value-type="float">
+ <text:p>-4246</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float">
+ <text:p>19342</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float">
+ <text:p>0,293</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.T37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="0.293" calcext:value-type="float">
+ <text:p>0,293</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float">
+ <text:p>0,293</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A39]=[.B39]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
+ <text:p>=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Q2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="78200" calcext:value-type="float">
+ <text:p>78200</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-42050" calcext:value-type="float">
+ <text:p>-42050</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="36150" calcext:value-type="float">
+ <text:p>36150</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-791" calcext:value-type="float">
+ <text:p>-791</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-853" calcext:value-type="float">
+ <text:p>-853</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="34506" calcext:value-type="float">
+ <text:p>34506</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-6211" calcext:value-type="float">
+ <text:p>-6211</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="28295" calcext:value-type="float">
+ <text:p>28295</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.278" calcext:value-type="float">
+ <text:p>0,278</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Q3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="89500" calcext:value-type="float">
+ <text:p>89500</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-59450" calcext:value-type="float">
+ <text:p>-59450</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="30050" calcext:value-type="float">
+ <text:p>30050</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-202" calcext:value-type="float">
+ <text:p>-202</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-150" calcext:value-type="float">
+ <text:p>-150</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="29698" calcext:value-type="float">
+ <text:p>29698</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-5346" calcext:value-type="float">
+ <text:p>-5346</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="24352" calcext:value-type="float">
+ <text:p>24352</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.234" calcext:value-type="float">
+ <text:p>0,234</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.$H14:.$R14];[.$H$15:.$R$16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string">
+ <text:p>Mia Arnold</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Mia Arnold</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A41]=[.B41]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Q4</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="91250" calcext:value-type="float">
+ <text:p>91250</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-60450" calcext:value-type="float">
+ <text:p>-60450</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="30800" calcext:value-type="float">
+ <text:p>30800</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-412" calcext:value-type="float">
+ <text:p>-412</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-956" calcext:value-type="float">
+ <text:p>-956</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="29432" calcext:value-type="float">
+ <text:p>29432</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-5298" calcext:value-type="float">
+ <text:p>-5298</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="24134" calcext:value-type="float">
+ <text:p>24134</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.276" calcext:value-type="float">
+ <text:p>0,276</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string">
+ <text:p>Operations</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Operations</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A42]=[.B42]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string">
+ <text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Total</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="308950" calcext:value-type="float">
+ <text:p>308950</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-186950" calcext:value-type="float">
+ <text:p>-186950</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="122000" calcext:value-type="float">
+ <text:p>122000</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-2304" calcext:value-type="float">
+ <text:p>-2304</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="-2472" calcext:value-type="float">
+ <text:p>-2472</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="117224" calcext:value-type="float">
+ <text:p>117224</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="-21101" calcext:value-type="float">
+ <text:p>-21101</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="96123" calcext:value-type="float">
+ <text:p>96123</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.27025" calcext:value-type="float">
+ <text:p>0,27025</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro5">
+ <table:table-cell table:formula="of:=SUM(COM.MICROSOFT.XLOOKUP([.G44];[.H45:.H49];[.K45:.K49]):COM.MICROSOFT.XLOOKUP([.G45];[.H45:.H49];[.K45:.K49]))" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:502</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="11070" calcext:value-type="float">
+ <text:p>11070</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))" calcext:value-type="string">
+ <text:p>=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce12" office:value-type="string" calcext:value-type="string">
+ <text:p>XLOOKUP should (in this case) return a range (TODO: Missing feature from Calc: Evaluate Formula)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Grape</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>product</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>qty</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>price</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>total</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Banana</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Apple</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="23" calcext:value-type="float">
+ <text:p>23</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.52" calcext:value-type="float">
+ <text:p>0,52</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=[.I45]*[.J45]" office:value-type="float" office:value="11.96" calcext:value-type="float">
+ <text:p>11,96</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Grape</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="98" calcext:value-type="float">
+ <text:p>98</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.77" calcext:value-type="float">
+ <text:p>0,77</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=[.I46]*[.J46]" office:value-type="float" office:value="75.46" calcext:value-type="float">
+ <text:p>75,46</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Pear</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="75" calcext:value-type="float">
+ <text:p>75</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
+ <text:p>0,24</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=[.I47]*[.J47]" office:value-type="float" office:value="18" calcext:value-type="float">
+ <text:p>18</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Banana</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="95" calcext:value-type="float">
+ <text:p>95</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.18" calcext:value-type="float">
+ <text:p>0,18</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=[.I48]*[.J48]" office:value-type="float" office:value="17.1" calcext:value-type="float">
+ <text:p>17,1</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Cherry</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="42" calcext:value-type="float">
+ <text:p>42</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="0.16" calcext:value-type="float">
+ <text:p>0,16</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=[.I49]*[.J49]" office:value-type="float" office:value="6.72" calcext:value-type="float">
+ <text:p>6,72</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="9"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;B&quot;;[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:504</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>err:504</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=XLOOKUP(&quot;B&quot;;H51:H53;K51:K52)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;B&quot;;H51:H53;K51:K52)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>D</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:504</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>err:504</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;H51:H53;K51:K52)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;H51:H53;K51:K52)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>B</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>E</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;E&quot;;[.H51:.I53];[.K51:.L53])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:504</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>err:504</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="=XLOOKUP(&quot;E&quot;;H51:I53;K51:L53)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;E&quot;;H51:I53;K51:L53)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>C</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>F</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>f</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;E&quot;;[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:504</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>err:504</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="=XLOOKUP(&quot;E&quot;;H51:I53;K51:K53)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;E&quot;;H51:I53;K51:K53)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>Err:504</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>err:504</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;H51:I53;K51:K53)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;H51:I53;K51:K53)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A58]=[.B58]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
+ <text:p>5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a6</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A59]=[.B59]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
+ <text:p>5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b5</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A60]=[.B60]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A61]=[.B61]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="5.2" calcext:value-type="float">
+ <text:p>5,2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>D5.2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d2</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A62]=[.B62]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e1</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A63]=[.B63]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;-1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A64]=[.B64]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A65]=[.B65]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;0;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A66]=[.B66]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;-1;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A67]=[.B67]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;1;2)" office:value-type="string" office:string-value="D5.2" calcext:value-type="string">
+ <text:p>D5.2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>D5.2</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A68]=[.B68]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;2;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A69]=[.B69]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;0;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A70]=[.B70]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;-1;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A71]=[.B71]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;1;-2)" office:value-type="string" office:string-value="b5" calcext:value-type="string">
+ <text:p>b5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b5</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A72]=[.B72]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;2;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A73]=[.B73]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A74]=[.B74]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
+ <text:p>5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
+ <text:p>6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A75]=[.B75]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d6</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e2</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a5</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A76]=[.B76]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b3</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A77]=[.B77]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A79]=[.B79]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;0;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>E</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>F</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aA</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>fF</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A80]=[.B80]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;-1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>B</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>C</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>E</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bB</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A81]=[.B81]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A81])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>C</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>C</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cA</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;b?b&quot;;[.I$84:.I$88];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="eB" calcext:value-type="string">
+ <text:p>eB</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eB</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A82]=[.B82]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A82])" office:value-type="string" office:string-value="=XLOOKUP(&quot;b?b&quot;;I$84:I$88;L$79:L$83;;2;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;b?b&quot;;I$84:I$88;L$79:L$83;;2;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>E</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>F</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>B</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>dF</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bB</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.I$79:.I$83];[.L$79:.L$83];;0;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A83]=[.B83]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;0;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;0;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>F</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>B</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>fF</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eB</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aA</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="7"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.I$79:.I$83];[.L$79:.L$83];;-1;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A84]=[.B84]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;-1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;-1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eEe</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.I$79:.I$83];[.L$79:.L$83];;1;-1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A85]=[.B85]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;I$79:I$83;L$79:L$83;;1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cCc</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.I$79:.I$83];[.L$79:.L$83];;2;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A86]=[.B86]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;2;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;I$79:I$83;L$79:L$83;;2;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aAa</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H$79:.H$83];[.K$79:.K$83];;0;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A87]=[.B87]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;H$79:H$83;K$79:K$83;;0;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;H$79:H$83;K$79:K$83;;0;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>fFf</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.H$79:.H$83];[.K$79:.K$83];;-1;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A88]=[.B88]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;H$79:H$83;K$79:K$83;;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;H$79:H$83;K$79:K$83;;-1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bBb</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.H$79:.H$83];[.K$79:.K$83];;1;2)" office:value-type="string" office:string-value="eE" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A89]=[.B89]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;H$79:H$83;K$79:K$83;;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;H$79:H$83;K$79:K$83;;1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H$79:.H$83];[.K$79:.K$83];;2;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A90]=[.B90]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;H$79:H$83;K$79:K$83;;2;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;H$79:H$83;K$79:K$83;;2;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.J$79:.J$83];[.M$79:.M$83];;0;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A91]=[.B91]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A91])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;J$79:J$83;M$79:M$83;;0;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;J$79:J$83;M$79:M$83;;0;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.J$79:.J$83];[.M$79:.M$83];;-1;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A92]=[.B92]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A92])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;J$79:J$83;M$79:M$83;;-1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;J$79:J$83;M$79:M$83;;-1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.J$79:.J$83];[.M$79:.M$83];;1;-2)" office:value-type="string" office:string-value="eE" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A93]=[.B93]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;J$79:J$83;M$79:M$83;;1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;J$79:J$83;M$79:M$83;;1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.J$79:.J$83];[.M$79:.M$83];;2;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A94]=[.B94]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A94])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;J$79:J$83;M$79:M$83;;2;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;J$79:J$83;M$79:M$83;;2;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C&quot;;[.H$95:.L$95];[.H$96:.L$96];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A95]=[.B95]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A95])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C&quot;;H$95:L$95;H$96:L$96;;0;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C&quot;;H$95:L$95;H$96:L$96;;0;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>E</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>C</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>F</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>B</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.H$95:.L$95];[.H$96:.L$96];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A96]=[.B96]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;H$95:L$95;H$96:L$96;;-1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;H$95:L$95;H$96:L$96;;-1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>cA</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>dF</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>eB</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="8"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;D&quot;;[.H$95:.L$95];[.H$96:.L$96];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A97]=[.B97]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A97])" office:value-type="string" office:string-value="=XLOOKUP(&quot;D&quot;;H$95:L$95;H$96:L$96;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;D&quot;;H$95:L$95;H$96:L$96;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="14"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;C?&quot;;[.H$95:.L$95];[.H$96:.L$96];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="=XLOOKUP(&quot;C?&quot;;H$95:L$95;H$96:L$96;;2;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;C?&quot;;H$95:L$95;H$96:L$96;;2;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="4"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>LookCol</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>SearchCol</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>SearchValue</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>LookRow</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>w</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>q</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;c&quot;;[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A100]=[.B100]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="=XLOOKUP(&quot;c&quot;;I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;c&quot;;I$79:I$83;L$79:L$83;;0;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>SearchhRow</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="2"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;d&quot;;[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>bC</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A101]=[.B101]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="=XLOOKUP(&quot;d&quot;;I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;d&quot;;I$79:I$83;L$79:L$83;;-1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
+ <text:p>3</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>b</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;d&quot;;[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>aE</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A102]=[.B102]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="=XLOOKUP(&quot;d&quot;;I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;d&quot;;I$79:I$83;L$79:L$83;;1;1)</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>?</text:p>
+ </table:table-cell>
+ <table:table-cell/>
+ <table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
+ <text:p>1</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>c</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(&quot;f?&quot;;[.I$79:.I$83];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="=XLOOKUP(&quot;f?&quot;;I$79:I$83;L$79:L$83;;2;1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(&quot;f?&quot;;I$79:I$83;L$79:L$83;;2;1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>w</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>d</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.H$99:.H$109];[.I$99:.I$109];;-1;-1)" office:value-type="string" office:string-value="g" calcext:value-type="string">
+ <text:p>g</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>g</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A104]=[.B104]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A104])" office:value-type="string" office:string-value="=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>q</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.N$99:.R$99];[.N$100:.R$100];;-1;-1)" office:value-type="string" office:string-value="a" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>a</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A105]=[.B105]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A105])" office:value-type="string" office:string-value="=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)" calcext:value-type="string">
+ <text:p>=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
+ <text:p>5</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>f</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;1;2)" office:value-type="string" office:string-value="BR" calcext:value-type="string">
+ <text:p>BR</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>BR</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A106]=[.B106]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A106])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
+ <text:p>2</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>g</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.L$1:.L$12];[.I$1:.I$12];0;1;-2)" office:value-type="string" office:string-value="BR" calcext:value-type="string">
+ <text:p>BR</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>BR</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A107]=[.B107]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A107])" office:value-type="string" office:string-value="=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
+ <text:p>9</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>h</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;-1;2)" office:value-type="string" office:string-value="ID" calcext:value-type="string">
+ <text:p>ID</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>ID</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A108]=[.B108]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A108])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>e</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>I</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.L$1:.L$12];[.I$1:.I$12];0;-1;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string">
+ <text:p>PK</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>PK</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A109]=[.B109]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A109])" office:value-type="string" office:string-value="=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="3"/>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>Russia</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>j</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="11"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.N1];[.L$1:.L$12];[.I$1:.I$12];0;0;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string">
+ <text:p>PK</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>PK</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=[.A110]=[.B110]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A110])" office:value-type="string" office:string-value="=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.K$1:.K$12];[.I$1:.I$12];;0;2)" office:value-type="string" office:string-value="" calcext:value-type="error">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell office:value-type="string" calcext:value-type="string">
+ <text:p>#N/A</text:p>
+ </table:table-cell>
+ <table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
+ <text:p>IGAZ</text:p>
+ </table:table-cell>
+ <table:table-cell table:formula="of:=FORMULA([.A111])" office:value-type="string" office:string-value="=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)" calcext:value-type="string">
+ <text:p>=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)</text:p>
+ </table:table-cell>
+ <table:table-cell table:number-columns-repeated="16"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="90">
+ <table:table-cell table:number-columns-repeated="2"/>
+ <table:table-cell table:style-name="ce18"/>
+ <table:table-cell table:number-columns-repeated="17"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2" table:number-rows-repeated="1048374">
+ <table:table-cell table:number-columns-repeated="20"/>
+ </table:table-row>
+ <table:table-row table:style-name="ro2">
+ <table:table-cell table:number-columns-repeated="20"/>
+ </table:table-row>
+ <calcext:conditional-formats>
+ <calcext:conditional-format calcext:target-range-address="Sheet2.C2:Sheet2.C201">
+ <calcext:condition calcext:apply-style-name="Default" calcext:value="=&quot;&quot;" calcext:base-cell-address="Sheet2.C2"/>
+ <calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.C2"/>
+ <calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.C2"/>
+ </calcext:conditional-format>
+ </calcext:conditional-formats>
+ </table:table>
+ <table:named-expressions/>
+ </office:spreadsheet>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index e300b4b5ccbb..39ccb3496def 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2922,6 +2922,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists)
"SHEETS",
"STYLE",
"VLOOKUP",
+ "XLOOKUP",
nullptr
};
diff --git a/sc/qa/unit/ucalc_sort.cxx b/sc/qa/unit/ucalc_sort.cxx
index f2cd7d2d149b..17e244462f7a 100644
--- a/sc/qa/unit/ucalc_sort.cxx
+++ b/sc/qa/unit/ucalc_sort.cxx
@@ -1972,8 +1972,8 @@ class TestQueryIterator
typedef ScQueryCellIteratorBase< ScQueryCellIteratorAccess::Direct, ScQueryCellIteratorType::Generic > Base;
public:
TestQueryIterator( ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
- const ScQueryParam& aParam, bool bMod )
- : Base( rDocument, rContext, nTable, aParam, bMod )
+ const ScQueryParam& aParam, bool bMod, bool bReverse = false )
+ : Base( rDocument, rContext, nTable, aParam, bMod, bReverse )
{
}
using Base::BinarySearch; // make public
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index e1fafe145d53..a9c123d89768 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -675,6 +675,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_CELL, ENTRY(SC_OPCODE_CELL_ARY), 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ZELLE, 2, { 0, 1 }, 0 },
{ SC_OPCODE_ISPMT, ENTRY(SC_OPCODE_ISPMT_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_ISPMT, 4, { 0, 0, 0, 0 }, 0 },
{ SC_OPCODE_HYPERLINK, ENTRY(SC_OPCODE_HYPERLINK_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_HYPERLINK, 2, { 0, 1 }, 0 },
+ { SC_OPCODE_X_LOOKUP, ENTRY(SC_OPCODE_X_LOOKUP_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_XLOOKUP_MS, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
{ SC_OPCODE_GET_PIVOT_DATA, ENTRY(SC_OPCODE_GET_PIVOT_DATA_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_GETPIVOTDATA, VAR_ARGS+2, { 0, 0, 1 }, 0 },
{ SC_OPCODE_EUROCONVERT, ENTRY(SC_OPCODE_EUROCONVERT_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_EUROCONVERT, 5, { 0, 0, 0, 1, 1 }, 0 },
{ SC_OPCODE_NUMBERVALUE, ENTRY(SC_OPCODE_NUMBERVALUE_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_NUMBERVALUE, 3, { 0, 1, 1 }, 0 },
diff --git a/sc/source/core/data/queryiter.cxx b/sc/source/core/data/queryiter.cxx
index 6c5635bd51b6..39b86fe173c0 100644
--- a/sc/source/core/data/queryiter.cxx
+++ b/sc/source/core/data/queryiter.cxx
@@ -60,16 +60,20 @@
template< ScQueryCellIteratorAccess accessType, ScQueryCellIteratorType queryType >
ScQueryCellIteratorBase< accessType, queryType >::ScQueryCellIteratorBase(ScDocument& rDocument,
- ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod )
- : AccessBase( rDocument, rContext, rParam )
+ ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod, bool bReverse )
+ : AccessBase( rDocument, rContext, rParam, bReverse )
, nStopOnMismatch( nStopOnMismatchDisabled )
, nTestEqualCondition( nTestEqualConditionDisabled )
, bAdvanceQuery( false )
, bIgnoreMismatchOnLeadingStrings( false )
+ , bSortedBinarySearch( false )
+ , bXLookUp( false )
+ , nBestFitCol(SCCOL_MAX)
+ , nBestFitRow(SCROW_MAX)
{
nTab = nTable;
- nCol = maParam.nCol1;
- nRow = maParam.nRow1;
+ nCol = !bReverse ? maParam.nCol1 : maParam.nCol2;
+ nRow = !bReverse ? maParam.nRow1 : maParam.nRow2;
SCSIZE i;
if (!bMod) // Or else it's already inserted
return;
@@ -127,7 +131,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
bool bNextColumn = maCurPos.first == pCol->maCells.end();
if (!bNextColumn)
{
- if (nRow > maParam.nRow2)
+ if ((!mbReverseSearch && nRow > maParam.nRow2) || (mbReverseSearch && nRow < maParam.nRow1))
bNextColumn = true;
}
@@ -135,9 +139,18 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
{
do
{
- ++nCol;
- if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount())
- return;
+ if (!mbReverseSearch)
+ {
+ ++nCol;
+ if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount())
+ return;
+ }
+ else
+ {
+ --nCol;
+ if (nCol < maParam.nCol1 || nCol < static_cast<SCCOL>(0))
+ return;
+ }
if ( bAdvanceQuery )
{
AdvanceQueryParamEntryField();
@@ -169,12 +182,12 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
// ValidQuery().
if(HandleItemFound())
return;
- IncPos();
+ !mbReverseSearch ? IncPos() : DecPos();
continue;
}
else
{
- IncBlock();
+ !mbReverseSearch ? IncBlock() : DecBlock();
continue;
}
}
@@ -182,7 +195,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
ScRefCellValue aCell = sc::toRefCell(maCurPos.first, maCurPos.second);
if (bAllStringIgnore && aCell.hasString())
- IncPos();
+ !mbReverseSearch ? IncPos() : DecPos();
else
{
if ( queryEvaluator.ValidQuery( nRow,
@@ -192,9 +205,54 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
nTestEqualCondition |= nTestEqualConditionMatched;
if ( aCell.isEmpty())
return;
- if( HandleItemFound())
+
+ // XLookUp: Forward/backward search for best fit value, except if we have an exact match
+ if (bXLookUp && !bSortedBinarySearch && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_GREATER_EQUAL) &&
+ (nBestFitCol != nCol || nBestFitRow != nRow))
+ {
+ bool bNumSearch = rItem.meType == ScQueryEntry::ByValue && aCell.hasNumeric();
+ bool bStringSearch = rItem.meType == ScQueryEntry::ByString && aCell.hasString();
+ if (bNumSearch || bStringSearch)
+ {
+ if (nTestEqualCondition == nTestEqualConditionFulfilled || (nBestFitCol == SCCOL_MAX && nBestFitRow == SCROW_MAX))
+ HandleBestFitItemFound(nCol, nRow);
+ else
+ {
+ ScAddress aBFAddr(nBestFitCol, nBestFitRow, nTab);
+ ScRefCellValue aBFCell(rDoc, aBFAddr);
+ ScQueryParam aParamTmp(maParam);
+ ScQueryEntry& rEntryTmp = aParamTmp.GetEntry(0);
+
+ if (rEntry.eOp == SC_LESS_EQUAL)
+ rEntryTmp.eOp = SC_GREATER;
+ else if (rEntry.eOp == SC_GREATER_EQUAL)
+ rEntryTmp.eOp = SC_LESS;
+
+ ScQueryEntry::Item& rItemTmp = rEntryTmp.GetQueryItem();
+ if (bNumSearch)
+ rItemTmp.mfVal = aBFCell.getValue();
+ else if (bStringSearch)
+ rItemTmp.maString = svl::SharedString(aBFCell.getString(&rDoc));
+
+ ScQueryEvaluator queryEvaluatorTmp(rDoc, *rDoc.maTabs[nTab], aParamTmp, &mrContext, nullptr);
+ if (queryEvaluatorTmp.ValidQuery(nRow, (nCol == static_cast<SCCOL>(nFirstQueryField) ? &aCell : nullptr)))
+ HandleBestFitItemFound(nCol, nRow);
+ else
+ {
+ !mbReverseSearch ? IncPos() : DecPos();
+ continue;
+ }
+ }
+ }
+ else
+ {
+ !mbReverseSearch ? IncPos() : DecPos();
+ continue;
+ }
+ }
+ if (HandleItemFound())
return;
- IncPos();
+ !mbReverseSearch ? IncPos() : DecPos();
continue;
}
else if ( nStopOnMismatch )
@@ -213,7 +271,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
{
if (aCell.hasString())
{
- IncPos();
+ !mbReverseSearch ? IncPos() : DecPos();
bStop = false;
}
else
@@ -228,7 +286,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
}
}
else
- IncPos();
+ !mbReverseSearch ? IncPos() : DecPos();
}
bFirstStringIgnore = false;
}
@@ -279,7 +337,8 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos()
if( BinarySearch( nCol ))
lastRow = nRow;
}
- AccessBase::InitPosFinish( beforeRow, lastRow );
+ bool bFirstMatch = (bXLookUp && op != SC_EQUAL);
+ AccessBase::InitPosFinish(beforeRow, lastRow, bFirstMatch);
}
}
@@ -292,11 +351,13 @@ void ScQueryCellIteratorBase< accessType, queryType >::AdvanceQueryParamEntryFie
ScQueryEntry& rEntry = maParam.GetEntry( j );
if ( rEntry.bDoQuery )
{
- if ( rEntry.nField < rDoc.MaxCol() )
+ if (!mbReverseSearch && rEntry.nField < rDoc.MaxCol())
rEntry.nField++;
+ else if (mbReverseSearch && rEntry.nField > static_cast<SCCOLROW>(0))
+ rEntry.nField--;
else
{
- assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL");
+ assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL || --rEntry.nField < 0");
}
}
else
@@ -670,14 +731,25 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
nFoundCol = rDoc.MaxCol()+1;
nFoundRow = rDoc.MaxRow()+1;
- SetStopOnMismatch( true ); // assume sorted keys
+
+ if (bXLookUp && !bSortedBinarySearch)
+ SetStopOnMismatch( false ); // assume not sorted keys for XLookup
+ else
+ SetStopOnMismatch( true ); // assume sorted keys
+
SetTestEqualCondition( true );
bIgnoreMismatchOnLeadingStrings = true;
+
bool bLiteral = maParam.eSearchType == utl::SearchParam::SearchType::Normal &&
maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByString;
bool bBinary = maParam.bByRow &&
(bLiteral || maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByValue) &&
(maParam.GetEntry(0).eOp == SC_LESS_EQUAL || maParam.GetEntry(0).eOp == SC_GREATER_EQUAL);
+
+ // assume not sorted properly if we are using XLookup with forward or backward search
+ if (bBinary && bXLookUp && !bSortedBinarySearch)
+ bBinary = false;
+
bool bFound = false;
if (bBinary)
{
@@ -768,9 +840,10 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
}
}
}
- if ( IsEqualConditionFulfilled() )
+ if ( IsEqualConditionFulfilled() && !bXLookUp )
{
- // Position on last equal entry.
+ // Position on last equal entry, except for XLOOKUP,
+ // which looking for the first equal entry
SCSIZE nEntries = maParam.GetEntryCount();
for ( SCSIZE j = 0; j < nEntries; j++ )
{
@@ -861,19 +934,27 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >
::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument,
- ScInterpreterContext& rContext, const ScQueryParam& rParam )
+ ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch )
: maParam( rParam )
, rDoc( rDocument )
, mrContext( rContext )
+ , mbReverseSearch( bReverseSearch )
{
// coverity[uninit_member] - this just contains data, subclass will initialize some of it
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::InitPos()
{
- nRow = maParam.nRow1;
- if (maParam.bHasHeader && maParam.bByRow)
- ++nRow;
+ if (!mbReverseSearch)
+ {
+ nRow = maParam.nRow1;
+ if (maParam.bHasHeader && maParam.bByRow)
+ ++nRow;
+ }
+ else
+ {
+ nRow = maParam.nRow2;
+ }
const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
maCurPos = rCol.maCells.position(nRow);
}
@@ -891,6 +972,19 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc
IncBlock();
}
+void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecPos()
+{
+ if (maCurPos.second > 0)
+ {
+ // Move within the same block.
+ --maCurPos.second;
+ --nRow;
+ }
+ else
+ // Move to the prev block.
+ DecBlock();
+}
+
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::IncBlock()
{
++maCurPos.first;
@@ -899,6 +993,26 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc
nRow = maCurPos.first->position;
}
+void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecBlock()
+{
+ // Set current position to the last possible row.
+ const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
+ if (maCurPos.first != rCol.maCells.begin())
+ {
+ --maCurPos.first;
+ maCurPos.second = maCurPos.first->size - 1;
+
+ nRow = maCurPos.first->position + maCurPos.second;
+ }
+ else
+ {
+ // No rows, set to end. This will make PerformQuery() go to next column.
+ nRow = maParam.nRow1 - 1;
+ maCurPos.first = rCol.maCells.end();
+ maCurPos.second = 0;
+ }
+}
+
/**
* This class sequentially indexes non-empty cells in order, from the top of
* the block where the start row position is, to the bottom of the block
@@ -1073,10 +1187,11 @@ ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::MakeBina
ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument,
- ScInterpreterContext& rContext, const ScQueryParam& rParam )
+ ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch )
: maParam( rParam )
, rDoc( rDocument )
, mrContext( rContext )
+ , mbReverseSearch( bReverseSearch )
{
// coverity[uninit_member] - this just contains data, subclass will initialize some of it
}
@@ -1101,7 +1216,7 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >::InitPosFinish(
- SCROW beforeRow, SCROW lastRow )
+ SCROW beforeRow, SCROW lastRow, bool bFirstMatch )
{
pColumn = &rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
if(lastRow >= 0)
@@ -1110,7 +1225,10 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
sortedCachePosLast = sortedCache->indexForRow(lastRow);
if(sortedCachePos <= sortedCachePosLast)
{
- nRow = sortedCache->rowForIndex(sortedCachePos);
+ if (!bFirstMatch)
+ nRow = sortedCache->rowForIndex(sortedCachePos);
+ else
+ nRow = sortedCache->rowForIndex(sortedCachePosLast);
maCurPos = pColumn->maCells.position(nRow);
return;
}
@@ -1322,7 +1440,10 @@ template< ScQueryCellIteratorAccess accessType >
bool ScQueryCellIterator< accessType >::GetFirst()
{
assert(nTab < rDoc.GetTableCount() && "index out of bounds, FIX IT");
- nCol = maParam.nCol1;
+ if (!mbReverseSearch)
+ nCol = maParam.nCol1;
+ else
+ nCol = maParam.nCol2;
InitPos();
return GetThis();
}
@@ -1330,7 +1451,10 @@ bool ScQueryCellIterator< accessType >::GetFirst()
template< ScQueryCellIteratorAccess accessType >
bool ScQueryCellIterator< accessType >::GetNext()
{
- IncPos();
+ if (!mbReverseSearch)
+ IncPos();
+ else
+ DecPos();
if ( nStopOnMismatch )
nStopOnMismatch = nStopOnMismatchEnabled;
if ( nTestEqualCondition )
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 64b9a8ae5b2c..e577a5e2bf8a 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -30,6 +30,7 @@
#include <token.hxx>
#include <math.hxx>
#include <kahan.hxx>
+#include <queryiter.hxx>
#include "parclass.hxx"
#include <map>
@@ -55,6 +56,57 @@ struct ScInterpreterContext;
class ScJumpMatrix;
struct ScRefCellValue;
+enum MatchMode{ exactorNA=0, exactorS=-1, exactorG=1, wildcard=2 };
+enum SearchMode{ searchfwd=1, searchrev=-1, searchbasc=2, searchbdesc=-2 };
+
+struct VectorSearchArguments
+{
+ // struct contains the contents of the function arguments
+ // Struct owner, ScMatch or ScXLookup
+ bool isXLookup = false;
+
+ // match mode (common, enum values are from XLOOKUP)
+ // optional 5th argument to set match mode
+ // 0 - Exact match. If none found, return #N/A. (MATCH value 0)
+ // -1 - Exact match. If none found, return the next smaller item. (MATCH value 1)
+ // 1 - Exact match. If none found, return the next larger item. (MATCH value -1)
+ // 2 - A wildcard match where *, ?, and ~ have special meaning. (XLOOKUP only)
+ // TODO : is this enum needed, or do we solely use rEntry.eOp ?
+ MatchMode eMatchMode = exactorG;
+
+ // value to be searched for (common)
+ SCCOL nCol1 = 0;
+ SCROW nRow1 = 0;
+ SCTAB nTab1 = 0;
+ SCCOL nCol2 = 0;
+ SCROW nRow2 = 0;
+ SCTAB nTab2 = 0;
+ ScMatrixRef pMatSrc;
+ bool isStringSearch = true;
+ double fSearchVal;
+ svl::SharedString sSearchStr;
+ bool bVLookup;
+
+ // search mode (only XLOOKUP has all 4 options, MATCH only uses searchfwd)
+ // optional 6th argument to set search mode
+ // 1 - Perform a search starting at the first item. This is the default.
+ // -1 - Perform a reverse search starting at the last item.
+ // 2 - Perform a binary search that relies on lookup_array being sorted in ascending order.
+ // If not sorted, invalid results will be returned.
+ // -2 - Perform a binary search that relies on lookup_array being sorted in descending order.
+ // If not sorted, invalid results will be returned.
+ //
+ SearchMode eSearchMode = searchfwd;
+
+ // search variables
+ SCSIZE nHitIndex = 0;
+ SCSIZE nBestFit = SCSIZE_MAX;
+
+ // result
+ int nIndex = -1;
+ bool isResultNA = false;
+};
+
namespace sc {
struct CompareOptions;
@@ -234,6 +286,10 @@ private:
bool IsTableOpInRange( const ScRange& );
sal_uInt32 GetCellNumberFormat( const ScAddress& rPos, ScRefCellValue& rCell );
double ConvertStringToValue( const OUString& );
+ bool SearchVectorForValue( VectorSearchArguments& );
+ bool SearchMatrixForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry&, ScQueryEntry::Item& );
+ bool SearchRangeForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry& );
+
public:
static double ScGetGCD(double fx, double fy);
/** For matrix back calls into the current interpreter.
@@ -485,8 +541,8 @@ private:
// Set error according to rVal, and set rVal to 0.0 if there was an error.
inline void TreatDoubleError( double& rVal );
// Lookup using ScLookupCache, @returns true if found and result address
- bool LookupQueryWithCache( ScAddress & o_rResultPos,
- const ScQueryParam & rParam, const ScComplexRefData* refData ) const;
+ bool LookupQueryWithCache( ScAddress & o_rResultPos, const ScQueryParam & rParam,
+ const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode ) const;
void ScIfJump();
void ScIfError( bool bNAonly );
@@ -628,6 +684,7 @@ private:
void ScLookup();
void ScHLookup();
void ScVLookup();
+ void ScXLookup();
void ScSubTotal();
// If upon call rMissingField==true then the database field parameter may be
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 13036fe1d55d..6b82844f95ce 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -62,7 +62,6 @@
#include <doubleref.hxx>
#include <queryparam.hxx>
#include <queryentry.hxx>
-#include <queryiter.hxx>
#include <tokenarray.hxx>
#include <compare.hxx>
#include <comphelper/lok.hxx>
@@ -4777,7 +4776,7 @@ private:
they are equal, and 1 when the matrix value is larger than the query
value. */
sal_Int32 lcl_CompareMatrix2Query(
- SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryEntry& rEntry)
+ SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryParam& rParam, const ScQueryEntry& rEntry, bool bMatchWholeCell )
{
if (rMat.IsEmpty(i))
{
@@ -4818,7 +4817,61 @@ sal_Int32 lcl_CompareMatrix2Query(
OUString aStr1 = rMat.GetString(i);
OUString aStr2 = rEntry.GetQueryItem().maString.getString();
- return ScGlobal::GetCollator().compareString(aStr1, aStr2); // case-insensitive
+ // bRealWildOrRegExp
+ if (rParam.eSearchType != utl::SearchParam::SearchType::Normal &&
+ ((rEntry.eOp == SC_EQUAL) || (rEntry.eOp == SC_NOT_EQUAL)))
+ {
+ sal_Int32 nStart = 0;
+ sal_Int32 nEnd = aStr1.getLength();
+
+ bool bMatch = rEntry.GetSearchTextPtr(rParam.eSearchType, rParam.bCaseSens, bMatchWholeCell)
+ ->SearchForward(aStr1, &nStart, &nEnd);
+ // from 614 on, nEnd is behind the found text
+ if (bMatch && bMatchWholeCell
+ && (nStart != 0 || nEnd != aStr1.getLength()))
+ bMatch = false; // RegExp must match entire cell string
+
+ bool bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch);
+
+ if (bOk)
+ return 0; // we have a WildOrRegExp match
+ }
+
+ CollatorWrapper& rCollator = ScGlobal::GetCollator(rParam.bCaseSens);
+ return rCollator.compareString(aStr1, aStr2);
+}
+
+/** returns -1 when matrix(i) value is smaller than matrix(j) value, 0 when
+ they are equal, and 1 when larger */
+sal_Int32 lcl_Compare2MatrixCells( SCSIZE i, const VectorMatrixAccessor& rMat, SCSIZE j )
+{
+ // empty always less than anything else
+ if (rMat.IsEmpty(i))
+ return ( rMat.IsEmpty(j) ? 0 : -1 );
+ else if (rMat.IsEmpty(j))
+ return 1;
+
+ bool bByString = rMat.IsStringOrEmpty(j); // string, empty has already been handled
+ if (rMat.IsValue(i))
+ {
+ const double nVal1 = rMat.GetDouble(i);
+ if (!std::isfinite(nVal1))
+ return 1; // error always greater than numeric or string
+
+ if (bByString)
+ return -1; // numeric always less than string
+
+ const double nVal2 = rMat.GetDouble(j);
+ if (nVal1 == nVal2)
+ return 0;
+
+ return ( nVal1 < nVal2 ? -1 : 1 );
+ }
+
+ if (!bByString)
+ return 1; // string always greater than numeric
+
+ return ScGlobal::GetCollator().compareString(rMat.GetString(i), rMat.GetString(j)); // case-insensitive
}
/** returns the last item with the identical value as the original item
@@ -4861,35 +4914,50 @@ void lcl_GetLastMatch( SCSIZE& rIndex, const VectorMatrixAccessor& rMat,
void ScInterpreter::ScMatch()
{
-
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, 2, 3 ) )
return;
- double fTyp;
- if (nParamCount == 3)
- fTyp = GetDouble();
- else
- fTyp = 1.0;
- SCCOL nCol1 = 0;
- SCROW nRow1 = 0;
- SCTAB nTab1 = 0;
- SCCOL nCol2 = 0;
- SCROW nRow2 = 0;
- ScMatrixRef pMatSrc = nullptr;
+ VectorSearchArguments vsa;
+ vsa.isXLookup = false;
+ // get match mode
+ double fType = ( nParamCount == 3 ? GetDouble() : 1.0 );
+ switch ( static_cast<int>(fType) )
+ {
+ case -1 :
+ vsa.eMatchMode = exactorG;
+ vsa.eSearchMode = searchbdesc;
+ break;
+ case 0 :
+ vsa.eMatchMode = exactorNA;
+ vsa.eSearchMode = searchfwd;
+ break;
+ case 1 :
+ // default value
+ vsa.eMatchMode = exactorS;
+ vsa.eSearchMode = searchbasc;
+ break;
+ default :
+ PushIllegalParameter();
+ return;
+ }
+
+ // get vector to be searched
switch (GetStackType())
{
case svSingleRef:
- PopSingleRef( nCol1, nRow1, nTab1);
- nCol2 = nCol1;
- nRow2 = nRow1;
+ PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1);
+ vsa.nCol2 = vsa.nCol1;
+ vsa.nRow2 = vsa.nRow1;
+ vsa.pMatSrc = nullptr;
break;
case svDoubleRef:
{
+ vsa.pMatSrc = nullptr;
SCTAB nTab2 = 0;
- PopDoubleRef(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2);
- if (nTab1 != nTab2 || (nCol1 != nCol2 && nRow1 != nRow2))
+ PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2);
+ if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2))
{
PushIllegalParameter();
return;
@@ -4900,11 +4968,11 @@ void ScInterpreter::ScMatch()
case svExternalDoubleRef:
{
if (GetStackType() == svMatrix)
- pMatSrc = PopMatrix();
+ vsa.pMatSrc = PopMatrix();
else
- PopExternalDoubleRef(pMatSrc);
+ PopExternalDoubleRef(vsa.pMatSrc);
- if (!pMatSrc)
+ if (!vsa.pMatSrc)
{
PushIllegalParameter();
return;
@@ -4916,41 +4984,24 @@ void ScInterpreter::ScMatch()
return;
}
+ // get search value
if (nGlobalError == FormulaError::NONE)
{
- double fVal;
- ScQueryParam rParam;
- rParam.nCol1 = nCol1;
- rParam.nRow1 = nRow1;
- rParam.nCol2 = nCol2;
- rParam.nTab = nTab1;
- const ScComplexRefData* refData = nullptr;
-
- ScQueryEntry& rEntry = rParam.GetEntry(0);
- ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
- rEntry.bDoQuery = true;
- if (fTyp < 0.0)
- rEntry.eOp = SC_GREATER_EQUAL;
- else if (fTyp > 0.0)
- rEntry.eOp = SC_LESS_EQUAL;
switch ( GetStackType() )
{
case svDouble:
{
- fVal = GetDouble();
- rItem.mfVal = fVal;
- rItem.meType = ScQueryEntry::ByValue;
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = GetDouble();
}
break;
case svString:
{
- rItem.meType = ScQueryEntry::ByString;
- rItem.maString = GetString();
+ vsa.isStringSearch = true;
+ vsa.sSearchStr = GetString();
}
break;
case svDoubleRef :
- refData = GetStackDoubleRef();
- [[fallthrough]];
case svSingleRef :
{
ScAddress aAdr;
@@ -4962,14 +5013,13 @@ void ScInterpreter::ScMatch()
ScRefCellValue aCell(mrDoc, aAdr);
if (aCell.hasNumeric())
{
- fVal = GetCellValue(aAdr, aCell);
- rItem.meType = ScQueryEntry::ByValue;
- rItem.mfVal = fVal;
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = GetCellValue(aAdr, aCell);
}
else
{
- GetCellString(rItem.maString, aCell);
- rItem.meType = ScQueryEntry::ByString;
+ vsa.isStringSearch = true;
+ GetCellString(vsa.sSearchStr, aCell);
}
}
break;
@@ -4984,25 +5034,22 @@ void ScInterpreter::ScMatch()
}
if (pToken->GetType() == svDouble)
{
- rItem.meType = ScQueryEntry::ByValue;
- rItem.mfVal = pToken->GetDouble();
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = pToken->GetDouble();
}
else
{
- rItem.meType = ScQueryEntry::ByString;
- rItem.maString = pToken->GetString();
+ vsa.isStringSearch = true;
+ vsa.sSearchStr = pToken->GetString();
}
}
break;
case svExternalDoubleRef:
case svMatrix :
{
- svl::SharedString aStr;
ScMatValType nType = GetDoubleOrStringFromMatrix(
- rItem.mfVal, aStr);
- rItem.maString = aStr;
- rItem.meType = ScMatrix::IsNonValueType(nType) ?
- ScQueryEntry::ByString : ScQueryEntry::ByValue;
+ vsa.fSearchVal, vsa.sSearchStr);
+ vsa.isStringSearch = ScMatrix::IsNonValueType(nType);
}
break;
default:
@@ -5011,163 +5058,17 @@ void ScInterpreter::ScMatch()
return;
}
}
- if (rItem.meType == ScQueryEntry::ByString)
- {
- bool bIsVBAMode = mrDoc.IsInVBAMode();
- if ( bIsVBAMode )
- rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
- else
- rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc);
- }
-
- if (pMatSrc) // The source data is matrix array.
+ // execute search
+ if ( SearchVectorForValue( vsa ) )
+ PushDouble( vsa.nIndex );
+ else
{
- SCSIZE nC, nR;
- pMatSrc->GetDimensions( nC, nR);
- if (nC > 1 && nR > 1)
- {
- // The source matrix must be a vector.
- PushIllegalParameter();
- return;
- }
-
- // Do not propagate errors from matrix while searching.
- pMatSrc->SetErrorInterpreter( nullptr);
-
- SCSIZE nMatCount = (nC == 1) ? nR : nC;
- VectorMatrixAccessor aMatAcc(*pMatSrc, nC == 1);
-
- // simple serial search for equality mode (source data doesn't
- // need to be sorted).
-
- if (rEntry.eOp == SC_EQUAL)
- {
- for (SCSIZE i = 0; i < nMatCount; ++i)
- {
- if (lcl_CompareMatrix2Query( i, aMatAcc, rEntry) == 0)
- {
- PushDouble(i+1); // found !
- return;
- }
- }
- PushNA(); // not found
- return;
- }
-
- // binary search for non-equality mode (the source data is
- // assumed to be sorted).
-
- bool bAscOrder = (rEntry.eOp == SC_LESS_EQUAL);
- SCSIZE nFirst = 0, nLast = nMatCount-1, nHitIndex = 0;
- for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst)
- {
- SCSIZE nMid = nFirst + nLen/2;
- sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rEntry);
- if (nCmp == 0)
- {
- // exact match. find the last item with the same value.
- lcl_GetLastMatch( nMid, aMatAcc, nMatCount);
- PushDouble( nMid+1);
- return;
- }
-
- if (nLen == 1) // first and last items are next to each other.
- {
- if (nCmp < 0)
- nHitIndex = bAscOrder ? nLast : nFirst;
- else
- nHitIndex = bAscOrder ? nFirst : nLast;
- break;
- }
-
- if (nCmp < 0)
- {
- if (bAscOrder)
- nFirst = nMid;
- else
- nLast = nMid;
- }
- else
- {
- if (bAscOrder)
- nLast = nMid;
- else
- nFirst = nMid;
- }
- }
-
- if (nHitIndex == nMatCount-1) // last item
- {
- sal_Int32 nCmp = lcl_CompareMatrix2Query( nHitIndex, aMatAcc, rEntry);
- if ((bAscOrder && nCmp <= 0) || (!bAscOrder && nCmp >= 0))
- {
- // either the last item is an exact match or the real
- // hit is beyond the last item.
- PushDouble( nHitIndex+1);
- return;
- }
- }
-
- if (nHitIndex > 0) // valid hit must be 2nd item or higher
- {
- if ( ! ( rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue( nHitIndex-1 ) ) &&
- ! ( rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue( nHitIndex-1 ) ) )
- PushDouble( nHitIndex); // non-exact match
- else
- PushNA();
- return;
- }
-
- PushNA();
- return;
- }
-
- // The source data is cell range.
- SCCOLROW nDelta = 0;
- if (nCol1 == nCol2)
- { // search row in column
- rParam.nRow2 = nRow2;
- rEntry.nField = nCol1;
- ScAddress aResultPos( nCol1, nRow1, nTab1);
- if (!LookupQueryWithCache( aResultPos, rParam, refData))
- {
+ if ( vsa.isResultNA )
PushNA();
- return;
- }
- nDelta = aResultPos.Row() - nRow1;
- }
- else
- { // search column in row
- SCCOL nC;
- rParam.bByRow = false;
- rParam.nRow2 = nRow1;
- rEntry.nField = nCol1;
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
- // Advance Entry.nField in Iterator if column changed
- aCellIter.SetAdvanceQueryParamEntryField( true );
- if (fTyp == 0.0)
- { // EQUAL
- if ( aCellIter.GetFirst() )
- nC = aCellIter.GetCol();
- else
- {
- PushNA();
- return;
- }
- }
else
- { // <= or >=
- SCROW nR;
- if ( !aCellIter.FindEqualOrSortedLastInRange( nC, nR ) )
- {
- PushNA();
- return;
- }
- }
- nDelta = nC - nCol1;
+ return; // error occurred and has already been pushed
}
- PushDouble(static_cast<double>(nDelta + 1));
}
else
PushIllegalParameter();
@@ -5627,7 +5528,7 @@ void ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
}
else
{
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -5886,12 +5787,12 @@ void ScInterpreter::ScCountIf()
if(ScCountIfCellIteratorSortedCache::CanBeUsed(mrDoc, rParam, nTab1, pMyFormulaCell,
refData, mrContext))
{
- ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false);
+ ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
fCount += aCellIter.GetCount();
}
else
{
- ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
+ ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
fCount += aCellIter.GetCount();
}
}
@@ -6289,7 +6190,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf
if( ScQueryCellIteratorSortedCache::CanBeUsed( mrDoc, rParam, nTab1, pMyFormulaCell,
refData, mrContext ))
{
- ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false);
+ ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -6304,7 +6205,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf
}
else
{
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -7061,12 +6962,13 @@ void ScInterpreter::ScLookup()
// assumed to be sorted in ascending order).
SCCOLROW nDelta = -1;
+ bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell();
SCSIZE nFirst = 0, nLast = nLenMajor-1; //, nHitIndex = 0;
for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst)
{
SCSIZE nMid = nFirst + nLen/2;
- sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, rEntry);
+ sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, aParam, rEntry, bMatchWholeCell );
if (nCmp == 0)
{
// exact match. find the last item with the same value.
@@ -7092,7 +6994,7 @@ void ScInterpreter::ScLookup()
if (nDelta == static_cast<SCCOLROW>(nLenMajor-2)) // last item
{
- sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, rEntry);
+ sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, aParam, rEntry, bMatchWholeCell );
if (nCmp <= 0)
{
// either the last item is an exact match or the real
@@ -7254,7 +7156,7 @@ void ScInterpreter::ScLookup()
if (rItem.meType == ScQueryEntry::ByString)
aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc);
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false);
SCCOL nC;
SCROW nR;
// Advance Entry.nField in iterator upon switching columns if
@@ -7490,8 +7392,13 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
return;
ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
+ svl::SharedString aParamStr;
if (rItem.meType == ScQueryEntry::ByString)
+ {
aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc);
+ aParamStr = rItem.maString;
+ }
+
if (pMat)
{
SCSIZE nMatCount = bHLookup ? nC : nR;
@@ -7501,7 +7408,6 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
//!!!!!!!
//TODO: enable regex on matrix strings
//!!!!!!!
- svl::SharedString aParamStr = rItem.maString;
if ( bSorted )
{
CollatorWrapper& rCollator = ScGlobal::GetCollator();
@@ -7611,6 +7517,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
}
else
{
+ // not a matrix
rEntry.nField = nCol1;
bool bFound = false;
SCCOL nCol = 0;
@@ -7619,7 +7526,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
rEntry.eOp = SC_LESS_EQUAL;
if ( bHLookup )
{
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false);
// advance Entry.nField in Iterator upon switching columns
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( bSorted )
@@ -7637,7 +7544,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
else
{
ScAddress aResultPos( nCol1, nRow1, nTab1);
- bFound = LookupQueryWithCache( aResultPos, aParam, refData);
+ bFound = LookupQueryWithCache( aResultPos, aParam, refData, 0, false );
nRow = aResultPos.Row();
nCol = nSpIndex;
}
@@ -7716,6 +7623,300 @@ void ScInterpreter::ScVLookup()
CalculateLookup(false);
}
+void ScInterpreter::ScXLookup()
+{
+/* TODO
+ -use VectorSearchArguments and SearchVectorForValue() with ScLookup, ScHLookup and ScVLookup
+ as well to reduce redundant code, can de done later with lots of other MATCH/LOOKUP related code
+ that can be unified
+ -BinarySearch not supported for columns (horizontal search), now just use linear mode in this case
+ -improve efficiency of code
+*/
+ sal_uInt8 nParamCount = GetByte();
+ if ( !MustHaveParamCount( nParamCount, 3, 6 ) )
+ return;
+
+ VectorSearchArguments vsa;
+ vsa.isXLookup = true;
+
+ if ( nParamCount == 6 )
+ {
+ sal_Int16 k = GetInt16();
+ if ( k >= -2 && k <= 2 && k != 0 )
+ vsa.eSearchMode = static_cast<SearchMode>(k);
+ else
+ {
+ PushIllegalParameter();
+ return;
+ }
+ }
+ else
+ vsa.eSearchMode = searchfwd;
+
+ if ( nParamCount >= 5 )
+ {
+ sal_Int16 k = GetInt16();
+ if ( k >= -1 && k <= 2 )
+ vsa.eMatchMode = static_cast<MatchMode>(k);
+ else
+ {
+ PushIllegalParameter();
+ return;
+ }
+ }
+ else
+ vsa.eMatchMode = exactorNA;
+
+ // Optional 4th argument to set return values if not found (default is #N/A)
+ formula::FormulaConstTokenRef xNotFound;
+ if ( nParamCount >= 4 && GetStackType() != svEmptyCell )
+ xNotFound = PopToken();
+
+ // 3rd argument is return value array
+ ScMatrixRef prMat = nullptr;
+ SCSIZE nrC = 0, nrR = 0;
+ StackVar eType = GetStackType();
+ switch ( eType )
+ {
+ case svDoubleRef :
+ case svSingleRef :
+ case svExternalDoubleRef :
+ case svExternalSingleRef :
+ case svMatrix :
+ prMat = GetMatrix();
+ if ( prMat )
+ prMat->GetDimensions( nrC, nrR );
+ else
+ {
+ PushIllegalParameter();
+ return;
+ }
+ break;
+
+ default :
+ PushIllegalParameter();
+ return;
+ }
+
+ // 2nd argument is vector to be searched
+ SCSIZE nsC = 0, nsR = 0;
+ switch ( GetStackType() )
+ {
+ case svSingleRef:
+ vsa.pMatSrc = nullptr;
+ PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1);
+ vsa.nCol2 = vsa.nCol1;
+ vsa.nRow2 = vsa.nRow1;
+ nsC = vsa.nCol2 - vsa.nCol1 + 1;
+ nsR = vsa.nRow2 - vsa.nRow1 + 1;
+ break;
+ case svDoubleRef:
+ {
+ vsa.pMatSrc = nullptr;
+ SCTAB nTab2 = 0;
+ PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2);
+ if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2))
+ {
+ PushIllegalParameter();
+ return;
+ }
+ nsC = vsa.nCol2 - vsa.nCol1 + 1;
+ nsR = vsa.nRow2 - vsa.nRow1 + 1;
+ }
+ break;
+ case svMatrix:
+ case svExternalDoubleRef:
+ {
+ if (GetStackType() == svMatrix)
+ vsa.pMatSrc = PopMatrix();
+ else
+ PopExternalDoubleRef(vsa.pMatSrc);
+
+ if (!vsa.pMatSrc)
+ {
+ PushIllegalParameter();
+ return;
+ }
+ vsa.pMatSrc->GetDimensions( nsC, nsR);
+ }
+ break;
+
+ default:
+ PushIllegalParameter();
+ return;
+ }
+ if ( ( nsR >= nsC && nsR != nrR ) || ( nsR < nsC && nsC != nrC ) )
+ {
+ // search matrix must have same number of elements as result matrix in search direction
+ PushIllegalParameter();
+ return;
+ }
+
+ // 1st argument is search value
+ if (nGlobalError == FormulaError::NONE)
+ {
+ switch ( GetStackType() )
+ {
+ case svDouble:
+ {
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = GetDouble();
+ }
+ break;
+
+ case svString:
+ {
+ vsa.isStringSearch = true;
+ vsa.sSearchStr = GetString();
+ }
+ break;
+
+ case svDoubleRef :
+ case svSingleRef :
+ {
+ ScAddress aAdr;
+ if ( !PopDoubleRefOrSingleRef( aAdr ) )
+ {
+ PushInt(0);
+ return ;
+ }
+ ScRefCellValue aCell(mrDoc, aAdr);
+ if (aCell.hasNumeric())
+ {
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = GetCellValue(aAdr, aCell);
+ }
+ else
+ {
+ vsa.isStringSearch = true;
+ GetCellString(vsa.sSearchStr, aCell);
+ }
+ }
+ break;
+
+ case svExternalSingleRef:
+ {
+ ScExternalRefCache::TokenRef pToken;
+ PopExternalSingleRef(pToken);
+ if (nGlobalError != FormulaError::NONE)
+ {
+ PushError( nGlobalError);
+ return;
+ }
+ if (pToken->GetType() == svDouble)
+ {
+ vsa.isStringSearch = false;
+ vsa.fSearchVal = pToken->GetDouble();
+ }
+ else
+ {
+ vsa.isStringSearch = false;
+ vsa.sSearchStr = pToken->GetString();
+ }
+ }
+ break;
+
+ case svExternalDoubleRef:
+ case svMatrix :
+ {
+ ScMatValType nType = GetDoubleOrStringFromMatrix(
+ vsa.fSearchVal, vsa.sSearchStr);
+ vsa.isStringSearch = ScMatrix::IsNonValueType(nType);
+ }
+ break;
+
+ default:
+ {
+ PushIllegalParameter();
+ return;
+ }
+ }
+ }
+
+ // start search
+ if ( SearchVectorForValue( vsa ) )
+ {
+ // found, output result
+ assert( vsa.bVLookup ? ( o3tl::make_unsigned(vsa.nIndex) < nrR ) :
+ ( o3tl::make_unsigned(vsa.nIndex) < nrC ) );
+ SCSIZE nX;
+ SCSIZE nY;
+ SCSIZE nResCols;
+ SCSIZE nResRows;
+ if ( vsa.bVLookup )
+ {
+ nX = static_cast<SCSIZE>(0);
+ nY = vsa.nIndex;
+ nResCols = nrC;
+ nResRows = 1;
+ }
+ else
+ {
+ nX = vsa.nIndex;
+ nY = static_cast<SCSIZE>(0);
+ nResCols = 1;
+ nResRows = nrR;
+ }
+ // if result matrix has more than one row or column push matrix else push single value
+ if ( nResCols > 1 || nResRows > 1 )
+ {
+ // result is matrix, make/fill matrix with output and push that
+ ScMatrixRef pResMat = GetNewMat( nResCols, nResRows, /*bEmpty*/true );
+ if ( pResMat )
+ {
+ for ( SCSIZE i = 0; i < nResCols; i++ )
+ {
+ for ( SCSIZE j = 0; j < nResRows; j++ )
+ {
+ SCSIZE ri;
+ SCSIZE rj;
+ if ( vsa.bVLookup )
+ {
+ ri = nX + i;
+ rj = nY;
+ }
+ else
+ {
+ ri = nX;
+ rj = nY + j;
+ }
+ if ( prMat->IsStringOrEmpty( ri, rj ) )
+ pResMat->PutString( prMat->GetString( ri, rj ), i, j );
+ else
+ pResMat->PutDouble( prMat->GetDouble( ri, rj ), i, j );
+ }
+ }
+ PushMatrix( pResMat );
+ }
+ else
+ {
+ PushIllegalParameter();
+ return;
+ }
+ }
+ else
+ {
+ // result is a single value
+ if ( prMat->IsStringOrEmpty( nX, nY) )
+ PushString( prMat->GetString( nX, nY ).getString() );
+ else
+ PushDouble( prMat->GetDouble( nX, nY ) );
+ }
+ }
+ else
+ {
+ if ( vsa.isResultNA )
+ {
+ if ( xNotFound && ( xNotFound->GetType() != svMissing ) )
+ PushTokenRef(xNotFound);
+ else
+ PushNA();
+ }
+ }
+
+ return;
+}
+
void ScInterpreter::ScSubTotal()
{
sal_uInt8 nParamCount = GetByte();
@@ -8093,7 +8294,7 @@ void ScInterpreter::ScDBCount()
// so the source range has to be restricted, like before the introduction
// of ScDBQueryParamBase.
p->nCol1 = p->nCol2 = p->mnField;
- ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true, false);
if ( aCellIter.GetFirst() )
{
do
@@ -10192,28 +10393,465 @@ utl::SearchParam::SearchType ScInterpreter::DetectSearchType( std::u16string_vie
return utl::SearchParam::SearchType::Normal;
}
+bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry, ScQueryEntry::Item& rItem )
+{
+ SCSIZE nC, nR;
+ vsa.pMatSrc->GetDimensions( nC, nR);
+ if (nC > 1 && nR > 1)
+ {
+ // The source matrix must be a vector.
+ PushIllegalParameter();
+ return false;
+ }
+ vsa.bVLookup = ( nC == 1 );
+
+ // Do not propagate errors from matrix while searching.
+ vsa.pMatSrc->SetErrorInterpreter( nullptr );
+
+ SCSIZE nMatCount = (vsa.bVLookup ? nR : nC);
+ VectorMatrixAccessor aMatAcc(*(vsa.pMatSrc), vsa.bVLookup);
+ bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell();
+
+ switch ( vsa.eSearchMode )
+ {
+ case searchfwd :
+ {
+ switch ( vsa.eMatchMode )
+ {
+ case exactorNA :
+ case wildcard :
+ // simple serial search for equality mode (source data doesn't
+ // need to be sorted).
+ for (SCSIZE i = 0; i < nMatCount; ++i)
+ {
+ if (lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell ) == 0)
+ {
+ vsa.nHitIndex = i+1; // found !
+ break;
+ }
+ }
+ break;
+
+ case exactorS :
+ case exactorG :
+ for (SCSIZE i = 0; i < nMatCount; ++i)
+ {
+ sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell );
+ if (result == 0)
+ {
+ vsa.nHitIndex = i+1; // found !
+ break;
+ }
+ else if (vsa.eMatchMode == exactorS && result == -1)
+ {
+ if ( vsa.nBestFit == SCSIZE_MAX )
+ vsa.nBestFit = i;
+ else
+ {
+ // replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit)
+ if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 )
+ vsa.nBestFit = i;
+ }
+ }
+ else if (vsa.eMatchMode == exactorG && result == 1)
+ {
+ if ( vsa.nBestFit == SCSIZE_MAX )
+ vsa.nBestFit = i;
+ else
+ {
+ // replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit)
+ if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 )
+ vsa.nBestFit = i;
+ }
+ }
+ // else do nothing
+ }
+ break;
+
+ default :
+ PushIllegalParameter();
+ return false;
+ }
+ }
+ break;
+
+ case searchrev:
+ {
+ switch ( vsa.eMatchMode )
+ {
+ case exactorNA :
+ case wildcard :
+ // simple serial search for equality mode (source data doesn't
+ // need to be sorted).
+ for ( SCSIZE i = nMatCount - 1; i > 0; i-- )
+ {
+ if (lcl_CompareMatrix2Query(i, aMatAcc, rParam, rEntry, bMatchWholeCell) == 0)
+ {
+ vsa.nHitIndex = i + 1; // found !
+ break;
+ }
+ }
+ break;
+
+ case exactorS :
+ case exactorG :
+ for (SCSIZE i = nMatCount - 1; i-- > 0; )
+ {
+ sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell );
+ if (result == 0)
+ {
+ vsa.nHitIndex = i + 1; // found !
+ break;
+ }
+ else if (vsa.eMatchMode == exactorS && result == -1)
+ {
+ if ( vsa.nBestFit == SCSIZE_MAX )
+ vsa.nBestFit = i;
+ else
+ {
+ // replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit)
+ if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 )
+ vsa.nBestFit = i;
+ }
+ }
+ else if (vsa.eMatchMode == exactorG && result == 1)
+ {
+ if ( vsa.nBestFit == SCSIZE_MAX )
+ vsa.nBestFit = i;
+ else
+ {
+ // replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit)
+ if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 )
+ vsa.nBestFit = i;
+ }
+ }
+ // else do nothing
+ }
+ break;
+
+ default :
+ PushIllegalParameter();
+ return false;
+ }
+ }
+ break;
+
+ case searchbasc:
+ case searchbdesc:
+ {
+ // binary search for non-equality mode (the source data is sorted)
+ bool bAscOrder = ( vsa.eSearchMode == searchbasc );
+ SCSIZE nFirst = 0;
+ SCSIZE nLast = nMatCount - 1;
+ for ( SCSIZE nLen = nLast - nFirst; nLen > 0; nLen = nLast - nFirst )
+ {
+ SCSIZE nMid = nFirst + nLen / 2;
+ sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rParam, rEntry, bMatchWholeCell );
+ if ( nCmp == 0 )
+ {
+ // exact match. find the last item with the same value.
+ lcl_GetLastMatch( nMid, aMatAcc, nMatCount);
+ vsa.nHitIndex = nMid + 1;
+ break;
+ }
+
+ if ( nLen == 1 ) // first and last items are next to each other.
+ {
+ if ( bAscOrder && vsa.eMatchMode == exactorS )
+ vsa.nHitIndex = ( nCmp > 0 ? nFirst : nLast );
+ else if ( !bAscOrder && vsa.eMatchMode == exactorG )
+ vsa.nHitIndex = ( nCmp < 0 ? nFirst : nLast );
+ break;
+ }
+ else
+ {
+ if ( nCmp < 0 )
+ {
+ if ( bAscOrder )
+ nFirst = nMid;
+ else
+ nLast = nMid;
+ }
+ else
+ {
+ if ( bAscOrder )
+ nLast = nMid;
+ else
+ nFirst = nMid;
+ }
+
+ if ( vsa.nHitIndex == nMatCount - 1 ) // last item
+ {
+ nCmp = lcl_CompareMatrix2Query( vsa.nHitIndex, aMatAcc, rParam, rEntry, bMatchWholeCell );
+ if ( ( vsa.eMatchMode == exactorS && nCmp <= 0 ) ||
+ ( vsa.eMatchMode == exactorG && nCmp >= 0 ) )
+ {
+ // either the last item is an exact match or the real
+ // hit is beyond the last item.
+ vsa.nHitIndex++;
+ }
+ else
+ vsa.nHitIndex = 0;
+ }
+ }
+ }
+ }
+ break;
+
+ default:
+ PushIllegalParameter();
+ return false;
+ }
+
+ if ((vsa.nHitIndex > 0) && ((rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue(vsa.nHitIndex - 1)) ||
+ (rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue(vsa.nHitIndex - 1))))
+ {
+ vsa.nHitIndex = 0;
+ vsa.isResultNA = true;
+ return false;
+ }
+ return true;
+}
+
+bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry )
+{
+ vsa.bVLookup = ( vsa.nCol1 == vsa.nCol2 );
+ switch ( vsa.eSearchMode )
+ {
+ case searchfwd:
+ case searchrev:
+ case searchbasc:
+ case searchbdesc:
+ {
+ if (vsa.bVLookup)
+ {
+ // search of rows in column
+ rParam.bByRow = true;
+ ScAddress aResultPos( vsa.nCol1, vsa.nRow1, vsa.nTab1 );
+ const ScComplexRefData* refData = nullptr;
+ if ( LookupQueryWithCache( aResultPos, rParam, refData, vsa.eSearchMode, vsa.isXLookup ) )
+ vsa.nHitIndex = aResultPos.Row() - vsa.nRow1 + 1;
+ }
+ else
+ {
+ // search of columns in row
+ rParam.bByRow = false;
+ bool bReverseSearch = (vsa.eSearchMode == searchrev);
+ ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, vsa.nTab1, rParam, false, bReverseSearch);
+ // Advance Entry.nField in Iterator if column changed
+ aCellIter.SetAdvanceQueryParamEntryField(true);
+ aCellIter.SetXlookupMode(vsa.isXLookup);
+ // TODO: no binary search for column (horizontal) search (use linear)
+ aCellIter.SetSortedBinarySearchMode(false);
+ if (rEntry.eOp == SC_EQUAL)
+ {
+ if (aCellIter.GetFirst())
+ vsa.nHitIndex = aCellIter.GetCol() - vsa.nCol1 + 1;
+ }
+ else
+ {
+ SCCOL nC;
+ SCROW nR;
+ if (aCellIter.FindEqualOrSortedLastInRange(nC, nR))
+ vsa.nHitIndex = nC - vsa.nCol1 + 1;
+ }
+ }
+ }
+ break;
+
+ default :
+ PushIllegalParameter();
+ return false;
+ }
+ return true;
+}
+
+
+/** When search value is found, the index is stored in struct VectorSearchArguments.nIndex
+ and SearchVectorForValue() returns true. When search value is not found or an error
+ occurs, SearchVectorForValue() pushes the relevant (error)message and returns false,
+ expect when SearchVectorForValue() is called by ScXLookup and the search value is not
+ found.
+ This difference in behaviour is because MATCH returns the found index and XLOOKUP
+ uses the found index to determine the result(s) to be pushed and may return a custom
+ value when the search value is not found.
+*/
+bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa )
+{
+ // preparations
+ ScQueryParam rParam;
+ rParam.nCol1 = vsa.nCol1;
+ rParam.nRow1 = vsa.nRow1;
+ rParam.nCol2 = vsa.nCol2;
+ rParam.nRow2 = vsa.nRow2;
+ rParam.nTab = vsa.nTab1;
+
+ ScQueryEntry& rEntry = rParam.GetEntry(0);
+ rEntry = rParam.GetEntry(0);
+ rEntry.nField = vsa.eSearchMode != searchrev ? vsa.nCol1 : vsa.nCol2;
+ rEntry.bDoQuery = true;
+ ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
+ switch ( vsa.eMatchMode )
+ {
+ case exactorNA :
+ rEntry.eOp = SC_EQUAL;
+ break;
+
+ case exactorS :
+ rEntry.eOp = SC_LESS_EQUAL;
+ break;
+
+ case exactorG :
+ rEntry.eOp = SC_GREATER_EQUAL;
+ break;
+
+ case wildcard :
+ // this mode can only used with XLOOKUP
+ if ( vsa.isXLookup )
+ {
+ rEntry.eOp = SC_EQUAL;
+ if ( vsa.isStringSearch )
+ {
+ if ( mrDoc.IsInVBAMode() )
+ rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
+ else
+ {
+ // set searchtype hard to wildcard or regexp if applicable, the XLOOKUP
+ // argument prevails over the configuration setting
+ if ( MayBeWildcard( vsa.sSearchStr.getString() ) )
+ rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
+ else if ( MayBeRegExp( vsa.sSearchStr.getString() ) )
+ rParam.eSearchType = utl::SearchParam::SearchType::Regexp;
+ }
+ }
+ }
+ else
+ {
+ PushIllegalParameter();
+ return false;
+ }
+ break;
+
+ default :
+ PushIllegalParameter();
+ return false;
+ }
+ if ( vsa.isStringSearch )
+ {
+ rItem.meType = ScQueryEntry::ByString;
+ rItem.maString = vsa.sSearchStr;
+ if ( !vsa.isXLookup )
+ {
+ if ( mrDoc.IsInVBAMode() )
+ rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
+ else
+ rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc);
+ }
+ }
+ else
+ {
+ rItem.mfVal = vsa.fSearchVal;
+ rItem.meType = ScQueryEntry::ByValue;
+ }
+
+ // execute search
+ if (vsa.pMatSrc) // The source data is matrix array.
+ {
+ // matrix
+ if ( !SearchMatrixForValue( vsa, rParam, rEntry, rItem ) )
+ return false;
+ }
+ else
+ {
+ // not a matrix
+ if ( !SearchRangeForValue( vsa, rParam, rEntry ) )
+ return false;
+ }
+
+ // MATCH expects index starting with 1, XLOOKUP expects index starting with 0
+ if ( vsa.nHitIndex > 0 )
+ {
+ vsa.nIndex = ( vsa.isXLookup ? --vsa.nHitIndex : vsa.nHitIndex );
+ return true;
+ }
+ else if ( vsa.nHitIndex == 0 && vsa.nBestFit != SCSIZE_MAX )
+ {
+ if ( vsa.isXLookup )
+ {
+ vsa.nIndex = vsa.nBestFit;
+ if ( !vsa.pMatSrc )
+ {
+ vsa.nIndex -= ( vsa.bVLookup ? vsa.nRow1 : vsa.nCol1 );
+ }
+ }
+ else
+ {
+ vsa.nIndex = ++vsa.nBestFit;
+ }
+ return true;
+ }
+
+ // nomatch
+ vsa.isResultNA = true;
+ return false;
+}
+
static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInterpreterContext& rContext,
const ScQueryParam & rParam, const ScQueryEntry & rEntry, const ScFormulaCell* cell,
- const ScComplexRefData* refData )
+ const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode )
{
if (rEntry.eOp != SC_EQUAL)
{
// range lookup <= or >=
SCCOL nCol;
SCROW nRow;
- ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
- if( aCellIter.FindEqualOrSortedLastInRange( nCol, nRow ))
+ bool bLessOrEqual = rEntry.eOp == SC_LESS || rEntry.eOp == SC_LESS_EQUAL;
+ // we can use binary search if the SearchMode is searchbasc or searchbdesc
+ if (ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext) ||
+ (static_cast<SearchMode>(nSearchMode) == searchbasc && !bLessOrEqual) ||
+ (static_cast<SearchMode>(nSearchMode) == searchbdesc && bLessOrEqual))
+ {
+ // search for the first LessOrEqual value if SearchMode is desc or
+ // search for the first GreaterOrEqual value if SearchMode is asc
+ ScQueryCellIteratorSortedCache aCellIter(rDoc, rContext, rParam.nTab, rParam, false, false);
+ aCellIter.SetXlookupMode(bXlookupMode);
+ if (aCellIter.GetFirst())
+ {
+ o_rResultPos.SetCol(aCellIter.GetCol());
+ o_rResultPos.SetRow(aCellIter.GetRow());
+ return true;
+ }
+ }
+ else
{
- o_rResultPos.SetCol( nCol);
- o_rResultPos.SetRow( nRow);
- return true;
+ // search for the last LessOrEqual value or GreaterOrEqual value
+ bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev);
+ ScQueryCellIteratorDirect aCellIter(rDoc, rContext, rParam.nTab, rParam, false, bReverse);
+
+ aCellIter.SetSortedBinarySearchMode(static_cast<SearchMode>(nSearchMode) == searchbasc ||
+ static_cast<SearchMode>(nSearchMode) == searchbdesc);
+ aCellIter.SetXlookupMode(bXlookupMode);
+ if (aCellIter.FindEqualOrSortedLastInRange(nCol, nRow))
+ {
+ o_rResultPos.SetCol(nCol);
+ o_rResultPos.SetRow(nRow);
+ return true;
+ }
}
}
else // EQUAL
{
- if( ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext ))
+ // we can use binary search for rows if the SearchMode is searchbasc or searchbdesc
+ bool bLiteral = rParam.eSearchType == utl::SearchParam::SearchType::Normal &&
+ rEntry.GetQueryItem().meType == ScQueryEntry::ByString;
+ bool bBinary = rParam.bByRow &&
+ (bLiteral || rEntry.GetQueryItem().meType == ScQueryEntry::ByValue);
+
+ if( bBinary && (ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext ) ||
+ static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc ))
{
- ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
+ ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false, false );
+ aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
o_rResultPos.SetCol( aCellIter.GetCol());
@@ -10223,7 +10861,9 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
}
else
{
- ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
+ bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev);
+ ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false, bReverse );
+ aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
o_rResultPos.SetCol( aCellIter.GetCol());
@@ -10274,12 +10914,12 @@ static SCROW lcl_getPrevRowWithEmptyValueLookup( const ScLookupCache& rCache,
}
bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
- const ScQueryParam & rParam, const ScComplexRefData* refData ) const
+ const ScQueryParam & rParam, const ScComplexRefData* refData,
+ sal_Int8 nSearchMode, bool bXlookupMode ) const
{
bool bFound = false;
const ScQueryEntry& rEntry = rParam.GetEntry(0);
bool bColumnsMatch = (rParam.nCol1 == rEntry.nField);
- OSL_ENSURE( bColumnsMatch, "ScInterpreter::LookupQueryWithCache: columns don't match");
// At least all volatile functions that generate indirect references have
// to force non-cached lookup.
/* TODO: We could further classify volatile functions into reference
@@ -10287,13 +10927,14 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
* direct lookups here. We could even further attribute volatility per
* parameter so it would affect only the lookup range parameter. */
if (!bColumnsMatch || GetVolatileType() != NOT_VOLATILE)
- bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData);
+ bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell,
+ refData, nSearchMode, bXlookupMode );
else
{
ScRange aLookupRange( rParam.nCol1, rParam.nRow1, rParam.nTab,
rParam.nCol2, rParam.nRow2, rParam.nTab);
ScLookupCache& rCache = mrDoc.GetLookupCache( aLookupRange, &mrContext );
- ScLookupCache::QueryCriteria aCriteria( rEntry);
+ ScLookupCache::QueryCriteria aCriteria( rEntry );
ScLookupCache::Result eCacheResult = rCache.lookup( o_rResultPos,
aCriteria, aPos);
@@ -10318,7 +10959,8 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
{
case ScLookupCache::NOT_CACHED :
case ScLookupCache::CRITERIA_DIFFERENT :
- bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData);
+ bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry,
+ pMyFormulaCell, refData, nSearchMode, bXlookupMode );
if (eCacheResult == ScLookupCache::NOT_CACHED)
rCache.insert( o_rResultPos, aCriteria, aPos, bFound);
break;
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 95dff9f1cc18..60190bac72b3 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4326,6 +4326,7 @@ StackVar ScInterpreter::Interpret()
case ocCountIfs : ScCountIfs(); break;
case ocLookup : ScLookup(); break;
case ocVLookup : ScVLookup(); break;
+ case ocXLookup : ScXLookup(); break;
case ocHLookup : ScHLookup(); break;
case ocIndex : ScIndex(); break;
case ocMultiArea : ScMultiArea(); break;
diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index 473177c8fca0..e6a5cda2f19f 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -264,6 +264,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
{ ocVarS, {{ Reference }, 1, Value }},
{ ocWhitespace, {{ Bounds }, 0, Bounds }},
{ ocWorkday_MS, {{ Value, Value, Value, Reference }, 0, Value }},
+ { ocXLookup, {{ Value, ReferenceOrForceArray, ReferenceOrForceArray, Value, Value, Value }, 0, Value }},
{ ocXor, {{ Reference }, 1, Value }},
{ ocZTest, {{ Reference, Value, Value }, 0, Value }},
{ ocZTest_MS, {{ Reference, Value, Value }, 0, Value }},
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 25c5b6f05f79..114bdae1497a 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1387,6 +1387,7 @@ void ScTokenArray::CheckToken( const FormulaToken& r )
case ocCount:
case ocCount2:
case ocVLookup:
+ case ocXLookup:
case ocSLN:
case ocIRR:
case ocMIRR:
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 2612f0d3dc45..f0e5b09a0e4b 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -593,6 +593,18 @@ const XclFunctionInfo saFuncTable_2016[] =
EXC_FUNCENTRY_V_VR( ocMaxIfs_MS, 3, MX, 0, "MAXIFS" )
};
+
+/** Functions new in Excel 2021.
+
+
+ @See sc/source/filter/oox/formulabase.cxx saFuncTable2021 for V,VR,RO,...
+ */
+const XclFunctionInfo saFuncTable_2021[] =
+{
+ EXC_FUNCENTRY_V_VR( ocXLookup, 3, 6, 0, "XLOOKUP" )
+};
+
+
#define EXC_FUNCENTRY_ODF( opcode, minparam, maxparam, flags, asciiname ) \
{ opcode, NOID, minparam, maxparam, V, { VR }, EXC_FUNCFLAG_IMPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) }, \
{ opcode, 255, (minparam)+1, (maxparam)+1, V, { RO_E, RO }, EXC_FUNCFLAG_EXPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) }
@@ -669,6 +681,7 @@ XclFunctionProvider::XclFunctionProvider( const XclRoot& rRoot )
(this->*pFillFunc)(saFuncTable_2010, std::end(saFuncTable_2010));
(this->*pFillFunc)(saFuncTable_2013, std::end(saFuncTable_2013));
(this->*pFillFunc)(saFuncTable_2016, std::end(saFuncTable_2016));
+ (this->*pFillFunc)(saFuncTable_2021, std::end(saFuncTable_2021));
(this->*pFillFunc)(saFuncTable_Odf, std::end(saFuncTable_Odf));
(this->*pFillFunc)(saFuncTable_OOoLO, std::end(saFuncTable_OOoLO));
}
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 464d30d9d2d8..6ee06ff6b89b 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -866,6 +866,20 @@ const FunctionData saFuncTable2016[] =
};
+
+/** Functions new in Excel 2021.
+
+
+ @See sc/source/filter/excel/xlformula.cxx saFuncTable_2021
+ */
+/* FIXME: BIFF?? function identifiers available? Where to obtain? */
+const FunctionData saFuncTable2021[] =
+{
+ { "COM.MICROSOFT.XLOOKUP", "XLOOKUP", NOID, NOID, 3, 6, V, { VR, VA, VR }, FuncFlags::MACROCALL_NEW }
+};
+
+
+
/** Functions defined by OpenFormula, but not supported by Calc or by Excel. */
const FunctionData saFuncTableOdf[] =
{
@@ -1008,6 +1022,7 @@ FunctionProviderImpl::FunctionProviderImpl( bool bImportFilter )
initFuncs(saFuncTable2010 , std::end(saFuncTable2010) , bImportFilter);
initFuncs(saFuncTable2013 , std::end(saFuncTable2013) , bImportFilter);
initFuncs(saFuncTable2016 , std::end(saFuncTable2016) , bImportFilter);
+ initFuncs(saFuncTable2021 , std::end(saFuncTable2021 ), bImportFilter);
initFuncs(saFuncTableOdf , std::end(saFuncTableOdf) , bImportFilter);
initFuncs(saFuncTableOOoLO, std::end(saFuncTableOOoLO), bImportFilter);
}