// Generated by gen.ts — do not edit by hand.
#include "emoji-properties.hpp"

#include <algorithm>
#include <array>

using enum emoji::EmojiProp;

namespace {

struct PropRange {
  char32_t lo;
  char32_t hi;
  std::uint8_t flags;
};

constexpr std::array<PropRange, 264> g_props = {{
    {0x0023, 0x0023, Emoji},
    {0x002A, 0x002A, Emoji},
    {0x0030, 0x0039, Emoji},
    {0x00A9, 0x00A9, Emoji},
    {0x00AE, 0x00AE, Emoji},
    {0x203C, 0x203C, Emoji},
    {0x2049, 0x2049, Emoji},
    {0x2122, 0x2122, Emoji},
    {0x2139, 0x2139, Emoji},
    {0x2194, 0x2199, Emoji},
    {0x21A9, 0x21AA, Emoji},
    {0x231A, 0x231B, Emoji | EmojiPresentation},
    {0x2328, 0x2328, Emoji},
    {0x23CF, 0x23CF, Emoji},
    {0x23E9, 0x23EC, Emoji | EmojiPresentation},
    {0x23ED, 0x23EF, Emoji},
    {0x23F0, 0x23F0, Emoji | EmojiPresentation},
    {0x23F1, 0x23F2, Emoji},
    {0x23F3, 0x23F3, Emoji | EmojiPresentation},
    {0x23F8, 0x23FA, Emoji},
    {0x24C2, 0x24C2, Emoji},
    {0x25AA, 0x25AB, Emoji},
    {0x25B6, 0x25B6, Emoji},
    {0x25C0, 0x25C0, Emoji},
    {0x25FB, 0x25FC, Emoji},
    {0x25FD, 0x25FE, Emoji | EmojiPresentation},
    {0x2600, 0x2604, Emoji},
    {0x260E, 0x260E, Emoji},
    {0x2611, 0x2611, Emoji},
    {0x2614, 0x2615, Emoji | EmojiPresentation},
    {0x2618, 0x2618, Emoji},
    {0x261D, 0x261D, Emoji | EmojiModifierBase},
    {0x2620, 0x2620, Emoji},
    {0x2622, 0x2623, Emoji},
    {0x2626, 0x2626, Emoji},
    {0x262A, 0x262A, Emoji},
    {0x262E, 0x262F, Emoji},
    {0x2638, 0x263A, Emoji},
    {0x2640, 0x2640, Emoji},
    {0x2642, 0x2642, Emoji},
    {0x2648, 0x2653, Emoji | EmojiPresentation},
    {0x265F, 0x2660, Emoji},
    {0x2663, 0x2663, Emoji},
    {0x2665, 0x2666, Emoji},
    {0x2668, 0x2668, Emoji},
    {0x267B, 0x267B, Emoji},
    {0x267E, 0x267E, Emoji},
    {0x267F, 0x267F, Emoji | EmojiPresentation},
    {0x2692, 0x2692, Emoji},
    {0x2693, 0x2693, Emoji | EmojiPresentation},
    {0x2694, 0x2697, Emoji},
    {0x2699, 0x2699, Emoji},
    {0x269B, 0x269C, Emoji},
    {0x26A0, 0x26A0, Emoji},
    {0x26A1, 0x26A1, Emoji | EmojiPresentation},
    {0x26A7, 0x26A7, Emoji},
    {0x26AA, 0x26AB, Emoji | EmojiPresentation},
    {0x26B0, 0x26B1, Emoji},
    {0x26BD, 0x26BE, Emoji | EmojiPresentation},
    {0x26C4, 0x26C5, Emoji | EmojiPresentation},
    {0x26C8, 0x26C8, Emoji},
    {0x26CE, 0x26CE, Emoji | EmojiPresentation},
    {0x26CF, 0x26CF, Emoji},
    {0x26D1, 0x26D1, Emoji},
    {0x26D3, 0x26D3, Emoji},
    {0x26D4, 0x26D4, Emoji | EmojiPresentation},
    {0x26E9, 0x26E9, Emoji},
    {0x26EA, 0x26EA, Emoji | EmojiPresentation},
    {0x26F0, 0x26F1, Emoji},
    {0x26F2, 0x26F3, Emoji | EmojiPresentation},
    {0x26F4, 0x26F4, Emoji},
    {0x26F5, 0x26F5, Emoji | EmojiPresentation},
    {0x26F7, 0x26F8, Emoji},
    {0x26F9, 0x26F9, Emoji | EmojiModifierBase},
    {0x26FA, 0x26FA, Emoji | EmojiPresentation},
    {0x26FD, 0x26FD, Emoji | EmojiPresentation},
    {0x2702, 0x2702, Emoji},
    {0x2705, 0x2705, Emoji | EmojiPresentation},
    {0x2708, 0x2709, Emoji},
    {0x270A, 0x270B, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x270C, 0x270D, Emoji | EmojiModifierBase},
    {0x270F, 0x270F, Emoji},
    {0x2712, 0x2712, Emoji},
    {0x2714, 0x2714, Emoji},
    {0x2716, 0x2716, Emoji},
    {0x271D, 0x271D, Emoji},
    {0x2721, 0x2721, Emoji},
    {0x2728, 0x2728, Emoji | EmojiPresentation},
    {0x2733, 0x2734, Emoji},
    {0x2744, 0x2744, Emoji},
    {0x2747, 0x2747, Emoji},
    {0x274C, 0x274C, Emoji | EmojiPresentation},
    {0x274E, 0x274E, Emoji | EmojiPresentation},
    {0x2753, 0x2755, Emoji | EmojiPresentation},
    {0x2757, 0x2757, Emoji | EmojiPresentation},
    {0x2763, 0x2764, Emoji},
    {0x2795, 0x2797, Emoji | EmojiPresentation},
    {0x27A1, 0x27A1, Emoji},
    {0x27B0, 0x27B0, Emoji | EmojiPresentation},
    {0x27BF, 0x27BF, Emoji | EmojiPresentation},
    {0x2934, 0x2935, Emoji},
    {0x2B05, 0x2B07, Emoji},
    {0x2B1B, 0x2B1C, Emoji | EmojiPresentation},
    {0x2B50, 0x2B50, Emoji | EmojiPresentation},
    {0x2B55, 0x2B55, Emoji | EmojiPresentation},
    {0x3030, 0x3030, Emoji},
    {0x303D, 0x303D, Emoji},
    {0x3297, 0x3297, Emoji},
    {0x3299, 0x3299, Emoji},
    {0x1F004, 0x1F004, Emoji | EmojiPresentation},
    {0x1F0CF, 0x1F0CF, Emoji | EmojiPresentation},
    {0x1F170, 0x1F171, Emoji},
    {0x1F17E, 0x1F17F, Emoji},
    {0x1F18E, 0x1F18E, Emoji | EmojiPresentation},
    {0x1F191, 0x1F19A, Emoji | EmojiPresentation},
    {0x1F1E6, 0x1F1FF, Emoji | EmojiPresentation},
    {0x1F201, 0x1F201, Emoji | EmojiPresentation},
    {0x1F202, 0x1F202, Emoji},
    {0x1F21A, 0x1F21A, Emoji | EmojiPresentation},
    {0x1F22F, 0x1F22F, Emoji | EmojiPresentation},
    {0x1F232, 0x1F236, Emoji | EmojiPresentation},
    {0x1F237, 0x1F237, Emoji},
    {0x1F238, 0x1F23A, Emoji | EmojiPresentation},
    {0x1F250, 0x1F251, Emoji | EmojiPresentation},
    {0x1F300, 0x1F320, Emoji | EmojiPresentation},
    {0x1F321, 0x1F321, Emoji},
    {0x1F324, 0x1F32C, Emoji},
    {0x1F32D, 0x1F335, Emoji | EmojiPresentation},
    {0x1F336, 0x1F336, Emoji},
    {0x1F337, 0x1F37C, Emoji | EmojiPresentation},
    {0x1F37D, 0x1F37D, Emoji},
    {0x1F37E, 0x1F384, Emoji | EmojiPresentation},
    {0x1F385, 0x1F385, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F386, 0x1F393, Emoji | EmojiPresentation},
    {0x1F396, 0x1F397, Emoji},
    {0x1F399, 0x1F39B, Emoji},
    {0x1F39E, 0x1F39F, Emoji},
    {0x1F3A0, 0x1F3C1, Emoji | EmojiPresentation},
    {0x1F3C2, 0x1F3C4, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F3C5, 0x1F3C6, Emoji | EmojiPresentation},
    {0x1F3C7, 0x1F3C7, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F3C8, 0x1F3C9, Emoji | EmojiPresentation},
    {0x1F3CA, 0x1F3CA, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F3CB, 0x1F3CC, Emoji | EmojiModifierBase},
    {0x1F3CD, 0x1F3CE, Emoji},
    {0x1F3CF, 0x1F3D3, Emoji | EmojiPresentation},
    {0x1F3D4, 0x1F3DF, Emoji},
    {0x1F3E0, 0x1F3F0, Emoji | EmojiPresentation},
    {0x1F3F3, 0x1F3F3, Emoji},
    {0x1F3F4, 0x1F3F4, Emoji | EmojiPresentation},
    {0x1F3F5, 0x1F3F5, Emoji},
    {0x1F3F7, 0x1F3F7, Emoji},
    {0x1F3F8, 0x1F3FA, Emoji | EmojiPresentation},
    {0x1F3FB, 0x1F3FF, Emoji | EmojiPresentation | EmojiModifier},
    {0x1F400, 0x1F43E, Emoji | EmojiPresentation},
    {0x1F43F, 0x1F43F, Emoji},
    {0x1F440, 0x1F440, Emoji | EmojiPresentation},
    {0x1F441, 0x1F441, Emoji},
    {0x1F442, 0x1F443, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F444, 0x1F445, Emoji | EmojiPresentation},
    {0x1F446, 0x1F450, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F451, 0x1F465, Emoji | EmojiPresentation},
    {0x1F466, 0x1F478, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F479, 0x1F47B, Emoji | EmojiPresentation},
    {0x1F47C, 0x1F47C, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F47D, 0x1F480, Emoji | EmojiPresentation},
    {0x1F481, 0x1F483, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F484, 0x1F484, Emoji | EmojiPresentation},
    {0x1F485, 0x1F487, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F488, 0x1F48E, Emoji | EmojiPresentation},
    {0x1F48F, 0x1F48F, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F490, 0x1F490, Emoji | EmojiPresentation},
    {0x1F491, 0x1F491, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F492, 0x1F4A9, Emoji | EmojiPresentation},
    {0x1F4AA, 0x1F4AA, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F4AB, 0x1F4FC, Emoji | EmojiPresentation},
    {0x1F4FD, 0x1F4FD, Emoji},
    {0x1F4FF, 0x1F53D, Emoji | EmojiPresentation},
    {0x1F549, 0x1F54A, Emoji},
    {0x1F54B, 0x1F54E, Emoji | EmojiPresentation},
    {0x1F550, 0x1F567, Emoji | EmojiPresentation},
    {0x1F56F, 0x1F570, Emoji},
    {0x1F573, 0x1F573, Emoji},
    {0x1F574, 0x1F575, Emoji | EmojiModifierBase},
    {0x1F576, 0x1F579, Emoji},
    {0x1F57A, 0x1F57A, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F587, 0x1F587, Emoji},
    {0x1F58A, 0x1F58D, Emoji},
    {0x1F590, 0x1F590, Emoji | EmojiModifierBase},
    {0x1F595, 0x1F596, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F5A4, 0x1F5A4, Emoji | EmojiPresentation},
    {0x1F5A5, 0x1F5A5, Emoji},
    {0x1F5A8, 0x1F5A8, Emoji},
    {0x1F5B1, 0x1F5B2, Emoji},
    {0x1F5BC, 0x1F5BC, Emoji},
    {0x1F5C2, 0x1F5C4, Emoji},
    {0x1F5D1, 0x1F5D3, Emoji},
    {0x1F5DC, 0x1F5DE, Emoji},
    {0x1F5E1, 0x1F5E1, Emoji},
    {0x1F5E3, 0x1F5E3, Emoji},
    {0x1F5E8, 0x1F5E8, Emoji},
    {0x1F5EF, 0x1F5EF, Emoji},
    {0x1F5F3, 0x1F5F3, Emoji},
    {0x1F5FA, 0x1F5FA, Emoji},
    {0x1F5FB, 0x1F644, Emoji | EmojiPresentation},
    {0x1F645, 0x1F647, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F648, 0x1F64A, Emoji | EmojiPresentation},
    {0x1F64B, 0x1F64F, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F680, 0x1F6A2, Emoji | EmojiPresentation},
    {0x1F6A3, 0x1F6A3, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F6A4, 0x1F6B3, Emoji | EmojiPresentation},
    {0x1F6B4, 0x1F6B6, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F6B7, 0x1F6BF, Emoji | EmojiPresentation},
    {0x1F6C0, 0x1F6C0, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F6C1, 0x1F6C5, Emoji | EmojiPresentation},
    {0x1F6CB, 0x1F6CB, Emoji},
    {0x1F6CC, 0x1F6CC, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F6CD, 0x1F6CF, Emoji},
    {0x1F6D0, 0x1F6D2, Emoji | EmojiPresentation},
    {0x1F6D5, 0x1F6D8, Emoji | EmojiPresentation},
    {0x1F6DC, 0x1F6DF, Emoji | EmojiPresentation},
    {0x1F6E0, 0x1F6E5, Emoji},
    {0x1F6E9, 0x1F6E9, Emoji},
    {0x1F6EB, 0x1F6EC, Emoji | EmojiPresentation},
    {0x1F6F0, 0x1F6F0, Emoji},
    {0x1F6F3, 0x1F6F3, Emoji},
    {0x1F6F4, 0x1F6FC, Emoji | EmojiPresentation},
    {0x1F7E0, 0x1F7EB, Emoji | EmojiPresentation},
    {0x1F7F0, 0x1F7F0, Emoji | EmojiPresentation},
    {0x1F90C, 0x1F90C, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F90D, 0x1F90E, Emoji | EmojiPresentation},
    {0x1F90F, 0x1F90F, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F910, 0x1F917, Emoji | EmojiPresentation},
    {0x1F918, 0x1F91F, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F920, 0x1F925, Emoji | EmojiPresentation},
    {0x1F926, 0x1F926, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F927, 0x1F92F, Emoji | EmojiPresentation},
    {0x1F930, 0x1F939, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F93A, 0x1F93A, Emoji | EmojiPresentation},
    {0x1F93C, 0x1F93E, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F93F, 0x1F945, Emoji | EmojiPresentation},
    {0x1F947, 0x1F976, Emoji | EmojiPresentation},
    {0x1F977, 0x1F977, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F978, 0x1F9B4, Emoji | EmojiPresentation},
    {0x1F9B5, 0x1F9B6, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F9B7, 0x1F9B7, Emoji | EmojiPresentation},
    {0x1F9B8, 0x1F9B9, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F9BA, 0x1F9BA, Emoji | EmojiPresentation},
    {0x1F9BB, 0x1F9BB, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F9BC, 0x1F9CC, Emoji | EmojiPresentation},
    {0x1F9CD, 0x1F9CF, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F9D0, 0x1F9D0, Emoji | EmojiPresentation},
    {0x1F9D1, 0x1F9DD, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1F9DE, 0x1F9FF, Emoji | EmojiPresentation},
    {0x1FA70, 0x1FA7C, Emoji | EmojiPresentation},
    {0x1FA80, 0x1FA8A, Emoji | EmojiPresentation},
    {0x1FA8E, 0x1FAC2, Emoji | EmojiPresentation},
    {0x1FAC3, 0x1FAC5, Emoji | EmojiPresentation | EmojiModifierBase},
    {0x1FAC6, 0x1FAC6, Emoji | EmojiPresentation},
    {0x1FAC8, 0x1FAC8, Emoji | EmojiPresentation},
    {0x1FACD, 0x1FADC, Emoji | EmojiPresentation},
    {0x1FADF, 0x1FAEA, Emoji | EmojiPresentation},
    {0x1FAEF, 0x1FAEF, Emoji | EmojiPresentation},
    {0x1FAF0, 0x1FAF8, Emoji | EmojiPresentation | EmojiModifierBase},
}};

} // namespace

std::uint8_t emoji::lookupProperties(char32_t cp) {
  auto it = std::upper_bound(g_props.begin(), g_props.end(), cp,
                             [](char32_t key, const PropRange &r) { return key < r.lo; });
  if (it == g_props.begin()) return 0;
  --it;
  return cp <= it->hi ? it->flags : 0;
}
