summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLSY <grizlupo@daum.net>2019-03-14 06:34:42 +0900
committerJehan <jehan@girinstud.io>2022-12-14 00:23:13 +0100
commitd72a5c88cec9b9031305db0b4b2f3934a2a33251 (patch)
treeb32515bc4f9fdeabfd6dadd49f7e988d1b8ba097
parentded948ce1532f72e6cdf28a241b8ec74140a8a7a (diff)
add charset prober for Johab Korean
-rw-r--r--src/CharDistribution.cpp19
-rw-r--r--src/CharDistribution.h21
-rw-r--r--src/JohabFreq.tab762
-rw-r--r--src/nsCodingStateMachine.h1
-rw-r--r--src/nsJohabProber.cpp91
-rw-r--r--src/nsJohabProber.h74
-rw-r--r--src/nsMBCSGroupProber.cpp5
-rw-r--r--src/nsMBCSGroupProber.h3
-rw-r--r--src/nsMBCSSM.cpp55
9 files changed, 1029 insertions, 2 deletions
diff --git a/src/CharDistribution.cpp b/src/CharDistribution.cpp
index dbe6fc3..6cc52a9 100644
--- a/src/CharDistribution.cpp
+++ b/src/CharDistribution.cpp
@@ -40,6 +40,7 @@
#include "JISFreq.tab"
#include "Big5Freq.tab"
#include "EUCKRFreq.tab"
+#include "JohabFreq.tab"
#include "EUCTWFreq.tab"
#include "GB2312Freq.tab"
@@ -79,6 +80,24 @@ EUCKRDistributionAnalysis::EUCKRDistributionAnalysis()
mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO;
}
+JohabDistributionAnalysis::JohabDistributionAnalysis()
+{
+ mCharToFreqOrder = EUCKRCharToFreqOrder;
+ mTableSize = EUCKR_TABLE_SIZE;
+ mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO;
+}
+
+PRInt32 JohabDistributionAnalysis::JohabToEUCKR(PRUint8 c1, PRUint8 c2)
+{
+ PRUint8 a = JohabCho[(c1 >> 2) & 0x1f];
+ PRUint8 b = JohabJung[((c1 << 3) | (c2 >> 5)) & 0x1f];
+ PRUint8 c = JohabJong[c2 & 0x1f];
+
+ if (a == 0xff || b == 0xff || c == 0xff)
+ return -1;
+ return (PRInt32)JohabToEUCKROrder[a * 21*28 + b * 28 + c];
+}
+
GB2312DistributionAnalysis::GB2312DistributionAnalysis()
{
mCharToFreqOrder = GB2312CharToFreqOrder;
diff --git a/src/CharDistribution.h b/src/CharDistribution.h
index 368ac3e..8bb733b 100644
--- a/src/CharDistribution.h
+++ b/src/CharDistribution.h
@@ -158,6 +158,27 @@ protected:
}
};
+
+class JohabDistributionAnalysis : public CharDistributionAnalysis
+{
+public:
+ JohabDistributionAnalysis();
+protected:
+ //for Johab encoding, we are interested
+ // first byte range: 0x88 -- 0xd3
+ // second byte range: 0x41 -- 0xfe
+ //no validation needed here. State machine has done that
+ PRInt32 GetOrder(const char* str)
+ { PRUint8 c = str[0];
+ if ((0x88 <= c) && (c <= 0xd3))
+ return JohabToEUCKR(c, str[1]);
+ return -1;
+ }
+private:
+ PRInt32 JohabToEUCKR(PRUint8 c1, PRUint8 c2);
+};
+
+
class GB2312DistributionAnalysis : public CharDistributionAnalysis
{
public:
diff --git a/src/JohabFreq.tab b/src/JohabFreq.tab
new file mode 100644
index 0000000..05c980c
--- /dev/null
+++ b/src/JohabFreq.tab
@@ -0,0 +1,762 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+//The frequency data itself is the same as euc-kr.
+
+static const PRUint8 JohabCho[32] = {
+ 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
+ 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+};
+static const PRUint8 JohabJung[32] = {
+ 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04,
+ 0xff, 0xff, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+ 0xff, 0xff, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
+ 0xff, 0xff, 0x11, 0x12, 0x13, 0x14, 0xff, 0xff,
+};
+static const PRUint8 JohabJong[32] = {
+ 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+ 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+ 0x0f, 0x10, 0xff, 0x11, 0x12, 0x13, 0x14, 0x15,
+ 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0xff, 0xff,
+};
+
+//Johab to EUC-KR Order
+static const PRInt16 JohabToEUCKROrder[] =
+{
+ 0, 1, -1, -1, 2, -1, -1, 3, 4, 5, 6, -1, -1, -1, -1, -1,
+ 7, 8, 9, 10, 11, 12, 13, 14, -1, 15, 16, 17, 18, 19, -1, -1,
+ 20, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, 22, 23, -1, 24,
+ 25, 26, -1, -1, -1, -1, -1, -1, 27, 28, -1, -1, 29, -1, -1, -1,
+ 30, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 31, -1, 32, -1, -1,
+ -1, -1, -1, -1, 33, -1, -1, -1, 34, -1, -1, -1, 35, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 36, 37, -1, -1, 38, -1, -1, 39, 40, -1, 41, -1, -1, -1, -1, -1,
+ 42, 43, -1, 44, 45, 46, 47, -1, -1, 48, 49, 50, 51, -1, -1, -1,
+ 52, -1, -1, -1, 53, -1, -1, -1, -1, -1, -1, -1, 54, 55, -1, 56,
+ 57, 58, -1, -1, -1, -1, -1, -1, 59, 60, 61, -1, 62, -1, -1, 63,
+ 64, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1, 67, 68, 69, -1, -1,
+ -1, 70, -1, -1, 71, -1, -1, -1, 72, -1, -1, -1, 73, -1, -1, -1,
+ -1, -1, -1, -1, -1, 74, -1, 75, -1, -1, -1, -1, -1, -1, -1, -1,
+ 76, 77, -1, -1, 78, -1, -1, 79, 80, -1, 81, -1, 82, -1, -1, 83,
+ 84, 85, -1, 86, -1, 87, 88, -1, -1, -1, -1, -1, 89, 90, -1, -1,
+ 91, -1, -1, -1, 92, -1, 93, -1, -1, -1, -1, -1, 94, 95, -1, 96,
+ -1, 97, -1, -1, -1, -1, -1, -1, 98, -1, -1, -1, 99, -1, -1, -1,
+ 100, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, 102, 103, -1, -1,
+ -1, -1, -1, -1, 104, 105, -1, -1, 106, -1, -1, -1, 107, -1, -1, -1,
+ -1, -1, -1, -1, 108, 109, -1, 110, -1, 111, -1, -1, -1, -1, -1, -1,
+ 112, -1, -1, -1, 113, -1, -1, -1, 114, -1, -1, -1, -1, -1, -1, -1,
+ -1, 115, -1, 116, -1, -1, -1, -1, -1, -1, -1, -1, 117, 118, -1, -1,
+ 119, -1, -1, 120, 121, 122, 123, -1, -1, -1, -1, 124, 125, 126, -1, 127,
+ -1, 128, 129, -1, -1, -1, -1, -1, 130, 131, -1, -1, 132, -1, -1, -1,
+ 133, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 134, 135, -1, -1,
+ -1, -1, -1, -1, 136, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, -1, -1, -1, -1, -1,
+ 138, 139, -1, -1, 140, -1, -1, -1, 141, -1, -1, -1, -1, -1, -1, -1,
+ 142, 143, -1, 144, -1, -1, -1, -1, -1, -1, -1, -1, 145, -1, -1, -1,
+ 146, -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 148, 149, -1, -1, 150, -1, -1, 151,
+ 152, 153, -1, -1, -1, -1, -1, -1, 154, 155, -1, 156, -1, 157, -1, -1,
+ -1, -1, -1, -1, 158, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 159, 160, -1, -1, 161, -1, -1, 162, 163, -1, 164, -1, -1, -1, -1, -1,
+ 165, 166, -1, 167, -1, 168, 169, -1, -1, -1, 170, -1, 171, 172, 173, -1,
+ 174, -1, -1, -1, 175, -1, 176, -1, -1, -1, -1, -1, 177, 178, -1, 179,
+ 180, 181, -1, -1, -1, 182, -1, -1, 183, 184, -1, -1, 185, -1, -1, -1,
+ 186, -1, -1, -1, -1, -1, -1, -1, 187, 188, -1, 189, 190, 191, -1, -1,
+ -1, -1, -1, -1, 192, 193, -1, -1, -1, -1, -1, -1, 194, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 195, 196, 197, -1,
+ 198, -1, -1, -1, 199, -1, -1, -1, -1, -1, -1, -1, 200, 201, -1, 202,
+ 203, 204, -1, -1, -1, -1, -1, -1, 205, 206, -1, -1, 207, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 208, -1, -1, 209, -1, 210, -1, -1,
+ -1, -1, -1, -1, 211, -1, -1, -1, 212, -1, -1, -1, 213, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 214, 215, -1, -1, -1, -1, 216, -1, -1,
+ 217, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 218, 219, -1, -1,
+ 220, -1, 221, -1, 222, -1, -1, -1, -1, -1, -1, -1, 223, 224, -1, 225,
+ -1, 226, 227, 228, -1, -1, -1, -1, 229, 230, -1, -1, -1, -1, -1, -1,
+ 231, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 232, 233, -1, -1,
+ -1, -1, -1, -1, 234, 235, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 236, -1, -1, -1, -1, -1, -1,
+ 237, -1, -1, -1, 238, -1, -1, -1, 239, -1, -1, -1, -1, -1, -1, -1,
+ 240, 241, -1, -1, -1, 242, -1, -1, -1, -1, -1, -1, 243, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 244, 245, -1, -1, 246, -1, -1, -1,
+ 247, -1, -1, -1, -1, -1, -1, 248, 249, 250, -1, 251, -1, 252, 253, -1,
+ -1, -1, -1, -1, 254, -1, -1, -1, -1, -1, -1, -1, 255, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, -1, -1, -1, -1, -1, -1,
+ 258, 259, -1, -1, 260, -1, -1, -1, 261, -1, -1, -1, -1, -1, -1, -1,
+ 262, 263, -1, -1, 264, -1, -1, -1, -1, -1, -1, -1, 265, -1, -1, -1,
+ 266, -1, -1, -1, 267, -1, -1, -1, -1, -1, -1, -1, 268, 269, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 270, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 271, 272, -1, -1, 273, -1, 274, -1, 275, -1, 276, -1,
+ -1, -1, -1, 277, 278, 279, -1, 280, -1, 281, -1, -1, -1, 282, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, 284, -1, -1,
+ 285, -1, -1, -1, 286, -1, -1, -1, -1, -1, -1, -1, 287, 288, -1, 289,
+ -1, 290, -1, -1, -1, -1, -1, -1, 291, 292, 293, -1, 294, -1, -1, 295,
+ 296, 297, 298, -1, -1, -1, -1, -1, 299, 300, -1, 301, 302, 303, 304, 305,
+ -1, 306, -1, 307, 308, 309, -1, -1, 310, -1, -1, -1, 311, -1, -1, -1,
+ -1, -1, -1, -1, 312, 313, -1, 314, 315, 316, -1, -1, -1, -1, -1, -1,
+ 317, 318, -1, -1, 319, -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, -1,
+ 321, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 323, 324, -1, 325, 326, -1, -1, -1,
+ 327, -1, 328, 329, -1, -1, -1, -1, 330, 331, -1, 332, 333, 334, -1, -1,
+ -1, -1, -1, 335, 336, 337, -1, -1, 338, -1, -1, -1, 339, -1, -1, -1,
+ -1, -1, -1, -1, 340, 341, -1, 342, 343, 344, -1, -1, -1, -1, -1, -1,
+ 345, 346, -1, -1, 347, -1, -1, -1, 348, -1, -1, -1, -1, -1, -1, -1,
+ 349, 350, -1, -1, 351, 352, -1, -1, 353, -1, -1, -1, 354, -1, -1, -1,
+ 355, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, -1, -1, 358, -1, -1, -1,
+ 359, -1, 360, -1, -1, -1, -1, -1, 361, 362, -1, 363, -1, 364, -1, -1,
+ -1, -1, 365, 366, 367, -1, -1, -1, 368, -1, -1, -1, 369, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 370, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1,
+ 372, -1, -1, -1, 373, -1, -1, -1, -1, -1, -1, -1, 374, 375, -1, 376,
+ -1, -1, -1, -1, -1, -1, -1, -1, 377, 378, -1, -1, 379, -1, -1, -1,
+ 380, -1, -1, -1, -1, -1, -1, -1, -1, 381, -1, 382, -1, 383, -1, -1,
+ -1, -1, -1, -1, 384, 385, -1, -1, 386, -1, -1, 387, 388, -1, -1, -1,
+ -1, -1, -1, -1, 389, 390, -1, 391, -1, 392, -1, -1, -1, -1, -1, -1,
+ 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 394, -1, -1, -1, -1, -1, -1, -1, 395, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 396, -1, -1, -1, 397, -1, -1, -1,
+ 398, -1, -1, -1, -1, -1, -1, -1, 399, 400, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 401, 402, -1, -1, -1, -1, -1, -1, 403, -1, -1, -1,
+ -1, -1, -1, -1, 404, 405, -1, -1, -1, 406, -1, -1, -1, -1, -1, -1,
+ 407, 408, -1, -1, 409, -1, -1, -1, 410, 411, 412, -1, -1, -1, -1, -1,
+ 413, 414, -1, 415, -1, 416, 417, -1, -1, -1, 418, -1, 419, -1, -1, -1,
+ 420, -1, -1, -1, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 422, 423, -1, -1, 424, -1, -1, -1,
+ 425, -1, 426, -1, -1, -1, -1, -1, 427, 428, -1, 429, -1, 430, -1, -1,
+ -1, -1, 431, -1, 432, 433, 434, -1, 435, -1, -1, 436, 437, 438, 439, 440,
+ -1, -1, -1, 441, 442, 443, -1, 444, 445, 446, 447, 448, -1, -1, -1, 449,
+ 450, 451, -1, -1, 452, -1, -1, -1, 453, -1, -1, -1, -1, -1, -1, -1,
+ 454, 455, -1, 456, 457, 458, -1, -1, -1, -1, -1, -1, 459, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 460, 461, 462, -1, 463, -1, -1, 464, 465, -1, 466, 467,
+ -1, -1, -1, -1, 468, 469, -1, 470, -1, 471, -1, 472, -1, -1, 473, -1,
+ 474, 475, -1, -1, 476, -1, -1, -1, 477, -1, -1, -1, -1, -1, -1, -1,
+ 478, 479, -1, 480, 481, 482, -1, -1, -1, -1, -1, -1, 483, -1, -1, -1,
+ 484, -1, -1, -1, 485, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 486, 487, -1, -1, -1, -1, -1, -1, 488, -1, -1, -1, 489, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 490, 491, -1, -1, 492, -1, -1, 493, 494, -1, 495, -1,
+ 496, -1, -1, -1, 497, 498, -1, 499, -1, 500, -1, 501, -1, 502, -1, -1,
+ 503, -1, -1, -1, 504, -1, -1, -1, 505, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 506, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 507, -1, -1, -1, -1, -1, -1, -1, 508, -1, -1, -1, 509, -1, -1, -1,
+ 510, -1, -1, -1, -1, -1, -1, -1, 511, 512, -1, 513, -1, -1, -1, -1,
+ -1, -1, -1, -1, 514, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 515, 516, -1, -1, 517, -1, -1, -1, 518, -1, -1, -1, -1, -1, -1, -1,
+ 519, 520, -1, 521, -1, 522, -1, -1, -1, -1, -1, -1, 523, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 524, -1, -1, -1, -1, -1, -1, -1, 525, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, -1, -1,
+ -1, -1, -1, -1, 527, -1, -1, -1, 528, -1, -1, -1, 529, -1, -1, -1,
+ -1, -1, -1, -1, -1, 530, -1, 531, -1, 532, -1, -1, -1, -1, -1, -1,
+ 533, -1, -1, -1, 534, -1, -1, -1, 535, -1, -1, -1, -1, -1, -1, -1,
+ 536, -1, -1, -1, -1, 537, -1, -1, -1, -1, -1, -1, 538, 539, -1, -1,
+ 540, -1, -1, 541, 542, -1, 543, -1, -1, -1, -1, -1, 544, 545, -1, 546,
+ -1, 547, -1, -1, -1, -1, -1, -1, 548, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 549, 550, -1, -1, 551, -1, -1, 552, 553, -1, -1, -1,
+ -1, -1, -1, -1, 554, 555, -1, 556, 557, 558, 559, -1, -1, -1, -1, -1,
+ 560, 561, -1, -1, 562, -1, -1, -1, 563, -1, -1, -1, -1, -1, -1, -1,
+ 564, 565, -1, 566, 567, 568, -1, -1, -1, -1, -1, 569, 570, 571, -1, -1,
+ 572, -1, -1, -1, 573, -1, -1, -1, -1, -1, -1, -1, 574, 575, -1, 576,
+ 577, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 579, 580, -1, -1, 581, -1, -1, -1, 582, -1, 583, 584, -1, -1, -1, -1,
+ 585, 586, -1, 587, 588, 589, -1, -1, -1, -1, -1, 590, 591, 592, -1, -1,
+ 593, -1, -1, -1, 594, -1, -1, -1, -1, -1, -1, -1, 595, 596, -1, 597,
+ 598, 599, -1, -1, -1, -1, -1, -1, 600, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 601, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 602, 603, -1, -1, 604, -1, -1, -1, 605, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 606, -1, -1, -1, -1, -1, -1, 607, -1, -1, -1,
+ -1, -1, -1, -1, 608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 609, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 610, -1, -1, -1, 611, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 612, 613, -1, -1,
+ 614, -1, -1, -1, 615, -1, -1, -1, -1, -1, -1, 616, 617, -1, -1, -1,
+ -1, 618, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 619, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 620, -1, -1, -1, 621, -1, -1, -1, 622, -1, -1, -1, -1, -1, -1, -1,
+ 623, 624, -1, -1, -1, 625, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 626, 627, -1, -1, 628, -1, -1, 629,
+ 630, -1, -1, -1, -1, -1, -1, -1, 631, 632, -1, 633, -1, -1, -1, -1,
+ -1, -1, -1, -1, 634, -1, -1, -1, 635, -1, -1, -1, 636, -1, -1, -1,
+ -1, -1, -1, -1, 637, 638, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 639, -1, -1, -1, 640, -1, -1, -1, 641, -1, -1, -1, -1, -1, -1, -1,
+ 642, 643, -1, 644, -1, 645, -1, -1, -1, -1, -1, -1, 646, 647, -1, -1,
+ 648, -1, -1, -1, 649, -1, -1, -1, -1, -1, -1, -1, 650, 651, -1, 652,
+ 653, 654, 655, -1, -1, -1, 656, 657, 658, 659, -1, -1, 660, -1, -1, -1,
+ 661, -1, -1, -1, -1, -1, -1, -1, 662, 663, -1, 664, 665, 666, -1, -1,
+ -1, -1, -1, -1, 667, 668, -1, -1, 669, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 670, -1, 671, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 672, 673, -1, -1,
+ 674, -1, -1, -1, 675, -1, -1, -1, -1, -1, -1, -1, 676, 677, -1, 678,
+ 679, 680, -1, -1, -1, -1, -1, 681, 682, 683, -1, -1, 684, -1, -1, -1,
+ 685, -1, -1, -1, -1, -1, -1, -1, 686, 687, -1, 688, -1, 689, -1, -1,
+ -1, -1, -1, -1, 690, 691, -1, -1, 692, -1, -1, -1, 693, -1, -1, -1,
+ -1, -1, -1, -1, 694, 695, -1, 696, 697, 698, -1, -1, -1, -1, -1, -1,
+ 699, -1, -1, -1, 700, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 701, -1, 702, -1, -1, -1, -1, -1, -1, -1, -1, 703, 704, -1, -1,
+ 705, -1, -1, -1, 706, -1, -1, -1, -1, -1, -1, -1, 707, 708, -1, 709,
+ -1, 710, -1, -1, -1, -1, -1, -1, 711, -1, -1, -1, 712, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 713, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 714, -1, -1, -1, -1, -1, -1, -1,
+ 715, -1, -1, -1, 716, -1, -1, -1, 717, -1, -1, -1, -1, -1, -1, -1,
+ 718, 719, -1, 720, -1, 721, -1, -1, -1, -1, -1, -1, 722, -1, -1, -1,
+ 723, -1, -1, -1, 724, -1, -1, -1, -1, -1, -1, -1, -1, 725, -1, 726,
+ -1, 727, -1, -1, -1, -1, -1, -1, 728, 729, -1, -1, 730, -1, -1, -1,
+ 731, -1, -1, -1, -1, -1, -1, -1, 732, 733, -1, 734, -1, 735, -1, -1,
+ -1, -1, -1, -1, 736, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 737, -1, -1, -1, -1, -1, -1, -1,
+ 738, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 739, 740, -1, -1,
+ 741, -1, -1, -1, 742, -1, -1, -1, -1, -1, -1, -1, 743, -1, -1, 744,
+ -1, 745, -1, -1, -1, -1, -1, -1, 746, 747, -1, -1, 748, -1, -1, -1,
+ 749, -1, -1, -1, -1, -1, -1, -1, 750, 751, -1, 752, -1, 753, -1, -1,
+ -1, -1, -1, -1, 754, 755, -1, -1, 756, -1, -1, -1, 757, -1, -1, -1,
+ -1, -1, -1, -1, 758, 759, -1, 760, -1, 761, 762, -1, -1, 763, 764, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 765, 766, -1, -1,
+ 767, -1, -1, -1, 768, -1, -1, -1, -1, -1, -1, -1, 769, 770, -1, 771,
+ -1, 772, -1, -1, -1, -1, -1, -1, 773, 774, -1, -1, 775, -1, 776, 777,
+ 778, 779, 780, -1, -1, -1, -1, -1, 781, 782, -1, 783, -1, 784, 785, -1,
+ -1, 786, -1, 787, 788, 789, -1, -1, 790, -1, -1, -1, 791, -1, -1, -1,
+ -1, -1, -1, -1, 792, 793, -1, 794, 795, 796, 797, -1, -1, -1, -1, -1,
+ 798, 799, -1, -1, -1, -1, -1, -1, 800, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 801, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 802, 803, -1, -1, 804, -1, -1, -1,
+ 805, -1, 806, -1, -1, -1, -1, -1, 807, 808, -1, 809, -1, 810, 811, -1,
+ -1, -1, -1, 812, 813, 814, -1, -1, 815, -1, -1, -1, 816, -1, -1, -1,
+ -1, -1, -1, -1, 817, 818, -1, 819, 820, 821, -1, -1, -1, -1, -1, -1,
+ 822, 823, -1, -1, 824, -1, -1, -1, 825, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 826, 827, 828, -1, 829, -1, -1, -1, -1, 830, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 831, 832, -1, 833, 834, -1, -1, -1,
+ 835, -1, 836, -1, -1, -1, -1, -1, 837, 838, -1, 839, -1, 840, -1, -1,
+ -1, -1, -1, -1, 841, -1, -1, -1, 842, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 843, 844, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 845, -1, -1, -1,
+ 846, -1, -1, -1, 847, -1, -1, -1, -1, -1, -1, -1, -1, 848, -1, 849,
+ -1, 850, -1, -1, -1, -1, -1, -1, 851, -1, -1, -1, 852, -1, -1, -1,
+ 853, -1, -1, -1, -1, -1, -1, -1, -1, 854, -1, 855, -1, -1, -1, -1,
+ -1, -1, -1, -1, 856, 857, 858, -1, 859, -1, -1, 860, 861, 862, 863, -1,
+ -1, -1, -1, -1, 864, 865, -1, 866, -1, 867, -1, -1, -1, 868, -1, 869,
+ 870, -1, -1, -1, 871, -1, -1, -1, 872, -1, -1, -1, -1, -1, -1, -1,
+ -1, 873, -1, 874, -1, -1, -1, -1, -1, -1, -1, -1, 875, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 876, -1, -1, -1, 877, -1, -1, -1,
+ 878, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 879, -1, -1, -1, 880, -1, -1, -1, 881, -1, -1, -1,
+ -1, -1, -1, -1, 882, -1, -1, 883, -1, -1, -1, -1, -1, -1, -1, -1,
+ 884, -1, -1, -1, 885, -1, -1, -1, 886, -1, -1, -1, -1, -1, -1, -1,
+ 887, -1, -1, 888, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 889, 890, -1, -1, 891, -1, -1, 892,
+ 893, -1, 894, -1, -1, -1, -1, -1, 895, 896, -1, 897, 898, 899, -1, 900,
+ -1, 901, -1, -1, 902, 903, 904, 905, 906, -1, -1, 907, 908, 909, 910, 911,
+ -1, -1, -1, -1, 912, 913, -1, 914, -1, 915, -1, -1, -1, 916, -1, -1,
+ 917, 918, -1, -1, 919, -1, -1, -1, 920, -1, -1, -1, -1, -1, -1, -1,
+ 921, 922, -1, 923, 924, 925, -1, -1, -1, 926, -1, -1, 927, 928, -1, -1,
+ 929, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 930, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 931, 932, -1, -1, 933, -1, -1, 934, 935, -1, 936, -1,
+ -1, -1, -1, -1, 937, 938, -1, 939, -1, 940, 941, -1, -1, -1, -1, -1,
+ 942, 943, -1, -1, 944, -1, -1, 945, 946, -1, -1, -1, -1, -1, -1, -1,
+ 947, 948, -1, 949, 950, 951, -1, -1, -1, -1, -1, -1, 952, 953, -1, -1,
+ 954, -1, -1, -1, 955, -1, -1, -1, -1, -1, -1, -1, -1, 956, -1, 957,
+ 958, 959, -1, -1, -1, 960, -1, -1, 961, -1, -1, -1, 962, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 963, 964, 965, -1, 966, -1, -1, -1, 967, -1, -1, -1,
+ -1, -1, -1, -1, 968, 969, -1, 970, -1, 971, -1, -1, -1, -1, -1, -1,
+ 972, -1, -1, -1, 973, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 974, -1, -1, -1, -1, -1, -1, -1, 975, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 976, -1, -1, -1, -1, -1, -1, -1, 977, 978, -1, -1, 979, -1, -1, -1,
+ 980, -1, -1, -1, -1, -1, -1, -1, 981, 982, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 983, -1, -1, -1, 984, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 985, 986, -1, -1, 987, -1, -1, 988, 989, 990, 991, -1, -1, -1, -1, -1,
+ 992, 993, -1, 994, -1, 995, -1, -1, -1, 996, 997, -1, 998, -1, -1, -1,
+ -1, -1, -1, -1, 999, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1000, -1, -1, -1, -1, -1, -1, -1,1001, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1002,1003, -1, -1,1004, -1, -1, -1,1005, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,1006, -1, -1, -1, -1, -1, -1,
+1007, -1, -1, -1,1008, -1, -1, -1,1009, -1, -1, -1, -1, -1, -1, -1,
+1010, -1, -1,1011, -1,1012, -1, -1, -1, -1, -1, -1,1013,1014, -1, -1,
+1015, -1, -1, -1,1016, -1, -1, -1, -1, -1, -1, -1,1017,1018, -1,1019,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1020,1021, -1, -1,1022, -1, -1, -1,1023, -1,1024, -1,
+ -1, -1, -1, -1,1025,1026, -1,1027, -1,1028,1029,1030, -1, -1, -1, -1,
+1031,1032, -1, -1,1033, -1, -1, -1,1034, -1,1035, -1, -1, -1, -1, -1,
+1036,1037, -1,1038,1039,1040, -1, -1, -1, -1, -1,1041,1042,1043, -1, -1,
+1044, -1, -1, -1,1045, -1, -1, -1, -1, -1, -1, -1,1046,1047, -1,1048,
+1049,1050, -1, -1, -1, -1, -1, -1,1051,1052, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1053, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1054,1055, -1, -1,1056, -1, -1,1057,1058, -1, -1, -1, -1, -1, -1, -1,
+1059, -1, -1,1060,1061,1062, -1, -1, -1, -1, -1, -1,1063, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1064, -1, -1, -1, -1, -1, -1,1065,1066, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1067,1068, -1,1069,1070,1071, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1072,1073, -1, -1,1074, -1, -1, -1,1075, -1, -1, -1, -1, -1, -1, -1,
+1076,1077, -1, -1, -1,1078, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1079, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1080, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,1081, -1, -1, -1, -1, -1, -1,1082,1083, -1, -1,
+1084, -1, -1, -1,1085, -1, -1, -1, -1, -1, -1, -1,1086, -1, -1,1087,
+ -1,1088, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1089, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1090, -1, -1, -1, -1, -1, -1,1091, -1, -1, -1,1092, -1, -1, -1,
+1093, -1, -1, -1, -1, -1, -1, -1,1094,1095, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1096,1097, -1, -1,1098, -1, -1, -1,1099, -1, -1, -1, -1, -1, -1, -1,
+1100,1101, -1,1102, -1,1103, -1, -1, -1, -1, -1, -1,1104,1105, -1,1106,
+1107, -1, -1,1108,1109,1110,1111, -1, -1, -1, -1, -1,1112,1113, -1,1114,
+1115,1116, -1, -1, -1,1117, -1, -1,1118,1119, -1, -1,1120, -1, -1, -1,
+1121, -1, -1, -1, -1, -1, -1, -1,1122,1123, -1,1124,1125,1126, -1, -1,
+ -1, -1, -1, -1,1127,1128, -1, -1,1129, -1, -1, -1,1130, -1, -1, -1,
+ -1, -1, -1, -1,1131,1132, -1,1133, -1,1134, -1, -1, -1, -1, -1, -1,
+1135, -1, -1, -1,1136, -1, -1, -1,1137, -1, -1, -1, -1, -1, -1, -1,
+1138, -1, -1, -1, -1,1139, -1, -1, -1, -1, -1, -1,1140,1141,1142,1143,
+1144, -1, -1,1145,1146, -1,1147,1148, -1, -1, -1, -1,1149,1150, -1,1151,
+1152,1153, -1, -1, -1, -1,1154, -1,1155,1156, -1, -1,1157, -1, -1, -1,
+1158, -1, -1, -1, -1, -1, -1, -1,1159,1160, -1,1161,1162,1163, -1, -1,
+ -1, -1, -1, -1,1164,1165, -1, -1,1166, -1, -1, -1,1167, -1, -1, -1,
+ -1, -1, -1, -1,1168,1169, -1,1170,1171,1172, -1, -1, -1, -1, -1, -1,
+1173, -1, -1, -1,1174, -1, -1, -1,1175, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,1176, -1, -1, -1, -1, -1, -1,1177,1178,1179, -1,
+1180, -1, -1, -1,1181, -1,1182, -1, -1, -1, -1, -1,1183,1184, -1,1185,
+ -1,1186, -1, -1, -1,1187, -1, -1,1188,1189, -1, -1,1190, -1, -1, -1,
+1191, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1192, -1, -1,
+ -1, -1, -1, -1,1193, -1, -1, -1,1194, -1, -1, -1,1195, -1, -1, -1,
+ -1, -1, -1, -1,1196, -1, -1,1197,1198, -1, -1, -1, -1, -1, -1, -1,
+1199, -1, -1, -1,1200, -1, -1, -1,1201, -1, -1, -1, -1, -1, -1, -1,
+1202,1203, -1,1204, -1, -1, -1, -1, -1, -1, -1, -1,1205,1206, -1, -1,
+1207, -1, -1, -1,1208, -1, -1, -1, -1, -1, -1, -1,1209,1210, -1,1211,
+ -1,1212, -1, -1, -1, -1, -1, -1,1213,1214, -1, -1,1215, -1, -1,1216,
+1217, -1, -1, -1, -1, -1, -1, -1,1218,1219, -1,1220, -1,1221, -1,1222,
+ -1,1223,1224, -1,1225, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1226, -1, -1, -1, -1, -1, -1, -1,
+1227,1228, -1, -1,1229, -1, -1, -1,1230, -1, -1, -1, -1, -1, -1, -1,
+1231, -1, -1, -1, -1,1232, -1, -1, -1, -1, -1, -1,1233,1234, -1, -1,
+1235, -1, -1, -1,1236, -1, -1, -1, -1, -1, -1, -1,1237,1238, -1,1239,
+ -1,1240, -1, -1, -1, -1, -1, -1,1241,1242, -1, -1, -1, -1, -1, -1,
+1243, -1, -1, -1, -1, -1, -1, -1,1244, -1, -1,1245, -1,1246, -1, -1,
+ -1, -1, -1, -1,1247,1248, -1, -1,1249, -1, -1, -1,1250,1251, -1, -1,
+ -1, -1, -1, -1,1252,1253, -1,1254, -1,1255, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1256,1257, -1, -1,
+1258, -1, -1,1259,1260, -1, -1, -1, -1, -1, -1,1261,1262,1263, -1,1264,
+ -1,1265, -1, -1, -1, -1,1266, -1,1267,1268, -1,1269,1270, -1, -1, -1,
+1271, -1, -1, -1, -1, -1, -1, -1,1272,1273, -1, -1,1274,1275, -1, -1,
+ -1, -1, -1,1276,1277,1278, -1, -1,1279, -1, -1, -1,1280, -1, -1, -1,
+ -1, -1, -1, -1,1281,1282, -1, -1,1283,1284, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,1285, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1286,1287, -1, -1,1288, -1, -1, -1,
+1289, -1,1290, -1, -1, -1, -1, -1,1291,1292, -1, -1,1293,1294, -1, -1,
+ -1, -1, -1, -1,1295, -1, -1, -1,1296, -1, -1, -1,1297, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1298, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1299,1300, -1, -1,1301, -1, -1,1302,
+1303, -1,1304, -1, -1, -1, -1, -1,1305,1306, -1, -1, -1,1307, -1, -1,
+ -1, -1, -1, -1,1308,1309, -1, -1,1310, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1311, -1, -1, -1, -1, -1, -1, -1,
+1312, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1313, -1, -1, -1, -1, -1, -1, -1,1314, -1, -1, -1,
+1315, -1, -1, -1,1316, -1, -1, -1, -1, -1, -1, -1,1317,1318, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1319, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1320,1321, -1, -1,1322, -1, -1, -1,1323, -1, -1, -1,
+ -1, -1, -1, -1,1324,1325, -1, -1, -1,1326, -1, -1, -1, -1, -1, -1,
+1327, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1328, -1, -1, -1, -1, -1, -1, -1,1329, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1330, -1, -1, -1,1331, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,1332, -1, -1, -1, -1, -1, -1,
+1333,1334, -1, -1,1335, -1, -1, -1,1336, -1,1337, -1, -1, -1, -1,1338,
+1339,1340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1341, -1, -1, -1,
+1342, -1, -1, -1,1343, -1, -1, -1, -1, -1, -1, -1,1344, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1345,1346, -1, -1,1347, -1, -1, -1,
+1348, -1, -1, -1, -1, -1, -1, -1,1349,1350, -1,1351, -1,1352, -1, -1,
+ -1, -1, -1, -1,1353,1354, -1, -1,1355,1356,1357, -1,1358,1359,1360, -1,
+ -1, -1, -1,1361,1362,1363, -1,1364,1365,1366, -1, -1, -1,1367,1368, -1,
+1369,1370, -1, -1,1371, -1, -1, -1,1372, -1, -1, -1, -1, -1, -1, -1,
+1373,1374, -1,1375,1376,1377, -1, -1, -1, -1, -1, -1,1378,1379, -1, -1,
+1380, -1, -1, -1,1381, -1, -1,1382, -1, -1, -1, -1,1383,1384, -1,1385,
+ -1,1386, -1, -1, -1,1387, -1,1388,1389, -1, -1, -1,1390, -1, -1, -1,
+1391, -1, -1, -1, -1, -1, -1, -1, -1,1392, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1393,1394, -1, -1,1395,1396, -1,1397,1398,1399,1400, -1,
+ -1, -1, -1, -1,1401,1402,1403,1404,1405,1406,1407, -1,1408, -1,1409, -1,
+1410,1411, -1, -1,1412, -1, -1, -1,1413, -1, -1, -1, -1, -1, -1, -1,
+1414,1415, -1,1416, -1,1417, -1, -1, -1, -1, -1, -1,1418,1419,1420, -1,
+1421, -1, -1, -1,1422, -1,1423,1424, -1, -1, -1, -1,1425,1426,1427,1428,
+1429,1430, -1, -1, -1,1431,1432,1433,1434, -1, -1, -1,1435, -1, -1, -1,
+1436, -1, -1, -1, -1, -1, -1, -1,1437,1438, -1,1439,1440, -1, -1, -1,
+ -1, -1, -1, -1,1441,1442, -1, -1,1443, -1, -1, -1,1444,1445,1446, -1,
+1447, -1, -1,1448,1449,1450, -1,1451, -1,1452, -1,1453, -1, -1, -1, -1,
+1454,1455, -1, -1,1456, -1, -1, -1,1457, -1, -1, -1, -1, -1, -1, -1,
+1458,1459, -1,1460,1461,1462, -1, -1, -1, -1, -1, -1,1463,1464, -1, -1,
+1465, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1466, -1, -1,1467,
+ -1,1468, -1, -1, -1, -1, -1, -1,1469,1470, -1, -1,1471, -1, -1, -1,
+1472, -1, -1, -1, -1, -1, -1, -1,1473,1474, -1,1475, -1,1476, -1, -1,
+ -1, -1, -1, -1,1477,1478, -1, -1,1479, -1, -1, -1,1480, -1, -1, -1,
+ -1, -1, -1, -1,1481,1482, -1,1483, -1,1484, -1, -1, -1, -1, -1, -1,
+1485,1486, -1, -1,1487, -1, -1, -1,1488,1489,1490, -1, -1, -1, -1, -1,
+1491,1492, -1,1493, -1,1494, -1, -1, -1, -1, -1, -1,1495,1496, -1, -1,
+1497, -1, -1, -1,1498, -1, -1, -1, -1, -1, -1, -1,1499,1500, -1, -1,
+1501,1502, -1, -1, -1, -1, -1, -1,1503,1504, -1, -1,1505, -1, -1, -1,
+1506, -1, -1, -1, -1, -1, -1, -1,1507,1508, -1, -1, -1,1509, -1, -1,
+ -1, -1, -1, -1,1510,1511, -1, -1,1512, -1, -1, -1,1513, -1, -1, -1,
+ -1, -1, -1, -1,1514,1515, -1,1516, -1,1517, -1, -1, -1, -1, -1, -1,
+1518,1519, -1, -1,1520, -1, -1, -1,1521, -1, -1, -1, -1, -1, -1, -1,
+1522,1523, -1,1524, -1,1525, -1,1526, -1, -1, -1, -1,1527,1528, -1, -1,
+1529, -1, -1, -1,1530, -1, -1, -1, -1, -1,1531, -1,1532,1533, -1,1534,
+ -1,1535,1536,1537,1538,1539,1540,1541,1542, -1, -1, -1,1543, -1, -1, -1,
+1544, -1, -1, -1, -1, -1, -1, -1,1545, -1, -1,1546, -1, -1, -1, -1,
+ -1, -1, -1, -1,1547,1548, -1, -1,1549, -1, -1, -1,1550,1551,1552, -1,
+ -1, -1, -1,1553,1554,1555, -1,1556,1557,1558,1559, -1, -1, -1,1560, -1,
+1561,1562, -1, -1,1563, -1,1564,1565,1566, -1,1567, -1, -1, -1, -1, -1,
+1568,1569, -1,1570,1571,1572,1573, -1, -1, -1, -1, -1,1574,1575, -1, -1,
+1576, -1, -1, -1,1577, -1, -1, -1, -1, -1, -1, -1,1578,1579, -1,1580,
+1581,1582, -1, -1, -1, -1, -1, -1,1583,1584, -1, -1,1585, -1,1586, -1,
+1587, -1, -1, -1, -1, -1, -1, -1,1588, -1, -1, -1, -1,1589, -1, -1,
+ -1, -1, -1, -1,1590, -1, -1, -1,1591, -1, -1, -1,1592, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1593,1594, -1, -1,1595, -1, -1, -1,1596, -1,1597, -1, -1, -1, -1, -1,
+1598,1599, -1,1600, -1,1601,1602, -1, -1, -1, -1, -1,1603,1604, -1, -1,
+1605, -1, -1, -1,1606, -1, -1, -1, -1, -1, -1, -1,1607,1608, -1,1609,
+ -1,1610, -1, -1, -1, -1, -1, -1,1611, -1, -1, -1,1612, -1, -1, -1,
+1613, -1, -1, -1, -1, -1, -1, -1,1614,1615, -1, -1,1616,1617, -1, -1,
+ -1, -1, -1, -1,1618, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1619,1620, -1, -1,1621, -1, -1, -1,1622, -1,1623, -1, -1, -1, -1, -1,
+1624,1625, -1,1626, -1,1627,1628,1629, -1, -1, -1,1630,1631,1632, -1, -1,
+ -1, -1, -1, -1,1633, -1, -1, -1, -1, -1, -1, -1, -1,1634, -1,1635,
+ -1,1636, -1, -1, -1, -1, -1, -1,1637, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1638,1639, -1, -1,
+ -1, -1, -1, -1,1640, -1, -1, -1,1641, -1, -1, -1,1642, -1, -1, -1,
+ -1, -1, -1, -1,1643,1644, -1,1645, -1,1646, -1, -1, -1, -1, -1, -1,
+1647,1648, -1, -1,1649, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,1650, -1, -1, -1, -1, -1, -1,1651,1652, -1, -1,
+1653, -1, -1, -1,1654,1655,1656, -1, -1, -1, -1, -1,1657,1658, -1,1659,
+ -1,1660, -1, -1, -1, -1, -1, -1,1661, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1662, -1, -1, -1,
+ -1, -1, -1, -1,1663, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1664,1665, -1, -1,1666, -1, -1, -1,1667, -1, -1, -1, -1, -1, -1, -1,
+1668,1669, -1,1670, -1, -1, -1, -1, -1, -1, -1, -1,1671, -1, -1, -1,
+1672, -1, -1, -1,1673, -1, -1, -1, -1, -1, -1, -1,1674, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1675,1676, -1, -1,1677, -1, -1, -1,
+1678, -1, -1, -1, -1, -1, -1, -1,1679,1680, -1,1681, -1,1682, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1683,1684, -1, -1,1685, -1, -1,1686,1687, -1,1688, -1, -1, -1, -1, -1,
+1689,1690, -1,1691, -1,1692,1693, -1, -1,1694,1695, -1,1696,1697, -1, -1,
+1698, -1,1699, -1,1700, -1, -1,1701, -1, -1, -1, -1,1702,1703, -1,1704,
+1705,1706, -1, -1, -1, -1, -1, -1,1707,1708, -1, -1,1709, -1, -1, -1,
+1710, -1, -1, -1, -1, -1, -1, -1,1711,1712, -1,1713,1714,1715, -1, -1,
+ -1, -1, -1, -1,1716, -1, -1, -1,1717, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,1718, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1719,1720, -1, -1,
+1721, -1, -1, -1,1722, -1, -1, -1, -1, -1, -1, -1,1723,1724, -1,1725,
+1726,1727, -1, -1, -1, -1, -1, -1,1728, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1729, -1, -1,
+ -1, -1, -1, -1,1730, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1731, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1732,1733, -1, -1,
+1734, -1, -1, -1,1735, -1, -1, -1, -1, -1, -1, -1,1736,1737, -1,1738,
+ -1,1739, -1,1740, -1, -1, -1, -1,1741,1742, -1, -1, -1, -1, -1, -1,
+1743, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1744, -1, -1, -1,
+ -1, -1, -1, -1,1745, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1746, -1, -1, -1, -1, -1, -1, -1,
+1747, -1, -1, -1,1748, -1, -1, -1,1749, -1, -1, -1, -1, -1, -1, -1,
+1750,1751, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1752, -1, -1, -1, -1, -1, -1,1753,1754, -1, -1,1755, -1, -1, -1,
+1756, -1, -1, -1, -1, -1, -1, -1,1757,1758, -1, -1, -1,1759, -1, -1,
+ -1, -1, -1, -1,1760, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1761,1762, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1763, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1764, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1765, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1766, -1, -1,1767, -1,1768, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1769,1770, -1, -1,
+1771, -1, -1, -1,1772, -1, -1, -1, -1, -1, -1, -1,1773,1774, -1, -1,
+ -1,1775,1776, -1, -1, -1, -1,1777,1778,1779, -1, -1,1780, -1,1781, -1,
+1782, -1, -1, -1, -1, -1, -1, -1,1783,1784, -1,1785,1786,1787,1788, -1,
+ -1, -1, -1, -1,1789,1790, -1, -1,1791, -1, -1, -1,1792, -1, -1, -1,
+ -1, -1, -1, -1,1793,1794, -1,1795,1796,1797, -1, -1, -1, -1, -1, -1,
+1798, -1, -1, -1,1799, -1,1800, -1,1801, -1, -1, -1, -1, -1, -1, -1,
+1802, -1, -1, -1, -1,1803, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1804,1805, -1, -1,1806, -1, -1, -1,
+1807, -1, -1, -1, -1, -1, -1, -1,1808,1809, -1,1810,1811,1812, -1, -1,
+ -1, -1, -1, -1,1813,1814, -1, -1,1815, -1, -1, -1,1816, -1, -1, -1,
+ -1, -1, -1, -1,1817,1818, -1,1819, -1,1820, -1, -1, -1, -1, -1, -1,
+1821, -1, -1, -1,1822, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1823, -1, -1, -1, -1, -1, -1, -1,1824, -1, -1, -1,
+1825, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1826, -1, -1, -1, -1, -1, -1,1827,1828, -1, -1,1829, -1, -1, -1,
+1830, -1, -1, -1, -1, -1, -1, -1,1831,1832, -1,1833, -1,1834, -1, -1,
+ -1, -1, -1, -1,1835, -1, -1, -1,1836, -1, -1, -1,1837, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,1838, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1839, -1, -1, -1,
+1840, -1, -1, -1,1841, -1, -1, -1, -1, -1, -1, -1,1842,1843, -1,1844,
+ -1,1845, -1, -1, -1, -1, -1, -1,1846, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1847, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1848,1849, -1, -1,1850, -1, -1, -1,1851, -1, -1, -1,
+ -1, -1, -1, -1,1852,1853, -1,1854, -1,1855, -1, -1, -1, -1, -1, -1,
+1856, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1857, -1, -1, -1, -1, -1, -1, -1,1858, -1, -1, -1,
+1859, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1860, -1, -1, -1,1861, -1, -1, -1,
+1862, -1, -1, -1, -1, -1, -1, -1,1863,1864, -1,1865, -1,1866, -1, -1,
+ -1, -1, -1, -1,1867, -1, -1, -1,1868, -1, -1, -1,1869, -1, -1, -1,
+ -1, -1, -1, -1,1870, -1, -1, -1, -1,1871, -1, -1, -1, -1, -1, -1,
+1872,1873, -1, -1,1874, -1, -1, -1,1875, -1, -1, -1, -1, -1, -1, -1,
+1876,1877, -1,1878, -1,1879, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,1880,1881, -1, -1,1882, -1, -1,1883,
+1884,1885, -1, -1, -1, -1, -1, -1,1886,1887, -1,1888, -1,1889, -1, -1,
+ -1, -1, -1, -1,1890,1891, -1, -1,1892, -1, -1, -1,1893, -1, -1, -1,
+ -1, -1, -1, -1,1894,1895, -1,1896, -1,1897, -1, -1, -1, -1, -1, -1,
+1898,1899, -1, -1,1900, -1, -1, -1,1901, -1, -1, -1, -1, -1, -1, -1,
+1902,1903, -1,1904,1905,1906, -1, -1, -1, -1, -1, -1,1907,1908, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1909, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1910,1911, -1, -1,1912, -1, -1,1913,1914, -1, -1, -1,
+ -1, -1, -1, -1,1915,1916, -1,1917,1918,1919, -1, -1, -1, -1, -1, -1,
+1920,1921, -1, -1,1922, -1, -1, -1,1923, -1, -1, -1, -1, -1, -1, -1,
+1924,1925, -1,1926, -1,1927, -1, -1, -1, -1, -1, -1,1928, -1, -1, -1,
+1929, -1, -1, -1,1930, -1, -1, -1, -1, -1, -1, -1,1931,1932, -1,1933,
+1934,1935, -1, -1, -1, -1, -1, -1,1936, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1937,1938, -1, -1,1939, -1, -1, -1,1940, -1, -1, -1,
+ -1, -1, -1, -1,1941,1942, -1,1943, -1,1944, -1, -1, -1, -1, -1, -1,
+1945,1946, -1, -1,1947, -1, -1, -1,1948, -1, -1, -1, -1, -1, -1, -1,
+1949, -1, -1, -1, -1,1950, -1, -1, -1, -1, -1, -1,1951, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1952, -1, -1, -1, -1, -1, -1,1953, -1, -1, -1, -1, -1, -1, -1,
+1954, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1955, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+1956,1957, -1, -1,1958, -1, -1, -1,1959, -1, -1, -1, -1, -1, -1, -1,
+1960,1961, -1,1962, -1,1963, -1, -1, -1, -1, -1, -1,1964, -1, -1, -1,
+1965, -1, -1, -1,1966, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,1967, -1, -1, -1, -1, -1, -1,1968, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1969, -1, -1,
+ -1, -1, -1, -1,1970,1971, -1, -1,1972, -1, -1, -1,1973, -1, -1, -1,
+ -1, -1, -1, -1,1974,1975, -1,1976, -1,1977, -1, -1, -1, -1, -1, -1,
+1978, -1, -1, -1,1979, -1, -1, -1,1980, -1, -1, -1, -1, -1, -1, -1,
+1981, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,1982,1983, -1, -1,
+1984, -1, -1, -1,1985, -1, -1, -1, -1, -1, -1, -1,1986,1987, -1, -1,
+ -1,1988, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,1989,1990, -1, -1,1991, -1, -1, -1,1992, -1, -1, -1,
+ -1, -1, -1, -1,1993,1994, -1,1995, -1,1996, -1, -1, -1, -1, -1, -1,
+1997,1998, -1, -1,1999, -1, -1, -1,2000,2001, -1, -1, -1, -1, -1, -1,
+2002,2003, -1,2004,2005,2006, -1, -1, -1, -1, -1, -1,2007,2008, -1, -1,
+2009, -1, -1, -1,2010, -1, -1, -1, -1, -1, -1, -1,2011,2012, -1,2013,
+2014,2015, -1, -1, -1, -1, -1, -1,2016, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2017, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+2018,2019, -1, -1,2020, -1, -1, -1,2021, -1,2022, -1, -1, -1, -1, -1,
+2023,2024, -1,2025,2026,2027, -1, -1, -1, -1, -1, -1,2028,2029, -1, -1,
+2030, -1, -1, -1,2031, -1, -1, -1, -1, -1, -1, -1,2032,2033, -1,2034,
+ -1,2035, -1, -1, -1, -1, -1, -1,2036, -1, -1, -1,2037, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2038, -1, -1, -1,
+ -1, -1, -1, -1,2039, -1, -1, -1,2040, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+2041,2042, -1, -1,2043, -1, -1, -1,2044, -1, -1, -1, -1, -1, -1, -1,
+2045,2046, -1,2047, -1,2048, -1, -1, -1, -1,2049, -1,2050, -1, -1, -1,
+2051, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,2052, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1,2053, -1, -1, -1,2054, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1,2055, -1,2056, -1, -1, -1, -1, -1, -1,
+2057, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2058,2059, -1, -1,
+2060, -1, -1, -1,2061, -1, -1, -1, -1, -1, -1, -1,2062,2063, -1,2064,
+ -1,2065, -1, -1, -1, -1, -1, -1,2066, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2067, -1, -1, -1,
+ -1, -1, -1, -1,2068, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+2069,2070, -1, -1,2071, -1, -1, -1,2072, -1, -1, -1, -1, -1, -1, -1,
+2073,2074, -1, -1, -1,2075, -1, -1, -1, -1, -1, -1,2076, -1, -1, -1,
+2077, -1, -1, -1,2078, -1, -1, -1, -1, -1, -1, -1,2079, -1, -1, -1,
+ -1,2080, -1, -1, -1, -1, -1, -1,2081,2082, -1, -1,2083, -1, -1,2084,
+2085, -1,2086, -1, -1, -1, -1, -1,2087,2088, -1,2089, -1, -1, -1, -1,
+ -1, -1, -1, -1,2090, -1, -1, -1,2091, -1, -1, -1,2092, -1, -1, -1,
+ -1, -1, -1, -1,2093,2094, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+2095,2096, -1, -1,2097, -1, -1, -1,2098, -1, -1, -1, -1, -1, -1, -1,
+2099,2100, -1,2101, -1,2102, -1, -1, -1, -1, -1, -1,2103,2104,2105, -1,
+2106, -1, -1, -1,2107, -1,2108, -1, -1, -1, -1, -1,2109,2110, -1,2111,
+2112,2113, -1, -1, -1,2114, -1, -1,2115,2116, -1, -1,2117, -1, -1, -1,
+2118, -1, -1, -1, -1, -1, -1, -1,2119,2120, -1,2121,2122,2123, -1, -1,
+ -1, -1, -1, -1,2124,2125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2126,2127, -1, -1,
+2128, -1, -1, -1,2129, -1, -1, -1, -1, -1, -1, -1,2130,2131, -1,2132,
+2133,2134, -1, -1, -1, -1, -1, -1,2135,2136, -1, -1,2137, -1, -1, -1,
+2138, -1, -1, -1, -1, -1, -1, -1,2139,2140, -1,2141, -1,2142, -1, -1,
+ -1, -1, -1, -1,2143, -1, -1, -1,2144, -1, -1, -1,2145, -1, -1, -1,
+ -1, -1, -1, -1,2146,2147, -1, -1,2148,2149, -1, -1, -1, -1, -1, -1,
+2150, -1, -1, -1, -1, -1, -1, -1,2151, -1, -1, -1, -1, -1, -1, -1,
+ -1,2152, -1,2153, -1, -1, -1, -1, -1, -1, -1, -1,2154,2155, -1, -1,
+2156, -1, -1, -1,2157, -1, -1, -1, -1, -1, -1, -1,2158,2159, -1,2160,
+ -1,2161, -1, -1, -1, -1, -1, -1,2162, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2163, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+2164, -1, -1, -1,2165, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2166, -1, -1, -1,
+2167, -1, -1, -1,2168, -1, -1, -1, -1, -1, -1, -1, -1,2169, -1,2170,
+ -1, -1, -1, -1, -1, -1, -1, -1,2171,2172, -1, -1,2173, -1, -1,2174,
+2175, -1,2176, -1, -1, -1, -1, -1,2177,2178, -1,2179, -1,2180, -1, -1,
+ -1, -1, -1, -1,2181, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1,2182, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2183, -1, -1, -1,
+2184, -1, -1, -1,2185, -1, -1, -1, -1, -1, -1, -1,2186, -1, -1,2187,
+ -1, -1, -1, -1, -1, -1, -1, -1,2188, -1, -1, -1,2189, -1, -1, -1,
+2190, -1, -1, -1, -1, -1, -1, -1,2191, -1, -1,2192, -1,2193, -1, -1,
+ -1, -1, -1, -1,2194, -1, -1, -1,2195, -1, -1, -1,2196, -1, -1, -1,
+ -1, -1, -1, -1,2197,2198, -1,2199, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,2200,2201, -1, -1,
+2202, -1, -1, -1,2203, -1, -1, -1, -1, -1, -1, -1,2204,2205, -1,2206,
+ -1,2207, -1, -1, -1, -1, -1, -1,2208,2209, -1, -1,2210, -1, -1, -1,
+2211, -1, -1, -1, -1,2212, -1, -1,2213,2214, -1,2215, -1,2216, -1, -1,
+ -1, -1, -1, -1,2217,2218, -1, -1,2219, -1, -1, -1,2220, -1, -1, -1,
+ -1, -1, -1, -1,2221,2222, -1,2223,2224,2225, -1, -1, -1, -1, -1, -1,
+2226, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1,2227, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,2228,2229, -1, -1,2230, -1, -1, -1,
+2231, -1,2232, -1, -1, -1, -1, -1,2233,2234, -1,2235, -1,2236, -1, -1,
+ -1, -1, -1, -1,2237,2238, -1, -1,2239, -1, -1, -1,2240, -1, -1, -1,
+ -1, -1, -1, -1,2241,2242, -1,2243, -1,2244, -1, -1, -1, -1, -1, -1,
+2245,2246, -1, -1,2247, -1, -1, -1,2248, -1, -1, -1, -1, -1, -1, -1,
+2249,2250, -1,2251,2252,2253, -1, -1, -1, -1, -1, -1,2254, -1, -1, -1,
+2255, -1, -1, -1,2256, -1, -1, -1, -1, -1, -1, -1, -1,2257, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1,2258,2259, -1, -1,2260, -1, -1, -1,
+2261, -1, -1, -1, -1,2262, -1, -1,2263,2264, -1,2265, -1,2266, -1, -1,
+ -1,2267, -1, -1,2268,2269, -1, -1,2270, -1, -1, -1,2271, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1,2272, -1,2273, -1, -1, -1, -1, -1, -1,
+2274,2275, -1, -1,2276, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1,2277, -1,2278, -1, -1, -1, -1, -1, -1,2279,2280, -1, -1,
+2281, -1, -1, -1,2282, -1, -1, -1, -1, -1, -1, -1, -1,2283, -1,2284,
+ -1,2285, -1, -1, -1, -1, -1, -1,2286, -1, -1, -1,2287, -1, -1, -1,
+2288, -1, -1, -1, -1, -1, -1, -1, -1,2289, -1,2290, -1, -1, -1, -1,
+ -1, -1, -1, -1,2291,2292, -1, -1,2293, -1, -1, -1,2294, -1, -1, -1,
+ -1,2295, -1, -1,2296, -1, -1,2297, -1,2298, -1, -1, -1, -1, -1, -1,
+2299, -1, -1, -1,2300, -1, -1, -1,2301, -1, -1, -1, -1, -1, -1, -1,
+2302, -1, -1, -1, -1,2303, -1, -1, -1, -1, -1, -1,2304,2305, -1, -1,
+2306, -1, -1, -1,2307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1,2308, -1, -1, -1, -1, -1, -1,2309,2310, -1, -1,2311, -1, -1, -1,
+2312, -1, -1, -1, -1, -1, -1, -1,2313,2314, -1,2315, -1,2316, -1, -1,
+ -1, -1, -1, -1,2317,2318, -1, -1,2319, -1, -1, -1,2320, -1, -1, -1,
+ -1, -1, -1, -1,2321, -1, -1,2322, -1,2323, -1, -1, -1, -1, -1, -1,
+2324,2325, -1, -1,2326, -1,2327,2328,2329,2330, -1, -1, -1, -1, -1, -1,
+2331,2332, -1,2333, -1,2334, -1, -1, -1,2335, -1, -1,2336, -1, -1, -1,
+2337, -1, -1, -1,2338, -1, -1, -1, -1, -1, -1, -1,2339,2340, -1, -1,
+ -1,2341, -1, -1, -1, -1, -1, -1,2342,2343, -1, -1,2344, -1, -1, -1,
+2345, -1, -1, -1, -1, -1, -1, -1,2346,2347, -1,2348, -1,2349, -1, -1,
+ -1, -1, -1, -1
+};
+
diff --git a/src/nsCodingStateMachine.h b/src/nsCodingStateMachine.h
index dc5b7c2..62ce744 100644
--- a/src/nsCodingStateMachine.h
+++ b/src/nsCodingStateMachine.h
@@ -91,6 +91,7 @@ extern const SMModel UTF8SMModel;
extern const SMModel Big5SMModel;
extern const SMModel EUCJPSMModel;
extern const SMModel EUCKRSMModel;
+extern const SMModel JohabSMModel;
extern const SMModel EUCTWSMModel;
extern const SMModel GB18030SMModel;
extern const SMModel SJISSMModel;
diff --git a/src/nsJohabProber.cpp b/src/nsJohabProber.cpp
new file mode 100644
index 0000000..f4cca6a
--- /dev/null
+++ b/src/nsJohabProber.cpp
@@ -0,0 +1,91 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "nsJohabProber.h"
+
+void nsJohabProber::Reset(void)
+{
+ mCodingSM->Reset();
+ mState = eDetecting;
+ mDistributionAnalyser.Reset(mIsPreferredLanguage);
+ //mContextAnalyser.Reset();
+}
+
+nsProbingState nsJohabProber::HandleData(const char* aBuf, PRUint32 aLen)
+{
+ nsSMState codingState;
+
+ for (PRUint32 i = 0; i < aLen; i++)
+ {
+ codingState = mCodingSM->NextState(aBuf[i]);
+ if (codingState == eItsMe)
+ {
+ mState = eFoundIt;
+ break;
+ }
+ if (codingState == eStart)
+ {
+ PRUint32 charLen = mCodingSM->GetCurrentCharLen();
+
+ if (i == 0)
+ {
+ mLastChar[1] = aBuf[0];
+ mDistributionAnalyser.HandleOneChar(mLastChar, charLen);
+ }
+ else
+ mDistributionAnalyser.HandleOneChar(aBuf+i-1, charLen);
+ }
+ }
+
+ mLastChar[0] = aBuf[aLen-1];
+
+ if (mState == eDetecting)
+ if (mDistributionAnalyser.GotEnoughData() && GetConfidence() > SHORTCUT_THRESHOLD)
+ mState = eFoundIt;
+// else
+// mDistributionAnalyser.HandleData(aBuf, aLen);
+
+ return mState;
+}
+
+float nsJohabProber::GetConfidence(void)
+{
+ float distribCf = mDistributionAnalyser.GetConfidence();
+
+ return (float)distribCf;
+}
+
diff --git a/src/nsJohabProber.h b/src/nsJohabProber.h
new file mode 100644
index 0000000..be94a13
--- /dev/null
+++ b/src/nsJohabProber.h
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef nsJohabProber_h__
+#define nsJohabProber_h__
+
+#include "nsCharSetProber.h"
+#include "nsCodingStateMachine.h"
+#include "CharDistribution.h"
+
+class nsJohabProber: public nsCharSetProber {
+public:
+ nsJohabProber(PRBool aIsPreferredLanguage)
+ :mIsPreferredLanguage(aIsPreferredLanguage)
+ {mCodingSM = new nsCodingStateMachine(&JohabSMModel);
+ Reset();
+ }
+ virtual ~nsJohabProber(void){delete mCodingSM;}
+ nsProbingState HandleData(const char* aBuf, PRUint32 aLen);
+ const char* GetCharSetName() {return "Johab";}
+ nsProbingState GetState(void) {return mState;}
+ void Reset(void);
+ float GetConfidence(void);
+ void SetOpion() {}
+
+protected:
+ void GetDistribution(PRUint32 aCharLen, const char* aStr);
+
+ nsCodingStateMachine* mCodingSM;
+ nsProbingState mState;
+
+ JohabDistributionAnalysis mDistributionAnalyser;
+ char mLastChar[2];
+ PRBool mIsPreferredLanguage;
+
+};
+
+
+#endif /* nsEUCKRProber_h__ */
+
diff --git a/src/nsMBCSGroupProber.cpp b/src/nsMBCSGroupProber.cpp
index 0e51306..859b179 100644
--- a/src/nsMBCSGroupProber.cpp
+++ b/src/nsMBCSGroupProber.cpp
@@ -51,6 +51,7 @@ const char *ProberName[] =
"EUC-KR",
"Big5",
"EUC-TW",
+ "Johab"
};
#endif
@@ -73,8 +74,10 @@ nsMBCSGroupProber::nsMBCSGroupProber(PRUint32 aLanguageFilter)
}
if (aLanguageFilter & NS_FILTER_CHINESE_SIMPLIFIED)
mProbers[3] = new nsGB18030Prober(aLanguageFilter == NS_FILTER_CHINESE_SIMPLIFIED);
- if (aLanguageFilter & NS_FILTER_KOREAN)
+ if (aLanguageFilter & NS_FILTER_KOREAN) {
mProbers[4] = new nsEUCKRProber(aLanguageFilter == NS_FILTER_KOREAN);
+ mProbers[7] = new nsJohabProber(aLanguageFilter == NS_FILTER_KOREAN);
+ }
if (aLanguageFilter & NS_FILTER_CHINESE_TRADITIONAL)
{
mProbers[5] = new nsBig5Prober(aLanguageFilter == NS_FILTER_CHINESE_TRADITIONAL);
diff --git a/src/nsMBCSGroupProber.h b/src/nsMBCSGroupProber.h
index bb06a6c..5e65f17 100644
--- a/src/nsMBCSGroupProber.h
+++ b/src/nsMBCSGroupProber.h
@@ -44,10 +44,11 @@
#include "nsEUCJPProber.h"
#include "nsGB2312Prober.h"
#include "nsEUCKRProber.h"
+#include "nsJohabProber.h"
#include "nsBig5Prober.h"
#include "nsEUCTWProber.h"
-#define NUM_OF_PROBERS 7
+#define NUM_OF_PROBERS 8
#define NUM_OF_LANGUAGES 27
class nsMBCSGroupProber: public nsCharSetProber {
diff --git a/src/nsMBCSSM.cpp b/src/nsMBCSSM.cpp
index 5070096..1b525c7 100644
--- a/src/nsMBCSSM.cpp
+++ b/src/nsMBCSSM.cpp
@@ -204,6 +204,61 @@ const SMModel EUCKRSMModel = {
"EUC-KR",
};
+static const PRUint32 Johab_cls[256 / 8] = {
+PCK4BITS(4,4,4,4,4,4,4,4), // 00 - 07
+PCK4BITS(4,4,4,4,4,4,0,0), // 08 - 0f
+PCK4BITS(4,4,4,4,4,4,4,4), // 10 - 17
+PCK4BITS(4,4,4,0,4,4,4,4), // 18 - 1f
+PCK4BITS(4,4,4,4,4,4,4,4), // 20 - 27
+PCK4BITS(4,4,4,4,4,4,4,4), // 28 - 2f
+PCK4BITS(4,3,3,3,3,3,3,3), // 30 - 37
+PCK4BITS(3,3,3,3,3,3,3,3), // 38 - 3f
+PCK4BITS(3,1,1,1,1,1,1,1), // 40 - 47
+PCK4BITS(1,1,1,1,1,1,1,1), // 48 - 4f
+PCK4BITS(1,1,1,1,1,1,1,1), // 50 - 57
+PCK4BITS(1,1,1,1,1,1,1,1), // 58 - 5f
+PCK4BITS(1,1,1,1,1,1,1,1), // 60 - 67
+PCK4BITS(1,1,1,1,1,1,1,1), // 68 - 6f
+PCK4BITS(1,1,1,1,1,1,1,1), // 70 - 77
+PCK4BITS(1,1,1,1,1,1,1,2), // 78 - 7f
+PCK4BITS(6,6,6,6,8,8,8,8), // 80 - 87
+PCK4BITS(8,8,8,8,8,8,8,8), // 88 - 8f
+PCK4BITS(8,7,7,7,7,7,7,7), // 90 - 97
+PCK4BITS(7,7,7,7,7,7,7,7), // 98 - 9f
+PCK4BITS(7,7,7,7,7,7,7,7), // a0 - a7
+PCK4BITS(7,7,7,7,7,7,7,7), // a8 - af
+PCK4BITS(7,7,7,7,7,7,7,7), // b0 - b7
+PCK4BITS(7,7,7,7,7,7,7,7), // b8 - bf
+PCK4BITS(7,7,7,7,7,7,7,7), // c0 - c7
+PCK4BITS(7,7,7,7,7,7,7,7), // c8 - cf
+PCK4BITS(7,7,7,7,5,5,5,5), // d0 - d7
+PCK4BITS(5,9,9,9,9,9,9,5), // d8 - df
+PCK4BITS(9,9,9,9,9,9,9,9), // e0 - e7
+PCK4BITS(9,9,9,9,9,9,9,9), // e8 - ef
+PCK4BITS(9,9,9,9,9,9,9,9), // f0 - f7
+PCK4BITS(9,9,5,5,5,5,5,0) // f8 - ff
+};
+
+static const PRUint32 Johab_st[7] = {
+PCK4BITS(eError,eStart,eStart,eStart,eStart,eError,eError, 3),//00-07
+PCK4BITS( 3, 4,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe),//08-0f
+PCK4BITS(eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eError,eError),//10-17
+PCK4BITS(eError,eError,eError,eError,eError,eError,eError,eStart),//18-1f
+PCK4BITS(eStart,eError,eError,eStart,eStart,eStart,eStart,eStart),//20-27
+PCK4BITS(eError,eStart,eError,eStart,eError,eStart,eError,eStart),//28-2f
+PCK4BITS(eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart) //30-37
+};
+
+static const PRUint32 JohabCharLenTable[] = {0, 1, 1, 1, 1, 0, 0, 2, 2, 2};
+
+const SMModel JohabSMModel = {
+ {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, Johab_cls },
+ 10,
+ {eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, Johab_st },
+ JohabCharLenTable,
+ "Johab",
+};
+
static const PRUint32 EUCTW_cls [ 256 / 8 ] = {
//PCK4BITS(0,2,2,2,2,2,2,2), // 00 - 07
PCK4BITS(2,2,2,2,2,2,2,2), // 00 - 07