]> source.dussan.org Git - poi.git/commitdiff
fixed RecordFormatException when reading unicode strings with photenic data, see...
authorYegor Kozlov <yegor@apache.org>
Fri, 11 Mar 2011 09:33:22 +0000 (09:33 +0000)
committerYegor Kozlov <yegor@apache.org>
Fri, 11 Mar 2011 09:33:22 +0000 (09:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1080496 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/record/common/UnicodeString.java
src/java/org/apache/poi/hssf/record/cont/ContinuableRecordInput.java [new file with mode: 0644]
src/testcases/org/apache/poi/hssf/record/TestSSTRecord.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
test-data/spreadsheet/50779_1.xls [new file with mode: 0644]
test-data/spreadsheet/50779_2.xls [new file with mode: 0644]

index 8ef8414dbbadb41b03f516e37672a1a1e2565838..435cf869559e3b159e8dce0b7eb88c891986335f 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta2" date="2011-??-??">
+           <action dev="poi-developers" type="fix">50779 - fixed RecordFormatException when reading unicode strings with photenic data</action>
            <action dev="poi-developers" type="fix">50718 - More helpful error message when you try to create a CellReference with #REF!</action>
            <action dev="poi-developers" type="fix">50784 - XSSFColors return by XSSFFont now have theme information applied to them</action>
            <action dev="poi-developers" type="fix">50846 - Improve how XSSFColor inherits from Themes</action>
index 3d0813c87b79bfcfd43e16b77847f4ad83b9e3f2..cd8147a62d3a02e557a0f16fee7c8f6d88ec10a5 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.poi.hssf.record.cont.ContinuableRecordInput;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
 import org.apache.poi.util.BitField;
@@ -435,7 +436,7 @@ public class UnicodeString implements Comparable<UnicodeString> { // TODO - make
         }
 
         if (isExtendedText() && (extensionLength > 0)) {
-          field_5_ext_rst = new ExtRst(in, extensionLength);
+          field_5_ext_rst = new ExtRst(new ContinuableRecordInput(in), extensionLength);
           if(field_5_ext_rst.getDataSize()+4 != extensionLength) {
              System.err.println("ExtRst was supposed to be " + extensionLength + " bytes long, but seems to actually be " + (field_5_ext_rst.getDataSize()+4));
           }
diff --git a/src/java/org/apache/poi/hssf/record/cont/ContinuableRecordInput.java b/src/java/org/apache/poi/hssf/record/cont/ContinuableRecordInput.java
new file mode 100644 (file)
index 0000000..9925ad3
--- /dev/null
@@ -0,0 +1,118 @@
+/*\r
+ *  ====================================================================\r
+ * Licensed to the Apache Software Foundation (ASF) under one or more\r
+ * contributor license agreements.  See the NOTICE file distributed with\r
+ * this work for additional information regarding copyright ownership.\r
+ * The ASF licenses this file to You under the Apache License, Version 2.0\r
+ * (the "License"); you may not use this file except in compliance with\r
+ * the License.  You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ====================================================================\r
+ */\r
+\r
+package org.apache.poi.hssf.record.cont;\r
+\r
+import org.apache.poi.hssf.record.RecordInputStream;\r
+import org.apache.poi.hssf.record.ContinueRecord;\r
+import org.apache.poi.util.LittleEndianInput;\r
+\r
+/**\r
+ * A decorated {@link RecordInputStream} that can read primitive data types\r
+ * (short, int, long, etc.) spanned across a {@link ContinueRecord } boundary.\r
+ *\r
+ * <p>\r
+ *  Most records construct themselves from {@link RecordInputStream}.\r
+ *  This class assumes that a {@link ContinueRecord} record break always occurs at the type boundary,\r
+ *  however, it is not always so.\r
+ * </p>\r
+ *  Two  attachments to <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=50779">Bugzilla 50779</a>\r
+ *  demonstrate that a CONTINUE break can appear right in between two bytes of a unicode character\r
+ *  or between two bytes of a <code>short</code>. The problematic portion of the data is\r
+ *  in a Asian Phonetic Settings Block (ExtRst) of a UnicodeString.\r
+ * <p>\r
+ *  {@link RecordInputStream} greedily requests the bytes to be read and stumbles on such files with a\r
+ *  "Not enough data (1) to read requested (2) bytes" exception.  The <code>ContinuableRecordInput</code>\r
+ *   class circumvents this "type boundary" rule and reads data byte-by-byte rolling over CONTINUE if necessary.\r
+ * </p>\r
+ *\r
+ * <p>\r
+ * YK: For now (March 2011) this class is only used to read\r
+ *   @link org.apache.poi.hssf.record.common.UnicodeString.ExtRst} blocks of a UnicodeString.\r
+ *\r
+ * </p>\r
+ *\r
+ * @author Yegor Kozlov\r
+ */\r
+public class ContinuableRecordInput implements LittleEndianInput {\r
+    private final RecordInputStream _in;\r
+\r
+    public ContinuableRecordInput(RecordInputStream in){\r
+        _in = in;\r
+    }\r
+    public int available(){\r
+        return _in.available();\r
+    }\r
+\r
+    public byte readByte(){\r
+        return _in.readByte();\r
+    }\r
+\r
+    public int readUByte(){\r
+        return _in.readUByte();\r
+    }\r
+\r
+    public short readShort(){\r
+        return _in.readShort();\r
+    }\r
+\r
+    public int readUShort(){\r
+        int ch1 = readUByte();\r
+        int ch2 = readUByte();\r
+        return (ch2 << 8) + (ch1 << 0);\r
+    }\r
+\r
+    public int readInt(){\r
+        int ch1 = _in.readUByte();\r
+        int ch2 = _in.readUByte();\r
+        int ch3 = _in.readUByte();\r
+        int ch4 = _in.readUByte();\r
+        return (ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0);\r
+    }\r
+\r
+    public long readLong(){\r
+        int b0 = _in.readUByte();\r
+        int b1 = _in.readUByte();\r
+        int b2 = _in.readUByte();\r
+        int b3 = _in.readUByte();\r
+        int b4 = _in.readUByte();\r
+        int b5 = _in.readUByte();\r
+        int b6 = _in.readUByte();\r
+        int b7 = _in.readUByte();\r
+        return (((long)b7 << 56) +\r
+                ((long)b6 << 48) +\r
+                ((long)b5 << 40) +\r
+                ((long)b4 << 32) +\r
+                ((long)b3 << 24) +\r
+                (b2 << 16) +\r
+                (b1 <<  8) +\r
+                (b0 <<  0));\r
+    }\r
+\r
+    public double readDouble(){\r
+        return _in.readDouble();\r
+    }\r
+    public void readFully(byte[] buf){\r
+        _in.readFully(buf);\r
+    }\r
+    public void readFully(byte[] buf, int off, int len){\r
+        _in.readFully(buf, off, len);\r
+    }\r
+\r
+}\r
index 65d56cf318ecdefe15730535bfc8090c934c5ced..c7d911b8070a5525d998fee0e5e437a483ce3409 100644 (file)
@@ -355,4 +355,1145 @@ public final class TestSSTRecord extends TestCase {
 
         HSSFTestDataSamples.writeOutAndReadBack(wb);
     }
+
+    /**
+     * hex dump from UnicodeStringFailCase1.xls atatched to Bugzilla 50779
+     */
+    private static final String data_50779_1 =
+            //Offset=0x00000612(1554) recno=71 sid=0x00FC size=0x2020(8224)
+            "      FC 00 20 20 51 00 00 00 51 00 00 00 32 00" +
+            "05 10 00 00 00 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 30 00 31 00 01 00 0C 00 05 00 35" +
+            "00 00 00 00 00 00 00 4B 30 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 30 00 32 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 30 00 33 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 30 00 34 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 30 00 35 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 30 00 36 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 30" +
+            "00 37 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 30 00 38 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 30 00 39" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 31 00 30 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 31 00 31 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 31 00 32 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 31 00 33 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "31 00 34 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 31 00 35 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 31 00" +
+            "36 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 31 00 37 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 31 00 38 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 31 00 39 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 32 00 30 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 32 00 31 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 32 00 32 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 32" +
+            "00 33 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 32 00 34 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 32 00 35" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 32 00 36 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 32 00 37 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 32 00 38 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 32 00 39 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "33 00 30 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 33 00 31 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 33 00" +
+            "32 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 33 00 33 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 33 00 34 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 33 00 35 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 33 00 36 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 33 00 37 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 33 00 38 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 33" +
+            "00 39 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 34 00 30 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 34 00 31" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 34 00 32 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 34 00 33 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 34 00 34 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 34 00 35 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "34 00 36 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 34 00 37 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 34 00" +
+            "38 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 34 00 39 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 35 00 30 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 35 00 31 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 35 00 32 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 35 00 33 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 35 00 34 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 35" +
+            "00 35 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 35 00 36 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 35 00 37" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 35 00 38 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 35 00 39 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 36 00 30 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 36 00 31 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "36 00 32 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 36 00 33 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 36 00" +
+            "34 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 36 00 35 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 36 00 36 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 36 00 37 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 36 00 38 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 36 00 39 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 37 00 30 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 37" +
+            "00 31 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 37 00 32 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 37 00 33" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 37 00 34 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 37 00 35 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 37 00 36 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 37 00 37 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "37 00 38 00 1F 00 05 B8 00 00 00 17 53 77 6D 53" +
+            "90 52 97 EE 68 0C 77 A9 5C 4B 62 0C 77 8F 79 F6" +
+            "5C 0C 77 03 68 28 67 0C 77 FC 57 89 73 0C 77 71" +
+            "67 AC 4E FD 90 43 53 49 84 0C 77 5E 79 48 59 DD" +
+            "5D 0C 77 77 95 CE 91 0C 77 01 00 B4 00 05 00 35" +
+            "00 0A 00 37 00 37 00 DB 30 C3 30 AB 30 A4 30 C9" +
+            "30 A6 30 A2 30 AA 30 E2 30 EA 30 B1 30 F3 30 A4" +
+            "30 EF 30 C6 30 B1 30 F3 30 D5 30 AF 30 B7 30 DE" +
+            "30 B1 30 F3 30 C8 30 C1 30 AE 30 B1 30 F3 30 B5" +
+            "30 A4 30 BF 30 DE 30 B1 30 F3 30 C8 30 A6 30 AD" +
+            "30 E7 30 A6 30 C8                              " +
+
+            // Offset=0x00002636(9782) recno=72 sid=0x003C size=0x0151(337)
+            "                  3C 00 51 01 30 C1 30 D0 30 B1" +
+            "30 F3 30 AB 30 CA 30 AC 30 EF 30 B1 30 F3 30 CA" +
+            "30 AC 30 CE 30 B1 30 F3 30 00 00 00 00 03 00 06" +
+            "00 03 00 03 00 0C 00 06 00 03 00 11 00 09 00 03" +
+            "00 17 00 0C 00 03 00 1C 00 0F 00 03 00 22 00 12" +
+            "00 03 00 28 00 15 00 03 00 2C 00 18 00 04 00 32" +
+            "00 1C 00 03 00 32 00 05 10 00 00 00 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 37 00 39 00" +
+            "01 00 0C 00 05 00 35 00 00 00 00 00 00 00 00 00" +
+            "32 00 05 10 00 00 00 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 38 00 30 00 01 00 0C 00 05" +
+            "00 35 00 00 00 00 00 00 00 4B 30               ";
+
+
+    /**
+     * hex dump from UnicodeStringFailCase2.xls atatched to Bugzilla 50779
+     */
+    private static final String data_50779_2 =
+            //"Offset=0x00000612(1554) recno=71 sid=0x00FC size=0x2020(8224)\n" +
+            "      FC 00 20 20 51 00 00 00 51 00 00 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 30 00 31 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 30 00 32 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 30" +
+            "00 33 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 30 00 34 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 30 00 35" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 30 00 36 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 30 00 37 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 30 00 38 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 30 00 39 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "31 00 30 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 31 00 31 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 31 00" +
+            "32 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 31 00 33 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 31 00 34 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 31 00 35 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 31 00 36 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 31 00 37 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 31 00 38 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 31" +
+            "00 39 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 32 00 30 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 32 00 31" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 32 00 32 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 32 00 33 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 32 00 34 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 32 00 35 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "32 00 36 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 32 00 37 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 32 00" +
+            "38 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 32 00 39 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 33 00 30 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 33 00 31 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 33 00 32 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 33 00 33 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 33 00 34 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 33" +
+            "00 35 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 33 00 36 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 33 00 37" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 33 00 38 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 33 00 39 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 34 00 30 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 34 00 31 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "34 00 32 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 34 00 33 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 34 00" +
+            "34 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 34 00 35 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 34 00 36 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 34 00 37 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 34 00 38 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 34 00 39 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 35 00 30 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 35" +
+            "00 31 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 35 00 32 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 35 00 33" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 35 00 34 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 35 00 35 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 35 00 36 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 35 00 37 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "35 00 38 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 35 00 39 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 36 00" +
+            "30 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 36 00 31 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 36 00 32 00" +
+            "32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 36 00 33 00 32 00 01 42 30 44 30 46 30" +
+            "48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30" +
+            "57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30" +
+            "68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30" +
+            "75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30" +
+            "84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30" +
+            "8F 30 92 30 93 30 30 00 30 00 36 00 34 00 32 00" +
+            "01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F" +
+            "30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F" +
+            "30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D" +
+            "30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F" +
+            "30 80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A" +
+            "30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30" +
+            "00 36 00 35 00 32 00 01 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 36 00 36 00 32 00 01 42" +
+            "30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51" +
+            "30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61" +
+            "30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E" +
+            "30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80" +
+            "30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B" +
+            "30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 36" +
+            "00 37 00 32 00 01 42 30 44 30 46 30 48 30 4A 30" +
+            "4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30" +
+            "5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30" +
+            "6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30" +
+            "7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30" +
+            "88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30" +
+            "93 30 30 00 30 00 36 00 38 00 32 00 01 42 30 44" +
+            "30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53" +
+            "30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64" +
+            "30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F" +
+            "30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81" +
+            "30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C" +
+            "30 8D 30 8F 30 92 30 93 30 30 00 30 00 36 00 39" +
+            "00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B 30" +
+            "4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30" +
+            "5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30" +
+            "6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30" +
+            "7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30" +
+            "89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30" +
+            "30 00 30 00 37 00 30 00 32 00 01 42 30 44 30 46" +
+            "30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55" +
+            "30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66" +
+            "30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72" +
+            "30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82" +
+            "30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D" +
+            "30 8F 30 92 30 93 30 30 00 30 00 37 00 31 00 32" +
+            "00 01 42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30" +
+            "4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D 30" +
+            "5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30" +
+            "6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30" +
+            "7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89 30" +
+            "8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00" +
+            "30 00 37 00 32 00 32 00 01 42 30 44 30 46 30 48" +
+            "30 4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57" +
+            "30 59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68" +
+            "30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75" +
+            "30 78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84" +
+            "30 86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F" +
+            "30 92 30 93 30 30 00 30 00 37 00 33 00 32 00 01" +
+            "42 30 44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30" +
+            "51 30 53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30" +
+            "61 30 64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30" +
+            "6E 30 6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30" +
+            "80 30 81 30 82 30 84 30 86 30 88 30 89 30 8A 30" +
+            "8B 30 8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00" +
+            "37 00 34 00 32 00 01 42 30 44 30 46 30 48 30 4A" +
+            "30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30 59" +
+            "30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A" +
+            "30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78" +
+            "30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30 86" +
+            "30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92" +
+            "30 93 30 30 00 30 00 37 00 35 00 32 00 01 42 30" +
+            "44 30 46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30" +
+            "53 30 55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30" +
+            "64 30 66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30" +
+            "6F 30 72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30" +
+            "81 30 82 30 84 30 86 30 88 30 89 30 8A 30 8B 30" +
+            "8C 30 8D 30 8F 30 92 30 93 30 30 00 30 00 37 00" +
+            "36 00 32 00 01 42 30 44 30 46 30 48 30 4A 30 4B" +
+            "30 4D 30 4F 30 51 30 53 30 55 30 57 30 59 30 5B" +
+            "30 5D 30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B" +
+            "30 6C 30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B" +
+            "30 7E 30 7F 30 80 30 81 30 82 30 84 30 86 30 88" +
+            "30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93" +
+            "30 30 00 30 00 37 00 37 00 32 00 01 42 30 44 30" +
+            "46 30 48 30 4A 30 4B 30 4D 30 4F 30 51 30 53 30" +
+            "55 30 57 30 59 30 5B 30 5D 30 5F 30 61 30 64 30" +
+            "66 30 68 30 6A 30 6B 30 6C 30 6D 30 6E 30 6F 30" +
+            "72 30 75 30 78 30 7B 30 7E 30 7F 30 80 30 81 30" +
+            "82 30 84 30 86 30 88 30 89 30 8A 30 8B 30 8C 30" +
+            "8D 30 8F 30 92 30 93 30 30 00 30 00 37 00 38 00" +
+            "18 00 05 96 00 00 00 17 53 77 6D 53 90 52 97 EE" +
+            "68 0C 77 A9 5C 4B 62 0C 77 8F 79 F6 5C 0C 77 03" +
+            "68 28 67 0C 77 FC 57 89 73 0C 77 71 67 AC 4E FD" +
+            "90 43 53 49 84 0C 77 01 00 92 00 05 00 35 00 08" +
+            "00 2C 00 2C 00 DB 30 C3 30 AB 30 A4 30 C9 30 A6" +
+            "30 A2 30 AA 30 E2 30 EA 30 B1 30 F3 30 A4 30 EF" +
+            "30 C6 30 B1 30 F3 30 D5 30 AF 30 B7 30 DE 30 B1" +
+            "30 F3 30 C8 30 C1 30 AE 30 B1 30 F3 30 B5 30 A4" +
+            "30 BF 30 DE 30 B1 30 F3 30 C8 30 A6 30 AD 30 E7" +
+            "30 A6 30 C8 30 C1 30 D0 30 B1 30 F3 30 00 00 00" +
+            "00 03 00 06 00 03 00 03 00 0C 00 06 00 03 00 11" +
+            "00 09 00 03 00 17                              " +
+
+            //Offset=0x00002636(9782) recno=72 sid=0x003C size=0x010D(269)
+            "                  3C 00 0D 01 00 0C 00 03 00 1C" +
+            "00 0F 00 03 00 22 00 12 00 03 00 28 00 15 00 03" +
+            "00 32 00 05 10 00 00 00 42 30 44 30 46 30 48 30" +
+            "4A 30 4B 30 4D 30 4F 30 51 30 53 30 55 30 57 30" +
+            "59 30 5B 30 5D 30 5F 30 61 30 64 30 66 30 68 30" +
+            "6A 30 6B 30 6C 30 6D 30 6E 30 6F 30 72 30 75 30" +
+            "78 30 7B 30 7E 30 7F 30 80 30 81 30 82 30 84 30" +
+            "86 30 88 30 89 30 8A 30 8B 30 8C 30 8D 30 8F 30" +
+            "92 30 93 30 30 00 30 00 37 00 39 00 01 00 0C 00" +
+            "05 00 35 00 00 00 00 00 00 00 00 00 32 00 05 10" +
+            "00 00 00 42 30 44 30 46 30 48 30 4A 30 4B 30 4D" +
+            "30 4F 30 51 30 53 30 55 30 57 30 59 30 5B 30 5D" +
+            "30 5F 30 61 30 64 30 66 30 68 30 6A 30 6B 30 6C" +
+            "30 6D 30 6E 30 6F 30 72 30 75 30 78 30 7B 30 7E" +
+            "30 7F 30 80 30 81 30 82 30 84 30 86 30 88 30 89" +
+            "30 8A 30 8B 30 8C 30 8D 30 8F 30 92 30 93 30 30" +
+            "00 30 00 38 00 30 00 01 00 0C 00 05 00 35 00 00" +
+            "00 00 00 00 00 4B 30                           ";
+
+
+    /**
+     * deep comparison of two SST records
+     */
+    public static void assertEquals(SSTRecord expected, SSTRecord actual){
+        assertEquals("number of strings", expected.getNumStrings(), actual.getNumStrings());
+        assertEquals("number of unique strings", expected.getNumUniqueStrings(), actual.getNumUniqueStrings());
+        assertEquals("count of strings", expected.countStrings(), actual.countStrings());
+        for ( int k = 0; k < expected.countStrings(); k++ ) {
+            org.apache.poi.hssf.record.common.UnicodeString us1 = expected.getString(k);
+            org.apache.poi.hssf.record.common.UnicodeString us2 = actual.getString(k);
+
+            assertTrue("String at idx=" + k, us1.equals(us2));
+        }
+    }
+
+
+    public void test50779_1(){
+        byte[] bytes = HexRead.readFromString(data_50779_1);
+
+        RecordInputStream in = TestcaseRecordInputStream.create(bytes);
+        assertEquals(SSTRecord.sid, in.getSid());
+        SSTRecord src = new SSTRecord(in);
+        assertEquals(81, src.getNumStrings());
+
+        byte[] serialized = src.serialize();
+
+        in = TestcaseRecordInputStream.create(serialized);
+        assertEquals(SSTRecord.sid, in.getSid());
+        SSTRecord dst = new SSTRecord(in);
+        assertEquals(81, dst.getNumStrings());
+
+        assertEquals(src, dst);
+    }
+
+    public void test50779_2() {
+        byte[] bytes = HexRead.readFromString(data_50779_2);
+
+        RecordInputStream in = TestcaseRecordInputStream.create(bytes);
+        assertEquals(SSTRecord.sid, in.getSid());
+        SSTRecord src = new SSTRecord(in);
+        assertEquals(81, src.getNumStrings());
+
+        byte[] serialized = src.serialize();
+
+        in = TestcaseRecordInputStream.create(serialized);
+        assertEquals(SSTRecord.sid, in.getSid());
+        SSTRecord dst = new SSTRecord(in);
+        assertEquals(81, dst.getNumStrings());
+
+        assertEquals(src, dst);
+    }
+
 }
index 2725528e86bf0d132fc7639b7df0612c7e523fd3..08566a2e9b9971255b5af8eeb64cb077979c22e5 100644 (file)
@@ -2019,4 +2019,13 @@ if(1==2) {
        
        // TODO Identify what excel doesn't like, and check for that
     }
+
+    public void test50779() throws Exception {
+       HSSFWorkbook wb1 = openSample("50779_1.xls");
+       writeOutAndReadBack(wb1);
+
+        HSSFWorkbook wb2 = openSample("50779_2.xls");
+        writeOutAndReadBack(wb2);
+    }
+
 }
diff --git a/test-data/spreadsheet/50779_1.xls b/test-data/spreadsheet/50779_1.xls
new file mode 100644 (file)
index 0000000..17d32ec
Binary files /dev/null and b/test-data/spreadsheet/50779_1.xls differ
diff --git a/test-data/spreadsheet/50779_2.xls b/test-data/spreadsheet/50779_2.xls
new file mode 100644 (file)
index 0000000..ee29d0b
Binary files /dev/null and b/test-data/spreadsheet/50779_2.xls differ