cases: add bit for exception index

The limit for this will be reached by Unicode 11.

Updates golang/go#27945

Change-Id: I5add868e60ba632de61b1ff3cb520453759b95c4
Reviewed-on: https://go-review.googlesource.com/c/text/+/169639
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
diff --git a/cases/gen.go b/cases/gen.go
index 1cfe1c0..ee04a15 100644
--- a/cases/gen.go
+++ b/cases/gen.go
@@ -335,7 +335,7 @@
 	ri.entry |= exceptionBit
 
 	if len(exceptionData) >= 1<<numExceptionBits {
-		log.Fatalf("%U:exceptionData too large %x > %d bits", ri.Rune, len(exceptionData), numExceptionBits)
+		log.Fatalf("%U:exceptionData too large %#x > %d bits", ri.Rune, len(exceptionData), numExceptionBits)
 	}
 
 	// Set the offset in the exceptionData array.
diff --git a/cases/gen_trieval.go b/cases/gen_trieval.go
index 376d22c..26fadd6 100644
--- a/cases/gen_trieval.go
+++ b/cases/gen_trieval.go
@@ -19,8 +19,7 @@
 // The per-rune values have the following format:
 //
 //   if (exception) {
-//     15..5  unsigned exception index
-//         4  unused
+//     15..4  unsigned exception index
 //   } else {
 //     15..8  XOR pattern or index to XOR pattern for case mapping
 //            Only 13..8 are used for XOR patterns.
@@ -52,8 +51,8 @@
 	isMidBit       = 1 << 6
 
 	exceptionBit     = 1 << 3
-	exceptionShift   = 5
-	numExceptionBits = 11
+	exceptionShift   = 4
+	numExceptionBits = 12
 
 	xorIndexBit = 1 << 6
 	xorShift    = 8
diff --git a/cases/tables10.0.0.go b/cases/tables10.0.0.go
index 9800782..0bb70a6 100644
--- a/cases/tables10.0.0.go
+++ b/cases/tables10.0.0.go
@@ -218,7 +218,7 @@
 	return 0
 }
 
-// caseTrie. Total size: 11892 bytes (11.61 KiB). Checksum: abd4a0bc39341b30.
+// caseTrie. Total size: 11892 bytes (11.61 KiB). Checksum: 9391c32b0d24e7f0.
 type caseTrie struct{}
 
 func newCaseTrie(i int) *caseTrie {
@@ -269,43 +269,43 @@
 	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
 	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
 	// Block 0x4, offset 0x100
-	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x04cb, 0x105: 0x05c9,
-	0x106: 0x06ca, 0x107: 0x078b, 0x108: 0x0889, 0x109: 0x098a, 0x10a: 0x0a4b, 0x10b: 0x0b49,
-	0x10c: 0x0c4a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x026b, 0x105: 0x02e9,
+	0x106: 0x036a, 0x107: 0x03cb, 0x108: 0x0449, 0x109: 0x04ca, 0x10a: 0x052b, 0x10b: 0x05a9,
+	0x10c: 0x062a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
 	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
 	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
 	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
 	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
 	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
-	0x130: 0x0d0a, 0x131: 0x0e0b, 0x132: 0x0f09, 0x133: 0x100a, 0x134: 0x0113, 0x135: 0x0112,
+	0x130: 0x068a, 0x131: 0x070b, 0x132: 0x0789, 0x133: 0x080a, 0x134: 0x0113, 0x135: 0x0112,
 	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
 	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
 	// Block 0x5, offset 0x140
-	0x140: 0x136a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x140: 0x09ba, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
 	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
-	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x140a, 0x151: 0x14aa,
-	0x152: 0x154a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
-	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x15ea, 0x15d: 0x0012,
-	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x168a, 0x162: 0x0012, 0x163: 0x2052,
-	0x164: 0x0012, 0x165: 0x172a, 0x166: 0x17ca, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
-	0x16a: 0x186a, 0x16b: 0x190a, 0x16c: 0x19aa, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
-	0x170: 0x0012, 0x171: 0x1a4a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0a0a, 0x151: 0x0a5a,
+	0x152: 0x0aaa, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0afa, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0b4a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0b9a, 0x166: 0x0bea, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0c3a, 0x16b: 0x0c8a, 0x16c: 0x0cda, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x0d2a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
 	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
-	0x17c: 0x0012, 0x17d: 0x1aea, 0x17e: 0x0012, 0x17f: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x0d7a, 0x17e: 0x0012, 0x17f: 0x0012,
 	// Block 0x6, offset 0x180
 	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
-	0x186: 0x0012, 0x187: 0x1b8a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x186: 0x0012, 0x187: 0x0dca, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
 	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
 	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
-	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x1c2a,
-	0x19e: 0x1cca, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x0e1a,
+	0x19e: 0x0e6a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
 	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
 	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
 	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
 	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
 	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
 	// Block 0x7, offset 0x1c0
-	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x1d6d,
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x0ebd,
 	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
 	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
 	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
@@ -319,32 +319,32 @@
 	// Block 0x8, offset 0x200
 	0x204: 0x0004, 0x205: 0x0004,
 	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
-	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x1e2a, 0x211: 0x2013,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x0f1a, 0x211: 0x2013,
 	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
 	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
 	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
 	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
 	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
-	0x230: 0x1fea, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x230: 0x0ffa, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
 	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
 	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
 	// Block 0x9, offset 0x240
-	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x21aa, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x10da, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
 	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
-	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x226a, 0x251: 0x232a,
-	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x23ea, 0x256: 0x24aa, 0x257: 0x1812,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x113a, 0x251: 0x119a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x11fa, 0x256: 0x125a, 0x257: 0x1812,
 	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
 	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
 	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
 	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
-	0x270: 0x256a, 0x271: 0x262a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x26ea,
+	0x270: 0x12ba, 0x271: 0x131a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x137a,
 	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
 	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
 	// Block 0xa, offset 0x280
 	0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812,
 	0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813,
-	0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x372a, 0x291: 0x0812,
-	0x292: 0x386a, 0x293: 0x0812, 0x294: 0x3a2a, 0x295: 0x0812, 0x296: 0x3bea, 0x297: 0x0812,
+	0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x1b9a, 0x291: 0x0812,
+	0x292: 0x1c3a, 0x293: 0x0812, 0x294: 0x1d1a, 0x295: 0x0812, 0x296: 0x1dfa, 0x297: 0x0812,
 	0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813,
 	0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812,
 	0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813,
@@ -353,37 +353,37 @@
 	0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52,
 	0x2bc: 0x4d52, 0x2bd: 0x4d52,
 	// Block 0xb, offset 0x2c0
-	0x2c0: 0x3daa, 0x2c1: 0x3f8a, 0x2c2: 0x416a, 0x2c3: 0x434a, 0x2c4: 0x452a, 0x2c5: 0x470a,
-	0x2c6: 0x48ea, 0x2c7: 0x4aca, 0x2c8: 0x4ca9, 0x2c9: 0x4e89, 0x2ca: 0x5069, 0x2cb: 0x5249,
-	0x2cc: 0x5429, 0x2cd: 0x5609, 0x2ce: 0x57e9, 0x2cf: 0x59c9, 0x2d0: 0x5baa, 0x2d1: 0x5d8a,
-	0x2d2: 0x5f6a, 0x2d3: 0x614a, 0x2d4: 0x632a, 0x2d5: 0x650a, 0x2d6: 0x66ea, 0x2d7: 0x68ca,
-	0x2d8: 0x6aa9, 0x2d9: 0x6c89, 0x2da: 0x6e69, 0x2db: 0x7049, 0x2dc: 0x7229, 0x2dd: 0x7409,
-	0x2de: 0x75e9, 0x2df: 0x77c9, 0x2e0: 0x79aa, 0x2e1: 0x7b8a, 0x2e2: 0x7d6a, 0x2e3: 0x7f4a,
-	0x2e4: 0x812a, 0x2e5: 0x830a, 0x2e6: 0x84ea, 0x2e7: 0x86ca, 0x2e8: 0x88a9, 0x2e9: 0x8a89,
-	0x2ea: 0x8c69, 0x2eb: 0x8e49, 0x2ec: 0x9029, 0x2ed: 0x9209, 0x2ee: 0x93e9, 0x2ef: 0x95c9,
-	0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x97aa, 0x2f3: 0x99ca, 0x2f4: 0x9b6a,
-	0x2f6: 0x9d2a, 0x2f7: 0x9e6a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53,
-	0x2fc: 0xa0e9, 0x2fd: 0x0004, 0x2fe: 0xa28a, 0x2ff: 0x0004,
+	0x2c0: 0x1eda, 0x2c1: 0x1fca, 0x2c2: 0x20ba, 0x2c3: 0x21aa, 0x2c4: 0x229a, 0x2c5: 0x238a,
+	0x2c6: 0x247a, 0x2c7: 0x256a, 0x2c8: 0x2659, 0x2c9: 0x2749, 0x2ca: 0x2839, 0x2cb: 0x2929,
+	0x2cc: 0x2a19, 0x2cd: 0x2b09, 0x2ce: 0x2bf9, 0x2cf: 0x2ce9, 0x2d0: 0x2dda, 0x2d1: 0x2eca,
+	0x2d2: 0x2fba, 0x2d3: 0x30aa, 0x2d4: 0x319a, 0x2d5: 0x328a, 0x2d6: 0x337a, 0x2d7: 0x346a,
+	0x2d8: 0x3559, 0x2d9: 0x3649, 0x2da: 0x3739, 0x2db: 0x3829, 0x2dc: 0x3919, 0x2dd: 0x3a09,
+	0x2de: 0x3af9, 0x2df: 0x3be9, 0x2e0: 0x3cda, 0x2e1: 0x3dca, 0x2e2: 0x3eba, 0x2e3: 0x3faa,
+	0x2e4: 0x409a, 0x2e5: 0x418a, 0x2e6: 0x427a, 0x2e7: 0x436a, 0x2e8: 0x4459, 0x2e9: 0x4549,
+	0x2ea: 0x4639, 0x2eb: 0x4729, 0x2ec: 0x4819, 0x2ed: 0x4909, 0x2ee: 0x49f9, 0x2ef: 0x4ae9,
+	0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x4bda, 0x2f3: 0x4cea, 0x2f4: 0x4dba,
+	0x2f6: 0x4e9a, 0x2f7: 0x4f3a, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53,
+	0x2fc: 0x5079, 0x2fd: 0x0004, 0x2fe: 0x514a, 0x2ff: 0x0004,
 	// Block 0xc, offset 0x300
-	0x300: 0x0004, 0x301: 0x0004, 0x302: 0xa34a, 0x303: 0xa56a, 0x304: 0xa70a,
-	0x306: 0xa8ca, 0x307: 0xaa0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153,
-	0x30c: 0xac89, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812,
-	0x312: 0xae2a, 0x313: 0xafea, 0x316: 0xb1aa, 0x317: 0xb2ea,
+	0x300: 0x0004, 0x301: 0x0004, 0x302: 0x51aa, 0x303: 0x52ba, 0x304: 0x538a,
+	0x306: 0x546a, 0x307: 0x550a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153,
+	0x30c: 0x5649, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812,
+	0x312: 0x571a, 0x313: 0x57fa, 0x316: 0x58da, 0x317: 0x597a,
 	0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004,
-	0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0xb4aa, 0x323: 0xb66a,
-	0x324: 0xb82a, 0x325: 0x0912, 0x326: 0xb96a, 0x327: 0xbaaa, 0x328: 0x0813, 0x329: 0x0813,
+	0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x5a5a, 0x323: 0x5b3a,
+	0x324: 0x5c1a, 0x325: 0x0912, 0x326: 0x5cba, 0x327: 0x5d5a, 0x328: 0x0813, 0x329: 0x0813,
 	0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004,
-	0x332: 0xbc6a, 0x333: 0xbe8a, 0x334: 0xc02a,
-	0x336: 0xc1ea, 0x337: 0xc32a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53,
-	0x33c: 0xc5a9, 0x33d: 0x0004, 0x33e: 0x0004,
+	0x332: 0x5e3a, 0x333: 0x5f4a, 0x334: 0x601a,
+	0x336: 0x60fa, 0x337: 0x619a, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53,
+	0x33c: 0x62d9, 0x33d: 0x0004, 0x33e: 0x0004,
 	// Block 0xd, offset 0x340
 	0x342: 0x0013,
 	0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013,
 	0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013,
 	0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013,
 	0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013,
-	0x364: 0x0013, 0x366: 0xc74b, 0x368: 0x0013,
-	0x36a: 0xc80b, 0x36b: 0xc88b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012,
+	0x364: 0x0013, 0x366: 0x63ab, 0x368: 0x0013,
+	0x36a: 0x640b, 0x36b: 0x644b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012,
 	0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010,
 	0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012,
 	0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013,
@@ -401,27 +401,27 @@
 	0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952,
 	0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952,
 	0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952,
-	0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0xc94b, 0x3e3: 0x8853,
-	0x3e4: 0xca0b, 0x3e5: 0xcaca, 0x3e6: 0xcb4a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313,
-	0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0xcbcb, 0x3ee: 0xcc8b, 0x3ef: 0xcd4b,
-	0x3f0: 0xce0b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313,
+	0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0x64ab, 0x3e3: 0x8853,
+	0x3e4: 0x650b, 0x3e5: 0x656a, 0x3e6: 0x65aa, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313,
+	0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0x65eb, 0x3ee: 0x664b, 0x3ef: 0x66ab,
+	0x3f0: 0x670b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313,
 	0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012,
-	0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0xcecb, 0x3ff: 0xcf8b,
+	0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0x676b, 0x3ff: 0x67cb,
 	// Block 0x10, offset 0x400
 	0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112,
 	0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0014, 0x40a: 0x0014, 0x40b: 0x0713,
-	0x40c: 0x0712, 0x40d: 0xd04b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112,
+	0x40c: 0x0712, 0x40d: 0x682b, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112,
 	0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112,
 	0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112,
 	0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112,
 	0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112,
-	0x42a: 0xd10b, 0x42b: 0xd1cb, 0x42c: 0xd28b, 0x42d: 0xd34b, 0x42e: 0xd40b,
-	0x430: 0xd4cb, 0x431: 0xd58b, 0x432: 0xd64b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112,
+	0x42a: 0x688b, 0x42b: 0x68eb, 0x42c: 0x694b, 0x42d: 0x69ab, 0x42e: 0x6a0b,
+	0x430: 0x6a6b, 0x431: 0x6acb, 0x432: 0x6b2b, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112,
 	0x436: 0x0113, 0x437: 0x0112,
 	// Block 0x11, offset 0x440
-	0x440: 0xd70a, 0x441: 0xd80a, 0x442: 0xd90a, 0x443: 0xda0a, 0x444: 0xdb6a, 0x445: 0xdcca,
-	0x446: 0xddca,
-	0x453: 0xdeca, 0x454: 0xe08a, 0x455: 0xe24a, 0x456: 0xe40a, 0x457: 0xe5ca,
+	0x440: 0x6b8a, 0x441: 0x6c0a, 0x442: 0x6c8a, 0x443: 0x6d0a, 0x444: 0x6dba, 0x445: 0x6e6a,
+	0x446: 0x6eea,
+	0x453: 0x6f6a, 0x454: 0x704a, 0x455: 0x712a, 0x456: 0x720a, 0x457: 0x72ea,
 	0x45d: 0x0010,
 	0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010,
 	0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010,
@@ -583,21 +583,21 @@
 	{value: 0x0014, lo: 0xad, hi: 0xad},
 	{value: 0x0004, lo: 0xaf, hi: 0xaf},
 	{value: 0x0004, lo: 0xb4, hi: 0xb4},
-	{value: 0x002a, lo: 0xb5, hi: 0xb5},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
 	{value: 0x0054, lo: 0xb7, hi: 0xb7},
 	{value: 0x0004, lo: 0xb8, hi: 0xb8},
 	{value: 0x0012, lo: 0xba, hi: 0xba},
 	// Block 0x1, offset 0x9
 	{value: 0x2013, lo: 0x80, hi: 0x96},
 	{value: 0x2013, lo: 0x98, hi: 0x9e},
-	{value: 0x00ea, lo: 0x9f, hi: 0x9f},
+	{value: 0x007a, lo: 0x9f, hi: 0x9f},
 	{value: 0x2012, lo: 0xa0, hi: 0xb6},
 	{value: 0x2012, lo: 0xb8, hi: 0xbe},
 	{value: 0x0252, lo: 0xbf, hi: 0xbf},
 	// Block 0x2, offset 0xf
 	{value: 0x0117, lo: 0x80, hi: 0xaf},
-	{value: 0x01eb, lo: 0xb0, hi: 0xb0},
-	{value: 0x02ea, lo: 0xb1, hi: 0xb1},
+	{value: 0x00fb, lo: 0xb0, hi: 0xb0},
+	{value: 0x017a, lo: 0xb1, hi: 0xb1},
 	{value: 0x0117, lo: 0xb2, hi: 0xb7},
 	{value: 0x0012, lo: 0xb8, hi: 0xb8},
 	{value: 0x0316, lo: 0xb9, hi: 0xba},
@@ -610,24 +610,24 @@
 	{value: 0x0716, lo: 0x83, hi: 0x84},
 	{value: 0x0316, lo: 0x85, hi: 0x86},
 	{value: 0x0f16, lo: 0x87, hi: 0x88},
-	{value: 0x034a, lo: 0x89, hi: 0x89},
+	{value: 0x01aa, lo: 0x89, hi: 0x89},
 	{value: 0x0117, lo: 0x8a, hi: 0xb7},
 	{value: 0x0253, lo: 0xb8, hi: 0xb8},
 	{value: 0x0316, lo: 0xb9, hi: 0xba},
 	{value: 0x0716, lo: 0xbb, hi: 0xbc},
 	{value: 0x0316, lo: 0xbd, hi: 0xbe},
-	{value: 0x044a, lo: 0xbf, hi: 0xbf},
+	{value: 0x022a, lo: 0xbf, hi: 0xbf},
 	// Block 0x4, offset 0x24
 	{value: 0x0117, lo: 0x80, hi: 0x9f},
 	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
 	{value: 0x0012, lo: 0xa1, hi: 0xa1},
 	{value: 0x0117, lo: 0xa2, hi: 0xb3},
 	{value: 0x0012, lo: 0xb4, hi: 0xb9},
-	{value: 0x10cb, lo: 0xba, hi: 0xba},
+	{value: 0x086b, lo: 0xba, hi: 0xba},
 	{value: 0x0716, lo: 0xbb, hi: 0xbc},
 	{value: 0x2953, lo: 0xbd, hi: 0xbd},
-	{value: 0x11cb, lo: 0xbe, hi: 0xbe},
-	{value: 0x12ca, lo: 0xbf, hi: 0xbf},
+	{value: 0x08eb, lo: 0xbe, hi: 0xbe},
+	{value: 0x096a, lo: 0xbf, hi: 0xbf},
 	// Block 0x5, offset 0x2e
 	{value: 0x0015, lo: 0x80, hi: 0x81},
 	{value: 0x0014, lo: 0x82, hi: 0x97},
@@ -676,7 +676,7 @@
 	{value: 0x3012, lo: 0xb0, hi: 0xbf},
 	// Block 0xd, offset 0x54
 	{value: 0x6852, lo: 0x80, hi: 0x86},
-	{value: 0x27aa, lo: 0x87, hi: 0x87},
+	{value: 0x13da, lo: 0x87, hi: 0x87},
 	{value: 0x0034, lo: 0x91, hi: 0x91},
 	{value: 0x0024, lo: 0x92, hi: 0x95},
 	{value: 0x0034, lo: 0x96, hi: 0x96},
@@ -1299,15 +1299,15 @@
 	{value: 0x0010, lo: 0x8d, hi: 0xb7},
 	{value: 0x0014, lo: 0xb8, hi: 0xbd},
 	// Block 0x5a, offset 0x277
-	{value: 0x296a, lo: 0x80, hi: 0x80},
-	{value: 0x2a2a, lo: 0x81, hi: 0x81},
-	{value: 0x2aea, lo: 0x82, hi: 0x82},
-	{value: 0x2baa, lo: 0x83, hi: 0x83},
-	{value: 0x2c6a, lo: 0x84, hi: 0x84},
-	{value: 0x2d2a, lo: 0x85, hi: 0x85},
-	{value: 0x2dea, lo: 0x86, hi: 0x86},
-	{value: 0x2eaa, lo: 0x87, hi: 0x87},
-	{value: 0x2f6a, lo: 0x88, hi: 0x88},
+	{value: 0x14ba, lo: 0x80, hi: 0x80},
+	{value: 0x151a, lo: 0x81, hi: 0x81},
+	{value: 0x157a, lo: 0x82, hi: 0x82},
+	{value: 0x15da, lo: 0x83, hi: 0x83},
+	{value: 0x163a, lo: 0x84, hi: 0x84},
+	{value: 0x169a, lo: 0x85, hi: 0x85},
+	{value: 0x16fa, lo: 0x86, hi: 0x86},
+	{value: 0x175a, lo: 0x87, hi: 0x87},
+	{value: 0x17ba, lo: 0x88, hi: 0x88},
 	// Block 0x5b, offset 0x280
 	{value: 0x0024, lo: 0x90, hi: 0x92},
 	{value: 0x0034, lo: 0x94, hi: 0x99},
@@ -1353,14 +1353,14 @@
 	{value: 0x0117, lo: 0x80, hi: 0xbf},
 	// Block 0x61, offset 0x2a5
 	{value: 0x0117, lo: 0x80, hi: 0x95},
-	{value: 0x306a, lo: 0x96, hi: 0x96},
-	{value: 0x316a, lo: 0x97, hi: 0x97},
-	{value: 0x326a, lo: 0x98, hi: 0x98},
-	{value: 0x336a, lo: 0x99, hi: 0x99},
-	{value: 0x346a, lo: 0x9a, hi: 0x9a},
-	{value: 0x356a, lo: 0x9b, hi: 0x9b},
+	{value: 0x183a, lo: 0x96, hi: 0x96},
+	{value: 0x18ba, lo: 0x97, hi: 0x97},
+	{value: 0x193a, lo: 0x98, hi: 0x98},
+	{value: 0x19ba, lo: 0x99, hi: 0x99},
+	{value: 0x1a3a, lo: 0x9a, hi: 0x9a},
+	{value: 0x1aba, lo: 0x9b, hi: 0x9b},
 	{value: 0x0012, lo: 0x9c, hi: 0x9d},
-	{value: 0x366b, lo: 0x9e, hi: 0x9e},
+	{value: 0x1b3b, lo: 0x9e, hi: 0x9e},
 	{value: 0x0012, lo: 0x9f, hi: 0x9f},
 	{value: 0x0117, lo: 0xa0, hi: 0xbf},
 	// Block 0x62, offset 0x2b0
diff --git a/cases/trieval.go b/cases/trieval.go
index fb221f8..99e0396 100644
--- a/cases/trieval.go
+++ b/cases/trieval.go
@@ -15,8 +15,7 @@
 // The per-rune values have the following format:
 //
 //   if (exception) {
-//     15..5  unsigned exception index
-//         4  unused
+//     15..4  unsigned exception index
 //   } else {
 //     15..8  XOR pattern or index to XOR pattern for case mapping
 //            Only 13..8 are used for XOR patterns.
@@ -48,8 +47,8 @@
 	isMidBit       = 1 << 6
 
 	exceptionBit     = 1 << 3
-	exceptionShift   = 5
-	numExceptionBits = 11
+	exceptionShift   = 4
+	numExceptionBits = 12
 
 	xorIndexBit = 1 << 6
 	xorShift    = 8