Use perfect hash for NFC and NFKC Unicode Normalization quick check
authorMichael Paquier <michael@paquier.xyz>
Sun, 11 Oct 2020 10:09:01 +0000 (19:09 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sun, 11 Oct 2020 10:09:01 +0000 (19:09 +0900)
This makes the normalization quick check about 30% faster for NFC and
50% faster for NFKC than the binary search used previously.  The hash
lookup reuses the existing array of bit fields used for the binary
search to get the quick check property and is generated as part of "make
update-unicode" in src/common/unicode/.

Author: John Naylor
Reviewed-by: Mark Dilger, Michael Paquier
Discussion: https://postgr.es/m/CACPNZCt4fbJ0_bGrN5QPt34N4whv=mszM0LMVQdoa2rC9UMRXA@mail.gmail.com

src/common/unicode/generate-unicode_normprops_table.pl
src/common/unicode_norm.c
src/include/common/unicode_normprops_table.h
src/tools/pgindent/exclude_file_patterns
src/tools/pgindent/typedefs.list

index e8e5097c094b09cfb32458db278ad3c2ae9576b2..d652b95965dc75891b7e1ff11d2a7511280bf3b5 100644 (file)
@@ -9,6 +9,10 @@
 use strict;
 use warnings;
 
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
 my %data;
 
 print
@@ -18,13 +22,25 @@ print <<EOS;
 #include "common/unicode_norm.h"
 
 /*
- * We use a bit field here to save space.
+ * Normalization quick check entry for codepoint.  We use a bit field
+ * here to save space.
  */
 typedef struct
 {
        unsigned int codepoint:21;
        signed int      quickcheck:4;   /* really UnicodeNormalizationQC */
-}                      pg_unicode_normprops;
+} pg_unicode_normprops;
+
+/* Typedef for hash function on quick check table */
+typedef int (*qc_hash_func) (const void *key);
+
+/* Information for quick check lookup with perfect hash function */
+typedef struct
+{
+       const pg_unicode_normprops *normprops;
+       qc_hash_func    hash;
+       int             num_normprops;
+} pg_unicode_norminfo;
 EOS
 
 foreach my $line (<ARGV>)
@@ -66,6 +82,7 @@ foreach my $prop (sort keys %data)
          "static const pg_unicode_normprops UnicodeNormProps_${prop}[] = {\n";
 
        my %subdata = %{ $data{$prop} };
+       my @cp_packed;
        foreach my $cp (sort { $a <=> $b } keys %subdata)
        {
                my $qc;
@@ -82,7 +99,27 @@ foreach my $prop (sort keys %data)
                        die;
                }
                printf "\t{0x%04X, %s},\n", $cp, $qc;
+
+               # Save the bytes as a string in network order.
+               push @cp_packed, pack('N', $cp);
        }
 
        print "};\n";
+
+       # Emit the definition of the perfect hash function.
+       my $funcname = $prop . '_hash_func';
+       my $f        = PerfectHash::generate_hash_function(\@cp_packed, $funcname,
+               fixed_key_length => 4);
+       printf "\n/* Perfect hash function for %s */", $prop;
+       print "\nstatic $f\n";
+
+       # Emit the structure that wraps the hash lookup information into
+       # one variable.
+       printf "/* Hash lookup information for %s */", $prop;
+       printf "\nstatic const pg_unicode_norminfo ";
+       printf "UnicodeNormInfo_%s = {\n", $prop;
+       printf "\tUnicodeNormProps_%s,\n", $prop;
+       printf "\t%s,\n",                  $funcname;
+       printf "\t%d\n",                   scalar @cp_packed;
+       printf "};\n";
 }
index ab5ce5934569bda20a004bad4afc441a3b9f0710..626645ac87058b70c06bdca2a661bab6944cdaf0 100644 (file)
@@ -465,15 +465,32 @@ get_canonical_class(pg_wchar ch)
                return entry->comb_class;
 }
 
-static int
-qc_compare(const void *p1, const void *p2)
+static const pg_unicode_normprops *
+qc_hash_lookup(pg_wchar ch, const pg_unicode_norminfo *norminfo)
 {
-       uint32          v1,
-                               v2;
+       int                     h;
+       uint32          hashkey;
 
-       v1 = ((const pg_unicode_normprops *) p1)->codepoint;
-       v2 = ((const pg_unicode_normprops *) p2)->codepoint;
-       return (v1 - v2);
+       /*
+        * Compute the hash function. The hash key is the codepoint with the bytes
+        * in network order.
+        */
+       hashkey = htonl(ch);
+       h = norminfo->hash(&hashkey);
+
+       /* An out-of-range result implies no match */
+       if (h < 0 || h >= norminfo->num_normprops)
+               return NULL;
+
+       /*
+        * Since it's a perfect hash, we need only match to the specific codepoint
+        * it identifies.
+        */
+       if (ch != norminfo->normprops[h].codepoint)
+               return NULL;
+
+       /* Success! */
+       return &norminfo->normprops[h];
 }
 
 /*
@@ -482,26 +499,15 @@ qc_compare(const void *p1, const void *p2)
 static UnicodeNormalizationQC
 qc_is_allowed(UnicodeNormalizationForm form, pg_wchar ch)
 {
-       pg_unicode_normprops key;
-       pg_unicode_normprops *found = NULL;
-
-       key.codepoint = ch;
+       const pg_unicode_normprops *found = NULL;
 
        switch (form)
        {
                case UNICODE_NFC:
-                       found = bsearch(&key,
-                                                       UnicodeNormProps_NFC_QC,
-                                                       lengthof(UnicodeNormProps_NFC_QC),
-                                                       sizeof(pg_unicode_normprops),
-                                                       qc_compare);
+                       found = qc_hash_lookup(ch, &UnicodeNormInfo_NFC_QC);
                        break;
                case UNICODE_NFKC:
-                       found = bsearch(&key,
-                                                       UnicodeNormProps_NFKC_QC,
-                                                       lengthof(UnicodeNormProps_NFKC_QC),
-                                                       sizeof(pg_unicode_normprops),
-                                                       qc_compare);
+                       found = qc_hash_lookup(ch, &UnicodeNormInfo_NFKC_QC);
                        break;
                default:
                        Assert(false);
index 93a2e55b75837672650f0b42de8a8e5e9acf8744..2ae13d847f2af993e1e980b76e0c7d7491675ace 100644 (file)
@@ -3,7 +3,8 @@
 #include "common/unicode_norm.h"
 
 /*
- * We use a bit field here to save space.
+ * Normalization quick check entry for codepoint.  We use a bit field
+ * here to save space.
  */
 typedef struct
 {
@@ -11,6 +12,17 @@ typedef struct
        signed int      quickcheck:4;   /* really UnicodeNormalizationQC */
 } pg_unicode_normprops;
 
+/* Typedef for hash function on quick check table */
+typedef int (*qc_hash_func) (const void *key);
+
+/* Information for quick check lookup with perfect hash function */
+typedef struct
+{
+       const pg_unicode_normprops *normprops;
+       qc_hash_func    hash;
+       int             num_normprops;
+} pg_unicode_norminfo;
+
 static const pg_unicode_normprops UnicodeNormProps_NFC_QC[] = {
        {0x0300, UNICODE_NORM_QC_MAYBE},
        {0x0301, UNICODE_NORM_QC_MAYBE},
@@ -1245,6 +1257,343 @@ static const pg_unicode_normprops UnicodeNormProps_NFC_QC[] = {
        {0x2FA1D, UNICODE_NORM_QC_NO},
 };
 
+/* Perfect hash function for NFC_QC */
+static int
+NFC_QC_hash_func(const void *key)
+{
+       static const int16 h[2463] = {
+                    0,  -2717,      0,    221,   1293,    223,   1295,    225,
+                  226,    241,      0,    229,    230,    231,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                 -386,      0,      0,      0,      0,      0,      0,      0,
+                 -163,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                 -246,   -175,   1260,      0,      0,      0,   -174,   -173,
+                    0,   -172,      0,      0,      0,      0,      0,      0,
+                 1049,      0,    300,    301,   1071,      0,   1071,      0,
+                 1071,   1071,   1057,      0,      0,      0,      0,   1061,
+                    0,  -1053,   1664,      0,   2956,      0,      0,    -13,
+                    0,      0,      0,      0,   2156,      0,      0,      0,
+                    0,      0,      0,      0,     71,      0,   1082,      0,
+                 1083,   1083,      0,   1084,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,    359,    360,    361,
+                -1091,    363,   -762,   -130,   -129,   -128,   -127,   -126,
+                  137,   -124,   -708,   -707,   -706,   -120,   -185,   -705,
+                 -117,   -184,  -1307,   -114,   -113,   -112,   -111,      0,
+                  386,    387,    388,    389,    -90,    391,    171,    172,
+                  394,    -94,   -183,    397,    398,    399,    -98,   -225,
+                  402,  -1019,   -636,  -1019,   -225,    407,    408,    409,
+                  410,    411,    674,    413,   -171,   -170,   -169,    417,
+                  352,   -168,    420,    353,   -770,    423,    424,    425,
+                  426,    427,    428,  32767,    239,    239,    239,    239,
+                  239,    239,    239,    239,    239,    239,    239,    239,
+                  239,    239,  32767,  32767,    237,  32767,    236,  32767,
+                32767,    234,    234,    234,    234,    617,    234,    234,
+                  234,  -2483,    234,  -1430,   1526,  -1430,   1527,     47,
+                   48,    471,    230,  32767,  32767,  32767,    227,    227,
+                  227,    227,    227,    227,    227,    227,    227,    227,
+                  227,    227,    227,    227,    227,    227,    227,    227,
+                 -159,    227,    227,    227,    227,    227,    227,    227,
+                   64,    227,    227,    227,    227,    227,    227,    227,
+                  227,    227,    227,    227,    227,    227,    227,    227,
+                  227,    227,    227,    227,    227,    227,    227,    227,
+                  -19,     52,   1487,    227,    227,    227,     53,     54,
+                  227,     55,    227,    227,    227,    227,    227,    227,
+                 1276,    227,   -989,  32767,   1296,    225,   1296,    225,
+                 1296,   1296,   1282,    225,    225,    225,    225,   1286,
+                  225,   -828,   1889,    225,   3181,    225,    225,    212,
+                  225,    225,    225,    225,   2381,    225,    225,    225,
+                  225,    225,    225,    225,    296,    225,   1307,    225,
+                 1308,   1308,    225,   1309,    225,    225,    225,    225,
+                  225,    225,    225,    225,    225,    225,    225,    225,
+                  225,    225,    225,    225,    225,    584,    585,    586,
+                 -866,    588,   -537,     95,     96,     97,     98,     99,
+                  362,    101,   -483,   -482,   -481,    105,     40,   -480,
+                  108,     41,  -1082,    111,    112,    113,    114,    225,
+                  611,    612,    613,    614,    135,    616,    396,    397,
+                  619,    131,     42,    622,    623,    624,    127,      0,
+                  627,   -794,   -411,   -794,      0,    632,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 -272,  32767,  32767,  32767,      0,  32767,  32767,  32767,
+                32767,  32767,   -166,   -165,  32767,  32767,  32767,  32767,
+                 -164,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    397,  32767,    396,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,    386,
+                    0,    386,    386,    386,    386,    386,    386,    386,
+                  223,    386,    386,    386,  32767,    385,    385,    385,
+                  385,    385,  32767,    384,  32767,    383,    383,  32767,
+                  382,    382,  32767,    381,    381,    381,    381,    381,
+                  135,    206,   1641,    381,  32767,  32767,  32767,  32767,
+                32767,  32767,   -160,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   1148,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+                32767,  32767,  32767,      0,      0,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,   -257,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,   -910,   -910,  32767,  32767,
+                    0,  32767,      0,  32767,      0,  32767,      0,  32767,
+                  147,  32767,      0,  32767,      0,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,      0,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,    143,  32767,    144,  32767,    145,
+                32767,    146,  32767,      0,  32767,    148,  32767,    149,
+                32767,  32767,  32767,   -160,  32767,  32767,  32767,  32767,
+                32767,  32767,     15,  32767,  32767,      0,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                  145,  32767,    144,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,      0,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,      0,   -148,  32767,  32767,  32767,  32767,
+                32767,  32767,   2009,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,      0,  32767,  32767,    135,   -918,  32767,
+                  151,  32767,  32767,      0,      1,      2,      3,      4,
+                  133,      5,      6,      7,      8,      9,     10,     11,
+                32767,  32767,  -1248,  32767,     13,    154,    188,    188,
+                32767,  32767,  32767,  32767,  32767,    155,     16,  32767,
+                32767,  32767,  32767,  32767,  32767,  -1853,  -1054,     18,
+                -1052,  -1051,  -1036,     22,  32767,    157,  32767,     28,
+                   23,   1077,    673,     25,  -2930,      0,  32767,  32767,
+                32767,  32767,  32767,     27,  32767,    155,  32767,    154,
+                32767,  32767,    -62,     28,    -42,     30,  -1051,     32,
+                -1050,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,     34,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    129,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    672,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,      0,  32767,
+                32767,  32767,  32767,  32767,   -156,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   -155,  32767,  32767,
+                32767,      0,      0,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                   73,  32767,  32767,  32767,  32767,     74,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,    675,
+                32767,  32767,  32767,  32767,  32767,     75,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    165,  32767,  32767,  32767,    166,    167,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    170,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    689,    690,    691,    692,    693,    694,    695,
+                  696,    697,    698,    699,    700,    701,    702,    703,
+                  704,    705,    706,    707,    708,    709,    710,    711,
+                  712,    713,    714,    715,    716,    717,    718,    719,
+                  720,    721,    722,   -304,   -303,   -302,   -301,   -300,
+                 -299,   -298,   -297,    930,   -295,   -294,   -293,   -292,
+                 -291,   -290,   -289,   -288,   -287,   -286,   -285,   -284,
+                 -283,   -282,   -281,   -280,   -279,   -278,   -277,   -276,
+                 -275,    753,    754,    755,    646,    757,   -712,  -1765,
+                  952,   -712,   2244,   -712,   2245,    765,    766,    767,
+                  768,    125,    770,    771,    772,    773,    774,    775,
+                  603,    777,    778,    779,    780,    781,    782,    783,
+                  784,   2011,    786,    787,    788,    789,    790,    791,
+                  792,    793,    794,    795,    796,    797,    798,    799,
+                  800,    801,    802,    803,    804,    805,    806,    603,
+                  603,    809,    603,    811,    603,    603,    814,    815,
+                  816,    817,    435,    819,    820,    821,   3539,    823,
+                  603,   -468,    603,   -468,    603,    603,    589,    831,
+                  603,    603,    603,    835,    836,    837,    838,    839,
+                  840,    841,    842,    843,    844,    845,    846,    847,
+                  848,    849,    850,    851,    852,   1239,    854,    855,
+                  856,    857,    858,    859,    860,   1024,    862,    863,
+                  864,    865,    866,    867,    868,    869,    870,    871,
+                  872,    873,    874,    875,    876,    877,    878,    879,
+                  880,    881,    882,    883,    884,   1131,   1061,   -373,
+                  888,    889,    890,   1065,   1065,    893,   1066,    895,
+                  896,    897,    898,    899,    900,   -148,    902,    603,
+                  603,   -166,    906,   -164,    908,   -162,   -161,   -146,
+                  912,    913,    914,    915,   -145,    917,   1971,   -745,
+                  920,  -2035,    922,    923,    937,    925,    926,    927,
+                  928,  -1227,    930,    931,    932,    933,    934,    935,
+                  936,    866,    938,   -143,    940,   -142,   -141,    943,
+                 -140,  32767,    945,    946,    947,    948,    949,    950,
+                  951,    952,    953,    954,    955,    956,    957,    958,
+                  959,    960,    961,    -65,    -64,    -63,    -62,    -61,
+                  -60,    -59,    -58,   1169,    -56,    -55,    -54,    -53,
+                  -52,    -51,    -50,    -49,    -48,    -47,    -46,    -45,
+                  -44,    -43,    -42,    -41,    -40,    -39,    -38,    -37,
+                  -36,    992,    993,    994,    885,    996,   -473,  -1526,
+                 1191,   -473,   2483,   -473,   2484,   1004,   1005,   1006,
+                 1007,    364,   1009,   1010,   1011,   1012,   1013,   1014,
+                  842,   1016,   1017,   1018,   1019,   1020,   1021,   1022,
+                 1023,   2250,   1025,   1026,   1027,   1028,   1029,   1030,
+                 1031,   1032,   1033,   1034,   1035,   1036,   1037,   1038,
+                 1039,   1040,   1041,   1042,   1043,   1044,   1045,    842,
+                  842,   1048,    842,   1050,    842,    842,   1053,   1054,
+                 1055,   1056,    674,   1058,   1059,   1060,   3778,   1062,
+                  842,   -229,    842,   -229,    842,    842,    828,   1070,
+                  842,    842,    842,   1074,   1075,   1076,   1077,   1078,
+                 1079,   1080,   1081,   1082,   1083,   1084,   1085,   1086,
+                 1087,   1088,   1089,   1090,   1091,   1478,   1093,   1094,
+                 1095,   1096,   1097,   1098,   1099,   1263,   1101,   1102,
+                 1103,   1104,   1105,   1106,   1107,   1108,   1109,   1110,
+                 1111,   1112,   1113,   1114,   1115,   1116,   1117,   1118,
+                 1119,   1120,   1121,   1122,   1123,   1370,   1300,   -134,
+                 1127,   1128,   1129,   1304,   1304,   1132,   1305,   1134,
+                 1135,   1136,   1137,   1138,   1139,     91,   1141,    842,
+                  842,     73,   1145,     75,   1147,     77,     78,     93,
+                 1151,   1152,   1153,   1154,     94,   1156,   2210,   -506,
+                 1159,  -1796,   1161,   1162,   1176,   1164,   1165,   1166,
+                 1167,   -988,   1169,   1170,   1171,   1172,   1173,   1174,
+                 1175,   1105,   1177,     96,   1179,     97,     98,   1182,
+                   99,   1184,   1185,   1186,   1187,   1188,   1189,   1190,
+                 1191,   1192,   1193,   1194,   1195,   1196,   1197,   1198,
+                 1199,   1200,      0,    174,    175,    176,    177,    178,
+                  179,    180,    181,   1408,    183,    184,    185,    186,
+                  187,    188,    189,    190,    191,    192,    193,    194,
+                  195,    196,    197,    198,    199,    200,    201,    202,
+                  203,      0,      0,    206,      0,    208,      0,      0,
+                  211,    212,    213,    214,   -168,    216,    217,    218,
+                 2936,    220,      0,  -1071,      0,  -1071,      0,      0,
+                  -14,    228,      0,      0,      0,    232,    233,    234,
+                  235,    236,    237,    238,    239,    240,    241,    242,
+                  243,    244,    245,    246,    247,    248,    249,    636,
+                  251,    252,    253,    254,    255,    256,    257,    421,
+                  259,    260,    261,    262,    263,    264,    265,    266,
+                  267,    268,    269,    270,    271,    272,    273,    274,
+                  275,    276,    277,    278,    279,    280,    281,    528,
+                  458,   -976,    285,    286,    287,    462,    462,    290,
+                  463,    292,    293,    294,    295,    296,    297,   -751,
+                  299,      0,      0,   -769,    303,   -767,    305,   -765,
+                 -764,   -749,    309,    310,    311,    312,   -748,    314,
+                 1368,  -1348,    317,  -2638,    319,    320,    334,    322,
+                  323,    324,    325,  -1830,    327,    328,    329,    330,
+                  331,    332,    333,    263,    335,   -746,    337,   -745,
+                 -744,    340,   -743,    342,    343,    344,    345,    346,
+                  347,    348,    349,    350,    351,    352,    353,    354,
+                  355,    356,    357,    358,      0,      0,      0,   1453,
+                    0,   1126,    495,    495,    495,    495,    495,    233,
+                  495,   1080,   1080,   1080,    495,    561,   1082,    495,
+                  563,   1687,    495,    495,    495,    495,    385,      0,
+                    0,      0,      0,    480,      0,    221,    221,      0,
+                  489,    579,      0,      0,      0,    498,    626,      0,
+                 1422,   1040,   1424,    631,      0,      0,      0,      0,
+                    0,   -262,      0,    585,    585,    585,      0,     66,
+                  587,      0,     68,   1192,      0,      0,      0,      0,
+                    0,      0,  32767,  32767,  32767,  32767,    669,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,    670,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    142,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    115,    116,    117,    118,    119,    120,
+                  121,    122,    123,    124,    125,    126,    127,    128,
+                  129,    130,    131,    132,    133,    134,    135,    136,
+                  137,    138,    139,    140,    141,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,   1027,   1027,   1027,
+                 1027,   1027,   1027,   1027,   1027,   -199,   1027,   1027,
+                 1027,   1027,   1027,   1027,   1027,   1027,   1027,   1027,
+                 1027,   1027,   1027,   1027,   1027,   1027,   1027,   1027,
+                 1027,   1027,   1027,      0,      0,      0,    110,      0,
+                 1470,   2524,   -192,   1473,  -1482,   1475,  -1481,      0,
+                    0,      0,      0,    644,      0,      0,      0,      0,
+                    0,      0,    173,      0,      0,      0,      0,      0,
+                    0,      0,      0,  -1226,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,    204,    205,      0,    207,      0,    209,    210,
+                    0,      0,      0,      0,    383,      0,      0,
+       };
+
+       const unsigned char *k = (const unsigned char *) key;
+       size_t          keylen = 4;
+       uint32          a = 0;
+       uint32          b = 0;
+
+       while (keylen--)
+       {
+               unsigned char c = *k++;
+
+               a = a * 257 + c;
+               b = b * 17 + c;
+       }
+       return h[a % 2463] + h[b % 2463];
+}
+
+/* Hash lookup information for NFC_QC */
+static const pg_unicode_norminfo UnicodeNormInfo_NFC_QC = {
+       UnicodeNormProps_NFC_QC,
+       NFC_QC_hash_func,
+       1231
+};
+
 static const pg_unicode_normprops UnicodeNormProps_NFKC_QC[] = {
        {0x00A0, UNICODE_NORM_QC_NO},
        {0x00A8, UNICODE_NORM_QC_NO},
@@ -6165,3 +6514,1262 @@ static const pg_unicode_normprops UnicodeNormProps_NFKC_QC[] = {
        {0x2FA1C, UNICODE_NORM_QC_NO},
        {0x2FA1D, UNICODE_NORM_QC_NO},
 };
+
+/* Perfect hash function for NFKC_QC */
+static int
+NFKC_QC_hash_func(const void *key)
+{
+       static const int16 h[9837] = {
+                -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+                -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+                -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,  -2472,
+                -2472,  -2472,  -2472,  -2472,  -2472,  32767,  32767,  32767,
+                -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  -2475,
+                -2475,  -2475,  -2475,  -2475,  -2475,  -2475,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    865,    865,    865,    865,    865,    865,    865,
+                  865,    865,    865,    865,  -2255,  32767,  -5207,  32767,
+                -5207,    860,    860,    860,    860,    860,    860,    860,
+                  860,    860,   4250,    861,    861,    861,   3339,   3339,
+                 3339,   3339,   3339,   3339,   3339,   3339,   3339,   3339,
+                 3339,   3339,   3339,   3339,   3339,   3339,   3339,   3339,
+                32767,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+                 3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+                 3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+                 3338,   3338,   3338,   3338,   3338,   3338,   3338,   3338,
+                 3338,      9,     10,  32767,     11,     12,      0,  32767,
+                    0,   2913,   2914,   2915,   2916,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,   2917,  32767,   2918,   -100,
+                 2919,   2920,   2921,    840,    840,    840,   2922,      0,
+                    0,      0,      0,      0,   2206,      0,   2923,      0,
+                 2924,   2925,   2926,      0,      0,      0,  -2590,      0,
+                    0,      0,      0,      0,      0,      0,   2934,      0,
+                 2474,   2931,   2932,      0,      0,      0,      0,      0,
+                   14,    805,      0,      0,   2933,      0,   2934,      0,
+                 2935,   2936,      0,      0,      0,     16,     17,      0,
+                    0,      0,      0,      0,      0,      0,      0,     18,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,   -790,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,  -1675,      0,      0,     19,      0,  -1679,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,  -1694,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,     20,     21,     22,     23,     24,     25,
+                   26,     27,     28,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,     29,     30,     31,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    724,   2668,    724,   4350,  -2633,  -2633,
+                 2533,   2534,   2535,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,   2518,   2519,   2520,   1431,     45,     46,
+                32767,  32767,     47,     48,     49,     50,     51,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  -3011,     53,  -1125,  -3010,  -3010,
+                32767,  -3334,  -1123,  -3011,     60,     61,     62,     63,
+                32767,  32767,     64,  32767,     65,  32767,     66,     67,
+                32767,  32767,  32767,  32767,  32767,  32767,   2268,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,     69,     70,
+                   71,     72,     73,     74,  32767,  32767,  32767,  32767,
+                   75,     76,  32767,     77,    281,  32767,  32767,  32767,
+                32767,  32767,  32767,    811,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   1341,   1342,   1343,   1344,   1345,
+                 1346,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,     86,
+                32767,  32767,  32767,  32767,  32767,   4550,  32767,  32767,
+                32767,   1135,  32767,  32767,  32767,  32767,  32767,   1130,
+                 3016,  32767,   3017,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    677,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   2858,   2859,    651,   2861,   -438,
+                 2863,   2864,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  -5305,  -5305,  -5305,  32767,  -5306,
+                -5306,  32767,  32767,  32767,   2871,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,   3022,   3023,    680,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,   -272,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   4308,   4309,   4310,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   4311,   4312,   4313,
+                 4314,   4315,   4316,   4317,   4318,   4319,   4320,   4321,
+                 4322,   4323,   4324,   4325,   4326,   4307,   4307,   4307,
+                 4307,   4307,   4307,   4307,   4307,   4307,   4336,   4337,
+                 4338,   4339,   4340,   4341,   4342,   4343,   4344,   4345,
+                 4346,   4347,   4348,   4349,   4350,   4351,   4352,   4353,
+                 4354,  32767,  32767,  32767,  32767,   4355,   4356,   4357,
+                 4358,   4359,   4360,   4361,   4362,   4363,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   4364,   4365,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,   2202,      0,      0,      0,     59,      0,
+                    0,     35,      0,      0,      0,   3549,      0,      0,
+                    0,      0,      0,   3394,      0,      0,   3399,      0,
+                    0,      0,      0,      0,      0,      0,      0,   2012,
+                    0,      0,      0,      0,     87,   2022,      0,   7490,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                 2255,      0,   2256,   2256,   2256,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,  32767,      0,      0,
+                    0,      0,      0,      0,  -1759,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,   4767,      0,      0,   4772,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,  32767,   5977,      0,
+                  892,  32767,      0,  32767,  32767,      0,      0,  32767,
+                32767,   2344,   4834,   4835,   4836,  32767,      0,   4840,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,  32767,      0,  32767,      0,      0,      0,
+                    0,      0,      0,      0,  32767,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                32767,  32767,      0,  32767,      0,      0,      0,  32767,
+                32767,  32767,  32767,   3261,   3262,  32767,   3007,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    106,    107,    108,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,    109,    110,    111,    112,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,      0,      0,  -2344,
+                -2344,      0,  32767,      0,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  -1642,   1469,  -1641,   1469,  -1640,   1469,
+                 1469,   1457,   1469,   1469,   1469,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -3359,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4103,
+                -1478,      0,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,  -4254,  -2433,  -4254,  -4254,  -4254,  -3658,
+                -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,  -4254,
+                -4254,  -4254,      0,  -4253,  -4253,  -4253,  -4253,  -4253,
+                -4253,  -4253,  -4253,  -4253,   -678,   -677,   -676,   -675,
+                 -674,   -673,   -672,  -4253,    314,  -4253,  -4253,  -4253,
+                -4253,  -4253,  -4253,  -4253,  -4253,  -4253,  -4253,  -4253,
+                -4253,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,   1464,   1465,   1466,   1467,
+                 1468,   1469,      0,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+                    0,      0,      0,      0,  32767,  32767,  32767,  32767,
+                32767,      0,  32767,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,    827,    828,    829,  -2469,  -2469,   -260,      0,
+                    0,  32767,      0,  32767,      0,      0,  32767,      0,
+                    0,  32767,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                 3575,   3576,   3577,   3578,   3579,   3580,   3581,      0,
+                 4567,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,   2201,   4411,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,  -3338,      0,      0,      0,
+                    0,      0,      0,      0,  -3337,      0,  -3336,      0,
+                    0,      0,      0,  -3335,      0,      0,  -3334,  -3333,
+                -3332,  -3331,      0,      0,  -3330,      0,      0,  32767,
+                    0,      0,     13,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,   3073,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                -2556,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 3074,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,   2355,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,   -488,   -488,   -488,   -302,  -3067,  -3067,
+                -3067,  -3067,   -488,   -488,   -488,   -488,   2999,   -488,
+                 2999,   -488,   -488,   -488,  -3067,  -3067,  -3067,   -488,
+                 -488,  -3067,  -3067,  -3067,   -488,   -488,   -488,   2463,
+                 -488,   -488,   -488,   -301,   2465,   -488,   2466,   2467,
+                -3600,   -493,  -3599,   -488,  -3598,   -488,  -3597,   -488,
+                 -488,   -500,   -488,   -488,   -488,   -488,   -488,   2470,
+                 2471,   2472,   -488,   -488,   -254,   -488,   -488,   -488,
+                 -488,   -488,   -104,   -488,   -488,   -488,   -102,   -101,
+                 -100,    -99,    -98,    -97,    -96,    -95,    -94,    -93,
+                  -92,   -488,   -488,   -488,   -488,   -488,   -488,   -488,
+                 -488,   -488,  -2194,  -2194,  -2194,  -2194,  -2194,  -2194,
+                -2194,  -2194,  -2194,  -2194,   5211,   3269,   5213,   3269,
+                 6895,    -88,    -88,   5078,   5079,   5080,   1773,    -92,
+                  -92,   1773,   1773,   1773,   1773,   1773,   1773,   5072,
+                 5073,   2865,   5075,   1776,   5077,   5078,   1778,   1778,
+                 6942,   6943,   1778,   1778,   1778,   5086,   6952,   6953,
+                 5089,   5090,   5091,   5092,   5093,   5094,   5095,   5096,
+                 4007,   5098,   2333,   2334,   2335,   2336,   2337,  -3066,
+                -3066,  -3066,   2341,  -3066,  -3066,   2344,   2345,   2346,
+                 5114,    317,   2349,    848,    849,    850,   2353,    852,
+                  853,    854,    855,    856,    857,    858,    859,    860,
+                  861,    692,    692,    692,    692,    692,    692,    692,
+                  692,    692,    692,    692,    692,    692,    692,    692,
+                  692,    692,    692,    692,    692,    692,    692,    692,
+                  692,    692,    692,    692,    692,    692,    692,    692,
+                  692,    692,    692,    692,    692,    692,    692,    692,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,   3093,   3094,   3095,   3096,   3097,   3098,   3099,
+                 3100,   3101,   3102,    901,   3104,   3105,   3106,   3048,
+                 3108,   3109,   3075,   3111,   3112,   3113,   -435,   3115,
+                 3116,   3117,   3118,   3119,   -274,   3121,   3122,   -276,
+                 3124,   3125,   3126,   3127,   3128,   3129,   3130,   3131,
+                 1120,   3133,   3134,   3135,   3136,   3050,   1116,   3139,
+                -4350,   3141,   3142,   3143,   3144,   3145,   3146,   3147,
+                 3148,   3149,   3150,   3151,   3152,   3153,   3154,   3155,
+                 3156,    902,   3158,    903,    904,    905,   3162,   3163,
+                 3164,   3165,   3166,   3167,   3168,   3169,   3170,   3171,
+                 3172,   3173,   3174,   3175,   3176,   3177,  32767,   3178,
+                 3179,   3180,   3181,   3182,   3183,   4943,   3185,   3186,
+                 3187,   3188,   3189,   3190,   3191,   3192,   3193,   3194,
+                 3195,   3196,   3197,   3198,   3199,   3200,   3201,   3202,
+                 3203,   3204,   3205,   3206,   3207,   3208,   3209,   3210,
+                 3211,   3212,   3213,   3214,   3215,   3216,   3217,   3218,
+                 3219,   3220,   3221,   3222,   3223,  -1543,   3225,   3226,
+                -1545,   3228,   3229,   3230,   3231,   3232,   3233,   3234,
+                 3235,   3236,   3237,   3238,   3239,   3240,   3241,   3242,
+                 3243,   3244,   3245,   3246,   3247,   3248,  -1251,  -2728,
+                 3250,  32767,  32767,   3251,    906,    907,   3252,   3253,
+                32767,  32767,    910,  -1579,  -1579,  -1579,  32767,   3258,
+                -1581,   3260,   3261,   3262,   3263,   3264,   3265,   3266,
+                 3267,   3268,   3269,  32767,   3270,  32767,   3271,   3272,
+                 3273,   3274,   3275,   3276,   3277,  32767,   3278,   3279,
+                 3280,   3281,   3282,   3283,   3284,   3285,   3286,   3287,
+                 3288,   3289,   3290,   3291,   3292,   3293,   3294,   3295,
+                 3296,   3297,   3298,   3299,   3300,   3301,   3302,   3303,
+                 3304,   3305,   3306,   3307,   3308,   3309,   3310,   3311,
+                 3312,   3313,   3314,   3315,   3316,   3317,   3318,   3319,
+                 3320,   3321,   3322,   3323,   3324,   3325,   3326,   3327,
+                 3328,   3329,   3330,   3331,   3332,   3333,   3334,   3335,
+                 3336,  32767,   3337,   3338,   3339,   3340,   3341,   3342,
+                    0,   3343,   3344,   3345,   3346,  32767,  32767,   3347,
+                 3348,   3349,   3350,   3351,   3352,   3353,   3354,  32767,
+                 3355,   3356,   3357,   3358,   3359,   3360,   3361,  32767,
+                 3362,   3363,   3364,   3365,   3366,   3367,   3368,   3369,
+                 3370,   3371,   3372,   3373,   3374,   3375,   3376,   3377,
+                 3378,   3379,   3380,   3381,   3382,   3383,   3384,   3385,
+                 3386,   3387,   3388,   3389,      0,   3390,   3391,   3392,
+                  915,    916,    917,    918,    919,    920,    921,    922,
+                  923,    924,    925,    926,    927,    928,    929,    930,
+                  931,    932,    933,    934,    935,    936,    937,    938,
+                  939,    940,    941,    942,    943,    944,    945,    946,
+                  947,    948,    949,    950,    951,    952,    953,    954,
+                  955,    956,    957,    958,    959,    960,    961,    962,
+                  963,    964,    965,    966,    967,    968,    969,    970,
+                  971,    972,    973,    974,    975,    976,   3449,   3450,
+                 3451,   3452,   3453,   3454,   3455,   3456,   3457,   3458,
+                 3459,   3460,   3461,   3462,   3463,   3464,   3465,   3466,
+                 3467,   3468,   3469,   3470,   3471,   3472,   3473,   3474,
+                 3475,   3476,   3477,   3478,   3479,   3480,   3481,   3482,
+                 3483,   3484,   3485,   3486,   3487,   3488,   3489,   3490,
+                 3491,   3492,   3493,   3494,   3495,   3496,   3497,   3498,
+                 3499,   3500,   3501,   3502,   3503,   3504,   3505,   3506,
+                 3507,   3508,   3509,   3510,   3511,   3512,   3513,   3514,
+                 3515,   3516,   3517,   3518,   3519,   3520,   3521,   3522,
+                 3523,   3524,   3525,   3526,   3527,   3528,   3529,   3530,
+                 3531,   3532,   3533,   3534,   3535,   3536,   3537,   3538,
+                 3539,   3540,   3541,   3542,   3543,   3544,   3545,   3546,
+                 3547,   3548,   3549,   3550,   3551,   3552,   3553,   3554,
+                 3555,   3556,   3557,   3558,   3559,   3560,   3561,   3562,
+                 3563,   3564,   3565,   3566,   3567,   3568,   3569,   3570,
+                 3571,   3572,   3573,   3574,   3575,   3576,   3577,   6056,
+                 6057,   6058,  32767,   3581,   3582,   3583,   3584,   3585,
+                 4157,   4158,   4159,   3589,   4162,  -4510,  -1558,  -1557,
+                -1556,  -1742,  -4507,  -1553,  -4506,  -4506,   1562,  -1544,
+                 1563,  -1547,   1564,  -1545,   1565,  -1543,  -1542,  -1529,
+                -1540,  -1539,  -1538,  -1537,  -1536,  -4493,  -4493,  -4493,
+                -1532,  -1531,  -1764,  -1529,   3622,  -1528,  -1527,  -1526,
+                -1909,  -1524,  -1523,  -1522,  -1907,  -1907,  -1907,  -1907,
+                -1907,  -1907,  -1907,  -1907,  -1907,  -1907,  -1907,  -1510,
+                -1509,   1071,   1072,   1073,   1074,   1075,   1076,   1077,
+                 1078,   1079,   1080,   1081,   1082,   1083,   1084,   1085,
+                 1086,   1087,   1088,   1089,   1090,   3663,   3664,   3665,
+                 3666,   3667,   3668,   3669,   3670,   3671,   3672,   3673,
+                 3674,   1095,   1096,   1097,   1098,   1099,   1100,   1101,
+                 3682,   1103,   3684,   1105,   3686,   3687,   3688,   1109,
+                 1110,   1111,   3692,   1113,   1114,   1115,   1116,   1117,
+                 1118,   1119,   3700,   1121,   3702,   3703,   3704,   1125,
+                 1126,   1127,  -1809,  -1809,  -1809,  -1809,  -1809,  -1809,
+                 3720,   3721,   3722,   3717,   3718,   3719,   3720,   1140,
+                 1141,   1142,   1143,  -1802,   1145,   1146,   1147,   1148,
+                 3730,  -1797,   3732,   1152,   3734,   3735,   1155,   1156,
+                 3738,   3739,   3740,   3741,   3742,   3743,  -1785,  -1785,
+                -1785,  -1779,  -1324,   1168,   1169,   1170,   1171,   1172,
+                 3752,   3753,   1175,   1176,   1177,    992,   3758,   3759,
+                 3760,   3761,   1183,   1184,   1185,   1186,  -2300,   1188,
+                -2298,   1190,   1191,   1192,   3772,   3773,   3774,   1196,
+                 1197,   3777,   3778,   3779,   1201,   1202,   1203,  -1747,
+                 1205,   1206,   1207,   1021,  -1744,   1210,  -1743,  -1743,
+                 4325,   1219,   4326,   1216,   4327,   1218,   4328,   1220,
+                 1221,   1234,   1223,   1224,   1225,   1226,   1227,  -1730,
+                -1730,  -1730,   1231,   1232,    999,   1234,   1235,   1236,
+                 1237,   1238,    855,   1240,   1241,   1242,    857,    857,
+                  857,    857,    857,    857,    857,    857,    857,    857,
+                  857,   1254,   1255,   1256,   1257,   1258,   1259,   1260,
+                 1261,   1262,   2969,   2970,   2971,   2972,   2973,   2974,
+                 2975,   2976,   2977,   2978,  -4426,  -2483,  -4426,  -2481,
+                -6106,    878,    879,  -4286,  -4286,  -4286,   -978,    888,
+                  889,   -975,   -974,   -973,   -972,   -971,   -970,  -4268,
+                -4268,  -2059,  -4268,   -968,  -4268,  -4268,   -967,   -966,
+                -6129,  -6129,   -963,   -962,   -961,  -4268,  -6133,  -6133,
+                -4268,  -4268,  -4268,  -4268,  -4268,  -4268,  -4268,  -4268,
+                -3178,  -4268,  -1502,  -1502,  -1502,  -1502,  -1502,   3902,
+                 3903,   3904,  -1502,   3906,   3907,  -1502,  -1502,  -1502,
+                -4269,    529,  -1502,      0,      0,      0,  -1502,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,    170,    171,    172,    173,    174,    175,    176,
+                  177,    178,    179,    180,    181,    182,    183,    184,
+                  185,    186,    187,    188,    189,    190,    191,    192,
+                  193,    194,    195,    196,    197,    198,    199,    200,
+                  201,    202,    203,    204,    205,    206,    207,    208,
+                  209,    210,    211,    212,    213,    214,    215,    216,
+                  217,    218,    219,  -3194,    221,    222,    223,    224,
+                -1657,    226,    227,  -1657,    229,    230,  -1655,    555,
+                -1655,    234,    235,    236,    732,    238,    239,    240,
+                  241,    242,    243,  -1655,    245,    246,    247,    248,
+                -1655,    250,  -1655,    252,  -1655,  -1655,  -1655,  -1655,
+                -1655,  -1655,    259,  -1655,  -1655,  -1655,  -1655,    264,
+                -1655,    266,  -1655,    268,  -1655,  -3620,    271,    272,
+                -1655,    274,    275,  -1655,    277,  -1655,  -1655,    280,
+                -1655,    282,   5746,   5747,   5748,   5749,  -1655,    288,
+                -1655,    290,  -3335,   3649,   3650,  -1515,  -1515,  -1515,
+                 1793,   3659,   3660,   1796,   1797,   1798,   1799,   1800,
+                 1801,  -1497,  -1497,    712,  -1497,   1803,  -1497,  -1497,
+                 1804,   1805,  -3358,  -3358,   1808,   1809,   1810,  -1497,
+                -3362,  -3362,  -1497,  -1497,  -1497,  -1497,  -1497,  -1497,
+                -1497,  -1497,   -407,  -1497,  -1497,  -1497,  -1497,  -1497,
+                -1497,   3667,   3668,  -1497,  -1497,  -1497,   1811,   3677,
+                 3678,  32767,   1814,  32767,   1815,  32767,  32767,   1816,
+                 1817,  32767,  32767,  32767,   1818,   1819,   1820,   1821,
+                -3342,  -3342,   1824,   1825,   1826,   1827,   1828,   1829,
+                 1830,   1831,   1832,   1833,   1834,   1835,   1836,   1837,
+                 1838,   1839,   1840,   1841,   1842,   1843,   1844,   1845,
+                 1846,   1847,   1848,   1849,   1850,   1851,   1852,   1853,
+                 1854,   1855,   1856,   1857,   1858,   1859,   1860,   1861,
+                 1862,   1863,   1864,   1865,   1866,   1867,   1868,   1869,
+                 1870,   1871,   1872,   1873,   1874,   1875,   1876,  -1537,
+                 1878,   1879,   1880,   1881,      0,   1883,   1884,      0,
+                  529,      0,      0,   2210,      0,   1889,   1890,   1891,
+                 2387,   1893,   1894,   1895,   1896,   1897,   1898,      0,
+                 1900,   1901,   1902,   1903,      0,   1905,      0,   1907,
+                    0,      0,      0,      0,      0,      0,   1914,      0,
+                    0,      0,      0,   1919,      0,   1921,      0,   1923,
+                    0,  -1965,   1926,   1927,      0,   1929,   1930,      0,
+                 1932,      0,      0,   1935,      0,   1937,   7401,   7402,
+                 7403,   7404,      0,   1943,      0,   1945,   1946,      0,
+                 1948,      0,      0,   1951,   1952,   1953,   1954,      0,
+                 1956,   1957,   1958,   1959,   1960,   1961,   1962,      0,
+                 1964,   1965,   1966,   1967,      0,   1969,   1970,   1971,
+                 1972,      0,   1974,      0,   1976,   1977,   1978,   1979,
+                 1980,   1981,   1982,   1983,   1984,   1985,      0,   1987,
+                 1988,   1989,   1990,   1991,    566,    566,    566,   5141,
+                 5142,    566,    566,    566,    566,    566,    566,    566,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,   8673,   5722,   5722,   5722,      0,   8676,
+                 5723,   8677,   8678,   2611,   5718,   2612,   5723,   2613,
+                 5723,   2614,   5723,   5723,   5711,   5723,   5723,   5723,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,    895,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,    151,   2776,   4254,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,   1821,      0,
+                    0,      0,    596,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  -2856,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  -2901,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  -1025,  32767,  32767,  32767,
+                32767,  -2910,  32767,  32767,  32767,  32767,    157,  32767,
+                32767,  32767,  32767,    158,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 2359,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,    160,  32767,    161,    162,    163,    164,
+                  165,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                  898,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,   1428,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,   1254,  32767,  32767,  32767,
+                32767,   1250,  32767,  32767,  32767,  32767,   1246,  32767,
+                32767,  32767,  32767,   1243,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 1231,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,   1842,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 3177,   1235,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  -4323,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,      0,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,      0,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,    174,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,   1830,   -112,   1832,   -112,   3514,  -3469,
+                -3469,   1697,   1698,   1699,  -1608,  -3473,  -3473,  -1608,
+                -1608,  -1608,  -1608,  -1608,  -1608,   1691,   1692,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  -1623,  -1623,  -1623,   3541,   3542,  -1623,  -1623,
+                -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,
+                -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,  -1623,
+                -1623,  -1623,  -1623,  -1623,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   -766,   2253,   2254,   2255,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 1531,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,      0,      0,  32767,      0,      0,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   -173,   -173,   -173,   -173,   -173,
+                 -173,   -173,   -173,   -173,   -173,   -173,   -173,   3241,
+                 -173,   -173,   -173,   -173,   1709,   -173,   -173,   1712,
+                 -173,   -173,   1713,   -496,   1715,   -173,   -173,   -173,
+                 -668,   -173,   -173,   -173,   -173,   -173,   -173,   1726,
+                 -173,   -173,   -173,   -173,   1731,   -173,   1733,   -173,
+                 1735,   1736,   1737,   1738,   1739,   1740,   -173,   1742,
+                 1743,   1744,   1745,   -173,   1747,   -173,   1749,   -173,
+                 1751,   3717,   -173,   -173,   1755,   -173,   -173,   1758,
+                 -173,   1760,   1761,   -173,   1763,   -173,  -5636,  -5636,
+                -5636,  -5636,   1769,   -173,   1771,   -173,   3453,  -3530,
+                -3530,   1636,   1637,   1638,  -1669,  -3534,  -3534,  -1669,
+                -1669,  -1669,  -1669,  -1669,  -1669,   1630,   1631,   -577,
+                 1633,  -1666,   1635,   1636,  -1664,  -1664,   3500,   3501,
+                -1664,  -1664,  -1664,   1644,   3510,   3511,   1647,   1648,
+                 1649,   1650,   1651,   1652,   1653,   1654,    565,   1656,
+                 1657,   1658,   1659,   1660,   1661,  -3502,  -3502,   1664,
+                 1665,   1666,   1667,   1668,   1669,   1670,   1671,   1672,
+                 1673,   1674,   1675,   1676,   1677,   1678,   1679,   1680,
+                 1681,   1682,   1683,   1684,   1685,   1686,   1687,   1688,
+                 1689,   1690,   1691,   1692,   1693,   1694,   1695,   1696,
+                 1697,   1698,   1699,   1700,   1701,   1702,   1703,   1704,
+                 1705,   1706,   1707,   1708,   1709,   1710,   1711,   1712,
+                 1713,   1714,   1715,   1716,  -1697,   1718,   1719,   1720,
+                 1721,   -160,   1723,   1724,   -160,   1726,   1727,   -158,
+                 2052,   -158,   1731,   1732,   1733,   2229,   1735,   1736,
+                 1737,   1738,   1739,   1740,   -158,   1742,   1743,   1744,
+                 1745,   -158,   1747,   -158,   1749,   -158,   -158,   -158,
+                 -158,   -158,   -158,   1756,   -158,   -158,   -158,   -158,
+                 1761,   -158,   1763,   -158,   1765,   -158,  -2123,   1768,
+                 1769,   -158,   1771,   1772,   -158,   1774,   -158,   -158,
+                 1777,   -158,   1779,   7243,   7244,   7245,   7246,   -158,
+                 1785,   -158,   1787,  -1838,   5146,   5147,    -18,    -18,
+                  -18,   3290,   5156,   5157,   3293,   3294,   3295,   3296,
+                 3297,   3298,      0,      0,   2209,      0,   3300,      0,
+                    0,   3301,   3302,  -1861,  -1861,   3305,   3306,   3307,
+                    0,  -1865,  -1865,      0,      0,      0,      0,      0,
+                    0,      0,      0,   1090,      0,      0,      0,      0,
+                    0,      0,   5164,   5165,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,   3414,      0,      0,      0,      0,   1882,      0,
+                    0,   1885,      0,      0,   1886,   -323,   1888,      0,
+                    0,      0,   -495,      0,      0,      0,      0,      0,
+                    0,   1899,      0,      0,      0,      0,   1904,      0,
+                 1906,      0,   1908,   1909,   1910,   1911,   1912,   1913,
+                    0,   1915,   1916,   1917,   1918,      0,   1920,      0,
+                 1922,      0,   1924,   3890,      0,      0,   1928,      0,
+                    0,   1931,      0,   1933,   1934,      0,   1936,      0,
+                -5463,  -5463,  -5463,  -5463,   1942,      0,   1944,      0,
+                    0,   1947,      0,   1949,   1950,      0,      0,      0,
+                    0,   1955,      0,      0,      0,      0,      0,      0,
+                    0,   1963,      0,      0,      0,      0,   1968,      0,
+                    0,      0,      0,   1973,      0,   1975,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                 1986,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,    527,    527,    527,    527,      0,
+                  528,    528,    528,    528,    528,    528,    528,    528,
+                  528,    528,    528,   1998,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 1999,   2000,   2001,   2002,   2003,  32767,  32767,  32767,
+                32767,  32767,   2004,  32767,   2005,   2006,   2007,   2008,
+                 2009,   2010,   2011,   2012,   2013,   2014,   2015,   2016,
+                 2017,   2018,   2019,   2020,   2021,   2022,   2023,   2024,
+                 2025,   2026,   1200,   1200,  32767,   4498,   4499,   2291,
+                 2032,   2033,  32767,   2034,  32767,   2035,   2036,  32767,
+                 2037,   2038,  32767,   2039,   2040,   2041,   2042,   2043,
+                 2044,   2045,   2046,   2047,   2048,   2049,   2050,   2051,
+                 2052,   2053,   2054,   2055,   2056,   2057,   2058,   2059,
+                 2060,   2061,   2062,   2063,   2064,   2065,   2066,   2067,
+                 2068,  -1506,  -1506,  -1506,  -1506,  -1506,  -1506,  -1506,
+                 2076,  -2490,   2078,   2079,   2080,   2081,   2082,   2083,
+                 2084,   2085,   2086,   2087,   2088,   2089,   2090,   2091,
+                 2092,   2093,   2094,   2095,   -105,  -2314,   2098,   2099,
+                 2100,   2101,   2102,   2103,   2104,   2105,   2106,   2107,
+                 2108,   2109,   2110,   2111,   2112,   2113,   2114,   2115,
+                 2116,   2117,   2118,   2119,   2120,   5459,   2122,   2123,
+                 2124,   2125,   2126,   2127,   2128,   5466,   2130,   5467,
+                 2132,   2133,   2134,   2135,   5471,   2137,   2138,   5473,
+                 5473,   5473,   5473,   2143,   2144,   5475,   2146,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 2147,   2148,   2149,   2150,   2151,   2152,   2153,   2154,
+                 2155,   2156,   2157,   2158,   2159,   2160,   2161,   2162,
+                 2163,   2164,   2165,   2166,   2167,   2168,   2169,   2170,
+                 2171,   2172,   2173,   2174,   2175,   2176,   2177,   2178,
+                 2179,   2180,   2181,   2182,   2183,   2184,   2185,   2186,
+                 2187,   2188,   2189,   2190,   2191,  32767,   -726,   2293,
+                 -725,   -725,   -725,   1357,   1358,   1359,   -722,   2201,
+                 2202,   2203,   2204,   2205,      0,   2207,   -715,   2209,
+                 -714,   -714,   -714,   2213,   2214,   2215,   4806,   2217,
+                 2218,   2219,   2220,   2221,   2222,   2223,   -710,   2225,
+                 -248,   -704,   -704,   2229,   2230,   2231,   2232,   2233,
+                 2220,   1430,   2236,   2237,   -695,   2239,   -694,   2241,
+                 -693,   -693,   2244,   2245,   2246,   2231,   2231,   2249,
+                 2250,   2251,   2252,   2253,   2254,   2255,   2256,   2239,
+                 2258,   2259,   2260,   2261,   2262,   2263,   2264,   2265,
+                 2266,   2267,   2268,   2269,   2270,   2271,   2272,   2273,
+                 2274,   2275,   2276,   2277,   2278,   2279,   2280,   2281,
+                 2282,   2283,   2284,   2285,   2286,   2287,   2288,   2289,
+                 2290,   2291,   2292,   2293,   3084,   2295,   2296,   2297,
+                 2298,   2299,   2300,   2301,   2302,   2303,   2304,   2305,
+                 2306,   2307,   3983,   2309,   2310,   2292,   2312,   3992,
+                 2314,   2315,   2316,   2317,   2318,   2319,   2320,   2321,
+                 2322,   2323,   2324,   2325,   2326,   2327,   2328,   4023,
+                 2330,   2331,   2332,   2333,   2334,   2335,   2336,   2337,
+                 2338,   2339,   2340,   2341,   2342,   2343,   2344,   2345,
+                 2346,   2347,   2348,   2349,   2350,   2351,   2352,   2353,
+                 2354,   2355,   2356,   2357,   2358,   2359,   2360,   2361,
+                 2362,   2363,   2364,   2365,   2366,   2367,   2368,   2369,
+                 2370,   2371,   2372,   2373,   2374,   2375,   2376,   2377,
+                 2378,   2379,   2360,   2360,   2360,   2360,   2360,   2360,
+                 2360,   2360,   2360,   2389,   2390,   2391,   2392,   2393,
+                 2394,   2395,   2396,   2397,   2398,   2399,   2400,   2401,
+                 2402,   2403,   2404,   2405,   2406,   2407,   2408,   2409,
+                 2410,   2411,   2412,   2413,   2414,   2415,   2416,   2417,
+                 2418,   2419,   2420,   2421,   2422,   2423,   2424,   2425,
+                 2426,   2427,   2428,   2429,   2430,   2431,   2432,   2433,
+                 2434,   2435,   2436,   2437,   2438,   2439,   2440,   2441,
+                 2442,   2443,   2444,   2445,   2446,   2447,  32767,   2448,
+                 2449,   2450,   2451,   2452,   2453,   2454,   2455,   2456,
+                 2457,   2458,   2459,   2460,   2461,   2462,   2463,   2464,
+                 2465,   2466,   2467,   2468,   2469,   2470,   2471,   2472,
+                 2473,   2474,   2475,   2476,   2477,   2478,   2479,   2480,
+                 2481,   2482,   2483,   2484,   2485,   2486,   2487,   2488,
+                 2489,   2490,   2491,   2492,   2493,   2494,   2495,   2496,
+                 2497,   2498,   2499,   2500,   2501,   2502,   2503,   2504,
+                 2505,   2506,   2507,   2508,   2509,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,   2510,
+                 2511,   2512,   2513,   3266,   3266,   3266,   3266,   2518,
+                 3267,   3267,   3267,   2522,   3268,   3268,   3268,   3268,
+                 3268,   3268,   3268,   6682,   3268,   3268,   3268,   2534,
+                 5151,   3269,   2537,   2538,   3271,   3271,   5157,   2948,
+                 5159,   2544,   2545,   3273,   2778,   3273,   2549,   3274,
+                 2551,   3275,   2553,   5175,   2555,   3277,   3277,   3277,
+                 5181,   2560,   5184,   3278,   5186,   2564,   5189,   5190,
+                 5191,   5192,   3279,   5194,   5195,   2572,   5198,  32767,
+                32767,   3278,   5200,   3278,   2577,   2578,   2579,   2580,
+                 5210,   3282,   3282,   5213,   3282,   2586,   2587,   2588,
+                 2589,   2590,   2591,  -2175,  -2175,  -2175,   5230,   3288,
+                 5232,   3288,   6914,    -69,    -69,   5097,   5098,   5099,
+                 1792,    -73,    -73,   1792,   1792,   1792,   1792,   1792,
+                 1792,   5091,   5092,   2884,   5094,   1795,   5096,   5097,
+                 1797,   1797,   6961,   6962,   1797,   1797,   1797,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   2578,   2578,   2578,   2578,   2578,
+                 2578,    872,    872,    872,    872,    872,    872,    872,
+                  872,    872,    872,   8277,   6335,   8279,   6335,   9961,
+                 2978,   2978,   8144,   8145,   8146,   4839,   2974,   2974,
+                 4839,   4839,   4839,   4839,   4839,   4839,   8138,   8139,
+                 5931,   8141,   4842,   8143,   8144,   4844,   4844,  10008,
+                10009,   4844,   4844,   4844,   8152,  10018,  10019,   8155,
+                 8156,   8157,   8158,   8159,   8160,   8161,   8162,   7073,
+                 8164,   5399,   5400,   5401,   5402,   5403,      0,      0,
+                    0,   5407,      0,      0,   5410,   5411,   5412,   8180,
+                 3383,   5415,   3914,   3915,   3916,   5419,   3918,   3919,
+                 3920,   3921,   3922,   3923,   3924,   3925,   3926,   3927,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   3758,   3758,   3758,   3758,   3758,   3758,
+                 3758,   3758,   7172,   3758,   3758,   3758,   3758,   5640,
+                 3758,   3758,   5643,   3758,   3758,   5644,   3435,   5646,
+                 3758,   3758,   3758,   3263,   3758,   3758,   3758,   3758,
+                 3758,   3758,   5657,   3758,   3758,   3758,   3758,   5662,
+                 3758,   5664,   3758,   5666,   5667,   5668,   5669,   5670,
+                 5671,   3758,   5673,   5674,   5675,   5676,   3758,   5678,
+                 3758,   5680,   3758,   5682,   7648,   3758,   3758,   5686,
+                 3758,   3758,   5689,   3758,   5691,   5692,   3758,  -1707,
+                -1707,  -1707,  -1707,  -1707,  -1707,   5698,   3756,   5700,
+                 3756,   7382,    399,    399,   5565,   5566,   5567,   2260,
+                  395,    395,   2260,   2260,   2260,   2260,   2260,   2260,
+                 5559,   5560,   3352,   5562,   2263,   5564,   5565,   2265,
+                 2265,   7429,   7430,   2265,   2265,   2265,   5573,   7439,
+                 7440,   5576,   5577,   5578,   5579,   5580,   5581,   5582,
+                 5583,   4494,   5585,   2820,   2821,   2822,   2823,   2824,
+                -2579,  -2579,  -2579,   2828,  -2579,  -2579,   2831,   2832,
+                 2833,   5601,    804,   2836,   1335,   1336,   1337,   2840,
+                 1339,   1340,   1341,   1342,   1343,   1344,   1345,   1346,
+                 1347,   1348,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   1179,   1179,   1179,   1179,
+                 1179,   1179,   1179,   1179,   4593,   1179,   1179,   1179,
+                 1179,   3061,   1179,   1179,   3064,   1179,   1179,   3065,
+                  856,   3067,   1179,   1179,   1179,    684,   1179,   1179,
+                 1179,   1179,   1179,   1179,   3078,   1179,   1179,   1179,
+                 1179,   3083,   1179,   3085,   1179,   3087,   3088,   3089,
+                 3090,   3091,   3092,   1179,   3094,   3095,   3096,   3097,
+                 1179,   3099,   1179,   3101,   1179,   3103,   5069,   1179,
+                 1179,   3107,   1179,   1179,   3110,   1179,   3112,   3113,
+                 1179,   3115,   1179,  -4284,  -4284,  -4284,  -4284,   3121,
+                 1179,   3123,   1179,   4805,  -2178,  -2178,   2988,   2989,
+                 2990,   -317,  -2182,  -2182,   -317,   -317,   -317,   -317,
+                 -317,   -317,   2982,   2983,    775,   2985,   -314,   2987,
+                 2988,   -312,   -312,   4852,   4853,   -312,   -312,   -312,
+                 2996,   4862,   4863,   2999,   3000,   3001,   3002,   3003,
+                 3004,   3005,   3006,   1917,   3008,   3009,   3010,   3011,
+                 3012,   3013,  -2150,  -2150,   3016,   3017,   3018,   3019,
+                 3020,   3021,   3022,   3023,   3024,   3025,   3026,   3027,
+                 3028,   3029,   3030,   3031,   3032,   3033,   3034,   3035,
+                32767,  32767,  32767,   3036,   3037,   3038,   3039,   3040,
+                 3041,  32767,  32767,   3042,   3043,   3044,   3045,   3046,
+                 3047,  32767,  32767,   3048,   3049,   3050,   3051,   3052,
+                 3053,  32767,  32767,   3054,   3055,   3056,  32767,  32767,
+                32767,   -357,   3058,   3059,   3060,   3061,   1180,   3063,
+                    0,   1179,   3065,   3066,   1181,   3391,   1181,   3070,
+                    0,      0,      0,      0,  32767,      0,      0,  32767,
+                    0,  32767,      0,      0,  -4973,  32767,  32767,  -7368,
+                -2202,  -2201,  -2200,  -5507,  -7372,  -7372,  -5507,  -5507,
+                -5507,  32767,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,  32767,      0,      0,  32767,      0,
+                 -203,  -2234,   -732,   -732,   -732,  -2234,   -732,   -732,
+                -2763,  -1261,  -1261,  -1261,  -2763,  -1261,  -1261,  -1261,
+                -1261,  -1261,  -1261,  -1261,  -1261,  -1261,  -1261,  -1091,
+                -1090,  -1089,  -1088,  -1087,  32767,  32767,  -1086,  -1085,
+                -1084,  -1083,  -1082,  -1081,  -1080,  -1079,  -1078,  -1077,
+                -1076,  -1075,  32767,  -1074,  -1073,  -1072,  -1071,  -1070,
+                -1069,  -1068,  -1067,  -1066,  -1065,  -1064,  -1063,  -1062,
+                -1061,  -1060,  -1059,  -1058,  -1057,  -1056,  32767,  -1055,
+                -1054,  -1053,  -1052,      0,  32767,  32767,  32767,  -1051,
+                -1050,  -4463,  32767,  -1048,  32767,  -1047,  -2928,  -1045,
+                -1044,  -2928,  -1042,  -1041,  -2926,   -716,  -2926,  -1037,
+                -1036,  -1035,   -539,  -1033,  -1032,  -1031,  -1030,  -1029,
+                -1028,  -2926,  -1026,  -1025,  -1024,  -1023,  -2926,  -1021,
+                -2926,  -1019,  -2926,  -2926,  -2926,  -2926,  -2926,  -2926,
+                -1012,  -2926,  -2926,  -2926,  -2926,  -1007,  -2926,  -1005,
+                -2926,  -1003,  -2926,  -4891,  -1000,   -999,  -2926,   -997,
+                 -996,  -2926,   -994,  -2926,  -2926,   -991,   4475,   4476,
+                 4477,   4478,   4479,   4480,  -2924,   -981,  -2924,   -979,
+                -4604,   2380,   2381,  -2784,  -2784,  -2784,    524,   2390,
+                 2391,    527,    528,    529,    530,    531,    532,  -2766,
+                -2766,   -557,  -2766,    534,  -2766,  -2766,    535,    536,
+                -4627,  -4627,    539,    540,    541,  -2766,  -4631,  -4631,
+                -2766,  -2766,  -2766,  -2766,  -2766,  -2766,  -2766,  -2766,
+                -1676,  -2766,      0,      0,      0,      0,      0,   5404,
+                 5405,   5406,      0,   5408,   5409,      0,      0,      0,
+                -2767,   2031,      0,   1502,   1502,   1502,      0,   1502,
+                 1502,   1502,   1502,   1502,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,    224,    225,    226,  32767,    227,    228,    229,
+                  230,    231,    232,    233,    234,    235,    236,     67,
+                32767,     66,     66,     66,     66,     66,     66,     66,
+                   66,     66,     66,     66,     66,     66,     66,     66,
+                   66,     66,     66,  32767,     65,     65,     65,     65,
+                   65,     65,     65,     65,     65,     65,     65,     65,
+                   65,     65,     65,     65,     65,     65,     65,     65,
+                   65,     65,     65,     65,     65,     65,     65,     65,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   -271,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                 1940,     18,   1942,   3908,     18,     18,   1946,     18,
+                   18,   1949,     18,   1951,   1952,     18,   1954,     18,
+                -5445,  -5445,  -5445,  -5445,   1960,     18,   1962,     18,
+                 3644,  -3339,  -3339,   1827,   1828,   1829,  -1478,  -3343,
+                -3343,  -1478,  -1478,  -1478,  -1478,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,      0,      0,      0,
+                    0,  32767,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,   1340,   1341,
+                 1342,   1343,   1344,   1345,   1346,   1347,   1348,   1349,
+                -2064,   1351,   1352,   1353,   1354,  32767,   1355,   1356,
+                32767,      0,  32767,  32767,   1679,  32767,   1357,   1358,
+                 1359,   1855,   1361,   1362,   1363,   1364,   1365,   1366,
+                32767,   1367,   1368,   1369,   1370,  32767,   1371,  32767,
+                 1372,  32767,  32767,  32767,  32767,  32767,  32767,   1373,
+                32767,  32767,  32767,  32767,   1374,  32767,   1375,  32767,
+                 1376,  32767,  -2513,   1378,   1379,  32767,   1380,   1381,
+                32767,   1382,  32767,  32767,   1383,  32767,   1384,  32767,
+                 6848,  32767,   6849,  32767,   1387,  32767,   1388,   1389,
+                32767,   1390,  32767,  32767,   1391,   1392,   1393,   1394,
+                32767,   1395,   1396,   1397,   1398,   1399,   1400,   1401,
+                32767,   1402,   1403,   1404,   1405,  32767,   1406,   1407,
+                 1408,   1409,  32767,   1410,  32767,   1411,   1412,   1413,
+                 1414,   1415,   1416,   1417,   1418,   1419,   1420,  32767,
+                 1421,   1422,   1423,   1424,   1425,      0,      0,      0,
+                 4575,   4576,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,   -571,   -571,
+                 -571,      0,   -572,   8101,   5150,   5150,   5150,   5337,
+                 8103,   5150,   8104,   8105,   2038,   5145,   2039,   5150,
+                 2040,   5150,   2041,   5150,   5150,   5138,   5150,   5150,
+                 5150,   5150,   5150,   8108,   8109,   8110,   5150,   5150,
+                 5384,   5150,      0,   5151,   5151,   5151,   5535,   5151,
+                 5151,   5151,   5537,   5538,   5539,   5540,   5541,   5542,
+                 5543,   5544,   5545,   5546,   5547,   5151,   5151,   2572,
+                 2572,   2572,   2572,   2572,   2572,   2572,   2572,   2572,
+                 2572,   2572,   2572,   2572,   2572,   2572,   2572,   2572,
+                 2572,   2572,   2572,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,   2580,
+                 2580,   2580,   2580,   2580,   2580,   2580,      0,   2580,
+                    0,   2580,      0,      0,      0,   2580,   2580,   2580,
+                    0,   2580,   2580,   2580,   2580,   2580,   2580,   2580,
+                    0,   2580,      0,      0,      0,   2580,   2580,   2580,
+                 5517,   5518,   5519,   5520,   5521,   5522,     -6,     -6,
+                   -6,      0,      0,      0,      0,   2581,   2581,   2581,
+                 2581,   5527,   2581,   2581,   2581,   2581,      0,   5528,
+                    0,   2581,      0,      0,   2581,   2581,      0,      0,
+                    0,      0,      0,      0,   5529,   5530,   5531,  32767,
+                32767,   2579,   2579,   2579,   2579,   2579,      0,      0,
+                 2579,   2579,   2579,   2765,      0,      0,      0,      0,
+                 2579,   2579,   2579,   2579,   6066,   2579,   6066,   2579,
+                 2579,   2579,      0,      0,      0,   2579,   2579,      0,
+                    0,      0,   2579,   2579,   2579,   5530,   2579,   2579,
+                 2579,   2766,   5532,   2579,   5533,   5534,   -533,   2574,
+                 -532,   2579,   -531,   2579,   -530,   2579,   2579,   2567,
+                 2579,   2579,   2579,   2579,   2579,   5537,   5538,   5539,
+                 2579,   2579,   2813,   2579,   2579,   2579,   2579,   2579,
+                 2963,   2579,   2579,   2579,   2965,   2966,   2967,   2968,
+                 2969,   2970,   2971,   2972,   2973,   2974,   2975,   2579,
+                 2579,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,  32767,  32767,  32767,
+                32767,  32767,    331,  32767,    332,  -2580,  -2580,  -2580,
+                -2580,      0,      0,      0,      0,      0,      0,      0,
+                -2580,      0,  -2580,      0,  -2580,  -2580,  -2580,      0,
+                    0,      0,  -2580,      0,      0,      0,      0,      0,
+                    0,      0,  -2580,      0,  -2580,  -2580,  -2580,      0,
+                    0,      0,   2937,   2938,   2939,   2940,   2941,   2942,
+                -2586,  -2586,  -2586,  -2580,  -2125,  -2581,  -2581,      0,
+                    0,      0,      0,   2946,      0,      0,      0,      0,
+                -2581,   2947,  -2581,      0,  -2581,  -2581,      0,      0,
+                -2581,  -2581,  -2581,  -2581,  -2581,  -2581,   2948,   2949,
+                 2950,   2945,   2491,      0,      0,      0,      0,      0,
+                -2579,  -2579,      0,      0,      0,    186,  -2579,  -2579,
+                -2579,  -2579,      0,      0,      0,      0,   3487,      0,
+                 3487,      0,      0,      0,  -2579,  -2579,  -2579,      0,
+                    0,  -2579,  -2579,  -2579,      0,      0,      0,   2951,
+                    0,      0,      0,    187,   2953,      0,   2954,   2955,
+                -3112,     -5,  -3111,      0,  -3110,      0,  -3109,      0,
+                    0,    -12,      0,      0,      0,      0,      0,   2958,
+                 2959,   2960,      0,      0,    234,      0,      0,      0,
+                    0,      0,    384,      0,      0,      0,    386,    387,
+                  388,    389,    390,    391,    392,    393,    394,    395,
+                  396,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,  -1706,  -1706,  -1706,      0,      0,      0,
+                    0,    385,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,    397,
+                  398,    399,    400,    401,    402,    403,    404,    405,
+                 2112,   2113,   2114,    409,    410,    411,    412,  32767,
+                  413,    414,    415,    416,    417,    418,    419,    420,
+                  421,    422,    423,    424,    425,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                -1688,  32767,  32767,  32767,  32767,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,      0,      0,      0,
+                    0,   -752,   -751,   -750,   -749,      0,   -748,   -747,
+                 -746,      0,   -745,   -744,   -743,   -742,   -741,   -740,
+                 -739,  -4152,   -737,   -736,   -735,      0,  -2616,   -733,
+                    0,      0,   -732,   -731,  -2616,   -406,  -2616,      0,
+                    0,   -727,   -231,   -725,      0,   -724,      0,   -723,
+                    0,  -2621,      0,   -721,   -720,   -719,  -2622,      0,
+                -2623,   -716,  -2623,      0,  -2624,  -2624,  -2624,  -2624,
+                 -710,  -2624,  -2624,      0,  -2625,   -706,  -2625,   -704,
+                -2625,   -702,      0,      0,      0,      0,  -2629,   -700,
+                 -699,  -2629,   -697,      0,      0,      0,      0,      0,
+                    0,   4767,   4768,   4769,  -2635,   -692,  -2635,   -690,
+                -4315,   2669,   2670,  -2495,  -2495,  -2495,    813,   2679,
+                 2680,    816,    817,    818,    819,    820,    821,  -2477,
+                -2477,   -268,  -2477,    823,  -2477,  -2477,    824,    825,
+                -4338,  -4338,    828,    829,    830,  -2477,  -4342,  -4342,
+                -2477,  -2477,  -2477,  -2477,  -2477,  -2477,  -2477,  -2477,
+                -1387,      0,      0,  32767,  32767,      0,      0,      0,
+                    0,      0,  -2486,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,   1756,   1757,   1758,
+                 1759,  -5645,  -3702,  -5645,  -3700,  -7325,   -341,   -340,
+                -5505,  -5505,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,    532,    533,
+                32767,    534,    535,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,   -781,   1084,   1084,   1084,   1084,
+                 1084,   1084,   4383,   4384,   2176,   4386,   1087,   4388,
+                 4389,   1089,   1089,   6253,   6254,   1089,   1089,   1089,
+                 4397,   6263,   6264,   4400,   4401,   4402,   4403,   4404,
+                 4405,   4406,   4407,   3318,   4409,   4410,   4411,   4412,
+                 4413,   4414,   -749,   -749,   4417,   4418,   4419,   4420,
+                 4421,   4422,   4423,   4424,   4425,   4426,   4427,   4428,
+                 4429,   4430,   4431,   4432,   4433,   4434,   4435,   4436,
+                 4437,   4438,   4439,   4440,   4441,   4442,   4443,   4444,
+                 4445,   4446,   4447,   4448,   4449,   4450,   4451,   4452,
+                 4453,   4454,   4455,   4456,   4457,   4458,   4459,   4460,
+                 4461,   4462,   4463,   4464,   4465,   4466,   4467,   4468,
+                 4469,   1056,   4471,   4472,   4473,   4474,   2593,   4476,
+                 4477,   2593,   4479,   4480,   2595,   4805,   2595,   4484,
+                 4485,   4486,   4982,   4488,   4489,   4490,   4491,   4492,
+                 4493,   2595,   4495,   4496,   4497,   4498,   2595,   4500,
+                 2595,   4502,   2595,   2595,   2595,   2595,   2595,   2595,
+                 4509,   2595,   2595,   2595,   2595,   4514,   2595,   4516,
+                 2595,   4518,   2595,    630,   4521,   4522,   2595,   4524,
+                 4525,   2595,   4527,   2595,   2595,   4530,   2595,   4532,
+                 9996,   9997,   9998,   9999,   2595,   4538,   2595,   4540,
+                 4541,   2595,   4543,   2595,   2595,   4546,   4547,   4548,
+                 4549,   2595,   4551,   4552,   4553,   4554,   4555,   4556,
+                 4557,   2595,   4559,   4560,   4561,   4562,   2595,   4564,
+                 4565,   4566,   4567,   2595,   4569,   2595,   4571,   4572,
+                 4573,   4574,   4575,   4576,   4577,   4578,   4579,   4580,
+                 2595,   4582,   4583,   4584,   4585,   4586,   4587,   4588,
+                 4589,   4590,   4591,   4592,   4593,   4594,   4595,   4596,
+                 4597,   4598,   4599,   4600,   4601,   4602,   4603,   4604,
+                 4605,   4606,   4607,   4608,   4609,   4610,   4611,   4612,
+                 4613,   4614,   4615,   4089,   4090,   4091,   4092,   4620,
+                 4093,   4094,   4095,   4096,   4097,   4098,   4099,   4100,
+                 4101,   4102,   4103,   4104,   2765,   2765,   2765,   2765,
+                 2765,   2765,   2765,   2765,   2765,   2765,   6179,   2765,
+                 2765,   2765,   2765,   4647,   2765,   2765,   4650,   4122,
+                 4652,   4653,   2444,   4655,   2767,   2767,   2767,   2272,
+                 2767,   2767,   2767,   2767,   2767,   2767,   4666,   2767,
+                 2767,   2767,   2767,   4671,   2767,   4673,   2767,   4675,
+                 4676,   4677,   4678,   4679,   4680,   2767,   4682,   4683,
+                 4684,   4685,   2767,   4687,   2767,   4689,   2767,   4691,
+                 6657,   2767,   2767,   4695,   2767,   2767,   4698,   2767,
+                 4700,   4701,   2767,   4703,   2767,  -2696,  -2696,  -2696,
+                -2696,   4709,   2767,   4711,   2767,   2767,   4714,   2767,
+                 4716,   4717,   2767,   2767,   2767,   2767,   4722,   2767,
+                 2767,   2767,   2767,   2767,   2767,   2767,   4730,   2767,
+                 2767,   2767,   2767,   4735,   2767,   2767,   2767,   2767,
+                 4740,   2767,   4742,   2767,   2767,   2767,   2767,   2767,
+                 2767,   2767,   2767,   2767,   2767,   4753,   2767,   2767,
+                 2767,   2767,   2767,   4193,   4194,   4195,   -379,   -379,
+                 4198,   4199,   4200,   4201,   4202,   4203,   4204,   4771,
+                 4772,   4773,   4774,   4775,   4776,   4777,   4778,   4779,
+                 4780,  -3892,   -940,   -939,   -938,   4785,  -3890,   -936,
+                -3889,  -3889,   2179,   -927,   2180,   -930,   2181,   -928,
+                 2182,   -926,   -925,   -912,   -923,   -922,   -921,   4803,
+                 4804,   4805,   4806,   4807,   4808,   4809,   4810,   4811,
+                 4812,   4813,   4814,   4815,   4816,   4817,   4818,   4819,
+                 3925,   4821,   4822,   4823,   4824,   4825,   4826,   4827,
+                 4828,   4829,   4830,   4831,   4832,   4833,   4834,   4835,
+                 4836,   4837,   4838,   4839,   4840,   4841,   4842,   4843,
+                 4844,   4845,   4846,   4847,   4848,   4849,   4850,   4851,
+                 4852,   4853,   4854,   4855,   4856,   4857,   4858,   4859,
+                 4860,   4710,   2086,    609,   4864,   4865,   4866,   4867,
+                 4868,   4869,   4870,   4871,   4872,   3052,   4874,   4875,
+                 4876,   4281,   4878,   4879,   4880,   4881,   4882,   4883,
+                 4884,   4885,   4886,   4887,    634,   4888,   4889,   4890,
+                 4891,   4892,   4893,   4894,   4895,   4896,   1322,   1322,
+                 1322,   1322,   1322,   1322,   1322,   4904,    338,   4906,
+                 4907,   4908,   4909,   4910,   4911,   4912,   4913,   4914,
+                 4915,   4916,   4917,    665,    666,    667,    668,    669,
+                  670,    671,    672,    673,    674,    675,    676,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
+                32767,  32767,  32767,  32767,  32767,  32767,  32767,      0,
+                    0,      0,      0,      0,      0,  32767,      0,      0,
+                    0,      0,  32767,  32767,      0,      0,      0,      0,
+                    0,      0,      0,      0,  32767,      0,      0,      0,
+                    0,      0,      0,      0,  32767,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,  32767,      0,      0,      0,   2478,  32767,   2477,
+                 2477,   2477,   2477,   2477,  32767,   2476,  32767,  32767,
+                32767,   2473,   2473,   2473,   2473,   2473,   2473,   2473,
+                32767,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+                 2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+                 2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+                 2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+                 2472,   2472,   2472,   2472,   2472,   2472,   2472,   2472,
+                 2472,   2472,   2472,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,  -2478,  -2478,  -2478,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,      0,      0,      0,
+                    0,      0,      0,      0,      0,
+       };
+
+       const unsigned char *k = (const unsigned char *) key;
+       size_t          keylen = 4;
+       uint32          a = 0;
+       uint32          b = 1;
+
+       while (keylen--)
+       {
+               unsigned char c = *k++;
+
+               a = a * 257 + c;
+               b = b * 8191 + c;
+       }
+       return h[a % 9837] + h[b % 9837];
+}
+
+/* Hash lookup information for NFKC_QC */
+static const pg_unicode_norminfo UnicodeNormInfo_NFKC_QC = {
+       UnicodeNormProps_NFKC_QC,
+       NFKC_QC_hash_func,
+       4918
+};
index bfe103f1955a910b6337dbb79d7ee6e51f5cd254..86bdd9d6dcbf0b8023572c39780b3007555f21df 100644 (file)
@@ -18,6 +18,11 @@ src/backend/utils/fmgrprotos\.h$
 # they match pgindent style, they'd look worse not better, so exclude them.
 kwlist_d\.h$
 #
+# This is generated by the scripts from src/common/unicode/.  It uses
+# hash functions generated by PerfectHash.pm whose format looks worse with
+# pgindent.
+src/include/common/unicode_normprops_table\.h$
+#
 # Exclude ecpg test files to avoid breaking the ecpg regression tests
 # (but include files at the top level of the ecpg/test/ directory).
 src/interfaces/ecpg/test/.*/
index be570329ea73a713b1df95004360fb5d11c1a823..c52f20d4ba4d1902b581c51be082ab012bfdfd06 100644 (file)
@@ -3191,6 +3191,7 @@ pg_tz
 pg_tz_cache
 pg_tzenum
 pg_unicode_decomposition
+pg_unicode_norminfo
 pg_unicode_normprops
 pg_utf_to_local_combined
 pg_uuid_t