Edit

kc3-lang/angle/src/compiler/translator/ImmutableString_autogen.cpp

Branch :

  • Show log

    Commit

  • Author : Mohan Maiya
    Date : 2020-12-14 14:11:11
    Hash : 8f9e17d5
    Message : Add EXT_clip_cull_distance extension autogen code Addition of shader autogen code for EXT_clip_cull_distance extension. Bug: angleproject:5458 Change-Id: I299528957c0e747fd84987c420588c314f54aae0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2590989 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/compiler/translator/ImmutableString_autogen.cpp
  • // GENERATED FILE - DO NOT EDIT.
    // Generated by gen_builtin_symbols.py using data from builtin_variables.json and
    // builtin_function_declarations.txt.
    //
    // Copyright 2020 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // ImmutableString_autogen.cpp: Wrapper for static or pool allocated char arrays, that are
    // guaranteed to be valid and unchanged for the duration of the compilation. Implements
    // mangledNameHash using perfect hash function from gen_builtin_symbols.py
    
    #include "compiler/translator/ImmutableString.h"
    
    std::ostream &operator<<(std::ostream &os, const sh::ImmutableString &str)
    {
        return os.write(str.data(), str.length());
    }
    
    #if defined(_MSC_VER)
    #    pragma warning(disable : 4309)  // truncation of constant value
    #endif
    
    namespace
    {
    
    constexpr int mangledkT1[] = {3739, 1631, 2789, 3000, 1313, 1833, 2647, 2265, 4243, 3275,
                                  388,  3099, 2680, 2382, 1469, 3517, 4113, 1467, 2188, 3241,
                                  3443, 3499, 3370, 4109, 1589, 936,  1009, 2094, 714,  2729,
                                  1131, 512,  2199, 2280, 3218, 4074, 983,  595,  997,  3186};
    constexpr int mangledkT2[] = {1278, 2599, 3960, 322,  3743, 3174, 3743, 4020, 3366, 3013,
                                  428,  2584, 153,  1976, 382,  2752, 147,  3332, 3015, 381,
                                  593,  4320, 2140, 2563, 411,  3650, 4300, 3733, 2052, 570,
                                  3398, 1746, 2534, 14,   1119, 2620, 140,  2374, 4039, 744};
    constexpr int mangledkG[]  = {
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1753, 0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    377,  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    3702,
        0,    0,    0,    3743, 0,    1142, 4406, 0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    403,  0,    486,  0,
        0,    0,    0,    0,    0,    4057, 4358, 0,    0,    0,    2120, 0,    0,    0,    0,    0,
        0,    1158, 2155, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    542,  0,    0,    0,    469,  0,    0,    0,
        0,    0,    0,    0,    0,    841,  3728, 0,    0,    0,    3555, 0,    0,    4167, 0,    0,
        0,    0,    0,    0,    0,    0,    606,  0,    0,    3503, 1148, 0,    2175, 0,    0,    0,
        0,    4395, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        4044, 1358, 173,  0,    0,    0,    0,    0,    0,    2895, 0,    0,    37,   1119, 768,  0,
        0,    0,    3246, 0,    0,    0,    0,    3146, 164,  0,    0,    1169, 877,  1436, 0,    4032,
        919,  0,    0,    0,    0,    0,    0,    0,    286,  0,    0,    0,    0,    0,    0,    4398,
        1858, 4128, 0,    0,    0,    0,    0,    0,    4194, 0,    1143, 0,    0,    0,    580,  0,
        0,    0,    0,    0,    0,    3421, 0,    0,    0,    0,    0,    0,    130,  1535, 3354, 0,
        0,    0,    0,    0,    0,    0,    1738, 0,    3458, 0,    0,    0,    1370, 0,    2618, 0,
        1315, 269,  0,    0,    0,    4394, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        4021, 0,    0,    0,    1722, 0,    2988, 0,    4339, 0,    0,    1113, 0,    0,    0,    0,
        0,    0,    2554, 0,    0,    4468, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    3714, 1688, 0,    0,    3841, 3690, 0,    0,    0,    1154, 0,    0,    0,    0,    0,
        0,    0,    2734, 0,    368,  1579, 0,    174,  0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    1085, 186,  0,    0,    0,    0,    0,    0,    0,    662,  0,    0,    0,
        0,    600,  2260, 0,    640,  0,    0,    0,    0,    0,    0,    0,    2698, 0,    0,    0,
        0,    4327, 0,    0,    0,    0,    0,    0,    0,    207,  0,    4125, 0,    0,    0,    2080,
        0,    0,    2581, 1845, 0,    817,  2195, 0,    0,    2013, 0,    0,    0,    3529, 0,    0,
        0,    0,    0,    0,    726,  647,  0,    2765, 1247, 0,    0,    3232, 0,    0,    0,    0,
        0,    0,    0,    0,    0,    3289, 0,    0,    4236, 0,    0,    0,    0,    0,    0,    0,
        0,    0,    843,  0,    0,    0,    0,    0,    0,    652,  0,    0,    1669, 0,    0,    370,
        4237, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    4517, 2240,
        0,    0,    0,    0,    0,    0,    0,    740,  0,    2759, 3799, 4366, 0,    0,    0,    0,
        0,    0,    0,    3912, 479,  0,    0,    0,    0,    0,    4518, 0,    0,    0,    2717, 0,
        692,  0,    0,    0,    570,  0,    3639, 0,    0,    3926, 0,    0,    0,    0,    0,    0,
        2397, 1547, 1232, 0,    0,    2937, 1518, 0,    0,    0,    1222, 0,    2813, 0,    0,    2324,
        0,    0,    0,    0,    0,    0,    0,    860,  0,    3950, 0,    0,    2826, 0,    0,    0,
        0,    0,    0,    925,  0,    0,    0,    1598, 0,    0,    0,    0,    227,  0,    0,    0,
        0,    3468, 0,    0,    0,    0,    120,  1162, 2435, 387,  0,    0,    0,    0,    0,    0,
        0,    308,  0,    0,    0,    0,    0,    2650, 0,    0,    3881, 0,    4091, 0,    0,    501,
        0,    0,    3368, 0,    0,    0,    4093, 0,    0,    0,    0,    0,    0,    934,  0,    0,
        0,    0,    2157, 0,    1082, 0,    0,    0,    1021, 3875, 0,    253,  0,    0,    140,  0,
        0,    1903, 0,    0,    0,    0,    2137, 1473, 0,    0,    461,  0,    0,    0,    3575, 0,
        0,    958,  0,    0,    789,  0,    0,    3195, 0,    0,    0,    3853, 0,    2074, 0,    0,
        0,    1681, 0,    0,    0,    1623, 982,  0,    0,    4204, 0,    0,    0,    0,    0,    0,
        926,  4075, 1657, 0,    0,    1534, 0,    0,    742,  3347, 0,    2568, 0,    0,    0,    0,
        3836, 0,    718,  3974, 3474, 0,    3682, 3367, 1057, 0,    0,    0,    0,    0,    567,  0,
        0,    753,  0,    1333, 0,    0,    4057, 0,    0,    0,    0,    291,  4398, 0,    0,    3324,
        1344, 0,    0,    0,    1107, 0,    0,    0,    3756, 2315, 3176, 2972, 0,    0,    0,    0,
        0,    1958, 1448, 0,    2941, 2,    0,    225,  3233, 0,    2946, 0,    3610, 0,    876,  0,
        0,    0,    3606, 1662, 0,    0,    4469, 1999, 3846, 942,  0,    0,    0,    2089, 2152, 0,
        0,    0,    0,    1508, 0,    491,  633,  868,  0,    0,    36,   0,    0,    1767, 0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    278,  212,  0,    0,    0,    0,    0,    0,
        956,  2657, 0,    2192, 0,    1829, 2305, 0,    0,    0,    0,    0,    0,    0,    3393, 4016,
        0,    0,    0,    0,    2033, 0,    0,    0,    0,    0,    543,  0,    0,    1619, 1394, 4136,
        0,    0,    0,    0,    1263, 0,    3559, 0,    0,    0,    1735, 3421, 0,    3999, 351,  791,
        0,    0,    0,    0,    2988, 0,    49,   647,  1231, 2090, 338,  86,   0,    0,    4294, 0,
        0,    0,    0,    0,    0,    317,  1168, 0,    1066, 0,    0,    0,    0,    726,  0,    0,
        1147, 0,    0,    0,    84,   0,    0,    0,    1282, 0,    561,  0,    4462, 1699, 454,  0,
        0,    0,    655,  0,    1560, 0,    0,    667,  0,    0,    118,  0,    1064, 509,  0,    0,
        0,    0,    0,    0,    0,    0,    496,  0,    212,  0,    0,    0,    0,    0,    0,    0,
        0,    0,    4222, 3978, 0,    0,    0,    0,    0,    0,    1783, 2735, 2714, 2018, 0,    0,
        2421, 0,    0,    0,    0,    2271, 0,    3422, 1929, 0,    0,    714,  4436, 0,    0,    0,
        2156, 0,    0,    2137, 0,    0,    1113, 0,    0,    4107, 0,    4353, 0,    0,    0,    0,
        655,  0,    0,    1111, 1404, 0,    1641, 3411, 2047, 0,    0,    0,    0,    0,    0,    2521,
        3273, 0,    0,    0,    0,    0,    0,    0,    0,    333,  401,  0,    0,    0,    0,    4406,
        0,    0,    1119, 1739, 0,    0,    1880, 0,    130,  3433, 222,  4450, 0,    0,    3128, 201,
        0,    0,    0,    0,    3749, 3181, 0,    3831, 0,    2766, 0,    0,    0,    679,  0,    393,
        0,    0,    1739, 2450, 302,  1684, 417,  0,    0,    0,    30,   3334, 0,    1632, 0,    0,
        948,  0,    4211, 2980, 2106, 0,    0,    0,    1766, 767,  0,    0,    2707, 0,    978,  4412,
        0,    0,    4448, 0,    449,  1451, 4348, 0,    2607, 0,    0,    299,  0,    0,    209,  3891,
        0,    1770, 574,  0,    1465, 0,    269,  2301, 520,  0,    0,    0,    1543, 1322, 0,    0,
        4263, 0,    0,    2241, 0,    0,    301,  0,    0,    3587, 0,    0,    0,    1319, 3975, 813,
        0,    0,    0,    924,  0,    0,    938,  0,    0,    0,    0,    0,    0,    0,    2307, 0,
        0,    1403, 109,  988,  0,    0,    0,    0,    1179, 360,  2074, 0,    0,    0,    0,    0,
        3246, 0,    265,  500,  0,    473,  3206, 0,    0,    124,  888,  969,  0,    0,    0,    2,
        60,   2347, 4193, 0,    0,    3285, 0,    0,    1758, 0,    57,   1641, 1609, 325,  2401, 0,
        1970, 4444, 219,  0,    0,    0,    0,    4160, 0,    0,    0,    0,    0,    0,    0,    2540,
        0,    0,    0,    0,    0,    1071, 0,    0,    0,    0,    1461, 0,    0,    0,    0,    0,
        0,    1085, 0,    0,    3778, 1332, 636,  291,  0,    0,    2220, 0,    442,  0,    0,    0,
        0,    1821, 0,    3654, 0,    635,  0,    0,    0,    269,  0,    0,    2333, 0,    1109, 0,
        0,    0,    1784, 0,    4306, 0,    0,    0,    861,  0,    1790, 2994, 0,    980,  0,    0,
        0,    1822, 4093, 3881, 0,    2709, 0,    0,    1908, 0,    0,    0,    0,    3265, 1149, 4035,
        0,    0,    3350, 1698, 1154, 1957, 0,    0,    0,    0,    0,    0,    0,    3686, 3238, 0,
        0,    0,    0,    1528, 0,    1609, 0,    1494, 1785, 211,  1055, 0,    0,    0,    4499, 0,
        0,    0,    0,    0,    0,    0,    0,    1251, 2175, 0,    0,    389,  0,    2192, 0,    0,
        0,    3467, 417,  0,    0,    1849, 1236, 1106, 0,    114,  2144, 1691, 2776, 0,    1190, 0,
        523,  0,    0,    266,  2414, 4448, 3858, 0,    0,    0,    1116, 3321, 0,    0,    4208, 0,
        609,  0,    3862, 2016, 0,    0,    737,  1214, 4516, 505,  0,    1725, 0,    0,    2011, 1777,
        0,    0,    0,    4180, 1709, 0,    3182, 0,    883,  0,    0,    0,    0,    0,    0,    1121,
        0,    0,    0,    0,    0,    937,  0,    3880, 1125, 1355, 0,    788,  282,  0,    1575, 155,
        0,    1732, 0,    0,    0,    4047, 1410, 1406, 0,    2013, 0,    0,    471,  176,  0,    0,
        0,    3570, 0,    973,  1005, 0,    0,    0,    0,    895,  0,    626,  979,  0,    977,  0,
        0,    663,  4079, 721,  0,    0,    0,    4111, 337,  615,  0,    137,  215,  0,    527,  0,
        0,    0,    0,    4450, 0,    0,    2050, 21,   573,  0,    0,    0,    0,    0,    0,    2452,
        0,    0,    0,    0,    956,  0,    0,    0,    0,    556,  0,    0,    1261, 360,  0,    4177,
        0,    0,    727,  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    4336, 1792,
        211,  0,    1706, 0,    0,    0,    0,    0,    0,    2432, 0,    4044, 701,  374,  1991, 3954,
        4020, 238,  712,  0,    857,  999,  2016, 1290, 0,    431,  1471, 0,    0,    0,    0,    2106,
        460,  0,    0,    1951, 1017, 0,    459,  0,    652,  0,    349,  0,    246,  0,    178,  0,
        1351, 1325, 0,    0,    0,    0,    0,    0,    0,    0,    163,  0,    3395, 0,    303,  3838,
        0,    241,  0,    4274, 0,    2112, 2001, 0,    709,  493,  0,    0,    3640, 0,    1810, 0,
        1584, 3635, 0,    0,    1195, 752,  2363, 0,    0,    0,    0,    0,    1061, 1389, 0,    555,
        983,  326,  1546, 1521, 0,    0,    838,  676,  0,    0,    328,  2301, 4134, 4032, 0,    3019,
        0,    982,  0,    0,    774,  2899, 0,    0,    0,    147,  26,   3651, 2118, 702,  0,    2382,
        1146, 608,  194,  0,    2058, 0,    0,    1630, 0,    0,    0,    0,    0,    507,  0,    618,
        807,  340,  0,    0,    1152, 0,    0,    0,    1838, 1022, 0,    4463, 531,  0,    0,    377,
        787,  1053, 864,  3486, 16,   0,    0,    2133, 0,    0,    223,  0,    3898, 0,    0,    3865,
        0,    0,    0,    213,  0,    0,    0,    0,    1207, 1100, 0,    0,    0,    1884, 0,    1898,
        423,  1197, 3896, 535,  0,    582,  662,  0,    2310, 310,  0,    2709, 4489, 884,  1993, 68,
        3161, 626,  0,    0,    0,    0,    0,    4078, 755,  164,  247,  0,    1210, 0,    1484, 279,
        0,    573,  0,    0,    0,    1441, 3329, 2467, 1563, 0,    0,    0,    3011, 676,  1354, 0,
        0,    4380, 1935, 3695, 0,    967,  0,    632,  1353, 2014, 3712, 1407, 1087, 0,    4228, 0,
        4185, 0,    0,    1429, 1735, 1634, 1947, 0,    0,    1585, 0,    0,    0,    2581, 1971, 0,
        2909, 0,    0,    0,    505,  0,    0,    0,    0,    2876, 776,  0,    0,    4053, 0,    0,
        541,  0,    0,    1614, 2525, 4049, 3871, 1797, 244,  549,  0,    3490, 2532, 287,  0,    0,
        1555, 0,    0,    1125, 1717, 3731, 4240, 50,   1164, 761,  0,    2149, 0,    1401, 0,    1333,
        3242, 0,    2049, 1773, 0,    0,    0,    4386, 0,    1811, 0,    951,  0,    483,  0,    3682,
        0,    1297, 991,  0,    229,  0,    3210, 1442, 2939, 1895, 3431, 0,    213,  855,  346,  681,
        0,    2025, 0,    0,    0,    0,    0,    0,    2007, 4242, 0,    1045, 35,   0,    0,    0,
        0,    0,    1905, 0,    3035, 0,    0,    0,    893,  3851, 0,    0,    0,    0,    3374, 38,
        0,    0,    1204, 0,    768,  0,    0,    0,    1134, 0,    0,    0,    0,    4315, 385,  1727,
        2540, 4128, 0,    3121, 0,    0,    0,    0,    0,    4163, 1475, 0,    1629, 1496, 0,    0,
        985,  0,    0,    322,  0,    0,    2100, 0,    125,  0,    4466, 2035, 0,    0,    314,  1737,
        3186, 0,    21,   1472, 0,    0,    4448, 4158, 378,  2124, 0,    1020, 863,  485,  0,    4223,
        0,    392,  0,    0,    0,    2440, 259,  0,    0,    0,    3445, 0,    615,  0,    0,    3693,
        1376, 0,    0,    203,  3723, 990,  1340, 332,  0,    0,    1289, 1313, 0,    2041, 0,    0,
        1085, 2095, 268,  786,  2146, 0,    0,    0,    2547, 0,    0,    0,    1956, 4320, 0,    0,
        0,    113,  0,    625,  0,    1052, 800,  4425, 2077, 0,    0,    881,  0,    0,    817,  537,
        3707, 0,    1539, 0,    0,    0,    0,    0,    0,    728,  0,    48,   519,  0,    0,    874,
        0,    0,    0,    3739, 1225, 0,    0,    1063, 274,  3763, 762,  0,    3159, 0,    1176, 0,
        1479, 324,  0,    1200, 0,    0,    0,    395,  0,    0,    4339, 0,    0,    518,  3197, 0,
        753,  676,  2199, 0,    278,  2788, 2215, 0,    1975, 1514, 17,   0,    0,    0,    0,    673,
        932,  115,  0,    4379, 1702, 95,   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        972,  0,    1930, 1765, 0,    1923, 1036, 0,    4471, 0,    1491, 0,    0,    366,  0,    0,
        0,    4238, 1037, 0,    1760, 1693, 0,    0,    0,    4173, 256,  669,  0,    0,    3634, 28,
        0,    0,    0,    0,    0,    0,    0,    314,  936,  2871, 0,    450,  0,    2942, 1205, 44,
        3355, 1380, 230,  1159, 0,    0,    4014, 0,    0,    0,    0,    1196, 2832, 0,    0,    0,
        687,  0,    0,    0,    1043, 0,    0,    0,    4384, 752,  3135, 1242, 440,  1315, 0,    0,
        3204, 0,    0,    1645, 0,    0,    1180, 0,    0,    0,    0,    0,    1216, 0,    0,    1005,
        4204, 0,    0,    0,    0,    0,    0,    2484, 0,    3993, 0,    0,    4342, 0,    2982, 0,
        1078, 0,    0,    3889, 1175, 0,    0,    0,    1389, 0,    0,    0,    232,  2134, 0,    0,
        4295, 479,  3904, 0,    0,    1523, 328,  0,    0,    3944, 0,    0,    112,  636,  0,    3330,
        1169, 0,    0,    0,    3743, 3225, 0,    0,    0,    217,  0,    0,    0,    0,    3762, 0,
        47,   3469, 0,    1150, 1171, 0,    647,  750,  0,    3637, 2123, 2973, 3383, 126,  0,    977,
        0,    0,    0,    1542, 0,    0,    0,    1549, 1024, 1239, 2979, 1147, 0,    75,   1697, 0,
        0,    0,    0,    0,    1523, 1058, 0,    285,  3098, 0,    0,    1907, 1206, 0,    2131, 1782,
        176,  1977, 1748, 1591, 0,    0,    0,    810,  172,  704,  1220, 96,   0,    4073, 435,  0,
        0,    1841, 472,  2086, 0,    637,  2857, 149,  3505, 0,    4124, 0,    1862, 242,  2002, 2175,
        1872, 0,    0,    199,  0,    2119, 0,    0,    2060, 3079, 4300, 0,    0,    773,  724,  0,
        222,  0,    2314, 680,  0,    3165, 0,    0,    3920, 0,    0,    0,    729,  229,  313,  0,
        0,    4205, 2248, 4500, 0,    0,    0,    14,   2992, 671,  0,    0,    0,    1762, 1994, 674,
        1161, 2142, 4087, 1829, 425,  0,    495,  0,    2403, 0,    0,    946,  0,    0,    0,    0,
        1433, 913,  0,    1263, 1985, 325,  0,    0,    2121, 0,    162,  0,    1945, 0,    2119, 0,
        772,  1957, 0,    0,    0,    0,    1069, 0,    4320, 4413, 0,    0,    2423, 0,    0,    0,
        2748, 964,  3686, 0,    2746, 0,    0,    0,    0,    0,    3144, 1396, 940,  533,  1670, 0,
        0,    4025, 0,    1323, 100,  0,    1712, 0,    3711, 383,  0,    0,    3705, 860,  0,    0,
        2331, 1393, 513,  3693, 1964, 1412, 1561, 4360, 1252, 2113, 0,    3658, 0,    2093, 2868, 0,
        646,  771,  0,    0,    1452, 0,    4331, 0,    2091, 4103, 0,    0,    0,    3661, 1968, 1897,
        3052, 3582, 2843, 0,    0,    0,    0,    0,    197,  0,    0,    0,    0,    0,    0,    3747,
        471,  0,    0,    0,    3159, 1740, 605,  0,    2316, 0,    0,    3725, 0,    1996, 0,    0,
        4289, 306,  0,    0,    1880, 0,    0,    4253, 0,    0,    1416, 716,  1067, 364,  1184, 0,
        0,    901,  0,    0,    0,    0,    1502, 0,    0,    398,  1346, 3817, 0,    778,  861,  0,
        3471, 0,    0,    3181, 0,    0,    0,    0,    0,    0,    1947, 0,    0,    427,  0,    1079,
        0,    2736, 1189, 2165, 941,  4424, 0,    1307, 0,    0,    965,  186,  2409, 0,    0,    1755,
        0,    884,  4334, 0,    0,    0,    465,  0,    2370, 0,    10,   0,    749,  0,    2695, 0,
        0,    1203, 0,    0,    1469, 2493, 0,    0,    1105, 0,    0,    0,    616,  2795, 0,    0,
        1614, 0,    1339, 0,    0,    1963, 2242, 1841, 151,  709,  0,    1196, 0,    0,    0,    1293,
        110,  1404, 245,  0,    0,    913,  0,    0,    228,  1563, 402,  0,    0,    2028, 0,    107,
        3387, 3070, 2015, 0,    1205, 0,    0,    3529, 4006, 1831, 806,  4448, 1900, 38,   820,  1450,
        0,    0,    1237, 1232, 4492, 291,  1687, 143,  725,  665,  2097, 0,    0,    375,  0,    0,
        0,    1742, 0,    0,    1430, 0,    739,  986,  1342, 0,    1145, 1199, 0,    1992, 2003, 635,
        0,    4368, 0,    0,    0,    0,    412,  4306, 3152, 2125, 0,    3107, 0,    4240, 0,    0,
        3046, 727,  0,    3965, 1517, 0,    3173, 0,    0,    4096, 0,    0,    0,    0,    0,    0,
        1151, 530,  0,    0,    0,    474,  1267, 316,  2360, 4362, 992,  2209, 0,    0,    0,    0,
        2374, 699,  540,  800,  1861, 1078, 0,    2108, 2536, 0,    713,  323,  0,    273,  0,    0,
        355,  1817, 395,  0,    1508, 3151, 0,    2149, 4020, 0,    0,    372,  0,    0,    1137, 0,
        1351, 0,    0,    3212, 0,    0,    599,  0,    1852, 1899, 947,  0,    970,  0,    0,    0,
        766,  950,  829,  419,  784,  0,    0,    225,  0,    1300, 179,  0,    85,   3598, 2487, 3185,
        0,    3289, 2580, 0,    1503, 1717, 177,  0,    2099, 294,  1226, 0,    2065, 3896, 0,    0,
        3322, 1376, 3816, 4013, 4114, 917,  0,    3833, 0,    1692, 0,    477,  0,    0,    0,    71,
        0,    0,    0,    1156, 0,    1081, 4369, 0,    0,    1111, 2971, 0,    0,    0,    3585, 325,
        0,    1278, 0,    0,    129,  676,  0,    0,    2629, 2583, 489,  491,  613,  2031, 0,    1211,
        0,    0,    1029, 271,  0,    0,    1203, 3794, 0,    4246, 0,    0,    2074, 3293, 1014, 4484,
        0,    0,    0,    3124, 0,    0,    0,    0,    269,  0,    549,  0,    1984, 0,    0,    2529,
        0,    0,    614,  1175, 1915, 0,    0,    0,    885,  2791, 1914, 484,  4352, 1605, 4239, 0,
        0,    681,  896,  3954, 867,  156,  327,  2955, 0,    3523, 0,    1467, 689,  0,    0,    0,
        635,  961,  0,    572,  0,    2331, 1526, 519,  1286, 0,    1865, 1864, 1651, 1304, 0,    4352,
        692,  0,    1476, 0,    0,    4112, 0,    692,  131,  2253, 1686, 143,  0,    4083, 1779, 0,
        0,    670,  0,    915,  1019, 0,    4444, 718,  1674, 1968, 0,    1035, 652,  1127, 2903, 0,
        1683, 0,    472,  4195, 4238, 0,    0,    2141, 3516, 0,    3348, 0,    0,    23,   372,  1138,
        0,    0,    29,   1701, 0,    3048, 1892, 0,    0,    4071, 1390, 0,    98,   0,    1377, 0,
        0,    0,    1715, 3063, 1441, 208,  0,    734,  1338, 0,    641,  4487, 0,    0,    0,    702,
        2682, 0,    4442, 0,    1965, 1616, 0,    1024, 1628, 1662, 0,    1091, 2311, 0,    0,    422,
        0,    333,  0,    1889, 0,    0,    0,    0,    0,    4497, 0,    0,    2655, 3474, 1316, 123,
        1851, 3755, 3915, 0,    0,    0,    356,  1124, 325,  77,   0,    0,    3,    0,    0,    80,
        1885, 0,    1638, 0,    0,    0,    3601, 2497, 1509, 0,    0,    0,    3401, 0,    0,    0,
        2679, 0,    2071, 1113, 0,    0,    3696, 0,    642,  0,    0,    1215, 1392, 2018, 3821, 12,
        1051, 2726, 677,  4340, 519,  1973, 2742, 820,  0,    0,    343,  191,  1390, 0,    0,    544,
        0,    4177, 4130, 70,   40,   1671, 0,    0,    1609, 366,  945,  0,    0,    3904, 7,    0,
        1974, 0,    0,    0,    3737, 1275, 0,    2572, 0,    2004, 0,    1502, 3277, 1408, 2631, 1647,
        2097, 970,  533,  0,    0,    0,    859,  1729, 705,  4030, 678,  1255, 0,    1015, 2392, 1084,
        1942, 0,    3962, 1676, 0,    2401, 4236, 0,    1342, 932,  0,    0,    224,  626,  837,  0,
        4235, 0,    1045, 0,    0,    0,    0,    2050, 389,  0,    63,   4431, 0,    671,  0,    0,
        1001, 0,    546,  4294, 132,  266,  2080, 1421, 0,    4103, 0,    9,    3595, 4457, 4036, 0,
        4363, 0,    77,   1380, 1354, 1642, 1112, 3747, 3346, 3697, 1455, 0,    1036, 2278, 526,  0,
        1815, 1725, 808,  562,  0,    0,    4484, 0,    0,    572,  0,    1920, 0,    0,    0,    0,
        945,  0,    0,    1157, 84,   1033, 0,    320,  0,    2610, 0,    1716, 0,    4409, 0,    497,
        1704, 0,    2874, 0,    0,    4379, 0,    0,    0,    0,    3601, 2325, 567,  2216, 0,    0,
        0,    404,  630,  0,    2154, 2165, 649,  1156, 0,    0,    1375, 0,    2396, 474,  0,    447,
        0,    0,    734,  1511, 0,    0,    2640, 31,   0,    3815, 2055, 0,    1324, 1010, 0,    0,
        731,  1418, 0,    917,  747,  3421, 260,  0,    819,  0,    913,  1164, 3921, 0,    0,    0,
        1768, 2499, 2993, 1828, 0,    0,    0,    1078, 801,  3223, 0,    0,    1567, 0,    1602, 1074,
        0,    1798, 0,    1675, 0,    922,  4438, 1238, 1099, 0,    0,    0,    1212, 0,    0,    4498,
        4474, 0,    0,    0,    0,    127,  1732, 4295, 0,    4389, 2062, 882,  0,    0,    0,    0,
        4388, 594,  0,    983,  1738, 0,    1550, 2284, 973,  1297, 0,    2360, 0,    0,    0,    629,
        974,  0,    2813, 483,  3879, 1311, 252,  3334, 3923, 0,    0,    0,    0,    0,    89,   0,
        0,    390,  0,    1728, 0,    0,    81,   0,    1509, 1582, 0,    4111, 589,  0,    0,    699,
        1836, 1006, 0,    0,    3364, 863,  838,  0,    1047, 0,    2427, 0,    0,    0,    0,    1871,
        882,  0,    0,    4322, 0,    1216, 1522, 1237, 0,    0,    0,    0,    2351, 0,    0,    15,
        1280, 1182, 0,    4414, 2595, 853,  2089, 415,  0,    2713, 2045, 0,    2842, 0,    1280, 904,
        287,  0,    0,    0,    1316, 0,    0,    0,    0,    80,   0,    3283, 0,    0,    0,    0,
        0,    939,  0,    0,    4114, 72,   2954, 152,  1248, 0,    172,  0,    0,    0,    0,    42,
        0,    0,    0,    0,    66,   1906, 3199, 200,  0,    0,    0,    507,  1222, 666,  1557, 4127,
        0,    3052, 0,    3079, 0,    0,    4484, 313,  955,  1252, 3818, 1452, 3742, 2990, 4194, 3515,
        0,    0,    0,    1929, 1172, 3894, 38,   0,    817,  0,    1486, 1653, 1118, 3736, 668,  991,
        0,    341,  1721, 0,    902,  0,    0,    340,  0,    0,    3725, 25,   0,    0,    0,    3197,
        0,    0,    0,    0,    3530, 0,    0,    361,  0,    293,  1055, 4471, 0,    1263, 1416, 5,
        1898, 0,    186,  1187, 545,  0,    0,    0,    3627, 0,    0,    0,    121,  4013, 0,    2877,
        0,    0,    61,   2722, 3121, 0,    0,    427,  0,    0,    3172, 1767, 2900, 0,    1894, 3877,
        2537, 0,    0,    965,  1592, 3240, 336,  2650, 0,    779,  0,    1133, 0,    3582, 937,  443,
        447,  0,    2169, 0,    1258, 1989, 1008, 420,  3077, 768,  0,    0,    949,  0,    2027, 0,
        1499, 0,    0,    1698, 1863, 0,    0,    477,  2307, 2147, 3657, 755,  3798, 0,    0,    318,
        0,    307,  0,    0,    0,    2790, 0,    1532, 781,  3186, 954,  608,  3536, 2017, 0,    0,
        1311, 3452, 1918, 2456, 3876, 0,    2298, 758,  0,    0,    856,  0,    0,    2898, 373,  3964,
        750,  0,    1002, 126,  428,  1503, 0,    0,    862,  2059, 1484, 1419, 0,    0,    341,  0,
        0,    0,    267,  0,    82,   4482, 58,   4435, 0,    0,    2588, 4297, 1434, 2456, 0,    806,
        3847, 927,  459,  1877, 0,    4002, 4450, 1890, 0,    4120, 307,  0,    0,    1253, 0,    3792,
        0,    1825, 0,    0,    4230, 825,  458,  0,    0,    0,    1358, 1363, 2875, 0,    0,    2102,
        2662, 2342, 0,    0,    154,  1024, 415,  0,    3993, 0,    0,    2104, 1156, 2947, 0,    0,
        1992, 158,  529,  1286, 277,  1585, 586,  0,    0,    0,    100,  0,    3378, 3339, 4468, 0,
        1330, 1103, 0,    3326, 1959, 0,    0,    0,    0,    1114, 0,    3779, 1334, 0,    0,    0,
        90,   0,    344,  0,    903,  3245, 1023, 0,    0,    0,    277,  2147, 0,    283,  1993, 561,
        936,  0,    870,  646,  3981, 0,    3978, 0,    0,    1640, 904,  0,    0,    69,   2095, 0,
        956,  4499, 719,  0,    0,    0,    0,    4126, 1760, 746,  0,    352,  3597, 0,    697,  1639,
        453,  0,    0,    3780, 0,    208,  3222, 206,  0,    0,    839,  0,    1931, 367,  0,    1978,
        0,    0,    0,    0,    3293, 1666, 3487, 4043, 0,    729,  4367, 0,    0,    221,  3711, 355,
        0,    270,  1213, 526,  1594, 654,  0,    0,    0,    1386, 416,  0,    1279, 0,    2128, 1167,
        3109, 1711, 0,    0,    1806, 555,  1541, 1646, 0,    1472, 65,   0,    1266, 1315, 0,    4001,
        4177, 152,  2030, 1277, 3220, 1558, 578,  3055, 0,    1393, 987,  1493, 2001, 0,    0,    360,
        0,    0,    0,    0,    0,    35,   1626, 3769, 0,    3872, 0,    1177, 790,  1999, 849,  4122,
        0,    0,    0,    0,    2280, 0,    0,    1590, 0,    0,    595,  541,  804,  1432, 250,  0,
        1649, 1638, 1917, 1250, 148,  4278, 0,    505,  56,   989,  0,    0,    1254, 4158, 0,    4079,
        0,    0,    0,    0,    155,  2082, 0,    0,    1382, 688,  556,  3656, 1721, 0,    0,    718,
        0,    1369, 0,    0,    566,  4358, 1749, 0,    0,    0,    374,  1218, 1323, 0,    0,    3482,
        618,  4380, 1191, 1843, 0,    2269, 84,   548,  1337, 0,    554,  4152, 0,    1642, 2582, 3857,
        3875, 0,    0,    3980, 1244, 459,  0,    0,    486,  3379, 0,    727,  0,    3783, 438,  0,
        0,    0,    0,    0,    430,  0,    0,    2406, 575,  595,  0,    329,  765,  2193, 0,    3032,
        2704, 0,    1001, 275,  0,    668,  52,   1108, 1125, 862,  0,    2177, 0,    413,  550,  3915,
        0,    3168, 4220, 0,    0,    0,    24,   3699, 171,  0,    1772, 1512, 0,    0,    4276, 0,
        894,  0,    0,    2072, 908,  0,    0,    0,    557,  3741, 0,    1648, 0,    680,  1888, 0,
        872,  496,  2178, 0,    4518, 0,    623,  1117, 0,    0,    0,    292,  1850, 3090, 0,    0,
        0,    1728, 3042, 878,  0,    0,    4241, 3643, 0,    2085, 0,    1173, 81,   2906, 1258, 1777,
        0,    0,    1265, 933,  0,    0,    0,    0,    0,    0,    203,  3989, 0,    448,  0,    3851,
        0,    1272, 0,    4513, 4512, 1209, 0,    0,    1073, 2174, 0,    925,  0,    3377, 2781, 0,
        0,    1800, 1375, 549,  0,    0,    0,    0,    0,    0,    2073, 2199, 615,  646,  0,    1291,
        1724, 0,    1800, 2094, 1176, 1423, 1546, 847,  0,    3215, 659,  165,  1385, 1753, 0,    495,
        0,    3581, 2303, 457,  2293, 1717, 0,    4458, 0,    0,    1126, 845,  0,    0,    921,  0,
        4274, 0,    2425, 0,    122,  1469, 854,  0,    2114, 1766, 0,    0,    284,  283,  2520, 546,
        0,    0,    1334, 1879, 868,  2167, 1732, 251,  0,    2065, 1453, 4387, 0,    1121, 1570, 4147,
        0,    0,    639,  1596, 0,    0,    0,    1620, 1011, 487,  0,    0,    831,  1070, 1580, 4238,
        1540, 0,    606,  115,  0,    2423, 1617, 1503, 1486, 3554, 0,    0,    3090, 0,    1857, 0,
        981,  54,   835,  0,    0,    1446, 1357, 1470, 0,    1063, 955,  4161, 698,  0,    710,  0,
        2031, 0,    0,    3897, 1095, 1852, 0,    0,    0,    2204, 873,  953,  59,   0,    3223, 2252,
        159,  246,  0,    89,   1139, 1544, 0,    4457, 2189, 896,  438,  196,  314,  0,    842,  0,
        3681, 0,    1705, 0,    4349, 1492, 6,    3426, 879,  0,    93,   0,    0,    0,    0,    0,
        590,  0,    0,    0,    2105, 3552, 0,    4018, 2356, 601,  0,    0,    950,  498,  507,  4086,
        0,    0,    0,    0,    2045, 0,    1909, 576,  1428, 1660, 0,    0,    3853, 3807, 0,    3060,
        0,    3651, 0,    0,    259,  124,  0,    0,    3273, 1935, 0,    267,  4274, 68,   4185, 0,
        0,    885,  0,    0,    1712, 0,    0,    1538, 914,  0,    0,    0,    76,   1796, 61,   2771,
        0,    4459, 813,  0,    2039, 4408, 1331, 0,    462,  0,    104,  0,    1950, 1736, 1621, 2281,
        0,    2372, 0,    3945, 1440, 2015, 1654, 606,  0,    1611, 434,  147,  4516, 0,    1752, 2163,
        0,    1822, 2729, 1689, 737,  0,    37,   820,  408,  0,    4066, 188,  0,    918,  1445, 478,
        33,   3353, 0,    2009, 0,    0,    1058, 0,    1466, 3964, 1282, 3105, 0,    0,    4133, 3400,
        1230, 4261, 0,    0,    1318, 0,    411,  0,    2167, 0,    361,  2341, 1814};
    
    int MangledHashG(const char *key, const int *T)
    {
        int sum = 0;
    
        for (int i = 0; key[i] != '\0'; i++)
        {
            sum += T[i] * key[i];
            sum %= 4525;
        }
        return mangledkG[sum];
    }
    
    int MangledPerfectHash(const char *key)
    {
        if (strlen(key) > 40)
            return 0;
    
        return (MangledHashG(key, mangledkT1) + MangledHashG(key, mangledkT2)) % 4525;
    }
    
    constexpr int unmangledkT1[] = {302, 379, 163, 169, 248, 282, 8,   197, 129, 5,   332, 34,  237,
                                    115, 333, 239, 99,  112, 161, 336, 130, 94,  170, 40,  318, 26};
    constexpr int unmangledkT2[] = {168, 245, 303, 8,  51,  374, 166, 1,   422, 347, 141, 33,  240,
                                    11,  188, 22,  20, 172, 272, 197, 205, 284, 310, 24,  358, 97};
    constexpr int unmangledkG[]  = {
        0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   106, 0,   20,  0,   0,   0,   0,   0,   50,  415, 0,   0,   0,   71,  0,   0,   0,   138,
        0,   0,   0,   339, 0,   32,  0,   0,   0,   177, 1,   147, 0,   0,   0,   110, 0,   403, 112,
        158, 0,   422, 0,   0,   0,   0,   166, 267, 105, 93,  0,   214, 362, 0,   133, 113, 0,   0,
        0,   320, 27,  0,   126, 0,   44,  79,  311, 78,  0,   0,   72,  0,   0,   0,   0,   0,   137,
        0,   238, 0,   0,   0,   0,   0,   0,   166, 142, 0,   0,   0,   0,   0,   0,   0,   0,   0,
        0,   297, 0,   0,   0,   73,  23,  256, 372, 77,  0,   0,   123, 196, 136, 0,   0,   347, 64,
        0,   60,  0,   101, 40,  0,   310, 411, 140, 0,   0,   0,   41,  0,   0,   0,   0,   177, 311,
        80,  144, 0,   198, 0,   0,   0,   149, 84,  0,   0,   0,   122, 88,  0,   354, 0,   81,  80,
        0,   100, 0,   156, 0,   0,   0,   276, 0,   107, 0,   0,   154, 0,   0,   0,   34,  368, 0,
        375, 0,   0,   330, 166, 0,   191, 34,  89,  0,   144, 0,   160, 0,   0,   220, 39,  0,   111,
        8,   28,  0,   18,  62,  138, 115, 0,   26,  27,  3,   4,   142, 13,  47,  127, 0,   209, 163,
        318, 0,   0,   17,  381, 0,   124, 0,   10,  0,   0,   156, 0,   0,   11,  316, 79,  0,   0,
        110, 0,   0,   330, 0,   13,  35,  0,   0,   24,  8,   138, 1,   387, 23,  202, 0,   0,   27,
        109, 11,  0,   174, 26,  291, 0,   0,   42,  197, 14,  134, 0,   94,  0,   0,   4,   0,   106,
        159, 292, 0,   49,  0,   347, 0,   62,  384, 131, 29,  0,   0,   153, 0,   164, 0,   172, 0,
        197, 0,   361, 0,   0,   7,   0,   0,   0,   311, 275, 212, 9,   118, 0,   0,   0,   42,  35,
        0,   0,   46,  116, 413, 398, 123, 229, 42,  0,   0,   200, 0,   142, 0,   296, 51,  0,   0,
        85,  341, 413, 0,   0,   0,   377, 0,   0,   0,   0,   24,  95,  183, 53,  18,  325, 0,   7,
        23,  202, 0,   0,   3,   387, 128, 0,   146, 63,  382, 0,   0,   0,   0,   0,   165, 0,   322,
        59,  0,   107, 0,   90,  25,  0,   0,   114, 277, 0,   4,   37,  192, 0,   0,   0,   86,  0,
        0,   182, 109, 139, 149, 0,   0,   0,   0,   0,   82,  0,   404, 0,   14,  55,  200, 0,   0,
        301, 12,  0,   28,  0,   0,   0,   68,  382};
    
    int UnmangledHashG(const char *key, const int *T)
    {
        int sum = 0;
    
        for (int i = 0; key[i] != '\0'; i++)
        {
            sum += T[i] * key[i];
            sum %= 427;
        }
        return unmangledkG[sum];
    }
    
    int UnmangledPerfectHash(const char *key)
    {
        if (strlen(key) > 26)
            return 0;
    
        return (UnmangledHashG(key, unmangledkT1) + UnmangledHashG(key, unmangledkT2)) % 427;
    }
    
    }  // namespace
    
    namespace sh
    {
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<4>::kFnvPrime = 16777619u;
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<4>::kFnvOffsetBasis = 0x811c9dc5u;
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<8>::kFnvPrime =
        static_cast<size_t>(1099511628211ull);
    
    template <>
    const size_t ImmutableString::FowlerNollVoHash<8>::kFnvOffsetBasis =
        static_cast<size_t>(0xcbf29ce484222325ull);
    
    uint32_t ImmutableString::mangledNameHash() const
    {
        return MangledPerfectHash(data());
    }
    
    uint32_t ImmutableString::unmangledNameHash() const
    {
        return UnmangledPerfectHash(data());
    }
    
    }  // namespace sh