Package: release.debian.org
Severity: normal
Tags: bookworm
X-Debbugs-Cc: python-i...@packages.debian.org
Control: affects -1 + src:python-idna
User: release.debian....@packages.debian.org
Usertags: pu

[ Reason ]

Fix CVE-2024-3651: Specially crafted inputs to idna.encode() can consume
significant resources, which may lead to denial of service.

The Security Team argued the vulnerability doesn't warrant a DSA.

[ Impact ]

The vulnerability was fixed in Buster LTS, and users upgrading to
≥Bullseye will regress if it isn't fixed to all recent suites.

[ Tests ]

A PoC can be found at https://bugzilla.redhat.com/show_bug.cgi?id=2274779 .
I successfully ran it locally, but didn't turn it into a DEP-8 or build
time test as it's unclear what the right time threshold would be on o
the buildds.  The upstream test suite still runs fine before and after
the change.

[ Risks ]

The debdiff is long because it includes the diff for generated idna/idnadata.py
(`tools/idna-data --dir idna --no-cache --version 14.0.0 make-libdata`),
but beyond that the change is trival and matches the upstream fix.

[ Checklist ]

  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in oldstable
  [x] the issue is verified as fixed in unstable

[ Changes ]

Fix CVE-2024-3651: Specially crafted inputs to idna.encode() can consume
significant resources, which may lead to denial of service.
(Closes: #1069127)

-- 
Guilhem.
diffstat for python-idna-3.3 python-idna-3.3

 changelog                   |    9 
 patches/CVE-2024-3651.patch | 2479 ++++++++++++++++++++++++++++++++++++++++++++
 patches/series              |    1 
 salsa-ci.yml                |    8 
 4 files changed, 2497 insertions(+)

diff -Nru python-idna-3.3/debian/changelog python-idna-3.3/debian/changelog
--- python-idna-3.3/debian/changelog    2022-02-16 12:45:05.000000000 +0100
+++ python-idna-3.3/debian/changelog    2024-05-30 14:31:22.000000000 +0200
@@ -1,3 +1,12 @@
+python-idna (3.3-1+deb12u1) bookworm; urgency=high
+
+  * Non-maintainer upload.
+  * Fix CVE-2024-3651: Specially crafted inputs to idna.encode() can consume
+    significant resources, which may lead to denial of service.
+    (Closes: #1069127)
+
+ -- Guilhem Moulin <guil...@debian.org>  Thu, 30 May 2024 14:31:22 +0200
+
 python-idna (3.3-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru python-idna-3.3/debian/patches/CVE-2024-3651.patch 
python-idna-3.3/debian/patches/CVE-2024-3651.patch
--- python-idna-3.3/debian/patches/CVE-2024-3651.patch  1970-01-01 
01:00:00.000000000 +0100
+++ python-idna-3.3/debian/patches/CVE-2024-3651.patch  2024-05-30 
14:31:22.000000000 +0200
@@ -0,0 +1,2479 @@
+From: Kim Davies <k...@cynosure.com.au>
+Date: Mon, 1 Apr 2024 20:24:57 -0700
+Subject: More efficient resolution of joiner contexts
+
+In some pathological cases, this would out eligibility under
+CONTEXTJ rules much faster.
+
+Generated idna/idnadata.py (and idna/uts46data.py) files were updated
+with `tools/idna-data --dir idna --no-cache --version 14.0.0 make-libdata`.
+
+Origin: 
https://github.com/kjd/idna/commit/5beb28b9dd77912c0dd656d8b0fdba3eb80222e7
+Bug: https://github.com/kjd/idna/security/advisories/GHSA-jjg7-2v4v-x38h
+Bug: https://bugzilla.redhat.com/show_bug.cgi?id=2274779
+Bug-Debian: https://security-tracker.debian.org/tracker/CVE-2024-3651
+Bug-Debian: https://bugs.debian.org/1069127
+---
+ idna/core.py     |   16 +-
+ idna/idnadata.py | 2162 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ tools/idna-data  |   13 +-
+ 3 files changed, 2124 insertions(+), 67 deletions(-)
+
+diff --git a/idna/core.py b/idna/core.py
+index 55ab967..c6aa30a 100644
+--- a/idna/core.py
++++ b/idna/core.py
+@@ -150,9 +150,11 @@ def valid_contextj(label: str, pos: int) -> bool:
+             joining_type = idnadata.joining_types.get(ord(label[i]))
+             if joining_type == ord('T'):
+                 continue
+-            if joining_type in [ord('L'), ord('D')]:
++            elif joining_type in [ord('L'), ord('D')]:
+                 ok = True
+                 break
++            else:
++                break
+ 
+         if not ok:
+             return False
+@@ -162,9 +164,11 @@ def valid_contextj(label: str, pos: int) -> bool:
+             joining_type = idnadata.joining_types.get(ord(label[i]))
+             if joining_type == ord('T'):
+                 continue
+-            if joining_type in [ord('R'), ord('D')]:
++            elif joining_type in [ord('R'), ord('D')]:
+                 ok = True
+                 break
++            else:
++                break
+         return ok
+ 
+     if cp_value == 0x200d:
+@@ -236,12 +240,8 @@ def check_label(label: Union[str, bytes, bytearray]) -> 
None:
+         if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
+             continue
+         elif intranges_contain(cp_value, 
idnadata.codepoint_classes['CONTEXTJ']):
+-            try:
+-                if not valid_contextj(label, pos):
+-                    raise InvalidCodepointContext('Joiner {} not allowed at 
position {} in {}'.format(
+-                        _unot(cp_value), pos+1, repr(label)))
+-            except ValueError:
+-                raise IDNAError('Unknown codepoint adjacent to joiner {} at 
position {} in {}'.format(
++            if not valid_contextj(label, pos):
++                raise InvalidCodepointContext('Joiner {} not allowed at 
position {} in {}'.format(
+                     _unot(cp_value), pos+1, repr(label)))
+         elif intranges_contain(cp_value, 
idnadata.codepoint_classes['CONTEXTO']):
+             if not valid_contexto(label, pos):
+diff --git a/idna/idnadata.py b/idna/idnadata.py
+index 1b5805d..ab77625 100644
+--- a/idna/idnadata.py
++++ b/idna/idnadata.py
+@@ -97,16 +97,190 @@ scripts = {
+     ),
+ }
+ joining_types = {
+-    0x600: 85,
+-    0x601: 85,
+-    0x602: 85,
+-    0x603: 85,
+-    0x604: 85,
+-    0x605: 85,
+-    0x608: 85,
+-    0x60b: 85,
++    0xad: 84,
++    0x300: 84,
++    0x301: 84,
++    0x302: 84,
++    0x303: 84,
++    0x304: 84,
++    0x305: 84,
++    0x306: 84,
++    0x307: 84,
++    0x308: 84,
++    0x309: 84,
++    0x30a: 84,
++    0x30b: 84,
++    0x30c: 84,
++    0x30d: 84,
++    0x30e: 84,
++    0x30f: 84,
++    0x310: 84,
++    0x311: 84,
++    0x312: 84,
++    0x313: 84,
++    0x314: 84,
++    0x315: 84,
++    0x316: 84,
++    0x317: 84,
++    0x318: 84,
++    0x319: 84,
++    0x31a: 84,
++    0x31b: 84,
++    0x31c: 84,
++    0x31d: 84,
++    0x31e: 84,
++    0x31f: 84,
++    0x320: 84,
++    0x321: 84,
++    0x322: 84,
++    0x323: 84,
++    0x324: 84,
++    0x325: 84,
++    0x326: 84,
++    0x327: 84,
++    0x328: 84,
++    0x329: 84,
++    0x32a: 84,
++    0x32b: 84,
++    0x32c: 84,
++    0x32d: 84,
++    0x32e: 84,
++    0x32f: 84,
++    0x330: 84,
++    0x331: 84,
++    0x332: 84,
++    0x333: 84,
++    0x334: 84,
++    0x335: 84,
++    0x336: 84,
++    0x337: 84,
++    0x338: 84,
++    0x339: 84,
++    0x33a: 84,
++    0x33b: 84,
++    0x33c: 84,
++    0x33d: 84,
++    0x33e: 84,
++    0x33f: 84,
++    0x340: 84,
++    0x341: 84,
++    0x342: 84,
++    0x343: 84,
++    0x344: 84,
++    0x345: 84,
++    0x346: 84,
++    0x347: 84,
++    0x348: 84,
++    0x349: 84,
++    0x34a: 84,
++    0x34b: 84,
++    0x34c: 84,
++    0x34d: 84,
++    0x34e: 84,
++    0x34f: 84,
++    0x350: 84,
++    0x351: 84,
++    0x352: 84,
++    0x353: 84,
++    0x354: 84,
++    0x355: 84,
++    0x356: 84,
++    0x357: 84,
++    0x358: 84,
++    0x359: 84,
++    0x35a: 84,
++    0x35b: 84,
++    0x35c: 84,
++    0x35d: 84,
++    0x35e: 84,
++    0x35f: 84,
++    0x360: 84,
++    0x361: 84,
++    0x362: 84,
++    0x363: 84,
++    0x364: 84,
++    0x365: 84,
++    0x366: 84,
++    0x367: 84,
++    0x368: 84,
++    0x369: 84,
++    0x36a: 84,
++    0x36b: 84,
++    0x36c: 84,
++    0x36d: 84,
++    0x36e: 84,
++    0x36f: 84,
++    0x483: 84,
++    0x484: 84,
++    0x485: 84,
++    0x486: 84,
++    0x487: 84,
++    0x488: 84,
++    0x489: 84,
++    0x591: 84,
++    0x592: 84,
++    0x593: 84,
++    0x594: 84,
++    0x595: 84,
++    0x596: 84,
++    0x597: 84,
++    0x598: 84,
++    0x599: 84,
++    0x59a: 84,
++    0x59b: 84,
++    0x59c: 84,
++    0x59d: 84,
++    0x59e: 84,
++    0x59f: 84,
++    0x5a0: 84,
++    0x5a1: 84,
++    0x5a2: 84,
++    0x5a3: 84,
++    0x5a4: 84,
++    0x5a5: 84,
++    0x5a6: 84,
++    0x5a7: 84,
++    0x5a8: 84,
++    0x5a9: 84,
++    0x5aa: 84,
++    0x5ab: 84,
++    0x5ac: 84,
++    0x5ad: 84,
++    0x5ae: 84,
++    0x5af: 84,
++    0x5b0: 84,
++    0x5b1: 84,
++    0x5b2: 84,
++    0x5b3: 84,
++    0x5b4: 84,
++    0x5b5: 84,
++    0x5b6: 84,
++    0x5b7: 84,
++    0x5b8: 84,
++    0x5b9: 84,
++    0x5ba: 84,
++    0x5bb: 84,
++    0x5bc: 84,
++    0x5bd: 84,
++    0x5bf: 84,
++    0x5c1: 84,
++    0x5c2: 84,
++    0x5c4: 84,
++    0x5c5: 84,
++    0x5c7: 84,
++    0x610: 84,
++    0x611: 84,
++    0x612: 84,
++    0x613: 84,
++    0x614: 84,
++    0x615: 84,
++    0x616: 84,
++    0x617: 84,
++    0x618: 84,
++    0x619: 84,
++    0x61a: 84,
++    0x61c: 84,
+     0x620: 68,
+-    0x621: 85,
+     0x622: 82,
+     0x623: 82,
+     0x624: 82,
+@@ -148,12 +322,33 @@ joining_types = {
+     0x648: 82,
+     0x649: 68,
+     0x64a: 68,
++    0x64b: 84,
++    0x64c: 84,
++    0x64d: 84,
++    0x64e: 84,
++    0x64f: 84,
++    0x650: 84,
++    0x651: 84,
++    0x652: 84,
++    0x653: 84,
++    0x654: 84,
++    0x655: 84,
++    0x656: 84,
++    0x657: 84,
++    0x658: 84,
++    0x659: 84,
++    0x65a: 84,
++    0x65b: 84,
++    0x65c: 84,
++    0x65d: 84,
++    0x65e: 84,
++    0x65f: 84,
+     0x66e: 68,
+     0x66f: 68,
++    0x670: 84,
+     0x671: 82,
+     0x672: 82,
+     0x673: 82,
+-    0x674: 85,
+     0x675: 82,
+     0x676: 82,
+     0x677: 82,
+@@ -250,7 +445,25 @@ joining_types = {
+     0x6d2: 82,
+     0x6d3: 82,
+     0x6d5: 82,
+-    0x6dd: 85,
++    0x6d6: 84,
++    0x6d7: 84,
++    0x6d8: 84,
++    0x6d9: 84,
++    0x6da: 84,
++    0x6db: 84,
++    0x6dc: 84,
++    0x6df: 84,
++    0x6e0: 84,
++    0x6e1: 84,
++    0x6e2: 84,
++    0x6e3: 84,
++    0x6e4: 84,
++    0x6e7: 84,
++    0x6e8: 84,
++    0x6ea: 84,
++    0x6eb: 84,
++    0x6ec: 84,
++    0x6ed: 84,
+     0x6ee: 82,
+     0x6ef: 82,
+     0x6fa: 68,
+@@ -259,6 +472,7 @@ joining_types = {
+     0x6ff: 68,
+     0x70f: 84,
+     0x710: 82,
++    0x711: 84,
+     0x712: 68,
+     0x713: 68,
+     0x714: 68,
+@@ -289,6 +503,33 @@ joining_types = {
+     0x72d: 68,
+     0x72e: 68,
+     0x72f: 82,
++    0x730: 84,
++    0x731: 84,
++    0x732: 84,
++    0x733: 84,
++    0x734: 84,
++    0x735: 84,
++    0x736: 84,
++    0x737: 84,
++    0x738: 84,
++    0x739: 84,
++    0x73a: 84,
++    0x73b: 84,
++    0x73c: 84,
++    0x73d: 84,
++    0x73e: 84,
++    0x73f: 84,
++    0x740: 84,
++    0x741: 84,
++    0x742: 84,
++    0x743: 84,
++    0x744: 84,
++    0x745: 84,
++    0x746: 84,
++    0x747: 84,
++    0x748: 84,
++    0x749: 84,
++    0x74a: 84,
+     0x74d: 82,
+     0x74e: 68,
+     0x74f: 68,
+@@ -340,6 +581,17 @@ joining_types = {
+     0x77d: 68,
+     0x77e: 68,
+     0x77f: 68,
++    0x7a6: 84,
++    0x7a7: 84,
++    0x7a8: 84,
++    0x7a9: 84,
++    0x7aa: 84,
++    0x7ab: 84,
++    0x7ac: 84,
++    0x7ad: 84,
++    0x7ae: 84,
++    0x7af: 84,
++    0x7b0: 84,
+     0x7ca: 68,
+     0x7cb: 68,
+     0x7cc: 68,
+@@ -373,7 +625,38 @@ joining_types = {
+     0x7e8: 68,
+     0x7e9: 68,
+     0x7ea: 68,
++    0x7eb: 84,
++    0x7ec: 84,
++    0x7ed: 84,
++    0x7ee: 84,
++    0x7ef: 84,
++    0x7f0: 84,
++    0x7f1: 84,
++    0x7f2: 84,
++    0x7f3: 84,
+     0x7fa: 67,
++    0x7fd: 84,
++    0x816: 84,
++    0x817: 84,
++    0x818: 84,
++    0x819: 84,
++    0x81b: 84,
++    0x81c: 84,
++    0x81d: 84,
++    0x81e: 84,
++    0x81f: 84,
++    0x820: 84,
++    0x821: 84,
++    0x822: 84,
++    0x823: 84,
++    0x825: 84,
++    0x826: 84,
++    0x827: 84,
++    0x829: 84,
++    0x82a: 84,
++    0x82b: 84,
++    0x82c: 84,
++    0x82d: 84,
+     0x840: 82,
+     0x841: 68,
+     0x842: 68,
+@@ -399,13 +682,14 @@ joining_types = {
+     0x856: 82,
+     0x857: 82,
+     0x858: 82,
++    0x859: 84,
++    0x85a: 84,
++    0x85b: 84,
+     0x860: 68,
+-    0x861: 85,
+     0x862: 68,
+     0x863: 68,
+     0x864: 68,
+     0x865: 68,
+-    0x866: 85,
+     0x867: 82,
+     0x868: 68,
+     0x869: 82,
+@@ -433,16 +717,20 @@ joining_types = {
+     0x884: 67,
+     0x885: 67,
+     0x886: 68,
+-    0x887: 85,
+-    0x888: 85,
+     0x889: 68,
+     0x88a: 68,
+     0x88b: 68,
+     0x88c: 68,
+     0x88d: 68,
+     0x88e: 82,
+-    0x890: 85,
+-    0x891: 85,
++    0x898: 84,
++    0x899: 84,
++    0x89a: 84,
++    0x89b: 84,
++    0x89c: 84,
++    0x89d: 84,
++    0x89e: 84,
++    0x89f: 84,
+     0x8a0: 68,
+     0x8a1: 68,
+     0x8a2: 68,
+@@ -456,7 +744,6 @@ joining_types = {
+     0x8aa: 82,
+     0x8ab: 82,
+     0x8ac: 82,
+-    0x8ad: 85,
+     0x8ae: 82,
+     0x8af: 68,
+     0x8b0: 68,
+@@ -484,11 +771,356 @@ joining_types = {
+     0x8c6: 68,
+     0x8c7: 68,
+     0x8c8: 68,
+-    0x8e2: 85,
+-    0x1806: 85,
++    0x8ca: 84,
++    0x8cb: 84,
++    0x8cc: 84,
++    0x8cd: 84,
++    0x8ce: 84,
++    0x8cf: 84,
++    0x8d0: 84,
++    0x8d1: 84,
++    0x8d2: 84,
++    0x8d3: 84,
++    0x8d4: 84,
++    0x8d5: 84,
++    0x8d6: 84,
++    0x8d7: 84,
++    0x8d8: 84,
++    0x8d9: 84,
++    0x8da: 84,
++    0x8db: 84,
++    0x8dc: 84,
++    0x8dd: 84,
++    0x8de: 84,
++    0x8df: 84,
++    0x8e0: 84,
++    0x8e1: 84,
++    0x8e3: 84,
++    0x8e4: 84,
++    0x8e5: 84,
++    0x8e6: 84,
++    0x8e7: 84,
++    0x8e8: 84,
++    0x8e9: 84,
++    0x8ea: 84,
++    0x8eb: 84,
++    0x8ec: 84,
++    0x8ed: 84,
++    0x8ee: 84,
++    0x8ef: 84,
++    0x8f0: 84,
++    0x8f1: 84,
++    0x8f2: 84,
++    0x8f3: 84,
++    0x8f4: 84,
++    0x8f5: 84,
++    0x8f6: 84,
++    0x8f7: 84,
++    0x8f8: 84,
++    0x8f9: 84,
++    0x8fa: 84,
++    0x8fb: 84,
++    0x8fc: 84,
++    0x8fd: 84,
++    0x8fe: 84,
++    0x8ff: 84,
++    0x900: 84,
++    0x901: 84,
++    0x902: 84,
++    0x93a: 84,
++    0x93c: 84,
++    0x941: 84,
++    0x942: 84,
++    0x943: 84,
++    0x944: 84,
++    0x945: 84,
++    0x946: 84,
++    0x947: 84,
++    0x948: 84,
++    0x94d: 84,
++    0x951: 84,
++    0x952: 84,
++    0x953: 84,
++    0x954: 84,
++    0x955: 84,
++    0x956: 84,
++    0x957: 84,
++    0x962: 84,
++    0x963: 84,
++    0x981: 84,
++    0x9bc: 84,
++    0x9c1: 84,
++    0x9c2: 84,
++    0x9c3: 84,
++    0x9c4: 84,
++    0x9cd: 84,
++    0x9e2: 84,
++    0x9e3: 84,
++    0x9fe: 84,
++    0xa01: 84,
++    0xa02: 84,
++    0xa3c: 84,
++    0xa41: 84,
++    0xa42: 84,
++    0xa47: 84,
++    0xa48: 84,
++    0xa4b: 84,
++    0xa4c: 84,
++    0xa4d: 84,
++    0xa51: 84,
++    0xa70: 84,
++    0xa71: 84,
++    0xa75: 84,
++    0xa81: 84,
++    0xa82: 84,
++    0xabc: 84,
++    0xac1: 84,
++    0xac2: 84,
++    0xac3: 84,
++    0xac4: 84,
++    0xac5: 84,
++    0xac7: 84,
++    0xac8: 84,
++    0xacd: 84,
++    0xae2: 84,
++    0xae3: 84,
++    0xafa: 84,
++    0xafb: 84,
++    0xafc: 84,
++    0xafd: 84,
++    0xafe: 84,
++    0xaff: 84,
++    0xb01: 84,
++    0xb3c: 84,
++    0xb3f: 84,
++    0xb41: 84,
++    0xb42: 84,
++    0xb43: 84,
++    0xb44: 84,
++    0xb4d: 84,
++    0xb55: 84,
++    0xb56: 84,
++    0xb62: 84,
++    0xb63: 84,
++    0xb82: 84,
++    0xbc0: 84,
++    0xbcd: 84,
++    0xc00: 84,
++    0xc04: 84,
++    0xc3c: 84,
++    0xc3e: 84,
++    0xc3f: 84,
++    0xc40: 84,
++    0xc46: 84,
++    0xc47: 84,
++    0xc48: 84,
++    0xc4a: 84,
++    0xc4b: 84,
++    0xc4c: 84,
++    0xc4d: 84,
++    0xc55: 84,
++    0xc56: 84,
++    0xc62: 84,
++    0xc63: 84,
++    0xc81: 84,
++    0xcbc: 84,
++    0xcbf: 84,
++    0xcc6: 84,
++    0xccc: 84,
++    0xccd: 84,
++    0xce2: 84,
++    0xce3: 84,
++    0xd00: 84,
++    0xd01: 84,
++    0xd3b: 84,
++    0xd3c: 84,
++    0xd41: 84,
++    0xd42: 84,
++    0xd43: 84,
++    0xd44: 84,
++    0xd4d: 84,
++    0xd62: 84,
++    0xd63: 84,
++    0xd81: 84,
++    0xdca: 84,
++    0xdd2: 84,
++    0xdd3: 84,
++    0xdd4: 84,
++    0xdd6: 84,
++    0xe31: 84,
++    0xe34: 84,
++    0xe35: 84,
++    0xe36: 84,
++    0xe37: 84,
++    0xe38: 84,
++    0xe39: 84,
++    0xe3a: 84,
++    0xe47: 84,
++    0xe48: 84,
++    0xe49: 84,
++    0xe4a: 84,
++    0xe4b: 84,
++    0xe4c: 84,
++    0xe4d: 84,
++    0xe4e: 84,
++    0xeb1: 84,
++    0xeb4: 84,
++    0xeb5: 84,
++    0xeb6: 84,
++    0xeb7: 84,
++    0xeb8: 84,
++    0xeb9: 84,
++    0xeba: 84,
++    0xebb: 84,
++    0xebc: 84,
++    0xec8: 84,
++    0xec9: 84,
++    0xeca: 84,
++    0xecb: 84,
++    0xecc: 84,
++    0xecd: 84,
++    0xf18: 84,
++    0xf19: 84,
++    0xf35: 84,
++    0xf37: 84,
++    0xf39: 84,
++    0xf71: 84,
++    0xf72: 84,
++    0xf73: 84,
++    0xf74: 84,
++    0xf75: 84,
++    0xf76: 84,
++    0xf77: 84,
++    0xf78: 84,
++    0xf79: 84,
++    0xf7a: 84,
++    0xf7b: 84,
++    0xf7c: 84,
++    0xf7d: 84,
++    0xf7e: 84,
++    0xf80: 84,
++    0xf81: 84,
++    0xf82: 84,
++    0xf83: 84,
++    0xf84: 84,
++    0xf86: 84,
++    0xf87: 84,
++    0xf8d: 84,
++    0xf8e: 84,
++    0xf8f: 84,
++    0xf90: 84,
++    0xf91: 84,
++    0xf92: 84,
++    0xf93: 84,
++    0xf94: 84,
++    0xf95: 84,
++    0xf96: 84,
++    0xf97: 84,
++    0xf99: 84,
++    0xf9a: 84,
++    0xf9b: 84,
++    0xf9c: 84,
++    0xf9d: 84,
++    0xf9e: 84,
++    0xf9f: 84,
++    0xfa0: 84,
++    0xfa1: 84,
++    0xfa2: 84,
++    0xfa3: 84,
++    0xfa4: 84,
++    0xfa5: 84,
++    0xfa6: 84,
++    0xfa7: 84,
++    0xfa8: 84,
++    0xfa9: 84,
++    0xfaa: 84,
++    0xfab: 84,
++    0xfac: 84,
++    0xfad: 84,
++    0xfae: 84,
++    0xfaf: 84,
++    0xfb0: 84,
++    0xfb1: 84,
++    0xfb2: 84,
++    0xfb3: 84,
++    0xfb4: 84,
++    0xfb5: 84,
++    0xfb6: 84,
++    0xfb7: 84,
++    0xfb8: 84,
++    0xfb9: 84,
++    0xfba: 84,
++    0xfbb: 84,
++    0xfbc: 84,
++    0xfc6: 84,
++    0x102d: 84,
++    0x102e: 84,
++    0x102f: 84,
++    0x1030: 84,
++    0x1032: 84,
++    0x1033: 84,
++    0x1034: 84,
++    0x1035: 84,
++    0x1036: 84,
++    0x1037: 84,
++    0x1039: 84,
++    0x103a: 84,
++    0x103d: 84,
++    0x103e: 84,
++    0x1058: 84,
++    0x1059: 84,
++    0x105e: 84,
++    0x105f: 84,
++    0x1060: 84,
++    0x1071: 84,
++    0x1072: 84,
++    0x1073: 84,
++    0x1074: 84,
++    0x1082: 84,
++    0x1085: 84,
++    0x1086: 84,
++    0x108d: 84,
++    0x109d: 84,
++    0x135d: 84,
++    0x135e: 84,
++    0x135f: 84,
++    0x1712: 84,
++    0x1713: 84,
++    0x1714: 84,
++    0x1732: 84,
++    0x1733: 84,
++    0x1752: 84,
++    0x1753: 84,
++    0x1772: 84,
++    0x1773: 84,
++    0x17b4: 84,
++    0x17b5: 84,
++    0x17b7: 84,
++    0x17b8: 84,
++    0x17b9: 84,
++    0x17ba: 84,
++    0x17bb: 84,
++    0x17bc: 84,
++    0x17bd: 84,
++    0x17c6: 84,
++    0x17c9: 84,
++    0x17ca: 84,
++    0x17cb: 84,
++    0x17cc: 84,
++    0x17cd: 84,
++    0x17ce: 84,
++    0x17cf: 84,
++    0x17d0: 84,
++    0x17d1: 84,
++    0x17d2: 84,
++    0x17d3: 84,
++    0x17dd: 84,
+     0x1807: 68,
+     0x180a: 67,
+-    0x180e: 85,
++    0x180b: 84,
++    0x180c: 84,
++    0x180d: 84,
++    0x180f: 84,
+     0x1820: 68,
+     0x1821: 68,
+     0x1822: 68,
+@@ -578,11 +1210,6 @@ joining_types = {
+     0x1876: 68,
+     0x1877: 68,
+     0x1878: 68,
+-    0x1880: 85,
+-    0x1881: 85,
+-    0x1882: 85,
+-    0x1883: 85,
+-    0x1884: 85,
+     0x1885: 84,
+     0x1886: 84,
+     0x1887: 68,
+@@ -619,14 +1246,339 @@ joining_types = {
+     0x18a6: 68,
+     0x18a7: 68,
+     0x18a8: 68,
++    0x18a9: 84,
+     0x18aa: 68,
+-    0x200c: 85,
++    0x1920: 84,
++    0x1921: 84,
++    0x1922: 84,
++    0x1927: 84,
++    0x1928: 84,
++    0x1932: 84,
++    0x1939: 84,
++    0x193a: 84,
++    0x193b: 84,
++    0x1a17: 84,
++    0x1a18: 84,
++    0x1a1b: 84,
++    0x1a56: 84,
++    0x1a58: 84,
++    0x1a59: 84,
++    0x1a5a: 84,
++    0x1a5b: 84,
++    0x1a5c: 84,
++    0x1a5d: 84,
++    0x1a5e: 84,
++    0x1a60: 84,
++    0x1a62: 84,
++    0x1a65: 84,
++    0x1a66: 84,
++    0x1a67: 84,
++    0x1a68: 84,
++    0x1a69: 84,
++    0x1a6a: 84,
++    0x1a6b: 84,
++    0x1a6c: 84,
++    0x1a73: 84,
++    0x1a74: 84,
++    0x1a75: 84,
++    0x1a76: 84,
++    0x1a77: 84,
++    0x1a78: 84,
++    0x1a79: 84,
++    0x1a7a: 84,
++    0x1a7b: 84,
++    0x1a7c: 84,
++    0x1a7f: 84,
++    0x1ab0: 84,
++    0x1ab1: 84,
++    0x1ab2: 84,
++    0x1ab3: 84,
++    0x1ab4: 84,
++    0x1ab5: 84,
++    0x1ab6: 84,
++    0x1ab7: 84,
++    0x1ab8: 84,
++    0x1ab9: 84,
++    0x1aba: 84,
++    0x1abb: 84,
++    0x1abc: 84,
++    0x1abd: 84,
++    0x1abe: 84,
++    0x1abf: 84,
++    0x1ac0: 84,
++    0x1ac1: 84,
++    0x1ac2: 84,
++    0x1ac3: 84,
++    0x1ac4: 84,
++    0x1ac5: 84,
++    0x1ac6: 84,
++    0x1ac7: 84,
++    0x1ac8: 84,
++    0x1ac9: 84,
++    0x1aca: 84,
++    0x1acb: 84,
++    0x1acc: 84,
++    0x1acd: 84,
++    0x1ace: 84,
++    0x1b00: 84,
++    0x1b01: 84,
++    0x1b02: 84,
++    0x1b03: 84,
++    0x1b34: 84,
++    0x1b36: 84,
++    0x1b37: 84,
++    0x1b38: 84,
++    0x1b39: 84,
++    0x1b3a: 84,
++    0x1b3c: 84,
++    0x1b42: 84,
++    0x1b6b: 84,
++    0x1b6c: 84,
++    0x1b6d: 84,
++    0x1b6e: 84,
++    0x1b6f: 84,
++    0x1b70: 84,
++    0x1b71: 84,
++    0x1b72: 84,
++    0x1b73: 84,
++    0x1b80: 84,
++    0x1b81: 84,
++    0x1ba2: 84,
++    0x1ba3: 84,
++    0x1ba4: 84,
++    0x1ba5: 84,
++    0x1ba8: 84,
++    0x1ba9: 84,
++    0x1bab: 84,
++    0x1bac: 84,
++    0x1bad: 84,
++    0x1be6: 84,
++    0x1be8: 84,
++    0x1be9: 84,
++    0x1bed: 84,
++    0x1bef: 84,
++    0x1bf0: 84,
++    0x1bf1: 84,
++    0x1c2c: 84,
++    0x1c2d: 84,
++    0x1c2e: 84,
++    0x1c2f: 84,
++    0x1c30: 84,
++    0x1c31: 84,
++    0x1c32: 84,
++    0x1c33: 84,
++    0x1c36: 84,
++    0x1c37: 84,
++    0x1cd0: 84,
++    0x1cd1: 84,
++    0x1cd2: 84,
++    0x1cd4: 84,
++    0x1cd5: 84,
++    0x1cd6: 84,
++    0x1cd7: 84,
++    0x1cd8: 84,
++    0x1cd9: 84,
++    0x1cda: 84,
++    0x1cdb: 84,
++    0x1cdc: 84,
++    0x1cdd: 84,
++    0x1cde: 84,
++    0x1cdf: 84,
++    0x1ce0: 84,
++    0x1ce2: 84,
++    0x1ce3: 84,
++    0x1ce4: 84,
++    0x1ce5: 84,
++    0x1ce6: 84,
++    0x1ce7: 84,
++    0x1ce8: 84,
++    0x1ced: 84,
++    0x1cf4: 84,
++    0x1cf8: 84,
++    0x1cf9: 84,
++    0x1dc0: 84,
++    0x1dc1: 84,
++    0x1dc2: 84,
++    0x1dc3: 84,
++    0x1dc4: 84,
++    0x1dc5: 84,
++    0x1dc6: 84,
++    0x1dc7: 84,
++    0x1dc8: 84,
++    0x1dc9: 84,
++    0x1dca: 84,
++    0x1dcb: 84,
++    0x1dcc: 84,
++    0x1dcd: 84,
++    0x1dce: 84,
++    0x1dcf: 84,
++    0x1dd0: 84,
++    0x1dd1: 84,
++    0x1dd2: 84,
++    0x1dd3: 84,
++    0x1dd4: 84,
++    0x1dd5: 84,
++    0x1dd6: 84,
++    0x1dd7: 84,
++    0x1dd8: 84,
++    0x1dd9: 84,
++    0x1dda: 84,
++    0x1ddb: 84,
++    0x1ddc: 84,
++    0x1ddd: 84,
++    0x1dde: 84,
++    0x1ddf: 84,
++    0x1de0: 84,
++    0x1de1: 84,
++    0x1de2: 84,
++    0x1de3: 84,
++    0x1de4: 84,
++    0x1de5: 84,
++    0x1de6: 84,
++    0x1de7: 84,
++    0x1de8: 84,
++    0x1de9: 84,
++    0x1dea: 84,
++    0x1deb: 84,
++    0x1dec: 84,
++    0x1ded: 84,
++    0x1dee: 84,
++    0x1def: 84,
++    0x1df0: 84,
++    0x1df1: 84,
++    0x1df2: 84,
++    0x1df3: 84,
++    0x1df4: 84,
++    0x1df5: 84,
++    0x1df6: 84,
++    0x1df7: 84,
++    0x1df8: 84,
++    0x1df9: 84,
++    0x1dfa: 84,
++    0x1dfb: 84,
++    0x1dfc: 84,
++    0x1dfd: 84,
++    0x1dfe: 84,
++    0x1dff: 84,
++    0x200b: 84,
+     0x200d: 67,
+-    0x202f: 85,
+-    0x2066: 85,
+-    0x2067: 85,
+-    0x2068: 85,
+-    0x2069: 85,
++    0x200e: 84,
++    0x200f: 84,
++    0x202a: 84,
++    0x202b: 84,
++    0x202c: 84,
++    0x202d: 84,
++    0x202e: 84,
++    0x2060: 84,
++    0x2061: 84,
++    0x2062: 84,
++    0x2063: 84,
++    0x2064: 84,
++    0x206a: 84,
++    0x206b: 84,
++    0x206c: 84,
++    0x206d: 84,
++    0x206e: 84,
++    0x206f: 84,
++    0x20d0: 84,
++    0x20d1: 84,
++    0x20d2: 84,
++    0x20d3: 84,
++    0x20d4: 84,
++    0x20d5: 84,
++    0x20d6: 84,
++    0x20d7: 84,
++    0x20d8: 84,
++    0x20d9: 84,
++    0x20da: 84,
++    0x20db: 84,
++    0x20dc: 84,
++    0x20dd: 84,
++    0x20de: 84,
++    0x20df: 84,
++    0x20e0: 84,
++    0x20e1: 84,
++    0x20e2: 84,
++    0x20e3: 84,
++    0x20e4: 84,
++    0x20e5: 84,
++    0x20e6: 84,
++    0x20e7: 84,
++    0x20e8: 84,
++    0x20e9: 84,
++    0x20ea: 84,
++    0x20eb: 84,
++    0x20ec: 84,
++    0x20ed: 84,
++    0x20ee: 84,
++    0x20ef: 84,
++    0x20f0: 84,
++    0x2cef: 84,
++    0x2cf0: 84,
++    0x2cf1: 84,
++    0x2d7f: 84,
++    0x2de0: 84,
++    0x2de1: 84,
++    0x2de2: 84,
++    0x2de3: 84,
++    0x2de4: 84,
++    0x2de5: 84,
++    0x2de6: 84,
++    0x2de7: 84,
++    0x2de8: 84,
++    0x2de9: 84,
++    0x2dea: 84,
++    0x2deb: 84,
++    0x2dec: 84,
++    0x2ded: 84,
++    0x2dee: 84,
++    0x2def: 84,
++    0x2df0: 84,
++    0x2df1: 84,
++    0x2df2: 84,
++    0x2df3: 84,
++    0x2df4: 84,
++    0x2df5: 84,
++    0x2df6: 84,
++    0x2df7: 84,
++    0x2df8: 84,
++    0x2df9: 84,
++    0x2dfa: 84,
++    0x2dfb: 84,
++    0x2dfc: 84,
++    0x2dfd: 84,
++    0x2dfe: 84,
++    0x2dff: 84,
++    0x302a: 84,
++    0x302b: 84,
++    0x302c: 84,
++    0x302d: 84,
++    0x3099: 84,
++    0x309a: 84,
++    0xa66f: 84,
++    0xa670: 84,
++    0xa671: 84,
++    0xa672: 84,
++    0xa674: 84,
++    0xa675: 84,
++    0xa676: 84,
++    0xa677: 84,
++    0xa678: 84,
++    0xa679: 84,
++    0xa67a: 84,
++    0xa67b: 84,
++    0xa67c: 84,
++    0xa67d: 84,
++    0xa69e: 84,
++    0xa69f: 84,
++    0xa6f0: 84,
++    0xa6f1: 84,
++    0xa802: 84,
++    0xa806: 84,
++    0xa80b: 84,
++    0xa825: 84,
++    0xa826: 84,
++    0xa82c: 84,
+     0xa840: 68,
+     0xa841: 68,
+     0xa842: 68,
+@@ -678,20 +1630,151 @@ joining_types = {
+     0xa870: 68,
+     0xa871: 68,
+     0xa872: 76,
+-    0xa873: 85,
++    0xa8c4: 84,
++    0xa8c5: 84,
++    0xa8e0: 84,
++    0xa8e1: 84,
++    0xa8e2: 84,
++    0xa8e3: 84,
++    0xa8e4: 84,
++    0xa8e5: 84,
++    0xa8e6: 84,
++    0xa8e7: 84,
++    0xa8e8: 84,
++    0xa8e9: 84,
++    0xa8ea: 84,
++    0xa8eb: 84,
++    0xa8ec: 84,
++    0xa8ed: 84,
++    0xa8ee: 84,
++    0xa8ef: 84,
++    0xa8f0: 84,
++    0xa8f1: 84,
++    0xa8ff: 84,
++    0xa926: 84,
++    0xa927: 84,
++    0xa928: 84,
++    0xa929: 84,
++    0xa92a: 84,
++    0xa92b: 84,
++    0xa92c: 84,
++    0xa92d: 84,
++    0xa947: 84,
++    0xa948: 84,
++    0xa949: 84,
++    0xa94a: 84,
++    0xa94b: 84,
++    0xa94c: 84,
++    0xa94d: 84,
++    0xa94e: 84,
++    0xa94f: 84,
++    0xa950: 84,
++    0xa951: 84,
++    0xa980: 84,
++    0xa981: 84,
++    0xa982: 84,
++    0xa9b3: 84,
++    0xa9b6: 84,
++    0xa9b7: 84,
++    0xa9b8: 84,
++    0xa9b9: 84,
++    0xa9bc: 84,
++    0xa9bd: 84,
++    0xa9e5: 84,
++    0xaa29: 84,
++    0xaa2a: 84,
++    0xaa2b: 84,
++    0xaa2c: 84,
++    0xaa2d: 84,
++    0xaa2e: 84,
++    0xaa31: 84,
++    0xaa32: 84,
++    0xaa35: 84,
++    0xaa36: 84,
++    0xaa43: 84,
++    0xaa4c: 84,
++    0xaa7c: 84,
++    0xaab0: 84,
++    0xaab2: 84,
++    0xaab3: 84,
++    0xaab4: 84,
++    0xaab7: 84,
++    0xaab8: 84,
++    0xaabe: 84,
++    0xaabf: 84,
++    0xaac1: 84,
++    0xaaec: 84,
++    0xaaed: 84,
++    0xaaf6: 84,
++    0xabe5: 84,
++    0xabe8: 84,
++    0xabed: 84,
++    0xfb1e: 84,
++    0xfe00: 84,
++    0xfe01: 84,
++    0xfe02: 84,
++    0xfe03: 84,
++    0xfe04: 84,
++    0xfe05: 84,
++    0xfe06: 84,
++    0xfe07: 84,
++    0xfe08: 84,
++    0xfe09: 84,
++    0xfe0a: 84,
++    0xfe0b: 84,
++    0xfe0c: 84,
++    0xfe0d: 84,
++    0xfe0e: 84,
++    0xfe0f: 84,
++    0xfe20: 84,
++    0xfe21: 84,
++    0xfe22: 84,
++    0xfe23: 84,
++    0xfe24: 84,
++    0xfe25: 84,
++    0xfe26: 84,
++    0xfe27: 84,
++    0xfe28: 84,
++    0xfe29: 84,
++    0xfe2a: 84,
++    0xfe2b: 84,
++    0xfe2c: 84,
++    0xfe2d: 84,
++    0xfe2e: 84,
++    0xfe2f: 84,
++    0xfeff: 84,
++    0xfff9: 84,
++    0xfffa: 84,
++    0xfffb: 84,
++    0x101fd: 84,
++    0x102e0: 84,
++    0x10376: 84,
++    0x10377: 84,
++    0x10378: 84,
++    0x10379: 84,
++    0x1037a: 84,
++    0x10a01: 84,
++    0x10a02: 84,
++    0x10a03: 84,
++    0x10a05: 84,
++    0x10a06: 84,
++    0x10a0c: 84,
++    0x10a0d: 84,
++    0x10a0e: 84,
++    0x10a0f: 84,
++    0x10a38: 84,
++    0x10a39: 84,
++    0x10a3a: 84,
++    0x10a3f: 84,
+     0x10ac0: 68,
+     0x10ac1: 68,
+     0x10ac2: 68,
+     0x10ac3: 68,
+     0x10ac4: 68,
+     0x10ac5: 82,
+-    0x10ac6: 85,
+     0x10ac7: 82,
+-    0x10ac8: 85,
+     0x10ac9: 82,
+     0x10aca: 82,
+-    0x10acb: 85,
+-    0x10acc: 85,
+     0x10acd: 76,
+     0x10ace: 82,
+     0x10acf: 82,
+@@ -713,9 +1796,9 @@ joining_types = {
+     0x10adf: 68,
+     0x10ae0: 68,
+     0x10ae1: 82,
+-    0x10ae2: 85,
+-    0x10ae3: 85,
+     0x10ae4: 82,
++    0x10ae5: 84,
++    0x10ae6: 84,
+     0x10aeb: 68,
+     0x10aec: 68,
+     0x10aed: 68,
+@@ -745,7 +1828,6 @@ joining_types = {
+     0x10bac: 82,
+     0x10bad: 68,
+     0x10bae: 68,
+-    0x10baf: 85,
+     0x10d00: 76,
+     0x10d01: 68,
+     0x10d02: 68,
+@@ -782,6 +1864,12 @@ joining_types = {
+     0x10d21: 68,
+     0x10d22: 82,
+     0x10d23: 68,
++    0x10d24: 84,
++    0x10d25: 84,
++    0x10d26: 84,
++    0x10d27: 84,
++    0x10eab: 84,
++    0x10eac: 84,
+     0x10f30: 68,
+     0x10f31: 68,
+     0x10f32: 68,
+@@ -803,7 +1891,17 @@ joining_types = {
+     0x10f42: 68,
+     0x10f43: 68,
+     0x10f44: 68,
+-    0x10f45: 85,
++    0x10f46: 84,
++    0x10f47: 84,
++    0x10f48: 84,
++    0x10f49: 84,
++    0x10f4a: 84,
++    0x10f4b: 84,
++    0x10f4c: 84,
++    0x10f4d: 84,
++    0x10f4e: 84,
++    0x10f4f: 84,
++    0x10f50: 84,
+     0x10f51: 68,
+     0x10f52: 68,
+     0x10f53: 68,
+@@ -826,14 +1924,16 @@ joining_types = {
+     0x10f7f: 68,
+     0x10f80: 68,
+     0x10f81: 68,
++    0x10f82: 84,
++    0x10f83: 84,
++    0x10f84: 84,
++    0x10f85: 84,
+     0x10fb0: 68,
+-    0x10fb1: 85,
+     0x10fb2: 68,
+     0x10fb3: 68,
+     0x10fb4: 82,
+     0x10fb5: 82,
+     0x10fb6: 82,
+-    0x10fb7: 85,
+     0x10fb8: 68,
+     0x10fb9: 82,
+     0x10fba: 82,
+@@ -842,20 +1942,630 @@ joining_types = {
+     0x10fbd: 82,
+     0x10fbe: 68,
+     0x10fbf: 68,
+-    0x10fc0: 85,
+     0x10fc1: 68,
+     0x10fc2: 82,
+     0x10fc3: 82,
+     0x10fc4: 68,
+-    0x10fc5: 85,
+-    0x10fc6: 85,
+-    0x10fc7: 85,
+-    0x10fc8: 85,
+     0x10fc9: 82,
+     0x10fca: 68,
+     0x10fcb: 76,
+-    0x110bd: 85,
+-    0x110cd: 85,
++    0x11001: 84,
++    0x11038: 84,
++    0x11039: 84,
++    0x1103a: 84,
++    0x1103b: 84,
++    0x1103c: 84,
++    0x1103d: 84,
++    0x1103e: 84,
++    0x1103f: 84,
++    0x11040: 84,
++    0x11041: 84,
++    0x11042: 84,
++    0x11043: 84,
++    0x11044: 84,
++    0x11045: 84,
++    0x11046: 84,
++    0x11070: 84,
++    0x11073: 84,
++    0x11074: 84,
++    0x1107f: 84,
++    0x11080: 84,
++    0x11081: 84,
++    0x110b3: 84,
++    0x110b4: 84,
++    0x110b5: 84,
++    0x110b6: 84,
++    0x110b9: 84,
++    0x110ba: 84,
++    0x110c2: 84,
++    0x11100: 84,
++    0x11101: 84,
++    0x11102: 84,
++    0x11127: 84,
++    0x11128: 84,
++    0x11129: 84,
++    0x1112a: 84,
++    0x1112b: 84,
++    0x1112d: 84,
++    0x1112e: 84,
++    0x1112f: 84,
++    0x11130: 84,
++    0x11131: 84,
++    0x11132: 84,
++    0x11133: 84,
++    0x11134: 84,
++    0x11173: 84,
++    0x11180: 84,
++    0x11181: 84,
++    0x111b6: 84,
++    0x111b7: 84,
++    0x111b8: 84,
++    0x111b9: 84,
++    0x111ba: 84,
++    0x111bb: 84,
++    0x111bc: 84,
++    0x111bd: 84,
++    0x111be: 84,
++    0x111c9: 84,
++    0x111ca: 84,
++    0x111cb: 84,
++    0x111cc: 84,
++    0x111cf: 84,
++    0x1122f: 84,
++    0x11230: 84,
++    0x11231: 84,
++    0x11234: 84,
++    0x11236: 84,
++    0x11237: 84,
++    0x1123e: 84,
++    0x112df: 84,
++    0x112e3: 84,
++    0x112e4: 84,
++    0x112e5: 84,
++    0x112e6: 84,
++    0x112e7: 84,
++    0x112e8: 84,
++    0x112e9: 84,
++    0x112ea: 84,
++    0x11300: 84,
++    0x11301: 84,
++    0x1133b: 84,
++    0x1133c: 84,
++    0x11340: 84,
++    0x11366: 84,
++    0x11367: 84,
++    0x11368: 84,
++    0x11369: 84,
++    0x1136a: 84,
++    0x1136b: 84,
++    0x1136c: 84,
++    0x11370: 84,
++    0x11371: 84,
++    0x11372: 84,
++    0x11373: 84,
++    0x11374: 84,
++    0x11438: 84,
++    0x11439: 84,
++    0x1143a: 84,
++    0x1143b: 84,
++    0x1143c: 84,
++    0x1143d: 84,
++    0x1143e: 84,
++    0x1143f: 84,
++    0x11442: 84,
++    0x11443: 84,
++    0x11444: 84,
++    0x11446: 84,
++    0x1145e: 84,
++    0x114b3: 84,
++    0x114b4: 84,
++    0x114b5: 84,
++    0x114b6: 84,
++    0x114b7: 84,
++    0x114b8: 84,
++    0x114ba: 84,
++    0x114bf: 84,
++    0x114c0: 84,
++    0x114c2: 84,
++    0x114c3: 84,
++    0x115b2: 84,
++    0x115b3: 84,
++    0x115b4: 84,
++    0x115b5: 84,
++    0x115bc: 84,
++    0x115bd: 84,
++    0x115bf: 84,
++    0x115c0: 84,
++    0x115dc: 84,
++    0x115dd: 84,
++    0x11633: 84,
++    0x11634: 84,
++    0x11635: 84,
++    0x11636: 84,
++    0x11637: 84,
++    0x11638: 84,
++    0x11639: 84,
++    0x1163a: 84,
++    0x1163d: 84,
++    0x1163f: 84,
++    0x11640: 84,
++    0x116ab: 84,
++    0x116ad: 84,
++    0x116b0: 84,
++    0x116b1: 84,
++    0x116b2: 84,
++    0x116b3: 84,
++    0x116b4: 84,
++    0x116b5: 84,
++    0x116b7: 84,
++    0x1171d: 84,
++    0x1171e: 84,
++    0x1171f: 84,
++    0x11722: 84,
++    0x11723: 84,
++    0x11724: 84,
++    0x11725: 84,
++    0x11727: 84,
++    0x11728: 84,
++    0x11729: 84,
++    0x1172a: 84,
++    0x1172b: 84,
++    0x1182f: 84,
++    0x11830: 84,
++    0x11831: 84,
++    0x11832: 84,
++    0x11833: 84,
++    0x11834: 84,
++    0x11835: 84,
++    0x11836: 84,
++    0x11837: 84,
++    0x11839: 84,
++    0x1183a: 84,
++    0x1193b: 84,
++    0x1193c: 84,
++    0x1193e: 84,
++    0x11943: 84,
++    0x119d4: 84,
++    0x119d5: 84,
++    0x119d6: 84,
++    0x119d7: 84,
++    0x119da: 84,
++    0x119db: 84,
++    0x119e0: 84,
++    0x11a01: 84,
++    0x11a02: 84,
++    0x11a03: 84,
++    0x11a04: 84,
++    0x11a05: 84,
++    0x11a06: 84,
++    0x11a07: 84,
++    0x11a08: 84,
++    0x11a09: 84,
++    0x11a0a: 84,
++    0x11a33: 84,
++    0x11a34: 84,
++    0x11a35: 84,
++    0x11a36: 84,
++    0x11a37: 84,
++    0x11a38: 84,
++    0x11a3b: 84,
++    0x11a3c: 84,
++    0x11a3d: 84,
++    0x11a3e: 84,
++    0x11a47: 84,
++    0x11a51: 84,
++    0x11a52: 84,
++    0x11a53: 84,
++    0x11a54: 84,
++    0x11a55: 84,
++    0x11a56: 84,
++    0x11a59: 84,
++    0x11a5a: 84,
++    0x11a5b: 84,
++    0x11a8a: 84,
++    0x11a8b: 84,
++    0x11a8c: 84,
++    0x11a8d: 84,
++    0x11a8e: 84,
++    0x11a8f: 84,
++    0x11a90: 84,
++    0x11a91: 84,
++    0x11a92: 84,
++    0x11a93: 84,
++    0x11a94: 84,
++    0x11a95: 84,
++    0x11a96: 84,
++    0x11a98: 84,
++    0x11a99: 84,
++    0x11c30: 84,
++    0x11c31: 84,
++    0x11c32: 84,
++    0x11c33: 84,
++    0x11c34: 84,
++    0x11c35: 84,
++    0x11c36: 84,
++    0x11c38: 84,
++    0x11c39: 84,
++    0x11c3a: 84,
++    0x11c3b: 84,
++    0x11c3c: 84,
++    0x11c3d: 84,
++    0x11c3f: 84,
++    0x11c92: 84,
++    0x11c93: 84,
++    0x11c94: 84,
++    0x11c95: 84,
++    0x11c96: 84,
++    0x11c97: 84,
++    0x11c98: 84,
++    0x11c99: 84,
++    0x11c9a: 84,
++    0x11c9b: 84,
++    0x11c9c: 84,
++    0x11c9d: 84,
++    0x11c9e: 84,
++    0x11c9f: 84,
++    0x11ca0: 84,
++    0x11ca1: 84,
++    0x11ca2: 84,
++    0x11ca3: 84,
++    0x11ca4: 84,
++    0x11ca5: 84,
++    0x11ca6: 84,
++    0x11ca7: 84,
++    0x11caa: 84,
++    0x11cab: 84,
++    0x11cac: 84,
++    0x11cad: 84,
++    0x11cae: 84,
++    0x11caf: 84,
++    0x11cb0: 84,
++    0x11cb2: 84,
++    0x11cb3: 84,
++    0x11cb5: 84,
++    0x11cb6: 84,
++    0x11d31: 84,
++    0x11d32: 84,
++    0x11d33: 84,
++    0x11d34: 84,
++    0x11d35: 84,
++    0x11d36: 84,
++    0x11d3a: 84,
++    0x11d3c: 84,
++    0x11d3d: 84,
++    0x11d3f: 84,
++    0x11d40: 84,
++    0x11d41: 84,
++    0x11d42: 84,
++    0x11d43: 84,
++    0x11d44: 84,
++    0x11d45: 84,
++    0x11d47: 84,
++    0x11d90: 84,
++    0x11d91: 84,
++    0x11d95: 84,
++    0x11d97: 84,
++    0x11ef3: 84,
++    0x11ef4: 84,
++    0x13430: 84,
++    0x13431: 84,
++    0x13432: 84,
++    0x13433: 84,
++    0x13434: 84,
++    0x13435: 84,
++    0x13436: 84,
++    0x13437: 84,
++    0x13438: 84,
++    0x16af0: 84,
++    0x16af1: 84,
++    0x16af2: 84,
++    0x16af3: 84,
++    0x16af4: 84,
++    0x16b30: 84,
++    0x16b31: 84,
++    0x16b32: 84,
++    0x16b33: 84,
++    0x16b34: 84,
++    0x16b35: 84,
++    0x16b36: 84,
++    0x16f4f: 84,
++    0x16f8f: 84,
++    0x16f90: 84,
++    0x16f91: 84,
++    0x16f92: 84,
++    0x16fe4: 84,
++    0x1bc9d: 84,
++    0x1bc9e: 84,
++    0x1bca0: 84,
++    0x1bca1: 84,
++    0x1bca2: 84,
++    0x1bca3: 84,
++    0x1cf00: 84,
++    0x1cf01: 84,
++    0x1cf02: 84,
++    0x1cf03: 84,
++    0x1cf04: 84,
++    0x1cf05: 84,
++    0x1cf06: 84,
++    0x1cf07: 84,
++    0x1cf08: 84,
++    0x1cf09: 84,
++    0x1cf0a: 84,
++    0x1cf0b: 84,
++    0x1cf0c: 84,
++    0x1cf0d: 84,
++    0x1cf0e: 84,
++    0x1cf0f: 84,
++    0x1cf10: 84,
++    0x1cf11: 84,
++    0x1cf12: 84,
++    0x1cf13: 84,
++    0x1cf14: 84,
++    0x1cf15: 84,
++    0x1cf16: 84,
++    0x1cf17: 84,
++    0x1cf18: 84,
++    0x1cf19: 84,
++    0x1cf1a: 84,
++    0x1cf1b: 84,
++    0x1cf1c: 84,
++    0x1cf1d: 84,
++    0x1cf1e: 84,
++    0x1cf1f: 84,
++    0x1cf20: 84,
++    0x1cf21: 84,
++    0x1cf22: 84,
++    0x1cf23: 84,
++    0x1cf24: 84,
++    0x1cf25: 84,
++    0x1cf26: 84,
++    0x1cf27: 84,
++    0x1cf28: 84,
++    0x1cf29: 84,
++    0x1cf2a: 84,
++    0x1cf2b: 84,
++    0x1cf2c: 84,
++    0x1cf2d: 84,
++    0x1cf30: 84,
++    0x1cf31: 84,
++    0x1cf32: 84,
++    0x1cf33: 84,
++    0x1cf34: 84,
++    0x1cf35: 84,
++    0x1cf36: 84,
++    0x1cf37: 84,
++    0x1cf38: 84,
++    0x1cf39: 84,
++    0x1cf3a: 84,
++    0x1cf3b: 84,
++    0x1cf3c: 84,
++    0x1cf3d: 84,
++    0x1cf3e: 84,
++    0x1cf3f: 84,
++    0x1cf40: 84,
++    0x1cf41: 84,
++    0x1cf42: 84,
++    0x1cf43: 84,
++    0x1cf44: 84,
++    0x1cf45: 84,
++    0x1cf46: 84,
++    0x1d167: 84,
++    0x1d168: 84,
++    0x1d169: 84,
++    0x1d173: 84,
++    0x1d174: 84,
++    0x1d175: 84,
++    0x1d176: 84,
++    0x1d177: 84,
++    0x1d178: 84,
++    0x1d179: 84,
++    0x1d17a: 84,
++    0x1d17b: 84,
++    0x1d17c: 84,
++    0x1d17d: 84,
++    0x1d17e: 84,
++    0x1d17f: 84,
++    0x1d180: 84,
++    0x1d181: 84,
++    0x1d182: 84,
++    0x1d185: 84,
++    0x1d186: 84,
++    0x1d187: 84,
++    0x1d188: 84,
++    0x1d189: 84,
++    0x1d18a: 84,
++    0x1d18b: 84,
++    0x1d1aa: 84,
++    0x1d1ab: 84,
++    0x1d1ac: 84,
++    0x1d1ad: 84,
++    0x1d242: 84,
++    0x1d243: 84,
++    0x1d244: 84,
++    0x1da00: 84,
++    0x1da01: 84,
++    0x1da02: 84,
++    0x1da03: 84,
++    0x1da04: 84,
++    0x1da05: 84,
++    0x1da06: 84,
++    0x1da07: 84,
++    0x1da08: 84,
++    0x1da09: 84,
++    0x1da0a: 84,
++    0x1da0b: 84,
++    0x1da0c: 84,
++    0x1da0d: 84,
++    0x1da0e: 84,
++    0x1da0f: 84,
++    0x1da10: 84,
++    0x1da11: 84,
++    0x1da12: 84,
++    0x1da13: 84,
++    0x1da14: 84,
++    0x1da15: 84,
++    0x1da16: 84,
++    0x1da17: 84,
++    0x1da18: 84,
++    0x1da19: 84,
++    0x1da1a: 84,
++    0x1da1b: 84,
++    0x1da1c: 84,
++    0x1da1d: 84,
++    0x1da1e: 84,
++    0x1da1f: 84,
++    0x1da20: 84,
++    0x1da21: 84,
++    0x1da22: 84,
++    0x1da23: 84,
++    0x1da24: 84,
++    0x1da25: 84,
++    0x1da26: 84,
++    0x1da27: 84,
++    0x1da28: 84,
++    0x1da29: 84,
++    0x1da2a: 84,
++    0x1da2b: 84,
++    0x1da2c: 84,
++    0x1da2d: 84,
++    0x1da2e: 84,
++    0x1da2f: 84,
++    0x1da30: 84,
++    0x1da31: 84,
++    0x1da32: 84,
++    0x1da33: 84,
++    0x1da34: 84,
++    0x1da35: 84,
++    0x1da36: 84,
++    0x1da3b: 84,
++    0x1da3c: 84,
++    0x1da3d: 84,
++    0x1da3e: 84,
++    0x1da3f: 84,
++    0x1da40: 84,
++    0x1da41: 84,
++    0x1da42: 84,
++    0x1da43: 84,
++    0x1da44: 84,
++    0x1da45: 84,
++    0x1da46: 84,
++    0x1da47: 84,
++    0x1da48: 84,
++    0x1da49: 84,
++    0x1da4a: 84,
++    0x1da4b: 84,
++    0x1da4c: 84,
++    0x1da4d: 84,
++    0x1da4e: 84,
++    0x1da4f: 84,
++    0x1da50: 84,
++    0x1da51: 84,
++    0x1da52: 84,
++    0x1da53: 84,
++    0x1da54: 84,
++    0x1da55: 84,
++    0x1da56: 84,
++    0x1da57: 84,
++    0x1da58: 84,
++    0x1da59: 84,
++    0x1da5a: 84,
++    0x1da5b: 84,
++    0x1da5c: 84,
++    0x1da5d: 84,
++    0x1da5e: 84,
++    0x1da5f: 84,
++    0x1da60: 84,
++    0x1da61: 84,
++    0x1da62: 84,
++    0x1da63: 84,
++    0x1da64: 84,
++    0x1da65: 84,
++    0x1da66: 84,
++    0x1da67: 84,
++    0x1da68: 84,
++    0x1da69: 84,
++    0x1da6a: 84,
++    0x1da6b: 84,
++    0x1da6c: 84,
++    0x1da75: 84,
++    0x1da84: 84,
++    0x1da9b: 84,
++    0x1da9c: 84,
++    0x1da9d: 84,
++    0x1da9e: 84,
++    0x1da9f: 84,
++    0x1daa1: 84,
++    0x1daa2: 84,
++    0x1daa3: 84,
++    0x1daa4: 84,
++    0x1daa5: 84,
++    0x1daa6: 84,
++    0x1daa7: 84,
++    0x1daa8: 84,
++    0x1daa9: 84,
++    0x1daaa: 84,
++    0x1daab: 84,
++    0x1daac: 84,
++    0x1daad: 84,
++    0x1daae: 84,
++    0x1daaf: 84,
++    0x1e000: 84,
++    0x1e001: 84,
++    0x1e002: 84,
++    0x1e003: 84,
++    0x1e004: 84,
++    0x1e005: 84,
++    0x1e006: 84,
++    0x1e008: 84,
++    0x1e009: 84,
++    0x1e00a: 84,
++    0x1e00b: 84,
++    0x1e00c: 84,
++    0x1e00d: 84,
++    0x1e00e: 84,
++    0x1e00f: 84,
++    0x1e010: 84,
++    0x1e011: 84,
++    0x1e012: 84,
++    0x1e013: 84,
++    0x1e014: 84,
++    0x1e015: 84,
++    0x1e016: 84,
++    0x1e017: 84,
++    0x1e018: 84,
++    0x1e01b: 84,
++    0x1e01c: 84,
++    0x1e01d: 84,
++    0x1e01e: 84,
++    0x1e01f: 84,
++    0x1e020: 84,
++    0x1e021: 84,
++    0x1e023: 84,
++    0x1e024: 84,
++    0x1e026: 84,
++    0x1e027: 84,
++    0x1e028: 84,
++    0x1e029: 84,
++    0x1e02a: 84,
++    0x1e130: 84,
++    0x1e131: 84,
++    0x1e132: 84,
++    0x1e133: 84,
++    0x1e134: 84,
++    0x1e135: 84,
++    0x1e136: 84,
++    0x1e2ae: 84,
++    0x1e2ec: 84,
++    0x1e2ed: 84,
++    0x1e2ee: 84,
++    0x1e2ef: 84,
++    0x1e8d0: 84,
++    0x1e8d1: 84,
++    0x1e8d2: 84,
++    0x1e8d3: 84,
++    0x1e8d4: 84,
++    0x1e8d5: 84,
++    0x1e8d6: 84,
+     0x1e900: 68,
+     0x1e901: 68,
+     0x1e902: 68,
+@@ -924,7 +2634,351 @@ joining_types = {
+     0x1e941: 68,
+     0x1e942: 68,
+     0x1e943: 68,
++    0x1e944: 84,
++    0x1e945: 84,
++    0x1e946: 84,
++    0x1e947: 84,
++    0x1e948: 84,
++    0x1e949: 84,
++    0x1e94a: 84,
+     0x1e94b: 84,
++    0xe0001: 84,
++    0xe0020: 84,
++    0xe0021: 84,
++    0xe0022: 84,
++    0xe0023: 84,
++    0xe0024: 84,
++    0xe0025: 84,
++    0xe0026: 84,
++    0xe0027: 84,
++    0xe0028: 84,
++    0xe0029: 84,
++    0xe002a: 84,
++    0xe002b: 84,
++    0xe002c: 84,
++    0xe002d: 84,
++    0xe002e: 84,
++    0xe002f: 84,
++    0xe0030: 84,
++    0xe0031: 84,
++    0xe0032: 84,
++    0xe0033: 84,
++    0xe0034: 84,
++    0xe0035: 84,
++    0xe0036: 84,
++    0xe0037: 84,
++    0xe0038: 84,
++    0xe0039: 84,
++    0xe003a: 84,
++    0xe003b: 84,
++    0xe003c: 84,
++    0xe003d: 84,
++    0xe003e: 84,
++    0xe003f: 84,
++    0xe0040: 84,
++    0xe0041: 84,
++    0xe0042: 84,
++    0xe0043: 84,
++    0xe0044: 84,
++    0xe0045: 84,
++    0xe0046: 84,
++    0xe0047: 84,
++    0xe0048: 84,
++    0xe0049: 84,
++    0xe004a: 84,
++    0xe004b: 84,
++    0xe004c: 84,
++    0xe004d: 84,
++    0xe004e: 84,
++    0xe004f: 84,
++    0xe0050: 84,
++    0xe0051: 84,
++    0xe0052: 84,
++    0xe0053: 84,
++    0xe0054: 84,
++    0xe0055: 84,
++    0xe0056: 84,
++    0xe0057: 84,
++    0xe0058: 84,
++    0xe0059: 84,
++    0xe005a: 84,
++    0xe005b: 84,
++    0xe005c: 84,
++    0xe005d: 84,
++    0xe005e: 84,
++    0xe005f: 84,
++    0xe0060: 84,
++    0xe0061: 84,
++    0xe0062: 84,
++    0xe0063: 84,
++    0xe0064: 84,
++    0xe0065: 84,
++    0xe0066: 84,
++    0xe0067: 84,
++    0xe0068: 84,
++    0xe0069: 84,
++    0xe006a: 84,
++    0xe006b: 84,
++    0xe006c: 84,
++    0xe006d: 84,
++    0xe006e: 84,
++    0xe006f: 84,
++    0xe0070: 84,
++    0xe0071: 84,
++    0xe0072: 84,
++    0xe0073: 84,
++    0xe0074: 84,
++    0xe0075: 84,
++    0xe0076: 84,
++    0xe0077: 84,
++    0xe0078: 84,
++    0xe0079: 84,
++    0xe007a: 84,
++    0xe007b: 84,
++    0xe007c: 84,
++    0xe007d: 84,
++    0xe007e: 84,
++    0xe007f: 84,
++    0xe0100: 84,
++    0xe0101: 84,
++    0xe0102: 84,
++    0xe0103: 84,
++    0xe0104: 84,
++    0xe0105: 84,
++    0xe0106: 84,
++    0xe0107: 84,
++    0xe0108: 84,
++    0xe0109: 84,
++    0xe010a: 84,
++    0xe010b: 84,
++    0xe010c: 84,
++    0xe010d: 84,
++    0xe010e: 84,
++    0xe010f: 84,
++    0xe0110: 84,
++    0xe0111: 84,
++    0xe0112: 84,
++    0xe0113: 84,
++    0xe0114: 84,
++    0xe0115: 84,
++    0xe0116: 84,
++    0xe0117: 84,
++    0xe0118: 84,
++    0xe0119: 84,
++    0xe011a: 84,
++    0xe011b: 84,
++    0xe011c: 84,
++    0xe011d: 84,
++    0xe011e: 84,
++    0xe011f: 84,
++    0xe0120: 84,
++    0xe0121: 84,
++    0xe0122: 84,
++    0xe0123: 84,
++    0xe0124: 84,
++    0xe0125: 84,
++    0xe0126: 84,
++    0xe0127: 84,
++    0xe0128: 84,
++    0xe0129: 84,
++    0xe012a: 84,
++    0xe012b: 84,
++    0xe012c: 84,
++    0xe012d: 84,
++    0xe012e: 84,
++    0xe012f: 84,
++    0xe0130: 84,
++    0xe0131: 84,
++    0xe0132: 84,
++    0xe0133: 84,
++    0xe0134: 84,
++    0xe0135: 84,
++    0xe0136: 84,
++    0xe0137: 84,
++    0xe0138: 84,
++    0xe0139: 84,
++    0xe013a: 84,
++    0xe013b: 84,
++    0xe013c: 84,
++    0xe013d: 84,
++    0xe013e: 84,
++    0xe013f: 84,
++    0xe0140: 84,
++    0xe0141: 84,
++    0xe0142: 84,
++    0xe0143: 84,
++    0xe0144: 84,
++    0xe0145: 84,
++    0xe0146: 84,
++    0xe0147: 84,
++    0xe0148: 84,
++    0xe0149: 84,
++    0xe014a: 84,
++    0xe014b: 84,
++    0xe014c: 84,
++    0xe014d: 84,
++    0xe014e: 84,
++    0xe014f: 84,
++    0xe0150: 84,
++    0xe0151: 84,
++    0xe0152: 84,
++    0xe0153: 84,
++    0xe0154: 84,
++    0xe0155: 84,
++    0xe0156: 84,
++    0xe0157: 84,
++    0xe0158: 84,
++    0xe0159: 84,
++    0xe015a: 84,
++    0xe015b: 84,
++    0xe015c: 84,
++    0xe015d: 84,
++    0xe015e: 84,
++    0xe015f: 84,
++    0xe0160: 84,
++    0xe0161: 84,
++    0xe0162: 84,
++    0xe0163: 84,
++    0xe0164: 84,
++    0xe0165: 84,
++    0xe0166: 84,
++    0xe0167: 84,
++    0xe0168: 84,
++    0xe0169: 84,
++    0xe016a: 84,
++    0xe016b: 84,
++    0xe016c: 84,
++    0xe016d: 84,
++    0xe016e: 84,
++    0xe016f: 84,
++    0xe0170: 84,
++    0xe0171: 84,
++    0xe0172: 84,
++    0xe0173: 84,
++    0xe0174: 84,
++    0xe0175: 84,
++    0xe0176: 84,
++    0xe0177: 84,
++    0xe0178: 84,
++    0xe0179: 84,
++    0xe017a: 84,
++    0xe017b: 84,
++    0xe017c: 84,
++    0xe017d: 84,
++    0xe017e: 84,
++    0xe017f: 84,
++    0xe0180: 84,
++    0xe0181: 84,
++    0xe0182: 84,
++    0xe0183: 84,
++    0xe0184: 84,
++    0xe0185: 84,
++    0xe0186: 84,
++    0xe0187: 84,
++    0xe0188: 84,
++    0xe0189: 84,
++    0xe018a: 84,
++    0xe018b: 84,
++    0xe018c: 84,
++    0xe018d: 84,
++    0xe018e: 84,
++    0xe018f: 84,
++    0xe0190: 84,
++    0xe0191: 84,
++    0xe0192: 84,
++    0xe0193: 84,
++    0xe0194: 84,
++    0xe0195: 84,
++    0xe0196: 84,
++    0xe0197: 84,
++    0xe0198: 84,
++    0xe0199: 84,
++    0xe019a: 84,
++    0xe019b: 84,
++    0xe019c: 84,
++    0xe019d: 84,
++    0xe019e: 84,
++    0xe019f: 84,
++    0xe01a0: 84,
++    0xe01a1: 84,
++    0xe01a2: 84,
++    0xe01a3: 84,
++    0xe01a4: 84,
++    0xe01a5: 84,
++    0xe01a6: 84,
++    0xe01a7: 84,
++    0xe01a8: 84,
++    0xe01a9: 84,
++    0xe01aa: 84,
++    0xe01ab: 84,
++    0xe01ac: 84,
++    0xe01ad: 84,
++    0xe01ae: 84,
++    0xe01af: 84,
++    0xe01b0: 84,
++    0xe01b1: 84,
++    0xe01b2: 84,
++    0xe01b3: 84,
++    0xe01b4: 84,
++    0xe01b5: 84,
++    0xe01b6: 84,
++    0xe01b7: 84,
++    0xe01b8: 84,
++    0xe01b9: 84,
++    0xe01ba: 84,
++    0xe01bb: 84,
++    0xe01bc: 84,
++    0xe01bd: 84,
++    0xe01be: 84,
++    0xe01bf: 84,
++    0xe01c0: 84,
++    0xe01c1: 84,
++    0xe01c2: 84,
++    0xe01c3: 84,
++    0xe01c4: 84,
++    0xe01c5: 84,
++    0xe01c6: 84,
++    0xe01c7: 84,
++    0xe01c8: 84,
++    0xe01c9: 84,
++    0xe01ca: 84,
++    0xe01cb: 84,
++    0xe01cc: 84,
++    0xe01cd: 84,
++    0xe01ce: 84,
++    0xe01cf: 84,
++    0xe01d0: 84,
++    0xe01d1: 84,
++    0xe01d2: 84,
++    0xe01d3: 84,
++    0xe01d4: 84,
++    0xe01d5: 84,
++    0xe01d6: 84,
++    0xe01d7: 84,
++    0xe01d8: 84,
++    0xe01d9: 84,
++    0xe01da: 84,
++    0xe01db: 84,
++    0xe01dc: 84,
++    0xe01dd: 84,
++    0xe01de: 84,
++    0xe01df: 84,
++    0xe01e0: 84,
++    0xe01e1: 84,
++    0xe01e2: 84,
++    0xe01e3: 84,
++    0xe01e4: 84,
++    0xe01e5: 84,
++    0xe01e6: 84,
++    0xe01e7: 84,
++    0xe01e8: 84,
++    0xe01e9: 84,
++    0xe01ea: 84,
++    0xe01eb: 84,
++    0xe01ec: 84,
++    0xe01ed: 84,
++    0xe01ee: 84,
++    0xe01ef: 84,
+ }
+ codepoint_classes = {
+     'PVALID': (
+@@ -1831,7 +3885,6 @@ codepoint_classes = {
+         0xa7d50000a7d6,
+         0xa7d70000a7d8,
+         0xa7d90000a7da,
+-        0xa7f20000a7f5,
+         0xa7f60000a7f8,
+         0xa7fa0000a828,
+         0xa82c0000a82d,
+@@ -1859,7 +3912,7 @@ codepoint_classes = {
+         0xab200000ab27,
+         0xab280000ab2f,
+         0xab300000ab5b,
+-        0xab600000ab6a,
++        0xab600000ab69,
+         0xabc00000abeb,
+         0xabec0000abee,
+         0xabf00000abfa,
+@@ -1904,9 +3957,7 @@ codepoint_classes = {
+         0x1060000010737,
+         0x1074000010756,
+         0x1076000010768,
+-        0x1078000010786,
+-        0x10787000107b1,
+-        0x107b2000107bb,
++        0x1078000010781,
+         0x1080000010806,
+         0x1080800010809,
+         0x1080a00010836,
+@@ -2115,7 +4166,6 @@ codepoint_classes = {
+         0x1e8d00001e8d7,
+         0x1e9220001e94c,
+         0x1e9500001e95a,
+-        0x1fbf00001fbfa,
+         0x200000002a6e0,
+         0x2a7000002b739,
+         0x2b7400002b81e,
+diff --git a/tools/idna-data b/tools/idna-data
+index f5572a8..9fe004a 100755
+--- a/tools/idna-data
++++ b/tools/idna-data
+@@ -238,11 +238,18 @@ class UnicodeData(object):
+     def _load_arabicshaping(self):
+ 
+         self.ucd_as = {}
+-        f_as = self._ucdfile('ArabicShaping.txt')
++        f_as = self._ucdfile('extracted/DerivedJoiningType.txt')
+         for line in f_as.splitlines():
+-            result = 
re.match(r'^(?P<cp>[0-9A-F]{4,6})\s*;\s*.*?\s*;\s*(?P<jt>\S+)\s*;', line)
++            result = re.match(
++                
r'^(?P<start>[0-9A-F]{4,6})(|\.\.(?P<end>[0-9A-F]{4,6}))\s*;\s*(?P<jt>\S+)\s*(|\#.*)$',
++                line)
+             if result:
+-                self.ucd_as[int(result.group('cp'), 16)] = result.group('jt')
++                if result.group('end'):
++                    for i in hexrange(result.group('start'), 
result.group('end')):
++                        self.ucd_as[i] = result.group('jt')
++                else:
++                    i = hexvalue(result.group('start'))
++                    self.ucd_as[i] = result.group('jt')
+ 
+     def _load_scripts(self):
+ 
diff -Nru python-idna-3.3/debian/patches/series 
python-idna-3.3/debian/patches/series
--- python-idna-3.3/debian/patches/series       1970-01-01 01:00:00.000000000 
+0100
+++ python-idna-3.3/debian/patches/series       2024-05-30 14:31:22.000000000 
+0200
@@ -0,0 +1 @@
+CVE-2024-3651.patch
diff -Nru python-idna-3.3/debian/salsa-ci.yml 
python-idna-3.3/debian/salsa-ci.yml
--- python-idna-3.3/debian/salsa-ci.yml 1970-01-01 01:00:00.000000000 +0100
+++ python-idna-3.3/debian/salsa-ci.yml 2024-05-30 14:31:22.000000000 +0200
@@ -0,0 +1,8 @@
+---
+include:
+  - 
https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
+
+variables:
+  RELEASE: 'bookworm'
+  SALSA_CI_DISABLE_REPROTEST: 1
+  SALSA_CI_DISABLE_LINTIAN: 1

Attachment: signature.asc
Description: PGP signature

Reply via email to