You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2016/11/30 21:30:31 UTC

[1/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Repository: tika
Updated Branches:
  refs/heads/master 7b4f6fa6c -> fe20ecd83


http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/resources/test-documents/testWORD_2006ml_src.docx
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml_src.docx b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml_src.docx
deleted file mode 100644
index 0be09f2..0000000
Binary files a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml_src.docx and /dev/null differ


[7/7] tika git commit: TIKA-2187 -- change default behavior in experimental .docx parser to ignore deleted text. Allow configuration of including or not including text from .doc files.

Posted by ta...@apache.org.
TIKA-2187 -- change default behavior in experimental .docx parser to ignore deleted text.  Allow configuration of including or not including text from .doc files.


Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/fe20ecd8
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/fe20ecd8
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/fe20ecd8

Branch: refs/heads/master
Commit: fe20ecd83ea43e5ec6ad0e9fded9d803cb011251
Parents: d19e472
Author: tballison <ta...@mitre.org>
Authored: Wed Nov 30 16:28:47 2016 -0500
Committer: tballison <ta...@mitre.org>
Committed: Wed Nov 30 16:28:47 2016 -0500

----------------------------------------------------------------------
 CHANGES.txt                                       |   5 ++++-
 .../tika/parser/microsoft/OfficeParserConfig.java |   2 +-
 .../tika/parser/microsoft/WordExtractor.java      |   8 +++++++-
 .../tika/parser/microsoft/WordParserTest.java     |  14 ++++++++++++++
 .../microsoft/ooxml/xwpf/SXWPFExtractorTest.java  |   8 ++++----
 .../ooxml/xwpf/ml2006/Word2006MLParserTest.java   |   8 ++++----
 .../resources/test-documents/testWORD_2006ml.doc  | Bin 0 -> 265728 bytes
 7 files changed, 34 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2462e1a..4d2c573 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,7 +1,10 @@
 Release 1.15 - ??
 
+  * Change default behavior in experimental .docx parser to ignore
+    deleted text to align with .doc (TIKA-2187).
+
   * Added experimental SAX parser for .docx files. To select this parser,
-    set useSAXDocxExtractor(true) on OfficeConfig (TIKA-1321).
+    set useSAXDocxExtractor(true) on OfficeParserConfig (TIKA-1321).
 
   * Change default behavior to parse embedded documents even if the user
     forgets to specify a Parser.class in the ParseContext (TIKA-2096).

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
index 55f4673..f3cdbfe 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
@@ -21,7 +21,7 @@ import java.io.Serializable;
 
 public class OfficeParserConfig implements Serializable {
 
-    private boolean includeDeletedContent = true;
+    private boolean includeDeletedContent = false;
     private boolean includeMoveFromContent = false;
 
     private boolean useSAXDocxExtractor = false;

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java
index 54ba55b..6fd8f8e 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java
@@ -78,6 +78,7 @@ public class WordExtractor extends AbstractPOIFSExtractor {
         fixedParagraphStyles.put("HTML Preformatted", new TagAndStyle("pre", null));
     }
 
+    private final boolean extractDeletedContent;
     // True if we are currently in the named style tag:
     private boolean curStrikeThrough;
     private boolean curBold;
@@ -88,6 +89,7 @@ public class WordExtractor extends AbstractPOIFSExtractor {
     public WordExtractor(ParseContext context, Metadata metadata) {
         super(context);
         this.metadata = metadata;
+        extractDeletedContent = context.get(OfficeParserConfig.class).getIncludeDeletedContent();
     }
 
     private static int countParagraphs(Range... ranges) {
@@ -654,7 +656,11 @@ public class WordExtractor extends AbstractPOIFSExtractor {
      * @return true if character run should be included in extraction.
      */
     private boolean isRendered(final CharacterRun cr) {
-        return cr == null || !cr.isMarkedDeleted();
+        if (cr == null) {
+            return false;
+        }
+        return !cr.isMarkedDeleted() ||
+                (cr.isMarkedDeleted() && extractDeletedContent);
     }
 
     public static class TagAndStyle {

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java
index bfb7ca1..c7808d0 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/WordParserTest.java
@@ -534,5 +534,19 @@ public class WordParserTest extends TikaTest {
         List<Metadata> metadataList = getRecursiveMetadata("testWORD_macros.doc");
         assertContainsAtLeast(minExpected, metadataList);
     }
+
+    @Test
+    public void testDeleted() throws Exception {
+        //test classic behavior
+        assertNotContained("frog", getXML("testWORD_2006ml.doc").xml);
+
+        //now test inclusion of deleted text
+        ParseContext context = new ParseContext();
+        OfficeParserConfig officeParserConfig = new OfficeParserConfig();
+        officeParserConfig.setIncludeDeletedContent(true);
+        context.set(OfficeParserConfig.class, officeParserConfig);
+        XMLResult r = getXML("testWORD_2006ml.doc", context);
+        assertContains("frog", r.xml);
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
index f5512cb..06f0eed 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
@@ -145,8 +145,8 @@ public class SXWPFExtractorTest extends TikaTest {
 
         assertContains("Odd page footer", content);
 
-        //test default includes deleted
-        assertContains("frog", content);
+        //test default does not include deleted
+        assertNotContained("frog", content);
 
         assertContains("Mattmann", content);
 
@@ -159,13 +159,13 @@ public class SXWPFExtractorTest extends TikaTest {
     public void testSkipDeleted() throws Exception {
         ParseContext pc = new ParseContext();
         OfficeParserConfig officeParserConfig = new OfficeParserConfig();
-        officeParserConfig.setIncludeDeletedContent(false);
+        officeParserConfig.setIncludeDeletedContent(true);
         officeParserConfig.setUseSAXDocxExtractor(true);
         officeParserConfig.setIncludeMoveFromContent(true);
         pc.set(OfficeParserConfig.class, officeParserConfig);
 
         XMLResult r = getXML("testWORD_2006ml.docx", pc);
-        assertNotContained("frog", r.xml);
+        assertContains("frog", r.xml);
         assertContainsCount("Second paragraph", r.xml, 2);
 
     }

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
index 79f1890..c77b0fa 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
@@ -140,8 +140,8 @@ public class Word2006MLParserTest extends TikaTest {
 
         assertContains("Odd page footer", content);
 
-        //test default includes deleted
-        assertContains("frog", content);
+        //test default ignores deleted
+        assertNotContained("frog", content);
 
         assertContains("Mattmann", content);
 
@@ -157,12 +157,12 @@ public class Word2006MLParserTest extends TikaTest {
     public void testSkipDeletedAndMoveFrom() throws Exception {
         ParseContext pc = new ParseContext();
         OfficeParserConfig officeParserConfig = new OfficeParserConfig();
-        officeParserConfig.setIncludeDeletedContent(false);
+        officeParserConfig.setIncludeDeletedContent(true);
         officeParserConfig.setIncludeMoveFromContent(true);
         pc.set(OfficeParserConfig.class, officeParserConfig);
 
         XMLResult r = getXML("testWORD_2006ml.xml", pc);
-        assertNotContained("frog", r.xml);
+        assertContains("frog", r.xml);
         assertContainsCount("Second paragraph", r.xml, 2);
 
     }

http://git-wip-us.apache.org/repos/asf/tika/blob/fe20ecd8/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.doc
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.doc b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.doc
new file mode 100644
index 0000000..c8f509a
Binary files /dev/null and b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.doc differ


[4/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParserTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParserTest.java
deleted file mode 100644
index 607e6ef..0000000
--- a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParserTest.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.List;
-
-import org.apache.tika.TikaTest;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Office;
-import org.apache.tika.metadata.OfficeOpenXMLCore;
-import org.apache.tika.metadata.OfficeOpenXMLExtended;
-import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.parser.RecursiveParserWrapper;
-import org.apache.tika.parser.microsoft.MSOfficeParserConfig;
-import org.junit.Test;
-
-
-public class Word2006MLParserTest extends TikaTest {
-
-    @Test
-    public void basicTest() throws Exception {
-
-
-
-        List<Metadata> metadataList = getRecursiveMetadata("testWORD_2006ml.xml");
-
-        assertEquals(5, metadataList.size());
-
-        Metadata m = metadataList.get(0);
-
-        assertEquals("2016-11-23T12:07:00Z", m.get(TikaCoreProperties.CREATED));
-        assertEquals("2016-11-23T12:07:00Z", m.get(TikaCoreProperties.MODIFIED));
-        assertEquals("My Document Title", m.get(TikaCoreProperties.TITLE));
-        assertEquals("This is the Author", m.get(TikaCoreProperties.CREATOR));
-        assertEquals("2", m.get(OfficeOpenXMLCore.REVISION));
-        assertEquals("Allison, Timothy B.", m.get(OfficeOpenXMLCore.LAST_MODIFIED_BY));
-        assertEquals("0", m.get(OfficeOpenXMLExtended.DOC_SECURITY));
-        assertEquals("225", m.get(Office.WORD_COUNT));
-        assertEquals("3", m.get(Office.PARAGRAPH_COUNT));
-        assertEquals("1506", m.get(Office.CHARACTER_COUNT_WITH_SPACES));
-        assertEquals("10", m.get(Office.LINE_COUNT));
-        assertEquals("16.0000", m.get(OfficeOpenXMLExtended.APP_VERSION));
-
-
-        String content = m.get(RecursiveParserWrapper.TIKA_CONTENT);
-
-
-        assertContainsCountTimes("engaging title page", content, 1);
-        assertContainsCountTimes("<p>This is the Author</p>", content, 1);
-        assertContainsCountTimes("<p>This is an engaging title page</p>", content, 1);
-
-        assertContains("<p>My Document Title</p>", content);
-        assertContains("<p>My Document Subtitle</p>", content);
-
-        assertContains("<p>\tHeading1\t3</p>", content);
-
-
-        //TODO: integrate numbering
-        assertContains("Really basic 2.", content);
-
-        assertContainsCountTimes("This is a text box", content, 1);
-
-        assertContains("<p>This is a hyperlink: <a href=\"http://tika.apache.org\">tika</a></p>", content);
-
-        assertContains("<p>This is a link to a local file: <a href=\"file:///C:\\data\\test.png\">test.png</a></p>", content);
-
-        assertContains("<p>This is          10 spaces</p>", content);
-
-        //caption
-        assertContains("<p>Table 1: Table1 Caption</p>", content);
-
-        //embedded table
-        //TODO: figure out how to handle embedded tables in html
-        assertContains("<p>Embedded table r1c1</p>", content);
-
-        //shape
-        assertContainsCountTimes("<p>This is text within a shape", content, 1);
-
-        //sdt rich text
-        assertContains("<p>Rich text content control", content);
-
-        //sdt simple text
-        assertContains("<p>Simple text content control", content);
-
-        //sdt repeating
-        assertContains("Repeating content", content);
-
-        //sdt dropdown
-        //TODO: get options for dropdown
-        assertContains("Drop down1", content);
-
-        //sdt date
-        assertContains("<p>11/16/2016</p>", content);
-
-        //test that <tab/> works
-        assertContains("tab\ttab", content);
-
-        assertContainsCountTimes("serious word art", content, 1);
-        assertContainsCountTimes("Wordartr1c1", content, 1);
-
-        //glossary document contents
-        assertContains("Click or tap to enter a date", content);
-
-        //basic formatting
-        assertContains("<p>The <i>quick</i> brown <b>fox </b>j<i>um</i><b><i>ped</i></b> over",
-                content);
-
-        //TODO: add chart parsing
-//        assertContains("This is the chart", content);
-
-        assertContains("This is a comment", content);
-
-        assertContains("This is an endnote", content);
-
-        assertContains("this is the footnote", content);
-
-        assertContains("First page header", content);
-
-        assertContains("Even page header", content);
-
-        assertContains("Odd page header", content);
-
-        assertContains("First page footer", content);
-
-        assertContains("Even page footer", content);
-
-        assertContains("Odd page footer", content);
-
-        //test default includes deleted
-        assertContains("frog", content);
-
-        assertContains("Mattmann", content);
-
-        //TODO: extract this...Note that it is in "Backup" not "Choice"!!!
-//        assertContains("This is the chart title", content);
-
-
-
-    }
-
-    private void assertContainsCountTimes(String needle, String haystack, int expectedCount) {
-        int i = haystack.indexOf("engaging title page");
-        int cnt = 0;
-        while (i > -1) {
-            cnt++;
-            i = haystack.indexOf("engaging title page", i+1);
-        }
-        assertEquals("found needle >"+ needle+"<"+cnt+" times instead of expected: "+expectedCount,
-                expectedCount, cnt);
-
-    }
-
-    @Test
-    public void testSkipDeleted() throws Exception {
-        ParseContext pc = new ParseContext();
-        MSOfficeParserConfig msOfficeParserConfig = new MSOfficeParserConfig();
-        msOfficeParserConfig.setIncludeDeletedContent(false);
-        pc.set(MSOfficeParserConfig.class, msOfficeParserConfig);
-
-        XMLResult r = getXML("testWORD_2006ml.xml", pc);
-        assertNotContained("frog", r.xml);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
new file mode 100644
index 0000000..79f1890
--- /dev/null
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParserTest.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.tika.TikaTest;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Office;
+import org.apache.tika.metadata.OfficeOpenXMLCore;
+import org.apache.tika.metadata.OfficeOpenXMLExtended;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.RecursiveParserWrapper;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.junit.Test;
+
+
+public class Word2006MLParserTest extends TikaTest {
+
+    @Test
+    public void basicTest() throws Exception {
+
+        List<Metadata> metadataList = getRecursiveMetadata("testWORD_2006ml.xml");
+
+        assertEquals(9, metadataList.size());
+
+        Metadata m = metadataList.get(0);
+
+        assertEquals("2016-11-29T17:54:00Z", m.get(TikaCoreProperties.CREATED));
+        assertEquals("2016-11-29T17:54:00Z", m.get(TikaCoreProperties.MODIFIED));
+        assertEquals("My Document Title", m.get(TikaCoreProperties.TITLE));
+        assertEquals("This is the Author", m.get(TikaCoreProperties.CREATOR));
+        assertEquals("2", m.get(OfficeOpenXMLCore.REVISION));
+        assertEquals("Allison, Timothy B.", m.get(TikaCoreProperties.MODIFIER));
+        assertEquals("0", m.get(OfficeOpenXMLExtended.DOC_SECURITY));
+        assertEquals("260", m.get(Office.WORD_COUNT));
+        assertEquals("3", m.get(Office.PARAGRAPH_COUNT));
+        assertEquals("1742", m.get(Office.CHARACTER_COUNT_WITH_SPACES));
+        assertEquals("12", m.get(Office.LINE_COUNT));
+        assertEquals("16.0000", m.get(OfficeOpenXMLExtended.APP_VERSION));
+
+
+        String content = m.get(RecursiveParserWrapper.TIKA_CONTENT);
+
+        assertContainsCount("This is the Author", content, 1);
+        assertContainsCount("This is an engaging title page", content, 1);
+
+        assertContains("My Document Title", content);
+        assertContains("My Document Subtitle", content);
+
+        assertContains("<p>\tHeading1\t3</p>", content);
+
+
+        //TODO: integrate numbering
+        assertContains("Really basic 2.", content);
+
+        assertContainsCount("This is a text box", content, 1);
+
+//        assertContains("<p>This is a hyperlink: <a href=\"http://tika.apache.org\">tika</a></p>", content);
+
+//        assertContains("<p>This is a link to a local file: <a href=\"file:///C:\\data\\test.png\">test.png</a></p>", content);
+
+        assertContains("<p>This is          10 spaces</p>", content);
+
+        //caption
+        assertContains("<p>Table 1: Table1 Caption</p>", content);
+
+        //embedded table
+        //TODO: figure out how to handle embedded tables in html
+        assertContains("<p>Embedded table r1c1</p>", content);
+
+        //shape
+        assertContainsCount("<p>This is text within a shape", content, 1);
+
+        //sdt rich text
+        assertContains("<p>Rich text content control", content);
+
+        //sdt simple text
+        assertContains("<p>Simple text content control", content);
+
+        //sdt repeating
+        assertContains("Repeating content", content);
+
+        //sdt dropdown
+        //TODO: get options for dropdown
+        assertContains("Drop down1", content);
+
+        //sdt date
+        assertContains("<p>11/16/2016</p>", content);
+
+        //test that <tab/> works
+        assertContains("tab\ttab", content);
+
+        assertContainsCount("serious word art", content, 1);
+        assertContainsCount("Wordartr1c1", content, 1);
+
+        //glossary document contents
+        assertContains("Click or tap to enter a date", content);
+
+        //basic formatting
+        assertContains("<p>The <i>quick</i> brown <b>fox </b>j<i>um</i><b><i>ped</i></b> over",
+                content);
+
+        //TODO: add chart parsing
+//        assertContains("This is the chart", content);
+
+        assertContains("This is a comment", content);
+
+        assertContains("This is an endnote", content);
+
+        assertContains("this is the footnote", content);
+
+        assertContains("First page header", content);
+
+        assertContains("Even page header", content);
+
+        assertContains("Odd page header", content);
+
+        assertContains("First page footer", content);
+
+        assertContains("Even page footer", content);
+
+        assertContains("Odd page footer", content);
+
+        //test default includes deleted
+        assertContains("frog", content);
+
+        assertContains("Mattmann", content);
+
+        //test default -- do not include moveFrom
+        assertContainsCount("Second paragraph", content, 1);
+
+        //TODO: figure out how to get this
+        //assertContains("This is the chart title", content);
+
+    }
+
+    @Test
+    public void testSkipDeletedAndMoveFrom() throws Exception {
+        ParseContext pc = new ParseContext();
+        OfficeParserConfig officeParserConfig = new OfficeParserConfig();
+        officeParserConfig.setIncludeDeletedContent(false);
+        officeParserConfig.setIncludeMoveFromContent(true);
+        pc.set(OfficeParserConfig.class, officeParserConfig);
+
+        XMLResult r = getXML("testWORD_2006ml.xml", pc);
+        assertNotContained("frog", r.xml);
+        assertContainsCount("Second paragraph", r.xml, 2);
+
+    }
+
+
+}


[3/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/resources/test-documents/testWORD_2003ml.xml
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/resources/test-documents/testWORD_2003ml.xml b/tika-parsers/src/test/resources/test-documents/testWORD_2003ml.xml
index e6735db..741273f 100644
--- a/tika-parsers/src/test/resources/test-documents/testWORD_2003ml.xml
+++ b/tika-parsers/src/test/resources/test-documents/testWORD_2003ml.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <?mso-application progid="Word.Document"?>
-<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" w:macrosPresent="no" w:embeddedObjPresent
 ="yes" w:ocxPresent="no" xml:space="preserve"><w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>My Document Title</o:Title><o:Subject>My Document Subtitle</o:Subject><o:Author>This is the Author</o:Author><o:LastAuthor>Allison, Timothy B.</o:LastAuthor><o:Revision>2</o:Revision><o:TotalTime>1</o:TotalTime><o:Created>2016-11-23T12:08:00Z</o:Created><o:LastSaved>2016-11-23T12:08:00Z</o:LastSaved><o:Pages>7</o:Pages><o:Words>217</o:Words><o:Characters>1243</o:Characters><o:Lines>10</o:Lines><o:Paragraphs>2</o:Paragraphs><o:CharactersWithSpaces>1458</o:CharactersWithSpaces><o:Version>16</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Calibri" w:fareast="PMingLiU" w:h-ansi="Calibri" w:cs="Arial"/><w:font w:name="Times New Roman"><w:panose-1 w:val="02020603050405020304"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:pitch w:val="variable"/><w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009
 " w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="Arial"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="PMingLiU"><w:altName w:val="Microsoft JhengHei"/><w:panose-1 w:val="02010601000101010101"/><w:charset w:val="88"/><w:family w:val="auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="08080000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="00100000" w:csb-1="00000000"/></w:font><w:font w:name="Cambria Math"><w:panose-1 w:val="02040503050406030204"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:pitch w:val="variable"/><w:sig w:usb-0="E00002FF" w:usb-1="420024FF" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Calibri Light"><w:panose-1 w:val="020F0302020204030
 204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="A00002EF" w:usb-1="4000207B" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Calibri"><w:panose-1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Segoe UI"><w:panose-1 w:val="020B0502040204020203"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E4002EFF" w:usb-1="C000E47F" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="@PMingLiU"><w:panose-1 w:val="02010601000101010101"/><w:charset w:val="88"/><w:family w:val="auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="08080000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="001
 00000" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="6A7C56AD"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="C2908A46"/><w:lvl w:ilvl="0" w:tplc="0409000F"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="
 4"/><w:lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="0"/></w:list></w:lists><w:styles><w:versionOfBuiltInStylena
 mes w:val="7"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="372"><w:lsdException w:name="Normal"/><w:lsdException w:name="heading 1"/><w:lsdException w:name="heading 2"/><w:lsdException w:name="heading 3"/><w:lsdException w:name="heading 4"/><w:lsdException w:name="heading 5"/><w:lsdException w:name="heading 6"/><w:lsdException w:name="heading 7"/><w:lsdException w:name="heading 8"/><w:lsdException w:name="heading 9"/><w:lsdException w:name="index 1"/><w:lsdException w:name="index 2"/><w:lsdException w:name="index 3"/><w:lsdException w:name="index 4"/><w:lsdException w:name="index 5"/><w:lsdException w:name="index 6"/><w:lsdException w:name="index 7"/><w:lsdException w:name="index 8"/><w:lsdException w:name="index 9"/><w:lsdException w:name="toc 1"/><w:lsdException w:name="toc 2"/><w:lsdException w:name="toc 3"/><w:lsdException w:name="toc 4"/><w:lsdException w:name="toc 5"/><w:lsdException w:name="toc 6"/><w:lsdException w:name="toc 7"/><w:lsdException w:name="toc 8"/
 ><w:lsdException w:name="toc 9"/><w:lsdException w:name="Normal Indent"/><w:lsdException w:name="footnote text"/><w:lsdException w:name="annotation text"/><w:lsdException w:name="header"/><w:lsdException w:name="footer"/><w:lsdException w:name="index heading"/><w:lsdException w:name="caption"/><w:lsdException w:name="table of figures"/><w:lsdException w:name="envelope address"/><w:lsdException w:name="envelope return"/><w:lsdException w:name="footnote reference"/><w:lsdException w:name="annotation reference"/><w:lsdException w:name="line number"/><w:lsdException w:name="page number"/><w:lsdException w:name="endnote reference"/><w:lsdException w:name="endnote text"/><w:lsdException w:name="table of authorities"/><w:lsdException w:name="macro"/><w:lsdException w:name="toa heading"/><w:lsdException w:name="List"/><w:lsdException w:name="List Bullet"/><w:lsdException w:name="List Number"/><w:lsdException w:name="List 2"/><w:lsdException w:name="List 3"/><w:lsdException w:name="List 4"/>
 <w:lsdException w:name="List 5"/><w:lsdException w:name="List Bullet 2"/><w:lsdException w:name="List Bullet 3"/><w:lsdException w:name="List Bullet 4"/><w:lsdException w:name="List Bullet 5"/><w:lsdException w:name="List Number 2"/><w:lsdException w:name="List Number 3"/><w:lsdException w:name="List Number 4"/><w:lsdException w:name="List Number 5"/><w:lsdException w:name="Title"/><w:lsdException w:name="Closing"/><w:lsdException w:name="Signature"/><w:lsdException w:name="Default Paragraph Font"/><w:lsdException w:name="Body Text"/><w:lsdException w:name="Body Text Indent"/><w:lsdException w:name="List Continue"/><w:lsdException w:name="List Continue 2"/><w:lsdException w:name="List Continue 3"/><w:lsdException w:name="List Continue 4"/><w:lsdException w:name="List Continue 5"/><w:lsdException w:name="Message Header"/><w:lsdException w:name="Subtitle"/><w:lsdException w:name="Salutation"/><w:lsdException w:name="Date"/><w:lsdException w:name="Body Text First Indent"/><w:lsdExcepti
 on w:name="Body Text First Indent 2"/><w:lsdException w:name="Note Heading"/><w:lsdException w:name="Body Text 2"/><w:lsdException w:name="Body Text 3"/><w:lsdException w:name="Body Text Indent 2"/><w:lsdException w:name="Body Text Indent 3"/><w:lsdException w:name="Block Text"/><w:lsdException w:name="Hyperlink"/><w:lsdException w:name="FollowedHyperlink"/><w:lsdException w:name="Strong"/><w:lsdException w:name="Emphasis"/><w:lsdException w:name="Document Map"/><w:lsdException w:name="Plain Text"/><w:lsdException w:name="E-mail Signature"/><w:lsdException w:name="HTML Top of Form"/><w:lsdException w:name="HTML Bottom of Form"/><w:lsdException w:name="Normal (Web)"/><w:lsdException w:name="HTML Acronym"/><w:lsdException w:name="HTML Address"/><w:lsdException w:name="HTML Cite"/><w:lsdException w:name="HTML Code"/><w:lsdException w:name="HTML Definition"/><w:lsdException w:name="HTML Keyboard"/><w:lsdException w:name="HTML Preformatted"/><w:lsdException w:name="HTML Sample"/><w:lsdEx
 ception w:name="HTML Typewriter"/><w:lsdException w:name="HTML Variable"/><w:lsdException w:name="Normal Table"/><w:lsdException w:name="annotation subject"/><w:lsdException w:name="No List"/><w:lsdException w:name="Outline List 1"/><w:lsdException w:name="Outline List 2"/><w:lsdException w:name="Outline List 3"/><w:lsdException w:name="Table Simple 1"/><w:lsdException w:name="Table Simple 2"/><w:lsdException w:name="Table Simple 3"/><w:lsdException w:name="Table Classic 1"/><w:lsdException w:name="Table Classic 2"/><w:lsdException w:name="Table Classic 3"/><w:lsdException w:name="Table Classic 4"/><w:lsdException w:name="Table Colorful 1"/><w:lsdException w:name="Table Colorful 2"/><w:lsdException w:name="Table Colorful 3"/><w:lsdException w:name="Table Columns 1"/><w:lsdException w:name="Table Columns 2"/><w:lsdException w:name="Table Columns 3"/><w:lsdException w:name="Table Columns 4"/><w:lsdException w:name="Table Columns 5"/><w:lsdException w:name="Table Grid 1"/><w:lsdExcepti
 on w:name="Table Grid 2"/><w:lsdException w:name="Table Grid 3"/><w:lsdException w:name="Table Grid 4"/><w:lsdException w:name="Table Grid 5"/><w:lsdException w:name="Table Grid 6"/><w:lsdException w:name="Table Grid 7"/><w:lsdException w:name="Table Grid 8"/><w:lsdException w:name="Table List 1"/><w:lsdException w:name="Table List 2"/><w:lsdException w:name="Table List 3"/><w:lsdException w:name="Table List 4"/><w:lsdException w:name="Table List 5"/><w:lsdException w:name="Table List 6"/><w:lsdException w:name="Table List 7"/><w:lsdException w:name="Table List 8"/><w:lsdException w:name="Table 3D effects 1"/><w:lsdException w:name="Table 3D effects 2"/><w:lsdException w:name="Table 3D effects 3"/><w:lsdException w:name="Table Contemporary"/><w:lsdException w:name="Table Elegant"/><w:lsdException w:name="Table Professional"/><w:lsdException w:name="Table Subtle 1"/><w:lsdException w:name="Table Subtle 2"/><w:lsdException w:name="Table Web 1"/><w:lsdException w:name="Table Web 2"/><w
 :lsdException w:name="Table Web 3"/><w:lsdException w:name="Balloon Text"/><w:lsdException w:name="Table Grid"/><w:lsdException w:name="Table Theme"/><w:lsdException w:name="Placeholder Text"/><w:lsdException w:name="No Spacing"/><w:lsdException w:name="Light Shading"/><w:lsdException w:name="Light List"/><w:lsdException w:name="Light Grid"/><w:lsdException w:name="Medium Shading 1"/><w:lsdException w:name="Medium Shading 2"/><w:lsdException w:name="Medium List 1"/><w:lsdException w:name="Medium List 2"/><w:lsdException w:name="Medium Grid 1"/><w:lsdException w:name="Medium Grid 2"/><w:lsdException w:name="Medium Grid 3"/><w:lsdException w:name="Dark List"/><w:lsdException w:name="Colorful Shading"/><w:lsdException w:name="Colorful List"/><w:lsdException w:name="Colorful Grid"/><w:lsdException w:name="Light Shading Accent 1"/><w:lsdException w:name="Light List Accent 1"/><w:lsdException w:name="Light Grid Accent 1"/><w:lsdException w:name="Medium Shading 1 Accent 1"/><w:lsdException
  w:name="Medium Shading 2 Accent 1"/><w:lsdException w:name="Medium List 1 Accent 1"/><w:lsdException w:name="Revision"/><w:lsdException w:name="List Paragraph"/><w:lsdException w:name="Quote"/><w:lsdException w:name="Intense Quote"/><w:lsdException w:name="Medium List 2 Accent 1"/><w:lsdException w:name="Medium Grid 1 Accent 1"/><w:lsdException w:name="Medium Grid 2 Accent 1"/><w:lsdException w:name="Medium Grid 3 Accent 1"/><w:lsdException w:name="Dark List Accent 1"/><w:lsdException w:name="Colorful Shading Accent 1"/><w:lsdException w:name="Colorful List Accent 1"/><w:lsdException w:name="Colorful Grid Accent 1"/><w:lsdException w:name="Light Shading Accent 2"/><w:lsdException w:name="Light List Accent 2"/><w:lsdException w:name="Light Grid Accent 2"/><w:lsdException w:name="Medium Shading 1 Accent 2"/><w:lsdException w:name="Medium Shading 2 Accent 2"/><w:lsdException w:name="Medium List 1 Accent 2"/><w:lsdException w:name="Medium List 2 Accent 2"/><w:lsdException w:name="Mediu
 m Grid 1 Accent 2"/><w:lsdException w:name="Medium Grid 2 Accent 2"/><w:lsdException w:name="Medium Grid 3 Accent 2"/><w:lsdException w:name="Dark List Accent 2"/><w:lsdException w:name="Colorful Shading Accent 2"/><w:lsdException w:name="Colorful List Accent 2"/><w:lsdException w:name="Colorful Grid Accent 2"/><w:lsdException w:name="Light Shading Accent 3"/><w:lsdException w:name="Light List Accent 3"/><w:lsdException w:name="Light Grid Accent 3"/><w:lsdException w:name="Medium Shading 1 Accent 3"/><w:lsdException w:name="Medium Shading 2 Accent 3"/><w:lsdException w:name="Medium List 1 Accent 3"/><w:lsdException w:name="Medium List 2 Accent 3"/><w:lsdException w:name="Medium Grid 1 Accent 3"/><w:lsdException w:name="Medium Grid 2 Accent 3"/><w:lsdException w:name="Medium Grid 3 Accent 3"/><w:lsdException w:name="Dark List Accent 3"/><w:lsdException w:name="Colorful Shading Accent 3"/><w:lsdException w:name="Colorful List Accent 3"/><w:lsdException w:name="Colorful Grid Accent 3"/
 ><w:lsdException w:name="Light Shading Accent 4"/><w:lsdException w:name="Light List Accent 4"/><w:lsdException w:name="Light Grid Accent 4"/><w:lsdException w:name="Medium Shading 1 Accent 4"/><w:lsdException w:name="Medium Shading 2 Accent 4"/><w:lsdException w:name="Medium List 1 Accent 4"/><w:lsdException w:name="Medium List 2 Accent 4"/><w:lsdException w:name="Medium Grid 1 Accent 4"/><w:lsdException w:name="Medium Grid 2 Accent 4"/><w:lsdException w:name="Medium Grid 3 Accent 4"/><w:lsdException w:name="Dark List Accent 4"/><w:lsdException w:name="Colorful Shading Accent 4"/><w:lsdException w:name="Colorful List Accent 4"/><w:lsdException w:name="Colorful Grid Accent 4"/><w:lsdException w:name="Light Shading Accent 5"/><w:lsdException w:name="Light List Accent 5"/><w:lsdException w:name="Light Grid Accent 5"/><w:lsdException w:name="Medium Shading 1 Accent 5"/><w:lsdException w:name="Medium Shading 2 Accent 5"/><w:lsdException w:name="Medium List 1 Accent 5"/><w:lsdException w
 :name="Medium List 2 Accent 5"/><w:lsdException w:name="Medium Grid 1 Accent 5"/><w:lsdException w:name="Medium Grid 2 Accent 5"/><w:lsdException w:name="Medium Grid 3 Accent 5"/><w:lsdException w:name="Dark List Accent 5"/><w:lsdException w:name="Colorful Shading Accent 5"/><w:lsdException w:name="Colorful List Accent 5"/><w:lsdException w:name="Colorful Grid Accent 5"/><w:lsdException w:name="Light Shading Accent 6"/><w:lsdException w:name="Light List Accent 6"/><w:lsdException w:name="Light Grid Accent 6"/><w:lsdException w:name="Medium Shading 1 Accent 6"/><w:lsdException w:name="Medium Shading 2 Accent 6"/><w:lsdException w:name="Medium List 1 Accent 6"/><w:lsdException w:name="Medium List 2 Accent 6"/><w:lsdException w:name="Medium Grid 1 Accent 6"/><w:lsdException w:name="Medium Grid 2 Accent 6"/><w:lsdException w:name="Medium Grid 3 Accent 6"/><w:lsdException w:name="Dark List Accent 6"/><w:lsdException w:name="Colorful Shading Accent 6"/><w:lsdException w:name="Colorful Lis
 t Accent 6"/><w:lsdException w:name="Colorful Grid Accent 6"/><w:lsdException w:name="Subtle Emphasis"/><w:lsdException w:name="Intense Emphasis"/><w:lsdException w:name="Subtle Reference"/><w:lsdException w:name="Intense Reference"/><w:lsdException w:name="Book Title"/><w:lsdException w:name="Bibliography"/><w:lsdException w:name="TOC Heading"/><w:lsdException w:name="Plain Table 1"/><w:lsdException w:name="Plain Table 2"/><w:lsdException w:name="Plain Table 3"/><w:lsdException w:name="Plain Table 4"/><w:lsdException w:name="Plain Table 5"/><w:lsdException w:name="Grid Table Light"/><w:lsdException w:name="Grid Table 1 Light"/><w:lsdException w:name="Grid Table 2"/><w:lsdException w:name="Grid Table 3"/><w:lsdException w:name="Grid Table 4"/><w:lsdException w:name="Grid Table 5 Dark"/><w:lsdException w:name="Grid Table 6 Colorful"/><w:lsdException w:name="Grid Table 7 Colorful"/><w:lsdException w:name="Grid Table 1 Light Accent 1"/><w:lsdException w:name="Grid Table 2 Accent 1"/><w
 :lsdException w:name="Grid Table 3 Accent 1"/><w:lsdException w:name="Grid Table 4 Accent 1"/><w:lsdException w:name="Grid Table 5 Dark Accent 1"/><w:lsdException w:name="Grid Table 6 Colorful Accent 1"/><w:lsdException w:name="Grid Table 7 Colorful Accent 1"/><w:lsdException w:name="Grid Table 1 Light Accent 2"/><w:lsdException w:name="Grid Table 2 Accent 2"/><w:lsdException w:name="Grid Table 3 Accent 2"/><w:lsdException w:name="Grid Table 4 Accent 2"/><w:lsdException w:name="Grid Table 5 Dark Accent 2"/><w:lsdException w:name="Grid Table 6 Colorful Accent 2"/><w:lsdException w:name="Grid Table 7 Colorful Accent 2"/><w:lsdException w:name="Grid Table 1 Light Accent 3"/><w:lsdException w:name="Grid Table 2 Accent 3"/><w:lsdException w:name="Grid Table 3 Accent 3"/><w:lsdException w:name="Grid Table 4 Accent 3"/><w:lsdException w:name="Grid Table 5 Dark Accent 3"/><w:lsdException w:name="Grid Table 6 Colorful Accent 3"/><w:lsdException w:name="Grid Table 7 Colorful Accent 3"/><w:lsd
 Exception w:name="Grid Table 1 Light Accent 4"/><w:lsdException w:name="Grid Table 2 Accent 4"/><w:lsdException w:name="Grid Table 3 Accent 4"/><w:lsdException w:name="Grid Table 4 Accent 4"/><w:lsdException w:name="Grid Table 5 Dark Accent 4"/><w:lsdException w:name="Grid Table 6 Colorful Accent 4"/><w:lsdException w:name="Grid Table 7 Colorful Accent 4"/><w:lsdException w:name="Grid Table 1 Light Accent 5"/><w:lsdException w:name="Grid Table 2 Accent 5"/><w:lsdException w:name="Grid Table 3 Accent 5"/><w:lsdException w:name="Grid Table 4 Accent 5"/><w:lsdException w:name="Grid Table 5 Dark Accent 5"/><w:lsdException w:name="Grid Table 6 Colorful Accent 5"/><w:lsdException w:name="Grid Table 7 Colorful Accent 5"/><w:lsdException w:name="Grid Table 1 Light Accent 6"/><w:lsdException w:name="Grid Table 2 Accent 6"/><w:lsdException w:name="Grid Table 3 Accent 6"/><w:lsdException w:name="Grid Table 4 Accent 6"/><w:lsdException w:name="Grid Table 5 Dark Accent 6"/><w:lsdException w:name
 ="Grid Table 6 Colorful Accent 6"/><w:lsdException w:name="Grid Table 7 Colorful Accent 6"/><w:lsdException w:name="List Table 1 Light"/><w:lsdException w:name="List Table 2"/><w:lsdException w:name="List Table 3"/><w:lsdException w:name="List Table 4"/><w:lsdException w:name="List Table 5 Dark"/><w:lsdException w:name="List Table 6 Colorful"/><w:lsdException w:name="List Table 7 Colorful"/><w:lsdException w:name="List Table 1 Light Accent 1"/><w:lsdException w:name="List Table 2 Accent 1"/><w:lsdException w:name="List Table 3 Accent 1"/><w:lsdException w:name="List Table 4 Accent 1"/><w:lsdException w:name="List Table 5 Dark Accent 1"/><w:lsdException w:name="List Table 6 Colorful Accent 1"/><w:lsdException w:name="List Table 7 Colorful Accent 1"/><w:lsdException w:name="List Table 1 Light Accent 2"/><w:lsdException w:name="List Table 2 Accent 2"/><w:lsdException w:name="List Table 3 Accent 2"/><w:lsdException w:name="List Table 4 Accent 2"/><w:lsdException w:name="List Table 5 Dar
 k Accent 2"/><w:lsdException w:name="List Table 6 Colorful Accent 2"/><w:lsdException w:name="List Table 7 Colorful Accent 2"/><w:lsdException w:name="List Table 1 Light Accent 3"/><w:lsdException w:name="List Table 2 Accent 3"/><w:lsdException w:name="List Table 3 Accent 3"/><w:lsdException w:name="List Table 4 Accent 3"/><w:lsdException w:name="List Table 5 Dark Accent 3"/><w:lsdException w:name="List Table 6 Colorful Accent 3"/><w:lsdException w:name="List Table 7 Colorful Accent 3"/><w:lsdException w:name="List Table 1 Light Accent 4"/><w:lsdException w:name="List Table 2 Accent 4"/><w:lsdException w:name="List Table 3 Accent 4"/><w:lsdException w:name="List Table 4 Accent 4"/><w:lsdException w:name="List Table 5 Dark Accent 4"/><w:lsdException w:name="List Table 6 Colorful Accent 4"/><w:lsdException w:name="List Table 7 Colorful Accent 4"/><w:lsdException w:name="List Table 1 Light Accent 5"/><w:lsdException w:name="List Table 2 Accent 5"/><w:lsdException w:name="List Table 3 A
 ccent 5"/><w:lsdException w:name="List Table 4 Accent 5"/><w:lsdException w:name="List Table 5 Dark Accent 5"/><w:lsdException w:name="List Table 6 Colorful Accent 5"/><w:lsdException w:name="List Table 7 Colorful Accent 5"/><w:lsdException w:name="List Table 1 Light Accent 6"/><w:lsdException w:name="List Table 2 Accent 6"/><w:lsdException w:name="List Table 3 Accent 6"/><w:lsdException w:name="List Table 4 Accent 6"/><w:lsdException w:name="List Table 5 Dark Accent 6"/><w:lsdException w:name="List Table 6 Colorful Accent 6"/><w:lsdException w:name="List Table 7 Colorful Accent 6"/><w:lsdException w:name="Mention"/></w:latentStyles><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:pPr><w:spacing w:after="160" w:line="259" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="ZH-TW" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><
 w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="Heading1Char"/><w:rsid w:val="00814CC8"/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before="240" w:after="0"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Calibri Light" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><wx:font wx:val="Calibri Light"/><w:color w:val="2E74B5"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:rPr><wx:font wx:val="Calibri"/><w:lang w:val="EN-US" w:fareast="ZH-TW" w:bidi="AR-SA"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:ty
 pe="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/></w:style><w:style w:type="paragraph" w:styleId="Header"><w:name w:val="header"/><wx:uiName wx:val="Header"/><w:basedOn w:val="Normal"/><w:link w:val="HeaderChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:tabs><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="HeaderChar"><w:name w:val="Header Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Header"/><w:rsid w:val="00814CC8"/></w:style><w:style w:type="paragraph" w:styleId="Footer"><w:name w:val="footer"/><wx:uiName wx:val="Footer"/><w:basedOn w:val="Normal"/><w:link w:val="FooterChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:tabs><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:
 after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="FooterChar"><w:name w:val="Footer Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Footer"/><w:rsid w:val="00814CC8"/></w:style><w:style w:type="paragraph" w:styleId="BalloonText"><w:name w:val="Balloon Text"/><w:basedOn w:val="Normal"/><w:link w:val="BalloonTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><w:rFonts w:ascii="Segoe UI" w:h-ansi="Segoe UI" w:cs="Segoe UI"/><wx:font wx:val="Segoe UI"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="character" w:styleId="BalloonTextChar"><w:name w:val="Balloon Text Char"/><w:link w:val="BalloonText"/><w:rsid w:val="00814CC8"/><w:rPr><w:rFonts w:ascii="Segoe UI" w:h-ansi="Segoe UI" w:cs="Segoe UI"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="L
 istParagraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:rsid w:val="00814CC8"/><w:pPr><w:ind w:left="720"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentReference"><w:name w:val="annotation reference"/><wx:uiName wx:val="Comment Reference"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentText"><w:name w:val="annotation text"/><wx:uiName wx:val="Comment Text"/><w:basedOn w:val="Normal"/><w:link w:val="CommentTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentTextChar"><w:name w:val="Comment Text Char"/><w:link w:val="CommentText"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style
 ><w:style w:type="paragraph" w:styleId="CommentSubject"><w:name w:val="annotation subject"/><wx:uiName wx:val="Comment Subject"/><w:basedOn w:val="CommentText"/><w:next w:val="CommentText"/><w:link w:val="CommentSubjectChar"/><w:rsid w:val="00814CC8"/><w:rPr><wx:font wx:val="Calibri"/><w:b/><w:b-cs/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentSubjectChar"><w:name w:val="Comment Subject Char"/><w:link w:val="CommentSubject"/><w:rsid w:val="00814CC8"/><w:rPr><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="FootnoteText"><w:name w:val="footnote text"/><wx:uiName wx:val="Footnote Text"/><w:basedOn w:val="Normal"/><w:link w:val="FootnoteTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="FootnoteTextChar"><w:name w:val="Foot
 note Text Char"/><w:link w:val="FootnoteText"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="FootnoteReference"><w:name w:val="footnote reference"/><wx:uiName wx:val="Footnote Reference"/><w:rsid w:val="00814CC8"/><w:rPr><w:vertAlign w:val="superscript"/></w:rPr></w:style><w:style w:type="character" w:styleId="Heading1Char"><w:name w:val="Heading 1 Char"/><w:link w:val="Heading1"/><w:rsid w:val="00814CC8"/><w:rPr><w:rFonts w:ascii="Calibri Light" w:fareast="PMingLiU" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><w:color w:val="2E74B5"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCHeading"><w:name w:val="TOC Heading"/><w:basedOn w:val="Heading1"/><w:next w:val="Normal"/><w:rsid w:val="00814CC8"/><w:pPr><w:outlineLvl w:val="9"/></w:pPr><w:rPr><wx:font wx:val="Calibri Light"/><w:lang w:fareast="EN-US"/></w:rPr></w:style><w:style w:type="character"
  w:styleId="Hyperlink"><w:name w:val="Hyperlink"/><w:rsid w:val="00814CC8"/><w:rPr><w:color w:val="0563C1"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:rsid w:val="00814CC8"/><w:rPr><wx:font wx:val="Calibri"/></w:rPr><w:tblPr><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders></w:tblPr></w:style><w:style w:type="character" w:styleId="PlaceholderText"><w:name w:val="Placeholder Text"/><w:rsid w:val="00814CC8"/><w:rPr><w:color w:val="808080"/>
 </w:rPr></w:style><w:style w:type="paragraph" w:styleId="EndnoteText"><w:name w:val="endnote text"/><wx:uiName wx:val="Endnote Text"/><w:basedOn w:val="Normal"/><w:link w:val="EndnoteTextChar"/><w:rsid w:val="00670AA1"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="EndnoteTextChar"><w:name w:val="Endnote Text Char"/><w:link w:val="EndnoteText"/><w:rsid w:val="00670AA1"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="EndnoteReference"><w:name w:val="endnote reference"/><wx:uiName wx:val="Endnote Reference"/><w:rsid w:val="00670AA1"/><w:rPr><w:vertAlign w:val="superscript"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Date"><w:name w:val="Date"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="DateChar"/><w:rsid w:val="00670AA1"/><w:rPr><wx:font wx:
 val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="DateChar"><w:name w:val="Date Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Date"/><w:rsid w:val="00670AA1"/></w:style><w:style w:type="paragraph" w:styleId="NoSpacing"><w:name w:val="No Spacing"/><w:link w:val="NoSpacingChar"/><w:rsid w:val="00711569"/><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="NoSpacingChar"><w:name w:val="No Spacing Char"/><w:link w:val="NoSpacing"/><w:rsid w:val="00711569"/><w:rPr><w:lang w:fareast="EN-US"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC1"><w:name w:val="toc 1"/><wx:uiName wx:val="TOC 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:autoRedefine/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="100"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:sty
 leId="Bibliography"><w:name w:val="Bibliography"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><wx:uiName wx:val="Caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="200" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:i/><w:i-cs/><w:color w:val="44546A"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofFigures"><w:name w:val="table of figures"/><wx:uiName wx:val="Table of Figures"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Index1"><w:name w:val="index 1"/><wx:uiName wx:val="Index 1"/><w:basedOn w:val="Normal"/><w:next w:va
 l="Normal"/><w:autoRedefine/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/><w:ind w:left="220" w:hanging="220"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOAHeading"><w:name w:val="toa heading"/><wx:uiName wx:val="TOA Heading"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:before="120"/></w:pPr><w:rPr><w:rFonts w:ascii="Calibri Light" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><wx:font wx:val="Calibri Light"/><w:b/><w:b-cs/><w:sz w:val="24"/><w:sz-cs w:val="24"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofAuthorities"><w:name w:val="table of authorities"/><wx:uiName wx:val="Table of Authorities"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0"/><w:ind w:left="220" w:hanging="220"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style></w:styles>
 <w:divs><w:div w:id="230694882"><w:bodyDiv w:val="on"/><w:marLeft w:val="0"/><w:marRight w:val="0"/><w:marTop w:val="0"/><w:marBottom w:val="0"/><w:divBdr><w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/></w:divBdr></w:div><w:div w:id="1411732106"><w:bodyDiv w:val="on"/><w:marLeft w:val="0"/><w:marRight w:val="0"/><w:marTop w:val="0"/><w:marBottom w:val="0"/><w:divBdr><w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/></w:divBdr></w:div></w:divs><w:docOleData><w:binData w:name="oledata.mso" xml:s
 pace="preserve">0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
-EAAAAgAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
+<w:wordDocument xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" w:macrosPresent="no" w:embeddedObjPresent
 ="yes" w:ocxPresent="no" xml:space="preserve"><w:ignoreSubtree w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>My Document Title</o:Title><o:Subject>My Document Subtitle</o:Subject><o:Author>This is the Author</o:Author><o:LastAuthor>Allison, Timothy B.</o:LastAuthor><o:Revision>2</o:Revision><o:TotalTime>0</o:TotalTime><o:Created>2016-11-29T19:21:00Z</o:Created><o:LastSaved>2016-11-29T19:21:00Z</o:LastSaved><o:Pages>7</o:Pages><o:Words>253</o:Words><o:Characters>1443</o:Characters><o:Lines>12</o:Lines><o:Paragraphs>3</o:Paragraphs><o:CharactersWithSpaces>1693</o:CharactersWithSpaces><o:Version>16</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Calibri" w:fareast="PMingLiU" w:h-ansi="Calibri" w:cs="Arial"/><w:font w:name="Times New Roman"><w:panose-1 w:val="02020603050405020304"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:pitch w:val="variable"/><w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009
 " w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="Arial"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="PMingLiU"><w:altName w:val="\u65b0\u7d30\u660e\u9ad4"/><w:panose-1 w:val="02010601000101010101"/><w:charset w:val="88"/><w:family w:val="auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="08080000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="00100000" w:csb-1="00000000"/></w:font><w:font w:name="Cambria Math"><w:panose-1 w:val="02040503050406030204"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:pitch w:val="variable"/><w:sig w:usb-0="E00002FF" w:usb-1="420024FF" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Calibri Light"><w:panose-1 w:val="020F0302020204030204"/>
 <w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="A00002EF" w:usb-1="4000207B" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Calibri"><w:panose-1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="0000019F" w:csb-1="00000000"/></w:font><w:font w:name="Segoe UI"><w:panose-1 w:val="020B0502040204020203"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="E4002EFF" w:usb-1="C000E47F" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/></w:font><w:font w:name="@PMingLiU"><w:panose-1 w:val="02010601000101010101"/><w:charset w:val="88"/><w:family w:val="auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="08080000" w:usb-2="00000010" w:usb-3="00000000" w:csb-0="00100000"
  w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="6A7C56AD"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="C2908A46"/><w:lvl w:ilvl="0" w:tplc="0409000F"><w:start w:val="1"/><w:lvlText w:val="%1."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="720" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%2."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1440" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="2" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%3."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="2160" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="3" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%4."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2880" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w
 :lvlText w:val="%5."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3600" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="5" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%6."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="4320" w:hanging="180"/></w:pPr></w:lvl><w:lvl w:ilvl="6" w:tplc="0409000F" w:tentative="on"><w:start w:val="1"/><w:lvlText w:val="%7."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="5040" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090019" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="4"/><w:lvlText w:val="%8."/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="5760" w:hanging="360"/></w:pPr></w:lvl><w:lvl w:ilvl="8" w:tplc="0409001B" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="2"/><w:lvlText w:val="%9."/><w:lvlJc w:val="right"/><w:pPr><w:ind w:left="6480" w:hanging="180"/></w:pPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="0"/></w:list></w:lists><w:styles><w:versionOfBuiltInStylenames w:
 val="7"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="372"><w:lsdException w:name="Normal"/><w:lsdException w:name="heading 1"/><w:lsdException w:name="heading 2"/><w:lsdException w:name="heading 3"/><w:lsdException w:name="heading 4"/><w:lsdException w:name="heading 5"/><w:lsdException w:name="heading 6"/><w:lsdException w:name="heading 7"/><w:lsdException w:name="heading 8"/><w:lsdException w:name="heading 9"/><w:lsdException w:name="index 1"/><w:lsdException w:name="index 2"/><w:lsdException w:name="index 3"/><w:lsdException w:name="index 4"/><w:lsdException w:name="index 5"/><w:lsdException w:name="index 6"/><w:lsdException w:name="index 7"/><w:lsdException w:name="index 8"/><w:lsdException w:name="index 9"/><w:lsdException w:name="toc 1"/><w:lsdException w:name="toc 2"/><w:lsdException w:name="toc 3"/><w:lsdException w:name="toc 4"/><w:lsdException w:name="toc 5"/><w:lsdException w:name="toc 6"/><w:lsdException w:name="toc 7"/><w:lsdException w:name="toc 8"/><w:ls
 dException w:name="toc 9"/><w:lsdException w:name="Normal Indent"/><w:lsdException w:name="footnote text"/><w:lsdException w:name="annotation text"/><w:lsdException w:name="header"/><w:lsdException w:name="footer"/><w:lsdException w:name="index heading"/><w:lsdException w:name="caption"/><w:lsdException w:name="table of figures"/><w:lsdException w:name="envelope address"/><w:lsdException w:name="envelope return"/><w:lsdException w:name="footnote reference"/><w:lsdException w:name="annotation reference"/><w:lsdException w:name="line number"/><w:lsdException w:name="page number"/><w:lsdException w:name="endnote reference"/><w:lsdException w:name="endnote text"/><w:lsdException w:name="table of authorities"/><w:lsdException w:name="macro"/><w:lsdException w:name="toa heading"/><w:lsdException w:name="List"/><w:lsdException w:name="List Bullet"/><w:lsdException w:name="List Number"/><w:lsdException w:name="List 2"/><w:lsdException w:name="List 3"/><w:lsdException w:name="List 4"/><w:lsd
 Exception w:name="List 5"/><w:lsdException w:name="List Bullet 2"/><w:lsdException w:name="List Bullet 3"/><w:lsdException w:name="List Bullet 4"/><w:lsdException w:name="List Bullet 5"/><w:lsdException w:name="List Number 2"/><w:lsdException w:name="List Number 3"/><w:lsdException w:name="List Number 4"/><w:lsdException w:name="List Number 5"/><w:lsdException w:name="Title"/><w:lsdException w:name="Closing"/><w:lsdException w:name="Signature"/><w:lsdException w:name="Default Paragraph Font"/><w:lsdException w:name="Body Text"/><w:lsdException w:name="Body Text Indent"/><w:lsdException w:name="List Continue"/><w:lsdException w:name="List Continue 2"/><w:lsdException w:name="List Continue 3"/><w:lsdException w:name="List Continue 4"/><w:lsdException w:name="List Continue 5"/><w:lsdException w:name="Message Header"/><w:lsdException w:name="Subtitle"/><w:lsdException w:name="Salutation"/><w:lsdException w:name="Date"/><w:lsdException w:name="Body Text First Indent"/><w:lsdException w:n
 ame="Body Text First Indent 2"/><w:lsdException w:name="Note Heading"/><w:lsdException w:name="Body Text 2"/><w:lsdException w:name="Body Text 3"/><w:lsdException w:name="Body Text Indent 2"/><w:lsdException w:name="Body Text Indent 3"/><w:lsdException w:name="Block Text"/><w:lsdException w:name="Hyperlink"/><w:lsdException w:name="FollowedHyperlink"/><w:lsdException w:name="Strong"/><w:lsdException w:name="Emphasis"/><w:lsdException w:name="Document Map"/><w:lsdException w:name="Plain Text"/><w:lsdException w:name="E-mail Signature"/><w:lsdException w:name="HTML Top of Form"/><w:lsdException w:name="HTML Bottom of Form"/><w:lsdException w:name="Normal (Web)"/><w:lsdException w:name="HTML Acronym"/><w:lsdException w:name="HTML Address"/><w:lsdException w:name="HTML Cite"/><w:lsdException w:name="HTML Code"/><w:lsdException w:name="HTML Definition"/><w:lsdException w:name="HTML Keyboard"/><w:lsdException w:name="HTML Preformatted"/><w:lsdException w:name="HTML Sample"/><w:lsdExceptio
 n w:name="HTML Typewriter"/><w:lsdException w:name="HTML Variable"/><w:lsdException w:name="Normal Table"/><w:lsdException w:name="annotation subject"/><w:lsdException w:name="No List"/><w:lsdException w:name="Outline List 1"/><w:lsdException w:name="Outline List 2"/><w:lsdException w:name="Outline List 3"/><w:lsdException w:name="Table Simple 1"/><w:lsdException w:name="Table Simple 2"/><w:lsdException w:name="Table Simple 3"/><w:lsdException w:name="Table Classic 1"/><w:lsdException w:name="Table Classic 2"/><w:lsdException w:name="Table Classic 3"/><w:lsdException w:name="Table Classic 4"/><w:lsdException w:name="Table Colorful 1"/><w:lsdException w:name="Table Colorful 2"/><w:lsdException w:name="Table Colorful 3"/><w:lsdException w:name="Table Columns 1"/><w:lsdException w:name="Table Columns 2"/><w:lsdException w:name="Table Columns 3"/><w:lsdException w:name="Table Columns 4"/><w:lsdException w:name="Table Columns 5"/><w:lsdException w:name="Table Grid 1"/><w:lsdException w:n
 ame="Table Grid 2"/><w:lsdException w:name="Table Grid 3"/><w:lsdException w:name="Table Grid 4"/><w:lsdException w:name="Table Grid 5"/><w:lsdException w:name="Table Grid 6"/><w:lsdException w:name="Table Grid 7"/><w:lsdException w:name="Table Grid 8"/><w:lsdException w:name="Table List 1"/><w:lsdException w:name="Table List 2"/><w:lsdException w:name="Table List 3"/><w:lsdException w:name="Table List 4"/><w:lsdException w:name="Table List 5"/><w:lsdException w:name="Table List 6"/><w:lsdException w:name="Table List 7"/><w:lsdException w:name="Table List 8"/><w:lsdException w:name="Table 3D effects 1"/><w:lsdException w:name="Table 3D effects 2"/><w:lsdException w:name="Table 3D effects 3"/><w:lsdException w:name="Table Contemporary"/><w:lsdException w:name="Table Elegant"/><w:lsdException w:name="Table Professional"/><w:lsdException w:name="Table Subtle 1"/><w:lsdException w:name="Table Subtle 2"/><w:lsdException w:name="Table Web 1"/><w:lsdException w:name="Table Web 2"/><w:lsdEx
 ception w:name="Table Web 3"/><w:lsdException w:name="Balloon Text"/><w:lsdException w:name="Table Grid"/><w:lsdException w:name="Table Theme"/><w:lsdException w:name="Placeholder Text"/><w:lsdException w:name="No Spacing"/><w:lsdException w:name="Light Shading"/><w:lsdException w:name="Light List"/><w:lsdException w:name="Light Grid"/><w:lsdException w:name="Medium Shading 1"/><w:lsdException w:name="Medium Shading 2"/><w:lsdException w:name="Medium List 1"/><w:lsdException w:name="Medium List 2"/><w:lsdException w:name="Medium Grid 1"/><w:lsdException w:name="Medium Grid 2"/><w:lsdException w:name="Medium Grid 3"/><w:lsdException w:name="Dark List"/><w:lsdException w:name="Colorful Shading"/><w:lsdException w:name="Colorful List"/><w:lsdException w:name="Colorful Grid"/><w:lsdException w:name="Light Shading Accent 1"/><w:lsdException w:name="Light List Accent 1"/><w:lsdException w:name="Light Grid Accent 1"/><w:lsdException w:name="Medium Shading 1 Accent 1"/><w:lsdException w:nam
 e="Medium Shading 2 Accent 1"/><w:lsdException w:name="Medium List 1 Accent 1"/><w:lsdException w:name="Revision"/><w:lsdException w:name="List Paragraph"/><w:lsdException w:name="Quote"/><w:lsdException w:name="Intense Quote"/><w:lsdException w:name="Medium List 2 Accent 1"/><w:lsdException w:name="Medium Grid 1 Accent 1"/><w:lsdException w:name="Medium Grid 2 Accent 1"/><w:lsdException w:name="Medium Grid 3 Accent 1"/><w:lsdException w:name="Dark List Accent 1"/><w:lsdException w:name="Colorful Shading Accent 1"/><w:lsdException w:name="Colorful List Accent 1"/><w:lsdException w:name="Colorful Grid Accent 1"/><w:lsdException w:name="Light Shading Accent 2"/><w:lsdException w:name="Light List Accent 2"/><w:lsdException w:name="Light Grid Accent 2"/><w:lsdException w:name="Medium Shading 1 Accent 2"/><w:lsdException w:name="Medium Shading 2 Accent 2"/><w:lsdException w:name="Medium List 1 Accent 2"/><w:lsdException w:name="Medium List 2 Accent 2"/><w:lsdException w:name="Medium Grid
  1 Accent 2"/><w:lsdException w:name="Medium Grid 2 Accent 2"/><w:lsdException w:name="Medium Grid 3 Accent 2"/><w:lsdException w:name="Dark List Accent 2"/><w:lsdException w:name="Colorful Shading Accent 2"/><w:lsdException w:name="Colorful List Accent 2"/><w:lsdException w:name="Colorful Grid Accent 2"/><w:lsdException w:name="Light Shading Accent 3"/><w:lsdException w:name="Light List Accent 3"/><w:lsdException w:name="Light Grid Accent 3"/><w:lsdException w:name="Medium Shading 1 Accent 3"/><w:lsdException w:name="Medium Shading 2 Accent 3"/><w:lsdException w:name="Medium List 1 Accent 3"/><w:lsdException w:name="Medium List 2 Accent 3"/><w:lsdException w:name="Medium Grid 1 Accent 3"/><w:lsdException w:name="Medium Grid 2 Accent 3"/><w:lsdException w:name="Medium Grid 3 Accent 3"/><w:lsdException w:name="Dark List Accent 3"/><w:lsdException w:name="Colorful Shading Accent 3"/><w:lsdException w:name="Colorful List Accent 3"/><w:lsdException w:name="Colorful Grid Accent 3"/><w:ls
 dException w:name="Light Shading Accent 4"/><w:lsdException w:name="Light List Accent 4"/><w:lsdException w:name="Light Grid Accent 4"/><w:lsdException w:name="Medium Shading 1 Accent 4"/><w:lsdException w:name="Medium Shading 2 Accent 4"/><w:lsdException w:name="Medium List 1 Accent 4"/><w:lsdException w:name="Medium List 2 Accent 4"/><w:lsdException w:name="Medium Grid 1 Accent 4"/><w:lsdException w:name="Medium Grid 2 Accent 4"/><w:lsdException w:name="Medium Grid 3 Accent 4"/><w:lsdException w:name="Dark List Accent 4"/><w:lsdException w:name="Colorful Shading Accent 4"/><w:lsdException w:name="Colorful List Accent 4"/><w:lsdException w:name="Colorful Grid Accent 4"/><w:lsdException w:name="Light Shading Accent 5"/><w:lsdException w:name="Light List Accent 5"/><w:lsdException w:name="Light Grid Accent 5"/><w:lsdException w:name="Medium Shading 1 Accent 5"/><w:lsdException w:name="Medium Shading 2 Accent 5"/><w:lsdException w:name="Medium List 1 Accent 5"/><w:lsdException w:name=
 "Medium List 2 Accent 5"/><w:lsdException w:name="Medium Grid 1 Accent 5"/><w:lsdException w:name="Medium Grid 2 Accent 5"/><w:lsdException w:name="Medium Grid 3 Accent 5"/><w:lsdException w:name="Dark List Accent 5"/><w:lsdException w:name="Colorful Shading Accent 5"/><w:lsdException w:name="Colorful List Accent 5"/><w:lsdException w:name="Colorful Grid Accent 5"/><w:lsdException w:name="Light Shading Accent 6"/><w:lsdException w:name="Light List Accent 6"/><w:lsdException w:name="Light Grid Accent 6"/><w:lsdException w:name="Medium Shading 1 Accent 6"/><w:lsdException w:name="Medium Shading 2 Accent 6"/><w:lsdException w:name="Medium List 1 Accent 6"/><w:lsdException w:name="Medium List 2 Accent 6"/><w:lsdException w:name="Medium Grid 1 Accent 6"/><w:lsdException w:name="Medium Grid 2 Accent 6"/><w:lsdException w:name="Medium Grid 3 Accent 6"/><w:lsdException w:name="Dark List Accent 6"/><w:lsdException w:name="Colorful Shading Accent 6"/><w:lsdException w:name="Colorful List Acce
 nt 6"/><w:lsdException w:name="Colorful Grid Accent 6"/><w:lsdException w:name="Subtle Emphasis"/><w:lsdException w:name="Intense Emphasis"/><w:lsdException w:name="Subtle Reference"/><w:lsdException w:name="Intense Reference"/><w:lsdException w:name="Book Title"/><w:lsdException w:name="Bibliography"/><w:lsdException w:name="TOC Heading"/><w:lsdException w:name="Plain Table 1"/><w:lsdException w:name="Plain Table 2"/><w:lsdException w:name="Plain Table 3"/><w:lsdException w:name="Plain Table 4"/><w:lsdException w:name="Plain Table 5"/><w:lsdException w:name="Grid Table Light"/><w:lsdException w:name="Grid Table 1 Light"/><w:lsdException w:name="Grid Table 2"/><w:lsdException w:name="Grid Table 3"/><w:lsdException w:name="Grid Table 4"/><w:lsdException w:name="Grid Table 5 Dark"/><w:lsdException w:name="Grid Table 6 Colorful"/><w:lsdException w:name="Grid Table 7 Colorful"/><w:lsdException w:name="Grid Table 1 Light Accent 1"/><w:lsdException w:name="Grid Table 2 Accent 1"/><w:lsdEx
 ception w:name="Grid Table 3 Accent 1"/><w:lsdException w:name="Grid Table 4 Accent 1"/><w:lsdException w:name="Grid Table 5 Dark Accent 1"/><w:lsdException w:name="Grid Table 6 Colorful Accent 1"/><w:lsdException w:name="Grid Table 7 Colorful Accent 1"/><w:lsdException w:name="Grid Table 1 Light Accent 2"/><w:lsdException w:name="Grid Table 2 Accent 2"/><w:lsdException w:name="Grid Table 3 Accent 2"/><w:lsdException w:name="Grid Table 4 Accent 2"/><w:lsdException w:name="Grid Table 5 Dark Accent 2"/><w:lsdException w:name="Grid Table 6 Colorful Accent 2"/><w:lsdException w:name="Grid Table 7 Colorful Accent 2"/><w:lsdException w:name="Grid Table 1 Light Accent 3"/><w:lsdException w:name="Grid Table 2 Accent 3"/><w:lsdException w:name="Grid Table 3 Accent 3"/><w:lsdException w:name="Grid Table 4 Accent 3"/><w:lsdException w:name="Grid Table 5 Dark Accent 3"/><w:lsdException w:name="Grid Table 6 Colorful Accent 3"/><w:lsdException w:name="Grid Table 7 Colorful Accent 3"/><w:lsdExcept
 ion w:name="Grid Table 1 Light Accent 4"/><w:lsdException w:name="Grid Table 2 Accent 4"/><w:lsdException w:name="Grid Table 3 Accent 4"/><w:lsdException w:name="Grid Table 4 Accent 4"/><w:lsdException w:name="Grid Table 5 Dark Accent 4"/><w:lsdException w:name="Grid Table 6 Colorful Accent 4"/><w:lsdException w:name="Grid Table 7 Colorful Accent 4"/><w:lsdException w:name="Grid Table 1 Light Accent 5"/><w:lsdException w:name="Grid Table 2 Accent 5"/><w:lsdException w:name="Grid Table 3 Accent 5"/><w:lsdException w:name="Grid Table 4 Accent 5"/><w:lsdException w:name="Grid Table 5 Dark Accent 5"/><w:lsdException w:name="Grid Table 6 Colorful Accent 5"/><w:lsdException w:name="Grid Table 7 Colorful Accent 5"/><w:lsdException w:name="Grid Table 1 Light Accent 6"/><w:lsdException w:name="Grid Table 2 Accent 6"/><w:lsdException w:name="Grid Table 3 Accent 6"/><w:lsdException w:name="Grid Table 4 Accent 6"/><w:lsdException w:name="Grid Table 5 Dark Accent 6"/><w:lsdException w:name="Grid
  Table 6 Colorful Accent 6"/><w:lsdException w:name="Grid Table 7 Colorful Accent 6"/><w:lsdException w:name="List Table 1 Light"/><w:lsdException w:name="List Table 2"/><w:lsdException w:name="List Table 3"/><w:lsdException w:name="List Table 4"/><w:lsdException w:name="List Table 5 Dark"/><w:lsdException w:name="List Table 6 Colorful"/><w:lsdException w:name="List Table 7 Colorful"/><w:lsdException w:name="List Table 1 Light Accent 1"/><w:lsdException w:name="List Table 2 Accent 1"/><w:lsdException w:name="List Table 3 Accent 1"/><w:lsdException w:name="List Table 4 Accent 1"/><w:lsdException w:name="List Table 5 Dark Accent 1"/><w:lsdException w:name="List Table 6 Colorful Accent 1"/><w:lsdException w:name="List Table 7 Colorful Accent 1"/><w:lsdException w:name="List Table 1 Light Accent 2"/><w:lsdException w:name="List Table 2 Accent 2"/><w:lsdException w:name="List Table 3 Accent 2"/><w:lsdException w:name="List Table 4 Accent 2"/><w:lsdException w:name="List Table 5 Dark Acce
 nt 2"/><w:lsdException w:name="List Table 6 Colorful Accent 2"/><w:lsdException w:name="List Table 7 Colorful Accent 2"/><w:lsdException w:name="List Table 1 Light Accent 3"/><w:lsdException w:name="List Table 2 Accent 3"/><w:lsdException w:name="List Table 3 Accent 3"/><w:lsdException w:name="List Table 4 Accent 3"/><w:lsdException w:name="List Table 5 Dark Accent 3"/><w:lsdException w:name="List Table 6 Colorful Accent 3"/><w:lsdException w:name="List Table 7 Colorful Accent 3"/><w:lsdException w:name="List Table 1 Light Accent 4"/><w:lsdException w:name="List Table 2 Accent 4"/><w:lsdException w:name="List Table 3 Accent 4"/><w:lsdException w:name="List Table 4 Accent 4"/><w:lsdException w:name="List Table 5 Dark Accent 4"/><w:lsdException w:name="List Table 6 Colorful Accent 4"/><w:lsdException w:name="List Table 7 Colorful Accent 4"/><w:lsdException w:name="List Table 1 Light Accent 5"/><w:lsdException w:name="List Table 2 Accent 5"/><w:lsdException w:name="List Table 3 Accent 
 5"/><w:lsdException w:name="List Table 4 Accent 5"/><w:lsdException w:name="List Table 5 Dark Accent 5"/><w:lsdException w:name="List Table 6 Colorful Accent 5"/><w:lsdException w:name="List Table 7 Colorful Accent 5"/><w:lsdException w:name="List Table 1 Light Accent 6"/><w:lsdException w:name="List Table 2 Accent 6"/><w:lsdException w:name="List Table 3 Accent 6"/><w:lsdException w:name="List Table 4 Accent 6"/><w:lsdException w:name="List Table 5 Dark Accent 6"/><w:lsdException w:name="List Table 6 Colorful Accent 6"/><w:lsdException w:name="List Table 7 Colorful Accent 6"/><w:lsdException w:name="Mention"/></w:latentStyles><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:pPr><w:spacing w:after="160" w:line="259" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="ZH-TW" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name
  w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="Heading1Char"/><w:rsid w:val="00814CC8"/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before="240" w:after="0"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Calibri Light" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><wx:font wx:val="Calibri Light"/><w:color w:val="2E74B5"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:rPr><wx:font wx:val="Calibri"/><w:lang w:val="EN-US" w:fareast="ZH-TW" w:bidi="AR-SA"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dx
 a"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/></w:style><w:style w:type="paragraph" w:styleId="Header"><w:name w:val="header"/><wx:uiName wx:val="Header"/><w:basedOn w:val="Normal"/><w:link w:val="HeaderChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:tabs><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="HeaderChar"><w:name w:val="Header Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Header"/><w:rsid w:val="00814CC8"/></w:style><w:style w:type="paragraph" w:styleId="Footer"><w:name w:val="footer"/><wx:uiName wx:val="Footer"/><w:basedOn w:val="Normal"/><w:link w:val="FooterChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:tabs><w:tab w:val="center" w:pos="4680"/><w:tab w:val="right" w:pos="9360"/></w:tabs><w:spacing w:after=
 "0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="FooterChar"><w:name w:val="Footer Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Footer"/><w:rsid w:val="00814CC8"/></w:style><w:style w:type="paragraph" w:styleId="BalloonText"><w:name w:val="Balloon Text"/><w:basedOn w:val="Normal"/><w:link w:val="BalloonTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><w:rFonts w:ascii="Segoe UI" w:h-ansi="Segoe UI" w:cs="Segoe UI"/><wx:font wx:val="Segoe UI"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="character" w:styleId="BalloonTextChar"><w:name w:val="Balloon Text Char"/><w:link w:val="BalloonText"/><w:rsid w:val="00814CC8"/><w:rPr><w:rFonts w:ascii="Segoe UI" w:h-ansi="Segoe UI" w:cs="Segoe UI"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="ListPar
 agraph"><w:name w:val="List Paragraph"/><w:basedOn w:val="Normal"/><w:rsid w:val="00814CC8"/><w:pPr><w:ind w:left="720"/><w:contextualSpacing/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentReference"><w:name w:val="annotation reference"/><wx:uiName wx:val="Comment Reference"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="16"/><w:sz-cs w:val="16"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CommentText"><w:name w:val="annotation text"/><wx:uiName wx:val="Comment Text"/><w:basedOn w:val="Normal"/><w:link w:val="CommentTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentTextChar"><w:name w:val="Comment Text Char"/><w:link w:val="CommentText"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:st
 yle w:type="paragraph" w:styleId="CommentSubject"><w:name w:val="annotation subject"/><wx:uiName wx:val="Comment Subject"/><w:basedOn w:val="CommentText"/><w:next w:val="CommentText"/><w:link w:val="CommentSubjectChar"/><w:rsid w:val="00814CC8"/><w:rPr><wx:font wx:val="Calibri"/><w:b/><w:b-cs/></w:rPr></w:style><w:style w:type="character" w:styleId="CommentSubjectChar"><w:name w:val="Comment Subject Char"/><w:link w:val="CommentSubject"/><w:rsid w:val="00814CC8"/><w:rPr><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="FootnoteText"><w:name w:val="footnote text"/><wx:uiName wx:val="Footnote Text"/><w:basedOn w:val="Normal"/><w:link w:val="FootnoteTextChar"/><w:rsid w:val="00814CC8"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="FootnoteTextChar"><w:name w:val="Footnote T
 ext Char"/><w:link w:val="FootnoteText"/><w:rsid w:val="00814CC8"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="FootnoteReference"><w:name w:val="footnote reference"/><wx:uiName wx:val="Footnote Reference"/><w:rsid w:val="00814CC8"/><w:rPr><w:vertAlign w:val="superscript"/></w:rPr></w:style><w:style w:type="character" w:styleId="Heading1Char"><w:name w:val="Heading 1 Char"/><w:link w:val="Heading1"/><w:rsid w:val="00814CC8"/><w:rPr><w:rFonts w:ascii="Calibri Light" w:fareast="PMingLiU" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><w:color w:val="2E74B5"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOCHeading"><w:name w:val="TOC Heading"/><w:basedOn w:val="Heading1"/><w:next w:val="Normal"/><w:rsid w:val="00814CC8"/><w:pPr><w:outlineLvl w:val="9"/></w:pPr><w:rPr><wx:font wx:val="Calibri Light"/><w:lang w:fareast="EN-US"/></w:rPr></w:style><w:style w:type="character" w:sty
 leId="Hyperlink"><w:name w:val="Hyperlink"/><w:rsid w:val="00814CC8"/><w:rPr><w:color w:val="0563C1"/><w:u w:val="single"/></w:rPr></w:style><w:style w:type="table" w:styleId="TableGrid"><w:name w:val="Table Grid"/><w:basedOn w:val="TableNormal"/><w:rsid w:val="00814CC8"/><w:rPr><wx:font wx:val="Calibri"/></w:rPr><w:tblPr><w:tblBorders><w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/><w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/></w:tblBorders></w:tblPr></w:style><w:style w:type="character" w:styleId="PlaceholderText"><w:name w:val="Placeholder Text"/><w:rsid w:val="00814CC8"/><w:rPr><w:color w:val="808080"/></w:rP
 r></w:style><w:style w:type="paragraph" w:styleId="EndnoteText"><w:name w:val="endnote text"/><wx:uiName wx:val="Endnote Text"/><w:basedOn w:val="Normal"/><w:link w:val="EndnoteTextChar"/><w:rsid w:val="00670AA1"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="EndnoteTextChar"><w:name w:val="Endnote Text Char"/><w:link w:val="EndnoteText"/><w:rsid w:val="00670AA1"/><w:rPr><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style><w:style w:type="character" w:styleId="EndnoteReference"><w:name w:val="endnote reference"/><wx:uiName wx:val="Endnote Reference"/><w:rsid w:val="00670AA1"/><w:rPr><w:vertAlign w:val="superscript"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Date"><w:name w:val="Date"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:link w:val="DateChar"/><w:rsid w:val="00670AA1"/><w:rPr><wx:font wx:val="C
 alibri"/></w:rPr></w:style><w:style w:type="character" w:styleId="DateChar"><w:name w:val="Date Char"/><w:basedOn w:val="DefaultParagraphFont"/><w:link w:val="Date"/><w:rsid w:val="00670AA1"/></w:style><w:style w:type="paragraph" w:styleId="NoSpacing"><w:name w:val="No Spacing"/><w:link w:val="NoSpacingChar"/><w:rsid w:val="00711569"/><w:rPr><wx:font wx:val="Calibri"/><w:sz w:val="22"/><w:sz-cs w:val="22"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:styleId="NoSpacingChar"><w:name w:val="No Spacing Char"/><w:link w:val="NoSpacing"/><w:rsid w:val="00711569"/><w:rPr><w:lang w:fareast="EN-US"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOC1"><w:name w:val="toc 1"/><wx:uiName wx:val="TOC 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:autoRedefine/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="100"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="
 Bibliography"><w:name w:val="Bibliography"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Caption"><w:name w:val="caption"/><wx:uiName wx:val="Caption"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="200" w:line="240" w:line-rule="auto"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/><w:i/><w:i-cs/><w:color w:val="44546A"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofFigures"><w:name w:val="table of figures"/><wx:uiName wx:val="Table of Figures"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Index1"><w:name w:val="index 1"/><wx:uiName wx:val="Index 1"/><w:basedOn w:val="Normal"/><w:next w:val="Nor
 mal"/><w:autoRedefine/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0" w:line="240" w:line-rule="auto"/><w:ind w:left="220" w:hanging="220"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TOAHeading"><w:name w:val="toa heading"/><wx:uiName wx:val="TOA Heading"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:before="120"/></w:pPr><w:rPr><w:rFonts w:ascii="Calibri Light" w:h-ansi="Calibri Light" w:cs="Times New Roman"/><wx:font wx:val="Calibri Light"/><w:b/><w:b-cs/><w:sz w:val="24"/><w:sz-cs w:val="24"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="TableofAuthorities"><w:name w:val="table of authorities"/><wx:uiName wx:val="Table of Authorities"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0049479F"/><w:pPr><w:spacing w:after="0"/><w:ind w:left="220" w:hanging="220"/></w:pPr><w:rPr><wx:font wx:val="Calibri"/></w:rPr></w:style></w:styles><w:div
 s><w:div w:id="230694882"><w:bodyDiv w:val="on"/><w:marLeft w:val="0"/><w:marRight w:val="0"/><w:marTop w:val="0"/><w:marBottom w:val="0"/><w:divBdr><w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/></w:divBdr></w:div><w:div w:id="1411732106"><w:bodyDiv w:val="on"/><w:marLeft w:val="0"/><w:marRight w:val="0"/><w:marTop w:val="0"/><w:marBottom w:val="0"/><w:divBdr><w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/></w:divBdr></w:div></w:divs><w:docOleData><w:binData w:name="oledata.mso" xml:space="
 preserve">0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAA
+EAAAAgAAAAEAAAD+////AAAAAAAAAAB1AAAA////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
@@ -9,24 +9,24 @@ EAAAAgAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////9
-/////v////7///8VAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A
+////cwAAAP7///8VAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8A
 AAAQAAAAEQAAABIAAAATAAAAFAAAAAMAAAAWAAAAFwAAABgAAAAZAAAAGgAAAP7///8tAAAAHQAA
 AB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAA
-LAAAABsAAAAuAAAALwAAADAAAAAxAAAAMgAAAP7/////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////1IA
+LAAAABsAAAAuAAAALwAAADAAAAAxAAAAMgAAAP7///9FAAAANQAAADYAAAA3AAAAOAAAADkAAAA6
+AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAADMAAABGAAAARwAAAEgA
+AABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAA
+AFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAA
+ZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAAD+
+/////v///4cAAAD9////dwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAgAAAAFIA
 bwBvAHQAIABFAG4AdAByAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAWAAUA//////////8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANC3B0OCRdIB
-/v///wAAAAAAAAAAXwAxADUANAAxADMAOQAwADAANQAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAABgAAgH/////AgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAEAAAA0S4AAAAAAABfADEANQA0ADEAMwA5ADAAMAA1ADMAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACAP///////////////wAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD0LgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
-////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////
+AAAAAAAWAAUA//////////8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOQsJ1StIB
+/v///wAAAAAAAAAAXwAxADUANAAxADkAMwA0ADQAMwA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAABgAAgH///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAEAAAA0y4AAAAAAABfADEANQA0ADEAOQAzADQANAAzADYAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAACAQEAAAADAAAA/////wAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD0LgAAAAAAAF8AMQA1ADQAMQA5ADMANAA0
+ADMANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAIB/////wQA
+AAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAOl/AAAAAAAA////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
@@ -35,438 +35,1462 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////+rhk0P
-6Di22gXyHz+Vy0JPUlpeHtrni/zzNhPyX/o2E7VyUs034B7Gmthn3oQqD0dizOhw7ltNN+Me2aqf
-V77PJrWcf+jzY4fSK/WUhdbBmSd21yk53tYwPbLTY1FB5jfbY7tCpBValusETTups5wqFTTtstn3
-MHzB/TPOoWuzTNJt66xdpdUv0kmHd7c7LpjX/m5uFrPpeWbunPJc+bKMtKnFQZ8cN3lPdMk43OTc
-T9Hp9Ju5btsNXLIGnmoyP/w27s2CH7cUj+nr928qnnZ9VLLj28yVOnff6Rvf2Tza0/uJrWrtxFVq
-p+xoDiNUzWZPlLUfhmNbHKAH7qsanTryafvii7LN7rRl5yQvU2rrXmZ5Hz7fpzJGTk9j+5jTs1Kj
-ymX64oZrNhre7jBSVWWwfuz99SW7TrvPsUxt/9Ol9w5rt/gycrQlj5o6GiqXXy74NGdH/eMhP2KR
-7NZTC/Y1vLaTX6iVPEht07PJ3vlrfn5ecCg9TNHv853G4tpX02tNzjYunLvmwxT3+aZnpWm/WmO/
-lG6V9z/2ViurUTv2y5xzx2sOBCcpXntbZTNv35nafSdNzkp7ZhkctWEdv/X4jdmEYJedqQPsG9tG
-zK9+eG1zjtHu5dvP3FUPWH917HGNHeWpysjWZPVRGUnM9KfGeS5jZ6oMDPM56646wi/JeACKAAB4
-nOw9B1gTy9ab0EIPRRQQCQEFlBI6Kr2IBSkiqBdRA4QaA4ag2LGLIkoTxIIF7BW7qAgWREGxIDZA
-RBRFxI49/8xuAmlEuO+9/7/v/nf4ZrJ79pSZM+ecnZmdXapvqjzZdkSrERFITogE8osti0jzwHCc
-jCYiguA557/YbDYXzP4n/VelnyBLcvrQnfML+1wGZALIsiDLgSwPsgLIiiArgayMmQCiArIqyGog
-q4PcB2QNkPuC3A9kTZC1QNYGuT/IOiAPAFkXZBLIeiCTQdYH2QDkgSAPAtkQZCOQjUEeDPIQkE1A
-NgXZDGRzkCkgW4BsCbIVyNYg24BsC7IdyPYgDwV5GMjDQXYA2RG1bQRxBtkFZFeQ3Tjt/vV/2xX/
-J2kcEgf+WKAvPBEG+GUiswVDgdikgUh1+jyMB3oEPAq/gF0ewYd8Vsp9sedtnATUvQQGwiG+CB2h
-9Uomb5JD8Dje9vSUTh3hyncH7Z+OxIN6hCIxvZavCuTDGAh9qKfyIX4o51iCI3cU0H4EqMmfkd/b
-9kPVc+P6L06/ce1finNNhgMT9P//jz7yd0447Db+pxMOWISEHGb7gr4P7wNjo8OYcQlxESySZ1IY
-jU5yj6IyWaiFuUVHRNij9xL0ihl6xcwe+Ti0aEYvKoCXQO9Jfzb9Ah4jjRdWAfTRJ8vy33/1jSLu
-SycgQwyPPqAA2CkE8w143QXB/H4kgt0rwxHsXpiMYL6Si2D3ywIEuz8eRjBlP5PE7oEwBrnS6dEJ
-cQwT0vjo6XGsqNkkN7PfXiMiQnpF65K8dXrlIhBf0WMZphs31opLE0DMYSKxIAbB+0Bsr/UH4g8a
-T2DcgDbQExqIWzeXexyAJIL4Ox2hovcebhxkohAWEg2OGWJ4GXHin3Qv5MM+a+msiweQEIbWgYbe
-AXtXH3vQfl5/6ol8aCvquN+i9Tj1Vj5vkiUQgQNIITpuVTKloC3SoHKN4PewZClqq09Bngzujmoi
-zZH0H0tuaB2oOFiHC0BXjjhJAMEhm0CpAkaVEK6KlmpoeQjFPIuWjqgXAjq9w2pD0SMcMhHvguKt
-QUsyWiqhHE+iNA9RiAXwr8cI7KF1sH/wSJoMzh30Ox30eyiwgei/EMZgJAoHx7pcDEUBDBLiDcpI
-JApYLeRnAsYptshZfPcSJX+L8Rj5PQacE/yuXeq/xXD4LYbTbzBwYIz/u7ZY/7Yt1r+VIvtbHnK/
-4YEHs6XfSSH8VoqsWB5Xu6wJEY1xDIGzInEY/XDiMAZI9gfRFMz7yAZkfRN9fcpU4+GTjbgnk40H
-SOqB+35/vuvB42jhIfxIZHB71elCMqPw8wHnEMsQNIYsiCXAjYNqBzwFzBCnQvhgElcy53SyEUcw
-F0A2JaNXXaYCUjMw/TSGpLx0/EQCFM5gkjqMXxhWN355aNV4RDo7d7GwBXNdCx6hXHohYgHKJ5w5
-zSc2iSe+XyD9A//PwHEIDxyPwaW4+Mc4cMmN3cAPdQNP6Qae1w08vxv43m7g+3tZn/XdwPf1kj+G
-36cbfGH4oW7g67uBd8f/SDfw073EP94N/GQ38KPdwM+LrY+8EPwAClfmwrNUVHLkc+S5elDphEdE
-lOiW6HLrIwViCAr/wuGDcO3TuBu4STfwwSLhaly5H/nhckL1x+xQhgu/i/iBuUk/Lj6BDw4XDjG4
-bBecJBIuIFdRSD+Y/RC7+ExD0IVIDF9BqJ4C9rxJRUVDXkOe63dKPPwxPXP9QlakfqS7qad6V32o
-CHKkUw+qIvDnEdSReQSEJzkhWcSWofMJpsh8PjhMeKADdXQmBm/P3DuEEqghXpgA11sCfG8JJHpL
-INlbAqneEkj3lkCmtwSE3hLI9pZArrcE8r0lUOgtgWJvCZR6S6DcW4IhvSUw6S2BaW8JzHpLMKy3
-BMP5CCQECHDzCa4CBBYoWncEeALnAnRMbIBJIgkzsewJE7azeCZWPWFiacXPRLD91mLbjxeWSumU
-iq7+URE2H4Ek58KV9hvs7qtuxMdkEyItmgm7XBwTO34mtG5qwm7dxMMkXYAJfPAl08nE2XlmN0wq
-N3QykeHAFi5cyOauuxBEwGR5YFxxciJgwpUaKlApZ9GVev/+vVClILJgpXhhsjwwwUrxwoQrZcxX
-qW/zu1G3qEr9+zQlaAO2fDYgVCmuMHYyTowNDO5sGXfZV2TLCgsL/4PqFnRM+MQV39kygMgWcEzB
-VtjztUIo9HVaMrtSqBVFRUVCreCFyfLABFvBCxNuhTlfK2BfCrQiUIAAPmyW7L4VMiLCK2/I5dZY
-2FLICG+0FNnJv4/bRD4mInUsgdAixDPR6AmTSm/xTPr3pDmCwV+QiX7PdCIllolKz3QinknfnulE
-PBOdnulEPBODnulEWiwT1Z7pRDyTfj3TiXgmA3qmE/FMBvZMJzJimaj1TCfimWj2TCfimej2TCfi
-mQzqmU4IYpmo90wn4plo9Uwn4pmQeqYT8UwMe6YTWbFM+vRMJ+KZaPdMJ+KZ6PVMJ7xMMvGq4CYB
-JneWlIEkU5JrWBiNwbLIIIxFMnhY4yQHsBXBJIACPIsEZkUkxBUJA3/Yk1RshoEDc0oZSVpEXWsH
-WwoeY88P2AOhaChGRVCMpbAYshgxll1ipGgRP57dEy1GVVCMlbCYQWLEWHWJkaZFtLW1iRajJijG
-WljMYDFirLvEyNAi2O8rRYtRFxRjIyzGTIwYmy4xBFrEg8b3osX0ERRjKyzGUowY2y4xsrSIp+0P
-RYvRgGKsxVuaLhBj3QNLq/Q+V/tGtJi+gmJEWJq+GDG8llbp/eX6AdFi+gmKEWFphmLE8Fpapfej
-R49Ei9EUFCPC0oaIEcNraZXe7OcbRIvREhQjwtLMxYjhtbRK72NXXogWoy0oRoSlWYkRw2tpld5X
-nhwTLaY/FGMr3tJIQIxtDyzN0mpj2XNMDILtwugUoyMoRoSlGYgRw2tpllYfDy8VLWaAoBgRlmYk
-RgyvpVlaVVRUiBajKyhGhKWZiBHDa2mWVuwHEaLFkATFiLA0ihgxvJZmaZW255FoMXqCYkRYmrUY
-MbyWZmm1pzpNlBgFBD7IRjptzFVAgA5bplu7QpDgjTWimep3MbUUZqonwJTXihCkbb6FaKYGXUyt
-hJkOFGDKazPYWoJIpgO7mFoLMzUWYMprIYDRBUQ000FdTG2EmZoKMOW1BwTxYF4SzdSwi6mtMFML
-Aaa8vY8g8Qe8RDElIEZwqOVGDc8gDOVniNNmSyBuCBXdLYgxkmJjK4RSnGO4jMhhRESM4Rq+O5Ue
-lkinsqLjGBmERfwM8RpseQTbigG3sdH5tqnJdAqAy1lcAXB5CRUgjSihALiegQPIvGcEvjNZvrNM
-vDIyGD6NcI+ihcWS3Gl0egZhoUC9+rLlQL2igN7CkFjgQ+7giA7+eGsl0ny4tYLrStKdtcLOCHxn
-snxnmWAkOyRZgp1BIPFXRUoCCMH2ecNdfDBBXJNkaYBrJIArzZblwSUhwSAMhHTSmCZLAppBAjSS
-bAKgSUSY4A+aSRhnFz2kMEuWARRmAhQybAUhCn5ZfRBzuEzjmRRPpzKorDjmbNJ4WhIrg+AloGcb
-NhHxRJKQeLTvGWj/x6GbF0nIeMA8CZzDxStu78Mu5JiXLJAHwo1XXBww1OEChqrFlkS80G2h/KYK
-V8S5vOCyOYeXEohhwCNG0qjh0YxIkoVQRSWIQLMjQYWg7UeDikaCCmJxDzUB4DAe42MwdrDTuwIh
-ZG7Jy9xSmLmKCOaW4piznfdXvuIwt+JlbiXMXFUEcytxzLGhAR5lbs3L3FooIEioiWBu3dljfMwz
-8XIgqoFYPooRnwhMIVHAFNRBe+CO1XhgWSw+R4Pr/txOgw8H/kX3J4I4COKSdzQjlhbO8f8xApXp
-B+KSN9qiWNC6cL4IIIEIxSKueLjEDX1ZAbGDYcGHlshiUulCgRnXHwRmH8AwEX1rhcph29ne1k1d
-8ZTWaaSScHc2cEcrAWYIEOnTuc2X3qV9/vGjLGIP/cUnjkXLIIQKtFcO+IsP+jINfJ1Fqqsq7Eo2
-V9NwkblL09gZge9Mlu8sEy+PDIVrdL6JLLTHZwkI7QNY+6I6EO5z3pAPI6RQcMXxBVccX3DF8QVX
-HBrKhiVLAd0ZCIQyKdARfqDNzM57JBbA5JDh0FTHR7PoQFsWAlavDKo2HlgHi/P6j7C14yALB5RF
-HAtagMAgTUITZQEVjnWZpHCXSfPEEay13DNoYiqII3zgPYHKZEDfxMKrs4CG5UGknoDuBmd0uqeo
-sMrmykwjTETSeFisQ+DasgogoiKhaGsDAOls9Ggs6hnR6JZzS6DFaGQm2qAuDN5NvLbINHSz8jLQ
-jmb0ga80gr42YQEhpFlQmjQSEEWjsSzyCP2QPN6G8PzuIBBBRvhSKlAfDvwdxDZaS/YF1oBD8XFI
-KY4AMob3A7QCknJyAI0ZTUsgWXQdWnYdWsERApVFi4Q3LwveE0veEz40ayCHxAZjCwLiaIbtRwgj
-aIDcVVUNzi8eWU+QV1zPc2VfMh7xGyMhCXfgQLAe8rJeuQTep/rjsYXbYPc4BguM9KaOnx1PSwgx
-S5pO359+3ecihejZMfLHkmbT0ZuKXAgDXy4uTyvfPu/C1Q0GGhX3i3YFfu/wvj3ebTdJg27ywKpj
-y/Am5jldmeMXczftGn3ovdsQg1Ztr5DCBjvfBweCUhZp9XOgFirnfjxz/qyR3YrkUSl54wrnPo+P
-9C5yTFvH1F1XcPubPf66zcxByT+TlaoS/R/3a01Jt2+qcK9tljhxWGei45vmr7kGT9cdO+Ns67N/
-tDthydELGXdf7/46okLDzezaacNPZgVDUrZVTSob/1XzcMsUms0tm931pPfyqaoXDyukTL0ZSdI0
-fV4yfEvK60f3JtHP1qUVpc2znVLpU8pWn/bJuUXtTuXC4IV4GJokBPRVeG/XiwvgyBaHbR6ZyqTR
-E8zNYLl07c2YixSFFe3Lzi25Nd//9sV+A2eaF65zN98xH2k0WhhF1n6k3frIt1xarpiwtKC9Y4/j
-r4OrvzZmvSBp5O2VvvjU3fl6VONMx5KFiyuWFewaSAhOil++Y+6j41PP+t3a4VBloV048gQlW1V5
-5QPfs+MOuoXfqiDeHu35yDrUYOGu9BlTa3Vzt2g+sfW+80ljXK3dtINrd1ewj16kVG7xLV14yKTZ
-U5Jhl+Ud/Sx0227zpoBz63bT9t4dUH381Nd7P3GiGho7e73GEnC0CsGeQbGiaNNp5jzlWDDqiqQx
-oYUoVI6Vu0giujTO3zZr3QO7sGIjz9Ci6weLPyPum7Rcy7fezn9U29y0xO5Gg3rNxjGKk0w2ySiu
-olWZrTz5dp7JLu3dD0f2v2xCbyzv8/xlUr+KY2vUGkZdTfCfr1+zbtmB43Wke8eH1Oi1m9RNOW0Q
-47jaa0LLnQ7jp56tQwbJ4e1FV/7gq6G0JeDmeIWEeYNQ5S1gtV9Pqlqt7aVRYv5sYdQ3s9Z9wbpL
-aDt8fV9rPppY5J5mM25UyJZXZv6BeUcoy6flfy46vE7xtCTzup6J9kjSoJwfFtIbDb57vd73KmhW
-9viiSOmj4TmapdUh385NKJnTXjPXN9Auznn1nlnLT5NMXn6p0e7TcLEiq2pkUcuXtYY7xl3vWOpR
-oeC//klayZWykvmtmSWPPWQsyyw+uzipyOxu8hpnpnyNZrGMasA4PNDnSfHQJouMt9f6Nmt6vdhq
-t7P5j8LbRuUrDc7nbO131yn3ZoX6XLXC2yXH/Z0K3uaN3Ca9M2ttdgx9VNTr18f2EkNNv2XNjVw5
-c15u5JUbhl82fHRctXSp+bAFnuyvzcF211tIatuZa/fr2d1euGHyIMrwAy+Hfn1qkG9NKNt6q+pT
-LJJdfIqacL+fLXO+VvLOgInR1y7f1fz88JxrLlXR71tLtWOU0qtA+biWQ+3xb5a/Cmu0MarRff3E
-a4fTxFtlsX6rlGe9da3e/0lC/pCr8fkjS+KCzizZGg2QthsMrXOdUDbiXMmk6UobrOa0LD15cdrd
-/bRr8uoe7gNCYlYNHfPs/MTVtwKueCF+LqsMRjmcnvJ0aJ6beofKQMNNSV7hKq5PTP3LJBUmxGT7
-FyqxawyrfR+SWxB99z/e4QeFRo589+5SVmbh6y+zXPfFudSfX/DzebNv3JRfP57X7LMzZ2dXHQic
-xFxhNCmXuXBeR8fChR+WdXxf2/DrXbPz7T0n35VdKvn+YmrDz/et3+9eXCUfcPbnqxWznH++/dxa
-8vPzzxyltpA0H+8vSy9NTOp4d7pj5eXDLjIL55WZG1qkEI8Y+Eme0dm7wrIouaN25Zl4R/rGt7Ir
-TJrw9ZMcj59K0z+fccniwzmjE8nlqbcGNPlIPA5I0NTYsj9j2VzmecsZa4nDEqrqvFKanzTGyL7M
-PjX+sz791ryR/uRbeMOJc14Nn7nqSFhivlrog0+53kPV6GbnbqbUul+KzpAdegS/hzjMwOILrY1M
-OHiCnvDjUqvFqz8+IfkPRt7XWDnsqi/leGWSzAGDVSGDDY127ixduy51skF5rJPNDHe90jvy3hvs
-NlH1Jlsq2++vjf/meJXCOKl7J5Guf9pgl9lmr5UWakOn7fpJuDym70zvjKuXFgz20fNI71g3qu+P
-3AfDPc4t0fUrqq3zJZx4/LPR422/jH2j9hCIn6pWDZ83W8ZqyILy2GFe97NpZxxOFMXmqEWyPgbJ
-Dzm2lrKzpX8V5fOAha+mVYeNuf5c6mWxSni2+2u5/cVX0wI/bZmGm57xKnZmwDMVlaCrae8WtzUm
-nK0f7RCbdWll+515umcZD+cRAm9sGK1b/XKP7FnfrT+XJM3Qal6E6IyIb6/5RnELahvXXqZzKJbx
-tZ08V+Fzc8DqK1KfB159Mua6S6gdrT52o+z2e5KeF7yJ1v0OsuTJ67/LqwROOH7/mrHdSbvpjdJR
-qfsXGA6qkNmYf+CE4Y/2Y45pdW9naA04GTqEFlJU8yBnnNJJrU3zT7FLT0QkB1W4K2SH20WGzLKp
-DVnDXthQ8/rR9dpzlefTms7kvNtWfuoNrSgze+2d6+pt8izbV8f0HZtvRTq9q9fPH7qNZVKrris7
-/5X+k75VdMklo310Zz39QYjXLN0xOIGyaFlwfAHN4cazSI8RTQTTxqjdr4YMlE/fM4UQVyG5qd9L
-6i7Gsl37vuRW3c68ERO4OWZndiBpUuqEsnn9ffaEr2JYr75TPPlcRHH1rv3a+NGfLQ1SK+iqiTIp
-zyP8NEflv1x8q7/Bx2tOcqtPLPEcs6fhVMwKKb/r5/DOpx2/bKt/dxHxcCEoNW11zDd2LjxYnzRh
-+IewOXPyLQ4QkjXmquGW7Xq0qrW+eU9N4baZON9gg9T4o6OirrdI+3q8dbdf7WMzR0Ur51Nicfwe
-T98NbjdltgVWR52oL3+697z06bbHLmpWAdWXhrd/WTOHoGfleT3NeYVaWFJqDnG4289XbixcrVlA
-xR3FhdmVRc/clNatHLektSAzYknuyErH0U/TDq3PL140aNiKKEaNlsFSZ9PTtgXZztpD48+0hTvk
-N+2xrmOkGo3ZdWhd453JjT+CVk/V2W/wQO6xY1rEi3rZkHdeBDcTelA2LtLjwmVXm+PPUy+Mnbjl
-6qovjwZ7T3poc2g7S6GwaaWZflagutWGXfGbryUM+2Z6ctG79Qc0FWJyDYYsNZQPnDZ2xx811oe0
-jFecC+y46HaNOeK2CVT9+BpWpEXs8rGa94uaa1adLY0JC70aHbHMN6Bj5rXpccy6oPx1E2QpSQxn
-r5pzLq6U3X0yJ91Vb6qz3s+caRtTm1aFd3ZpI3uWXf22Zs1D0+Jmm7KhOgpT9rxf8njm3bLqeXcm
-xIxpHZLwIWjjZodlzyySzWZ5FlYfXHo0JG2rnlbrFoOx2oc9t1TQYy9knnxa0OR8aGnd1qny3wtH
-D+m/fvEcP+PjZYxzdxUvzknsFzRkyZQ2KXUNzcs1lHMHdUv7SIdE5nyeM+/FU6f6x7cf5xadqvx4
-ed4ktdq+HTUPf62eu9bl9uz63Wsefpp5yD+mtnjHOErL8dFtC3ZM0LL+VlUaVa0c3HZLvmH4nSdb
-g9tl1lD33d39+XvhVn//j8Ft46x215xxPfpIS7qu7yRtiSG+d7wi5CmHnie2ws9LCN+2FW+tyz8B
-jrRx2CNm3ts2NtASHHlwBl5j5coo6ks7Fs8ixMXdOUNMH1S3svrAXYmlz2wUbZ0N/F+3KR40IZit
-oJ7fEF2cs7lCLcyy3iJqrxZh2MvsGXml00+9TnMZp+GT8mB4+OFpi9Pi7Nr6RKaPMRo7yGCckZlF
-LlPJcHTmpupV478mH7TfsTboGXnHTterxdUjOxLnb323ETfvssG5UOLcGkRzvV8e++hPe62USHNd
-jZBf/q4JD5ZJGW2/UvlEf+Neb8lrwWfOXGrobDoOb4p0PxLnTyLG5YIMBIemXYmC4xuoChIKDvW6
-kiZe/MBPkJPguKsr3RPFyUIUD0Ej6Epr5HpsEn5jpNAvOEiBvxDAaCWqkFQwr0sVmPPBLePYS74k
-vpd8/cD80A/8KilJgt8/CFTwF0OIJWwm7CRwP+SyBN3sthQtB4HqR6DpubMhz7ERwhXY4mzMc7wN
-3aiGzR9x6G40BLFC0x1n7i/c+ou+1EsYBLKQTXQmByvuEfbKL46IvpBAJPLgHMbBuakVAG3lzGTD
-iQSE+9EiSyL2ggG8LkNUQC5cuIBAM4XdKAf4cN+chtiyYFY+jqAAMtL5aQHuuQznawkFhAxcgUCN
-U+oUU+cABg7OoJdIM2nMhOg4hiPZwoxCJtEYYXFw/c+RHDh+hKk9mZTAojLCqfQ4Bs2RPJuWQHZ2
-UpRzoA5LiPdjkgA5I2EY1ZEcxWLFDzM3TwgDJkBNMIuLpzHAtYg45nQqC5wyI83DmdRZgO10urkl
-hWJrPp0azSA7QT5x9OjwEdF0OnoC6WnudCZpJpXuSA6NtCCbOzmYC2DRGaRZjuShNpY2ZFIYNd6R
-HEGnssDh9PhwR3ICI5JMotIjQXvCWMzfimAlWaA49MTpY+PCMZiFDYVCgYJRsG9EBAa254LNebgI
-144Zl8gIx7DoDAigRUTQwljeCSwOKVCcUwDopQACtn8LJmvQ2xKgtyVQC5REexdagD9RmfPZCxl0
-oz24oEiERk/ABaALWdGgTEBXp/2Jagi65gJCznAE5QNtC4Lx/GCY/IHJSXAWSqTBMfd9fCh0Kmq0
-0Phggl/NIQBDg8ZnVVmJGiAkhGvo8ihmBFEa14STfwtfUUpGeS7CBW+swS/GQXlL4FcP8EvR42W4
-jwhCXF4KcVag5UoUPwUtV6HlarRMRcs1aJmGlmvREnunNx0tM9AyEy2z0DIbLdejZQ7KPxc93oCW
-eWi5ES03we9NuJTg+iO6yFGE/A5+WWkL+n2GfLTcCrFI21Ae21HIDrQsQOGFKHwnCtmFliUAPg2R
-JXK/1oOg4WIs+HPgcUoFASdV4rh2AYGN8DvpItzo7O2sF8hf30mp2INj0Y4KS0YcPO+pRyjxeIQn
-al7cKwo8V3rkK/hufMVSlK/gwV+PfQXXKbR7X2FHIJ2+YiPWV9rmW/zjKyJ9BcfnK7hufeVeWseN
-/x5fsfwL+opEN75iJcpXJMBfj30Fj8oR7yvr16/v9BU7sb5SWFj4j6+I9BU8n6/gu/WVy5PvNf/3
-+IrV/66veIDRN9yrbkCEZjuQSAI2jlnzmLdsdvmHrs8WUcAMgjIYM2xfojqCR4Q/zTUIcNFAXYL7
-UIvbQXhOBxUSOkDuoihVzc9o+hc7h5X07+mc0Ljw2X5MbBicwApgzabT0JN4tACqBT/htIhxKI55
-J4jGCPejMqkATKJTYW1pDNPAAE43xqMlrGFnx3DVBtUP1S4hVu1H/pTaIe8RROg5rkRVlAuCTAKE
-y4BV+Mjxc4N7sW4Bul/g2mhgGzpEVSEJGAWJSOBMGnFIKAcLh3Q9wGzv7G5u4p5Lcs6DwHkQAX6P
-DWvHACL68ggOzDlFyHTmtK0votcZSbnTQ0nQ4gJCjMBULz9jmopTxri/yFSv02H/FlO4QkISntd1
-pZWttofj/0quS2LGsRzJprYULAGp8WEjopkJLG9qAgv6KKgdGdaU5QuKCHoc6BIanR4dnxCdgMFB
-HeKYc8ikWUzYRwkzEqlMGugaRhgAY53DOXFnMSGzngQLUsIc0POwOqGOZFBGo2WiI5kBtAE1w4yO
-pcGzAPSITIqlMaEeLVESagKNHg21RvlTdmEr2i6semYXcF8jg8SaHU+LoIaBOgyZzjClszB2NKrA
-BRoVuxCWIHAhLIEjCdPHn4mdWwgDkC08tgeXzpBoMIlpMAPjsWnyYMxBMOLDUOdgSDb4o/FJcsy4
-zjjFjcTcqASjJYx6OEQwwainSxwsIjaJTro4cRGNJDKiwQTHhgpgjKOHxmzBZTDeKArrWEC4IzDK
-sdq+N8X+eTHyF4x7PR+5FBCm8oVzHGgWDOdef5Fw/jeM4S5HqP/E8H9i+P9KDBcVddV55nmCcbcv
-URrRRh6BMzJRrvOKMtIH0IyQAmNnMF5VBL9w4CyDw3eOaeH2Tg/O9RQEe6GeO8KGUVl4YuOMuBj+
-foTdV2iELfjoghvJO1fEeD766sPz6EKKA+Oey3KYdj3KwJJwnKduLw3ZL/FfHudFPQvYTHAAuauh
-ZfyPEX+bCgnxQoFt8l8wsP0T0P4+AU30oFQZDErhJ0ngoJRr6bI8ls6FSYmAITywXQQPkLtgWIiw
-AVP1X0qjFZAeJ97Qt1EK+/cG4SBuHUAZOqO15g19X9lwKAqm0gj28Q4Y+vrxhT5FInx7oy9uPBKF
-RKOLpljJQt8oIiFh4BduymahMO4+cixYSvQ6WHKD8e+DYwLyNw2OhuBOiOleMEx+7OV3xXcSvuJ3
-8tBT9u7Oa/4XwyQzOixqBJP1t46UFtZ/MlSCJqDof/OQiRXCARNESqckwYQGUJS6e1o+hfExEqDu
-QbDmGGg38VoTi9foeEPUEq3girWpQdX/lxVr0QqTAgoLRvhvcIo8CkPw2KMHbJwPP2tCQx8uSOJ1
-OvmgHyiHb2NFdr4PacFBwP0OAS8eAde9CEsOQrciuAjdisAQ8N2LsOIgdCuCi9CtCAxBonsR1hyE
-bkVwEboVYY32CA6RwHMfEmHbvlRcMAiuEyLBgfDMiFAI70qZJAcCYXkbYFLhQASpeOdVChwIpKqq
-hOmHMwbpwiKgOLz/J0WVA4FU2DY3aQ6ki0rdhYY+VXHCyyES0lz4FsJgPltG9whG4xGphpnoUAy+
-HmeKBCIB4JgZsYWwSY0Xe6Uahi3TYIWkArvn3zxqnCkbAJ8Bm/TsTSab4Cx72iJizG2ptTprPb8m
-p1uNMsk4QitG32Ty4LzJlPCi3qrp03PKxxhfvT/KB+5/j1c/MuN484mlHW0BM+UHD3qmNbd8fFk6
-mb73+upPn1uMB798PtEtJ6PkzrC8NOnU0x8ujYue3I9SYXPs4Y6vF9Z/TPR/HNVkr7LLZM0AvwO6
-u0tD8u82uW7xNVj0jfDql0H/o6Nd2ufGUmT31Cf8NB24UY35cpP1kaNOU2SlW47KhjW/SD7dHhik
-Rh/7StF9TqkrhZWh97L1a6rJjmU/ZpVbXT0YvX/bww11pNZ0bnLjq6BEv7rlJa+Ca0tYHtVKI5Yf
-fyrlfenhuqdNKbKGe15/yV80oSF507kF8799rHl5p8En33H4/G9jnE7OpD3Q2Wpg3Vb/68unBvPz
-b399+7Ti5M2Sip1TLsursZ+/MG/48au8+PHFVdf9Ns3//r5qX05kw/xPL3xv6tR32GttfKuScuTt
-mydq7U6rqYuUfiVVmkdYrCJamH7O8NsquWdS/1/fLYuqZ2msJMswdB/NmHfVNWbyheAP5RqN1Esv
-Muwd6tNC5ZMu9auLfKy57FGMmX7ljtmqZwxfJKjN0t0WVvs4JGvipDc3A6onPmU+WHPY88MAzxQP
-PZ/DH+862l68f+SM19KJMxzJajckN45uV3n3WWXG8nCPK0E22SNkDJafNZksqdcQRE8bMOd76pmg
-uovltqqfpbcrvdf3PkCpd0tICc25rrJqj+ZbdwP9vhWNi329J08deZW10vjDN5xGGS0h5+KcNQUN
-0htm7Pq50ixUu2LghtPzBpCveIevrTqjsiqg78yR6MtMEX7brxaXF8gvuPRaZ/tBPWWjB7lvVkgG
-v3SaqjgguSwv6xref9bzx+nXg3MnfRo+udq47I+YrbiJZwZkPpucPjW940qJYTtpe2RDSfz+lhiD
-urb718qlLs9bq/aCMWxi+tuxpwIb31gOWKc89eTcqC2PLx4OvLexll30s4T+nT37Qf2x/ENT9o+Z
-L/0yqPze61MHldvfXTn6PctvWJb8KuVlTuflW0aXItLZmxcYXL58dLJWqe/xTCpevi+zYLrDjWcv
-PEZcJBTGXzn09dooI2bttrfjBj1pObRi8/k+W2406WuEr91/PG+OQ9Uld9KktAnal+0dGFcV6ujZ
-a6nL5lbZqmtmpiYXnSPIhlluvHRiiUfs0N2LC3Rv6EUpqc6hTSjb3jZtRsjpqTtj1kj5DSnClw9S
-VgrWKfGXUaMs3jXYY8bW91mFczaE6JTtq/y4c9offZDIlTSprA2MIQe1c3YFddRvODGyX3NEZnX6
-LUdvD8KU+pa+g2fLfVA8otGcccUzoc4sIOZWwLaJb5ZnjGj9Vrx4xoPJS+r22lZfGi+Xl2SoU3K6
-Ljljw9ZjTb6Nt3QXXDG+m+ZXHuLhnuRpm+7w6G2O//os+Qfu5Gv4g56GAV0vBU0dLzH22PIoxnFT
-4lLl9ZO1w5vd9WVGncxM3RXgkB7xcI1Kn5evVdWdHkndKH744/00WsXzdW+o6puSwoa96FDJmrgj
-MACnsDLZzuW4SR5u0YS8ZeuyP528nct8YNNg/Err2hWVsfpZs9QDKq1OrX+/OO384NBpk5tjlydr
-6VVoN9qPV7ynsLdm7OqD6TPu30+8aTcu3crj6OsN6/fuPvhSIyB2OU17Ykpzc97Z0hjN0KiciBU3
-8z7ufXYi54+TTB+jM5KSZ1fm72g979VqtzsbfSUo8X8mGTZrbv+tvck7DxSv2Os/2WCWf/HLMtU8
-1/4CP/bm6a/+JGyP2mpgEjtPu3TJ2vr8N/+YsdUamTuWye0BsrQZSdxMc5DrkIGAy/um/wLf8i5X
-CUxU29txYbLCV2anTbnNuUKTNL69v7uY9eDjNxvy0149s/V/02oY+Z4lxJWTZ+63Y7scD+zd/abv
-QFDYuRUnrUU2JDS55Zl/5VWf+lKz10zFTWQ6S49lu/Bzz36L1SE/Gvrm3DsemTqp8IHjy3apCe9P
-fzrw2Jz5SdfJKGWFbcuYruk2Tvq/ufZ+dG/6+vnGu/4oN6W/ag2fJb3WkWm1RYLYBqtw1lA2vex9
-szQQu4lQt5KgNwlRAUVbakDb8MnaUiNL4pYa9MofAW5hMwmlKYBuFnqSQAABTrK21qQCDRIEd0jZ
-gf2ZF+zobfLbdb+ZPjBA1kIKM3AwYQlyhUUsTBoLsMz2jIIRBWom7Pc7AuxvlKvcU/zUNUuErSXg
-svQPY8UdDysY4l9tE8wUOvqwpLb60r2NCgndyf//1BZttvTzk9HYyBt3eOsaxwnmCzfXXfiwr3rd
-O4cCt/sLueeZnDmyIVNff9ZdmU5Xz+prBs9k3k9NMr7UouOsEm9V6yH8LGiZo6uJvMWEXStfR6c2
-nX9SPHW67AWz/iuPl59+9DJin79ap0xzhQWvng6vxOLNbMWGoez3/y4ISW/SOVna5i79c1VGw6+p
-G0r+sc0pzn9qcrJMZduMT9p+rs4zN+6Jz3Awzv/+6b9p9/MjoS+qsz3WeW5Xe/wv2nft9Jz9DNgK
-a6XE038OAFmy4IKGgwmpaBnNIKMABHLOHwR1yNke/E54n1AS

<TRUNCATED>

[5/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFDocumentXMLBodyHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFDocumentXMLBodyHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFDocumentXMLBodyHandler.java
new file mode 100644
index 0000000..dce36a2
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFDocumentXMLBodyHandler.java
@@ -0,0 +1,318 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf;
+
+
+import java.util.Date;
+import java.util.Map;
+
+import org.apache.tika.utils.DateUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * This class is intended to handle anything that might contain IBodyElements:
+ * main document, headers, footers, notes, etc.
+ */
+
+public class XWPFDocumentXMLBodyHandler extends DefaultHandler {
+
+
+    enum EditType {
+        NONE,
+        INSERT,
+        DELETE,
+        MOVE_TO,
+        MOVE_FROM
+    }
+
+
+    private final static String W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
+    private final static String MC_NS = "http://schemas.openxmlformats.org/markup-compatibility/2006";
+    private final static String OFFICE_DOC_RELATIONSHIP_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
+
+    private final static char[] TAB = new char[1];
+
+    static {
+        TAB[0] = '\t';
+    }
+
+    private final XWPFBodyContentsHandler bodyContentsHandler;
+    //private final RelationshipsManager relationshipsManager;
+    private final Map<String, String> hyperlinks;
+
+    private final StringBuilder runBuffer = new StringBuilder();
+
+    private boolean inR = false;
+    private boolean inT = false;
+    private int pDepth = 0;
+    private boolean inRPr = false;
+    private boolean inNumPr = false;
+    private boolean inDelText = false;
+    private boolean inHyperlink = false;
+
+    //alternate content can be embedded in itself.
+    //need to track depth.
+    //if in alternate, choose fallback, maybe make this configurable?
+    private int inACChoiceDepth = 0;
+    private int inACFallbackDepth = 0;
+    private EditType editType = EditType.NONE;
+    private String hyperlink = null;
+
+    private XWPFRunProperties currRunProperties = new XWPFRunProperties();
+
+    public XWPFDocumentXMLBodyHandler(XWPFBodyContentsHandler bodyContentsHandler,
+                                      Map<String, String> hyperlinks) {
+        this.bodyContentsHandler = bodyContentsHandler;
+        this.hyperlinks = hyperlinks;
+    }
+
+
+    @Override
+    public void startDocument() throws SAXException {
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+    }
+
+    @Override
+    public void startPrefixMapping(String prefix, String uri) throws SAXException {
+    }
+
+    @Override
+    public void endPrefixMapping(String prefix) throws SAXException {
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+        if (uri != null && uri.equals(MC_NS)) {
+            if (localName.equals("Choice")) {
+                inACChoiceDepth++;
+            } else if (localName.equals("Fallback")) {
+                inACFallbackDepth++;
+            }
+        }
+
+        if (inACChoiceDepth > 0) {
+            return;
+        }
+
+        if (uri == null || uri.equals(W_NS)) {
+            if (localName.equals("p")) {
+                bodyContentsHandler.startParagraph();
+                pDepth++;
+            } else if (localName.equals("r")) {
+                inR = true;
+            } else if (localName.equals("t")) {
+                inT = true;
+            } else if (localName.equals("tab")) {
+                runBuffer.append("\t");
+            } else if (localName.equals("tbl")) {
+                bodyContentsHandler.startTable();
+            } else if (localName.equals("tc")) {
+                bodyContentsHandler.startTableCell();
+            } else if (localName.equals("tr")) {
+                bodyContentsHandler.startTableRow();
+            } else if (localName.equals("numPr")) {
+                inNumPr = true;
+            } else if (localName.equals("rPr")) {
+                inRPr = true;
+            } else if (inR && inRPr && localName.equals("i")) {
+                //rprs don't have to be inR; ignore those that aren't
+                currRunProperties.setItalics(true);
+            } else if (inR && inRPr && localName.equals("b")) {
+                currRunProperties.setBold(true);
+            } else if (localName.equals("delText")) {
+                inDelText = true;
+            } else if (localName.equals("ins")) {
+                startEditedSection(editType.INSERT, atts);
+            } else if (localName.equals("del")) {
+                startEditedSection(editType.DELETE, atts);
+            } else if (localName.equals("moveTo")) {
+                startEditedSection(EditType.MOVE_TO, atts);
+            } else if (localName.equals("moveFrom")) {
+                startEditedSection(editType.MOVE_FROM, atts);
+            } else if (localName.equals("hyperlink")) {
+                String hyperlinkId = atts.getValue(OFFICE_DOC_RELATIONSHIP_NS, "id");
+                if (hyperlinkId != null) {
+                    hyperlink = hyperlinks.get(hyperlinkId);
+                }
+                inHyperlink = true;
+            } else if (localName.equals("footnoteReference")) {
+                String id = atts.getValue(W_NS, "id");
+                bodyContentsHandler.footnoteReference(id);
+            } else if (localName.equals("endnoteReference")) {
+                String id = atts.getValue(W_NS, "id");
+                bodyContentsHandler.endnoteReference(id);
+            } /*else if (localName.equals("headerReference")) {
+                //TODO
+            } else if (localName.equals("footerReference")) {
+                //TODO
+            } else if (localName.equals("commentRangeEnd")) {
+                //TODO
+            }*/
+        }
+    }
+
+    private void startEditedSection(EditType editType, Attributes atts) {
+        String editAuthor = atts.getValue(W_NS, "author");
+        String editDateString = atts.getValue(W_NS, "date");
+        Date editDate = null;
+        if (editDateString != null) {
+            editDate = DateUtils.tryToParse(editDateString);
+        }
+        bodyContentsHandler.startEditedSection(editAuthor, editDate, editType);
+        this.editType = editType;
+    }
+
+    private int getIntVal(Attributes atts) {
+        String valString = atts.getValue(W_NS, "val");
+        if (valString != null) {
+            try {
+                return Integer.parseInt(valString);
+            } catch (NumberFormatException e) {
+                //swallow
+            }
+        }
+        return -1;
+    }
+
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+        if (uri.equals(MC_NS)) {
+            if (localName.equals("Choice")) {
+                inACChoiceDepth--;
+            } else if (localName.equals("Fallback")) {
+                inACFallbackDepth--;
+            }
+        }
+        if (uri == null || uri.equals(W_NS)) {
+            if (inACChoiceDepth > 0) {
+                return;
+            }
+
+
+            if (localName.equals("r") && !inHyperlink) {
+                bodyContentsHandler.run(currRunProperties, runBuffer.toString());
+                inR = false;
+                runBuffer.setLength(0);
+                currRunProperties.setBold(false);
+                currRunProperties.setItalics(false);
+            } else if (localName.equals("p")) {
+                bodyContentsHandler.endParagraph();
+                pDepth--;
+            } else if (localName.equals("t")) {
+                inT = false;
+            } else if (localName.equals("tbl")) {
+                bodyContentsHandler.endTable();
+            } else if (localName.equals("tc")) {
+                bodyContentsHandler.endTableCell();
+            } else if (localName.equals("tr")) {
+                bodyContentsHandler.endTableRow();
+            } else if (localName.equals("rPr")) {
+                inRPr = false;
+            } else if (localName.equals("delText")) {
+                inDelText = false;
+            } else if (localName.equals("ins") || localName.equals("del") ||
+                    localName.equals("moveTo") || localName.equals("moveFrom")) {
+                editType = EditType.NONE;
+            } else if (localName.equals("hyperlink")) {
+                if (hyperlink != null) {
+                    bodyContentsHandler.hyperlinkRun(hyperlink, runBuffer.toString());
+                } else {
+                    bodyContentsHandler.run(currRunProperties, runBuffer.toString());
+                }
+                runBuffer.setLength(0);
+                inHyperlink = false;
+            }
+        }
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length) throws SAXException {
+
+        if (inACChoiceDepth > 0) {
+            return;
+        }
+        if (editType.equals(EditType.MOVE_FROM) && inT) {
+            if (bodyContentsHandler.getIncludeMoveFromText()) {
+                runBuffer.append(ch, start, length);
+            }
+        } else if (inT) {
+            runBuffer.append(ch, start, length);
+        } else if (bodyContentsHandler.getIncludeDeletedText() && editType.equals(EditType.DELETE)) {
+            runBuffer.append(ch, start, length);
+        }
+    }
+
+    @Override
+    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+        if (inACChoiceDepth > 0) {
+            return;
+        }
+
+        if (inT) {
+            runBuffer.append(ch, start, length);
+        } else if (bodyContentsHandler.getIncludeDeletedText() && inDelText) {
+            runBuffer.append(ch, start, length);
+        }
+    }
+
+
+    public interface XWPFBodyContentsHandler {
+
+        void run(XWPFRunProperties runProperties, String contents);
+
+        void hyperlinkRun(String link, String text);
+
+        void startParagraph();
+
+        void endParagraph();
+
+        void startTable();
+
+        void endTable();
+
+        void startTableRow();
+
+        void endTableRow();
+
+        void startTableCell();
+
+        void endTableCell();
+
+        void startSDT();
+
+        void endSDT();
+
+        void startEditedSection(String editor, Date date, EditType editType);
+
+        void endEditedSection();
+
+        boolean getIncludeDeletedText();
+
+        void footnoteReference(String id);
+
+        void endnoteReference(String id);
+
+        boolean getIncludeMoveFromText();
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
new file mode 100644
index 0000000..06ef951
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
@@ -0,0 +1,353 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.input.CloseShieldInputStream;
+import org.apache.poi.POIXMLDocument;
+import org.apache.poi.POIXMLProperties;
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
+import org.apache.poi.util.SAXHelper;
+import org.apache.poi.xwpf.usermodel.XWPFNumbering;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
+import org.apache.tika.parser.microsoft.ooxml.XWPFListManager;
+import org.apache.xmlbeans.XmlException;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+//TODO: move this into POI?
+/**
+ * Experimental class that is based on POI's XSSFEventBasedExcelExtractor
+ *
+ */
+public class XWPFEventBasedWordExtractor extends POIXMLTextExtractor {
+
+    private OPCPackage container;
+    private POIXMLProperties properties;
+
+    public XWPFEventBasedWordExtractor(String path) throws XmlException, OpenXML4JException, IOException {
+        this(OPCPackage.open(path));
+    }
+
+    public XWPFEventBasedWordExtractor(OPCPackage container) throws XmlException, OpenXML4JException, IOException {
+        super((POIXMLDocument) null);
+        this.container = container;
+        this.properties = new POIXMLProperties(container);
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        if (args.length < 1) {
+            System.err.println("Use:");
+            System.err.println("  XWPFEventBasedWordExtractor <filename.xlsx>");
+            System.exit(1);
+        }
+
+        XWPFEventBasedWordExtractor extractor = new XWPFEventBasedWordExtractor(args[0]);
+        System.out.println(extractor.getText());
+        extractor.close();
+    }
+
+    public OPCPackage getPackage() {
+        return this.container;
+    }
+
+    public POIXMLProperties.CoreProperties getCoreProperties() {
+        return this.properties.getCoreProperties();
+    }
+
+    public POIXMLProperties.ExtendedProperties getExtendedProperties() {
+        return this.properties.getExtendedProperties();
+    }
+
+    public POIXMLProperties.CustomProperties getCustomProperties() {
+        return this.properties.getCustomProperties();
+    }
+
+
+    @Override
+    public String getText() {
+        StringBuilder sb = new StringBuilder();
+        //handle main document
+        List<PackagePart> pps = container.getPartsByContentType(XWPFRelation.DOCUMENT.getContentType());
+        if (pps != null) {
+            for (PackagePart pp : pps) {
+                //likely only one, but why not...
+                try {
+                    handleDocumentPart(pp, sb);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        //handle glossary document
+        pps = container.getPartsByContentType(XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
+
+        if (pps != null) {
+            for (PackagePart pp : pps) {
+                //likely only one, but why not...
+                try {
+                    handleDocumentPart(pp, sb);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        return sb.toString();
+    }
+
+
+    private void handleDocumentPart(PackagePart documentPart, StringBuilder sb) throws IOException, SAXException {
+        //load the numbering/list manager and styles from the main document part
+        XWPFNumbering numbering = loadNumbering(documentPart);
+        XWPFListManager xwpfListManager = new XWPFListManager(numbering);
+        //TODO: XWPFStyles styles = loadStyles(documentPart);
+
+        //headers
+        try {
+            PackageRelationshipCollection headersPRC = documentPart.getRelationshipsByType(XWPFRelation.HEADER.getRelation());
+            if (headersPRC != null) {
+                for (int i = 0; i < headersPRC.size(); i++) {
+                    PackagePart header = documentPart.getRelatedPart(headersPRC.getRelationship(i));
+                    handlePart(header, xwpfListManager, sb);
+                }
+            }
+        } catch (InvalidFormatException e) {
+            //swallow
+        }
+
+        //main document
+        handlePart(documentPart, xwpfListManager, sb);
+
+        //for now, just dump other components at end
+        for (XWPFRelation rel : new XWPFRelation[]{
+                XWPFRelation.FOOTNOTE,
+                XWPFRelation.COMMENT,
+                XWPFRelation.FOOTER,
+                XWPFRelation.ENDNOTE
+        }) {
+            try {
+                PackageRelationshipCollection prc = documentPart.getRelationshipsByType(rel.getRelation());
+                if (prc != null) {
+                    for (int i = 0; i < prc.size(); i++) {
+                        PackagePart packagePart = documentPart.getRelatedPart(prc.getRelationship(i));
+                        handlePart(packagePart, xwpfListManager, sb);
+                    }
+                }
+            } catch (InvalidFormatException e) {
+                //swallow
+            }
+        }
+    }
+
+    private void handlePart(PackagePart packagePart,
+                            XWPFListManager xwpfListManager, StringBuilder buffer) throws IOException, SAXException {
+
+        Map<String, String> hyperlinks = loadHyperlinkRelationships(packagePart);
+        try (InputStream stream = packagePart.getInputStream()) {
+            XMLReader reader = SAXHelper.newXMLReader();
+            reader.setContentHandler(new XWPFDocumentXMLBodyHandler(
+                    new XWPFToTextContentHandler(buffer), hyperlinks));
+            reader.parse(new InputSource(new CloseShieldInputStream(stream)));
+
+        } catch (ParserConfigurationException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private Map<String, String> loadHyperlinkRelationships(PackagePart bodyPart) {
+        Map<String, String> hyperlinks = new HashMap<>();
+        try {
+            PackageRelationshipCollection prc = bodyPart.getRelationshipsByType(XWPFRelation.HYPERLINK.getRelation());
+            for (int i = 0; i < prc.size(); i++) {
+                PackageRelationship pr = prc.getRelationship(i);
+                if (pr == null) {
+                    continue;
+                }
+                String id = pr.getId();
+                String url = (pr.getTargetURI() == null) ? null : pr.getTargetURI().toString();
+                if (id != null && url != null) {
+                    hyperlinks.put(id, url);
+                }
+            }
+        } catch (InvalidFormatException e) {
+        }
+        return hyperlinks;
+    }
+/*
+    private XWPFStyles loadStyles(PackagePart packagePart) {
+        try {
+            PackageRelationshipCollection stylesParts =
+                    packagePart.getRelationshipsByType(XWPFRelation.STYLES.getRelation());
+            if (stylesParts.size() > 0) {
+                PackageRelationship stylesRelationShip = stylesParts.getRelationship(0);
+                if (stylesRelationShip == null) {
+                    return null;
+                }
+                PackagePart stylesPart = opcPackage.getPart(stylesRelationShip);
+                if (stylesPart == null) {
+                    return null;
+                }
+                return new XWPFStyles(stylesPart);
+            }
+        } catch (IOException|OpenXML4JException e) {
+            //swallow
+        }
+        return null;
+
+    }
+*/
+    private XWPFNumbering loadNumbering(PackagePart packagePart) {
+        try {
+            PackageRelationshipCollection numberingParts = packagePart.getRelationshipsByType(XWPFRelation.NUMBERING.getRelation());
+            if (numberingParts.size() > 0) {
+                PackageRelationship numberingRelationShip = numberingParts.getRelationship(0);
+                if (numberingRelationShip == null) {
+                    return null;
+                }
+                PackagePart numberingPart = container.getPart(numberingRelationShip);
+                if (numberingPart == null) {
+                    return null;
+                }
+                return new XWPFNumbering(numberingPart);
+            }
+        } catch (IOException | OpenXML4JException e) {
+            //swallow
+        }
+        return null;
+    }
+
+    private class XWPFToTextContentHandler implements XWPFDocumentXMLBodyHandler.XWPFBodyContentsHandler {
+        private final StringBuilder buffer;
+
+        public XWPFToTextContentHandler(StringBuilder buffer) {
+            this.buffer = buffer;
+        }
+
+        @Override
+        public void run(XWPFRunProperties runProperties, String contents) {
+            buffer.append(contents);
+        }
+
+        @Override
+        public void hyperlinkRun(String link, String text) {
+            buffer.append(" (").append(text).append(") ");
+        }
+
+        @Override
+        public void startParagraph() {
+            //no-op
+        }
+
+        @Override
+        public void endParagraph() {
+            buffer.append("\n");
+        }
+
+        @Override
+        public void startTable() {
+
+        }
+
+        @Override
+        public void endTable() {
+
+        }
+
+        @Override
+        public void startTableRow() {
+
+        }
+
+        @Override
+        public void endTableRow() {
+            buffer.append("\n");
+        }
+
+        @Override
+        public void startTableCell() {
+
+        }
+
+        @Override
+        public void endTableCell() {
+            buffer.append("\t");
+        }
+
+        @Override
+        public void startSDT() {
+
+        }
+
+        @Override
+        public void endSDT() {
+            buffer.append("\n");
+        }
+
+        @Override
+        public void startEditedSection(String editor, Date date, XWPFDocumentXMLBodyHandler.EditType editType) {
+
+        }
+
+        @Override
+        public void endEditedSection() {
+
+        }
+
+        @Override
+        public boolean getIncludeDeletedText() {
+            return true;
+        }
+
+        @Override
+        public void footnoteReference(String id) {
+
+        }
+
+        @Override
+        public void endnoteReference(String id) {
+
+        }
+
+        @Override
+        public boolean getIncludeMoveFromText() {
+            return false;
+        }
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFRunProperties.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFRunProperties.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFRunProperties.java
new file mode 100644
index 0000000..ad2d656
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFRunProperties.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf;
+
+/**
+ * WARNING: This class is mutable.  Make a copy of it
+ * if you want persistence!
+ */
+
+class XWPFRunProperties {
+    boolean italics = false;
+    boolean bold = false;
+
+    public boolean getItalics() {
+        return italics;
+    }
+
+    public boolean getBold() {
+        return bold;
+    }
+
+    public void setItalics(boolean italics) {
+        this.italics = italics;
+    }
+
+    public void setBold(boolean bold) {
+        this.bold = bold;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFTikaBodyPartHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFTikaBodyPartHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFTikaBodyPartHandler.java
new file mode 100644
index 0000000..2f27739
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFTikaBodyPartHandler.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf;
+
+
+import java.util.Date;
+
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.parser.microsoft.ooxml.XWPFListManager;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.SAXException;
+
+public class XWPFTikaBodyPartHandler implements XWPFDocumentXMLBodyHandler.XWPFBodyContentsHandler {
+
+    private final static char[] NEWLINE = new char[]{'\n'};
+    private final static char[] TAB = new char[]{'\t'};
+
+    private final XHTMLContentHandler xhtml;
+    private final XWPFListManager listManager;
+    private final boolean includeDeletedText;
+    private final boolean includeMoveFromText;
+
+    private int pDepth = 0; //paragraph depth
+    private boolean isItalics = false;
+    private boolean isBold = false;
+
+    public XWPFTikaBodyPartHandler(XHTMLContentHandler xhtml, XWPFListManager listManager, OfficeParserConfig parserConfig) {
+        this.xhtml = xhtml;
+        this.listManager = listManager;
+        this.includeDeletedText = parserConfig.getIncludeDeletedContent();
+        this.includeMoveFromText = parserConfig.getIncludeMoveFromContent();
+    }
+
+    @Override
+    public void run(XWPFRunProperties runProperties, String contents) {
+        //TODO: smooth out bold/italics to handle only changes
+        //If two runs are bold, only add <b> at beginning and end of the run pair
+        try {
+            if (runProperties.getBold()) {
+                xhtml.startElement("b");
+            }
+            if (runProperties.getItalics()) {
+                xhtml.startElement("i");
+            }
+
+            xhtml.characters(contents);
+            if (runProperties.getItalics()) {
+                xhtml.endElement("i");
+            }
+            if (runProperties.getBold()) {
+                xhtml.endElement("b");
+            }
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void hyperlinkRun(String link, String text) {
+        //System.out.println("tika handler: "+link + " :: "+text);
+        try {
+            if (link != null) {
+                xhtml.startElement("a", "href", link);
+            }
+            xhtml.characters(text);
+            if (link != null) {
+                xhtml.endElement("a");
+            }
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void startParagraph() {
+        if (pDepth == 0) {
+            try {
+                xhtml.startElement("p");
+            } catch (SAXException e) {
+
+            }
+        }
+        pDepth++;
+    }
+
+    @Override
+    public void endParagraph() {
+        try {
+            if (pDepth == 1) {
+                xhtml.endElement("p");
+            } else {
+                xhtml.characters(NEWLINE, 0, 1);
+            }
+        } catch (SAXException e) {
+
+        }
+        pDepth--;
+    }
+
+    @Override
+    public void startTable() {
+        try {
+            xhtml.startElement("table");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void endTable() {
+        try {
+            xhtml.endElement("table");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void startTableRow() {
+        try {
+            xhtml.startElement("tr");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void endTableRow() {
+        try {
+            xhtml.endElement("tr");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void startTableCell() {
+        try {
+            xhtml.startElement("td");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void endTableCell() {
+        try {
+            xhtml.endElement("td");
+        } catch (SAXException e) {
+
+        }
+    }
+
+    @Override
+    public void startSDT() {
+        //no-op
+    }
+
+    @Override
+    public void endSDT() {
+        //no-op
+    }
+
+    @Override
+    public void startEditedSection(String editor, Date date, XWPFDocumentXMLBodyHandler.EditType editType) {
+        //no-op
+    }
+
+    @Override
+    public void endEditedSection() {
+        //no-op
+    }
+
+    @Override
+    public boolean getIncludeDeletedText() {
+        return includeDeletedText;
+    }
+
+    @Override
+    public void footnoteReference(String id) {
+        if (id != null) {
+            try {
+                xhtml.characters("[");
+                xhtml.characters(id);
+                xhtml.characters("]");
+            } catch (SAXException e) {
+
+            }
+        }
+    }
+
+    @Override
+    public void endnoteReference(String id) {
+        if (id != null) {
+            try {
+                xhtml.characters("[");
+                xhtml.characters(id);
+                xhtml.characters("]");
+            } catch (SAXException e) {
+
+            }
+        }
+    }
+
+    @Override
+    public boolean getIncludeMoveFromText() {
+        return includeMoveFromText;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/AbstractPartHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/AbstractPartHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/AbstractPartHandler.java
new file mode 100644
index 0000000..9aa5471
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/AbstractPartHandler.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+import org.apache.tika.exception.TikaException;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+abstract class AbstractPartHandler extends DefaultHandler implements PartHandler {
+
+    private String name;
+
+    public abstract String getContentType();
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Override this to flush buffers, etc if necessary
+     */
+    public void endPart() throws SAXException, TikaException {
+        //no-op
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BinaryDataHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BinaryDataHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BinaryDataHandler.java
new file mode 100644
index 0000000..4a13799
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BinaryDataHandler.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.extractor.EmbeddedDocumentExtractor;
+import org.apache.tika.extractor.EmbeddedDocumentUtil;
+import org.apache.tika.io.TikaInputStream;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+class BinaryDataHandler extends AbstractPartHandler {
+
+    private final XHTMLContentHandler handler;
+    private final Metadata metadata;
+    private final ParseContext parseContext;
+
+    private boolean inBinaryData = false;
+    private StringBuilder buffer = new StringBuilder();
+
+    final Base64 base64 = new Base64();
+
+
+    public BinaryDataHandler(XHTMLContentHandler handler, Metadata metadata, ParseContext context) {
+        this.handler = handler;
+        this.metadata = metadata;
+        this.parseContext = context;
+    }
+
+
+    @Override
+    public void startDocument() throws SAXException {
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+
+    }
+
+    @Override
+    public void endPart() throws SAXException, TikaException {
+        if (hasData()) {
+            EmbeddedDocumentExtractor embeddedDocumentExtractor =
+                    EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(parseContext);
+            Metadata embeddedMetadata = new Metadata();
+            try (TikaInputStream stream = TikaInputStream.get(getInputStream())) {
+                embeddedDocumentExtractor.parseEmbedded(stream, handler, embeddedMetadata, false);
+            } catch (IOException e) {
+                throw new TikaException("error in finishing part", e);
+            }
+            buffer.setLength(0);
+        }
+
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+
+        if (uri.equals(Word2006MLDocHandler.PKG_NS) && localName.equals("binaryData")) {
+            inBinaryData = true;
+        }
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+        if (uri.equals(Word2006MLDocHandler.PKG_NS) && localName.equals("binaryData")) {
+            inBinaryData = false;
+        }
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length) throws SAXException {
+        if (inBinaryData) {
+            buffer.append(ch, start, length);
+        }
+    }
+
+    @Override
+    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+
+    }
+
+    @Override
+    public String getContentType() {
+        return "";
+    }
+
+    boolean hasData() {
+        return buffer.length() > 0;
+    }
+
+    private InputStream getInputStream() {
+        byte[] bytes = base64.decode(buffer.toString());
+        return new ByteArrayInputStream(bytes);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BodyPartHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BodyPartHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BodyPartHandler.java
new file mode 100644
index 0000000..4d04b2b
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/BodyPartHandler.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+import java.util.HashMap;
+
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFDocumentXMLBodyHandler;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFTikaBodyPartHandler;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Simple wrapper/extension of XWPFDocumentXMLBodyHandler to fit
+ * into the inline parsing scheme.
+ */
+class BodyPartHandler extends XWPFDocumentXMLBodyHandler implements PartHandler {
+
+    private final String contentType;
+    private String name;
+    public BodyPartHandler(String contentType, XHTMLContentHandler xhtml,
+                           RelationshipsManager relationshipsManager,
+                           OfficeParserConfig officeParserConfig) {
+        super(new XWPFTikaBodyPartHandler(xhtml, null, officeParserConfig),
+                new HashMap<String, String>());
+        this.contentType = contentType;
+    }
+
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getContentType() {
+        return contentType;
+    }
+
+    @Override
+    public void endPart() throws SAXException, TikaException {
+        //no-op
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/CorePropertiesHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/CorePropertiesHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/CorePropertiesHandler.java
new file mode 100644
index 0000000..c746e5c
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/CorePropertiesHandler.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.OfficeOpenXMLCore;
+import org.apache.tika.metadata.Property;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+class CorePropertiesHandler extends AbstractPartHandler {
+
+    final static String DC_NS = "http://purl.org/dc/elements/1.1";
+    final static String DC_TERMS_NS = "http://purl.org/dc/terms";
+    final static String CP_NS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
+
+    private final Metadata metadata;
+
+    final StringBuilder buffer = new StringBuilder();
+    final Map<String, Map<String, Property>> properties = new HashMap<>();
+
+    public CorePropertiesHandler(Metadata metadata) {
+        this.metadata = metadata;
+        addProperties();
+    }
+
+    void addProperties() {
+        Map<String, Property> dc = properties.get(DC_NS);
+        if (dc == null) {
+            dc = new HashMap<>();
+        }
+        dc.put("creator", TikaCoreProperties.CREATOR);
+        dc.put("title", TikaCoreProperties.TITLE);
+        dc.put("description", TikaCoreProperties.DESCRIPTION);
+        properties.put(DC_NS, dc);
+
+        Map<String, Property> dcTerms = properties.get(DC_TERMS_NS);
+        if (dcTerms == null) {
+            dcTerms = new HashMap<>();
+        }
+        dcTerms.put("created", TikaCoreProperties.CREATED);
+        dcTerms.put("modified", TikaCoreProperties.MODIFIED);
+
+        properties.put(DC_TERMS_NS, dcTerms);
+
+        Map<String, Property> cp = properties.get(CP_NS);
+        if (cp == null) {
+            cp = new HashMap<>();
+        }
+        cp.put("category", OfficeOpenXMLCore.CATEGORY);
+        cp.put("contentStatus", OfficeOpenXMLCore.CONTENT_STATUS);
+        cp.put("lastModifiedBy", TikaCoreProperties.MODIFIER);
+        cp.put("lastPrinted", OfficeOpenXMLCore.LAST_PRINTED);
+        cp.put("revision", OfficeOpenXMLCore.REVISION);
+        cp.put("subject", OfficeOpenXMLCore.SUBJECT);
+        cp.put("version", OfficeOpenXMLCore.VERSION);
+        properties.put(CP_NS, cp);
+    }
+
+    @Override
+    public void startDocument() throws SAXException {
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+        buffer.setLength(0);
+    }
+
+    @Override
+    public void startPrefixMapping(String prefix, String uri) throws SAXException {
+    }
+
+    @Override
+    public void endPrefixMapping(String prefix) throws SAXException {
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+        Property prop = getProperty(uri, localName);
+        if (prop != null) {
+
+            if (prop.isMultiValuePermitted()) {
+                metadata.add(prop, buffer.toString());
+            } else {
+                metadata.set(prop, buffer.toString());
+            }
+        }
+        buffer.setLength(0);
+
+    }
+
+    private Property getProperty(String uri, String localName) {
+        if (uri.endsWith("/")) {
+            uri = uri.substring(0, uri.length()-1);
+        }
+
+        Map<String, Property> m = properties.get(uri);
+        if (m != null) {
+            return m.get(localName);
+        }
+        return null;
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length) throws SAXException {
+        buffer.append(ch, start, length);
+    }
+
+    @Override
+    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+        buffer.append(ch, start, length);
+    }
+
+    @Override
+    public String getContentType() {
+        return ContentTypes.CORE_PROPERTIES_PART;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/ExtendedPropertiesHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/ExtendedPropertiesHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/ExtendedPropertiesHandler.java
new file mode 100644
index 0000000..74238a6
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/ExtendedPropertiesHandler.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Office;
+import org.apache.tika.metadata.OfficeOpenXMLExtended;
+import org.apache.tika.metadata.Property;
+
+class ExtendedPropertiesHandler extends CorePropertiesHandler {
+
+    final static String EP_NS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";
+
+    public ExtendedPropertiesHandler(Metadata metadata) {
+        super(metadata);
+    }
+
+    @Override
+    void addProperties() {
+        Map<String, Property> ep = properties.get(EP_NS);
+        if (ep == null) {
+            ep = new HashMap<>();
+        }
+        ep.put("AppVersion", OfficeOpenXMLExtended.APP_VERSION);
+        ep.put("Application", OfficeOpenXMLExtended.APPLICATION);
+        ep.put("Comments", OfficeOpenXMLExtended.COMMENTS);
+        ep.put("Company", OfficeOpenXMLExtended.COMPANY);
+        ep.put("DocSecurity", OfficeOpenXMLExtended.DOC_SECURITY);
+        ep.put("HiddenSlides", OfficeOpenXMLExtended.HIDDEN_SLIDES);
+        ep.put("Manager", OfficeOpenXMLExtended.MANAGER);
+        ep.put("Notes", OfficeOpenXMLExtended.NOTES);
+        ep.put("PresentationFormat", OfficeOpenXMLExtended.PRESENTATION_FORMAT);
+        ep.put("Template", OfficeOpenXMLExtended.TEMPLATE);
+        ep.put("TotalTime", OfficeOpenXMLExtended.TOTAL_TIME);
+        ep.put("Pages", Office.PAGE_COUNT);
+        ep.put("Words", Office.WORD_COUNT);
+        ep.put("Characters", Office.CHARACTER_COUNT);
+        ep.put("CharactersWithSpaces", Office.CHARACTER_COUNT_WITH_SPACES);
+        ep.put("Paragraphs", Office.PARAGRAPH_COUNT);
+        ep.put("Lines", Office.LINE_COUNT);
+        properties.put(EP_NS, ep);
+    }
+
+    @Override
+    public String getContentType() {
+        return "application/vnd.openxmlformats-officedocument.extended-properties+xml";
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/PartHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/PartHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/PartHandler.java
new file mode 100644
index 0000000..fee64de
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/PartHandler.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+import org.apache.tika.exception.TikaException;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+interface PartHandler extends ContentHandler {
+    void setName(String name);
+
+    String getName();
+
+    String getContentType();
+
+    /**
+     * Override this to flush buffers, etc if necessary
+     */
+    void endPart() throws SAXException, TikaException;
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Relationship.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Relationship.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Relationship.java
new file mode 100644
index 0000000..eccb1bf
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Relationship.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import org.apache.poi.openxml4j.opc.TargetMode;
+
+class Relationship {
+
+    private final String contentType;
+
+    private final String target;
+
+    private final TargetMode targetMode;
+
+    public Relationship(String contentType, String target) {
+        this(contentType, target, null);
+    }
+
+    public Relationship(String contentType, String target, TargetMode targetMode) {
+        this.contentType = contentType;
+        this.target = target;
+        this.targetMode = targetMode;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public String getTarget() {
+        return target;
+    }
+
+    public TargetMode getTargetMode() {
+        return targetMode;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsHandler.java
new file mode 100644
index 0000000..670ffab
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsHandler.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import org.apache.poi.openxml4j.opc.ContentTypes;
+import org.apache.poi.openxml4j.opc.TargetMode;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+class RelationshipsHandler extends AbstractPartHandler {
+
+    final static String REL_NS = "http://schemas.openxmlformats.org/package/2006/relationships";
+
+    private final RelationshipsManager relationshipsManager;
+
+    public RelationshipsHandler(RelationshipsManager relationshipsManager) {
+        this.relationshipsManager = relationshipsManager;
+    }
+
+
+    @Override
+    public void startDocument() throws SAXException {
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+    }
+
+    @Override
+    public void startPrefixMapping(String prefix, String uri) throws SAXException {
+    }
+
+    @Override
+    public void endPrefixMapping(String prefix) throws SAXException {
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+        if (uri.equals(REL_NS)) {
+            if (localName.equals("Relationship")) {
+                String id = atts.getValue("", "Id");
+                String type = atts.getValue("", "Type");
+                String target = atts.getValue("", "Target");
+                String targetModeString = atts.getValue("", "TargetMode");
+                TargetMode targetMode = "EXTERNAL".equals(targetModeString)? TargetMode.EXTERNAL :
+                        TargetMode.INTERNAL;
+                relationshipsManager.addRelationship(getName(), id, type, target, targetMode);
+            }
+        }
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length) throws SAXException {
+    }
+
+    @Override
+    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+
+    }
+
+    @Override
+    public String getContentType() {
+        return ContentTypes.RELATIONSHIPS_PART;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsManager.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsManager.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsManager.java
new file mode 100644
index 0000000..5773fbb
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/RelationshipsManager.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.poi.openxml4j.opc.TargetMode;
+
+class RelationshipsManager {
+
+    Map<String, Map<String, Relationship>> map = new HashMap<>();
+
+    public void addRelationship(String relsFileName, String id, String type, String target, TargetMode targetMode) {
+        String packageName = convertRelsFileNameToPackageName(relsFileName);
+        Map<String, Relationship> thisPackageRels = map.get(packageName);
+        if (thisPackageRels == null) {
+            thisPackageRels = new HashMap<>();
+        }
+        thisPackageRels.put(id, new Relationship(type, target, targetMode));
+        map.put(packageName, thisPackageRels);
+    }
+
+    public Relationship getRelationship(String packageName, String id) {
+        Map<String, Relationship> thisPackageRels = map.get(packageName);
+        if (thisPackageRels != null) {
+            return thisPackageRels.get(id);
+        }
+        return null;
+    }
+
+    private String convertRelsFileNameToPackageName(String relsFileName) {
+        if ("/_rels/.rels".equals(relsFileName)) {
+            return "/";
+        }
+
+        String tmp = relsFileName;
+        tmp = tmp.replaceFirst("\\/_rels\\/", "/");
+        tmp = tmp.replaceFirst(".rels\\Z", "");
+        return tmp;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLDocHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLDocHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLDocHandler.java
new file mode 100644
index 0000000..4276671
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLDocHandler.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+class Word2006MLDocHandler extends DefaultHandler {
+
+    final static String PKG_NS = "http://schemas.microsoft.com/office/2006/xmlPackage";
+
+
+    private final XHTMLContentHandler xhtml;
+    private final Metadata metadata;
+    private final ParseContext parseContext;
+
+    private final Map<String, PartHandler> partHandlers = new HashMap<>();
+    private final BinaryDataHandler binaryDataHandler;
+    private final RelationshipsManager relationshipsManager = new RelationshipsManager();
+    private PartHandler currentPartHandler = null;
+
+    public Word2006MLDocHandler(XHTMLContentHandler xhtml, Metadata metadata,
+                                ParseContext context) {
+        this.xhtml = xhtml;
+        this.metadata = metadata;
+        this.parseContext = context;
+        OfficeParserConfig officeParserConfig = context.get(OfficeParserConfig.class);
+
+        addPartHandler(new RelationshipsHandler(relationshipsManager));
+
+        addPartHandler(new BodyPartHandler(
+                XWPFRelation.DOCUMENT.getContentType(),
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                XWPFRelation.FOOTNOTE.getContentType(),
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml",
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                XWPFRelation.HEADER.getContentType(),
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                XWPFRelation.FOOTER.getContentType(),
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml",
+                xhtml, relationshipsManager, officeParserConfig));
+
+
+        addPartHandler(new BodyPartHandler(
+                "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml",
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new BodyPartHandler(
+                "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml",
+                xhtml, relationshipsManager, officeParserConfig));
+
+        addPartHandler(new CorePropertiesHandler(metadata));
+        addPartHandler(new ExtendedPropertiesHandler(metadata));
+        binaryDataHandler = new BinaryDataHandler(xhtml, metadata, context);
+    }
+
+    private void addPartHandler(PartHandler partHandler) {
+        partHandlers.put(partHandler.getContentType(), partHandler);
+    }
+
+
+    @Override
+    public void startDocument() throws SAXException {
+    }
+
+    @Override
+    public void endDocument() throws SAXException {
+    }
+
+    @Override
+    public void startPrefixMapping(String prefix, String uri) throws SAXException {
+    }
+
+    @Override
+    public void endPrefixMapping(String prefix) throws SAXException {
+
+    }
+
+    @Override
+    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+        if (uri.equals(PKG_NS) && localName.equals("part")) {
+            //start of a package
+            String name = atts.getValue(PKG_NS, "name");
+            String contentType = atts.getValue(PKG_NS, "contentType");
+            currentPartHandler = partHandlers.get(contentType);
+            //for now treat every unknown part type
+            //as if it contained binary data
+            if (currentPartHandler == null) {
+                currentPartHandler = binaryDataHandler;
+            }
+            if (currentPartHandler != null) {
+                currentPartHandler.setName(name);
+            }
+        } else if (currentPartHandler != null) {
+            currentPartHandler.startElement(uri, localName, qName, atts);
+        }
+
+    }
+
+    @Override
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+        if (uri.equals(PKG_NS) && localName.equals("part")) {
+            //do post processing
+            if (currentPartHandler != null) {
+                try {
+                    currentPartHandler.endPart();
+                } catch (TikaException e) {
+                    throw new SAXException(e);
+                }
+            }
+            //then reset
+            currentPartHandler = null;
+        } else if (currentPartHandler != null) {
+            currentPartHandler.endElement(uri, localName, qName);
+        }
+    }
+
+    @Override
+    public void characters(char[] ch, int start, int length) throws SAXException {
+        if (currentPartHandler != null) {
+            currentPartHandler.characters(ch, start, length);
+        }
+    }
+
+    @Override
+    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
+        if (currentPartHandler != null) {
+            currentPartHandler.characters(ch, start, length);
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParser.java
new file mode 100644
index 0000000..ff8a43d
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ml2006/Word2006MLParser.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.Set;
+
+import org.apache.commons.io.input.CloseShieldInputStream;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.AbstractOfficeParser;
+import org.apache.tika.sax.EmbeddedContentHandler;
+import org.apache.tika.sax.OfflineContentHandler;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+
+public class Word2006MLParser extends AbstractOfficeParser {
+
+    protected static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(
+                    MediaType.application("vnd.ms-word2006ml"));
+
+    @Override
+    public Set<MediaType> getSupportedTypes(ParseContext context) {
+        return SUPPORTED_TYPES;
+    }
+
+    @Override
+    public void parse(InputStream stream, ContentHandler handler,
+                      Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException {
+        //set OfficeParserConfig if the user hasn't specified one
+        configure(context);
+
+        final XHTMLContentHandler xhtml =
+                new XHTMLContentHandler(handler, metadata);
+
+        xhtml.startDocument();
+
+        try {
+            context.getSAXParser().parse(
+                    new CloseShieldInputStream(stream),
+                    new OfflineContentHandler(new EmbeddedContentHandler(
+                            new Word2006MLDocHandler(xhtml, metadata, context))));
+        } catch (SAXException e) {
+            throw new TikaException("XML parse error", e);
+        } finally {
+            xhtml.endDocument();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser b/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
index fcd5840..4d6e6d4 100644
--- a/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
+++ b/tika-parsers/src/main/resources/META-INF/services/org.apache.tika.parser.Parser
@@ -42,7 +42,7 @@ org.apache.tika.parser.microsoft.OfficeParser
 org.apache.tika.parser.microsoft.OldExcelParser
 org.apache.tika.parser.microsoft.TNEFParser
 org.apache.tika.parser.microsoft.ooxml.OOXMLParser
-org.apache.tika.parser.microsoft.ooxml.xwpf.Word2006MLParser
+org.apache.tika.parser.microsoft.ooxml.xwpf.ml2006.Word2006MLParser
 org.apache.tika.parser.microsoft.xml.WordMLParser
 org.apache.tika.parser.microsoft.xml.SpreadsheetMLParser
 org.apache.tika.parser.mp3.Mp3Parser

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
index 5e0fc1e..bfbd8ce 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
@@ -25,10 +25,12 @@ import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import java.io.ByteArrayOutputStream;
+import java.io.File;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.io.StringWriter;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -44,10 +46,12 @@ import org.apache.tika.metadata.OfficeOpenXMLExtended;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.TikaMetadataKeys;
 import org.apache.tika.parser.AutoDetectParser;
+import org.apache.tika.parser.EmptyParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.parser.RecursiveParserWrapper;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
 import org.apache.tika.parser.microsoft.WordParserTest;
 import org.apache.tika.sax.BodyContentHandler;
 import org.junit.Ignore;
@@ -1299,6 +1303,33 @@ public class OOXMLParserTest extends TikaTest {
         assertContainsAtLeast(minExpected, getRecursiveMetadata("testEXCEL_macro.xlsm"));
     }
 
+    //@Test //use this for lightweight benchmarking to compare xwpf options
+    public void testBatch() throws Exception {
+        OfficeParserConfig officeParserConfig = new OfficeParserConfig();
+        officeParserConfig.setUseSAXDocxExtractor(true);
+        long started = new Date().getTime();
+        int ex = 0;
+        for (int i = 0; i < 100; i++) {
+            for (File f : getResourceAsFile("/test-documents").listFiles()) {
+                if (!f.getName().endsWith(".docx")) {
+                    continue;
+                }
+                try (InputStream is = TikaInputStream.get(f)) {
+                    ParseContext parseContext = new ParseContext();
+                    parseContext.set(OfficeParserConfig.class, officeParserConfig);
+                    //test only the extraction of the main docx content, not embedded docs
+                    parseContext.set(Parser.class, new EmptyParser());
+                    Metadata metadata = new Metadata();
+                    XMLResult r = getXML(is, parser, metadata, parseContext);
+                } catch (Exception e) {
+                    ex++;
+
+                }
+            }
+        }
+        System.out.println("elapsed: "+(new Date().getTime()-started) + " with " + ex + " exceptions");
+    }
+
 }
 
 

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
new file mode 100644
index 0000000..f5512cb
--- /dev/null
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/xwpf/SXWPFExtractorTest.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.microsoft.ooxml.xwpf;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.tika.TikaTest;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.Office;
+import org.apache.tika.metadata.OfficeOpenXMLCore;
+import org.apache.tika.metadata.OfficeOpenXMLExtended;
+import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.RecursiveParserWrapper;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.junit.Test;
+
+
+public class SXWPFExtractorTest extends TikaTest {
+
+    @Test
+    public void basicTest() throws Exception {
+        ParseContext pc = new ParseContext();
+        OfficeParserConfig officeParserConfig = new OfficeParserConfig();
+        officeParserConfig.setUseSAXDocxExtractor(true);
+
+        pc.set(OfficeParserConfig.class, officeParserConfig);
+        List<Metadata> metadataList = getRecursiveMetadata("testWORD_2006ml.docx", pc);
+
+        assertEquals(8, metadataList.size());
+        Metadata m = metadataList.get(0);
+
+        assertEquals("2016-11-29T00:58:00Z", m.get(TikaCoreProperties.CREATED));
+        assertEquals("2016-11-29T17:54:00Z", m.get(TikaCoreProperties.MODIFIED));
+        assertEquals("My Document Title", m.get(TikaCoreProperties.TITLE));
+        assertEquals("This is the Author", m.get(TikaCoreProperties.CREATOR));
+        assertEquals("3", m.get(OfficeOpenXMLCore.REVISION));
+        assertEquals("Allison, Timothy B.", m.get(TikaCoreProperties.MODIFIER));
+        //assertEquals("0", m.get(OfficeOpenXMLExtended.DOC_SECURITY));
+        assertEquals("260", m.get(Office.WORD_COUNT));
+        assertEquals("3", m.get(Office.PARAGRAPH_COUNT));
+        assertEquals("1742", m.get(Office.CHARACTER_COUNT_WITH_SPACES));
+        assertEquals("12", m.get(Office.LINE_COUNT));
+        assertEquals("16.0000", m.get(OfficeOpenXMLExtended.APP_VERSION));
+
+
+        String content = m.get(RecursiveParserWrapper.TIKA_CONTENT);
+
+
+        assertContainsCountTimes("engaging title page", content, 1);
+        assertContainsCountTimes("This is the Author", content, 1);
+        assertContainsCountTimes("This is an engaging title page", content, 1);
+
+        assertContains("My Document Title", content);
+        assertContains("My Document Subtitle", content);
+
+        assertContains("<p>\tHeading1\t3</p>", content);
+
+
+        //TODO: integrate numbering
+        assertContains("Really basic 2.", content);
+
+        assertContainsCountTimes("This is a text box", content, 1);
+
+        assertContains("<p>This is a hyperlink: <a href=\"http://tika.apache.org\">tika</a></p>", content);
+
+        assertContains("<p>This is a link to a local file: <a href=\"file:///C:/data/test.png\">test.png</a></p>", content);
+
+        assertContains("<p>This is          10 spaces</p>", content);
+
+        //caption
+        assertContains("<p>Table 1: Table1 Caption</p>", content);
+
+        //embedded table
+        //TODO: figure out how to handle embedded tables in html
+        assertContains("<p>Embedded table r1c1</p>", content);
+
+        //shape
+        assertContainsCountTimes("<p>This is text within a shape", content, 1);
+
+        //sdt rich text
+        assertContains("<p>Rich text content control", content);
+
+        //sdt simple text
+        assertContains("<p>Simple text content control", content);
+
+        //sdt repeating
+        assertContains("Repeating content", content);
+
+        //sdt dropdown
+        //TODO: get options for dropdown
+        assertContains("Drop down1", content);
+
+        //sdt date
+        assertContains("<p>11/16/2016</p>", content);
+
+        //test that <tab/> works
+        assertContains("tab\ttab", content);
+
+        assertContainsCountTimes("serious word art", content, 1);
+        assertContainsCountTimes("Wordartr1c1", content, 1);
+
+        //glossary document contents
+        assertContains("Click or tap to enter a date", content);
+
+        //basic formatting
+        assertContains("<p>The <i>quick</i> brown <b>fox </b>j<i>um</i><b><i>ped</i></b> over",
+                content);
+
+        //TODO: add chart parsing
+//        assertContains("This is the chart", content);
+
+        assertContains("This is a comment", content);
+
+        assertContains("This is an endnote", content);
+
+        assertContains("this is the footnote", content);
+
+        assertContains("First page header", content);
+
+        assertContains("Even page header", content);
+
+        assertContains("Odd page header", content);
+
+        assertContains("First page footer", content);
+
+        assertContains("Even page footer", content);
+
+        assertContains("Odd page footer", content);
+
+        //test default includes deleted
+        assertContains("frog", content);
+
+        assertContains("Mattmann", content);
+
+        //TODO: extract chart text
+//        assertContains("This is the chart title", content);
+
+    }
+
+    @Test
+    public void testSkipDeleted() throws Exception {
+        ParseContext pc = new ParseContext();
+        OfficeParserConfig officeParserConfig = new OfficeParserConfig();
+        officeParserConfig.setIncludeDeletedContent(false);
+        officeParserConfig.setUseSAXDocxExtractor(true);
+        officeParserConfig.setIncludeMoveFromContent(true);
+        pc.set(OfficeParserConfig.class, officeParserConfig);
+
+        XMLResult r = getXML("testWORD_2006ml.docx", pc);
+        assertNotContained("frog", r.xml);
+        assertContainsCount("Second paragraph", r.xml, 2);
+
+    }
+
+    private void assertContainsCountTimes(String needle, String haystack, int expectedCount) {
+        int i = haystack.indexOf("engaging title page");
+        int cnt = 0;
+        while (i > -1) {
+            cnt++;
+            i = haystack.indexOf("engaging title page", i+1);
+        }
+        assertEquals("found needle >"+ needle+"<"+cnt+" times instead of expected: "+expectedCount,
+                expectedCount, cnt);
+
+    }
+
+
+
+}


[2/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Posted by ta...@apache.org.
http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.docx
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.docx b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.docx
new file mode 100644
index 0000000..682a64f
Binary files /dev/null and b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.docx differ

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.xml
----------------------------------------------------------------------
diff --git a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.xml b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.xml
index 920bfa2..71dbf50 100644
--- a/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.xml
+++ b/tika-parsers/src/test/resources/test-documents/testWORD_2006ml.xml
@@ -1,631 +1,760 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <?mso-application progid="Word.Document"?>
-<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"><pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512"><pkg:xmlData><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256"><pkg:xmlData><Relationships xmlns="http://schemas.openxmlformats.org/package/2
 006/relationships"><Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes" Target="endnotes.xml"/><Relationship Id="rId13" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart" Target="charts/chart1.xml"/><Relationship Id="rId18" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header2.xml"/><Relationship Id="rId26" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml"/><Relationship Id="rId21" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header3.xml"/><Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes" Target="footnotes.xml"/><Relationship Id="rId12" Type="http://schemas.openxmlfor
 mats.org/officeDocument/2006/relationships/hyperlink" Target="file:///C:\data\test.png" TargetMode="External"/><Relationship Id="rId17" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header" Target="header1.xml"/><Relationship Id="rId25" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument" Target="glossary/document.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml" Target="../customXml/item2.xml"/><Relationship Id="rId16" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image2.jpg"/><Relationship Id="rId20" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer2.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml" Target="../customXml/item1.xml"/><Relationship Id="rId6" Type="http://schemas.openxmlformats.or
 g/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/><Relationship Id="rId11" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" Target="http://tika.apache.org" TargetMode="External"/><Relationship Id="rId24" Type="http://schemas.microsoft.com/office/2011/relationships/people" Target="people.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/><Relationship Id="rId15" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="embeddings/oleObject1.bin"/><Relationship Id="rId23" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/><Relationship Id="rId10" Type="http://schemas.microsoft.com/office/2011/relationships/commentsExtended" Target="commentsExtended.xml"/><Relationship Id="rId19" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationshi
 ps/footer" Target="footer1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId9" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" Target="comments.xml"/><Relationship Id="rId14" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.emf"/><Relationship Id="rId22" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer3.xml"/></Relationships></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"><pkg:xmlData><w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://s
 chemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocess
 ingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se wp14"><w:body><w:sdt><w:sdtPr><w:id w:val="987518934"/><w:docPartObj><w:docPartGallery w:val="Cover Pages"/><w:docPartUnique/></w:docPartObj></w:sdtPr><w:sdtContent><w:p w14:paraId="44B71F4F" w14:textId="29914BFA" w:rsidR="00711569" w:rsidRDefault="0049479F"><w:r><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251666432" behindDoc="1" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="43E31E0F" wp14:editId="348304CE"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="page"><wp:posOffset>910590</wp:posOffset></wp:positionH><wp:positionV relativeFrom="margin"><wp:align>top</wp:align></wp:positionV><wp:extent cx="6290310" cy="8130540"/><wp:effectExtent l="0" t="0" r="0" b
 ="3810"/><wp:wrapNone/><wp:docPr id="466" name="Rectangle 466"/><wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr><a:spLocks/></wps:cNvSpPr><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="6290310" cy="8130540"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:gradFill><a:gsLst><a:gs pos="0"><a:schemeClr val="accent1"><a:lumMod val="20000"/><a:lumOff val="80000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="accent1"><a:lumMod val="60000"/><a:lumOff val="40000"/></a:schemeClr></a:gs></a:gsLst></a:gradFill><a:ln><a:noFill/></a:ln></wps:spPr><wps:style><a:lnRef idx="2"><a:schemeClr val="accent1"><a:shade val="50000"/></a:schemeClr></a:lnRef><a:fillRef idx="1003"><a:schemeClr val="lt2"/></a:fillRef><a:ef
 fectRef idx="0"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></wps:style><wps:txbx><w:txbxContent><w:p w14:paraId="04A3866B" w14:textId="77777777" w:rsidR="00711569" w:rsidRDefault="00711569"/></w:txbxContent></wps:txbx><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="274320" tIns="45720" rIns="274320" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="ctr" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:noAutofit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>0</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="page"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:rect w14:anchorId="43E31E0F" id="Rectangle 466" o:spid="_x0000_s1026" style="position:absolute;ma
 rgin-left:71.7pt;margin-top:0;width:495.3pt;height:640.2pt;z-index:-251650048;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:page;mso-position-vertical:top;mso-position-vertical-relative:margin;mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;mso-height-relative:page;v-text-anchor:middle" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3Jl
 bHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQBM8ucW1wIAAIQGAAAOAAAAZHJzL2Uyb0RvYy54bWysVVtv0zAUfkfiP1h+Z7m0KyNaOlWbhpDK&#xA;Nm1De3Ydp4lwfIzttim/nmPnsm4UEIiX6Pjcz3cuOb9oG0m2wtgaVE6Tk5gSoTgUtVrn9Mvj9bsz&#xA;SqxjqmASlMjpXlh6MX/75nynM5FCBbIQhqATZbOdzmnlnM6iyPJKNMyegBYKhSWYhjl8mnVUGLZD&#xA;742M0jieRTswhTbAhbXIveqEdB78l6Xg7rYsrXBE5hRzc+Frwnflv9H8nGVrw3RV8z4N9g9ZNKxW&#xA;GHR0dcUcIxtT/+SqqbkBC6U74dBEUJY1F6EGrCaJX1XzUDEtQi0IjtUjTPb/ueU32ztD6iKn09mM&#xA;EsUabNI9wsbUWgrimQjRTtsMNR/0nfFFWr0E/tWiIHoh8Q/b67SlabwulkjagPd+xFu0jnBkztIP&#xA;8STBtnCUnSWT+HQaOhKxbDDXxrqPAhriiZwazCzgzLZL63wCLBtUeviL61rKQFtU6QiiATGLg2UY&#xA;LXEpDdkyHArGuVAuCSK5aT5D0fFxuOJ+PJCNQ9SxzwY2Bh49hTTW9jBW4vX+KuBs8Myyw4DTgX00&#xA;IDLXXZmeMmws
 XiqfjQIPRgeT54R2dR0KvXJ7KbyeVPeixCnAnqR/AslWrBAdGKe/zC049J5LjD/6&#xA;RlAmx9xLl/opwxJ6dW8pwvaOtr/FsjMeLUJgUG40bmoF5njkZIjc6Q8Ydch4kFy7atG/J1dQ7HFb&#xA;DHRnxGp+XeNYLpl1d8zg3cBRxlvobvFTStjlFHqKkgrM92N8r4/rjFJKdniHcmq/bZgRlMhPCoc2&#xA;fT+dpP5yhdf09L1/mBei1aFIbZpLwLlO8O5qHkhv4ORAlgaaJzyaCx8XRUxxjJ5T7szwuHTdhcSz&#xA;y8ViEdTwXGnmlupBc+/cQ+wX77F9Ykb32+lwsW9guFose7Wkna63VLDYOCjrsMHPyPbg46kLw9Cf&#xA;ZX9LD99B6/nnMf8BAAD//wMAUEsDBBQABgAIAAAAIQAJRQxG2gAAAAoBAAAPAAAAZHJzL2Rvd25y&#xA;ZXYueG1sTE9LTsMwFNwjcQfrIbGjTpOA2hCnQiAO0LTA1rXdJMJ+jmy3TTg9ryvYzWhG86k3k7Ps&#xA;bEIcPApYLjJgBpXXA3YC9rv3hxWwmCRqaT0aAbOJsGlub2pZaX/BrTm3qWMUgrGSAvqUxorzqHrj&#xA;ZFz40SBpRx+cTERDx3WQFwp3ludZ9sSdHJAaejma196o7/bkBPxs+XoXVZrfis/w+OVsm3+oWYj7&#xA;u+nlGVgyU/ozw3U+TYeGNh38CXVklnhZlGQVQI+u8rIoCR0I5ausBN7U/P+F5hcAAP//AwBQSwEC&#xA;LQAUAAYACAAAACEAtoM4kv4AAADhAQAAEwAAAAAAAAAAAAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNd&#xA;LnhtbFBLAQItABQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAAAAAAAAAAAAAAC8BAABfcmVscy8u&#xA;cmVsc1BLAQItABQABgAIAAAAIQBM8ucW1wIAA
 IQGAAAOAAAAAAAAAAAAAAAAAC4CAABkcnMvZTJv&#xA;RG9jLnhtbFBLAQItABQABgAIAAAAIQAJRQxG2gAAAAoBAAAPAAAAAAAAAAAAAAAAADEFAABkcnMv&#xA;ZG93bnJldi54bWxQSwUGAAAAAAQABADzAAAAOAYAAAAA&#xA;" fillcolor="#deeaf6 [660]" stroked="f" strokeweight="1pt"><v:fill color2="#9cc2e5 [1940]" rotate="t" focus="100%" type="gradient"><o:fill v:ext="view" type="gradientUnscaled"/></v:fill><v:path arrowok="t"/><v:textbox inset="21.6pt,,21.6pt"><w:txbxContent><w:p w14:paraId="04A3866B" w14:textId="77777777" w:rsidR="00711569" w:rsidRDefault="00711569"/></w:txbxContent></v:textbox><w10:wrap anchorx="page" anchory="margin"/></v:rect></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r w:rsidR="00711569"><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251667456" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="4038FA82" wp14:editId="35151E3F"><wp:simplePos x="0" y="
 0"/><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionH relativeFrom="page"><wp14:pctPosHOffset>45500</wp14:pctPosHOffset></wp:positionH></mc:Choice><mc:Fallback><wp:positionH relativeFrom="page"><wp:posOffset>3536315</wp:posOffset></wp:positionH></mc:Fallback></mc:AlternateContent><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionV relativeFrom="page"><wp14:pctPosVOffset>66000</wp14:pctPosVOffset></wp:positionV></mc:Choice><mc:Fallback><wp:positionV relativeFrom="page"><wp:posOffset>6638290</wp:posOffset></wp:positionV></mc:Fallback></mc:AlternateContent><wp:extent cx="2797810" cy="268605"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:wrapSquare wrapText="bothSides"/><wp:docPr id="465" name="Text Box 465"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr txBox="1"/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:
 ext cx="2797810" cy="268605"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln w="6350"><a:noFill/></a:ln><a:effectLst/></wps:spPr><wps:txbx><w:txbxContent><w:p w14:paraId="338CAC5A" w14:textId="21AD983E" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:pStyle w:val="NoSpacing"/><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr></w:pPr><w:sdt><w:sdtPr><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr><w:alias w:val="Author"/><w:id w:val="15524260"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:creator[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:r><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr><w:t>This is the Author</w:t></w:r></w:sdtContent></w:sdt></w:p></w:txb
 xContent></wps:txbx><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="b" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:spAutoFit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>36000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="margin"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:shapetype w14:anchorId="4038FA82" id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe"><v:stroke joinstyle="miter"/><v:path gradientshapeok="t" o:connecttype="rect"/></v:shapetype><v:shape id="Text Box 465" o:spid="_x0000_s1027" type="#_x0000_t202" style="position:absolute;margin-left:0;margin-top:0;width:220.3pt;hei
 ght:21.15pt;z-index:251667456;visibility:visible;mso-wrap-style:square;mso-width-percent:360;mso-height-percent:0;mso-left-percent:455;mso-top-percent:660;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal-relative:page;mso-position-vertical-relative:page;mso-width-percent:360;mso-height-percent:0;mso-left-percent:455;mso-top-percent:660;mso-width-relative:page;mso-height-relative:margin;v-text-anchor:bottom" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFq
 wzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQDGYqwVOAIAAGoEAAAOAAAAZHJzL2Uyb0RvYy54bWysVNuO2jAQfa/Uf7D8XhIot0WEFd0VVSW0&#xA;uxKs9tk4DokUX2obEvr1PXaARds+VX1x5ubxzDkzmd+3siZHYV2lVUb7vZQSobjOK7XP6Ot29WVK&#xA;ifNM5azWSmT0JBy9X3z+NG/MTAx0qetcWIIkys0ak9HSezNLEsdLIZnraSMUnIW2knmodp/kljXI&#xA;LutkkKbjpNE2N1Zz4Rysj52TLmL+ohDcPxeFE57UGUVtPp42nrtwJos5m+0tM2XFz2Wwf6hCskrh&#xA;0WuqR+YZOdjqj1Sy4lY7Xfge1zLRRVFxEXtAN/30QzebkhkRewE4zlxhcv8vLX86vlhS5RkdjkeU&#xA;KCZB0la0nnzTLQk2INQYN0PgxiDUt3CA6YvdwRgabwsrwxctEfiB9emKb0jHYRxM7ibTPlwcvsF4&#xA;Ok5j+uT9trHOfxdakiBk1IK/CCs7rp1HJQi9hITHlF5VdR05rBVpMjr+OkrjhasHN2oVYkWchnOa&#xA;0FFXeZB8u2sjBteudjo/oVmru4Fxhq8qVLRmzr8wiwlBE5h6/4yjqDVe1meJklLbX3+zh3gQBy8l&#xA;DSYuo+7ngVlBSf1DgdK7/nAYRjQqw9FkA
 MXeena3HnWQDxpD3cd+GR7FEO/ri1hYLd+wHMvwKlxM&#xA;cbyd0d1FfPDdHmC5uFguYxCG0jC/VhvDQ+qAW8B7274xa86keND5pC+zyWYfuOliw01nlgcPhiJx&#xA;AecOVbAYFAx05PO8fGFjbvUY9f6LWPwGAAD//wMAUEsDBBQABgAIAAAAIQBTzbbv3gAAAAQBAAAP&#xA;AAAAZHJzL2Rvd25yZXYueG1sTI9PS8NAEMXvgt9hGcFLsZvEUkuaTSmCBxGh9g/0uM2OSTQ7G7Lb&#xA;NPXTd/RSL8Mb3vDeb7LFYBvRY+drRwricQQCqXCmplLBdvPyMAPhgyajG0eo4IweFvntTaZT4070&#xA;gf06lIJDyKdaQRVCm0rpiwqt9mPXIrH36TqrA69dKU2nTxxuG5lE0VRaXRM3VLrF5wqL7/XRKhgt&#xA;w/bt9T0erfb9/ml3jpPZ10+i1P3dsJyDCDiE6zH84jM65Mx0cEcyXjQK+JHwN9mbTKIpiAOL5BFk&#xA;nsn/8PkFAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAA&#xA;AFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAA&#xA;AAAAAAAvAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEAxmKsFTgCAABqBAAADgAAAAAAAAAA&#xA;AAAAAAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEAU822794AAAAEAQAADwAAAAAA&#xA;AAAAAAAAAACSBAAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAJ0FAAAAAA==&#xA;" filled="f" stroked="f" strokeweight=".5pt"><v:textbox style="mso
 -fit-shape-to-text:t"><w:txbxContent><w:p w14:paraId="338CAC5A" w14:textId="21AD983E" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:pStyle w:val="NoSpacing"/><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr></w:pPr><w:sdt><w:sdtPr><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr><w:alias w:val="Author"/><w:id w:val="15524260"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:creator[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:r><w:rPr><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/></w:rPr><w:t>This is the Author</w:t></w:r></w:sdtContent></w:sdt></w:p></w:txbxContent></v:textbox><w10:wrap type="square" anchorx="page" anchory="page"/></v:shape></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r w
 :rsidR="00711569"><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251663360" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="077DE5AF" wp14:editId="03E11211"><wp:simplePos x="0" y="0"/><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionH relativeFrom="page"><wp14:pctPosHOffset>45500</wp14:pctPosHOffset></wp:positionH></mc:Choice><mc:Fallback><wp:positionH relativeFrom="page"><wp:posOffset>3536315</wp:posOffset></wp:positionH></mc:Fallback></mc:AlternateContent><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionV relativeFrom="page"><wp14:pctPosVOffset>2500</wp14:pctPosVOffset></wp:positionV></mc:Choice><mc:Fallback><wp:positionV relativeFrom="page"><wp:posOffset>251460</wp:posOffset></wp:positionV></mc:Fallback></mc:AlternateContent><wp:extent cx="2875915" cy="3017520"/><wp:effectExtent l="0" t="0" r="0" b="0"/><w
 p:wrapNone/><wp:docPr id="467" name="Rectangle 467"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="2875915" cy="3017520"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:schemeClr val="tx2"/></a:solidFill><a:ln><a:noFill/></a:ln></wps:spPr><wps:style><a:lnRef idx="2"><a:schemeClr val="accent1"><a:shade val="50000"/></a:schemeClr></a:lnRef><a:fillRef idx="1"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="0"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></wps:style><wps:txbx><w:txbxContent><w:p w14:paraId="13682B9E" w14:textId="3ADEEABC" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:spacing w:before="240"/><w:jc w:val="center"/><w:rPr><w:color w:val="FFFFFF" w:t
 hemeColor="background1"/></w:rPr></w:pPr><w:sdt><w:sdtPr><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:alias w:val="Abstract"/><w:id w:val="8276291"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.microsoft.com/office/2006/coverPageProps'" w:xpath="/ns0:CoverPageProperties[1]/ns0:Abstract[1]" w:storeItemID="{55AF091B-3C7A-41E3-B477-F2FDAA23CFDA}"/><w:text/></w:sdtPr><w:sdtContent><w:r><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:t>This is an engaging title page</w:t></w:r></w:sdtContent></w:sdt></w:p></w:txbxContent></wps:txbx><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="182880" tIns="182880" rIns="182880" bIns="365760" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="b" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:noAutofit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:s
 izeRelH relativeFrom="page"><wp14:pctWidth>37000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="page"><wp14:pctHeight>30000</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:rect w14:anchorId="077DE5AF" id="Rectangle 467" o:spid="_x0000_s1028" style="position:absolute;margin-left:0;margin-top:0;width:226.45pt;height:237.6pt;z-index:251663360;visibility:visible;mso-wrap-style:square;mso-width-percent:370;mso-height-percent:300;mso-left-percent:455;mso-top-percent:25;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal-relative:page;mso-position-vertical-relative:page;mso-width-percent:370;mso-height-percent:300;mso-left-percent:455;mso-top-percent:25;mso-width-relative:page;mso-height-relative:page;v-text-anchor:bottom" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2
 G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQA0ER1KoAIAAJ0FAAAOAAAAZHJzL2Uyb0RvYy54bWysVMlu2zAQvRfoPxC8N5KceqkROTAcuCgQ&#xA;JEGSImeaIi0BFIclaUvu13dILW7SoIeiPtCzL08zc3Xd1oochXUV6JxmFyklQnMoKr3P6ffn7acF&#xA;Jc4zXTAFWuT0JBy9Xn38cNWYpZhACaoQlmAQ7ZaNyWnpvVkmieOlqJm7ACM0KiXYmnlk7T4pLGsw&#xA;eq2SSZrOkgZsYSxw4RxKbzolXcX4Ugru76V0whOVU6zNx9fGdxfeZHXFlnvLTFnxvgz2D
 1XUrNKY&#xA;dAx1wzwjB1v9EaquuAUH0l9wqBOQsuIi9oDdZOmbbp5KZkTsBcFxZoTJ/b+w/O74YElV5PTzbE6J&#xA;ZjV+pEeEjem9EiQIEaLGuCVaPpkH23MOydBvK20d/rET0kZYTyOsovWEo3CymE+/ZFNKOOou02w+&#xA;nUTgk7O7sc5/FVCTQOTUYgERTna8dR5ToulgErI5UFWxrZSKTJgVsVGWHBl+Zd9OQsno8cpK6WCr&#xA;IXh16iBJQmddL5HyJyWCndKPQiIsofpYSBzIcxLGudA+61QlK0SXe5rib8g+lBVriQFDZIn5x9h9&#xA;gMGyCzLE7qrs7YOriPM8Oqd/K6xzHj1iZtB+dK4rDfa9AAq76jN39gNIHTQBJd/u2jgyEegg2UFx&#xA;wjGy0O2XM3xb4Ye8Zc4/MIsLhauHR8Lf4yMVNDmFnqKkBPvzPXmwxzlHLSUNLmhO3Y8Ds4IS9U3j&#xA;BmSLyWIRVvoVZ19xu8hdzqbzGVrqQ70BnJAMT5LhkUSp9WogpYX6Be/JOmRGFdMc8+d0N5Ab350O&#xA;vEdcrNfRCPfYMH+rnwwPoQPSYVSf2xdmTT/PHlfhDoZ1Zss3Y93ZBk8N64MHWcWZPyPbfwO8AXGY&#xA;+nsVjszvfLQ6X9XVLwAAAP//AwBQSwMEFAAGAAgAAAAhAHjHifzaAAAABQEAAA8AAABkcnMvZG93&#xA;bnJldi54bWxMj0FLxEAMhe+C/2GI4KW4U6vdrrXTRQRF2JOrP2C2E9tiJ1M66W7990YvegkvvPDe&#xA;l2q7+EEdcYp9IAPXqxQUUhNcT62B97enqw2oyJacHQKhgS+MsK3PzypbunCiVzzuuVUSQrG0Bjrm&#xA;sdQ6Nh16G1dhRBLvI0zesqxTq91kTxLuB52l6Vp725M0dHbExw6bz/3sDTD2uzwUc/a8bpMXnWwo&#xA;0cWNMZcXy8M9K
 MaF/47hB1/QoRamQ5jJRTUYkEf4d4p3m2d3oA4iijwDXVf6P339DQAA//8DAFBL&#xA;AQItABQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAAAAAAAAAAAAAAAAAAABbQ29udGVudF9UeXBl&#xA;c10ueG1sUEsBAi0AFAAGAAgAAAAhADj9If/WAAAAlAEAAAsAAAAAAAAAAAAAAAAALwEAAF9yZWxz&#xA;Ly5yZWxzUEsBAi0AFAAGAAgAAAAhADQRHUqgAgAAnQUAAA4AAAAAAAAAAAAAAAAALgIAAGRycy9l&#xA;Mm9Eb2MueG1sUEsBAi0AFAAGAAgAAAAhAHjHifzaAAAABQEAAA8AAAAAAAAAAAAAAAAA+gQAAGRy&#xA;cy9kb3ducmV2LnhtbFBLBQYAAAAABAAEAPMAAAABBgAAAAA=&#xA;" fillcolor="#44546a [3215]" stroked="f" strokeweight="1pt"><v:textbox inset="14.4pt,14.4pt,14.4pt,28.8pt"><w:txbxContent><w:p w14:paraId="13682B9E" w14:textId="3ADEEABC" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:spacing w:before="240"/><w:jc w:val="center"/><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr></w:pPr><w:sdt><w:sdtPr><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:alias w:val="Abstract"/><w:id w:val="8276291"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://sc
 hemas.microsoft.com/office/2006/coverPageProps'" w:xpath="/ns0:CoverPageProperties[1]/ns0:Abstract[1]" w:storeItemID="{55AF091B-3C7A-41E3-B477-F2FDAA23CFDA}"/><w:text/></w:sdtPr><w:sdtContent><w:r><w:rPr><w:color w:val="FFFFFF" w:themeColor="background1"/></w:rPr><w:t>This is an engaging title page</w:t></w:r></w:sdtContent></w:sdt></w:p></w:txbxContent></v:textbox><w10:wrap anchorx="page" anchory="page"/></v:rect></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r w:rsidR="00711569"><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251662336" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="6C7EBF16" wp14:editId="55758F93"><wp:simplePos x="0" y="0"/><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionH relativeFrom="page"><wp14:pctPosHOffset>44000</wp14:pctPosHOffset></wp:positionH></mc:Choice><mc:Fallback><wp:positionH r
 elativeFrom="page"><wp:posOffset>3419475</wp:posOffset></wp:positionH></mc:Fallback></mc:AlternateContent><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionV relativeFrom="page"><wp14:pctPosVOffset>2500</wp14:pctPosVOffset></wp:positionV></mc:Choice><mc:Fallback><wp:positionV relativeFrom="page"><wp:posOffset>251460</wp:posOffset></wp:positionV></mc:Fallback></mc:AlternateContent><wp:extent cx="3108960" cy="7040880"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:wrapNone/><wp:docPr id="468" name="Rectangle 468"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="3108960" cy="7040880"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:schemeClr val="bg1"/></a:solidFill><a:ln w="15875"><a:solidFill><a:schemeClr val="bg2"><a:lumMod val="50000"/></a:sch
 emeClr></a:solidFill></a:ln></wps:spPr><wps:style><a:lnRef idx="2"><a:schemeClr val="accent1"><a:shade val="50000"/></a:schemeClr></a:lnRef><a:fillRef idx="1"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="0"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></wps:style><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="ctr" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:noAutofit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>40000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="page"><wp14:pctHeight>70000</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:rect w14:anchorId="04809C04" id="R
 ectangle 468" o:spid="_x0000_s1026" style="position:absolute;margin-left:0;margin-top:0;width:244.8pt;height:554.4pt;z-index:251662336;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:700;mso-left-percent:440;mso-top-percent:25;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal-relative:page;mso-position-vertical-relative:page;mso-width-percent:400;mso-height-percent:700;mso-left-percent:440;mso-top-percent:25;mso-width-relative:page;mso-height-relative:page;v-text-anchor:middle" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTt
 W7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQAdj/pWqwIAAN8FAAAOAAAAZHJzL2Uyb0RvYy54bWysVN9PGzEMfp+0/yHK+7hr10KpuKIKxDSJ&#xA;AQImntNc0jspibMk7bX76+fkflA6tEnT+pDGsf3Z/s72xeVOK7IVztdgCjo6ySkRhkNZm3VBvz/f&#xA;fJpR4gMzJVNgREH3wtPLxccPF42dizFUoErhCIIYP29sQasQ7DzLPK+EZv4ErDColOA0Cyi6dVY6&#xA;1iC6Vtk4z0+zBlxpHXDhPb5et0q6SPhSCh7upfQiEFVQzC2k06VzFc9sccHma8dsVfMuDfYPWWhW&#xA;Gww6QF2zwMjG1b9B6Zo78CDDCQedgZQ1F6kGrGaUH1XzVDErUi1IjrcDTf7/wfK77YMjdVnQySl+&#xA;KsM0fqRHpI2ZtRIkPiJFjfVztHyyD66TPF5jvTvpdPzHSsgu0bofaBW7QDg+fh7ls/NTZJ+j7iyf&#xA;5LNZIj57dbfOhy8CNImXgjpMINHJtrc+YEg07U1iNA+qLm9qpZIQe0VcKUe2DL/yaj2KKaPHGytl&#xA;SIMNOp2dT
 RPyG2Vqt0OIcbJRG/0NyhZ2muOvB+4jHofBoMrgY+SrZSjdwl6JmKkyj0Ii2chJG+Ao&#xA;LuNcmDBq86tYKf4WOgFGZIlcDNgdQJ9kC9Jjt9R09tFVpCkZnPM2+p+cB48UGUwYnHVtwL0HoLCq&#xA;LnJr35PUUhNZWkG5x1Z00M6ot/ymxma4ZT48MIdDiQ2Eiybc4yEV4MeE7kZJBe7ne+/RHmcFtZQ0&#xA;OOQF9T82zAlK1FeDU3Q+mkziVkjCZHo2RsEdalaHGrPRV4AdNsKVZnm6Rvug+qt0oF9wHy1jVFQx&#xA;wzF2QXlwvXAV2uWDG42L5TKZ4SawLNyaJ8sjeGQ1Nvvz7oU5201EwGG6g34hsPnRYLS20dPAchNA&#xA;1mlqXnnt+MYtknq223hxTR3Kyep1Ly9+AQAA//8DAFBLAwQUAAYACAAAACEAlei4fN0AAAAGAQAA&#xA;DwAAAGRycy9kb3ducmV2LnhtbEyPQWvCQBCF7wX/wzJCb3WjFIlpNiLSFnoRYoXgbc1Ok9DsbLq7&#xA;avz3nfbSXh4M7/HeN/l6tL24oA+dIwXzWQICqXamo0bB4f3lIQURoiaje0eo4IYB1sXkLteZcVcq&#xA;8bKPjeASCplW0MY4ZFKGukWrw8wNSOx9OG915NM30nh95XLby0WSLKXVHfFCqwfctlh/7s9WQXVz&#xA;fhHf7HF13FXVrpSH8uv1Wan76bh5AhFxjH9h+MFndCiY6eTOZILoFfAj8VfZe0xXSxAnDs2TNAVZ&#xA;5PI/fvENAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAA&#xA;AFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAA&#xA;AAAAAAAvAQAAX3JlbHMvLnJlbHNQSwECLQ
 AUAAYACAAAACEAHY/6VqsCAADfBQAADgAAAAAAAAAA&#xA;AAAAAAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEAlei4fN0AAAAGAQAADwAAAAAA&#xA;AAAAAAAAAAAFBQAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAA8GAAAAAA==&#xA;" fillcolor="white [3212]" strokecolor="#747070 [1614]" strokeweight="1.25pt"><w10:wrap anchorx="page" anchory="page"/></v:rect></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r w:rsidR="00711569"><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251665408" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="1A11D97D" wp14:editId="39D15725"><wp:simplePos x="0" y="0"/><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionH relativeFrom="page"><wp14:pctPosHOffset>45500</wp14:pctPosHOffset></wp:positionH></mc:Choice><mc:Fallback><wp:positionH relativeFrom="page"><wp:posOffset>3536315</wp:posOffset></wp:positionH></mc:Fallback></mc:
 AlternateContent><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionV relativeFrom="page"><wp14:pctPosVOffset>69000</wp14:pctPosVOffset></wp:positionV></mc:Choice><mc:Fallback><wp:positionV relativeFrom="page"><wp:posOffset>6939915</wp:posOffset></wp:positionV></mc:Fallback></mc:AlternateContent><wp:extent cx="2875915" cy="118745"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:wrapNone/><wp:docPr id="469" name="Rectangle 469"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="2875915" cy="118745"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:ln><a:noFill/></a:ln></wps:spPr><wps:style><a:lnRef idx="2"><a:schemeClr val="accent1"><a:shade val="50000"/></a:schemeClr></a:lnRef><a:fillRef idx="1"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="0"><a:sch
 emeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></wps:style><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="ctr" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:noAutofit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>37000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="margin"><wp14:pctHeight>0</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:rect w14:anchorId="6BEA8823" id="Rectangle 469" o:spid="_x0000_s1026" style="position:absolute;margin-left:0;margin-top:0;width:226.45pt;height:9.35pt;z-index:251665408;visibility:visible;mso-wrap-style:square;mso-width-percent:370;mso-height-percent:0;mso-left-
 percent:455;mso-top-percent:690;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal-relative:page;mso-position-vertical-relative:page;mso-width-percent:370;mso-height-percent:0;mso-left-percent:455;mso-top-percent:690;mso-width-relative:page;mso-height-relative:margin;v-text-anchor:middle" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25
 HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQD+yuLsgQIAAFUFAAAOAAAAZHJzL2Uyb0RvYy54bWysVE1v2zAMvQ/YfxB0Xx0HST+COkXQosOA&#xA;oi3aDj2rshQbkEWNUuJkv36U5LhFW+wwLAdFEslH8vlR5xe7zrCtQt+CrXh5NOFMWQl1a9cV//l0&#xA;/e2UMx+ErYUBqyq+V55fLL9+Oe/dQk2hAVMrZARi/aJ3FW9CcIui8LJRnfBH4JQlowbsRKAjrosa&#xA;RU/onSmmk8lx0QPWDkEq7+n2Khv5MuFrrWS409qrwEzFqbaQVkzrS1yL5blYrFG4ppVDGeIfquhE&#xA;aynpCHUlgmAbbD9Ada1E8KDDkYSuAK1bqVIP1E05edfNYyOcSr0QOd6NNPn/Bytvt/fI2rris+Mz&#xA;zqzo6CM9EG3Cro1i8ZIo6p1fkOeju8fh5Gkb+91p7OI/dcJ2idb9SKvaBSbpcnp6Mj8r55xJspXl&#xA;6clsHkGL12iHPnxX0LG4qThS/sSm2N74kF0PLjGZsXG1cN0ak63xpohV5rrSLuyNyt4PSlOLsZKE&#xA;msSlLg2yrSBZCCmVDWU2NaJW+Xo+od9Q5xiRqjaWACOypvwj9gAQhfsRO1c5+MdQlbQ5Bk/+VlgO&#xA;HiNSZrBhDO5aC/gZgKGuhszZ/0BSpiay9AL1ngSAkCfDO3nd0je4ET7cC6RRoKGh8Q53tGgDfcVh&#xA;2HHWAP7+7D76k0LJyllPo1Vx/2sjUHFmfljS7lk5m8VZTIfZ/GRKB3xreXlrsZvuEugzlfSQOJm
 2&#xA;0T+Yw1YjdM/0CqxiVjIJKyl3xWXAw+Ey5JGnd0Sq1Sq50fw5EW7so5MRPLIaNfa0exboBiEGkvAt&#xA;HMZQLN7pMfvGSAurTQDdJrG+8jrwTbObhDO8M/FxeHtOXq+v4fIPAAAA//8DAFBLAwQUAAYACAAA&#xA;ACEA3ymaJN0AAAAEAQAADwAAAGRycy9kb3ducmV2LnhtbEyPQUvDQBCF74L/YRnBi9jdFKtNzKaI&#xA;4EW0YPWgt212kg1mZ0N228b+ekcvenkwvMd735Sryfdij2PsAmnIZgoEUh1sR62Gt9eHyyWImAxZ&#xA;0wdCDV8YYVWdnpSmsOFAL7jfpFZwCcXCaHApDYWUsXboTZyFAYm9JozeJD7HVtrRHLjc93Ku1LX0&#xA;piNecGbAe4f152bnNTTP73SxOOaNexof84+gMrU+Zlqfn013tyASTukvDD/4jA4VM23DjmwUvQZ+&#xA;JP0qe1eLeQ5iy6HlDciqlP/hq28AAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMA&#xA;AAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YA&#xA;AACUAQAACwAAAAAAAAAAAAAAAAAvAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEA/sri7IEC&#xA;AABVBQAADgAAAAAAAAAAAAAAAAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEA3yma&#xA;JN0AAAAEAQAADwAAAAAAAAAAAAAAAADbBAAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAA&#xA;AOUFAAAAAA==&#xA;" fillcolor="#5b9bd5 [3204]" stroked="f" strokeweight="1pt"><w10:wrap anchorx="page
 " anchory="page"/></v:rect></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r w:rsidR="00711569"><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251664384" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="2F08EBE7" wp14:editId="044EBF02"><wp:simplePos x="0" y="0"/><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionH relativeFrom="page"><wp14:pctPosHOffset>45500</wp14:pctPosHOffset></wp:positionH></mc:Choice><mc:Fallback><wp:positionH relativeFrom="page"><wp:posOffset>3536315</wp:posOffset></wp:positionH></mc:Fallback></mc:AlternateContent><mc:AlternateContent><mc:Choice Requires="wp14"><wp:positionV relativeFrom="page"><wp14:pctPosVOffset>35000</wp14:pctPosVOffset></wp:positionV></mc:Choice><mc:Fallback><wp:positionV relativeFrom="page"><wp:posOffset>3520440</wp:posOffset></wp:positionV></mc:Fallback></mc:AlternateCont
 ent><wp:extent cx="2797810" cy="2475230"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:wrapSquare wrapText="bothSides"/><wp:docPr id="470" name="Text Box 470"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr txBox="1"/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="2797810" cy="2475230"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:noFill/><a:ln w="6350"><a:noFill/></a:ln><a:effectLst/></wps:spPr><wps:txbx><w:txbxContent><w:sdt><w:sdtPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="72"/></w:rPr><w:alias w:val="Title"/><w:id w:val="-958338334"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/
 core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:title[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:p w14:paraId="15B576FE" w14:textId="3B569532" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:spacing w:line="240" w:lineRule="auto"/><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="144"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="72"/></w:rPr><w:t>My Document Title</w:t></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiT
 heme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr><w:alias w:val="Subtitle"/><w:id w:val="15524255"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:subject[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:p w14:paraId="6DA2A412" w14:textId="2A9F0B12" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="40"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:c
 olor w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr><w:t>My Document Subtitle</w:t></w:r></w:p></w:sdtContent></w:sdt></w:txbxContent></wps:txbx><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="t" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:spAutoFit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="page"><wp14:pctWidth>36000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="page"><wp14:pctHeight>28000</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:shape w14:anchorId="2F08EBE7" id="Text Box 470" o:spid="_x0000_s1029" type="#_x0000_t202" style="position:absolute;margin-left:0;margin-top:0;width:220.3pt;height:194.9pt;z-index:251664384
 ;visibility:visible;mso-wrap-style:square;mso-width-percent:360;mso-height-percent:280;mso-left-percent:455;mso-top-percent:350;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal-relative:page;mso-position-vertical-relative:page;mso-width-percent:360;mso-height-percent:280;mso-left-percent:455;mso-top-percent:350;mso-width-relative:page;mso-height-relative:page;v-text-anchor:top" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHs
 DYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQCTj5HdOQIAAGsEAAAOAAAAZHJzL2Uyb0RvYy54bWysVF1v2jAUfZ+0/2D5fQQClDYiVKwV06Sq&#xA;rQRTn43jkEjxx2xDwn79jh2gqNvTtBfnfvn43nvuzfy+kw05COtqrXI6GgwpEYrrola7nP7YrL7c&#xA;UuI8UwVrtBI5PQpH7xefP81bk4lUV7ophCUAUS5rTU4r702WJI5XQjI30EYoOEttJfNQ7S4pLGuB&#xA;LpskHQ5vklbbwljNhXOwPvZOuoj4ZSm4fylLJzxpcorcfDxtPLfhTBZzlu0sM1XNT2mwf8hCslrh&#xA;0QvUI/OM7G39B5SsudVOl37AtUx0WdZcxBpQzWj4oZp1xYyItaA5zlza5P4fLH8+vFpSFzmdzNAf&#xA;xSRI2ojOk6+6I8GGDrXGZQhcG4T6Dg4wfbY7GEPhXWll+KIkAj+wjpf+BjgOYzq7m92O4OLwpZPZ&#xA;NB1H/OT9urHOfxNakiDk1ILA2Fd2eHIeqSD0HBJeU3pVN00ksVGkzenNeDqMFy4e3GhUiBVxHE4w&#xA;oaQ+9SD5btvFJozPZW11cUS1VvcT4wxf1cjoiTn/yixGBFVg7P0LjrLReFmfJEoqbX/9zR7iwRy8&#xA;lLQYuZy6n3tmBSXNdwVO70aTCWB9VCbTWQrFXnu21x61lw8aUz3CghkexRDvm7N
 YWi3fsB3L8Cpc&#xA;THG8nVN/Fh98vwjYLi6WyxiEqTTMP6m14QE69C30e9O9MWtOpHjw+azPw8myD9z0seGmM8u9B0OR&#xA;uNDnvqtgMSiY6MjnafvCylzrMer9H7H4DQAA//8DAFBLAwQUAAYACAAAACEAeUQr7toAAAAFAQAA&#xA;DwAAAGRycy9kb3ducmV2LnhtbEyPwU7DMBBE70j8g7VI3KgDVFGaxqkQKhwrkQLnbbx1AvE62G4b&#xA;/h7DpVxWGs1o5m21muwgjuRD71jB7SwDQdw63bNR8Lp9uilAhIiscXBMCr4pwKq+vKiw1O7EL3Rs&#xA;ohGphEOJCroYx1LK0HZkMczcSJy8vfMWY5LeSO3xlMrtIO+yLJcWe04LHY702FH72Rysgjf7/pU/&#xA;Fxsjt+aj2W/WYe05KHV9NT0sQUSa4jkMv/gJHerEtHMH1kEMCtIj8e8mbz7PchA7BffFogBZV/I/&#xA;ff0DAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAAAFtD&#xA;b250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAAAAAA&#xA;AAAvAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEAk4+R3TkCAABrBAAADgAAAAAAAAAAAAAA&#xA;AAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEAeUQr7toAAAAFAQAADwAAAAAAAAAA&#xA;AAAAAACTBAAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAJoFAAAAAA==&#xA;" filled="f" stroked="f" strokeweight=".5pt"><v:textbox style="mso-fit-shape-to-text:t"><w:txbxConte
 nt><w:sdt><w:sdtPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="72"/></w:rPr><w:alias w:val="Title"/><w:id w:val="-958338334"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:title[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:p w14:paraId="15B576FE" w14:textId="3B569532" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP="00711569"><w:pPr><w:spacing w:line="240" w:lineRule="auto"/><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="144"/></w:rPr></w:pP
 r><w:r><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="5B9BD5" w:themeColor="accent1"/><w:sz w:val="72"/><w:szCs w:val="72"/></w:rPr><w:t>My Document Title</w:t></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr><w:alias w:val="Subtitle"/><w:id w:val="15524255"/><w:dataBinding w:prefixMappings="xmlns:ns0='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:ns1='http://purl.org/dc/elements/1.1/'" w:xpath="/ns0:coreProperties[1]/ns1:subject[1]" w:storeItemID="{6C3C8BC8-F283-45AE-878A-BAB7291924A1}"/><w:text/></w:sdtPr><w:sdtContent><w:p w14:paraId="6DA2A412" w14:textId="2A9F0B12" w:rsidR="00711569" w:rsidRDefault="00711569" w:rsidP=
 "00711569"><w:pPr><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="40"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:asciiTheme="majorHAnsi" w:eastAsiaTheme="majorEastAsia" w:hAnsiTheme="majorHAnsi" w:cstheme="majorBidi"/><w:noProof/><w:color w:val="44546A" w:themeColor="text2"/><w:sz w:val="32"/><w:szCs w:val="32"/></w:rPr><w:t>My Document Subtitle</w:t></w:r></w:p></w:sdtContent></w:sdt></w:txbxContent></v:textbox><w10:wrap type="square" anchorx="page" anchory="page"/></v:shape></w:pict></mc:Fallback></mc:AlternateContent></w:r></w:p><w:p w14:paraId="19497EA8" w14:textId="253CF686" w:rsidR="00711569" w:rsidRDefault="00711569"><w:r><w:br w:type="page"/></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:id w:val="-927495122"/><w:docPartObj><w:docPartGallery w:val="Table of Contents"/><w:docPartUnique/></w:docPartObj></w:s
 dtPr><w:sdtEndPr><w:rPr><w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorEastAsia" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/><w:b/><w:bCs/><w:noProof/><w:color w:val="auto"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:eastAsia="zh-TW"/></w:rPr></w:sdtEndPr><w:sdtContent><w:p w14:paraId="7CE430A1" w14:textId="013188DE" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:pPr><w:pStyle w:val="TOCHeading"/></w:pPr><w:r><w:t>Contents</w:t></w:r></w:p><w:p w14:paraId="36F4886F" w14:textId="64DE0044" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:pPr><w:pStyle w:val="TOC1"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:rPr><w:noProof/></w:rPr></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve"> TOC \o "1-3" \h \z \u </w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r><w:hyperlink w:anchor="_Toc467647605" w:history="1"><w:r w:rsidRPr="00454652"><w:rPr><w:rStyle w:val="Hyperlink"/><w:noProof/></w
 :rPr><w:t>Heading1</w:t></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:instrText xml:space="preserve"> PAGEREF _Toc467647605 \h </w:instrText></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:t>3</w:t></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="end"/></w:r></w:hyperlink></w:p><w:p w14:paraId="5E22E210" w14:textId="13004ED8" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:pPr><w:pStyle w:val="TOC1"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:rPr><w:noProof/></w:rPr></w:pPr><w:hyperlink w:anchor="_Toc467647606" w:history="1"><w:r w:rsidRPr="00454652"><w:rPr><w:rStyle w:val="Hyperlink"/><w:noProof/></w:rPr><w:t>Heading2</w:t></w:r>
 <w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:instrText xml:space="preserve"> PAGEREF _Toc467647606 \h </w:instrText></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:t>3</w:t></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="end"/></w:r></w:hyperlink></w:p><w:p w14:paraId="592A970F" w14:textId="0DDD6327" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:r><w:rPr><w:b/><w:bCs/><w:noProof/></w:rPr><w:fldChar w:fldCharType="end"/></w:r></w:p></w:sdtContent></w:sdt><w:p w14:paraId="3C74C203" w14:textId="3917CDC3" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:pPr><w:pStyle w:val="TableofFigures"/><w:tabs><w:tab w:val="right" w:leader="dot" w:pos="9350"/></w:tabs><w:rPr>
 <w:noProof/></w:rPr></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:instrText xml:space="preserve"> TOC \h \z \c "Table" </w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r><w:hyperlink w:anchor="_Toc467647797" w:history="1"><w:r w:rsidRPr="00212BB5"><w:rPr><w:rStyle w:val="Hyperlink"/><w:noProof/></w:rPr><w:t>Table 1: Table1 Caption</w:t></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:instrText xml:space="preserve"> PAGEREF _Toc467647797 \h </w:instrText></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:t>2</w:t></w:r><w:r><w:rPr><w:noProof/><w:webHidden/></w:rPr><w:fldChar w:fldCharType="end"/></w:r></w:hyperlink></w:p><w:p w14:paraId="4AC97A41" w14:textId="6
 13D7C18" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p><w:p w14:paraId="0ECE95CA" w14:textId="4EEA8BDC" w:rsidR="0049479F" w:rsidRDefault="0049479F"/><w:p w14:paraId="4836E461" w14:textId="77777777" w:rsidR="0049479F" w:rsidRDefault="0049479F"/><w:p w14:paraId="54EF84BF" w14:textId="2E63DD8B" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:r><w:br w:type="page"/></w:r></w:p><w:p w14:paraId="48EC6F4D" w14:textId="3176C161" w:rsidR="0049479F" w:rsidRDefault="0049479F"/><w:p w14:paraId="33E56900" w14:textId="77777777" w:rsidR="0049479F" w:rsidRDefault="0049479F"><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p><w:p w14:paraId="7F7144D9" w14:textId="4BC4B8BA" w:rsidR="006B1ECB" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t xml:space="preserve">The </w:t></w:r><w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>quick</w:t></w:r><w:r><w:t xml:space="preserve"> brown </w:t></w:r><w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t xml
 :space="preserve">fox </w:t></w:r><w:r><w:t>j</w:t></w:r><w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>um</w:t></w:r><w:r><w:rPr><w:b/><w:bCs/><w:i/><w:iCs/></w:rPr><w:t>ped</w:t></w:r><w:r><w:t xml:space="preserve"> over the lazy brown </w:t></w:r><w:ins w:id="1" w:author="Allison, Timothy B." w:date="2016-11-22T13:45:00Z"><w:r><w:t>dog</w:t></w:r></w:ins><w:del w:id="2" w:author="Allison, Timothy B." w:date="2016-11-22T13:45:00Z"><w:r w:rsidDel="00814CC8"><w:delText>frog</w:delText></w:r></w:del><w:r><w:t>.</w:t></w:r></w:p><w:p w14:paraId="376B3823" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:pPr><w:pStyle w:val="ListParagraph"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr></w:pPr><w:r><w:t>this is a basic list 1.</w:t></w:r></w:p><w:p w14:paraId="27556192" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:pPr><w:pStyle w:val="ListParagraph"/><w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/><
 /w:numPr></w:pPr><w:r><w:t xml:space="preserve">Really basic </w:t></w:r><w:commentRangeStart w:id="3"/><w:r><w:t>2</w:t></w:r><w:commentRangeEnd w:id="3"/><w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:commentReference w:id="3"/></w:r><w:r><w:t>.</w:t></w:r></w:p><w:p w14:paraId="118CE320" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:p w14:paraId="64F2083B" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requires="wps"><w:drawing><wp:anchor distT="45720" distB="45720" distL="114300" distR="114300" simplePos="0" relativeHeight="251659264" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="43BED150" wp14:editId="0A70AFC0"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="column"><wp:align>center</wp:align></wp:positionH><wp:positionV relativeFrom="paragraph"><wp:posOffset>182880</wp:posOffset></wp:po
 sitionV><wp:extent cx="2360930" cy="1404620"/><wp:effectExtent l="0" t="0" r="22860" b="11430"/><wp:wrapSquare wrapText="bothSides"/><wp:docPr id="217" name="Text Box 2"/><wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr txBox="1"><a:spLocks noChangeArrowheads="1"/></wps:cNvSpPr><wps:spPr bwMode="auto"><a:xfrm><a:off x="0" y="0"/><a:ext cx="2360930" cy="1404620"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:srgbClr val="FFFFFF"/></a:solidFill><a:ln w="9525"><a:solidFill><a:srgbClr val="000000"/></a:solidFill><a:miter lim="800000"/><a:headEnd/><a:tailEnd/></a:ln></wps:spPr><wps:txbx><w:txbxContent><w:p w14:paraId="56615764" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP
 ="00814CC8"><w:r><w:t>This is a text box</w:t></w:r></w:p></w:txbxContent></wps:txbx><wps:bodyPr rot="0" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" anchor="t" anchorCtr="0"><a:spAutoFit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic><wp14:sizeRelH relativeFrom="margin"><wp14:pctWidth>40000</wp14:pctWidth></wp14:sizeRelH><wp14:sizeRelV relativeFrom="margin"><wp14:pctHeight>20000</wp14:pctHeight></wp14:sizeRelV></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:shape w14:anchorId="43BED150" id="Text Box 2" o:spid="_x0000_s1030" type="#_x0000_t202" style="position:absolute;margin-left:0;margin-top:14.4pt;width:185.9pt;height:110.6pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:200;mso-wrap-distance-left:9pt;mso-wrap-distance-top:3.6pt;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:3.6pt;mso-position-horizontal:center;mso-position-horizontal-relative:text;mso-position-vertical:a
 bsolute;mso-position-vertical-relative:text;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:top" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA&#xA;IQAcbA6VKQIAAE4
 EAAAOAAAAZHJzL2Uyb0RvYy54bWysVNtu2zAMfR+wfxD0vvhSJ22MOEWXLsOA&#xA;7gK0+wBalmNhsqRJSuzu60fJSRZ028swPwiiSB2R55Be3Y69JAdundCqotkspYQrphuhdhX9+rR9&#xA;c0OJ86AakFrxij5zR2/Xr1+tBlPyXHdaNtwSBFGuHExFO+9NmSSOdbwHN9OGK3S22vbg0bS7pLEw&#xA;IHovkzxNF8mgbWOsZtw5PL2fnHQd8duWM/+5bR33RFYUc/NxtXGtw5qsV1DuLJhOsGMa8A9Z9CAU&#xA;PnqGugcPZG/Fb1C9YFY73foZ032i21YwHmvAarL0RTWPHRgea0FynDnT5P4fLPt0+GKJaCqaZ9eU&#xA;KOhRpCc+evJWjyQP/AzGlRj2aDDQj3iMOsdanXnQ7JsjSm86UDt+Z60eOg4N5peFm8nF1QnHBZB6&#xA;+KgbfAb2XkegsbV9IA/pIIiOOj2ftQmpMDzMrxbp8gpdDH1ZkRaLPKqXQHm6bqzz77nuSdhU1KL4&#xA;ER4OD86HdKA8hYTXnJai2Qopo2F39UZacgBslG38YgUvwqQiQ0WX83w+MfBXiDR+f4LohceOl6Kv&#xA;6M05CMrA2zvVxH70IOS0x5SlOhIZuJtY9GM9Rs2Kkz61bp6RWaunBseBxE2n7Q9KBmzuirrve7Cc&#xA;EvlBoTrLrCjCNESjmF8jlcReeupLDyiGUBX1lEzbjY8TFHkzd6jiVkR+g9xTJseUsWkj7ccBC1Nx&#xA;aceoX7+B9U8AAAD//wMAUEsDBBQABgAIAAAAIQBIWydy2wAAAAcBAAAPAAAAZHJzL2Rvd25yZXYu&#xA;eG1sTI9BT8MwDIXvSPyHyEjcWLICYypNp6mC66RtSFy9JrSFxClN2pV/jzmxm5+f9d7nYjN7JyY7&#xA;xC6QhuVCgbBUB9NRo+Ht+Hq3BhETkkEXyGr4sRE2
 5fVVgbkJZ9rb6ZAawSEUc9TQptTnUsa6tR7j&#xA;IvSW2PsIg8fEcmikGfDM4d7JTKmV9NgRN7TY26q19ddh9BrGY7Wd9lX2+T7tzMNu9YIe3bfWtzfz&#xA;9hlEsnP6P4Y/fEaHkplOYSQThdPAjyQN2Zr52b1/WvJw4sWjUiDLQl7yl78AAAD//wMAUEsBAi0A&#xA;FAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54&#xA;bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAAAAAAAAAvAQAAX3JlbHMvLnJl&#xA;bHNQSwECLQAUAAYACAAAACEAHGwOlSkCAABOBAAADgAAAAAAAAAAAAAAAAAuAgAAZHJzL2Uyb0Rv&#xA;Yy54bWxQSwECLQAUAAYACAAAACEASFsnctsAAAAHAQAADwAAAAAAAAAAAAAAAACDBAAAZHJzL2Rv&#xA;d25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAIsFAAAAAA==&#xA;"><v:textbox style="mso-fit-shape-to-text:t"><w:txbxContent><w:p w14:paraId="56615764" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t>This is a text box</w:t></w:r></w:p></w:txbxContent></v:textbox><w10:wrap type="square"/></v:shape></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r><w:t>This should have a footnote</w:t></w:r><w:r><w:rPr><w:rStyle w:val="FootnoteRe
 ference"/></w:rPr><w:footnoteReference w:id="1"/></w:r></w:p><w:p w14:paraId="3432B5D2" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:p w14:paraId="385F1ACB" w14:textId="77777777" w:rsidR="00565706" w:rsidRDefault="00565706" w:rsidP="00565706"/><w:p w14:paraId="187612D5" w14:textId="68D40D35" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00565706"><w:r><w:t xml:space="preserve">This is a hyperlink: </w:t></w:r><w:hyperlink r:id="rId11" w:history="1"><w:proofErr w:type="spellStart"/><w:r w:rsidR="00565706" w:rsidRPr="00565706"><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr><w:t>tika</w:t></w:r><w:proofErr w:type="spellEnd"/></w:hyperlink></w:p><w:p w14:paraId="2A0B8B96" w14:textId="0EBDF598" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="00565706"><w:r><w:t xml:space="preserve">This is a link to a local file: </w:t></w:r><w:hyperlink r:id="rId12" w:history="1"><w:r w:rsidRPr="0049479F"><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr
 ><w:t>test.png</w:t></w:r></w:hyperlink></w:p><w:p w14:paraId="72CE58C8" w14:textId="77777777" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="00565706"/><w:p w14:paraId="45360452" w14:textId="1A9054D0" w:rsidR="00565706" w:rsidRDefault="00565706" w:rsidP="00565706"><w:r><w:t>This is          10 spaces</w:t></w:r></w:p><w:p w14:paraId="04BD2B2E" w14:textId="2CE83448" w:rsidR="00814CC8" w:rsidRDefault="0049479F" w:rsidP="00814CC8"><w:r><w:rPr><w:noProof/></w:rPr><w:drawing><wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="12803AD4" wp14:editId="1E83955D"><wp:extent cx="5486400" cy="3200400"/><wp:effectExtent l="0" t="0" r="0" b="0"/><wp:docPr id="3" name="Chart 3"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart"><c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocum
 ent/2006/relationships" r:id="rId13"/></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p><w:p w14:paraId="632A7616" w14:textId="6F011237" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="00814CC8"/><w:p w14:paraId="1724BB39" w14:textId="772F3B44" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="00814CC8"/><w:p w14:paraId="6A019D6E" w14:textId="30DB363E" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="00814CC8"/><w:p w14:paraId="4DD41676" w14:textId="6C7EEA9B" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="0049479F"><w:pPr><w:pStyle w:val="Caption"/><w:keepNext/></w:pPr><w:bookmarkStart w:id="4" w:name="_Toc467647797"/><w:r><w:lastRenderedPageBreak/><w:t xml:space="preserve">Table </w:t></w:r><w:fldSimple w:instr=" SEQ Table \* ARABIC "><w:r><w:rPr><w:noProof/></w:rPr><w:t>1</w:t></w:r></w:fldSimple><w:r><w:t>: Table1 Caption</w:t></w:r><w:bookmarkEnd w:id="4"/></w:p><w:tbl><w:tblPr><w:tblStyle w:val="TableGrid"/><w:tblW w:w="0" w:type="auto"/><w:t
 blLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/></w:tblPr><w:tblGrid><w:gridCol w:w="3116"/><w:gridCol w:w="3117"/><w:gridCol w:w="3117"/></w:tblGrid><w:tr w:rsidR="00814CC8" w14:paraId="788CDAED" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="3116" w:type="dxa"/></w:tcPr><w:p w14:paraId="682E4738" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t>R1c1</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="526F226F" w14:textId="1CF7A91D" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t>R1c2</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="0C88D62B" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t>R1c3</w:t></w:r></w:p></w:tc></w:tr><w:tr w:rsidR="00814CC8" w14:paraId="1E237BC8" w14:textId="777777
 77" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="3116" w:type="dxa"/></w:tcPr><w:p w14:paraId="4EB7B5DA" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="78C83A7E" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="3478ECDC" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr><w:tr w:rsidR="00814CC8" w14:paraId="347A9757" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="3116" w:type="dxa"/></w:tcPr><w:p w14:paraId="5250628D" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="70E18C38" w14:textId="34C3624D" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:
 tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="17CD27BF" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr><w:tr w:rsidR="00814CC8" w14:paraId="68F3C5E3" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="3116" w:type="dxa"/></w:tcPr><w:p w14:paraId="5E0CACFC" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:tbl><w:tblPr><w:tblStyle w:val="TableGrid"/><w:tblW w:w="0" w:type="auto"/><w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/></w:tblPr><w:tblGrid><w:gridCol w:w="1181"/><w:gridCol w:w="570"/><w:gridCol w:w="570"/><w:gridCol w:w="570"/></w:tblGrid><w:tr w:rsidR="00814CC8" w14:paraId="496D177E" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="722" w:type="dxa"/></w:tcPr><w:p w14:paraId="27552B38" w14:
 textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:t>Embedded table r1c1</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="0967DDDC" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="70B70494" w14:textId="33BA09EE" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="3837A2CB" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr><w:tr w:rsidR="00814CC8" w14:paraId="6BAA8ADD" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="722" w:type="dxa"/></w:tcPr><w:p w14:paraId="792B1D21" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:pa
 raId="06096B76" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="326C33B5" w14:textId="72FA82E1" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="7C08762D" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr><w:tr w:rsidR="00814CC8" w14:paraId="55C3E931" w14:textId="77777777" w:rsidTr="00814CC8"><w:tc><w:tcPr><w:tcW w:w="722" w:type="dxa"/></w:tcPr><w:p w14:paraId="089E3D7E" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="39A9D255" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="42F6CC43" w14:textId
 ="6674C8C0" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="723" w:type="dxa"/></w:tcPr><w:p w14:paraId="110707D3" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr></w:tbl><w:p w14:paraId="57D5D7D6" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc><w:tc><w:tcPr><w:tcW w:w="3117" w:type="dxa"/></w:tcPr><w:p w14:paraId="41C6212E" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/></w:tc></w:tr></w:tbl><w:p w14:paraId="6AFB900C" w14:textId="0FCE6CA9" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:p w14:paraId="4FD1FC7E" w14:textId="5588F66C" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:p w14:paraId="45D04969" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"><w:r><w:rPr><w:noProof/></w:rPr><mc:AlternateContent><mc:Choice Requir
 es="wps"><w:drawing><wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251660288" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1" wp14:anchorId="20130961" wp14:editId="155BA3A9"><wp:simplePos x="0" y="0"/><wp:positionH relativeFrom="column"><wp:posOffset>3787140</wp:posOffset></wp:positionH><wp:positionV relativeFrom="paragraph"><wp:posOffset>189230</wp:posOffset></wp:positionV><wp:extent cx="1676400" cy="990600"/><wp:effectExtent l="0" t="0" r="19050" b="19050"/><wp:wrapNone/><wp:docPr id="2" name="Text Box 2"/><wp:cNvGraphicFramePr/><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"><wps:wsp><wps:cNvSpPr txBox="1"/><wps:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="1676400" cy="990600"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom><a:solidFill><a:schemeClr val="lt1"/></a:solidFill><a:ln w="6350"><a:solidFill><a:p
 rstClr val="black"/></a:solidFill></a:ln></wps:spPr><wps:txbx><w:txbxContent><w:p w14:paraId="3159B0BD" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8"><w:r><w:t>This is text within a shape</w:t></w:r></w:p></w:txbxContent></wps:txbx><wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="t" anchorCtr="0" forceAA="0" compatLnSpc="1"><a:prstTxWarp prst="textNoShape"><a:avLst/></a:prstTxWarp><a:noAutofit/></wps:bodyPr></wps:wsp></a:graphicData></a:graphic></wp:anchor></w:drawing></mc:Choice><mc:Fallback><w:pict><v:shape w14:anchorId="20130961" id="_x0000_s1031" type="#_x0000_t202" style="position:absolute;margin-left:298.2pt;margin-top:14.9pt;width:132pt;height:78pt;z-index:251660288;visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt
 ;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:top" o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF&#xA;90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA&#xA;0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD&#xA;OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893&#xA;SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y&#xA;JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl&#xA;bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR&#xA;JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY&#xA;22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i&#xA;OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAI
 AAAA&#xA;IQAlGwpzTgIAAKgEAAAOAAAAZHJzL2Uyb0RvYy54bWysVFFv2jAQfp+0/2D5fSQwoAURKkbFNKlq&#xA;K8HUZ+PYJJrj82xDwn79zk5CabenaS/O2ff58913d1ncNZUiJ2FdCTqjw0FKidAc8lIfMvp9t/l0&#xA;S4nzTOdMgRYZPQtH75YfPyxqMxcjKEDlwhIk0W5em4wW3pt5kjheiIq5ARih0SnBVszj1h6S3LIa&#xA;2SuVjNJ0mtRgc2OBC+fw9L510mXkl1Jw/ySlE56ojGJsPq42rvuwJssFmx8sM0XJuzDYP0RRsVLj&#xA;oxeqe+YZOdryD6qq5BYcSD/gUCUgZclFzAGzGabvstkWzIiYC4rjzEUm9/9o+ePp2ZIyz+iIEs0q&#xA;LNFONJ58gYaMgjq1cXMEbQ3CfIPHWOX+3OFhSLqRtgpfTIegH3U+X7QNZDxcmt5Mxym6OPpms3SK&#xA;NtInr7eNdf6rgIoEI6MWaxclZacH51toDwmPOVBlvimVipvQL2KtLDkxrLTyMUYkf4NSmtQZnX6e&#xA;pJH4jS9QX+7vFeM/uvCuUMinNMYcNGlzD5Zv9k1UcNLrsof8jHJZaNvNGb4pkf6BOf/MLPYXyoAz&#xA;459wkQowJugsSgqwv/52HvBYdvRSUmO/ZtT9PDIrKFHfNDbEbDgehwaPm/HkZoQbe+3ZX3v0sVoD&#xA;CjXE6TQ8mgHvVW9KC9ULjtYqvIoupjm+nVHfm2vfThGOJherVQRhSxvmH/TW8EAdChNk3TUvzJqu&#xA;rB4b4hH6zmbzd9VtseGmhtXRgyxj6YPOraqd/DgOsXm60Q3zdr2PqNcfzPI3AAAA//8DAFBLAwQU&#xA;AAYACAAAACEAR9/lXtwAAAAKAQAADwAAAGRycy9kb3ducmV2LnhtbEyPwU7DMAyG70i8Q2Qkbixl&#xA;YlVamk6ABhdODMQ5
 a7IkonGqJOvK22NOcLT96ff3d9sljGw2KfuIEm5XFTCDQ9QerYSP9+cbASwX&#xA;hVqNEY2Eb5Nh219edKrV8YxvZt4XyygEc6skuFKmlvM8OBNUXsXJIN2OMQVVaEyW66TOFB5Gvq6q&#xA;mgflkT44NZknZ4av/SlI2D3axg5CJbcT2vt5+Ty+2hcpr6+Wh3tgxSzlD4ZffVKHnpwO8YQ6s1HC&#xA;pqnvCJWwbqgCAaKuaHEgUmwE8L7j/yv0PwAAAP//AwBQSwECLQAUAAYACAAAACEAtoM4kv4AAADh&#xA;AQAAEwAAAAAAAAAAAAAAAAAAAAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQItABQABgAIAAAAIQA4&#xA;/SH/1gAAAJQBAAALAAAAAAAAAAAAAAAAAC8BAABfcmVscy8ucmVsc1BLAQItABQABgAIAAAAIQAl&#xA;GwpzTgIAAKgEAAAOAAAAAAAAAAAAAAAAAC4CAABkcnMvZTJvRG9jLnhtbFBLAQItABQABgAIAAAA&#xA;IQBH3+Ve3AAAAAoBAAAPAAAAAAAAAAAAAAAAAKgEAABkcnMvZG93bnJldi54bWxQSwUGAAAAAAQA&#xA;BADzAAAAsQUAAAAA&#xA;" fillcolor="white [3201]" strokeweight=".5pt"><v:textbox><w:txbxContent><w:p w14:paraId="3159B0BD" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8"><w:r><w:t>This is text within a shape</w:t></w:r></w:p></w:txbxContent></v:textbox></v:shape></w:pict></mc:Fallback></mc:AlternateContent></w:r><w:r><w:object w:dxaOrig="1740" w
 :dyaOrig="823" w14:anchorId="77A24091"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><v:shape id="_x0000_i1037" type="#_x0000_t75" style="width:87pt;height:41.1pt" o:ole=""><v:imagedata r:id="rId14" o:title=""/></v:shape><o:OLEObject Type="Embed" ProgID="Package" ShapeID="_x0000_i1037" DrawAspect="Content" ObjectID="_1541390034" r:id="rId15"/></w:object></w:r><w:r>
 <w:rPr><w:noProof/></w:rPr><w:drawing><wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="2693E108" wp14:editId="122CA82E"><wp:extent cx="1767840" cy="1321591"/><wp:effectExtent l="0" t="0" r="3810" b="0"/><wp:docPr id="1" name="Picture 1"/><wp:cNvGraphicFramePr><a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1"/></wp:cNvGraphicFramePr><a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"><pic:nvPicPr><pic:cNvPr id="1" name="testJPEG_commented.jpg"/><pic:cNvPicPr/></pic:nvPicPr><pic:blipFill><a:blip r:embed="rId16"><a:extLst><a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"><a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0"/></a:ext></a:extLst></a:blip><a:stretch><a:fillRect/></a:stretch></pic:blipFill
 ><pic:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="1792893" cy="1340320"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r></w:p><w:p w14:paraId="629D209A" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:p w14:paraId="40F89D85" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRPr="00814CC8" w:rsidRDefault="00BF1B94" w:rsidP="00814CC8"><m:oMathPara><m:oMath><m:f><m:fPr><m:ctrlPr><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/><w:i/></w:rPr></m:ctrlPr></m:fPr><m:num><m:r><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>3</m:t></m:r></m:num><m:den><m:r><w:rPr><w:rFonts w:ascii="Cambria Math" w:hAnsi="Cambria Math"/></w:rPr><m:t>4</m:t></m:r></m:den></m:f></m:oMath></m:oMathPara></w:p><w:p w14:paraId="1CBFCE89" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="00814CC8" w:rsidP="00814CC8"/><w:sdt><w:sdtPr><w:id w:
 val="2018969565"/><w:placeholder><w:docPart w:val="DefaultPlaceholder_-1854013440"/></w:placeholder></w:sdtPr><w:sdtEndPr/><w:sdtContent><w:p w14:paraId="056321BC" w14:textId="77777777" w:rsidR="00814CC8" w:rsidRDefault="008D093B" w:rsidP="008D093B"><w:r><w:t>Rich text content control</w:t></w:r></w:p></w:sdtContent></w:sdt><w:p w14:paraId="4711D31B" w14:textId="77777777" w:rsidR="008D093B" w:rsidRDefault="008D093B" w:rsidP="008D093B"/><w:sdt><w:sdtPr><w:id w:val="63389495"/><w:placeholder><w:docPart w:val="DefaultPlaceholder_-1854013440"/></w:placeholder><w:text/></w:sdtPr><w:sdtEndPr/><w:sdtContent><w:p w14:paraId="11DC9A4A" w14:textId="392143FC" w:rsidR="008D093B" w:rsidRDefault="008D093B" w:rsidP="008D093B"><w:r><w:t>Simple text content control</w:t></w:r></w:p></w:sdtContent></w:sdt><w:p w14:paraId="4C39EC71" w14:textId="65309958" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:sdt><w:sdtPr><w:id w:val="-1040121459"/><w15:repeatingSection/></w:sdtPr><w:sdtCo
 ntent><w:sdt><w:sdtPr><w:id w:val="1779676866"/><w:placeholder><w:docPart w:val="DefaultPlaceholder_-1854013436"/></w:placeholder><w15:repeatingSectionItem/></w:sdtPr><w:sdtContent><w:p w14:paraId="1477AD32" w14:textId="214E32E5" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:r><w:t>Repeating content</w:t></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:id w:val="1651629823"/><w:placeholder><w:docPart w:val="FE0C30F9E67D4EE9A0DDD467396DA574"/></w:placeholder><w15:repeatingSectionItem/></w:sdtPr><w:sdtContent><w:p w14:paraId="1A2F730E" w14:textId="64A32FA4" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:r><w:t>Repeating content</w:t></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:id w:val="1769044590"/><w:placeholder><w:docPart w:val="2C5C5F75ACA34E72AEDAA4410EBB7125"/></w:placeholder><w15:repeatingSectionItem/></w:sdtPr><w:sdtContent><w:p w14:paraId="12E21112" w14:textId="4D83CF08" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsid
 P="00670AA1"><w:r><w:t>Repeating content</w:t></w:r></w:p></w:sdtContent></w:sdt><w:sdt><w:sdtPr><w:id w:val="587659077"/><w:placeholder><w:docPart w:val="BC889040C4B84F3D943433D5A37B6047"/></w:placeholder><w15:repeatingSectionItem/></w:sdtPr><w:sdtContent><w:p w14:paraId="41E5B962" w14:textId="24D1D7BD" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:r><w:t>Repeating content</w:t></w:r></w:p></w:sdtContent></w:sdt></w:sdtContent></w:sdt><w:p w14:paraId="29F07071" w14:textId="77777777" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:sdt><w:sdtPr><w:alias w:val="DropDownTitle"/><w:tag w:val="DropDownTag"/><w:id w:val="960615370"/><w:placeholder><w:docPart w:val="C5ED39B2DD8646A782AFAF595D16F926"/></w:placeholder><w:showingPlcHdr/><w:comboBox><w:listItem w:value="Choose an item."/><w:listItem w:displayText="DropdownOption1" w:value="DropdownValue1"/><w:listItem w:displayText="DropDownOption2" w:value="DropDownValue2"/></w:comboBox></w:sdtPr><w:sd
 tContent><w:p w14:paraId="6139D3B9" w14:textId="7ACA0131" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:r><w:rPr><w:rStyle w:val="PlaceholderText"/></w:rPr><w:t>Drop down1</w:t></w:r></w:p></w:sdtContent></w:sdt><w:p w14:paraId="74C59944" w14:textId="360252E0" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:sdt><w:sdtPr><w:id w:val="-1177260324"/><w:placeholder><w:docPart w:val="DefaultPlaceholder_-1854013438"/></w:placeholder><w:date w:fullDate="2016-11-16T00:00:00Z"><w:dateFormat w:val="M/d/yyyy"/><w:lid w:val="en-US"/><w:storeMappedDataAs w:val="dateTime"/><w:calendar w:val="gregorian"/></w:date></w:sdtPr><w:sdtContent><w:p w14:paraId="12323345" w14:textId="5AFB1EA8" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"><w:r><w:t>11/16/2016</w:t></w:r></w:p></w:sdtContent></w:sdt><w:p w14:paraId="6ED3EEF7" w14:textId="2F08A289" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="79502786" w14:textId=
 "77777777" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="5717B670" w14:textId="027C473D" w:rsidR="008D093B" w:rsidRDefault="00D72479" w:rsidP="008D093B"><w:r><w:t xml:space="preserve">This </w:t></w:r><w:r><w:tab/><w:t xml:space="preserve">is </w:t></w:r><w:r><w:tab/><w:t xml:space="preserve">tabbed </w:t></w:r><w:r><w:tab/><w:t>tab</w:t></w:r><w:r><w:tab/></w:r><w:proofErr w:type="spellStart"/><w:r><w:t>tab</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p><w:p w14:paraId="5D8D6093" w14:textId="77777777" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="008D093B"/><w:p w14:paraId="60F02B20" w14:textId="6079CEB9" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="14166FB6" w14:textId="3BC850CA" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="0ED02DA7" w14:textId="53F769DD" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:pStyle w:val="Heading1"/></w:pPr><w:
 bookmarkStart w:id="5" w:name="_Toc467647605"/><w:r><w:t>Heading1</w:t></w:r><w:bookmarkEnd w:id="5"/></w:p><w:p w14:paraId="55A5225E" w14:textId="3A019CF9" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="6" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="7" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:delText>Deleted paragraph1</w:delText></w:r></w:del></w:p><w:tbl><w:tblPr><w:tblStyle w:val="TableGrid"/><w:tblW w:w="0" w:type="auto"/><w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/></w:tblPr><w:tblGrid><w:gridCol w:w="4675"/><w:gridCol w:w="4675"/></w:tblGrid><w:tr w:rsidR="00670AA1" w:rsidDel="00670AA1" w14:paraId="209378AA" w14:textId="256239A3" w:rsidTr="00670AA1"><w:trPr><w:del w:id="8" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:trPr><w:t
 c><w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr><w:p w14:paraId="2A4A0E6E" w14:textId="7FC8DBC8" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="9" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="10" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:delText>Del r1c1</w:delText></w:r></w:del></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr><w:p w14:paraId="761862CE" w14:textId="6D9C6F2E" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="11" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="12" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:delText>Del r1c2</w:delText></w:r></w:del></w:p></w:tc></w:tr><w:tr w:rsidR="00670AA1" w:rsidDel="00670AA1" w14:paraId="36EBAB90" w14:tex
 tId="0ED1EAB7" w:rsidTr="00670AA1"><w:trPr><w:del w:id="13" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr><w:p w14:paraId="5488E71A" w14:textId="2B4F14A2" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="14" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="15" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:delText>Del r2c1</w:delText></w:r></w:del></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr><w:p w14:paraId="2316A604" w14:textId="1B405A39" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="16" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="17" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:d
 elText>Del r2c2</w:delText></w:r></w:del></w:p></w:tc></w:tr></w:tbl><w:p w14:paraId="43D00E29" w14:textId="26263630" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="18" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr></w:p><w:p w14:paraId="51F5F8D3" w14:textId="22F9A2C3" w:rsidR="00670AA1" w:rsidDel="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w:pPr><w:rPr><w:del w:id="19" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"/></w:rPr></w:pPr><w:del w:id="20" w:author="Allison, Timothy B." w:date="2016-11-23T06:48:00Z"><w:r w:rsidDel="00670AA1"><w:delText>Deleted paragraph2</w:delText></w:r></w:del></w:p><w:p w14:paraId="7F413F67" w14:textId="77777777" w:rsidR="00670AA1" w:rsidRPr="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"/><w:p w14:paraId="2086F510" w14:textId="714089E7" w:rsidR="00670AA1" w:rsidRPr="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="00670AA1"><w
 :pPr><w:pStyle w:val="Heading1"/></w:pPr><w:bookmarkStart w:id="21" w:name="_Toc467647606"/><w:r><w:t>Heading2</w:t></w:r><w:bookmarkEnd w:id="21"/></w:p><w:p w14:paraId="76E705EC" w14:textId="17DB1B75" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="4BB9208F" w14:textId="1822EB9D" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="0EB59B76" w14:textId="08AFC42E" w:rsidR="00670AA1" w:rsidRPr="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"><w:pPr><w:rPr><w:b/><w:bCs/></w:rPr></w:pPr><w:r w:rsidRPr="00670AA1"><w:rPr><w:b/><w:bCs/></w:rPr><w:t>Some text</w:t></w:r></w:p><w:p w14:paraId="3FA38CE3" w14:textId="64BCC788" w:rsidR="00670AA1" w:rsidRDefault="00670AA1" w:rsidP="008D093B"/><w:p w14:paraId="393F9289" w14:textId="4C1C7415" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="008D093B"/><w:p w14:paraId="7A9E39A5" w14:textId="23165DFD" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="008D093B"/><w:p w14
 :paraId="2C206DE1" w14:textId="6CF6144B" w:rsidR="0049479F" w:rsidRDefault="0049479F" w:rsidP="008D093B"><w:r><w

<TRUNCATED>

[6/7] tika git commit: TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit

Posted by ta...@apache.org.
TIKA-1321 -- add SAX based docx parser and integrate it with the recent 2006ml parser work -- initial commit


Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/d19e4725
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/d19e4725
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/d19e4725

Branch: refs/heads/master
Commit: d19e4725ff0549597f9156bb0c1e7759f6ce08d9
Parents: 7b4f6fa
Author: tballison <ta...@mitre.org>
Authored: Wed Nov 30 15:24:57 2016 -0500
Committer: tballison <ta...@mitre.org>
Committed: Wed Nov 30 15:24:57 2016 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |    3 +
 .../java/org/apache/tika/utils/DateUtils.java   |   72 +-
 .../parser/microsoft/AbstractOfficeParser.java  |   69 +
 .../parser/microsoft/MSOfficeParserConfig.java  |   38 -
 .../tika/parser/microsoft/OfficeParser.java     |    5 +-
 .../parser/microsoft/OfficeParserConfig.java    |   82 +
 .../microsoft/ooxml/MetadataExtractor.java      |    4 +-
 .../microsoft/ooxml/OOXMLExtractorFactory.java  |   36 +-
 .../parser/microsoft/ooxml/OOXMLParser.java     |    6 +-
 .../ooxml/SXWPFWordExtractorDecorator.java      |  222 ++
 .../parser/microsoft/ooxml/XWPFListManager.java |   25 +-
 .../ooxml/XWPFWordExtractorDecorator.java       |    2 +-
 .../microsoft/ooxml/xwpf/BinaryDataHandler.java |  120 -
 .../ooxml/xwpf/BodyContentHandler.java          |  271 --
 .../ooxml/xwpf/CorePropertiesHandler.java       |  144 -
 .../ooxml/xwpf/ExtendedPropertiesHandler.java   |   67 -
 .../microsoft/ooxml/xwpf/PartHandler.java       |   43 -
 .../microsoft/ooxml/xwpf/Relationship.java      |   52 -
 .../ooxml/xwpf/RelationshipsHandler.java        |   86 -
 .../ooxml/xwpf/RelationshipsManager.java        |   58 -
 .../microsoft/ooxml/xwpf/Word2006MLHandler.java |  168 -
 .../microsoft/ooxml/xwpf/Word2006MLParser.java  |   67 -
 .../ooxml/xwpf/XWPFDocumentXMLBodyHandler.java  |  318 ++
 .../ooxml/xwpf/XWPFEventBasedWordExtractor.java |  353 ++
 .../microsoft/ooxml/xwpf/XWPFRunProperties.java |   44 +
 .../ooxml/xwpf/XWPFTikaBodyPartHandler.java     |  224 ++
 .../ooxml/xwpf/ml2006/AbstractPartHandler.java  |   43 +
 .../ooxml/xwpf/ml2006/BinaryDataHandler.java    |  120 +
 .../ooxml/xwpf/ml2006/BodyPartHandler.java      |   64 +
 .../xwpf/ml2006/CorePropertiesHandler.java      |  144 +
 .../xwpf/ml2006/ExtendedPropertiesHandler.java  |   67 +
 .../ooxml/xwpf/ml2006/PartHandler.java          |   34 +
 .../ooxml/xwpf/ml2006/Relationship.java         |   52 +
 .../ooxml/xwpf/ml2006/RelationshipsHandler.java |   86 +
 .../ooxml/xwpf/ml2006/RelationshipsManager.java |   58 +
 .../ooxml/xwpf/ml2006/Word2006MLDocHandler.java |  171 +
 .../ooxml/xwpf/ml2006/Word2006MLParser.java     |   71 +
 .../services/org.apache.tika.parser.Parser      |    2 +-
 .../parser/microsoft/ooxml/OOXMLParserTest.java |   31 +
 .../ooxml/xwpf/SXWPFExtractorTest.java          |  187 +
 .../ooxml/xwpf/Word2006MLParserTest.java        |  182 -
 .../ooxml/xwpf/ml2006/Word2006MLParserTest.java |  171 +
 .../test-documents/testWORD_2003ml.xml          | 2058 +++++++---
 .../test-documents/testWORD_2006ml.docx         |  Bin 0 -> 165566 bytes
 .../test-documents/testWORD_2006ml.xml          | 3621 +++++++++++++++---
 .../test-documents/testWORD_2006ml_src.docx     |  Bin 99960 -> 0 bytes
 46 files changed, 7350 insertions(+), 2391 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 17128b7..2462e1a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,8 @@
 Release 1.15 - ??
 
+  * Added experimental SAX parser for .docx files. To select this parser,
+    set useSAXDocxExtractor(true) on OfficeConfig (TIKA-1321).
+
   * Change default behavior to parse embedded documents even if the user
     forgets to specify a Parser.class in the ParseContext (TIKA-2096).
     Users who wish to parse only the container document should set

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-core/src/main/java/org/apache/tika/utils/DateUtils.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/utils/DateUtils.java b/tika-core/src/main/java/org/apache/tika/utils/DateUtils.java
index 6b764c8..6ccc74e 100644
--- a/tika-core/src/main/java/org/apache/tika/utils/DateUtils.java
+++ b/tika-core/src/main/java/org/apache/tika/utils/DateUtils.java
@@ -16,9 +16,14 @@
  */
 package org.apache.tika.utils;
 
+import java.text.DateFormat;
+import java.text.DateFormatSymbols;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.List;
 import java.util.Locale;
 import java.util.TimeZone;
 
@@ -26,6 +31,7 @@ import java.util.TimeZone;
  * Date related utility methods and constants
  */
 public class DateUtils {
+
     /**
      * The UTC time zone. Not sure if {@link TimeZone#getTimeZone(String)}
      * understands "UTC" in all environments, but it'll fall back to GMT
@@ -44,8 +50,49 @@ public class DateUtils {
      */
     public static final TimeZone MIDDAY = TimeZone.getTimeZone("GMT-12:00");
 
+    private static ThreadLocal<DateFormat> createDateFormat(String format, TimeZone timezone) {
+        final SimpleDateFormat sdf =
+                new SimpleDateFormat(format, new DateFormatSymbols(Locale.US));
+        if (timezone != null) {
+            sdf.setTimeZone(timezone);
+        }
+        return new ThreadLocal<DateFormat>() {
+            @Override
+            public DateFormat initialValue() {
+                return sdf;
+            }
+        };
+    }
+
+    /**
+     * Some parsers will have the date as a ISO-8601 string
+     *  already, and will set that into the Metadata object.
+     * So we can return Date objects for these, this is the
+     *  list (in preference order) of the various ISO-8601
+     *  variants that we try when processing a date based
+     *  property.
+     */
+    private static final List<ThreadLocal<DateFormat>> ISO_8601_INPUT_FORMATS = loadDateFormats();
+
+    private static List<ThreadLocal<DateFormat>> loadDateFormats() {
+        List<ThreadLocal<DateFormat>> dateFormats = new ArrayList<>();
+        // yyyy-mm-ddThh...
+        dateFormats.add(createDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", UTC));   // UTC/Zulu
+        dateFormats.add(createDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", null));    // With timezone
+        dateFormats.add(createDateFormat("yyyy-MM-dd'T'HH:mm:ss", null));     // Without timezone
+        // yyyy-mm-dd hh...
+        dateFormats.add(createDateFormat("yyyy-MM-dd' 'HH:mm:ss'Z'", UTC));   // UTC/Zulu
+        dateFormats.add(createDateFormat("yyyy-MM-dd' 'HH:mm:ssZ", null));    // With timezone
+        dateFormats.add(createDateFormat("yyyy-MM-dd' 'HH:mm:ss", null));     // Without timezone
+        // Date without time, set to Midday UTC
+        dateFormats.add(createDateFormat("yyyy-MM-dd", MIDDAY));       // Normal date format
+        dateFormats.add(createDateFormat("yyyy:MM:dd", MIDDAY));              // Image (IPTC/EXIF) format
+
+        return dateFormats;
+    }
+
     /**
-     * Returns a ISO 8601 representation of the given date. This method 
+     * Returns a ISO 8601 representation of the given date. This method
      * is thread safe and non-blocking.
      *
      * @see <a href="https://issues.apache.org/jira/browse/TIKA-495">TIKA-495</a>
@@ -58,7 +105,7 @@ public class DateUtils {
         return doFormatDate(calendar);
     }
     /**
-     * Returns a ISO 8601 representation of the given date. This method 
+     * Returns a ISO 8601 representation of the given date. This method
      * is thread safe and non-blocking.
      *
      * @see <a href="https://issues.apache.org/jira/browse/TIKA-495">TIKA-495</a>
@@ -66,7 +113,7 @@ public class DateUtils {
      * @return ISO 8601 date string, including timezone details
      */
     public static String formatDate(Calendar date) {
-        // Explicitly switch it into UTC before formatting 
+        // Explicitly switch it into UTC before formatting
         date.setTimeZone(UTC);
         return doFormatDate(date);
     }
@@ -98,4 +145,23 @@ public class DateUtils {
                 calendar.get(Calendar.MINUTE),
                 calendar.get(Calendar.SECOND));
     }
+
+    /**
+     * Tries to parse the date string; returns null if no parse was possible.
+     *
+     * This is thread safe because it relies on threadlocal dateformats.
+     *
+     * @param dateString
+     * @return
+     */
+    public static Date tryToParse(String dateString) {
+        for (ThreadLocal<DateFormat> df : ISO_8601_INPUT_FORMATS) {
+            try {
+                return df.get().parse(dateString);
+            } catch (java.text.ParseException e){
+
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
new file mode 100644
index 0000000..d8186bc
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
@@ -0,0 +1,69 @@
+package org.apache.tika.parser.microsoft;
+
+import org.apache.tika.config.Field;
+import org.apache.tika.parser.AbstractParser;
+import org.apache.tika.parser.ParseContext;
+
+/**
+ * Intermediate layer to set {@link OfficeParserConfig} uniformly.
+ */
+public abstract class AbstractOfficeParser extends AbstractParser {
+
+    private final OfficeParserConfig defaultOfficeParserConfig = new OfficeParserConfig();
+
+    /**
+     * Checks to see if the user has specified an {@link OfficeParserConfig}.
+     * If so, no changes are made; if not, one is added to the context.
+     *
+     * @param parseContext
+     */
+    public void configure(ParseContext parseContext) {
+        OfficeParserConfig officeParserConfig = parseContext.get(OfficeParserConfig.class, defaultOfficeParserConfig);
+        parseContext.set(OfficeParserConfig.class, officeParserConfig);
+    }
+
+    /**
+     * @see OfficeParserConfig#getIncludeDeletedContent
+     *
+     * @return
+     */
+    public boolean getIncludeDeletedContent() {
+        return defaultOfficeParserConfig.getIncludeDeletedContent();
+    }
+
+    /**
+     * @see OfficeParserConfig#getIncludeMoveFromContent()
+     *
+     * @return
+     */
+
+    public boolean getIncludeMoveFromContent() {
+        return defaultOfficeParserConfig.getIncludeMoveFromContent();
+    }
+
+    /**
+     * @see OfficeParserConfig#getUseSAXDocxExtractor()
+     *
+     * @return
+     */
+    public boolean getUseSAXDocxExtractor() {
+        return defaultOfficeParserConfig.getUseSAXDocxExtractor();
+    }
+
+
+    @Field
+    public void setIncludeDeletedContent(boolean includeDeletedConent) {
+        defaultOfficeParserConfig.setIncludeDeletedContent(includeDeletedConent);
+    }
+
+    @Field
+    public void setIncludeMoveFromContent(boolean includeMoveFromContent) {
+        defaultOfficeParserConfig.setIncludeMoveFromContent(includeMoveFromContent);
+    }
+
+    @Field
+    public void setUseSAXDocxExtractor(boolean useSAXDocxExtractor) {
+        defaultOfficeParserConfig.setUseSAXDocxExtractor(useSAXDocxExtractor);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/MSOfficeParserConfig.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/MSOfficeParserConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/MSOfficeParserConfig.java
deleted file mode 100644
index 8f8086a..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/MSOfficeParserConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tika.parser.microsoft;
-
-
-public class MSOfficeParserConfig {
-
-    private boolean includeDeletedContent = true;
-
-    /**
-     * Sets whether or not the parser should include deleted content.
-     * <b>This has not been implemented in all MSOffice parsers yet!!!</b>
-     * @param includeDeletedContent
-     */
-    public void setIncludeDeletedContent(boolean includeDeletedContent) {
-        this.includeDeletedContent = includeDeletedContent;
-    }
-
-    public boolean getIncludeDeletedContent() {
-        return includeDeletedContent;
-    }
-}
-
-

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParser.java
index 5218dfa..7e21ba8 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParser.java
@@ -48,7 +48,6 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
@@ -61,7 +60,7 @@ import org.xml.sax.SAXException;
 /**
  * Defines a Microsoft document content extractor.
  */
-public class OfficeParser extends AbstractParser {
+public class OfficeParser extends AbstractOfficeParser {
 
     /**
      * Serial version UID
@@ -98,6 +97,8 @@ public class OfficeParser extends AbstractParser {
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
+
+        configure(context);
         XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
         xhtml.startDocument();
 

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
new file mode 100644
index 0000000..55f4673
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/OfficeParserConfig.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.microsoft;
+
+
+import java.io.Serializable;
+
+public class OfficeParserConfig implements Serializable {
+
+    private boolean includeDeletedContent = true;
+    private boolean includeMoveFromContent = false;
+
+    private boolean useSAXDocxExtractor = false;
+
+    /**
+     * Sets whether or not the parser should include deleted content.
+     * <p/>
+     * <b>This has only been implemented in the streaming docx parser
+     * ({@link org.apache.tika.parser.microsoft.ooxml.SXWPFWordExtractorDecorator} so far!!!</b>
+     * @param includeDeletedContent
+     */
+    public void setIncludeDeletedContent(boolean includeDeletedContent) {
+        this.includeDeletedContent = includeDeletedContent;
+    }
+
+    public boolean getIncludeDeletedContent() {
+        return includeDeletedContent;
+    }
+
+    /**
+     * With track changes on, when a section is moved, the content
+     * is stored in both the "moveFrom" section and in the "moveTo" section.
+     * <p/>
+     * If you'd like to include the section both in its original location (moveFrom)
+     * and in its new location (moveTo), set this to <code>true</code>
+     * <p/>
+     * Default: <code>false</code>
+     * <p/>
+     * <b>This has only been implemented in the streaming docx parser
+     * ({@link org.apache.tika.parser.microsoft.ooxml.SXWPFWordExtractorDecorator} so far!!!</b>
+     * @param includeMoveFromContent
+     */
+    public void setIncludeMoveFromContent(boolean includeMoveFromContent) {
+        this.includeMoveFromContent = includeMoveFromContent;
+    }
+
+    public boolean getIncludeMoveFromContent() {
+        return includeMoveFromContent;
+    }
+
+    public boolean getUseSAXDocxExtractor() {
+        return useSAXDocxExtractor;
+    }
+
+    /**
+     * Use the experimental SAX-based streaming DOCX parser?
+     * If set to <code>false</code>, the classic parser will be used; if <code>true</code>,
+     * the new experimental parser will be used.
+     * <p/>
+     * Default: classic parser
+     * @param useSAXDocxExtractor
+     */
+    public void setUseSAXDocxExtractor(boolean useSAXDocxExtractor) {
+        this.useSAXDocxExtractor = useSAXDocxExtractor;
+    }
+}
+
+

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
index 91d49c7..d392346 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
@@ -36,6 +36,7 @@ import org.apache.tika.metadata.PagedText;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.microsoft.SummaryExtractor;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
 import org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException;
 import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty;
 import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties;
@@ -57,7 +58,8 @@ public class MetadataExtractor {
 
     public void extract(Metadata metadata) throws TikaException {
         if (extractor.getDocument() != null ||
-                (extractor instanceof XSSFEventBasedExcelExtractor &&
+                ((extractor instanceof XSSFEventBasedExcelExtractor ||
+                        extractor instanceof XWPFEventBasedWordExtractor) &&
                         extractor.getPackage() != null)) {
             extractMetadata(extractor.getCoreProperties(), metadata);
             extractMetadata(extractor.getExtendedProperties(), metadata);

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
index e2c7717..bbee6b7 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
@@ -28,17 +28,22 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackageAccess;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.EmptyParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
 import org.apache.tika.parser.pkg.ZipContainerDetector;
 import org.apache.xmlbeans.XmlException;
 import org.xml.sax.ContentHandler;
@@ -83,12 +88,22 @@ public class OOXMLExtractorFactory {
             metadata.set(Metadata.CONTENT_TYPE, type.toString());
 
             // Have the appropriate OOXML text extractor picked
-            POIXMLTextExtractor poiExtractor = ExtractorFactory.createExtractor(pkg);
+            POIXMLTextExtractor poiExtractor = null;
+            OfficeParserConfig config = context.get(OfficeParserConfig.class, new OfficeParserConfig());
+            if (config.getUseSAXDocxExtractor()) {
+                poiExtractor = trySXWPF(pkg);
+            }
+            if (poiExtractor == null) {
+                poiExtractor = ExtractorFactory.createExtractor(pkg);
+            }
 
             POIXMLDocument document = poiExtractor.getDocument();
             if (poiExtractor instanceof XSSFEventBasedExcelExtractor) {
                 extractor = new XSSFExcelExtractorDecorator(
                         context, (XSSFEventBasedExcelExtractor) poiExtractor, locale);
+            } else if (poiExtractor instanceof XWPFEventBasedWordExtractor) {
+                extractor = new SXWPFWordExtractorDecorator(context,
+                        (XWPFEventBasedWordExtractor)poiExtractor);
             } else if (document == null) {
                 throw new TikaException(
                         "Expecting UserModel based POI OOXML extractor with a document, but none found. " +
@@ -129,4 +144,23 @@ public class OOXMLExtractorFactory {
         }
     }
 
+    private static POIXMLTextExtractor trySXWPF(OPCPackage pkg) throws XmlException, OpenXML4JException, IOException {
+        PackageRelationshipCollection packageRelationshipCollection = pkg.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument");
+        if(packageRelationshipCollection.size() == 0) {
+            packageRelationshipCollection = pkg.getRelationshipsByType("http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument");
+        }
+
+        if (packageRelationshipCollection.size() == 0) {
+            return null;
+        }
+        PackagePart corePart = pkg.getPart(packageRelationshipCollection.getRelationship(0));
+        String targetContentType = corePart.getContentType();
+        for (XWPFRelation relation : XWPFWordExtractor.SUPPORTED_TYPES) {
+            if (targetContentType.equals(relation.getContentType())) {
+                return new XWPFEventBasedWordExtractor(pkg);
+            }
+        }
+        return null;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParser.java
index 22f2cac..a6d0b34 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParser.java
@@ -27,15 +27,15 @@ import org.apache.poi.openxml4j.util.ZipSecureFile;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.AbstractOfficeParser;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
 /**
  * Office Open XML (OOXML) parser.
  */
-public class OOXMLParser extends AbstractParser {
+public class OOXMLParser extends AbstractOfficeParser {
     static {
         //turn off POI's zip bomb detection because we have our own
         ZipSecureFile.setMinInflateRatio(-1.0d);
@@ -83,6 +83,8 @@ public class OOXMLParser extends AbstractParser {
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
+        //set OfficeParserConfig if the user hasn't specified one
+        configure(context);
         // Have the OOXML file processed
         OOXMLExtractorFactory.parse(stream, handler, metadata, context);
     }

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
new file mode 100644
index 0000000..e08dab1
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tika.parser.microsoft.ooxml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.input.CloseShieldInputStream;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackagePart;
+import org.apache.poi.openxml4j.opc.PackageRelationship;
+import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
+import org.apache.poi.xwpf.usermodel.XWPFNumbering;
+import org.apache.poi.xwpf.usermodel.XWPFRelation;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFDocumentXMLBodyHandler;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
+import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFTikaBodyPartHandler;
+import org.apache.tika.sax.EmbeddedContentHandler;
+import org.apache.tika.sax.OfflineContentHandler;
+import org.apache.tika.sax.XHTMLContentHandler;
+import org.apache.xmlbeans.XmlException;
+import org.xml.sax.SAXException;
+
+/**
+ * This is an experimental, alternative extractor for docx files.
+ * This streams the main document content rather than loading the
+ * full document into memory.
+ * <p>
+ * This will be better for some use cases than the classic docx extractor; and,
+ * it will be worse for others.
+ * </p>
+ *
+ * @since 1.15
+ */
+public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
+
+
+    private final OPCPackage opcPackage;
+    private final ParseContext context;
+
+    public SXWPFWordExtractorDecorator(ParseContext context,
+                                       XWPFEventBasedWordExtractor extractor) {
+        super(context, extractor);
+        this.context = context;
+        this.opcPackage = extractor.getPackage();
+    }
+
+
+    @Override
+    protected void buildXHTML(XHTMLContentHandler xhtml)
+            throws SAXException, XmlException, IOException {
+        //handle main document
+        List<PackagePart> pps = opcPackage.getPartsByContentType(XWPFRelation.DOCUMENT.getContentType());
+        if (pps != null) {
+            for (PackagePart pp : pps) {
+                //likely only one, but why not...
+                handleDocumentPart(pp, xhtml);
+            }
+        }
+        //handle glossary document
+        pps = opcPackage.getPartsByContentType(XWPFRelation.GLOSSARY_DOCUMENT.getContentType());
+
+        if (pps != null) {
+            for (PackagePart pp : pps) {
+                //likely only one, but why not...
+                handleDocumentPart(pp, xhtml);
+            }
+        }
+    }
+
+    private void handleDocumentPart(PackagePart documentPart, XHTMLContentHandler xhtml) throws IOException, SAXException {
+        //load the numbering/list manager and styles from the main document part
+        XWPFNumbering numbering = loadNumbering(documentPart);
+        XWPFListManager xwpfListManager = new XWPFListManager(numbering);
+        //TODO: XWPFStyles styles = loadStyles(documentPart);
+
+        //headers
+        try {
+            PackageRelationshipCollection headersPRC = documentPart.getRelationshipsByType(XWPFRelation.HEADER.getRelation());
+            if (headersPRC != null) {
+                for (int i = 0; i < headersPRC.size(); i++) {
+                    PackagePart header = documentPart.getRelatedPart(headersPRC.getRelationship(i));
+                    handlePart(header, xwpfListManager, xhtml);
+                }
+            }
+        } catch (InvalidFormatException e) {
+            //swallow
+        }
+
+        //main document
+        handlePart(documentPart, xwpfListManager, xhtml);
+
+        //for now, just dump other components at end
+        for (XWPFRelation rel : new XWPFRelation[]{
+                XWPFRelation.FOOTNOTE,
+                XWPFRelation.COMMENT,
+                XWPFRelation.FOOTER,
+                XWPFRelation.ENDNOTE
+        }) {
+            try {
+                PackageRelationshipCollection prc = documentPart.getRelationshipsByType(rel.getRelation());
+                if (prc != null) {
+                    for (int i = 0; i < prc.size(); i++) {
+                        PackagePart packagePart = documentPart.getRelatedPart(prc.getRelationship(i));
+                        handlePart(packagePart, xwpfListManager, xhtml);
+                    }
+                }
+            } catch (InvalidFormatException e) {
+                //swallow
+            }
+        }
+    }
+
+    private void handlePart(PackagePart packagePart,
+                            XWPFListManager xwpfListManager, XHTMLContentHandler xhtml) throws IOException, SAXException {
+
+        Map<String, String> hyperlinks = loadHyperlinkRelationships(packagePart);
+        try (InputStream stream = packagePart.getInputStream()) {
+            context.getSAXParser().parse(
+                    new CloseShieldInputStream(stream),
+                    new OfflineContentHandler(new EmbeddedContentHandler(
+                            new XWPFDocumentXMLBodyHandler(
+                                    new XWPFTikaBodyPartHandler(xhtml, xwpfListManager,
+                                            context.get(OfficeParserConfig.class)), hyperlinks))));
+        } catch (TikaException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    private Map<String, String> loadHyperlinkRelationships(PackagePart bodyPart) {
+        Map<String, String> hyperlinks = new HashMap<>();
+        try {
+            PackageRelationshipCollection prc = bodyPart.getRelationshipsByType(XWPFRelation.HYPERLINK.getRelation());
+            for (int i = 0; i < prc.size(); i++) {
+                PackageRelationship pr = prc.getRelationship(i);
+                if (pr == null) {
+                    continue;
+                }
+                String id = pr.getId();
+                String url = (pr.getTargetURI() == null) ? null : pr.getTargetURI().toString();
+                if (id != null && url != null) {
+                    hyperlinks.put(id, url);
+                }
+            }
+        } catch (InvalidFormatException e) {
+        }
+        return hyperlinks;
+    }
+/*
+    private XWPFStyles loadStyles(PackagePart packagePart) {
+        try {
+            PackageRelationshipCollection stylesParts =
+                    packagePart.getRelationshipsByType(XWPFRelation.STYLES.getRelation());
+            if (stylesParts.size() > 0) {
+                PackageRelationship stylesRelationShip = stylesParts.getRelationship(0);
+                if (stylesRelationShip == null) {
+                    return null;
+                }
+                PackagePart stylesPart = opcPackage.getPart(stylesRelationShip);
+                if (stylesPart == null) {
+                    return null;
+                }
+                return new XWPFStyles(stylesPart);
+            }
+        } catch (IOException|OpenXML4JException e) {
+            //swallow
+        }
+        return null;
+
+    }
+*/
+    private XWPFNumbering loadNumbering(PackagePart packagePart) {
+        try {
+            PackageRelationshipCollection numberingParts = packagePart.getRelationshipsByType(XWPFRelation.NUMBERING.getRelation());
+            if (numberingParts.size() > 0) {
+                PackageRelationship numberingRelationShip = numberingParts.getRelationship(0);
+                if (numberingRelationShip == null) {
+                    return null;
+                }
+                PackagePart numberingPart = opcPackage.getPart(numberingRelationShip);
+                if (numberingPart == null) {
+                    return null;
+                }
+                return new XWPFNumbering(numberingPart);
+            }
+        } catch (IOException | OpenXML4JException e) {
+            //swallow
+        }
+        return null;
+    }
+
+    /**
+     * This returns the main document only.
+     */
+    @Override
+    protected List<PackagePart> getMainDocumentParts() {
+        return opcPackage.getPartsByContentType(XWPFRelation.DOCUMENT.getContentType());
+    }
+}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFListManager.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFListManager.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFListManager.java
index a938c2f..2a99126 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFListManager.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFListManager.java
@@ -16,8 +16,9 @@
  */
 package org.apache.tika.parser.microsoft.ooxml;
 
+import java.math.BigInteger;
+
 import org.apache.poi.xwpf.usermodel.XWPFAbstractNum;
-import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFNum;
 import org.apache.poi.xwpf.usermodel.XWPFNumbering;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
@@ -47,8 +48,8 @@ public class XWPFListManager extends AbstractListManager {
     private final XWPFNumbering numbering;
 
     //map of numId (which paragraph series is this a member of?), levelcounts
-    public XWPFListManager(XWPFDocument document) {
-        numbering = document.getNumbering();
+    public XWPFListManager(XWPFNumbering numbering) {
+        this.numbering = numbering;
     }
 
     /**
@@ -57,12 +58,19 @@ public class XWPFListManager extends AbstractListManager {
      * @return the formatted number or an empty string if something went wrong
      */
     public String getFormattedNumber(final XWPFParagraph paragraph) {
-        if (numbering == null) {
+        return getFormattedNumber(paragraph.getNumID(),
+                paragraph.getNumIlvl() == null ? -1 : paragraph.getNumIlvl().intValue());
+    }
+
+    public String getFormattedNumber(BigInteger numId, int iLvl) {
+        if (numbering == null || iLvl < 0 || numId == null) {
             return "";
         }
 
-        int currNumId = paragraph.getNumID().intValue();
-        XWPFNum xwpfNum = numbering.getNum(paragraph.getNumID());
+        int currNumId = numId.intValue();
+
+        XWPFNum xwpfNum = numbering.getNum(numId);
+
         if (xwpfNum == null) {
             return "";
         }
@@ -79,14 +87,15 @@ public class XWPFListManager extends AbstractListManager {
             overrideTuples = loadOverrideTuples(ctNum, lc.getNumberOfLevels());
         }
 
-        String formattedString = lc.incrementLevel(paragraph.getNumIlvl().intValue(), overrideTuples);
+        String formattedString = lc.incrementLevel(iLvl, overrideTuples);
 
         listLevelMap.put(currAbNumId, lc);
         overrideTupleMap.put(currNumId, overrideTuples);
 
         return formattedString;
+
     }
-    
+
     private LevelTuple[] loadOverrideTuples(CTNum ctNum, int length) {
         LevelTuple[] levelTuples = new LevelTuple[length];
         int overrideLength = ctNum.sizeOfLvlOverrideArray();

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
index da3a606..ccbf45e 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
@@ -83,7 +83,7 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
     protected void buildXHTML(XHTMLContentHandler xhtml)
             throws SAXException, XmlException, IOException {
         XWPFHeaderFooterPolicy hfPolicy = document.getHeaderFooterPolicy();
-        XWPFListManager listManager = new XWPFListManager(document);
+        XWPFListManager listManager = new XWPFListManager(document.getNumbering());
         // headers
         if (hfPolicy != null) {
             extractHeaders(xhtml, hfPolicy, listManager);

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BinaryDataHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BinaryDataHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BinaryDataHandler.java
deleted file mode 100644
index c2177cf..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BinaryDataHandler.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.extractor.EmbeddedDocumentExtractor;
-import org.apache.tika.extractor.EmbeddedDocumentUtil;
-import org.apache.tika.io.TikaInputStream;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.sax.XHTMLContentHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-class BinaryDataHandler extends PartHandler {
-
-    private final XHTMLContentHandler handler;
-    private final Metadata metadata;
-    private final ParseContext parseContext;
-
-    private boolean inBinaryData = false;
-    private StringBuilder buffer = new StringBuilder();
-
-    final Base64 base64 = new Base64();
-
-
-    public BinaryDataHandler(XHTMLContentHandler handler, Metadata metadata, ParseContext context) {
-        this.handler = handler;
-        this.metadata = metadata;
-        this.parseContext = context;
-    }
-
-
-    @Override
-    public void startDocument() throws SAXException {
-    }
-
-    @Override
-    public void endDocument() throws SAXException {
-
-    }
-
-    @Override
-    void endPart() throws SAXException, TikaException {
-        if (hasData()) {
-            EmbeddedDocumentExtractor embeddedDocumentExtractor =
-                    EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(parseContext);
-            Metadata embeddedMetadata = new Metadata();
-            try (TikaInputStream stream = TikaInputStream.get(getInputStream())) {
-                embeddedDocumentExtractor.parseEmbedded(stream, handler, embeddedMetadata, false);
-            } catch (IOException e) {
-                throw new TikaException("error in finishing part", e);
-            }
-            buffer.setLength(0);
-        }
-
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-        if (uri.equals(Word2006MLHandler.PKG_NS) && localName.equals("binaryData")) {
-            inBinaryData = true;
-        }
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        if (uri.equals(Word2006MLHandler.PKG_NS) && localName.equals("binaryData")) {
-            inBinaryData = false;
-        }
-    }
-
-    @Override
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        if (inBinaryData) {
-            buffer.append(ch, start, length);
-        }
-    }
-
-    @Override
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-
-    }
-
-    @Override
-    public String getPartContentType() {
-        return "";
-    }
-
-    boolean hasData() {
-        return buffer.length() > 0;
-    }
-
-    private InputStream getInputStream() {
-        byte[] bytes = base64.decode(buffer.toString());
-        return new ByteArrayInputStream(bytes);
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BodyContentHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BodyContentHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BodyContentHandler.java
deleted file mode 100644
index ea16191..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/BodyContentHandler.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import org.apache.poi.xwpf.usermodel.XWPFRelation;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.parser.microsoft.MSOfficeParserConfig;
-import org.apache.tika.sax.XHTMLContentHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-/**
- * This class is intended to handle anything that might contain IBodyElements:
- * main document, headers, footers, notes, etc.
- */
-
-class BodyContentHandler extends PartHandler {
-
-
-    private enum EditType{
-        NONE,
-        INSERT,
-        DELETE
-    };
-
-    private final static String W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
-    private final static String MC_NS = "http://schemas.openxmlformats.org/markup-compatibility/2006";
-    private final static String OFFICE_DOC_RELATIONSHIP_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
-
-    private final static char[] TAB = new char[1];
-
-    static {
-        TAB[0] = '\t';
-    }
-
-    private final String partName;
-    private final RelationshipsManager relationshipsManager;
-    private final XHTMLContentHandler handler;
-    private final Metadata metadata;
-    private final ParseContext parseContext;
-    private final boolean includeDeletedContent;
-
-    private boolean inR = false;
-    private boolean inT = false;
-    private boolean inRPr = false;
-    private boolean inDelText = false;
-    private boolean inAlternateContent = false; //in alternate content section
-    private boolean inACChoice = false; //if in alternate, choice or fallback?
-    private boolean inACFallback = false;
-    private boolean hasWrittenAHref = false;
-    private boolean hasWrittenFormatting = false;
-    private String editAuthor = null;
-    private String editDate = null;
-    private EditType editType = EditType.NONE;
-    private String hyperlink = null;
-
-    private TmpFormatting currFormat = new TmpFormatting();
-
-    public BodyContentHandler(String partName, RelationshipsManager relationshipsManager,
-                              XHTMLContentHandler handler, Metadata metadata, ParseContext context) {
-        this.partName = partName;
-        this.relationshipsManager = relationshipsManager;
-        this.handler = handler;
-        this.metadata = metadata;
-        this.parseContext = context;
-        MSOfficeParserConfig config = context.get(MSOfficeParserConfig.class);
-        boolean tmpIncludeDeleted = true;
-        if (config != null) {
-            tmpIncludeDeleted = config.getIncludeDeletedContent();
-        }
-        includeDeletedContent = tmpIncludeDeleted;
-    }
-
-
-    @Override
-    public void startDocument() throws SAXException {
-    }
-
-    @Override
-    public void endDocument() throws SAXException {
-    }
-
-    @Override
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-    }
-
-    @Override
-    public void endPrefixMapping(String prefix) throws SAXException {
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-        if (uri.equals(MC_NS)) {
-            if (localName.equals("AlternateContent")) {
-                inAlternateContent = true;
-            } else if (localName.equals("Choice")) {
-                inACChoice = true;
-            } else if (localName.equals("Fallback")) {
-                inACFallback = true;
-            }
-        }
-        if (inACFallback) {
-            return;
-        }
-
-        if (uri.equals(W_NS)) {
-            if (localName.equals("p")) {
-                handler.startElement("p");
-            } else if (localName.equals("r")) {
-                inR = true;
-            } else if (localName.equals("t")) {
-                inT = true;
-            } else if (localName.equals("tab")) {
-                handler.characters(TAB, 0, 1);
-            } else if (localName.equals("tbl")) {
-                handler.startElement("table");
-            } else if (localName.equals("tc")) {
-                handler.startElement("td");
-            } else if (localName.equals("tr")) {
-                handler.startElement("tr");
-            } else if (localName.equals("rPr")) {
-                inRPr = true;
-            } else if (inR && inRPr && localName.equals("i")) {
-                //rprs don't have to be inR; ignore those that aren't
-                currFormat.italics = true;
-            } else if (inR && inRPr && localName.equals("b")) {
-                currFormat.bold = true;
-            } else if (localName.equals("delText")) {
-                inDelText = true;
-            } else if (localName.equals("ins")) {
-                editAuthor = atts.getValue(W_NS, "author");
-                editDate = atts.getValue(W_NS, "date");
-                editType = EditType.INSERT;
-            } else if (localName.equals("del")) {
-                editAuthor = atts.getValue(W_NS, "author");
-                editDate = atts.getValue(W_NS, "date");
-                editType = EditType.DELETE;
-            } else if (localName.equals("hyperlink")) {
-                String hyperlinkId = atts.getValue(OFFICE_DOC_RELATIONSHIP_NS, "id");
-                if (hyperlinkId != null) {
-                    Relationship relationship = relationshipsManager.getRelationship(getName(), hyperlinkId);
-                    if (relationship != null && XWPFRelation.HYPERLINK.getRelation().equals(relationship.getContentType())) {
-                        hyperlink = relationship.getTarget();
-                        handler.startElement("a", "href", hyperlink);
-                        hasWrittenAHref = true;
-                    }
-                }
-            }
-        }
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        if (uri.equals(MC_NS)) {
-            if (localName.equals("AlternateContent")) {
-                inAlternateContent = false;
-            } else if (localName.equals("Choice")) {
-                inACChoice = false;
-            } else if (localName.equals("Fallback")) {
-                inACFallback = false;
-            }
-        }
-        if (uri.equals(W_NS)) {
-            if (inACFallback) {
-                return;
-            }
-            if (localName.equals("p")) {
-                handler.endElement("p");
-            } else if (localName.equals("r")) {
-                closeStyleTags();
-                inR = false;
-                hasWrittenFormatting = false;
-            } else if (localName.equals("t")) {
-                inT = false;
-            } else if (localName.equals("tbl")) {
-                handler.endElement("table");
-            } else if (localName.equals("tc")) {
-                handler.endElement("td");
-            } else if (localName.equals("tr")) {
-                handler.endElement("tr");
-            } else if (localName.equals("rPr")) {
-                inRPr = false;
-            } else if (localName.equals("delText")) {
-                inDelText = false;
-            } else if (localName.equals("ins") || localName.equals("del")) {
-                editType = EditType.NONE;
-                editAuthor = null;
-                editDate = null;
-            } else if (localName.equals("hyperlink") && hasWrittenAHref) {
-                handler.endElement("a");
-                hasWrittenAHref = false;
-            }
-        }
-    }
-
-    @Override
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        if (inACFallback) {
-            return;
-        }
-
-        if (inR && !hasWrittenFormatting) {
-            if (currFormat.bold) {
-                handler.startElement("b");
-            }
-            if (currFormat.italics) {
-                handler.startElement("i");
-            }
-            hasWrittenFormatting = true;
-        }
-        if (inT) {
-            handler.characters(ch, start, length);
-        } else if (includeDeletedContent && inDelText) {
-            handler.characters(ch, start, length);
-        }
-    }
-
-    @Override
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-        if (inACFallback) {
-            return;
-        }
-
-        if (inT) {
-            handler.characters(ch, start, length);
-        }
-    }
-
-    @Override
-    public String getPartContentType() {
-        return partName;
-    }
-
-
-
-    void closeStyleTags() throws SAXException {
-        if (hasWrittenFormatting) {
-            if (currFormat.italics) {
-                handler.endElement("i");
-            }
-            if (currFormat.bold) {
-                handler.endElement("b");
-            }
-        }
-
-        currFormat.bold = false;
-        currFormat.italics = false;
-    }
-
-    private class TmpFormatting {
-        boolean italics = false;
-        boolean bold = false;
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/CorePropertiesHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/CorePropertiesHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/CorePropertiesHandler.java
deleted file mode 100644
index b0bca08..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/CorePropertiesHandler.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.poi.openxml4j.opc.ContentTypes;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.OfficeOpenXMLCore;
-import org.apache.tika.metadata.Property;
-import org.apache.tika.metadata.TikaCoreProperties;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-class CorePropertiesHandler extends PartHandler {
-
-    final static String DC_NS = "http://purl.org/dc/elements/1.1";
-    final static String DC_TERMS_NS = "http://purl.org/dc/terms";
-    final static String CP_NS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
-
-    private final Metadata metadata;
-
-    final StringBuilder buffer = new StringBuilder();
-    final Map<String, Map<String, Property>> properties = new HashMap<>();
-
-    public CorePropertiesHandler(Metadata metadata) {
-        this.metadata = metadata;
-        addProperties();
-    }
-
-    void addProperties() {
-        Map<String, Property> dc = properties.get(DC_NS);
-        if (dc == null) {
-            dc = new HashMap<>();
-        }
-        dc.put("creator", TikaCoreProperties.CREATOR);
-        dc.put("title", TikaCoreProperties.TITLE);
-        dc.put("description", TikaCoreProperties.DESCRIPTION);
-        properties.put(DC_NS, dc);
-
-        Map<String, Property> dcTerms = properties.get(DC_TERMS_NS);
-        if (dcTerms == null) {
-            dcTerms = new HashMap<>();
-        }
-        dcTerms.put("created", TikaCoreProperties.CREATED);
-        dcTerms.put("modified", TikaCoreProperties.MODIFIED);
-
-        properties.put(DC_TERMS_NS, dcTerms);
-
-        Map<String, Property> cp = properties.get(CP_NS);
-        if (cp == null) {
-            cp = new HashMap<>();
-        }
-        cp.put("category", OfficeOpenXMLCore.CATEGORY);
-        cp.put("contentStatus", OfficeOpenXMLCore.CONTENT_STATUS);
-        cp.put("lastModifiedBy", OfficeOpenXMLCore.LAST_MODIFIED_BY);
-        cp.put("lastPrinted", OfficeOpenXMLCore.LAST_PRINTED);
-        cp.put("revision", OfficeOpenXMLCore.REVISION);
-        cp.put("subject", OfficeOpenXMLCore.SUBJECT);
-        cp.put("version", OfficeOpenXMLCore.VERSION);
-        properties.put(CP_NS, cp);
-    }
-
-    @Override
-    public void startDocument() throws SAXException {
-    }
-
-    @Override
-    public void endDocument() throws SAXException {
-        buffer.setLength(0);
-    }
-
-    @Override
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-    }
-
-    @Override
-    public void endPrefixMapping(String prefix) throws SAXException {
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        Property prop = getProperty(uri, localName);
-        if (prop != null) {
-
-            if (prop.isMultiValuePermitted()) {
-                metadata.add(prop, buffer.toString());
-            } else {
-                metadata.set(prop, buffer.toString());
-            }
-        }
-        buffer.setLength(0);
-
-    }
-
-    private Property getProperty(String uri, String localName) {
-        if (uri.endsWith("/")) {
-            uri = uri.substring(0, uri.length()-1);
-        }
-
-        Map<String, Property> m = properties.get(uri);
-        if (m != null) {
-            return m.get(localName);
-        }
-        return null;
-    }
-
-    @Override
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        buffer.append(ch, start, length);
-    }
-
-    @Override
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-        buffer.append(ch, start, length);
-    }
-
-    @Override
-    public String getPartContentType() {
-        return ContentTypes.CORE_PROPERTIES_PART;
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ExtendedPropertiesHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ExtendedPropertiesHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ExtendedPropertiesHandler.java
deleted file mode 100644
index 07e5e23..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/ExtendedPropertiesHandler.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.metadata.Office;
-import org.apache.tika.metadata.OfficeOpenXMLExtended;
-import org.apache.tika.metadata.Property;
-
-class ExtendedPropertiesHandler extends CorePropertiesHandler {
-
-    final static String EP_NS = "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";
-
-    public ExtendedPropertiesHandler(Metadata metadata) {
-        super(metadata);
-    }
-
-    @Override
-    void addProperties() {
-        Map<String, Property> ep = properties.get(EP_NS);
-        if (ep == null) {
-            ep = new HashMap<>();
-        }
-        ep.put("AppVersion", OfficeOpenXMLExtended.APP_VERSION);
-        ep.put("Application", OfficeOpenXMLExtended.APPLICATION);
-        ep.put("Comments", OfficeOpenXMLExtended.COMMENTS);
-        ep.put("Company", OfficeOpenXMLExtended.COMPANY);
-        ep.put("DocSecurity", OfficeOpenXMLExtended.DOC_SECURITY);
-        ep.put("HiddenSlides", OfficeOpenXMLExtended.HIDDEN_SLIDES);
-        ep.put("Manager", OfficeOpenXMLExtended.MANAGER);
-        ep.put("Notes", OfficeOpenXMLExtended.NOTES);
-        ep.put("PresentationFormat", OfficeOpenXMLExtended.PRESENTATION_FORMAT);
-        ep.put("Template", OfficeOpenXMLExtended.TEMPLATE);
-        ep.put("TotalTime", OfficeOpenXMLExtended.TOTAL_TIME);
-        ep.put("Pages", Office.PAGE_COUNT);
-        ep.put("Words", Office.WORD_COUNT);
-        ep.put("Characters", Office.CHARACTER_COUNT);
-        ep.put("CharactersWithSpaces", Office.CHARACTER_COUNT_WITH_SPACES);
-        ep.put("Paragraphs", Office.PARAGRAPH_COUNT);
-        ep.put("Lines", Office.LINE_COUNT);
-        properties.put(EP_NS, ep);
-    }
-
-    @Override
-    public String getPartContentType() {
-        return "application/vnd.openxmlformats-officedocument.extended-properties+xml";
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/PartHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/PartHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/PartHandler.java
deleted file mode 100644
index 79bcafe..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/PartHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-import org.apache.tika.exception.TikaException;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-abstract class PartHandler extends DefaultHandler {
-
-    private String name;
-
-    public abstract String getPartContentType();
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Override this to flush buffers, etc if necessary
-     */
-    void endPart() throws SAXException, TikaException {
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Relationship.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Relationship.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Relationship.java
deleted file mode 100644
index 19b0dd4..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Relationship.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import org.apache.poi.openxml4j.opc.TargetMode;
-
-class Relationship {
-
-    private final String contentType;
-
-    private final String target;
-
-    private final TargetMode targetMode;
-
-    public Relationship(String contentType, String target) {
-        this(contentType, target, null);
-    }
-
-    public Relationship(String contentType, String target, TargetMode targetMode) {
-        this.contentType = contentType;
-        this.target = target;
-        this.targetMode = targetMode;
-    }
-
-    public String getContentType() {
-        return contentType;
-    }
-
-    public String getTarget() {
-        return target;
-    }
-
-    public TargetMode getTargetMode() {
-        return targetMode;
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsHandler.java
deleted file mode 100644
index 211b048..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsHandler.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import org.apache.poi.openxml4j.opc.ContentTypes;
-import org.apache.poi.openxml4j.opc.TargetMode;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-class RelationshipsHandler extends PartHandler {
-
-    final static String REL_NS = "http://schemas.openxmlformats.org/package/2006/relationships";
-
-    private final RelationshipsManager relationshipsManager;
-
-    public RelationshipsHandler(RelationshipsManager relationshipsManager) {
-        this.relationshipsManager = relationshipsManager;
-    }
-
-
-    @Override
-    public void startDocument() throws SAXException {
-    }
-
-    @Override
-    public void endDocument() throws SAXException {
-    }
-
-    @Override
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-    }
-
-    @Override
-    public void endPrefixMapping(String prefix) throws SAXException {
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-        if (uri.equals(REL_NS)) {
-            if (localName.equals("Relationship")) {
-                String id = atts.getValue("", "Id");
-                String type = atts.getValue("", "Type");
-                String target = atts.getValue("", "Target");
-                String targetModeString = atts.getValue("", "TargetMode");
-                TargetMode targetMode = "EXTERNAL".equals(targetModeString)? TargetMode.EXTERNAL :
-                        TargetMode.INTERNAL;
-                relationshipsManager.addRelationship(getName(), id, type, target, targetMode);
-            }
-        }
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-    }
-
-    @Override
-    public void characters(char[] ch, int start, int length) throws SAXException {
-    }
-
-    @Override
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-
-    }
-
-    @Override
-    public String getPartContentType() {
-        return ContentTypes.RELATIONSHIPS_PART;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsManager.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsManager.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsManager.java
deleted file mode 100644
index d1954ac..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/RelationshipsManager.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.poi.openxml4j.opc.TargetMode;
-
-class RelationshipsManager {
-
-    Map<String, Map<String, Relationship>> map = new HashMap<>();
-
-    public void addRelationship(String relsFileName, String id, String type, String target, TargetMode targetMode) {
-        String packageName = convertRelsFileNameToPackageName(relsFileName);
-        Map<String, Relationship> thisPackageRels = map.get(packageName);
-        if (thisPackageRels == null) {
-            thisPackageRels = new HashMap<>();
-        }
-        thisPackageRels.put(id, new Relationship(type, target, targetMode));
-        map.put(packageName, thisPackageRels);
-    }
-
-    public Relationship getRelationship(String packageName, String id) {
-        Map<String, Relationship> thisPackageRels = map.get(packageName);
-        if (thisPackageRels != null) {
-            return thisPackageRels.get(id);
-        }
-        return null;
-    }
-
-    private String convertRelsFileNameToPackageName(String relsFileName) {
-        if ("/_rels/.rels".equals(relsFileName)) {
-            return "/";
-        }
-
-        String tmp = relsFileName;
-        tmp = tmp.replaceFirst("\\/_rels\\/", "/");
-        tmp = tmp.replaceFirst(".rels\\Z", "");
-        return tmp;
-    }
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLHandler.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLHandler.java
deleted file mode 100644
index cf919cc..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLHandler.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.poi.xwpf.usermodel.XWPFRelation;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.sax.XHTMLContentHandler;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-class Word2006MLHandler extends DefaultHandler {
-
-    final static String PKG_NS = "http://schemas.microsoft.com/office/2006/xmlPackage";
-
-
-    private final XHTMLContentHandler handler;
-    private final Metadata metadata;
-    private final ParseContext parseContext;
-
-    private final Map<String, PartHandler> partHandlers = new HashMap<>();
-    private final BinaryDataHandler binaryDataHandler;
-    private final RelationshipsManager relationshipsManager = new RelationshipsManager();
-    private PartHandler currentPartHandler = null;
-
-    public Word2006MLHandler(XHTMLContentHandler handler, Metadata metadata, ParseContext context) {
-        this.handler = handler;
-        this.metadata = metadata;
-        this.parseContext = context;
-
-        addPackageHandler(new RelationshipsHandler(relationshipsManager));
-
-        addPackageHandler(new BodyContentHandler(
-                XWPFRelation.DOCUMENT.getContentType(),
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                XWPFRelation.FOOTNOTE.getContentType(),
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml",
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                XWPFRelation.HEADER.getContentType(),
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                XWPFRelation.FOOTER.getContentType(),
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml",
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml",
-                relationshipsManager,
-                handler, metadata, context));
-        addPackageHandler(new BodyContentHandler(
-                "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml",
-                relationshipsManager,
-                handler, metadata, context));
-
-        addPackageHandler(new CorePropertiesHandler(metadata));
-        addPackageHandler(new ExtendedPropertiesHandler(metadata));
-        binaryDataHandler = new BinaryDataHandler(handler, metadata, context);
-    }
-
-    private void addPackageHandler(PartHandler partHandler) {
-        partHandlers.put(partHandler.getPartContentType(), partHandler);
-    }
-
-
-    @Override
-    public void startDocument() throws SAXException {
-    }
-
-    @Override
-    public void endDocument() throws SAXException {
-    }
-
-    @Override
-    public void startPrefixMapping(String prefix, String uri) throws SAXException {
-    }
-
-    @Override
-    public void endPrefixMapping(String prefix) throws SAXException {
-
-    }
-
-    @Override
-    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
-        if (uri.equals(PKG_NS) && localName.equals("part")) {
-            //start of a package
-            String name = atts.getValue(PKG_NS, "name");
-            String contentType = atts.getValue(PKG_NS, "contentType");
-            currentPartHandler = partHandlers.get(contentType);
-            //for now treat every unknown part type
-            //as if it contained binary data
-            if (currentPartHandler == null) {
-                currentPartHandler = binaryDataHandler;
-            }
-            if (currentPartHandler != null) {
-                currentPartHandler.setName(name);
-            }
-        } else if (currentPartHandler != null) {
-            currentPartHandler.startElement(uri, localName, qName, atts);
-        }
-
-    }
-
-    @Override
-    public void endElement(String uri, String localName, String qName) throws SAXException {
-        if (uri.equals(PKG_NS) && localName.equals("part")) {
-            //do post processing
-            if (currentPartHandler != null) {
-                try {
-                    currentPartHandler.endPart();
-                } catch (TikaException e) {
-                    throw new SAXException(e);
-                }
-            }
-            //then reset
-            currentPartHandler = null;
-        } else if (currentPartHandler != null) {
-            currentPartHandler.endElement(uri, localName, qName);
-        }
-    }
-
-    @Override
-    public void characters(char[] ch, int start, int length) throws SAXException {
-        if (currentPartHandler != null) {
-            currentPartHandler.characters(ch, start, length);
-        }
-    }
-
-    @Override
-    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
-        if (currentPartHandler != null) {
-            currentPartHandler.characters(ch, start, length);
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tika/blob/d19e4725/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParser.java
deleted file mode 100644
index 4609bf5..0000000
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/Word2006MLParser.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tika.parser.microsoft.ooxml.xwpf;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collections;
-import java.util.Set;
-
-import org.apache.commons.io.input.CloseShieldInputStream;
-import org.apache.tika.exception.TikaException;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
-import org.apache.tika.parser.ParseContext;
-import org.apache.tika.sax.EmbeddedContentHandler;
-import org.apache.tika.sax.OfflineContentHandler;
-import org.apache.tika.sax.XHTMLContentHandler;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-
-public class Word2006MLParser extends AbstractParser {
-
-    protected static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(
-                    MediaType.application("vnd.ms-word2006ml"));
-
-    @Override
-    public Set<MediaType> getSupportedTypes(ParseContext context) {
-        return SUPPORTED_TYPES;
-    }
-
-    @Override
-    public void parse(InputStream stream, ContentHandler handler,
-                      Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException {
-        final XHTMLContentHandler xhtml =
-                new XHTMLContentHandler(handler, metadata);
-
-        xhtml.startDocument();
-
-        try {
-            context.getSAXParser().parse(
-                    new CloseShieldInputStream(stream),
-                    new OfflineContentHandler(new EmbeddedContentHandler(
-                            new Word2006MLHandler(xhtml, metadata, context))));
-        } catch (SAXException e) {
-            throw new TikaException("XML parse error", e);
-        } finally {
-            xhtml.endDocument();
-        }
-    }
-}