/* C++ code produced by gperf version 3.1 */
/* Command-line: /usr/bin/gperf --key-positions='*' -D -n -s 2 --output-file=CSSPropertyNames.cpp CSSPropertyNames.gperf  */

#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
/* The character set is not based on ISO-646.  */
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
#endif

#line 1 "CSSPropertyNames.gperf"

/* This file is automatically generated from CSSProperties.json by makeprop, do not edit */
#include "config.h"
#include "CSSProperty.h"
#include "CSSPropertyNames.h"
#include "HashTools.h"
#include "DeprecatedGlobalSettings.h"
#include "Settings.h"
#include <wtf/ASCIICType.h>
#include <wtf/FixedVector.h>
#include <wtf/Hasher.h>
#include <wtf/text/AtomString.h>
#include <wtf/text/WTFString.h>
#include <string.h>

IGNORE_WARNINGS_BEGIN("implicit-fallthrough")

// Older versions of gperf like to use the `register` keyword.
#define register

namespace WebCore {

// Using std::numeric_limits<uint16_t>::max() here would be cleaner,
// but is not possible due to missing constexpr support in MSVC 2013.
static_assert(numCSSProperties + 1 <= 65535, "CSSPropertyID should fit into uint16_t.");

constexpr ASCIILiteral propertyNameStrings[numCSSProperties] = {
    "color-scheme"_s,
    "writing-mode"_s,
    "-webkit-ruby-position"_s,
    "color"_s,
    "direction"_s,
    "display"_s,
    "font-family"_s,
    "font-feature-settings"_s,
    "font-kerning"_s,
    "font-optical-sizing"_s,
    "font-palette"_s,
    "font-size"_s,
    "font-stretch"_s,
    "font-style"_s,
    "font-synthesis"_s,
    "font-variant-alternates"_s,
    "font-variant-caps"_s,
    "font-variant-east-asian"_s,
    "font-variant-ligatures"_s,
    "font-variant-numeric"_s,
    "font-variant-position"_s,
    "font-variation-settings"_s,
    "font-weight"_s,
    "text-orientation"_s,
    "text-rendering"_s,
    "zoom"_s,
    "-webkit-font-smoothing"_s,
    "-webkit-locale"_s,
    "-webkit-text-zoom"_s,
    "letter-spacing"_s,
    "accent-color"_s,
    "additive-symbols"_s,
    "align-content"_s,
    "align-items"_s,
    "align-self"_s,
    "alignment-baseline"_s,
    "alt"_s,
    "animation-composition"_s,
    "animation-delay"_s,
    "animation-direction"_s,
    "animation-duration"_s,
    "animation-fill-mode"_s,
    "animation-iteration-count"_s,
    "animation-name"_s,
    "animation-play-state"_s,
    "animation-timing-function"_s,
    "appearance"_s,
    "aspect-ratio"_s,
    "backface-visibility"_s,
    "background-attachment"_s,
    "background-blend-mode"_s,
    "background-color"_s,
    "background-image"_s,
    "background-position-x"_s,
    "background-position-y"_s,
    "background-repeat-x"_s,
    "background-repeat-y"_s,
    "base-palette"_s,
    "baseline-shift"_s,
    "border-collapse"_s,
    "border-image-outset"_s,
    "border-image-repeat"_s,
    "border-image-slice"_s,
    "border-image-source"_s,
    "border-image-width"_s,
    "box-sizing"_s,
    "break-after"_s,
    "break-before"_s,
    "break-inside"_s,
    "buffered-rendering"_s,
    "caption-side"_s,
    "caret-color"_s,
    "clear"_s,
    "clip"_s,
    "clip-path"_s,
    "clip-rule"_s,
    "color-interpolation"_s,
    "color-interpolation-filters"_s,
    "column-count"_s,
    "column-fill"_s,
    "column-gap"_s,
    "column-rule-color"_s,
    "column-rule-style"_s,
    "column-rule-width"_s,
    "column-span"_s,
    "column-width"_s,
    "contain"_s,
    "container-name"_s,
    "container-type"_s,
    "content"_s,
    "counter-increment"_s,
    "counter-reset"_s,
    "cursor"_s,
    "cx"_s,
    "cy"_s,
    "dominant-baseline"_s,
    "empty-cells"_s,
    "fallback"_s,
    "fill"_s,
    "fill-opacity"_s,
    "fill-rule"_s,
    "filter"_s,
    "flex-basis"_s,
    "flex-direction"_s,
    "flex-grow"_s,
    "flex-shrink"_s,
    "flex-wrap"_s,
    "float"_s,
    "flood-color"_s,
    "flood-opacity"_s,
    "font-display"_s,
    "glyph-orientation-horizontal"_s,
    "glyph-orientation-vertical"_s,
    "grid-auto-columns"_s,
    "grid-auto-flow"_s,
    "grid-auto-rows"_s,
    "grid-column-end"_s,
    "grid-column-start"_s,
    "grid-row-end"_s,
    "grid-row-start"_s,
    "grid-template-areas"_s,
    "grid-template-columns"_s,
    "grid-template-rows"_s,
    "hanging-punctuation"_s,
    "image-orientation"_s,
    "image-rendering"_s,
    "input-security"_s,
    "isolation"_s,
    "justify-content"_s,
    "justify-items"_s,
    "justify-self"_s,
    "kerning"_s,
    "lighting-color"_s,
    "line-break"_s,
    "line-height"_s,
    "list-style-image"_s,
    "list-style-position"_s,
    "list-style-type"_s,
    "marker-end"_s,
    "marker-mid"_s,
    "marker-start"_s,
    "mask-image"_s,
    "mask-origin"_s,
    "mask-repeat-x"_s,
    "mask-repeat-y"_s,
    "mask-size"_s,
    "mask-type"_s,
    "math-style"_s,
    "mix-blend-mode"_s,
    "negative"_s,
    "object-fit"_s,
    "object-position"_s,
    "offset-anchor"_s,
    "offset-distance"_s,
    "offset-path"_s,
    "offset-position"_s,
    "offset-rotate"_s,
    "opacity"_s,
    "order"_s,
    "orphans"_s,
    "outline-color"_s,
    "outline-offset"_s,
    "outline-style"_s,
    "outline-width"_s,
    "overflow-anchor"_s,
    "overflow-wrap"_s,
    "overflow-x"_s,
    "overflow-y"_s,
    "override-colors"_s,
    "pad"_s,
    "page"_s,
    "paint-order"_s,
    "perspective"_s,
    "perspective-origin-x"_s,
    "perspective-origin-y"_s,
    "pointer-events"_s,
    "position"_s,
    "prefix"_s,
    "print-color-adjust"_s,
    "quotes"_s,
    "r"_s,
    "range"_s,
    "resize"_s,
    "rotate"_s,
    "row-gap"_s,
    "rx"_s,
    "ry"_s,
    "scale"_s,
    "scroll-behavior"_s,
    "scroll-snap-align"_s,
    "scroll-snap-stop"_s,
    "scroll-snap-type"_s,
    "shape-image-threshold"_s,
    "shape-margin"_s,
    "shape-outside"_s,
    "shape-rendering"_s,
    "size"_s,
    "speak-as"_s,
    "src"_s,
    "stop-color"_s,
    "stop-opacity"_s,
    "stroke"_s,
    "stroke-color"_s,
    "stroke-dasharray"_s,
    "stroke-dashoffset"_s,
    "stroke-linecap"_s,
    "stroke-linejoin"_s,
    "stroke-miterlimit"_s,
    "stroke-opacity"_s,
    "stroke-width"_s,
    "suffix"_s,
    "symbols"_s,
    "system"_s,
    "tab-size"_s,
    "table-layout"_s,
    "text-align"_s,
    "text-align-last"_s,
    "text-anchor"_s,
    "text-decoration-color"_s,
    "text-decoration-line"_s,
    "text-decoration-skip-ink"_s,
    "text-decoration-style"_s,
    "text-decoration-thickness"_s,
    "text-emphasis-color"_s,
    "text-emphasis-position"_s,
    "text-emphasis-style"_s,
    "text-indent"_s,
    "text-justify"_s,
    "text-overflow"_s,
    "text-shadow"_s,
    "text-transform"_s,
    "text-underline-offset"_s,
    "text-underline-position"_s,
    "touch-action"_s,
    "transform"_s,
    "transform-box"_s,
    "transform-origin-x"_s,
    "transform-origin-y"_s,
    "transform-origin-z"_s,
    "transform-style"_s,
    "transition-delay"_s,
    "transition-duration"_s,
    "transition-property"_s,
    "transition-timing-function"_s,
    "translate"_s,
    "unicode-bidi"_s,
    "unicode-range"_s,
    "vector-effect"_s,
    "vertical-align"_s,
    "visibility"_s,
    "white-space"_s,
    "widows"_s,
    "will-change"_s,
    "word-break"_s,
    "word-spacing"_s,
    "x"_s,
    "y"_s,
    "z-index"_s,
    "-apple-color-filter"_s,
    "-webkit-backdrop-filter"_s,
    "-webkit-border-horizontal-spacing"_s,
    "-webkit-border-vertical-spacing"_s,
    "-webkit-box-align"_s,
    "-webkit-box-decoration-break"_s,
    "-webkit-box-direction"_s,
    "-webkit-box-flex"_s,
    "-webkit-box-flex-group"_s,
    "-webkit-box-lines"_s,
    "-webkit-box-ordinal-group"_s,
    "-webkit-box-orient"_s,
    "-webkit-box-pack"_s,
    "-webkit-box-reflect"_s,
    "-webkit-column-axis"_s,
    "-webkit-column-progression"_s,
    "-webkit-font-size-delta"_s,
    "-webkit-hyphenate-character"_s,
    "-webkit-hyphenate-limit-after"_s,
    "-webkit-hyphenate-limit-before"_s,
    "-webkit-hyphenate-limit-lines"_s,
    "-webkit-hyphens"_s,
    "-webkit-initial-letter"_s,
    "-webkit-line-align"_s,
    "-webkit-line-box-contain"_s,
    "-webkit-line-clamp"_s,
    "-webkit-line-grid"_s,
    "-webkit-line-snap"_s,
    "-webkit-marquee-direction"_s,
    "-webkit-marquee-increment"_s,
    "-webkit-marquee-repetition"_s,
    "-webkit-marquee-speed"_s,
    "-webkit-marquee-style"_s,
    "-webkit-mask-box-image"_s,
    "-webkit-mask-box-image-outset"_s,
    "-webkit-mask-box-image-repeat"_s,
    "-webkit-mask-box-image-slice"_s,
    "-webkit-mask-box-image-source"_s,
    "-webkit-mask-box-image-width"_s,
    "-webkit-mask-position-x"_s,
    "-webkit-mask-position-y"_s,
    "-webkit-nbsp-mode"_s,
    "-webkit-rtl-ordering"_s,
    "-webkit-tap-highlight-color"_s,
    "-webkit-text-decorations-in-effect"_s,
    "-webkit-text-fill-color"_s,
    "-webkit-text-security"_s,
    "-webkit-text-stroke-color"_s,
    "-webkit-text-stroke-width"_s,
    "-webkit-user-drag"_s,
    "-webkit-user-modify"_s,
    "-webkit-user-select"_s,
    "background-clip"_s,
    "background-origin"_s,
    "background-size"_s,
    "block-size"_s,
    "border-block-end-color"_s,
    "border-block-end-style"_s,
    "border-block-end-width"_s,
    "border-block-start-color"_s,
    "border-block-start-style"_s,
    "border-block-start-width"_s,
    "border-bottom-color"_s,
    "border-bottom-left-radius"_s,
    "border-bottom-right-radius"_s,
    "border-bottom-style"_s,
    "border-bottom-width"_s,
    "border-end-end-radius"_s,
    "border-end-start-radius"_s,
    "border-inline-end-color"_s,
    "border-inline-end-style"_s,
    "border-inline-end-width"_s,
    "border-inline-start-color"_s,
    "border-inline-start-style"_s,
    "border-inline-start-width"_s,
    "border-left-color"_s,
    "border-left-style"_s,
    "border-left-width"_s,
    "border-right-color"_s,
    "border-right-style"_s,
    "border-right-width"_s,
    "border-start-end-radius"_s,
    "border-start-start-radius"_s,
    "border-top-color"_s,
    "border-top-left-radius"_s,
    "border-top-right-radius"_s,
    "border-top-style"_s,
    "border-top-width"_s,
    "bottom"_s,
    "box-shadow"_s,
    "contain-intrinsic-block-size"_s,
    "contain-intrinsic-height"_s,
    "contain-intrinsic-inline-size"_s,
    "contain-intrinsic-width"_s,
    "height"_s,
    "inline-size"_s,
    "inset-block-end"_s,
    "inset-block-start"_s,
    "inset-inline-end"_s,
    "inset-inline-start"_s,
    "left"_s,
    "margin-block-end"_s,
    "margin-block-start"_s,
    "margin-bottom"_s,
    "margin-inline-end"_s,
    "margin-inline-start"_s,
    "margin-left"_s,
    "margin-right"_s,
    "margin-top"_s,
    "mask-clip"_s,
    "mask-composite"_s,
    "mask-mode"_s,
    "max-block-size"_s,
    "max-height"_s,
    "max-inline-size"_s,
    "max-width"_s,
    "min-block-size"_s,
    "min-height"_s,
    "min-inline-size"_s,
    "min-width"_s,
    "overscroll-behavior-block"_s,
    "overscroll-behavior-inline"_s,
    "overscroll-behavior-x"_s,
    "overscroll-behavior-y"_s,
    "padding-block-end"_s,
    "padding-block-start"_s,
    "padding-bottom"_s,
    "padding-inline-end"_s,
    "padding-inline-start"_s,
    "padding-left"_s,
    "padding-right"_s,
    "padding-top"_s,
    "right"_s,
    "scroll-margin-block-end"_s,
    "scroll-margin-block-start"_s,
    "scroll-margin-bottom"_s,
    "scroll-margin-inline-end"_s,
    "scroll-margin-inline-start"_s,
    "scroll-margin-left"_s,
    "scroll-margin-right"_s,
    "scroll-margin-top"_s,
    "scroll-padding-block-end"_s,
    "scroll-padding-block-start"_s,
    "scroll-padding-bottom"_s,
    "scroll-padding-inline-end"_s,
    "scroll-padding-inline-start"_s,
    "scroll-padding-left"_s,
    "scroll-padding-right"_s,
    "scroll-padding-top"_s,
    "text-combine-upright"_s,
    "top"_s,
    "width"_s,
    "-webkit-background-clip"_s,
    "-webkit-background-origin"_s,
    "-webkit-background-size"_s,
    "-webkit-box-shadow"_s,
    "-webkit-mask-clip"_s,
    "-webkit-mask-composite"_s,
    "-webkit-mask-source-type"_s,
    "-webkit-text-combine"_s,
    "all"_s,
    "animation"_s,
    "background"_s,
    "background-position"_s,
    "background-repeat"_s,
    "border"_s,
    "border-block"_s,
    "border-block-color"_s,
    "border-block-end"_s,
    "border-block-start"_s,
    "border-block-style"_s,
    "border-block-width"_s,
    "border-bottom"_s,
    "border-color"_s,
    "border-image"_s,
    "border-inline"_s,
    "border-inline-color"_s,
    "border-inline-end"_s,
    "border-inline-start"_s,
    "border-inline-style"_s,
    "border-inline-width"_s,
    "border-left"_s,
    "border-radius"_s,
    "border-right"_s,
    "border-spacing"_s,
    "border-style"_s,
    "border-top"_s,
    "border-width"_s,
    "column-rule"_s,
    "columns"_s,
    "contain-intrinsic-size"_s,
    "container"_s,
    "flex"_s,
    "flex-flow"_s,
    "font"_s,
    "font-variant"_s,
    "gap"_s,
    "grid"_s,
    "grid-area"_s,
    "grid-column"_s,
    "grid-row"_s,
    "grid-template"_s,
    "inset"_s,
    "inset-block"_s,
    "inset-inline"_s,
    "list-style"_s,
    "margin"_s,
    "margin-block"_s,
    "margin-inline"_s,
    "marker"_s,
    "mask"_s,
    "mask-position"_s,
    "mask-repeat"_s,
    "offset"_s,
    "outline"_s,
    "overflow"_s,
    "overscroll-behavior"_s,
    "padding"_s,
    "padding-block"_s,
    "padding-inline"_s,
    "page-break-after"_s,
    "page-break-before"_s,
    "page-break-inside"_s,
    "perspective-origin"_s,
    "place-content"_s,
    "place-items"_s,
    "place-self"_s,
    "scroll-margin"_s,
    "scroll-margin-block"_s,
    "scroll-margin-inline"_s,
    "scroll-padding"_s,
    "scroll-padding-block"_s,
    "scroll-padding-inline"_s,
    "text-decoration"_s,
    "text-decoration-skip"_s,
    "text-emphasis"_s,
    "transform-origin"_s,
    "transition"_s,
    "-webkit-border-image"_s,
    "-webkit-border-radius"_s,
    "-webkit-column-break-after"_s,
    "-webkit-column-break-before"_s,
    "-webkit-column-break-inside"_s,
    "-webkit-mask"_s,
    "-webkit-mask-position"_s,
    "-webkit-perspective"_s,
    "-webkit-text-decoration"_s,
    "-webkit-text-orientation"_s,
    "-webkit-text-stroke"_s,
};

enum
  {
    TOTAL_KEYWORDS = 636,
    MIN_WORD_LENGTH = 1,
    MAX_WORD_LENGTH = 34,
    MIN_HASH_VALUE = 2,
    MAX_HASH_VALUE = 8557
  };

/* maximum key range = 8556, duplicates = 1 */

class CSSPropertyNamesHash
{
private:
  static inline unsigned int propery_hash_function (const char *str, size_t len);
public:
  static const struct Property *findPropertyImpl (const char *str, size_t len);
};

inline unsigned int
CSSPropertyNamesHash::propery_hash_function (const char *str, size_t len)
{
  static const unsigned short asso_values[] =
    {
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558,    0,  180, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558,   55,  590,   10,
       105,    5,    2,  115,  212,    0, 2020,  680,    0,  360,
         0,    0,  130,   15,    5,   25,   35, 1455, 1155, 1480,
       777, 1625,  322,    0, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558, 8558,
      8558, 8558, 8558, 8558, 8558, 8558, 8558
    };
  unsigned int hval = 0;

  switch (len)
    {
      default:
        hval += asso_values[static_cast<unsigned char>(str[33])];
      /*FALLTHROUGH*/
      case 33:
        hval += asso_values[static_cast<unsigned char>(str[32])];
      /*FALLTHROUGH*/
      case 32:
        hval += asso_values[static_cast<unsigned char>(str[31])];
      /*FALLTHROUGH*/
      case 31:
        hval += asso_values[static_cast<unsigned char>(str[30])];
      /*FALLTHROUGH*/
      case 30:
        hval += asso_values[static_cast<unsigned char>(str[29])];
      /*FALLTHROUGH*/
      case 29:
        hval += asso_values[static_cast<unsigned char>(str[28])];
      /*FALLTHROUGH*/
      case 28:
        hval += asso_values[static_cast<unsigned char>(str[27])];
      /*FALLTHROUGH*/
      case 27:
        hval += asso_values[static_cast<unsigned char>(str[26])];
      /*FALLTHROUGH*/
      case 26:
        hval += asso_values[static_cast<unsigned char>(str[25])];
      /*FALLTHROUGH*/
      case 25:
        hval += asso_values[static_cast<unsigned char>(str[24])];
      /*FALLTHROUGH*/
      case 24:
        hval += asso_values[static_cast<unsigned char>(str[23])];
      /*FALLTHROUGH*/
      case 23:
        hval += asso_values[static_cast<unsigned char>(str[22])];
      /*FALLTHROUGH*/
      case 22:
        hval += asso_values[static_cast<unsigned char>(str[21])];
      /*FALLTHROUGH*/
      case 21:
        hval += asso_values[static_cast<unsigned char>(str[20])];
      /*FALLTHROUGH*/
      case 20:
        hval += asso_values[static_cast<unsigned char>(str[19])];
      /*FALLTHROUGH*/
      case 19:
        hval += asso_values[static_cast<unsigned char>(str[18])];
      /*FALLTHROUGH*/
      case 18:
        hval += asso_values[static_cast<unsigned char>(str[17])];
      /*FALLTHROUGH*/
      case 17:
        hval += asso_values[static_cast<unsigned char>(str[16])];
      /*FALLTHROUGH*/
      case 16:
        hval += asso_values[static_cast<unsigned char>(str[15]+1)];
      /*FALLTHROUGH*/
      case 15:
        hval += asso_values[static_cast<unsigned char>(str[14])];
      /*FALLTHROUGH*/
      case 14:
        hval += asso_values[static_cast<unsigned char>(str[13])];
      /*FALLTHROUGH*/
      case 13:
        hval += asso_values[static_cast<unsigned char>(str[12])];
      /*FALLTHROUGH*/
      case 12:
        hval += asso_values[static_cast<unsigned char>(str[11])];
      /*FALLTHROUGH*/
      case 11:
        hval += asso_values[static_cast<unsigned char>(str[10])];
      /*FALLTHROUGH*/
      case 10:
        hval += asso_values[static_cast<unsigned char>(str[9])];
      /*FALLTHROUGH*/
      case 9:
        hval += asso_values[static_cast<unsigned char>(str[8])];
      /*FALLTHROUGH*/
      case 8:
        hval += asso_values[static_cast<unsigned char>(str[7])];
      /*FALLTHROUGH*/
      case 7:
        hval += asso_values[static_cast<unsigned char>(str[6])];
      /*FALLTHROUGH*/
      case 6:
        hval += asso_values[static_cast<unsigned char>(str[5])];
      /*FALLTHROUGH*/
      case 5:
        hval += asso_values[static_cast<unsigned char>(str[4])];
      /*FALLTHROUGH*/
      case 4:
        hval += asso_values[static_cast<unsigned char>(str[3])];
      /*FALLTHROUGH*/
      case 3:
        hval += asso_values[static_cast<unsigned char>(str[2])];
      /*FALLTHROUGH*/
      case 2:
        hval += asso_values[static_cast<unsigned char>(str[1])];
      /*FALLTHROUGH*/
      case 1:
        hval += asso_values[static_cast<unsigned char>(str[0])];
        break;
    }
  return hval;
}

static const struct Property property_wordlist[] =
  {
#line 649 "CSSPropertyNames.gperf"
    {"fill", CSSPropertyFill},
#line 731 "CSSPropertyNames.gperf"
    {"r", CSSPropertyR},
#line 554 "CSSPropertyNames.gperf"
    {"color", CSSPropertyColor},
#line 1003 "CSSPropertyNames.gperf"
    {"font", CSSPropertyFont},
#line 749 "CSSPropertyNames.gperf"
    {"src", CSSPropertySrc},
#line 909 "CSSPropertyNames.gperf"
    {"left", CSSPropertyLeft},
#line 652 "CSSPropertyNames.gperf"
    {"filter", CSSPropertyFilter},
#line 969 "CSSPropertyNames.gperf"
    {"all", CSSPropertyAll},
#line 1011 "CSSPropertyNames.gperf"
    {"inset", CSSPropertyInset},
#line 1022 "CSSPropertyNames.gperf"
    {"offset", CSSPropertyOffset},
#line 1013 "CSSPropertyNames.gperf"
    {"inset-inline", CSSPropertyInsetInline},
#line 623 "CSSPropertyNames.gperf"
    {"clear", CSSPropertyClear},
#line 907 "CSSPropertyNames.gperf"
    {"inset-inline-end", CSSPropertyInsetInlineEnd},
#line 640 "CSSPropertyNames.gperf"
    {"content", CSSPropertyContent},
#line 587 "CSSPropertyNames.gperf"
    {"alt", CSSPropertyAlt},
#line 658 "CSSPropertyNames.gperf"
    {"float", CSSPropertyFloat},
#line 738 "CSSPropertyNames.gperf"
    {"scale", CSSPropertyScale},
#line 637 "CSSPropertyNames.gperf"
    {"contain", CSSPropertyContain},
#line 1000 "CSSPropertyNames.gperf"
    {"container", CSSPropertyContainer},
#line 678 "CSSPropertyNames.gperf"
    {"isolation", CSSPropertyIsolation},
#line 709 "CSSPropertyNames.gperf"
    {"order", CSSPropertyOrder},
#line 659 "CSSPropertyNames.gperf"
    {"flood-color", CSSPropertyFloodColor},
#line 622 "CSSPropertyNames.gperf"
    {"caret-color", CSSPropertyCaretColor},
#line 581 "CSSPropertyNames.gperf"
    {"accent-color", CSSPropertyAccentColor},
#line 734 "CSSPropertyNames.gperf"
    {"rotate", CSSPropertyRotate},
#line 624 "CSSPropertyNames.gperf"
    {"clip", CSSPropertyClip},
#line 1046 "CSSPropertyNames.gperf"
    {"transition", CSSPropertyTransition},
#line 555 "CSSPropertyNames.gperf"
    {"direction", CSSPropertyDirection},
#line 959 "CSSPropertyNames.gperf"
    {"top", CSSPropertyTop},
#line 732 "CSSPropertyNames.gperf"
    {"range", CSSPropertyRange},
#line 727 "CSSPropertyNames.gperf"
    {"position", CSSPropertyPosition},
#line 585 "CSSPropertyNames.gperf"
    {"align-self", CSSPropertyAlignSelf},
#line 707 "CSSPropertyNames.gperf"
    {"offset-rotate", CSSPropertyOffsetRotate},
#line 750 "CSSPropertyNames.gperf"
    {"stop-color", CSSPropertyStopColor},
#line 795 "CSSPropertyNames.gperf"
    {"translate", CSSPropertyTranslate},
#line 1006 "CSSPropertyNames.gperf"
    {"grid", CSSPropertyGrid},
#line 1035 "CSSPropertyNames.gperf"
    {"place-self", CSSPropertyPlaceSelf},
#line 583 "CSSPropertyNames.gperf"
    {"align-content", CSSPropertyAlignContent},
#line 706 "CSSPropertyNames.gperf"
    {"offset-position", CSSPropertyOffsetPosition},
#line 1033 "CSSPropertyNames.gperf"
    {"place-content", CSSPropertyPlaceContent},
#line 720 "CSSPropertyNames.gperf"
    {"pad", CSSPropertyPad},
#line 1005 "CSSPropertyNames.gperf"
    {"gap", CSSPropertyGap},
#line 561 "CSSPropertyNames.gperf"
    {"font-palette", CSSPropertyFontPalette},
#line 704 "CSSPropertyNames.gperf"
    {"offset-distance", CSSPropertyOffsetDistance},
#line 721 "CSSPropertyNames.gperf"
    {"page", CSSPropertyPage},
#line 741 "CSSPropertyNames.gperf"
    {"scroll-snap-stop", CSSPropertyScrollSnapStop},
#line 722 "CSSPropertyNames.gperf"
    {"paint-order", CSSPropertyPaintOrder},
#line 1007 "CSSPropertyNames.gperf"
    {"grid-area", CSSPropertyGridArea},
#line 703 "CSSPropertyNames.gperf"
    {"offset-anchor", CSSPropertyOffsetAnchor},
#line 747 "CSSPropertyNames.gperf"
    {"size", CSSPropertySize},
#line 598 "CSSPropertyNames.gperf"
    {"aspect-ratio", CSSPropertyAspectRatio},
#line 904 "CSSPropertyNames.gperf"
    {"inline-size", CSSPropertyInlineSize},
#line 733 "CSSPropertyNames.gperf"
    {"resize", CSSPropertyResize},
#line 563 "CSSPropertyNames.gperf"
    {"font-stretch", CSSPropertyFontStretch},
#line 621 "CSSPropertyNames.gperf"
    {"caption-side", CSSPropertyCaptionSide},
#line 941 "CSSPropertyNames.gperf"
    {"right", CSSPropertyRight},
#line 562 "CSSPropertyNames.gperf"
    {"font-size", CSSPropertyFontSize},
#line 560 "CSSPropertyNames.gperf"
    {"font-optical-sizing", CSSPropertyFontOpticalSizing},
#line 580 "CSSPropertyNames.gperf"
    {"letter-spacing", CSSPropertyLetterSpacing},
#line 710 "CSSPropertyNames.gperf"
    {"orphans", CSSPropertyOrphans},
#line 597 "CSSPropertyNames.gperf"
    {"appearance", CSSPropertyAppearance},
#line 785 "CSSPropertyNames.gperf"
    {"transform", CSSPropertyTransform},
#line 683 "CSSPropertyNames.gperf"
    {"lighting-color", CSSPropertyLightingColor},
#line 705 "CSSPropertyNames.gperf"
    {"offset-path", CSSPropertyOffsetPath},
#line 970 "CSSPropertyNames.gperf"
    {"animation", CSSPropertyAnimation},
#line 1026 "CSSPropertyNames.gperf"
    {"padding", CSSPropertyPadding},
#line 1028 "CSSPropertyNames.gperf"
    {"padding-inline", CSSPropertyPaddingInline},
#line 740 "CSSPropertyNames.gperf"
    {"scroll-snap-align", CSSPropertyScrollSnapAlign},
#line 1177 "CSSPropertyNames.gperf"
    {"grid-gap", CSSPropertyGap},
#line 638 "CSSPropertyNames.gperf"
    {"container-name", CSSPropertyContainerName},
#line 1015 "CSSPropertyNames.gperf"
    {"margin", CSSPropertyMargin},
#line 1017 "CSSPropertyNames.gperf"
    {"margin-inline", CSSPropertyMarginInline},
#line 1039 "CSSPropertyNames.gperf"
    {"scroll-padding", CSSPropertyScrollPadding},
#line 938 "CSSPropertyNames.gperf"
    {"padding-left", CSSPropertyPaddingLeft},
#line 625 "CSSPropertyNames.gperf"
    {"clip-path", CSSPropertyClipPath},
#line 1036 "CSSPropertyNames.gperf"
    {"scroll-margin", CSSPropertyScrollMargin},
#line 915 "CSSPropertyNames.gperf"
    {"margin-left", CSSPropertyMarginLeft},
#line 903 "CSSPropertyNames.gperf"
    {"height", CSSPropertyHeight},
#line 1038 "CSSPropertyNames.gperf"
    {"scroll-margin-inline", CSSPropertyScrollMarginInline},
#line 685 "CSSPropertyNames.gperf"
    {"line-height", CSSPropertyLineHeight},
#line 584 "CSSPropertyNames.gperf"
    {"align-items", CSSPropertyAlignItems},
#line 1045 "CSSPropertyNames.gperf"
    {"transform-origin", CSSPropertyTransformOrigin},
#line 947 "CSSPropertyNames.gperf"
    {"scroll-margin-left", CSSPropertyScrollMarginLeft},
#line 592 "CSSPropertyNames.gperf"
    {"animation-fill-mode", CSSPropertyAnimationFillMode},
#line 936 "CSSPropertyNames.gperf"
    {"padding-inline-end", CSSPropertyPaddingInlineEnd},
#line 1034 "CSSPropertyNames.gperf"
    {"place-items", CSSPropertyPlaceItems},
#line 551 "CSSPropertyNames.gperf"
    {"color-scheme", CSSPropertyColorScheme},
#line 791 "CSSPropertyNames.gperf"
    {"transition-delay", CSSPropertyTransitionDelay},
#line 913 "CSSPropertyNames.gperf"
    {"margin-inline-end", CSSPropertyMarginInlineEnd},
#line 746 "CSSPropertyNames.gperf"
    {"shape-rendering", CSSPropertyShapeRendering},
#line 940 "CSSPropertyNames.gperf"
    {"padding-top", CSSPropertyPaddingTop},
#line 937 "CSSPropertyNames.gperf"
    {"padding-inline-start", CSSPropertyPaddingInlineStart},
#line 576 "CSSPropertyNames.gperf"
    {"zoom", CSSPropertyZoom},
#line 945 "CSSPropertyNames.gperf"
    {"scroll-margin-inline-end", CSSPropertyScrollMarginInlineEnd},
#line 917 "CSSPropertyNames.gperf"
    {"margin-top", CSSPropertyMarginTop},
#line 974 "CSSPropertyNames.gperf"
    {"border", CSSPropertyBorder},
#line 984 "CSSPropertyNames.gperf"
    {"border-inline", CSSPropertyBorderInline},
#line 927 "CSSPropertyNames.gperf"
    {"min-inline-size", CSSPropertyMinInlineSize},
#line 982 "CSSPropertyNames.gperf"
    {"border-color", CSSPropertyBorderColor},
#line 946 "CSSPropertyNames.gperf"
    {"scroll-margin-inline-start", CSSPropertyScrollMarginInlineStart},
#line 809 "CSSPropertyNames.gperf"
    {"-apple-color-filter", CSSPropertyAppleColorFilter},
#line 752 "CSSPropertyNames.gperf"
    {"stroke", CSSPropertyStroke},
#line 990 "CSSPropertyNames.gperf"
    {"border-left", CSSPropertyBorderLeft},
#line 908 "CSSPropertyNames.gperf"
    {"inset-inline-start", CSSPropertyInsetInlineStart},
#line 753 "CSSPropertyNames.gperf"
    {"stroke-color", CSSPropertyStrokeColor},
#line 676 "CSSPropertyNames.gperf"
    {"image-rendering", CSSPropertyImageRendering},
#line 806 "CSSPropertyNames.gperf"
    {"x", CSSPropertyX},
#line 736 "CSSPropertyNames.gperf"
    {"rx", CSSPropertyRx},
#line 1001 "CSSPropertyNames.gperf"
    {"flex", CSSPropertyFlex},
#line 644 "CSSPropertyNames.gperf"
    {"cx", CSSPropertyCx},
#line 675 "CSSPropertyNames.gperf"
    {"image-orientation", CSSPropertyImageOrientation},
#line 682 "CSSPropertyNames.gperf"
    {"kerning", CSSPropertyKerning},
#line 986 "CSSPropertyNames.gperf"
    {"border-inline-end", CSSPropertyBorderInlineEnd},
#line 878 "CSSPropertyNames.gperf"
    {"border-inline-end-color", CSSPropertyBorderInlineEndColor},
#line 559 "CSSPropertyNames.gperf"
    {"font-kerning", CSSPropertyFontKerning},
#line 1010 "CSSPropertyNames.gperf"
    {"grid-template", CSSPropertyGridTemplate},
#line 985 "CSSPropertyNames.gperf"
    {"border-inline-color", CSSPropertyBorderInlineColor},
#line 949 "CSSPropertyNames.gperf"
    {"scroll-margin-top", CSSPropertyScrollMarginTop},
#line 995 "CSSPropertyNames.gperf"
    {"border-top", CSSPropertyBorderTop},
#line 939 "CSSPropertyNames.gperf"
    {"padding-right", CSSPropertyPaddingRight},
#line 1180 "CSSPropertyNames.gperf"
    {"scroll-snap-margin", CSSPropertyScrollMargin},
#line 884 "CSSPropertyNames.gperf"
    {"border-left-color", CSSPropertyBorderLeftColor},
#line 916 "CSSPropertyNames.gperf"
    {"margin-right", CSSPropertyMarginRight},
#line 892 "CSSPropertyNames.gperf"
    {"border-top-color", CSSPropertyBorderTopColor},
#line 728 "CSSPropertyNames.gperf"
    {"prefix", CSSPropertyPrefix},
#line 1164 "CSSPropertyNames.gperf"
    {"scroll-snap-margin-left", CSSPropertyScrollMarginLeft},
#line 594 "CSSPropertyNames.gperf"
    {"animation-name", CSSPropertyAnimationName},
#line 789 "CSSPropertyNames.gperf"
    {"transform-origin-z", CSSPropertyTransformOriginZ},
#line 610 "CSSPropertyNames.gperf"
    {"border-collapse", CSSPropertyBorderCollapse},
#line 956 "CSSPropertyNames.gperf"
    {"scroll-padding-right", CSSPropertyScrollPaddingRight},
#line 926 "CSSPropertyNames.gperf"
    {"min-height", CSSPropertyMinHeight},
#line 608 "CSSPropertyNames.gperf"
    {"base-palette", CSSPropertyBasePalette},
#line 654 "CSSPropertyNames.gperf"
    {"flex-direction", CSSPropertyFlexDirection},
#line 756 "CSSPropertyNames.gperf"
    {"stroke-linecap", CSSPropertyStrokeLinecap},
#line 955 "CSSPropertyNames.gperf"
    {"scroll-padding-left", CSSPropertyScrollPaddingLeft},
#line 609 "CSSPropertyNames.gperf"
    {"baseline-shift", CSSPropertyBaselineShift},
#line 744 "CSSPropertyNames.gperf"
    {"shape-margin", CSSPropertyShapeMargin},
#line 748 "CSSPropertyNames.gperf"
    {"speak-as", CSSPropertySpeakAs},
#line 574 "CSSPropertyNames.gperf"
    {"text-orientation", CSSPropertyTextOrientation},
#line 952 "CSSPropertyNames.gperf"
    {"scroll-padding-bottom", CSSPropertyScrollPaddingBottom},
#line 777 "CSSPropertyNames.gperf"
    {"text-indent", CSSPropertyTextIndent},
#line 671 "CSSPropertyNames.gperf"
    {"grid-template-areas", CSSPropertyGridTemplateAreas},
#line 897 "CSSPropertyNames.gperf"
    {"bottom", CSSPropertyBottom},
#line 766 "CSSPropertyNames.gperf"
    {"text-align", CSSPropertyTextAlign},
#line 764 "CSSPropertyNames.gperf"
    {"tab-size", CSSPropertyTabSize},
#line 993 "CSSPropertyNames.gperf"
    {"border-spacing", CSSPropertyBorderSpacing},
#line 1166 "CSSPropertyNames.gperf"
    {"scroll-snap-margin-top", CSSPropertyScrollMarginTop},
#line 1042 "CSSPropertyNames.gperf"
    {"text-decoration", CSSPropertyTextDecoration},
#line 588 "CSSPropertyNames.gperf"
    {"animation-composition", CSSPropertyAnimationComposition},
#line 992 "CSSPropertyNames.gperf"
    {"border-right", CSSPropertyBorderRight},
#line 575 "CSSPropertyNames.gperf"
    {"text-rendering", CSSPropertyTextRendering},
#line 1018 "CSSPropertyNames.gperf"
    {"marker", CSSPropertyMarker},
#line 1019 "CSSPropertyNames.gperf"
    {"mask", CSSPropertyMask},
#line 768 "CSSPropertyNames.gperf"
    {"text-anchor", CSSPropertyTextAnchor},
#line 767 "CSSPropertyNames.gperf"
    {"text-align-last", CSSPropertyTextAlignLast},
#line 808 "CSSPropertyNames.gperf"
    {"z-index", CSSPropertyZIndex},
#line 755 "CSSPropertyNames.gperf"
    {"stroke-dashoffset", CSSPropertyStrokeDashoffset},
#line 689 "CSSPropertyNames.gperf"
    {"marker-end", CSSPropertyMarkerEnd},
#line 646 "CSSPropertyNames.gperf"
    {"dominant-baseline", CSSPropertyDominantBaseline},
#line 693 "CSSPropertyNames.gperf"
    {"mask-origin", CSSPropertyMaskOrigin},
#line 983 "CSSPropertyNames.gperf"
    {"border-image", CSSPropertyBorderImage},
#line 1165 "CSSPropertyNames.gperf"
    {"scroll-snap-margin-right", CSSPropertyScrollMarginRight},
#line 1040 "CSSPropertyNames.gperf"
    {"scroll-padding-block", CSSPropertyScrollPaddingBlock},
#line 770 "CSSPropertyNames.gperf"
    {"text-decoration-line", CSSPropertyTextDecorationLine},
#line 918 "CSSPropertyNames.gperf"
    {"mask-clip", CSSPropertyMaskClip},
#line 769 "CSSPropertyNames.gperf"
    {"text-decoration-color", CSSPropertyTextDecorationColor},
#line 691 "CSSPropertyNames.gperf"
    {"marker-start", CSSPropertyMarkerStart},
#line 798 "CSSPropertyNames.gperf"
    {"vector-effect", CSSPropertyVectorEffect},
#line 1020 "CSSPropertyNames.gperf"
    {"mask-position", CSSPropertyMaskPosition},
#line 719 "CSSPropertyNames.gperf"
    {"override-colors", CSSPropertyOverrideColors},
#line 781 "CSSPropertyNames.gperf"
    {"text-transform", CSSPropertyTextTransform},
#line 684 "CSSPropertyNames.gperf"
    {"line-break", CSSPropertyLineBreak},
#line 1004 "CSSPropertyNames.gperf"
    {"font-variant", CSSPropertyFontVariant},
#line 1012 "CSSPropertyNames.gperf"
    {"inset-block", CSSPropertyInsetBlock},
#line 1021 "CSSPropertyNames.gperf"
    {"mask-repeat", CSSPropertyMaskRepeat},
#line 950 "CSSPropertyNames.gperf"
    {"scroll-padding-block-end", CSSPropertyScrollPaddingBlockEnd},
#line 612 "CSSPropertyNames.gperf"
    {"border-image-repeat", CSSPropertyBorderImageRepeat},
#line 700 "CSSPropertyNames.gperf"
    {"negative", CSSPropertyNegative},
#line 787 "CSSPropertyNames.gperf"
    {"transform-origin-x", CSSPropertyTransformOriginX},
#line 648 "CSSPropertyNames.gperf"
    {"fallback", CSSPropertyFallback},
#line 726 "CSSPropertyNames.gperf"
    {"pointer-events", CSSPropertyPointerEvents},
#line 951 "CSSPropertyNames.gperf"
    {"scroll-padding-block-start", CSSPropertyScrollPaddingBlockStart},
#line 799 "CSSPropertyNames.gperf"
    {"vertical-align", CSSPropertyVerticalAlign},
#line 617 "CSSPropertyNames.gperf"
    {"break-after", CSSPropertyBreakAfter},
#line 567 "CSSPropertyNames.gperf"
    {"font-variant-caps", CSSPropertyFontVariantCaps},
#line 887 "CSSPropertyNames.gperf"
    {"border-right-color", CSSPropertyBorderRightColor},
#line 905 "CSSPropertyNames.gperf"
    {"inset-block-end", CSSPropertyInsetBlockEnd},
#line 888 "CSSPropertyNames.gperf"
    {"border-right-style", CSSPropertyBorderRightStyle},
#line 651 "CSSPropertyNames.gperf"
    {"fill-rule", CSSPropertyFillRule},
#line 619 "CSSPropertyNames.gperf"
    {"break-inside", CSSPropertyBreakInside},
#line 696 "CSSPropertyNames.gperf"
    {"mask-size", CSSPropertyMaskSize},
#line 653 "CSSPropertyNames.gperf"
    {"flex-basis", CSSPropertyFlexBasis},
#line 1023 "CSSPropertyNames.gperf"
    {"outline", CSSPropertyOutline},
#line 643 "CSSPropertyNames.gperf"
    {"cursor", CSSPropertyCursor},
#line 723 "CSSPropertyNames.gperf"
    {"perspective", CSSPropertyPerspective},
#line 711 "CSSPropertyNames.gperf"
    {"outline-color", CSSPropertyOutlineColor},
#line 906 "CSSPropertyNames.gperf"
    {"inset-block-start", CSSPropertyInsetBlockStart},
#line 935 "CSSPropertyNames.gperf"
    {"padding-bottom", CSSPropertyPaddingBottom},
#line 730 "CSSPropertyNames.gperf"
    {"quotes", CSSPropertyQuotes},
#line 571 "CSSPropertyNames.gperf"
    {"font-variant-position", CSSPropertyFontVariantPosition},
#line 923 "CSSPropertyNames.gperf"
    {"max-inline-size", CSSPropertyMaxInlineSize},
#line 912 "CSSPropertyNames.gperf"
    {"margin-bottom", CSSPropertyMarginBottom},
#line 743 "CSSPropertyNames.gperf"
    {"shape-image-threshold", CSSPropertyShapeImageThreshold},
#line 712 "CSSPropertyNames.gperf"
    {"outline-offset", CSSPropertyOutlineOffset},
#line 690 "CSSPropertyNames.gperf"
    {"marker-mid", CSSPropertyMarkerMid},
#line 642 "CSSPropertyNames.gperf"
    {"counter-reset", CSSPropertyCounterReset},
#line 754 "CSSPropertyNames.gperf"
    {"stroke-dasharray", CSSPropertyStrokeDasharray},
#line 920 "CSSPropertyNames.gperf"
    {"mask-mode", CSSPropertyMaskMode},
#line 572 "CSSPropertyNames.gperf"
    {"font-variation-settings", CSSPropertyFontVariationSettings},
#line 626 "CSSPropertyNames.gperf"
    {"clip-rule", CSSPropertyClipRule},
#line 568 "CSSPropertyNames.gperf"
    {"font-variant-east-asian", CSSPropertyFontVariantEastAsian},
#line 807 "CSSPropertyNames.gperf"
    {"y", CSSPropertyY},
#line 737 "CSSPropertyNames.gperf"
    {"ry", CSSPropertyRy},
#line 864 "CSSPropertyNames.gperf"
    {"block-size", CSSPropertyBlockSize},
#line 645 "CSSPropertyNames.gperf"
    {"cy", CSSPropertyCy},
#line 692 "CSSPropertyNames.gperf"
    {"mask-image", CSSPropertyMaskImage},
#line 1044 "CSSPropertyNames.gperf"
    {"text-emphasis", CSSPropertyTextEmphasis},
#line 1031 "CSSPropertyNames.gperf"
    {"page-break-inside", CSSPropertyPageBreakInside},
#line 919 "CSSPropertyNames.gperf"
    {"mask-composite", CSSPropertyMaskComposite},
#line 627 "CSSPropertyNames.gperf"
    {"color-interpolation", CSSPropertyColorInterpolation},
#line 656 "CSSPropertyNames.gperf"
    {"flex-shrink", CSSPropertyFlexShrink},
#line 1009 "CSSPropertyNames.gperf"
    {"grid-row", CSSPropertyGridRow},
#line 1032 "CSSPropertyNames.gperf"
    {"perspective-origin", CSSPropertyPerspectiveOrigin},
#line 944 "CSSPropertyNames.gperf"
    {"scroll-margin-bottom", CSSPropertyScrollMarginBottom},
#line 564 "CSSPropertyNames.gperf"
    {"font-style", CSSPropertyFontStyle},
#line 981 "CSSPropertyNames.gperf"
    {"border-bottom", CSSPropertyBorderBottom},
#line 1014 "CSSPropertyNames.gperf"
    {"list-style", CSSPropertyListStyle},
#line 797 "CSSPropertyNames.gperf"
    {"unicode-range", CSSPropertyUnicodeRange},
#line 1029 "CSSPropertyNames.gperf"
    {"page-break-after", CSSPropertyPageBreakAfter},
#line 922 "CSSPropertyNames.gperf"
    {"max-height", CSSPropertyMaxHeight},
#line 628 "CSSPropertyNames.gperf"
    {"color-interpolation-filters", CSSPropertyColorInterpolationFilters},
#line 735 "CSSPropertyNames.gperf"
    {"row-gap", CSSPropertyRowGap},
#line 1027 "CSSPropertyNames.gperf"
    {"padding-block", CSSPropertyPaddingBlock},
#line 774 "CSSPropertyNames.gperf"
    {"text-emphasis-color", CSSPropertyTextEmphasisColor},
#line 784 "CSSPropertyNames.gperf"
    {"touch-action", CSSPropertyTouchAction},
#line 1016 "CSSPropertyNames.gperf"
    {"margin-block", CSSPropertyMarginBlock},
#line 669 "CSSPropertyNames.gperf"
    {"grid-row-end", CSSPropertyGridRowEnd},
#line 910 "CSSPropertyNames.gperf"
    {"margin-block-end", CSSPropertyMarginBlockEnd},
#line 630 "CSSPropertyNames.gperf"
    {"column-fill", CSSPropertyColumnFill},
#line 616 "CSSPropertyNames.gperf"
    {"box-sizing", CSSPropertyBoxSizing},
#line 960 "CSSPropertyNames.gperf"
    {"width", CSSPropertyWidth},
#line 998 "CSSPropertyNames.gperf"
    {"columns", CSSPropertyColumns},
#line 786 "CSSPropertyNames.gperf"
    {"transform-box", CSSPropertyTransformBox},
#line 708 "CSSPropertyNames.gperf"
    {"opacity", CSSPropertyOpacity},
#line 650 "CSSPropertyNames.gperf"
    {"fill-opacity", CSSPropertyFillOpacity},
#line 670 "CSSPropertyNames.gperf"
    {"grid-row-start", CSSPropertyGridRowStart},
#line 871 "CSSPropertyNames.gperf"
    {"border-bottom-color", CSSPropertyBorderBottomColor},
#line 803 "CSSPropertyNames.gperf"
    {"will-change", CSSPropertyWillChange},
#line 573 "CSSPropertyNames.gperf"
    {"font-weight", CSSPropertyFontWeight},
#line 933 "CSSPropertyNames.gperf"
    {"padding-block-end", CSSPropertyPaddingBlockEnd},
#line 1163 "CSSPropertyNames.gperf"
    {"scroll-snap-margin-bottom", CSSPropertyScrollMarginBottom},
#line 639 "CSSPropertyNames.gperf"
    {"container-type", CSSPropertyContainerType},
#line 805 "CSSPropertyNames.gperf"
    {"word-spacing", CSSPropertyWordSpacing},
#line 641 "CSSPropertyNames.gperf"
    {"counter-increment", CSSPropertyCounterIncrement},
#line 556 "CSSPropertyNames.gperf"
    {"display", CSSPropertyDisplay},
#line 618 "CSSPropertyNames.gperf"
    {"break-before", CSSPropertyBreakBefore},
#line 801 "CSSPropertyNames.gperf"
    {"white-space", CSSPropertyWhiteSpace},
#line 660 "CSSPropertyNames.gperf"
    {"flood-opacity", CSSPropertyFloodOpacity},
#line 661 "CSSPropertyNames.gperf"
    {"font-display", CSSPropertyFontDisplay},
#line 775 "CSSPropertyNames.gperf"
    {"text-emphasis-position", CSSPropertyTextEmphasisPosition},
#line 565 "CSSPropertyNames.gperf"
    {"font-synthesis", CSSPropertyFontSynthesis},
#line 975 "CSSPropertyNames.gperf"
    {"border-block", CSSPropertyBorderBlock},
#line 925 "CSSPropertyNames.gperf"
    {"min-block-size", CSSPropertyMinBlockSize},
#line 977 "CSSPropertyNames.gperf"
    {"border-block-end", CSSPropertyBorderBlockEnd},
#line 1107 "CSSPropertyNames.gperf"
    {"grid-row-gap", CSSPropertyRowGap},
#line 865 "CSSPropertyNames.gperf"
    {"border-block-end-color", CSSPropertyBorderBlockEndColor},
#line 635 "CSSPropertyNames.gperf"
    {"column-span", CSSPropertyColumnSpan},
#line 742 "CSSPropertyNames.gperf"
    {"scroll-snap-type", CSSPropertyScrollSnapType},
#line 751 "CSSPropertyNames.gperf"
    {"stop-opacity", CSSPropertyStopOpacity},
#line 1008 "CSSPropertyNames.gperf"
    {"grid-column", CSSPropertyGridColumn},
#line 745 "CSSPropertyNames.gperf"
    {"shape-outside", CSSPropertyShapeOutside},
#line 739 "CSSPropertyNames.gperf"
    {"scroll-behavior", CSSPropertyScrollBehavior},
#line 763 "CSSPropertyNames.gperf"
    {"system", CSSPropertySystem},
#line 557 "CSSPropertyNames.gperf"
    {"font-family", CSSPropertyFontFamily},
#line 1043 "CSSPropertyNames.gperf"
    {"text-decoration-skip", CSSPropertyTextDecorationSkip},
#line 590 "CSSPropertyNames.gperf"
    {"animation-direction", CSSPropertyAnimationDirection},
#line 793 "CSSPropertyNames.gperf"
    {"transition-property", CSSPropertyTransitionProperty},
#line 552 "CSSPropertyNames.gperf"
    {"writing-mode", CSSPropertyWritingMode},
#line 914 "CSSPropertyNames.gperf"
    {"margin-inline-start", CSSPropertyMarginInlineStart},
#line 631 "CSSPropertyNames.gperf"
    {"column-gap", CSSPropertyColumnGap},
#line 694 "CSSPropertyNames.gperf"
    {"mask-repeat-x", CSSPropertyMaskRepeatX},
#line 957 "CSSPropertyNames.gperf"
    {"scroll-padding-top", CSSPropertyScrollPaddingTop},
#line 667 "CSSPropertyNames.gperf"
    {"grid-column-end", CSSPropertyGridColumnEnd},
#line 794 "CSSPropertyNames.gperf"
    {"transition-timing-function", CSSPropertyTransitionTimingFunction},
#line 790 "CSSPropertyNames.gperf"
    {"transform-style", CSSPropertyTransformStyle},
#line 928 "CSSPropertyNames.gperf"
    {"min-width", CSSPropertyMinWidth},
#line 647 "CSSPropertyNames.gperf"
    {"empty-cells", CSSPropertyEmptyCells},
#line 1037 "CSSPropertyNames.gperf"
    {"scroll-margin-block", CSSPropertyScrollMarginBlock},
#line 668 "CSSPropertyNames.gperf"
    {"grid-column-start", CSSPropertyGridColumnStart},
#line 788 "CSSPropertyNames.gperf"
    {"transform-origin-y", CSSPropertyTransformOriginY},
#line 773 "CSSPropertyNames.gperf"
    {"text-decoration-thickness", CSSPropertyTextDecorationThickness},
#line 761 "CSSPropertyNames.gperf"
    {"suffix", CSSPropertySuffix},
#line 1002 "CSSPropertyNames.gperf"
    {"flex-flow", CSSPropertyFlexFlow},
#line 1030 "CSSPropertyNames.gperf"
    {"page-break-before", CSSPropertyPageBreakBefore},
#line 796 "CSSPropertyNames.gperf"
    {"unicode-bidi", CSSPropertyUnicodeBidi},
#line 686 "CSSPropertyNames.gperf"
    {"list-style-image", CSSPropertyListStyleImage},
#line 987 "CSSPropertyNames.gperf"
    {"border-inline-start", CSSPropertyBorderInlineStart},
#line 589 "CSSPropertyNames.gperf"
    {"animation-delay", CSSPropertyAnimationDelay},
#line 881 "CSSPropertyNames.gperf"
    {"border-inline-start-color", CSSPropertyBorderInlineStartColor},
#line 699 "CSSPropertyNames.gperf"
    {"mix-blend-mode", CSSPropertyMixBlendMode},
#line 942 "CSSPropertyNames.gperf"
    {"scroll-margin-block-end", CSSPropertyScrollMarginBlockEnd},
#line 1081 "CSSPropertyNames.gperf"
    {"grid-column-gap", CSSPropertyColumnGap},
#line 698 "CSSPropertyNames.gperf"
    {"math-style", CSSPropertyMathStyle},
#line 991 "CSSPropertyNames.gperf"
    {"border-radius", CSSPropertyBorderRadius},
#line 976 "CSSPropertyNames.gperf"
    {"border-block-color", CSSPropertyBorderBlockColor},
#line 943 "CSSPropertyNames.gperf"
    {"scroll-margin-block-start", CSSPropertyScrollMarginBlockStart},
#line 979 "CSSPropertyNames.gperf"
    {"border-block-style", CSSPropertyBorderBlockStyle},
#line 655 "CSSPropertyNames.gperf"
    {"flex-grow", CSSPropertyFlexGrow},
#line 994 "CSSPropertyNames.gperf"
    {"border-style", CSSPropertyBorderStyle},
#line 614 "CSSPropertyNames.gperf"
    {"border-image-source", CSSPropertyBorderImageSource},
#line 657 "CSSPropertyNames.gperf"
    {"flex-wrap", CSSPropertyFlexWrap},
#line 595 "CSSPropertyNames.gperf"
    {"animation-play-state", CSSPropertyAnimationPlayState},
#line 673 "CSSPropertyNames.gperf"
    {"grid-template-rows", CSSPropertyGridTemplateRows},
#line 896 "CSSPropertyNames.gperf"
    {"border-top-width", CSSPropertyBorderTopWidth},
#line 724 "CSSPropertyNames.gperf"
    {"perspective-origin-x", CSSPropertyPerspectiveOriginX},
#line 783 "CSSPropertyNames.gperf"
    {"text-underline-position", CSSPropertyTextUnderlinePosition},
#line 911 "CSSPropertyNames.gperf"
    {"margin-block-start", CSSPropertyMarginBlockStart},
#line 879 "CSSPropertyNames.gperf"
    {"border-inline-end-style", CSSPropertyBorderInlineEndStyle},
#line 890 "CSSPropertyNames.gperf"
    {"border-start-end-radius", CSSPropertyBorderStartEndRadius},
#line 996 "CSSPropertyNames.gperf"
    {"border-width", CSSPropertyBorderWidth},
#line 999 "CSSPropertyNames.gperf"
    {"contain-intrinsic-size", CSSPropertyContainIntrinsicSize},
#line 901 "CSSPropertyNames.gperf"
    {"contain-intrinsic-inline-size", CSSPropertyContainIntrinsicInlineSize},
#line 895 "CSSPropertyNames.gperf"
    {"border-top-style", CSSPropertyBorderTopStyle},
#line 1041 "CSSPropertyNames.gperf"
    {"scroll-padding-inline", CSSPropertyScrollPaddingInline},
#line 760 "CSSPropertyNames.gperf"
    {"stroke-width", CSSPropertyStrokeWidth},
#line 876 "CSSPropertyNames.gperf"
    {"border-end-end-radius", CSSPropertyBorderEndEndRadius},
#line 759 "CSSPropertyNames.gperf"
    {"stroke-opacity", CSSPropertyStrokeOpacity},
#line 596 "CSSPropertyNames.gperf"
    {"animation-timing-function", CSSPropertyAnimationTimingFunction},
#line 762 "CSSPropertyNames.gperf"
    {"symbols", CSSPropertySymbols},
#line 782 "CSSPropertyNames.gperf"
    {"text-underline-offset", CSSPropertyTextUnderlineOffset},
#line 1024 "CSSPropertyNames.gperf"
    {"overflow", CSSPropertyOverflow},
#line 880 "CSSPropertyNames.gperf"
    {"border-inline-end-width", CSSPropertyBorderInlineEndWidth},
#line 978 "CSSPropertyNames.gperf"
    {"border-block-start", CSSPropertyBorderBlockStart},
#line 953 "CSSPropertyNames.gperf"
    {"scroll-padding-inline-end", CSSPropertyScrollPaddingInlineEnd},
#line 868 "CSSPropertyNames.gperf"
    {"border-block-start-color", CSSPropertyBorderBlockStartColor},
#line 701 "CSSPropertyNames.gperf"
    {"object-fit", CSSPropertyObjectFit},
#line 1058 "CSSPropertyNames.gperf"
    {"supported-color-schemes", CSSPropertyColorScheme},
#line 780 "CSSPropertyNames.gperf"
    {"text-shadow", CSSPropertyTextShadow},
#line 954 "CSSPropertyNames.gperf"
    {"scroll-padding-inline-start", CSSPropertyScrollPaddingInlineStart},
#line 893 "CSSPropertyNames.gperf"
    {"border-top-left-radius", CSSPropertyBorderTopLeftRadius},
#line 771 "CSSPropertyNames.gperf"
    {"text-decoration-skip-ink", CSSPropertyTextDecorationSkipInk},
#line 900 "CSSPropertyNames.gperf"
    {"contain-intrinsic-height", CSSPropertyContainIntrinsicHeight},
#line 757 "CSSPropertyNames.gperf"
    {"stroke-linejoin", CSSPropertyStrokeLinejoin},
#line 885 "CSSPropertyNames.gperf"
    {"border-left-style", CSSPropertyBorderLeftStyle},
#line 889 "CSSPropertyNames.gperf"
    {"border-right-width", CSSPropertyBorderRightWidth},
#line 570 "CSSPropertyNames.gperf"
    {"font-variant-numeric", CSSPropertyFontVariantNumeric},
#line 921 "CSSPropertyNames.gperf"
    {"max-block-size", CSSPropertyMaxBlockSize},
#line 672 "CSSPropertyNames.gperf"
    {"grid-template-columns", CSSPropertyGridTemplateColumns},
#line 1088 "CSSPropertyNames.gperf"
    {"-webkit-filter", CSSPropertyFilter},
#line 702 "CSSPropertyNames.gperf"
    {"object-position", CSSPropertyObjectPosition},
#line 578 "CSSPropertyNames.gperf"
    {"-webkit-locale", CSSPropertyWebkitLocale},
#line 1065 "CSSPropertyNames.gperf"
    {"-webkit-alt", CSSPropertyAlt},
#line 1101 "CSSPropertyNames.gperf"
    {"-webkit-order", CSSPropertyOrder},
#line 697 "CSSPropertyNames.gperf"
    {"mask-type", CSSPropertyMaskType},
#line 804 "CSSPropertyNames.gperf"
    {"word-break", CSSPropertyWordBreak},
#line 715 "CSSPropertyNames.gperf"
    {"overflow-anchor", CSSPropertyOverflowAnchor},
#line 772 "CSSPropertyNames.gperf"
    {"text-decoration-style", CSSPropertyTextDecorationStyle},
#line 948 "CSSPropertyNames.gperf"
    {"scroll-margin-right", CSSPropertyScrollMarginRight},
#line 662 "CSSPropertyNames.gperf"
    {"glyph-orientation-horizontal", CSSPropertyGlyphOrientationHorizontal},
#line 615 "CSSPropertyNames.gperf"
    {"border-image-width", CSSPropertyBorderImageWidth},
#line 695 "CSSPropertyNames.gperf"
    {"mask-repeat-y", CSSPropertyMaskRepeatY},
#line 566 "CSSPropertyNames.gperf"
    {"font-variant-alternates", CSSPropertyFontVariantAlternates},
#line 1064 "CSSPropertyNames.gperf"
    {"-webkit-align-self", CSSPropertyAlignSelf},
#line 971 "CSSPropertyNames.gperf"
    {"background", CSSPropertyBackground},
#line 924 "CSSPropertyNames.gperf"
    {"max-width", CSSPropertyMaxWidth},
#line 602 "CSSPropertyNames.gperf"
    {"background-color", CSSPropertyBackgroundColor},
#line 825 "CSSPropertyNames.gperf"
    {"-webkit-font-size-delta", CSSPropertyWebkitFontSizeDelta},
#line 851 "CSSPropertyNames.gperf"
    {"-webkit-rtl-ordering", CSSPropertyWebkitRtlOrdering},
#line 802 "CSSPropertyNames.gperf"
    {"widows", CSSPropertyWidows},
#line 569 "CSSPropertyNames.gperf"
    {"font-variant-ligatures", CSSPropertyFontVariantLigatures},
#line 831 "CSSPropertyNames.gperf"
    {"-webkit-initial-letter", CSSPropertyWebkitInitialLetter},
#line 861 "CSSPropertyNames.gperf"
    {"background-clip", CSSPropertyBackgroundClip},
#line 1186 "CSSPropertyNames.gperf"
    {"-epub-text-orientation", CSSPropertyWebkitTextOrientation},
#line 1062 "CSSPropertyNames.gperf"
    {"-webkit-align-content", CSSPropertyAlignContent},
#line 713 "CSSPropertyNames.gperf"
    {"outline-style", CSSPropertyOutlineStyle},
#line 891 "CSSPropertyNames.gperf"
    {"border-start-start-radius", CSSPropertyBorderStartStartRadius},
#line 792 "CSSPropertyNames.gperf"
    {"transition-duration", CSSPropertyTransitionDuration},
#line 1074 "CSSPropertyNames.gperf"
    {"-webkit-appearance", CSSPropertyAppearance},
#line 898 "CSSPropertyNames.gperf"
    {"box-shadow", CSSPropertyBoxShadow},
#line 665 "CSSPropertyNames.gperf"
    {"grid-auto-flow", CSSPropertyGridAutoFlow},
#line 558 "CSSPropertyNames.gperf"
    {"font-feature-settings", CSSPropertyFontFeatureSettings},
#line 1102 "CSSPropertyNames.gperf"
    {"word-wrap", CSSPropertyOverflowWrap},
#line 586 "CSSPropertyNames.gperf"
    {"alignment-baseline", CSSPropertyAlignmentBaseline},
#line 666 "CSSPropertyNames.gperf"
    {"grid-auto-rows", CSSPropertyGridAutoRows},
#line 997 "CSSPropertyNames.gperf"
    {"column-rule", CSSPropertyColumnRule},
#line 1121 "CSSPropertyNames.gperf"
    {"-webkit-transform", CSSPropertyTransform},
#line 613 "CSSPropertyNames.gperf"
    {"border-image-slice", CSSPropertyBorderImageSlice},
#line 629 "CSSPropertyNames.gperf"
    {"column-count", CSSPropertyColumnCount},
#line 714 "CSSPropertyNames.gperf"
    {"outline-width", CSSPropertyOutlineWidth},
#line 725 "CSSPropertyNames.gperf"
    {"perspective-origin-y", CSSPropertyPerspectiveOriginY},
#line 1152 "CSSPropertyNames.gperf"
    {"-webkit-margin-before", CSSPropertyMarginBlockStart},
#line 687 "CSSPropertyNames.gperf"
    {"list-style-position", CSSPropertyListStylePosition},
#line 934 "CSSPropertyNames.gperf"
    {"padding-block-start", CSSPropertyPaddingBlockStart},
#line 863 "CSSPropertyNames.gperf"
    {"background-size", CSSPropertyBackgroundSize},
#line 872 "CSSPropertyNames.gperf"
    {"border-bottom-left-radius", CSSPropertyBorderBottomLeftRadius},
#line 1184 "CSSPropertyNames.gperf"
    {"-webkit-transform-origin", CSSPropertyTransformOrigin},
#line 717 "CSSPropertyNames.gperf"
    {"overflow-x", CSSPropertyOverflowX},
#line 1168 "CSSPropertyNames.gperf"
    {"-webkit-animation", CSSPropertyAnimation},
#line 800 "CSSPropertyNames.gperf"
    {"visibility", CSSPropertyVisibility},
#line 1153 "CSSPropertyNames.gperf"
    {"-webkit-margin-end", CSSPropertyMarginInlineEnd},
#line 632 "CSSPropertyNames.gperf"
    {"column-rule-color", CSSPropertyColumnRuleColor},
#line 1154 "CSSPropertyNames.gperf"
    {"-webkit-margin-start", CSSPropertyMarginInlineStart},
#line 779 "CSSPropertyNames.gperf"
    {"text-overflow", CSSPropertyTextOverflow},
#line 1170 "CSSPropertyNames.gperf"
    {"-webkit-border-before", CSSPropertyBorderBlockStart},
#line 1119 "CSSPropertyNames.gperf"
    {"-epub-text-transform", CSSPropertyTextTransform},
#line 836 "CSSPropertyNames.gperf"
    {"-webkit-line-snap", CSSPropertyWebkitLineSnap},
#line 1137 "CSSPropertyNames.gperf"
    {"-webkit-border-before-color", CSSPropertyBorderBlockStartColor},
#line 688 "CSSPropertyNames.gperf"
    {"list-style-type", CSSPropertyListStyleType},
#line 603 "CSSPropertyNames.gperf"
    {"background-image", CSSPropertyBackgroundImage},
#line 1025 "CSSPropertyNames.gperf"
    {"overscroll-behavior", CSSPropertyOverscrollBehavior},
#line 930 "CSSPropertyNames.gperf"
    {"overscroll-behavior-inline", CSSPropertyOverscrollBehaviorInline},
#line 593 "CSSPropertyNames.gperf"
    {"animation-iteration-count", CSSPropertyAnimationIterationCount},
#line 758 "CSSPropertyNames.gperf"
    {"stroke-miterlimit", CSSPropertyStrokeMiterlimit},
#line 1175 "CSSPropertyNames.gperf"
    {"-webkit-flex", CSSPropertyFlex},
#line 729 "CSSPropertyNames.gperf"
    {"print-color-adjust", CSSPropertyPrintColorAdjust},
#line 1159 "CSSPropertyNames.gperf"
    {"-webkit-padding-after", CSSPropertyPaddingBlockEnd},
#line 1067 "CSSPropertyNames.gperf"
    {"-webkit-animation-direction", CSSPropertyAnimationDirection},
#line 1161 "CSSPropertyNames.gperf"
    {"-webkit-padding-end", CSSPropertyPaddingInlineEnd},
#line 1171 "CSSPropertyNames.gperf"
    {"-webkit-border-end", CSSPropertyBorderInlineEnd},
#line 663 "CSSPropertyNames.gperf"
    {"glyph-orientation-vertical", CSSPropertyGlyphOrientationVertical},
#line 664 "CSSPropertyNames.gperf"
    {"grid-auto-columns", CSSPropertyGridAutoColumns},
#line 1142 "CSSPropertyNames.gperf"
    {"-webkit-border-end-color", CSSPropertyBorderInlineEndColor},
#line 1162 "CSSPropertyNames.gperf"
    {"-webkit-padding-start", CSSPropertyPaddingInlineStart},
#line 1061 "CSSPropertyNames.gperf"
    {"-webkit-font-kerning", CSSPropertyFontKerning},
#line 636 "CSSPropertyNames.gperf"
    {"column-width", CSSPropertyColumnWidth},
#line 1172 "CSSPropertyNames.gperf"
    {"-webkit-border-start", CSSPropertyBorderInlineStart},
#line 1145 "CSSPropertyNames.gperf"
    {"-webkit-border-start-color", CSSPropertyBorderInlineStartColor},
#line 866 "CSSPropertyNames.gperf"
    {"border-block-end-style", CSSPropertyBorderBlockEndStyle},
#line 577 "CSSPropertyNames.gperf"
    {"-webkit-font-smoothing", CSSPropertyWebkitFontSmoothing},
#line 1106 "CSSPropertyNames.gperf"
    {"color-adjust", CSSPropertyPrintColorAdjust},
#line 852 "CSSPropertyNames.gperf"
    {"-webkit-tap-highlight-color", CSSPropertyWebkitTapHighlightColor},
#line 980 "CSSPropertyNames.gperf"
    {"border-block-width", CSSPropertyBorderBlockWidth},
#line 1133 "CSSPropertyNames.gperf"
    {"-webkit-logical-height", CSSPropertyBlockSize},
#line 1124 "CSSPropertyNames.gperf"
    {"-webkit-transform-origin-z", CSSPropertyTransformOriginZ},
#line 1090 "CSSPropertyNames.gperf"
    {"-webkit-flex-direction", CSSPropertyFlexDirection},
#line 973 "CSSPropertyNames.gperf"
    {"background-repeat", CSSPropertyBackgroundRepeat},
#line 958 "CSSPropertyNames.gperf"
    {"text-combine-upright", CSSPropertyTextCombineUpright},
#line 988 "CSSPropertyNames.gperf"
    {"border-inline-style", CSSPropertyBorderInlineStyle},
#line 899 "CSSPropertyNames.gperf"
    {"contain-intrinsic-block-size", CSSPropertyContainIntrinsicBlockSize},
#line 867 "CSSPropertyNames.gperf"
    {"border-block-end-width", CSSPropertyBorderBlockEndWidth},
#line 1071 "CSSPropertyNames.gperf"
    {"-webkit-animation-name", CSSPropertyAnimationName},
#line 765 "CSSPropertyNames.gperf"
    {"table-layout", CSSPropertyTableLayout},
#line 834 "CSSPropertyNames.gperf"
    {"-webkit-line-clamp", CSSPropertyWebkitLineClamp},
#line 1069 "CSSPropertyNames.gperf"
    {"-webkit-animation-fill-mode", CSSPropertyAnimationFillMode},
#line 850 "CSSPropertyNames.gperf"
    {"-webkit-nbsp-mode", CSSPropertyWebkitNbspMode},
#line 1052 "CSSPropertyNames.gperf"
    {"-webkit-mask", CSSPropertyWebkitMask},
#line 600 "CSSPropertyNames.gperf"
    {"background-attachment", CSSPropertyBackgroundAttachment},
#line 1099 "CSSPropertyNames.gperf"
    {"-webkit-mask-size", CSSPropertyMaskSize},
#line 1055 "CSSPropertyNames.gperf"
    {"-webkit-text-decoration", CSSPropertyWebkitTextDecoration},
#line 1112 "CSSPropertyNames.gperf"
    {"-webkit-text-decoration-line", CSSPropertyTextDecorationLine},
#line 1151 "CSSPropertyNames.gperf"
    {"-webkit-margin-after", CSSPropertyMarginBlockEnd},
#line 1111 "CSSPropertyNames.gperf"
    {"-webkit-text-decoration-color", CSSPropertyTextDecorationColor},
#line 882 "CSSPropertyNames.gperf"
    {"border-inline-start-style", CSSPropertyBorderInlineStartStyle},
#line 1108 "CSSPropertyNames.gperf"
    {"-webkit-shape-image-threshold", CSSPropertyShapeImageThreshold},
#line 886 "CSSPropertyNames.gperf"
    {"border-left-width", CSSPropertyBorderLeftWidth},
#line 854 "CSSPropertyNames.gperf"
    {"-webkit-text-fill-color", CSSPropertyWebkitTextFillColor},
#line 902 "CSSPropertyNames.gperf"
    {"contain-intrinsic-width", CSSPropertyContainIntrinsicWidth},
#line 1178 "CSSPropertyNames.gperf"
    {"-webkit-mask-repeat", CSSPropertyMaskRepeat},
#line 853 "CSSPropertyNames.gperf"
    {"-webkit-text-decorations-in-effect", CSSPropertyWebkitTextDecorationsInEffect},
#line 877 "CSSPropertyNames.gperf"
    {"border-end-start-radius", CSSPropertyBorderEndStartRadius},
#line 601 "CSSPropertyNames.gperf"
    {"background-blend-mode", CSSPropertyBackgroundBlendMode},
#line 1160 "CSSPropertyNames.gperf"
    {"-webkit-padding-before", CSSPropertyPaddingBlockStart},
#line 582 "CSSPropertyNames.gperf"
    {"additive-symbols", CSSPropertyAdditiveSymbols},
#line 1053 "CSSPropertyNames.gperf"
    {"-webkit-mask-position", CSSPropertyWebkitMaskPosition},
#line 966 "CSSPropertyNames.gperf"
    {"-webkit-mask-composite", CSSPropertyWebkitMaskComposite},
#line 883 "CSSPropertyNames.gperf"
    {"border-inline-start-width", CSSPropertyBorderInlineStartWidth},
#line 1096 "CSSPropertyNames.gperf"
    {"-webkit-line-break", CSSPropertyLineBreak},
#line 1169 "CSSPropertyNames.gperf"
    {"-webkit-border-after", CSSPropertyBorderBlockEnd},
#line 1134 "CSSPropertyNames.gperf"
    {"-webkit-border-after-color", CSSPropertyBorderBlockEndColor},
#line 591 "CSSPropertyNames.gperf"
    {"animation-duration", CSSPropertyAnimationDuration},
#line 818 "CSSPropertyNames.gperf"
    {"-webkit-box-lines", CSSPropertyWebkitBoxLines},
#line 1122 "CSSPropertyNames.gperf"
    {"-webkit-transform-origin-x", CSSPropertyTransformOriginX},
#line 820 "CSSPropertyNames.gperf"
    {"-webkit-box-orient", CSSPropertyWebkitBoxOrient},
#line 611 "CSSPropertyNames.gperf"
    {"border-image-outset", CSSPropertyBorderImageOutset},
#line 968 "CSSPropertyNames.gperf"
    {"-webkit-text-combine", CSSPropertyWebkitTextCombine},
#line 811 "CSSPropertyNames.gperf"
    {"-webkit-border-horizontal-spacing", CSSPropertyWebkitBorderHorizontalSpacing},
#line 718 "CSSPropertyNames.gperf"
    {"overflow-y", CSSPropertyOverflowY},
#line 1089 "CSSPropertyNames.gperf"
    {"-webkit-flex-basis", CSSPropertyFlexBasis},
#line 1109 "CSSPropertyNames.gperf"
    {"-webkit-shape-margin", CSSPropertyShapeMargin},
#line 810 "CSSPropertyNames.gperf"
    {"-webkit-backdrop-filter", CSSPropertyWebkitBackdropFilter},
#line 894 "CSSPropertyNames.gperf"
    {"border-top-right-radius", CSSPropertyBorderTopRightRadius},
#line 815 "CSSPropertyNames.gperf"
    {"-webkit-box-direction", CSSPropertyWebkitBoxDirection},
#line 716 "CSSPropertyNames.gperf"
    {"overflow-wrap", CSSPropertyOverflowWrap},
#line 931 "CSSPropertyNames.gperf"
    {"overscroll-behavior-x", CSSPropertyOverscrollBehaviorX},
#line 1183 "CSSPropertyNames.gperf"
    {"-webkit-text-emphasis", CSSPropertyTextEmphasis},
#line 821 "CSSPropertyNames.gperf"
    {"-webkit-box-pack", CSSPropertyWebkitBoxPack},
#line 1115 "CSSPropertyNames.gperf"
    {"-webkit-text-emphasis-color", CSSPropertyTextEmphasisColor},
#line 869 "CSSPropertyNames.gperf"
    {"border-block-start-style", CSSPropertyBorderBlockStartStyle},
#line 1182 "CSSPropertyNames.gperf"
    {"-epub-text-emphasis", CSSPropertyTextEmphasis},
#line 1131 "CSSPropertyNames.gperf"
    {"-epub-hyphens", CSSPropertyWebkitHyphens},
#line 1114 "CSSPropertyNames.gperf"
    {"-epub-text-emphasis-color", CSSPropertyTextEmphasisColor},
#line 1057 "CSSPropertyNames.gperf"
    {"-webkit-text-stroke", CSSPropertyWebkitTextStroke},
#line 1060 "CSSPropertyNames.gperf"
    {"-epub-writing-mode", CSSPropertyWritingMode},
#line 813 "CSSPropertyNames.gperf"
    {"-webkit-box-align", CSSPropertyWebkitBoxAlign},
#line 1130 "CSSPropertyNames.gperf"
    {"-epub-word-break", CSSPropertyWordBreak},
#line 856 "CSSPropertyNames.gperf"
    {"-webkit-text-stroke-color", CSSPropertyWebkitTextStrokeColor},
#line 620 "CSSPropertyNames.gperf"
    {"buffered-rendering", CSSPropertyBufferedRendering},
#line 579 "CSSPropertyNames.gperf"
    {"-webkit-text-zoom", CSSPropertyWebkitTextZoom},
#line 870 "CSSPropertyNames.gperf"
    {"border-block-start-width", CSSPropertyBorderBlockStartWidth},
#line 1092 "CSSPropertyNames.gperf"
    {"-webkit-flex-shrink", CSSPropertyFlexShrink},
#line 1116 "CSSPropertyNames.gperf"
    {"-webkit-text-emphasis-position", CSSPropertyTextEmphasisPosition},
#line 1110 "CSSPropertyNames.gperf"
    {"-webkit-shape-outside", CSSPropertyShapeOutside},
#line 606 "CSSPropertyNames.gperf"
    {"background-repeat-x", CSSPropertyBackgroundRepeatX},
#line 1077 "CSSPropertyNames.gperf"
    {"-epub-caption-side", CSSPropertyCaptionSide},
#line 989 "CSSPropertyNames.gperf"
    {"border-inline-width", CSSPropertyBorderInlineWidth},
#line 822 "CSSPropertyNames.gperf"
    {"-webkit-box-reflect", CSSPropertyWebkitBoxReflect},
#line 972 "CSSPropertyNames.gperf"
    {"background-position", CSSPropertyBackgroundPosition},
#line 1174 "CSSPropertyNames.gperf"
    {"-webkit-columns", CSSPropertyColumns},
#line 1100 "CSSPropertyNames.gperf"
    {"-webkit-opacity", CSSPropertyOpacity},
#line 860 "CSSPropertyNames.gperf"
    {"-webkit-user-select", CSSPropertyWebkitUserSelect},
#line 1080 "CSSPropertyNames.gperf"
    {"-webkit-column-fill", CSSPropertyColumnFill},
#line 776 "CSSPropertyNames.gperf"
    {"text-emphasis-style", CSSPropertyTextEmphasisStyle},
#line 677 "CSSPropertyNames.gperf"
    {"input-security", CSSPropertyInputSecurity},
#line 1078 "CSSPropertyNames.gperf"
    {"-webkit-clip-path", CSSPropertyClipPath},
#line 1181 "CSSPropertyNames.gperf"
    {"-webkit-text-decoration-skip", CSSPropertyTextDecorationSkip},
#line 1063 "CSSPropertyNames.gperf"
    {"-webkit-align-items", CSSPropertyAlignItems},
#line 824 "CSSPropertyNames.gperf"
    {"-webkit-column-progression", CSSPropertyWebkitColumnProgression},
#line 929 "CSSPropertyNames.gperf"
    {"overscroll-behavior-block", CSSPropertyOverscrollBehaviorBlock},
#line 1086 "CSSPropertyNames.gperf"
    {"-webkit-column-span", CSSPropertyColumnSpan},
#line 874 "CSSPropertyNames.gperf"
    {"border-bottom-style", CSSPropertyBorderBottomStyle},
#line 848 "CSSPropertyNames.gperf"
    {"-webkit-mask-position-x", CSSPropertyWebkitMaskPositionX},
#line 1185 "CSSPropertyNames.gperf"
    {"-webkit-transition", CSSPropertyTransition},
#line 1097 "CSSPropertyNames.gperf"
    {"-webkit-mask-image", CSSPropertyMaskImage},
#line 1150 "CSSPropertyNames.gperf"
    {"-webkit-logical-width", CSSPropertyInlineSize},
#line 832 "CSSPropertyNames.gperf"
    {"-webkit-line-align", CSSPropertyWebkitLineAlign},
#line 1125 "CSSPropertyNames.gperf"
    {"-webkit-transform-style", CSSPropertyTransformStyle},
#line 830 "CSSPropertyNames.gperf"
    {"-webkit-hyphens", CSSPropertyWebkitHyphens},
#line 1082 "CSSPropertyNames.gperf"
    {"-webkit-column-gap", CSSPropertyColumnGap},
#line 837 "CSSPropertyNames.gperf"
    {"-webkit-marquee-direction", CSSPropertyWebkitMarqueeDirection},
#line 835 "CSSPropertyNames.gperf"
    {"-webkit-line-grid", CSSPropertyWebkitLineGrid},
#line 1123 "CSSPropertyNames.gperf"
    {"-webkit-transform-origin-y", CSSPropertyTransformOriginY},
#line 1070 "CSSPropertyNames.gperf"
    {"-webkit-animation-iteration-count", CSSPropertyAnimationIterationCount},
#line 1059 "CSSPropertyNames.gperf"
    {"-webkit-writing-mode", CSSPropertyWritingMode},
#line 1068 "CSSPropertyNames.gperf"
    {"-webkit-animation-duration", CSSPropertyAnimationDuration},
#line 839 "CSSPropertyNames.gperf"
    {"-webkit-marquee-repetition", CSSPropertyWebkitMarqueeRepetition},
#line 674 "CSSPropertyNames.gperf"
    {"hanging-punctuation", CSSPropertyHangingPunctuation},
#line 858 "CSSPropertyNames.gperf"
    {"-webkit-user-drag", CSSPropertyWebkitUserDrag},
#line 833 "CSSPropertyNames.gperf"
    {"-webkit-line-box-contain", CSSPropertyWebkitLineBoxContain},
#line 840 "CSSPropertyNames.gperf"
    {"-webkit-marquee-speed", CSSPropertyWebkitMarqueeSpeed},
#line 862 "CSSPropertyNames.gperf"
    {"background-origin", CSSPropertyBackgroundOrigin},
#line 1048 "CSSPropertyNames.gperf"
    {"-webkit-border-radius", CSSPropertyWebkitBorderRadius},
#line 932 "CSSPropertyNames.gperf"
    {"overscroll-behavior-y", CSSPropertyOverscrollBehaviorY},
#line 1176 "CSSPropertyNames.gperf"
    {"-webkit-flex-flow", CSSPropertyFlexFlow},
#line 681 "CSSPropertyNames.gperf"
    {"justify-self", CSSPropertyJustifySelf},
#line 599 "CSSPropertyNames.gperf"
    {"backface-visibility", CSSPropertyBackfaceVisibility},
#line 1066 "CSSPropertyNames.gperf"
    {"-webkit-animation-delay", CSSPropertyAnimationDelay},
#line 1138 "CSSPropertyNames.gperf"
    {"-webkit-border-before-style", CSSPropertyBorderBlockStartStyle},
#line 679 "CSSPropertyNames.gperf"
    {"justify-content", CSSPropertyJustifyContent},
#line 838 "CSSPropertyNames.gperf"
    {"-webkit-marquee-increment", CSSPropertyWebkitMarqueeIncrement},
#line 1143 "CSSPropertyNames.gperf"
    {"-webkit-border-end-style", CSSPropertyBorderInlineEndStyle},
#line 1091 "CSSPropertyNames.gperf"
    {"-webkit-flex-grow", CSSPropertyFlexGrow},
#line 1120 "CSSPropertyNames.gperf"
    {"-webkit-text-underline-position", CSSPropertyTextUnderlinePosition},
#line 633 "CSSPropertyNames.gperf"
    {"column-rule-style", CSSPropertyColumnRuleStyle},
#line 1146 "CSSPropertyNames.gperf"
    {"-webkit-border-start-style", CSSPropertyBorderInlineStartStyle},
#line 1139 "CSSPropertyNames.gperf"
    {"-webkit-border-before-width", CSSPropertyBorderBlockStartWidth},
#line 1072 "CSSPropertyNames.gperf"
    {"-webkit-animation-play-state", CSSPropertyAnimationPlayState},
#line 604 "CSSPropertyNames.gperf"
    {"background-position-x", CSSPropertyBackgroundPositionX},
#line 607 "CSSPropertyNames.gperf"
    {"background-repeat-y", CSSPropertyBackgroundRepeatY},
#line 812 "CSSPropertyNames.gperf"
    {"-webkit-border-vertical-spacing", CSSPropertyWebkitBorderVerticalSpacing},
#line 1073 "CSSPropertyNames.gperf"
    {"-webkit-animation-timing-function", CSSPropertyAnimationTimingFunction},
#line 1144 "CSSPropertyNames.gperf"
    {"-webkit-border-end-width", CSSPropertyBorderInlineEndWidth},
#line 1049 "CSSPropertyNames.gperf"
    {"-webkit-column-break-after", CSSPropertyWebkitColumnBreakAfter},
#line 1147 "CSSPropertyNames.gperf"
    {"-webkit-border-start-width", CSSPropertyBorderInlineStartWidth},
#line 1051 "CSSPropertyNames.gperf"
    {"-webkit-column-break-inside", CSSPropertyWebkitColumnBreakInside},
#line 875 "CSSPropertyNames.gperf"
    {"border-bottom-width", CSSPropertyBorderBottomWidth},
#line 680 "CSSPropertyNames.gperf"
    {"justify-items", CSSPropertyJustifyItems},
#line 962 "CSSPropertyNames.gperf"
    {"-webkit-background-origin", CSSPropertyWebkitBackgroundOrigin},
#line 1140 "CSSPropertyNames.gperf"
    {"-webkit-border-bottom-left-radius", CSSPropertyBorderBottomLeftRadius},
#line 1113 "CSSPropertyNames.gperf"
    {"-webkit-text-decoration-style", CSSPropertyTextDecorationStyle},
#line 961 "CSSPropertyNames.gperf"
    {"-webkit-background-clip", CSSPropertyWebkitBackgroundClip},
#line 1054 "CSSPropertyNames.gperf"
    {"-webkit-perspective", CSSPropertyWebkitPerspective},
#line 849 "CSSPropertyNames.gperf"
    {"-webkit-mask-position-y", CSSPropertyWebkitMaskPositionY},
#line 1132 "CSSPropertyNames.gperf"
    {"-webkit-mask-position-y", CSSPropertyWebkitMaskPositionY},
#line 1087 "CSSPropertyNames.gperf"
    {"-webkit-column-width", CSSPropertyColumnWidth},
#line 873 "CSSPropertyNames.gperf"
    {"border-bottom-right-radius", CSSPropertyBorderBottomRightRadius},
#line 1093 "CSSPropertyNames.gperf"
    {"-webkit-flex-wrap", CSSPropertyFlexWrap},
#line 816 "CSSPropertyNames.gperf"
    {"-webkit-box-flex", CSSPropertyWebkitBoxFlex},
#line 1056 "CSSPropertyNames.gperf"
    {"-webkit-text-orientation", CSSPropertyWebkitTextOrientation},
#line 1135 "CSSPropertyNames.gperf"
    {"-webkit-border-after-style", CSSPropertyBorderBlockEndStyle},
#line 1179 "CSSPropertyNames.gperf"
    {"-webkit-perspective-origin", CSSPropertyPerspectiveOrigin},
#line 814 "CSSPropertyNames.gperf"
    {"-webkit-box-decoration-break", CSSPropertyWebkitBoxDecorationBreak},
#line 963 "CSSPropertyNames.gperf"
    {"-webkit-background-size", CSSPropertyWebkitBackgroundSize},
#line 1157 "CSSPropertyNames.gperf"
    {"-webkit-min-logical-height", CSSPropertyMinBlockSize},
#line 964 "CSSPropertyNames.gperf"
    {"-webkit-box-shadow", CSSPropertyWebkitBoxShadow},
#line 1141 "CSSPropertyNames.gperf"
    {"-webkit-border-bottom-right-radius", CSSPropertyBorderBottomRightRadius},
#line 1136 "CSSPropertyNames.gperf"
    {"-webkit-border-after-width", CSSPropertyBorderBlockEndWidth},
#line 1050 "CSSPropertyNames.gperf"
    {"-webkit-column-break-before", CSSPropertyWebkitColumnBreakBefore},
#line 823 "CSSPropertyNames.gperf"
    {"-webkit-column-axis", CSSPropertyWebkitColumnAxis},
#line 778 "CSSPropertyNames.gperf"
    {"text-justify", CSSPropertyTextJustify},
#line 1167 "CSSPropertyNames.gperf"
    {"-epub-text-combine", CSSPropertyWebkitTextCombine},
#line 1118 "CSSPropertyNames.gperf"
    {"-webkit-text-emphasis-style", CSSPropertyTextEmphasisStyle},
#line 1098 "CSSPropertyNames.gperf"
    {"-webkit-mask-origin", CSSPropertyMaskOrigin},
#line 1047 "CSSPropertyNames.gperf"
    {"-webkit-border-image", CSSPropertyWebkitBorderImage},
#line 1117 "CSSPropertyNames.gperf"
    {"-epub-text-emphasis-style", CSSPropertyTextEmphasisStyle},
#line 965 "CSSPropertyNames.gperf"
    {"-webkit-mask-clip", CSSPropertyWebkitMaskClip},
#line 1173 "CSSPropertyNames.gperf"
    {"-webkit-column-rule", CSSPropertyColumnRule},
#line 1083 "CSSPropertyNames.gperf"
    {"-webkit-column-rule-color", CSSPropertyColumnRuleColor},
#line 1079 "CSSPropertyNames.gperf"
    {"-webkit-column-count", CSSPropertyColumnCount},
#line 857 "CSSPropertyNames.gperf"
    {"-webkit-text-stroke-width", CSSPropertyWebkitTextStrokeWidth},
#line 605 "CSSPropertyNames.gperf"
    {"background-position-y", CSSPropertyBackgroundPositionY},
#line 859 "CSSPropertyNames.gperf"
    {"-webkit-user-modify", CSSPropertyWebkitUserModify},
#line 634 "CSSPropertyNames.gperf"
    {"column-rule-width", CSSPropertyColumnRuleWidth},
#line 841 "CSSPropertyNames.gperf"
    {"-webkit-marquee-style", CSSPropertyWebkitMarqueeStyle},
#line 1103 "CSSPropertyNames.gperf"
    {"-webkit-perspective-origin-x", CSSPropertyPerspectiveOriginX},
#line 1127 "CSSPropertyNames.gperf"
    {"-webkit-transition-duration", CSSPropertyTransitionDuration},
#line 1076 "CSSPropertyNames.gperf"
    {"-webkit-box-sizing", CSSPropertyBoxSizing},
#line 842 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image", CSSPropertyWebkitMaskBoxImage},
#line 553 "CSSPropertyNames.gperf"
    {"-webkit-ruby-position", CSSPropertyWebkitRubyPosition},
#line 845 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image-slice", CSSPropertyWebkitMaskBoxImageSlice},
#line 1126 "CSSPropertyNames.gperf"
    {"-webkit-transition-delay", CSSPropertyTransitionDelay},
#line 1155 "CSSPropertyNames.gperf"
    {"-webkit-max-logical-height", CSSPropertyMaxBlockSize},
#line 1148 "CSSPropertyNames.gperf"
    {"-webkit-border-top-left-radius", CSSPropertyBorderTopLeftRadius},
#line 1105 "CSSPropertyNames.gperf"
    {"-webkit-print-color-adjust", CSSPropertyPrintColorAdjust},
#line 826 "CSSPropertyNames.gperf"
    {"-webkit-hyphenate-character", CSSPropertyWebkitHyphenateCharacter},
#line 844 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image-repeat", CSSPropertyWebkitMaskBoxImageRepeat},
#line 855 "CSSPropertyNames.gperf"
    {"-webkit-text-security", CSSPropertyWebkitTextSecurity},
#line 1128 "CSSPropertyNames.gperf"
    {"-webkit-transition-property", CSSPropertyTransitionProperty},
#line 967 "CSSPropertyNames.gperf"
    {"-webkit-mask-source-type", CSSPropertyWebkitMaskSourceType},
#line 829 "CSSPropertyNames.gperf"
    {"-webkit-hyphenate-limit-lines", CSSPropertyWebkitHyphenateLimitLines},
#line 1129 "CSSPropertyNames.gperf"
    {"-webkit-transition-timing-function", CSSPropertyTransitionTimingFunction},
#line 827 "CSSPropertyNames.gperf"
    {"-webkit-hyphenate-limit-after", CSSPropertyWebkitHyphenateLimitAfter},
#line 1149 "CSSPropertyNames.gperf"
    {"-webkit-border-top-right-radius", CSSPropertyBorderTopRightRadius},
#line 1158 "CSSPropertyNames.gperf"
    {"-webkit-min-logical-width", CSSPropertyMinInlineSize},
#line 1104 "CSSPropertyNames.gperf"
    {"-webkit-perspective-origin-y", CSSPropertyPerspectiveOriginY},
#line 828 "CSSPropertyNames.gperf"
    {"-webkit-hyphenate-limit-before", CSSPropertyWebkitHyphenateLimitBefore},
#line 817 "CSSPropertyNames.gperf"
    {"-webkit-box-flex-group", CSSPropertyWebkitBoxFlexGroup},
#line 1075 "CSSPropertyNames.gperf"
    {"-webkit-backface-visibility", CSSPropertyBackfaceVisibility},
#line 1084 "CSSPropertyNames.gperf"
    {"-webkit-column-rule-style", CSSPropertyColumnRuleStyle},
#line 1085 "CSSPropertyNames.gperf"
    {"-webkit-column-rule-width", CSSPropertyColumnRuleWidth},
#line 1156 "CSSPropertyNames.gperf"
    {"-webkit-max-logical-width", CSSPropertyMaxInlineSize},
#line 819 "CSSPropertyNames.gperf"
    {"-webkit-box-ordinal-group", CSSPropertyWebkitBoxOrdinalGroup},
#line 846 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image-source", CSSPropertyWebkitMaskBoxImageSource},
#line 843 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image-outset", CSSPropertyWebkitMaskBoxImageOutset},
#line 1094 "CSSPropertyNames.gperf"
    {"-webkit-justify-content", CSSPropertyJustifyContent},
#line 847 "CSSPropertyNames.gperf"
    {"-webkit-mask-box-image-width", CSSPropertyWebkitMaskBoxImageWidth},
#line 1095 "CSSPropertyNames.gperf"
    {"-webkit-justify-items", CSSPropertyJustifyItems}
  };

static const short lookup[] =
  {
       -1,    -1,     0,    -1,    -1,     1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,     2,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,     3,    -1,    -1,     4,    -1,
        5,    -1,    -1,    -1,    -1,     6,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,     7,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,     8,    -1,    -1,    -1,     9,
       10,    -1,    -1,    -1,    -1,    11,    -1,
       -1,    -1,    -1,    12,    -1,    -1,    -1,
       -1,    13,    -1,    -1,    -1,    -1,    14,
       -1,    15,    -1,    -1,    16,    -1,    -1,
       -1,    -1,    17,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    18,    -1,
       -1,    -1,    -1,    19,    -1,    -1,    -1,
       -1,    20,    -1,    21,    -1,    -1,    22,
       -1,    -1,    -1,    -1,    23,    -1,    -1,
       -1,    -1,    24,    -1,    -1,    -1,    -1,
       25,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    26,    -1,    -1,    -1,    -1,    27,
       -1,    -1,    -1,    -1,    28,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    29,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    30,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    31,
       -1,    32,    33,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    34,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    35,    -1,    -1,    -1,    -1,    -1,
       -1,    36,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    37,    -1,    -1,    -1,
       38,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    39,    -1,
       -1,    -1,    -1,    40,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    41,
       -1,    42,    -1,    43,    44,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    45,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    46,    -1,    -1,
       -1,    -1,    47,    -1,    -1,    -1,    -1,
       -1,    48,    49,    -1,    -1,    50,    -1,
       51,    -1,    -1,    -1,    -1,    52,    -1,
       53,    54,    -1,    55,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    56,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    57,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       58,    -1,    -1,    -1,    -1,    -1,    -1,
       59,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    60,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    61,    -1,    -1,
       -1,    -1,    62,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    63,    -1,    -1,
       -1,    64,    -1,    -1,    -1,    -1,    65,
       -1,    -1,    -1,    -1,    66,    -1,    67,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       68,    -1,    -1,    -1,    -1,    69,    -1,
       -1,    -1,    -1,    70,    -1,    -1,    -1,
       -1,    71,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    72,    -1,    73,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    74,    -1,
       -1,    75,    -1,    76,    -1,    77,    78,
       -1,    -1,    -1,    79,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       80,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    81,    -1,
       -1,    -1,    -1,    -1,    -1,    82,    -1,
       -1,    83,    -1,    -1,    -1,    -1,    84,
       -1,    -1,    85,    -1,    -1,    -1,    -1,
       -1,    -1,    86,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    87,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    88,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    89,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    90,    -1,    -1,    -1,
       -1,    91,    -1,    92,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    93,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       94,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    95,    -1,    -1,    -1,
       -1,    96,    -1,    97,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    98,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       99,    -1,    -1,    -1,    -1,    -1,    -1,
      100,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   101,    -1,   102,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   103,    -1,    -1,
       -1,    -1,   104,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   105,    -1,
      106,    -1,    -1,    -1,    -1,   107,    -1,
      108,    -1,    -1,   109,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   110,    -1,    -1,    -1,    -1,
      111,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   112,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      113,    -1,   114,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   115,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   116,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   117,    -1,    -1,    -1,    -1,
      118,    -1,   119,    -1,    -1,    -1,    -1,
      120,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   121,    -1,    -1,    -1,    -1,   122,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      123,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   124,    -1,    -1,    -1,    -1,
      125,   126,    -1,    -1,    -1,   127,    -1,
       -1,    -1,    -1,    -1,   128,    -1,   129,
       -1,   130,   131,    -1,    -1,    -1,   132,
       -1,    -1,    -1,    -1,    -1,   133,    -1,
      134,    -1,   135,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   136,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   137,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      138,    -1,    -1,   139,    -1,    -1,    -1,
       -1,    -1,    -1,   140,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      141,    -1,    -1,    -1,    -1,   142,    -1,
      143,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   144,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   145,    -1,   146,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   147,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   148,    -1,   149,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      150,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   151,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      152,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      153,    -1,    -1,   154,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   155,    -1,
       -1,    -1,   156,    -1,    -1,    -1,    -1,
       -1,    -1,   157,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   158,    -1,    -1,    -1,
       -1,   159,    -1,    -1,    -1,    -1,   160,
       -1,    -1,    -1,   161,   162,    -1,   163,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      164,    -1,   165,    -1,    -1,   166,    -1,
       -1,    -1,   167,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   168,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   169,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   170,   171,    -1,   172,    -1,
       -1,   173,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   174,    -1,    -1,
       -1,    -1,   175,    -1,    -1,    -1,    -1,
      176,    -1,    -1,    -1,    -1,   177,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   178,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   179,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      180,    -1,    -1,    -1,    -1,   181,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      182,    -1,   183,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   184,    -1,
       -1,    -1,    -1,   185,    -1,    -1,   186,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   187,    -1,    -1,   188,    -1,    -1,
      189,    -1,   190,    -1,    -1,    -1,    -1,
       -1,    -1,   191,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   192,    -1,    -1,
       -1,    -1,   193,    -1,    -1,    -1,    -1,
      194,    -1,    -1,    -1,    -1,   195,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   196,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   197,    -1,    -1,
       -1,    -1,   198,    -1,    -1,    -1,    -1,
       -1,    -1,   199,    -1,    -1,    -1,    -1,
       -1,    -1,   200,    -1,    -1,    -1,    -1,
       -1,   201,    -1,    -1,   202,    -1,    -1,
       -1,    -1,    -1,   203,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      204,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   205,    -1,    -1,    -1,
      206,   207,    -1,   208,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   209,    -1,   210,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   211,    -1,    -1,    -1,    -1,   212,
       -1,   213,    -1,    -1,   214,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   215,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   216,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   217,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   218,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   219,
       -1,    -1,    -1,    -1,    -1,   220,    -1,
       -1,    -1,   221,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      222,    -1,    -1,   223,    -1,   224,    -1,
       -1,   225,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      226,    -1,    -1,    -1,    -1,   227,    -1,
       -1,    -1,    -1,    -1,    -1,   228,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      229,   230,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      231,    -1,    -1,    -1,    -1,   232,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   233,    -1,    -1,   234,
       -1,    -1,   235,    -1,    -1,    -1,    -1,
      236,    -1,    -1,    -1,    -1,   237,    -1,
      238,    -1,   239,    -1,    -1,   240,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   241,    -1,    -1,    -1,   242,
      243,    -1,   244,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   245,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   246,
       -1,   247,    -1,    -1,    -1,    -1,    -1,
       -1,   248,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   249,    -1,   250,    -1,
       -1,   251,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      252,    -1,    -1,    -1,    -1,   253,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   254,    -1,   255,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   256,    -1,    -1,
       -1,    -1,   257,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   258,    -1,    -1,    -1,
       -1,    -1,    -1,   259,    -1,    -1,    -1,
       -1,   260,   261,    -1,   262,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   263,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   264,    -1,    -1,    -1,    -1,   265,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   266,    -1,
       -1,    -1,    -1,    -1,    -1,   267,    -1,
       -1,   268,    -1,    -1,    -1,    -1,   269,
       -1,   270,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   271,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   272,    -1,    -1,    -1,
      273,    -1,    -1,   274,    -1,    -1,   275,
       -1,   276,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   277,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   278,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   279,    -1,    -1,
       -1,    -1,    -1,    -1,   280,    -1,    -1,
      281,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   282,    -1,    -1,
       -1,    -1,    -1,    -1,   283,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      284,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   285,    -1,    -1,   286,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   287,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   288,
       -1,    -1,    -1,    -1,    -1,    -1,   289,
       -1,    -1,    -1,    -1,    -1,    -1,   290,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      291,    -1,    -1,    -1,    -1,   292,   293,
       -1,    -1,   294,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      295,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   296,    -1,    -1,    -1,    -1,   297,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   298,    -1,   299,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   300,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   301,    -1,
      302,    -1,    -1,   303,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   304,
       -1,    -1,    -1,    -1,   305,    -1,    -1,
       -1,    -1,    -1,    -1,   306,    -1,    -1,
       -1,    -1,    -1,    -1,   307,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   308,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   309,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   310,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   311,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   312,    -1,
       -1,    -1,    -1,   313,    -1,    -1,    -1,
      314,    -1,    -1,   315,    -1,    -1,   316,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   317,    -1,    -1,    -1,    -1,
      318,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   319,    -1,    -1,    -1,    -1,   320,
       -1,    -1,    -1,    -1,   321,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      322,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   323,
       -1,    -1,    -1,    -1,    -1,    -1,   324,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   325,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   326,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   327,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      328,   329,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   330,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   331,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   332,
       -1,    -1,    -1,    -1,   333,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      334,    -1,   335,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   336,    -1,   337,
      338,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   339,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   340,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   341,   342,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   343,    -1,    -1,    -1,    -1,
       -1,    -1,   344,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   345,    -1,    -1,    -1,
       -1,    -1,    -1,   346,    -1,    -1,    -1,
       -1,    -1,   347,    -1,    -1,    -1,    -1,
       -1,    -1,   348,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   349,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   350,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   351,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   352,    -1,
       -1,    -1,    -1,   353,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   354,
       -1,    -1,    -1,   355,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   356,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   357,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   358,   359,    -1,    -1,   360,    -1,
      361,    -1,    -1,    -1,    -1,    -1,    -1,
      362,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   363,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      364,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   365,    -1,
       -1,    -1,    -1,    -1,    -1,   366,    -1,
       -1,    -1,    -1,   367,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   368,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   369,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   370,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   371,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   372,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   373,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      374,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   375,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   376,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   377,
       -1,    -1,    -1,   378,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   379,    -1,    -1,
       -1,    -1,    -1,    -1,   380,   381,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   382,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   383,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      384,    -1,    -1,    -1,    -1,    -1,    -1,
      385,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   386,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      387,    -1,   388,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   389,    -1,    -1,    -1,    -1,   390,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      391,    -1,    -1,    -1,    -1,   392,    -1,
      393,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   394,    -1,
       -1,   395,    -1,    -1,    -1,    -1,    -1,
       -1,   396,   397,    -1,    -1,    -1,    -1,
      398,    -1,   399,    -1,    -1,   400,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   401,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   402,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   403,
       -1,   404,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   405,    -1,
      406,    -1,    -1,   407,    -1,   408,    -1,
       -1,    -1,    -1,   409,    -1,    -1,    -1,
       -1,   410,    -1,    -1,   411,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      412,    -1,    -1,    -1,   413,    -1,    -1,
       -1,    -1,    -1,   414,    -1,   415,    -1,
       -1,   416,    -1,    -1,    -1,    -1,   417,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   418,    -1,    -1,    -1,    -1,
      419,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   420,    -1,   421,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   422,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   423,    -1,
       -1,    -1,    -1,   424,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   425,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   426,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   427,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   428,    -1,    -1,    -1,    -1,    -1,
      429,    -1,    -1,    -1,   430,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   431,    -1,
       -1,    -1,    -1,    -1,    -1,   432,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   433,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   434,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   435,    -1,
       -1,    -1,   436,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   437,    -1,   438,    -1,
       -1,    -1,    -1,   439,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   440,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   441,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      442,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   443,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   444,
       -1,    -1,    -1,    -1,   445,    -1,   446,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   447,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   448,    -1,    -1,
       -1,    -1,   449,    -1,    -1,    -1,    -1,
      450,    -1,    -1,    -1,    -1,   451,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   452,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   453,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      454,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   455,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   456,    -1,    -1,   457,    -1,
       -1,    -1,    -1,    -1,   458,    -1,    -1,
       -1,   459,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   460,    -1,   461,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      462,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   463,    -1,    -1,    -1,    -1,   464,
       -1,    -1,    -1,    -1,    -1,    -1,   465,
       -1,    -1,    -1,    -1,   466,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      467,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   468,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   469,    -1,    -1,    -1,   470,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   471,    -1,    -1,    -1,    -1,   472,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   473,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   474,    -1,
       -1,    -1,    -1,   475,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   476,    -1,    -1,    -1,    -1,
       -1,    -1,   477,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   478,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   479,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   480,    -1,    -1,    -1,    -1,
       -1,    -1,   481,    -1,    -1,   482,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   483,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   484,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   485,    -1,
      486,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   487,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   488,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      489,    -1,    -1,    -1,    -1,   490,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   491,    -1,    -1,   492,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      493,   494,    -1,   495,    -1,   496,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   497,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   498,    -1,    -1,
       -1,   499,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      500,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   501,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   502,    -1,
       -1,   503,    -1,   504,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   505,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   506,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   507,
       -1,    -1,    -1,    -1,   508,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   509,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   510,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      511,    -1,    -1,    -1,    -1,    -1,   512,
       -1,   513,    -1,    -1,    -1,    -1,   514,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   515,    -1,    -1,    -1,
       -1,   516,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   517,    -1,    -1,   518,    -1,
       -1,    -1,    -1,   519,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   520,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   521,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   522,    -1,   523,    -1,
       -1,   524,    -1,   525,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   526,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      527,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   528,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      529,    -1,   530,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   531,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      532,    -1,    -1,    -1,    -1,   533,    -1,
       -1,    -1,    -1,   534,    -1,    -1,    -1,
       -1,    -1,    -1,   535,    -1,    -1,   536,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      537,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   538,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   539,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   540,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   541,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   542,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      543,    -1,    -1,   544,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      545,    -1,   546,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   547,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   548,    -1,
       -1,    -1,    -1,    -1,    -1,   549,    -1,
       -1,    -1,    -1,    -1,    -1,   550,    -1,
       -1,   551,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   552,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      553,    -1,    -1,    -1,   554,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      555,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   556,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   557,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      558,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   559,    -1,
      560,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   561,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   562,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   563,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   564,    -1,    -1,    -1,
       -1,   565,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   566,    -1,   567,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      568,    -1,    -1,   569,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   570,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1, -6373,   -65,    -2,    -1,    -1,
       -1,    -1,    -1,    -1,   573,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   574,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   575,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      576,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   577,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   578,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   579,    -1,   580,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   581,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      582,    -1,    -1,    -1,    -1,   583,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   584,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   585,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   586,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   587,    -1,    -1,    -1,    -1,    -1,
       -1,   588,    -1,    -1,   589,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   590,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   591,    -1,    -1,    -1,    -1,
      592,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      593,   594,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   595,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   596,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   597,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      598,    -1,    -1,    -1,    -1,    -1,   599,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      600,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   601,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   602,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   603,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   604,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   605,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   606,    -1,    -1,    -1,
       -1,   607,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   608,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      609,    -1,    -1,    -1,    -1,    -1,   610,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   611,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   612,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      613,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      614,    -1,   615,    -1,    -1,   616,    -1,
       -1,    -1,    -1,   617,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   618,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   619,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      620,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   621,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
      622,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   623,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   624,    -1,    -1,   625,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   626,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   627,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   628,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   629,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   630,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,   631,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   632,    -1,   633,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   634,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   635
  };

const struct Property *
CSSPropertyNamesHash::findPropertyImpl (const char *str, size_t len)
{
  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      unsigned int key = propery_hash_function (str, len);

      if (key <= MAX_HASH_VALUE)
        {
          int index = lookup[key];

          if (index >= 0)
            {
              const char *s = property_wordlist[index].name;

              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
                return &property_wordlist[index];
            }
          else if (index < -TOTAL_KEYWORDS)
            {
              int offset = - 1 - TOTAL_KEYWORDS - index;
              const struct Property *wordptr = &property_wordlist[TOTAL_KEYWORDS + lookup[offset]];
              const struct Property *wordendptr = wordptr + -lookup[offset + 1];

              while (wordptr < wordendptr)
                {
                  const char *s = wordptr->name;

                  if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
                    return wordptr;
                  wordptr++;
                }
            }
        }
    }
  return 0;
}
#line 1187 "CSSPropertyNames.gperf"

const Property* findProperty(const char* str, unsigned int len)
{
    return CSSPropertyNamesHash::findPropertyImpl(str, len);
}

bool isInternalCSSProperty(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyWebkitFontSizeDelta:
    case CSSPropertyID::CSSPropertyWebkitMarqueeDirection:
    case CSSPropertyID::CSSPropertyWebkitMarqueeIncrement:
    case CSSPropertyID::CSSPropertyWebkitMarqueeRepetition:
    case CSSPropertyID::CSSPropertyWebkitMarqueeSpeed:
    case CSSPropertyID::CSSPropertyWebkitMarqueeStyle:
    case CSSPropertyID::CSSPropertyBackgroundRepeatX:
    case CSSPropertyID::CSSPropertyBackgroundRepeatY:
    case CSSPropertyID::CSSPropertyMaskRepeatX:
    case CSSPropertyID::CSSPropertyMaskRepeatY:
        return true;
    default:
        return false;
    }
}

static bool isEnabledCSSProperty(CSSPropertyID)
{
    return true;
}

static bool isCSSPropertyEnabledBySettings(CSSPropertyID id, const Settings* settings)
{
    if (!settings)
        return true;

    switch (id) {
    case CSSPropertyID::CSSPropertyAppleColorFilter:
        return settings->colorFilterEnabled();
    case CSSPropertyID::CSSPropertyAccentColor:
        return settings->accentColorEnabled();
    case CSSPropertyID::CSSPropertyAdditiveSymbols:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyAnimationComposition:
        return settings->webAnimationsCompositeOperationsEnabled();
    case CSSPropertyID::CSSPropertyAspectRatio:
        return settings->aspectRatioEnabled();
    case CSSPropertyID::CSSPropertyContain:
        return settings->cssContainmentEnabled();
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
        return settings->cssContainIntrinsicSizeEnabled();
    case CSSPropertyID::CSSPropertyContainIntrinsicHeight:
        return settings->cssContainIntrinsicSizeEnabled();
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
        return settings->cssContainIntrinsicSizeEnabled();
    case CSSPropertyID::CSSPropertyContainIntrinsicSize:
        return settings->cssContainIntrinsicSizeEnabled();
    case CSSPropertyID::CSSPropertyContainIntrinsicWidth:
        return settings->cssContainIntrinsicSizeEnabled();
    case CSSPropertyID::CSSPropertyContainerName:
        return settings->cssContainerQueriesEnabled();
    case CSSPropertyID::CSSPropertyContainerType:
        return settings->cssContainerQueriesEnabled();
    case CSSPropertyID::CSSPropertyFallback:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyInputSecurity:
        return settings->cssInputSecurityEnabled();
    case CSSPropertyID::CSSPropertyNegative:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyOffset:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOffsetAnchor:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOffsetDistance:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOffsetPath:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOffsetPosition:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOffsetRotate:
        return settings->cssMotionPathEnabled();
    case CSSPropertyID::CSSPropertyOverflowAnchor:
        return settings->cssScrollAnchoringEnabled();
    case CSSPropertyID::CSSPropertyOverscrollBehavior:
        return settings->overscrollBehaviorEnabled();
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
        return settings->overscrollBehaviorEnabled();
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
        return settings->overscrollBehaviorEnabled();
    case CSSPropertyID::CSSPropertyOverscrollBehaviorX:
        return settings->overscrollBehaviorEnabled();
    case CSSPropertyID::CSSPropertyOverscrollBehaviorY:
        return settings->overscrollBehaviorEnabled();
    case CSSPropertyID::CSSPropertyPad:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyPrefix:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyRange:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyRotate:
        return settings->cssIndividualTransformPropertiesEnabled();
    case CSSPropertyID::CSSPropertyScale:
        return settings->cssIndividualTransformPropertiesEnabled();
    case CSSPropertyID::CSSPropertyScrollBehavior:
        return settings->CSSOMViewSmoothScrollingEnabled();
    case CSSPropertyID::CSSPropertySuffix:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertySymbols:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertySystem:
        return settings->cssCounterStyleAtRulesEnabled();
    case CSSPropertyID::CSSPropertyTextAlignLast:
        return settings->cssTextAlignLastEnabled();
    case CSSPropertyID::CSSPropertyTextJustify:
        return settings->cssTextJustifyEnabled();
    case CSSPropertyID::CSSPropertyTranslate:
        return settings->cssIndividualTransformPropertiesEnabled();
    default:
        return true;
    }
}

static bool isCSSPropertyEnabledByCSSPropertySettings(CSSPropertyID id, const CSSPropertySettings* settings)
{
    if (!settings)
        return true;

    switch (id) {
    case CSSPropertyID::CSSPropertyOverscrollBehaviorY:
        return settings->overscrollBehaviorEnabled;
    case CSSPropertyID::CSSPropertyContainIntrinsicSize:
        return settings->cssContainIntrinsicSizeEnabled;
    case CSSPropertyID::CSSPropertyOffsetAnchor:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertyContainIntrinsicWidth:
        return settings->cssContainIntrinsicSizeEnabled;
    case CSSPropertyID::CSSPropertySystem:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
        return settings->cssContainIntrinsicSizeEnabled;
    case CSSPropertyID::CSSPropertyOverflowAnchor:
        return settings->cssScrollAnchoringEnabled;
    case CSSPropertyID::CSSPropertyTranslate:
        return settings->cssIndividualTransformPropertiesEnabled;
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
        return settings->overscrollBehaviorEnabled;
    case CSSPropertyID::CSSPropertyAnimationComposition:
        return settings->webAnimationsCompositeOperationsEnabled;
    case CSSPropertyID::CSSPropertyFallback:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyInputSecurity:
        return settings->cssInputSecurityEnabled;
    case CSSPropertyID::CSSPropertyContainIntrinsicHeight:
        return settings->cssContainIntrinsicSizeEnabled;
    case CSSPropertyID::CSSPropertyAdditiveSymbols:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyContainerName:
        return settings->cssContainerQueriesEnabled;
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
        return settings->overscrollBehaviorEnabled;
    case CSSPropertyID::CSSPropertyContain:
        return settings->cssContainmentEnabled;
    case CSSPropertyID::CSSPropertyScale:
        return settings->cssIndividualTransformPropertiesEnabled;
    case CSSPropertyID::CSSPropertyOverscrollBehavior:
        return settings->overscrollBehaviorEnabled;
    case CSSPropertyID::CSSPropertyTextAlignLast:
        return settings->cssTextAlignLastEnabled;
    case CSSPropertyID::CSSPropertyScrollBehavior:
        return settings->CSSOMViewSmoothScrollingEnabled;
    case CSSPropertyID::CSSPropertyAppleColorFilter:
        return settings->colorFilterEnabled;
    case CSSPropertyID::CSSPropertyPrefix:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyNegative:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyOverscrollBehaviorX:
        return settings->overscrollBehaviorEnabled;
    case CSSPropertyID::CSSPropertyOffsetRotate:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertyRotate:
        return settings->cssIndividualTransformPropertiesEnabled;
    case CSSPropertyID::CSSPropertySuffix:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyOffsetDistance:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertyOffsetPosition:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertyPad:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyAspectRatio:
        return settings->aspectRatioEnabled;
    case CSSPropertyID::CSSPropertyRange:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyOffsetPath:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertyOffset:
        return settings->cssMotionPathEnabled;
    case CSSPropertyID::CSSPropertySymbols:
        return settings->cssCounterStyleAtRulesEnabled;
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
        return settings->cssContainIntrinsicSizeEnabled;
    case CSSPropertyID::CSSPropertyAccentColor:
        return settings->accentColorEnabled;
    case CSSPropertyID::CSSPropertyContainerType:
        return settings->cssContainerQueriesEnabled;
    case CSSPropertyID::CSSPropertyTextJustify:
        return settings->cssTextJustifyEnabled;
    default:
        return true;
    }
    return true;
}

bool isCSSPropertyExposed(CSSPropertyID id, const Settings* settings)
{
    return isEnabledCSSProperty(id) && isCSSPropertyEnabledBySettings(id, settings) && !isInternalCSSProperty(id);
}

bool isCSSPropertyExposed(CSSPropertyID id, const CSSPropertySettings* settings)
{
    return isEnabledCSSProperty(id) && isCSSPropertyEnabledByCSSPropertySettings(id, settings) && !isInternalCSSProperty(id);
}

ASCIILiteral getPropertyName(CSSPropertyID id)
{
    if (id < firstCSSProperty)
        return { };
    int index = id - firstCSSProperty;
    if (index >= numCSSProperties)
        return { };
    return propertyNameStrings[index];
}

const AtomString& getPropertyNameAtomString(CSSPropertyID id)
{
    if (id < firstCSSProperty)
        return nullAtom();
    int index = id - firstCSSProperty;
    if (index >= numCSSProperties)
        return nullAtom();

    static AtomString* propertyStrings = new AtomString[numCSSProperties]; // Intentionally never destroyed.
    AtomString& propertyString = propertyStrings[index];
    if (propertyString.isNull())
        propertyString = propertyNameStrings[index];
    return propertyString;
}

String getPropertyNameString(CSSPropertyID id)
{
    // We share the StringImpl with the AtomStrings.
    return getPropertyNameAtomString(id).string();
}

String getJSPropertyName(CSSPropertyID id)
{
    char result[maxCSSPropertyNameLength + 1];
    const char* cssPropertyName = getPropertyName(id);
    const char* propertyNamePointer = cssPropertyName;
    if (!propertyNamePointer)
        return emptyString();

    char* resultPointer = result;
    while (char character = *propertyNamePointer++) {
        if (character == '-') {
            char nextCharacter = *propertyNamePointer++;
            if (!nextCharacter)
                break;
            character = (propertyNamePointer - 2 != cssPropertyName) ? toASCIIUpper(nextCharacter) : nextCharacter;
        }
        *resultPointer++ = character;
    }
    *resultPointer = '\0';
    return String::fromLatin1(result);
}

static const bool isInheritedPropertyTable[numCSSProperties + 2] = {
    false, // CSSPropertyInvalid
    true, // CSSPropertyCustom
    true , // CSSPropertyColorScheme
    true , // CSSPropertyWritingMode
    true , // CSSPropertyWebkitRubyPosition
    true , // CSSPropertyColor
    true , // CSSPropertyDirection
    false, // CSSPropertyDisplay
    true , // CSSPropertyFontFamily
    true , // CSSPropertyFontFeatureSettings
    true , // CSSPropertyFontKerning
    true , // CSSPropertyFontOpticalSizing
    true , // CSSPropertyFontPalette
    true , // CSSPropertyFontSize
    true , // CSSPropertyFontStretch
    true , // CSSPropertyFontStyle
    true , // CSSPropertyFontSynthesis
    true , // CSSPropertyFontVariantAlternates
    true , // CSSPropertyFontVariantCaps
    true , // CSSPropertyFontVariantEastAsian
    true , // CSSPropertyFontVariantLigatures
    true , // CSSPropertyFontVariantNumeric
    true , // CSSPropertyFontVariantPosition
    true , // CSSPropertyFontVariationSettings
    true , // CSSPropertyFontWeight
    true , // CSSPropertyTextOrientation
    true , // CSSPropertyTextRendering
    false, // CSSPropertyZoom
    true , // CSSPropertyWebkitFontSmoothing
    true , // CSSPropertyWebkitLocale
    true , // CSSPropertyWebkitTextZoom
    true , // CSSPropertyLetterSpacing
    true , // CSSPropertyAccentColor
    false, // CSSPropertyAdditiveSymbols
    false, // CSSPropertyAlignContent
    false, // CSSPropertyAlignItems
    false, // CSSPropertyAlignSelf
    false, // CSSPropertyAlignmentBaseline
    false, // CSSPropertyAlt
    false, // CSSPropertyAnimationComposition
    false, // CSSPropertyAnimationDelay
    false, // CSSPropertyAnimationDirection
    false, // CSSPropertyAnimationDuration
    false, // CSSPropertyAnimationFillMode
    false, // CSSPropertyAnimationIterationCount
    false, // CSSPropertyAnimationName
    false, // CSSPropertyAnimationPlayState
    false, // CSSPropertyAnimationTimingFunction
    false, // CSSPropertyAppearance
    false, // CSSPropertyAspectRatio
    false, // CSSPropertyBackfaceVisibility
    false, // CSSPropertyBackgroundAttachment
    false, // CSSPropertyBackgroundBlendMode
    false, // CSSPropertyBackgroundColor
    false, // CSSPropertyBackgroundImage
    false, // CSSPropertyBackgroundPositionX
    false, // CSSPropertyBackgroundPositionY
    false, // CSSPropertyBackgroundRepeatX
    false, // CSSPropertyBackgroundRepeatY
    false, // CSSPropertyBasePalette
    false, // CSSPropertyBaselineShift
    true , // CSSPropertyBorderCollapse
    false, // CSSPropertyBorderImageOutset
    false, // CSSPropertyBorderImageRepeat
    false, // CSSPropertyBorderImageSlice
    false, // CSSPropertyBorderImageSource
    false, // CSSPropertyBorderImageWidth
    false, // CSSPropertyBoxSizing
    false, // CSSPropertyBreakAfter
    false, // CSSPropertyBreakBefore
    false, // CSSPropertyBreakInside
    false, // CSSPropertyBufferedRendering
    true , // CSSPropertyCaptionSide
    true , // CSSPropertyCaretColor
    false, // CSSPropertyClear
    false, // CSSPropertyClip
    false, // CSSPropertyClipPath
    true , // CSSPropertyClipRule
    true , // CSSPropertyColorInterpolation
    true , // CSSPropertyColorInterpolationFilters
    false, // CSSPropertyColumnCount
    false, // CSSPropertyColumnFill
    false, // CSSPropertyColumnGap
    false, // CSSPropertyColumnRuleColor
    false, // CSSPropertyColumnRuleStyle
    false, // CSSPropertyColumnRuleWidth
    false, // CSSPropertyColumnSpan
    false, // CSSPropertyColumnWidth
    false, // CSSPropertyContain
    false, // CSSPropertyContainerName
    false, // CSSPropertyContainerType
    false, // CSSPropertyContent
    false, // CSSPropertyCounterIncrement
    false, // CSSPropertyCounterReset
    true , // CSSPropertyCursor
    false, // CSSPropertyCx
    false, // CSSPropertyCy
    false, // CSSPropertyDominantBaseline
    true , // CSSPropertyEmptyCells
    false, // CSSPropertyFallback
    true , // CSSPropertyFill
    true , // CSSPropertyFillOpacity
    true , // CSSPropertyFillRule
    false, // CSSPropertyFilter
    false, // CSSPropertyFlexBasis
    false, // CSSPropertyFlexDirection
    false, // CSSPropertyFlexGrow
    false, // CSSPropertyFlexShrink
    false, // CSSPropertyFlexWrap
    false, // CSSPropertyFloat
    false, // CSSPropertyFloodColor
    false, // CSSPropertyFloodOpacity
    false, // CSSPropertyFontDisplay
    true , // CSSPropertyGlyphOrientationHorizontal
    true , // CSSPropertyGlyphOrientationVertical
    false, // CSSPropertyGridAutoColumns
    false, // CSSPropertyGridAutoFlow
    false, // CSSPropertyGridAutoRows
    false, // CSSPropertyGridColumnEnd
    false, // CSSPropertyGridColumnStart
    false, // CSSPropertyGridRowEnd
    false, // CSSPropertyGridRowStart
    false, // CSSPropertyGridTemplateAreas
    false, // CSSPropertyGridTemplateColumns
    false, // CSSPropertyGridTemplateRows
    true , // CSSPropertyHangingPunctuation
    true , // CSSPropertyImageOrientation
    true , // CSSPropertyImageRendering
    false, // CSSPropertyInputSecurity
    false, // CSSPropertyIsolation
    false, // CSSPropertyJustifyContent
    false, // CSSPropertyJustifyItems
    false, // CSSPropertyJustifySelf
    true , // CSSPropertyKerning
    false, // CSSPropertyLightingColor
    true , // CSSPropertyLineBreak
    true , // CSSPropertyLineHeight
    true , // CSSPropertyListStyleImage
    true , // CSSPropertyListStylePosition
    true , // CSSPropertyListStyleType
    true , // CSSPropertyMarkerEnd
    true , // CSSPropertyMarkerMid
    true , // CSSPropertyMarkerStart
    false, // CSSPropertyMaskImage
    false, // CSSPropertyMaskOrigin
    false, // CSSPropertyMaskRepeatX
    false, // CSSPropertyMaskRepeatY
    false, // CSSPropertyMaskSize
    false, // CSSPropertyMaskType
    false, // CSSPropertyMathStyle
    false, // CSSPropertyMixBlendMode
    false, // CSSPropertyNegative
    false, // CSSPropertyObjectFit
    false, // CSSPropertyObjectPosition
    false, // CSSPropertyOffsetAnchor
    false, // CSSPropertyOffsetDistance
    false, // CSSPropertyOffsetPath
    false, // CSSPropertyOffsetPosition
    false, // CSSPropertyOffsetRotate
    false, // CSSPropertyOpacity
    false, // CSSPropertyOrder
    true , // CSSPropertyOrphans
    false, // CSSPropertyOutlineColor
    false, // CSSPropertyOutlineOffset
    false, // CSSPropertyOutlineStyle
    false, // CSSPropertyOutlineWidth
    false, // CSSPropertyOverflowAnchor
    true , // CSSPropertyOverflowWrap
    false, // CSSPropertyOverflowX
    false, // CSSPropertyOverflowY
    false, // CSSPropertyOverrideColors
    false, // CSSPropertyPad
    false, // CSSPropertyPage
    false, // CSSPropertyPaintOrder
    false, // CSSPropertyPerspective
    false, // CSSPropertyPerspectiveOriginX
    false, // CSSPropertyPerspectiveOriginY
    true , // CSSPropertyPointerEvents
    false, // CSSPropertyPosition
    false, // CSSPropertyPrefix
    true , // CSSPropertyPrintColorAdjust
    true , // CSSPropertyQuotes
    false, // CSSPropertyR
    false, // CSSPropertyRange
    false, // CSSPropertyResize
    false, // CSSPropertyRotate
    false, // CSSPropertyRowGap
    false, // CSSPropertyRx
    false, // CSSPropertyRy
    false, // CSSPropertyScale
    false, // CSSPropertyScrollBehavior
    false, // CSSPropertyScrollSnapAlign
    false, // CSSPropertyScrollSnapStop
    false, // CSSPropertyScrollSnapType
    false, // CSSPropertyShapeImageThreshold
    false, // CSSPropertyShapeMargin
    false, // CSSPropertyShapeOutside
    true , // CSSPropertyShapeRendering
    false, // CSSPropertySize
    true , // CSSPropertySpeakAs
    false, // CSSPropertySrc
    false, // CSSPropertyStopColor
    false, // CSSPropertyStopOpacity
    true , // CSSPropertyStroke
    true , // CSSPropertyStrokeColor
    true , // CSSPropertyStrokeDasharray
    true , // CSSPropertyStrokeDashoffset
    true , // CSSPropertyStrokeLinecap
    true , // CSSPropertyStrokeLinejoin
    true , // CSSPropertyStrokeMiterlimit
    true , // CSSPropertyStrokeOpacity
    true , // CSSPropertyStrokeWidth
    false, // CSSPropertySuffix
    false, // CSSPropertySymbols
    false, // CSSPropertySystem
    true , // CSSPropertyTabSize
    false, // CSSPropertyTableLayout
    true , // CSSPropertyTextAlign
    true , // CSSPropertyTextAlignLast
    true , // CSSPropertyTextAnchor
    false, // CSSPropertyTextDecorationColor
    false, // CSSPropertyTextDecorationLine
    true , // CSSPropertyTextDecorationSkipInk
    false, // CSSPropertyTextDecorationStyle
    true , // CSSPropertyTextDecorationThickness
    true , // CSSPropertyTextEmphasisColor
    true , // CSSPropertyTextEmphasisPosition
    true , // CSSPropertyTextEmphasisStyle
    true , // CSSPropertyTextIndent
    true , // CSSPropertyTextJustify
    false, // CSSPropertyTextOverflow
    true , // CSSPropertyTextShadow
    true , // CSSPropertyTextTransform
    true , // CSSPropertyTextUnderlineOffset
    true , // CSSPropertyTextUnderlinePosition
    false, // CSSPropertyTouchAction
    false, // CSSPropertyTransform
    false, // CSSPropertyTransformBox
    false, // CSSPropertyTransformOriginX
    false, // CSSPropertyTransformOriginY
    false, // CSSPropertyTransformOriginZ
    false, // CSSPropertyTransformStyle
    false, // CSSPropertyTransitionDelay
    false, // CSSPropertyTransitionDuration
    false, // CSSPropertyTransitionProperty
    false, // CSSPropertyTransitionTimingFunction
    false, // CSSPropertyTranslate
    false, // CSSPropertyUnicodeBidi
    false, // CSSPropertyUnicodeRange
    false, // CSSPropertyVectorEffect
    false, // CSSPropertyVerticalAlign
    true , // CSSPropertyVisibility
    true , // CSSPropertyWhiteSpace
    true , // CSSPropertyWidows
    false, // CSSPropertyWillChange
    true , // CSSPropertyWordBreak
    true , // CSSPropertyWordSpacing
    false, // CSSPropertyX
    false, // CSSPropertyY
    false, // CSSPropertyZIndex
    true , // CSSPropertyAppleColorFilter
    false, // CSSPropertyWebkitBackdropFilter
    true , // CSSPropertyWebkitBorderHorizontalSpacing
    true , // CSSPropertyWebkitBorderVerticalSpacing
    false, // CSSPropertyWebkitBoxAlign
    false, // CSSPropertyWebkitBoxDecorationBreak
    true , // CSSPropertyWebkitBoxDirection
    false, // CSSPropertyWebkitBoxFlex
    false, // CSSPropertyWebkitBoxFlexGroup
    false, // CSSPropertyWebkitBoxLines
    false, // CSSPropertyWebkitBoxOrdinalGroup
    false, // CSSPropertyWebkitBoxOrient
    false, // CSSPropertyWebkitBoxPack
    false, // CSSPropertyWebkitBoxReflect
    false, // CSSPropertyWebkitColumnAxis
    false, // CSSPropertyWebkitColumnProgression
    false, // CSSPropertyWebkitFontSizeDelta
    true , // CSSPropertyWebkitHyphenateCharacter
    true , // CSSPropertyWebkitHyphenateLimitAfter
    true , // CSSPropertyWebkitHyphenateLimitBefore
    true , // CSSPropertyWebkitHyphenateLimitLines
    true , // CSSPropertyWebkitHyphens
    false, // CSSPropertyWebkitInitialLetter
    true , // CSSPropertyWebkitLineAlign
    true , // CSSPropertyWebkitLineBoxContain
    false, // CSSPropertyWebkitLineClamp
    true , // CSSPropertyWebkitLineGrid
    true , // CSSPropertyWebkitLineSnap
    false, // CSSPropertyWebkitMarqueeDirection
    false, // CSSPropertyWebkitMarqueeIncrement
    false, // CSSPropertyWebkitMarqueeRepetition
    false, // CSSPropertyWebkitMarqueeSpeed
    false, // CSSPropertyWebkitMarqueeStyle
    false, // CSSPropertyWebkitMaskBoxImage
    false, // CSSPropertyWebkitMaskBoxImageOutset
    false, // CSSPropertyWebkitMaskBoxImageRepeat
    false, // CSSPropertyWebkitMaskBoxImageSlice
    false, // CSSPropertyWebkitMaskBoxImageSource
    false, // CSSPropertyWebkitMaskBoxImageWidth
    false, // CSSPropertyWebkitMaskPositionX
    false, // CSSPropertyWebkitMaskPositionY
    true , // CSSPropertyWebkitNbspMode
    true , // CSSPropertyWebkitRtlOrdering
    true , // CSSPropertyWebkitTapHighlightColor
    true , // CSSPropertyWebkitTextDecorationsInEffect
    true , // CSSPropertyWebkitTextFillColor
    true , // CSSPropertyWebkitTextSecurity
    true , // CSSPropertyWebkitTextStrokeColor
    true , // CSSPropertyWebkitTextStrokeWidth
    false, // CSSPropertyWebkitUserDrag
    true , // CSSPropertyWebkitUserModify
    true , // CSSPropertyWebkitUserSelect
    false, // CSSPropertyBackgroundClip
    false, // CSSPropertyBackgroundOrigin
    false, // CSSPropertyBackgroundSize
    false, // CSSPropertyBlockSize
    false, // CSSPropertyBorderBlockEndColor
    false, // CSSPropertyBorderBlockEndStyle
    false, // CSSPropertyBorderBlockEndWidth
    false, // CSSPropertyBorderBlockStartColor
    false, // CSSPropertyBorderBlockStartStyle
    false, // CSSPropertyBorderBlockStartWidth
    false, // CSSPropertyBorderBottomColor
    false, // CSSPropertyBorderBottomLeftRadius
    false, // CSSPropertyBorderBottomRightRadius
    false, // CSSPropertyBorderBottomStyle
    false, // CSSPropertyBorderBottomWidth
    false, // CSSPropertyBorderEndEndRadius
    false, // CSSPropertyBorderEndStartRadius
    false, // CSSPropertyBorderInlineEndColor
    false, // CSSPropertyBorderInlineEndStyle
    false, // CSSPropertyBorderInlineEndWidth
    false, // CSSPropertyBorderInlineStartColor
    false, // CSSPropertyBorderInlineStartStyle
    false, // CSSPropertyBorderInlineStartWidth
    false, // CSSPropertyBorderLeftColor
    false, // CSSPropertyBorderLeftStyle
    false, // CSSPropertyBorderLeftWidth
    false, // CSSPropertyBorderRightColor
    false, // CSSPropertyBorderRightStyle
    false, // CSSPropertyBorderRightWidth
    false, // CSSPropertyBorderStartEndRadius
    false, // CSSPropertyBorderStartStartRadius
    false, // CSSPropertyBorderTopColor
    false, // CSSPropertyBorderTopLeftRadius
    false, // CSSPropertyBorderTopRightRadius
    false, // CSSPropertyBorderTopStyle
    false, // CSSPropertyBorderTopWidth
    false, // CSSPropertyBottom
    false, // CSSPropertyBoxShadow
    false, // CSSPropertyContainIntrinsicBlockSize
    false, // CSSPropertyContainIntrinsicHeight
    false, // CSSPropertyContainIntrinsicInlineSize
    false, // CSSPropertyContainIntrinsicWidth
    false, // CSSPropertyHeight
    false, // CSSPropertyInlineSize
    false, // CSSPropertyInsetBlockEnd
    false, // CSSPropertyInsetBlockStart
    false, // CSSPropertyInsetInlineEnd
    false, // CSSPropertyInsetInlineStart
    false, // CSSPropertyLeft
    false, // CSSPropertyMarginBlockEnd
    false, // CSSPropertyMarginBlockStart
    false, // CSSPropertyMarginBottom
    false, // CSSPropertyMarginInlineEnd
    false, // CSSPropertyMarginInlineStart
    false, // CSSPropertyMarginLeft
    false, // CSSPropertyMarginRight
    false, // CSSPropertyMarginTop
    false, // CSSPropertyMaskClip
    false, // CSSPropertyMaskComposite
    false, // CSSPropertyMaskMode
    false, // CSSPropertyMaxBlockSize
    false, // CSSPropertyMaxHeight
    false, // CSSPropertyMaxInlineSize
    false, // CSSPropertyMaxWidth
    false, // CSSPropertyMinBlockSize
    false, // CSSPropertyMinHeight
    false, // CSSPropertyMinInlineSize
    false, // CSSPropertyMinWidth
    false, // CSSPropertyOverscrollBehaviorBlock
    false, // CSSPropertyOverscrollBehaviorInline
    false, // CSSPropertyOverscrollBehaviorX
    false, // CSSPropertyOverscrollBehaviorY
    false, // CSSPropertyPaddingBlockEnd
    false, // CSSPropertyPaddingBlockStart
    false, // CSSPropertyPaddingBottom
    false, // CSSPropertyPaddingInlineEnd
    false, // CSSPropertyPaddingInlineStart
    false, // CSSPropertyPaddingLeft
    false, // CSSPropertyPaddingRight
    false, // CSSPropertyPaddingTop
    false, // CSSPropertyRight
    false, // CSSPropertyScrollMarginBlockEnd
    false, // CSSPropertyScrollMarginBlockStart
    false, // CSSPropertyScrollMarginBottom
    false, // CSSPropertyScrollMarginInlineEnd
    false, // CSSPropertyScrollMarginInlineStart
    false, // CSSPropertyScrollMarginLeft
    false, // CSSPropertyScrollMarginRight
    false, // CSSPropertyScrollMarginTop
    false, // CSSPropertyScrollPaddingBlockEnd
    false, // CSSPropertyScrollPaddingBlockStart
    false, // CSSPropertyScrollPaddingBottom
    false, // CSSPropertyScrollPaddingInlineEnd
    false, // CSSPropertyScrollPaddingInlineStart
    false, // CSSPropertyScrollPaddingLeft
    false, // CSSPropertyScrollPaddingRight
    false, // CSSPropertyScrollPaddingTop
    true , // CSSPropertyTextCombineUpright
    false, // CSSPropertyTop
    false, // CSSPropertyWidth
    false, // CSSPropertyWebkitBackgroundClip
    false, // CSSPropertyWebkitBackgroundOrigin
    false, // CSSPropertyWebkitBackgroundSize
    false, // CSSPropertyWebkitBoxShadow
    false, // CSSPropertyWebkitMaskClip
    false, // CSSPropertyWebkitMaskComposite
    false, // CSSPropertyWebkitMaskSourceType
    true , // CSSPropertyWebkitTextCombine
    false, // CSSPropertyAll
    false, // CSSPropertyAnimation
    false, // CSSPropertyBackground
    false, // CSSPropertyBackgroundPosition
    false, // CSSPropertyBackgroundRepeat
    false, // CSSPropertyBorder
    false, // CSSPropertyBorderBlock
    false, // CSSPropertyBorderBlockColor
    false, // CSSPropertyBorderBlockEnd
    false, // CSSPropertyBorderBlockStart
    false, // CSSPropertyBorderBlockStyle
    false, // CSSPropertyBorderBlockWidth
    false, // CSSPropertyBorderBottom
    false, // CSSPropertyBorderColor
    false, // CSSPropertyBorderImage
    false, // CSSPropertyBorderInline
    false, // CSSPropertyBorderInlineColor
    false, // CSSPropertyBorderInlineEnd
    false, // CSSPropertyBorderInlineStart
    false, // CSSPropertyBorderInlineStyle
    false, // CSSPropertyBorderInlineWidth
    false, // CSSPropertyBorderLeft
    false, // CSSPropertyBorderRadius
    false, // CSSPropertyBorderRight
    true , // CSSPropertyBorderSpacing
    false, // CSSPropertyBorderStyle
    false, // CSSPropertyBorderTop
    false, // CSSPropertyBorderWidth
    false, // CSSPropertyColumnRule
    false, // CSSPropertyColumns
    false, // CSSPropertyContainIntrinsicSize
    false, // CSSPropertyContainer
    false, // CSSPropertyFlex
    false, // CSSPropertyFlexFlow
    true , // CSSPropertyFont
    true , // CSSPropertyFontVariant
    false, // CSSPropertyGap
    false, // CSSPropertyGrid
    false, // CSSPropertyGridArea
    false, // CSSPropertyGridColumn
    false, // CSSPropertyGridRow
    false, // CSSPropertyGridTemplate
    false, // CSSPropertyInset
    false, // CSSPropertyInsetBlock
    false, // CSSPropertyInsetInline
    true , // CSSPropertyListStyle
    false, // CSSPropertyMargin
    false, // CSSPropertyMarginBlock
    false, // CSSPropertyMarginInline
    true , // CSSPropertyMarker
    false, // CSSPropertyMask
    false, // CSSPropertyMaskPosition
    false, // CSSPropertyMaskRepeat
    false, // CSSPropertyOffset
    false, // CSSPropertyOutline
    false, // CSSPropertyOverflow
    false, // CSSPropertyOverscrollBehavior
    false, // CSSPropertyPadding
    false, // CSSPropertyPaddingBlock
    false, // CSSPropertyPaddingInline
    false, // CSSPropertyPageBreakAfter
    false, // CSSPropertyPageBreakBefore
    false, // CSSPropertyPageBreakInside
    false, // CSSPropertyPerspectiveOrigin
    false, // CSSPropertyPlaceContent
    false, // CSSPropertyPlaceItems
    false, // CSSPropertyPlaceSelf
    false, // CSSPropertyScrollMargin
    false, // CSSPropertyScrollMarginBlock
    false, // CSSPropertyScrollMarginInline
    false, // CSSPropertyScrollPadding
    false, // CSSPropertyScrollPaddingBlock
    false, // CSSPropertyScrollPaddingInline
    false, // CSSPropertyTextDecoration
    true , // CSSPropertyTextDecorationSkip
    true , // CSSPropertyTextEmphasis
    false, // CSSPropertyTransformOrigin
    false, // CSSPropertyTransition
    false, // CSSPropertyWebkitBorderImage
    false, // CSSPropertyWebkitBorderRadius
    false, // CSSPropertyWebkitColumnBreakAfter
    false, // CSSPropertyWebkitColumnBreakBefore
    false, // CSSPropertyWebkitColumnBreakInside
    false, // CSSPropertyWebkitMask
    false, // CSSPropertyWebkitMaskPosition
    false, // CSSPropertyWebkitPerspective
    false, // CSSPropertyWebkitTextDecoration
    true , // CSSPropertyWebkitTextOrientation
    true , // CSSPropertyWebkitTextStroke
};

bool CSSProperty::isInheritedProperty(CSSPropertyID id)
{
    ASSERT(id <= lastCSSProperty);
    ASSERT(id != CSSPropertyInvalid);
    return isInheritedPropertyTable[id];
}

CSSPropertyID getRelatedPropertyId(const CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyBackgroundClip:
        return CSSPropertyID::CSSPropertyWebkitBackgroundClip;
    case CSSPropertyID::CSSPropertyBackgroundOrigin:
        return CSSPropertyID::CSSPropertyWebkitBackgroundOrigin;
    case CSSPropertyID::CSSPropertyBackgroundSize:
        return CSSPropertyID::CSSPropertyWebkitBackgroundSize;
    case CSSPropertyID::CSSPropertyBoxShadow:
        return CSSPropertyID::CSSPropertyWebkitBoxShadow;
    case CSSPropertyID::CSSPropertyMaskClip:
        return CSSPropertyID::CSSPropertyWebkitMaskClip;
    case CSSPropertyID::CSSPropertyMaskComposite:
        return CSSPropertyID::CSSPropertyWebkitMaskComposite;
    case CSSPropertyID::CSSPropertyMaskMode:
        return CSSPropertyID::CSSPropertyWebkitMaskSourceType;
    case CSSPropertyID::CSSPropertyTextCombineUpright:
        return CSSPropertyID::CSSPropertyWebkitTextCombine;
    case CSSPropertyID::CSSPropertyWebkitBackgroundClip:
        return CSSPropertyID::CSSPropertyBackgroundClip;
    case CSSPropertyID::CSSPropertyWebkitBackgroundOrigin:
        return CSSPropertyID::CSSPropertyBackgroundOrigin;
    case CSSPropertyID::CSSPropertyWebkitBackgroundSize:
        return CSSPropertyID::CSSPropertyBackgroundSize;
    case CSSPropertyID::CSSPropertyWebkitBoxShadow:
        return CSSPropertyID::CSSPropertyBoxShadow;
    case CSSPropertyID::CSSPropertyWebkitMaskClip:
        return CSSPropertyID::CSSPropertyMaskClip;
    case CSSPropertyID::CSSPropertyWebkitMaskComposite:
        return CSSPropertyID::CSSPropertyMaskComposite;
    case CSSPropertyID::CSSPropertyWebkitMaskSourceType:
        return CSSPropertyID::CSSPropertyMaskMode;
    case CSSPropertyID::CSSPropertyWebkitTextCombine:
        return CSSPropertyID::CSSPropertyTextCombineUpright;
    default:
        return CSSPropertyID::CSSPropertyInvalid;
    }
}

Vector<String> CSSProperty::aliasesForProperty(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyColorScheme:
        return { "supported-color-schemes"_s };
    case CSSPropertyID::CSSPropertyWritingMode:
        return { "-webkit-writing-mode"_s, "-epub-writing-mode"_s };
    case CSSPropertyID::CSSPropertyFontKerning:
        return { "-webkit-font-kerning"_s };
    case CSSPropertyID::CSSPropertyAlignContent:
        return { "-webkit-align-content"_s };
    case CSSPropertyID::CSSPropertyAlignItems:
        return { "-webkit-align-items"_s };
    case CSSPropertyID::CSSPropertyAlignSelf:
        return { "-webkit-align-self"_s };
    case CSSPropertyID::CSSPropertyAlt:
        return { "-webkit-alt"_s };
    case CSSPropertyID::CSSPropertyAnimationDelay:
        return { "-webkit-animation-delay"_s };
    case CSSPropertyID::CSSPropertyAnimationDirection:
        return { "-webkit-animation-direction"_s };
    case CSSPropertyID::CSSPropertyAnimationDuration:
        return { "-webkit-animation-duration"_s };
    case CSSPropertyID::CSSPropertyAnimationFillMode:
        return { "-webkit-animation-fill-mode"_s };
    case CSSPropertyID::CSSPropertyAnimationIterationCount:
        return { "-webkit-animation-iteration-count"_s };
    case CSSPropertyID::CSSPropertyAnimationName:
        return { "-webkit-animation-name"_s };
    case CSSPropertyID::CSSPropertyAnimationPlayState:
        return { "-webkit-animation-play-state"_s };
    case CSSPropertyID::CSSPropertyAnimationTimingFunction:
        return { "-webkit-animation-timing-function"_s };
    case CSSPropertyID::CSSPropertyAppearance:
        return { "-webkit-appearance"_s };
    case CSSPropertyID::CSSPropertyBackfaceVisibility:
        return { "-webkit-backface-visibility"_s };
    case CSSPropertyID::CSSPropertyBoxSizing:
        return { "-webkit-box-sizing"_s };
    case CSSPropertyID::CSSPropertyCaptionSide:
        return { "-epub-caption-side"_s };
    case CSSPropertyID::CSSPropertyClipPath:
        return { "-webkit-clip-path"_s };
    case CSSPropertyID::CSSPropertyColumnCount:
        return { "-webkit-column-count"_s };
    case CSSPropertyID::CSSPropertyColumnFill:
        return { "-webkit-column-fill"_s };
    case CSSPropertyID::CSSPropertyColumnGap:
        return { "grid-column-gap"_s, "-webkit-column-gap"_s };
    case CSSPropertyID::CSSPropertyColumnRuleColor:
        return { "-webkit-column-rule-color"_s };
    case CSSPropertyID::CSSPropertyColumnRuleStyle:
        return { "-webkit-column-rule-style"_s };
    case CSSPropertyID::CSSPropertyColumnRuleWidth:
        return { "-webkit-column-rule-width"_s };
    case CSSPropertyID::CSSPropertyColumnSpan:
        return { "-webkit-column-span"_s };
    case CSSPropertyID::CSSPropertyColumnWidth:
        return { "-webkit-column-width"_s };
    case CSSPropertyID::CSSPropertyFilter:
        return { "-webkit-filter"_s };
    case CSSPropertyID::CSSPropertyFlexBasis:
        return { "-webkit-flex-basis"_s };
    case CSSPropertyID::CSSPropertyFlexDirection:
        return { "-webkit-flex-direction"_s };
    case CSSPropertyID::CSSPropertyFlexGrow:
        return { "-webkit-flex-grow"_s };
    case CSSPropertyID::CSSPropertyFlexShrink:
        return { "-webkit-flex-shrink"_s };
    case CSSPropertyID::CSSPropertyFlexWrap:
        return { "-webkit-flex-wrap"_s };
    case CSSPropertyID::CSSPropertyJustifyContent:
        return { "-webkit-justify-content"_s };
    case CSSPropertyID::CSSPropertyJustifyItems:
        return { "-webkit-justify-items"_s };
    case CSSPropertyID::CSSPropertyLineBreak:
        return { "-webkit-line-break"_s };
    case CSSPropertyID::CSSPropertyMaskImage:
        return { "-webkit-mask-image"_s };
    case CSSPropertyID::CSSPropertyMaskOrigin:
        return { "-webkit-mask-origin"_s };
    case CSSPropertyID::CSSPropertyMaskSize:
        return { "-webkit-mask-size"_s };
    case CSSPropertyID::CSSPropertyOpacity:
        return { "-webkit-opacity"_s };
    case CSSPropertyID::CSSPropertyOrder:
        return { "-webkit-order"_s };
    case CSSPropertyID::CSSPropertyOverflowWrap:
        return { "word-wrap"_s };
    case CSSPropertyID::CSSPropertyPerspectiveOriginX:
        return { "-webkit-perspective-origin-x"_s };
    case CSSPropertyID::CSSPropertyPerspectiveOriginY:
        return { "-webkit-perspective-origin-y"_s };
    case CSSPropertyID::CSSPropertyPrintColorAdjust:
        return { "-webkit-print-color-adjust"_s, "color-adjust"_s };
    case CSSPropertyID::CSSPropertyRowGap:
        return { "grid-row-gap"_s };
    case CSSPropertyID::CSSPropertyShapeImageThreshold:
        return { "-webkit-shape-image-threshold"_s };
    case CSSPropertyID::CSSPropertyShapeMargin:
        return { "-webkit-shape-margin"_s };
    case CSSPropertyID::CSSPropertyShapeOutside:
        return { "-webkit-shape-outside"_s };
    case CSSPropertyID::CSSPropertyTextDecorationColor:
        return { "-webkit-text-decoration-color"_s };
    case CSSPropertyID::CSSPropertyTextDecorationLine:
        return { "-webkit-text-decoration-line"_s };
    case CSSPropertyID::CSSPropertyTextDecorationStyle:
        return { "-webkit-text-decoration-style"_s };
    case CSSPropertyID::CSSPropertyTextEmphasisColor:
        return { "-epub-text-emphasis-color"_s, "-webkit-text-emphasis-color"_s };
    case CSSPropertyID::CSSPropertyTextEmphasisPosition:
        return { "-webkit-text-emphasis-position"_s };
    case CSSPropertyID::CSSPropertyTextEmphasisStyle:
        return { "-epub-text-emphasis-style"_s, "-webkit-text-emphasis-style"_s };
    case CSSPropertyID::CSSPropertyTextTransform:
        return { "-epub-text-transform"_s };
    case CSSPropertyID::CSSPropertyTextUnderlinePosition:
        return { "-webkit-text-underline-position"_s };
    case CSSPropertyID::CSSPropertyTransform:
        return { "-webkit-transform"_s };
    case CSSPropertyID::CSSPropertyTransformOriginX:
        return { "-webkit-transform-origin-x"_s };
    case CSSPropertyID::CSSPropertyTransformOriginY:
        return { "-webkit-transform-origin-y"_s };
    case CSSPropertyID::CSSPropertyTransformOriginZ:
        return { "-webkit-transform-origin-z"_s };
    case CSSPropertyID::CSSPropertyTransformStyle:
        return { "-webkit-transform-style"_s };
    case CSSPropertyID::CSSPropertyTransitionDelay:
        return { "-webkit-transition-delay"_s };
    case CSSPropertyID::CSSPropertyTransitionDuration:
        return { "-webkit-transition-duration"_s };
    case CSSPropertyID::CSSPropertyTransitionProperty:
        return { "-webkit-transition-property"_s };
    case CSSPropertyID::CSSPropertyTransitionTimingFunction:
        return { "-webkit-transition-timing-function"_s };
    case CSSPropertyID::CSSPropertyWordBreak:
        return { "-epub-word-break"_s };
    case CSSPropertyID::CSSPropertyWebkitHyphens:
        return { "-epub-hyphens"_s };
    case CSSPropertyID::CSSPropertyWebkitMaskPositionY:
        return { "-webkit-mask-position-y"_s };
    case CSSPropertyID::CSSPropertyBlockSize:
        return { "-webkit-logical-height"_s };
    case CSSPropertyID::CSSPropertyBorderBlockEndColor:
        return { "-webkit-border-after-color"_s };
    case CSSPropertyID::CSSPropertyBorderBlockEndStyle:
        return { "-webkit-border-after-style"_s };
    case CSSPropertyID::CSSPropertyBorderBlockEndWidth:
        return { "-webkit-border-after-width"_s };
    case CSSPropertyID::CSSPropertyBorderBlockStartColor:
        return { "-webkit-border-before-color"_s };
    case CSSPropertyID::CSSPropertyBorderBlockStartStyle:
        return { "-webkit-border-before-style"_s };
    case CSSPropertyID::CSSPropertyBorderBlockStartWidth:
        return { "-webkit-border-before-width"_s };
    case CSSPropertyID::CSSPropertyBorderBottomLeftRadius:
        return { "-webkit-border-bottom-left-radius"_s };
    case CSSPropertyID::CSSPropertyBorderBottomRightRadius:
        return { "-webkit-border-bottom-right-radius"_s };
    case CSSPropertyID::CSSPropertyBorderInlineEndColor:
        return { "-webkit-border-end-color"_s };
    case CSSPropertyID::CSSPropertyBorderInlineEndStyle:
        return { "-webkit-border-end-style"_s };
    case CSSPropertyID::CSSPropertyBorderInlineEndWidth:
        return { "-webkit-border-end-width"_s };
    case CSSPropertyID::CSSPropertyBorderInlineStartColor:
        return { "-webkit-border-start-color"_s };
    case CSSPropertyID::CSSPropertyBorderInlineStartStyle:
        return { "-webkit-border-start-style"_s };
    case CSSPropertyID::CSSPropertyBorderInlineStartWidth:
        return { "-webkit-border-start-width"_s };
    case CSSPropertyID::CSSPropertyBorderTopLeftRadius:
        return { "-webkit-border-top-left-radius"_s };
    case CSSPropertyID::CSSPropertyBorderTopRightRadius:
        return { "-webkit-border-top-right-radius"_s };
    case CSSPropertyID::CSSPropertyInlineSize:
        return { "-webkit-logical-width"_s };
    case CSSPropertyID::CSSPropertyMarginBlockEnd:
        return { "-webkit-margin-after"_s };
    case CSSPropertyID::CSSPropertyMarginBlockStart:
        return { "-webkit-margin-before"_s };
    case CSSPropertyID::CSSPropertyMarginInlineEnd:
        return { "-webkit-margin-end"_s };
    case CSSPropertyID::CSSPropertyMarginInlineStart:
        return { "-webkit-margin-start"_s };
    case CSSPropertyID::CSSPropertyMaxBlockSize:
        return { "-webkit-max-logical-height"_s };
    case CSSPropertyID::CSSPropertyMaxInlineSize:
        return { "-webkit-max-logical-width"_s };
    case CSSPropertyID::CSSPropertyMinBlockSize:
        return { "-webkit-min-logical-height"_s };
    case CSSPropertyID::CSSPropertyMinInlineSize:
        return { "-webkit-min-logical-width"_s };
    case CSSPropertyID::CSSPropertyPaddingBlockEnd:
        return { "-webkit-padding-after"_s };
    case CSSPropertyID::CSSPropertyPaddingBlockStart:
        return { "-webkit-padding-before"_s };
    case CSSPropertyID::CSSPropertyPaddingInlineEnd:
        return { "-webkit-padding-end"_s };
    case CSSPropertyID::CSSPropertyPaddingInlineStart:
        return { "-webkit-padding-start"_s };
    case CSSPropertyID::CSSPropertyScrollMarginBottom:
        return { "scroll-snap-margin-bottom"_s };
    case CSSPropertyID::CSSPropertyScrollMarginLeft:
        return { "scroll-snap-margin-left"_s };
    case CSSPropertyID::CSSPropertyScrollMarginRight:
        return { "scroll-snap-margin-right"_s };
    case CSSPropertyID::CSSPropertyScrollMarginTop:
        return { "scroll-snap-margin-top"_s };
    case CSSPropertyID::CSSPropertyWebkitTextCombine:
        return { "-epub-text-combine"_s };
    case CSSPropertyID::CSSPropertyAnimation:
        return { "-webkit-animation"_s };
    case CSSPropertyID::CSSPropertyBorderBlockEnd:
        return { "-webkit-border-after"_s };
    case CSSPropertyID::CSSPropertyBorderBlockStart:
        return { "-webkit-border-before"_s };
    case CSSPropertyID::CSSPropertyBorderInlineEnd:
        return { "-webkit-border-end"_s };
    case CSSPropertyID::CSSPropertyBorderInlineStart:
        return { "-webkit-border-start"_s };
    case CSSPropertyID::CSSPropertyColumnRule:
        return { "-webkit-column-rule"_s };
    case CSSPropertyID::CSSPropertyColumns:
        return { "-webkit-columns"_s };
    case CSSPropertyID::CSSPropertyFlex:
        return { "-webkit-flex"_s };
    case CSSPropertyID::CSSPropertyFlexFlow:
        return { "-webkit-flex-flow"_s };
    case CSSPropertyID::CSSPropertyGap:
        return { "grid-gap"_s };
    case CSSPropertyID::CSSPropertyMaskRepeat:
        return { "-webkit-mask-repeat"_s };
    case CSSPropertyID::CSSPropertyPerspectiveOrigin:
        return { "-webkit-perspective-origin"_s };
    case CSSPropertyID::CSSPropertyScrollMargin:
        return { "scroll-snap-margin"_s };
    case CSSPropertyID::CSSPropertyTextDecorationSkip:
        return { "-webkit-text-decoration-skip"_s };
    case CSSPropertyID::CSSPropertyTextEmphasis:
        return { "-epub-text-emphasis"_s, "-webkit-text-emphasis"_s };
    case CSSPropertyID::CSSPropertyTransformOrigin:
        return { "-webkit-transform-origin"_s };
    case CSSPropertyID::CSSPropertyTransition:
        return { "-webkit-transition"_s };
    case CSSPropertyID::CSSPropertyWebkitTextOrientation:
        return { "-epub-text-orientation"_s };
    default:
        return { };
    }
}

bool CSSProperty::isColorProperty(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyColor:
    case CSSPropertyID::CSSPropertyAccentColor:
    case CSSPropertyID::CSSPropertyBackgroundColor:
    case CSSPropertyID::CSSPropertyCaretColor:
    case CSSPropertyID::CSSPropertyColumnRuleColor:
    case CSSPropertyID::CSSPropertyFill:
    case CSSPropertyID::CSSPropertyFloodColor:
    case CSSPropertyID::CSSPropertyLightingColor:
    case CSSPropertyID::CSSPropertyOutlineColor:
    case CSSPropertyID::CSSPropertyStopColor:
    case CSSPropertyID::CSSPropertyStroke:
    case CSSPropertyID::CSSPropertyStrokeColor:
    case CSSPropertyID::CSSPropertyTextDecorationColor:
    case CSSPropertyID::CSSPropertyTextEmphasisColor:
    case CSSPropertyID::CSSPropertyWebkitTextFillColor:
    case CSSPropertyID::CSSPropertyWebkitTextStrokeColor:
    case CSSPropertyID::CSSPropertyBorderBlockEndColor:
    case CSSPropertyID::CSSPropertyBorderBlockStartColor:
    case CSSPropertyID::CSSPropertyBorderBottomColor:
    case CSSPropertyID::CSSPropertyBorderInlineEndColor:
    case CSSPropertyID::CSSPropertyBorderInlineStartColor:
    case CSSPropertyID::CSSPropertyBorderLeftColor:
    case CSSPropertyID::CSSPropertyBorderRightColor:
    case CSSPropertyID::CSSPropertyBorderTopColor:
        return true;
    default:
        return false;
    }
}

bool CSSProperty::isDirectionAwareProperty(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyBorderBlockEndColor:
    case CSSPropertyID::CSSPropertyBorderBlockStartColor:
    case CSSPropertyID::CSSPropertyBorderInlineEndColor:
    case CSSPropertyID::CSSPropertyBorderInlineStartColor:
    case CSSPropertyID::CSSPropertyBorderEndEndRadius:
    case CSSPropertyID::CSSPropertyBorderEndStartRadius:
    case CSSPropertyID::CSSPropertyBorderStartEndRadius:
    case CSSPropertyID::CSSPropertyBorderStartStartRadius:
    case CSSPropertyID::CSSPropertyBorderBlockEndStyle:
    case CSSPropertyID::CSSPropertyBorderBlockStartStyle:
    case CSSPropertyID::CSSPropertyBorderInlineEndStyle:
    case CSSPropertyID::CSSPropertyBorderInlineStartStyle:
    case CSSPropertyID::CSSPropertyBorderBlockEndWidth:
    case CSSPropertyID::CSSPropertyBorderBlockStartWidth:
    case CSSPropertyID::CSSPropertyBorderInlineEndWidth:
    case CSSPropertyID::CSSPropertyBorderInlineStartWidth:
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
    case CSSPropertyID::CSSPropertyInsetBlockEnd:
    case CSSPropertyID::CSSPropertyInsetBlockStart:
    case CSSPropertyID::CSSPropertyInsetInlineEnd:
    case CSSPropertyID::CSSPropertyInsetInlineStart:
    case CSSPropertyID::CSSPropertyMarginBlockEnd:
    case CSSPropertyID::CSSPropertyMarginBlockStart:
    case CSSPropertyID::CSSPropertyMarginInlineEnd:
    case CSSPropertyID::CSSPropertyMarginInlineStart:
    case CSSPropertyID::CSSPropertyMaxBlockSize:
    case CSSPropertyID::CSSPropertyMaxInlineSize:
    case CSSPropertyID::CSSPropertyMinBlockSize:
    case CSSPropertyID::CSSPropertyMinInlineSize:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
    case CSSPropertyID::CSSPropertyPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyPaddingBlockStart:
    case CSSPropertyID::CSSPropertyPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyPaddingInlineStart:
    case CSSPropertyID::CSSPropertyScrollMarginBlockEnd:
    case CSSPropertyID::CSSPropertyScrollMarginBlockStart:
    case CSSPropertyID::CSSPropertyScrollMarginInlineEnd:
    case CSSPropertyID::CSSPropertyScrollMarginInlineStart:
    case CSSPropertyID::CSSPropertyScrollPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingBlockStart:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineStart:
    case CSSPropertyID::CSSPropertyBlockSize:
    case CSSPropertyID::CSSPropertyInlineSize:
        return true;
    default:
        return false;
    }
}

bool CSSProperty::isInLogicalPropertyGroup(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyBorderBlockEndColor:
    case CSSPropertyID::CSSPropertyBorderBlockStartColor:
    case CSSPropertyID::CSSPropertyBorderInlineEndColor:
    case CSSPropertyID::CSSPropertyBorderInlineStartColor:
    case CSSPropertyID::CSSPropertyBorderBottomColor:
    case CSSPropertyID::CSSPropertyBorderLeftColor:
    case CSSPropertyID::CSSPropertyBorderRightColor:
    case CSSPropertyID::CSSPropertyBorderTopColor:
    case CSSPropertyID::CSSPropertyBorderEndEndRadius:
    case CSSPropertyID::CSSPropertyBorderEndStartRadius:
    case CSSPropertyID::CSSPropertyBorderStartEndRadius:
    case CSSPropertyID::CSSPropertyBorderStartStartRadius:
    case CSSPropertyID::CSSPropertyBorderBottomLeftRadius:
    case CSSPropertyID::CSSPropertyBorderBottomRightRadius:
    case CSSPropertyID::CSSPropertyBorderTopLeftRadius:
    case CSSPropertyID::CSSPropertyBorderTopRightRadius:
    case CSSPropertyID::CSSPropertyBorderBlockEndStyle:
    case CSSPropertyID::CSSPropertyBorderBlockStartStyle:
    case CSSPropertyID::CSSPropertyBorderInlineEndStyle:
    case CSSPropertyID::CSSPropertyBorderInlineStartStyle:
    case CSSPropertyID::CSSPropertyBorderBottomStyle:
    case CSSPropertyID::CSSPropertyBorderLeftStyle:
    case CSSPropertyID::CSSPropertyBorderRightStyle:
    case CSSPropertyID::CSSPropertyBorderTopStyle:
    case CSSPropertyID::CSSPropertyBorderBlockEndWidth:
    case CSSPropertyID::CSSPropertyBorderBlockStartWidth:
    case CSSPropertyID::CSSPropertyBorderInlineEndWidth:
    case CSSPropertyID::CSSPropertyBorderInlineStartWidth:
    case CSSPropertyID::CSSPropertyBorderBottomWidth:
    case CSSPropertyID::CSSPropertyBorderLeftWidth:
    case CSSPropertyID::CSSPropertyBorderRightWidth:
    case CSSPropertyID::CSSPropertyBorderTopWidth:
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
    case CSSPropertyID::CSSPropertyContainIntrinsicHeight:
    case CSSPropertyID::CSSPropertyContainIntrinsicWidth:
    case CSSPropertyID::CSSPropertyInsetBlockEnd:
    case CSSPropertyID::CSSPropertyInsetBlockStart:
    case CSSPropertyID::CSSPropertyInsetInlineEnd:
    case CSSPropertyID::CSSPropertyInsetInlineStart:
    case CSSPropertyID::CSSPropertyBottom:
    case CSSPropertyID::CSSPropertyLeft:
    case CSSPropertyID::CSSPropertyRight:
    case CSSPropertyID::CSSPropertyTop:
    case CSSPropertyID::CSSPropertyMarginBlockEnd:
    case CSSPropertyID::CSSPropertyMarginBlockStart:
    case CSSPropertyID::CSSPropertyMarginInlineEnd:
    case CSSPropertyID::CSSPropertyMarginInlineStart:
    case CSSPropertyID::CSSPropertyMarginBottom:
    case CSSPropertyID::CSSPropertyMarginLeft:
    case CSSPropertyID::CSSPropertyMarginRight:
    case CSSPropertyID::CSSPropertyMarginTop:
    case CSSPropertyID::CSSPropertyMaxBlockSize:
    case CSSPropertyID::CSSPropertyMaxInlineSize:
    case CSSPropertyID::CSSPropertyMaxHeight:
    case CSSPropertyID::CSSPropertyMaxWidth:
    case CSSPropertyID::CSSPropertyMinBlockSize:
    case CSSPropertyID::CSSPropertyMinInlineSize:
    case CSSPropertyID::CSSPropertyMinHeight:
    case CSSPropertyID::CSSPropertyMinWidth:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorX:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorY:
    case CSSPropertyID::CSSPropertyPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyPaddingBlockStart:
    case CSSPropertyID::CSSPropertyPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyPaddingInlineStart:
    case CSSPropertyID::CSSPropertyPaddingBottom:
    case CSSPropertyID::CSSPropertyPaddingLeft:
    case CSSPropertyID::CSSPropertyPaddingRight:
    case CSSPropertyID::CSSPropertyPaddingTop:
    case CSSPropertyID::CSSPropertyScrollMarginBlockEnd:
    case CSSPropertyID::CSSPropertyScrollMarginBlockStart:
    case CSSPropertyID::CSSPropertyScrollMarginInlineEnd:
    case CSSPropertyID::CSSPropertyScrollMarginInlineStart:
    case CSSPropertyID::CSSPropertyScrollMarginBottom:
    case CSSPropertyID::CSSPropertyScrollMarginLeft:
    case CSSPropertyID::CSSPropertyScrollMarginRight:
    case CSSPropertyID::CSSPropertyScrollMarginTop:
    case CSSPropertyID::CSSPropertyScrollPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingBlockStart:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineStart:
    case CSSPropertyID::CSSPropertyScrollPaddingBottom:
    case CSSPropertyID::CSSPropertyScrollPaddingLeft:
    case CSSPropertyID::CSSPropertyScrollPaddingRight:
    case CSSPropertyID::CSSPropertyScrollPaddingTop:
    case CSSPropertyID::CSSPropertyBlockSize:
    case CSSPropertyID::CSSPropertyInlineSize:
    case CSSPropertyID::CSSPropertyHeight:
    case CSSPropertyID::CSSPropertyWidth:
        return true;
    default:
        return false;
    }
}

bool CSSProperty::areInSameLogicalPropertyGroupWithDifferentMappingLogic(CSSPropertyID id1, CSSPropertyID id2)
{
    switch (id1) {
    case CSSPropertyID::CSSPropertyBorderBlockEndColor:
    case CSSPropertyID::CSSPropertyBorderBlockStartColor:
    case CSSPropertyID::CSSPropertyBorderInlineEndColor:
    case CSSPropertyID::CSSPropertyBorderInlineStartColor:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBottomColor:
        case CSSPropertyID::CSSPropertyBorderLeftColor:
        case CSSPropertyID::CSSPropertyBorderRightColor:
        case CSSPropertyID::CSSPropertyBorderTopColor:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBottomColor:
    case CSSPropertyID::CSSPropertyBorderLeftColor:
    case CSSPropertyID::CSSPropertyBorderRightColor:
    case CSSPropertyID::CSSPropertyBorderTopColor:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBlockEndColor:
        case CSSPropertyID::CSSPropertyBorderBlockStartColor:
        case CSSPropertyID::CSSPropertyBorderInlineEndColor:
        case CSSPropertyID::CSSPropertyBorderInlineStartColor:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderEndEndRadius:
    case CSSPropertyID::CSSPropertyBorderEndStartRadius:
    case CSSPropertyID::CSSPropertyBorderStartEndRadius:
    case CSSPropertyID::CSSPropertyBorderStartStartRadius:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBottomLeftRadius:
        case CSSPropertyID::CSSPropertyBorderBottomRightRadius:
        case CSSPropertyID::CSSPropertyBorderTopLeftRadius:
        case CSSPropertyID::CSSPropertyBorderTopRightRadius:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBottomLeftRadius:
    case CSSPropertyID::CSSPropertyBorderBottomRightRadius:
    case CSSPropertyID::CSSPropertyBorderTopLeftRadius:
    case CSSPropertyID::CSSPropertyBorderTopRightRadius:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderEndEndRadius:
        case CSSPropertyID::CSSPropertyBorderEndStartRadius:
        case CSSPropertyID::CSSPropertyBorderStartEndRadius:
        case CSSPropertyID::CSSPropertyBorderStartStartRadius:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBlockEndStyle:
    case CSSPropertyID::CSSPropertyBorderBlockStartStyle:
    case CSSPropertyID::CSSPropertyBorderInlineEndStyle:
    case CSSPropertyID::CSSPropertyBorderInlineStartStyle:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBottomStyle:
        case CSSPropertyID::CSSPropertyBorderLeftStyle:
        case CSSPropertyID::CSSPropertyBorderRightStyle:
        case CSSPropertyID::CSSPropertyBorderTopStyle:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBottomStyle:
    case CSSPropertyID::CSSPropertyBorderLeftStyle:
    case CSSPropertyID::CSSPropertyBorderRightStyle:
    case CSSPropertyID::CSSPropertyBorderTopStyle:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBlockEndStyle:
        case CSSPropertyID::CSSPropertyBorderBlockStartStyle:
        case CSSPropertyID::CSSPropertyBorderInlineEndStyle:
        case CSSPropertyID::CSSPropertyBorderInlineStartStyle:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBlockEndWidth:
    case CSSPropertyID::CSSPropertyBorderBlockStartWidth:
    case CSSPropertyID::CSSPropertyBorderInlineEndWidth:
    case CSSPropertyID::CSSPropertyBorderInlineStartWidth:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBottomWidth:
        case CSSPropertyID::CSSPropertyBorderLeftWidth:
        case CSSPropertyID::CSSPropertyBorderRightWidth:
        case CSSPropertyID::CSSPropertyBorderTopWidth:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBorderBottomWidth:
    case CSSPropertyID::CSSPropertyBorderLeftWidth:
    case CSSPropertyID::CSSPropertyBorderRightWidth:
    case CSSPropertyID::CSSPropertyBorderTopWidth:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBorderBlockEndWidth:
        case CSSPropertyID::CSSPropertyBorderBlockStartWidth:
        case CSSPropertyID::CSSPropertyBorderInlineEndWidth:
        case CSSPropertyID::CSSPropertyBorderInlineStartWidth:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
        switch (id2) {
        case CSSPropertyID::CSSPropertyContainIntrinsicWidth:
        case CSSPropertyID::CSSPropertyContainIntrinsicHeight:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyContainIntrinsicWidth:
    case CSSPropertyID::CSSPropertyContainIntrinsicHeight:
        switch (id2) {
        case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize:
        case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyInsetBlockEnd:
    case CSSPropertyID::CSSPropertyInsetBlockStart:
    case CSSPropertyID::CSSPropertyInsetInlineEnd:
    case CSSPropertyID::CSSPropertyInsetInlineStart:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBottom:
        case CSSPropertyID::CSSPropertyLeft:
        case CSSPropertyID::CSSPropertyRight:
        case CSSPropertyID::CSSPropertyTop:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBottom:
    case CSSPropertyID::CSSPropertyLeft:
    case CSSPropertyID::CSSPropertyRight:
    case CSSPropertyID::CSSPropertyTop:
        switch (id2) {
        case CSSPropertyID::CSSPropertyInsetBlockEnd:
        case CSSPropertyID::CSSPropertyInsetBlockStart:
        case CSSPropertyID::CSSPropertyInsetInlineEnd:
        case CSSPropertyID::CSSPropertyInsetInlineStart:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMarginBlockEnd:
    case CSSPropertyID::CSSPropertyMarginBlockStart:
    case CSSPropertyID::CSSPropertyMarginInlineEnd:
    case CSSPropertyID::CSSPropertyMarginInlineStart:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMarginBottom:
        case CSSPropertyID::CSSPropertyMarginLeft:
        case CSSPropertyID::CSSPropertyMarginRight:
        case CSSPropertyID::CSSPropertyMarginTop:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMarginBottom:
    case CSSPropertyID::CSSPropertyMarginLeft:
    case CSSPropertyID::CSSPropertyMarginRight:
    case CSSPropertyID::CSSPropertyMarginTop:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMarginBlockEnd:
        case CSSPropertyID::CSSPropertyMarginBlockStart:
        case CSSPropertyID::CSSPropertyMarginInlineEnd:
        case CSSPropertyID::CSSPropertyMarginInlineStart:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMaxBlockSize:
    case CSSPropertyID::CSSPropertyMaxInlineSize:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMaxWidth:
        case CSSPropertyID::CSSPropertyMaxHeight:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMaxWidth:
    case CSSPropertyID::CSSPropertyMaxHeight:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMaxBlockSize:
        case CSSPropertyID::CSSPropertyMaxInlineSize:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMinBlockSize:
    case CSSPropertyID::CSSPropertyMinInlineSize:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMinWidth:
        case CSSPropertyID::CSSPropertyMinHeight:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyMinWidth:
    case CSSPropertyID::CSSPropertyMinHeight:
        switch (id2) {
        case CSSPropertyID::CSSPropertyMinBlockSize:
        case CSSPropertyID::CSSPropertyMinInlineSize:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
        switch (id2) {
        case CSSPropertyID::CSSPropertyOverscrollBehaviorX:
        case CSSPropertyID::CSSPropertyOverscrollBehaviorY:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorX:
    case CSSPropertyID::CSSPropertyOverscrollBehaviorY:
        switch (id2) {
        case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock:
        case CSSPropertyID::CSSPropertyOverscrollBehaviorInline:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyPaddingBlockStart:
    case CSSPropertyID::CSSPropertyPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyPaddingInlineStart:
        switch (id2) {
        case CSSPropertyID::CSSPropertyPaddingBottom:
        case CSSPropertyID::CSSPropertyPaddingLeft:
        case CSSPropertyID::CSSPropertyPaddingRight:
        case CSSPropertyID::CSSPropertyPaddingTop:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyPaddingBottom:
    case CSSPropertyID::CSSPropertyPaddingLeft:
    case CSSPropertyID::CSSPropertyPaddingRight:
    case CSSPropertyID::CSSPropertyPaddingTop:
        switch (id2) {
        case CSSPropertyID::CSSPropertyPaddingBlockEnd:
        case CSSPropertyID::CSSPropertyPaddingBlockStart:
        case CSSPropertyID::CSSPropertyPaddingInlineEnd:
        case CSSPropertyID::CSSPropertyPaddingInlineStart:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyScrollMarginBlockEnd:
    case CSSPropertyID::CSSPropertyScrollMarginBlockStart:
    case CSSPropertyID::CSSPropertyScrollMarginInlineEnd:
    case CSSPropertyID::CSSPropertyScrollMarginInlineStart:
        switch (id2) {
        case CSSPropertyID::CSSPropertyScrollMarginBottom:
        case CSSPropertyID::CSSPropertyScrollMarginLeft:
        case CSSPropertyID::CSSPropertyScrollMarginRight:
        case CSSPropertyID::CSSPropertyScrollMarginTop:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyScrollMarginBottom:
    case CSSPropertyID::CSSPropertyScrollMarginLeft:
    case CSSPropertyID::CSSPropertyScrollMarginRight:
    case CSSPropertyID::CSSPropertyScrollMarginTop:
        switch (id2) {
        case CSSPropertyID::CSSPropertyScrollMarginBlockEnd:
        case CSSPropertyID::CSSPropertyScrollMarginBlockStart:
        case CSSPropertyID::CSSPropertyScrollMarginInlineEnd:
        case CSSPropertyID::CSSPropertyScrollMarginInlineStart:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyScrollPaddingBlockEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingBlockStart:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineEnd:
    case CSSPropertyID::CSSPropertyScrollPaddingInlineStart:
        switch (id2) {
        case CSSPropertyID::CSSPropertyScrollPaddingBottom:
        case CSSPropertyID::CSSPropertyScrollPaddingLeft:
        case CSSPropertyID::CSSPropertyScrollPaddingRight:
        case CSSPropertyID::CSSPropertyScrollPaddingTop:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyScrollPaddingBottom:
    case CSSPropertyID::CSSPropertyScrollPaddingLeft:
    case CSSPropertyID::CSSPropertyScrollPaddingRight:
    case CSSPropertyID::CSSPropertyScrollPaddingTop:
        switch (id2) {
        case CSSPropertyID::CSSPropertyScrollPaddingBlockEnd:
        case CSSPropertyID::CSSPropertyScrollPaddingBlockStart:
        case CSSPropertyID::CSSPropertyScrollPaddingInlineEnd:
        case CSSPropertyID::CSSPropertyScrollPaddingInlineStart:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyBlockSize:
    case CSSPropertyID::CSSPropertyInlineSize:
        switch (id2) {
        case CSSPropertyID::CSSPropertyWidth:
        case CSSPropertyID::CSSPropertyHeight:
            return true;
        default:
            return false;
        }
    case CSSPropertyID::CSSPropertyWidth:
    case CSSPropertyID::CSSPropertyHeight:
        switch (id2) {
        case CSSPropertyID::CSSPropertyBlockSize:
        case CSSPropertyID::CSSPropertyInlineSize:
            return true;
        default:
            return false;
        }
    default:
        return false;
    }
}

CSSPropertyID CSSProperty::resolveDirectionAwareProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode)
{
    auto textflow = makeTextFlow(writingMode, direction);
    switch (propertyID) {
    case CSSPropertyID::CSSPropertyBorderBlockEndColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderBlockStartColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineEndColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineStartColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopColor, CSSPropertyBorderRightColor, CSSPropertyBorderBottomColor, CSSPropertyBorderLeftColor };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyBorderEndEndRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopLeftRadius, CSSPropertyBorderTopRightRadius, CSSPropertyBorderBottomRightRadius, CSSPropertyBorderBottomLeftRadius };
        return properties[static_cast<size_t>(mapLogicalCornerToPhysicalCorner(textflow, LogicalBoxCorner::EndEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderEndStartRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopLeftRadius, CSSPropertyBorderTopRightRadius, CSSPropertyBorderBottomRightRadius, CSSPropertyBorderBottomLeftRadius };
        return properties[static_cast<size_t>(mapLogicalCornerToPhysicalCorner(textflow, LogicalBoxCorner::EndStart))];
    }
    case CSSPropertyID::CSSPropertyBorderStartEndRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopLeftRadius, CSSPropertyBorderTopRightRadius, CSSPropertyBorderBottomRightRadius, CSSPropertyBorderBottomLeftRadius };
        return properties[static_cast<size_t>(mapLogicalCornerToPhysicalCorner(textflow, LogicalBoxCorner::StartEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderStartStartRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopLeftRadius, CSSPropertyBorderTopRightRadius, CSSPropertyBorderBottomRightRadius, CSSPropertyBorderBottomLeftRadius };
        return properties[static_cast<size_t>(mapLogicalCornerToPhysicalCorner(textflow, LogicalBoxCorner::StartStart))];
    }
    case CSSPropertyID::CSSPropertyBorderBlockEndStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderBlockStartStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineEndStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineStartStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopStyle, CSSPropertyBorderRightStyle, CSSPropertyBorderBottomStyle, CSSPropertyBorderLeftStyle };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyBorderBlockEndWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderBlockStartWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineEndWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyBorderInlineStartWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderTopWidth, CSSPropertyBorderRightWidth, CSSPropertyBorderBottomWidth, CSSPropertyBorderLeftWidth };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyContainIntrinsicBlockSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyContainIntrinsicWidth, CSSPropertyContainIntrinsicHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Block))];
    }
    case CSSPropertyID::CSSPropertyContainIntrinsicInlineSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyContainIntrinsicWidth, CSSPropertyContainIntrinsicHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Inline))];
    }
    case CSSPropertyID::CSSPropertyInsetBlockEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyTop, CSSPropertyRight, CSSPropertyBottom, CSSPropertyLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyInsetBlockStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyTop, CSSPropertyRight, CSSPropertyBottom, CSSPropertyLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyInsetInlineEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyTop, CSSPropertyRight, CSSPropertyBottom, CSSPropertyLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyInsetInlineStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyTop, CSSPropertyRight, CSSPropertyBottom, CSSPropertyLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyMarginBlockEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyMarginBlockStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyMarginInlineEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyMarginInlineStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginTop, CSSPropertyMarginRight, CSSPropertyMarginBottom, CSSPropertyMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyMaxBlockSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Block))];
    }
    case CSSPropertyID::CSSPropertyMaxInlineSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMaxWidth, CSSPropertyMaxHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Inline))];
    }
    case CSSPropertyID::CSSPropertyMinBlockSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Block))];
    }
    case CSSPropertyID::CSSPropertyMinInlineSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMinWidth, CSSPropertyMinHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Inline))];
    }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorBlock: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyOverscrollBehaviorX, CSSPropertyOverscrollBehaviorY };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Block))];
    }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorInline: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyOverscrollBehaviorX, CSSPropertyOverscrollBehaviorY };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Inline))];
    }
    case CSSPropertyID::CSSPropertyPaddingBlockEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyPaddingBlockStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyPaddingInlineEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyPaddingInlineStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingTop, CSSPropertyPaddingRight, CSSPropertyPaddingBottom, CSSPropertyPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginBlockEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginTop, CSSPropertyScrollMarginRight, CSSPropertyScrollMarginBottom, CSSPropertyScrollMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginBlockStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginTop, CSSPropertyScrollMarginRight, CSSPropertyScrollMarginBottom, CSSPropertyScrollMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginInlineEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginTop, CSSPropertyScrollMarginRight, CSSPropertyScrollMarginBottom, CSSPropertyScrollMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginInlineStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginTop, CSSPropertyScrollMarginRight, CSSPropertyScrollMarginBottom, CSSPropertyScrollMarginLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingBlockEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingTop, CSSPropertyScrollPaddingRight, CSSPropertyScrollPaddingBottom, CSSPropertyScrollPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockEnd))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingBlockStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingTop, CSSPropertyScrollPaddingRight, CSSPropertyScrollPaddingBottom, CSSPropertyScrollPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::BlockStart))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingInlineEnd: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingTop, CSSPropertyScrollPaddingRight, CSSPropertyScrollPaddingBottom, CSSPropertyScrollPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineEnd))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingInlineStart: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingTop, CSSPropertyScrollPaddingRight, CSSPropertyScrollPaddingBottom, CSSPropertyScrollPaddingLeft };
        return properties[static_cast<size_t>(mapLogicalSideToPhysicalSide(textflow, LogicalBoxSide::InlineStart))];
    }
    case CSSPropertyID::CSSPropertyBlockSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Block))];
    }
    case CSSPropertyID::CSSPropertyInlineSize: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyWidth, CSSPropertyHeight };
        return properties[static_cast<size_t>(mapLogicalAxisToPhysicalAxis(textflow, LogicalBoxAxis::Inline))];
    }
    default:
        return propertyID;
    }
}

CSSPropertyID CSSProperty::unresolvePhysicalProperty(CSSPropertyID propertyID, TextDirection direction, WritingMode writingMode)
{
    auto textflow = makeTextFlow(writingMode, direction);
    switch (propertyID) {
    case CSSPropertyID::CSSPropertyBorderBottomColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartColor, CSSPropertyBorderInlineEndColor, CSSPropertyBorderBlockEndColor, CSSPropertyBorderInlineStartColor };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyBorderLeftColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartColor, CSSPropertyBorderInlineEndColor, CSSPropertyBorderBlockEndColor, CSSPropertyBorderInlineStartColor };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyBorderRightColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartColor, CSSPropertyBorderInlineEndColor, CSSPropertyBorderBlockEndColor, CSSPropertyBorderInlineStartColor };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyBorderTopColor: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartColor, CSSPropertyBorderInlineEndColor, CSSPropertyBorderBlockEndColor, CSSPropertyBorderInlineStartColor };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyBorderBottomLeftRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderStartStartRadius, CSSPropertyBorderStartEndRadius, CSSPropertyBorderEndStartRadius, CSSPropertyBorderEndEndRadius };
        return properties[static_cast<size_t>(mapPhysicalCornerToLogicalCorner(textflow, BoxCorner::BottomLeft))];
    }
    case CSSPropertyID::CSSPropertyBorderBottomRightRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderStartStartRadius, CSSPropertyBorderStartEndRadius, CSSPropertyBorderEndStartRadius, CSSPropertyBorderEndEndRadius };
        return properties[static_cast<size_t>(mapPhysicalCornerToLogicalCorner(textflow, BoxCorner::BottomRight))];
    }
    case CSSPropertyID::CSSPropertyBorderTopLeftRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderStartStartRadius, CSSPropertyBorderStartEndRadius, CSSPropertyBorderEndStartRadius, CSSPropertyBorderEndEndRadius };
        return properties[static_cast<size_t>(mapPhysicalCornerToLogicalCorner(textflow, BoxCorner::TopLeft))];
    }
    case CSSPropertyID::CSSPropertyBorderTopRightRadius: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderStartStartRadius, CSSPropertyBorderStartEndRadius, CSSPropertyBorderEndStartRadius, CSSPropertyBorderEndEndRadius };
        return properties[static_cast<size_t>(mapPhysicalCornerToLogicalCorner(textflow, BoxCorner::TopRight))];
    }
    case CSSPropertyID::CSSPropertyBorderBottomStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartStyle, CSSPropertyBorderInlineEndStyle, CSSPropertyBorderBlockEndStyle, CSSPropertyBorderInlineStartStyle };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyBorderLeftStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartStyle, CSSPropertyBorderInlineEndStyle, CSSPropertyBorderBlockEndStyle, CSSPropertyBorderInlineStartStyle };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyBorderRightStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartStyle, CSSPropertyBorderInlineEndStyle, CSSPropertyBorderBlockEndStyle, CSSPropertyBorderInlineStartStyle };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyBorderTopStyle: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartStyle, CSSPropertyBorderInlineEndStyle, CSSPropertyBorderBlockEndStyle, CSSPropertyBorderInlineStartStyle };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyBorderBottomWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartWidth, CSSPropertyBorderInlineEndWidth, CSSPropertyBorderBlockEndWidth, CSSPropertyBorderInlineStartWidth };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyBorderLeftWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartWidth, CSSPropertyBorderInlineEndWidth, CSSPropertyBorderBlockEndWidth, CSSPropertyBorderInlineStartWidth };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyBorderRightWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartWidth, CSSPropertyBorderInlineEndWidth, CSSPropertyBorderBlockEndWidth, CSSPropertyBorderInlineStartWidth };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyBorderTopWidth: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyBorderBlockStartWidth, CSSPropertyBorderInlineEndWidth, CSSPropertyBorderBlockEndWidth, CSSPropertyBorderInlineStartWidth };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyContainIntrinsicWidth: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyContainIntrinsicInlineSize, CSSPropertyContainIntrinsicBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Horizontal))];
    }
    case CSSPropertyID::CSSPropertyContainIntrinsicHeight: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyContainIntrinsicInlineSize, CSSPropertyContainIntrinsicBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Vertical))];
    }
    case CSSPropertyID::CSSPropertyBottom: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyInsetBlockStart, CSSPropertyInsetInlineEnd, CSSPropertyInsetBlockEnd, CSSPropertyInsetInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyLeft: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyInsetBlockStart, CSSPropertyInsetInlineEnd, CSSPropertyInsetBlockEnd, CSSPropertyInsetInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyRight: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyInsetBlockStart, CSSPropertyInsetInlineEnd, CSSPropertyInsetBlockEnd, CSSPropertyInsetInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyTop: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyInsetBlockStart, CSSPropertyInsetInlineEnd, CSSPropertyInsetBlockEnd, CSSPropertyInsetInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyMarginBottom: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginBlockStart, CSSPropertyMarginInlineEnd, CSSPropertyMarginBlockEnd, CSSPropertyMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyMarginLeft: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginBlockStart, CSSPropertyMarginInlineEnd, CSSPropertyMarginBlockEnd, CSSPropertyMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyMarginRight: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginBlockStart, CSSPropertyMarginInlineEnd, CSSPropertyMarginBlockEnd, CSSPropertyMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyMarginTop: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyMarginBlockStart, CSSPropertyMarginInlineEnd, CSSPropertyMarginBlockEnd, CSSPropertyMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyMaxWidth: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMaxInlineSize, CSSPropertyMaxBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Horizontal))];
    }
    case CSSPropertyID::CSSPropertyMaxHeight: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMaxInlineSize, CSSPropertyMaxBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Vertical))];
    }
    case CSSPropertyID::CSSPropertyMinWidth: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMinInlineSize, CSSPropertyMinBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Horizontal))];
    }
    case CSSPropertyID::CSSPropertyMinHeight: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyMinInlineSize, CSSPropertyMinBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Vertical))];
    }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorX: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyOverscrollBehaviorInline, CSSPropertyOverscrollBehaviorBlock };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Horizontal))];
    }
    case CSSPropertyID::CSSPropertyOverscrollBehaviorY: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyOverscrollBehaviorInline, CSSPropertyOverscrollBehaviorBlock };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Vertical))];
    }
    case CSSPropertyID::CSSPropertyPaddingBottom: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingBlockStart, CSSPropertyPaddingInlineEnd, CSSPropertyPaddingBlockEnd, CSSPropertyPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyPaddingLeft: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingBlockStart, CSSPropertyPaddingInlineEnd, CSSPropertyPaddingBlockEnd, CSSPropertyPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyPaddingRight: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingBlockStart, CSSPropertyPaddingInlineEnd, CSSPropertyPaddingBlockEnd, CSSPropertyPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyPaddingTop: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyPaddingBlockStart, CSSPropertyPaddingInlineEnd, CSSPropertyPaddingBlockEnd, CSSPropertyPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginBottom: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginBlockStart, CSSPropertyScrollMarginInlineEnd, CSSPropertyScrollMarginBlockEnd, CSSPropertyScrollMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginLeft: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginBlockStart, CSSPropertyScrollMarginInlineEnd, CSSPropertyScrollMarginBlockEnd, CSSPropertyScrollMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginRight: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginBlockStart, CSSPropertyScrollMarginInlineEnd, CSSPropertyScrollMarginBlockEnd, CSSPropertyScrollMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyScrollMarginTop: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollMarginBlockStart, CSSPropertyScrollMarginInlineEnd, CSSPropertyScrollMarginBlockEnd, CSSPropertyScrollMarginInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingBottom: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingBlockStart, CSSPropertyScrollPaddingInlineEnd, CSSPropertyScrollPaddingBlockEnd, CSSPropertyScrollPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Bottom))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingLeft: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingBlockStart, CSSPropertyScrollPaddingInlineEnd, CSSPropertyScrollPaddingBlockEnd, CSSPropertyScrollPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Left))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingRight: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingBlockStart, CSSPropertyScrollPaddingInlineEnd, CSSPropertyScrollPaddingBlockEnd, CSSPropertyScrollPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Right))];
    }
    case CSSPropertyID::CSSPropertyScrollPaddingTop: {
        static constexpr CSSPropertyID properties[4] = { CSSPropertyScrollPaddingBlockStart, CSSPropertyScrollPaddingInlineEnd, CSSPropertyScrollPaddingBlockEnd, CSSPropertyScrollPaddingInlineStart };
        return properties[static_cast<size_t>(mapPhysicalSideToLogicalSide(textflow, BoxSide::Top))];
    }
    case CSSPropertyID::CSSPropertyWidth: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyInlineSize, CSSPropertyBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Horizontal))];
    }
    case CSSPropertyID::CSSPropertyHeight: {
        static constexpr CSSPropertyID properties[2] = { CSSPropertyInlineSize, CSSPropertyBlockSize };
        return properties[static_cast<size_t>(mapPhysicalAxisToLogicalAxis(textflow, BoxAxis::Vertical))];
    }
    default:
        return propertyID;
    }
}

bool CSSProperty::isDescriptorOnly(CSSPropertyID id)
{
    switch (id) {
    case CSSPropertyID::CSSPropertyAdditiveSymbols:
    case CSSPropertyID::CSSPropertyBasePalette:
    case CSSPropertyID::CSSPropertyFallback:
    case CSSPropertyID::CSSPropertyFontDisplay:
    case CSSPropertyID::CSSPropertyNegative:
    case CSSPropertyID::CSSPropertyOverrideColors:
    case CSSPropertyID::CSSPropertyPad:
    case CSSPropertyID::CSSPropertyPrefix:
    case CSSPropertyID::CSSPropertyRange:
    case CSSPropertyID::CSSPropertySrc:
    case CSSPropertyID::CSSPropertySuffix:
    case CSSPropertyID::CSSPropertySymbols:
    case CSSPropertyID::CSSPropertySystem:
    case CSSPropertyID::CSSPropertyUnicodeRange:
        return true;
    default:
        return false;
    }
}

CSSPropertySettings::CSSPropertySettings(const Settings& settings)
    : CSSOMViewSmoothScrollingEnabled { settings.CSSOMViewSmoothScrollingEnabled() }
    , accentColorEnabled { settings.accentColorEnabled() }
    , aspectRatioEnabled { settings.aspectRatioEnabled() }
    , colorFilterEnabled { settings.colorFilterEnabled() }
    , cssContainIntrinsicSizeEnabled { settings.cssContainIntrinsicSizeEnabled() }
    , cssContainerQueriesEnabled { settings.cssContainerQueriesEnabled() }
    , cssContainmentEnabled { settings.cssContainmentEnabled() }
    , cssCounterStyleAtRulesEnabled { settings.cssCounterStyleAtRulesEnabled() }
    , cssIndividualTransformPropertiesEnabled { settings.cssIndividualTransformPropertiesEnabled() }
    , cssInputSecurityEnabled { settings.cssInputSecurityEnabled() }
    , cssMotionPathEnabled { settings.cssMotionPathEnabled() }
    , cssScrollAnchoringEnabled { settings.cssScrollAnchoringEnabled() }
    , cssTextAlignLastEnabled { settings.cssTextAlignLastEnabled() }
    , cssTextJustifyEnabled { settings.cssTextJustifyEnabled() }
    , overscrollBehaviorEnabled { settings.overscrollBehaviorEnabled() }
    , webAnimationsCompositeOperationsEnabled { settings.webAnimationsCompositeOperationsEnabled() }
{
}

bool operator==(const CSSPropertySettings& a, const CSSPropertySettings& b)
{
    return true
        && a.CSSOMViewSmoothScrollingEnabled == b.CSSOMViewSmoothScrollingEnabled
        && a.accentColorEnabled == b.accentColorEnabled
        && a.aspectRatioEnabled == b.aspectRatioEnabled
        && a.colorFilterEnabled == b.colorFilterEnabled
        && a.cssContainIntrinsicSizeEnabled == b.cssContainIntrinsicSizeEnabled
        && a.cssContainerQueriesEnabled == b.cssContainerQueriesEnabled
        && a.cssContainmentEnabled == b.cssContainmentEnabled
        && a.cssCounterStyleAtRulesEnabled == b.cssCounterStyleAtRulesEnabled
        && a.cssIndividualTransformPropertiesEnabled == b.cssIndividualTransformPropertiesEnabled
        && a.cssInputSecurityEnabled == b.cssInputSecurityEnabled
        && a.cssMotionPathEnabled == b.cssMotionPathEnabled
        && a.cssScrollAnchoringEnabled == b.cssScrollAnchoringEnabled
        && a.cssTextAlignLastEnabled == b.cssTextAlignLastEnabled
        && a.cssTextJustifyEnabled == b.cssTextJustifyEnabled
        && a.overscrollBehaviorEnabled == b.overscrollBehaviorEnabled
        && a.webAnimationsCompositeOperationsEnabled == b.webAnimationsCompositeOperationsEnabled
    ;
}

void add(Hasher& hasher, const CSSPropertySettings& settings)
{
    unsigned bits = 0
        | settings.CSSOMViewSmoothScrollingEnabled << 0
        | settings.accentColorEnabled << 1
        | settings.aspectRatioEnabled << 2
        | settings.colorFilterEnabled << 3
        | settings.cssContainIntrinsicSizeEnabled << 4
        | settings.cssContainerQueriesEnabled << 5
        | settings.cssContainmentEnabled << 6
        | settings.cssCounterStyleAtRulesEnabled << 7
        | settings.cssIndividualTransformPropertiesEnabled << 8
        | settings.cssInputSecurityEnabled << 9
        | settings.cssMotionPathEnabled << 10
        | settings.cssScrollAnchoringEnabled << 11
        | settings.cssTextAlignLastEnabled << 12
        | settings.cssTextJustifyEnabled << 13
        | settings.overscrollBehaviorEnabled << 14
        | settings.webAnimationsCompositeOperationsEnabled << 15
    ;
    add(hasher, bits);
}

} // namespace WebCore

IGNORE_WARNINGS_END
