]> source.dussan.org Git - poi.git/commitdiff
fix eclipse warnings
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 21 Mar 2016 00:14:21 +0000 (00:14 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 21 Mar 2016 00:14:21 +0000 (00:14 +0000)
close resources

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1735912 13f79535-47bb-0310-9956-ffa450edef68

32 files changed:
src/examples/src/org/apache/poi/hpsf/examples/CopyCompare.java
src/examples/src/org/apache/poi/hpsf/examples/WriteAuthorAndTitle.java
src/examples/src/org/apache/poi/ss/examples/BusinessPlan.java
src/examples/src/org/apache/poi/ss/examples/CellStyleDetails.java
src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java
src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java
src/java/org/apache/poi/hssf/dev/BiffDrawingToXml.java
src/java/org/apache/poi/poifs/crypt/binaryrc4/BinaryRC4Decryptor.java
src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java
src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java
src/java/org/apache/poi/poifs/eventfilesystem/POIFSReader.java
src/java/org/apache/poi/ss/util/CellUtil.java
src/ooxml/testcases/org/apache/poi/ss/usermodel/BaseTestXCell.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSheetHiding.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFExternalFunctions.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetShiftRows.java
src/testcases/org/apache/poi/ddf/TestEscherDump.java
src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java
src/testcases/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java
src/testcases/org/apache/poi/hssf/model/TestDrawingAggregate.java
src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFExternalFunctions.java
src/testcases/org/apache/poi/hssf/usermodel/TestSheetHiding.java
src/testcases/org/apache/poi/ss/formula/BaseTestExternalFunctions.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetHiding.java

index 1fb9d48ef2ebe40296375295766073030c4eeadb..3c5cd17a693e23605f841244ffa5a9643366c798 100644 (file)
@@ -28,7 +28,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.poi.hpsf.HPSFRuntimeException;
@@ -109,20 +108,15 @@ public class CopyCompare
         String copyFileName = null;
 
         /* Check the command-line arguments. */
-        if (args.length == 1)
-        {
+        if (args.length == 1) {
             originalFileName = args[0];
             File f = TempFile.createTempFile("CopyOfPOIFileSystem-", ".ole2");
             f.deleteOnExit();
             copyFileName = f.getAbsolutePath();
-        }
-        else if (args.length == 2)
-        {
+        } else if (args.length == 2) {
             originalFileName = args[0];
             copyFileName = args[1];
-        }
-        else
-        {
+        } else {
             System.err.println("Usage: " + CopyCompare.class.getName() +
                                "originPOIFS [copyPOIFS]");
             System.exit(1);
@@ -133,25 +127,28 @@ public class CopyCompare
         final POIFSReader r = new POIFSReader();
         final CopyFile cf = new CopyFile(copyFileName);
         r.registerListener(cf);
-        r.read(new FileInputStream(originalFileName));
+        FileInputStream fis = new FileInputStream(originalFileName);
+        r.read(fis);
+        fis.close();
         
         /* Write the new POIFS to disk. */
         cf.close();
 
         /* Read all documents from the original POI file system and compare them
          * with the equivalent document from the copy. */
-        final POIFSFileSystem opfs =
-            new POIFSFileSystem(new FileInputStream(originalFileName));
-        final POIFSFileSystem cpfs =
-            new POIFSFileSystem(new FileInputStream(copyFileName));
+        final POIFSFileSystem opfs = new POIFSFileSystem(new File(originalFileName));
+        final POIFSFileSystem cpfs = new POIFSFileSystem(new File(copyFileName));
 
         final DirectoryEntry oRoot = opfs.getRoot();
         final DirectoryEntry cRoot = cpfs.getRoot();
         final StringBuffer messages = new StringBuffer();
-        if (equal(oRoot, cRoot, messages))
+        if (equal(oRoot, cRoot, messages)) {
             System.out.println("Equal");
-        else
+        } else {
             System.out.println("Not equal: " + messages.toString());
+        }
+        cpfs.close();
+        opfs.close();
     }
 
 
@@ -183,29 +180,23 @@ public class CopyCompare
     {
         boolean equal = true;
         /* Iterate over d1 and compare each entry with its counterpart in d2. */
-        for (final Iterator i = d1.getEntries(); equal && i.hasNext();)
-        {
-            final Entry e1 = (Entry) i.next();
+        for (final Entry e1 : d1) {
             final String n1 = e1.getName();
             Entry e2 = null;
-            try
-            {
+            try {
                 e2 = d2.getEntry(n1);
-            }
-            catch (FileNotFoundException ex)
-            {
+            } catch (FileNotFoundException ex) {
                 msg.append("Document \"" + e1 + "\" exists, document \"" +
                            e2 + "\" does not.\n");
                 equal = false;
                 break;
             }
 
-            if (e1.isDirectoryEntry() && e2.isDirectoryEntry())
+            if (e1.isDirectoryEntry() && e2.isDirectoryEntry()) {
                 equal = equal((DirectoryEntry) e1, (DirectoryEntry) e2, msg);
-            else if (e1.isDocumentEntry() && e2.isDocumentEntry())
+            } else if (e1.isDocumentEntry() && e2.isDocumentEntry()) {
                 equal = equal((DocumentEntry) e1, (DocumentEntry) e2, msg);
-            else
-            {
+            } else {
                 msg.append("One of \"" + e1 + "\" and \"" + e2 + "\" is a " +
                            "document while the other one is a directory.\n");
                 equal = false;
@@ -214,17 +205,12 @@ public class CopyCompare
 
         /* Iterate over d2 just to make sure that there are no entries in d2
          * that are not in d1. */
-        for (final Iterator i = d2.getEntries(); equal && i.hasNext();)
-        {
-            final Entry e2 = (Entry) i.next();
+        for (final Entry e2 : d2) {
             final String n2 = e2.getName();
             Entry e1 = null;
-            try
-            {
+            try {
                 e1 = d1.getEntry(n2);
-            }
-            catch (FileNotFoundException ex)
-            {
+            } catch (FileNotFoundException ex) {
                 msg.append("Document \"" + e2 + "\" exitsts, document \"" +
                            e1 + "\" does not.\n");
                 equal = false;
@@ -263,34 +249,32 @@ public class CopyCompare
         boolean equal = true;
         final DocumentInputStream dis1 = new DocumentInputStream(d1);
         final DocumentInputStream dis2 = new DocumentInputStream(d2);
-        if (PropertySet.isPropertySetStream(dis1) &&
-            PropertySet.isPropertySetStream(dis2))
-        {
-            final PropertySet ps1 = PropertySetFactory.create(dis1);
-            final PropertySet ps2 = PropertySetFactory.create(dis2);
-            equal = ps1.equals(ps2);
-            if (!equal)
-            {
-                msg.append("Property sets are not equal.\n");
-                return equal;
-            }
-        }
-        else
-        {
-            int i1;
-            int i2;
-            do
-            {
-                i1 = dis1.read();
-                i2 = dis2.read();
-                if (i1 != i2)
-                {
-                    equal = false;
-                    msg.append("Documents are not equal.\n");
-                    break;
+        try {
+            if (PropertySet.isPropertySetStream(dis1) &&
+                PropertySet.isPropertySetStream(dis2)) {
+                final PropertySet ps1 = PropertySetFactory.create(dis1);
+                final PropertySet ps2 = PropertySetFactory.create(dis2);
+                equal = ps1.equals(ps2);
+                if (!equal) {
+                    msg.append("Property sets are not equal.\n");
+                    return equal;
                 }
+            } else {
+                int i1;
+                int i2;
+                do {
+                    i1 = dis1.read();
+                    i2 = dis2.read();
+                    if (i1 != i2) {
+                        equal = false;
+                        msg.append("Documents are not equal.\n");
+                        break;
+                    }
+                } while (equal && i1 == -1);
             }
-            while (equal && i1 == -1);
+        } finally {
+            dis2.close();
+            dis1.close();
         }
         return true;
     }
@@ -306,8 +290,7 @@ public class CopyCompare
      * original property set by using the {@link
      * MutablePropertySet#MutablePropertySet(PropertySet)} constructor.</p>
      */
-    static class CopyFile implements POIFSReaderListener
-    {
+    static class CopyFile implements POIFSReaderListener {
         String dstName;
         OutputStream out;
         POIFSFileSystem poiFs;
@@ -321,8 +304,7 @@ public class CopyCompare
          * @param dstName The name of the disk file the destination POIFS is to
          * be written to.
          */
-        public CopyFile(final String dstName)
-        {
+        public CopyFile(final String dstName) {
             this.dstName = dstName;
             poiFs = new POIFSFileSystem();
         }
@@ -332,8 +314,7 @@ public class CopyCompare
          * <p>The method is called by POI's eventing API for each file in the
          * origin POIFS.</p>
          */
-        public void processPOIFSReaderEvent(final POIFSReaderEvent event)
-        {
+        public void processPOIFSReaderEvent(final POIFSReaderEvent event) {
             /* The following declarations are shortcuts for accessing the
              * "event" object. */
             final POIFSDocumentPath path = event.getPath();
@@ -342,21 +323,16 @@ public class CopyCompare
 
             Throwable t = null;
 
-            try
-            {
+            try {
                 /* Find out whether the current document is a property set
                  * stream or not. */
-                if (PropertySet.isPropertySetStream(stream))
-                {
+                if (PropertySet.isPropertySetStream(stream)) {
                     /* Yes, the current document is a property set stream.
                      * Let's create a PropertySet instance from it. */
                     PropertySet ps = null;
-                    try
-                    {
+                    try {
                         ps = PropertySetFactory.create(stream);
-                    }
-                    catch (NoPropertySetStreamException ex)
-                    {
+                    } catch (NoPropertySetStreamException ex) {
                         /* This exception will not be thrown because we already
                          * checked above. */
                     }
@@ -364,22 +340,16 @@ public class CopyCompare
                     /* Copy the property set to the destination POI file
                      * system. */
                     copy(poiFs, path, name, ps);
-                }
-                else
+                } else {
                     /* No, the current document is not a property set stream. We
                      * copy it unmodified to the destination POIFS. */
                     copy(poiFs, event.getPath(), event.getName(), stream);
-            }
-            catch (MarkUnsupportedException ex)
-            {
+                }
+            } catch (MarkUnsupportedException ex) {
                 t = ex;
-            }
-            catch (IOException ex)
-            {
+            } catch (IOException ex) {
                 t = ex;
-            }
-            catch (WritingNotSupportedException ex)
-            {
+            } catch (WritingNotSupportedException ex) {
                 t = ex;
             }
 
@@ -388,8 +358,7 @@ public class CopyCompare
              * lines check whether a checked exception occured and throws an
              * unchecked exception. The message of that exception is that of
              * the underlying checked exception. */
-            if (t != null)
-            {
+            if (t != null) {
                 throw new HPSFRuntimeException
                     ("Could not read file \"" + path + "/" + name +
                      "\". Reason: " + Util.toString(t));
@@ -412,8 +381,7 @@ public class CopyCompare
                          final POIFSDocumentPath path,
                          final String name,
                          final PropertySet ps)
-            throws WritingNotSupportedException, IOException
-        {
+        throws WritingNotSupportedException, IOException {
             final DirectoryEntry de = getPath(poiFs, path);
             final MutablePropertySet mps = new MutablePropertySet(ps);
             de.createDocument(name, mps.toInputStream());
@@ -434,13 +402,14 @@ public class CopyCompare
         public void copy(final POIFSFileSystem poiFs,
                          final POIFSDocumentPath path,
                          final String name,
-                         final DocumentInputStream stream) throws IOException
-        {
+                         final DocumentInputStream stream)
+        throws IOException {
             final DirectoryEntry de = getPath(poiFs, path);
             final ByteArrayOutputStream out = new ByteArrayOutputStream();
             int c;
-            while ((c = stream.read()) != -1)
+            while ((c = stream.read()) != -1) {
                 out.write(c);
+            }
             stream.close();
             out.close();
             final InputStream in =
@@ -455,8 +424,7 @@ public class CopyCompare
          * @throws FileNotFoundException
          * @throws IOException
          */
-        public void close() throws FileNotFoundException, IOException
-        {
+        public void close() throws FileNotFoundException, IOException {
             out = new FileOutputStream(dstName);
             poiFs.writeFilesystem(out);
             out.close();
@@ -467,7 +435,7 @@ public class CopyCompare
         /** Contains the directory paths that have already been created in the
          * output POI filesystem and maps them to their corresponding
          * {@link org.apache.poi.poifs.filesystem.DirectoryNode}s. */
-        private final Map paths = new HashMap();
+        private final Map<String,DirectoryEntry> paths = new HashMap<String,DirectoryEntry>();
 
 
 
@@ -495,13 +463,11 @@ public class CopyCompare
          * should use this {@link DirectoryEntry} to create documents in it.
          */
         public DirectoryEntry getPath(final POIFSFileSystem poiFs,
-                                      final POIFSDocumentPath path)
-        {
-            try
-            {
+                                      final POIFSDocumentPath path) {
+            try {
                 /* Check whether this directory has already been created. */
                 final String s = path.toString();
-                DirectoryEntry de = (DirectoryEntry) paths.get(s);
+                DirectoryEntry de = paths.get(s);
                 if (de != null)
                     /* Yes: return the corresponding DirectoryEntry. */
                     return de;
@@ -509,12 +475,11 @@ public class CopyCompare
                 /* No: We have to create the directory - or return the root's
                  * DirectoryEntry. */
                 int l = path.length();
-                if (l == 0)
+                if (l == 0) {
                     /* Get the root directory. It does not have to be created
                      * since it always exists in a POIFS. */
                     de = poiFs.getRoot();
-                else
-                {
+                } else {
                     /* Create a subordinate directory. The first step is to
                      * ensure that the parent directory exists: */
                     de = getPath(poiFs, path.getParent());
@@ -524,9 +489,7 @@ public class CopyCompare
                 }
                 paths.put(s, de);
                 return de;
-            }
-            catch (IOException ex)
-            {
+            } catch (IOException ex) {
                 /* This exception will be thrown if the directory already
                  * exists. However, since we have full control about directory
                  * creation we can ensure that this will never happen. */
index 00749ab4d26aeef00c7c7de0711f65691f109927..05cba5c921c5df23c1778a753b4bdd1c58893ffe 100644 (file)
@@ -114,7 +114,9 @@ public class WriteAuthorAndTitle
         final POIFSReader r = new POIFSReader();
         final ModifySICopyTheRest msrl = new ModifySICopyTheRest(dstName);
         r.registerListener(msrl);
-        r.read(new FileInputStream(srcName));
+        FileInputStream fis = new FileInputStream(srcName);
+        r.read(fis);
+        fis.close();
         
         /* Write the new POIFS to disk. */
         msrl.close();
index a3054d9d74fd7b4ac943d9ea39b28fde3f53f59f..0f98c2b2e29a827121f054ad2698201e0bf3fbab 100644 (file)
@@ -201,6 +201,8 @@ public class BusinessPlan {
         FileOutputStream out = new FileOutputStream(file);
         wb.write(out);
         out.close();
+        
+        wb.close();
     }
 
     /**
index 8dab14fa7a39cb53b7c74873cd69335d71fcf31e..7bf8c55e8518f037b52563a5fc64b99e321d2651 100644 (file)
@@ -80,6 +80,8 @@ public class CellStyleDetails {
            \r
            System.out.println();\r
         }\r
+        \r
+        wb.close();\r
     }\r
     \r
     private static String renderColor(Color color) {\r
index 2239122e1b242ee7213e4b27320f00e39f7de3a1..074029988e3841867346ea3052bc2ec3a148fccd 100644 (file)
@@ -91,6 +91,8 @@ public class BigGridDemo {
         FileOutputStream out = new FileOutputStream("big-grid.xlsx");
         substitute(new File("template.xlsx"), tmp, sheetRef.substring(1), out);
         out.close();
+        
+        wb.close();
     }
 
     /**
index 92eb1a82d5d388c48a6360ead16707102fff296a..d7d5b6a3ff006488f765fd0c7917ac4038de2477 100644 (file)
@@ -89,6 +89,7 @@ public abstract class AbstractFileHandler implements FileHandler {
             assertNotNull(extractor.getText());\r
             \r
             // also try metadata\r
+            @SuppressWarnings("resource")\r
             POITextExtractor metadataExtractor = extractor.getMetadataTextExtractor();\r
             assertNotNull(metadataExtractor.getText());\r
 \r
index 4d6acf96273f286b9e62bf2efc067e26e8f4b538..256d0230f71e0a139e0c7c6131a1ad5aa6271362 100644 (file)
@@ -32,7 +32,6 @@ import org.apache.poi.hssf.model.InternalWorkbook;
 import org.apache.poi.hssf.record.DrawingGroupRecord;\r
 import org.apache.poi.hssf.usermodel.HSSFPatriarch;\r
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;\r
-import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;\r
 import org.apache.poi.util.StringUtil;\r
 \r
 /**\r
@@ -133,16 +132,15 @@ public class BiffDrawingToXml {
     }\r
 \r
     public static void writeToFile(OutputStream fos, InputStream xlsWorkbook, boolean excludeWorkbookRecords, String[] params) throws IOException {\r
-        NPOIFSFileSystem fs = new NPOIFSFileSystem(xlsWorkbook);\r
-        HSSFWorkbook workbook = new HSSFWorkbook(fs);\r
+        HSSFWorkbook workbook = new HSSFWorkbook(xlsWorkbook);\r
         InternalWorkbook internalWorkbook = workbook.getInternalWorkbook();\r
         DrawingGroupRecord r = (DrawingGroupRecord) internalWorkbook.findFirstRecordBySid(DrawingGroupRecord.sid);\r
-        r.decode();\r
 \r
         StringBuilder builder = new StringBuilder();\r
         builder.append("<workbook>\n");\r
         String tab = "\t";\r
-        if (!excludeWorkbookRecords) {\r
+        if (!excludeWorkbookRecords && r != null) {\r
+            r.decode();\r
             List<EscherRecord> escherRecords = r.getEscherRecords();\r
             for (EscherRecord record : escherRecords) {\r
                 builder.append(record.toXml(tab));\r
@@ -160,6 +158,7 @@ public class BiffDrawingToXml {
         builder.append("</workbook>\n");\r
         fos.write(builder.toString().getBytes(StringUtil.UTF8));\r
         fos.close();\r
+        workbook.close();\r
     }\r
 \r
 }\r
index a2d3d6f0e11ca4d3b04018bec32503de16f4d2f6..5fb39d92160034e3aa023b85d3c2a67aab20a634 100644 (file)
@@ -116,6 +116,7 @@ public class BinaryRC4Decryptor extends Decryptor {
         return skey;\r
     }\r
 \r
+    @SuppressWarnings("resource")\r
     public InputStream getDataStream(DirectoryNode dir) throws IOException,\r
             GeneralSecurityException {\r
         DocumentInputStream dis = dir.createDocumentInputStream(DEFAULT_POIFS_ENTRY);\r
index e3f84143955efe80b942df20205e7b1e098f278c..09f82e5a6afa8f0cbbdcc6ae61fcdd015e866c10 100644 (file)
@@ -57,13 +57,13 @@ public class CryptoAPIDecryptor extends Decryptor {
         Cipher cipher;\r
         byte oneByte[] = { 0 };\r
         \r
-        public void seek(int pos) {\r
-            if (pos > count) {\r
-                throw new ArrayIndexOutOfBoundsException(pos);\r
+        public void seek(int newpos) {\r
+            if (newpos > count) {\r
+                throw new ArrayIndexOutOfBoundsException(newpos);\r
             }\r
             \r
-            this.pos = pos;\r
-            mark = pos;\r
+            this.pos = newpos;\r
+            mark = newpos;\r
         }\r
 \r
         public void setBlock(int block) throws GeneralSecurityException {\r
@@ -233,9 +233,11 @@ public class CryptoAPIDecryptor extends Decryptor {
             sbis.setBlock(entry.block);\r
             InputStream is = new BoundedInputStream(sbis, entry.streamSize);\r
             fsOut.createDocument(is, entry.streamName);\r
+            is.close();\r
         }\r
 \r
         leis.close();\r
+        sbis.close();\r
         sbis = null;\r
         bos.reset();\r
         fsOut.writeFilesystem(bos);\r
index 00d2f77e33fb9d9fc00189de92dda1df1741ebd2..a6d6dbfa0b2847555fc84c928cc96b6d6dab6ec6 100644 (file)
@@ -122,6 +122,7 @@ public class StandardDecryptor extends Decryptor {
         return CryptoFunctions.getCipher(key, em.getCipherAlgorithm(), cm, null, Cipher.DECRYPT_MODE);
     }
 
+    @SuppressWarnings("resource")
     public InputStream getDataStream(DirectoryNode dir) throws IOException {
         DocumentInputStream dis = dir.createDocumentInputStream(DEFAULT_POIFS_ENTRY);
 
index ae6304fbb5c2d2e99cba958fad2a8b3247a83cf9..b782d8329947a080480233d8435523277fc2df30 100644 (file)
@@ -123,14 +123,9 @@ public class StandardEncryptor extends Encryptor {
         protected long countBytes;\r
         protected final File fileOut;\r
         protected final DirectoryNode dir;\r
-        \r
-        protected StandardCipherOutputStream(DirectoryNode dir) throws IOException {\r
-            super(null);\r
-\r
-            this.dir = dir;\r
-            fileOut = TempFile.createTempFile("encrypted_package", "crypt");\r
-            FileOutputStream rawStream = new FileOutputStream(fileOut);\r
 \r
+        @SuppressWarnings("resource")\r
+        private StandardCipherOutputStream(DirectoryNode dir, File fileOut) throws IOException {\r
             // although not documented, we need the same padding as with agile encryption\r
             // and instead of calculating the missing bytes for the block size ourselves\r
             // we leave it up to the CipherOutputStream, which generates/saves them on close()\r
@@ -141,9 +136,15 @@ public class StandardEncryptor extends Encryptor {
             // KeyData.blockSize value. Any padding bytes can be used. Note that the StreamSize\r
             // field of the EncryptedPackage field specifies the number of bytes of \r
             // unencrypted data as specified in section 2.3.4.4.\r
-            CipherOutputStream cryptStream = new CipherOutputStream(rawStream, getCipher(getSecretKey(), "PKCS5Padding"));\r
-            \r
-            this.out = cryptStream;\r
+            super(\r
+                new CipherOutputStream(new FileOutputStream(fileOut), getCipher(getSecretKey(), "PKCS5Padding"))   \r
+            );\r
+            this.fileOut = fileOut;\r
+            this.dir = dir;\r
+        }\r
+        \r
+        protected StandardCipherOutputStream(DirectoryNode dir) throws IOException {\r
+            this(dir, TempFile.createTempFile("encrypted_package", "crypt"));\r
         }\r
         \r
         @Override\r
index a288709185a83e3465bd2db86234951237881be6..439f47e76159ca296db9717d6cebb3fa5eb6f858 100644 (file)
@@ -212,13 +212,13 @@ public class POIFSReader
 
     private void processProperties(final BlockList small_blocks,
                                    final BlockList big_blocks,
-                                   final Iterator properties,
+                                   final Iterator<Property> properties,
                                    final POIFSDocumentPath path)
         throws IOException
     {
         while (properties.hasNext())
         {
-            Property property = ( Property ) properties.next();
+            Property property = properties.next();
             String   name     = property.getName();
 
             if (property.isDirectory())
@@ -235,8 +235,8 @@ public class POIFSReader
             }
             else
             {
-                int      startBlock = property.getStartBlock();
-                Iterator listeners  = registry.getListeners(path, name);
+                int startBlock = property.getStartBlock();
+                Iterator<POIFSReaderListener> listeners  = registry.getListeners(path, name);
 
                 if (listeners.hasNext())
                 {
@@ -257,8 +257,7 @@ public class POIFSReader
                     }
                     while (listeners.hasNext())
                     {
-                        POIFSReaderListener listener =
-                            ( POIFSReaderListener ) listeners.next();
+                        POIFSReaderListener listener = listeners.next();
 
                         listener.processPOIFSReaderEvent(
                             new POIFSReaderEvent(
@@ -303,6 +302,7 @@ public class POIFSReader
 
         public void processPOIFSReaderEvent(final POIFSReaderEvent event)
         {
+            @SuppressWarnings("resource")
             DocumentInputStream istream = event.getStream();
             POIFSDocumentPath   path    = event.getPath();
             String              name    = event.getName();
index ab8d905041be478249c8165c1ed066f57c84630a..972780a060e57f2207016086999b485b47e7b623 100644 (file)
@@ -205,7 +205,8 @@ public final class CellUtil {
         * @since POI 3.14 beta 2
         */
        public static void setCellStyleProperties(Cell cell, Map<String, Object> properties) {
-               Workbook workbook = cell.getSheet().getWorkbook();
+               @SuppressWarnings("resource")
+        Workbook workbook = cell.getSheet().getWorkbook();
                CellStyle originalStyle = cell.getCellStyle();
                CellStyle newStyle = null;
                Map<String, Object> values = getFormatProperties(originalStyle);
index 947ab212d7352abdc185bd7e8c0ead2c3704745c..76f4e2bf1b12385a6def7f3b5a2b120401265d25 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.poi.ss.usermodel;
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.IOException;
+
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.xssf.streaming.SXSSFCell;
@@ -38,17 +40,19 @@ public abstract class BaseTestXCell extends BaseTestCell {
     }
 
     @Test
-    public void testXmlEncoding(){
-        Workbook wb = _testDataProvider.createWorkbook();
-        Sheet sh = wb.createSheet();
+    public void testXmlEncoding() throws IOException {
+        Workbook wb1 = _testDataProvider.createWorkbook();
+        Sheet sh = wb1.createSheet();
         Row row = sh.createRow(0);
         Cell cell = row.createCell(0);
         String sval = "\u0000\u0002\u0012<>\t\n\u00a0 &\"POI\'\u2122";
         cell.setCellValue(sval);
 
-        wb = _testDataProvider.writeOutAndReadBack(wb);
+        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
+        wb1.close();
 
         // invalid characters are replaced with question marks
-        assertEquals("???<>\t\n\u00a0 &\"POI\'\u2122", wb.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
+        assertEquals("???<>\t\n\u00a0 &\"POI\'\u2122", wb2.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
+        wb2.close();
     }
 }
index b20670645f04c2c5cee5cc0278b93530cb1f1260..f6b4e632b47a78d3e5a5208e204a19d24f311341 100644 (file)
@@ -20,9 +20,6 @@ package org.apache.poi.xssf.usermodel;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.ss.usermodel.BaseTestSheetHiding;
 
-/**
- * @author Yegor Kozlov
- */
 public final class TestSheetHiding extends BaseTestSheetHiding {
     public TestSheetHiding() {
         super(XSSFITestDataProvider.instance,
index 8d0d439d02f7d0349a181875a0d104370e031642..4a0fe8274c11794529d595347c5fe24371547e7d 100644 (file)
@@ -66,7 +66,7 @@ public final class TestXSSFCell extends BaseTestXCell {
      * Shared String Table
      */
     @Test
-    public void test47026_1() throws Exception {
+    public void test47026_1() throws IOException {
         Workbook wb = _testDataProvider.openSampleWorkbook("47026.xlsm");
         Sheet sheet = wb.getSheetAt(0);
         Row row = sheet.getRow(0);
@@ -77,7 +77,7 @@ public final class TestXSSFCell extends BaseTestXCell {
     }
 
     @Test
-    public void test47026_2() throws Exception {
+    public void test47026_2() throws IOException {
         Workbook wb = _testDataProvider.openSampleWorkbook("47026.xlsm");
         Sheet sheet = wb.getSheetAt(0);
         Row row = sheet.getRow(0);
@@ -95,7 +95,7 @@ public final class TestXSSFCell extends BaseTestXCell {
      * instead of using the shared string table. See bug 47206
      */
     @Test
-    public void testInlineString() throws Exception {
+    public void testInlineString() throws IOException {
         XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("xlsx-jdbc.xlsx");
         XSSFSheet sheet = wb.getSheetAt(0);
         XSSFRow row = sheet.getRow(1);
@@ -121,7 +121,7 @@ public final class TestXSSFCell extends BaseTestXCell {
      *  Bug 47278 -  xsi:nil attribute for <t> tag caused Excel 2007 to fail to open workbook
      */
     @Test
-    public void test47278() throws Exception {
+    public void test47278() throws IOException {
         XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.createWorkbook();
         Sheet sheet = wb.createSheet();
         Row row = sheet.createRow(0);
@@ -187,7 +187,7 @@ public final class TestXSSFCell extends BaseTestXCell {
      * Bug 47889: problems when calling XSSFCell.getStringCellValue() on a workbook created in Gnumeric
      */
     @Test
-    public void test47889() throws Exception {
+    public void test47889() throws IOException {
         XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("47889.xlsx");
         XSSFSheet sh = wb.getSheetAt(0);
 
@@ -214,7 +214,7 @@ public final class TestXSSFCell extends BaseTestXCell {
     }
 
     @Test
-    public void testMissingRAttribute() throws Exception {
+    public void testMissingRAttribute() throws IOException {
         XSSFWorkbook wb1 = new XSSFWorkbook();
         XSSFSheet sheet = wb1.createSheet();
         XSSFRow row = sheet.createRow(0);
@@ -269,7 +269,7 @@ public final class TestXSSFCell extends BaseTestXCell {
     }
 
     @Test
-    public void testMissingRAttributeBug54288() throws Exception {
+    public void testMissingRAttributeBug54288() throws IOException {
         // workbook with cells missing the R attribute
         XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("54288.xlsx");
         // same workbook re-saved in Excel 2010, the R attribute is updated for every cell with the right value.
@@ -453,7 +453,7 @@ public final class TestXSSFCell extends BaseTestXCell {
     }
 
     @Test
-    public void testEncodingbeloAscii() throws Exception {
+    public void testEncodingbeloAscii() throws IOException {
         StringBuffer sb = new StringBuffer();
         // test all possible characters
         for(int i = 0; i < Character.MAX_VALUE; i++) {
index 70e4d91700fd6cbae73e64a76b26867767be3a39..219b8423cc7771996fde74fe9e3fc29769330087 100644 (file)
@@ -24,12 +24,7 @@ import org.apache.poi.xssf.XSSFITestDataProvider;
  * Tests setting and evaluating user-defined functions in HSSF
  */
 public final class TestXSSFExternalFunctions extends BaseTestExternalFunctions {
-
        public TestXSSFExternalFunctions() {
-               super(XSSFITestDataProvider.instance);
+               super(XSSFITestDataProvider.instance, "atp.xlsx");
        }
-
-    public void testATP(){
-        baseTestInvokeATP("atp.xlsx");
-    }
 }
index d683a99c35627d175d7dfe48198968662df2c9da..a3da6c7c24217566e96616e3badc5d929d720d68 100644 (file)
 
 package org.apache.poi.xssf.usermodel;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 
@@ -27,14 +30,12 @@ import org.apache.poi.ss.usermodel.Comment;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellUtil;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.junit.Test;
 
-/**
- * @author Yegor Kozlov
- */
 public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
 
     public TestXSSFSheetShiftRows(){
@@ -43,7 +44,8 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
 
     @Override
     @Test
-       public void testShiftRowBreaks() { // disabled test from superclass
+       public void testShiftRowBreaks() {
+        // disabled test from superclass
         // TODO - support shifting of page breaks
     }
 
@@ -85,10 +87,10 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
                // org.apache.xmlbeans.impl.values.XmlValueDisconnectedException.
                // NOTE: another negative shift on another group of rows is successful, provided no new rows in  
                // place of previously shifted rows were attempted to be created as explained above.
-               testSheet.shiftRows(6, 7, 1);   // -- CHANGE the shift to positive once the behaviour of  
-                                                                               // the above has been tested
+
+               // -- CHANGE the shift to positive once the behaviour of the above has been tested
+               testSheet.shiftRows(6, 7, 1); 
                
-               //saveReport(wb, new File("/tmp/53798.xlsx"));
                Workbook read = XSSFTestDataSamples.writeOutAndReadBack(wb);
                wb.close();
                assertNotNull(read);
@@ -131,7 +133,6 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         }
                testSheet.shiftRows(6, 6, 1);
                
-               //saveReport(wb, new File("/tmp/53798.xlsx"));
                Workbook read = XSSFTestDataSamples.writeOutAndReadBack(wb);
                wb.close();
                assertNotNull(read);
@@ -155,7 +156,7 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
 
         Sheet sheet = wb.getSheetAt(0);
 
-        Comment comment = sheet.getCellComment(0, 0);
+        Comment comment = sheet.getCellComment(new CellAddress(0, 0));
         assertNotNull(comment);
         assertEquals("Amdocs", comment.getAuthor());
         assertEquals("Amdocs:\ntest\n", comment.getString().getString());
@@ -163,22 +164,15 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         sheet.shiftRows(0, 1, 1);
 
         // comment in row 0 is gone
-        comment = sheet.getCellComment(0, 0);
+        comment = sheet.getCellComment(new CellAddress(0, 0));
         assertNull(comment);
         
         // comment is now in row 1
-        comment = sheet.getCellComment(1, 0);
+        comment = sheet.getCellComment(new CellAddress(1, 0));
         assertNotNull(comment);
         assertEquals("Amdocs", comment.getAuthor());
         assertEquals("Amdocs:\ntest\n", comment.getString().getString());
         
-//        FileOutputStream outputStream = new FileOutputStream("/tmp/56017.xlsx");
-//        try {
-//            wb.write(outputStream);
-//        } finally {
-//            outputStream.close();
-//        }
-        
         Workbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb);
         wb.close();
         assertNotNull(wbBack);
@@ -186,11 +180,11 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         Sheet sheetBack = wbBack.getSheetAt(0);
 
         // comment in row 0 is gone
-        comment = sheetBack.getCellComment(0, 0);
+        comment = sheetBack.getCellComment(new CellAddress(0, 0));
         assertNull(comment);
 
         // comment is now in row 1
-        comment = sheetBack.getCellComment(1, 0);
+        comment = sheetBack.getCellComment(new CellAddress(1, 0));
         assertNotNull(comment);
         assertEquals("Amdocs", comment.getAuthor());
         assertEquals("Amdocs:\ntest\n", comment.getString().getString());
@@ -211,7 +205,6 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         wbRead.removeSheetAt(0);
         assertEquals(0, wbRead.getActiveSheetIndex());
 
-        //wb.write(new FileOutputStream("/tmp/57171.xls"));
         wbRead.close();
     }
 
@@ -222,7 +215,6 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         wb.removeSheetAt(0);
         assertEquals(4, wb.getActiveSheetIndex());
 
-        //wb.write(new FileOutputStream("/tmp/57163.xls"));
         wb.close();
     }
 
@@ -320,7 +312,6 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         wb.close();
     }
 
-    // TODO: enable when bug 57165 is fixed
        @Test
     public void test57165() throws IOException {
         Workbook wb = XSSFTestDataSamples.openSampleWorkbook("57171_57163_57165.xlsx");
@@ -333,29 +324,17 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         wb.setSheetName(1, "New Sheet");
         assertEquals(0, wb.getActiveSheetIndex());
 
-        //wb.write(new FileOutputStream("/tmp/57165.xls"));
         wb.close();
     }
 
-//    public void test57165b() throws IOException {
-//        Workbook wb = new XSSFWorkbook();
-//        try {
-//            wb.createSheet("New Sheet 1");
-//            wb.createSheet("New Sheet 2");
-//        } finally {
-//            wb.close();
-//        }
-//    }
-
     private static void removeAllSheetsBut(int sheetIndex, Workbook wb) {
         int sheetNb = wb.getNumberOfSheets();
         // Move this sheet at the first position
         wb.setSheetOrder(wb.getSheetName(sheetIndex), 0);
         // Must make this sheet active (otherwise, for XLSX, Excel might protest that active sheet no longer exists)
         // I think POI should automatically handle this case when deleting sheets...
-//      wb.setActiveSheet(0);
-        for (int sn = sheetNb - 1; sn > 0; sn--)
-        {
+        // wb.setActiveSheet(0);
+        for (int sn = sheetNb - 1; sn > 0; sn--) {
             wb.removeSheetAt(sn);
         }
     }
@@ -365,33 +344,26 @@ public final class TestXSSFSheetShiftRows extends BaseTestSheetShiftRows {
         XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("57828.xlsx");
         XSSFSheet sheet = wb.getSheetAt(0);
 
-        Comment comment1 = sheet.getCellComment(2, 1);
+        Comment comment1 = sheet.getCellComment(new CellAddress(2, 1));
         assertNotNull(comment1);
 
-        Comment comment2 = sheet.getCellComment(2, 2);
+        Comment comment2 = sheet.getCellComment(new CellAddress(2, 2));
         assertNotNull(comment2);
 
-        Comment comment3 = sheet.getCellComment(1, 1);
+        Comment comment3 = sheet.getCellComment(new CellAddress(1, 1));
         assertNull("NO comment in (1,1) and it should be null", comment3);
 
         sheet.shiftRows(2, 2, -1);
 
-        comment3 = sheet.getCellComment(1, 1);
+        comment3 = sheet.getCellComment(new CellAddress(1, 1));
         assertNotNull("Comment in (2,1) moved to (1,1) so its not null now.", comment3);
 
-        comment1 = sheet.getCellComment(2, 1);
+        comment1 = sheet.getCellComment(new CellAddress(2, 1));
         assertNull("No comment currently in (2,1) and hence it is null", comment1);
 
-        comment2 = sheet.getCellComment(1, 2);
+        comment2 = sheet.getCellComment(new CellAddress(1, 2));
         assertNotNull("Comment in (2,2) should have moved as well because of shift rows. But its not", comment2);
         
-//        OutputStream stream = new FileOutputStream("/tmp/57828.xlsx");
-//        try {
-//             wb.write(stream);
-//        } finally {
-//             stream.close();
-//        }
-        
         wb.close();
     }
 }
index 992eb5e1bd81619f892c15ee2c1c678cac817077..9b72d9acd21761363cda5bb6a7789a0d36947fe5 100644 (file)
@@ -30,29 +30,37 @@ import org.apache.poi.POIDataSamples;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.LocaleUtil;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestEscherDump {
+    static NullPrinterStream nullPS;
+    
+    @BeforeClass
+    public static void init() throws UnsupportedEncodingException {
+        nullPS = new NullPrinterStream();
+    }
+    
     @Test
     public void testSimple() throws Exception {
         // simple test to at least cover some parts of the class
-        EscherDump.main(new String[] {}, new NullPrinterStream());
+        EscherDump.main(new String[] {}, nullPS);
         
-        new EscherDump().dump(0, new byte[] {}, new NullPrinterStream());
-        new EscherDump().dump(new byte[] {}, 0, 0, new NullPrinterStream());
-        new EscherDump().dumpOld(0, new ByteArrayInputStream(new byte[] {}), new NullPrinterStream());
+        new EscherDump().dump(0, new byte[] {}, nullPS);
+        new EscherDump().dump(new byte[] {}, 0, 0, nullPS);
+        new EscherDump().dumpOld(0, new ByteArrayInputStream(new byte[] {}), nullPS);
     }
 
     @Test
     public void testWithData() throws Exception {
-        new EscherDump().dumpOld(8, new ByteArrayInputStream(new byte[] { 00, 00, 00, 00, 00, 00, 00, 00 }), new NullPrinterStream());
+        new EscherDump().dumpOld(8, new ByteArrayInputStream(new byte[] { 00, 00, 00, 00, 00, 00, 00, 00 }), nullPS);
     }
 
     @Test
     public  void testWithSamplefile() throws Exception {
         //InputStream stream = HSSFTestDataSamples.openSampleFileStream(")
         byte[] data = POIDataSamples.getDDFInstance().readFile("Container.dat");
-        new EscherDump().dump(data.length, data, new NullPrinterStream());
+        new EscherDump().dump(data.length, data, nullPS);
         //new EscherDump().dumpOld(data.length, new ByteArrayInputStream(data), System.out);
         
         data = new byte[2586114];
@@ -72,6 +80,7 @@ public class TestEscherDump {
      * to redirect stdout to avoid spamming the console with output
      */
     private static class NullPrinterStream extends PrintStream {
+        @SuppressWarnings("resource")
         private NullPrinterStream() throws UnsupportedEncodingException {
             super(new NullOutputStream(),true,LocaleUtil.CHARSET_1252.name());
         }
index e240f270726eefd8a7ca66b6a03402121d3ae52f..fc2c832b3d41d97b00e1891dffdbec0f2f576a60 100644 (file)
@@ -849,10 +849,14 @@ public class TestWrite
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
 
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream);
+        sinfStream.close();
         assertEquals(131077, sinf.getOSVersion());
         
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream);
+        dinfStream.close();
         assertEquals(131077, dinf.getOSVersion());
         
         
@@ -874,10 +878,14 @@ public class TestWrite
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
         
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream2 = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream2);
+        sinfStream2.close();
         assertEquals(131077, sinf.getOSVersion());
         
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream2 = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream2);
+        dinfStream2.close();
         assertEquals(131077, dinf.getOSVersion());
 
         
@@ -896,16 +904,24 @@ public class TestWrite
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
 
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream3 = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream3);
+        sinfStream3.close();
         assertEquals(131077, sinf.getOSVersion());
         
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream3 = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream3);
+        dinfStream3.close();
         assertEquals(131077, dinf.getOSVersion());
         
         
         // Have them write themselves in-place with no changes, as an OutputStream
-        sinf.write(new NDocumentOutputStream(sinfDoc));
-        dinf.write(new NDocumentOutputStream(dinfDoc));
+        OutputStream soufStream = new NDocumentOutputStream(sinfDoc);
+        sinf.write(soufStream);
+        soufStream.close();
+        OutputStream doufStream = new NDocumentOutputStream(dinfDoc);
+        dinf.write(doufStream);
+        doufStream.close();
         
         // And also write to some bytes for checking
         ByteArrayOutputStream sinfBytes = new ByteArrayOutputStream();
@@ -918,17 +934,25 @@ public class TestWrite
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
 
-        byte[] sinfData = IOUtils.toByteArray(new NDocumentInputStream(sinfDoc));
-        byte[] dinfData = IOUtils.toByteArray(new NDocumentInputStream(dinfDoc));
+        InputStream sinfStream4 = new NDocumentInputStream(sinfDoc);
+        byte[] sinfData = IOUtils.toByteArray(sinfStream4);
+        sinfStream4.close();
+        InputStream dinfStream4 = new NDocumentInputStream(dinfDoc);
+        byte[] dinfData = IOUtils.toByteArray(dinfStream4);
+        dinfStream4.close();
         assertThat(sinfBytes.toByteArray(), equalTo(sinfData));
         assertThat(dinfBytes.toByteArray(), equalTo(dinfData));
 
         
         // Read back in as-is
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream5 = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream5);
+        sinfStream5.close();
         assertEquals(131077, sinf.getOSVersion());
         
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream5 = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream5);
+        dinfStream5.close();
         assertEquals(131077, dinf.getOSVersion());
         
         assertEquals("Reiichiro Hori", sinf.getAuthor());
@@ -946,17 +970,25 @@ public class TestWrite
         
         
         // Save this into the filesystem
-        sinf.write(new NDocumentOutputStream(sinfDoc));
-        dinf.write(new NDocumentOutputStream(dinfDoc));
+        OutputStream soufStream2 = new NDocumentOutputStream(sinfDoc);
+        sinf.write(soufStream2);
+        soufStream2.close();
+        OutputStream doufStream2 = new NDocumentOutputStream(dinfDoc);
+        dinf.write(doufStream2);
+        doufStream2.close();
         
         
         // Read them back in again
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream6 = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream6);
+        sinfStream6.close();
         assertEquals(131077, sinf.getOSVersion());
         
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream6 = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream6);
+        dinfStream6.close();
         assertEquals(131077, dinf.getOSVersion());
 
         assertEquals("Changed Author", sinf.getAuthor());
@@ -976,11 +1008,15 @@ public class TestWrite
         
         // Re-check on load
         sinfDoc = (DocumentNode)root.getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
-        sinf = (SummaryInformation)PropertySetFactory.create(new NDocumentInputStream(sinfDoc));
+        InputStream sinfStream7 = new NDocumentInputStream(sinfDoc);
+        sinf = (SummaryInformation)PropertySetFactory.create(sinfStream7);
+        sinfStream7.close();
         assertEquals(131077, sinf.getOSVersion());
         
         dinfDoc = (DocumentNode)root.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME);
-        dinf = (DocumentSummaryInformation)PropertySetFactory.create(new NDocumentInputStream(dinfDoc));
+        InputStream dinfStream7 = new NDocumentInputStream(dinfDoc);
+        dinf = (DocumentSummaryInformation)PropertySetFactory.create(dinfStream7);
+        dinfStream7.close();
         assertEquals(131077, dinf.getOSVersion());
 
         assertEquals("Changed Author", sinf.getAuthor());
index 14e217be327b310afcd6c91cd1984c012b61dcb8..bdb26aa85ef91cc1ce9c86162efd0092ce98f114 100644 (file)
@@ -97,15 +97,20 @@ public abstract class BaseXLSIteratingTest {
                        
                        // try to read it in HSSFWorkbook to quickly fail if we cannot read the file there at all and thus probably should use EXCLUDED instead
                        FileInputStream stream = new FileInputStream(file);
+                       HSSFWorkbook wb = null;
                        try {
-                               assertNotNull(new HSSFWorkbook(stream));
+                           wb = new HSSFWorkbook(stream);
+                               assertNotNull(wb);
                        } finally {
+                           if (wb != null) {
+                               wb.close();
+                           }
                                stream.close();
                        }
                }
        }
 
-       abstract void runOneFile(File file) throws Exception;
+       abstract void runOneFile(File pFile) throws Exception;
 
        /**
         * Implementation of an OutputStream which does nothing, used
index 2a14b906ca2d0ac6325a697648217c52a76a99ee..039a1535002ddeab5967f4d2f53f09e911adfc02 100644 (file)
@@ -21,33 +21,30 @@ import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.PrintStream;
 
-import org.junit.Ignore;
-import org.junit.Test;
-
 public class TestBiffDrawingToXml extends BaseXLSIteratingTest {
        static {
-               // TODO: is it ok to fail these? 
-               // Look at the output of the test for the detailed stacktrace of the failures...
-//             EXCLUDED.add("password.xls"); 
-//             EXCLUDED.add("XRefCalc.xls"); 
-//             EXCLUDED.add("43493.xls");
-//             EXCLUDED.add("51832.xls"); 
-       }
-       
-       @Override
-       @Ignore("Not yet done, nearly all files fail with various errors, remove this method when done to use the one from the abstract base class!...")
-       @Test
-       public void testMain() throws Exception {
+        EXCLUDED.add("35897-type4.xls"); // unsupported crypto api header 
+        EXCLUDED.add("43493.xls");  // HSSFWorkbook cannot open it as well
+        EXCLUDED.add("46904.xls");
+        EXCLUDED.add("44958_1.xls");
+        EXCLUDED.add("51832.xls");
+        EXCLUDED.add("59074.xls");
+               EXCLUDED.add("password.xls"); 
+        EXCLUDED.add("testEXCEL_2.xls");  // Biff 2 / Excel 2, pre-OLE2
+        EXCLUDED.add("testEXCEL_3.xls");  // Biff 3 / Excel 3, pre-OLE2
+        EXCLUDED.add("testEXCEL_4.xls");  // Biff 4 / Excel 4, pre-OLE2
+        EXCLUDED.add("testEXCEL_5.xls");  // Biff 5 / Excel 5
+        EXCLUDED.add("testEXCEL_95.xls"); // Biff 5 / Excel 95
+               EXCLUDED.add("xor-encryption-abc.xls"); 
        }
        
        @Override
-       void runOneFile(File file)
-                       throws Exception {
+       void runOneFile(File pFile) throws Exception {
                PrintStream save = System.out;
                try {
                        //System.setOut(new PrintStream(TestBiffViewer.NULL_OUTPUT_STREAM));
                        // use a NullOutputStream to not write the bytes anywhere for best runtime 
-                   InputStream wb = new FileInputStream(file);
+                   InputStream wb = new FileInputStream(pFile);
                    try {
                        BiffDrawingToXml.writeToFile(NULL_OUTPUT_STREAM, wb, false, new String[] {});
                    } finally {
index c62c36522317683ebc38a01138cf146e27e5518a..df03e33fa3d625b9044164a85e98d38c899a5b74 100644 (file)
 package org.apache.poi.hssf.model;\r
 \r
 import static org.junit.Assert.assertArrayEquals;\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
 \r
 import java.io.ByteArrayInputStream;\r
 import java.io.ByteArrayOutputStream;\r
@@ -28,8 +32,9 @@ import java.util.Arrays;
 import java.util.HashMap;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.zip.GZIPInputStream;\r
 \r
-import junit.framework.TestCase;\r
+import javax.xml.bind.DatatypeConverter;\r
 \r
 import org.apache.poi.ddf.DefaultEscherRecordFactory;\r
 import org.apache.poi.ddf.EscherContainerRecord;\r
@@ -37,20 +42,27 @@ import org.apache.poi.ddf.EscherDggRecord;
 import org.apache.poi.ddf.EscherRecord;\r
 import org.apache.poi.ddf.EscherRecordFactory;\r
 import org.apache.poi.hssf.HSSFTestDataSamples;\r
-import org.apache.poi.hssf.record.*;\r
+import org.apache.poi.hssf.record.ContinueRecord;\r
+import org.apache.poi.hssf.record.DrawingRecord;\r
+import org.apache.poi.hssf.record.EOFRecord;\r
+import org.apache.poi.hssf.record.EscherAggregate;\r
+import org.apache.poi.hssf.record.NoteRecord;\r
+import org.apache.poi.hssf.record.ObjRecord;\r
+import org.apache.poi.hssf.record.Record;\r
+import org.apache.poi.hssf.record.RecordBase;\r
+import org.apache.poi.hssf.record.RecordFactory;\r
+import org.apache.poi.hssf.record.TextObjectRecord;\r
+import org.apache.poi.hssf.record.WindowTwoRecord;\r
 import org.apache.poi.hssf.record.aggregates.RowRecordsAggregate;\r
 import org.apache.poi.hssf.usermodel.HSSFPatriarch;\r
 import org.apache.poi.hssf.usermodel.HSSFSheet;\r
 import org.apache.poi.hssf.usermodel.HSSFTestHelper;\r
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;\r
 import org.apache.poi.util.HexDump;\r
-import org.apache.poi.util.HexRead;\r
+import org.apache.poi.util.IOUtils;\r
+import org.junit.Test;\r
 \r
-/**\r
- * @author Yegor Kozlov\r
- * @author Evgeniy Berlog\r
- */\r
-public class TestDrawingAggregate extends TestCase {\r
+public class TestDrawingAggregate {\r
     /**\r
      *  information about drawing aggregate in a worksheet\r
      */\r
@@ -123,7 +135,7 @@ public class TestDrawingAggregate extends TestCase {
      *\r
      * The assertion is strict meaning that the drawing data before and after save must be equal.\r
      */\r
-    private static void assertWriteAndReadBack(HSSFWorkbook wb){\r
+    private static void assertWriteAndReadBack(HSSFWorkbook wb) throws IOException {\r
         // map aggregate info by sheet index\r
         Map<Integer, DrawingAggregateInfo> aggs = new HashMap<Integer, DrawingAggregateInfo>();\r
         for(int i = 0; i < wb.getNumberOfSheets(); i++){\r
@@ -159,6 +171,7 @@ public class TestDrawingAggregate extends TestCase {
                             Arrays.equals(dgBytes1, dgBytes2));\r
                 }\r
             }\r
+            wb2.close();\r
         }\r
     }\r
 \r
@@ -166,7 +179,8 @@ public class TestDrawingAggregate extends TestCase {
      * test that we correctly read and write drawing aggregates\r
      *  in all .xls files in POI test samples\r
      */\r
-    public void testAllTestSamples(){\r
+    @Test\r
+    public void testAllTestSamples() throws IOException {\r
         File[] xls = new File(System.getProperty("POI.testdata.path"), "spreadsheet").listFiles(\r
                 new FilenameFilter() {\r
                     @Override\r
@@ -196,61 +210,53 @@ public class TestDrawingAggregate extends TestCase {
                 \r
                 fail("Error when writing and re-reading workbook " + filename + "\n" + e);\r
             }\r
+            wb.close();\r
         }\r
     }\r
 \r
     /**\r
-     * when reading incomplete data ensure that the serialized bytes\r
-     match the source\r
+     * when reading incomplete data ensure that the serialized bytes match the source\r
      */\r
-    public void testIncompleteData(){\r
+    @Test\r
+    public void testIncompleteData() throws IOException {\r
         //EscherDgContainer and EscherSpgrContainer length exceeds the actual length of the data\r
-        String hex =\r
-                " 0F 00 02 F0 30 03 00 00 10 00 08 F0 08 00 00 " +\r
-                " 00 07 00 00 00 B2 04 00 00 0F 00 03 F0 18 03 00 " +\r
-                " 00 0F 00 04 F0 28 00 00 00 01 00 09 F0 10 00 00 " +\r
-                " 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                " 00 02 00 0A F0 08 00 00 00 00 04 00 00 05 00 00 " +\r
-                " 00 0F 00 04 F0 74 00 00 00 92 0C 0A F0 08 00 00 " +\r
-                " 00 AD 04 00 00 00 0A 00 00 63 00 0B F0 3A 00 00 " +\r
-                " 00 7F 00 04 01 E5 01 BF 00 08 00 08 00 81 01 4E " +\r
-                " 00 00 08 BF 01 10 00 10 00 80 C3 16 00 00 00 BF " +\r
-                " 03 00 00 02 00 44 00 69 00 61 00 67 00 72 00 61 " +\r
-                " 00 6D 00 6D 00 20 00 32 00 00 00 00 00 10 F0 12 " +\r
-                " 00 00 00 00 00 05 00 00 00 01 00 00 00 0B 00 00 " +\r
-                " 00 0F 00 66 00 00 00 11 F0 00 00 00 00 ";\r
-        byte[] buffer = HexRead.readFromString(hex);\r
+        String data =\r
+            "H4sIAAAAAAAAAGWOOw7CQAxE32YTsSRIWSgQJSUloqSm5g4ICURBg+iBK3APGi6wBWeh9xGYbEps2WON"+\r
+            "P+OWwpYeIsECMFC8S2jxNvMdlrYQ5xha5N8K6ryHdir6+avwOer5l3hq2NPYWuWN0n1dIsgfbgshuSj1"+\r
+            "+2eqbvLdxQ0ndhy5KJ/lc1ZZK9okY5X/gSbrHZTH1vE/ozagTcwAAAA=";\r
+        byte[] base64Bytes = DatatypeConverter.parseBase64Binary(data);\r
+        byte[] dgBytes = IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(base64Bytes)));\r
 \r
         List<EscherRecord> records = new ArrayList<EscherRecord>();\r
         EscherRecordFactory recordFactory = new DefaultEscherRecordFactory();\r
         int pos = 0;\r
-        while (pos < buffer.length) {\r
-            EscherRecord r = recordFactory.createRecord(buffer, pos);\r
-            int bytesRead = r.fillFields(buffer, pos, recordFactory);\r
+        while (pos < dgBytes.length) {\r
+            EscherRecord r = recordFactory.createRecord(dgBytes, pos);\r
+            int bytesRead = r.fillFields(dgBytes, pos, recordFactory);\r
             records.add(r);\r
             pos += bytesRead;\r
         }\r
-        assertEquals("data was not fully read", buffer.length, pos);\r
+        assertEquals("data was not fully read", dgBytes.length, pos);\r
 \r
         // serialize to byte array\r
         ByteArrayOutputStream out = new ByteArrayOutputStream();\r
-        try {\r
-            for(EscherRecord r : records) out.write(r.serialize());\r
-        } catch (IOException e){\r
-            throw new RuntimeException(e);\r
+        for(EscherRecord r : records) {\r
+            out.write(r.serialize());\r
         }\r
-        assertEquals(HexDump.toHex(buffer, 10), HexDump.toHex(out.toByteArray(), 10));\r
+        assertEquals(HexDump.toHex(dgBytes, 10), HexDump.toHex(out.toByteArray(), 10));\r
     }\r
 \r
     /**\r
      * TODO: figure out why it fails with "RecordFormatException: 0 bytes written but getRecordSize() reports 80"\r
      */\r
-    public void testFailing(){\r
+    @Test\r
+    public void testFailing() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("15573.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
         sh.getDrawingPatriarch();\r
 \r
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);\r
+        HSSFTestDataSamples.writeOutAndReadBack(wb).close();\r
+        wb.close();\r
     }\r
 \r
     private static byte[] toByteArray(List<RecordBase> records) {\r
@@ -266,9 +272,10 @@ public class TestDrawingAggregate extends TestCase {
         return out.toByteArray();\r
     }\r
 \r
+    @Test\r
     public void testSolverContainerMustBeSavedDuringSerialization() throws IOException{\r
-        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("SolverContainerAfterSPGR.xls");\r
-        HSSFSheet sh = wb.getSheetAt(0);\r
+        HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("SolverContainerAfterSPGR.xls");\r
+        HSSFSheet sh = wb1.getSheetAt(0);\r
         InternalSheet ish = HSSFTestHelper.getSheetForTest(sh);\r
         List<RecordBase> records = ish.getRecords();\r
         // records to be aggregated\r
@@ -278,8 +285,9 @@ public class TestDrawingAggregate extends TestCase {
         EscherAggregate agg = (EscherAggregate) ish.findFirstRecordBySid(EscherAggregate.sid);\r
         assertEquals(agg.getEscherRecords().get(0).getChildRecords().size(), 3);\r
         assertEquals(agg.getEscherRecords().get(0).getChild(2).getRecordId(), EscherContainerRecord.SOLVER_CONTAINER);\r
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);\r
-        sh = wb.getSheetAt(0);\r
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);\r
+        wb1.close();\r
+        sh = wb2.getSheetAt(0);\r
         sh.getDrawingPatriarch();\r
         ish = HSSFTestHelper.getSheetForTest(sh);\r
         agg = (EscherAggregate) ish.findFirstRecordBySid(EscherAggregate.sid);\r
@@ -292,8 +300,10 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb2.close();\r
     }\r
 \r
+    @Test\r
     public void testFileWithTextbox() throws IOException{\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("text.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
@@ -309,9 +319,11 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb.close();\r
     }\r
 \r
-    public void testFileWithCharts(){\r
+    @Test\r
+    public void testFileWithCharts() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("49581.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
         InternalSheet ish = HSSFTestHelper.getSheetForTest(sh);\r
@@ -331,12 +343,14 @@ public class TestDrawingAggregate extends TestCase {
             }\r
         }\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb.close();\r
     }\r
 \r
     /**\r
      * test reading drawing aggregate from a test file from Bugzilla 45129\r
      */\r
-    public void test45129() {\r
+    @Test\r
+    public void test45129() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("45129.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
 \r
@@ -392,6 +406,7 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb.close();\r
     }\r
 \r
     /**\r
@@ -402,7 +417,8 @@ public class TestDrawingAggregate extends TestCase {
      * ObjRecord | TextObjRecord\r
      * ...\r
      */\r
-    public void testSerializeDrawingBigger8k() {\r
+    @Test\r
+    public void testSerializeDrawingBigger8k() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("DrawingContinue.xls");\r
         InternalWorkbook iworkbook = HSSFTestHelper.getWorkbookForTest(wb);\r
         HSSFSheet sh = wb.getSheetAt(0);\r
@@ -458,17 +474,19 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
-\r
+        wb.close();\r
     }\r
 \r
 \r
-    public void testSerializeDrawingBigger8k_noAggregation() {\r
-        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("DrawingContinue.xls");\r
+    @Test\r
+    public void testSerializeDrawingBigger8k_noAggregation() throws IOException {\r
+        HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("DrawingContinue.xls");\r
 \r
-        InternalSheet isheet = HSSFTestHelper.getSheetForTest(wb.getSheetAt(0));\r
+        InternalSheet isheet = HSSFTestHelper.getSheetForTest(wb1.getSheetAt(0));\r
         List<RecordBase> records = isheet.getRecords();\r
 \r
-        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb);\r
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);\r
+        wb1.close();\r
         InternalSheet isheet2 = HSSFTestHelper.getSheetForTest(wb2.getSheetAt(0));\r
         List<RecordBase> records2 = isheet2.getRecords();\r
 \r
@@ -483,8 +501,10 @@ public class TestDrawingAggregate extends TestCase {
                 assertArrayEquals(((Record) r1).serialize(), ((Record) r2).serialize());\r
             }\r
         }\r
+        wb2.close();\r
     }\r
 \r
+    @Test\r
     public void testSerializeDrawingWithComments() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("DrawingAndComments.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
@@ -540,10 +560,12 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb.close();\r
     }\r
 \r
 \r
-    public void testFileWithPictures() {\r
+    @Test\r
+    public void testFileWithPictures() throws IOException {\r
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ContinueRecordProblem.xls");\r
         HSSFSheet sh = wb.getSheetAt(0);\r
 \r
@@ -598,673 +620,113 @@ public class TestDrawingAggregate extends TestCase {
         byte[] dgBytesAfterSave = agg.serialize();\r
         assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length);\r
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
+        wb.close();\r
     }\r
 \r
-    public void testUnhandledContinue() {\r
+    @Test\r
+    public void testUnhandledContinue() throws IOException {\r
         String data =\r
-                "     EC 00 1C 08 0F 00 02 F0 66 27 00                " +\r
-                        "     00 10 00 08 F0 08 00 00 00 06 00 00 00 13 04 00 " +\r
-                        "     00 0F 00 03 F0 4E 27 00 00 0F 00 04 F0 28 00 00 " +\r
-                        "     00 01 00 09 F0 10 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 02 00 0A F0 08 00 00 " +\r
-                        "     00 00 04 00 00 05 00 00 00 0F 00 04 F0 CC 07 00 " +\r
-                        "     00 A2 0C 0A F0 08 00 00 00 0F 04 00 00 00 0A 00 " +\r
-                        "     00 93 00 0B F0 4A 00 00 00 7F 00 00 00 04 00 80 " +\r
-                        "     00 C0 D5 9A 02 85 00 02 00 00 00 8B 00 02 00 00 " +\r
-                        "     00 BF 00 1A 00 1F 00 BF 01 01 00 11 00 FF 01 00 " +\r
-                        "     00 08 00 80 C3 14 00 00 00 BF 03 00 00 02 00 54 " +\r
-                        "     00 65 00 78 00 74 00 42 00 6F 00 78 00 20 00 31 " +\r
-                        "     00 00 00 13 00 22 F1 38 07 00 00 A9 C3 32 07 00 " +\r
-                        "     00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 F0 " +\r
-                        "     F7 8A BB FD 00 00 00 E2 01 00 00 13 00 00 00 5B " +\r
-                        "     43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 " +\r
-                        "     6D 6C 94 91 CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A " +\r
-                        "     6D AA 07 11 69 BA 07 AB 47 15 5D 1F 60 48 A6 6D " +\r
-                        "     D8 36 09 99 58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 " +\r
-                        "     FF F1 23 A9 57 DB 69 14 33 45 B6 DE 29 B8 2E 2B " +\r
-                        "     10 E4 B4 37 D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C " +\r
-                        "     8E DE 91 82 1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB " +\r
-                        "     1D 2B 18 52 0A F7 52 B2 1E 68 42 2E 7D 20 97 2F " +\r
-                        "     9D 8F 13 A6 3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD " +\r
-                        "     D4 DE 25 72 A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C " +\r
-                        "     6E F3 FA 40 12 69 64 10 0F 07 E1 D2 A5 00 43 18 " +\r
-                        "     AD C6 94 49 E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 " +\r
-                        "     83 0D 7C 95 31 40 FE DA B0 5C CE 17 1C 7D 2F F9 " +\r
-                        "     69 A2 35 24 5E 31 A6 67 9C 32 86 34 91 25 0F 18 " +\r
-                        "     28 6B CA BF 53 16 CC 89 0B DF 75 56 53 D9 46 7E " +\r
-                        "     5F 7C 27 A8 73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B " +\r
-                        "     A3 F9 94 2E F7 3F D4 7C 03 00 00 FF FF 03 00 50 " +\r
-                        "     4B 03 04 14 00 06 00 08 00 00 00 21 00 31 DD 5F " +\r
-                        "     61 D2 00 00 00 8F 01 00 00 0B 00 00 00 5F 72 65 " +\r
-                        "     6C 73 2F 2E 72 65 6C 73 A4 90 C1 6A C3 30 0C 86 " +\r
-                        "     EF 83 BD 83 D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B " +\r
-                        "     07 BB 0A 5B 49 4C 63 CB 58 26 6D DF BE A6 30 58 " +\r
-                        "     46 6F 3B EA 17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 " +\r
-                        "     8E 06 D6 4D 0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D " +\r
-                        "     80 92 82 D1 E1 C4 91 0C DC 49 60 DF BD BF ED 4E " +\r
-                        "     34 61 A9 47 32 FA 24 AA 52 A2 18 18 4B 49 9F 5A " +\r
-                        "     8B 1D 29 A0 34 9C 28 D6 4D CF 39 60 A9 63 1E 74 " +\r
-                        "     42 7B C1 81 F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 " +\r
-                        "     33 90 8F 6E 03 EA 7C 4F D5 FC 87 1D BC CD 2C DC " +\r
-                        "     97 C6 72 D0 DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 " +\r
-                        "     30 0F 54 0C B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE " +\r
-                        "     FF E9 95 11 13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 " +\r
-                        "     35 76 0F 00 00 00 FF FF 03 00 50 4B 03 04 14 00 " +\r
-                        "     06 00 08 00 00 00 21 00 AE B1 05 56 77 02 00 00 " +\r
-                        "     1B 07 00 00 10 00 00 00 64 72 73 2F 73 68 61 70 " +\r
-                        "     65 78 6D 6C 2E 78 6D 6C BC 55 4B 6F DB 30 0C BE " +\r
-                        "     0F D8 7F 10 74 4F FD 58 9D 87 11 BB E8 52 74 97 " +\r
-                        "     61 0D 92 E6 07 A8 B2 9C 18 93 25 43 52 13 A7 BF " +\r
-                        "     7E A4 E4 A4 5D 0F 3B 34 43 2F 0A 43 4A FC C8 8F " +\r
-                        "     0F CF 6F FA 56 92 BD 30 B6 D1 AA A0 C9 55 4C 89 " +\r
-                        "     50 5C 57 8D DA 16 74 F3 78 3F 9A 52 62 1D 53 15 " +\r
-                        "     93 5A 89 82 1E 85 A5 37 E5 D7 2F F3 BE 32 39 53 " +\r
-                        "     7C A7 0D 01 17 CA E6 A0 28 E8 CE B9 2E 8F 22 CB " +\r
-                        "     77 A2 65 F6 4A 77 42 81 B5 D6 A6 65 0E FE 9A 6D " +\r
-                        "     54 19 76 00 E7 AD 8C D2 38 1E 47 B6 33 82 55 76 " +\r
-                        "     27 84 BB 0B 16 5A 7A DF 80 B6 10 52 DE 7A 88 A0 " +\r
-                        "     AA 8D 6E 83 C4 B5 2C 93 79 84 31 A0 E8 1F 80 F0 " +\r
-                        "     50 D7 65 1A CF B2 2C 3E DB 50 E5 CD 46 1F CA 6F " +\r
-                        "     41 8D E2 49 87 F6 64 1A CF 26 D9 D9 E6 9F 78 DF " +\r
-                        "     AF 80 A2 77 84 F7 05 CD D2 2C 8D 81 12 7E 2C 68 " +\r
-                        "     3A BE CE C6 31 8D 82 2F DB 91 96 71 A3 0B 4A 89 " +\r
-                        "     83 EB B2 51 BF 41 0E 46 B5 5F 77 4B 13 64 FE 6B " +\r
-                        "     BF 34 A4 A9 C0 01 25 8A B5 40 EA 23 DC FF AE 7B " +\r
-                        "     92 9C 9C C1 1D 7C 40 5C 0F 6A 28 0B EA 7D 44 6F " +\r
-                        "     1D 59 EF 92 E5 7D 6D DA A1 06 EC 03 15 68 59 A3 " +\r
-                        "     20 4C 96 EB BA 26 00 36 4D 66 49 06 6D 00 19 4E " +\r
-                        "     B2 F4 7A 92 21 38 CB FF CD 40 14 C2 C0 8B 9D B1 " +\r
-                        "     EE 87 D0 17 87 44 D0 51 41 8D E0 CE 87 C7 F6 3F " +\r
-                        "     AD 43 1E 5E 21 10 4E E9 FB 46 CA 4B F3 3F F1 1B " +\r
-                        "     38 C5 BE B2 EE 28 05 02 48 B5 12 40 8C EF F1 0F " +\r
-                        "     F3 0B F5 06 6A 63 9F 88 E5 66 FB B4 90 86 C0 BC " +\r
-                        "     00 CF 30 67 70 3E E1 19 B2 F3 80 88 5C 43 62 9F " +\r
-                        "     8C 3D 40 22 BA A8 6B A0 FE 93 F1 CF A0 3E 7F AD " +\r
-                        "     FE 1F 7E DB 28 6D 06 FE 61 39 09 2C C0 9E C9 82 " +\r
-                        "     BA 3E 8C 17 F0 1D F0 86 51 1B 1A 00 7B 01 C7 B0 " +\r
-                        "     3A 62 48 4F F0 0B 73 79 69 37 C0 C2 75 0F 70 D4 " +\r
-                        "     52 1F 0A CA 65 D3 51 02 9B F4 E5 BD EE 60 58 57 " +\r
-                        "     50 05 BB 90 12 E3 E4 42 43 BC D0 2C 61 EF 42 E8 " +\r
-                        "     21 9F EE F6 D9 C1 14 0C C3 11 42 C4 60 A5 75 6B " +\r
-                        "     EC E2 4B C3 F5 F3 DF 5D EA 05 23 32 FE 00 02 25 " +\r
-                        "     C3 EF 8B 50 A3 CD 1A BE 2F 2F B0 E2 92 D8 F7 3F " +\r
-                        "     CB 5D 89 EB 73 04 EB 1D 65 3C FD 2B A1 AA 25 33 " +\r
-                        "     6C 75 7E 6C 9E 47 AB CD DF 8F 71 35 0C D5 3B 95 " +\r
-                        "     CC 6F 4D 0B 5A FF AD 90 8D 50 EE 8E 39 76 9A F7 " +\r
-                        "     77 5F 19 7F 3B B0 5B FE 01 00 00 FF FF 03 00 50 " +\r
-                        "     4B 03 04 14 00 06 00 08 00 00 00 21 00 44 8B 69 " +\r
-                        "     1E 2C 01 00 00 AB 01 00 00 0F 00 00 00 64 72 73 " +\r
-                        "     2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 5C 50 D1 4E " +\r
-                        "     C2 30 14 7D 37 F1 1F 9A 6B E2 9B 74 0C 36 07 52 " +\r
-                        "     C8 62 42 C4 04 D1 21 89 AF 65 6D D9 E2 DA CE B6 " +\r
-                        "     C0 F0 EB ED 46 0C C6 C7 73 EE 39 E7 DE 73 27 B3 " +\r
-                        "     46 56 E8 C0 8D 2D B5 22 D0 EF 05 80 B8 CA 35 2B " +\r
-                        "     D5 8E C0 E6 7D 7E 97 00 B2 8E 2A 46 2B AD 38 81 " +\r
-                        "     13 B7 30 9B 5E 5F 4D E8 98 E9 A3 CA F8 61 ED 76 " +\r
-                        "     C8 87 28 3B A6 04 0A E7 EA 31 C6 36 2F B8 A4 B6 " +\r
-                        "     A7 6B AE FC 4C 68 23 A9 F3 D0 EC 30 33 F4 E8 C3 " +\r
-                        "     65 85 C3 20 88 B1 A4 A5 F2 1B 0A 5A F3 C7 82 E7 " +\r
-                        "     9F EB BD 24 B0 64 E2 E5 63 58 CE 9F A9 F8 4A 17 " +\r
-                        "     C3 2C 89 0E AF 2C 22 E4 F6 A6 49 1F 00 39 DE B8 " +\r
-                        "     8B B8 DE AB 55 B8 5C 6E DF 36 E9 AF A0 8B 5B 30 " +\r
-                        "     02 21 20 F1 74 DA 9A 92 65 D4 3A 6E 08 F8 7E BE " +\r
-                        "     AD 6F 0A 53 5F A1 A9 52 95 17 DA 20 91 71 5B 7E " +\r
-                        "     FB 7E 67 5E 18 2D 91 D1 47 02 03 40 B9 AE 5A BE " +\r
-                        "     C5 2B 21 2C 77 1E 25 C1 E8 3E EA 46 BF 54 18 8C " +\r
-                        "     A2 28 00 DC C6 3A 7D 36 9F 15 DD 19 7F CC 71 1C " +\r
-                        "     FF F3 F6 C3 41 12 46 AD 17 5F 6E EA C0 E5 C7 D3 " +\r
-                        "     1F 00 00 00 FF FF 03 00 50 4B 01 02 2D 00 14 00 " +\r
-                        "     06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 00 00 " +\r
-                        "     E2 01 00 00 13 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 5B 43 6F 6E 74 65 6E 74 5F 54 " +\r
-                        "     79 70 65 73 5D 2E 78 6D 6C 50 4B 01 02 2D 00 14 " +\r
-                        "     00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 " +\r
-                        "     00 8F 01 00 00 0B 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 2E 01 00 00 5F 72 65 6C 73 2F 2E 72 65 " +\r
-                        "     6C 73 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 " +\r
-                        "     21 00 AE B1 05 56 77 02 00 00 1B 07 00 00 10 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 00 00 29 02 00 00 " +\r
-                        "     64 72 73 2F 73 68 61 70 65 78 6D 6C 2E 78 6D 6C " +\r
-                        "     50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 00 " +\r
-                        "     44 8B 69 1E 2C 01 00 00 AB 01 00 00 0F 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 CE 04 00 00 64 72 " +\r
-                        "     73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 50 4B 05 " +\r
-                        "     06 00 00 00 00 04 00 04 00 F5 00 00 00 27 06 00 " +\r
-                        "     00 00 00 00 00 10 F0 12 00 00 00 02 00 01 00 60 " +\r
-                        "     01 03 00 F3 00 02 00 D0 00 05 00 5A 00 00 00 11 " +\r
-                        "     F0 00 00 00 00 5D 00 1A 00 15 00 12 00 06 00 0F " +\r
-                        "     00 11 60 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 EC 00 08 00 00 00 0D F0 00 00 00 00 B6 " +\r
-                        "     01 12 00 12 02 00 00 00 00 00 00 00 00 06 00 10 " +\r
-                        "     00 00 00 00 00 3C 00 07 00 00 74 65 78 74 2D 31 " +\r
-                        "     3C 00 10 00 00 00 16 00 00 00 00 00 06 00 00 00 " +\r
-                        "     00 00 00 00 EC 00 CB 07 0F 00 04 F0 CB 07 00 00 " +\r
-                        "     A2 0C 0A F0 08 00 00 00 10 04 00 00 00 0A 00 00 " +\r
-                        "     93 00 0B F0 4A 00 00 00 7F 00 00 00 04 00 80 00 " +\r
-                        "     00 65 53 02 85 00 02 00 00 00 8B 00 02 00 00 00 " +\r
-                        "     BF 00 1A 00 1F 00 BF 01 01 00 11 00 FF 01 00 00 " +\r
-                        "     08 00 80 C3 14 00 00 00 BF 03 00 00 02 00 54 00 " +\r
-                        "     65 00 78 00 74 00 42 00 6F 00 78 00 20 00 32 00 " +\r
-                        "     00 00 13 00 22 F1 37 07 00 00 A9 C3 31 07 00 00 " +\r
-                        "     50 4B 03 04 14 00 06 00 08 00 00 00 21 00 F0 F7 " +\r
-                        "     8A BB FD 00 00 00 E2 01 00 00 13 00 00 00 5B 43 " +\r
-                        "     6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D " +\r
-                        "     6C 94 91 CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D " +\r
-                        "     AA 07 11 69 BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 " +\r
-                        "     36 09 99 58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF " +\r
-                        "     F1 23 A9 57 DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 " +\r
-                        "     E4 B4 37 D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E " +\r
-                        "     DE 91 82 1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D " +\r
-                        "     2B 18 52 0A F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D " +\r
-                        "     8F 13 A6 3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 " +\r
-                        "     DE 25 72 A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E " +\r
-                        "     F3 FA 40 12 69 64 10 0F 07 E1 D2 A5 00 43 18 AD " +\r
-                        "     C6 94 49 E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 " +\r
-                        "     0D 7C 95 31 40 FE DA B0 5C CE 17 1C 7D 2F F9 69 " +\r
-                        "     A2 35 24 5E 31 A6 67 9C 32 86 34 91 25 0F 18 28 " +\r
-                        "     6B CA BF 53 16 CC 89 0B DF 75 56 53 D9 46 7E 5F " +\r
-                        "     7C 27 A8 73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 " +\r
-                        "     F9 94 2E F7 3F D4 7C 03 00 00 FF FF 03 00 50 4B " +\r
-                        "     03 04 14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 " +\r
-                        "     D2 00 00 00 8F 01 00 00 0B 00 00 00 5F 72 65 6C " +\r
-                        "     73 2F 2E 72 65 6C 73 A4 90 C1 6A C3 30 0C 86 EF " +\r
-                        "     83 BD 83 D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 " +\r
-                        "     BB 0A 5B 49 4C 63 CB 58 26 6D DF BE A6 30 58 46 " +\r
-                        "     6F 3B EA 17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E " +\r
-                        "     06 D6 4D 0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 " +\r
-                        "     92 82 D1 E1 C4 91 0C DC 49 60 DF BD BF ED 4E 34 " +\r
-                        "     61 A9 47 32 FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B " +\r
-                        "     1D 29 A0 34 9C 28 D6 4D CF 39 60 A9 63 1E 74 42 " +\r
-                        "     7B C1 81 F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 33 " +\r
-                        "     90 8F 6E 03 EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 " +\r
-                        "     C6 72 D0 DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 " +\r
-                        "     0F 54 0C B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE FF " +\r
-                        "     E9 95 11 13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 " +\r
-                        "     76 0F 00 00 00 FF FF 03 00 50 4B 03 04 14 00 06 " +\r
-                        "     00 08 00 00 00 21 00 99 C9 E2 87 75 02 00 00 1B " +\r
-                        "     07 00 00 10 00 00 00 64 72 73 2F 73 68 61 70 65 " +\r
-                        "     78 6D 6C 2E 78 6D 6C BC 55 CD 6E E2 30 10 BE AF " +\r
-                        "     D4 77 B0 7C A7 F9 E9 82 20 C2 A9 5A AA EE 65 B5 " +\r
-                        "     45 50 1E C0 24 0E 44 EB D8 91 ED 42 E8 D3 EF 8C " +\r
-                        "     9D D0 6E 0F 7B 28 AB 5E 1C 67 C6 33 DF F8 9B 1F " +\r
-                        "     CF 6F BB 46 92 83 30 B6 D6 8A D1 E4 3A A6 44 A8 " +\r
-                        "     42 97 B5 DA 31 BA 79 7E 1C 4D 29 B1 8E AB 92 4B " +\r
-                        "     AD 04 A3 27 61 E9 6D 7E F5 6D DE 95 26 E3 AA D8 " +\r
-                        "     6B 43 C0 85 B2 19 08 18 DD 3B D7 66 51 64 8B BD " +\r
-                        "     68 B8 BD D6 AD 50 A0 AD B4 69 B8 83 5F B3 8B 4A " +\r
-                        "     C3 8F E0 BC 91 51 1A C7 93 C8 B6 46 F0 D2 EE 85 " +\r
-                        "     70 0F 41 43 73 EF 1B D0 16 42 CA 3B 0F 11 44 95 " +\r
-                        "     D1 4D D8 15 5A E6 C9 3C C2 18 70 EB 0D 60 F3 54 " +\r
-                        "     55 79 1A CF C6 E3 F8 AC 43 91 57 1B 7D CC 27 41 " +\r
-                        "     8C DB 41 86 FA D9 38 1D 2C 40 E5 2D BC EB 37 3C " +\r
-                        "     D1 39 52 74 8C C2 C1 34 06 46 8A 13 A3 E9 E4 FB " +\r
-                        "     78 12 D3 28 B8 B2 2D 69 78 61 34 A3 94 38 38 2E " +\r
-                        "     6B F5 1B F6 41 A9 0E EB 76 69 C2 BE F8 75 58 1A " +\r
-                        "     52 97 8C DE 50 A2 78 03 9C 3E C3 F9 7B DD 91 74 " +\r
-                        "     70 06 67 D0 80 B8 0E C4 90 15 94 FB 88 DE 3B B2 " +\r
-                        "     DE 25 CF BA CA 34 7D 0A F8 27 12 D0 F0 5A 41 98 " +\r
-                        "     3C D3 55 45 00 6C 9A CC 92 31 54 01 DC 30 49 6F " +\r
-                        "     A6 C0 0C A2 F3 EC DF 14 44 21 0E 3C D8 1A EB 7E " +\r
-                        "     08 7D 71 4C 04 1D 31 6A 44 E1 7C 7C FC F0 D3 3A " +\r
-                        "     24 E2 0D 02 E1 94 7E AC A5 BC 94 80 81 E0 40 2A " +\r
-                        "     D6 95 75 27 29 10 40 AA 95 00 66 7C 8D 7F 9A 60 " +\r
-                        "     48 38 70 1B FB 8B D8 C2 EC B6 0B 69 08 F4 0B 10 " +\r
-                        "     0D 7D 06 EB 16 D7 70 3B 0F 88 C8 15 5C EC 8B B1 " +\r
-                        "     7B 48 44 17 55 05 D4 7F 31 FE 19 D4 DF 5F AB FF " +\r
-                        "     87 DF D4 4A 9B 9E 7F 18 4E 02 13 70 E0 92 51 D7 " +\r
-                        "     85 FE 02 BE 03 5E DF 6B 7D 01 60 2D 60 1F 96 27 " +\r
-                        "     0C 69 0B 5F 68 CC 4B AB 01 06 AE 7B 82 A5 92 FA " +\r
-                        "     C8 68 21 EB 96 12 98 A4 AF 1F 65 47 C3 5B 46 15 " +\r
-                        "     CC 42 4A 8C 93 0B 0D F1 42 B1 84 B9 0B A1 87 FB " +\r
-                        "     B4 77 2F 0E BA A0 6F 8E 10 22 06 2B AD 5B 63 15 " +\r
-                        "     5F 1A AE EF FF F6 52 2F 18 91 F1 0B 10 28 39 BE " +\r
-                        "     2F 42 8D 36 6B 78 5F 5E 61 D6 24 71 3F 68 5C 8E " +\r
-                        "     F3 73 94 62 A3 3B DF EE DE 4A A8 72 C9 0D 5F 9D " +\r
-                        "     8D CD CB 68 B5 F9 DB 18 47 43 9F BD 21 65 7E 6C " +\r
-                        "     5A 90 FA B7 42 D6 42 B9 07 EE F8 D0 EF 1F 5E 19 " +\r
-                        "     7F 3A B0 9B FF 01 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                        "     14 00 06 00 08 00 00 00 21 00 56 84 64 08 2D 01 " +\r
-                        "     00 00 AB 01 00 00 0F 00 00 00 64 72 73 2F 64 6F " +\r
-                        "     77 6E 72 65 76 2E 78 6D 6C 5C 90 5F 4F C2 30 14 " +\r
-                        "     C5 DF 4D FC 0E CD 35 F1 4D B6 15 C6 3F 29 64 31 " +\r
-                        "     21 62 82 E2 90 C4 D7 B2 B6 6C BA B6 B3 AD 30 F8 " +\r
-                        "     F4 76 20 21 FA 78 CE BD BF D3 7B 3A 9A D4 B2 44 " +\r
-                        "     5B 6E 6C A1 15 81 A8 15 02 E2 2A D3 AC 50 1B 02 " +\r
-                        "     AB B7 E9 5D 1F 90 75 54 31 5A 6A C5 09 EC B9 85 " +\r
-                        "     C9 F8 FA 6A 44 87 4C EF 54 CA B7 4B B7 41 3E 44 " +\r
-                        "     D9 21 25 90 3B 57 0D 83 C0 66 39 97 D4 B6 74 C5 " +\r
-                        "     95 9F 09 6D 24 75 5E 9A 4D C0 0C DD F9 70 59 06 " +\r
-                        "     38 0C BB 81 A4 85 F2 2F E4 B4 E2 0F 39 CF 3E 97 " +\r
-                        "     DF 92 C0 9C 89 E7 F7 4E 31 7D A2 E2 2B 99 75 D2 " +\r
-                        "     7E BC 5D B0 98 90 DB 9B 3A B9 07 E4 78 ED 2E CB " +\r
-                        "     55 FE B1 C0 F3 F9 FA 75 95 9C 17 8E 71 33 46 A0 " +\r
-                        "     0D 48 3C EE D7 A6 60 29 B5 8E 1B 02 BE 9F 6F EB " +\r
-                        "     9B C2 D8 57 A8 CB 44 65 B9 36 48 A4 DC 16 07 DF " +\r
-                        "     EF E4 0B A3 25 32 7A 47 A0 0B 28 D3 65 E3 37 FA " +\r
-                        "     45 08 CB 1D 81 41 8C 63 9F E4 27 67 07 87 83 D8 " +\r
-                        "     5B 41 93 EA F4 89 ED FD B2 F8 0F 1B F5 A2 CE 3F " +\r
-                        "     38 C2 ED 3E 8E 1B 38 B8 DC 74 14 97 3F 1E FF 00 " +\r
-                        "     00 00 FF FF 03 00 50 4B 01 02 2D 00 14 00 06 00 " +\r
-                        "     08 00 00 00 21 00 F0 F7 8A BB FD 00 00 00 E2 01 " +\r
-                        "     00 00 13 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 " +\r
-                        "     65 73 5D 2E 78 6D 6C 50 4B 01 02 2D 00 14 00 06 " +\r
-                        "     00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 00 8F " +\r
-                        "     01 00 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 2E 01 00 00 5F 72 65 6C 73 2F 2E 72 65 6C 73 " +\r
-                        "     50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 00 " +\r
-                        "     99 C9 E2 87 75 02 00 00 1B 07 00 00 10 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 29 02 00 00 64 72 " +\r
-                        "     73 2F 73 68 61 70 65 78 6D 6C 2E 78 6D 6C 50 4B " +\r
-                        "     01 02 2D 00 14 00 06 00 08 00 00 00 21 00 56 84 " +\r
-                        "     64 08 2D 01 00 00 AB 01 00 00 0F 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 CC 04 00 00 64 72 73 2F " +\r
-                        "     64 6F 77 6E 72 65 76 2E 78 6D 6C 50 4B 05 06 00 " +\r
-                        "     00 00 00 04 00 04 00 F5 00 00 00 26 06 00 00 00 " +\r
-                        "     00 00 00 10 F0 12 00 00 00 02 00 01 00 60 01 06 " +\r
-                        "     00 80 00 02 00 D0 00 07 00 E6 00 00 00 11 F0 00 " +\r
-                        "     00 00 00 5D 00 1A 00 15 00 12 00 06 00 10 00 11 " +\r
-                        "     60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 EC 00 08 00 00 00 0D F0 00 00 00 00 B6 01 12 " +\r
-                        "     00 12 02 00 00 00 00 00 00 00 00 06 00 10 00 00 " +\r
-                        "     00 00 00 3C 00 07 00 00 74 65 78 74 2D 32 3C 00 " +\r
-                        "     10 00 00 00 16 00 00 00 00 00 06 00 00 00 00 00 " +\r
-                        "     00 00 EC 00 CB 07 0F 00 04 F0 CB 07 00 00 A2 0C " +\r
-                        "     0A F0 08 00 00 00 11 04 00 00 00 0A 00 00 93 00 " +\r
-                        "     0B F0 4A 00 00 00 7F 00 00 00 04 00 80 00 00 D1 " +\r
-                        "     53 02 85 00 02 00 00 00 8B 00 02 00 00 00 BF 00 " +\r
-                        "     1A 00 1F 00 BF 01 01 00 11 00 FF 01 00 00 08 00 " +\r
-                        "     80 C3 14 00 00 00 BF 03 00 00 02 00 54 00 65 00 " +\r
-                        "     78 00 74 00 42 00 6F 00 78 00 20 00 33 00 00 00 " +\r
-                        "     13 00 22 F1 37 07 00 00 A9 C3 31 07 00 00 50 4B " +\r
-                        "     03 04 14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB " +\r
-                        "     FD 00 00 00 E2 01 00 00 13 00 00 00 5B 43 6F 6E " +\r
-                        "     74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 " +\r
-                        "     91 CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 " +\r
-                        "     11 69 BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 " +\r
-                        "     99 58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 " +\r
-                        "     A9 57 DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 " +\r
-                        "     37 D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 " +\r
-                        "     82 1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 " +\r
-                        "     52 0A F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 " +\r
-                        "     A6 3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 " +\r
-                        "     72 A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA " +\r
-                        "     40 12 69 64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 " +\r
-                        "     49 E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C " +\r
-                        "     95 31 40 FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 " +\r
-                        "     24 5E 31 A6 67 9C 32 86 34 91 25 0F 18 28 6B CA " +\r
-                        "     BF 53 16 CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 " +\r
-                        "     A8 73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 " +\r
-                        "     2E F7 3F D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                        "     14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 " +\r
-                        "     00 00 8F 01 00 00 0B 00 00 00 5F 72 65 6C 73 2F " +\r
-                        "     2E 72 65 6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD " +\r
-                        "     83 D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A " +\r
-                        "     5B 49 4C 63 CB 58 26 6D DF BE A6 30 58 46 6F 3B " +\r
-                        "     EA 17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 " +\r
-                        "     4D 0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 " +\r
-                        "     D1 E1 C4 91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 " +\r
-                        "     47 32 FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 " +\r
-                        "     A0 34 9C 28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 " +\r
-                        "     81 F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F " +\r
-                        "     6E 03 EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 " +\r
-                        "     D0 DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 " +\r
-                        "     0C B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 " +\r
-                        "     11 13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F " +\r
-                        "     00 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 08 " +\r
-                        "     00 00 00 21 00 49 0D 41 2E 77 02 00 00 1A 07 00 " +\r
-                        "     00 10 00 00 00 64 72 73 2F 73 68 61 70 65 78 6D " +\r
-                        "     6C 2E 78 6D 6C BC 55 4D 73 DB 20 10 BD 77 A6 FF " +\r
-                        "     81 E1 EE E8 23 96 1B 6B 8C 32 A9 33 E9 A5 D3 78 " +\r
-                        "     EC F8 07 60 09 D9 9A 22 D0 00 B1 E5 FC FA EE 82 " +\r
-                        "     EC A4 39 F4 10 77 72 41 68 17 F6 3D 1E BB CB EC " +\r
-                        "     B6 6F 25 D9 0B 63 1B AD 18 4D AE 62 4A 84 2A 75 " +\r
-                        "     D5 A8 2D A3 EB A7 87 D1 0D 25 D6 71 55 71 A9 95 " +\r
-                        "     60 F4 28 2C BD 2D BE 7E 99 F5 95 C9 B9 2A 77 DA " +\r
-                        "     10 08 A1 6C 0E 06 46 77 CE 75 79 14 D9 72 27 5A " +\r
-                        "     6E AF 74 27 14 78 6B 6D 5A EE E0 D7 6C A3 CA F0 " +\r
-                        "     03 04 6F 65 94 C6 F1 24 B2 9D 11 BC B2 3B 21 DC " +\r
-                        "     7D F0 D0 C2 C7 06 B4 B9 90 F2 CE 43 04 53 6D 74 " +\r
-                        "     1B 66 A5 96 45 32 8B 90 03 4E FD 06 98 3C D6 75 " +\r
-                        "     91 C6 D3 2C 8B CF 3E 34 79 B7 D1 87 62 1A CC 38 " +\r
-                        "     3D D9 D0 3F CD D2 EC EC F1 1B 7C E4 57 38 D1 3B " +\r
-                        "     52 F6 8C C2 BA 34 06 41 CA 23 A3 E9 64 9C 4D 62 " +\r
-                        "     1A 85 48 B6 23 2D 2F 8D 66 94 12 07 CB 65 A3 7E " +\r
-                        "     C3 3C 38 D5 7E D5 2D 4C 98 97 BF F6 0B 43 9A 8A " +\r
-                        "     D1 31 25 8A B7 20 E9 13 AC FF AE 7B 72 7D 0A 06 " +\r
-                        "     6B 70 03 71 3D 98 E1 52 D0 EE 19 BD 0D 64 7D 48 " +\r
-                        "     9E F7 B5 69 87 1B E0 1F D0 BF E5 8D 02 9A 3C D7 " +\r
-                        "     75 4D 00 EC 26 99 26 19 24 01 9C 30 F9 96 8E E3 " +\r
-                        "     34 43 74 9E FF 5B 82 28 F0 C0 85 9D B1 EE 87 D0 " +\r
-                        "     17 73 22 18 88 51 23 4A E7 F9 F1 FD 4F EB 50 88 " +\r
-                        "     57 08 84 53 FA A1 91 F2 52 01 4E 02 07 51 31 AD " +\r
-                        "     AC 3B 4A 81 00 52 2D 05 28 E3 53 FC C3 02 C3 85 " +\r
-                        "     83 B6 B1 3F 88 2D CD 76 33 97 86 40 B9 80 D0 50 " +\r
-                        "     66 30 6E 70 0C A7 F3 80 88 5C C3 C1 3E 19 7B 80 " +\r
-                        "     44 74 51 D7 20 FD 27 E3 9F 41 FD F9 B5 FA 7F F8 " +\r
-                        "     6D A3 B4 19 F4 87 DE 24 F0 02 F6 5C 32 EA FA 50 " +\r
-                        "     5F A0 77 C0 1B 6A 6D 48 00 CC 05 AC C3 EA 88 94 " +\r
-                        "     36 F0 85 C2 BC 34 1B A0 DF BA 47 18 6A A9 0F 8C " +\r
-                        "     96 B2 E9 28 81 46 FA F2 DE 76 30 BC 63 54 41 2B " +\r
-                        "     A4 C4 38 39 D7 C0 17 92 25 B4 5D A0 1E CE D3 DD " +\r
-                        "     3D 3B A8 82 A1 38 02 45 24 2B AD 5B 61 16 5F 4A " +\r
-                        "     D7 D7 7F 77 69 14 64 64 FC 00 02 4A 8E CF 8B 50 " +\r
-                        "     A3 F5 0A 9E 97 17 E8 35 49 EC F3 9F E7 AE C0 FE " +\r
-                        "     39 BA C6 42 77 BE DC FD 2E A1 AA 05 37 7C 79 DE " +\r
-                        "     6C 9E 47 CB F5 DF 9B B1 35 0C B7 77 BA 32 DF 36 " +\r
-                        "     2D 58 FD 53 21 1B A1 DC 3D 77 FC 54 EF EF 1E 19 " +\r
-                        "     BF 3A A8 5B FC 01 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                        "     14 00 06 00 08 00 00 00 21 00 79 45 76 AD 2B 01 " +\r
-                        "     00 00 AA 01 00 00 0F 00 00 00 64 72 73 2F 64 6F " +\r
-                        "     77 6E 72 65 76 2E 78 6D 6C 5C 90 51 4F C2 30 14 " +\r
-                        "     85 DF 4D FC 0F CD 35 F1 4D 3A 26 D5 81 14 B2 98 " +\r
-                        "     10 31 99 E2 90 C4 D7 B2 B6 6C 71 6D 67 5B 61 F8 " +\r
-                        "     EB 2D 23 84 E8 E3 39 F7 7E E7 F6 74 3C 6D 55 8D " +\r
-                        "     B6 C2 BA CA 68 0A FD 5E 04 48 E8 C2 F0 4A 6F 28 " +\r
-                        "     AC DE 67 37 09 20 E7 99 E6 AC 36 5A 50 D8 0B 07 " +\r
-                        "     D3 C9 E5 C5 98 8D B8 D9 E9 5C 6C 97 7E 83 42 88 " +\r
-                        "     76 23 46 A1 F4 BE 19 61 EC 8A 52 28 E6 7A A6 11 " +\r
-                        "     3A CC A4 B1 8A F9 20 ED 06 73 CB 76 21 5C D5 38 " +\r
-                        "     8E A2 3B AC 58 A5 C3 85 92 35 E2 B1 14 C5 E7 F2 " +\r
-                        "     5B 51 C8 B8 7C F9 18 54 B3 67 26 BF D2 F9 20 4F " +\r
-                        "     C8 76 C1 09 A5 D7 57 6D FA 00 C8 8B D6 9F 97 1B " +\r
-                        "     2B 17 71 96 AD DF 56 E9 69 A1 8B 9B 73 0A 03 40 " +\r
-                        "     F2 69 BF B6 15 CF 99 F3 C2 52 08 FD 42 DB D0 14 " +\r
-                        "     26 A1 42 5B A7 BA 28 8D 45 32 17 AE FA 09 FD 8E " +\r
-                        "     BE B4 46 21 6B 76 14 86 80 0A 53 1F FC 83 7E 95 " +\r
-                        "     D2 09 1F 5C 12 93 6E 70 32 E2 68 48 48 04 F8 10 " +\r
-                        "     EA CD 11 ED 87 5B 1D 1B FF 61 13 72 FF 0F EE C7 " +\r
-                        "     B7 49 B0 02 8C CF 4F EA C4 F9 8B 27 BF 00 00 00 " +\r
-                        "     FF FF 03 00 50 4B 01 02 2D 00 14 00 06 00 08 00 " +\r
-                        "     00 00 21 00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 " +\r
-                        "     13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 " +\r
-                        "     5D 2E 78 6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 " +\r
-                        "     00 00 00 21 00 31 DD 5F 61 D2 00 00 00 8F 01 00 " +\r
-                        "     00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 2E " +\r
-                        "     01 00 00 5F 72 65 6C 73 2F 2E 72 65 6C 73 50 4B " +\r
-                        "     01 02 2D 00 14 00 06 00 08 00 00 00 21 00 49 0D " +\r
-                        "     41 2E 77 02 00 00 1A 07 00 00 10 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 29 02 00 00 64 72 73 2F " +\r
-                        "     73 68 61 70 65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 " +\r
-                        "     2D 00 14 00 06 00 08 00 00 00 21 00 79 45 76 AD " +\r
-                        "     2B 01 00 00 AA 01 00 00 0F 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 CE 04 00 00 64 72 73 2F 64 6F " +\r
-                        "     77 6E 72 65 76 2E 78 6D 6C 50 4B 05 06 00 00 00 " +\r
-                        "     00 04 00 04 00 F5 00 00 00 26 06 00 00 00 00 00 " +\r
-                        "     00 10 F0 12 00 00 00 02 00 01 00 60 01 09 00 0D " +\r
-                        "     00 02 00 D0 00 0A 00 73 00 00 00 11 F0 00 00 00 " +\r
-                        "     00 5D 00 1A 00 15 00 12 00 06 00 11 00 11 60 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 EC " +\r
-                        "     00 08 00 00 00 0D F0 00 00 00 00 B6 01 12 00 12 " +\r
-                        "     02 00 00 00 00 00 00 00 00 06 00 10 00 00 00 00 " +\r
-                        "     00 3C 00 07 00 00 74 65 78 74 2D 33 3C 00 10 00 " +\r
-                        "     00 00 16 00 00 00 00 00 06 00 00 00 00 00 00 00 " +\r
-                        "     EC 00 CC 07 0F 00 04 F0 CC 07 00 00 A2 0C 0A F0 " +\r
-                        "     08 00 00 00 12 04 00 00 00 0A 00 00 93 00 0B F0 " +\r
-                        "     4A 00 00 00 7F 00 00 00 04 00 80 00 00 36 9A 02 " +\r
-                        "     85 00 02 00 00 00 8B 00 02 00 00 00 BF 00 1A 00 " +\r
-                        "     1F 00 BF 01 01 00 11 00 FF 01 00 00 08 00 80 C3 " +\r
-                        "     14 00 00 00 BF 03 00 00 02 00 54 00 65 00 78 00 " +\r
-                        "     74 00 42 00 6F 00 78 00 20 00 34 00 00 00 13 00 " +\r
-                        "     22 F1 38 07 00 00 A9 C3 32 07 00 00 50 4B 03 04 " +\r
-                        "     14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 " +\r
-                        "     00 00 E2 01 00 00 13 00 00 00 5B 43 6F 6E 74 65 " +\r
-                        "     6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 91 CD " +\r
-                        "     4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 11 69 " +\r
-                        "     BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 99 58 " +\r
-                        "     77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 A9 57 " +\r
-                        "     DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 37 D6 " +\r
-                        "     F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 82 1D " +\r
-                        "     31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 52 0A " +\r
-                        "     F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 A6 3C " +\r
-                        "     C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 72 A9 " +\r
-                        "     48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA 40 12 " +\r
-                        "     69 64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 49 E5 " +\r
-                        "     EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C 95 31 " +\r
-                        "     40 FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 24 5E " +\r
-                        "     31 A6 67 9C 32 86 34 91 25 0F 18 28 6B CA BF 53 " +\r
-                        "     16 CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 A8 73 " +\r
-                        "     E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 2E F7 " +\r
-                        "     3F D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 14 00 " +\r
-                        "     06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 00 " +\r
-                        "     8F 01 00 00 0B 00 00 00 5F 72 65 6C 73 2F 2E 72 " +\r
-                        "     65 6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD 83 D1 " +\r
-                        "     BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A 5B 49 " +\r
-                        "     4C 63 CB 58 26 6D DF BE A6 30 58 46 6F 3B EA 17 " +\r
-                        "     FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 4D 0B " +\r
-                        "     8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 D1 E1 " +\r
-                        "     C4 91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 47 32 " +\r
-                        "     FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 A0 34 " +\r
-                        "     9C 28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 81 F4 " +\r
-                        "     A6 6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F 6E 03 " +\r
-                        "     EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 D0 DC " +\r
-                        "     F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 0C B8 " +\r
-                        "     2C CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 11 13 " +\r
-                        "     7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F 00 00 " +\r
-                        "     00 FF FF 03 00 50 4B 03 04 14 00 06 00 08 00 00 " +\r
-                        "     00 21 00 5B 36 01 DE 77 02 00 00 1D 07 00 00 10 " +\r
-                        "     00 00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E " +\r
-                        "     78 6D 6C BC 55 4D 53 DB 30 10 BD 77 A6 FF 41 A3 " +\r
-                        "     7B B0 9D 26 99 90 C1 66 28 0C BD 74 0A 93 C0 0F " +\r
-                        "     10 B6 9C 78 2A 4B 1E 49 24 0E BF BE 6F 25 27 50 " +\r
-                        "     0E 3D 90 0E 17 59 5E 69 F7 ED BE FD D0 C5 65 DF " +\r
-                        "     2A B6 95 D6 35 46 E7 3C 3B 4B 39 93 BA 34 55 A3 " +\r
-                        "     D7 39 7F 7C B8 1D CD 39 73 5E E8 4A 28 A3 65 CE " +\r
-                        "     F7 D2 F1 CB E2 EB 97 8B BE B2 0B A1 CB 8D B1 0C " +\r
-                        "     26 B4 5B 40 90 F3 8D F7 DD 22 49 5C B9 91 AD 70 " +\r
-                        "     67 A6 93 1A A7 B5 B1 AD F0 F8 B5 EB A4 B2 62 07 " +\r
-                        "     E3 AD 4A C6 69 3A 4B 5C 67 A5 A8 DC 46 4A 7F 13 " +\r
-                        "     4F 78 11 6C 03 ED 5A 2A 75 15 20 A2 A8 B6 A6 8D " +\r
-                        "     BB D2 A8 22 BB 48 C8 07 DA 06 05 6C EE EA BA 18 " +\r
-                        "     A7 E7 D3 69 7A 3C 23 51 38 B6 66 57 64 83 0E ED " +\r
-                        "     0F 42 BA 90 65 93 6F E9 A0 83 B3 A0 13 8C BF 22 " +\r
-                        "     CA DE B3 B2 CF F9 74 3C 1D A7 E0 A4 DC E7 7C 3C " +\r
-                        "     9B 4C 67 29 4F A2 2D D7 B1 56 94 D6 E4 9C 33 8F " +\r
-                        "     EB AA D1 BF B1 8F 87 7A BB EA EE 6D DC 97 BF B6 " +\r
-                        "     F7 96 35 15 8C 71 A6 45 0B 56 1F 70 FF BB E9 D9 " +\r
-                        "     E4 60 0C 77 48 81 F9 1E 62 E4 85 E4 C1 A3 B7 86 " +\r
-                        "     5C 30 29 16 7D 6D DB 21 09 E2 03 29 68 45 A3 E1 " +\r
-                        "     A6 58 98 BA 66 00 9B 67 E7 D9 14 75 40 11 82 CD " +\r
-                        "     79 1A 42 14 8B 7F 53 90 44 3F C8 4E 67 9D FF 21 " +\r
-                        "     CD C9 3E 31 32 94 73 2B 4B 1F FC 13 DB 9F CE 13 " +\r
-                        "     11 AF 10 04 A7 CD 6D A3 D4 A9 04 1C 08 8E A4 52 " +\r
-                        "     65 39 BF 57 92 00 94 5E 4A 30 13 AA FC C3 04 23 " +\r
-                        "     E1 E0 36 0D 81 B8 D2 AE 9F AE 95 65 E8 18 10 8D " +\r
-                        "     4E C3 FA 44 6B 8C 2E 00 12 72 8D C0 3E 19 7B 80 " +\r
-                        "     24 74 59 D7 A0 FE 93 F1 8F A0 21 7E A3 FF 1F 7E " +\r
-                        "     DB 68 63 07 FE 31 9E 24 25 60 2B 54 CE 7D 1F FB " +\r
-                        "     0B 7C 47 BC A1 D7 86 02 A0 5A A0 3E AC F6 E4 D2 " +\r
-                        "     13 BE 68 CC 53 AB 01 23 D7 DF 61 A9 95 D9 E5 BC " +\r
-                        "     54 4D C7 19 66 E9 CB 7B D9 CE 8A 2E E7 1A D3 90 " +\r
-                        "     33 EB D5 B5 81 BF 28 96 38 79 E1 7A 8C A7 BB 7A " +\r
-                        "     F6 E8 82 A1 39 A2 8B E4 AC 72 7E 45 55 7C AA BB " +\r
-                        "     28 4B F4 DC A9 56 C8 88 0D 0B 08 54 82 5E 18 A9 " +\r
-                        "     47 8F 2B BC 30 2F 98 71 D9 61 D0 F8 82 E6 E7 68 " +\r
-                        "     42 8D EE 43 BB 07 2D A9 AB 7B 61 C5 F2 A8 6C 9F " +\r
-                        "     47 CB C7 BF 95 69 34 0C D9 3B A4 2C 8C 4D 07 69 " +\r
-                        "     78 2D 54 23 B5 BF 11 5E 1C FA FD DD 3B 13 6E 47 " +\r
-                        "     76 8B 3F 00 00 00 FF FF 03 00 50 4B 03 04 14 00 " +\r
-                        "     06 00 08 00 00 00 21 00 DB CE 2D F9 2C 01 00 00 " +\r
-                        "     AE 01 00 00 0F 00 00 00 64 72 73 2F 64 6F 77 6E " +\r
-                        "     72 65 76 2E 78 6D 6C 5C 50 5D 4F C2 30 14 7D 37 " +\r
-                        "     F1 3F 34 D7 C4 37 E9 18 D4 00 52 C8 62 42 C4 64 " +\r
-                        "     7E 0C 49 7C 2D 6B CB 16 D7 76 B6 75 0C 7F BD 1D " +\r
-                        "     42 30 3E DD 9C 73 EE 39 ED B9 D3 79 AB 2A D4 08 " +\r
-                        "     EB 4A A3 29 F4 7B 11 20 A1 73 C3 4B BD A5 B0 7E " +\r
-                        "     5B DC 8C 00 39 CF 34 67 95 D1 82 C2 5E 38 98 CF " +\r
-                        "     2E 2F A6 6C C2 CD 4E 67 A2 59 F9 2D 0A 21 DA 4D " +\r
-                        "     18 85 C2 FB 7A 82 B1 CB 0B A1 98 EB 99 5A E8 A0 " +\r
-                        "     49 63 15 F3 01 DA 2D E6 96 ED 42 B8 AA 70 1C 45 " +\r
-                        "     B7 58 B1 52 87 17 0A 56 8B FB 42 E4 1F AB 2F 45 " +\r
-                        "     21 E5 F2 E9 7D 58 2E 1E 99 FC 4C 96 C3 6C 44 9A " +\r
-                        "     17 4E 28 BD BE 6A 93 3B 40 5E B4 FE BC 5C 37 36 " +\r
-                        "     8D D3 74 F3 BA 4E 4E 0B 87 B8 25 A7 40 00 C9 87 " +\r
-                        "     FD C6 96 3C 63 CE 0B 4B 21 F4 0B 6D 43 53 98 85 " +\r
-                        "     0A 6D 95 E8 BC 30 16 C9 4C B8 F2 3B F4 FB E5 A5 " +\r
-                        "     35 0A 59 B3 0B B8 0F 28 37 55 27 74 C4 B3 94 4E " +\r
-                        "     F8 8E 1E 0E A2 90 15 A4 13 15 47 63 42 22 C0 5D " +\r
-                        "     AE 37 47 77 7C 74 87 F9 D7 3D 8E C8 3F 77 3F 1E " +\r
-                        "     8C 62 D2 B9 F1 F9 5B 07 70 3E F3 EC 07 00 00 FF " +\r
-                        "     FF 03 00 50 4B 01 02 2D 00 14 00 06 00 08 00 00 " +\r
-                        "     00 21 00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D " +\r
-                        "     2E 78 6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 " +\r
-                        "     00 00 21 00 31 DD 5F 61 D2 00 00 00 8F 01 00 00 " +\r
-                        "     0B 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 01 " +\r
-                        "     00 00 5F 72 65 6C 73 2F 2E 72 65 6C 73 50 4B 01 " +\r
-                        "     02 2D 00 14 00 06 00 08 00 00 00 21 00 5B 36 01 " +\r
-                        "     DE 77 02 00 00 1D 07 00 00 10 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 29 02 00 00 64 72 73 2F 73 " +\r
-                        "     68 61 70 65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 2D " +\r
-                        "     00 14 00 06 00 08 00 00 00 21 00 DB CE 2D F9 2C " +\r
-                        "     01 00 00 AE 01 00 00 0F 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 CE 04 00 00 64 72 73 2F 64 6F 77 " +\r
-                        "     6E 72 65 76 2E 78 6D 6C 50 4B 05 06 00 00 00 00 " +\r
-                        "     04 00 04 00 F5 00 00 00 27 06 00 00 00 00 00 00 " +\r
-                        "     10 F0 12 00 00 00 02 00 01 00 60 01 0B 00 9A 00 " +\r
-                        "     02 00 D0 00 0C 00 00 01 00 00 11 F0 00 00 00 00 " +\r
-                        "     5D 00 1A 00 15 00 12 00 06 00 12 00 11 60 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 00 00 00 00 EC 00 " +\r
-                        "     08 00 00 00 0D F0 00 00 00 00 B6 01 12 00 12 02 " +\r
-                        "     00 00 00 00 00 00 00 00 06 00 10 00 00 00 00 00 " +\r
-                        "     3C 00 07 00 00 74 65 78 74 2D 34 3C 00 10 00 00 " +\r
-                        "     00 16 00 00 00 00 00 06 00 00 00 00 00 00 00 3C " +\r
-                        "     00 C8 07 0F 00 04 F0 C8 07 00 00 A2 0C 0A F0 08 " +\r
-                        "     00 00 00 13 04 00 00 00 0A 00 00 93 00 0B F0 4A " +\r
-                        "     00 00 00 7F 00 00 00 04 00 80 00 80 33 9A 02 85 " +\r
-                        "     00 02 00 00 00 8B 00 02 00 00 00 BF 00 1A 00 1F " +\r
-                        "     00 BF 01 01 00 11 00 FF 01 00 00 08 00 80 C3 14 " +\r
-                        "     00 00 00 BF 03 00 00 02 00 54 00 65 00 78 00 74 " +\r
-                        "     00 42 00 6F 00 78 00 20 00 35 00 00 00 13 00 22 " +\r
-                        "     F1 34 07 00 00 A9 C3 2E 07 00 00 50 4B 03 04 14 " +\r
-                        "     00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 00 " +\r
-                        "     00 E2 01 00 00 13 00 00 00 5B 43 6F 6E 74 65 6E " +\r
-                        "     74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 91 CD 4A " +\r
-                        "     C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 11 69 BA " +\r
-                        "     07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 99 58 77 " +\r
-                        "     DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 A9 57 DB " +\r
-                        "     69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 37 D6 F5 " +\r
-                        "     0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 82 1D 31 " +\r
-                        "     AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 52 0A F7 " +\r
-                        "     52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 A6 3C C6 " +\r
-                        "     5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 72 A9 48 " +\r
-                        "     4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA 40 12 69 " +\r
-                        "     64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 49 E5 EC " +\r
-                        "     CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C 95 31 40 " +\r
-                        "     FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 24 5E 31 " +\r
-                        "     A6 67 9C 32 86 34 91 25 0F 18 28 6B CA BF 53 16 " +\r
-                        "     CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 A8 73 E1 " +\r
-                        "     C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 2E F7 3F " +\r
-                        "     D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 14 00 06 " +\r
-                        "     00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 00 8F " +\r
-                        "     01 00 00 0B 00 00 00 5F 72 65 6C 73 2F 2E 72 65 " +\r
-                        "     6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD 83 D1 BD " +\r
-                        "     71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A 5B 49 4C " +\r
-                        "     63 CB 58 26 6D DF BE A6 30 58 46 6F 3B EA 17 FA " +\r
-                        "     3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 4D 0B 8A " +\r
-                        "     A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 D1 E1 C4 " +\r
-                        "     91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 47 32 FA " +\r
-                        "     24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 A0 34 9C " +\r
-                        "     28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 81 F4 A6 " +\r
-                        "     6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F 6E 03 EA " +\r
-                        "     7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 D0 DC F7 " +\r
-                        "     DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 0C B8 2C " +\r
-                        "     CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 11 13 7D " +\r
-                        "     57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F 00 00 00 " +\r
-                        "     FF FF 03 00 50 4B 03 04 14 00 06 00 08 00 00 00 " +\r
-                        "     21 00 C4 6F 3F 83 76 02 00 00 1C 07 00 00 10 00 " +\r
-                        "     00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E 78 " +\r
-                        "     6D 6C BC 55 CD 6E DB 30 0C BE 0F D8 3B 08 BA A7 " +\r
-                        "     B6 83 3A 4D 8D C8 45 97 A2 BB 0C 6B 90 34 0F A0 " +\r
-                        "     C8 72 62 4C 96 0C 49 4D 9C 3E FD 48 C9 49 B7 1E " +\r
-                        "     76 68 86 5E 64 9A 12 F9 51 1F 7F 34 BB EB 5B 45 " +\r
-                        "     F6 D2 BA C6 68 46 B3 AB 94 12 A9 85 A9 1A BD 65 " +\r
-                        "     74 FD FC 38 9A 52 E2 3C D7 15 57 46 4B 46 8F D2 " +\r
-                        "     D1 BB F2 EB 97 59 5F D9 82 6B B1 33 96 80 0B ED " +\r
-                        "     0A 50 30 BA F3 BE 2B 92 C4 89 9D 6C B9 BB 32 9D " +\r
-                        "     D4 B0 5B 1B DB 72 0F BF 76 9B 54 96 1F C0 79 AB " +\r
-                        "     92 71 9A 4E 12 D7 59 C9 2B B7 93 D2 3F C4 1D 5A " +\r
-                        "     06 DF 80 36 97 4A DD 07 88 A8 AA AD 69 A3 24 8C " +\r
-                        "     2A B3 59 82 31 A0 18 0C 40 78 AA EB 72 9C DE E6 " +\r
-                        "     79 7A DE 43 55 D8 B6 E6 50 66 D7 51 8F F2 49 19 " +\r
-                        "     6C A6 F9 4D 7E DE 0A 26 C1 F7 1B A0 EC 3D 11 3D " +\r
-                        "     A3 F9 38 1F A7 40 89 38 32 3A 9E 5C E7 93 94 26 " +\r
-                        "     D1 95 EB 48 CB 85 35 8C 52 E2 E1 B8 6A F4 2F 90 " +\r
-                        "     E3 A6 DE AF BA 85 8D B2 F8 B9 5F 58 D2 54 8C 4E " +\r
-                        "     28 D1 BC 05 52 9F E1 FC 37 D3 93 FC E4 0C CE A0 " +\r
-                        "     01 F1 3D A8 21 2D A8 0F 11 FD E9 C8 05 97 BC E8 " +\r
-                        "     6B DB 0E 39 E0 1F C8 40 CB 1B 0D 61 F2 C2 D4 35 " +\r
-                        "     01 B0 69 76 9B E5 50 06 E1 86 C0 E5 4D 88 8A 17 " +\r
-                        "     FF A6 20 89 71 A0 9F CE 3A FF 5D 9A 8B 63 22 E8 " +\r
-                        "     88 51 2B 85 0F F1 F1 FD 0F E7 91 88 37 08 84 D3 " +\r
-                        "     E6 B1 51 EA 52 02 4E 04 47 52 B1 B0 9C 3F 2A 89 " +\r
-                        "     00 4A 2F 25 30 13 8A FC C3 04 43 C2 81 DB 34 5C " +\r
-                        "     C4 09 BB DD CC 95 25 D0 30 40 34 34 1A AC 1B 5C " +\r
-                        "     E3 ED 02 20 22 D7 70 B1 4F C6 1E 20 11 5D D6 35 " +\r
-                        "     50 FF C9 F8 67 D0 70 7F A3 FF 1F 7E DB 68 63 07 " +\r
-                        "     FE 61 3A 49 4C C0 9E 2B 46 7D 1F FB 0B F8 8E 78 " +\r
-                        "     43 AF 0D 05 80 B5 80 7D 58 1D 31 A4 0D 7C A1 31 " +\r
-                        "     2F AD 06 98 B8 FE 09 96 5A 99 03 A3 42 35 1D 25 " +\r
-                        "     30 4A 5F DF EB 0E 96 77 8C 6A 18 86 94 58 AF E6 " +\r
-                        "     06 E2 85 62 89 83 17 42 8F F7 E9 EE 5F 3C 74 C1 " +\r
-                        "     D0 1C 31 44 0C 56 39 BF C2 2A BE 34 5C 28 4B E8 " +\r
-                        "     B9 4B BD A0 13 1B 16 20 50 71 7C 60 A4 1E AD 57 " +\r
-                        "     F0 C0 BC C2 8C CB D2 50 FF BC F0 25 CE CF 11 0C " +\r
-                        "     64 94 71 0D 56 52 57 0B 6E F9 F2 6C 6C 5F 46 CB " +\r
-                        "     F5 DF C6 38 1A 86 EC 9D 52 16 C6 A6 03 6D 78 2C " +\r
-                        "     54 23 B5 7F E0 9E 9F FA FD DD 33 13 4E 47 76 CB " +\r
-                        "     DF 00 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 " +\r
-                        "     08 00 00 00 21 00 AF 34 70 A0 29 01 00 00 AD 01 " +\r
-                        "     00 00 0F 00 00 00 64 72 73 2F 64 6F 77 6E 72 65 " +\r
-                        "     76 2E 78 6D 6C 5C 50 5D 4F C2 30 14 7D 37 F1 3F " +\r
-                        "     34 D7 C4 37 D9 98 2B 4C A4 90 C5 84 88 C9 FC 18 " +\r
-                        "     92 F0 5A D6 96 2D AE ED 6C 2B 0C 7F BD 1D A8 44 " +\r
-                        "     1F CF 67 EF E9 78 DA CA 1A 6D B9 B1 95 56 04 FA " +\r
-                        "     BD 10 10 57 85 66 95 DA 10 58 BE CE AE 12 40 D6 " +\r
-                        "     51 C5 68 AD 15 27 B0 E7 16 A6 93 F3 B3 31 1D 31 " +\r
-                        "     BD 53 39 DF 2E DC 06 F9 12 65 47 94 40 E9 5C 33 " +\r
-                        "     0A 02 5B 94 5C 52 DB D3 0D 57 5E 13 DA 48 EA 3C " +\r
-                        "     34 9B 80 19 BA F3 E5 B2 0E A2 30 1C 04 92 56 CA " +\r
-                        "     BF 50 D2 86 DF 95 BC 78 5B 7C 48 02 19 13 8F AB " +\r
-                        "     B8 9A 3D 50 F1 9E CE E3 3C C1 DB 67 86 09 B9 BC " +\r
-                        "     68 D3 5B 40 8E B7 EE 64 6E EA 55 16 65 D9 FA 65 " +\r
-                        "     99 FE 18 0E 75 73 46 60 00 48 DC EF D7 A6 62 39 " +\r
-                        "     B5 8E 1B 02 7E 9F 5F EB 97 C2 C4 4F 68 EB 54 15 " +\r
-                        "     A5 36 48 E4 DC 56 9F 7E DF 91 17 46 4B 64 F4 CE " +\r
-                        "     E3 18 50 A1 EB 4E E8 88 27 21 2C 77 04 A2 04 0F " +\r
-                        "     F1 41 F9 65 C2 1B 8C 43 08 BA 5A A7 BF C3 47 8B " +\r
-                        "     B7 FF 09 F7 C3 78 F8 2F DD 8F AE 93 08 77 E9 E0 " +\r
-                        "     74 D5 01 9C 7E 79 F2 05 00 00 FF FF 03 00 50 4B " +\r
-                        "     01 02 2D 00 14 00 06 00 08 00 00 00 21 00 F0 F7 " +\r
-                        "     8A BB FD 00 00 00 E2 01 00 00 13 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 00 00 00 5B 43 6F 6E " +\r
-                        "     74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 50 " +\r
-                        "     4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 00 31 " +\r
-                        "     DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 2E 01 00 00 5F 72 65 " +\r
-                        "     6C 73 2F 2E 72 65 6C 73 50 4B 01 02 2D 00 14 00 " +\r
-                        "     06 00 08 00 00 00 21 00 C4 6F 3F 83 76 02 00 00 " +\r
-                        "     1C 07 00 00 10 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     00 00 29 02 00 00 64 72 73 2F 73 68 61 70 65 78 " +\r
-                        "     6D 6C 2E 78 6D 6C 50 4B 01 02 2D 00 14 00 06 00 " +\r
-                        "     08 00 00 00 21 00 AF 34 70 A0 29 01 00 00 AD 01 " +\r
-                        "     00 00 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                        "     CD 04 00 00 64 72 73 2F 64 6F 77 6E 72 65 76 2E " +\r
-                        "     78 6D 6C 50 4B 05 06 00 00 00 00 04 00 04 00 F5 " +\r
-                        "     00 00 00 23 06 00 00 00 00 00 00 10 F0 12 00 00 " +\r
-                        "     00 02 00 01 00 60 01 0E 00 26 00 02 00 D0 00 0F " +\r
-                        "     00 8D 00 00 00 11 F0 00 00 00 00 5D 00 1A 00 15 " +\r
-                        "     00 12 00 06 00 13 00 11 60 00 00 00 00 00 00 00 " +\r
-                        "     00 00 00 00 00 00 00 00 00 3C 00 08 00 00 00 0D " +\r
-                        "     F0 00 00 00 00 B6 01 12 00 12 02 00 00 00 00 00 " +\r
-                        "     00 00 00 06 00 10 00 00 00 00 00 3C 00 07 00 00 " +\r
-                        "     74 65 78 74 2D 35 3C 00 10 00 00 00 16 00 00 00 " +\r
-                        "     00 00 06 00 00 00 00 00 00 00  " +\r
-                        "     ";\r
-\r
-        byte[] dgBytes = HexRead.readFromString(data);\r
+            "H4sIAAAAAAAAAO3adVRU2/4A8EPHAEOnlEooNaSUdCNIg4CUDCEtQ6gwlITSjYiSkoKA0ikg0i1IyCjS"+\r
+            "QwpSEr8B73v3PS6+9+67vz/eH+615pyz9tn71PqevT/rfGcJOIcLBtDXrNgAgBjAXcMFAAAb9SPDBAAw"+\r
+            "gLGmzna8xlxjR9WhAXhrxMAfCzqAf9IPQPXBAn6078IBgAyCH/VgVD2ADwCxAGhNBbXpc9LUF2h8n4we"+\r
+            "iOoNAKEnywaAFmAEGtDQABLgCA0AcAHfZvLjeozjc+gAUMATgAEygBNqzQTwHl8lcH5dGHWmvGY+1FJD"+\r
+            "FQOTHHX1x+dkBta2H9UcoLam0I7bAYCRrJMjDOoIM9W56wx1vcnt6WAfF92t0gIhfrfqv0o8e9khH4fE"+\r
+            "thqnQJHiJqOZUrbDByG8xwYeiEmYJPcUPoP17NH6hTz9cVtyfvnyyUuV3BzE06+vDH/Dlxi+/pYeV32e"+\r
+            "IGIy2p+e90VyZ+i9OlDL+Rp6Dmot/G2tUgYbGW5vpkSep5Fk2eKtJthDdEvKkzrvC4cmWe7kKaliC7ip"+\r
+            "0sMjlMUdN/akSG0ticE4nweeA7LUha1xyjNLXZEJUx80rOZMmgMIveJ5pQ7Hio17qM558+zaZgheNOHN"+\r
+            "tk7hCxKIZgFTs9t1NGhTdj0EIdz0tEcV4KZebLmun1t9qpQ2fF6N29/P3I3j3pYc8kI9zaMjjFNPi/ej"+\r
+            "qfkAaisS9bRAqLXpHai9Kw/38TIr6s3tZghB0GpAXUB/ncuYLE2mulOgiSpODb6R8rVbnQasDoj6bIiB"+\r
+            "gpPYItWexPrqVgUk73GpZwT2sBroUQZ07ovZJ6SXgbdvjH//55ZoggllM0Rdw7K6gHmeIt/exXytDGpq"+\r
+            "VeVUw1D6S2kCKezDar0iZnm3GGAy99/4bWY7VIgeWUlVmOVn8kdFOmIsel1/vx9MX9vNOZHYeqdvYnuy"+\r
+            "PuP2uxHPjCotCFiHoJKzFzI4MTQn1bBVdLQQT0LmrX8os3+t4Nu7F1SC7mDgrFsvKsHS80DFHx3O8SsA"+\r
+            "AJZ3XHlcbcydoagIOY6SWl1Vp3EIQT34gw8x7PqBwdNgkpp5LViiOWHMLE5uaQp1LIusFllOAzxrOusm"+\r
+            "WExAlgdfVmW/LRLc67SnF1MHKe/PT2vXvfZQw1g/fIwStuEpmaxlQa9NEWv40J8h8PmVmRGejXo+EW2v"+\r
+            "HEI0qo7ZNPb5niruyPOdHhnQLRUPGb+y4Wwo0WGygw6NOzBXGDYgzKBYzu+v6872oAZEaXgP4VtOrDV5"+\r
+            "LyQtP9wxoKWMM/buA960eUbfNY0RKG1vKafEuMZMtwJjh5N0+JRy8JYlbS/r6OhsqifipW+Gx4NtrO4B"+\r
+            "znA/UjinjWh9TytvuD/PeHSCSyZI5WEAslSzQZpIoczUQ5XM8tCuQSArrxGN5VGZ1OKFiaOi+zEpKW/o"+\r
+            "vaSMwbfZQYveck70N1ZjZrwdxtKxlzAobG5kMl1LQFazAkJqVsrYDgCNeunmvRhm4c6jbinypsbQpyUr"+\r
+            "wX1UwXJ9mtLhn3qC321JFsoymDATqy98V+hQ3ZBcpxN+W1+6wo6FrlRGKhW2ug7eAH3Dvn0rNWTG6vvr"+\r
+            "qKDGWqAXYu0s8ZmmdMM3xFjWIjXsqtT56ly7tMPY9d40CZ/CQ0b4OLsD9qG5CB5n47N2/2qJMKo1+rUg"+\r
+            "TTpa4D7au2JRC6XrayDXu7ZXGpvcwM5DWoz4HdBBTfQnmzN1K2YG+hpYNVGkX6ZlZGv7OM1XZeaZU1e2"+\r
+            "Rt+QEzSTyLSYPXezW5pSbf62gbi5iHWB7xBAZ2leDdXI7Kat5+Epnor5sC3ZefMh0hUTSQ8VP+BIz2fh"+\r
+            "t3eD2z9TLOhGRLoIErwXi+9yUgMZHhVGhWusRIi4J297mNL4iBUbHaKdFaRyobYMnKg9BWjH4+uPILV0"+\r
+            "8nC8A3U/jlFjjX71Jgi595V1xmS7qScwAiEcrTYLmRbMfuaHL6EOo1NjPeWNa8hlBYLWd64rInOTrmyv"+\r
+            "FPTmG8O5ys73rWL5VnYIcryPaJz1hicCpRGXFTgKhf3IKiBPTEzV5pMWMjt2zJfd24LZxbIx8ecWeVuF"+\r
+            "eCqzynPsivav2VzI2+hbgvBvzjdDA5uZQkqynn+lwzfceOc/l4qsu1hsOTVzy6AnNW9HhaqZ8yHRS87z"+\r
+            "01vZyoyAyGRlaOVkgW6lsSNCaOFlWqgRBJ2ZaR02lhwDHRJ1xN2B1xc64WubpudpxVONMUW7GMG/w61N"+\r
+            "qLmi+xXRMaSqigzr33Iwc3owsLyZl1hUaNChDstgByZaRb2FUik+0vh0uZw72thqliZVKKQydVxsnHk3"+\r
+            "yPj3tx8NnQv4+UTxz+WMaeP0AU6Pnb8XbrR/GklPdzw98vxeLqH/cRw63ft0SPxeejD/ECAaqljYP6Zo"+\r
+            "TOAbas2G/aMp8RrpyQyOBpihYQAbqK0+1BxuiKojWTvefxM1J1MApKiTggESs9MPZ+nkUghPWpajkQKk"+\r
+            "6H/bg/3bDYkDqHuDQT1hXLziJ1WUv+3+2wE6cY650PkPXCD+CRcAqPZf4ALfb1y4csIF3l9c+MWF/44L"+\r
+            "j9ungt3+JRe6HacgxPUvhzyKvXJ2F/yZmvIM81egZfIaDI0XieSQH6KXZeYHV8Oe9jmC77MXmJyzbuVH"+\r
+            "7Dxh7HWqUYgJgJQPP+qfFs2Wy5VJLBvjrb4LP6d2qSSiIEa1EDOTzXzBAf7NYTKe9Uv+BzvZxsBSGlzq"+\r
+            "j2IjVpqWoXU2lXXDhRppha9tKwNMX4WqNEd+qo3WpH0X21ausDawEugMlpZ1XaXro5TpEAOTyMX3q32g"+\r
+            "MJxtF2+idkYSmm3o6N6l7W39svNCNlqfzruLTTpsXDpob1SYnlNqhqsWeUW8X0QLFtb0RgBb4RFZ5sL0"+\r
+            "d0/SQfbKUi5bT3OBzDhhYW67b3Rb0nlESHfbpvodNwNarcSwSY0MT4wUiebd+x+jYc7Y1n2+lUQtURRx"+\r
+            "30MmxUonWXqrOwS88XfYSPvWDKWTxAd15QH75K4YXh20CYiyU3YjQcbGEoJcjplI/AMtEo7r7XINk573"+\r
+            "ttxnL6/9tUHRi1OE6J/j4C+e18b5+n2Sujwc78Z2iVgqPx6w8gr3STZTEnam+x76oWmpHGSLuwkiJvTG"+\r
+            "RlKOOIuBQ9oojJdCS+4ryVHpYg358B7SDCFMC46CEUMqT575UKujkzl/itEcCTxEr8cwQdh5o5lxmTEm"+\r
+            "sBHYgkxtulQL0LCL7vs/j9lrs2FGJpAmZb1khCo2GylQdMmohMWCCNdlSh5UgdKDv7/24CGqTnOKID6P"+\r
+            "zVFodIvClLZo9WhLi4c6eh1EzC5SzyMTLmTnaWpiPnzRRdLGOGLDNc4iUwyxMqmSe6ed0PRpeHenTdnu"+\r
+            "OLWibGodMxRubxi1VyEzLFOFs7LTt8poQuMjWvzk6Ews6D2wxOX6F1iIMr2OwsJbhNo+Ubfgulo5Ravk"+\r
+            "JUteZgv/qaiWkdJy++ryV4WQnU13JuY9z566hsH7oslDpXJGjvbpFH65FOhTlwdfaNChF1Qs3GSMctPh"+\r
+            "Nbz9Fm+pKrB9Z++2XPC1VZ2OCtUKaQm5UWaWKDF9woBGK5HEoXLY2/hUPIeLbibJao0EH3edb2ALE9T4"+\r
+            "ZQV+5Zl+PQUW6ZVIRMQ0pjyc21bn9c6Y4njsNgCvvVmcFDX+RLQKZ9pzmbtT97CkcWN3zy0+hSrChV8h"+\r
+            "jVBJfGUk2+xSWQQden2qE/JJ0wf93E45aJWQUtYEJQ5idRqUycJ3TzENxD4I/XJlTx63k95POuxW6jSb"+\r
+            "NU5wwAcj6djFzYfLB6U7YLpvGT2Swk3LEhF0wpUTMPJESYaj/zktnB54/pwWTsfE76Xr32uB9QwtYKOm"+\r
+            "5GMt4ACzZ2iB+C9qge8/1QLJz7TQ/1e0wP9LC7+08P+hBWVCae5j4tP+VAtqruNMxHUe2Ud+n1fmLyTQ"+\r
+            "2YXx5fEvPB/0XNrBMcMbTT7fB5TM7O+t+C9liWwSe9yRtqHauspQ07lU7sQyCrpFV0itVmSh8uCy2/tc"+\r
+            "rkxkTnA/Icuwi65LXrzZJjtnHVc9/PG3+Paqyx5jxLjp9kTYCh49bnfJR++wGTq+hLGRe9o5GK58GrHP"+\r
+            "7FjDwHSCxrWuXyx9SlJbKsY84b3W1/QO+3VV1NceWUxtBxid1fMEeb7QKAz1A+wk8WG36NZBztBeCYG7"+\r
+            "Ff3BFrRdwldH+yS7B5aW1um8pvWF+8W0tsKaqgWwpTsuZC5YpqhZ0AYqlV/g4gm3iiPF6YRmwpvFhd/D"+\r
+            "33NdS0ps2ALJJj/q52V5VMG0QPbiqOj+HW98bDtnDJerSZ+1+lZo6ggtvZWebZfZBtN9YuxrmAlHTxYf"+\r
+            "cVMDllgfs9JcREuB7CZEfBGQhT07MvJnX2sM/PFxwfU8dYjmBZW53fWD60iNEH3cB9p76dFftdDU0XE0"+\r
+            "eQtfiKn4AVpcWOxftPeb0ZsDA8pLJEO4ut35E4Okqnz7NKwgjs4EOccfF5rfSNDc95WDaY4wHbB9SZU+"+\r
+            "2C3b89lxyHxNsxk8eXENfcuYb3FPwzTNo5HutoMS0IX1onkxJE5oLbCpVoAuDVGtSH07DxyWULrA7qew"+\r
+            "93XSHVJ7S0eaI6tFWGSkkSqG5fXNNIaewY9XxXL904XR5S+itGBOaaoyMuLjYUtuabkPoKtE9IZqZH7D"+\r
+            "f5ZINS+ovLSROlfUeChS3SrjUT9xwJ2ej3XF6+6k/TPFzm+IJyWCBBUe1XwIIS6DA21muvSJqx77Oqur"+\r
+            "DDQNorlG+2d64a68eyEHak/+z7ygeeyFQJQXwMdeEGV970demkTM+/g3L7g4WBuZ7yC5LjyY/yKyDZ/b"+\r
+            "gok76IaXN1V32OAfmGAqzTetqTixv5i0voLHNPd49oWQocYHEM5g+8zbpPDK0QVj+0R4gEyI+wWF9M16"+\r
+            "GvOlR1rss/eySUS7skoe7TItY7t2ujMbvxeOyBB7YfC8OTBGcKqE/O3cVyPNtkqvXWqdV9asDQO7TNfb"+\r
+            "3N/gPR/Rd9gD2kKHUxPpOKhcEgoRegu26aFPXPExpL7aNpRT9D7eaNLCPZAZ7yNnTZcxyqlmD5fnoyra"+\r
+            "wzuIqH+twGznTh7ki6/NuB8Ajx/AYzQmjXV05puyUVLC3CFe7CZZDjaipzsyJ7tzBF55V6FcjB7We32x"+\r
+            "ZTeUreF/TgunB54/p4XTEfF7+Q++LZylBTyA8EQL+IDrGVog+Yta4D9bC104p1MRpD/TgtBfSUUIAL9S"+\r
+            "Eb+08P+gBSMhtMnjl5b+51rQHoecaEE6837xU9bHUW+s2AnqYPixjWDi8hTPy6oMyheJGuqdWNg0iK5G"+\r
+            "EVHdMLHdXq4/6HsLRVwujx8WVJgTF1MVia0W0M0cEfHxqqTvFnE1mVdhz4T2bA+sd04hE0PrS0HpneEl"+\r
+            "BKyvjaSiNsK3P55XNq6KLnS2zo6lzSkrKVzbKUNmlVrgfClUabUVVTW2fp47oaDiQ3bdk8QeY9nwshsF"+\r
+            "U0ZueXZ4zUDu+RqlNpwxbCz7lcVq6py5Qdt74hc0hcut9C0DiJbBMtVR0FinhbSAV2lkYQ3nOyZflfbu"+\r
+            "wsTpcz5lTcx5iT+5Zn3pegbXSIle3PB0Cn8kMr+/oSQy+F7N4orDRGJD+XaCIEWYS7Y8SI/R+ahmYXTa"+\r
+            "jMBDyW+XwWI6cPpNZkWQMeQSpbfDODPeFMYlG/nMz9kGSdVWwBPruVFyNykS/+67tDLkoT7aUXKSberW"+\r
+            "T4+Yu9slePniXDlUGffJxlN7yEheEmPmdDtkDuVhnsONyNKCijToxwBxJioQsvz9ZswLnz8JEfpVDhSl"+\r
+            "FsVD56mJw9Wb9+TswrgB0jvhjcdeuAi7MXKcjIhMY4ZnHjHCx21u4RzyPrvIYsah0+PN+B3kpVibPhKE"+\r
+            "nmaYJvFia3qArN6mS7sA7cIIwjwvfnSmVkftHY3VQuf90Z5H3HO0g1H8yPdlfg3sCcJ3P98Ly6m5tzXv"+\r
+            "ny6SETr94g5cXtcrv4ZddXMiT68thBCEq+NvQp2nGMlRC+FJchk179vxn52zkQlfka3B4coruG/+9muu"+\r
+            "fapi57uGeFsBglGxLM4wNRxbTy6dC2UNJCbn9g4+ipE5KrqHSp4ZpOM9XLvH352LfpaKuHn9RypCUmCk"+\r
+            "5coC9RBwkoqwhBMoe3HZdVKOuJe7EfjU0ctAJD6muK6ILFcN3i24PISLVMm8tHmfhCndtVm17nkx3Ggi"+\r
+            "DBDpFbCO7/dvMhFO6uXmybZv6la3zrixy4XPPKZGHdj0/Z5/SScoPQn52HA+TfkWxQbaGNdswrJMZb7z"+\r
+            "OfkKgxKtYCp8vdDvMtOMBTzyzDNfF7wNuBke719LaLaXS6ZSZ6+rvx0rJmXy+rDW+IpQ+CBso1pdHRRc"+\r
+            "yZIjBbQHH7QmiN/qAakyb4IcZLWTAvEd4udrIZTt1yq/im1+n3kuiH/jFagSzH5Flw3W8ipOfSeCgSgj"+\r
+            "iiKLjELxlsz5xptFVxQ9vGDBuyNXI9okPSQZwiwGqtZ3jXCcJTaWcP7XuHB65PlzXDgdEn+KC2elIkBA"+\r
+            "8gkXCI7/dfAHLpD+RS4InMUFcaDthAtt/8AFsp9wwZf/r3BB8DcuCJxwgfsXF35x4b/jQouTZIA7Kv7O"+\r
+            "/YtUxI9/LojhVueUB4iqhbfJJ2bUENhFCYDT2u5YXEsgUFZLkThQaleuYHC3CTKxTCbd1WT0EahBGslv"+\r
+            "DVS32ii8KogjzQvMo62Dwg72hZO1psRHKPQVVBUiB/prviITb5iO+tuV8Cf4gpbxNSDVG/UcMS0Pn9pX"+\r
+            "1fA9HSo2ohu/A25wf6KTwNh4tyDGJVmddORGO0dF7IBkC70hNsJXKFHlI05Ibn6hbebFsMuvbvjzplET"+\r
+            "SHnmI++kTM7evTcpq/uhfFbDakQz8qsyjX32rhp8Ep/1zTZd2tJVkquZu8KMOVIPhflEnxnPxcax9scj"+\r
+            "lToDBcO0pj5X3t7kifqSPfmyOjC8dKfK1GBAJ0ydvb8WSyv18/6Vwdj9aYKeNLT1q7nMXLlgkoOFNqzE"+\r
+            "2nm7cSKRT4xtUp10hOZfm4YE0Ypt3Z/MaGB/DmqcUQt5RHWUzfTQJS21R/ToZnLorfPzIZocgeD19QPw"+\r
+            "XHTIFdwHg7Mlmota6OqYilolxSmSlx8CKjwsELJHKCrINvmNCxi34NV87Ipn6YNICQjQvqAz/rKMznR+"+\r
+            "xLnkeisDE8nNYUGNo/Yd6z5nn79bwVxU+VrjMw6FYyvsRHjKviTE8i3z9Tag580i9Ern5SnETqo8xEsw"+\r
+            "fIyRKSNIzwJRMUUgiRI8wm5TB8UZvJzFngq0eBhAJRO5vbBiKg5703eOV45AT6Sh6XK9gDG76nyVal0a"+\r
+            "GR0lk4aLl1kWQ6H+WmNtU1jngMZR7RpLTy8JgWWcC6Gelj7Icfervb2pQuc3RKswbdDSUy3K1mwMB09O"+\r
+            "lBZ8Pj1LRWmBn0xd0b0TcWaMvhRwTruEejUL/yMtjCZxXMuKevsgpH2fOmbNcDiBq2jZnuNYC7lyjL3W"+\r
+            "qwueYx20DlUl8XqYe3XExPqBVvFjxAb1PUWkUsOab20KKdiK5yizYzde8dLz1mmLILgnsHdJoYpxUgvG"+\r
+            "/PjoRnHGWuODhPomZGNKi+ICT3xpqjdmSokyIOcwY/Q6GjQGghDxtZ5GXkroNGSRBZXJVzXWn/V8EX8z"+\r
+            "bh2EV1VrM2gkFVGxYum4qEsJHd2DPj6kJnJzVTADlCZWR7ItRI7zEPBUU2RiU8t1G6QOxXMhpekJvVQ4"+\r
+            "IppKQdVys+cLtUY6Un0+hI2Z0wMzAxO8Lr0LbaILk8WtNsxpaFYMrTjC22723OH5GFkUi+ux8An2Hi0F"+\r
+            "fvcr1v8aFU6POn+OCqfj4ffS/e+pcOEMKhABrCdUAAPhwB+pQHYGFcT/BBUEz6LC/wGpc+eRNSkAAA==";\r
+\r
+        byte[] base64Bytes = DatatypeConverter.parseBase64Binary(data);\r
+        byte[] dgBytes = IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(base64Bytes)));\r
         List<Record> dgRecords = RecordFactory.createRecords(new ByteArrayInputStream(dgBytes));\r
         assertEquals(20, dgRecords.size());\r
 \r
@@ -1314,915 +776,136 @@ public class TestDrawingAggregate extends TestCase {
         assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave));\r
     }\r
 \r
-    public void testUnhandledContinue2() {\r
-        String data = "EC 00 38 08 0F 00 02 F0 97 37 00 00 10 00 " +\r
-                "08 F0 08 00 00 00 08 00 00 00 07 04 00 00 0F 00 " +\r
-                "03 F0 7F 37 00 00 0F 00 04 F0 28 00 00 00 01 00 " +\r
-                "09 F0 10 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 02 00 0A F0 08 00 00 00 00 04 " +\r
-                "00 00 05 00 00 00 0F 00 04 F0 E0 07 00 00 12 00 " +\r
-                "0A F0 08 00 00 00 01 04 00 00 00 0A 00 00 83 00 " +\r
-                "0B F0 50 00 00 00 BF 00 18 00 1F 00 81 01 4F 81 " +\r
-                "BD 00 BF 01 10 00 10 00 C0 01 38 5D 8A 00 CB 01 " +\r
-                "38 63 00 00 FF 01 08 00 08 00 80 C3 20 00 00 00 " +\r
-                "BF 03 00 00 02 00 1F 04 40 04 4F 04 3C 04 3E 04 " +\r
-                "43 04 33 04 3E 04 3B 04 4C 04 3D 04 38 04 3A 04 " +\r
-                "20 00 31 00 00 00 23 00 22 F1 4E 07 00 00 FF 01 " +\r
-                "00 00 40 00 A9 C3 42 07 00 00 50 4B 03 04 14 00 " +\r
-                "06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 00 00 " +\r
-                "E2 01 00 00 13 00 00 00 5B 43 6F 6E 74 65 6E 74 " +\r
-                "5F 54 79 70 65 73 5D 2E 78 6D 6C 94 91 CD 4A C4 " +\r
-                "30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 11 69 BA 07 " +\r
-                "AB 47 15 5D 1F 60 48 A6 6D D8 36 09 99 58 77 DF " +\r
-                "DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 A9 57 DB 69 " +\r
-                "14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 37 D6 F5 0A " +\r
-                "3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 82 1D 31 AC " +\r
-                "9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 52 0A F7 52 " +\r
-                "B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 A6 3C C6 5E " +\r
-                "06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 72 A9 48 4B " +\r
-                "06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA 40 12 69 64 " +\r
-                "10 0F 07 E1 D2 A5 00 43 18 AD C6 94 49 E5 EC CC " +\r
-                "8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C 95 31 40 FE " +\r
-                "DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 24 5E 31 A6 " +\r
-                "67 9C 32 86 34 91 25 0F 18 28 6B CA BF 53 16 CC " +\r
-                "89 0B DF 75 56 53 D9 46 7E 5F 7C 27 A8 73 E1 C6 " +\r
-                "7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 2E F7 3F D4 " +\r
-                "7C 03 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 " +\r
-                "08 00 00 00 21 00 31 DD 5F 61 D2 00 00 00 8F 01 " +\r
-                "00 00 0B 00 00 00 5F 72 65 6C 73 2F 2E 72 65 6C " +\r
-                "73 A4 90 C1 6A C3 30 0C 86 EF 83 BD 83 D1 BD 71 " +\r
-                "DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A 5B 49 4C 63 " +\r
-                "CB 58 26 6D DF BE A6 30 58 46 6F 3B EA 17 FA 3E " +\r
-                "F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 4D 0B 8A A2 " +\r
-                "65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 D1 E1 C4 91 " +\r
-                "0C DC 49 60 DF BD BF ED 4E 34 61 A9 47 32 FA 24 " +\r
-                "AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 A0 34 9C 28 " +\r
-                "D6 4D CF 39 60 A9 63 1E 74 42 7B C1 81 F4 A6 6D " +\r
-                "B7 3A FF 66 40 B7 60 AA A3 33 90 8F 6E 03 EA 7C " +\r
-                "4F D5 FC 87 1D BC CD 2C DC 97 C6 72 D0 DC F7 DE " +\r
-                "BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 0C B8 2C CF " +\r
-                "30 D3 DC D4 E7 40 BF F6 AE FF E9 95 11 13 7D 57 " +\r
-                "FE 42 FC 4C AB F5 C7 AC 17 35 76 0F 00 00 00 FF " +\r
-                "FF 03 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 " +\r
-                "00 B5 19 FD 5B 97 02 00 00 FC 06 00 00 10 00 00 " +\r
-                "00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E 78 6D " +\r
-                "6C AC 55 49 6E DB 30 14 DD 17 E8 1D 08 EE 13 0D " +\r
-                "B6 12 47 B0 14 B4 0E DA 4D D1 18 4E 73 00 56 A2 " +\r
-                "6C A1 14 29 90 AC 2D 67 55 A0 DB 02 3D 42 0F D1 " +\r
-                "4D D1 21 67 90 6F D4 4F 52 52 DA 74 58 C4 F6 42 " +\r
-                "A6 DE 17 FF 7B 7F 22 A7 E7 4D C5 D0 9A 4A 55 0A " +\r
-                "9E E0 E0 D8 C7 88 F2 4C E4 25 5F 26 F8 FA D5 B3 " +\r
-                "A3 09 46 4A 13 9E 13 26 38 4D F0 96 2A 7C 9E 3E " +\r
-                "7E 34 6D 72 19 13 9E AD 84 44 E0 82 AB 18 80 04 " +\r
-                "AF B4 AE 63 CF 53 D9 8A 56 44 1D 8B 9A 72 B0 16 " +\r
-                "42 56 44 C3 AB 5C 7A B9 24 1B 70 5E 31 2F F4 FD " +\r
-                "13 4F D5 92 92 5C AD 28 D5 17 CE 82 53 EB 5B 6F " +\r
-                "C4 8C 32 F6 C4 52 38 A8 90 A2 72 AB 4C B0 34 9C " +\r
-                "7A 46 83 59 DA 0D B0 B8 2C 8A 74 14 8C 47 61 34 " +\r
-                "D8 0C 64 CD 52 6C D2 91 83 CD B2 C7 8C 3D 88 C2 " +\r
-                "B1 EF 0F 36 BB C5 FA BE 23 D4 62 20 49 C7 83 F3 " +\r
-                "01 33 5B A2 49 E0 FF 8B 38 E8 C4 DE 67 3E 8B FA " +\r
-                "1D 60 B9 E3 ED D9 54 8D 2A 92 49 91 60 8C 34 6D " +\r
-                "34 2B F9 1B 58 3B 5A BE BE AA E7 B2 93 F0 72 3D " +\r
-                "97 A8 CC 13 1C 62 C4 49 05 85 6A 3F ED DE ED 3E " +\r
-                "B6 DF DB DB DD FB F6 73 7B DB 7E DB 7D 68 7F B4 " +\r
-                "5F DA AF 28 C0 DE B0 CD F8 80 37 1B EE AF 1E 95 " +\r
-                "F5 4D E2 A6 90 55 57 60 F2 80 F2 56 A4 E4 A0 97 " +\r
-                "C4 A2 28 50 03 0D 16 8D 46 10 33 46 DB 04 9F 86 " +\r
-                "A3 33 DF 37 5A 48 0C C1 A1 CC D8 C7 93 C8 80 28 " +\r
-                "83 0F 82 E8 34 38 81 8F 8D 3E A7 C4 7C 5A 4B A5 " +\r
-                "9F 53 B1 B7 2A 64 1C 25 58 D2 4C 5B 85 64 FD 42 " +\r
-                "69 47 D5 53 74 79 71 B9 30 CD A6 F4 96 51 23 82 " +\r
-                "F1 05 85 80 6C E3 3F 38 2F 50 30 08 39 B4 EC 76 " +\r
-                "62 E8 8C 49 B4 26 2C C1 24 CB 28 D7 81 33 AD 48 " +\r
-                "4E 1D 1C F9 F0 EB F2 31 EC B0 D9 B1 82 8C B2 A2 " +\r
-                "64 EC 60 DA 3A 01 66 9A FF D4 E6 72 D5 F1 D9 22 " +\r
-                "16 05 24 F3 60 E4 FE FF 12 E3 C8 69 CF 68 23 17 " +\r
-                "FC 70 E4 55 C9 85 FC 9B 00 06 55 E9 22 77 7C 7D " +\r
-                "93 B8 D6 30 5D A2 9B A7 22 DF 1A 49 AF E1 1F 06 " +\r
-                "73 DF 3E 81 F3 59 5F C2 A3 60 62 93 E0 8C 95 35 " +\r
-                "46 70 F0 DE DC C7 A4 66 33 01 DD 03 F3 E3 8E E6 " +\r
-                "04 6B 37 5F 4C E9 2B 23 70 5F 29 10 39 4C E0 BE " +\r
-                "5E AC 13 C8 0B 61 4B B8 74 98 93 48 79 3E 27 92 " +\r
-                "2C 00 67 C4 DC 3E F2 ED D1 E2 1A 6E 9F 1B 38 09 " +\r
-                "82 A1 ED EB 2E DF 7D 92 ED C9 A5 00 B5 97 01 2B " +\r
-                "61 6C 2E 88 26 A6 44 B6 16 BF 5F 23 16 73 B9 49 " +\r
-                "7F 02 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 " +\r
-                "08 00 00 00 21 00 CA 39 EE E5 1C 01 00 00 8E 01 " +\r
-                "00 00 0F 00 00 00 64 72 73 2F 64 6F 77 6E 72 65 " +\r
-                "76 2E 78 6D 6C 4C 90 CB 4E C3 30 10 45 F7 48 FC " +\r
-                "83 35 48 6C 10 75 9E 28 94 3A 55 41 42 65 53 44 " +\r
-                "DA B2 60 67 12 E7 21 62 3B B2 4D 93 FE 3D 93 96 " +\r
-                "AA DD F9 CE DC 33 33 D7 B3 F9 20 5B B2 13 C6 36 " +\r
-                "5A 31 F0 27 1E 10 A1 72 5D 34 AA 62 B0 DD BC DE " +\r
-                "27 40 AC E3 AA E0 AD 56 82 C1 5E 58 98 A7 D7 57 " +\r
-                "33 3E 2D 74 AF 32 B1 5B BB 8A E0 10 65 A7 9C 41 " +\r
-                "ED 5C 37 A5 D4 E6 B5 90 DC 4E 74 27 14 F6 4A 6D " +\r
-                "24 77 28 4D 45 0B C3 7B 1C 2E 5B 1A 78 DE 03 95 " +\r
-                "BC 51 B8 A1 E6 9D 78 A9 45 FE B3 FE 95 B8 E4 43 " +\r
-                "7E 6E F5 73 F2 B5 A2 77 DB 3E 5B 6E 92 26 0E 13 " +\r
-                "C6 6E 6F 86 C5 13 10 27 06 77 36 FF D3 6F 05 83 " +\r
-                "00 48 B9 DC 7F 9B A6 C8 B8 75 C2 30 C0 38 18 0E " +\r
-                "83 41 8A 17 0F ED 42 E5 B5 36 E3 BB 34 5A 12 A3 " +\r
-                "7B 06 21 90 5C B7 07 1A F5 7B 59 5A E1 90 88 83 " +\r
-                "C8 43 1C 5B A7 52 E8 47 61 10 03 1D 71 A7 8F B0 " +\r
-                "8F 3B 0F 74 04 63 E1 64 7D 8C D1 78 C9 C6 89 EF " +\r
-                "1D 59 7A 79 07 8A F3 37 A6 7F 00 00 00 FF FF 03 " +\r
-                "00 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 " +\r
-                "00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B " +\r
-                "43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 " +\r
-                "6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 " +\r
-                "21 00 31 DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 2E 01 00 00 " +\r
-                "5F 72 65 6C 73 2F 2E 72 65 6C 73 50 4B 01 02 2D " +\r
-                "00 14 00 06 00 08 00 00 00 21 00 B5 19 FD 5B 97 " +\r
-                "02 00 00 FC 06 00 00 10 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 29 02 00 00 64 72 73 2F 73 68 61 " +\r
-                "70 65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 2D 00 14 " +\r
-                "00 06 00 08 00 00 00 21 00 CA 39 EE E5 1C 01 00 " +\r
-                "00 8E 01 00 00 0F 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 EE 04 00 00 64 72 73 2F 64 6F 77 6E 72 " +\r
-                "65 76 2E 78 6D 6C 50 4B 05 06 00 00 00 00 04 00 " +\r
-                "04 00 F5 00 00 00 37 06 00 00 00 00 00 00 10 F0 " +\r
-                "12 00 00 00 00 00 02 00 10 02 03 00 CD 00 04 00 " +\r
-                "D0 03 0C 00 0D 00 00 00 11 F0 00 00 00 00 5D 00 " +\r
-                "1A 00 15 00 12 00 02 00 01 00 11 60 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 EC 00 E8 07 " +\r
-                "0F 00 04 F0 E0 07 00 00 12 00 0A F0 08 00 00 00 " +\r
-                "02 04 00 00 00 0A 00 00 83 00 0B F0 50 00 00 00 " +\r
-                "BF 00 18 00 1F 00 81 01 4F 81 BD 00 BF 01 10 00 " +\r
-                "10 00 C0 01 38 5D 8A 00 CB 01 38 63 00 00 FF 01 " +\r
-                "08 00 08 00 80 C3 20 00 00 00 BF 03 00 00 02 00 " +\r
-                "1F 04 40 04 4F 04 3C 04 3E 04 43 04 33 04 3E 04 " +\r
-                "3B 04 4C 04 3D 04 38 04 3A 04 20 00 32 00 00 00 " +\r
-                "23 00 22 F1 4E 07 00 00 FF 01 00 00 40 00 A9 C3 " +\r
-                "42 07 00 00 50 4B 03 04 14 00 06 00 08 00 00 00 " +\r
-                "21 00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 " +\r
-                "00 00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 " +\r
-                "5D 2E 78 6D 6C 94 91 CD 4A C4 30 10 C7 EF 82 EF " +\r
-                "10 E6 2A 6D AA 07 11 69 BA 07 AB 47 15 5D 1F 60 " +\r
-                "48 A6 6D D8 36 09 99 58 77 DF DE 74 3F 2E E2 0A " +\r
-                "1E 67 E6 FF F1 23 A9 57 DB 69 14 33 45 B6 DE 29 " +\r
-                "B8 2E 2B 10 E4 B4 37 D6 F5 0A 3E D6 4F C5 1D 08 " +\r
-                "4E E8 0C 8E DE 91 82 1D 31 AC 9A CB 8B 7A BD 0B " +\r
-                "C4 22 BB 1D 2B 18 52 0A F7 52 B2 1E 68 42 2E 7D " +\r
-                "20 97 2F 9D 8F 13 A6 3C C6 5E 06 D4 1B EC 49 DE " +\r
-                "54 D5 AD D4 DE 25 72 A9 48 4B 06 34 75 4B 1D 7E " +\r
-                "8E 49 3C 6E F3 FA 40 12 69 64 10 0F 07 E1 D2 A5 " +\r
-                "00 43 18 AD C6 94 49 E5 EC CC 8F 96 E2 D8 50 66 " +\r
-                "E7 5E C3 83 0D 7C 95 31 40 FE DA B0 5C CE 17 1C " +\r
-                "7D 2F F9 69 A2 35 24 5E 31 A6 67 9C 32 86 34 91 " +\r
-                "25 0F 18 28 6B CA BF 53 16 CC 89 0B DF 75 56 53 " +\r
-                "D9 46 7E 5F 7C 27 A8 73 E1 C6 7F B9 48 F3 7F B3 " +\r
-                "DB 6C 7B A3 F9 94 2E F7 3F D4 7C 03 00 00 FF FF " +\r
-                "03 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 " +\r
-                "31 DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 00 00 " +\r
-                "5F 72 65 6C 73 2F 2E 72 65 6C 73 A4 90 C1 6A C3 " +\r
-                "30 0C 86 EF 83 BD 83 D1 BD 71 DA 43 19 A3 4E 6F " +\r
-                "85 5E 4B 07 BB 0A 5B 49 4C 63 CB 58 26 6D DF BE " +\r
-                "A6 30 58 46 6F 3B EA 17 FA 3E F1 EF F6 B7 30 A9 " +\r
-                "99 B2 78 8E 06 D6 4D 0B 8A A2 65 E7 E3 60 E0 EB " +\r
-                "7C 58 7D 80 92 82 D1 E1 C4 91 0C DC 49 60 DF BD " +\r
-                "BF ED 4E 34 61 A9 47 32 FA 24 AA 52 A2 18 18 4B " +\r
-                "49 9F 5A 8B 1D 29 A0 34 9C 28 D6 4D CF 39 60 A9 " +\r
-                "63 1E 74 42 7B C1 81 F4 A6 6D B7 3A FF 66 40 B7 " +\r
-                "60 AA A3 33 90 8F 6E 03 EA 7C 4F D5 FC 87 1D BC " +\r
-                "CD 2C DC 97 C6 72 D0 DC F7 DE BE A2 6A C7 D7 78 " +\r
-                "A2 B9 52 30 0F 54 0C B8 2C CF 30 D3 DC D4 E7 40 " +\r
-                "BF F6 AE FF E9 95 11 13 7D 57 FE 42 FC 4C AB F5 " +\r
-                "C7 AC 17 35 76 0F 00 00 00 FF FF 03 00 50 4B 03 " +\r
-                "04 14 00 06 00 08 00 00 00 21 00 54 76 AD 8A 97 " +\r
-                "02 00 00 FE 06 00 00 10 00 00 00 64 72 73 2F 73 " +\r
-                "68 61 70 65 78 6D 6C 2E 78 6D 6C AC 55 CD 8E D3 " +\r
-                "30 10 BE 23 F1 0E 96 EF BB F9 69 9B 2D 51 93 15 " +\r
-                "74 05 17 C4 56 5D F6 01 4C E2 B4 11 8E 1D D9 A6 " +\r
-                "3F 7B 42 E2 8A B4 8F C0 43 70 41 FC EC 33 A4 6F " +\r
-                "C4 D8 4E 52 60 81 C3 B6 3D A4 CE 4C 3C DF 37 DF " +\r
-                "CC D8 93 F3 4D C5 D0 8A 4A 55 0A 9E E0 E0 D4 C7 " +\r
-                "88 F2 4C E4 25 5F 24 F8 FA F5 F3 93 31 46 4A 13 " +\r
-                "9E 13 26 38 4D F0 96 2A 7C 9E 3E 7E 34 D9 E4 32 " +\r
-                "26 3C 5B 0A 89 20 04 57 31 18 12 BC D4 BA 8E 3D " +\r
-                "4F 65 4B 5A 11 75 2A 6A CA C1 5B 08 59 11 0D AF " +\r
-                "72 E1 E5 92 AC 21 78 C5 BC D0 F7 23 4F D5 92 92 " +\r
-                "5C 2D 29 D5 17 CE 83 53 1B 5B AF C5 94 32 F6 D4 " +\r
-                "42 38 53 21 45 E5 56 99 60 69 38 F1 0C 07 B3 B4 " +\r
-                "1B 60 71 59 14 E9 30 8A CE C2 51 EF 33 26 EB 96 " +\r
-                "62 9D 0E 9D D9 2C 3B 9B F1 07 C1 70 E0 FB BD CF " +\r
-                "6E B1 B1 F7 80 5A F4 20 E9 3E 78 6F B3 51 C2 C1 " +\r
-                "F8 5F C0 41 4B F6 1E 72 14 3C E9 F6 80 6F 8F DC " +\r
-                "E1 A9 1A 55 24 93 22 C1 18 69 BA D1 AC E4 6F 61 " +\r
-                "ED 80 F9 EA AA 9E C9 96 C4 AB D5 4C A2 32 4F F0 " +\r
-                "00 23 4E 2A 28 55 F3 69 F7 7E 77 DB 7C 6F EE 76 " +\r
-                "1F 9A CF CD 5D F3 6D F7 B1 F9 D1 7C 69 BE A2 10 " +\r
-                "7B FD 36 13 03 DE 6C C2 BF 46 54 36 36 89 37 85 " +\r
-                "AC DA 12 93 07 14 B8 22 25 07 BE 24 16 45 81 36 " +\r
-                "D0 62 D1 78 04 39 63 B4 4D F0 F8 2C 02 E1 0D 17 " +\r
-                "12 43 72 28 33 FE 21 F8 C1 88 32 F8 20 18 9D 05 " +\r
-                "11 7C 6C F8 39 26 E6 D3 5A 2A FD 82 8A 83 59 21 " +\r
-                "13 28 C1 92 66 DA 32 24 AB 97 4A 3B A8 0E A2 D5 " +\r
-                "C5 69 61 DA 4D E9 2D A3 86 04 E3 73 0A 09 D9 D6 " +\r
-                "7F B0 2E 50 30 48 39 B4 E8 76 66 E8 94 49 B4 22 " +\r
-                "2C C1 24 CB 28 D7 81 73 2D 49 4E 9D 79 E4 C3 AF " +\r
-                "D5 A3 DF 61 D5 B1 84 0C B3 A2 64 EC 68 DC 5A 02 " +\r
-                "66 9E EF 73 73 5A B5 78 B6 88 45 01 62 1E 0D DC " +\r
-                "FF 9F 30 0E 9C 76 88 36 73 C1 8F 07 5E 95 5C C8 " +\r
-                "BF 11 60 50 95 36 73 87 D7 35 89 6B 0D D3 25 7A " +\r
-                "F3 4C E4 5B 43 E9 0D FC C3 60 1E DA 27 70 42 EB " +\r
-                "4B 78 14 4C AC 13 9C B1 B2 C6 08 8E DE 9B 3F 6D " +\r
-                "52 B3 A9 80 EE 81 F9 71 87 73 82 B5 9B 2F A6 F4 " +\r
-                "95 21 78 28 15 C8 1C 26 F0 D0 28 36 08 E8 42 D8 " +\r
-                "02 AE 1D E6 28 52 9E CF 88 24 73 B0 33 62 EE 1F " +\r
-                "F9 EE 64 7E 0D F7 CF 0D 9C 04 41 DF F6 75 AB 77 " +\r
-                "27 B2 3D B9 14 58 ED 75 C0 4A 18 9B 0B A2 89 29 " +\r
-                "91 AD C5 EF 17 89 B5 39 6D D2 9F 00 00 00 FF FF " +\r
-                "03 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 " +\r
-                "88 BE 95 E9 1C 01 00 00 90 01 00 00 0F 00 00 00 " +\r
-                "64 72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 54 " +\r
-                "90 4D 4F C3 30 0C 86 EF 48 FC 87 C8 48 5C 10 4B " +\r
-                "3F D6 52 CA B2 69 20 A1 71 01 B1 AD 1C B8 85 26 " +\r
-                "5D 2B 9A A4 4A C2 DA FD 7B 3C 06 DA B8 F9 B5 FD " +\r
-                "D8 7E 3D 99 0D AA 25 5B 69 5D 63 34 83 70 14 00 " +\r
-                "91 BA 34 A2 D1 1B 06 C5 FA F1 3A 03 E2 3C D7 82 " +\r
-                "B7 46 4B 06 3B E9 60 36 3D 3F 9B F0 5C 98 5E 2F " +\r
-                "E5 76 E5 37 04 87 68 97 73 06 B5 F7 5D 4E A9 2B " +\r
-                "6B A9 B8 1B 99 4E 6A AC 55 C6 2A EE 51 DA 0D 15 " +\r
-                "96 F7 38 5C B5 34 0A 82 94 2A DE 68 DC 50 F3 4E " +\r
-                "3E D4 B2 FC 5C 7D 29 5C F2 AA DE 0A 73 9F BD 3F " +\r
-                "D3 AB A2 5F 2E D6 59 93 C4 19 63 97 17 C3 FC 0E " +\r
-                "88 97 83 3F 36 FF D2 4F 82 41 0C A4 5A EC 3E 6C " +\r
-                "23 96 DC 79 69 19 A0 1D 34 87 C6 60 8A 17 0F ED " +\r
-                "5C 97 B5 B1 FB B8 B2 46 11 6B 7A 06 63 20 A5 69 " +\r
-                "19 44 B0 D7 2F 55 E5 A4 47 22 1C C7 01 E2 58 FA " +\r
-                "4B 8D D3 F4 26 4A 80 EE 71 6F 0E 70 88 D4 0F 9D " +\r
-                "FC A7 D3 F0 16 5B 4F E9 30 8A B3 03 4D 4F 2F 41 " +\r
-                "71 7C E4 F4 1B 00 00 FF FF 03 00 50 4B 01 02 2D " +\r
-                "00 14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD " +\r
-                "00 00 00 E2 01 00 00 13 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 5B 43 6F 6E 74 65 6E " +\r
-                "74 5F 54 79 70 65 73 5D 2E 78 6D 6C 50 4B 01 02 " +\r
-                "2D 00 14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 " +\r
-                "D2 00 00 00 8F 01 00 00 0B 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 2E 01 00 00 5F 72 65 6C 73 2F " +\r
-                "2E 72 65 6C 73 50 4B 01 02 2D 00 14 00 06 00 08 " +\r
-                "00 00 00 21 00 54 76 AD 8A 97 02 00 00 FE 06 00 " +\r
-                "00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 29 " +\r
-                "02 00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E " +\r
-                "78 6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 " +\r
-                "00 21 00 88 BE 95 E9 1C 01 00 00 90 01 00 00 0F " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 00 EE 04 00 " +\r
-                "00 64 72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C " +\r
-                "50 4B 05 06 00 00 00 00 04 00 04 00 F5 00 00 00 " +\r
-                "37 06 00 00 00 00 00 00 10 F0 12 00 00 00 00 00 " +\r
-                "02 00 10 03 04 00 9A 00 05 00 D0 00 0C 00 DA 00 " +\r
-                "00 00 11 F0 00 00 00 00 5D 00 1A 00 15 00 12 00 " +\r
-                "02 00 02 00 11 60 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 EC 00 E3 07 0F 00 04 F0 DB 07 " +\r
-                "00 00 12 00 0A F0 08 00 00 00 03 04 00 00 00 0A " +\r
-                "00 00 83 00 0B F0 50 00 00 00 BF 00 18 00 1F 00 " +\r
-                "81 01 4F 81 BD 00 BF 01 10 00 10 00 C0 01 38 5D " +\r
-                "8A 00 CB 01 38 63 00 00 FF 01 08 00 08 00 80 C3 " +\r
-                "20 00 00 00 BF 03 00 00 02 00 1F 04 40 04 4F 04 " +\r
-                "3C 04 3E 04 43 04 33 04 3E 04 3B 04 4C 04 3D 04 " +\r
-                "38 04 3A 04 20 00 33 00 00 00 23 00 22 F1 49 07 " +\r
-                "00 00 FF 01 00 00 40 00 A9 C3 3D 07 00 00 50 4B " +\r
-                "03 04 14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB " +\r
-                "FD 00 00 00 E2 01 00 00 13 00 00 00 5B 43 6F 6E " +\r
-                "74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 " +\r
-                "91 CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 " +\r
-                "11 69 BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 " +\r
-                "99 58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 " +\r
-                "A9 57 DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 " +\r
-                "37 D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 " +\r
-                "82 1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 " +\r
-                "52 0A F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 " +\r
-                "A6 3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 " +\r
-                "72 A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA " +\r
-                "40 12 69 64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 " +\r
-                "49 E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C " +\r
-                "95 31 40 FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 " +\r
-                "24 5E 31 A6 67 9C 32 86 34 91 25 0F 18 28 6B CA " +\r
-                "BF 53 16 CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 " +\r
-                "A8 73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 " +\r
-                "2E F7 3F D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                "14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 " +\r
-                "00 00 8F 01 00 00 0B 00 00 00 5F 72 65 6C 73 2F " +\r
-                "2E 72 65 6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD " +\r
-                "83 D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A " +\r
-                "5B 49 4C 63 CB 58 26 6D DF BE A6 30 58 46 6F 3B " +\r
-                "EA 17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 " +\r
-                "4D 0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 " +\r
-                "D1 E1 C4 91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 " +\r
-                "47 32 FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 " +\r
-                "A0 34 9C 28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 " +\r
-                "81 F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F " +\r
-                "6E 03 EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 " +\r
-                "D0 DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 " +\r
-                "0C B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 " +\r
-                "11 13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F " +\r
-                "00 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 08 " +\r
-                "00 00 00 21 00 B1 89 CE 0F 93 02 00 00 FC 06 00 " +\r
-                "00 10 00 00 00 64 72 73 2F 73 68 61 70 65 78 6D " +\r
-                "6C 2E 78 6D 6C AC 55 4B 6E DB 30 10 DD 17 E8 1D " +\r
-                "08 EE 13 7D 1C D9 8A 60 29 68 1D B4 9B A2 31 9C " +\r
-                "E6 00 AC 44 D9 42 29 52 20 59 7F B2 2A D0 6D 81 " +\r
-                "1E A1 87 E8 A6 E8 27 67 90 6F D4 21 29 B9 8D FB " +\r
-                "59 C4 F6 C2 1E CF 70 E6 BD F9 91 E3 8B 75 CD D0 " +\r
-                "92 4A 55 09 9E E2 E0 D4 C7 88 F2 5C 14 15 9F A7 " +\r
-                "F8 E6 D5 B3 93 18 23 A5 09 2F 08 13 9C A6 78 43 " +\r
-                "15 BE C8 1E 3F 1A AF 0B 99 10 9E 2F 84 44 10 82 " +\r
-                "AB 04 14 29 5E 68 DD 24 9E A7 F2 05 AD 89 3A 15 " +\r
-                "0D E5 60 2D 85 AC 89 86 BF 72 EE 15 92 AC 20 78 " +\r
-                "CD BC D0 F7 87 9E 6A 24 25 85 5A 50 AA 2F 9D 05 " +\r
-                "67 36 B6 5E 89 09 65 EC 89 85 70 AA 52 8A DA 49 " +\r
-                "B9 60 D9 60 EC 19 0E 46 B4 0E 20 5C 95 65 76 1E " +\r
-                "85 D1 CE 62 14 D6 28 C5 2A EB D4 46 EC 75 C6 3E " +\r
-                "1A 02 11 E7 01 26 EB 61 03 FF 42 D3 62 87 D0 07 " +\r
-                "D9 47 0D 21 CA BF 70 83 8E E9 3E 70 10 0E E2 DE " +\r
-                "E7 1E 72 8F A7 1A 54 93 5C 8A 14 63 A4 E9 5A B3 " +\r
-                "8A BF 01 D9 91 E1 CB EB 66 2A 3B 62 2F 97 53 89 " +\r
-                "AA 22 C5 67 18 71 52 43 9F DA 4F DB 77 DB 8F ED " +\r
-                "F7 F6 6E FB BE FD DC DE B5 DF B6 1F DA 1F ED 97 " +\r
-                "F6 2B 1A 60 6F E7 66 62 C0 3F 9B F0 EF 11 95 8D " +\r
-                "4D 92 75 29 EB AE BF E4 01 DD AD 49 C5 81 2F 49 " +\r
-                "44 59 A2 35 CC 57 3C 88 07 61 84 D1 06 64 3F 8C " +\r
-                "47 BE 6F C8 90 04 B2 43 B9 39 70 16 47 E7 A0 44 " +\r
-                "B9 39 11 8D 82 21 9C 36 04 1D 15 73 B4 91 4A 3F " +\r
-                "A7 E2 60 5A C8 04 4A B1 A4 B9 B6 14 C9 F2 85 D2 " +\r
-                "0E AA 87 E8 0A E3 8A 61 86 4D E9 0D A3 86 04 E3 " +\r
-                "33 0A 19 D9 C1 7F 70 61 A0 63 90 72 68 D1 ED C6 " +\r
-                "D0 09 93 68 49 58 8A 49 9E 53 AE 03 67 5A 90 82 " +\r
-                "3A 75 E4 C3 A7 AB C7 CE C3 56 C7 12 32 CC CA 8A " +\r
-                "B1 A3 71 EB 08 98 6D FE 93 9B AB 55 87 67 9B 58 " +\r
-                "96 50 CC A3 81 FB FF 2B 8C 03 A7 3D A2 CD 5C F0 " +\r
-                "E3 81 D7 15 17 F2 6F 04 18 74 A5 CB DC E1 F5 43 " +\r
-                "E2 46 C3 4C 89 5E 3F 15 C5 C6 50 7A 0D BF B0 99 " +\r
-                "87 CE 09 DC CF FA 0A BE 4A 26 56 29 CE 59 D5 60 " +\r
-                "04 17 EF ED BE 4E 6A 36 11 30 3D B0 3F EE 6A 4E " +\r
-                "B1 76 FB C5 94 BE 36 04 0F A5 02 99 C3 06 1E 1A " +\r
-                "C5 06 81 BA 10 36 87 47 87 39 8A 94 17 53 22 C9 " +\r
-                "0C F4 8C 98 D7 47 BE 3D 99 DD C0 EB 73 0B 37 41 " +\r
-                "B0 1B FB A6 AB 77 5F 64 7B 75 29 D0 DA C7 80 55 " +\r
-                "B0 36 97 44 13 D3 22 DB 8B FB CF 88 D5 B9 DA 64 " +\r
-                "3F 01 00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 " +\r
-                "08 00 00 00 21 00 48 FA 47 DC 1B 01 00 00 8D 01 " +\r
-                "00 00 0F 00 00 00 64 72 73 2F 64 6F 77 6E 72 65 " +\r
-                "76 2E 78 6D 6C 4C 90 CB 4E C3 30 10 45 F7 48 FC " +\r
-                "83 35 48 6C 10 75 92 92 12 42 9D AA 20 A1 B2 01 " +\r
-                "91 36 2C D8 99 C4 79 88 D8 8E 6C D3 A4 7F CF A4 " +\r
-                "A5 6A 77 BE BE 73 EE 3C E6 8B 41 B6 64 2B 8C 6D " +\r
-                "B4 62 E0 4F 3C 20 42 E5 BA 68 54 C5 20 DB BC DC " +\r
-                "46 40 AC E3 AA E0 AD 56 82 C1 4E 58 58 24 97 17 " +\r
-                "73 1E 17 BA 57 A9 D8 AE 5D 45 30 44 D9 98 33 A8 " +\r
-                "9D EB 62 4A 6D 5E 0B C9 ED 44 77 42 A1 57 6A 23 " +\r
-                "B9 43 69 2A 5A 18 DE 63 B8 6C 69 E0 79 33 2A 79 " +\r
-                "A3 B0 43 CD 3B F1 5C 8B FC 67 FD 2B B1 C9 87 FC " +\r
-                "CC F4 53 F4 F5 46 6F B2 3E 5D 6D A2 26 9C 46 8C " +\r
-                "5D 5F 0D CB 47 20 4E 0C EE 54 FC 4F BF 16 0C EE " +\r
-                "80 94 AB DD B7 69 8A 94 5B 27 0C 03 5C 07 97 C3 " +\r
-                "C5 20 C1 89 87 76 A9 F2 5A 9B F1 5D 1A 2D 89 D1 " +\r
-                "3D 83 10 48 AE 5B 06 53 18 F5 7B 59 5A E1 18 DC " +\r
-                "CF 70 BE BD 73 FC 79 08 83 10 E8 C8 3A 7D 20 7D " +\r
-                "44 F6 28 46 9C A1 7E 30 8D B0 74 B4 8E 6C 80 71 " +\r
-                "07 9A 9E 8F 81 E2 74 C5 E4 0F 00 00 FF FF 03 00 " +\r
-                "50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 00 " +\r
-                "F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B 43 " +\r
-                "6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D " +\r
-                "6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 " +\r
-                "00 31 DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 2E 01 00 00 5F " +\r
-                "72 65 6C 73 2F 2E 72 65 6C 73 50 4B 01 02 2D 00 " +\r
-                "14 00 06 00 08 00 00 00 21 00 B1 89 CE 0F 93 02 " +\r
-                "00 00 FC 06 00 00 10 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 29 02 00 00 64 72 73 2F 73 68 61 70 " +\r
-                "65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 2D 00 14 00 " +\r
-                "06 00 08 00 00 00 21 00 48 FA 47 DC 1B 01 00 00 " +\r
-                "8D 01 00 00 0F 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 EA 04 00 00 64 72 73 2F 64 6F 77 6E 72 65 " +\r
-                "76 2E 78 6D 6C 50 4B 05 06 00 00 00 00 04 00 04 " +\r
-                "00 F5 00 00 00 32 06 00 00 00 00 00 00 10 F0 12 " +\r
-                "00 00 00 00 00 03 00 10 00 05 00 66 00 05 00 D0 " +\r
-                "01 0D 00 A6 00 00 00 11 F0 00 00 00 00 5D 00 1A " +\r
-                "00 15 00 12 00 02 00 03 00 11 60 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 EC 00 E8 07 0F " +\r
-                "00 04 F0 E0 07 00 00 12 00 0A F0 08 00 00 00 04 " +\r
-                "04 00 00 00 0A 00 00 83 00 0B F0 50 00 00 00 BF " +\r
-                "00 18 00 1F 00 81 01 4F 81 BD 00 BF 01 10 00 10 " +\r
-                "00 C0 01 38 5D 8A 00 CB 01 38 63 00 00 FF 01 08 " +\r
-                "00 08 00 80 C3 20 00 00 00 BF 03 00 00 02 00 1F " +\r
-                "04 40 04 4F 04 3C 04 3E 04 43 04 33 04 3E 04 3B " +\r
-                "04 4C 04 3D 04 38 04 3A 04 20 00 34 00 00 00 23 " +\r
-                "00 22 F1 4E 07 00 00 FF 01 00 00 40 00 A9 C3 42 " +\r
-                "07 00 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 " +\r
-                "00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 00 " +\r
-                "00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D " +\r
-                "2E 78 6D 6C 94 91 CD 4A C4 30 10 C7 EF 82 EF 10 " +\r
-                "E6 2A 6D AA 07 11 69 BA 07 AB 47 15 5D 1F 60 48 " +\r
-                "A6 6D D8 36 09 99 58 77 DF DE 74 3F 2E E2 0A 1E " +\r
-                "67 E6 FF F1 23 A9 57 DB 69 14 33 45 B6 DE 29 B8 " +\r
-                "2E 2B 10 E4 B4 37 D6 F5 0A 3E D6 4F C5 1D 08 4E " +\r
-                "E8 0C 8E DE 91 82 1D 31 AC 9A CB 8B 7A BD 0B C4 " +\r
-                "22 BB 1D 2B 18 52 0A F7 52 B2 1E 68 42 2E 7D 20 " +\r
-                "97 2F 9D 8F 13 A6 3C C6 5E 06 D4 1B EC 49 DE 54 " +\r
-                "D5 AD D4 DE 25 72 A9 48 4B 06 34 75 4B 1D 7E 8E " +\r
-                "49 3C 6E F3 FA 40 12 69 64 10 0F 07 E1 D2 A5 00 " +\r
-                "43 18 AD C6 94 49 E5 EC CC 8F 96 E2 D8 50 66 E7 " +\r
-                "5E C3 83 0D 7C 95 31 40 FE DA B0 5C CE 17 1C 7D " +\r
-                "2F F9 69 A2 35 24 5E 31 A6 67 9C 32 86 34 91 25 " +\r
-                "0F 18 28 6B CA BF 53 16 CC 89 0B DF 75 56 53 D9 " +\r
-                "46 7E 5F 7C 27 A8 73 E1 C6 7F B9 48 F3 7F B3 DB " +\r
-                "6C 7B A3 F9 94 2E F7 3F D4 7C 03 00 00 FF FF 03 " +\r
-                "00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 31 " +\r
-                "DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 00 00 5F " +\r
-                "72 65 6C 73 2F 2E 72 65 6C 73 A4 90 C1 6A C3 30 " +\r
-                "0C 86 EF 83 BD 83 D1 BD 71 DA 43 19 A3 4E 6F 85 " +\r
-                "5E 4B 07 BB 0A 5B 49 4C 63 CB 58 26 6D DF BE A6 " +\r
-                "30 58 46 6F 3B EA 17 FA 3E F1 EF F6 B7 30 A9 99 " +\r
-                "B2 78 8E 06 D6 4D 0B 8A A2 65 E7 E3 60 E0 EB 7C " +\r
-                "58 7D 80 92 82 D1 E1 C4 91 0C DC 49 60 DF BD BF " +\r
-                "ED 4E 34 61 A9 47 32 FA 24 AA 52 A2 18 18 4B 49 " +\r
-                "9F 5A 8B 1D 29 A0 34 9C 28 D6 4D CF 39 60 A9 63 " +\r
-                "1E 74 42 7B C1 81 F4 A6 6D B7 3A FF 66 40 B7 60 " +\r
-                "AA A3 33 90 8F 6E 03 EA 7C 4F D5 FC 87 1D BC CD " +\r
-                "2C DC 97 C6 72 D0 DC F7 DE BE A2 6A C7 D7 78 A2 " +\r
-                "B9 52 30 0F 54 0C B8 2C CF 30 D3 DC D4 E7 40 BF " +\r
-                "F6 AE FF E9 95 11 13 7D 57 FE 42 FC 4C AB F5 C7 " +\r
-                "AC 17 35 76 0F 00 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                "14 00 06 00 08 00 00 00 21 00 CC C2 D3 C8 98 02 " +\r
-                "00 00 FD 06 00 00 10 00 00 00 64 72 73 2F 73 68 " +\r
-                "61 70 65 78 6D 6C 2E 78 6D 6C AC 55 4B 6E DB 30 " +\r
-                "10 DD 17 E8 1D 08 EE 13 49 8E E5 C8 82 A5 A0 75 " +\r
-                "D0 6E 8A C6 70 9A 03 B0 12 65 0B A5 48 81 64 FD " +\r
-                "C9 AA 40 B7 05 7A 84 1E A2 9B A2 9F 9C 41 BE 51 " +\r
-                "87 A4 24 37 FD 2D 62 7B 61 D3 33 E4 BC 37 6F 66 " +\r
-                "C8 C9 C5 A6 62 68 45 A5 2A 05 4F 70 70 EA 63 44 " +\r
-                "79 26 F2 92 2F 12 7C F3 EA D9 49 84 91 D2 84 E7 " +\r
-                "84 09 4E 13 BC A5 0A 5F A4 8F 1F 4D 36 B9 8C 09 " +\r
-                "CF 96 42 22 08 C1 55 0C 86 04 2F B5 AE 63 CF 53 " +\r
-                "D9 92 56 44 9D 8A 9A 72 F0 16 42 56 44 C3 5F B9 " +\r
-                "F0 72 49 D6 10 BC 62 DE C0 F7 47 9E AA 25 25 B9 " +\r
-                "5A 52 AA 2F 9D 07 A7 36 B6 5E 8B 29 65 EC 89 85 " +\r
-                "70 A6 42 8A CA AD 32 C1 D2 B3 89 67 38 98 A5 3D " +\r
-                "00 8B AB A2 48 83 51 30 1E 84 BD CF 98 AC 5B 8A " +\r
-                "75 3A 72 66 B3 EC 6C C6 7F 16 05 BE DF BB EC 09 " +\r
-                "1B 7A 8F A7 45 8F 91 EE 63 F7 36 73 64 38 88 46 " +\r
-                "FF C2 0D 86 7D F4 7B C0 51 78 DE 1D 01 4E 7B E0 " +\r
-                "0E 4E D5 A8 22 99 14 09 C6 48 D3 8D 66 25 7F 03 " +\r
-                "6B 17 83 AF AE EB 99 6C 39 BC 5C CD 24 2A F3 04 " +\r
-                "87 18 71 52 41 A1 9A 4F BB 77 BB 8F CD F7 E6 6E " +\r
-                "F7 BE F9 DC DC 35 DF 76 1F 9A 1F CD 97 E6 2B 1A " +\r
-                "62 AF 3F 66 62 C0 3F 9B EF AF 11 95 8D 4D E2 4D " +\r
-                "21 AB B6 C0 E4 01 E5 AD 48 C9 81 2F 89 45 51 A0 " +\r
-                "0D 34 D8 78 EC 43 CE 18 6D 61 1D 44 01 08 6F C8 " +\r
-                "90 18 B2 43 99 D9 30 8C C2 31 18 51 66 76 84 E7 " +\r
-                "01 88 6A 76 78 8E 8A D9 5A 4B A5 9F 53 71 30 2D " +\r
-                "64 02 25 58 D2 4C 5B 8A 64 F5 42 69 07 D5 41 B4 " +\r
-                "C2 38 31 4C B7 29 BD 65 D4 90 60 7C 4E 21 23 DB " +\r
-                "F9 0F 16 06 2A 06 29 0F 2C BA 1D 19 3A 65 12 AD " +\r
-                "08 4B 30 C9 32 CA 75 E0 5C 4B 92 53 67 0E 7D F8 " +\r
-                "B4 7A F4 27 AC 3A 96 90 61 56 94 8C 1D 8D 5B 4B " +\r
-                "C0 8C F3 9F DC 9C 56 2D 9E 2D 62 51 80 98 47 03 " +\r
-                "F7 FF 27 8C 03 A7 1D A2 CD 5C F0 E3 81 57 25 17 " +\r
-                "F2 6F 04 18 54 A5 CD DC E1 75 4D E2 5A C3 74 89 " +\r
-                "DE 3C 15 F9 D6 50 7A 0D BF 30 99 87 F6 09 5C D0 " +\r
-                "FA 0A BE 0A 26 D6 09 CE 58 59 63 04 37 EF ED EF " +\r
-                "36 A9 D9 54 40 F7 C0 FC B8 BB 39 C1 DA CD 17 53 " +\r
-                "FA DA 10 3C 94 0A 64 0E 13 78 68 14 1B 04 74 21 " +\r
-                "6C 01 AF 0E 73 14 29 CF 67 44 92 39 D8 19 31 CF " +\r
-                "8F 7C 7B 32 BF 81 E7 E7 D6 DC 15 7D DB D7 AD DE " +\r
-                "9D C8 F6 EA 52 60 B5 AF 01 2B 61 6C 2E 89 26 A6 " +\r
-                "44 B6 16 F7 DF 11 6B 73 DA A4 3F 01 00 00 FF FF " +\r
-                "03 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 " +\r
-                "A9 7A 63 39 1B 01 00 00 8E 01 00 00 0F 00 00 00 " +\r
-                "64 72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 4C " +\r
-                "90 CD 4E C3 30 10 84 EF 48 BC 83 B5 48 5C 10 75 " +\r
-                "D2 36 C1 84 BA 55 41 42 ED 05 44 DA 70 E0 66 12 " +\r
-                "E7 47 C4 76 65 9B 26 7D 7B 36 6A 51 7B F3 78 F7 " +\r
-                "DB D9 D9 D9 A2 57 2D D9 4B EB 1A A3 39 84 A3 00 " +\r
-                "88 D4 B9 29 1A 5D 71 C8 B6 AF F7 0C 88 F3 42 17 " +\r
-                "A2 35 5A 72 38 48 07 8B F9 F5 D5 4C 24 85 E9 74 " +\r
-                "2A F7 1B 5F 11 1C A2 5D 22 38 D4 DE EF 12 4A 5D " +\r
-                "5E 4B 25 DC C8 EC A4 C6 5A 69 AC 12 1E A5 AD 68 " +\r
-                "61 45 87 C3 55 4B C7 41 10 53 25 1A 8D 0E B5 D8 " +\r
-                "C9 97 5A E6 3F 9B 5F 85 26 1F EA 33 33 CF EC EB " +\r
-                "8D DE 65 5D BA DA B2 26 9A 30 CE 6F 6F FA E5 13 " +\r
-                "10 2F 7B 7F 6E 3E D1 EB 82 43 04 A4 5C 1D BE 6D " +\r
-                "53 A4 C2 79 69 39 60 1C 0C 87 C1 60 8E 1B F7 ED " +\r
-                "52 E7 B5 B1 C3 BB B4 46 11 6B 3A 0E 31 90 DC B4 " +\r
-                "1C 26 30 E8 F7 B2 74 D2 A3 62 61 80 34 56 FE 7F " +\r
-                "C2 38 7C 1C 47 40 07 DA 9B 23 1B 4E 4F 30 5A 5F " +\r
-                "C0 2C 7A C0 CE 4B 78 3A 66 F1 11 A6 97 7B A0 38 " +\r
-                "9F 71 FE 07 00 00 FF FF 03 00 50 4B 01 02 2D 00 " +\r
-                "14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 " +\r
-                "00 00 E2 01 00 00 13 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 5B 43 6F 6E 74 65 6E 74 " +\r
-                "5F 54 79 70 65 73 5D 2E 78 6D 6C 50 4B 01 02 2D " +\r
-                "00 14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 " +\r
-                "00 00 00 8F 01 00 00 0B 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 2E 01 00 00 5F 72 65 6C 73 2F 2E " +\r
-                "72 65 6C 73 50 4B 01 02 2D 00 14 00 06 00 08 00 " +\r
-                "00 00 21 00 CC C2 D3 C8 98 02 00 00 FD 06 00 00 " +\r
-                "10 00 00 00 00 00 00 00 00 00 00 00 00 00 29 02 " +\r
-                "00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E 78 " +\r
-                "6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 " +\r
-                "21 00 A9 7A 63 39 1B 01 00 00 8E 01 00 00 0F 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 EF 04 00 00 " +\r
-                "64 72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 50 " +\r
-                "4B 05 06 00 00 00 00 04 00 04 00 F5 00 00 00 37 " +\r
-                "06 00 00 00 00 00 00 10 F0 12 00 00 00 00 00 03 " +\r
-                "00 10 01 06 00 33 00 05 00 D0 02 0E 00 73 00 00 " +\r
-                "00 11 F0 00 00 00 00 5D 00 1A 00 15 00 12 00 02 " +\r
-                "00 04 00 11 60 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 3C 00 E5 07 0F 00 04 F0 DD 07 00 " +\r
-                "00 12 00 0A F0 08 00 00 00 05 04 00 00 00 0A 00 " +\r
-                "00 83 00 0B F0 50 00 00 00 BF 00 18 00 1F 00 81 " +\r
-                "01 4F 81 BD 00 BF 01 10 00 10 00 C0 01 38 5D 8A " +\r
-                "00 CB 01 38 63 00 00 FF 01 08 00 08 00 80 C3 20 " +\r
-                "00 00 00 BF 03 00 00 02 00 1F 04 40 04 4F 04 3C " +\r
-                "04 3E 04 43 04 33 04 3E 04 3B 04 4C 04 3D 04 38 " +\r
-                "04 3A 04 20 00 35 00 00 00 23 00 22 F1 4B 07 00 " +\r
-                "00 FF 01 00 00 40 00 A9 C3 3F 07 00 00 50 4B 03 " +\r
-                "04 14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD " +\r
-                "00 00 00 E2 01 00 00 13 00 00 00 5B 43 6F 6E 74 " +\r
-                "65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 91 " +\r
-                "CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 11 " +\r
-                "69 BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 99 " +\r
-                "58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 A9 " +\r
-                "57 DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 37 " +\r
-                "D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 82 " +\r
-                "1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 52 " +\r
-                "0A F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 A6 " +\r
-                "3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 72 " +\r
-                "A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA 40 " +\r
-                "12 69 64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 49 " +\r
-                "E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C 95 " +\r
-                "31 40 FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 24 " +\r
-                "5E 31 A6 67 9C 32 86 34 91 25 0F 18 28 6B CA BF " +\r
-                "53 16 CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 A8 " +\r
-                "73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 2E " +\r
-                "F7 3F D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 14 " +\r
-                "00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 " +\r
-                "00 8F 01 00 00 0B 00 00 00 5F 72 65 6C 73 2F 2E " +\r
-                "72 65 6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD 83 " +\r
-                "D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A 5B " +\r
-                "49 4C 63 CB 58 26 6D DF BE A6 30 58 46 6F 3B EA " +\r
-                "17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 4D " +\r
-                "0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 D1 " +\r
-                "E1 C4 91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 47 " +\r
-                "32 FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 A0 " +\r
-                "34 9C 28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 81 " +\r
-                "F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F 6E " +\r
-                "03 EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 D0 " +\r
-                "DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 0C " +\r
-                "B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 11 " +\r
-                "13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F 00 " +\r
-                "00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 08 00 " +\r
-                "00 00 21 00 D1 22 B3 C1 96 02 00 00 F9 06 00 00 " +\r
-                "10 00 00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C " +\r
-                "2E 78 6D 6C AC 55 4B 6E DB 30 10 DD 17 E8 1D 08 " +\r
-                "EE 13 49 96 E5 B8 82 A5 A0 75 D0 6E 8A C6 70 9A " +\r
-                "03 B0 12 65 0B A5 48 81 64 FD C9 AA 40 B7 05 72 " +\r
-                "84 1E A2 9B A2 9F 9C 41 BE 51 87 A4 24 B7 E9 67 " +\r
-                "11 7B 63 53 33 9C 79 8F 6F 66 C8 C9 F9 A6 62 68 " +\r
-                "45 A5 2A 05 4F 70 70 EA 63 44 79 26 F2 92 2F 12 " +\r
-                "7C FD FA F9 C9 18 23 A5 09 CF 09 13 9C 26 78 4B " +\r
-                "15 3E 4F 1F 3F 9A 6C 72 19 13 9E 2D 85 44 90 82 " +\r
-                "AB 18 0C 09 5E 6A 5D C7 9E A7 B2 25 AD 88 3A 15 " +\r
-                "35 E5 E0 2D 84 AC 88 86 4F B9 F0 72 49 D6 90 BC " +\r
-                "62 DE C0 F7 47 9E AA 25 25 B9 5A 52 AA 2F 9C 07 " +\r
-                "A7 36 B7 5E 8B 29 65 EC A9 85 70 A6 42 8A CA AD " +\r
-                "32 C1 D2 70 E2 19 0E 66 69 03 60 71 59 14 69 18 " +\r
-                "0C C3 41 D4 FB 8C C9 BA A5 58 A7 67 CE 6C 96 9D " +\r
-                "CD F8 FD DE 6C 77 DB B4 7B 2C 2D FA FC E9 3E 6F " +\r
-                "6F 33 21 D1 38 F0 FF 85 19 B4 31 F7 41 87 67 A3 " +\r
-                "2E 04 5C 7B E0 0E 4E D5 A8 22 99 14 09 C6 48 D3 " +\r
-                "8D 66 25 7F 0B 6B 87 CB 57 57 F5 4C B6 1C 5E AD " +\r
-                "66 12 95 79 82 47 18 71 52 41 91 9A 4F BB F7 BB " +\r
-                "DB E6 7B 73 B7 FB D0 7C 6E EE 9A 6F BB 8F CD 8F " +\r
-                "E6 4B F3 15 45 D8 EB C3 4C 0E F8 B2 E7 FD 35 A3 " +\r
-                "B2 B9 49 BC 29 64 D5 16 97 3C A0 B4 15 29 39 F0 " +\r
-                "25 B1 28 0A B4 49 F0 00 2A 13 0C 22 8C B6 D0 68 " +\r
-                "61 18 46 BE 6F C8 90 18 4E 87 32 D8 10 0C C7 D1 " +\r
-                "13 30 A2 CC EC 88 CE 02 50 C8 EC F0 1C 15 B3 B5 " +\r
-                "96 4A BF A0 E2 60 5A C8 24 4A B0 A4 99 B6 14 C9 " +\r
-                "EA A5 D2 0E AA 83 68 85 71 62 98 4E 53 7A CB A8 " +\r
-                "21 C1 F8 9C C2 89 6C D7 3F 58 18 A8 98 D1 C4 A2 " +\r
-                "DB 71 A1 53 26 D1 8A B0 04 93 2C A3 5C 07 CE B5 " +\r
-                "24 39 75 66 D0 CB 29 06 7A F4 11 56 1D 4B C8 30 " +\r
-                "2B 4A C6 8E C6 AD 25 60 46 F9 4F 6E 4E AB 16 CF " +\r
-                "16 B1 28 40 CC A3 81 FB FF 13 C6 81 D3 0E D1 9E " +\r
-                "5C F0 E3 81 57 25 17 F2 6F 04 18 54 A5 3D B9 C3 " +\r
-                "EB 9A C4 B5 86 E9 12 BD 79 26 F2 AD A1 F4 06 FE " +\r
-                "61 32 0F ED 13 B8 9C F5 25 FC 14 4C AC 13 9C B1 " +\r
-                "B2 C6 08 6E DD 9B FB 36 A9 D9 54 40 F7 C0 FC B8 " +\r
-                "7B 39 C1 DA CD 17 53 FA CA 10 3C 94 0A 9C 1C 26 " +\r
-                "F0 D0 2C 36 09 E8 42 D8 02 5E 1C D6 5E 01 3C 9F " +\r
-                "11 49 E6 60 67 C4 3C 3D F2 DD C9 FC 1A 9E 9E 1B " +\r
-                "B8 09 82 BE ED EB 56 EF 4E 64 7B 75 29 B0 DA 97 " +\r
-                "80 95 30 36 17 44 13 53 22 5B 8B DF DF 10 6B 73 " +\r
-                "DA A4 3F 01 00 00 FF FF 03 00 50 4B 03 04 14 00 " +\r
-                "06 00 08 00 00 00 21 00 EA 0B 8D A0 1A 01 00 00 " +\r
-                "8A 01 00 00 0F 00 00 00 64 72 73 2F 64 6F 77 6E " +\r
-                "72 65 76 2E 78 6D 6C 4C 90 5F 4F C2 30 14 C5 DF " +\r
-                "4D FC 0E CD 35 F1 C5 48 37 C6 60 99 74 04 4D 0C " +\r
-                "BE 68 04 E6 83 6F 75 EB FE C4 B5 5D DA CA C6 B7 " +\r
-                "E7 4E 20 F0 D4 9E DB FB 3B F7 9E CE 17 BD 6C C8 " +\r
-                "4E 18 5B 6B C5 C0 1F 79 40 84 CA 74 5E AB 92 41 " +\r
-                "BA 7D 7D 8C 80 58 C7 55 CE 1B AD 04 83 BD B0 B0 " +\r
-                "48 6E 6F E6 3C CE 75 A7 D6 62 B7 71 25 41 13 65 " +\r
-                "63 CE A0 72 AE 8D 29 B5 59 25 24 B7 23 DD 0A 85 " +\r
-                "6F 85 36 92 3B 94 A6 A4 B9 E1 1D 9A CB 86 8E 3D " +\r
-                "6F 4A 25 AF 15 4E A8 78 2B 5E 2A 91 FD 6E FE 24 " +\r
-                "0E F9 94 5F A9 7E 8E BE DF E9 43 DA AD 57 DB A8 " +\r
-                "0E 83 88 B1 FB BB 7E F9 04 C4 89 DE 5D 9A 4F F4 " +\r
-                "5B CE 60 0A A4 58 ED 7F 4C 9D AF B9 75 C2 30 C0 " +\r
-                "38 18 0E 83 41 82 1B F7 CD 52 65 95 36 C3 BD 30 " +\r
-                "5A 12 A3 3B 06 33 20 99 6E 18 04 30 E8 8F A2 B0 " +\r
-                "C2 FD 93 58 3D AB C0 9F 04 E3 10 E8 40 3A 7D E4 " +\r
-                "FC F0 04 E2 79 05 4E 66 53 EC 1C 2C CF 70 18 F9 " +\r
-                "DE 11 A6 D7 3B A0 B8 7C 61 72 00 00 00 FF FF 03 " +\r
-                "00 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 21 " +\r
-                "00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B " +\r
-                "43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 5D 2E 78 " +\r
-                "6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 " +\r
-                "21 00 31 DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 2E 01 00 00 " +\r
-                "5F 72 65 6C 73 2F 2E 72 65 6C 73 50 4B 01 02 2D " +\r
-                "00 14 00 06 00 08 00 00 00 21 00 D1 22 B3 C1 96 " +\r
-                "02 00 00 F9 06 00 00 10 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 29 02 00 00 64 72 73 2F 73 68 61 " +\r
-                "70 65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 2D 00 14 " +\r
-                "00 06 00 08 00 00 00 21 00 EA 0B 8D A0 1A 01 00 " +\r
-                "00 8A 01 00 00 0F 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 ED 04 00 00 64 72 73 2F 64 6F 77 6E 72 " +\r
-                "65 76 2E 78 6D 6C 50 4B 05 06 00 00 00 00 04 00 " +\r
-                "04 00 F5 00 00 00 34 06 00 00 00 00 00 00 10 F0 " +\r
-                "12 00 00 00 00 00 03 00 10 02 07 00 00 00 05 00 " +\r
-                "D0 03 0F 00 40 00 00 00 11 F0 00 00 00 00 5D 00 " +\r
-                "1A 00 15 00 12 00 02 00 05 00 11 60 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 3C 00 E7 07 " +\r
-                "0F 00 04 F0 DF 07 00 00 12 00 0A F0 08 00 00 00 " +\r
-                "06 04 00 00 00 0A 00 00 83 00 0B F0 50 00 00 00 " +\r
-                "BF 00 18 00 1F 00 81 01 4F 81 BD 00 BF 01 10 00 " +\r
-                "10 00 C0 01 38 5D 8A 00 CB 01 38 63 00 00 FF 01 " +\r
-                "08 00 08 00 80 C3 20 00 00 00 BF 03 00 00 02 00 " +\r
-                "1F 04 40 04 4F 04 3C 04 3E 04 43 04 33 04 3E 04 " +\r
-                "3B 04 4C 04 3D 04 38 04 3A 04 20 00 36 00 00 00 " +\r
-                "23 00 22 F1 4D 07 00 00 FF 01 00 00 40 00 A9 C3 " +\r
-                "41 07 00 00 50 4B 03 04 14 00 06 00 08 00 00 00 " +\r
-                "21 00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 13 00 " +\r
-                "00 00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 " +\r
-                "5D 2E 78 6D 6C 94 91 CD 4A C4 30 10 C7 EF 82 EF " +\r
-                "10 E6 2A 6D AA 07 11 69 BA 07 AB 47 15 5D 1F 60 " +\r
-                "48 A6 6D D8 36 09 99 58 77 DF DE 74 3F 2E E2 0A " +\r
-                "1E 67 E6 FF F1 23 A9 57 DB 69 14 33 45 B6 DE 29 " +\r
-                "B8 2E 2B 10 E4 B4 37 D6 F5 0A 3E D6 4F C5 1D 08 " +\r
-                "4E E8 0C 8E DE 91 82 1D 31 AC 9A CB 8B 7A BD 0B " +\r
-                "C4 22 BB 1D 2B 18 52 0A F7 52 B2 1E 68 42 2E 7D " +\r
-                "20 97 2F 9D 8F 13 A6 3C C6 5E 06 D4 1B EC 49 DE " +\r
-                "54 D5 AD D4 DE 25 72 A9 48 4B 06 34 75 4B 1D 7E " +\r
-                "8E 49 3C 6E F3 FA 40 12 69 64 10 0F 07 E1 D2 A5 " +\r
-                "00 43 18 AD C6 94 49 E5 EC CC 8F 96 E2 D8 50 66 " +\r
-                "E7 5E C3 83 0D 7C 95 31 40 FE DA B0 5C CE 17 1C " +\r
-                "7D 2F F9 69 A2 35 24 5E 31 A6 67 9C 32 86 34 91 " +\r
-                "25 0F 18 28 6B CA BF 53 16 CC 89 0B DF 75 56 53 " +\r
-                "D9 46 7E 5F 7C 27 A8 73 E1 C6 7F B9 48 F3 7F B3 " +\r
-                "DB 6C 7B A3 F9 94 2E F7 3F D4 7C 03 00 00 FF FF " +\r
-                "03 00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 " +\r
-                "31 DD 5F 61 D2 00 00 00 8F 01 00 00 0B 00 00 00 " +\r
-                "5F 72 65 6C 73 2F 2E 72 65 6C 73 A4 90 C1 6A C3 " +\r
-                "30 0C 86 EF 83 BD 83 D1 BD 71 DA 43 19 A3 4E 6F " +\r
-                "85 5E 4B 07 BB 0A 5B 49 4C 63 CB 58 26 6D DF BE " +\r
-                "A6 30 58 46 6F 3B EA 17 FA 3E F1 EF F6 B7 30 A9 " +\r
-                "99 B2 78 8E 06 D6 4D 0B 8A A2 65 E7 E3 60 E0 EB " +\r
-                "7C 58 7D 80 92 82 D1 E1 C4 91 0C DC 49 60 DF BD " +\r
-                "BF ED 4E 34 61 A9 47 32 FA 24 AA 52 A2 18 18 4B " +\r
-                "49 9F 5A 8B 1D 29 A0 34 9C 28 D6 4D CF 39 60 A9 " +\r
-                "63 1E 74 42 7B C1 81 F4 A6 6D B7 3A FF 66 40 B7 " +\r
-                "60 AA A3 33 90 8F 6E 03 EA 7C 4F D5 FC 87 1D BC " +\r
-                "CD 2C DC 97 C6 72 D0 DC F7 DE BE A2 6A C7 D7 78 " +\r
-                "A2 B9 52 30 0F 54 0C B8 2C CF 30 D3 DC D4 E7 40 " +\r
-                "BF F6 AE FF E9 95 11 13 7D 57 FE 42 FC 4C AB F5 " +\r
-                "C7 AC 17 35 76 0F 00 00 00 FF FF 03 00 50 4B 03 " +\r
-                "04 14 00 06 00 08 00 00 00 21 00 9D C5 0E FA 96 " +\r
-                "02 00 00 FD 06 00 00 10 00 00 00 64 72 73 2F 73 " +\r
-                "68 61 70 65 78 6D 6C 2E 78 6D 6C AC 55 4B 6E DB " +\r
-                "30 10 DD 17 E8 1D 08 EE 13 49 8E E5 8F 60 29 68 " +\r
-                "1D B4 9B A2 31 9C E6 00 AC 44 D9 42 29 52 20 59 " +\r
-                "5B CE AA 40 B7 05 7A 84 1E A2 9B A2 9F 9C 41 BE " +\r
-                "51 87 A4 A4 B4 E9 67 11 DB 0B 9B 9E 21 E7 BD 79 " +\r
-                "33 43 CE CE EB 92 A1 0D 95 AA 10 3C C6 C1 A9 8F " +\r
-                "11 E5 A9 C8 0A BE 8A F1 F5 AB 67 27 13 8C 94 26 " +\r
-                "3C 23 4C 70 1A E3 1D 55 F8 3C 79 FC 68 56 67 32 " +\r
-                "22 3C 5D 0B 89 20 04 57 11 18 62 BC D6 BA 8A 3C " +\r
-                "4F A5 6B 5A 12 75 2A 2A CA C1 9B 0B 59 12 0D 7F " +\r
-                "E5 CA CB 24 D9 42 F0 92 79 03 DF 1F 79 AA 92 94 " +\r
-                "64 6A 4D A9 BE 70 1E 9C D8 D8 7A 2B E6 94 B1 27 " +\r
-                "16 C2 99 72 29 4A B7 4A 05 4B CE 66 9E E1 60 96 " +\r
-                "F6 00 2C 2E F3 3C 19 8E 46 E3 41 D8 FB 8C C9 BA " +\r
-                "A5 D8 26 63 67 36 CB CE 66 FC 41 38 18 FA 7E EF " +\r
-                "B3 47 6C EC 3B 40 2D 7A 90 64 D4 07 EF 6D 36 CA " +\r
-                "E0 6C F2 2F E0 A0 3D 73 1F 79 1A 76 27 C0 73 87 " +\r
-                "DB A1 A9 0A 95 24 95 22 C6 18 69 5A 6B 56 F0 37 " +\r
-                "B0 76 B0 7C 73 55 2D 64 4B E1 E5 66 21 51 91 C5 " +\r
-                "78 8C 11 27 25 14 AA F9 B4 7F B7 FF D8 7C 6F 6E " +\r
-                "F7 EF 9B CF CD 6D F3 6D FF A1 F9 D1 7C 69 BE A2 " +\r
-                "11 F6 FA 63 26 06 FC B3 E9 FE 1A 51 D9 D8 24 AA " +\r
-                "73 59 B6 05 26 0F 28 6F 49 0A 0E 7C 49 24 F2 1C " +\r
-                "D5 31 1E 0C A6 21 E4 8C D1 0E 9A 6D 38 09 A7 BE " +\r
-                "6F C8 90 08 B2 43 29 6C E8 8C 28 35 3B C2 71 30 " +\r
-                "82 DD 86 A0 A3 62 B6 56 52 E9 E7 54 1C 4C 0B 99 " +\r
-                "40 31 96 34 D5 96 22 D9 BC 50 DA 41 75 10 AD 30 " +\r
-                "4E 0C D3 6D 4A EF 18 35 24 18 5F 52 C8 C8 76 FE " +\r
-                "83 85 81 8A 19 4D 2C BA 1D 19 3A 67 12 6D 08 8B " +\r
-                "31 49 53 CA 75 E0 5C 6B 92 51 67 0E 7D F8 B4 7A " +\r
-                "F4 27 AC 3A 96 90 61 96 17 8C 1D 8D 5B 4B C0 8C " +\r
-                "F3 9F DC 9C 56 2D 9E 2D 62 9E 83 98 47 03 F7 FF " +\r
-                "27 8C 03 A7 1D A2 CD 5C F0 E3 81 97 05 17 F2 6F " +\r
-                "04 18 54 A5 CD DC E1 75 4D E2 5A C3 74 89 AE 9F " +\r
-                "8A 6C 67 28 BD 86 5F 98 CC 43 FB 04 2E 68 7D 09 " +\r
-                "5F 39 13 DB 18 A7 AC A8 30 82 9B F7 E6 BE 4D 6A " +\r
-                "36 17 D0 3D 70 8B BB BB 39 C6 DA CD 17 53 FA CA " +\r
-                "10 3C 94 0A 64 0E 13 78 68 14 1B 04 74 21 6C 05 " +\r
-                "AF 0E 73 14 29 CF 16 44 92 25 D8 19 31 CF 8F 7C " +\r
-                "7B B2 BC 86 E7 E7 06 6E 82 A0 6F FB AA D5 BB 13 " +\r
-                "D9 5E 5D 0A AC F6 35 60 05 8C CD 05 D1 C4 94 C8 " +\r
-                "D6 E2 F7 77 C4 DA 9C 36 C9 4F 00 00 00 FF FF 03 " +\r
-                "00 50 4B 03 04 14 00 06 00 08 00 00 00 21 00 A3 " +\r
-                "9B 83 A2 1C 01 00 00 8E 01 00 00 0F 00 00 00 64 " +\r
-                "72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 4C 90 " +\r
-                "CD 4E C3 30 10 84 EF 48 BC 83 B5 48 5C 10 75 9A " +\r
-                "34 69 08 75 AA 82 84 DA 0B 88 B6 E1 C0 CD 24 CE " +\r
-                "8F 88 ED CA 36 4D FA F6 6C 5B 50 73 B2 C7 3B DF " +\r
-                "EE 8E 67 F3 5E B6 64 2F 8C 6D B4 62 30 1E 79 40 " +\r
-                "84 CA 75 D1 A8 8A 41 B6 7D B9 8F 81 58 C7 55 C1 " +\r
-                "5B AD 04 83 83 B0 30 4F AF AF 66 3C 29 74 A7 D6 " +\r
-                "62 BF 71 15 C1 26 CA 26 9C 41 ED DC 2E A1 D4 E6 " +\r
-                "B5 90 DC 8E F4 4E 28 AC 95 DA 48 EE 50 9A 8A 16 " +\r
-                "86 77 D8 5C B6 D4 F7 BC 88 4A DE 28 9C 50 F3 9D " +\r
-                "78 AE 45 FE BD F9 91 38 E4 5D 7E 64 FA 29 FE 7C " +\r
-                "A5 77 59 B7 5E 6E E3 26 0C 62 C6 6E 6F FA C5 23 " +\r
-                "10 27 7A 77 31 FF D1 AB 82 C1 14 48 B9 3C 7C 99 " +\r
-                "A6 58 73 EB 84 61 80 71 30 1C 06 83 14 37 EE DB " +\r
-                "85 CA 6B 6D 8E F7 D2 68 49 8C EE 4E 54 AE 5B 06 " +\r
-                "01 1C F5 5B 59 5A E1 90 08 FD 89 87 38 96 FE 9F " +\r
-                "26 51 34 F5 43 A0 47 DC E9 33 3C 8E 4E 16 06 78 " +\r
-                "0E E8 87 10 8D 43 76 EC 07 F1 99 A5 C3 3D 50 5C " +\r
-                "BE 31 FD 05 00 00 FF FF 03 00 50 4B 01 02 2D 00 " +\r
-                "14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD 00 " +\r
-                "00 00 E2 01 00 00 13 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 5B 43 6F 6E 74 65 6E 74 " +\r
-                "5F 54 79 70 65 73 5D 2E 78 6D 6C 50 4B 01 02 2D " +\r
-                "00 14 00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 " +\r
-                "00 00 00 8F 01 00 00 0B 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 2E 01 00 00 5F 72 65 6C 73 2F 2E " +\r
-                "72 65 6C 73 50 4B 01 02 2D 00 14 00 06 00 08 00 " +\r
-                "00 00 21 00 9D C5 0E FA 96 02 00 00 FD 06 00 00 " +\r
-                "10 00 00 00 00 00 00 00 00 00 00 00 00 00 29 02 " +\r
-                "00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C 2E 78 " +\r
-                "6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 00 00 00 " +\r
-                "21 00 A3 9B 83 A2 1C 01 00 00 8E 01 00 00 0F 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 ED 04 00 00 " +\r
-                "64 72 73 2F 64 6F 77 6E 72 65 76 2E 78 6D 6C 50 " +\r
-                "4B 05 06 00 00 00 00 04 00 04 00 F5 00 00 00 36 " +\r
-                "06 00 00 00 00 00 00 10 F0 12 00 00 00 00 00 03 " +\r
-                "00 10 03 07 00 CD 00 06 00 D0 00 10 00 0D 00 00 " +\r
-                "00 11 F0 00 00 00 00 5D 00 1A 00 15 00 12 00 02 " +\r
-                "00 06 00 11 60 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 3C 00 E8 07 0F 00 04 F0 E0 07 00 " +\r
-                "00 12 00 0A F0 08 00 00 00 07 04 00 00 00 0A 00 " +\r
-                "00 83 00 0B F0 50 00 00 00 BF 00 18 00 1F 00 81 " +\r
-                "01 4F 81 BD 00 BF 01 10 00 10 00 C0 01 38 5D 8A " +\r
-                "00 CB 01 38 63 00 00 FF 01 08 00 08 00 80 C3 20 " +\r
-                "00 00 00 BF 03 00 00 02 00 1F 04 40 04 4F 04 3C " +\r
-                "04 3E 04 43 04 33 04 3E 04 3B 04 4C 04 3D 04 38 " +\r
-                "04 3A 04 20 00 37 00 00 00 23 00 22 F1 4E 07 00 " +\r
-                "00 FF 01 00 00 40 00 A9 C3 42 07 00 00 50 4B 03 " +\r
-                "04 14 00 06 00 08 00 00 00 21 00 F0 F7 8A BB FD " +\r
-                "00 00 00 E2 01 00 00 13 00 00 00 5B 43 6F 6E 74 " +\r
-                "65 6E 74 5F 54 79 70 65 73 5D 2E 78 6D 6C 94 91 " +\r
-                "CD 4A C4 30 10 C7 EF 82 EF 10 E6 2A 6D AA 07 11 " +\r
-                "69 BA 07 AB 47 15 5D 1F 60 48 A6 6D D8 36 09 99 " +\r
-                "58 77 DF DE 74 3F 2E E2 0A 1E 67 E6 FF F1 23 A9 " +\r
-                "57 DB 69 14 33 45 B6 DE 29 B8 2E 2B 10 E4 B4 37 " +\r
-                "D6 F5 0A 3E D6 4F C5 1D 08 4E E8 0C 8E DE 91 82 " +\r
-                "1D 31 AC 9A CB 8B 7A BD 0B C4 22 BB 1D 2B 18 52 " +\r
-                "0A F7 52 B2 1E 68 42 2E 7D 20 97 2F 9D 8F 13 A6 " +\r
-                "3C C6 5E 06 D4 1B EC 49 DE 54 D5 AD D4 DE 25 72 " +\r
-                "A9 48 4B 06 34 75 4B 1D 7E 8E 49 3C 6E F3 FA 40 " +\r
-                "12 69 64 10 0F 07 E1 D2 A5 00 43 18 AD C6 94 49 " +\r
-                "E5 EC CC 8F 96 E2 D8 50 66 E7 5E C3 83 0D 7C 95 " +\r
-                "31 40 FE DA B0 5C CE 17 1C 7D 2F F9 69 A2 35 24 " +\r
-                "5E 31 A6 67 9C 32 86 34 91 25 0F 18 28 6B CA BF " +\r
-                "53 16 CC 89 0B DF 75 56 53 D9 46 7E 5F 7C 27 A8 " +\r
-                "73 E1 C6 7F B9 48 F3 7F B3 DB 6C 7B A3 F9 94 2E " +\r
-                "F7 3F D4 7C 03 00 00 FF FF 03 00 50 4B 03 04 14 " +\r
-                "00 06 00 08 00 00 00 21 00 31 DD 5F 61 D2 00 00 " +\r
-                "00 8F 01 00 00 0B 00 00 00 5F 72 65 6C 73 2F 2E " +\r
-                "72 65 6C 73 A4 90 C1 6A C3 30 0C 86 EF 83 BD 83 " +\r
-                "D1 BD 71 DA 43 19 A3 4E 6F 85 5E 4B 07 BB 0A 5B " +\r
-                "49 4C 63 CB 58 26 6D DF BE A6 30 58 46 6F 3B EA " +\r
-                "17 FA 3E F1 EF F6 B7 30 A9 99 B2 78 8E 06 D6 4D " +\r
-                "0B 8A A2 65 E7 E3 60 E0 EB 7C 58 7D 80 92 82 D1 " +\r
-                "E1 C4 91 0C DC 49 60 DF BD BF ED 4E 34 61 A9 47 " +\r
-                "32 FA 24 AA 52 A2 18 18 4B 49 9F 5A 8B 1D 29 A0 " +\r
-                "34 9C 28 D6 4D CF 39 60 A9 63 1E 74 42 7B C1 81 " +\r
-                "F4 A6 6D B7 3A FF 66 40 B7 60 AA A3 33 90 8F 6E " +\r
-                "03 EA 7C 4F D5 FC 87 1D BC CD 2C DC 97 C6 72 D0 " +\r
-                "DC F7 DE BE A2 6A C7 D7 78 A2 B9 52 30 0F 54 0C " +\r
-                "B8 2C CF 30 D3 DC D4 E7 40 BF F6 AE FF E9 95 11 " +\r
-                "13 7D 57 FE 42 FC 4C AB F5 C7 AC 17 35 76 0F 00 " +\r
-                "00 00 FF FF 03 00 50 4B 03 04 14 00 06 00 08 00 " +\r
-                "00 00 21 00 33 C2 C5 D0 98 02 00 00 FD 06 00 00 " +\r
-                "10 00 00 00 64 72 73 2F 73 68 61 70 65 78 6D 6C " +\r
-                "2E 78 6D 6C AC 55 CD 8E D3 30 10 BE 23 F1 0E 96 " +\r
-                "EF BB 49 BA 6D DA 46 4D 56 D0 15 5C 10 5B 75 D9 " +\r
-                "07 30 89 D3 46 38 76 64 9B 36 DD 13 12 57 24 1E " +\r
-                "81 87 E0 82 F8 D9 67 48 DF 88 B1 9D 64 81 05 0E " +\r
-                "DB F6 D0 BA 33 F6 7C DF 7C 33 63 CF CE EB 92 A1 " +\r
-                "0D 95 AA 10 3C C6 C1 A9 8F 11 E5 A9 C8 0A BE 8A " +\r
-                "F1 F5 AB 67 27 13 8C 94 26 3C 23 4C 70 1A E3 1D " +\r
-                "55 F8 3C 79 FC 68 56 67 32 22 3C 5D 0B 89 20 04 " +\r
-                "57 11 18 62 BC D6 BA 8A 3C 4F A5 6B 5A 12 75 2A " +\r
-                "2A CA C1 9B 0B 59 12 0D 7F E5 CA CB 24 D9 42 F0 " +\r
-                "92 79 03 DF 0F 3D 55 49 4A 32 B5 A6 54 5F 38 0F " +\r
-                "4E 6C 6C BD 15 73 CA D8 13 0B E1 4C B9 14 A5 5B " +\r
-                "A5 82 25 C3 99 67 38 98 A5 3D 00 8B CB 3C 4F A6 " +\r
-                "A3 C1 A8 F7 18 83 75 4A B1 4D 26 CE 6C 96 9D CD " +\r
-                "F8 83 60 78 E6 FB BD CF 1E B1 91 EF E0 B4 E8 21 " +\r
-                "92 B0 0F DE DB CC 91 C1 38 1C FC 0B 38 68 CF DC " +\r
-                "43 0E 83 69 77 06 7C 77 C8 1D 9E AA 50 49 52 29 " +\r
-                "62 8C 91 A6 B5 66 05 7F 03 6B 07 CC 37 57 D5 42 " +\r
-                "B6 24 5E 6E 16 12 15 59 8C A1 5C 9C 94 50 A8 E6 " +\r
-                "D3 FE DD FE 63 F3 BD B9 DD BF 6F 3E 37 B7 CD B7 " +\r
-                "FD 87 E6 47 F3 A5 F9 8A C6 D8 EB 8F 99 18 F0 CF " +\r
-                "26 FC 6B 44 65 63 93 A8 CE 65 D9 16 98 3C A0 BC " +\r
-                "25 29 38 F0 25 91 C8 73 54 C7 78 30 1C 8E 21 67 " +\r
-                "8C 76 D0 6C E1 D9 04 94 37 64 48 04 D9 A1 14 36 " +\r
-                "04 C3 C9 68 0A 46 94 9A 1D A3 71 10 C2 6E 43 D0 " +\r
-                "51 31 5B 2B A9 F4 73 2A 0E A6 85 4C A0 18 4B 9A " +\r
-                "6A 4B 91 6C 5E 28 ED A0 3A 88 56 18 27 86 E9 36 " +\r
-                "A5 77 8C 1A 12 8C 2F 29 64 64 3B FF C1 C2 40 C5 " +\r
-                "8C 26 16 DD 8E 0C 9D 33 89 36 84 C5 98 A4 29 E5 " +\r
-                "3A 70 AE 35 C9 A8 33 8F 7C F8 B4 7A F4 27 AC 3A " +\r
-                "96 90 61 96 17 8C 1D 8D 5B 4B C0 8C F3 7D 6E 4E " +\r
-                "AB 16 CF 16 31 CF 41 CC A3 81 FB FF 13 C6 81 D3 " +\r
-                "0E D1 66 2E F8 F1 C0 CB 82 0B F9 37 02 0C AA D2 " +\r
-                "66 EE F0 BA 26 71 AD 61 BA 44 D7 4F 45 B6 33 94 " +\r
-                "5E C3 2F 4C E6 A1 7D 02 17 B4 BE 84 AF 9C 89 6D " +\r
-                "8C 53 56 54 18 C1 CD 7B F3 A7 4D 6A 36 17 D0 3D " +\r
-                "30 3F EE 6E 8E B1 76 F3 C5 94 BE 32 04 0F A5 02 " +\r
-                "99 C3 04 1E 1A C5 06 01 5D 08 5B C1 AB C3 1C 45 " +\r
-                "CA B3 05 91 64 09 76 46 CC F3 23 DF 9E 2C AF E1 " +\r
-                "F9 B9 81 9B 20 E8 DB BE 6A F5 EE 44 B6 57 97 02 " +\r
-                "AB 7D 0D 58 01 63 73 41 34 31 25 B2 B5 F8 FD 1D " +\r
-                "B1 36 A7 4D F2 13 00 00 FF FF 03 00 50 4B 03 04 " +\r
-                "14 00 06 00 08 00 00 00 21 00 6F E2 C1 89 1B 01 " +\r
-                "00 00 8E 01 00 00 0F 00 00 00 64 72 73 2F 64 6F " +\r
-                "77 6E 72 65 76 2E 78 6D 6C 4C 90 CD 4E C3 30 10 " +\r
-                "84 EF 48 BC 43 B4 48 5C 10 75 92 36 21 0D 75 AA " +\r
-                "82 84 DA 0B 88 B4 E1 C0 CD 24 CE 8F 88 ED C8 36 " +\r
-                "4D FA F6 6C 5A 50 7B B2 C7 BB DF EE 8C 17 CB 41 " +\r
-                "B4 CE 9E 6B D3 28 49 C1 9B B8 E0 70 99 AB A2 91 " +\r
-                "15 85 6C F7 72 1F 81 63 2C 93 05 6B 95 E4 14 0E " +\r
-                "DC C0 32 B9 BE 5A B0 B8 50 BD 4C F9 7E 6B 2B 07 " +\r
-                "87 48 13 33 0A B5 B5 5D 4C 88 C9 6B 2E 98 99 A8 " +\r
-                "8E 4B AC 95 4A 0B 66 51 EA 8A 14 9A F5 38 5C B4 " +\r
-                "C4 77 DD 90 08 D6 48 DC 50 B3 8E 3F D7 3C FF DE " +\r
-                "FE 08 5C F2 2E 3E 32 F5 14 7D BE 92 BB AC 4F D7 " +\r
-                "BB A8 09 A6 11 A5 B7 37 C3 EA 11 1C CB 07 7B 6E " +\r
-                "FE A3 37 05 05 F4 5A AE 0F 5F BA 29 52 66 2C D7 " +\r
-                "14 30 0E 86 C3 60 90 A0 E3 A1 5D C9 BC 56 7A BC " +\r
-                "97 5A 09 47 AB FE 48 E5 AA A5 30 83 51 BF 95 A5 " +\r
-                "E1 16 09 6F 36 75 11 C7 D2 FF D3 3C F0 03 20 23 " +\r
-                "6C D5 09 F5 C2 63 03 05 3C 2F D9 D0 9B 63 EB 25 " +\r
-                "EB 3F 84 FE 89 26 97 3E 50 9C BF 31 F9 05 00 00 " +\r
-                "FF FF 03 00 50 4B 01 02 2D 00 14 00 06 00 08 00 " +\r
-                "00 00 21 00 F0 F7 8A BB FD 00 00 00 E2 01 00 00 " +\r
-                "13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " +\r
-                "00 00 5B 43 6F 6E 74 65 6E 74 5F 54 79 70 65 73 " +\r
-                "5D 2E 78 6D 6C 50 4B 01 02 2D 00 14 00 06 00 08 " +\r
-                "00 00 00 21 00 31 DD 5F 61 D2 00 00 00 8F 01 00 " +\r
-                "00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 2E " +\r
-                "01 00 00 5F 72 65 6C 73 2F 2E 72 65 6C 73 50 4B " +\r
-                "01 02 2D 00 14 00 06 00 08 00 00 00 21 00 33 C2 " +\r
-                "C5 D0 98 02 00 00 FD 06 00 00 10 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 00 00 29 02 00 00 64 72 73 2F " +\r
-                "73 68 61 70 65 78 6D 6C 2E 78 6D 6C 50 4B 01 02 " +\r
-                "2D 00 14 00 06 00 08 00 00 00 21 00 6F E2 C1 89 " +\r
-                "1B 01 00 00 8E 01 00 00 0F 00 00 00 00 00 00 00 " +\r
-                "00 00 00 00 00 00 EF 04 00 00 64 72 73 2F 64 6F " +\r
-                "77 6E 72 65 76 2E 78 6D 6C 50 4B 05 06 00 00 00 " +\r
-                "00 04 00 04 00 F5 00 00 00 37 06 00 00 00 00 00 " +\r
-                "00 10 F0 12 00 00 00 00 00 04 00 10 00 08 00 9A " +\r
-                "00 06 00 D0 01 10 00 DA 00 00 00 11 F0 00 00 00 " +\r
-                "00 5D 00 1A 00 15 00 12 00 02 00 07 00 11 60 00 " +\r
-                "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00";\r
-\r
-\r
-        byte[] dgBytes = HexRead.readFromString(data);\r
+    @Test\r
+    public void testUnhandledContinue2() throws IOException {\r
+        String data =\r
+            "H4sIAAAAAAAAAO3bdVRUW9sA8AGGrqFHSlpAhSEcQAkJ6UYQyaFBmiEFpCVEOiREGikJSekGlRJQuiQl"+\r
+            "FQFB4ptBvxvIvd+97/fete4f7rWYc9aZc4aZw7P3/s3zbFYB/FiEANTNeD4AAATA2sQCAADIH0wgAEAI"+\r
+            "QNv04kNugZusiGMoAOxNEODHhgrAObkOgLgGHfDt/GlMAID4+3EUxHEADgDgB8DdVEbsNgDAgPMAHxQl"+\r
+            "nzpAAwoI8XsbUfh1QwCvUPiNAIBjFCzEO/BuoUOeiYZ89fPA60AloCBQGCgO5EE8XgPKA4WA/MCrQDoA"+\r
+            "F+IsRgDDR0VM5JUAwHVAbosYYl9ZDg1ICsA4+Sz0gM3dkJpDxN4s4gwSxFZb3NbG0cTGUf+mm50JXJfD"+\r
+            "1doqJrJbthUC6tjw3QAtsFvnYRJZvMDMlyLTPQ+TzrYehmInaLpMTTqKcMzi0JotHH9kzL01ZkHKc6Ni"+\r
+            "kq2K4yJorozv7TaO8FulNhosxSW8sMlIXxqugsRXD+7W4bYy1NBcBKvi7KqW0pqLcXjSxXM+DifJFmzX"+\r
+            "wxikWpWZvDlUODjJ7JArLYfB6yRHcy9MRtBma/86sYUxiBBz5k0WQBxc2B4jM7/6OjxudljZdFGvxQ/f"+\r
+            "I5br+tFosU4PBbUn555F+hUmPa5ss2Tu+7yRzIRgVsuXDWrkr4Nxp5w01EYk7+l7XHgKn2n3qpbe8no+"+\r
+            "ZuWesRfDsSsy6IG4v8fHaKfuFteEvsEbxF444m7hIrb6DiZWcE4O5GNmRNOdFgje/Q2/Or/+OvtR8XMZ"+\r
+            "irYBenKYNTjaMvJGrzRZrKfqsyGakrbXPlDsC3/c2KmE5CaUuoZhvFXADUk3WXwPm17x0PT0jvLtn2mN"+\r
+            "xBuXgU3VNawp8hrkSnHvM+WppoPBcjJPtB7QsKXyJrO+VegVgOUa0TqKuTf5fM62rrx6bHq9EpaXwRMR"+\r
+            "boP2wUNp6CCQprb70nh8u0Pf+O5kffqdjneu6dWqEMKbeFWXeiED44OL1xt2nh0vxxKReN46EjuQz9/u"+\r
+            "KKC44kwIOOujl5871I5HBQAOMJDdAQAwdoBzws0N7EwQEYKMkgJ1GZsxCOkExRIN1joJfgWxVDFpGcGo"+\r
+            "Qj9YEQ7QSLdKI2WLKLhspp46hiokRtiv0E9vFmE7qKSqOuqo2bojlj1JcezuxZCzqNDWlyirjpMyPT3c"+\r
+            "EfRJfo5Zn+XL/tDzDGxJWZIUEhZ+hc04do8U4Xu81g7nSFIK/SWmffPB3sCismdGvWojIRoSNA8SHYrJ"+\r
+            "xTQkWvJ17lYzUdnpcXF+PiRRGoqK0ilkHaLo8VVb0bZtDeXeaVXlfxqR7pAvX8ybfFfS7/YofnHVpRBH"+\r
+            "0lApA95hPONuVas3kX7dpR2hQkHNJRuE0Jq2/XrGQUM6mQ6/LRQe7XSZ6eMH/Eutk2bCD/ZpYNXv10Zu"+\r
+            "PmSPkomEhfJa817co9K8plVfn7dYGr3pIBT/9DUJtWGrDHrAHZG1yTXhiqmxsYmvO3D3sXtjnuZeZfqj"+\r
+            "RayNk8XdX7z5qNaLaGO3FWazI9RvwT55f9LInEuNb01nVUbDJ38oCeKRHAM+uZ/BM8WnJY3XlPZ6uCO6"+\r
+            "05vVj9B3iZffJ/yhcE6rh5Zc1hO1kkp2Y2pmzTfy2gHGh2IWUkNqjm721ZDu7M9xKoy+H9EDvK3ei/Bz"+\r
+            "KkOwBMpWnQ2XQmXKWC41Mb1ifefDUyitSEO9t7nyiWu1eKTEN7Q03XgVNnoVxTTxeHDBYejjCAM5OtMW"+\r
+            "bO7omPh9p0WvOSPFgd2celfAQRIAQ32ZwcXDM7rqLUQ3PSmHYYpSpmjmPAZ8Sthn67Z+cwbMMHo6NPaK"+\r
+            "pN3m5HhHpikPygTa1vuwBaAln7788kVGO302kID8dL1eAUknroFcleOjaGk34QtRlwBmrePCn9b6Zylt"+\r
+            "nlDxY/umra1wTHlGrXVlAcrjUS4aWHEEsWRLVJA36DOSw6tlvFDPCuKXAuvz1Ii+G4aCHIu/BbGxrYuN"+\r
+            "g4kzMoblI14ptkBAN3alD/yuSFuBnFJYY66qi4qZqEmMlsLMiBfpDa+VKkQfCUXH5U3s9Yzz8Lx7vken"+\r
+            "XUrSDtXi2rxAC0pz0OXNMyyeqJ28cL3gfd50oYZvk57mo5x3t3iELzsWcZdo14RMg0xykkXXdPiyBhfK"+\r
+            "I8YVHS+Q7shaM7mwKtzAbXGn5tCmdJ1Ei61VqUpbeOyae+Po+VFs1Zz4PZtt+KfydJcxYW2bKBYCknYb"+\r
+            "2/ttJKALGC7Q4wFbdD+AdPW4V1J2Z5VTM6SRH0zgJxpCQbgmNl8OfV/Dq0Wc4Y5BH6FTiUm57X5bayYi"+\r
+            "yK9TnFo7R3VJygCERmOfE14cfo3QEWg0Y+wZ2u/a1R68QXP7rhtmyBZfttcvowEK6mXAH08cv29nTCOn"+\r
+            "X+D0WPpr40D53ch6+sLTI9GvjQ31x3Hp9NWnQ+DXtg78ISCU5dAxvk3fQMA2YsuH8e1U0Cbx9/kdhIoG"+\r
+            "6EY824eGB8BHHCHaRB7XBVACyBCzPCpCBkSw0zdnFbCEeVoCqP+gBLh/SuCnBP57ErjpXBiC7H9HfyiB"+\r
+            "7rABCKie8SNB3EbNnkXSZZVoMkd0ilYN3R0U+dkyojCakWwRd7HZkLLwRnE70YNVnkzb1mFFVZhPS4VQ"+\r
+            "Zo+84BTf1Ovh6C0EBUK+UWDwOwWYvuxvb0VznabAyBw3i6A2TjAd8BYXmLh28EWYkJKJnBaRE/udl03a"+\r
+            "WLeJ8IscZuajCuhd22r7dhlPKHCZDUEBPzUq7aK2GO6dQTF+Nfob8xoJMAv+j3iYz8uoYPa3SZchIT3N"+\r
+            "Khs8LCtxho8JHo9cupb0EbPJbvprXa9NScmut9ZnumVhV9vnKs1NX/QbReV2aB1IBZd3vG3Dx2dyKdWZ"+\r
+            "ohmawBYv+gvmbA3WvPc+5KV0xbXmD8mncyttAhgV2VnVtyx277mMediuO59P7O3W3bLeLdnr97CoTwe5"+\r
+            "H0JJ0Catmhskb0KhwXwBBaPE0ZikVQzMmPVM5Dd8oH2G/a5AAaMyhc0vl1Bn8CmIxR1YeY7ovzQFcX+h"+\r
+            "Az9GJ/Kw+iLAsjCgxX7oG+J3m56EtSnKdJSbKT9e9tpTgvShNguDUYXlyxn3ge/hONgjb72KOZQh0gJl"+\r
+            "S86mSzEyZQzfJQC/LKP42G2upWgoY8pgqMQf7zlCAubjWqimKRtwuFa5a0XQDRRDWvzx4ycQgmTnICi8"+\r
+            "KRxTL1ans4EIphwLhQe+uxJsiT/AfHdLfk5bfBn/oAVGO3rBTmxFzpVUvoAkuaS0HStsMknEWvV5rve6"+\r
+            "z559INy3PIkz+3MsvSsrWSc1y2YfKxRrSWwY9RnNAqtqSm8QE7yYx3D9/N668T383V78ZKDo1I5TvsuF"+\r
+            "UqFqUs01p0ZZcBJuejBbZGHbBkVwuYD1mydnBnFQfewychqIOFsCNyMUlE76sPRBYKe0DkhO5K3qy1IL"+\r
+            "ujR7lJJC6qoAFt2LiZmyzaOH7oIYo1V75YfD94QS8POYtS10jXj97EgBkS940/upMNr2P15FmxV851sp"+\r
+            "KYdxbRkGFRJJ2tR5pMc57zzPBww0j4djlO/qKuZetMytokpQvFOg3s6+rjKKTxa3y69TzovjG8M+aT6u"+\r
+            "vKUoPFh6oOPJpvMpbxIH/qROZCA/XZ/j7e3o1nNG8RQtBwRB8X4i0OM3Sr6ieJlaq8JWjHHjbhbnUml4"+\r
+            "A9thSAnoxJeXfK0qlSSyvIthRJdlcU6i+B2n+nymFAN1B8qs5r7cw4HPLLLe6/a2BHZBg4SPD3IGNsm1"+\r
+            "lRA94DmaghKnqL3H3Geqf5sETo9Ef08Cp0Pg/ysBNCAgEfEtvw+ABxg9QwKoZ0rg/YkExn4jAbR/UAI8"+\r
+            "3yUg8xsJCP2UwE8J/GcSKAnuIYz+05yAnM0YBPQ9J+BJPRICYzOnKUtK50peABRIjIixqdLd9ipl77P2"+\r
+            "oU0LXMpeuoDMCdCzVT/8ert1p5m2126hbi/y/QOn7r4oWXXslNkTCOiQkj3J+bIw9DwazJiFzYlFkpzt"+\r
+            "Kk5W30krQlmEmwBK4fSXAPnmA0nZ9MwnmFJyPqEXBl8lw5+HXQ4oCL7f4LBOFlVA59qNgEBgyh0m5gAt"+\r
+            "5TzOx+hm0Aq9YGyT1eAAuzzVkFGZatgIbPUcgWQZAZ1OrIkzbUB/jyHpW9Y29pVByVWndmFKVKJFFJYV"+\r
+            "A7RjsQHDwD7MESl8+pcNdn5hy8J2IILZyUVah/AcypvROiGkRpnLWs9DGlBGImderZiyXzPkjFcLzmNo"+\r
+            "MwPbq4o/GVUacxkLX9vdsflafzg+WT5VcX70/Fr8zkVKmO2iqWEjYr7YIIp9qBDlxLbyrGEOZaJQps2H"+\r
+            "U0bidvqV17cEgzAN/PsxjEVCpeptOyOApeLVAnbkUoupEtUCRA996ZOhQBoyeFmkrEjOLEyrEyhbklld"+\r
+            "Qdr1KeANQV7gEs77EIP7Csv4SATw4JwbafKyM0g1inAw719r78OONpfRDJFJUXuGZqYV4XvVaa4lJ7+j"+\r
+            "p0Wjg5j79cuQkgz7FaxH1kfRSfnqgWZJmnHKrzN8vh5fDEXLEUrv1tl87/OOjOKTLRDsmPVqfGZbfFay"+\r
+            "RT5YT4SsrV35Ln5DcUJgD/Z47z5OvSyLBlvP7SEYkGJjrV7xDpQIIlQssn5HscT5a1tMPRRImIWa0IJB"+\r
+            "S9mG4fMCBA2UChQIiaFQY+jC+xz66J1UvVDCROMKHJdPtJjqa3a+i76xuxNb32iHt3oxNF6CZIBh7MHX"+\r
+            "3qCh6lFjEZSzAlh6X2qcCvHMw7+YD4iKIhZ7nEeXVooSCb00nNDqFjQcZjWQ6dWbmXXHpb4evi648EC0"+\r
+            "wvhiqHWZ4bSSIJ3Y/Avzm210Y7Xjkr/kAxQ1NZniKeC0FC9u5Q4/070BkRh5xPP08YqhrLUebteahItY"+\r
+            "2q07jNXiFuxa4EmjKiuLaTcedreMYvHuax91HhyYHV4s6Qo8eP1Z7fO2pG2psK51OkuyZKiuPv4rKTpF"+\r
+            "vPWbB0oN5Hjr3jH5E5UWITHaF/DQdDDjW9romoIDnXM/aSV91KW8HNwv5AeSfqaNoQY+SQiAx3vt6uvg"+\r
+            "B25YfqClzquedJ4SO6ySyWn3IA+LHcvCrLztMRNTwn1mHdvmCP9tCDg9CP09BJyOgF/bh/8bAdynEICG"+\r
+            "eAPoAFMkAlDwAdlnIADtL6YDgP8gAngBP9MBPxHwX0PA6+aBzkeInnb4lxAgEzbf6ZuV6tRnE9Jul4hW"+\r
+            "TGyCmyXtY3zYlXe9Ev2uP216UvqTZNF6lcBMJr7Dy4buBgM8c7V8tqadXW3ZhuY3stjRlezsPhhJuLF8"+\r
+            "iuIk9tj6MCLjH/nGf9EfW5GkNgtHPzP8vAK0OhS7N06MAatJHe8+kLP8pDIQpSHxOCTRYfOkMqBfvekg"+\r
+            "8xZUazjZuCuVksfMXK2lilAAZg5CAQ/YThSQLRbyspC76c3zYDP+R1lCgAf56dJ+KhBa/7reRwXaIU5X"+\r
+            "HUyfr1q1e5Gj10/VrGJT3Q3PuREeuW60C4Ub8wdJHjfj3/f87N6o4jpJg6LoPk2gOPSUIYEUu1164KEp"+\r
+            "sxeaJYVf0bOVBCuBWp1uJvYtYCACA6JpiUo1LjXh3bsLNrv1e+PjV6aczyee745fuEhpWCRygoGNIiQG"+\r
+            "ZhXo8ysa51DmC6W7fDiDb6ik4vMOu66K94CtDWgkULAQFgCXiieMQEKbucAqps7+iyhBd5xdw0JGTkoD"+\r
+            "9pDLxqgnpYEQ420xC8wh0bJmfi75SrY6k8EImIciPePYHiE5BjsGG+GlFzTnrpoQF2LJQbq4XzpN68hF"+\r
+            "qZkReH4pu/v5QsHVuAgDjZhQmofaco2hW0/GkzUup1w2VPF+JIW2e3wBQQGabxS4xXxCgZtZ3eMzTgqz"+\r
+            "Wi2OwZOCZHtvkRSAJATuYOv0ISiAw/IWu0fzthGQb2NtA5o7cvP6buNBVY1A02g3hdr+KEgwBseYgMTV"+\r
+            "nJQK6EhvhVJEACdl6zWTiBIYPsfVG+7hzt3gs7j4dpzMc+xd4eTjzp0PqrDyopPKQPBJZWB3isgSPpp5"+\r
+            "tgRy7xoJUP1ZZaAbKQH/Delav3JpHZDTG2iT/wt1UbE1dIlRu2lT4kWpVmeTJBZPd+gdFfct192xkZGR"+\r
+            "9FuXR+RWKDME/DMAQYPVbJS69p0VRbt4QVtiFOlXtBz4pTEf7G0PyTMFLDuy71LpE1Gn6zLwD05uEMvq"+\r
+            "6skxj3euZrZrWRQQ02YVmhvcCGxRl+sQBakxUz4kKB/uitdaEEnSD2A5/4GHp3d15eGkie6L0VKWREiP"+\r
+            "re3+PAmI093LRrh/xVccmKlDU2+tltnsZiEAo8YLbIKFUe2uqS6Wl7TUlEkSWV4l4IoYL6NmgSztljq+"+\r
+            "yTA08ObVOPJq5veglrqOOZrESKWoBNHSb7x0t7FHzvWq6Uei7Hj3VP4n9keY/zYJnB6J/p4ETkfAr23j"+\r
+            "76cDEBJAwUB83UZIAJUAAD9DAsAzJCAImD+RwMRvJID+D0rgyncJyP1GAiI/JfBTAv+ZBPoZnjfFIXra"+\r
+            "3l+TQNx81R9KwOF3EqhcNiNyN1LjSXYLR0pg7ywJHO7vdSHzAb3YJMksrnJkwkrnRRKtkGsELgdIRPjm"+\r
+            "g/Gw9e7odqTklDIXBl0luzI/fdm/IOi+0okEIk5JIBkhgcoTCeT+KgG72XMEphZoyMKABRivRXTwa2jX"+\r
+            "iyzNHLMeq7jH3V8OJ61cxsrcL13eP1gWtrXloe/n3zwOOFfGtSsaaJbBAdT5AQG4loGvbt3alq+g1is0"+\r
+            "JY5185VCIiASgYDdmrEFd3jl1z4Pm/VEW4QIwhfktshuDK+0yBN8KV08vJJRWi1Ty2Y8RB4vmFpGxiaw"+\r
+            "yVzCilMmswlgJ8FjCK3oMzcASyIzAmDFQO5hEF5HPwkk/fVqUA+qcufqJjXZ8/I42YZUZEqASbY4M6GC"+\r
+            "tOtD1huCPD/zAHvDR4pqd189pW/6ktwcbPVORBP89FF/a/qYfZoaS39IMTD6UoYOZk85k4CTad8rNoy7"+\r
+            "n4k0aOQ6IRdl28PaC5lhkntKNor55L3kJazXTzICJO0+AwT9Kb9jgFB1y0pia/n9ZeI6xF+vMO0zxpEB"+\r
+            "N+EaSVXyNvPBL3UBm4mkr78wwP07A14iGZCMrAtcgmIj6wJ61G/1UASfEMkswMxaBYU+TXQdUKakUFVh"+\r
+            "+9avrWhsKCIzAsWj8d6xECiFBIkag/aDqSnQHzvgA+7DVErEMyF/5AB9pWYIaduUwgFB95WPbdJ87bAE"+\r
+            "R6ACXr05cMHP1mnlqLVcd/Rle+WiIt3mYMrY12u7KT0UdVadimBty7bG827X/V866uVHib7w9Az11uxQ"+\r
+            "76EqBPrVFRdL29guCPY45bw1rLRnFiUxMepJdXj2kK38NjNTJeMEToBtADTqWkx2ZvUMTeKr+2FCtrLM"+\r
+            "RWSKT10v6rFHHtocMRHsxejn3gurn1oWHy28NfaUwC+o5GvNvT1ga/CkbqLSZ+0eGE6m5pqX/OOi6l+W"+\r
+            "CPhS7XarmsRCW+ogWsQZ1zB46BJswEDIUnh6cfNhtKZQfuMT4HvQ0vWrnnMHm8BZN3RFU7VV6ku9duC9"+\r
+            "SaLsd9dSqzwMHAD/NgacHob+HgNOB8Cvbe3/ZgDvjwxAxURO4oA+NELE9PojA9DPZMDiCQOmfsMAjH+Q"+\r
+            "AdDvDFD4DQNEfzLgJwP+MwY8biPYj/s7CYHwM6oC2j0/JAQyyxAMGMNNSqFfrHPjEe/pWYlKw4/NAwm2"+\r
+            "N+WGE83nduLUh3zczje7QBIawyLIKG9H+Z5G/Yug24G5hhk3g6AuLnJ9ABHYsPbtixBBpSxLLWIndvaX"+\r
+            "TUm4t4nxveZfvmIaEduMckObOu+WFxVjfEcht96ONnl4+O7FhZiSC+TNCQ5sspWy6HI9pikzsLgdwCWO"+\r
+            "LcFzYZLvRYdPHDDMYmQGfdVjeiDKD96/t/Fcymr12vXLdyOMBzE3rKEvp60+cU6nCsHPu1E6X2iEB46l"+\r
+            "5eLEMsUytIMttCw1NvmKnYs94OqXjeVm5k3pVSLbXEOJLjCT5u2VeVUeD3vY2uxuJPV2W29ZH6d9WyBA"+\r
+            "tLNvxIJx8Hz5iFJlZJgpD367Ap2FkNVWBofAQ4bpE/UQFy1eNv1caD9BojU/dg7SAlil4mxWS6GsV641"+\r
+            "20N8J+6nZhhWaKguL96klsdNuM4VxzsUxzBSqzwq6gQqhCjiDVjLboCvMIH1VTs7nY/8AnxCzimcZAPM"+\r
+            "iK2xHnDJqCGzAZZRKr/LBsRRnM4GpPidzgbEo/+QDXj2JMTKjLXuvv6j1+JfgRzmntj6AiRj4JyCpxDf"+\r
+            "pN2FeoU7UIo+IbsHNTUC7b8y4DfZAPRv2QByiSjm79mA0tr7i4sYNr6ptl/zhmpIRvR0cQp2rsDQQ7vR"+\r
+            "+1tjOt/O7rq0jiZDu5TOjOGMJL/0P10oeCodkMhrgeWU5+s/ihtUMdPYzdQTHrT2Eqqwv2OlrQwv7bg2"+\r
+            "tR5mtqVXYcyJrAxAaJEMcOp/GiJa4Vkd7oNgQJM2ggF+xRCloiJTQTZHBAMa7MmaWF6yJIuujXOknawU"+\r
+            "DPusyFoQOyq9rpwYQn7fZVinYnC3Nkh2kjVZeeux67MbR3V7kfxzuveM99mOPLJcblfq2bxnwTNst7Hd"+\r
+            "b2MEXbjrwnXcn+/bRCpdLeiRkK0JX/E38LaHUGP4kfKtjwW8tLQO231jLhO6rnjzmTYGCvW2NnKlINZh"+\r
+            "cCB/3NETFhXebfFUqfFlHsEwRXIMV4KlQNBDcedVzI8JWS1Cyjr1XIfo/zYInB6I/h4ETofA34IA9EcI"+\r
+            "oGECuhEv3od4K2ctFMQ4EwI/VgYw/0EI8AF+VgZ+QuC/BgGe5ra+P68M/HahoMwL61FJBY0+Mh2QttMI"+\r
+            "JiR4QJLf2TgJOkFCfIuJ1idw2vfLiJn0VFDJY2MfdIKxnb4XPDseUx48Rr3/FAQIhdRlZLnLs2/q8xMq"+\r
+            "WlnVkcFfDpPgzshXk2ZpZ/kytyR8rwy8ElTKzmh6ugv2c5ItUWD5lg7wg7kufK3rpS2J3JguW6KPKiac"+\r
+            "HHsd2cRPfYDLb947Lk7gZ+GC4eHSSZOSpyyjymYYGpldboruhWaJ+Zrv1pBYBZOeDTkx2e3QNJ3kGOWn"+\r
+            "CwNHE0dGW3XVEw22wnyV3ZWHgQtSW1l7Ie3DK+EJ4M1elgNLCROj6Kc9JiPkjwRTa5nZ+DeZIzvhNztc"+\r
+            "IdRh9Gahzn1WMyPAGD5jaeBIGikU2NJljiMZk0iTYQ9qthHvU+HSvpj7Gc5OkB0gnwqWS7wjF2mlx7qW"+\r
+            "ejVIA3zh/jI0yyWUkjiUk83Y+NpxU/P1tlAW8okwvMc8wVD/tkeZbPNX7Z5d6XrKE+5xlgU8v6UEuHpF"+\r
+            "f5MSMOX48rHxlS/uHh8qXt4b0/XNFyz2hQYvJN4p3ajgidFr4ZRfSPNEpSir9y9KDrYOVdO4CW7qdt/K"+\r
+            "+WYBiMi6TViJ81ZbTD33t0UCQOQiARRdLO2m/BbqGy+fo0caYztLvt5inEq5VDSzV+2TRLc0Vn9ne12i"+\r
+            "4lY8ar4nviaKEVyUl4u5tPzLIU0JNEfhE8lZUWw72xT81yoD4mVICkRB6fG/U6DsfynQeUIBLWX30o6a"+\r
+            "qfVQileiZT0plgOsMk1JVdN2CfnpkWQBVrsO532MLkWjW8bOkRKMN3JX12sVVynXye/ds7yIGShNwoNT"+\r
+            "Xq4rH9RlyfEo4WmYXEGsLK6pyocQ0sRtfp2yVpeJCKy30uPKz8NE3gkeTx5h6XziEObeJvWsj6opUHpX"+\r
+            "8xQ7myirkq/lAxH1K0x3m6MMPnT0z1rPCPVfsKmaXnpHCiG43wKLSH2fpttVq3G3Nl4LWyr/SHo+Lwvi"+\r
+            "p9IQmzVDjm0LdSLqeHM8ILiJRsdoNYS93WyEhi7IOdKXZLTCvCLifxTMEi+snNzAtfevk8DpkejvSeB0"+\r
+            "BPza/oPKABD5z4SARKQEELP1WQsFMc+QwP8ATkmhK404AAA=";\r
+\r
+        byte[] base64Bytes = DatatypeConverter.parseBase64Binary(data);\r
+        byte[] dgBytes = IOUtils.toByteArray(new GZIPInputStream(new ByteArrayInputStream(base64Bytes)));\r
         List<Record> dgRecords = RecordFactory.createRecords(new ByteArrayInputStream(dgBytes));\r
         assertEquals(14, dgRecords.size());\r
 \r
index 197f2f1008d3789a045634d643ec7c3121f23c8a..b21806a57cfb1f6631b7a3f432eb592b96f57210 100644 (file)
 
 package org.apache.poi.hssf.model;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.io.IOException;
 import java.util.List;
 
-import junit.framework.TestCase;
-
 import org.apache.poi.ddf.EscherBoolProperty;
 import org.apache.poi.ddf.EscherContainerRecord;
 import org.apache.poi.ddf.EscherDgRecord;
@@ -34,21 +38,33 @@ import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
 import org.apache.poi.hssf.record.EscherAggregate;
 import org.apache.poi.hssf.record.ObjRecord;
-import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.hssf.usermodel.HSSFAnchor;
+import org.apache.poi.hssf.usermodel.HSSFChildAnchor;
+import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
+import org.apache.poi.hssf.usermodel.HSSFComment;
+import org.apache.poi.hssf.usermodel.HSSFPatriarch;
+import org.apache.poi.hssf.usermodel.HSSFPicture;
+import org.apache.poi.hssf.usermodel.HSSFPolygon;
+import org.apache.poi.hssf.usermodel.HSSFRichTextString;
+import org.apache.poi.hssf.usermodel.HSSFShape;
+import org.apache.poi.hssf.usermodel.HSSFShapeGroup;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
+import org.apache.poi.hssf.usermodel.HSSFTestHelper;
+import org.apache.poi.hssf.usermodel.HSSFTextbox;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.util.HexDump;
+import org.junit.Test;
 
 
 /**
- * @author Evgeniy Berlog
- * date: 12.06.12
+ * Test escher drawing
+ * 
+ * optionally the system setting "poi.deserialize.escher" can be set to {@code true}
  */
-public class TestDrawingShapes extends TestCase {
-    static {
-        //System.setProperty("poi.deserialize.escher", "true");
-    }
-    
+public class TestDrawingShapes {
     /**
      * HSSFShape tree bust be built correctly
      * Check file with such records structure:
@@ -63,7 +79,8 @@ public class TestDrawingShapes extends TestCase {
      * ----shape
      * ----shape
      */
-    public void testDrawingGroups() {
+    @Test
+    public void testDrawingGroups() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
         HSSFSheet sheet = wb.getSheet("groups");
         HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
@@ -74,8 +91,10 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(2, group1.getChildren().size());
         group1 = (HSSFShapeGroup) group.getChildren().get(2);
         assertEquals(2, group1.getChildren().size());
+        wb.close();
     }
 
+    @Test
     public void testHSSFShapeCompatibility() {
         HSSFSimpleShape shape = new HSSFSimpleShape(null, new HSSFClientAnchor());
         shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
@@ -91,35 +110,33 @@ public class TestDrawingShapes extends TestCase {
                 spContainer.getChildById(EscherOptRecord.RECORD_ID);
 
         assertEquals(7, opt.getEscherProperties().size());
-        assertEquals(true,
-                ((EscherBoolProperty) opt.lookup(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE)).isTrue());
+        assertTrue(((EscherBoolProperty) opt.lookup(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE)).isTrue());
         assertEquals(0x00000004,
                 ((EscherSimpleProperty) opt.lookup(EscherProperties.GEOMETRY__SHAPEPATH)).getPropertyValue());
         assertEquals(0x08000009,
                 ((EscherSimpleProperty) opt.lookup(EscherProperties.FILL__FILLCOLOR)).getPropertyValue());
-        assertEquals(true,
-                ((EscherBoolProperty) opt.lookup(EscherProperties.FILL__NOFILLHITTEST)).isTrue());
+        assertTrue(((EscherBoolProperty) opt.lookup(EscherProperties.FILL__NOFILLHITTEST)).isTrue());
         assertEquals(0x08000040,
                 ((EscherSimpleProperty) opt.lookup(EscherProperties.LINESTYLE__COLOR)).getPropertyValue());
-        assertEquals(true,
-                ((EscherBoolProperty) opt.lookup(EscherProperties.LINESTYLE__NOLINEDRAWDASH)).isTrue());
-        assertEquals(true,
-                ((EscherBoolProperty) opt.lookup(EscherProperties.GROUPSHAPE__PRINT)).isTrue());
+        assertTrue(((EscherBoolProperty) opt.lookup(EscherProperties.LINESTYLE__NOLINEDRAWDASH)).isTrue());
+        assertTrue(((EscherBoolProperty) opt.lookup(EscherProperties.GROUPSHAPE__PRINT)).isTrue());
     }
 
+    @Test
     public void testDefaultPictureSettings() {
         HSSFPicture picture = new HSSFPicture(null, new HSSFClientAnchor());
         assertEquals(picture.getLineWidth(), HSSFShape.LINEWIDTH_DEFAULT);
         assertEquals(picture.getFillColor(), HSSFShape.FILL__FILLCOLOR_DEFAULT);
         assertEquals(picture.getLineStyle(), HSSFShape.LINESTYLE_NONE);
         assertEquals(picture.getLineStyleColor(), HSSFShape.LINESTYLE__COLOR_DEFAULT);
-        assertEquals(picture.isNoFill(), false);
+        assertFalse(picture.isNoFill());
         assertEquals(picture.getPictureIndex(), -1);//not set yet
     }
 
     /**
      * No NullPointerException should appear
      */
+    @Test
     public void testDefaultSettingsWithEmptyContainer() {
         EscherContainerRecord container = new EscherContainerRecord();
         EscherOptRecord opt = new EscherOptRecord();
@@ -142,10 +159,10 @@ public class TestDrawingShapes extends TestCase {
     /**
      * create a rectangle, save the workbook, read back and verify that all shape properties are there
      */
+    @Test
     public void testReadWriteRectangle() throws IOException {
-
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet = wb.createSheet();
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
 
         HSSFPatriarch drawing = sheet.createDrawingPatriarch();
         HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 50, 50, (short) 2, 2, (short) 4, 4);
@@ -172,8 +189,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(rectangle.getWrapText(), HSSFSimpleShape.WRAP_NONE);
         assertEquals(rectangle.getString().getString(), "teeeest");
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         drawing = sheet.getDrawingPatriarch();
         assertEquals(1, drawing.getChildren().size());
 
@@ -202,8 +220,9 @@ public class TestDrawingShapes extends TestCase {
         rectangle.setWrapText(HSSFSimpleShape.WRAP_BY_POINTS);
         rectangle2.setString(new HSSFRichTextString("test22"));
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
+        wb2.close();
+        sheet = wb3.getSheetAt(0);
         drawing = sheet.getDrawingPatriarch();
         assertEquals(1, drawing.getChildren().size());
         rectangle2 = (HSSFSimpleShape) drawing.getChildren().get(0);
@@ -222,13 +241,16 @@ public class TestDrawingShapes extends TestCase {
 
         HSSFSimpleShape rect3 = drawing.createSimpleShape(new HSSFClientAnchor());
         rect3.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+        HSSFWorkbook wb4 = HSSFTestDataSamples.writeOutAndReadBack(wb3);
+        wb3.close();
 
-        drawing = wb.getSheetAt(0).getDrawingPatriarch();
+        drawing = wb4.getSheetAt(0).getDrawingPatriarch();
         assertEquals(drawing.getChildren().size(), 2);
+        wb4.close();
     }
 
-    public void testReadExistingImage() {
+    @Test
+    public void testReadExistingImage() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
         HSSFSheet sheet = wb.getSheet("pictures");
         HSSFPatriarch drawing = sheet.getDrawingPatriarch();
@@ -244,11 +266,13 @@ public class TestDrawingShapes extends TestCase {
 
         picture.setPictureIndex(2);
         assertEquals(picture.getPictureIndex(), 2);
+        wb.close();
     }
 
 
     /* assert shape properties when reading shapes from a existing workbook */
-    public void testReadExistingRectangle() {
+    @Test
+    public void testReadExistingRectangle() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
         HSSFSheet sheet = wb.getSheet("rectangles");
         HSSFPatriarch drawing = sheet.getDrawingPatriarch();
@@ -262,18 +286,21 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(shape.getLineWidth(), HSSFShape.LINEWIDTH_ONE_PT * 2);
         assertEquals(shape.getString().getString(), "POItest");
         assertEquals(shape.getRotationDegree(), 27);
+        wb.close();
     }
 
-    public void testShapeIds() {
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet1 = wb.createSheet();
+    @Test
+    public void testShapeIds() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet1 = wb1.createSheet();
         HSSFPatriarch patriarch1 = sheet1.createDrawingPatriarch();
         for (int i = 0; i < 2; i++) {
             patriarch1.createSimpleShape(new HSSFClientAnchor());
         }
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet1 = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet1 = wb2.getSheetAt(0);
         patriarch1 = sheet1.getDrawingPatriarch();
 
         EscherAggregate agg1 = HSSFTestHelper.getEscherAggregate(patriarch1);
@@ -299,13 +326,15 @@ public class TestDrawingShapes extends TestCase {
         EscherSpRecord sp2 =
                 ((EscherContainerRecord) spgrContainer.getChild(2)).getChildById(EscherSpRecord.RECORD_ID);
         assertEquals(1026, sp2.getShapeId());
+        wb2.close();
     }
 
     /**
      * Test get new id for shapes from existing file
      * File already have for 1 shape on each sheet, because document must contain EscherDgRecord for each sheet
      */
-    public void testAllocateNewIds() {
+    @Test
+    public void testAllocateNewIds() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("empty.xls");
         HSSFSheet sheet = wb.getSheetAt(0);
         HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
@@ -336,79 +365,76 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1026);
         assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1027);
         assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1028);
+        wb.close();
     }
 
-    public void testOpt() throws Exception {
+    @Test
+    public void testOpt() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
 
-        try {
-            // create a sheet with a text box
-            HSSFSheet sheet = wb.createSheet();
-            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-    
-            HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
-            EscherOptRecord opt1 = HSSFTestHelper.getOptRecord(textbox);
-            EscherOptRecord opt2 = HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID);
-            assertSame(opt1, opt2);
-        } finally {
-            wb.close();
-        }
+        // create a sheet with a text box
+        HSSFSheet sheet = wb.createSheet();
+        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
+        HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
+        EscherOptRecord opt1 = HSSFTestHelper.getOptRecord(textbox);
+        EscherOptRecord opt2 = HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID);
+        assertSame(opt1, opt2);
+        wb.close();
     }
     
+    @Test
     public void testCorrectOrderInOptRecord() throws IOException{
         HSSFWorkbook wb = new HSSFWorkbook();
         
-        try {
-            HSSFSheet sheet = wb.createSheet();
-            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-    
-            HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
-            EscherOptRecord opt = HSSFTestHelper.getOptRecord(textbox);
-            
-            String opt1Str = opt.toXml();
-    
-            textbox.setFillColor(textbox.getFillColor());
-            EscherContainerRecord container = HSSFTestHelper.getEscherContainer(textbox);
-            EscherOptRecord optRecord = container.getChildById(EscherOptRecord.RECORD_ID);
-            assertEquals(opt1Str, optRecord.toXml());
-            textbox.setLineStyle(textbox.getLineStyle());
-            assertEquals(opt1Str, optRecord.toXml());
-            textbox.setLineWidth(textbox.getLineWidth());
-            assertEquals(opt1Str, optRecord.toXml());
-            textbox.setLineStyleColor(textbox.getLineStyleColor());
-            assertEquals(opt1Str, optRecord.toXml());
-        } finally {
-            wb.close();
-        }
-    }
+        HSSFSheet sheet = wb.createSheet();
+        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
-    public void testDgRecordNumShapes() throws IOException{
-        HSSFWorkbook wb = new HSSFWorkbook();
-        try {
-            HSSFSheet sheet = wb.createSheet();
-            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-    
-            EscherAggregate aggregate = HSSFTestHelper.getEscherAggregate(patriarch);
-            EscherDgRecord dgRecord = (EscherDgRecord) aggregate.getEscherRecord(0).getChild(0);
-            assertEquals(dgRecord.getNumShapes(), 1);
-        } finally {
-            wb.close();
-        }
+        HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
+        EscherOptRecord opt = HSSFTestHelper.getOptRecord(textbox);
+        
+        String opt1Str = opt.toXml();
+
+        textbox.setFillColor(textbox.getFillColor());
+        EscherContainerRecord container = HSSFTestHelper.getEscherContainer(textbox);
+        EscherOptRecord optRecord = container.getChildById(EscherOptRecord.RECORD_ID);
+        assertEquals(opt1Str, optRecord.toXml());
+        textbox.setLineStyle(textbox.getLineStyle());
+        assertEquals(opt1Str, optRecord.toXml());
+        textbox.setLineWidth(textbox.getLineWidth());
+        assertEquals(opt1Str, optRecord.toXml());
+        textbox.setLineStyleColor(textbox.getLineStyleColor());
+        assertEquals(opt1Str, optRecord.toXml());
+        wb.close();
     }
 
-    public void testTextForSimpleShape(){
+    @Test
+    public void testDgRecordNumShapes() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
         HSSFSheet sheet = wb.createSheet();
         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
+        EscherAggregate aggregate = HSSFTestHelper.getEscherAggregate(patriarch);
+        EscherDgRecord dgRecord = (EscherDgRecord) aggregate.getEscherRecord(0).getChild(0);
+        assertEquals(dgRecord.getNumShapes(), 1);
+        wb.close();
+    }
+
+    @Test
+    public void testTextForSimpleShape() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
+        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
         HSSFSimpleShape shape = patriarch.createSimpleShape(new HSSFClientAnchor());
         shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
 
         EscherAggregate agg = HSSFTestHelper.getEscherAggregate(patriarch);
         assertEquals(agg.getShapeToObjMapping().size(), 2);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         shape = (HSSFSimpleShape) patriarch.getChildren().get(0);
@@ -422,10 +448,12 @@ public class TestDrawingShapes extends TestCase {
         assertNotNull(HSSFTestHelper.getEscherContainer(shape).getChildById(EscherTextboxRecord.RECORD_ID));
         assertEquals(agg.getShapeToObjMapping().size(), 2);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+        HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
+        wb2.close();
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb4 = HSSFTestDataSamples.writeOutAndReadBack(wb3);
+        wb3.close();
+        sheet = wb4.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         shape = (HSSFSimpleShape) patriarch.getChildren().get(0);
@@ -434,17 +462,19 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(shape.getString().getString(), "string1");
         assertNotNull(HSSFTestHelper.getEscherContainer(shape).getChildById(EscherTextboxRecord.RECORD_ID));
         assertEquals(agg.getShapeToObjMapping().size(), 2);
+        wb4.close();
     }
 
-    public void testRemoveShapes(){
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet = wb.createSheet();
+    @Test
+    public void testRemoveShapes() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
         HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor());
         rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
 
-        int idx = wb.addPicture(new byte[]{1,2,3}, Workbook.PICTURE_TYPE_JPEG);
+        int idx = wb1.addPicture(new byte[]{1,2,3}, Workbook.PICTURE_TYPE_JPEG);
         patriarch.createPicture(new HSSFClientAnchor(), idx);
 
         patriarch.createCellComment(new HSSFClientAnchor());
@@ -464,8 +494,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
@@ -479,8 +510,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
+        wb2.close();
+        sheet = wb3.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
@@ -492,8 +524,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb4 = HSSFTestDataSamples.writeOutAndReadBack(wb3);
+        wb3.close();
+        sheet = wb4.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
@@ -507,8 +540,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
         assertEquals(patriarch.getChildren().size(), 4);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb5 = HSSFTestDataSamples.writeOutAndReadBack(wb4);
+        wb4.close();
+        sheet = wb5.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 6);
@@ -522,8 +556,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
         assertEquals(patriarch.getChildren().size(), 3);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb6 = HSSFTestDataSamples.writeOutAndReadBack(wb5);
+        wb5.close();
+        sheet = wb6.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 5);
@@ -537,8 +572,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 2);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb7 = HSSFTestDataSamples.writeOutAndReadBack(wb6);
+        wb6.close();
+        sheet = wb7.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 3);
@@ -552,8 +588,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 1);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb8 = HSSFTestDataSamples.writeOutAndReadBack(wb7);
+        wb7.close();
+        sheet = wb8.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 2);
@@ -567,18 +604,21 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 0);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb9 = HSSFTestDataSamples.writeOutAndReadBack(wb8);
+        wb8.close();
+        sheet = wb9.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 0);
         assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 0);
+        wb9.close();
     }
 
-    public void testShapeFlip(){
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet = wb.createSheet();
+    @Test
+    public void testShapeFlip() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
         HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor());
@@ -592,8 +632,9 @@ public class TestDrawingShapes extends TestCase {
         rectangle.setFlipHorizontal(true);
         assertEquals(rectangle.isFlipHorizontal(), true);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
@@ -606,19 +647,22 @@ public class TestDrawingShapes extends TestCase {
         rectangle.setFlipVertical(false);
         assertEquals(rectangle.isFlipVertical(), false);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb3 = HSSFTestDataSamples.writeOutAndReadBack(wb2);
+        wb2.close();
+        sheet = wb3.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
 
         assertEquals(rectangle.isFlipVertical(), false);
         assertEquals(rectangle.isFlipHorizontal(), false);
+        wb3.close();
     }
 
-    public void testRotation() {
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet = wb.createSheet();
+    @Test
+    public void testRotation() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
         HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor(0,0,100,100, (short) 0,0,(short)5,5));
@@ -629,8 +673,9 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(rectangle.getRotationDegree(), 45);
         rectangle.setFlipHorizontal(true);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
         rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
         assertEquals(rectangle.getRotationDegree(), 45);
@@ -639,32 +684,33 @@ public class TestDrawingShapes extends TestCase {
 
         patriarch.setCoordinates(0, 0, 10, 10);
         rectangle.setString(new HSSFRichTextString("1234"));
+        wb2.close();
     }
 
-    public void testShapeContainerImplementsIterable() throws IOException{
+    @SuppressWarnings("unused")
+    @Test
+    public void testShapeContainerImplementsIterable() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
         
-        try {
-            HSSFSheet sheet = wb.createSheet();
-            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-    
-            patriarch.createSimpleShape(new HSSFClientAnchor());
-            patriarch.createSimpleShape(new HSSFClientAnchor());
-    
-            int i=2;
-    
-            for (HSSFShape shape: patriarch){
-                i--;
-            }
-            assertEquals(i, 0);
-        } finally {
-            wb.close();
+        HSSFSheet sheet = wb.createSheet();
+        HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
+        patriarch.createSimpleShape(new HSSFClientAnchor());
+        patriarch.createSimpleShape(new HSSFClientAnchor());
+
+        int i=2;
+
+        for (HSSFShape shape: patriarch){
+            i--;
         }
+        assertEquals(i, 0);
+        wb.close();
     }
 
-    public void testClearShapesForPatriarch(){
-        HSSFWorkbook wb = new HSSFWorkbook();
-        HSSFSheet sheet = wb.createSheet();
+    @Test
+    public void testClearShapesForPatriarch() throws IOException {
+        HSSFWorkbook wb1 = new HSSFWorkbook();
+        HSSFSheet sheet = wb1.createSheet();
         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
 
         patriarch.createSimpleShape(new HSSFClientAnchor());
@@ -683,15 +729,18 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(agg.getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 0);
 
-        wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
+        HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
+        wb1.close();
+        sheet = wb2.getSheetAt(0);
         patriarch = sheet.getDrawingPatriarch();
 
         assertEquals(agg.getShapeToObjMapping().size(), 0);
         assertEquals(agg.getTailRecords().size(), 0);
         assertEquals(patriarch.getChildren().size(), 0);
+        wb2.close();
     }
     
+    @Test
     public void testBug45312() throws Exception {
         HSSFWorkbook wb = new HSSFWorkbook();
         try {
@@ -739,7 +788,7 @@ public class TestDrawingShapes extends TestCase {
         }
     }
 
-    private void checkWorkbookBack(HSSFWorkbook wb) {
+    private void checkWorkbookBack(HSSFWorkbook wb) throws IOException {
         HSSFWorkbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(wb);
         assertNotNull(wbBack);
         
@@ -806,5 +855,7 @@ public class TestDrawingShapes extends TestCase {
         assertEquals(2, cAnchor.getCol2());
         assertEquals(2, cAnchor.getRow1());
         assertEquals(2, cAnchor.getRow2());
+        
+        wbBack.close();
     }
 }
index a5f9445844cf8c774b00763c5fef4a662096d3cc..f61cc3c440b2734a0beb85a31c8150eeb99b14ec 100644 (file)
@@ -62,7 +62,7 @@ public final class TestHSSFCell extends BaseTestCell {
         *  but there's a separate unit test for that.
         */
        @Test
-       public void testDateWindowingRead() throws Exception {
+       public void testDateWindowingRead() throws IOException {
            Calendar cal = LocaleUtil.getLocaleCalendar(2000, 0, 1, 0, 0, 0);// Jan. 1, 2000
                Date date = cal.getTime();
 
@@ -94,7 +94,7 @@ public final class TestHSSFCell extends BaseTestCell {
         * results of this test are meaningless.
         */
        @Test
-       public void testDateWindowingWrite() throws Exception {
+       public void testDateWindowingWrite() throws IOException {
            Calendar cal = LocaleUtil.getLocaleCalendar(2000,0,1,0,0,0); // Jan. 1, 2000
                Date date = cal.getTime();
 
@@ -143,7 +143,7 @@ public final class TestHSSFCell extends BaseTestCell {
         * Tests that the active cell can be correctly read and set
         */
        @Test
-       public void testActiveCell() throws Exception {
+       public void testActiveCell() throws IOException {
                //read in sample
                HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("Simple.xls");
 
@@ -235,7 +235,7 @@ public final class TestHSSFCell extends BaseTestCell {
         * Test reading hyperlinks
         */
        @Test
-       public void testWithHyperlink() throws Exception {
+       public void testWithHyperlink() throws IOException {
 
                HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("WithHyperlink.xls");
 
@@ -256,7 +256,7 @@ public final class TestHSSFCell extends BaseTestCell {
         * Test reading hyperlinks
         */
        @Test
-       public void testWithTwoHyperlinks() throws Exception {
+       public void testWithTwoHyperlinks() throws IOException {
 
                HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("WithTwoHyperLinks.xls");
 
@@ -286,7 +286,7 @@ public final class TestHSSFCell extends BaseTestCell {
         *  to our workbook, and not those from other workbooks.
         */
        @Test
-       public void testCellStyleWorkbookMatch() throws Exception {
+       public void testCellStyleWorkbookMatch() throws IOException {
                HSSFWorkbook wbA = new HSSFWorkbook();
                HSSFWorkbook wbB = new HSSFWorkbook();
 
@@ -386,14 +386,14 @@ public final class TestHSSFCell extends BaseTestCell {
      * HSSF prior to version 3.7 had a bug: it could write a NaN but could not read such a file back.
      */
        @Test
-       public void testReadNaN() throws Exception {
+       public void testReadNaN() throws IOException {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("49761.xls");
         assertNotNull(wb);
         wb.close();
     }
 
        @Test
-       public void testHSSFCell() throws Exception {
+       public void testHSSFCell() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
         HSSFSheet sheet = wb.createSheet();
         HSSFRow row = sheet.createRow(0);
@@ -403,9 +403,8 @@ public final class TestHSSFCell extends BaseTestCell {
         wb.close();
     }
 
-    @SuppressWarnings("deprecation")
     @Test
-    public void testDeprecatedMethods() throws Exception {
+    public void testDeprecatedMethods() throws IOException {
         HSSFWorkbook wb = new HSSFWorkbook();
         HSSFSheet sheet = wb.createSheet();
         HSSFRow row = sheet.createRow(0);
index 3a9ae1db9426d5f3065ca637c1673ee806857c9a..cb897c6c2e1105d5934daba0f0eb228fb6eb1b9b 100644 (file)
@@ -24,13 +24,7 @@ import org.apache.poi.ss.formula.BaseTestExternalFunctions;
  * Tests setting and evaluating user-defined functions in HSSF
  */
 public final class TestHSSFExternalFunctions extends BaseTestExternalFunctions {
-
        public TestHSSFExternalFunctions() {
-               super(HSSFITestDataProvider.instance);
+               super(HSSFITestDataProvider.instance, "atp.xls");
        }
-
-    public void testATP(){
-        baseTestInvokeATP("atp.xls");
-    }
-
 }
index 4a65b86bc957e75978a272edc3eccf75bebf8ef5..ef70b1325bb729fcbf584ab6a834eeb7cb38d68f 100644 (file)
@@ -20,9 +20,6 @@ package org.apache.poi.hssf.usermodel;
 import org.apache.poi.hssf.HSSFITestDataProvider;
 import org.apache.poi.ss.usermodel.BaseTestSheetHiding;
 
-/**
- * @author Yegor Kozlov
- */
 public final class TestSheetHiding extends BaseTestSheetHiding {
     public TestSheetHiding() {
         super(HSSFITestDataProvider.instance,
index d40bdca57a2409e2d5d837d59e639b7fa6c21d2e..321968d09c030551531e26970fc4ab85630388ac 100644 (file)
 ==================================================================== */
 package org.apache.poi.ss.formula;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.formula.eval.ErrorEval;
 import org.apache.poi.ss.formula.eval.NotImplementedException;
@@ -30,13 +33,12 @@ import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.junit.Test;
 
 /**
  * Test setting / evaluating of Analysis Toolpack and user-defined functions
- *
- * @author Yegor Kozlov
  */
-public class BaseTestExternalFunctions extends TestCase {
+public class BaseTestExternalFunctions {
     // define two custom user-defined functions
     private static class MyFunc implements FreeRefFunction {
         public MyFunc() {
@@ -75,34 +77,37 @@ public class BaseTestExternalFunctions extends TestCase {
     );
 
 
-    protected final ITestDataProvider _testDataProvider;
+    private final ITestDataProvider _testDataProvider;
+    private final String atpFile;
 
     /**
      * @param testDataProvider an object that provides test data in HSSF / XSSF specific way
      */
-    protected BaseTestExternalFunctions(ITestDataProvider testDataProvider) {
+    protected BaseTestExternalFunctions(ITestDataProvider testDataProvider, String atpFile) {
         _testDataProvider = testDataProvider;
+        this.atpFile = atpFile;
     }
 
-    public void testExternalFunctions() {
+    @Test
+    public void testExternalFunctions() throws IOException {
         Workbook wb = _testDataProvider.createWorkbook();
         FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
 
         Sheet sh = wb.createSheet();
 
         Cell cell1 = sh.createRow(0).createCell(0);
-        cell1.setCellFormula("ISODD(1)+ISEVEN(2)"); // functions from the Excel Analysis Toolpack
+        // functions from the Excel Analysis Toolpack
+        cell1.setCellFormula("ISODD(1)+ISEVEN(2)");
         assertEquals("ISODD(1)+ISEVEN(2)", cell1.getCellFormula());
 
         Cell cell2 = sh.createRow(1).createCell(0);
-        cell2.setCellFormula("MYFUNC(\"B1\")"); //unregistered functions are parseable and renderable, but may not be evaluateable
+        // unregistered functions are parseable and renderable, but may not be evaluateable
+        cell2.setCellFormula("MYFUNC(\"B1\")"); 
         try {
             evaluator.evaluate(cell2);
             fail("Expected NotImplementedFunctionException/NotImplementedException");
         } catch (final NotImplementedException e) {
-            if (!(e.getCause() instanceof NotImplementedFunctionException))
-                throw e;
-            // expected
+            assertTrue(e.getCause() instanceof NotImplementedFunctionException);
             // Alternatively, a future implementation of evaluate could return #NAME? error to align behavior with Excel
             // assertEquals(ErrorEval.NAME_INVALID, ErrorEval.valueOf(evaluator.evaluate(cell2).getErrorValue()));
         }
@@ -116,10 +121,11 @@ public class BaseTestExternalFunctions extends TestCase {
         cell3.setCellFormula("MYFUNC2(\"C1\")&\"-\"&A2");  //where A2 is defined above
         assertEquals("MYFUNC2(\"C1\")&\"-\"&A2", cell3.getCellFormula());
 
-        assertEquals(2.0, evaluator.evaluate(cell1).getNumberValue());
+        assertEquals(2.0, evaluator.evaluate(cell1).getNumberValue(), 0);
         assertEquals("B1abc", evaluator.evaluate(cell2).getStringValue());
         assertEquals("C1abc2-B1abc", evaluator.evaluate(cell3).getStringValue());
 
+        wb.close();
     }
 
     /**
@@ -127,12 +133,13 @@ public class BaseTestExternalFunctions extends TestCase {
      *
      * @param testFile  either atp.xls or atp.xlsx
      */
-    public void baseTestInvokeATP(String testFile){
-        Workbook wb = _testDataProvider.openSampleWorkbook(testFile);
+    @Test
+    public void baseTestInvokeATP() throws IOException {
+        Workbook wb = _testDataProvider.openSampleWorkbook(atpFile);
         FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
 
         Sheet sh  = wb.getSheetAt(0);
-        // these two are not imlemented in r
+        // these two are not implemented in r
         assertEquals("DELTA(1.3,1.5)", sh.getRow(0).getCell(1).getCellFormula());
         assertEquals("COMPLEX(2,4)", sh.getRow(1).getCell(1).getCellFormula());
 
@@ -146,6 +153,7 @@ public class BaseTestExternalFunctions extends TestCase {
         assertEquals(true, evaluator.evaluate(cell3).getBooleanValue());
         assertEquals(Cell.CELL_TYPE_BOOLEAN, evaluator.evaluateFormulaCell(cell3));
 
+        wb.close();
     }
 
 }
index 384edddb5c687319521f8c81b6aedb5c2759764d..67693e4d6adbe422b6556648909a04e0dbc2465b 100644 (file)
@@ -17,6 +17,7 @@
 
 package org.apache.poi.ss.usermodel;
 
+import static org.apache.poi.ss.usermodel.FormulaError.forInt;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -25,38 +26,22 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.List;
 
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.util.LocaleUtil;
-import org.junit.After;
 import org.junit.Test;
 
-import junit.framework.AssertionFailedError;
-
 /**
  * Common superclass for testing implementations of
  *  {@link org.apache.poi.ss.usermodel.Cell}
  */
-@SuppressWarnings("deprecation")
 public abstract class BaseTestCell {
 
     protected final ITestDataProvider _testDataProvider;
 
-    private List<Workbook> workbooksToClose = new ArrayList<Workbook>(); 
-
-    @After
-    public void tearDown() throws IOException {
-        // free resources correctly
-        for(Workbook wb : workbooksToClose) {
-            wb.close();
-        }
-    }
-
     /**
      * @param testDataProvider an object that provides test data in HSSF / XSSF specific way
      */
@@ -307,7 +292,7 @@ public abstract class BaseTestCell {
         r.createCell(0).setCellValue(true);
         r.createCell(1).setCellValue(1.5);
         r.createCell(2).setCellValue(factory.createRichTextString("Astring"));
-        r.createCell(3).setCellErrorValue((byte)ErrorConstants.ERROR_DIV_0);
+        r.createCell(3).setCellErrorValue(FormulaError.DIV0.getCode());
         r.createCell(4).setCellFormula("A1+B1");
 
         assertEquals("Boolean", "TRUE", r.getCell(0).toString());
@@ -364,9 +349,7 @@ public abstract class BaseTestCell {
 
     }
 
-    private Cell createACell() {
-        Workbook wb = _testDataProvider.createWorkbook();
-        workbooksToClose.add(wb);
+    private Cell createACell(Workbook wb) {
         return wb.createSheet("Sheet1").createRow(0).createCell(0);
     }
     
@@ -410,17 +393,15 @@ public abstract class BaseTestCell {
     }
 
     @Test
-    public void testChangeTypeStringToBool() {
-        Cell cell = createACell();
+    public void testChangeTypeStringToBool() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cell = createACell(wb);
 
         cell.setCellValue("TRUE");
         assertEquals(Cell.CELL_TYPE_STRING, cell.getCellType());
-        try {
-            cell.setCellType(Cell.CELL_TYPE_BOOLEAN);
-        } catch (ClassCastException e) {
-            throw new AssertionFailedError(
-                    "Identified bug in conversion of cell from text to boolean");
-        }
+        // test conversion of cell from text to boolean
+        cell.setCellType(Cell.CELL_TYPE_BOOLEAN);
 
         assertEquals(Cell.CELL_TYPE_BOOLEAN, cell.getCellType());
         assertEquals(true, cell.getBooleanCellValue());
@@ -434,52 +415,51 @@ public abstract class BaseTestCell {
         assertEquals(false, cell.getBooleanCellValue());
         cell.setCellType(Cell.CELL_TYPE_STRING);
         assertEquals("FALSE", cell.getRichStringCellValue().getString());
+        
+        wb.close();
     }
 
     @Test
-    public void testChangeTypeBoolToString() {
-        Cell cell = createACell();
+    public void testChangeTypeBoolToString() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cell = createACell(wb);
 
         cell.setCellValue(true);
-        try {
-            cell.setCellType(Cell.CELL_TYPE_STRING);
-        } catch (IllegalStateException e) {
-            if (e.getMessage().equals("Cannot get a text value from a boolean cell")) {
-                throw new AssertionFailedError(
-                        "Identified bug in conversion of cell from boolean to text");
-            }
-            throw e;
-        }
+        // test conversion of cell from boolean to text
+        cell.setCellType(Cell.CELL_TYPE_STRING);
         assertEquals("TRUE", cell.getRichStringCellValue().getString());
+        
+        wb.close();
     }
 
     @Test
-    public void testChangeTypeErrorToNumber() {
-        Cell cell = createACell();
-        cell.setCellErrorValue((byte)ErrorConstants.ERROR_NAME);
+    public void testChangeTypeErrorToNumber() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cell = createACell(wb);
+        cell.setCellErrorValue(FormulaError.NAME.getCode());
         try {
             cell.setCellValue(2.5);
         } catch (ClassCastException e) {
-            throw new AssertionFailedError("Identified bug 46479b");
+            fail("Identified bug 46479b");
         }
         assertEquals(2.5, cell.getNumericCellValue(), 0.0);
+        
+        wb.close();
     }
 
     @Test
-    public void testChangeTypeErrorToBoolean() {
-        Cell cell = createACell();
-        cell.setCellErrorValue((byte)ErrorConstants.ERROR_NAME);
-        cell.setCellValue(true);
-        try {
-            cell.getBooleanCellValue();
-        } catch (IllegalStateException e) {
-            if (e.getMessage().equals("Cannot get a boolean value from a error cell")) {
+    public void testChangeTypeErrorToBoolean() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
 
-                throw new AssertionFailedError("Identified bug 46479c");
-            }
-            throw e;
-        }
+        Cell cell = createACell(wb);
+        cell.setCellErrorValue(FormulaError.NAME.getCode());
+        cell.setCellValue(true);
+        // Identify bug 46479c
         assertEquals(true, cell.getBooleanCellValue());
+        
+        wb.close();
     }
 
     /**
@@ -488,8 +468,10 @@ public abstract class BaseTestCell {
      * string result type.
      */
     @Test
-    public void testConvertStringFormulaCell() {
-        Cell cellA1 = createACell();
+    public void testConvertStringFormulaCell() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cellA1 = createACell(wb);
         cellA1.setCellFormula("\"abc\"");
 
         // default cached formula result is numeric zero
@@ -501,10 +483,10 @@ public abstract class BaseTestCell {
         assertEquals("abc", cellA1.getStringCellValue());
 
         fe.evaluateInCell(cellA1);
-        if (cellA1.getStringCellValue().equals("")) {
-            throw new AssertionFailedError("Identified bug with writing back formula result of type string");
-        }
+        assertFalse("Identified bug with writing back formula result of type string", cellA1.getStringCellValue().equals(""));
         assertEquals("abc", cellA1.getStringCellValue());
+        
+        wb.close();
     }
     
     /**
@@ -512,8 +494,10 @@ public abstract class BaseTestCell {
      * lower level that {#link {@link Cell#setCellType(int)} works properly
      */
     @Test
-    public void testSetTypeStringOnFormulaCell() {
-        Cell cellA1 = createACell();
+    public void testSetTypeStringOnFormulaCell() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cellA1 = createACell(wb);
         FormulaEvaluator fe = cellA1.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
 
         cellA1.setCellFormula("\"DEF\"");
@@ -543,9 +527,11 @@ public abstract class BaseTestCell {
         fe.clearAllCachedResultValues();
         fe.evaluateFormulaCell(cellA1);
         confirmCannotReadString(cellA1);
-        assertEquals(ErrorConstants.ERROR_NAME, cellA1.getErrorCellValue());
+        assertEquals(FormulaError.NAME, forInt(cellA1.getErrorCellValue()));
         cellA1.setCellType(Cell.CELL_TYPE_STRING);
         assertEquals("#NAME?", cellA1.getStringCellValue());
+        
+        wb.close();
     }
 
     private static void confirmCannotReadString(Cell cell) {
@@ -556,15 +542,17 @@ public abstract class BaseTestCell {
      * Test for bug in convertCellValueToBoolean to make sure that formula results get converted
      */
     @Test
-    public void testChangeTypeFormulaToBoolean() {
-        Cell cell = createACell();
+    public void testChangeTypeFormulaToBoolean() throws IOException {
+        Workbook wb = _testDataProvider.createWorkbook();
+
+        Cell cell = createACell(wb);
         cell.setCellFormula("1=1");
         cell.setCellValue(true);
         cell.setCellType(Cell.CELL_TYPE_BOOLEAN);
-        if (cell.getBooleanCellValue() == false) {
-            throw new AssertionFailedError("Identified bug 46479d");
-        }
+        assertTrue("Identified bug 46479d", cell.getBooleanCellValue());
         assertEquals(true, cell.getBooleanCellValue());
+        
+        wb.close();
     }
 
     /**
@@ -664,17 +652,17 @@ public abstract class BaseTestCell {
         Cell cell0 = row.createCell(0);
         cell0.setCellValue(Double.NaN);
         assertEquals("Double.NaN should change cell type to CELL_TYPE_ERROR", Cell.CELL_TYPE_ERROR, cell0.getCellType());
-        assertEquals("Double.NaN should change cell value to #NUM!", ErrorConstants.ERROR_NUM, cell0.getErrorCellValue());
+        assertEquals("Double.NaN should change cell value to #NUM!", FormulaError.NUM, forInt(cell0.getErrorCellValue()));
 
         Cell cell1 = row.createCell(1);
         cell1.setCellValue(Double.POSITIVE_INFINITY);
         assertEquals("Double.POSITIVE_INFINITY should change cell type to CELL_TYPE_ERROR", Cell.CELL_TYPE_ERROR, cell1.getCellType());
-        assertEquals("Double.POSITIVE_INFINITY should change cell value to #DIV/0!", ErrorConstants.ERROR_DIV_0, cell1.getErrorCellValue());
+        assertEquals("Double.POSITIVE_INFINITY should change cell value to #DIV/0!", FormulaError.DIV0, forInt(cell1.getErrorCellValue()));
 
         Cell cell2 = row.createCell(2);
         cell2.setCellValue(Double.NEGATIVE_INFINITY);
         assertEquals("Double.NEGATIVE_INFINITY should change cell type to CELL_TYPE_ERROR", Cell.CELL_TYPE_ERROR, cell2.getCellType());
-        assertEquals("Double.NEGATIVE_INFINITY should change cell value to #DIV/0!", ErrorConstants.ERROR_DIV_0, cell2.getErrorCellValue());
+        assertEquals("Double.NEGATIVE_INFINITY should change cell value to #DIV/0!", FormulaError.DIV0, forInt(cell2.getErrorCellValue()));
 
         Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
         wb1.close();
@@ -682,15 +670,15 @@ public abstract class BaseTestCell {
 
         cell0 = row.getCell(0);
         assertEquals(Cell.CELL_TYPE_ERROR, cell0.getCellType());
-        assertEquals(ErrorConstants.ERROR_NUM, cell0.getErrorCellValue());
+        assertEquals(FormulaError.NUM, forInt(cell0.getErrorCellValue()));
 
         cell1 = row.getCell(1);
         assertEquals(Cell.CELL_TYPE_ERROR, cell1.getCellType());
-        assertEquals(ErrorConstants.ERROR_DIV_0, cell1.getErrorCellValue());
+        assertEquals(FormulaError.DIV0, forInt(cell1.getErrorCellValue()));
 
         cell2 = row.getCell(2);
         assertEquals(Cell.CELL_TYPE_ERROR, cell2.getCellType());
-        assertEquals(ErrorConstants.ERROR_DIV_0, cell2.getErrorCellValue());
+        assertEquals(FormulaError.DIV0, forInt(cell2.getErrorCellValue()));
         wb2.close();
     }
 
index 66c783b46f8465b8286baa4489e839c27c68856c..18a0ef3e0e3fbf16c51a62a6d3d2ad749a8281ae 100644 (file)
@@ -24,13 +24,14 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.io.IOException;
+import java.util.List;
+
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.util.AreaReference;
 import org.apache.poi.ss.util.CellReference;
 import org.junit.Test;
 
-import java.util.List;
-
 /**
  * Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}.
  *
@@ -647,7 +648,7 @@ public abstract class BaseTestNamedRange {
     }
 
     @Test
-    public void testBug56930() {
+    public void testBug56930() throws IOException {
         Workbook wb = _testDataProvider.createWorkbook();
 
         // x1 on sheet1 defines "x=1"
@@ -673,5 +674,7 @@ public abstract class BaseTestNamedRange {
         assertEquals("1", wb.getName("x").getRefersToFormula());
         wb.removeName("x");
         assertEquals("2", wb.getName("x").getRefersToFormula());
+        
+        wb.close();
     }
 }
index acc5ed4fb452a8415a7facdd8b31a3490ba170d2..9cca5dc252ae5365af51c5bbea2884f94a5474ee 100644 (file)
 
 package org.apache.poi.ss.usermodel;
 
-import static junit.framework.TestCase.assertNotNull;
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -266,11 +270,11 @@ public abstract class BaseTestSheet {
     }
     
     /**
-     * Dissallow creating wholly or partially overlapping merged regions
+     * Disallow creating wholly or partially overlapping merged regions
      * as this results in a corrupted workbook
      */
     @Test
-    public void addOverlappingMergedRegions() {
+    public void addOverlappingMergedRegions() throws IOException {
         final Workbook wb = _testDataProvider.createWorkbook();
         final Sheet sheet = wb.createSheet();
         
@@ -282,14 +286,14 @@ public abstract class BaseTestSheet {
             sheet.addMergedRegion(duplicateRegion);
             fail("Should not be able to add a merged region (" + duplicateRegion.formatAsString() + ") " +
                  "if sheet already contains the same merged region (" + baseRegion.formatAsString() + ")");
-        } catch (final IllegalStateException e) { } //expected
+        } catch (final IllegalStateException e) { }
         
         try {
             final CellRangeAddress partiallyOverlappingRegion = new CellRangeAddress(1, 2, 1, 2); //B2:C3
             sheet.addMergedRegion(partiallyOverlappingRegion);
             fail("Should not be able to add a merged region (" + partiallyOverlappingRegion.formatAsString() + ") " +
                  "if it partially overlaps with an existing merged region (" + baseRegion.formatAsString() + ")");
-        } catch (final IllegalStateException e) { } //expected
+        } catch (final IllegalStateException e) { }
         
         try {
             final CellRangeAddress subsetRegion = new CellRangeAddress(0, 1, 0, 0); //A1:A2
@@ -303,10 +307,12 @@ public abstract class BaseTestSheet {
             sheet.addMergedRegion(supersetRegion);
             fail("Should not be able to add a merged region (" + supersetRegion.formatAsString() + ") " +
                  "if it is a formal superset of an existing merged region (" + baseRegion.formatAsString() + ")");
-        } catch (final IllegalStateException e) { } //expected
+        } catch (final IllegalStateException e) { }
         
         final CellRangeAddress disjointRegion = new CellRangeAddress(10, 11, 10, 11);
-        sheet.addMergedRegion(disjointRegion); //allowed
+        sheet.addMergedRegion(disjointRegion);
+        
+        wb.close();
     }
 
     /*
index 1fe3c8a17567f9e2872c52818fa89eab643183c4..a96a727ea2d5818cbd6aa7e78f75757477208e3f 100644 (file)
 
 package org.apache.poi.ss.usermodel;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
 
 import org.apache.poi.ss.ITestDataProvider;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-/**
- */
-public abstract class BaseTestSheetHiding extends TestCase {
+public abstract class BaseTestSheetHiding {
 
        protected final ITestDataProvider _testDataProvider;
     protected Workbook wbH;
@@ -41,15 +47,22 @@ public abstract class BaseTestSheetHiding extends TestCase {
         _file2 = file2;
     }
 
-    protected void setUp() {
+       @Before
+    public void setUp() {
         wbH = _testDataProvider.openSampleWorkbook(_file1);
         wbU = _testDataProvider.openSampleWorkbook(_file2);
     }
 
-
-    public final void testSheetHidden() {
+       @After
+       public void teadDown() throws IOException {
+           wbH.close();
+           wbU.close();
+       }
+       
+       @Test
+    public final void testSheetHidden() throws IOException {
         Workbook wb = _testDataProvider.createWorkbook();
-        Sheet sh = wb.createSheet("MySheet");
+        wb.createSheet("MySheet");
 
         assertFalse(wb.isSheetHidden(0));
         assertFalse(wb.isSheetVeryHidden(0));
@@ -78,6 +91,8 @@ public abstract class BaseTestSheetHiding extends TestCase {
         } catch (IllegalArgumentException e){
             // ok
         }
+
+        wb.close();
     }
 
     /**
@@ -85,6 +100,7 @@ public abstract class BaseTestSheetHiding extends TestCase {
      *  with the right text on them, no matter what
      *  the hidden flags are
      */
+       @Test
     public void testTextSheets() {
         // Both should have two sheets
         assertEquals(2, wbH.getNumberOfSheets());
@@ -113,6 +129,7 @@ public abstract class BaseTestSheetHiding extends TestCase {
      * Check that we can get and set the hidden flags
      *  as expected
      */
+       @Test
     public void testHideUnHideFlags() {
         assertTrue(wbH.isSheetHidden(0));
         assertFalse(wbH.isSheetHidden(1));
@@ -124,25 +141,29 @@ public abstract class BaseTestSheetHiding extends TestCase {
      * Turn the sheet with none hidden into the one with
      *  one hidden
      */
-    public void testHide() {
+       @Test
+    public void testHide() throws IOException {
         wbU.setSheetHidden(0, true);
         assertTrue(wbU.isSheetHidden(0));
         assertFalse(wbU.isSheetHidden(1));
         Workbook wb2 = _testDataProvider.writeOutAndReadBack(wbU);
         assertTrue(wb2.isSheetHidden(0));
         assertFalse(wb2.isSheetHidden(1));
+        wb2.close();
     }
 
     /**
      * Turn the sheet with one hidden into the one with
      *  none hidden
      */
-    public void testUnHide() {
+       @Test
+    public void testUnHide() throws IOException {
         wbH.setSheetHidden(0, false);
         assertFalse(wbH.isSheetHidden(0));
         assertFalse(wbH.isSheetHidden(1));
         Workbook wb2 = _testDataProvider.writeOutAndReadBack(wbH);
         assertFalse(wb2.isSheetHidden(0));
         assertFalse(wb2.isSheetHidden(1));
+        wb2.close();
     }
 }
\ No newline at end of file