Home | History | Annotate | Download | only in src
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // This file was generated at 2014-10-08 15:25:47.940335
      6 
      7 #include "src/unicode.h"
      8 #include "src/unicode-inl.h"
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 
     12 namespace unibrow {
     13 
     14 static const int kStartBit = (1 << 30);
     15 static const int kChunkBits = (1 << 13);
     16 static const uchar kSentinel = static_cast<uchar>(-1);
     17 
     18 /**
     19  * \file
     20  * Implementations of functions for working with unicode.
     21  */
     22 
     23 typedef signed short int16_t;  // NOLINT
     24 typedef unsigned short uint16_t;  // NOLINT
     25 typedef int int32_t;  // NOLINT
     26 
     27 
     28 // All access to the character table should go through this function.
     29 template <int D>
     30 static inline uchar TableGet(const int32_t* table, int index) {
     31   return table[D * index];
     32 }
     33 
     34 
     35 static inline uchar GetEntry(int32_t entry) {
     36   return entry & (kStartBit - 1);
     37 }
     38 
     39 
     40 static inline bool IsStart(int32_t entry) {
     41   return (entry & kStartBit) != 0;
     42 }
     43 
     44 
     45 /**
     46  * Look up a character in the unicode table using a mix of binary and
     47  * interpolation search.  For a uniformly distributed array
     48  * interpolation search beats binary search by a wide margin.  However,
     49  * in this case interpolation search degenerates because of some very
     50  * high values in the lower end of the table so this function uses a
     51  * combination.  The average number of steps to look up the information
     52  * about a character is around 10, slightly higher if there is no
     53  * information available about the character.
     54  */
     55 static bool LookupPredicate(const int32_t* table, uint16_t size, uchar chr) {
     56   static const int kEntryDist = 1;
     57   uint16_t value = chr & (kChunkBits - 1);
     58   unsigned int low = 0;
     59   unsigned int high = size - 1;
     60   while (high != low) {
     61     unsigned int mid = low + ((high - low) >> 1);
     62     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
     63     // If we've found an entry less than or equal to this one, and the
     64     // next one is not also less than this one, we've arrived.
     65     if ((current_value <= value) &&
     66         (mid + 1 == size ||
     67          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > value)) {
     68       low = mid;
     69       break;
     70     } else if (current_value < value) {
     71       low = mid + 1;
     72     } else if (current_value > value) {
     73       // If we've just checked the bottom-most value and it's not
     74       // the one we're looking for, we're done.
     75       if (mid == 0) break;
     76       high = mid - 1;
     77     }
     78   }
     79   int32_t field = TableGet<kEntryDist>(table, low);
     80   uchar entry = GetEntry(field);
     81   bool is_start = IsStart(field);
     82   return (entry == value) || (entry < value && is_start);
     83 }
     84 
     85 template <int kW>
     86 struct MultiCharacterSpecialCase {
     87   static const uchar kEndOfEncoding = kSentinel;
     88   uchar chars[kW];
     89 };
     90 
     91 
     92 // Look up the mapping for the given character in the specified table,
     93 // which is of the specified length and uses the specified special case
     94 // mapping for multi-char mappings.  The next parameter is the character
     95 // following the one to map.  The result will be written in to the result
     96 // buffer and the number of characters written will be returned.  Finally,
     97 // if the allow_caching_ptr is non-null then false will be stored in
     98 // it if the result contains multiple characters or depends on the
     99 // context.
    100 // If ranges are linear, a match between a start and end point is
    101 // offset by the distance between the match and the start. Otherwise
    102 // the result is the same as for the start point on the entire range.
    103 template <bool ranges_are_linear, int kW>
    104 static int LookupMapping(const int32_t* table,
    105                          uint16_t size,
    106                          const MultiCharacterSpecialCase<kW>* multi_chars,
    107                          uchar chr,
    108                          uchar next,
    109                          uchar* result,
    110                          bool* allow_caching_ptr) {
    111   static const int kEntryDist = 2;
    112   uint16_t key = chr & (kChunkBits - 1);
    113   uint16_t chunk_start = chr - key;
    114   unsigned int low = 0;
    115   unsigned int high = size - 1;
    116   while (high != low) {
    117     unsigned int mid = low + ((high - low) >> 1);
    118     uchar current_value = GetEntry(TableGet<kEntryDist>(table, mid));
    119     // If we've found an entry less than or equal to this one, and the next one
    120     // is not also less than this one, we've arrived.
    121     if ((current_value <= key) &&
    122         (mid + 1 == size ||
    123          GetEntry(TableGet<kEntryDist>(table, mid + 1)) > key)) {
    124       low = mid;
    125       break;
    126     } else if (current_value < key) {
    127       low = mid + 1;
    128     } else if (current_value > key) {
    129       // If we've just checked the bottom-most value and it's not
    130       // the one we're looking for, we're done.
    131       if (mid == 0) break;
    132       high = mid - 1;
    133     }
    134   }
    135   int32_t field = TableGet<kEntryDist>(table, low);
    136   uchar entry = GetEntry(field);
    137   bool is_start = IsStart(field);
    138   bool found = (entry == key) || (entry < key && is_start);
    139   if (found) {
    140     int32_t value = table[2 * low + 1];
    141     if (value == 0) {
    142       // 0 means not present
    143       return 0;
    144     } else if ((value & 3) == 0) {
    145       // Low bits 0 means a constant offset from the given character.
    146       if (ranges_are_linear) {
    147         result[0] = chr + (value >> 2);
    148       } else {
    149         result[0] = entry + chunk_start + (value >> 2);
    150       }
    151       return 1;
    152     } else if ((value & 3) == 1) {
    153       // Low bits 1 means a special case mapping
    154       if (allow_caching_ptr) *allow_caching_ptr = false;
    155       const MultiCharacterSpecialCase<kW>& mapping = multi_chars[value >> 2];
    156       int length = 0;
    157       for (length = 0; length < kW; length++) {
    158         uchar mapped = mapping.chars[length];
    159         if (mapped == MultiCharacterSpecialCase<kW>::kEndOfEncoding) break;
    160         if (ranges_are_linear) {
    161           result[length] = mapped + (key - entry);
    162         } else {
    163           result[length] = mapped;
    164         }
    165       }
    166       return length;
    167     } else {
    168       // Low bits 2 means a really really special case
    169       if (allow_caching_ptr) *allow_caching_ptr = false;
    170       // The cases of this switch are defined in unicode.py in the
    171       // really_special_cases mapping.
    172       switch (value >> 2) {
    173         case 1:
    174           // Really special case 1: upper case sigma.  This letter
    175           // converts to two different lower case sigmas depending on
    176           // whether or not it occurs at the end of a word.
    177           if (next != 0 && Letter::Is(next)) {
    178             result[0] = 0x03C3;
    179           } else {
    180             result[0] = 0x03C2;
    181           }
    182           return 1;
    183         default:
    184           return 0;
    185       }
    186       return -1;
    187     }
    188   } else {
    189     return 0;
    190   }
    191 }
    192 
    193 static inline uint8_t NonASCIISequenceLength(byte first) {
    194   // clang-format off
    195   static const uint8_t lengths[256] = {
    196       // The first 128 entries correspond to ASCII characters.
    197       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    198       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    199       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    200       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    201       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    202       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    203       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    204       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    205       // The following 64 entries correspond to continuation bytes.
    206       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    207       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    208       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    209       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    210       // The next are two invalid overlong encodings and 30 two-byte sequences.
    211       0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    212       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    213       // 16 three-byte sequences.
    214       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
    215       // 5 four-byte sequences, followed by sequences that could only encode
    216       // code points outside of the unicode range.
    217       4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    218   // clang-format on
    219   return lengths[first];
    220 }
    221 
    222 
    223 static inline bool IsContinuationCharacter(byte chr) {
    224   return chr >= 0x80 && chr <= 0xBF;
    225 }
    226 
    227 
    228 // This method decodes an UTF-8 value according to RFC 3629.
    229 uchar Utf8::CalculateValue(const byte* str, size_t max_length, size_t* cursor) {
    230   size_t length = NonASCIISequenceLength(str[0]);
    231 
    232   // Check continuation characters.
    233   size_t max_count = std::min(length, max_length);
    234   size_t count = 1;
    235   while (count < max_count && IsContinuationCharacter(str[count])) {
    236     count++;
    237   }
    238   *cursor += count;
    239 
    240   // There must be enough continuation characters.
    241   if (count != length) return kBadChar;
    242 
    243   // Check overly long sequences & other conditions.
    244   if (length == 3) {
    245     if (str[0] == 0xE0 && (str[1] < 0xA0 || str[1] > 0xBF)) {
    246       // Overlong three-byte sequence?
    247       return kBadChar;
    248     } else if (str[0] == 0xED && (str[1] < 0x80 || str[1] > 0x9F)) {
    249       // High and low surrogate halves?
    250       return kBadChar;
    251     }
    252   } else if (length == 4) {
    253     if (str[0] == 0xF0 && (str[1] < 0x90 || str[1] > 0xBF)) {
    254       // Overlong four-byte sequence.
    255       return kBadChar;
    256     } else if (str[0] == 0xF4 && (str[1] < 0x80 || str[1] > 0x8F)) {
    257       // Code points outside of the unicode range.
    258       return kBadChar;
    259     }
    260   }
    261 
    262   // All errors have been handled, so we only have to assemble the result.
    263   switch (length) {
    264     case 1:
    265       return str[0];
    266     case 2:
    267       return ((str[0] << 6) + str[1]) - 0x00003080;
    268     case 3:
    269       return ((str[0] << 12) + (str[1] << 6) + str[2]) - 0x000E2080;
    270     case 4:
    271       return ((str[0] << 18) + (str[1] << 12) + (str[2] << 6) + str[3]) -
    272              0x03C82080;
    273   }
    274 
    275   UNREACHABLE();
    276   return kBadChar;
    277 }
    278 
    279 uchar Utf8::ValueOfIncremental(byte next, Utf8IncrementalBuffer* buffer) {
    280   DCHECK_NOT_NULL(buffer);
    281 
    282   // The common case: 1-byte Utf8 (and no incomplete char in the buffer)
    283   if (V8_LIKELY(next <= kMaxOneByteChar && *buffer == 0)) {
    284     return static_cast<uchar>(next);
    285   }
    286 
    287   if (*buffer == 0) {
    288     // We're at the start of a new character.
    289     uint32_t kind = NonASCIISequenceLength(next);
    290     if (kind >= 2 && kind <= 4) {
    291       // Start of 2..4 byte character, and no buffer.
    292 
    293       // The mask for the lower bits depends on the kind, and is
    294       // 0x1F, 0x0F, 0x07 for kinds 2, 3, 4 respectively. We can get that
    295       // with one shift.
    296       uint8_t mask = 0x7f >> kind;
    297 
    298       // Store the kind in the top nibble, and kind - 1 (i.e., remaining bytes)
    299       // in 2nd nibble, and the value  in the bottom three. The 2nd nibble is
    300       // intended as a counter about how many bytes are still needed.
    301       *buffer = kind << 28 | (kind - 1) << 24 | (next & mask);
    302       return kIncomplete;
    303     } else {
    304       // No buffer, and not the start of a 1-byte char (handled at the
    305       // beginning), and not the start of a 2..4 byte char? Bad char.
    306       *buffer = 0;
    307       return kBadChar;
    308     }
    309   } else if (*buffer <= 0xff) {
    310     // We have one unprocessed byte left (from the last else case in this if
    311     // statement).
    312     uchar previous = *buffer;
    313     *buffer = 0;
    314     uchar t = ValueOfIncremental(previous, buffer);
    315     if (t == kIncomplete) {
    316       // If we have an incomplete character, process both the previous and the
    317       // next byte at once.
    318       return ValueOfIncremental(next, buffer);
    319     } else {
    320       // Otherwise, process the previous byte and save the next byte for next
    321       // time.
    322       DCHECK_EQ(0u, *buffer);
    323       *buffer = next;
    324       return t;
    325     }
    326   } else if (IsContinuationCharacter(next)) {
    327     // We're inside of a character, as described by buffer.
    328 
    329     // How many bytes (excluding this one) do we still expect?
    330     uint8_t bytes_expected = *buffer >> 28;
    331     uint8_t bytes_left = (*buffer >> 24) & 0x0f;
    332     bytes_left--;
    333     // Update the value.
    334     uint32_t value = ((*buffer & 0xffffff) << 6) | (next & 0x3F);
    335     if (bytes_left) {
    336       *buffer = (bytes_expected << 28 | bytes_left << 24 | value);
    337       return kIncomplete;
    338     } else {
    339       *buffer = 0;
    340       bool sequence_was_too_long = (bytes_expected == 2 && value < 0x80) ||
    341                                    (bytes_expected == 3 && value < 0x800);
    342       return sequence_was_too_long ? kBadChar : value;
    343     }
    344   } else {
    345     // Within a character, but not a continuation character? Then the
    346     // previous char was a bad char. But we need to save the current
    347     // one.
    348     *buffer = next;
    349     return kBadChar;
    350   }
    351 }
    352 
    353 uchar Utf8::ValueOfIncrementalFinish(Utf8IncrementalBuffer* buffer) {
    354   DCHECK_NOT_NULL(buffer);
    355   if (*buffer == 0) {
    356     return kBufferEmpty;
    357   } else {
    358     // Process left-over chars. An incomplete char at the end maps to kBadChar.
    359     uchar t = ValueOfIncremental(0, buffer);
    360     return (t == kIncomplete) ? kBadChar : t;
    361   }
    362 }
    363 
    364 bool Utf8::Validate(const byte* bytes, size_t length) {
    365   size_t cursor = 0;
    366 
    367   // Performance optimization: Skip over single-byte values first.
    368   while (cursor < length && bytes[cursor] <= kMaxOneByteChar) {
    369     ++cursor;
    370   }
    371 
    372   while (cursor < length) {
    373     uchar c = ValueOf(bytes + cursor, length - cursor, &cursor);
    374     if (!IsValidCharacter(c)) return false;
    375   }
    376   return true;
    377 }
    378 
    379 // Uppercase:            point.category == 'Lu'
    380 
    381 static const uint16_t kUppercaseTable0Size = 455;
    382 static const int32_t kUppercaseTable0[455] = {
    383     1073741889, 90,         1073742016, 214,
    384     1073742040, 222,        256,        258,  // NOLINT
    385     260,        262,        264,        266,
    386     268,        270,        272,        274,  // NOLINT
    387     276,        278,        280,        282,
    388     284,        286,        288,        290,  // NOLINT
    389     292,        294,        296,        298,
    390     300,        302,        304,        306,  // NOLINT
    391     308,        310,        313,        315,
    392     317,        319,        321,        323,  // NOLINT
    393     325,        327,        330,        332,
    394     334,        336,        338,        340,  // NOLINT
    395     342,        344,        346,        348,
    396     350,        352,        354,        356,  // NOLINT
    397     358,        360,        362,        364,
    398     366,        368,        370,        372,  // NOLINT
    399     374,        1073742200, 377,        379,
    400     381,        1073742209, 386,        388,  // NOLINT
    401     1073742214, 391,        1073742217, 395,
    402     1073742222, 401,        1073742227, 404,  // NOLINT
    403     1073742230, 408,        1073742236, 413,
    404     1073742239, 416,        418,        420,  // NOLINT
    405     1073742246, 423,        425,        428,
    406     1073742254, 431,        1073742257, 435,  // NOLINT
    407     437,        1073742263, 440,        444,
    408     452,        455,        458,        461,  // NOLINT
    409     463,        465,        467,        469,
    410     471,        473,        475,        478,  // NOLINT
    411     480,        482,        484,        486,
    412     488,        490,        492,        494,  // NOLINT
    413     497,        500,        1073742326, 504,
    414     506,        508,        510,        512,  // NOLINT
    415     514,        516,        518,        520,
    416     522,        524,        526,        528,  // NOLINT
    417     530,        532,        534,        536,
    418     538,        540,        542,        544,  // NOLINT
    419     546,        548,        550,        552,
    420     554,        556,        558,        560,  // NOLINT
    421     562,        1073742394, 571,        1073742397,
    422     574,        577,        1073742403, 582,  // NOLINT
    423     584,        586,        588,        590,
    424     880,        882,        886,        895,  // NOLINT
    425     902,        1073742728, 906,        908,
    426     1073742734, 911,        1073742737, 929,  // NOLINT
    427     1073742755, 939,        975,        1073742802,
    428     980,        984,        986,        988,  // NOLINT
    429     990,        992,        994,        996,
    430     998,        1000,       1002,       1004,  // NOLINT
    431     1006,       1012,       1015,       1073742841,
    432     1018,       1073742845, 1071,       1120,  // NOLINT
    433     1122,       1124,       1126,       1128,
    434     1130,       1132,       1134,       1136,  // NOLINT
    435     1138,       1140,       1142,       1144,
    436     1146,       1148,       1150,       1152,  // NOLINT
    437     1162,       1164,       1166,       1168,
    438     1170,       1172,       1174,       1176,  // NOLINT
    439     1178,       1180,       1182,       1184,
    440     1186,       1188,       1190,       1192,  // NOLINT
    441     1194,       1196,       1198,       1200,
    442     1202,       1204,       1206,       1208,  // NOLINT
    443     1210,       1212,       1214,       1073743040,
    444     1217,       1219,       1221,       1223,  // NOLINT
    445     1225,       1227,       1229,       1232,
    446     1234,       1236,       1238,       1240,  // NOLINT
    447     1242,       1244,       1246,       1248,
    448     1250,       1252,       1254,       1256,  // NOLINT
    449     1258,       1260,       1262,       1264,
    450     1266,       1268,       1270,       1272,  // NOLINT
    451     1274,       1276,       1278,       1280,
    452     1282,       1284,       1286,       1288,  // NOLINT
    453     1290,       1292,       1294,       1296,
    454     1298,       1300,       1302,       1304,  // NOLINT
    455     1306,       1308,       1310,       1312,
    456     1314,       1316,       1318,       1320,  // NOLINT
    457     1322,       1324,       1326,       1073743153,
    458     1366,       1073746080, 4293,       4295,  // NOLINT
    459     4301,       7680,       7682,       7684,
    460     7686,       7688,       7690,       7692,  // NOLINT
    461     7694,       7696,       7698,       7700,
    462     7702,       7704,       7706,       7708,  // NOLINT
    463     7710,       7712,       7714,       7716,
    464     7718,       7720,       7722,       7724,  // NOLINT
    465     7726,       7728,       7730,       7732,
    466     7734,       7736,       7738,       7740,  // NOLINT
    467     7742,       7744,       7746,       7748,
    468     7750,       7752,       7754,       7756,  // NOLINT
    469     7758,       7760,       7762,       7764,
    470     7766,       7768,       7770,       7772,  // NOLINT
    471     7774,       7776,       7778,       7780,
    472     7782,       7784,       7786,       7788,  // NOLINT
    473     7790,       7792,       7794,       7796,
    474     7798,       7800,       7802,       7804,  // NOLINT
    475     7806,       7808,       7810,       7812,
    476     7814,       7816,       7818,       7820,  // NOLINT
    477     7822,       7824,       7826,       7828,
    478     7838,       7840,       7842,       7844,  // NOLINT
    479     7846,       7848,       7850,       7852,
    480     7854,       7856,       7858,       7860,  // NOLINT
    481     7862,       7864,       7866,       7868,
    482     7870,       7872,       7874,       7876,  // NOLINT
    483     7878,       7880,       7882,       7884,
    484     7886,       7888,       7890,       7892,  // NOLINT
    485     7894,       7896,       7898,       7900,
    486     7902,       7904,       7906,       7908,  // NOLINT
    487     7910,       7912,       7914,       7916,
    488     7918,       7920,       7922,       7924,  // NOLINT
    489     7926,       7928,       7930,       7932,
    490     7934,       1073749768, 7951,       1073749784,  // NOLINT
    491     7965,       1073749800, 7983,       1073749816,
    492     7999,       1073749832, 8013,       8025,  // NOLINT
    493     8027,       8029,       8031,       1073749864,
    494     8047,       1073749944, 8123,       1073749960,  // NOLINT
    495     8139,       1073749976, 8155,       1073749992,
    496     8172,       1073750008, 8187};  // NOLINT
    497 static const uint16_t kUppercaseTable1Size = 86;
    498 static const int32_t kUppercaseTable1[86] = {
    499   258, 263, 1073742091, 269, 1073742096, 274, 277, 1073742105,  // NOLINT
    500   285, 292, 294, 296, 1073742122, 301, 1073742128, 307,  // NOLINT
    501   1073742142, 319, 325, 387, 1073744896, 3118, 3168, 1073744994,  // NOLINT
    502   3172, 3175, 3177, 3179, 1073745005, 3184, 3186, 3189,  // NOLINT
    503   1073745022, 3200, 3202, 3204, 3206, 3208, 3210, 3212,  // NOLINT
    504   3214, 3216, 3218, 3220, 3222, 3224, 3226, 3228,  // NOLINT
    505   3230, 3232, 3234, 3236, 3238, 3240, 3242, 3244,  // NOLINT
    506   3246, 3248, 3250, 3252, 3254, 3256, 3258, 3260,  // NOLINT
    507   3262, 3264, 3266, 3268, 3270, 3272, 3274, 3276,  // NOLINT
    508   3278, 3280, 3282, 3284, 3286, 3288, 3290, 3292,  // NOLINT
    509   3294, 3296, 3298, 3307, 3309, 3314 };  // NOLINT
    510 static const uint16_t kUppercaseTable5Size = 101;
    511 static const int32_t kUppercaseTable5[101] = {
    512     1600, 1602,       1604, 1606,       1608, 1610,       1612, 1614,  // NOLINT
    513     1616, 1618,       1620, 1622,       1624, 1626,       1628, 1630,  // NOLINT
    514     1632, 1634,       1636, 1638,       1640, 1642,       1644, 1664,  // NOLINT
    515     1666, 1668,       1670, 1672,       1674, 1676,       1678, 1680,  // NOLINT
    516     1682, 1684,       1686, 1688,       1690, 1826,       1828, 1830,  // NOLINT
    517     1832, 1834,       1836, 1838,       1842, 1844,       1846, 1848,  // NOLINT
    518     1850, 1852,       1854, 1856,       1858, 1860,       1862, 1864,  // NOLINT
    519     1866, 1868,       1870, 1872,       1874, 1876,       1878, 1880,  // NOLINT
    520     1882, 1884,       1886, 1888,       1890, 1892,       1894, 1896,  // NOLINT
    521     1898, 1900,       1902, 1913,       1915, 1073743741, 1918, 1920,  // NOLINT
    522     1922, 1924,       1926, 1931,       1933, 1936,       1938, 1942,  // NOLINT
    523     1944, 1946,       1948, 1950,       1952, 1954,       1956, 1958,  // NOLINT
    524     1960, 1073743786, 1965, 1073743792, 1969};                         // NOLINT
    525 static const uint16_t kUppercaseTable7Size = 2;
    526 static const int32_t kUppercaseTable7[2] = {
    527   1073749793, 7994 };  // NOLINT
    528 bool Uppercase::Is(uchar c) {
    529   int chunk_index = c >> 13;
    530   switch (chunk_index) {
    531     case 0: return LookupPredicate(kUppercaseTable0,
    532                                        kUppercaseTable0Size,
    533                                        c);
    534     case 1: return LookupPredicate(kUppercaseTable1,
    535                                        kUppercaseTable1Size,
    536                                        c);
    537     case 5: return LookupPredicate(kUppercaseTable5,
    538                                        kUppercaseTable5Size,
    539                                        c);
    540     case 7: return LookupPredicate(kUppercaseTable7,
    541                                        kUppercaseTable7Size,
    542                                        c);
    543     default: return false;
    544   }
    545 }
    546 
    547 
    548 // Lowercase:            point.category == 'Ll'
    549 
    550 static const uint16_t kLowercaseTable0Size = 467;
    551 static const int32_t kLowercaseTable0[467] = {
    552     1073741921, 122,        181,        1073742047,
    553     246,        1073742072, 255,        257,  // NOLINT
    554     259,        261,        263,        265,
    555     267,        269,        271,        273,  // NOLINT
    556     275,        277,        279,        281,
    557     283,        285,        287,        289,  // NOLINT
    558     291,        293,        295,        297,
    559     299,        301,        303,        305,  // NOLINT
    560     307,        309,        1073742135, 312,
    561     314,        316,        318,        320,  // NOLINT
    562     322,        324,        326,        1073742152,
    563     329,        331,        333,        335,  // NOLINT
    564     337,        339,        341,        343,
    565     345,        347,        349,        351,  // NOLINT
    566     353,        355,        357,        359,
    567     361,        363,        365,        367,  // NOLINT
    568     369,        371,        373,        375,
    569     378,        380,        1073742206, 384,  // NOLINT
    570     387,        389,        392,        1073742220,
    571     397,        402,        405,        1073742233,  // NOLINT
    572     411,        414,        417,        419,
    573     421,        424,        1073742250, 427,  // NOLINT
    574     429,        432,        436,        438,
    575     1073742265, 442,        1073742269, 447,  // NOLINT
    576     454,        457,        460,        462,
    577     464,        466,        468,        470,  // NOLINT
    578     472,        474,        1073742300, 477,
    579     479,        481,        483,        485,  // NOLINT
    580     487,        489,        491,        493,
    581     1073742319, 496,        499,        501,  // NOLINT
    582     505,        507,        509,        511,
    583     513,        515,        517,        519,  // NOLINT
    584     521,        523,        525,        527,
    585     529,        531,        533,        535,  // NOLINT
    586     537,        539,        541,        543,
    587     545,        547,        549,        551,  // NOLINT
    588     553,        555,        557,        559,
    589     561,        1073742387, 569,        572,  // NOLINT
    590     1073742399, 576,        578,        583,
    591     585,        587,        589,        1073742415,  // NOLINT
    592     659,        1073742485, 687,        881,
    593     883,        887,        1073742715, 893,  // NOLINT
    594     912,        1073742764, 974,        1073742800,
    595     977,        1073742805, 983,        985,  // NOLINT
    596     987,        989,        991,        993,
    597     995,        997,        999,        1001,  // NOLINT
    598     1003,       1005,       1073742831, 1011,
    599     1013,       1016,       1073742843, 1020,  // NOLINT
    600     1073742896, 1119,       1121,       1123,
    601     1125,       1127,       1129,       1131,  // NOLINT
    602     1133,       1135,       1137,       1139,
    603     1141,       1143,       1145,       1147,  // NOLINT
    604     1149,       1151,       1153,       1163,
    605     1165,       1167,       1169,       1171,  // NOLINT
    606     1173,       1175,       1177,       1179,
    607     1181,       1183,       1185,       1187,  // NOLINT
    608     1189,       1191,       1193,       1195,
    609     1197,       1199,       1201,       1203,  // NOLINT
    610     1205,       1207,       1209,       1211,
    611     1213,       1215,       1218,       1220,  // NOLINT
    612     1222,       1224,       1226,       1228,
    613     1073743054, 1231,       1233,       1235,  // NOLINT
    614     1237,       1239,       1241,       1243,
    615     1245,       1247,       1249,       1251,  // NOLINT
    616     1253,       1255,       1257,       1259,
    617     1261,       1263,       1265,       1267,  // NOLINT
    618     1269,       1271,       1273,       1275,
    619     1277,       1279,       1281,       1283,  // NOLINT
    620     1285,       1287,       1289,       1291,
    621     1293,       1295,       1297,       1299,  // NOLINT
    622     1301,       1303,       1305,       1307,
    623     1309,       1311,       1313,       1315,  // NOLINT
    624     1317,       1319,       1321,       1323,
    625     1325,       1327,       1073743201, 1415,  // NOLINT
    626     1073749248, 7467,       1073749355, 7543,
    627     1073749369, 7578,       7681,       7683,  // NOLINT
    628     7685,       7687,       7689,       7691,
    629     7693,       7695,       7697,       7699,  // NOLINT
    630     7701,       7703,       7705,       7707,
    631     7709,       7711,       7713,       7715,  // NOLINT
    632     7717,       7719,       7721,       7723,
    633     7725,       7727,       7729,       7731,  // NOLINT
    634     7733,       7735,       7737,       7739,
    635     7741,       7743,       7745,       7747,  // NOLINT
    636     7749,       7751,       7753,       7755,
    637     7757,       7759,       7761,       7763,  // NOLINT
    638     7765,       7767,       7769,       7771,
    639     7773,       7775,       7777,       7779,  // NOLINT
    640     7781,       7783,       7785,       7787,
    641     7789,       7791,       7793,       7795,  // NOLINT
    642     7797,       7799,       7801,       7803,
    643     7805,       7807,       7809,       7811,  // NOLINT
    644     7813,       7815,       7817,       7819,
    645     7821,       7823,       7825,       7827,  // NOLINT
    646     1073749653, 7837,       7839,       7841,
    647     7843,       7845,       7847,       7849,  // NOLINT
    648     7851,       7853,       7855,       7857,
    649     7859,       7861,       7863,       7865,  // NOLINT
    650     7867,       7869,       7871,       7873,
    651     7875,       7877,       7879,       7881,  // NOLINT
    652     7883,       7885,       7887,       7889,
    653     7891,       7893,       7895,       7897,  // NOLINT
    654     7899,       7901,       7903,       7905,
    655     7907,       7909,       7911,       7913,  // NOLINT
    656     7915,       7917,       7919,       7921,
    657     7923,       7925,       7927,       7929,  // NOLINT
    658     7931,       7933,       1073749759, 7943,
    659     1073749776, 7957,       1073749792, 7975,  // NOLINT
    660     1073749808, 7991,       1073749824, 8005,
    661     1073749840, 8023,       1073749856, 8039,  // NOLINT
    662     1073749872, 8061,       1073749888, 8071,
    663     1073749904, 8087,       1073749920, 8103,  // NOLINT
    664     1073749936, 8116,       1073749942, 8119,
    665     8126,       1073749954, 8132,       1073749958,  // NOLINT
    666     8135,       1073749968, 8147,       1073749974,
    667     8151,       1073749984, 8167,       1073750002,  // NOLINT
    668     8180,       1073750006, 8183};                   // NOLINT
    669 static const uint16_t kLowercaseTable1Size = 84;
    670 static const int32_t kLowercaseTable1[84] = {
    671   266, 1073742094, 271, 275, 303, 308, 313, 1073742140,  // NOLINT
    672   317, 1073742150, 329, 334, 388, 1073744944, 3166, 3169,  // NOLINT
    673   1073744997, 3174, 3176, 3178, 3180, 3185, 1073745011, 3188,  // NOLINT
    674   1073745014, 3195, 3201, 3203, 3205, 3207, 3209, 3211,  // NOLINT
    675   3213, 3215, 3217, 3219, 3221, 3223, 3225, 3227,  // NOLINT
    676   3229, 3231, 3233, 3235, 3237, 3239, 3241, 3243,  // NOLINT
    677   3245, 3247, 3249, 3251, 3253, 3255, 3257, 3259,  // NOLINT
    678   3261, 3263, 3265, 3267, 3269, 3271, 3273, 3275,  // NOLINT
    679   3277, 3279, 3281, 3283, 3285, 3287, 3289, 3291,  // NOLINT
    680   3293, 3295, 3297, 1073745123, 3300, 3308, 3310, 3315,  // NOLINT
    681   1073745152, 3365, 3367, 3373 };  // NOLINT
    682 static const uint16_t kLowercaseTable5Size = 105;
    683 static const int32_t kLowercaseTable5[105] = {
    684     1601,       1603,       1605, 1607,
    685     1609,       1611,       1613, 1615,  // NOLINT
    686     1617,       1619,       1621, 1623,
    687     1625,       1627,       1629, 1631,  // NOLINT
    688     1633,       1635,       1637, 1639,
    689     1641,       1643,       1645, 1665,  // NOLINT
    690     1667,       1669,       1671, 1673,
    691     1675,       1677,       1679, 1681,  // NOLINT
    692     1683,       1685,       1687, 1689,
    693     1691,       1827,       1829, 1831,  // NOLINT
    694     1833,       1835,       1837, 1073743663,
    695     1841,       1843,       1845, 1847,  // NOLINT
    696     1849,       1851,       1853, 1855,
    697     1857,       1859,       1861, 1863,  // NOLINT
    698     1865,       1867,       1869, 1871,
    699     1873,       1875,       1877, 1879,  // NOLINT
    700     1881,       1883,       1885, 1887,
    701     1889,       1891,       1893, 1895,  // NOLINT
    702     1897,       1899,       1901, 1903,
    703     1073743729, 1912,       1914, 1916,  // NOLINT
    704     1919,       1921,       1923, 1925,
    705     1927,       1932,       1934, 1937,  // NOLINT
    706     1073743763, 1941,       1943, 1945,
    707     1947,       1949,       1951, 1953,  // NOLINT
    708     1955,       1957,       1959, 1961,
    709     2042,       1073744688, 2906, 1073744740,  // NOLINT
    710     2917};                                     // NOLINT
    711 static const uint16_t kLowercaseTable7Size = 6;
    712 static const int32_t kLowercaseTable7[6] = {
    713   1073748736, 6918, 1073748755, 6935, 1073749825, 8026 };  // NOLINT
    714 bool Lowercase::Is(uchar c) {
    715   int chunk_index = c >> 13;
    716   switch (chunk_index) {
    717     case 0: return LookupPredicate(kLowercaseTable0,
    718                                        kLowercaseTable0Size,
    719                                        c);
    720     case 1: return LookupPredicate(kLowercaseTable1,
    721                                        kLowercaseTable1Size,
    722                                        c);
    723     case 5: return LookupPredicate(kLowercaseTable5,
    724                                        kLowercaseTable5Size,
    725                                        c);
    726     case 7: return LookupPredicate(kLowercaseTable7,
    727                                        kLowercaseTable7Size,
    728                                        c);
    729     default: return false;
    730   }
    731 }
    732 
    733 
    734 // Letter:               point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl']
    735 
    736 static const uint16_t kLetterTable0Size = 431;
    737 static const int32_t kLetterTable0[431] = {
    738     1073741889, 90,         1073741921, 122,
    739     170,        181,        186,        1073742016,  // NOLINT
    740     214,        1073742040, 246,        1073742072,
    741     705,        1073742534, 721,        1073742560,  // NOLINT
    742     740,        748,        750,        1073742704,
    743     884,        1073742710, 887,        1073742714,  // NOLINT
    744     893,        895,        902,        1073742728,
    745     906,        908,        1073742734, 929,  // NOLINT
    746     1073742755, 1013,       1073742839, 1153,
    747     1073742986, 1327,       1073743153, 1366,  // NOLINT
    748     1369,       1073743201, 1415,       1073743312,
    749     1514,       1073743344, 1522,       1073743392,  // NOLINT
    750     1610,       1073743470, 1647,       1073743473,
    751     1747,       1749,       1073743589, 1766,  // NOLINT
    752     1073743598, 1775,       1073743610, 1788,
    753     1791,       1808,       1073743634, 1839,  // NOLINT
    754     1073743693, 1957,       1969,       1073743818,
    755     2026,       1073743860, 2037,       2042,  // NOLINT
    756     1073743872, 2069,       2074,       2084,
    757     2088,       1073743936, 2136,       1073744032,  // NOLINT
    758     2226,       1073744132, 2361,       2365,
    759     2384,       1073744216, 2401,       1073744241,  // NOLINT
    760     2432,       1073744261, 2444,       1073744271,
    761     2448,       1073744275, 2472,       1073744298,  // NOLINT
    762     2480,       2482,       1073744310, 2489,
    763     2493,       2510,       1073744348, 2525,  // NOLINT
    764     1073744351, 2529,       1073744368, 2545,
    765     1073744389, 2570,       1073744399, 2576,  // NOLINT
    766     1073744403, 2600,       1073744426, 2608,
    767     1073744434, 2611,       1073744437, 2614,  // NOLINT
    768     1073744440, 2617,       1073744473, 2652,
    769     2654,       1073744498, 2676,       1073744517,  // NOLINT
    770     2701,       1073744527, 2705,       1073744531,
    771     2728,       1073744554, 2736,       1073744562,  // NOLINT
    772     2739,       1073744565, 2745,       2749,
    773     2768,       1073744608, 2785,       1073744645,  // NOLINT
    774     2828,       1073744655, 2832,       1073744659,
    775     2856,       1073744682, 2864,       1073744690,  // NOLINT
    776     2867,       1073744693, 2873,       2877,
    777     1073744732, 2909,       1073744735, 2913,  // NOLINT
    778     2929,       2947,       1073744773, 2954,
    779     1073744782, 2960,       1073744786, 2965,  // NOLINT
    780     1073744793, 2970,       2972,       1073744798,
    781     2975,       1073744803, 2980,       1073744808,  // NOLINT
    782     2986,       1073744814, 3001,       3024,
    783     1073744901, 3084,       1073744910, 3088,  // NOLINT
    784     1073744914, 3112,       1073744938, 3129,
    785     3133,       1073744984, 3161,       1073744992,  // NOLINT
    786     3169,       1073745029, 3212,       1073745038,
    787     3216,       1073745042, 3240,       1073745066,  // NOLINT
    788     3251,       1073745077, 3257,       3261,
    789     3294,       1073745120, 3297,       1073745137,  // NOLINT
    790     3314,       1073745157, 3340,       1073745166,
    791     3344,       1073745170, 3386,       3389,  // NOLINT
    792     3406,       1073745248, 3425,       1073745274,
    793     3455,       1073745285, 3478,       1073745306,  // NOLINT
    794     3505,       1073745331, 3515,       3517,
    795     1073745344, 3526,       1073745409, 3632,  // NOLINT
    796     1073745458, 3635,       1073745472, 3654,
    797     1073745537, 3714,       3716,       1073745543,  // NOLINT
    798     3720,       3722,       3725,       1073745556,
    799     3735,       1073745561, 3743,       1073745569,  // NOLINT
    800     3747,       3749,       3751,       1073745578,
    801     3755,       1073745581, 3760,       1073745586,  // NOLINT
    802     3763,       3773,       1073745600, 3780,
    803     3782,       1073745628, 3807,       3840,  // NOLINT
    804     1073745728, 3911,       1073745737, 3948,
    805     1073745800, 3980,       1073745920, 4138,  // NOLINT
    806     4159,       1073746000, 4181,       1073746010,
    807     4189,       4193,       1073746021, 4198,  // NOLINT
    808     1073746030, 4208,       1073746037, 4225,
    809     4238,       1073746080, 4293,       4295,  // NOLINT
    810     4301,       1073746128, 4346,       1073746172,
    811     4680,       1073746506, 4685,       1073746512,  // NOLINT
    812     4694,       4696,       1073746522, 4701,
    813     1073746528, 4744,       1073746570, 4749,  // NOLINT
    814     1073746576, 4784,       1073746610, 4789,
    815     1073746616, 4798,       4800,       1073746626,  // NOLINT
    816     4805,       1073746632, 4822,       1073746648,
    817     4880,       1073746706, 4885,       1073746712,  // NOLINT
    818     4954,       1073746816, 5007,       1073746848,
    819     5108,       1073746945, 5740,       1073747567,  // NOLINT
    820     5759,       1073747585, 5786,       1073747616,
    821     5866,       1073747694, 5880,       1073747712,  // NOLINT
    822     5900,       1073747726, 5905,       1073747744,
    823     5937,       1073747776, 5969,       1073747808,  // NOLINT
    824     5996,       1073747822, 6000,       1073747840,
    825     6067,       6103,       6108,       1073748000,  // NOLINT
    826     6263,       1073748096, 6312,       6314,
    827     1073748144, 6389,       1073748224, 6430,  // NOLINT
    828     1073748304, 6509,       1073748336, 6516,
    829     1073748352, 6571,       1073748417, 6599,  // NOLINT
    830     1073748480, 6678,       1073748512, 6740,
    831     6823,       1073748741, 6963,       1073748805,  // NOLINT
    832     6987,       1073748867, 7072,       1073748910,
    833     7087,       1073748922, 7141,       1073748992,  // NOLINT
    834     7203,       1073749069, 7247,       1073749082,
    835     7293,       1073749225, 7404,       1073749230,  // NOLINT
    836     7409,       1073749237, 7414,       1073749248,
    837     7615,       1073749504, 7957,       1073749784,  // NOLINT
    838     7965,       1073749792, 8005,       1073749832,
    839     8013,       1073749840, 8023,       8025,  // NOLINT
    840     8027,       8029,       1073749855, 8061,
    841     1073749888, 8116,       1073749942, 8124,  // NOLINT
    842     8126,       1073749954, 8132,       1073749958,
    843     8140,       1073749968, 8147,       1073749974,  // NOLINT
    844     8155,       1073749984, 8172,       1073750002,
    845     8180,       1073750006, 8188};  // NOLINT
    846 static const uint16_t kLetterTable1Size = 87;
    847 static const int32_t kLetterTable1[87] = {
    848   113, 127, 1073741968, 156, 258, 263, 1073742090, 275,  // NOLINT
    849   277, 1073742105, 285, 292, 294, 296, 1073742122, 301,  // NOLINT
    850   1073742127, 313, 1073742140, 319, 1073742149, 329, 334, 1073742176,  // NOLINT
    851   392, 1073744896, 3118, 1073744944, 3166, 1073744992, 3300, 1073745131,  // NOLINT
    852   3310, 1073745138, 3315, 1073745152, 3365, 3367, 3373, 1073745200,  // NOLINT
    853   3431, 3439, 1073745280, 3478, 1073745312, 3494, 1073745320, 3502,  // NOLINT
    854   1073745328, 3510, 1073745336, 3518, 1073745344, 3526, 1073745352, 3534,  // NOLINT
    855   1073745360, 3542, 1073745368, 3550, 3631, 1073745925, 4103, 1073745953,  // NOLINT
    856   4137, 1073745969, 4149, 1073745976, 4156, 1073745985, 4246, 1073746077,  // NOLINT
    857   4255, 1073746081, 4346, 1073746172, 4351, 1073746181, 4397, 1073746225,  // NOLINT
    858   4494, 1073746336, 4538, 1073746416, 4607, 1073746944, 8191 };  // NOLINT
    859 static const uint16_t kLetterTable2Size = 4;
    860 static const int32_t kLetterTable2[4] = {
    861   1073741824, 3509, 1073745408, 8191 };  // NOLINT
    862 static const uint16_t kLetterTable3Size = 2;
    863 static const int32_t kLetterTable3[2] = {
    864   1073741824, 8191 };  // NOLINT
    865 static const uint16_t kLetterTable4Size = 2;
    866 static const int32_t kLetterTable4[2] = {
    867   1073741824, 8140 };  // NOLINT
    868 static const uint16_t kLetterTable5Size = 100;
    869 static const int32_t kLetterTable5[100] = {
    870     1073741824, 1164,       1073743056, 1277,
    871     1073743104, 1548,       1073743376, 1567,  // NOLINT
    872     1073743402, 1579,       1073743424, 1646,
    873     1073743487, 1693,       1073743520, 1775,  // NOLINT
    874     1073743639, 1823,       1073743650, 1928,
    875     1073743755, 1934,       1073743760, 1965,  // NOLINT
    876     1073743792, 1969,       1073743863, 2049,
    877     1073743875, 2053,       1073743879, 2058,  // NOLINT
    878     1073743884, 2082,       1073743936, 2163,
    879     1073744002, 2227,       1073744114, 2295,  // NOLINT
    880     2299,       1073744138, 2341,       1073744176,
    881     2374,       1073744224, 2428,       1073744260,  // NOLINT
    882     2482,       2511,       1073744352, 2532,
    883     1073744358, 2543,       1073744378, 2558,  // NOLINT
    884     1073744384, 2600,       1073744448, 2626,
    885     1073744452, 2635,       1073744480, 2678,  // NOLINT
    886     2682,       1073744510, 2735,       2737,
    887     1073744565, 2742,       1073744569, 2749,  // NOLINT
    888     2752,       2754,       1073744603, 2781,
    889     1073744608, 2794,       1073744626, 2804,  // NOLINT
    890     1073744641, 2822,       1073744649, 2830,
    891     1073744657, 2838,       1073744672, 2854,  // NOLINT
    892     1073744680, 2862,       1073744688, 2906,
    893     1073744732, 2911,       1073744740, 2917,   // NOLINT
    894     1073744832, 3042,       1073744896, 8191};  // NOLINT
    895 static const uint16_t kLetterTable6Size = 6;
    896 static const int32_t kLetterTable6[6] = {
    897   1073741824, 6051, 1073747888, 6086, 1073747915, 6139 };  // NOLINT
    898 static const uint16_t kLetterTable7Size = 48;
    899 static const int32_t kLetterTable7[48] = {
    900   1073748224, 6765, 1073748592, 6873, 1073748736, 6918, 1073748755, 6935,  // NOLINT
    901   6941, 1073748767, 6952, 1073748778, 6966, 1073748792, 6972, 6974,  // NOLINT
    902   1073748800, 6977, 1073748803, 6980, 1073748806, 7089, 1073748947, 7485,  // NOLINT
    903   1073749328, 7567, 1073749394, 7623, 1073749488, 7675, 1073749616, 7796,  // NOLINT
    904   1073749622, 7932, 1073749793, 7994, 1073749825, 8026, 1073749862, 8126,  // NOLINT
    905   1073749954, 8135, 1073749962, 8143, 1073749970, 8151, 1073749978, 8156 };  // NOLINT
    906 bool Letter::Is(uchar c) {
    907   int chunk_index = c >> 13;
    908   switch (chunk_index) {
    909     case 0: return LookupPredicate(kLetterTable0,
    910                                        kLetterTable0Size,
    911                                        c);
    912     case 1: return LookupPredicate(kLetterTable1,
    913                                        kLetterTable1Size,
    914                                        c);
    915     case 2: return LookupPredicate(kLetterTable2,
    916                                        kLetterTable2Size,
    917                                        c);
    918     case 3: return LookupPredicate(kLetterTable3,
    919                                        kLetterTable3Size,
    920                                        c);
    921     case 4: return LookupPredicate(kLetterTable4,
    922                                        kLetterTable4Size,
    923                                        c);
    924     case 5: return LookupPredicate(kLetterTable5,
    925                                        kLetterTable5Size,
    926                                        c);
    927     case 6: return LookupPredicate(kLetterTable6,
    928                                        kLetterTable6Size,
    929                                        c);
    930     case 7: return LookupPredicate(kLetterTable7,
    931                                        kLetterTable7Size,
    932                                        c);
    933     default: return false;
    934   }
    935 }
    936 
    937 
    938 // ID_Start:             ((point.category in ['Lu', 'Ll', 'Lt', 'Lm', 'Lo',
    939 // 'Nl'] or 'Other_ID_Start' in point.properties) and ('Pattern_Syntax' not in
    940 // point.properties) and ('Pattern_White_Space' not in point.properties)) or
    941 // ('JS_ID_Start' in point.properties)
    942 
    943 static const uint16_t kID_StartTable0Size = 434;
    944 static const int32_t kID_StartTable0[434] = {
    945     36,         1073741889, 90,         92,
    946     95,         1073741921, 122,        170,  // NOLINT
    947     181,        186,        1073742016, 214,
    948     1073742040, 246,        1073742072, 705,  // NOLINT
    949     1073742534, 721,        1073742560, 740,
    950     748,        750,        1073742704, 884,  // NOLINT
    951     1073742710, 887,        1073742714, 893,
    952     895,        902,        1073742728, 906,  // NOLINT
    953     908,        1073742734, 929,        1073742755,
    954     1013,       1073742839, 1153,       1073742986,  // NOLINT
    955     1327,       1073743153, 1366,       1369,
    956     1073743201, 1415,       1073743312, 1514,  // NOLINT
    957     1073743344, 1522,       1073743392, 1610,
    958     1073743470, 1647,       1073743473, 1747,  // NOLINT
    959     1749,       1073743589, 1766,       1073743598,
    960     1775,       1073743610, 1788,       1791,  // NOLINT
    961     1808,       1073743634, 1839,       1073743693,
    962     1957,       1969,       1073743818, 2026,  // NOLINT
    963     1073743860, 2037,       2042,       1073743872,
    964     2069,       2074,       2084,       2088,  // NOLINT
    965     1073743936, 2136,       1073744032, 2226,
    966     1073744132, 2361,       2365,       2384,  // NOLINT
    967     1073744216, 2401,       1073744241, 2432,
    968     1073744261, 2444,       1073744271, 2448,  // NOLINT
    969     1073744275, 2472,       1073744298, 2480,
    970     2482,       1073744310, 2489,       2493,  // NOLINT
    971     2510,       1073744348, 2525,       1073744351,
    972     2529,       1073744368, 2545,       1073744389,  // NOLINT
    973     2570,       1073744399, 2576,       1073744403,
    974     2600,       1073744426, 2608,       1073744434,  // NOLINT
    975     2611,       1073744437, 2614,       1073744440,
    976     2617,       1073744473, 2652,       2654,  // NOLINT
    977     1073744498, 2676,       1073744517, 2701,
    978     1073744527, 2705,       1073744531, 2728,  // NOLINT
    979     1073744554, 2736,       1073744562, 2739,
    980     1073744565, 2745,       2749,       2768,  // NOLINT
    981     1073744608, 2785,       1073744645, 2828,
    982     1073744655, 2832,       1073744659, 2856,  // NOLINT
    983     1073744682, 2864,       1073744690, 2867,
    984     1073744693, 2873,       2877,       1073744732,  // NOLINT
    985     2909,       1073744735, 2913,       2929,
    986     2947,       1073744773, 2954,       1073744782,  // NOLINT
    987     2960,       1073744786, 2965,       1073744793,
    988     2970,       2972,       1073744798, 2975,  // NOLINT
    989     1073744803, 2980,       1073744808, 2986,
    990     1073744814, 3001,       3024,       1073744901,  // NOLINT
    991     3084,       1073744910, 3088,       1073744914,
    992     3112,       1073744938, 3129,       3133,  // NOLINT
    993     1073744984, 3161,       1073744992, 3169,
    994     1073745029, 3212,       1073745038, 3216,  // NOLINT
    995     1073745042, 3240,       1073745066, 3251,
    996     1073745077, 3257,       3261,       3294,  // NOLINT
    997     1073745120, 3297,       1073745137, 3314,
    998     1073745157, 3340,       1073745166, 3344,  // NOLINT
    999     1073745170, 3386,       3389,       3406,
   1000     1073745248, 3425,       1073745274, 3455,  // NOLINT
   1001     1073745285, 3478,       1073745306, 3505,
   1002     1073745331, 3515,       3517,       1073745344,  // NOLINT
   1003     3526,       1073745409, 3632,       1073745458,
   1004     3635,       1073745472, 3654,       1073745537,  // NOLINT
   1005     3714,       3716,       1073745543, 3720,
   1006     3722,       3725,       1073745556, 3735,  // NOLINT
   1007     1073745561, 3743,       1073745569, 3747,
   1008     3749,       3751,       1073745578, 3755,  // NOLINT
   1009     1073745581, 3760,       1073745586, 3763,
   1010     3773,       1073745600, 3780,       3782,  // NOLINT
   1011     1073745628, 3807,       3840,       1073745728,
   1012     3911,       1073745737, 3948,       1073745800,  // NOLINT
   1013     3980,       1073745920, 4138,       4159,
   1014     1073746000, 4181,       1073746010, 4189,  // NOLINT
   1015     4193,       1073746021, 4198,       1073746030,
   1016     4208,       1073746037, 4225,       4238,  // NOLINT
   1017     1073746080, 4293,       4295,       4301,
   1018     1073746128, 4346,       1073746172, 4680,  // NOLINT
   1019     1073746506, 4685,       1073746512, 4694,
   1020     4696,       1073746522, 4701,       1073746528,  // NOLINT
   1021     4744,       1073746570, 4749,       1073746576,
   1022     4784,       1073746610, 4789,       1073746616,  // NOLINT
   1023     4798,       4800,       1073746626, 4805,
   1024     1073746632, 4822,       1073746648, 4880,  // NOLINT
   1025     1073746706, 4885,       1073746712, 4954,
   1026     1073746816, 5007,       1073746848, 5108,  // NOLINT
   1027     1073746945, 5740,       1073747567, 5759,
   1028     1073747585, 5786,       1073747616, 5866,  // NOLINT
   1029     1073747694, 5880,       1073747712, 5900,
   1030     1073747726, 5905,       1073747744, 5937,  // NOLINT
   1031     1073747776, 5969,       1073747808, 5996,
   1032     1073747822, 6000,       1073747840, 6067,  // NOLINT
   1033     6103,       6108,       1073748000, 6263,
   1034     1073748096, 6312,       6314,       1073748144,  // NOLINT
   1035     6389,       1073748224, 6430,       1073748304,
   1036     6509,       1073748336, 6516,       1073748352,  // NOLINT
   1037     6571,       1073748417, 6599,       1073748480,
   1038     6678,       1073748512, 6740,       6823,  // NOLINT
   1039     1073748741, 6963,       1073748805, 6987,
   1040     1073748867, 7072,       1073748910, 7087,  // NOLINT
   1041     1073748922, 7141,       1073748992, 7203,
   1042     1073749069, 7247,       1073749082, 7293,  // NOLINT
   1043     1073749225, 7404,       1073749230, 7409,
   1044     1073749237, 7414,       1073749248, 7615,  // NOLINT
   1045     1073749504, 7957,       1073749784, 7965,
   1046     1073749792, 8005,       1073749832, 8013,  // NOLINT
   1047     1073749840, 8023,       8025,       8027,
   1048     8029,       1073749855, 8061,       1073749888,  // NOLINT
   1049     8116,       1073749942, 8124,       8126,
   1050     1073749954, 8132,       1073749958, 8140,  // NOLINT
   1051     1073749968, 8147,       1073749974, 8155,
   1052     1073749984, 8172,       1073750002, 8180,  // NOLINT
   1053     1073750006, 8188};                         // NOLINT
   1054 static const uint16_t kID_StartTable1Size = 84;
   1055 static const int32_t kID_StartTable1[84] = {
   1056     113,        127,        1073741968, 156,
   1057     258,        263,        1073742090, 275,  // NOLINT
   1058     277,        1073742104, 285,        292,
   1059     294,        296,        1073742122, 313,  // NOLINT
   1060     1073742140, 319,        1073742149, 329,
   1061     334,        1073742176, 392,        1073744896,  // NOLINT
   1062     3118,       1073744944, 3166,       1073744992,
   1063     3300,       1073745131, 3310,       1073745138,  // NOLINT
   1064     3315,       1073745152, 3365,       3367,
   1065     3373,       1073745200, 3431,       3439,  // NOLINT
   1066     1073745280, 3478,       1073745312, 3494,
   1067     1073745320, 3502,       1073745328, 3510,  // NOLINT
   1068     1073745336, 3518,       1073745344, 3526,
   1069     1073745352, 3534,       1073745360, 3542,  // NOLINT
   1070     1073745368, 3550,       1073745925, 4103,
   1071     1073745953, 4137,       1073745969, 4149,  // NOLINT
   1072     1073745976, 4156,       1073745985, 4246,
   1073     1073746075, 4255,       1073746081, 4346,  // NOLINT
   1074     1073746172, 4351,       1073746181, 4397,
   1075     1073746225, 4494,       1073746336, 4538,   // NOLINT
   1076     1073746416, 4607,       1073746944, 8191};  // NOLINT
   1077 static const uint16_t kID_StartTable2Size = 4;
   1078 static const int32_t kID_StartTable2[4] = {1073741824, 3509, 1073745408,
   1079                                            8191};  // NOLINT
   1080 static const uint16_t kID_StartTable3Size = 2;
   1081 static const int32_t kID_StartTable3[2] = {1073741824, 8191};  // NOLINT
   1082 static const uint16_t kID_StartTable4Size = 2;
   1083 static const int32_t kID_StartTable4[2] = {1073741824, 8140};  // NOLINT
   1084 static const uint16_t kID_StartTable5Size = 100;
   1085 static const int32_t kID_StartTable5[100] = {
   1086     1073741824, 1164,       1073743056, 1277,
   1087     1073743104, 1548,       1073743376, 1567,  // NOLINT
   1088     1073743402, 1579,       1073743424, 1646,
   1089     1073743487, 1693,       1073743520, 1775,  // NOLINT
   1090     1073743639, 1823,       1073743650, 1928,
   1091     1073743755, 1934,       1073743760, 1965,  // NOLINT
   1092     1073743792, 1969,       1073743863, 2049,
   1093     1073743875, 2053,       1073743879, 2058,  // NOLINT
   1094     1073743884, 2082,       1073743936, 2163,
   1095     1073744002, 2227,       1073744114, 2295,  // NOLINT
   1096     2299,       1073744138, 2341,       1073744176,
   1097     2374,       1073744224, 2428,       1073744260,  // NOLINT
   1098     2482,       2511,       1073744352, 2532,
   1099     1073744358, 2543,       1073744378, 2558,  // NOLINT
   1100     1073744384, 2600,       1073744448, 2626,
   1101     1073744452, 2635,       1073744480, 2678,  // NOLINT
   1102     2682,       1073744510, 2735,       2737,
   1103     1073744565, 2742,       1073744569, 2749,  // NOLINT
   1104     2752,       2754,       1073744603, 2781,
   1105     1073744608, 2794,       1073744626, 2804,  // NOLINT
   1106     1073744641, 2822,       1073744649, 2830,
   1107     1073744657, 2838,       1073744672, 2854,  // NOLINT
   1108     1073744680, 2862,       1073744688, 2906,
   1109     1073744732, 2911,       1073744740, 2917,   // NOLINT
   1110     1073744832, 3042,       1073744896, 8191};  // NOLINT
   1111 static const uint16_t kID_StartTable6Size = 6;
   1112 static const int32_t kID_StartTable6[6] = {1073741824, 6051, 1073747888, 6086,
   1113                                            1073747915, 6139};  // NOLINT
   1114 static const uint16_t kID_StartTable7Size = 48;
   1115 static const int32_t kID_StartTable7[48] = {
   1116     1073748224, 6765,       1073748592, 6873,
   1117     1073748736, 6918,       1073748755, 6935,  // NOLINT
   1118     6941,       1073748767, 6952,       1073748778,
   1119     6966,       1073748792, 6972,       6974,  // NOLINT
   1120     1073748800, 6977,       1073748803, 6980,
   1121     1073748806, 7089,       1073748947, 7485,  // NOLINT
   1122     1073749328, 7567,       1073749394, 7623,
   1123     1073749488, 7675,       1073749616, 7796,  // NOLINT
   1124     1073749622, 7932,       1073749793, 7994,
   1125     1073749825, 8026,       1073749862, 8126,  // NOLINT
   1126     1073749954, 8135,       1073749962, 8143,
   1127     1073749970, 8151,       1073749978, 8156};  // NOLINT
   1128 bool ID_Start::Is(uchar c) {
   1129   int chunk_index = c >> 13;
   1130   switch (chunk_index) {
   1131     case 0:
   1132       return LookupPredicate(kID_StartTable0, kID_StartTable0Size, c);
   1133     case 1:
   1134       return LookupPredicate(kID_StartTable1, kID_StartTable1Size, c);
   1135     case 2:
   1136       return LookupPredicate(kID_StartTable2, kID_StartTable2Size, c);
   1137     case 3:
   1138       return LookupPredicate(kID_StartTable3, kID_StartTable3Size, c);
   1139     case 4:
   1140       return LookupPredicate(kID_StartTable4, kID_StartTable4Size, c);
   1141     case 5:
   1142       return LookupPredicate(kID_StartTable5, kID_StartTable5Size, c);
   1143     case 6:
   1144       return LookupPredicate(kID_StartTable6, kID_StartTable6Size, c);
   1145     case 7:
   1146       return LookupPredicate(kID_StartTable7, kID_StartTable7Size, c);
   1147     default:
   1148       return false;
   1149   }
   1150 }
   1151 
   1152 
   1153 // ID_Continue:          point.category in ['Nd', 'Mn', 'Mc', 'Pc'] or
   1154 // 'Other_ID_Continue' in point.properties or 'JS_ID_Continue' in
   1155 // point.properties
   1156 
   1157 static const uint16_t kID_ContinueTable0Size = 315;
   1158 static const int32_t kID_ContinueTable0[315] = {
   1159     1073741872, 57,         95,         183,
   1160     1073742592, 879,        903,        1073742979,  // NOLINT
   1161     1159,       1073743249, 1469,       1471,
   1162     1073743297, 1474,       1073743300, 1477,  // NOLINT
   1163     1479,       1073743376, 1562,       1073743435,
   1164     1641,       1648,       1073743574, 1756,  // NOLINT
   1165     1073743583, 1764,       1073743591, 1768,
   1166     1073743594, 1773,       1073743600, 1785,  // NOLINT
   1167     1809,       1073743664, 1866,       1073743782,
   1168     1968,       1073743808, 1993,       1073743851,  // NOLINT
   1169     2035,       1073743894, 2073,       1073743899,
   1170     2083,       1073743909, 2087,       1073743913,  // NOLINT
   1171     2093,       1073743961, 2139,       1073744100,
   1172     2307,       1073744186, 2364,       1073744190,  // NOLINT
   1173     2383,       1073744209, 2391,       1073744226,
   1174     2403,       1073744230, 2415,       1073744257,  // NOLINT
   1175     2435,       2492,       1073744318, 2500,
   1176     1073744327, 2504,       1073744331, 2509,  // NOLINT
   1177     2519,       1073744354, 2531,       1073744358,
   1178     2543,       1073744385, 2563,       2620,  // NOLINT
   1179     1073744446, 2626,       1073744455, 2632,
   1180     1073744459, 2637,       2641,       1073744486,  // NOLINT
   1181     2673,       2677,       1073744513, 2691,
   1182     2748,       1073744574, 2757,       1073744583,  // NOLINT
   1183     2761,       1073744587, 2765,       1073744610,
   1184     2787,       1073744614, 2799,       1073744641,  // NOLINT
   1185     2819,       2876,       1073744702, 2884,
   1186     1073744711, 2888,       1073744715, 2893,  // NOLINT
   1187     1073744726, 2903,       1073744738, 2915,
   1188     1073744742, 2927,       2946,       1073744830,  // NOLINT
   1189     3010,       1073744838, 3016,       1073744842,
   1190     3021,       3031,       1073744870, 3055,  // NOLINT
   1191     1073744896, 3075,       1073744958, 3140,
   1192     1073744966, 3144,       1073744970, 3149,  // NOLINT
   1193     1073744981, 3158,       1073744994, 3171,
   1194     1073744998, 3183,       1073745025, 3203,  // NOLINT
   1195     3260,       1073745086, 3268,       1073745094,
   1196     3272,       1073745098, 3277,       1073745109,  // NOLINT
   1197     3286,       1073745122, 3299,       1073745126,
   1198     3311,       1073745153, 3331,       1073745214,  // NOLINT
   1199     3396,       1073745222, 3400,       1073745226,
   1200     3405,       3415,       1073745250, 3427,  // NOLINT
   1201     1073745254, 3439,       1073745282, 3459,
   1202     3530,       1073745359, 3540,       3542,  // NOLINT
   1203     1073745368, 3551,       1073745382, 3567,
   1204     1073745394, 3571,       3633,       1073745460,  // NOLINT
   1205     3642,       1073745479, 3662,       1073745488,
   1206     3673,       3761,       1073745588, 3769,  // NOLINT
   1207     1073745595, 3772,       1073745608, 3789,
   1208     1073745616, 3801,       1073745688, 3865,  // NOLINT
   1209     1073745696, 3881,       3893,       3895,
   1210     3897,       1073745726, 3903,       1073745777,  // NOLINT
   1211     3972,       1073745798, 3975,       1073745805,
   1212     3991,       1073745817, 4028,       4038,  // NOLINT
   1213     1073745963, 4158,       1073745984, 4169,
   1214     1073746006, 4185,       1073746014, 4192,  // NOLINT
   1215     1073746018, 4196,       1073746023, 4205,
   1216     1073746033, 4212,       1073746050, 4237,  // NOLINT
   1217     1073746063, 4253,       1073746781, 4959,
   1218     1073746793, 4977,       1073747730, 5908,  // NOLINT
   1219     1073747762, 5940,       1073747794, 5971,
   1220     1073747826, 6003,       1073747892, 6099,  // NOLINT
   1221     6109,       1073747936, 6121,       1073747979,
   1222     6157,       1073747984, 6169,       6313,  // NOLINT
   1223     1073748256, 6443,       1073748272, 6459,
   1224     1073748294, 6479,       1073748400, 6592,  // NOLINT
   1225     1073748424, 6601,       1073748432, 6618,
   1226     1073748503, 6683,       1073748565, 6750,  // NOLINT
   1227     1073748576, 6780,       1073748607, 6793,
   1228     1073748624, 6809,       1073748656, 6845,  // NOLINT
   1229     1073748736, 6916,       1073748788, 6980,
   1230     1073748816, 7001,       1073748843, 7027,  // NOLINT
   1231     1073748864, 7042,       1073748897, 7085,
   1232     1073748912, 7097,       1073748966, 7155,  // NOLINT
   1233     1073749028, 7223,       1073749056, 7241,
   1234     1073749072, 7257,       1073749200, 7378,  // NOLINT
   1235     1073749204, 7400,       7405,       1073749234,
   1236     7412,       1073749240, 7417,       1073749440,  // NOLINT
   1237     7669,       1073749500, 7679};                   // NOLINT
   1238 static const uint16_t kID_ContinueTable1Size = 19;
   1239 static const int32_t kID_ContinueTable1[19] = {
   1240     1073741836, 13,         1073741887, 64,
   1241     84,         1073742032, 220,        225,  // NOLINT
   1242     1073742053, 240,        1073745135, 3313,
   1243     3455,       1073745376, 3583,       1073745962,  // NOLINT
   1244     4143,       1073746073, 4250};                   // NOLINT
   1245 static const uint16_t kID_ContinueTable5Size = 63;
   1246 static const int32_t kID_ContinueTable5[63] = {
   1247     1073743392, 1577,       1647,       1073743476,
   1248     1661,       1695,       1073743600, 1777,  // NOLINT
   1249     2050,       2054,       2059,       1073743907,
   1250     2087,       1073744000, 2177,       1073744052,  // NOLINT
   1251     2244,       1073744080, 2265,       1073744096,
   1252     2289,       1073744128, 2313,       1073744166,  // NOLINT
   1253     2349,       1073744199, 2387,       1073744256,
   1254     2435,       1073744307, 2496,       1073744336,  // NOLINT
   1255     2521,       2533,       1073744368, 2553,
   1256     1073744425, 2614,       2627,       1073744460,  // NOLINT
   1257     2637,       1073744464, 2649,       1073744507,
   1258     2685,       2736,       1073744562, 2740,  // NOLINT
   1259     1073744567, 2744,       1073744574, 2751,
   1260     2753,       1073744619, 2799,       1073744629,  // NOLINT
   1261     2806,       1073744867, 3050,       1073744876,
   1262     3053,       1073744880, 3065};  // NOLINT
   1263 static const uint16_t kID_ContinueTable7Size = 12;
   1264 static const int32_t kID_ContinueTable7[12] = {
   1265     6942, 1073749504, 7695, 1073749536,
   1266     7725, 1073749555, 7732, 1073749581,  // NOLINT
   1267     7759, 1073749776, 7961, 7999};       // NOLINT
   1268 bool ID_Continue::Is(uchar c) {
   1269   int chunk_index = c >> 13;
   1270   switch (chunk_index) {
   1271     case 0:
   1272       return LookupPredicate(kID_ContinueTable0, kID_ContinueTable0Size, c);
   1273     case 1:
   1274       return LookupPredicate(kID_ContinueTable1, kID_ContinueTable1Size, c);
   1275     case 5:
   1276       return LookupPredicate(kID_ContinueTable5, kID_ContinueTable5Size, c);
   1277     case 7:
   1278       return LookupPredicate(kID_ContinueTable7, kID_ContinueTable7Size, c);
   1279     default: return false;
   1280   }
   1281 }
   1282 
   1283 
   1284 // WhiteSpace:           (point.category == 'Zs') or ('JS_White_Space' in
   1285 // point.properties)
   1286 
   1287 static const uint16_t kWhiteSpaceTable0Size = 7;
   1288 static const int32_t kWhiteSpaceTable0[7] = {9,   1073741835, 12,  32,
   1289                                              160, 5760,       6158};  // NOLINT
   1290 static const uint16_t kWhiteSpaceTable1Size = 5;
   1291 static const int32_t kWhiteSpaceTable1[5] = {
   1292   1073741824, 10, 47, 95, 4096 };  // NOLINT
   1293 static const uint16_t kWhiteSpaceTable7Size = 1;
   1294 static const int32_t kWhiteSpaceTable7[1] = {7935};  // NOLINT
   1295 bool WhiteSpace::Is(uchar c) {
   1296   int chunk_index = c >> 13;
   1297   switch (chunk_index) {
   1298     case 0: return LookupPredicate(kWhiteSpaceTable0,
   1299                                        kWhiteSpaceTable0Size,
   1300                                        c);
   1301     case 1: return LookupPredicate(kWhiteSpaceTable1,
   1302                                        kWhiteSpaceTable1Size,
   1303                                        c);
   1304     case 7:
   1305       return LookupPredicate(kWhiteSpaceTable7, kWhiteSpaceTable7Size, c);
   1306     default: return false;
   1307   }
   1308 }
   1309 
   1310 
   1311 // LineTerminator:       'JS_Line_Terminator' in point.properties
   1312 
   1313 static const uint16_t kLineTerminatorTable0Size = 2;
   1314 static const int32_t kLineTerminatorTable0[2] = {
   1315   10, 13 };  // NOLINT
   1316 static const uint16_t kLineTerminatorTable1Size = 2;
   1317 static const int32_t kLineTerminatorTable1[2] = {
   1318   1073741864, 41 };  // NOLINT
   1319 bool LineTerminator::Is(uchar c) {
   1320   int chunk_index = c >> 13;
   1321   switch (chunk_index) {
   1322     case 0: return LookupPredicate(kLineTerminatorTable0,
   1323                                        kLineTerminatorTable0Size,
   1324                                        c);
   1325     case 1: return LookupPredicate(kLineTerminatorTable1,
   1326                                        kLineTerminatorTable1Size,
   1327                                        c);
   1328     default: return false;
   1329   }
   1330 }
   1331 
   1332 static const MultiCharacterSpecialCase<2> kToLowercaseMultiStrings0[2] = {  // NOLINT
   1333   {{105, 775}}, {{kSentinel}} }; // NOLINT
   1334 static const uint16_t kToLowercaseTable0Size = 488;  // NOLINT
   1335 static const int32_t kToLowercaseTable0[976] = {
   1336     1073741889, 128,    90,         128,   1073742016, 128,
   1337     214,        128,    1073742040, 128,   222,        128,
   1338     256,        4,      258,        4,  // NOLINT
   1339     260,        4,      262,        4,     264,        4,
   1340     266,        4,      268,        4,     270,        4,
   1341     272,        4,      274,        4,  // NOLINT
   1342     276,        4,      278,        4,     280,        4,
   1343     282,        4,      284,        4,     286,        4,
   1344     288,        4,      290,        4,  // NOLINT
   1345     292,        4,      294,        4,     296,        4,
   1346     298,        4,      300,        4,     302,        4,
   1347     304,        1,      306,        4,  // NOLINT
   1348     308,        4,      310,        4,     313,        4,
   1349     315,        4,      317,        4,     319,        4,
   1350     321,        4,      323,        4,  // NOLINT
   1351     325,        4,      327,        4,     330,        4,
   1352     332,        4,      334,        4,     336,        4,
   1353     338,        4,      340,        4,  // NOLINT
   1354     342,        4,      344,        4,     346,        4,
   1355     348,        4,      350,        4,     352,        4,
   1356     354,        4,      356,        4,  // NOLINT
   1357     358,        4,      360,        4,     362,        4,
   1358     364,        4,      366,        4,     368,        4,
   1359     370,        4,      372,        4,  // NOLINT
   1360     374,        4,      376,        -484,  377,        4,
   1361     379,        4,      381,        4,     385,        840,
   1362     386,        4,      388,        4,  // NOLINT
   1363     390,        824,    391,        4,     1073742217, 820,
   1364     394,        820,    395,        4,     398,        316,
   1365     399,        808,    400,        812,  // NOLINT
   1366     401,        4,      403,        820,   404,        828,
   1367     406,        844,    407,        836,   408,        4,
   1368     412,        844,    413,        852,  // NOLINT
   1369     415,        856,    416,        4,     418,        4,
   1370     420,        4,      422,        872,   423,        4,
   1371     425,        872,    428,        4,  // NOLINT
   1372     430,        872,    431,        4,     1073742257, 868,
   1373     434,        868,    435,        4,     437,        4,
   1374     439,        876,    440,        4,  // NOLINT
   1375     444,        4,      452,        8,     453,        4,
   1376     455,        8,      456,        4,     458,        8,
   1377     459,        4,      461,        4,  // NOLINT
   1378     463,        4,      465,        4,     467,        4,
   1379     469,        4,      471,        4,     473,        4,
   1380     475,        4,      478,        4,  // NOLINT
   1381     480,        4,      482,        4,     484,        4,
   1382     486,        4,      488,        4,     490,        4,
   1383     492,        4,      494,        4,  // NOLINT
   1384     497,        8,      498,        4,     500,        4,
   1385     502,        -388,   503,        -224,  504,        4,
   1386     506,        4,      508,        4,  // NOLINT
   1387     510,        4,      512,        4,     514,        4,
   1388     516,        4,      518,        4,     520,        4,
   1389     522,        4,      524,        4,  // NOLINT
   1390     526,        4,      528,        4,     530,        4,
   1391     532,        4,      534,        4,     536,        4,
   1392     538,        4,      540,        4,  // NOLINT
   1393     542,        4,      544,        -520,  546,        4,
   1394     548,        4,      550,        4,     552,        4,
   1395     554,        4,      556,        4,  // NOLINT
   1396     558,        4,      560,        4,     562,        4,
   1397     570,        43180,  571,        4,     573,        -652,
   1398     574,        43168,  577,        4,  // NOLINT
   1399     579,        -780,   580,        276,   581,        284,
   1400     582,        4,      584,        4,     586,        4,
   1401     588,        4,      590,        4,  // NOLINT
   1402     880,        4,      882,        4,     886,        4,
   1403     895,        464,    902,        152,   1073742728, 148,
   1404     906,        148,    908,        256,  // NOLINT
   1405     1073742734, 252,    911,        252,   1073742737, 128,
   1406     929,        128,    931,        6,     1073742756, 128,
   1407     939,        128,    975,        32,  // NOLINT
   1408     984,        4,      986,        4,     988,        4,
   1409     990,        4,      992,        4,     994,        4,
   1410     996,        4,      998,        4,  // NOLINT
   1411     1000,       4,      1002,       4,     1004,       4,
   1412     1006,       4,      1012,       -240,  1015,       4,
   1413     1017,       -28,    1018,       4,  // NOLINT
   1414     1073742845, -520,   1023,       -520,  1073742848, 320,
   1415     1039,       320,    1073742864, 128,   1071,       128,
   1416     1120,       4,      1122,       4,  // NOLINT
   1417     1124,       4,      1126,       4,     1128,       4,
   1418     1130,       4,      1132,       4,     1134,       4,
   1419     1136,       4,      1138,       4,  // NOLINT
   1420     1140,       4,      1142,       4,     1144,       4,
   1421     1146,       4,      1148,       4,     1150,       4,
   1422     1152,       4,      1162,       4,  // NOLINT
   1423     1164,       4,      1166,       4,     1168,       4,
   1424     1170,       4,      1172,       4,     1174,       4,
   1425     1176,       4,      1178,       4,  // NOLINT
   1426     1180,       4,      1182,       4,     1184,       4,
   1427     1186,       4,      1188,       4,     1190,       4,
   1428     1192,       4,      1194,       4,  // NOLINT
   1429     1196,       4,      1198,       4,     1200,       4,
   1430     1202,       4,      1204,       4,     1206,       4,
   1431     1208,       4,      1210,       4,  // NOLINT
   1432     1212,       4,      1214,       4,     1216,       60,
   1433     1217,       4,      1219,       4,     1221,       4,
   1434     1223,       4,      1225,       4,  // NOLINT
   1435     1227,       4,      1229,       4,     1232,       4,
   1436     1234,       4,      1236,       4,     1238,       4,
   1437     1240,       4,      1242,       4,  // NOLINT
   1438     1244,       4,      1246,       4,     1248,       4,
   1439     1250,       4,      1252,       4,     1254,       4,
   1440     1256,       4,      1258,       4,  // NOLINT
   1441     1260,       4,      1262,       4,     1264,       4,
   1442     1266,       4,      1268,       4,     1270,       4,
   1443     1272,       4,      1274,       4,  // NOLINT
   1444     1276,       4,      1278,       4,     1280,       4,
   1445     1282,       4,      1284,       4,     1286,       4,
   1446     1288,       4,      1290,       4,  // NOLINT
   1447     1292,       4,      1294,       4,     1296,       4,
   1448     1298,       4,      1300,       4,     1302,       4,
   1449     1304,       4,      1306,       4,  // NOLINT
   1450     1308,       4,      1310,       4,     1312,       4,
   1451     1314,       4,      1316,       4,     1318,       4,
   1452     1320,       4,      1322,       4,  // NOLINT
   1453     1324,       4,      1326,       4,     1073743153, 192,
   1454     1366,       192,    1073746080, 29056, 4293,       29056,
   1455     4295,       29056,  4301,       29056,  // NOLINT
   1456     7680,       4,      7682,       4,     7684,       4,
   1457     7686,       4,      7688,       4,     7690,       4,
   1458     7692,       4,      7694,       4,  // NOLINT
   1459     7696,       4,      7698,       4,     7700,       4,
   1460     7702,       4,      7704,       4,     7706,       4,
   1461     7708,       4,      7710,       4,  // NOLINT
   1462     7712,       4,      7714,       4,     7716,       4,
   1463     7718,       4,      7720,       4,     7722,       4,
   1464     7724,       4,      7726,       4,  // NOLINT
   1465     7728,       4,      7730,       4,     7732,       4,
   1466     7734,       4,      7736,       4,     7738,       4,
   1467     7740,       4,      7742,       4,  // NOLINT
   1468     7744,       4,      7746,       4,     7748,       4,
   1469     7750,       4,      7752,       4,     7754,       4,
   1470     7756,       4,      7758,       4,  // NOLINT
   1471     7760,       4,      7762,       4,     7764,       4,
   1472     7766,       4,      7768,       4,     7770,       4,
   1473     7772,       4,      7774,       4,  // NOLINT
   1474     7776,       4,      7778,       4,     7780,       4,
   1475     7782,       4,      7784,       4,     7786,       4,
   1476     7788,       4,      7790,       4,  // NOLINT
   1477     7792,       4,      7794,       4,     7796,       4,
   1478     7798,       4,      7800,       4,     7802,       4,
   1479     7804,       4,      7806,       4,  // NOLINT
   1480     7808,       4,      7810,       4,     7812,       4,
   1481     7814,       4,      7816,       4,     7818,       4,
   1482     7820,       4,      7822,       4,  // NOLINT
   1483     7824,       4,      7826,       4,     7828,       4,
   1484     7838,       -30460, 7840,       4,     7842,       4,
   1485     7844,       4,      7846,       4,  // NOLINT
   1486     7848,       4,      7850,       4,     7852,       4,
   1487     7854,       4,      7856,       4,     7858,       4,
   1488     7860,       4,      7862,       4,  // NOLINT
   1489     7864,       4,      7866,       4,     7868,       4,
   1490     7870,       4,      7872,       4,     7874,       4,
   1491     7876,       4,      7878,       4,  // NOLINT
   1492     7880,       4,      7882,       4,     7884,       4,
   1493     7886,       4,      7888,       4,     7890,       4,
   1494     7892,       4,      7894,       4,  // NOLINT
   1495     7896,       4,      7898,       4,     7900,       4,
   1496     7902,       4,      7904,       4,     7906,       4,
   1497     7908,       4,      7910,       4,  // NOLINT
   1498     7912,       4,      7914,       4,     7916,       4,
   1499     7918,       4,      7920,       4,     7922,       4,
   1500     7924,       4,      7926,       4,  // NOLINT
   1501     7928,       4,      7930,       4,     7932,       4,
   1502     7934,       4,      1073749768, -32,   7951,       -32,
   1503     1073749784, -32,    7965,       -32,  // NOLINT
   1504     1073749800, -32,    7983,       -32,   1073749816, -32,
   1505     7999,       -32,    1073749832, -32,   8013,       -32,
   1506     8025,       -32,    8027,       -32,  // NOLINT
   1507     8029,       -32,    8031,       -32,   1073749864, -32,
   1508     8047,       -32,    1073749896, -32,   8079,       -32,
   1509     1073749912, -32,    8095,       -32,  // NOLINT
   1510     1073749928, -32,    8111,       -32,   1073749944, -32,
   1511     8121,       -32,    1073749946, -296,  8123,       -296,
   1512     8124,       -36,    1073749960, -344,  // NOLINT
   1513     8139,       -344,   8140,       -36,   1073749976, -32,
   1514     8153,       -32,    1073749978, -400,  8155,       -400,
   1515     1073749992, -32,    8169,       -32,  // NOLINT
   1516     1073749994, -448,   8171,       -448,  8172,       -28,
   1517     1073750008, -512,   8185,       -512,  1073750010, -504,
   1518     8187,       -504,   8188,       -36};                 // NOLINT
   1519 static const uint16_t kToLowercaseMultiStrings0Size = 2;  // NOLINT
   1520 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings1[1] = {  // NOLINT
   1521   {{kSentinel}} }; // NOLINT
   1522 static const uint16_t kToLowercaseTable1Size = 79;  // NOLINT
   1523 static const int32_t kToLowercaseTable1[158] = {
   1524   294, -30068, 298, -33532, 299, -33048, 306, 112, 1073742176, 64, 367, 64, 387, 4, 1073743030, 104,  // NOLINT
   1525   1231, 104, 1073744896, 192, 3118, 192, 3168, 4, 3170, -42972, 3171, -15256, 3172, -42908, 3175, 4,  // NOLINT
   1526   3177, 4, 3179, 4, 3181, -43120, 3182, -42996, 3183, -43132, 3184, -43128, 3186, 4, 3189, 4,  // NOLINT
   1527   1073745022, -43260, 3199, -43260, 3200, 4, 3202, 4, 3204, 4, 3206, 4, 3208, 4, 3210, 4,  // NOLINT
   1528   3212, 4, 3214, 4, 3216, 4, 3218, 4, 3220, 4, 3222, 4, 3224, 4, 3226, 4,  // NOLINT
   1529   3228, 4, 3230, 4, 3232, 4, 3234, 4, 3236, 4, 3238, 4, 3240, 4, 3242, 4,  // NOLINT
   1530   3244, 4, 3246, 4, 3248, 4, 3250, 4, 3252, 4, 3254, 4, 3256, 4, 3258, 4,  // NOLINT
   1531   3260, 4, 3262, 4, 3264, 4, 3266, 4, 3268, 4, 3270, 4, 3272, 4, 3274, 4,  // NOLINT
   1532   3276, 4, 3278, 4, 3280, 4, 3282, 4, 3284, 4, 3286, 4, 3288, 4, 3290, 4,  // NOLINT
   1533   3292, 4, 3294, 4, 3296, 4, 3298, 4, 3307, 4, 3309, 4, 3314, 4 };  // NOLINT
   1534 static const uint16_t kToLowercaseMultiStrings1Size = 1;  // NOLINT
   1535 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings5[1] = {  // NOLINT
   1536   {{kSentinel}} }; // NOLINT
   1537 static const uint16_t kToLowercaseTable5Size = 103;  // NOLINT
   1538 static const int32_t kToLowercaseTable5[206] = {
   1539     1600, 4,       1602, 4,       1604, 4,       1606, 4,
   1540     1608, 4,       1610, 4,       1612, 4,       1614, 4,  // NOLINT
   1541     1616, 4,       1618, 4,       1620, 4,       1622, 4,
   1542     1624, 4,       1626, 4,       1628, 4,       1630, 4,  // NOLINT
   1543     1632, 4,       1634, 4,       1636, 4,       1638, 4,
   1544     1640, 4,       1642, 4,       1644, 4,       1664, 4,  // NOLINT
   1545     1666, 4,       1668, 4,       1670, 4,       1672, 4,
   1546     1674, 4,       1676, 4,       1678, 4,       1680, 4,  // NOLINT
   1547     1682, 4,       1684, 4,       1686, 4,       1688, 4,
   1548     1690, 4,       1826, 4,       1828, 4,       1830, 4,  // NOLINT
   1549     1832, 4,       1834, 4,       1836, 4,       1838, 4,
   1550     1842, 4,       1844, 4,       1846, 4,       1848, 4,  // NOLINT
   1551     1850, 4,       1852, 4,       1854, 4,       1856, 4,
   1552     1858, 4,       1860, 4,       1862, 4,       1864, 4,  // NOLINT
   1553     1866, 4,       1868, 4,       1870, 4,       1872, 4,
   1554     1874, 4,       1876, 4,       1878, 4,       1880, 4,  // NOLINT
   1555     1882, 4,       1884, 4,       1886, 4,       1888, 4,
   1556     1890, 4,       1892, 4,       1894, 4,       1896, 4,  // NOLINT
   1557     1898, 4,       1900, 4,       1902, 4,       1913, 4,
   1558     1915, 4,       1917, -141328, 1918, 4,       1920, 4,  // NOLINT
   1559     1922, 4,       1924, 4,       1926, 4,       1931, 4,
   1560     1933, -169120, 1936, 4,       1938, 4,       1942, 4,  // NOLINT
   1561     1944, 4,       1946, 4,       1948, 4,       1950, 4,
   1562     1952, 4,       1954, 4,       1956, 4,       1958, 4,  // NOLINT
   1563     1960, 4,       1962, -169232, 1963, -169276, 1964, -169260,
   1564     1965, -169220, 1968, -169032, 1969, -169128};         // NOLINT
   1565 static const uint16_t kToLowercaseMultiStrings5Size = 1;  // NOLINT
   1566 static const MultiCharacterSpecialCase<1> kToLowercaseMultiStrings7[1] = {  // NOLINT
   1567   {{kSentinel}} }; // NOLINT
   1568 static const uint16_t kToLowercaseTable7Size = 2;  // NOLINT
   1569 static const int32_t kToLowercaseTable7[4] = {
   1570   1073749793, 128, 7994, 128 };  // NOLINT
   1571 static const uint16_t kToLowercaseMultiStrings7Size = 1;  // NOLINT
   1572 int ToLowercase::Convert(uchar c,
   1573                       uchar n,
   1574                       uchar* result,
   1575                       bool* allow_caching_ptr) {
   1576   int chunk_index = c >> 13;
   1577   switch (chunk_index) {
   1578     case 0: return LookupMapping<true>(kToLowercaseTable0,
   1579                                            kToLowercaseTable0Size,
   1580                                            kToLowercaseMultiStrings0,
   1581                                            c,
   1582                                            n,
   1583                                            result,
   1584                                            allow_caching_ptr);
   1585     case 1: return LookupMapping<true>(kToLowercaseTable1,
   1586                                            kToLowercaseTable1Size,
   1587                                            kToLowercaseMultiStrings1,
   1588                                            c,
   1589                                            n,
   1590                                            result,
   1591                                            allow_caching_ptr);
   1592     case 5: return LookupMapping<true>(kToLowercaseTable5,
   1593                                            kToLowercaseTable5Size,
   1594                                            kToLowercaseMultiStrings5,
   1595                                            c,
   1596                                            n,
   1597                                            result,
   1598                                            allow_caching_ptr);
   1599     case 7: return LookupMapping<true>(kToLowercaseTable7,
   1600                                            kToLowercaseTable7Size,
   1601                                            kToLowercaseMultiStrings7,
   1602                                            c,
   1603                                            n,
   1604                                            result,
   1605                                            allow_caching_ptr);
   1606     default: return 0;
   1607   }
   1608 }
   1609 
   1610 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings0[62] = {  // NOLINT
   1611   {{83, 83, kSentinel}}, {{700, 78, kSentinel}}, {{74, 780, kSentinel}}, {{921, 776, 769}},  // NOLINT
   1612   {{933, 776, 769}}, {{1333, 1362, kSentinel}}, {{72, 817, kSentinel}}, {{84, 776, kSentinel}},  // NOLINT
   1613   {{87, 778, kSentinel}}, {{89, 778, kSentinel}}, {{65, 702, kSentinel}}, {{933, 787, kSentinel}},  // NOLINT
   1614   {{933, 787, 768}}, {{933, 787, 769}}, {{933, 787, 834}}, {{7944, 921, kSentinel}},  // NOLINT
   1615   {{7945, 921, kSentinel}}, {{7946, 921, kSentinel}}, {{7947, 921, kSentinel}}, {{7948, 921, kSentinel}},  // NOLINT
   1616   {{7949, 921, kSentinel}}, {{7950, 921, kSentinel}}, {{7951, 921, kSentinel}}, {{7976, 921, kSentinel}},  // NOLINT
   1617   {{7977, 921, kSentinel}}, {{7978, 921, kSentinel}}, {{7979, 921, kSentinel}}, {{7980, 921, kSentinel}},  // NOLINT
   1618   {{7981, 921, kSentinel}}, {{7982, 921, kSentinel}}, {{7983, 921, kSentinel}}, {{8040, 921, kSentinel}},  // NOLINT
   1619   {{8041, 921, kSentinel}}, {{8042, 921, kSentinel}}, {{8043, 921, kSentinel}}, {{8044, 921, kSentinel}},  // NOLINT
   1620   {{8045, 921, kSentinel}}, {{8046, 921, kSentinel}}, {{8047, 921, kSentinel}}, {{8122, 921, kSentinel}},  // NOLINT
   1621   {{913, 921, kSentinel}}, {{902, 921, kSentinel}}, {{913, 834, kSentinel}}, {{913, 834, 921}},  // NOLINT
   1622   {{8138, 921, kSentinel}}, {{919, 921, kSentinel}}, {{905, 921, kSentinel}}, {{919, 834, kSentinel}},  // NOLINT
   1623   {{919, 834, 921}}, {{921, 776, 768}}, {{921, 834, kSentinel}}, {{921, 776, 834}},  // NOLINT
   1624   {{933, 776, 768}}, {{929, 787, kSentinel}}, {{933, 834, kSentinel}}, {{933, 776, 834}},  // NOLINT
   1625   {{8186, 921, kSentinel}}, {{937, 921, kSentinel}}, {{911, 921, kSentinel}}, {{937, 834, kSentinel}},  // NOLINT
   1626   {{937, 834, 921}}, {{kSentinel}} }; // NOLINT
   1627 static const uint16_t kToUppercaseTable0Size = 590;  // NOLINT
   1628 static const int32_t kToUppercaseTable0[1180] = {
   1629     1073741921, -128,   122,        -128,   181,        2972,
   1630     223,        1,      1073742048, -128,   246,        -128,
   1631     1073742072, -128,   254,        -128,  // NOLINT
   1632     255,        484,    257,        -4,     259,        -4,
   1633     261,        -4,     263,        -4,     265,        -4,
   1634     267,        -4,     269,        -4,  // NOLINT
   1635     271,        -4,     273,        -4,     275,        -4,
   1636     277,        -4,     279,        -4,     281,        -4,
   1637     283,        -4,     285,        -4,  // NOLINT
   1638     287,        -4,     289,        -4,     291,        -4,
   1639     293,        -4,     295,        -4,     297,        -4,
   1640     299,        -4,     301,        -4,  // NOLINT
   1641     303,        -4,     305,        -928,   307,        -4,
   1642     309,        -4,     311,        -4,     314,        -4,
   1643     316,        -4,     318,        -4,  // NOLINT
   1644     320,        -4,     322,        -4,     324,        -4,
   1645     326,        -4,     328,        -4,     329,        5,
   1646     331,        -4,     333,        -4,  // NOLINT
   1647     335,        -4,     337,        -4,     339,        -4,
   1648     341,        -4,     343,        -4,     345,        -4,
   1649     347,        -4,     349,        -4,  // NOLINT
   1650     351,        -4,     353,        -4,     355,        -4,
   1651     357,        -4,     359,        -4,     361,        -4,
   1652     363,        -4,     365,        -4,  // NOLINT
   1653     367,        -4,     369,        -4,     371,        -4,
   1654     373,        -4,     375,        -4,     378,        -4,
   1655     380,        -4,     382,        -4,  // NOLINT
   1656     383,        -1200,  384,        780,    387,        -4,
   1657     389,        -4,     392,        -4,     396,        -4,
   1658     402,        -4,     405,        388,  // NOLINT
   1659     409,        -4,     410,        652,    414,        520,
   1660     417,        -4,     419,        -4,     421,        -4,
   1661     424,        -4,     429,        -4,  // NOLINT
   1662     432,        -4,     436,        -4,     438,        -4,
   1663     441,        -4,     445,        -4,     447,        224,
   1664     453,        -4,     454,        -8,  // NOLINT
   1665     456,        -4,     457,        -8,     459,        -4,
   1666     460,        -8,     462,        -4,     464,        -4,
   1667     466,        -4,     468,        -4,  // NOLINT
   1668     470,        -4,     472,        -4,     474,        -4,
   1669     476,        -4,     477,        -316,   479,        -4,
   1670     481,        -4,     483,        -4,  // NOLINT
   1671     485,        -4,     487,        -4,     489,        -4,
   1672     491,        -4,     493,        -4,     495,        -4,
   1673     496,        9,      498,        -4,  // NOLINT
   1674     499,        -8,     501,        -4,     505,        -4,
   1675     507,        -4,     509,        -4,     511,        -4,
   1676     513,        -4,     515,        -4,  // NOLINT
   1677     517,        -4,     519,        -4,     521,        -4,
   1678     523,        -4,     525,        -4,     527,        -4,
   1679     529,        -4,     531,        -4,  // NOLINT
   1680     533,        -4,     535,        -4,     537,        -4,
   1681     539,        -4,     541,        -4,     543,        -4,
   1682     547,        -4,     549,        -4,  // NOLINT
   1683     551,        -4,     553,        -4,     555,        -4,
   1684     557,        -4,     559,        -4,     561,        -4,
   1685     563,        -4,     572,        -4,  // NOLINT
   1686     1073742399, 43260,  576,        43260,  578,        -4,
   1687     583,        -4,     585,        -4,     587,        -4,
   1688     589,        -4,     591,        -4,  // NOLINT
   1689     592,        43132,  593,        43120,  594,        43128,
   1690     595,        -840,   596,        -824,   1073742422, -820,
   1691     599,        -820,   601,        -808,  // NOLINT
   1692     603,        -812,   604,        169276, 608,        -820,
   1693     609,        169260, 611,        -828,   613,        169120,
   1694     614,        169232, 616,        -836,  // NOLINT
   1695     617,        -844,   619,        42972,  620,        169220,
   1696     623,        -844,   625,        42996,  626,        -852,
   1697     629,        -856,   637,        42908,  // NOLINT
   1698     640,        -872,   643,        -872,   647,        169128,
   1699     648,        -872,   649,        -276,   1073742474, -868,
   1700     651,        -868,   652,        -284,  // NOLINT
   1701     658,        -876,   670,        169032, 837,        336,
   1702     881,        -4,     883,        -4,     887,        -4,
   1703     1073742715, 520,    893,        520,  // NOLINT
   1704     912,        13,     940,        -152,   1073742765, -148,
   1705     943,        -148,   944,        17,     1073742769, -128,
   1706     961,        -128,   962,        -124,  // NOLINT
   1707     1073742787, -128,   971,        -128,   972,        -256,
   1708     1073742797, -252,   974,        -252,   976,        -248,
   1709     977,        -228,   981,        -188,  // NOLINT
   1710     982,        -216,   983,        -32,    985,        -4,
   1711     987,        -4,     989,        -4,     991,        -4,
   1712     993,        -4,     995,        -4,  // NOLINT
   1713     997,        -4,     999,        -4,     1001,       -4,
   1714     1003,       -4,     1005,       -4,     1007,       -4,
   1715     1008,       -344,   1009,       -320,  // NOLINT
   1716     1010,       28,     1011,       -464,   1013,       -384,
   1717     1016,       -4,     1019,       -4,     1073742896, -128,
   1718     1103,       -128,   1073742928, -320,  // NOLINT
   1719     1119,       -320,   1121,       -4,     1123,       -4,
   1720     1125,       -4,     1127,       -4,     1129,       -4,
   1721     1131,       -4,     1133,       -4,  // NOLINT
   1722     1135,       -4,     1137,       -4,     1139,       -4,
   1723     1141,       -4,     1143,       -4,     1145,       -4,
   1724     1147,       -4,     1149,       -4,  // NOLINT
   1725     1151,       -4,     1153,       -4,     1163,       -4,
   1726     1165,       -4,     1167,       -4,     1169,       -4,
   1727     1171,       -4,     1173,       -4,  // NOLINT
   1728     1175,       -4,     1177,       -4,     1179,       -4,
   1729     1181,       -4,     1183,       -4,     1185,       -4,
   1730     1187,       -4,     1189,       -4,  // NOLINT
   1731     1191,       -4,     1193,       -4,     1195,       -4,
   1732     1197,       -4,     1199,       -4,     1201,       -4,
   1733     1203,       -4,     1205,       -4,  // NOLINT
   1734     1207,       -4,     1209,       -4,     1211,       -4,
   1735     1213,       -4,     1215,       -4,     1218,       -4,
   1736     1220,       -4,     1222,       -4,  // NOLINT
   1737     1224,       -4,     1226,       -4,     1228,       -4,
   1738     1230,       -4,     1231,       -60,    1233,       -4,
   1739     1235,       -4,     1237,       -4,  // NOLINT
   1740     1239,       -4,     1241,       -4,     1243,       -4,
   1741     1245,       -4,     1247,       -4,     1249,       -4,
   1742     1251,       -4,     1253,       -4,  // NOLINT
   1743     1255,       -4,     1257,       -4,     1259,       -4,
   1744     1261,       -4,     1263,       -4,     1265,       -4,
   1745     1267,       -4,     1269,       -4,  // NOLINT
   1746     1271,       -4,     1273,       -4,     1275,       -4,
   1747     1277,       -4,     1279,       -4,     1281,       -4,
   1748     1283,       -4,     1285,       -4,  // NOLINT
   1749     1287,       -4,     1289,       -4,     1291,       -4,
   1750     1293,       -4,     1295,       -4,     1297,       -4,
   1751     1299,       -4,     1301,       -4,  // NOLINT
   1752     1303,       -4,     1305,       -4,     1307,       -4,
   1753     1309,       -4,     1311,       -4,     1313,       -4,
   1754     1315,       -4,     1317,       -4,  // NOLINT
   1755     1319,       -4,     1321,       -4,     1323,       -4,
   1756     1325,       -4,     1327,       -4,     1073743201, -192,
   1757     1414,       -192,   1415,       21,  // NOLINT
   1758     7545,       141328, 7549,       15256,  7681,       -4,
   1759     7683,       -4,     7685,       -4,     7687,       -4,
   1760     7689,       -4,     7691,       -4,  // NOLINT
   1761     7693,       -4,     7695,       -4,     7697,       -4,
   1762     7699,       -4,     7701,       -4,     7703,       -4,
   1763     7705,       -4,     7707,       -4,  // NOLINT
   1764     7709,       -4,     7711,       -4,     7713,       -4,
   1765     7715,       -4,     7717,       -4,     7719,       -4,
   1766     7721,       -4,     7723,       -4,  // NOLINT
   1767     7725,       -4,     7727,       -4,     7729,       -4,
   1768     7731,       -4,     7733,       -4,     7735,       -4,
   1769     7737,       -4,     7739,       -4,  // NOLINT
   1770     7741,       -4,     7743,       -4,     7745,       -4,
   1771     7747,       -4,     7749,       -4,     7751,       -4,
   1772     7753,       -4,     7755,       -4,  // NOLINT
   1773     7757,       -4,     7759,       -4,     7761,       -4,
   1774     7763,       -4,     7765,       -4,     7767,       -4,
   1775     7769,       -4,     7771,       -4,  // NOLINT
   1776     7773,       -4,     7775,       -4,     7777,       -4,
   1777     7779,       -4,     7781,       -4,     7783,       -4,
   1778     7785,       -4,     7787,       -4,  // NOLINT
   1779     7789,       -4,     7791,       -4,     7793,       -4,
   1780     7795,       -4,     7797,       -4,     7799,       -4,
   1781     7801,       -4,     7803,       -4,  // NOLINT
   1782     7805,       -4,     7807,       -4,     7809,       -4,
   1783     7811,       -4,     7813,       -4,     7815,       -4,
   1784     7817,       -4,     7819,       -4,  // NOLINT
   1785     7821,       -4,     7823,       -4,     7825,       -4,
   1786     7827,       -4,     7829,       -4,     7830,       25,
   1787     7831,       29,     7832,       33,  // NOLINT
   1788     7833,       37,     7834,       41,     7835,       -236,
   1789     7841,       -4,     7843,       -4,     7845,       -4,
   1790     7847,       -4,     7849,       -4,  // NOLINT
   1791     7851,       -4,     7853,       -4,     7855,       -4,
   1792     7857,       -4,     7859,       -4,     7861,       -4,
   1793     7863,       -4,     7865,       -4,  // NOLINT
   1794     7867,       -4,     7869,       -4,     7871,       -4,
   1795     7873,       -4,     7875,       -4,     7877,       -4,
   1796     7879,       -4,     7881,       -4,  // NOLINT
   1797     7883,       -4,     7885,       -4,     7887,       -4,
   1798     7889,       -4,     7891,       -4,     7893,       -4,
   1799     7895,       -4,     7897,       -4,  // NOLINT
   1800     7899,       -4,     7901,       -4,     7903,       -4,
   1801     7905,       -4,     7907,       -4,     7909,       -4,
   1802     7911,       -4,     7913,       -4,  // NOLINT
   1803     7915,       -4,     7917,       -4,     7919,       -4,
   1804     7921,       -4,     7923,       -4,     7925,       -4,
   1805     7927,       -4,     7929,       -4,  // NOLINT
   1806     7931,       -4,     7933,       -4,     7935,       -4,
   1807     1073749760, 32,     7943,       32,     1073749776, 32,
   1808     7957,       32,     1073749792, 32,  // NOLINT
   1809     7975,       32,     1073749808, 32,     7991,       32,
   1810     1073749824, 32,     8005,       32,     8016,       45,
   1811     8017,       32,     8018,       49,  // NOLINT
   1812     8019,       32,     8020,       53,     8021,       32,
   1813     8022,       57,     8023,       32,     1073749856, 32,
   1814     8039,       32,     1073749872, 296,  // NOLINT
   1815     8049,       296,    1073749874, 344,    8053,       344,
   1816     1073749878, 400,    8055,       400,    1073749880, 512,
   1817     8057,       512,    1073749882, 448,  // NOLINT
   1818     8059,       448,    1073749884, 504,    8061,       504,
   1819     8064,       61,     8065,       65,     8066,       69,
   1820     8067,       73,     8068,       77,  // NOLINT
   1821     8069,       81,     8070,       85,     8071,       89,
   1822     8072,       61,     8073,       65,     8074,       69,
   1823     8075,       73,     8076,       77,  // NOLINT
   1824     8077,       81,     8078,       85,     8079,       89,
   1825     8080,       93,     8081,       97,     8082,       101,
   1826     8083,       105,    8084,       109,  // NOLINT
   1827     8085,       113,    8086,       117,    8087,       121,
   1828     8088,       93,     8089,       97,     8090,       101,
   1829     8091,       105,    8092,       109,  // NOLINT
   1830     8093,       113,    8094,       117,    8095,       121,
   1831     8096,       125,    8097,       129,    8098,       133,
   1832     8099,       137,    8100,       141,  // NOLINT
   1833     8101,       145,    8102,       149,    8103,       153,
   1834     8104,       125,    8105,       129,    8106,       133,
   1835     8107,       137,    8108,       141,  // NOLINT
   1836     8109,       145,    8110,       149,    8111,       153,
   1837     1073749936, 32,     8113,       32,     8114,       157,
   1838     8115,       161,    8116,       165,  // NOLINT
   1839     8118,       169,    8119,       173,    8124,       161,
   1840     8126,       -28820, 8130,       177,    8131,       181,
   1841     8132,       185,    8134,       189,  // NOLINT
   1842     8135,       193,    8140,       181,    1073749968, 32,
   1843     8145,       32,     8146,       197,    8147,       13,
   1844     8150,       201,    8151,       205,  // NOLINT
   1845     1073749984, 32,     8161,       32,     8162,       209,
   1846     8163,       17,     8164,       213,    8165,       28,
   1847     8166,       217,    8167,       221,  // NOLINT
   1848     8178,       225,    8179,       229,    8180,       233,
   1849     8182,       237,    8183,       241,    8188,       229};  // NOLINT
   1850 static const uint16_t kToUppercaseMultiStrings0Size = 62;  // NOLINT
   1851 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings1[1] = {  // NOLINT
   1852   {{kSentinel}} }; // NOLINT
   1853 static const uint16_t kToUppercaseTable1Size = 73;  // NOLINT
   1854 static const int32_t kToUppercaseTable1[146] = {
   1855   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
   1856   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
   1857   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
   1858   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
   1859   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
   1860   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
   1861   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
   1862   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
   1863   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
   1864   3373, -29056 };  // NOLINT
   1865 static const uint16_t kToUppercaseMultiStrings1Size = 1;  // NOLINT
   1866 static const MultiCharacterSpecialCase<1> kToUppercaseMultiStrings5[1] = {  // NOLINT
   1867   {{kSentinel}} }; // NOLINT
   1868 static const uint16_t kToUppercaseTable5Size = 95;  // NOLINT
   1869 static const int32_t
   1870     kToUppercaseTable5[190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4, 1609, -4,
   1871                                1611, -4, 1613, -4, 1615, -4,  // NOLINT
   1872                                1617, -4, 1619, -4, 1621, -4, 1623, -4, 1625, -4,
   1873                                1627, -4, 1629, -4, 1631, -4,  // NOLINT
   1874                                1633, -4, 1635, -4, 1637, -4, 1639, -4, 1641, -4,
   1875                                1643, -4, 1645, -4, 1665, -4,  // NOLINT
   1876                                1667, -4, 1669, -4, 1671, -4, 1673, -4, 1675, -4,
   1877                                1677, -4, 1679, -4, 1681, -4,  // NOLINT
   1878                                1683, -4, 1685, -4, 1687, -4, 1689, -4, 1691, -4,
   1879                                1827, -4, 1829, -4, 1831, -4,  // NOLINT
   1880                                1833, -4, 1835, -4, 1837, -4, 1839, -4, 1843, -4,
   1881                                1845, -4, 1847, -4, 1849, -4,  // NOLINT
   1882                                1851, -4, 1853, -4, 1855, -4, 1857, -4, 1859, -4,
   1883                                1861, -4, 1863, -4, 1865, -4,  // NOLINT
   1884                                1867, -4, 1869, -4, 1871, -4, 1873, -4, 1875, -4,
   1885                                1877, -4, 1879, -4, 1881, -4,  // NOLINT
   1886                                1883, -4, 1885, -4, 1887, -4, 1889, -4, 1891, -4,
   1887                                1893, -4, 1895, -4, 1897, -4,  // NOLINT
   1888                                1899, -4, 1901, -4, 1903, -4, 1914, -4, 1916, -4,
   1889                                1919, -4, 1921, -4, 1923, -4,  // NOLINT
   1890                                1925, -4, 1927, -4, 1932, -4, 1937, -4, 1939, -4,
   1891                                1943, -4, 1945, -4, 1947, -4,  // NOLINT
   1892                                1949, -4, 1951, -4, 1953, -4, 1955, -4, 1957, -4,
   1893                                1959, -4, 1961, -4};       // NOLINT
   1894 static const uint16_t kToUppercaseMultiStrings5Size = 1;  // NOLINT
   1895 static const MultiCharacterSpecialCase<3> kToUppercaseMultiStrings7[12] = {  // NOLINT
   1896   {{70, 70, kSentinel}}, {{70, 73, kSentinel}}, {{70, 76, kSentinel}}, {{70, 70, 73}},  // NOLINT
   1897   {{70, 70, 76}}, {{83, 84, kSentinel}}, {{1348, 1350, kSentinel}}, {{1348, 1333, kSentinel}},  // NOLINT
   1898   {{1348, 1339, kSentinel}}, {{1358, 1350, kSentinel}}, {{1348, 1341, kSentinel}}, {{kSentinel}} }; // NOLINT
   1899 static const uint16_t kToUppercaseTable7Size = 14;  // NOLINT
   1900 static const int32_t kToUppercaseTable7[28] = {
   1901   6912, 1, 6913, 5, 6914, 9, 6915, 13, 6916, 17, 6917, 21, 6918, 21, 6931, 25,  // NOLINT
   1902   6932, 29, 6933, 33, 6934, 37, 6935, 41, 1073749825, -128, 8026, -128 };  // NOLINT
   1903 static const uint16_t kToUppercaseMultiStrings7Size = 12;  // NOLINT
   1904 int ToUppercase::Convert(uchar c,
   1905                       uchar n,
   1906                       uchar* result,
   1907                       bool* allow_caching_ptr) {
   1908   int chunk_index = c >> 13;
   1909   switch (chunk_index) {
   1910     case 0: return LookupMapping<true>(kToUppercaseTable0,
   1911                                            kToUppercaseTable0Size,
   1912                                            kToUppercaseMultiStrings0,
   1913                                            c,
   1914                                            n,
   1915                                            result,
   1916                                            allow_caching_ptr);
   1917     case 1: return LookupMapping<true>(kToUppercaseTable1,
   1918                                            kToUppercaseTable1Size,
   1919                                            kToUppercaseMultiStrings1,
   1920                                            c,
   1921                                            n,
   1922                                            result,
   1923                                            allow_caching_ptr);
   1924     case 5: return LookupMapping<true>(kToUppercaseTable5,
   1925                                            kToUppercaseTable5Size,
   1926                                            kToUppercaseMultiStrings5,
   1927                                            c,
   1928                                            n,
   1929                                            result,
   1930                                            allow_caching_ptr);
   1931     case 7: return LookupMapping<true>(kToUppercaseTable7,
   1932                                            kToUppercaseTable7Size,
   1933                                            kToUppercaseMultiStrings7,
   1934                                            c,
   1935                                            n,
   1936                                            result,
   1937                                            allow_caching_ptr);
   1938     default: return 0;
   1939   }
   1940 }
   1941 
   1942 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings0[1] = {  // NOLINT
   1943   {{kSentinel}} }; // NOLINT
   1944 static const uint16_t kEcma262CanonicalizeTable0Size = 498;  // NOLINT
   1945 static const int32_t kEcma262CanonicalizeTable0[996] = {
   1946     1073741921, -128,   122,        -128,   181,        2972,
   1947     1073742048, -128,   246,        -128,   1073742072, -128,
   1948     254,        -128,   255,        484,  // NOLINT
   1949     257,        -4,     259,        -4,     261,        -4,
   1950     263,        -4,     265,        -4,     267,        -4,
   1951     269,        -4,     271,        -4,  // NOLINT
   1952     273,        -4,     275,        -4,     277,        -4,
   1953     279,        -4,     281,        -4,     283,        -4,
   1954     285,        -4,     287,        -4,  // NOLINT
   1955     289,        -4,     291,        -4,     293,        -4,
   1956     295,        -4,     297,        -4,     299,        -4,
   1957     301,        -4,     303,        -4,  // NOLINT
   1958     307,        -4,     309,        -4,     311,        -4,
   1959     314,        -4,     316,        -4,     318,        -4,
   1960     320,        -4,     322,        -4,  // NOLINT
   1961     324,        -4,     326,        -4,     328,        -4,
   1962     331,        -4,     333,        -4,     335,        -4,
   1963     337,        -4,     339,        -4,  // NOLINT
   1964     341,        -4,     343,        -4,     345,        -4,
   1965     347,        -4,     349,        -4,     351,        -4,
   1966     353,        -4,     355,        -4,  // NOLINT
   1967     357,        -4,     359,        -4,     361,        -4,
   1968     363,        -4,     365,        -4,     367,        -4,
   1969     369,        -4,     371,        -4,  // NOLINT
   1970     373,        -4,     375,        -4,     378,        -4,
   1971     380,        -4,     382,        -4,     384,        780,
   1972     387,        -4,     389,        -4,  // NOLINT
   1973     392,        -4,     396,        -4,     402,        -4,
   1974     405,        388,    409,        -4,     410,        652,
   1975     414,        520,    417,        -4,  // NOLINT
   1976     419,        -4,     421,        -4,     424,        -4,
   1977     429,        -4,     432,        -4,     436,        -4,
   1978     438,        -4,     441,        -4,  // NOLINT
   1979     445,        -4,     447,        224,    453,        -4,
   1980     454,        -8,     456,        -4,     457,        -8,
   1981     459,        -4,     460,        -8,  // NOLINT
   1982     462,        -4,     464,        -4,     466,        -4,
   1983     468,        -4,     470,        -4,     472,        -4,
   1984     474,        -4,     476,        -4,  // NOLINT
   1985     477,        -316,   479,        -4,     481,        -4,
   1986     483,        -4,     485,        -4,     487,        -4,
   1987     489,        -4,     491,        -4,  // NOLINT
   1988     493,        -4,     495,        -4,     498,        -4,
   1989     499,        -8,     501,        -4,     505,        -4,
   1990     507,        -4,     509,        -4,  // NOLINT
   1991     511,        -4,     513,        -4,     515,        -4,
   1992     517,        -4,     519,        -4,     521,        -4,
   1993     523,        -4,     525,        -4,  // NOLINT
   1994     527,        -4,     529,        -4,     531,        -4,
   1995     533,        -4,     535,        -4,     537,        -4,
   1996     539,        -4,     541,        -4,  // NOLINT
   1997     543,        -4,     547,        -4,     549,        -4,
   1998     551,        -4,     553,        -4,     555,        -4,
   1999     557,        -4,     559,        -4,  // NOLINT
   2000     561,        -4,     563,        -4,     572,        -4,
   2001     1073742399, 43260,  576,        43260,  578,        -4,
   2002     583,        -4,     585,        -4,  // NOLINT
   2003     587,        -4,     589,        -4,     591,        -4,
   2004     592,        43132,  593,        43120,  594,        43128,
   2005     595,        -840,   596,        -824,  // NOLINT
   2006     1073742422, -820,   599,        -820,   601,        -808,
   2007     603,        -812,   604,        169276, 608,        -820,
   2008     609,        169260, 611,        -828,  // NOLINT
   2009     613,        169120, 614,        169232, 616,        -836,
   2010     617,        -844,   619,        42972,  620,        169220,
   2011     623,        -844,   625,        42996,  // NOLINT
   2012     626,        -852,   629,        -856,   637,        42908,
   2013     640,        -872,   643,        -872,   647,        169128,
   2014     648,        -872,   649,        -276,  // NOLINT
   2015     1073742474, -868,   651,        -868,   652,        -284,
   2016     658,        -876,   670,        169032, 837,        336,
   2017     881,        -4,     883,        -4,  // NOLINT
   2018     887,        -4,     1073742715, 520,    893,        520,
   2019     940,        -152,   1073742765, -148,   943,        -148,
   2020     1073742769, -128,   961,        -128,  // NOLINT
   2021     962,        -124,   1073742787, -128,   971,        -128,
   2022     972,        -256,   1073742797, -252,   974,        -252,
   2023     976,        -248,   977,        -228,  // NOLINT
   2024     981,        -188,   982,        -216,   983,        -32,
   2025     985,        -4,     987,        -4,     989,        -4,
   2026     991,        -4,     993,        -4,  // NOLINT
   2027     995,        -4,     997,        -4,     999,        -4,
   2028     1001,       -4,     1003,       -4,     1005,       -4,
   2029     1007,       -4,     1008,       -344,  // NOLINT
   2030     1009,       -320,   1010,       28,     1011,       -464,
   2031     1013,       -384,   1016,       -4,     1019,       -4,
   2032     1073742896, -128,   1103,       -128,  // NOLINT
   2033     1073742928, -320,   1119,       -320,   1121,       -4,
   2034     1123,       -4,     1125,       -4,     1127,       -4,
   2035     1129,       -4,     1131,       -4,  // NOLINT
   2036     1133,       -4,     1135,       -4,     1137,       -4,
   2037     1139,       -4,     1141,       -4,     1143,       -4,
   2038     1145,       -4,     1147,       -4,  // NOLINT
   2039     1149,       -4,     1151,       -4,     1153,       -4,
   2040     1163,       -4,     1165,       -4,     1167,       -4,
   2041     1169,       -4,     1171,       -4,  // NOLINT
   2042     1173,       -4,     1175,       -4,     1177,       -4,
   2043     1179,       -4,     1181,       -4,     1183,       -4,
   2044     1185,       -4,     1187,       -4,  // NOLINT
   2045     1189,       -4,     1191,       -4,     1193,       -4,
   2046     1195,       -4,     1197,       -4,     1199,       -4,
   2047     1201,       -4,     1203,       -4,  // NOLINT
   2048     1205,       -4,     1207,       -4,     1209,       -4,
   2049     1211,       -4,     1213,       -4,     1215,       -4,
   2050     1218,       -4,     1220,       -4,  // NOLINT
   2051     1222,       -4,     1224,       -4,     1226,       -4,
   2052     1228,       -4,     1230,       -4,     1231,       -60,
   2053     1233,       -4,     1235,       -4,  // NOLINT
   2054     1237,       -4,     1239,       -4,     1241,       -4,
   2055     1243,       -4,     1245,       -4,     1247,       -4,
   2056     1249,       -4,     1251,       -4,  // NOLINT
   2057     1253,       -4,     1255,       -4,     1257,       -4,
   2058     1259,       -4,     1261,       -4,     1263,       -4,
   2059     1265,       -4,     1267,       -4,  // NOLINT
   2060     1269,       -4,     1271,       -4,     1273,       -4,
   2061     1275,       -4,     1277,       -4,     1279,       -4,
   2062     1281,       -4,     1283,       -4,  // NOLINT
   2063     1285,       -4,     1287,       -4,     1289,       -4,
   2064     1291,       -4,     1293,       -4,     1295,       -4,
   2065     1297,       -4,     1299,       -4,  // NOLINT
   2066     1301,       -4,     1303,       -4,     1305,       -4,
   2067     1307,       -4,     1309,       -4,     1311,       -4,
   2068     1313,       -4,     1315,       -4,  // NOLINT
   2069     1317,       -4,     1319,       -4,     1321,       -4,
   2070     1323,       -4,     1325,       -4,     1327,       -4,
   2071     1073743201, -192,   1414,       -192,  // NOLINT
   2072     7545,       141328, 7549,       15256,  7681,       -4,
   2073     7683,       -4,     7685,       -4,     7687,       -4,
   2074     7689,       -4,     7691,       -4,  // NOLINT
   2075     7693,       -4,     7695,       -4,     7697,       -4,
   2076     7699,       -4,     7701,       -4,     7703,       -4,
   2077     7705,       -4,     7707,       -4,  // NOLINT
   2078     7709,       -4,     7711,       -4,     7713,       -4,
   2079     7715,       -4,     7717,       -4,     7719,       -4,
   2080     7721,       -4,     7723,       -4,  // NOLINT
   2081     7725,       -4,     7727,       -4,     7729,       -4,
   2082     7731,       -4,     7733,       -4,     7735,       -4,
   2083     7737,       -4,     7739,       -4,  // NOLINT
   2084     7741,       -4,     7743,       -4,     7745,       -4,
   2085     7747,       -4,     7749,       -4,     7751,       -4,
   2086     7753,       -4,     7755,       -4,  // NOLINT
   2087     7757,       -4,     7759,       -4,     7761,       -4,
   2088     7763,       -4,     7765,       -4,     7767,       -4,
   2089     7769,       -4,     7771,       -4,  // NOLINT
   2090     7773,       -4,     7775,       -4,     7777,       -4,
   2091     7779,       -4,     7781,       -4,     7783,       -4,
   2092     7785,       -4,     7787,       -4,  // NOLINT
   2093     7789,       -4,     7791,       -4,     7793,       -4,
   2094     7795,       -4,     7797,       -4,     7799,       -4,
   2095     7801,       -4,     7803,       -4,  // NOLINT
   2096     7805,       -4,     7807,       -4,     7809,       -4,
   2097     7811,       -4,     7813,       -4,     7815,       -4,
   2098     7817,       -4,     7819,       -4,  // NOLINT
   2099     7821,       -4,     7823,       -4,     7825,       -4,
   2100     7827,       -4,     7829,       -4,     7835,       -236,
   2101     7841,       -4,     7843,       -4,  // NOLINT
   2102     7845,       -4,     7847,       -4,     7849,       -4,
   2103     7851,       -4,     7853,       -4,     7855,       -4,
   2104     7857,       -4,     7859,       -4,  // NOLINT
   2105     7861,       -4,     7863,       -4,     7865,       -4,
   2106     7867,       -4,     7869,       -4,     7871,       -4,
   2107     7873,       -4,     7875,       -4,  // NOLINT
   2108     7877,       -4,     7879,       -4,     7881,       -4,
   2109     7883,       -4,     7885,       -4,     7887,       -4,
   2110     7889,       -4,     7891,       -4,  // NOLINT
   2111     7893,       -4,     7895,       -4,     7897,       -4,
   2112     7899,       -4,     7901,       -4,     7903,       -4,
   2113     7905,       -4,     7907,       -4,  // NOLINT
   2114     7909,       -4,     7911,       -4,     7913,       -4,
   2115     7915,       -4,     7917,       -4,     7919,       -4,
   2116     7921,       -4,     7923,       -4,  // NOLINT
   2117     7925,       -4,     7927,       -4,     7929,       -4,
   2118     7931,       -4,     7933,       -4,     7935,       -4,
   2119     1073749760, 32,     7943,       32,  // NOLINT
   2120     1073749776, 32,     7957,       32,     1073749792, 32,
   2121     7975,       32,     1073749808, 32,     7991,       32,
   2122     1073749824, 32,     8005,       32,  // NOLINT
   2123     8017,       32,     8019,       32,     8021,       32,
   2124     8023,       32,     1073749856, 32,     8039,       32,
   2125     1073749872, 296,    8049,       296,  // NOLINT
   2126     1073749874, 344,    8053,       344,    1073749878, 400,
   2127     8055,       400,    1073749880, 512,    8057,       512,
   2128     1073749882, 448,    8059,       448,  // NOLINT
   2129     1073749884, 504,    8061,       504,    1073749936, 32,
   2130     8113,       32,     8126,       -28820, 1073749968, 32,
   2131     8145,       32,     1073749984, 32,                           // NOLINT
   2132     8161,       32,     8165,       28};                          // NOLINT
   2133 static const uint16_t kEcma262CanonicalizeMultiStrings0Size = 1;  // NOLINT
   2134 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings1[1] = {  // NOLINT
   2135   {{kSentinel}} }; // NOLINT
   2136 static const uint16_t kEcma262CanonicalizeTable1Size = 73;  // NOLINT
   2137 static const int32_t kEcma262CanonicalizeTable1[146] = {
   2138   334, -112, 1073742192, -64, 383, -64, 388, -4, 1073743056, -104, 1257, -104, 1073744944, -192, 3166, -192,  // NOLINT
   2139   3169, -4, 3173, -43180, 3174, -43168, 3176, -4, 3178, -4, 3180, -4, 3187, -4, 3190, -4,  // NOLINT
   2140   3201, -4, 3203, -4, 3205, -4, 3207, -4, 3209, -4, 3211, -4, 3213, -4, 3215, -4,  // NOLINT
   2141   3217, -4, 3219, -4, 3221, -4, 3223, -4, 3225, -4, 3227, -4, 3229, -4, 3231, -4,  // NOLINT
   2142   3233, -4, 3235, -4, 3237, -4, 3239, -4, 3241, -4, 3243, -4, 3245, -4, 3247, -4,  // NOLINT
   2143   3249, -4, 3251, -4, 3253, -4, 3255, -4, 3257, -4, 3259, -4, 3261, -4, 3263, -4,  // NOLINT
   2144   3265, -4, 3267, -4, 3269, -4, 3271, -4, 3273, -4, 3275, -4, 3277, -4, 3279, -4,  // NOLINT
   2145   3281, -4, 3283, -4, 3285, -4, 3287, -4, 3289, -4, 3291, -4, 3293, -4, 3295, -4,  // NOLINT
   2146   3297, -4, 3299, -4, 3308, -4, 3310, -4, 3315, -4, 1073745152, -29056, 3365, -29056, 3367, -29056,  // NOLINT
   2147   3373, -29056 };  // NOLINT
   2148 static const uint16_t kEcma262CanonicalizeMultiStrings1Size = 1;  // NOLINT
   2149 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings5[1] = {  // NOLINT
   2150   {{kSentinel}} }; // NOLINT
   2151 static const uint16_t kEcma262CanonicalizeTable5Size = 95;  // NOLINT
   2152 static const int32_t kEcma262CanonicalizeTable5
   2153     [190] = {1601, -4, 1603, -4, 1605, -4, 1607, -4,
   2154              1609, -4, 1611, -4, 1613, -4, 1615, -4,  // NOLINT
   2155              1617, -4, 1619, -4, 1621, -4, 1623, -4,
   2156              1625, -4, 1627, -4, 1629, -4, 1631, -4,  // NOLINT
   2157              1633, -4, 1635, -4, 1637, -4, 1639, -4,
   2158              1641, -4, 1643, -4, 1645, -4, 1665, -4,  // NOLINT
   2159              1667, -4, 1669, -4, 1671, -4, 1673, -4,
   2160              1675, -4, 1677, -4, 1679, -4, 1681, -4,  // NOLINT
   2161              1683, -4, 1685, -4, 1687, -4, 1689, -4,
   2162              1691, -4, 1827, -4, 1829, -4, 1831, -4,  // NOLINT
   2163              1833, -4, 1835, -4, 1837, -4, 1839, -4,
   2164              1843, -4, 1845, -4, 1847, -4, 1849, -4,  // NOLINT
   2165              1851, -4, 1853, -4, 1855, -4, 1857, -4,
   2166              1859, -4, 1861, -4, 1863, -4, 1865, -4,  // NOLINT
   2167              1867, -4, 1869, -4, 1871, -4, 1873, -4,
   2168              1875, -4, 1877, -4, 1879, -4, 1881, -4,  // NOLINT
   2169              1883, -4, 1885, -4, 1887, -4, 1889, -4,
   2170              1891, -4, 1893, -4, 1895, -4, 1897, -4,  // NOLINT
   2171              1899, -4, 1901, -4, 1903, -4, 1914, -4,
   2172              1916, -4, 1919, -4, 1921, -4, 1923, -4,  // NOLINT
   2173              1925, -4, 1927, -4, 1932, -4, 1937, -4,
   2174              1939, -4, 1943, -4, 1945, -4, 1947, -4,  // NOLINT
   2175              1949, -4, 1951, -4, 1953, -4, 1955, -4,
   2176              1957, -4, 1959, -4, 1961, -4};                       // NOLINT
   2177 static const uint16_t kEcma262CanonicalizeMultiStrings5Size = 1;  // NOLINT
   2178 static const MultiCharacterSpecialCase<1> kEcma262CanonicalizeMultiStrings7[1] = {  // NOLINT
   2179   {{kSentinel}} }; // NOLINT
   2180 static const uint16_t kEcma262CanonicalizeTable7Size = 2;  // NOLINT
   2181 static const int32_t kEcma262CanonicalizeTable7[4] = {
   2182   1073749825, -128, 8026, -128 };  // NOLINT
   2183 static const uint16_t kEcma262CanonicalizeMultiStrings7Size = 1;  // NOLINT
   2184 int Ecma262Canonicalize::Convert(uchar c,
   2185                       uchar n,
   2186                       uchar* result,
   2187                       bool* allow_caching_ptr) {
   2188   int chunk_index = c >> 13;
   2189   switch (chunk_index) {
   2190     case 0: return LookupMapping<true>(kEcma262CanonicalizeTable0,
   2191                                            kEcma262CanonicalizeTable0Size,
   2192                                            kEcma262CanonicalizeMultiStrings0,
   2193                                            c,
   2194                                            n,
   2195                                            result,
   2196                                            allow_caching_ptr);
   2197     case 1: return LookupMapping<true>(kEcma262CanonicalizeTable1,
   2198                                            kEcma262CanonicalizeTable1Size,
   2199                                            kEcma262CanonicalizeMultiStrings1,
   2200                                            c,
   2201                                            n,
   2202                                            result,
   2203                                            allow_caching_ptr);
   2204     case 5: return LookupMapping<true>(kEcma262CanonicalizeTable5,
   2205                                            kEcma262CanonicalizeTable5Size,
   2206                                            kEcma262CanonicalizeMultiStrings5,
   2207                                            c,
   2208                                            n,
   2209                                            result,
   2210                                            allow_caching_ptr);
   2211     case 7: return LookupMapping<true>(kEcma262CanonicalizeTable7,
   2212                                            kEcma262CanonicalizeTable7Size,
   2213                                            kEcma262CanonicalizeMultiStrings7,
   2214                                            c,
   2215                                            n,
   2216                                            result,
   2217                                            allow_caching_ptr);
   2218     default: return 0;
   2219   }
   2220 }
   2221 
   2222 static const MultiCharacterSpecialCase<4>
   2223     kEcma262UnCanonicalizeMultiStrings0[507] = {  // NOLINT
   2224         {{65, 97, kSentinel}},
   2225         {{90, 122, kSentinel}},
   2226         {{181, 924, 956, kSentinel}},
   2227         {{192, 224, kSentinel}},  // NOLINT
   2228         {{214, 246, kSentinel}},
   2229         {{216, 248, kSentinel}},
   2230         {{222, 254, kSentinel}},
   2231         {{255, 376, kSentinel}},  // NOLINT
   2232         {{256, 257, kSentinel}},
   2233         {{258, 259, kSentinel}},
   2234         {{260, 261, kSentinel}},
   2235         {{262, 263, kSentinel}},  // NOLINT
   2236         {{264, 265, kSentinel}},
   2237         {{266, 267, kSentinel}},
   2238         {{268, 269, kSentinel}},
   2239         {{270, 271, kSentinel}},  // NOLINT
   2240         {{272, 273, kSentinel}},
   2241         {{274, 275, kSentinel}},
   2242         {{276, 277, kSentinel}},
   2243         {{278, 279, kSentinel}},  // NOLINT
   2244         {{280, 281, kSentinel}},
   2245         {{282, 283, kSentinel}},
   2246         {{284, 285, kSentinel}},
   2247         {{286, 287, kSentinel}},  // NOLINT
   2248         {{288, 289, kSentinel}},
   2249         {{290, 291, kSentinel}},
   2250         {{292, 293, kSentinel}},
   2251         {{294, 295, kSentinel}},  // NOLINT
   2252         {{296, 297, kSentinel}},
   2253         {{298, 299, kSentinel}},
   2254         {{300, 301, kSentinel}},
   2255         {{302, 303, kSentinel}},  // NOLINT
   2256         {{306, 307, kSentinel}},
   2257         {{308, 309, kSentinel}},
   2258         {{310, 311, kSentinel}},
   2259         {{313, 314, kSentinel}},  // NOLINT
   2260         {{315, 316, kSentinel}},
   2261         {{317, 318, kSentinel}},
   2262         {{319, 320, kSentinel}},
   2263         {{321, 322, kSentinel}},  // NOLINT
   2264         {{323, 324, kSentinel}},
   2265         {{325, 326, kSentinel}},
   2266         {{327, 328, kSentinel}},
   2267         {{330, 331, kSentinel}},  // NOLINT
   2268         {{332, 333, kSentinel}},
   2269         {{334, 335, kSentinel}},
   2270         {{336, 337, kSentinel}},
   2271         {{338, 339, kSentinel}},  // NOLINT
   2272         {{340, 341, kSentinel}},
   2273         {{342, 343, kSentinel}},
   2274         {{344, 345, kSentinel}},
   2275         {{346, 347, kSentinel}},  // NOLINT
   2276         {{348, 349, kSentinel}},
   2277         {{350, 351, kSentinel}},
   2278         {{352, 353, kSentinel}},
   2279         {{354, 355, kSentinel}},  // NOLINT
   2280         {{356, 357, kSentinel}},
   2281         {{358, 359, kSentinel}},
   2282         {{360, 361, kSentinel}},
   2283         {{362, 363, kSentinel}},  // NOLINT
   2284         {{364, 365, kSentinel}},
   2285         {{366, 367, kSentinel}},
   2286         {{368, 369, kSentinel}},
   2287         {{370, 371, kSentinel}},  // NOLINT
   2288         {{372, 373, kSentinel}},
   2289         {{374, 375, kSentinel}},
   2290         {{377, 378, kSentinel}},
   2291         {{379, 380, kSentinel}},  // NOLINT
   2292         {{381, 382, kSentinel}},
   2293         {{384, 579, kSentinel}},
   2294         {{385, 595, kSentinel}},
   2295         {{386, 387, kSentinel}},  // NOLINT
   2296         {{388, 389, kSentinel}},
   2297         {{390, 596, kSentinel}},
   2298         {{391, 392, kSentinel}},
   2299         {{393, 598, kSentinel}},  // NOLINT
   2300         {{394, 599, kSentinel}},
   2301         {{395, 396, kSentinel}},
   2302         {{398, 477, kSentinel}},
   2303         {{399, 601, kSentinel}},  // NOLINT
   2304         {{400, 603, kSentinel}},
   2305         {{401, 402, kSentinel}},
   2306         {{403, 608, kSentinel}},
   2307         {{404, 611, kSentinel}},  // NOLINT
   2308         {{405, 502, kSentinel}},
   2309         {{406, 617, kSentinel}},
   2310         {{407, 616, kSentinel}},
   2311         {{408, 409, kSentinel}},  // NOLINT
   2312         {{410, 573, kSentinel}},
   2313         {{412, 623, kSentinel}},
   2314         {{413, 626, kSentinel}},
   2315         {{414, 544, kSentinel}},  // NOLINT
   2316         {{415, 629, kSentinel}},
   2317         {{416, 417, kSentinel}},
   2318         {{418, 419, kSentinel}},
   2319         {{420, 421, kSentinel}},  // NOLINT
   2320         {{422, 640, kSentinel}},
   2321         {{423, 424, kSentinel}},
   2322         {{425, 643, kSentinel}},
   2323         {{428, 429, kSentinel}},  // NOLINT
   2324         {{430, 648, kSentinel}},
   2325         {{431, 432, kSentinel}},
   2326         {{433, 650, kSentinel}},
   2327         {{434, 651, kSentinel}},  // NOLINT
   2328         {{435, 436, kSentinel}},
   2329         {{437, 438, kSentinel}},
   2330         {{439, 658, kSentinel}},
   2331         {{440, 441, kSentinel}},  // NOLINT
   2332         {{444, 445, kSentinel}},
   2333         {{447, 503, kSentinel}},
   2334         {{452, 453, 454, kSentinel}},
   2335         {{455, 456, 457, kSentinel}},  // NOLINT
   2336         {{458, 459, 460, kSentinel}},
   2337         {{461, 462, kSentinel}},
   2338         {{463, 464, kSentinel}},
   2339         {{465, 466, kSentinel}},  // NOLINT
   2340         {{467, 468, kSentinel}},
   2341         {{469, 470, kSentinel}},
   2342         {{471, 472, kSentinel}},
   2343         {{473, 474, kSentinel}},  // NOLINT
   2344         {{475, 476, kSentinel}},
   2345         {{478, 479, kSentinel}},
   2346         {{480, 481, kSentinel}},
   2347         {{482, 483, kSentinel}},  // NOLINT
   2348         {{484, 485, kSentinel}},
   2349         {{486, 487, kSentinel}},
   2350         {{488, 489, kSentinel}},
   2351         {{490, 491, kSentinel}},  // NOLINT
   2352         {{492, 493, kSentinel}},
   2353         {{494, 495, kSentinel}},
   2354         {{497, 498, 499, kSentinel}},
   2355         {{500, 501, kSentinel}},  // NOLINT
   2356         {{504, 505, kSentinel}},
   2357         {{506, 507, kSentinel}},
   2358         {{508, 509, kSentinel}},
   2359         {{510, 511, kSentinel}},  // NOLINT
   2360         {{512, 513, kSentinel}},
   2361         {{514, 515, kSentinel}},
   2362         {{516, 517, kSentinel}},
   2363         {{518, 519, kSentinel}},  // NOLINT
   2364         {{520, 521, kSentinel}},
   2365         {{522, 523, kSentinel}},
   2366         {{524, 525, kSentinel}},
   2367         {{526, 527, kSentinel}},  // NOLINT
   2368         {{528, 529, kSentinel}},
   2369         {{530, 531, kSentinel}},
   2370         {{532, 533, kSentinel}},
   2371         {{534, 535, kSentinel}},  // NOLINT
   2372         {{536, 537, kSentinel}},
   2373         {{538, 539, kSentinel}},
   2374         {{540, 541, kSentinel}},
   2375         {{542, 543, kSentinel}},  // NOLINT
   2376         {{546, 547, kSentinel}},
   2377         {{548, 549, kSentinel}},
   2378         {{550, 551, kSentinel}},
   2379         {{552, 553, kSentinel}},  // NOLINT
   2380         {{554, 555, kSentinel}},
   2381         {{556, 557, kSentinel}},
   2382         {{558, 559, kSentinel}},
   2383         {{560, 561, kSentinel}},  // NOLINT
   2384         {{562, 563, kSentinel}},
   2385         {{570, 11365, kSentinel}},
   2386         {{571, 572, kSentinel}},
   2387         {{574, 11366, kSentinel}},  // NOLINT
   2388         {{575, 11390, kSentinel}},
   2389         {{576, 11391, kSentinel}},
   2390         {{577, 578, kSentinel}},
   2391         {{580, 649, kSentinel}},  // NOLINT
   2392         {{581, 652, kSentinel}},
   2393         {{582, 583, kSentinel}},
   2394         {{584, 585, kSentinel}},
   2395         {{586, 587, kSentinel}},  // NOLINT
   2396         {{588, 589, kSentinel}},
   2397         {{590, 591, kSentinel}},
   2398         {{592, 11375, kSentinel}},
   2399         {{593, 11373, kSentinel}},  // NOLINT
   2400         {{594, 11376, kSentinel}},
   2401         {{604, 42923, kSentinel}},
   2402         {{609, 42924, kSentinel}},
   2403         {{613, 42893, kSentinel}},  // NOLINT
   2404         {{614, 42922, kSentinel}},
   2405         {{619, 11362, kSentinel}},
   2406         {{620, 42925, kSentinel}},
   2407         {{625, 11374, kSentinel}},  // NOLINT
   2408         {{637, 11364, kSentinel}},
   2409         {{647, 42929, kSentinel}},
   2410         {{670, 42928, kSentinel}},
   2411         {{837, 921, 953, 8126}},  // NOLINT
   2412         {{880, 881, kSentinel}},
   2413         {{882, 883, kSentinel}},
   2414         {{886, 887, kSentinel}},
   2415         {{891, 1021, kSentinel}},  // NOLINT
   2416         {{893, 1023, kSentinel}},
   2417         {{895, 1011, kSentinel}},
   2418         {{902, 940, kSentinel}},
   2419         {{904, 941, kSentinel}},  // NOLINT
   2420         {{906, 943, kSentinel}},
   2421         {{908, 972, kSentinel}},
   2422         {{910, 973, kSentinel}},
   2423         {{911, 974, kSentinel}},  // NOLINT
   2424         {{913, 945, kSentinel}},
   2425         {{914, 946, 976, kSentinel}},
   2426         {{915, 947, kSentinel}},
   2427         {{916, 948, kSentinel}},  // NOLINT
   2428         {{917, 949, 1013, kSentinel}},
   2429         {{918, 950, kSentinel}},
   2430         {{919, 951, kSentinel}},
   2431         {{920, 952, 977, kSentinel}},  // NOLINT
   2432         {{922, 954, 1008, kSentinel}},
   2433         {{923, 955, kSentinel}},
   2434         {{925, 957, kSentinel}},
   2435         {{927, 959, kSentinel}},  // NOLINT
   2436         {{928, 960, 982, kSentinel}},
   2437         {{929, 961, 1009, kSentinel}},
   2438         {{931, 962, 963, kSentinel}},
   2439         {{932, 964, kSentinel}},  // NOLINT
   2440         {{933, 965, kSentinel}},
   2441         {{934, 966, 981, kSentinel}},
   2442         {{935, 967, kSentinel}},
   2443         {{939, 971, kSentinel}},  // NOLINT
   2444         {{975, 983, kSentinel}},
   2445         {{984, 985, kSentinel}},
   2446         {{986, 987, kSentinel}},
   2447         {{988, 989, kSentinel}},  // NOLINT
   2448         {{990, 991, kSentinel}},
   2449         {{992, 993, kSentinel}},
   2450         {{994, 995, kSentinel}},
   2451         {{996, 997, kSentinel}},  // NOLINT
   2452         {{998, 999, kSentinel}},
   2453         {{1000, 1001, kSentinel}},
   2454         {{1002, 1003, kSentinel}},
   2455         {{1004, 1005, kSentinel}},  // NOLINT
   2456         {{1006, 1007, kSentinel}},
   2457         {{1010, 1017, kSentinel}},
   2458         {{1015, 1016, kSentinel}},
   2459         {{1018, 1019, kSentinel}},  // NOLINT
   2460         {{1024, 1104, kSentinel}},
   2461         {{1039, 1119, kSentinel}},
   2462         {{1040, 1072, kSentinel}},
   2463         {{1071, 1103, kSentinel}},  // NOLINT
   2464         {{1120, 1121, kSentinel}},
   2465         {{1122, 1123, kSentinel}},
   2466         {{1124, 1125, kSentinel}},
   2467         {{1126, 1127, kSentinel}},  // NOLINT
   2468         {{1128, 1129, kSentinel}},
   2469         {{1130, 1131, kSentinel}},
   2470         {{1132, 1133, kSentinel}},
   2471         {{1134, 1135, kSentinel}},  // NOLINT
   2472         {{1136, 1137, kSentinel}},
   2473         {{1138, 1139, kSentinel}},
   2474         {{1140, 1141, kSentinel}},
   2475         {{1142, 1143, kSentinel}},  // NOLINT
   2476         {{1144, 1145, kSentinel}},
   2477         {{1146, 1147, kSentinel}},
   2478         {{1148, 1149, kSentinel}},
   2479         {{1150, 1151, kSentinel}},  // NOLINT
   2480         {{1152, 1153, kSentinel}},
   2481         {{1162, 1163, kSentinel}},
   2482         {{1164, 1165, kSentinel}},
   2483         {{1166, 1167, kSentinel}},  // NOLINT
   2484         {{1168, 1169, kSentinel}},
   2485         {{1170, 1171, kSentinel}},
   2486         {{1172, 1173, kSentinel}},
   2487         {{1174, 1175, kSentinel}},  // NOLINT
   2488         {{1176, 1177, kSentinel}},
   2489         {{1178, 1179, kSentinel}},
   2490         {{1180, 1181, kSentinel}},
   2491         {{1182, 1183, kSentinel}},  // NOLINT
   2492         {{1184, 1185, kSentinel}},
   2493         {{1186, 1187, kSentinel}},
   2494         {{1188, 1189, kSentinel}},
   2495         {{1190, 1191, kSentinel}},  // NOLINT
   2496         {{1192, 1193, kSentinel}},
   2497         {{1194, 1195, kSentinel}},
   2498         {{1196, 1197, kSentinel}},
   2499         {{1198, 1199, kSentinel}},  // NOLINT
   2500         {{1200, 1201, kSentinel}},
   2501         {{1202, 1203, kSentinel}},
   2502         {{1204, 1205, kSentinel}},
   2503         {{1206, 1207, kSentinel}},  // NOLINT
   2504         {{1208, 1209, kSentinel}},
   2505         {{1210, 1211, kSentinel}},
   2506         {{1212, 1213, kSentinel}},
   2507         {{1214, 1215, kSentinel}},  // NOLINT
   2508         {{1216, 1231, kSentinel}},
   2509         {{1217, 1218, kSentinel}},
   2510         {{1219, 1220, kSentinel}},
   2511         {{1221, 1222, kSentinel}},  // NOLINT
   2512         {{1223, 1224, kSentinel}},
   2513         {{1225, 1226, kSentinel}},
   2514         {{1227, 1228, kSentinel}},
   2515         {{1229, 1230, kSentinel}},  // NOLINT
   2516         {{1232, 1233, kSentinel}},
   2517         {{1234, 1235, kSentinel}},
   2518         {{1236, 1237, kSentinel}},
   2519         {{1238, 1239, kSentinel}},  // NOLINT
   2520         {{1240, 1241, kSentinel}},
   2521         {{1242, 1243, kSentinel}},
   2522         {{1244, 1245, kSentinel}},
   2523         {{1246, 1247, kSentinel}},  // NOLINT
   2524         {{1248, 1249, kSentinel}},
   2525         {{1250, 1251, kSentinel}},
   2526         {{1252, 1253, kSentinel}},
   2527         {{1254, 1255, kSentinel}},  // NOLINT
   2528         {{1256, 1257, kSentinel}},
   2529         {{1258, 1259, kSentinel}},
   2530         {{1260, 1261, kSentinel}},
   2531         {{1262, 1263, kSentinel}},  // NOLINT
   2532         {{1264, 1265, kSentinel}},
   2533         {{1266, 1267, kSentinel}},
   2534         {{1268, 1269, kSentinel}},
   2535         {{1270, 1271, kSentinel}},  // NOLINT
   2536         {{1272, 1273, kSentinel}},
   2537         {{1274, 1275, kSentinel}},
   2538         {{1276, 1277, kSentinel}},
   2539         {{1278, 1279, kSentinel}},  // NOLINT
   2540         {{1280, 1281, kSentinel}},
   2541         {{1282, 1283, kSentinel}},
   2542         {{1284, 1285, kSentinel}},
   2543         {{1286, 1287, kSentinel}},  // NOLINT
   2544         {{1288, 1289, kSentinel}},
   2545         {{1290, 1291, kSentinel}},
   2546         {{1292, 1293, kSentinel}},
   2547         {{1294, 1295, kSentinel}},  // NOLINT
   2548         {{1296, 1297, kSentinel}},
   2549         {{1298, 1299, kSentinel}},
   2550         {{1300, 1301, kSentinel}},
   2551         {{1302, 1303, kSentinel}},  // NOLINT
   2552         {{1304, 1305, kSentinel}},
   2553         {{1306, 1307, kSentinel}},
   2554         {{1308, 1309, kSentinel}},
   2555         {{1310, 1311, kSentinel}},  // NOLINT
   2556         {{1312, 1313, kSentinel}},
   2557         {{1314, 1315, kSentinel}},
   2558         {{1316, 1317, kSentinel}},
   2559         {{1318, 1319, kSentinel}},  // NOLINT
   2560         {{1320, 1321, kSentinel}},
   2561         {{1322, 1323, kSentinel}},
   2562         {{1324, 1325, kSentinel}},
   2563         {{1326, 1327, kSentinel}},  // NOLINT
   2564         {{1329, 1377, kSentinel}},
   2565         {{1366, 1414, kSentinel}},
   2566         {{4256, 11520, kSentinel}},
   2567         {{4293, 11557, kSentinel}},  // NOLINT
   2568         {{4295, 11559, kSentinel}},
   2569         {{4301, 11565, kSentinel}},
   2570         {{7545, 42877, kSentinel}},
   2571         {{7549, 11363, kSentinel}},  // NOLINT
   2572         {{7680, 7681, kSentinel}},
   2573         {{7682, 7683, kSentinel}},
   2574         {{7684, 7685, kSentinel}},
   2575         {{7686, 7687, kSentinel}},  // NOLINT
   2576         {{7688, 7689, kSentinel}},
   2577         {{7690, 7691, kSentinel}},
   2578         {{7692, 7693, kSentinel}},
   2579         {{7694, 7695, kSentinel}},  // NOLINT
   2580         {{7696, 7697, kSentinel}},
   2581         {{7698, 7699, kSentinel}},
   2582         {{7700, 7701, kSentinel}},
   2583         {{7702, 7703, kSentinel}},  // NOLINT
   2584         {{7704, 7705, kSentinel}},
   2585         {{7706, 7707, kSentinel}},
   2586         {{7708, 7709, kSentinel}},
   2587         {{7710, 7711, kSentinel}},  // NOLINT
   2588         {{7712, 7713, kSentinel}},
   2589         {{7714, 7715, kSentinel}},
   2590         {{7716, 7717, kSentinel}},
   2591         {{7718, 7719, kSentinel}},  // NOLINT
   2592         {{7720, 7721, kSentinel}},
   2593         {{7722, 7723, kSentinel}},
   2594         {{7724, 7725, kSentinel}},
   2595         {{7726, 7727, kSentinel}},  // NOLINT
   2596         {{7728, 7729, kSentinel}},
   2597         {{7730, 7731, kSentinel}},
   2598         {{7732, 7733, kSentinel}},
   2599         {{7734, 7735, kSentinel}},  // NOLINT
   2600         {{7736, 7737, kSentinel}},
   2601         {{7738, 7739, kSentinel}},
   2602         {{7740, 7741, kSentinel}},
   2603         {{7742, 7743, kSentinel}},  // NOLINT
   2604         {{7744, 7745, kSentinel}},
   2605         {{7746, 7747, kSentinel}},
   2606         {{7748, 7749, kSentinel}},
   2607         {{7750, 7751, kSentinel}},  // NOLINT
   2608         {{7752, 7753, kSentinel}},
   2609         {{7754, 7755, kSentinel}},
   2610         {{7756, 7757, kSentinel}},
   2611         {{7758, 7759, kSentinel}},  // NOLINT
   2612         {{7760, 7761, kSentinel}},
   2613         {{7762, 7763, kSentinel}},
   2614         {{7764, 7765, kSentinel}},
   2615         {{7766, 7767, kSentinel}},  // NOLINT
   2616         {{7768, 7769, kSentinel}},
   2617         {{7770, 7771, kSentinel}},
   2618         {{7772, 7773, kSentinel}},
   2619         {{7774, 7775, kSentinel}},  // NOLINT
   2620         {{7776, 7777, 7835, kSentinel}},
   2621         {{7778, 7779, kSentinel}},
   2622         {{7780, 7781, kSentinel}},
   2623         {{7782, 7783, kSentinel}},  // NOLINT
   2624         {{7784, 7785, kSentinel}},
   2625         {{7786, 7787, kSentinel}},
   2626         {{7788, 7789, kSentinel}},
   2627         {{7790, 7791, kSentinel}},  // NOLINT
   2628         {{7792, 7793, kSentinel}},
   2629         {{7794, 7795, kSentinel}},
   2630         {{7796, 7797, kSentinel}},
   2631         {{7798, 7799, kSentinel}},  // NOLINT
   2632         {{7800, 7801, kSentinel}},
   2633         {{7802, 7803, kSentinel}},
   2634         {{7804, 7805, kSentinel}},
   2635         {{7806, 7807, kSentinel}},  // NOLINT
   2636         {{7808, 7809, kSentinel}},
   2637         {{7810, 7811, kSentinel}},
   2638         {{7812, 7813, kSentinel}},
   2639         {{7814, 7815, kSentinel}},  // NOLINT
   2640         {{7816, 7817, kSentinel}},
   2641         {{7818, 7819, kSentinel}},
   2642         {{7820, 7821, kSentinel}},
   2643         {{7822, 7823, kSentinel}},  // NOLINT
   2644         {{7824, 7825, kSentinel}},
   2645         {{7826, 7827, kSentinel}},
   2646         {{7828, 7829, kSentinel}},
   2647         {{7840, 7841, kSentinel}},  // NOLINT
   2648         {{7842, 7843, kSentinel}},
   2649         {{7844, 7845, kSentinel}},
   2650         {{7846, 7847, kSentinel}},
   2651         {{7848, 7849, kSentinel}},  // NOLINT
   2652         {{7850, 7851, kSentinel}},
   2653         {{7852, 7853, kSentinel}},
   2654         {{7854, 7855, kSentinel}},
   2655         {{7856, 7857, kSentinel}},  // NOLINT
   2656         {{7858, 7859, kSentinel}},
   2657         {{7860, 7861, kSentinel}},
   2658         {{7862, 7863, kSentinel}},
   2659         {{7864, 7865, kSentinel}},  // NOLINT
   2660         {{7866, 7867, kSentinel}},
   2661         {{7868, 7869, kSentinel}},
   2662         {{7870, 7871, kSentinel}},
   2663         {{7872, 7873, kSentinel}},  // NOLINT
   2664         {{7874, 7875, kSentinel}},
   2665         {{7876, 7877, kSentinel}},
   2666         {{7878, 7879, kSentinel}},
   2667         {{7880, 7881, kSentinel}},  // NOLINT
   2668         {{7882, 7883, kSentinel}},
   2669         {{7884, 7885, kSentinel}},
   2670         {{7886, 7887, kSentinel}},
   2671         {{7888, 7889, kSentinel}},  // NOLINT
   2672         {{7890, 7891, kSentinel}},
   2673         {{7892, 7893, kSentinel}},
   2674         {{7894, 7895, kSentinel}},
   2675         {{7896, 7897, kSentinel}},  // NOLINT
   2676         {{7898, 7899, kSentinel}},
   2677         {{7900, 7901, kSentinel}},
   2678         {{7902, 7903, kSentinel}},
   2679         {{7904, 7905, kSentinel}},  // NOLINT
   2680         {{7906, 7907, kSentinel}},
   2681         {{7908, 7909, kSentinel}},
   2682         {{7910, 7911, kSentinel}},
   2683         {{7912, 7913, kSentinel}},  // NOLINT
   2684         {{7914, 7915, kSentinel}},
   2685         {{7916, 7917, kSentinel}},
   2686         {{7918, 7919, kSentinel}},
   2687         {{7920, 7921, kSentinel}},  // NOLINT
   2688         {{7922, 7923, kSentinel}},
   2689         {{7924, 7925, kSentinel}},
   2690         {{7926, 7927, kSentinel}},
   2691         {{7928, 7929, kSentinel}},  // NOLINT
   2692         {{7930, 7931, kSentinel}},
   2693         {{7932, 7933, kSentinel}},
   2694         {{7934, 7935, kSentinel}},
   2695         {{7936, 7944, kSentinel}},  // NOLINT
   2696         {{7943, 7951, kSentinel}},
   2697         {{7952, 7960, kSentinel}},
   2698         {{7957, 7965, kSentinel}},
   2699         {{7968, 7976, kSentinel}},  // NOLINT
   2700         {{7975, 7983, kSentinel}},
   2701         {{7984, 7992, kSentinel}},
   2702         {{7991, 7999, kSentinel}},
   2703         {{8000, 8008, kSentinel}},  // NOLINT
   2704         {{8005, 8013, kSentinel}},
   2705         {{8017, 8025, kSentinel}},
   2706         {{8019, 8027, kSentinel}},
   2707         {{8021, 8029, kSentinel}},  // NOLINT
   2708         {{8023, 8031, kSentinel}},
   2709         {{8032, 8040, kSentinel}},
   2710         {{8039, 8047, kSentinel}},
   2711         {{8048, 8122, kSentinel}},  // NOLINT
   2712         {{8049, 8123, kSentinel}},
   2713         {{8050, 8136, kSentinel}},
   2714         {{8053, 8139, kSentinel}},
   2715         {{8054, 8154, kSentinel}},  // NOLINT
   2716         {{8055, 8155, kSentinel}},
   2717         {{8056, 8184, kSentinel}},
   2718         {{8057, 8185, kSentinel}},
   2719         {{8058, 8170, kSentinel}},  // NOLINT
   2720         {{8059, 8171, kSentinel}},
   2721         {{8060, 8186, kSentinel}},
   2722         {{8061, 8187, kSentinel}},
   2723         {{8112, 8120, kSentinel}},  // NOLINT
   2724         {{8113, 8121, kSentinel}},
   2725         {{8144, 8152, kSentinel}},
   2726         {{8145, 8153, kSentinel}},
   2727         {{8160, 8168, kSentinel}},  // NOLINT
   2728         {{8161, 8169, kSentinel}},
   2729         {{8165, 8172, kSentinel}},
   2730         {{kSentinel}}};                                         // NOLINT
   2731 static const uint16_t kEcma262UnCanonicalizeTable0Size = 1005;  // NOLINT
   2732 static const int32_t kEcma262UnCanonicalizeTable0[2010] = {
   2733     1073741889, 1,    90,         5,    1073741921, 1,
   2734     122,        5,    181,        9,    1073742016, 13,
   2735     214,        17,   1073742040, 21,  // NOLINT
   2736     222,        25,   1073742048, 13,   246,        17,
   2737     1073742072, 21,   254,        25,   255,        29,
   2738     256,        33,   257,        33,  // NOLINT
   2739     258,        37,   259,        37,   260,        41,
   2740     261,        41,   262,        45,   263,        45,
   2741     264,        49,   265,        49,  // NOLINT
   2742     266,        53,   267,        53,   268,        57,
   2743     269,        57,   270,        61,   271,        61,
   2744     272,        65,   273,        65,  // NOLINT
   2745     274,        69,   275,        69,   276,        73,
   2746     277,        73,   278,        77,   279,        77,
   2747     280,        81,   281,        81,  // NOLINT
   2748     282,        85,   283,        85,   284,        89,
   2749     285,        89,   286,        93,   287,        93,
   2750     288,        97,   289,        97,  // NOLINT
   2751     290,        101,  291,        101,  292,        105,
   2752     293,        105,  294,        109,  295,        109,
   2753     296,        113,  297,        113,  // NOLINT
   2754     298,        117,  299,        117,  300,        121,
   2755     301,        121,  302,        125,  303,        125,
   2756     306,        129,  307,        129,  // NOLINT
   2757     308,        133,  309,        133,  310,        137,
   2758     311,        137,  313,        141,  314,        141,
   2759     315,        145,  316,        145,  // NOLINT
   2760     317,        149,  318,        149,  319,        153,
   2761     320,        153,  321,        157,  322,        157,
   2762     323,        161,  324,        161,  // NOLINT
   2763     325,        165,  326,        165,  327,        169,
   2764     328,        169,  330,        173,  331,        173,
   2765     332,        177,  333,        177,  // NOLINT
   2766     334,        181,  335,        181,  336,        185,
   2767     337,        185,  338,        189,  339,        189,
   2768     340,        193,  341,        193,  // NOLINT
   2769     342,        197,  343,        197,  344,        201,
   2770     345,        201,  346,        205,  347,        205,
   2771     348,        209,  349,        209,  // NOLINT
   2772     350,        213,  351,        213,  352,        217,
   2773     353,        217,  354,        221,  355,        221,
   2774     356,        225,  357,        225,  // NOLINT
   2775     358,        229,  359,        229,  360,        233,
   2776     361,        233,  362,        237,  363,        237,
   2777     364,        241,  365,        241,  // NOLINT
   2778     366,        245,  367,        245,  368,        249,
   2779     369,        249,  370,        253,  371,        253,
   2780     372,        257,  373,        257,  // NOLINT
   2781     374,        261,  375,        261,  376,        29,
   2782     377,        265,  378,        265,  379,        269,
   2783     380,        269,  381,        273,  // NOLINT
   2784     382,        273,  384,        277,  385,        281,
   2785     386,        285,  387,        285,  388,        289,
   2786     389,        289,  390,        293,  // NOLINT
   2787     391,        297,  392,        297,  1073742217, 301,
   2788     394,        305,  395,        309,  396,        309,
   2789     398,        313,  399,        317,  // NOLINT
   2790     400,        321,  401,        325,  402,        325,
   2791     403,        329,  404,        333,  405,        337,
   2792     406,        341,  407,        345,  // NOLINT
   2793     408,        349,  409,        349,  410,        353,
   2794     412,        357,  413,        361,  414,        365,
   2795     415,        369,  416,        373,  // NOLINT
   2796     417,        373,  418,        377,  419,        377,
   2797     420,        381,  421,        381,  422,        385,
   2798     423,        389,  424,        389,  // NOLINT
   2799     425,        393,  428,        397,  429,        397,
   2800     430,        401,  431,        405,  432,        405,
   2801     1073742257, 409,  434,        413,  // NOLINT
   2802     435,        417,  436,        417,  437,        421,
   2803     438,        421,  439,        425,  440,        429,
   2804     441,        429,  444,        433,  // NOLINT
   2805     445,        433,  447,        437,  452,        441,
   2806     453,        441,  454,        441,  455,        445,
   2807     456,        445,  457,        445,  // NOLINT
   2808     458,        449,  459,        449,  460,        449,
   2809     461,        453,  462,        453,  463,        457,
   2810     464,        457,  465,        461,  // NOLINT
   2811     466,        461,  467,        465,  468,        465,
   2812     469,        469,  470,        469,  471,        473,
   2813     472,        473,  473,        477,  // NOLINT
   2814     474,        477,  475,        481,  476,        481,
   2815     477,        313,  478,        485,  479,        485,
   2816     480,        489,  481,        489,  // NOLINT
   2817     482,        493,  483,        493,  484,        497,
   2818     485,        497,  486,        501,  487,        501,
   2819     488,        505,  489,        505,  // NOLINT
   2820     490,        509,  491,        509,  492,        513,
   2821     493,        513,  494,        517,  495,        517,
   2822     497,        521,  498,        521,  // NOLINT
   2823     499,        521,  500,        525,  501,        525,
   2824     502,        337,  503,        437,  504,        529,
   2825     505,        529,  506,        533,  // NOLINT
   2826     507,        533,  508,        537,  509,        537,
   2827     510,        541,  511,        541,  512,        545,
   2828     513,        545,  514,        549,  // NOLINT
   2829     515,        549,  516,        553,  517,        553,
   2830     518,        557,  519,        557,  520,        561,
   2831     521,        561,  522,        565,  // NOLINT
   2832     523,        565,  524,        569,  525,        569,
   2833     526,        573,  527,        573,  528,        577,
   2834     529,        577,  530,        581,  // NOLINT
   2835     531,        581,  532,        585,  533,        585,
   2836     534,        589,  535,        589,  536,        593,
   2837     537,        593,  538,        597,  // NOLINT
   2838     539,        597,  540,        601,  541,        601,
   2839     542,        605,  543,        605,  544,        365,
   2840     546,        609,  547,        609,  // NOLINT
   2841     548,        613,  549,        613,  550,        617,
   2842     551,        617,  552,        621,  553,        621,
   2843     554,        625,  555,        625,  // NOLINT
   2844     556,        629,  557,        629,  558,        633,
   2845     559,        633,  560,        637,  561,        637,
   2846     562,        641,  563,        641,  // NOLINT
   2847     570,        645,  571,        649,  572,        649,
   2848     573,        353,  574,        653,  1073742399, 657,
   2849     576,        661,  577,        665,  // NOLINT
   2850     578,        665,  579,        277,  580,        669,
   2851     581,        673,  582,        677,  583,        677,
   2852     584,        681,  585,        681,  // NOLINT
   2853     586,        685,  587,        685,  588,        689,
   2854     589,        689,  590,        693,  591,        693,
   2855     592,        697,  593,        701,  // NOLINT
   2856     594,        705,  595,        281,  596,        293,
   2857     1073742422, 301,  599,        305,  601,        317,
   2858     603,        321,  604,        709,  // NOLINT
   2859     608,        329,  609,        713,  611,        333,
   2860     613,        717,  614,        721,  616,        345,
   2861     617,        341,  619,        725,  // NOLINT
   2862     620,        729,  623,        357,  625,        733,
   2863     626,        361,  629,        369,  637,        737,
   2864     640,        385,  643,        393,  // NOLINT
   2865     647,        741,  648,        401,  649,        669,
   2866     1073742474, 409,  651,        413,  652,        673,
   2867     658,        425,  670,        745,  // NOLINT
   2868     837,        749,  880,        753,  881,        753,
   2869     882,        757,  883,        757,  886,        761,
   2870     887,        761,  1073742715, 765,  // NOLINT
   2871     893,        769,  895,        773,  902,        777,
   2872     1073742728, 781,  906,        785,  908,        789,
   2873     1073742734, 793,  911,        797,  // NOLINT
   2874     913,        801,  914,        805,  1073742739, 809,
   2875     916,        813,  917,        817,  1073742742, 821,
   2876     919,        825,  920,        829,  // NOLINT
   2877     921,        749,  922,        833,  923,        837,
   2878     924,        9,    1073742749, 841,  927,        845,
   2879     928,        849,  929,        853,  // NOLINT
   2880     931,        857,  1073742756, 861,  933,        865,
   2881     934,        869,  1073742759, 873,  939,        877,
   2882     940,        777,  1073742765, 781,  // NOLINT
   2883     943,        785,  945,        801,  946,        805,
   2884     1073742771, 809,  948,        813,  949,        817,
   2885     1073742774, 821,  951,        825,  // NOLINT
   2886     952,        829,  953,        749,  954,        833,
   2887     955,        837,  956,        9,    1073742781, 841,
   2888     959,        845,  960,        849,  // NOLINT
   2889     961,        853,  962,        857,  963,        857,
   2890     1073742788, 861,  965,        865,  966,        869,
   2891     1073742791, 873,  971,        877,  // NOLINT
   2892     972,        789,  1073742797, 793,  974,        797,
   2893     975,        881,  976,        805,  977,        829,
   2894     981,        869,  982,        849,  // NOLINT
   2895     983,        881,  984,        885,  985,        885,
   2896     986,        889,  987,        889,  988,        893,
   2897     989,        893,  990,        897,  // NOLINT
   2898     991,        897,  992,        901,  993,        901,
   2899     994,        905,  995,        905,  996,        909,
   2900     997,        909,  998,        913,  // NOLINT
   2901     999,        913,  1000,       917,  1001,       917,
   2902     1002,       921,  1003,       921,  1004,       925,
   2903     1005,       925,  1006,       929,  // NOLINT
   2904     1007,       929,  1008,       833,  1009,       853,
   2905     1010,       933,  1011,       773,  1013,       817,
   2906     1015,       937,  1016,       937,  // NOLINT
   2907     1017,       933,  1018,       941,  1019,       941,
   2908     1073742845, 765,  1023,       769,  1073742848, 945,
   2909     1039,       949,  1073742864, 953,  // NOLINT
   2910     1071,       957,  1073742896, 953,  1103,       957,
   2911     1073742928, 945,  1119,       949,  1120,       961,
   2912     1121,       961,  1122,       965,  // NOLINT
   2913     1123,       965,  1124,       969,  1125,       969,
   2914     1126,       973,  1127,       973,  1128,       977,
   2915     1129,       977,  1130,       981,  // NOLINT
   2916     1131,       981,  1132,       985,  1133,       985,
   2917     1134,       989,  1135,       989,  1136,       993,
   2918     1137,       993,  1138,       997,  // NOLINT
   2919     1139,       997,  1140,       1001, 1141,       1001,
   2920     1142,       1005, 1143,       1005, 1144,       1009,
   2921     1145,       1009, 1146,       1013,  // NOLINT
   2922     1147,       1013, 1148,       1017, 1149,       1017,
   2923     1150,       1021, 1151,       1021, 1152,       1025,
   2924     1153,       1025, 1162,       1029,  // NOLINT
   2925     1163,       1029, 1164,       1033, 1165,       1033,
   2926     1166,       1037, 1167,       1037, 1168,       1041,
   2927     1169,       1041, 1170,       1045,  // NOLINT
   2928     1171,       1045, 1172,       1049, 1173,       1049,
   2929     1174,       1053, 1175,       1053, 1176,       1057,
   2930     1177,       1057, 1178,       1061,  // NOLINT
   2931     1179,       1061, 1180,       1065, 1181,       1065,
   2932     1182,       1069, 1183,       1069, 1184,       1073,
   2933     1185,       1073, 1186,       1077,  // NOLINT
   2934     1187,       1077, 1188,       1081, 1189,       1081,
   2935     1190,       1085, 1191,       1085, 1192,       1089,
   2936     1193,       1089, 1194,       1093,  // NOLINT
   2937     1195,       1093, 1196,       1097, 1197,       1097,
   2938     1198,       1101, 1199,       1101, 1200,       1105,
   2939     1201,       1105, 1202,       1109,  // NOLINT
   2940     1203,       1109, 1204,       1113, 1205,       1113,
   2941     1206,       1117, 1207,       1117, 1208,       1121,
   2942     1209,       1121, 1210,       1125,  // NOLINT
   2943     1211,       1125, 1212,       1129, 1213,       1129,
   2944     1214,       1133, 1215,       1133, 1216,       1137,
   2945     1217,       1141, 1218,       1141,  // NOLINT
   2946     1219,       1145, 1220,       1145, 1221,       1149,
   2947     1222,       1149, 1223,       1153, 1224,       1153,
   2948     1225,       1157, 1226,       1157,  // NOLINT
   2949     1227,       1161, 1228,       1161, 1229,       1165,
   2950     1230,       1165, 1231,       1137, 1232,       1169,
   2951     1233,       1169, 1234,       1173,  // NOLINT
   2952     1235,       1173, 1236,       1177, 1237,       1177,
   2953     1238,       1181, 1239,       1181, 1240,       1185,
   2954     1241,       1185, 1242,       1189,  // NOLINT
   2955     1243,       1189, 1244,       1193, 1245,       1193,
   2956     1246,       1197, 1247,       1197, 1248,       1201,
   2957     1249,       1201, 1250,       1205,  // NOLINT
   2958     1251,       1205, 1252,       1209, 1253,       1209,
   2959     1254,       1213, 1255,       1213, 1256,       1217,
   2960     1257,       1217, 1258,       1221,  // NOLINT
   2961     1259,       1221, 1260,       1225, 1261,       1225,
   2962     1262,       1229, 1263,       1229, 1264,       1233,
   2963     1265,       1233, 1266,       1237,  // NOLINT
   2964     1267,       1237, 1268,       1241, 1269,       1241,
   2965     1270,       1245, 1271,       1245, 1272,       1249,
   2966     1273,       1249, 1274,       1253,  // NOLINT
   2967     1275,       1253, 1276,       1257, 1277,       1257,
   2968     1278,       1261, 1279,       1261, 1280,       1265,
   2969     1281,       1265, 1282,       1269,  // NOLINT
   2970     1283,       1269, 1284,       1273, 1285,       1273,
   2971     1286,       1277, 1287,       1277, 1288,       1281,
   2972     1289,       1281, 1290,       1285,  // NOLINT
   2973     1291,       1285, 1292,       1289, 1293,       1289,
   2974     1294,       1293, 1295,       1293, 1296,       1297,
   2975     1297,       1297, 1298,       1301,  // NOLINT
   2976     1299,       1301, 1300,       1305, 1301,       1305,
   2977     1302,       1309, 1303,       1309, 1304,       1313,
   2978     1305,       1313, 1306,       1317,  // NOLINT
   2979     1307,       1317, 1308,       1321, 1309,       1321,
   2980     1310,       1325, 1311,       1325, 1312,       1329,
   2981     1313,       1329, 1314,       1333,  // NOLINT
   2982     1315,       1333, 1316,       1337, 1317,       1337,
   2983     1318,       1341, 1319,       1341, 1320,       1345,
   2984     1321,       1345, 1322,       1349,  // NOLINT
   2985     1323,       1349, 1324,       1353, 1325,       1353,
   2986     1326,       1357, 1327,       1357, 1073743153, 1361,
   2987     1366,       1365, 1073743201, 1361,  // NOLINT
   2988     1414,       1365, 1073746080, 1369, 4293,       1373,
   2989     4295,       1377, 4301,       1381, 7545,       1385,
   2990     7549,       1389, 7680,       1393,  // NOLINT
   2991     7681,       1393, 7682,       1397, 7683,       1397,
   2992     7684,       1401, 7685,       1401, 7686,       1405,
   2993     7687,       1405, 7688,       1409,  // NOLINT
   2994     7689,       1409, 7690,       1413, 7691,       1413,
   2995     7692,       1417, 7693,       1417, 7694,       1421,
   2996     7695,       1421, 7696,       1425,  // NOLINT
   2997     7697,       1425, 7698,       1429, 7699,       1429,
   2998     7700,       1433, 7701,       1433, 7702,       1437,
   2999     7703,       1437, 7704,       1441,  // NOLINT
   3000     7705,       1441, 7706,       1445, 7707,       1445,
   3001     7708,       1449, 7709,       1449, 7710,       1453,
   3002     7711,       1453, 7712,       1457,  // NOLINT
   3003     7713,       1457, 7714,       1461, 7715,       1461,
   3004     7716,       1465, 7717,       1465, 7718,       1469,
   3005     7719,       1469, 7720,       1473,  // NOLINT
   3006     7721,       1473, 7722,       1477, 7723,       1477,
   3007     7724,       1481, 7725,       1481, 7726,       1485,
   3008     7727,       1485, 7728,       1489,  // NOLINT
   3009     7729,       1489, 7730,       1493, 7731,       1493,
   3010     7732,       1497, 7733,       1497, 7734,       1501,
   3011     7735,       1501, 7736,       1505,  // NOLINT
   3012     7737,       1505, 7738,       1509, 7739,       1509,
   3013     7740,       1513, 7741,       1513, 7742,       1517,
   3014     7743,       1517, 7744,       1521,  // NOLINT
   3015     7745,       1521, 7746,       1525, 7747,       1525,
   3016     7748,       1529, 7749,       1529, 7750,       1533,
   3017     7751,       1533, 7752,       1537,  // NOLINT
   3018     7753,       1537, 7754,       1541, 7755,       1541,
   3019     7756,       1545, 7757,       1545, 7758,       1549,
   3020     7759,       1549, 7760,       1553,  // NOLINT
   3021     7761,       1553, 7762,       1557, 7763,       1557,
   3022     7764,       1561, 7765,       1561, 7766,       1565,
   3023     7767,       1565, 7768,       1569,  // NOLINT
   3024     7769,       1569, 7770,       1573, 7771,       1573,
   3025     7772,       1577, 7773,       1577, 7774,       1581,
   3026     7775,       1581, 7776,       1585,  // NOLINT
   3027     7777,       1585, 7778,       1589, 7779,       1589,
   3028     7780,       1593, 7781,       1593, 7782,       1597,
   3029     7783,       1597, 7784,       1601,  // NOLINT
   3030     7785,       1601, 7786,       1605, 7787,       1605,
   3031     7788,       1609, 7789,       1609, 7790,       1613,
   3032     7791,       1613, 7792,       1617,  // NOLINT
   3033     7793,       1617, 7794,       1621, 7795,       1621,
   3034     7796,       1625, 7797,       1625, 7798,       1629,
   3035     7799,       1629, 7800,       1633,  // NOLINT
   3036     7801,       1633, 7802,       1637, 7803,       1637,
   3037     7804,       1641, 7805,       1641, 7806,       1645,
   3038     7807,       1645, 7808,       1649,  // NOLINT
   3039     7809,       1649, 7810,       1653, 7811,       1653,
   3040     7812,       1657, 7813,       1657, 7814,       1661,
   3041     7815,       1661, 7816,       1665,  // NOLINT
   3042     7817,       1665, 7818,       1669, 7819,       1669,
   3043     7820,       1673, 7821,       1673, 7822,       1677,
   3044     7823,       1677, 7824,       1681,  // NOLINT
   3045     7825,       1681, 7826,       1685, 7827,       1685,
   3046     7828,       1689, 7829,       1689, 7835,       1585,
   3047     7840,       1693, 7841,       1693,  // NOLINT
   3048     7842,       1697, 7843,       1697, 7844,       1701,
   3049     7845,       1701, 7846,       1705, 7847,       1705,
   3050     7848,       1709, 7849,       1709,  // NOLINT
   3051     7850,       1713, 7851,       1713, 7852,       1717,
   3052     7853,       1717, 7854,       1721, 7855,       1721,
   3053     7856,       1725, 7857,       1725,  // NOLINT
   3054     7858,       1729, 7859,       1729, 7860,       1733,
   3055     7861,       1733, 7862,       1737, 7863,       1737,
   3056     7864,       1741, 7865,       1741,  // NOLINT
   3057     7866,       1745, 7867,       1745, 7868,       1749,
   3058     7869,       1749, 7870,       1753, 7871,       1753,
   3059     7872,       1757, 7873,       1757,  // NOLINT
   3060     7874,       1761, 7875,       1761, 7876,       1765,
   3061     7877,       1765, 7878,       1769, 7879,       1769,
   3062     7880,       1773, 7881,       1773,  // NOLINT
   3063     7882,       1777, 7883,       1777, 7884,       1781,
   3064     7885,       1781, 7886,       1785, 7887,       1785,
   3065     7888,       1789, 7889,       1789,  // NOLINT
   3066     7890,       1793, 7891,       1793, 7892,       1797,
   3067     7893,       1797, 7894,       1801, 7895,       1801,
   3068     7896,       1805, 7897,       1805,  // NOLINT
   3069     7898,       1809, 7899,       1809, 7900,       1813,
   3070     7901,       1813, 7902,       1817, 7903,       1817,
   3071     7904,       1821, 7905,       1821,  // NOLINT
   3072     7906,       1825, 7907,       1825, 7908,       1829,
   3073     7909,       1829, 7910,       1833, 7911,       1833,
   3074     7912,       1837, 7913,       1837,  // NOLINT
   3075     7914,       1841, 7915,       1841, 7916,       1845,
   3076     7917,       1845, 7918,       1849, 7919,       1849,
   3077     7920,       1853, 7921,       1853,  // NOLINT
   3078     7922,       1857, 7923,       1857, 7924,       1861,
   3079     7925,       1861, 7926,       1865, 7927,       1865,
   3080     7928,       1869, 7929,       1869,  // NOLINT
   3081     7930,       1873, 7931,       1873, 7932,       1877,
   3082     7933,       1877, 7934,       1881, 7935,       1881,
   3083     1073749760, 1885, 7943,       1889,  // NOLINT
   3084     1073749768, 1885, 7951,       1889, 1073749776, 1893,
   3085     7957,       1897, 1073749784, 1893, 7965,       1897,
   3086     1073749792, 1901, 7975,       1905,  // NOLINT
   3087     1073749800, 1901, 7983,       1905, 1073749808, 1909,
   3088     7991,       1913, 1073749816, 1909, 7999,       1913,
   3089     1073749824, 1917, 8005,       1921,  // NOLINT
   3090     1073749832, 1917, 8013,       1921, 8017,       1925,
   3091     8019,       1929, 8021,       1933, 8023,       1937,
   3092     8025,       1925, 8027,       1929,  // NOLINT
   3093     8029,       1933, 8031,       1937, 1073749856, 1941,
   3094     8039,       1945, 1073749864, 1941, 8047,       1945,
   3095     1073749872, 1949, 8049,       1953,  // NOLINT
   3096     1073749874, 1957, 8053,       1961, 1073749878, 1965,
   3097     8055,       1969, 1073749880, 1973, 8057,       1977,
   3098     1073749882, 1981, 8059,       1985,  // NOLINT
   3099     1073749884, 1989, 8061,       1993, 1073749936, 1997,
   3100     8113,       2001, 1073749944, 1997, 8121,       2001,
   3101     1073749946, 1949, 8123,       1953,  // NOLINT
   3102     8126,       749,  1073749960, 1957, 8139,       1961,
   3103     1073749968, 2005, 8145,       2009, 1073749976, 2005,
   3104     8153,       2009, 1073749978, 1965,  // NOLINT
   3105     8155,       1969, 1073749984, 2013, 8161,       2017,
   3106     8165,       2021, 1073749992, 2013, 8169,       2017,
   3107     1073749994, 1981, 8171,       1985,  // NOLINT
   3108     8172,       2021, 1073750008, 1973, 8185,       1977,
   3109     1073750010, 1989, 8187,       1993};                              // NOLINT
   3110 static const uint16_t kEcma262UnCanonicalizeMultiStrings0Size = 507;  // NOLINT
   3111 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings1[83] = {  // NOLINT
   3112   {{8498, 8526}}, {{8544, 8560}}, {{8559, 8575}}, {{8579, 8580}},  // NOLINT
   3113   {{9398, 9424}}, {{9423, 9449}}, {{11264, 11312}}, {{11310, 11358}},  // NOLINT
   3114   {{11360, 11361}}, {{619, 11362}}, {{7549, 11363}}, {{637, 11364}},  // NOLINT
   3115   {{570, 11365}}, {{574, 11366}}, {{11367, 11368}}, {{11369, 11370}},  // NOLINT
   3116   {{11371, 11372}}, {{593, 11373}}, {{625, 11374}}, {{592, 11375}},  // NOLINT
   3117   {{594, 11376}}, {{11378, 11379}}, {{11381, 11382}}, {{575, 11390}},  // NOLINT
   3118   {{576, 11391}}, {{11392, 11393}}, {{11394, 11395}}, {{11396, 11397}},  // NOLINT
   3119   {{11398, 11399}}, {{11400, 11401}}, {{11402, 11403}}, {{11404, 11405}},  // NOLINT
   3120   {{11406, 11407}}, {{11408, 11409}}, {{11410, 11411}}, {{11412, 11413}},  // NOLINT
   3121   {{11414, 11415}}, {{11416, 11417}}, {{11418, 11419}}, {{11420, 11421}},  // NOLINT
   3122   {{11422, 11423}}, {{11424, 11425}}, {{11426, 11427}}, {{11428, 11429}},  // NOLINT
   3123   {{11430, 11431}}, {{11432, 11433}}, {{11434, 11435}}, {{11436, 11437}},  // NOLINT
   3124   {{11438, 11439}}, {{11440, 11441}}, {{11442, 11443}}, {{11444, 11445}},  // NOLINT
   3125   {{11446, 11447}}, {{11448, 11449}}, {{11450, 11451}}, {{11452, 11453}},  // NOLINT
   3126   {{11454, 11455}}, {{11456, 11457}}, {{11458, 11459}}, {{11460, 11461}},  // NOLINT
   3127   {{11462, 11463}}, {{11464, 11465}}, {{11466, 11467}}, {{11468, 11469}},  // NOLINT
   3128   {{11470, 11471}}, {{11472, 11473}}, {{11474, 11475}}, {{11476, 11477}},  // NOLINT
   3129   {{11478, 11479}}, {{11480, 11481}}, {{11482, 11483}}, {{11484, 11485}},  // NOLINT
   3130   {{11486, 11487}}, {{11488, 11489}}, {{11490, 11491}}, {{11499, 11500}},  // NOLINT
   3131   {{11501, 11502}}, {{11506, 11507}}, {{4256, 11520}}, {{4293, 11557}},  // NOLINT
   3132   {{4295, 11559}}, {{4301, 11565}}, {{kSentinel}} }; // NOLINT
   3133 static const uint16_t kEcma262UnCanonicalizeTable1Size = 149;  // NOLINT
   3134 static const int32_t kEcma262UnCanonicalizeTable1[298] = {
   3135   306, 1, 334, 1, 1073742176, 5, 367, 9, 1073742192, 5, 383, 9, 387, 13, 388, 13,  // NOLINT
   3136   1073743030, 17, 1231, 21, 1073743056, 17, 1257, 21, 1073744896, 25, 3118, 29, 1073744944, 25, 3166, 29,  // NOLINT
   3137   3168, 33, 3169, 33, 3170, 37, 3171, 41, 3172, 45, 3173, 49, 3174, 53, 3175, 57,  // NOLINT
   3138   3176, 57, 3177, 61, 3178, 61, 3179, 65, 3180, 65, 3181, 69, 3182, 73, 3183, 77,  // NOLINT
   3139   3184, 81, 3186, 85, 3187, 85, 3189, 89, 3190, 89, 1073745022, 93, 3199, 97, 3200, 101,  // NOLINT
   3140   3201, 101, 3202, 105, 3203, 105, 3204, 109, 3205, 109, 3206, 113, 3207, 113, 3208, 117,  // NOLINT
   3141   3209, 117, 3210, 121, 3211, 121, 3212, 125, 3213, 125, 3214, 129, 3215, 129, 3216, 133,  // NOLINT
   3142   3217, 133, 3218, 137, 3219, 137, 3220, 141, 3221, 141, 3222, 145, 3223, 145, 3224, 149,  // NOLINT
   3143   3225, 149, 3226, 153, 3227, 153, 3228, 157, 3229, 157, 3230, 161, 3231, 161, 3232, 165,  // NOLINT
   3144   3233, 165, 3234, 169, 3235, 169, 3236, 173, 3237, 173, 3238, 177, 3239, 177, 3240, 181,  // NOLINT
   3145   3241, 181, 3242, 185, 3243, 185, 3244, 189, 3245, 189, 3246, 193, 3247, 193, 3248, 197,  // NOLINT
   3146   3249, 197, 3250, 201, 3251, 201, 3252, 205, 3253, 205, 3254, 209, 3255, 209, 3256, 213,  // NOLINT
   3147   3257, 213, 3258, 217, 3259, 217, 3260, 221, 3261, 221, 3262, 225, 3263, 225, 3264, 229,  // NOLINT
   3148   3265, 229, 3266, 233, 3267, 233, 3268, 237, 3269, 237, 3270, 241, 3271, 241, 3272, 245,  // NOLINT
   3149   3273, 245, 3274, 249, 3275, 249, 3276, 253, 3277, 253, 3278, 257, 3279, 257, 3280, 261,  // NOLINT
   3150   3281, 261, 3282, 265, 3283, 265, 3284, 269, 3285, 269, 3286, 273, 3287, 273, 3288, 277,  // NOLINT
   3151   3289, 277, 3290, 281, 3291, 281, 3292, 285, 3293, 285, 3294, 289, 3295, 289, 3296, 293,  // NOLINT
   3152   3297, 293, 3298, 297, 3299, 297, 3307, 301, 3308, 301, 3309, 305, 3310, 305, 3314, 309,  // NOLINT
   3153   3315, 309, 1073745152, 313, 3365, 317, 3367, 321, 3373, 325 };  // NOLINT
   3154 static const uint16_t kEcma262UnCanonicalizeMultiStrings1Size = 83;  // NOLINT
   3155 static const MultiCharacterSpecialCase<2>
   3156     kEcma262UnCanonicalizeMultiStrings5[104] = {  // NOLINT
   3157         {{42560, 42561}},
   3158         {{42562, 42563}},
   3159         {{42564, 42565}},
   3160         {{42566, 42567}},  // NOLINT
   3161         {{42568, 42569}},
   3162         {{42570, 42571}},
   3163         {{42572, 42573}},
   3164         {{42574, 42575}},  // NOLINT
   3165         {{42576, 42577}},
   3166         {{42578, 42579}},
   3167         {{42580, 42581}},
   3168         {{42582, 42583}},  // NOLINT
   3169         {{42584, 42585}},
   3170         {{42586, 42587}},
   3171         {{42588, 42589}},
   3172         {{42590, 42591}},  // NOLINT
   3173         {{42592, 42593}},
   3174         {{42594, 42595}},
   3175         {{42596, 42597}},
   3176         {{42598, 42599}},  // NOLINT
   3177         {{42600, 42601}},
   3178         {{42602, 42603}},
   3179         {{42604, 42605}},
   3180         {{42624, 42625}},  // NOLINT
   3181         {{42626, 42627}},
   3182         {{42628, 42629}},
   3183         {{42630, 42631}},
   3184         {{42632, 42633}},  // NOLINT
   3185         {{42634, 42635}},
   3186         {{42636, 42637}},
   3187         {{42638, 42639}},
   3188         {{42640, 42641}},  // NOLINT
   3189         {{42642, 42643}},
   3190         {{42644, 42645}},
   3191         {{42646, 42647}},
   3192         {{42648, 42649}},  // NOLINT
   3193         {{42650, 42651}},
   3194         {{42786, 42787}},
   3195         {{42788, 42789}},
   3196         {{42790, 42791}},  // NOLINT
   3197         {{42792, 42793}},
   3198         {{42794, 42795}},
   3199         {{42796, 42797}},
   3200         {{42798, 42799}},  // NOLINT
   3201         {{42802, 42803}},
   3202         {{42804, 42805}},
   3203         {{42806, 42807}},
   3204         {{42808, 42809}},  // NOLINT
   3205         {{42810, 42811}},
   3206         {{42812, 42813}},
   3207         {{42814, 42815}},
   3208         {{42816, 42817}},  // NOLINT
   3209         {{42818, 42819}},
   3210         {{42820, 42821}},
   3211         {{42822, 42823}},
   3212         {{42824, 42825}},  // NOLINT
   3213         {{42826, 42827}},
   3214         {{42828, 42829}},
   3215         {{42830, 42831}},
   3216         {{42832, 42833}},  // NOLINT
   3217         {{42834, 42835}},
   3218         {{42836, 42837}},
   3219         {{42838, 42839}},
   3220         {{42840, 42841}},  // NOLINT
   3221         {{42842, 42843}},
   3222         {{42844, 42845}},
   3223         {{42846, 42847}},
   3224         {{42848, 42849}},  // NOLINT
   3225         {{42850, 42851}},
   3226         {{42852, 42853}},
   3227         {{42854, 42855}},
   3228         {{42856, 42857}},  // NOLINT
   3229         {{42858, 42859}},
   3230         {{42860, 42861}},
   3231         {{42862, 42863}},
   3232         {{42873, 42874}},  // NOLINT
   3233         {{42875, 42876}},
   3234         {{7545, 42877}},
   3235         {{42878, 42879}},
   3236         {{42880, 42881}},  // NOLINT
   3237         {{42882, 42883}},
   3238         {{42884, 42885}},
   3239         {{42886, 42887}},
   3240         {{42891, 42892}},  // NOLINT
   3241         {{613, 42893}},
   3242         {{42896, 42897}},
   3243         {{42898, 42899}},
   3244         {{42902, 42903}},  // NOLINT
   3245         {{42904, 42905}},
   3246         {{42906, 42907}},
   3247         {{42908, 42909}},
   3248         {{42910, 42911}},  // NOLINT
   3249         {{42912, 42913}},
   3250         {{42914, 42915}},
   3251         {{42916, 42917}},
   3252         {{42918, 42919}},  // NOLINT
   3253         {{42920, 42921}},
   3254         {{614, 42922}},
   3255         {{604, 42923}},
   3256         {{609, 42924}},  // NOLINT
   3257         {{620, 42925}},
   3258         {{670, 42928}},
   3259         {{647, 42929}},
   3260         {{kSentinel}}};                                        // NOLINT
   3261 static const uint16_t kEcma262UnCanonicalizeTable5Size = 198;  // NOLINT
   3262 static const int32_t kEcma262UnCanonicalizeTable5
   3263     [396] = {1600, 1,   1601, 1,   1602, 5,   1603, 5,
   3264              1604, 9,   1605, 9,   1606, 13,  1607, 13,  // NOLINT
   3265              1608, 17,  1609, 17,  1610, 21,  1611, 21,
   3266              1612, 25,  1613, 25,  1614, 29,  1615, 29,  // NOLINT
   3267              1616, 33,  1617, 33,  1618, 37,  1619, 37,
   3268              1620, 41,  1621, 41,  1622, 45,  1623, 45,  // NOLINT
   3269              1624, 49,  1625, 49,  1626, 53,  1627, 53,
   3270              1628, 57,  1629, 57,  1630, 61,  1631, 61,  // NOLINT
   3271              1632, 65,  1633, 65,  1634, 69,  1635, 69,
   3272              1636, 73,  1637, 73,  1638, 77,  1639, 77,  // NOLINT
   3273              1640, 81,  1641, 81,  1642, 85,  1643, 85,
   3274              1644, 89,  1645, 89,  1664, 93,  1665, 93,  // NOLINT
   3275              1666, 97,  1667, 97,  1668, 101, 1669, 101,
   3276              1670, 105, 1671, 105, 1672, 109, 1673, 109,  // NOLINT
   3277              1674, 113, 1675, 113, 1676, 117, 1677, 117,
   3278              1678, 121, 1679, 121, 1680, 125, 1681, 125,  // NOLINT
   3279              1682, 129, 1683, 129, 1684, 133, 1685, 133,
   3280              1686, 137, 1687, 137, 1688, 141, 1689, 141,  // NOLINT
   3281              1690, 145, 1691, 145, 1826, 149, 1827, 149,
   3282              1828, 153, 1829, 153, 1830, 157, 1831, 157,  // NOLINT
   3283              1832, 161, 1833, 161, 1834, 165, 1835, 165,
   3284              1836, 169, 1837, 169, 1838, 173, 1839, 173,  // NOLINT
   3285              1842, 177, 1843, 177, 1844, 181, 1845, 181,
   3286              1846, 185, 1847, 185, 1848, 189, 1849, 189,  // NOLINT
   3287              1850, 193, 1851, 193, 1852, 197, 1853, 197,
   3288              1854, 201, 1855, 201, 1856, 205, 1857, 205,  // NOLINT
   3289              1858, 209, 1859, 209, 1860, 213, 1861, 213,
   3290              1862, 217, 1863, 217, 1864, 221, 1865, 221,  // NOLINT
   3291              1866, 225, 1867, 225, 1868, 229, 1869, 229,
   3292              1870, 233, 1871, 233, 1872, 237, 1873, 237,  // NOLINT
   3293              1874, 241, 1875, 241, 1876, 245, 1877, 245,
   3294              1878, 249, 1879, 249, 1880, 253, 1881, 253,  // NOLINT
   3295              1882, 257, 1883, 257, 1884, 261, 1885, 261,
   3296              1886, 265, 1887, 265, 1888, 269, 1889, 269,  // NOLINT
   3297              1890, 273, 1891, 273, 1892, 277, 1893, 277,
   3298              1894, 281, 1895, 281, 1896, 285, 1897, 285,  // NOLINT
   3299              1898, 289, 1899, 289, 1900, 293, 1901, 293,
   3300              1902, 297, 1903, 297, 1913, 301, 1914, 301,  // NOLINT
   3301              1915, 305, 1916, 305, 1917, 309, 1918, 313,
   3302              1919, 313, 1920, 317, 1921, 317, 1922, 321,  // NOLINT
   3303              1923, 321, 1924, 325, 1925, 325, 1926, 329,
   3304              1927, 329, 1931, 333, 1932, 333, 1933, 337,  // NOLINT
   3305              1936, 341, 1937, 341, 1938, 345, 1939, 345,
   3306              1942, 349, 1943, 349, 1944, 353, 1945, 353,  // NOLINT
   3307              1946, 357, 1947, 357, 1948, 361, 1949, 361,
   3308              1950, 365, 1951, 365, 1952, 369, 1953, 369,  // NOLINT
   3309              1954, 373, 1955, 373, 1956, 377, 1957, 377,
   3310              1958, 381, 1959, 381, 1960, 385, 1961, 385,  // NOLINT
   3311              1962, 389, 1963, 393, 1964, 397, 1965, 401,
   3312              1968, 405, 1969, 409};                                   // NOLINT
   3313 static const uint16_t kEcma262UnCanonicalizeMultiStrings5Size = 104;  // NOLINT
   3314 static const MultiCharacterSpecialCase<2> kEcma262UnCanonicalizeMultiStrings7[3] = {  // NOLINT
   3315   {{65313, 65345}}, {{65338, 65370}}, {{kSentinel}} }; // NOLINT
   3316 static const uint16_t kEcma262UnCanonicalizeTable7Size = 4;  // NOLINT
   3317 static const int32_t kEcma262UnCanonicalizeTable7[8] = {
   3318   1073749793, 1, 7994, 5, 1073749825, 1, 8026, 5 };  // NOLINT
   3319 static const uint16_t kEcma262UnCanonicalizeMultiStrings7Size = 3;  // NOLINT
   3320 int Ecma262UnCanonicalize::Convert(uchar c,
   3321                       uchar n,
   3322                       uchar* result,
   3323                       bool* allow_caching_ptr) {
   3324   int chunk_index = c >> 13;
   3325   switch (chunk_index) {
   3326     case 0: return LookupMapping<true>(kEcma262UnCanonicalizeTable0,
   3327                                            kEcma262UnCanonicalizeTable0Size,
   3328                                            kEcma262UnCanonicalizeMultiStrings0,
   3329                                            c,
   3330                                            n,
   3331                                            result,
   3332                                            allow_caching_ptr);
   3333     case 1: return LookupMapping<true>(kEcma262UnCanonicalizeTable1,
   3334                                            kEcma262UnCanonicalizeTable1Size,
   3335                                            kEcma262UnCanonicalizeMultiStrings1,
   3336                                            c,
   3337                                            n,
   3338                                            result,
   3339                                            allow_caching_ptr);
   3340     case 5: return LookupMapping<true>(kEcma262UnCanonicalizeTable5,
   3341                                            kEcma262UnCanonicalizeTable5Size,
   3342                                            kEcma262UnCanonicalizeMultiStrings5,
   3343                                            c,
   3344                                            n,
   3345                                            result,
   3346                                            allow_caching_ptr);
   3347     case 7: return LookupMapping<true>(kEcma262UnCanonicalizeTable7,
   3348                                            kEcma262UnCanonicalizeTable7Size,
   3349                                            kEcma262UnCanonicalizeMultiStrings7,
   3350                                            c,
   3351                                            n,
   3352                                            result,
   3353                                            allow_caching_ptr);
   3354     default: return 0;
   3355   }
   3356 }
   3357 
   3358 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings0[1] = {  // NOLINT
   3359   {{kSentinel}} }; // NOLINT
   3360 static const uint16_t kCanonicalizationRangeTable0Size = 70;  // NOLINT
   3361 static const int32_t kCanonicalizationRangeTable0[140] = {
   3362   1073741889, 100, 90, 0, 1073741921, 100, 122, 0, 1073742016, 88, 214, 0, 1073742040, 24, 222, 0,  // NOLINT
   3363   1073742048, 88, 246, 0, 1073742072, 24, 254, 0, 1073742715, 8, 893, 0, 1073742728, 8, 906, 0,  // NOLINT
   3364   1073742749, 8, 927, 0, 1073742759, 16, 939, 0, 1073742765, 8, 943, 0, 1073742781, 8, 959, 0,  // NOLINT
   3365   1073742791, 16, 971, 0, 1073742845, 8, 1023, 0, 1073742848, 60, 1039, 0, 1073742864, 124, 1071, 0,  // NOLINT
   3366   1073742896, 124, 1103, 0, 1073742928, 60, 1119, 0, 1073743153, 148, 1366, 0, 1073743201, 148, 1414, 0,  // NOLINT
   3367   1073746080, 148, 4293, 0, 1073749760, 28, 7943, 0, 1073749768, 28, 7951, 0, 1073749776, 20, 7957, 0,  // NOLINT
   3368   1073749784, 20, 7965, 0, 1073749792, 28, 7975, 0, 1073749800, 28, 7983, 0, 1073749808, 28, 7991, 0,  // NOLINT
   3369   1073749816, 28, 7999, 0, 1073749824, 20, 8005, 0, 1073749832, 20, 8013, 0, 1073749856, 28, 8039, 0,  // NOLINT
   3370   1073749864, 28, 8047, 0, 1073749874, 12, 8053, 0, 1073749960, 12, 8139, 0 };  // NOLINT
   3371 static const uint16_t kCanonicalizationRangeMultiStrings0Size = 1;  // NOLINT
   3372 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings1[1] = {  // NOLINT
   3373   {{kSentinel}} }; // NOLINT
   3374 static const uint16_t kCanonicalizationRangeTable1Size = 14;  // NOLINT
   3375 static const int32_t kCanonicalizationRangeTable1[28] = {
   3376   1073742176, 60, 367, 0, 1073742192, 60, 383, 0, 1073743030, 100, 1231, 0, 1073743056, 100, 1257, 0,  // NOLINT
   3377   1073744896, 184, 3118, 0, 1073744944, 184, 3166, 0, 1073745152, 148, 3365, 0 };  // NOLINT
   3378 static const uint16_t kCanonicalizationRangeMultiStrings1Size = 1;  // NOLINT
   3379 static const MultiCharacterSpecialCase<1> kCanonicalizationRangeMultiStrings7[1] = {  // NOLINT
   3380   {{kSentinel}} }; // NOLINT
   3381 static const uint16_t kCanonicalizationRangeTable7Size = 4;  // NOLINT
   3382 static const int32_t kCanonicalizationRangeTable7[8] = {
   3383   1073749793, 100, 7994, 0, 1073749825, 100, 8026, 0 };  // NOLINT
   3384 static const uint16_t kCanonicalizationRangeMultiStrings7Size = 1;  // NOLINT
   3385 int CanonicalizationRange::Convert(uchar c,
   3386                       uchar n,
   3387                       uchar* result,
   3388                       bool* allow_caching_ptr) {
   3389   int chunk_index = c >> 13;
   3390   switch (chunk_index) {
   3391     case 0: return LookupMapping<false>(kCanonicalizationRangeTable0,
   3392                                            kCanonicalizationRangeTable0Size,
   3393                                            kCanonicalizationRangeMultiStrings0,
   3394                                            c,
   3395                                            n,
   3396                                            result,
   3397                                            allow_caching_ptr);
   3398     case 1: return LookupMapping<false>(kCanonicalizationRangeTable1,
   3399                                            kCanonicalizationRangeTable1Size,
   3400                                            kCanonicalizationRangeMultiStrings1,
   3401                                            c,
   3402                                            n,
   3403                                            result,
   3404                                            allow_caching_ptr);
   3405     case 7: return LookupMapping<false>(kCanonicalizationRangeTable7,
   3406                                            kCanonicalizationRangeTable7Size,
   3407                                            kCanonicalizationRangeMultiStrings7,
   3408                                            c,
   3409                                            n,
   3410                                            result,
   3411                                            allow_caching_ptr);
   3412     default: return 0;
   3413   }
   3414 }
   3415 
   3416 
   3417 const uchar UnicodeData::kMaxCodePoint = 65533;
   3418 
   3419 int UnicodeData::GetByteCount() {
   3420   return kUppercaseTable0Size * sizeof(int32_t)         // NOLINT
   3421          + kUppercaseTable1Size * sizeof(int32_t)       // NOLINT
   3422          + kUppercaseTable5Size * sizeof(int32_t)       // NOLINT
   3423          + kUppercaseTable7Size * sizeof(int32_t)       // NOLINT
   3424          + kLowercaseTable0Size * sizeof(int32_t)       // NOLINT
   3425          + kLowercaseTable1Size * sizeof(int32_t)       // NOLINT
   3426          + kLowercaseTable5Size * sizeof(int32_t)       // NOLINT
   3427          + kLowercaseTable7Size * sizeof(int32_t)       // NOLINT
   3428          + kLetterTable0Size * sizeof(int32_t)          // NOLINT
   3429          + kLetterTable1Size * sizeof(int32_t)          // NOLINT
   3430          + kLetterTable2Size * sizeof(int32_t)          // NOLINT
   3431          + kLetterTable3Size * sizeof(int32_t)          // NOLINT
   3432          + kLetterTable4Size * sizeof(int32_t)          // NOLINT
   3433          + kLetterTable5Size * sizeof(int32_t)          // NOLINT
   3434          + kLetterTable6Size * sizeof(int32_t)          // NOLINT
   3435          + kLetterTable7Size * sizeof(int32_t)          // NOLINT
   3436          + kID_StartTable0Size * sizeof(int32_t)        // NOLINT
   3437          + kID_StartTable1Size * sizeof(int32_t)        // NOLINT
   3438          + kID_StartTable2Size * sizeof(int32_t)        // NOLINT
   3439          + kID_StartTable3Size * sizeof(int32_t)        // NOLINT
   3440          + kID_StartTable4Size * sizeof(int32_t)        // NOLINT
   3441          + kID_StartTable5Size * sizeof(int32_t)        // NOLINT
   3442          + kID_StartTable6Size * sizeof(int32_t)        // NOLINT
   3443          + kID_StartTable7Size * sizeof(int32_t)        // NOLINT
   3444          + kID_ContinueTable0Size * sizeof(int32_t)     // NOLINT
   3445          + kID_ContinueTable1Size * sizeof(int32_t)     // NOLINT
   3446          + kID_ContinueTable5Size * sizeof(int32_t)     // NOLINT
   3447          + kID_ContinueTable7Size * sizeof(int32_t)     // NOLINT
   3448          + kWhiteSpaceTable0Size * sizeof(int32_t)      // NOLINT
   3449          + kWhiteSpaceTable1Size * sizeof(int32_t)      // NOLINT
   3450          + kWhiteSpaceTable7Size * sizeof(int32_t)      // NOLINT
   3451          + kLineTerminatorTable0Size * sizeof(int32_t)  // NOLINT
   3452          + kLineTerminatorTable1Size * sizeof(int32_t)  // NOLINT
   3453          +
   3454          kToLowercaseMultiStrings0Size *
   3455              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3456          +
   3457          kToLowercaseMultiStrings1Size *
   3458              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3459          +
   3460          kToLowercaseMultiStrings5Size *
   3461              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3462          +
   3463          kToLowercaseMultiStrings7Size *
   3464              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3465          +
   3466          kToUppercaseMultiStrings0Size *
   3467              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
   3468          +
   3469          kToUppercaseMultiStrings1Size *
   3470              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3471          +
   3472          kToUppercaseMultiStrings5Size *
   3473              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3474          +
   3475          kToUppercaseMultiStrings7Size *
   3476              sizeof(MultiCharacterSpecialCase<3>)  // NOLINT
   3477          +
   3478          kEcma262CanonicalizeMultiStrings0Size *
   3479              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3480          +
   3481          kEcma262CanonicalizeMultiStrings1Size *
   3482              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3483          +
   3484          kEcma262CanonicalizeMultiStrings5Size *
   3485              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3486          +
   3487          kEcma262CanonicalizeMultiStrings7Size *
   3488              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3489          +
   3490          kEcma262UnCanonicalizeMultiStrings0Size *
   3491              sizeof(MultiCharacterSpecialCase<4>)  // NOLINT
   3492          +
   3493          kEcma262UnCanonicalizeMultiStrings1Size *
   3494              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3495          +
   3496          kEcma262UnCanonicalizeMultiStrings5Size *
   3497              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3498          +
   3499          kEcma262UnCanonicalizeMultiStrings7Size *
   3500              sizeof(MultiCharacterSpecialCase<2>)  // NOLINT
   3501          +
   3502          kCanonicalizationRangeMultiStrings0Size *
   3503              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3504          +
   3505          kCanonicalizationRangeMultiStrings1Size *
   3506              sizeof(MultiCharacterSpecialCase<1>)  // NOLINT
   3507          +
   3508          kCanonicalizationRangeMultiStrings7Size *
   3509              sizeof(MultiCharacterSpecialCase<1>);  // NOLINT
   3510 }
   3511 
   3512 }  // namespace unibrow
   3513