]> Savannah Git Hosting - gnulib.git/commitdiff
unictype/scripts: Fix integer overflow in generated table.
authorBruno Haible <bruno@clisp.org>
Fri, 20 Sep 2024 10:43:57 +0000 (12:43 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 20 Sep 2024 10:43:57 +0000 (12:43 +0200)
Reported by clang through a -Wconstant-conversion warning.

* lib/gen-uni-tables.c (output_scripts): Generate a level2 array of
'unsigned short', not 'short', values.
* lib/unictype/scripts.h: Regenerated.
* lib/unictype/scripts.c (uc_script): Update accordingly.

ChangeLog
lib/gen-uni-tables.c
lib/unictype/scripts.c
lib/unictype/scripts.h

index 4c81f18ad867c7f79ac17b92f830ade27aba7e00..18594c51256d8434a892c3f96fecf1dc57cdb7bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2024-09-20  Bruno Haible  <bruno@clisp.org>
+
+       unictype/scripts: Fix integer overflow in generated table.
+       Reported by clang through a -Wconstant-conversion warning.
+       * lib/gen-uni-tables.c (output_scripts): Generate a level2 array of
+       'unsigned short', not 'short', values.
+       * lib/unictype/scripts.h: Regenerated.
+       * lib/unictype/scripts.c (uc_script): Update accordingly.
+
 2024-09-20  KO Myung-Hun  <komh78@gmail.com>
 
        wait-process: Use waitpid() of LIBCx on OS/2 kLIBC if available.
index 003d4d7b991f8a0b534402bd16e74fe84da4bf0f..617af649f1170502c435e88c23a009eecde3d963 100644 (file)
@@ -5356,7 +5356,7 @@ output_scripts (const char *version)
   fprintf (stream, "struct\n");
   fprintf (stream, "  {\n");
   fprintf (stream, "    int level1[%zu];\n", t.level1_size);
-  fprintf (stream, "    short level2[%zu << %d];\n", t.level2_size, t.q);
+  fprintf (stream, "    unsigned short level2[%zu << %d];\n", t.level2_size, t.q);
   fprintf (stream, "    unsigned char level3[%zu << %d];\n", t.level3_size, t.p);
   fprintf (stream, "  }\n");
   fprintf (stream, "u_script =\n");
@@ -5390,11 +5390,13 @@ output_scripts (const char *version)
       if (i > 0 && (i % 8) == 0)
         fprintf (stream, "\n   ");
       offset = ((uint32_t *) (t.result + level2_offset))[i];
+      /* To make the level2 values fit in 16 bits, we use 'unsigned short'
+         instead of 'short' and add 1 to each value.  */
       if (offset == 0)
-        fprintf (stream, " %5d", -1);
+        fprintf (stream, " %5d", -1 + 1);
       else
         fprintf (stream, " %5zu",
-                 (offset - level3_offset) / sizeof (uint8_t));
+                 (offset - level3_offset) / sizeof (uint8_t) + 1);
       if (i+1 < t.level2_size << t.q)
         fprintf (stream, ",");
     }
index a226d8da28ae6f7815ca1e32a01f6b5c176cfd7b..1d9d13aaad62b86d750f74daa8c7953adc2ee0b4 100644 (file)
@@ -35,11 +35,11 @@ uc_script (ucs4_t uc)
       if (lookup1 >= 0)
         {
           unsigned int index2 = (uc >> script_header_2) & script_header_3;
-          int lookup2 = u_script.level2[lookup1 + index2];
-          if (lookup2 >= 0)
+          unsigned int lookup2 = u_script.level2[lookup1 + index2];
+          if (lookup2 > 0)
             {
               unsigned int index3 = (uc & script_header_4);
-              unsigned char lookup3 = u_script.level3[lookup2 + index3];
+              unsigned char lookup3 = u_script.level3[(lookup2 - 1) + index3];
 
               if (lookup3 != 0xff)
                 return &scripts[lookup3];
index 0052dbaa700a6ed94f8f3b1cb616c17236cfc86a..0dbb7594f13bba1144b9510c6e7a7c233c8dd035 100644 (file)
@@ -2368,7 +2368,7 @@ static const
 struct
   {
     int level1[15];
-    short level2[5 << 9];
+    unsigned short level2[5 << 9];
     unsigned char level3[257 << 7];
   }
 u_script =
@@ -2378,326 +2378,326 @@ u_script =
        -1,    -1,    -1,    -1,    -1,    -1,  2048
   },
   {
-        0,   128,   256,   256,   256,   384,   512,   640,
-      768,   896,  1024,  1152,  1280,  1408,  1536,  1664,
-     1792,  1920,  2048,  2176,  2304,  2432,  2560,  2688,
-     2816,  2944,  3072,  3200,  3328,  3456,  3584,  3712,
-     3840,  3968,  4096,  4096,  4224,  4352,  4480,  4608,
-     4736,  4736,  4736,  4736,  4736,  4864,  4992,  5120,
-     5248,  5376,  5504,  5632,  5760,  5888,  6016,  6144,
-     6272,  6400,  6528,  6656,   256,   256,  6784,  6912,
-     7040,  7168,  7296,  7424,  7552,  7552,  7552,  7552,
-     7680,  7552,  7552,  7552,  7552,  7552,  7552,  7552,
-     7808,  7808,  7552,  7552,  7552,  7552,  7936,  8064,
-     8192,  8320,  8448,  8576,  8704,  8832,  8960,  9088,
-     9216,  9344,  9472,  9600,  9728,  9856,  9984,  7552,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960, 10112,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-    10240, 10240, 10240, 10240, 10240, 10240, 10240, 10240,
-    10240, 10368, 10496, 10496, 10624, 10752, 10880, 11008,
-    11136, 11264, 11392, 11520, 11648, 11776, 11904, 12032,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096,  4096,
-     4096,  4096,  4096,  4096,  4096,  4096,  4096, 12160,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,  8960,  8960, 12288, 12416, 12544, 12672,
-    12800, 12800, 12928, 13056, 13184, 13312, 13440, 13568,
-    13696, 13824, 13952, 14080,    -1, 14208, 14336, 14464,
-    14592, 14720, 14848, 14976, 15104, 15104, 15232, 15360,
-    15488, 15616, 15744, 15872, 16000, 16128, 16256, 16384,
-    16512, 16640, 16768, 16896, 17024, 17152, 17280, 17408,
-    17536, 17664, 17792, 17920, 18048, 18176, 18304, 18432,
-    18560, 18688,    -1, 18816, 18944, 19072, 19200,    -1,
-    19328, 19456, 19584, 19712, 19840, 19968, 20096, 20224,
-    20352, 20480, 20608, 20736,    -1, 20864, 20992, 21120,
-    21248, 21248, 21248, 21248, 21248, 21248, 21248, 21376,
-    21504, 21248, 21632,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1, 21760,
-    21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888,
-    22016, 21888, 21888, 21888, 21888, 21888, 21888, 21888,
-    21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888,
-    21888, 21888, 21888, 21888, 21888, 21888, 21888, 21888,
-    21888, 21888, 21888, 21888, 21888, 21888, 21888, 22144,
-    22272, 22272, 22272, 22272, 22400,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1, 22528,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    22656, 22656, 22656, 22656, 22784, 22912, 23040, 23168,
-       -1,    -1, 23296,    -1, 23424, 23552, 23680, 23808,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 23936,
-    23936, 23936, 23936, 23936, 23936, 23936, 23936, 24064,
-    23936, 23936, 23936, 23936, 23936, 23936, 24192, 24192,
-    24192, 24320, 24448,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1, 24576,
-    24704, 24832, 24960, 25088, 25088, 25216,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    25344, 25472,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     7552, 25600,  7552,  7552,  7552, 25728, 25856, 25984,
-     7552, 26112, 26240, 26368, 26496, 26624, 26752,    -1,
-    26880, 27008, 27136,  7552,  7552, 27264,  7552, 27392,
-    27520, 27520, 27520, 27520, 27520, 27648,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1, 27776,    -1,
-    27904, 28032, 28160,    -1,    -1, 28288,    -1,    -1,
-       -1, 28416,    -1, 28544,    -1,    -1,    -1, 28672,
-    28800, 28928, 29056,    -1,    -1,    -1,    -1,    -1,
-    29184, 29312, 29440,    -1, 29568, 29696,    -1,    -1,
-    29824, 29952,  7552, 30080, 30208,    -1,  7552,  7552,
-     7552,  7552,  7552,  7552,  7552, 30336, 30464, 30592,
-    30720, 30848,  7552,  7552, 30976, 31104,  7552, 31232,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960, 31360,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960, 31488,  8960,
-    31616,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960, 31744,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960, 31872,
-     8960,  8960,  8960,  8960, 32000,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8960,  8960,  8960,  8960, 32128,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960, 32256,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960,  8960,
-     8960,  8960,  8960,  8960,  8960,  8960,  8960, 32384,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    32512,    -1, 32640, 32768,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
+        1,   129,   257,   257,   257,   385,   513,   641,
+      769,   897,  1025,  1153,  1281,  1409,  1537,  1665,
+     1793,  1921,  2049,  2177,  2305,  2433,  2561,  2689,
+     2817,  2945,  3073,  3201,  3329,  3457,  3585,  3713,
+     3841,  3969,  4097,  4097,  4225,  4353,  4481,  4609,
+     4737,  4737,  4737,  4737,  4737,  4865,  4993,  5121,
+     5249,  5377,  5505,  5633,  5761,  5889,  6017,  6145,
+     6273,  6401,  6529,  6657,   257,   257,  6785,  6913,
+     7041,  7169,  7297,  7425,  7553,  7553,  7553,  7553,
+     7681,  7553,  7553,  7553,  7553,  7553,  7553,  7553,
+     7809,  7809,  7553,  7553,  7553,  7553,  7937,  8065,
+     8193,  8321,  8449,  8577,  8705,  8833,  8961,  9089,
+     9217,  9345,  9473,  9601,  9729,  9857,  9985,  7553,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961, 10113,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+    10241, 10241, 10241, 10241, 10241, 10241, 10241, 10241,
+    10241, 10369, 10497, 10497, 10625, 10753, 10881, 11009,
+    11137, 11265, 11393, 11521, 11649, 11777, 11905, 12033,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097,  4097,
+     4097,  4097,  4097,  4097,  4097,  4097,  4097, 12161,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,  8961,  8961, 12289, 12417, 12545, 12673,
+    12801, 12801, 12929, 13057, 13185, 13313, 13441, 13569,
+    13697, 13825, 13953, 14081,     0, 14209, 14337, 14465,
+    14593, 14721, 14849, 14977, 15105, 15105, 15233, 15361,
+    15489, 15617, 15745, 15873, 16001, 16129, 16257, 16385,
+    16513, 16641, 16769, 16897, 17025, 17153, 17281, 17409,
+    17537, 17665, 17793, 17921, 18049, 18177, 18305, 18433,
+    18561, 18689,     0, 18817, 18945, 19073, 19201,     0,
+    19329, 19457, 19585, 19713, 19841, 19969, 20097, 20225,
+    20353, 20481, 20609, 20737,     0, 20865, 20993, 21121,
+    21249, 21249, 21249, 21249, 21249, 21249, 21249, 21377,
+    21505, 21249, 21633,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0, 21761,
+    21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889,
+    22017, 21889, 21889, 21889, 21889, 21889, 21889, 21889,
+    21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889,
+    21889, 21889, 21889, 21889, 21889, 21889, 21889, 21889,
+    21889, 21889, 21889, 21889, 21889, 21889, 21889, 22145,
+    22273, 22273, 22273, 22273, 22401,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0, 22529,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+    22657, 22657, 22657, 22657, 22785, 22913, 23041, 23169,
+        0,     0, 23297,     0, 23425, 23553, 23681, 23809,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 23937,
+    23937, 23937, 23937, 23937, 23937, 23937, 23937, 24065,
+    23937, 23937, 23937, 23937, 23937, 23937, 24193, 24193,
+    24193, 24321, 24449,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0, 24577,
+    24705, 24833, 24961, 25089, 25089, 25217,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+    25345, 25473,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+     7553, 25601,  7553,  7553,  7553, 25729, 25857, 25985,
+     7553, 26113, 26241, 26369, 26497, 26625, 26753,     0,
+    26881, 27009, 27137,  7553,  7553, 27265,  7553, 27393,
+    27521, 27521, 27521, 27521, 27521, 27649,     0,     0,
+        0,     0,     0,     0,     0,     0, 27777,     0,
+    27905, 28033, 28161,     0,     0, 28289,     0,     0,
+        0, 28417,     0, 28545,     0,     0,     0, 28673,
+    28801, 28929, 29057,     0,     0,     0,     0,     0,
+    29185, 29313, 29441,     0, 29569, 29697,     0,     0,
+    29825, 29953,  7553, 30081, 30209,     0,  7553,  7553,
+     7553,  7553,  7553,  7553,  7553, 30337, 30465, 30593,
+    30721, 30849,  7553,  7553, 30977, 31105,  7553, 31233,
+        0,     0,     0,     0,     0,     0,     0,     0,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961, 31361,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961, 31489,  8961,
+    31617,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961, 31745,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961, 31873,
+     8961,  8961,  8961,  8961, 32001,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+     8961,  8961,  8961,  8961, 32129,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961, 32257,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961,  8961,
+     8961,  8961,  8961,  8961,  8961,  8961,  8961, 32385,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+    32513,     0, 32641, 32769,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0,
+        0,     0,     0,     0,     0,     0,     0,     0
   },
   {
       0,   0,   0,   0,   0,   0,   0,   0,