]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-96172 fix unicodedata.east_asian_width being wrong on unassigned code points ...
authorCarl Friedrich Bolz-Tereick <cfbolz@gmx.de>
Fri, 26 Aug 2022 16:29:39 +0000 (18:29 +0200)
committerGitHub <noreply@github.com>
Fri, 26 Aug 2022 16:29:39 +0000 (19:29 +0300)
Lib/test/test_unicodedata.py
Misc/NEWS.d/next/Library/2022-08-23-13-30-30.gh-issue-96172.7WTHer.rst [new file with mode: 0644]
Modules/unicodedata_db.h
Tools/unicode/makeunicodedata.py

index 3514697f548e6519d506de99af8e72b2959738d9..42c02eee58b444965a2f59cb4f35b8068335ff1f 100644 (file)
@@ -71,7 +71,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest):
 
     # Update this if the database changes. Make sure to do a full rebuild
     # (e.g. 'make distclean && make') to get the correct checksum.
-    expectedchecksum = '98d602e1f69d5c5bb8a5910c40bbbad4e18e8370'
+    expectedchecksum = '4975f3ec0acd4a62465d18c9bf8519b1964181f6'
 
     @requires_resource('cpu')
     def test_function_checksum(self):
@@ -90,6 +90,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest):
                 self.db.decomposition(char),
                 str(self.db.mirrored(char)),
                 str(self.db.combining(char)),
+                unicodedata.east_asian_width(char),
             ]
             h.update(''.join(data).encode("ascii"))
         result = h.hexdigest()
@@ -220,6 +221,23 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest):
         self.assertEqual(eaw('\u2010'), 'A')
         self.assertEqual(eaw('\U00020000'), 'W')
 
+    def test_east_asian_width_unassigned(self):
+        eaw = self.db.east_asian_width
+        # unassigned
+        for char in '\u0530\u0ece\u10c6\u20fc\uaaca\U000107bd\U000115f2':
+            self.assertEqual(eaw(char), 'N')
+            self.assertIs(self.db.name(char, None), None)
+
+        # unassigned but reserved for CJK
+        for char in '\uFA6E\uFADA\U0002A6E0\U0002FA20\U0003134B\U0003FFFD':
+            self.assertEqual(eaw(char), 'W')
+            self.assertIs(self.db.name(char, None), None)
+
+        # private use areas
+        for char in '\uE000\uF800\U000F0000\U000FFFEE\U00100000\U0010FFF0':
+            self.assertEqual(eaw(char), 'A')
+            self.assertIs(self.db.name(char, None), None)
+
     def test_east_asian_width_9_0_changes(self):
         self.assertEqual(self.db.ucd_3_2_0.east_asian_width('\u231a'), 'N')
         self.assertEqual(self.db.east_asian_width('\u231a'), 'W')
diff --git a/Misc/NEWS.d/next/Library/2022-08-23-13-30-30.gh-issue-96172.7WTHer.rst b/Misc/NEWS.d/next/Library/2022-08-23-13-30-30.gh-issue-96172.7WTHer.rst
new file mode 100644 (file)
index 0000000..1bb57f1
--- /dev/null
@@ -0,0 +1,3 @@
+Fix a bug in ``unicodedata``: ``east_asian_width`` used to return the wrong
+value for unassigned characters; and for yet unassigned, but reserved
+characters.
index e76631e8e7b06064bdef783bb77806587311d386..399610be74d5cc8c88034883475ea1d9f58c74f9 100644 (file)
@@ -4,10 +4,10 @@
 /* a list of unique database records */
 const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {0, 0, 0, 0, 0, 0},
-    {13, 0, 15, 0, 5, 0},
-    {13, 0, 17, 0, 5, 0},
-    {13, 0, 16, 0, 5, 0},
-    {13, 0, 18, 0, 5, 0},
+    {13, 0, 15, 0, 0, 0},
+    {13, 0, 17, 0, 0, 0},
+    {13, 0, 16, 0, 0, 0},
+    {13, 0, 18, 0, 0, 0},
     {10, 0, 18, 0, 3, 0},
     {26, 0, 19, 0, 3, 0},
     {26, 0, 11, 0, 3, 0},
@@ -24,44 +24,44 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {29, 0, 19, 0, 3, 0},
     {20, 0, 19, 0, 3, 0},
     {2, 0, 1, 0, 3, 0},
-    {10, 0, 13, 0, 5, 136},
+    {10, 0, 13, 0, 0, 136},
     {26, 0, 19, 0, 4, 0},
     {28, 0, 11, 0, 4, 0},
     {30, 0, 19, 0, 3, 0},
     {29, 0, 19, 0, 4, 136},
-    {30, 0, 19, 0, 5, 0},
+    {30, 0, 19, 0, 0, 0},
     {19, 0, 1, 0, 4, 136},
-    {24, 0, 19, 1, 5, 0},
+    {24, 0, 19, 1, 0, 0},
     {14, 0, 15, 0, 4, 0},
     {30, 0, 19, 0, 4, 0},
     {29, 0, 19, 0, 3, 136},
     {30, 0, 11, 0, 4, 0},
     {27, 0, 11, 0, 4, 0},
     {9, 0, 9, 0, 4, 136},
-    {2, 0, 1, 0, 5, 136},
-    {25, 0, 19, 1, 5, 0},
+    {2, 0, 1, 0, 0, 136},
+    {25, 0, 19, 1, 0, 0},
     {9, 0, 19, 0, 4, 136},
-    {1, 0, 1, 0, 5, 10},
+    {1, 0, 1, 0, 0, 10},
     {1, 0, 1, 0, 4, 0},
     {27, 0, 19, 0, 4, 0},
     {2, 0, 1, 0, 4, 0},
     {2, 0, 1, 0, 4, 10},
-    {2, 0, 1, 0, 5, 10},
-    {1, 0, 1, 0, 5, 0},
+    {2, 0, 1, 0, 0, 10},
+    {1, 0, 1, 0, 0, 0},
     {1, 0, 1, 0, 4, 136},
     {2, 0, 1, 0, 4, 136},
-    {2, 0, 1, 0, 5, 0},
-    {19, 0, 1, 0, 5, 0},
-    {1, 0, 1, 0, 5, 136},
-    {3, 0, 1, 0, 5, 136},
-    {18, 0, 1, 0, 5, 136},
-    {18, 0, 19, 0, 5, 0},
-    {18, 0, 1, 0, 5, 0},
-    {29, 0, 19, 0, 5, 0},
+    {2, 0, 1, 0, 0, 0},
+    {19, 0, 1, 0, 0, 0},
+    {1, 0, 1, 0, 0, 136},
+    {3, 0, 1, 0, 0, 136},
+    {18, 0, 1, 0, 0, 136},
+    {18, 0, 19, 0, 0, 0},
+    {18, 0, 1, 0, 0, 0},
+    {29, 0, 19, 0, 0, 0},
     {29, 0, 19, 0, 4, 0},
     {18, 0, 19, 0, 4, 0},
     {18, 0, 1, 0, 4, 0},
-    {29, 0, 19, 0, 5, 136},
+    {29, 0, 19, 0, 0, 136},
     {4, 230, 14, 0, 4, 80},
     {4, 230, 14, 0, 4, 0},
     {4, 232, 14, 0, 4, 0},
@@ -77,173 +77,173 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {4, 0, 14, 0, 4, 0},
     {4, 233, 14, 0, 4, 0},
     {4, 234, 14, 0, 4, 0},
-    {18, 0, 19, 0, 5, 170},
-    {26, 0, 19, 0, 5, 170},
-    {29, 0, 19, 0, 5, 138},
-    {1, 0, 1, 0, 5, 138},
-    {27, 0, 19, 0, 5, 0},
+    {18, 0, 19, 0, 0, 170},
+    {26, 0, 19, 0, 0, 170},
+    {29, 0, 19, 0, 0, 138},
+    {1, 0, 1, 0, 0, 138},
+    {27, 0, 19, 0, 0, 0},
     {1, 0, 1, 0, 4, 10},
-    {30, 0, 1, 0, 5, 0},
-    {4, 230, 14, 0, 5, 0},
-    {6, 0, 14, 0, 5, 0},
-    {26, 0, 1, 0, 5, 0},
-    {21, 0, 19, 0, 5, 0},
-    {28, 0, 11, 0, 5, 0},
-    {4, 220, 14, 0, 5, 0},
-    {4, 222, 14, 0, 5, 0},
-    {4, 228, 14, 0, 5, 0},
-    {4, 10, 14, 0, 5, 0},
-    {4, 11, 14, 0, 5, 0},
-    {4, 12, 14, 0, 5, 0},
-    {4, 13, 14, 0, 5, 0},
-    {4, 14, 14, 0, 5, 0},
-    {4, 15, 14, 0, 5, 0},
-    {4, 16, 14, 0, 5, 0},
-    {4, 17, 14, 0, 5, 0},
-    {4, 18, 14, 0, 5, 0},
-    {4, 19, 14, 0, 5, 0},
-    {4, 20, 14, 0, 5, 0},
-    {4, 21, 14, 0, 5, 0},
-    {4, 22, 14, 0, 5, 0},
-    {21, 0, 4, 0, 5, 0},
-    {4, 23, 14, 0, 5, 0},
-    {26, 0, 4, 0, 5, 0},
-    {4, 24, 14, 0, 5, 0},
-    {4, 25, 14, 0, 5, 0},
-    {19, 0, 4, 0, 5, 0},
-    {14, 0, 12, 0, 5, 0},
-    {27, 0, 5, 0, 5, 0},
-    {26, 0, 11, 0, 5, 0},
-    {28, 0, 5, 0, 5, 0},
-    {26, 0, 13, 0, 5, 0},
-    {26, 0, 5, 0, 5, 0},
-    {4, 30, 14, 0, 5, 0},
-    {4, 31, 14, 0, 5, 0},
-    {4, 32, 14, 0, 5, 0},
-    {14, 0, 5, 0, 5, 0},
-    {19, 0, 5, 0, 5, 0},
-    {19, 0, 5, 0, 5, 10},
-    {18, 0, 5, 0, 5, 0},
-    {4, 27, 14, 0, 5, 0},
-    {4, 28, 14, 0, 5, 0},
-    {4, 29, 14, 0, 5, 0},
-    {4, 33, 14, 0, 5, 0},
-    {4, 34, 14, 0, 5, 0},
-    {4, 230, 14, 0, 5, 80},
-    {4, 220, 14, 0, 5, 80},
-    {7, 0, 12, 0, 5, 0},
-    {26, 0, 12, 0, 5, 0},
-    {4, 35, 14, 0, 5, 0},
-    {19, 0, 5, 0, 5, 136},
-    {7, 0, 9, 0, 5, 0},
-    {30, 0, 5, 0, 5, 0},
-    {4, 36, 14, 0, 5, 0},
-    {4, 0, 14, 0, 5, 0},
-    {7, 0, 4, 0, 5, 0},
-    {18, 0, 4, 0, 5, 0},
-    {26, 0, 19, 0, 5, 0},
-    {28, 0, 4, 0, 5, 0},
-    {29, 0, 5, 0, 5, 0},
-    {5, 0, 1, 0, 5, 0},
-    {19, 0, 1, 0, 5, 10},
-    {4, 7, 14, 0, 5, 80},
-    {4, 9, 14, 0, 5, 0},
-    {19, 0, 1, 0, 5, 170},
-    {7, 0, 1, 0, 5, 0},
-    {4, 7, 14, 0, 5, 0},
-    {5, 0, 1, 0, 5, 80},
-    {5, 0, 1, 0, 5, 10},
-    {9, 0, 1, 0, 5, 0},
-    {4, 0, 14, 0, 5, 80},
-    {4, 0, 14, 0, 5, 10},
-    {4, 84, 14, 0, 5, 0},
-    {4, 91, 14, 0, 5, 80},
-    {9, 0, 19, 0, 5, 0},
-    {4, 0, 1, 0, 5, 0},
-    {4, 9, 14, 0, 5, 80},
-    {19, 0, 1, 0, 5, 136},
-    {4, 103, 14, 0, 5, 0},
-    {4, 107, 14, 0, 5, 0},
-    {4, 118, 14, 0, 5, 0},
-    {4, 122, 14, 0, 5, 0},
-    {26, 0, 1, 0, 5, 136},
-    {4, 216, 14, 0, 5, 0},
-    {22, 0, 19, 1, 5, 0},
-    {23, 0, 19, 1, 5, 0},
-    {4, 129, 14, 0, 5, 0},
-    {4, 130, 14, 0, 5, 0},
-    {4, 0, 14, 0, 5, 170},
-    {4, 132, 14, 0, 5, 0},
-    {4, 0, 14, 0, 5, 136},
+    {30, 0, 1, 0, 0, 0},
+    {4, 230, 14, 0, 0, 0},
+    {6, 0, 14, 0, 0, 0},
+    {26, 0, 1, 0, 0, 0},
+    {21, 0, 19, 0, 0, 0},
+    {28, 0, 11, 0, 0, 0},
+    {4, 220, 14, 0, 0, 0},
+    {4, 222, 14, 0, 0, 0},
+    {4, 228, 14, 0, 0, 0},
+    {4, 10, 14, 0, 0, 0},
+    {4, 11, 14, 0, 0, 0},
+    {4, 12, 14, 0, 0, 0},
+    {4, 13, 14, 0, 0, 0},
+    {4, 14, 14, 0, 0, 0},
+    {4, 15, 14, 0, 0, 0},
+    {4, 16, 14, 0, 0, 0},
+    {4, 17, 14, 0, 0, 0},
+    {4, 18, 14, 0, 0, 0},
+    {4, 19, 14, 0, 0, 0},
+    {4, 20, 14, 0, 0, 0},
+    {4, 21, 14, 0, 0, 0},
+    {4, 22, 14, 0, 0, 0},
+    {21, 0, 4, 0, 0, 0},
+    {4, 23, 14, 0, 0, 0},
+    {26, 0, 4, 0, 0, 0},
+    {4, 24, 14, 0, 0, 0},
+    {4, 25, 14, 0, 0, 0},
+    {19, 0, 4, 0, 0, 0},
+    {14, 0, 12, 0, 0, 0},
+    {27, 0, 5, 0, 0, 0},
+    {26, 0, 11, 0, 0, 0},
+    {28, 0, 5, 0, 0, 0},
+    {26, 0, 13, 0, 0, 0},
+    {26, 0, 5, 0, 0, 0},
+    {4, 30, 14, 0, 0, 0},
+    {4, 31, 14, 0, 0, 0},
+    {4, 32, 14, 0, 0, 0},
+    {14, 0, 5, 0, 0, 0},
+    {19, 0, 5, 0, 0, 0},
+    {19, 0, 5, 0, 0, 10},
+    {18, 0, 5, 0, 0, 0},
+    {4, 27, 14, 0, 0, 0},
+    {4, 28, 14, 0, 0, 0},
+    {4, 29, 14, 0, 0, 0},
+    {4, 33, 14, 0, 0, 0},
+    {4, 34, 14, 0, 0, 0},
+    {4, 230, 14, 0, 0, 80},
+    {4, 220, 14, 0, 0, 80},
+    {7, 0, 12, 0, 0, 0},
+    {26, 0, 12, 0, 0, 0},
+    {4, 35, 14, 0, 0, 0},
+    {19, 0, 5, 0, 0, 136},
+    {7, 0, 9, 0, 0, 0},
+    {30, 0, 5, 0, 0, 0},
+    {4, 36, 14, 0, 0, 0},
+    {4, 0, 14, 0, 0, 0},
+    {7, 0, 4, 0, 0, 0},
+    {18, 0, 4, 0, 0, 0},
+    {26, 0, 19, 0, 0, 0},
+    {28, 0, 4, 0, 0, 0},
+    {29, 0, 5, 0, 0, 0},
+    {5, 0, 1, 0, 0, 0},
+    {19, 0, 1, 0, 0, 10},
+    {4, 7, 14, 0, 0, 80},
+    {4, 9, 14, 0, 0, 0},
+    {19, 0, 1, 0, 0, 170},
+    {7, 0, 1, 0, 0, 0},
+    {4, 7, 14, 0, 0, 0},
+    {5, 0, 1, 0, 0, 80},
+    {5, 0, 1, 0, 0, 10},
+    {9, 0, 1, 0, 0, 0},
+    {4, 0, 14, 0, 0, 80},
+    {4, 0, 14, 0, 0, 10},
+    {4, 84, 14, 0, 0, 0},
+    {4, 91, 14, 0, 0, 80},
+    {9, 0, 19, 0, 0, 0},
+    {4, 0, 1, 0, 0, 0},
+    {4, 9, 14, 0, 0, 80},
+    {19, 0, 1, 0, 0, 136},
+    {4, 103, 14, 0, 0, 0},
+    {4, 107, 14, 0, 0, 0},
+    {4, 118, 14, 0, 0, 0},
+    {4, 122, 14, 0, 0, 0},
+    {26, 0, 1, 0, 0, 136},
+    {4, 216, 14, 0, 0, 0},
+    {22, 0, 19, 1, 0, 0},
+    {23, 0, 19, 1, 0, 0},
+    {4, 129, 14, 0, 0, 0},
+    {4, 130, 14, 0, 0, 0},
+    {4, 0, 14, 0, 0, 170},
+    {4, 132, 14, 0, 0, 0},
+    {4, 0, 14, 0, 0, 136},
     {19, 0, 1, 0, 2, 0},
-    {19, 0, 1, 0, 5, 80},
-    {10, 0, 18, 0, 5, 0},
-    {8, 0, 1, 0, 5, 0},
-    {5, 9, 1, 0, 5, 0},
-    {14, 0, 15, 0, 5, 0},
-    {4, 1, 14, 0, 5, 0},
-    {4, 234, 14, 0, 5, 0},
-    {4, 214, 14, 0, 5, 0},
-    {4, 202, 14, 0, 5, 0},
-    {4, 232, 14, 0, 5, 0},
-    {4, 218, 14, 0, 5, 0},
-    {4, 233, 14, 0, 5, 0},
-    {2, 0, 1, 0, 5, 138},
-    {2, 0, 1, 0, 5, 170},
-    {3, 0, 1, 0, 5, 10},
-    {1, 0, 1, 0, 5, 170},
-    {29, 0, 19, 0, 5, 170},
-    {10, 0, 18, 0, 5, 170},
-    {10, 0, 18, 0, 5, 136},
-    {14, 0, 1, 0, 5, 0},
-    {14, 0, 4, 0, 5, 0},
+    {19, 0, 1, 0, 0, 80},
+    {10, 0, 18, 0, 0, 0},
+    {8, 0, 1, 0, 0, 0},
+    {5, 9, 1, 0, 0, 0},
+    {14, 0, 15, 0, 0, 0},
+    {4, 1, 14, 0, 0, 0},
+    {4, 234, 14, 0, 0, 0},
+    {4, 214, 14, 0, 0, 0},
+    {4, 202, 14, 0, 0, 0},
+    {4, 232, 14, 0, 0, 0},
+    {4, 218, 14, 0, 0, 0},
+    {4, 233, 14, 0, 0, 0},
+    {2, 0, 1, 0, 0, 138},
+    {2, 0, 1, 0, 0, 170},
+    {3, 0, 1, 0, 0, 10},
+    {1, 0, 1, 0, 0, 170},
+    {29, 0, 19, 0, 0, 170},
+    {10, 0, 18, 0, 0, 170},
+    {10, 0, 18, 0, 0, 136},
+    {14, 0, 1, 0, 0, 0},
+    {14, 0, 4, 0, 0, 0},
     {21, 0, 19, 0, 4, 0},
-    {21, 0, 19, 0, 5, 136},
-    {26, 0, 19, 0, 5, 136},
+    {21, 0, 19, 0, 0, 136},
+    {26, 0, 19, 0, 0, 136},
     {24, 0, 19, 0, 4, 0},
     {25, 0, 19, 0, 4, 0},
-    {22, 0, 19, 0, 5, 0},
-    {24, 0, 19, 0, 5, 0},
+    {22, 0, 19, 0, 0, 0},
+    {24, 0, 19, 0, 0, 0},
     {26, 0, 19, 0, 4, 136},
-    {11, 0, 18, 0, 5, 0},
-    {12, 0, 16, 0, 5, 0},
-    {14, 0, 2, 0, 5, 0},
-    {14, 0, 6, 0, 5, 0},
-    {14, 0, 8, 0, 5, 0},
-    {14, 0, 3, 0, 5, 0},
-    {14, 0, 7, 0, 5, 0},
+    {11, 0, 18, 0, 0, 0},
+    {12, 0, 16, 0, 0, 0},
+    {14, 0, 2, 0, 0, 0},
+    {14, 0, 6, 0, 0, 0},
+    {14, 0, 8, 0, 0, 0},
+    {14, 0, 3, 0, 0, 0},
+    {14, 0, 7, 0, 0, 0},
     {26, 0, 11, 0, 4, 0},
     {26, 0, 11, 0, 4, 136},
-    {26, 0, 11, 0, 5, 136},
-    {20, 0, 19, 0, 5, 0},
-    {27, 0, 13, 0, 5, 0},
-    {14, 0, 20, 0, 5, 0},
-    {14, 0, 21, 0, 5, 0},
-    {14, 0, 22, 0, 5, 0},
-    {14, 0, 23, 0, 5, 0},
-    {9, 0, 9, 0, 5, 136},
-    {27, 0, 10, 0, 5, 136},
-    {27, 0, 19, 0, 5, 136},
-    {22, 0, 19, 1, 5, 136},
-    {23, 0, 19, 1, 5, 136},
+    {26, 0, 11, 0, 0, 136},
+    {20, 0, 19, 0, 0, 0},
+    {27, 0, 13, 0, 0, 0},
+    {14, 0, 20, 0, 0, 0},
+    {14, 0, 21, 0, 0, 0},
+    {14, 0, 22, 0, 0, 0},
+    {14, 0, 23, 0, 0, 0},
+    {9, 0, 9, 0, 0, 136},
+    {27, 0, 10, 0, 0, 136},
+    {27, 0, 19, 0, 0, 136},
+    {22, 0, 19, 1, 0, 136},
+    {23, 0, 19, 1, 0, 136},
     {18, 0, 1, 0, 4, 136},
-    {28, 0, 11, 0, 5, 136},
+    {28, 0, 11, 0, 0, 136},
     {28, 0, 11, 0, 1, 0},
-    {30, 0, 19, 0, 5, 136},
+    {30, 0, 19, 0, 0, 136},
     {30, 0, 19, 0, 4, 136},
     {1, 0, 1, 0, 4, 170},
-    {30, 0, 11, 0, 5, 0},
-    {27, 0, 19, 1, 5, 136},
-    {9, 0, 19, 0, 5, 136},
+    {30, 0, 11, 0, 0, 0},
+    {27, 0, 19, 1, 0, 136},
+    {9, 0, 19, 0, 0, 136},
     {8, 0, 1, 0, 4, 136},
-    {8, 0, 1, 0, 5, 136},
-    {27, 0, 19, 0, 5, 10},
-    {30, 0, 19, 0, 5, 10},
-    {27, 0, 19, 1, 5, 0},
+    {8, 0, 1, 0, 0, 136},
+    {27, 0, 19, 0, 0, 10},
+    {30, 0, 19, 0, 0, 10},
+    {27, 0, 19, 1, 0, 0},
     {27, 0, 19, 1, 4, 0},
-    {27, 0, 19, 1, 5, 10},
-    {27, 0, 10, 0, 5, 0},
-    {27, 0, 11, 0, 5, 0},
+    {27, 0, 19, 1, 0, 10},
+    {27, 0, 10, 0, 0, 0},
+    {27, 0, 11, 0, 0, 0},
     {27, 0, 19, 1, 4, 136},
     {27, 0, 19, 1, 4, 10},
     {30, 0, 19, 0, 2, 0},
@@ -252,10 +252,10 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {30, 0, 1, 0, 4, 136},
     {9, 0, 19, 0, 4, 0},
     {27, 0, 19, 0, 2, 0},
-    {27, 0, 19, 1, 5, 170},
-    {30, 0, 19, 1, 5, 0},
+    {27, 0, 19, 1, 0, 170},
+    {30, 0, 19, 1, 0, 0},
     {30, 0, 19, 0, 2, 136},
-    {10, 0, 18, 0, 0, 136},
+    {10, 0, 18, 0, 5, 136},
     {26, 0, 19, 0, 2, 0},
     {18, 0, 1, 0, 2, 0},
     {8, 0, 1, 0, 2, 0},
@@ -280,15 +280,16 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {30, 0, 1, 0, 2, 136},
     {9, 0, 1, 0, 4, 0},
     {9, 0, 19, 0, 2, 136},
-    {29, 0, 1, 0, 5, 0},
-    {15, 0, 1, 0, 5, 0},
+    {29, 0, 1, 0, 0, 0},
+    {15, 0, 1, 0, 0, 0},
     {16, 0, 1, 0, 4, 0},
     {19, 0, 1, 0, 2, 170},
-    {19, 0, 4, 0, 5, 170},
-    {4, 26, 14, 0, 5, 0},
-    {19, 0, 4, 0, 5, 136},
-    {23, 0, 19, 0, 5, 0},
-    {28, 0, 5, 0, 5, 136},
+    {0, 0, 0, 0, 2, 0},
+    {19, 0, 4, 0, 0, 170},
+    {4, 26, 14, 0, 0, 0},
+    {19, 0, 4, 0, 0, 136},
+    {23, 0, 19, 0, 0, 0},
+    {28, 0, 5, 0, 0, 136},
     {26, 0, 19, 0, 2, 136},
     {22, 0, 19, 0, 2, 136},
     {23, 0, 19, 0, 2, 136},
@@ -303,47 +304,47 @@ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = {
     {27, 0, 19, 1, 2, 136},
     {27, 0, 19, 0, 2, 136},
     {28, 0, 11, 0, 2, 136},
-    {26, 0, 19, 0, 0, 136},
-    {26, 0, 11, 0, 0, 136},
-    {28, 0, 11, 0, 0, 136},
-    {22, 0, 19, 1, 0, 136},
-    {23, 0, 19, 1, 0, 136},
-    {27, 0, 10, 0, 0, 136},
-    {26, 0, 13, 0, 0, 136},
-    {21, 0, 10, 0, 0, 136},
-    {7, 0, 9, 0, 0, 136},
-    {27, 0, 19, 1, 0, 136},
-    {27, 0, 19, 0, 0, 136},
-    {1, 0, 1, 0, 0, 136},
-    {29, 0, 19, 0, 0, 136},
-    {20, 0, 19, 0, 0, 136},
-    {2, 0, 1, 0, 0, 136},
+    {26, 0, 19, 0, 5, 136},
+    {26, 0, 11, 0, 5, 136},
+    {28, 0, 11, 0, 5, 136},
+    {22, 0, 19, 1, 5, 136},
+    {23, 0, 19, 1, 5, 136},
+    {27, 0, 10, 0, 5, 136},
+    {26, 0, 13, 0, 5, 136},
+    {21, 0, 10, 0, 5, 136},
+    {7, 0, 9, 0, 5, 136},
+    {27, 0, 19, 1, 5, 136},
+    {27, 0, 19, 0, 5, 136},
+    {1, 0, 1, 0, 5, 136},
+    {29, 0, 19, 0, 5, 136},
+    {20, 0, 19, 0, 5, 136},
+    {2, 0, 1, 0, 5, 136},
     {26, 0, 19, 0, 1, 136},
     {22, 0, 19, 1, 1, 136},
     {23, 0, 19, 1, 1, 136},
     {19, 0, 1, 0, 1, 136},
     {18, 0, 1, 0, 1, 136},
-    {30, 0, 19, 0, 0, 136},
+    {30, 0, 19, 0, 5, 136},
     {30, 0, 19, 0, 1, 136},
     {27, 0, 19, 0, 1, 136},
-    {14, 0, 19, 0, 5, 0},
-    {8, 0, 19, 0, 5, 0},
-    {9, 0, 9, 0, 5, 0},
-    {9, 0, 4, 0, 5, 0},
-    {30, 0, 4, 0, 5, 0},
-    {1, 0, 4, 0, 5, 0},
-    {2, 0, 4, 0, 5, 0},
-    {9, 0, 12, 0, 5, 0},
-    {9, 0, 5, 0, 5, 0},
-    {4, 9, 1, 0, 5, 0},
+    {14, 0, 19, 0, 0, 0},
+    {8, 0, 19, 0, 0, 0},
+    {9, 0, 9, 0, 0, 0},
+    {9, 0, 4, 0, 0, 0},
+    {30, 0, 4, 0, 0, 0},
+    {1, 0, 4, 0, 0, 0},
+    {2, 0, 4, 0, 0, 0},
+    {9, 0, 12, 0, 0, 0},
+    {9, 0, 5, 0, 0, 0},
+    {4, 9, 1, 0, 0, 0},
     {4, 0, 14, 0, 2, 0},
     {5, 6, 1, 0, 2, 0},
-    {30, 0, 1, 0, 5, 170},
-    {5, 216, 1, 0, 5, 0},
-    {5, 226, 1, 0, 5, 0},
-    {27, 0, 1, 0, 5, 136},
-    {7, 0, 9, 0, 5, 136},
-    {30, 0, 1, 0, 5, 136},
+    {30, 0, 1, 0, 0, 170},
+    {5, 216, 1, 0, 0, 0},
+    {5, 226, 1, 0, 0, 0},
+    {27, 0, 1, 0, 0, 136},
+    {7, 0, 9, 0, 0, 136},
+    {30, 0, 1, 0, 0, 136},
     {30, 0, 1, 0, 4, 0},
     {29, 0, 19, 0, 2, 0},
 };
@@ -674,12 +675,12 @@ const char *_PyUnicode_BidirectionalNames[] = {
     NULL
 };
 const char *_PyUnicode_EastAsianWidthNames[] = {
-    "F",
+    "N",
     "H",
     "W",
     "Na",
     "A",
-    "N",
+    "F",
     NULL
 };
 static const char *decomp_prefix[] = {
@@ -809,38 +810,46 @@ static const unsigned short index1[] = {
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 267, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    121, 121, 121, 121, 268, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+    101, 101, 101, 267, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    121, 121, 121, 121, 269, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 270, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
     101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
-    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 269, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+    101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 271, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+    268, 268, 268, 268, 268, 268, 268, 268, 268, 270, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
@@ -1206,15 +1215,7 @@ static const unsigned short index1[] = {
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
-    137, 137, 137, 137, 137, 137, 270, 137, 271, 272, 137, 137, 137, 137,
+    137, 137, 137, 137, 137, 137, 272, 137, 273, 274, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
     137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
@@ -1287,7 +1288,7 @@ static const unsigned short index1[] = {
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
-    120, 120, 120, 120, 120, 120, 120, 273, 120, 120, 120, 120, 120, 120,
+    120, 120, 120, 120, 120, 120, 120, 275, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
@@ -1324,7 +1325,7 @@ static const unsigned short index1[] = {
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
     120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
-    120, 273,
+    120, 275,
 };
 
 static const unsigned short index2[] = {
@@ -2259,7 +2260,7 @@ static const unsigned short index2[] = {
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
-    280, 280, 280, 280, 280, 280, 0, 0, 280, 280, 280, 280, 280, 280, 280,
+    280, 280, 280, 280, 280, 280, 281, 281, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
@@ -2267,22 +2268,23 @@ static const unsigned short index2[] = {
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
-    280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 35, 35,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0,
-    281, 282, 281, 283, 283, 283, 283, 283, 283, 283, 283, 283, 219, 281,
-    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 0, 281, 281,
-    281, 281, 281, 0, 281, 0, 281, 281, 0, 281, 281, 0, 281, 281, 281, 281,
-    281, 281, 281, 281, 281, 283, 131, 131, 131, 131, 131, 131, 131, 131,
+    280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 35, 35, 35,
+    35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 35, 35, 35, 35,
+    0, 0, 0, 0, 0, 282, 283, 282, 284, 284, 284, 284, 284, 284, 284, 284,
+    284, 219, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
+    282, 0, 282, 282, 282, 282, 282, 0, 282, 0, 282, 282, 0, 282, 282, 0,
+    282, 282, 282, 282, 282, 282, 282, 282, 282, 284, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 131, 140, 140, 140, 140, 140, 140, 140, 140,
-    140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 140, 140, 140, 140,
+    140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
@@ -2299,26 +2301,26 @@ static const unsigned short index2[] = {
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 284, 199, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 285, 199, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+    26, 26, 26, 26, 26, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 285, 26, 26, 26, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-    71, 71, 71, 286, 286, 286, 286, 286, 286, 286, 287, 288, 286, 0, 0, 0, 0,
-    0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86, 86, 86, 81, 81,
-    286, 289, 289, 290, 290, 287, 288, 287, 288, 287, 288, 287, 288, 287,
-    288, 287, 288, 287, 288, 287, 288, 253, 253, 287, 288, 286, 286, 286,
-    286, 290, 290, 290, 291, 286, 291, 0, 286, 291, 286, 286, 289, 292, 293,
-    292, 293, 292, 293, 294, 286, 286, 295, 296, 297, 297, 298, 0, 286, 299,
-    294, 286, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131, 131, 131, 131,
+    131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 0,
+    0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 131, 131,
+    131, 131, 131, 131, 286, 26, 26, 26, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+    71, 71, 71, 71, 71, 71, 71, 287, 287, 287, 287, 287, 287, 287, 288, 289,
+    287, 0, 0, 0, 0, 0, 0, 81, 81, 81, 81, 81, 81, 81, 86, 86, 86, 86, 86,
+    86, 86, 81, 81, 287, 290, 290, 291, 291, 288, 289, 288, 289, 288, 289,
+    288, 289, 288, 289, 288, 289, 288, 289, 288, 289, 253, 253, 288, 289,
+    287, 287, 287, 287, 291, 291, 291, 292, 287, 292, 0, 287, 292, 287, 287,
+    290, 293, 294, 293, 294, 293, 294, 295, 287, 287, 296, 297, 298, 298,
+    299, 0, 287, 300, 295, 287, 0, 0, 0, 0, 131, 131, 131, 118, 131, 0, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
@@ -2328,278 +2330,278 @@ static const unsigned short index2[] = {
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
     131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
-    131, 131, 131, 131, 131, 0, 0, 177, 0, 300, 300, 301, 302, 301, 300, 300,
-    303, 304, 300, 305, 306, 307, 306, 306, 308, 308, 308, 308, 308, 308,
-    308, 308, 308, 308, 306, 300, 309, 310, 309, 300, 300, 311, 311, 311,
-    311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311,
-    311, 311, 311, 311, 311, 311, 311, 311, 311, 303, 300, 304, 312, 313,
-    312, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314,
-    314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 303,
-    310, 304, 310, 303, 304, 315, 316, 317, 315, 315, 318, 318, 318, 318,
-    318, 318, 318, 318, 318, 318, 319, 318, 318, 318, 318, 318, 318, 318,
-    318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
-    318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
-    318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 319, 319, 318, 318,
-    318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
-    318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318,
-    318, 0, 0, 0, 318, 318, 318, 318, 318, 318, 0, 0, 318, 318, 318, 318,
-    318, 318, 0, 0, 318, 318, 318, 318, 318, 318, 0, 0, 318, 318, 318, 0, 0,
-    0, 302, 302, 310, 312, 320, 302, 302, 0, 321, 322, 322, 322, 322, 321,
-    321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 323, 323, 26, 30, 0, 0, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    131, 131, 131, 131, 131, 131, 131, 131, 0, 0, 177, 0, 301, 301, 302, 303,
+    302, 301, 301, 304, 305, 301, 306, 307, 308, 307, 307, 309, 309, 309,
+    309, 309, 309, 309, 309, 309, 309, 307, 301, 310, 311, 310, 301, 301,
+    312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
+    312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 304, 301,
+    305, 313, 314, 313, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
+    315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
+    315, 315, 304, 311, 305, 311, 304, 305, 316, 317, 318, 316, 316, 319,
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 320, 319, 319, 319, 319,
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 320,
+    320, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
+    319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
+    319, 319, 319, 319, 0, 0, 0, 319, 319, 319, 319, 319, 319, 0, 0, 319,
+    319, 319, 319, 319, 319, 0, 0, 319, 319, 319, 319, 319, 319, 0, 0, 319,
+    319, 319, 0, 0, 0, 303, 303, 311, 313, 321, 303, 303, 0, 322, 323, 323,
+    323, 323, 322, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 324, 324, 26, 30,
+    0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 150, 150, 150,
+    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 83, 138, 83, 0, 0, 0, 0, 150,
     150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
     150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
-    150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 0,
-    0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 324, 324, 324, 324, 324, 324,
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
-    324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
-    324, 324, 324, 324, 324, 155, 155, 155, 155, 26, 26, 26, 26, 26, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 155, 155, 26, 80, 80, 0, 26, 26,
-    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80,
+    150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
+    150, 150, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 325, 325, 325,
+    325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+    325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+    325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+    325, 325, 325, 325, 325, 325, 325, 325, 155, 155, 155, 155, 26, 26, 26,
+    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 155, 155, 26, 80,
+    80, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 26,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    80, 80, 80, 80, 80, 80, 80, 80, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 325, 325, 325,
-    325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
-    325, 325, 325, 325, 325, 325, 325, 325, 325, 325, 0, 0, 0, 0, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 150, 150, 150, 150, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 175, 48, 48, 48, 48, 48, 48, 48, 48, 175, 0, 0,
-    0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86,
+    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
+    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 0, 0, 0,
+    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 150, 150,
+    150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 175, 48, 48, 48, 48, 48, 48,
+    48, 48, 175, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 83, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
-    48, 48, 83, 175, 175, 175, 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 48,
+    48, 48, 48, 48, 48, 48, 48, 83, 175, 175, 175, 175, 175, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 47, 47, 47, 47,
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0,
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    48, 48, 48, 48, 48, 48, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146,
+    146, 146, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
-    0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47,
     47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
-    47, 47, 47, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0,
+    0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 83, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 44,
-    44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, 44,
-    44, 44, 44, 0, 44, 44, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,
-    47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47,
-    47, 47, 47, 47, 47, 0, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 44, 44, 44, 44, 44, 44, 44,
+    44, 44, 44, 44, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
+    44, 44, 0, 44, 44, 44, 44, 44, 44, 44, 0, 44, 44, 0, 47, 47, 47, 47, 47,
+    47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+    47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 51, 51, 51, 51,
-    51, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48,
+    48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 53, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
     51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
-    51, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0,
+    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 51, 51, 51, 51,
+    51, 51, 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107,
-    107, 107, 107, 107, 0, 0, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107,
+    0, 0, 0, 107, 107, 107, 107, 107, 107, 0, 0, 107, 0, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 107, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 107, 107,
+    0, 0, 0, 107, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 104,
+    327, 327, 327, 327, 327, 327, 327, 327, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 104, 326, 326, 326, 326,
-    326, 326, 326, 326, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 327,
-    327, 326, 326, 326, 326, 326, 326, 326, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 328, 328, 327, 327, 327, 327, 327, 327, 327, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0,
-    0, 0, 326, 326, 326, 326, 326, 326, 326, 326, 326, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 0, 107, 107, 0, 0, 0, 0, 0, 326, 326, 326, 326, 326, 107, 107, 107,
+    107, 0, 0, 0, 0, 0, 0, 0, 0, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 326, 326, 326, 326, 326, 326, 0, 0, 0, 138, 107,
+    107, 107, 107, 107, 107, 0, 107, 107, 0, 0, 0, 0, 0, 327, 327, 327, 327,
+    327, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 327, 327, 327, 327, 327,
+    327, 0, 0, 0, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0,
-    104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 326, 326,
-    107, 107, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
-    326, 326, 326, 326, 0, 0, 326, 326, 326, 326, 326, 326, 326, 326, 326,
-    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
-    326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
-    326, 326, 326, 326, 326, 326, 326, 326, 326, 107, 135, 135, 135, 0, 135,
-    135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, 107, 107, 107, 0, 107, 107,
-    107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 0, 0, 81, 178, 86, 0, 0, 0, 0, 144, 326, 326, 326, 326, 326,
-    326, 326, 326, 326, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, 104,
-    104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0,
+    0, 0, 0, 327, 327, 107, 107, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+    327, 327, 327, 327, 327, 327, 327, 0, 0, 327, 327, 327, 327, 327, 327,
+    327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+    327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+    327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 107, 135,
+    135, 135, 0, 135, 135, 0, 0, 0, 0, 0, 135, 86, 135, 81, 107, 107, 107,
+    107, 0, 107, 107, 107, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 326, 326, 104, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 0, 0, 81, 178, 86, 0, 0, 0, 0, 144, 327,
+    327, 327, 327, 327, 327, 327, 327, 327, 0, 0, 0, 0, 0, 0, 0, 104, 104,
+    104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 326, 326,
-    326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 327,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 327, 327,
+    104, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81,
-    86, 0, 0, 0, 0, 326, 326, 326, 326, 326, 104, 104, 104, 104, 104, 104,
-    104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 327, 327, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107,
+    107, 107, 107, 328, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 81, 86, 0, 0, 0, 0, 327, 327, 327, 327, 327, 104,
+    104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 0, 0, 326, 326, 326, 326, 326, 326, 326,
-    326, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 326, 326, 326, 326, 326,
-    326, 326, 326, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 104, 104, 104,
-    104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 326, 326, 326, 326, 326,
-    326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 138, 138, 138, 138,
+    138, 138, 138, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 327, 327,
+    327, 327, 327, 327, 327, 327, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0,
+    327, 327, 327, 327, 327, 327, 327, 327, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0,
+    0, 0, 0, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
+    327, 327, 327, 327, 327, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
     329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
     329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
-    329, 329, 329, 329, 329, 329, 329, 329, 329, 0, 0, 0, 0, 0, 0, 0, 326,
-    326, 326, 326, 326, 326, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+    329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 0, 0, 0,
+    0, 0, 0, 0, 327, 327, 327, 327, 327, 327, 118, 118, 118, 118, 118, 118,
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
     118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
-    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 81, 81,
-    81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128,
-    128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    118, 118, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128,
+    128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
-    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
-    330, 330, 330, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    0, 0, 0, 0, 0, 0, 0, 0, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
+    331, 331, 331, 331, 331, 331, 331, 0, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 0, 81, 81, 102, 0, 0, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 107, 0, 81, 81, 102, 0, 0, 107, 107, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 326,
-    326, 326, 326, 326, 326, 326, 326, 326, 326, 107, 0, 0, 0, 0, 0, 0, 0, 0,
-    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
-    118, 118, 118, 118, 118, 118, 118, 118, 86, 86, 81, 81, 81, 86, 81, 86,
-    86, 86, 86, 331, 331, 331, 331, 113, 113, 113, 113, 113, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 81,
-    86, 81, 86, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 107, 326, 326, 326, 326, 326, 326, 326, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107,
+    107, 107, 107, 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, 107, 0,
+    0, 0, 0, 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118,
+    118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 86, 86, 81,
+    81, 81, 86, 81, 86, 86, 86, 86, 332, 332, 332, 332, 113, 113, 113, 113,
+    113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 135, 141,
+    107, 107, 107, 107, 81, 86, 81, 86, 104, 104, 104, 104, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 327, 327, 327,
+    327, 327, 327, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+    107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 141, 135, 141, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 144, 83,
-    83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 155, 155, 155, 155, 155, 155, 155,
-    155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 146,
-    146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 48, 48, 135, 135, 48,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 135, 135, 141, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 142,
-    48, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 142, 48,
-    48, 48, 48, 141, 141, 141, 135, 135, 135, 135, 141, 141, 144, 143, 83,
-    83, 192, 83, 83, 83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 0, 0,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146,
-    146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 151, 135, 135,
-    135, 135, 141, 135, 152, 152, 135, 135, 135, 144, 144, 0, 146, 146, 146,
-    146, 146, 146, 146, 146, 146, 146, 83, 83, 83, 83, 48, 141, 141, 48, 0,
-    0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    135, 135, 144, 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, 0, 155, 155, 155,
+    155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+    155, 155, 155, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 144, 48,
+    48, 135, 135, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 135, 135, 141, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 147, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 135,
-    141, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 142, 48, 142, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 142, 48, 48, 48, 48, 141, 141, 141, 135, 135, 135, 135, 141, 141,
+    144, 143, 83, 83, 192, 83, 83, 83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    192, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 146, 146,
+    146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0, 81, 81, 81, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 151,
+    135, 135, 135, 135, 141, 135, 152, 152, 135, 135, 135, 144, 144, 0, 146,
+    146, 146, 146, 146, 146, 146, 146, 146, 146, 83, 83, 83, 83, 48, 141,
+    141, 48, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 141, 141, 141, 135,
-    135, 135, 135, 135, 135, 135, 135, 135, 141, 176, 48, 48, 48, 48, 83, 83,
-    83, 83, 135, 147, 135, 135, 83, 141, 135, 146, 146, 146, 146, 146, 146,
-    146, 146, 146, 146, 48, 83, 48, 83, 83, 83, 0, 150, 150, 150, 150, 150,
+    48, 48, 48, 48, 48, 48, 48, 147, 83, 83, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    135, 135, 141, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 141, 141,
+    141, 135, 135, 135, 135, 135, 135, 135, 135, 135, 141, 176, 48, 48, 48,
+    48, 83, 83, 83, 83, 135, 147, 135, 135, 83, 141, 135, 146, 146, 146, 146,
+    146, 146, 146, 146, 146, 146, 48, 83, 48, 83, 83, 83, 0, 150, 150, 150,
     150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
-    150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 141,
-    141, 141, 135, 135, 135, 141, 141, 135, 176, 147, 135, 83, 83, 83, 83,
-    83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    150, 150, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 141, 141, 141, 135, 135, 135, 141, 141, 135, 176, 147, 135, 83,
+    83, 83, 83, 83, 83, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48,
-    48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 83, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 0, 48, 48, 48, 48, 0, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 83, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    135, 141, 141, 141, 135, 135, 135, 135, 135, 135, 147, 144, 0, 0, 0, 0,
-    0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, 0, 0, 0,
-    135, 135, 141, 141, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48, 48, 0,
-    0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
-    48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48, 48,
-    48, 48, 48, 0, 147, 147, 48, 148, 141, 135, 141, 141, 141, 141, 0, 0,
+    48, 48, 48, 135, 141, 141, 141, 135, 135, 135, 135, 135, 135, 147, 144,
+    0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 0, 0,
+    0, 0, 0, 135, 135, 141, 141, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 48,
+    48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+    48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 0, 48,
+    48, 48, 48, 48, 0, 147, 147, 48, 148, 141, 135, 141, 141, 141, 141, 0, 0,
     141, 141, 0, 0, 149, 149, 176, 0, 0, 48, 0, 0, 0, 0, 0, 0, 148, 0, 0, 0,
     0, 0, 48, 48, 48, 48, 48, 141, 141, 0, 0, 81, 81, 81, 81, 81, 81, 81, 0,
     0, 0, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48,
@@ -2688,7 +2690,7 @@ static const unsigned short index2[] = {
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
     141, 135, 135, 135, 135, 135, 135, 135, 0, 135, 135, 135, 135, 135, 135,
-    141, 332, 48, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146,
+    141, 333, 48, 83, 83, 83, 83, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146,
     146, 146, 146, 146, 146, 146, 146, 146, 150, 150, 150, 150, 150, 150,
     150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 0, 0, 0,
     83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
@@ -2815,7 +2817,7 @@ static const unsigned short index2[] = {
     53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 254,
-    253, 254, 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334, 334, 0, 0, 0, 0, 0,
+    253, 254, 334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335, 335, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
@@ -2899,13 +2901,13 @@ static const unsigned short index2[] = {
     80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 80, 80, 80, 80, 80, 80, 80, 80, 335, 335, 335, 335, 335, 335, 335,
-    336, 336, 178, 178, 178, 80, 80, 80, 337, 336, 336, 336, 336, 336, 177,
+    80, 80, 80, 80, 80, 80, 80, 80, 80, 336, 336, 336, 336, 336, 336, 336,
+    337, 337, 178, 178, 178, 80, 80, 80, 338, 337, 337, 337, 337, 337, 177,
     177, 177, 177, 177, 177, 177, 177, 86, 86, 86, 86, 86, 86, 86, 86, 80,
     80, 81, 81, 81, 81, 81, 86, 86, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
-    80, 335, 335, 335, 335, 335, 335, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
+    80, 336, 336, 336, 336, 336, 336, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 26, 26, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26,
@@ -2966,26 +2968,26 @@ static const unsigned short index2[] = {
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 338, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 339, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 230, 35, 35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    338, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    339, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 230, 35, 35, 35, 35, 35, 35, 49, 49, 49,
     49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 338, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    49, 49, 49, 49, 339, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 230, 35, 35, 35, 35, 35,
     35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 338, 35, 35, 35, 35, 35, 35, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 49, 339, 35, 35, 35, 35, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 230, 35,
     35, 35, 35, 35, 35, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
-    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 338, 35, 35, 35, 35, 35,
+    49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 339, 35, 35, 35, 35, 35,
     35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
-    35, 35, 230, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 339, 339, 339, 339,
-    339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
-    339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
-    339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339,
-    339, 339, 339, 339, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+    35, 35, 230, 35, 35, 35, 35, 35, 35, 49, 35, 0, 0, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 340, 340, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
     135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
@@ -3044,35 +3046,35 @@ static const unsigned short index2[] = {
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
     107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
-    107, 107, 107, 107, 107, 107, 0, 0, 326, 326, 326, 326, 326, 326, 326,
-    326, 326, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    107, 107, 107, 107, 107, 107, 0, 0, 327, 327, 327, 327, 327, 327, 327,
+    327, 327, 86, 86, 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328,
-    328, 328, 328, 328, 328, 328, 328, 328, 328, 329, 329, 329, 329, 329,
+    0, 0, 0, 0, 0, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
     329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
-    329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329,
-    329, 81, 81, 81, 81, 81, 81, 147, 137, 0, 0, 0, 0, 136, 136, 136, 136,
+    329, 329, 329, 329, 329, 329, 329, 329, 329, 330, 330, 330, 330, 330,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330,
+    330, 81, 81, 81, 81, 81, 81, 147, 137, 0, 0, 0, 0, 136, 136, 136, 136,
     136, 136, 136, 136, 136, 136, 0, 0, 0, 0, 104, 104, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 133,
-    331, 331, 331, 111, 331, 331, 331, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 133,
+    332, 332, 332, 111, 332, 332, 332, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 133,
-    331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, 331,
-    331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 133,
+    332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332,
+    332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, 131, 131,
     131, 0, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
@@ -3106,16 +3108,16 @@ static const unsigned short index2[] = {
     0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 155, 155, 26, 26, 26,
     246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
     246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
-    246, 246, 340, 26, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+    246, 246, 341, 26, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
     246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
-    246, 246, 246, 246, 246, 246, 246, 341, 341, 341, 341, 341, 341, 341,
-    341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
-    341, 341, 341, 341, 341, 226, 226, 226, 26, 26, 26, 341, 341, 341, 341,
-    341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
-    341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 272, 341,
-    246, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 341, 341, 341,
-    341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
-    341, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    246, 246, 246, 246, 246, 246, 246, 342, 342, 342, 342, 342, 342, 342,
+    342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+    342, 342, 342, 342, 342, 226, 226, 226, 26, 26, 26, 342, 342, 342, 342,
+    342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+    342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 272, 342,
+    246, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 342, 342, 342,
+    342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342,
+    342, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
     80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 274, 274,
@@ -3142,8 +3144,8 @@ static const unsigned short index2[] = {
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 26, 26,
     26, 26, 243, 243, 243, 243, 243, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
-    243, 243, 243, 243, 26, 26, 26, 243, 26, 26, 26, 243, 243, 243, 342, 342,
-    342, 342, 342, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+    243, 243, 243, 243, 26, 26, 26, 243, 26, 26, 26, 243, 243, 243, 343, 343,
+    343, 343, 343, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
     243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
@@ -3265,27 +3267,28 @@ static const unsigned short index2[] = {
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
     26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 339, 339, 339, 339, 339, 339, 339,
-    339, 339, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, 340, 340,
+    340, 340, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+    172, 172, 172, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+    172, 172, 172, 172, 172, 172, 172, 172, 281, 281, 281, 281, 281, 281,
+    281, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 172, 172, 172, 172, 172,
+    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
@@ -3294,9 +3297,9 @@ static const unsigned short index2[] = {
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+    172, 172, 172, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
@@ -3308,30 +3311,55 @@ static const unsigned short index2[] = {
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
+    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
     280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
-    280, 280, 280, 280, 280, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172,
+    280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
     172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
-    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+    172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+    281, 281, 281, 281, 281, 281, 281, 281, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
     177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177,
-    177, 177, 177, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
+    177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 71, 71, 71, 71,
+    71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
@@ -3344,8 +3372,7 @@ static const unsigned short index2[] = {
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
     71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-    71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-    0, 0, 0, 0, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
+    71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 279, 279,
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
@@ -3354,7 +3381,7 @@ static const unsigned short index2[] = {
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
     279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
-    279, 279, 279, 0, 0,
+    279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 0,
 };
 
 /* decomposition data */
@@ -5939,7 +5966,7 @@ static const change_record change_records_3_2_0[] = {
     { 19, 30, 255, 255, 255, 0 },
     { 255, 8, 255, 255, 255, 0 },
     { 255, 27, 255, 255, 255, 0 },
-    { 255, 255, 255, 255, 5, 0 },
+    { 255, 255, 255, 255, 0, 0 },
     { 255, 22, 255, 255, 255, 0 },
     { 255, 23, 255, 255, 255, 0 },
     { 9, 255, 255, 255, 255, 0 },
index f28266f390c18f9d52135ec5561dedc846fb2568..c30175929d60f557fe7373709262121eb5b437df 100644 (file)
@@ -77,7 +77,8 @@ BIDIRECTIONAL_NAMES = [ "", "L", "LRE", "LRO", "R", "AL", "RLE", "RLO",
     "PDF", "EN", "ES", "ET", "AN", "CS", "NSM", "BN", "B", "S", "WS",
     "ON", "LRI", "RLI", "FSI", "PDI" ]
 
-EASTASIANWIDTH_NAMES = [ "F", "H", "W", "Na", "A", "N" ]
+# "N" needs to be the first entry, see the comment in makeunicodedata
+EASTASIANWIDTH_NAMES = [ "N", "H", "W", "Na", "A", "F" ]
 
 MANDATORY_LINE_BREAKS = [ "BK", "CR", "LF", "NL" ]
 
@@ -135,6 +136,14 @@ def maketables(trace=0):
 
 def makeunicodedata(unicode, trace):
 
+    # the default value of east_asian_width is "N", for unassigned code points
+    # not mentioned in EastAsianWidth.txt
+    # in addition there are some reserved but unassigned code points in CJK
+    # ranges that are classified as "W". code points in private use areas
+    # have a width of "A". both of these have entries in
+    # EastAsianWidth.txt
+    # see https://unicode.org/reports/tr11/#Unassigned
+    assert EASTASIANWIDTH_NAMES[0] == "N"
     dummy = (0, 0, 0, 0, 0, 0)
     table = [dummy]
     cache = {0: dummy}
@@ -160,12 +169,20 @@ def makeunicodedata(unicode, trace):
                 category, combining, bidirectional, mirrored, eastasianwidth,
                 normalizationquickcheck
                 )
-            # add entry to index and item tables
-            i = cache.get(item)
-            if i is None:
-                cache[item] = i = len(table)
-                table.append(item)
-            index[char] = i
+        elif unicode.widths[char] is not None:
+            # an unassigned but reserved character, with a known
+            # east_asian_width
+            eastasianwidth = EASTASIANWIDTH_NAMES.index(unicode.widths[char])
+            item = (0, 0, 0, 0, eastasianwidth, 0)
+        else:
+            continue
+
+        # add entry to index and item tables
+        i = cache.get(item)
+        if i is None:
+            cache[item] = i = len(table)
+            table.append(item)
+        index[char] = i
 
     # 2) decomposition data
 
@@ -1085,6 +1102,7 @@ class UnicodeData:
         for i in range(0, 0x110000):
             if table[i] is not None:
                 table[i].east_asian_width = widths[i]
+        self.widths = widths
 
         for char, (p,) in UcdFile(DERIVED_CORE_PROPERTIES, version).expanded():
             if table[char]: