1. function getProperty(propertyName) {
    
  2.   return el => el[propertyName];
    
  3. }
    
  4. 
    
  5. function getAttribute(attributeName) {
    
  6.   return el => {
    
  7.     if (el.namespaceURI === '') {
    
  8.       throw new Error('Not an HTML element.');
    
  9.     }
    
  10.     return el.getAttribute(attributeName);
    
  11.   };
    
  12. }
    
  13. 
    
  14. function getSVGProperty(propertyName) {
    
  15.   return el => el[propertyName];
    
  16. }
    
  17. 
    
  18. function getSVGAttribute(attributeName) {
    
  19.   return el => {
    
  20.     if (el.namespaceURI !== 'http://www.w3.org/2000/svg') {
    
  21.       throw new Error('Not an SVG element.');
    
  22.     }
    
  23.     return el.getAttribute(attributeName);
    
  24.   };
    
  25. }
    
  26. 
    
  27. const attributes = [
    
  28.   {name: 'about', read: getAttribute('about')},
    
  29.   {name: 'aBoUt', read: getAttribute('about')},
    
  30.   {
    
  31.     name: 'accent-Height',
    
  32.     containerTagName: 'svg',
    
  33.     tagName: 'font-face',
    
  34.     read: getSVGAttribute('accent-height'),
    
  35.   },
    
  36.   {
    
  37.     name: 'accent-height',
    
  38.     containerTagName: 'svg',
    
  39.     tagName: 'font-face',
    
  40.     read: getSVGAttribute('accent-height'),
    
  41.   },
    
  42.   {
    
  43.     name: 'accentHeight',
    
  44.     containerTagName: 'svg',
    
  45.     tagName: 'font-face',
    
  46.     read: getSVGAttribute('accent-height'),
    
  47.   },
    
  48.   {name: 'accept', tagName: 'input'},
    
  49.   {name: 'accept-charset', tagName: 'form', read: getProperty('acceptCharset')},
    
  50.   {name: 'accept-Charset', tagName: 'form', read: getProperty('acceptCharset')},
    
  51.   {name: 'acceptCharset', tagName: 'form'},
    
  52.   {name: 'accessKey'},
    
  53.   {
    
  54.     name: 'accumulate',
    
  55.     containerTagName: 'svg',
    
  56.     tagName: 'animate',
    
  57.     read: getSVGAttribute('accumulate'),
    
  58.   },
    
  59.   {name: 'action', tagName: 'form', overrideStringValue: 'https://reactjs.com'},
    
  60.   {
    
  61.     name: 'additive',
    
  62.     containerTagName: 'svg',
    
  63.     tagName: 'animate',
    
  64.     read: getSVGAttribute('additive'),
    
  65.   },
    
  66.   {
    
  67.     name: 'alignment-baseline',
    
  68.     containerTagName: 'svg',
    
  69.     tagName: 'textPath',
    
  70.     read: getSVGAttribute('alignment-baseline'),
    
  71.   },
    
  72.   {
    
  73.     name: 'alignmentBaseline',
    
  74.     containerTagName: 'svg',
    
  75.     tagName: 'textPath',
    
  76.     read: getSVGAttribute('alignment-baseline'),
    
  77.   },
    
  78.   {
    
  79.     name: 'allowFullScreen',
    
  80.     tagName: 'iframe',
    
  81.     read: getProperty('allowFullscreen'),
    
  82.   },
    
  83.   {
    
  84.     name: 'allowfullscreen',
    
  85.     tagName: 'iframe',
    
  86.     read: getProperty('allowFullscreen'),
    
  87.   },
    
  88.   {name: 'allowFullscreen', tagName: 'iframe'},
    
  89.   {
    
  90.     name: 'allowReorder',
    
  91.     containerTagName: 'svg',
    
  92.     tagName: 'switch',
    
  93.     read: getSVGAttribute('allowReorder'),
    
  94.   },
    
  95.   {
    
  96.     name: 'alphabetic',
    
  97.     containerTagName: 'svg',
    
  98.     tagName: 'font-face',
    
  99.     read: getSVGAttribute('alphabetic'),
    
  100.   },
    
  101.   {name: 'alt', tagName: 'img'},
    
  102.   {
    
  103.     name: 'amplitude',
    
  104.     containerTagName: 'svg',
    
  105.     tagName: 'feFuncA',
    
  106.     read: getSVGProperty('amplitude'),
    
  107.   },
    
  108.   {
    
  109.     name: 'arabic-form',
    
  110.     containerTagName: 'svg',
    
  111.     tagName: 'glyph',
    
  112.     read: getSVGAttribute('arabic-form'),
    
  113.   },
    
  114.   {
    
  115.     name: 'arabicForm',
    
  116.     containerTagName: 'svg',
    
  117.     tagName: 'glyph',
    
  118.     read: getSVGAttribute('arabic-form'),
    
  119.   },
    
  120.   {name: 'aria', read: getAttribute('aria')},
    
  121.   {name: 'aria-', read: getAttribute('aria-')},
    
  122.   {name: 'aria-invalidattribute', read: getAttribute('aria-invalidattribute')},
    
  123.   {name: 'as', tagName: 'link'},
    
  124.   {
    
  125.     name: 'ascent',
    
  126.     containerTagName: 'svg',
    
  127.     tagName: 'font-face',
    
  128.     read: getSVGAttribute('ascent'),
    
  129.   },
    
  130.   {name: 'async', tagName: 'script'},
    
  131.   {
    
  132.     name: 'attributeName',
    
  133.     containerTagName: 'svg',
    
  134.     tagName: 'animate',
    
  135.     read: getSVGAttribute('attributeName'),
    
  136.   },
    
  137.   {
    
  138.     name: 'attributeType',
    
  139.     containerTagName: 'svg',
    
  140.     tagName: 'animate',
    
  141.     read: getSVGAttribute('attributeType'),
    
  142.   },
    
  143.   {
    
  144.     name: 'autoCapitalize',
    
  145.     tagName: 'input',
    
  146.     read: getProperty('autocapitalize'),
    
  147.     overrideStringValue: 'words',
    
  148.   },
    
  149.   {
    
  150.     name: 'autoComplete',
    
  151.     tagName: 'input',
    
  152.     overrideStringValue: 'email',
    
  153.     read: getProperty('autocomplete'),
    
  154.   },
    
  155.   {
    
  156.     name: 'autoCorrect',
    
  157.     tagName: 'input',
    
  158.     overrideStringValue: 'off',
    
  159.     read: getAttribute('autocorrect'),
    
  160.   },
    
  161.   {name: 'autoPlay', tagName: 'video', read: getProperty('autoplay')},
    
  162.   {
    
  163.     name: 'autoReverse',
    
  164.     containerTagName: 'svg',
    
  165.     tagName: 'animate',
    
  166.     read: getSVGAttribute('autoreverse'),
    
  167.   },
    
  168.   {name: 'autoSave', tagName: 'input', read: getAttribute('autosave')},
    
  169.   {
    
  170.     name: 'azimuth',
    
  171.     containerTagName: 'svg',
    
  172.     tagName: 'feDistantLight',
    
  173.     read: getSVGProperty('azimuth'),
    
  174.   },
    
  175.   {
    
  176.     name: 'baseFrequency',
    
  177.     containerTagName: 'svg',
    
  178.     tagName: 'feTurbulence',
    
  179.     read: getSVGAttribute('baseFrequency'),
    
  180.   },
    
  181.   {
    
  182.     name: 'baseline-shift',
    
  183.     containerTagName: 'svg',
    
  184.     tagName: 'textPath',
    
  185.     read: getSVGAttribute('baseline-shift'),
    
  186.   },
    
  187.   {
    
  188.     name: 'baselineShift',
    
  189.     containerTagName: 'svg',
    
  190.     tagName: 'textPath',
    
  191.     read: getSVGAttribute('baseline-shift'),
    
  192.   },
    
  193.   {name: 'baseProfile', tagName: 'svg', read: getSVGAttribute('baseProfile')},
    
  194.   {
    
  195.     name: 'bbox',
    
  196.     containerTagName: 'svg',
    
  197.     tagName: 'font-face',
    
  198.     read: getSVGAttribute('bbox'),
    
  199.   },
    
  200.   {
    
  201.     name: 'begin',
    
  202.     containerTagName: 'svg',
    
  203.     tagName: 'animate',
    
  204.     read: getSVGAttribute('begin'),
    
  205.   },
    
  206.   {
    
  207.     name: 'bias',
    
  208.     containerTagName: 'svg',
    
  209.     tagName: 'feConvolveMatrix',
    
  210.     read: getSVGProperty('bias'),
    
  211.   },
    
  212.   {
    
  213.     name: 'by',
    
  214.     containerTagName: 'svg',
    
  215.     tagName: 'animate',
    
  216.     read: getSVGAttribute('by'),
    
  217.   },
    
  218.   {
    
  219.     name: 'calcMode',
    
  220.     containerTagName: 'svg',
    
  221.     tagName: 'animate',
    
  222.     overrideStringValue: 'discrete',
    
  223.     read: getSVGAttribute('calcMode'),
    
  224.   },
    
  225.   {
    
  226.     name: 'cap-height',
    
  227.     containerTagName: 'svg',
    
  228.     tagName: 'font-face',
    
  229.     read: getSVGAttribute('cap-height'),
    
  230.   },
    
  231.   {
    
  232.     name: 'capHeight',
    
  233.     containerTagName: 'svg',
    
  234.     tagName: 'font-face',
    
  235.     read: getSVGAttribute('cap-height'),
    
  236.   },
    
  237.   {
    
  238.     name: 'capture',
    
  239.     tagName: 'input',
    
  240.     overrideStringValue: 'environment',
    
  241.     read: getAttribute('capture'),
    
  242.   },
    
  243.   {name: 'cellPadding', tagName: 'table'},
    
  244.   {name: 'cellSpacing', tagName: 'table'},
    
  245.   {
    
  246.     name: 'challenge',
    
  247.     tagName: 'keygen',
    
  248.     read: getAttribute('challenge'), // The property is not supported in Chrome.
    
  249.   },
    
  250.   {name: 'charSet', tagName: 'script', read: getProperty('charset')},
    
  251.   {name: 'checked', tagName: 'input', extraProps: {onChange() {}}},
    
  252.   {name: 'Checked', tagName: 'input', read: getAttribute('Checked')},
    
  253.   {name: 'Children', read: getAttribute('children')},
    
  254.   {name: 'children'},
    
  255.   {
    
  256.     name: 'cite',
    
  257.     tagName: 'blockquote',
    
  258.     overrideStringValue: 'https://reactjs.com/',
    
  259.   },
    
  260.   {name: 'class', read: getAttribute('class')},
    
  261.   {name: 'classID', tagName: 'object', read: getAttribute('classid')},
    
  262.   {name: 'className'},
    
  263.   {name: 'clip', tagName: 'svg', read: getAttribute('clip')},
    
  264.   {
    
  265.     name: 'clip-path',
    
  266.     containerTagName: 'svg',
    
  267.     tagName: 'path',
    
  268.     read: getSVGAttribute('clip-path'),
    
  269.   },
    
  270.   {
    
  271.     name: 'clipPath',
    
  272.     containerTagName: 'svg',
    
  273.     tagName: 'path',
    
  274.     read: getSVGAttribute('clip-path'),
    
  275.   },
    
  276.   {
    
  277.     name: 'clipPathUnits',
    
  278.     containerTagName: 'svg',
    
  279.     tagName: 'clipPath',
    
  280.     overrideStringValue: 'objectBoundingBox',
    
  281.     read: getSVGProperty('clipPathUnits'),
    
  282.   },
    
  283.   {
    
  284.     name: 'clip-rule',
    
  285.     containerTagName: 'svg',
    
  286.     tagName: 'path',
    
  287.     read: getSVGAttribute('clip-rule'),
    
  288.   },
    
  289.   {
    
  290.     name: 'clipRule',
    
  291.     containerTagName: 'svg',
    
  292.     tagName: 'path',
    
  293.     read: getSVGAttribute('clip-rule'),
    
  294.   },
    
  295.   {
    
  296.     name: 'color',
    
  297.     containerTagName: 'svg',
    
  298.     tagName: 'text',
    
  299.     read: getSVGAttribute('color'),
    
  300.   },
    
  301.   {
    
  302.     name: 'color-interpolation',
    
  303.     containerTagName: 'svg',
    
  304.     tagName: 'animate',
    
  305.     overrideStringValue: 'sRGB',
    
  306.     read: getSVGAttribute('color-interpolation'),
    
  307.   },
    
  308.   {
    
  309.     name: 'colorInterpolation',
    
  310.     containerTagName: 'svg',
    
  311.     tagName: 'animate',
    
  312.     overrideStringValue: 'sRGB',
    
  313.     read: getSVGAttribute('color-interpolation'),
    
  314.   },
    
  315.   {
    
  316.     name: 'color-interpolation-filters',
    
  317.     containerTagName: 'svg',
    
  318.     tagName: 'feComposite',
    
  319.     overrideStringValue: 'sRGB',
    
  320.     read: getSVGAttribute('color-interpolation-filters'),
    
  321.   },
    
  322.   {
    
  323.     name: 'colorInterpolationFilters',
    
  324.     containerTagName: 'svg',
    
  325.     tagName: 'feComposite',
    
  326.     overrideStringValue: 'sRGB',
    
  327.     read: getSVGAttribute('color-interpolation-filters'),
    
  328.   },
    
  329.   {
    
  330.     name: 'color-profile',
    
  331.     containerTagName: 'svg',
    
  332.     tagName: 'image',
    
  333.     overrideStringValue: 'sRGB',
    
  334.     read: getSVGAttribute('color-profile'),
    
  335.   },
    
  336.   {
    
  337.     name: 'colorProfile',
    
  338.     containerTagName: 'svg',
    
  339.     tagName: 'image',
    
  340.     overrideStringValue: 'sRGB',
    
  341.     read: getSVGAttribute('color-profile'),
    
  342.   },
    
  343.   {
    
  344.     name: 'color-rendering',
    
  345.     containerTagName: 'svg',
    
  346.     tagName: 'animate',
    
  347.     overrideStringValue: 'optimizeSpeed',
    
  348.     read: getSVGAttribute('color-rendering'),
    
  349.   },
    
  350.   {
    
  351.     name: 'colorRendering',
    
  352.     containerTagName: 'svg',
    
  353.     tagName: 'animate',
    
  354.     overrideStringValue: 'optimizeSpeed',
    
  355.     read: getSVGAttribute('color-rendering'),
    
  356.   },
    
  357.   {name: 'cols', tagName: 'textarea'},
    
  358.   {name: 'colSpan', containerTagName: 'tr', tagName: 'td'},
    
  359.   {name: 'content', containerTagName: 'head', tagName: 'meta'},
    
  360.   {name: 'contentEditable'},
    
  361.   {
    
  362.     name: 'contentScriptType',
    
  363.     tagName: 'svg',
    
  364.     read: getSVGAttribute('contentScriptType'),
    
  365.   },
    
  366.   {
    
  367.     name: 'contentStyleType',
    
  368.     tagName: 'svg',
    
  369.     read: getSVGAttribute('contentStyleType'),
    
  370.   },
    
  371.   {name: 'contextMenu', read: getAttribute('contextmenu')}, // TODO: Read the property by rendering a menu with the ID.
    
  372.   {name: 'controls', tagName: 'video'},
    
  373.   {name: 'coords', tagName: 'a'},
    
  374.   {name: 'crossOrigin', tagName: 'script'},
    
  375.   {name: 'cursor', tag: 'svg', read: getAttribute('cursor')},
    
  376.   {
    
  377.     name: 'cx',
    
  378.     containerTagName: 'svg',
    
  379.     tagName: 'circle',
    
  380.     overrideStringValue: '10px',
    
  381.     read: getSVGProperty('cx'),
    
  382.   },
    
  383.   {
    
  384.     name: 'cy',
    
  385.     containerTagName: 'svg',
    
  386.     tagName: 'circle',
    
  387.     overrideStringValue: '10%',
    
  388.     read: getSVGProperty('cy'),
    
  389.   },
    
  390.   {
    
  391.     name: 'd',
    
  392.     containerTagName: 'svg',
    
  393.     tagName: 'path',
    
  394.     read: getSVGAttribute('d'),
    
  395.   },
    
  396.   {
    
  397.     name: 'dangerouslySetInnerHTML',
    
  398.     read: getAttribute('dangerouslySetInnerHTML'),
    
  399.   },
    
  400.   {
    
  401.     name: 'DangerouslySetInnerHTML',
    
  402.     read: getAttribute('DangerouslySetInnerHTML'),
    
  403.   },
    
  404.   {name: 'data', read: getAttribute('data')},
    
  405.   {name: 'data-', read: getAttribute('data-')},
    
  406.   {name: 'data-unknownattribute', read: getAttribute('data-unknownattribute')},
    
  407.   {name: 'datatype', read: getAttribute('datatype')},
    
  408.   {
    
  409.     name: 'dateTime',
    
  410.     tagName: 'time',
    
  411.     overrideStringValue: '2001-05-15T19:00',
    
  412.     read: getAttribute('datetime'),
    
  413.   },
    
  414.   {
    
  415.     name: 'decelerate',
    
  416.     containerTagName: 'svg',
    
  417.     tagName: 'animate',
    
  418.     read: getSVGAttribute('decelerate'),
    
  419.   },
    
  420.   {name: 'default', tagName: 'track'},
    
  421.   {
    
  422.     name: 'defaultchecked',
    
  423.     tagName: 'input',
    
  424.     read: getAttribute('defaultchecked'),
    
  425.   },
    
  426.   {name: 'defaultChecked', tagName: 'input'},
    
  427.   {name: 'defaultValue', tagName: 'input'},
    
  428.   {name: 'defaultValuE', tagName: 'input', read: getAttribute('defaultValuE')},
    
  429.   {name: 'defer', tagName: 'script'},
    
  430.   {
    
  431.     name: 'descent',
    
  432.     containerTagName: 'svg',
    
  433.     tagName: 'font-face',
    
  434.     read: getSVGAttribute('descent'),
    
  435.   },
    
  436.   {
    
  437.     name: 'diffuseConstant',
    
  438.     containerTagName: 'svg',
    
  439.     tagName: 'feDiffuseLighting',
    
  440.     read: getSVGProperty('diffuseConstant'),
    
  441.   },
    
  442.   {name: 'dir', overrideStringValue: 'rtl'},
    
  443.   {
    
  444.     name: 'direction',
    
  445.     containerTagName: 'svg',
    
  446.     tagName: 'text',
    
  447.     overrideStringValue: 'rtl',
    
  448.     read: getSVGAttribute('direction'),
    
  449.   },
    
  450.   {name: 'disabled', tagName: 'input'},
    
  451.   {
    
  452.     name: 'disablePictureInPicture',
    
  453.     tagName: 'video',
    
  454.     read: getProperty('disablepictureinpicture'),
    
  455.   },
    
  456.   {
    
  457.     name: 'disableRemotePlayback',
    
  458.     tagName: 'video',
    
  459.     read: getProperty('disableremoteplayback'),
    
  460.   },
    
  461.   {
    
  462.     name: 'display',
    
  463.     tagName: 'svg',
    
  464.     overrideStringValue: 'list-item',
    
  465.     read: getAttribute('display'),
    
  466.   },
    
  467.   {
    
  468.     name: 'divisor',
    
  469.     containerTagName: 'svg',
    
  470.     tagName: 'feConvolveMatrix',
    
  471.     read: getSVGProperty('divisor'),
    
  472.   },
    
  473.   {
    
  474.     name: 'dominant-baseline',
    
  475.     containerTagName: 'svg',
    
  476.     tagName: 'text',
    
  477.     read: getSVGAttribute('dominant-baseline'),
    
  478.   },
    
  479.   {
    
  480.     name: 'dominantBaseline',
    
  481.     containerTagName: 'svg',
    
  482.     tagName: 'text',
    
  483.     read: getSVGAttribute('dominant-baseline'),
    
  484.   },
    
  485.   {name: 'download', tagName: 'a'},
    
  486.   {name: 'dOwNlOaD', tagName: 'a', read: getAttribute('dOwNlOaD')},
    
  487.   {name: 'draggable'},
    
  488.   {
    
  489.     name: 'dur',
    
  490.     containerTagName: 'svg',
    
  491.     tagName: 'animate',
    
  492.     read: getSVGAttribute('dur'),
    
  493.   },
    
  494.   {
    
  495.     name: 'dx',
    
  496.     containerTagName: 'svg',
    
  497.     tagName: 'text',
    
  498.     overrideStringValue: '1pt 2px 3em',
    
  499.     read: getSVGProperty('dx'),
    
  500.   },
    
  501.   {
    
  502.     name: 'dX',
    
  503.     containerTagName: 'svg',
    
  504.     tagName: 'text',
    
  505.     overrideStringValue: '1pt 2px 3em',
    
  506.     read: getSVGProperty('dx'),
    
  507.   },
    
  508.   {
    
  509.     name: 'dy',
    
  510.     containerTagName: 'svg',
    
  511.     tagName: 'text',
    
  512.     overrideStringValue: '1 2 3',
    
  513.     read: getSVGProperty('dy'),
    
  514.   },
    
  515.   {
    
  516.     name: 'dY',
    
  517.     containerTagName: 'svg',
    
  518.     tagName: 'text',
    
  519.     overrideStringValue: '1 2 3',
    
  520.     read: getSVGProperty('dy'),
    
  521.   },
    
  522.   {
    
  523.     name: 'edgeMode',
    
  524.     containerTagName: 'svg',
    
  525.     tagName: 'feConvolveMatrix',
    
  526.     overrideStringValue: 'wrap',
    
  527.     read: getSVGProperty('edgeMode'),
    
  528.   },
    
  529.   {
    
  530.     name: 'elevation',
    
  531.     containerTagName: 'svg',
    
  532.     tagName: 'feDistantLight',
    
  533.     read: getSVGProperty('elevation'),
    
  534.   },
    
  535.   {
    
  536.     name: 'enable-background',
    
  537.     containerTagName: 'svg',
    
  538.     tagName: 'path',
    
  539.     read: getSVGAttribute('enable-background'),
    
  540.   },
    
  541.   {
    
  542.     name: 'enableBackground',
    
  543.     containerTagName: 'svg',
    
  544.     tagName: 'path',
    
  545.     read: getSVGAttribute('enable-background'),
    
  546.   },
    
  547.   {
    
  548.     name: 'encType',
    
  549.     tagName: 'form',
    
  550.     overrideStringValue: 'text/plain',
    
  551.     read: getProperty('enctype'),
    
  552.   },
    
  553.   {
    
  554.     name: 'end',
    
  555.     containerTagName: 'svg',
    
  556.     tagName: 'animate',
    
  557.     read: getSVGAttribute('end'),
    
  558.   },
    
  559.   {
    
  560.     name: 'enterKeyHint',
    
  561.     tagName: 'input',
    
  562.     read: getProperty('enterKeyHint'),
    
  563.   },
    
  564.   {
    
  565.     name: 'exponent',
    
  566.     read: getSVGProperty('exponent'),
    
  567.     containerTagName: 'svg',
    
  568.     tagName: 'feFuncA',
    
  569.   },
    
  570.   {
    
  571.     name: 'externalResourcesRequired',
    
  572.     containerTagName: 'svg',
    
  573.     tagName: 'path',
    
  574.     read: getSVGAttribute('externalResourcesRequired'),
    
  575.   },
    
  576.   {
    
  577.     name: 'fetchPriority',
    
  578.     overrideStringValue: 'high',
    
  579.     tagName: 'img',
    
  580.     read: getProperty('fetchPriority'),
    
  581.   },
    
  582.   {
    
  583.     name: 'fetchpriority',
    
  584.     overrideStringValue: 'high',
    
  585.     tagName: 'img',
    
  586.     read: getProperty('fetchPriority'),
    
  587.   },
    
  588.   {
    
  589.     name: 'fetchPriority',
    
  590.     overrideStringValue: 'high',
    
  591.     tagName: 'link',
    
  592.     read: getProperty('fetchPriority'),
    
  593.   },
    
  594.   {
    
  595.     name: 'fill',
    
  596.     containerTagName: 'svg',
    
  597.     tagName: 'path',
    
  598.     read: getSVGAttribute('fill'),
    
  599.   },
    
  600.   {
    
  601.     name: 'fillOpacity',
    
  602.     containerTagName: 'svg',
    
  603.     tagName: 'circle',
    
  604.     read: getSVGAttribute('fill-opacity'),
    
  605.   },
    
  606.   {
    
  607.     name: 'fill-opacity',
    
  608.     containerTagName: 'svg',
    
  609.     tagName: 'circle',
    
  610.     read: getSVGAttribute('fill-opacity'),
    
  611.   },
    
  612.   {
    
  613.     name: 'fillRule',
    
  614.     containerTagName: 'svg',
    
  615.     tagName: 'circle',
    
  616.     read: getSVGAttribute('fill-rule'),
    
  617.   },
    
  618.   {
    
  619.     name: 'fill-rule',
    
  620.     containerTagName: 'svg',
    
  621.     tagName: 'circle',
    
  622.     read: getSVGAttribute('fill-rule'),
    
  623.   },
    
  624.   {
    
  625.     name: 'filter',
    
  626.     containerTagName: 'svg',
    
  627.     tagName: 'g',
    
  628.     read: getSVGAttribute('filter'),
    
  629.   },
    
  630.   {
    
  631.     name: 'filterRes',
    
  632.     containerTagName: 'svg',
    
  633.     tagName: 'filter',
    
  634.     read: getSVGAttribute('filterRes'),
    
  635.   },
    
  636.   {
    
  637.     name: 'filterUnits',
    
  638.     containerTagName: 'svg',
    
  639.     tagName: 'filter',
    
  640.     overrideStringValue: 'userSpaceOnUse',
    
  641.     read: getSVGProperty('filterUnits'),
    
  642.   },
    
  643.   {
    
  644.     name: 'flood-color',
    
  645.     containerTagName: 'svg',
    
  646.     tagName: 'feflood',
    
  647.     overrideStringValue: 'currentColor',
    
  648.     read: getSVGAttribute('flood-color'),
    
  649.   },
    
  650.   {
    
  651.     name: 'floodColor',
    
  652.     containerTagName: 'svg',
    
  653.     tagName: 'feflood',
    
  654.     overrideStringValue: 'currentColor',
    
  655.     read: getSVGAttribute('flood-color'),
    
  656.   },
    
  657.   {
    
  658.     name: 'flood-opacity',
    
  659.     containerTagName: 'svg',
    
  660.     tagName: 'feflood',
    
  661.     overrideStringValue: 'inherit',
    
  662.     read: getSVGAttribute('flood-opacity'),
    
  663.   },
    
  664.   {
    
  665.     name: 'floodOpacity',
    
  666.     containerTagName: 'svg',
    
  667.     tagName: 'feflood',
    
  668.     overrideStringValue: 'inherit',
    
  669.     read: getSVGAttribute('flood-opacity'),
    
  670.   },
    
  671.   {name: 'focusable', tagName: 'p', read: getAttribute('focusable')},
    
  672.   {
    
  673.     name: 'font-family',
    
  674.     read: getSVGAttribute('font-family'),
    
  675.     containerTagName: 'svg',
    
  676.     tagName: 'font-face',
    
  677.   },
    
  678.   {
    
  679.     name: 'font-size',
    
  680.     read: getSVGAttribute('font-size'),
    
  681.     containerTagName: 'svg',
    
  682.     tagName: 'font-face',
    
  683.   },
    
  684.   {
    
  685.     name: 'font-size-adjust',
    
  686.     containerTagName: 'svg',
    
  687.     tagName: 'text',
    
  688.     read: getSVGAttribute('font-size-adjust'),
    
  689.   },
    
  690.   {
    
  691.     name: 'font-stretch',
    
  692.     read: getSVGAttribute('font-stretch'),
    
  693.     containerTagName: 'svg',
    
  694.     tagName: 'font-face',
    
  695.   },
    
  696.   {
    
  697.     name: 'font-style',
    
  698.     read: getSVGAttribute('font-style'),
    
  699.     containerTagName: 'svg',
    
  700.     tagName: 'font-face',
    
  701.   },
    
  702.   {
    
  703.     name: 'font-variant',
    
  704.     read: getSVGAttribute('font-variant'),
    
  705.     containerTagName: 'svg',
    
  706.     tagName: 'font-face',
    
  707.   },
    
  708.   {
    
  709.     name: 'font-weight',
    
  710.     read: getSVGAttribute('font-weight'),
    
  711.     containerTagName: 'svg',
    
  712.     tagName: 'font-face',
    
  713.   },
    
  714.   {
    
  715.     name: 'fontFamily',
    
  716.     read: getSVGAttribute('font-family'),
    
  717.     containerTagName: 'svg',
    
  718.     tagName: 'font-face',
    
  719.   },
    
  720.   {
    
  721.     name: 'fontSize',
    
  722.     read: getSVGAttribute('font-size'),
    
  723.     containerTagName: 'svg',
    
  724.     tagName: 'font-face',
    
  725.   },
    
  726.   {
    
  727.     name: 'fontSizeAdjust',
    
  728.     containerTagName: 'svg',
    
  729.     tagName: 'text',
    
  730.     read: getSVGAttribute('font-size-adjust'),
    
  731.   },
    
  732.   {
    
  733.     name: 'fontStretch',
    
  734.     read: getSVGAttribute('font-stretch'),
    
  735.     containerTagName: 'svg',
    
  736.     tagName: 'font-face',
    
  737.   },
    
  738.   {
    
  739.     name: 'fontStyle',
    
  740.     read: getSVGAttribute('font-style'),
    
  741.     containerTagName: 'svg',
    
  742.     tagName: 'font-face',
    
  743.   },
    
  744.   {
    
  745.     name: 'fontVariant',
    
  746.     read: getSVGAttribute('font-variant'),
    
  747.     containerTagName: 'svg',
    
  748.     tagName: 'font-face',
    
  749.   },
    
  750.   {
    
  751.     name: 'fontWeight',
    
  752.     read: getSVGAttribute('font-weight'),
    
  753.     containerTagName: 'svg',
    
  754.     tagName: 'font-face',
    
  755.   },
    
  756.   {name: 'for', tagName: 'label', read: getProperty('htmlFor')},
    
  757.   {name: 'fOr', tagName: 'label', read: getProperty('htmlFor')},
    
  758.   {name: 'form', read: getAttribute('form')}, // TODO: Read the property by rendering into a form with i
    
  759.   {
    
  760.     name: 'formAction',
    
  761.     tagName: 'input',
    
  762.     overrideStringValue: 'https://reactjs.com',
    
  763.   },
    
  764.   {
    
  765.     name: 'format',
    
  766.     read: getSVGAttribute('format'),
    
  767.     containerTagName: 'svg',
    
  768.     tagName: 'altGlyph',
    
  769.   },
    
  770.   {name: 'formEncType', tagName: 'input', read: getProperty('formEnctype')},
    
  771.   {name: 'formMethod', tagName: 'input', overrideStringValue: 'POST'},
    
  772.   {name: 'formNoValidate', tagName: 'input'},
    
  773.   {name: 'formTarget', tagName: 'input'},
    
  774.   {name: 'frameBorder', tagName: 'iframe'},
    
  775.   {
    
  776.     name: 'from',
    
  777.     read: getSVGAttribute('from'),
    
  778.     containerTagName: 'svg',
    
  779.     tagName: 'animate',
    
  780.   },
    
  781.   {
    
  782.     name: 'fx',
    
  783.     read: getSVGProperty('fx'),
    
  784.     containerTagName: 'svg',
    
  785.     overrideStringValue: '10px',
    
  786.     tagName: 'radialGradient',
    
  787.   },
    
  788.   {
    
  789.     name: 'fX',
    
  790.     containerTagName: 'svg',
    
  791.     tagName: 'radialGradient',
    
  792.     overrideStringValue: '10px',
    
  793.     read: getSVGProperty('fx'),
    
  794.   },
    
  795.   {
    
  796.     name: 'fY',
    
  797.     containerTagName: 'svg',
    
  798.     tagName: 'radialGradient',
    
  799.     overrideStringValue: '20em',
    
  800.     read: getSVGProperty('fy'),
    
  801.   },
    
  802.   {
    
  803.     name: 'fy',
    
  804.     read: getSVGProperty('fy'),
    
  805.     containerTagName: 'svg',
    
  806.     overrideStringValue: '20em',
    
  807.     tagName: 'radialGradient',
    
  808.   },
    
  809.   {
    
  810.     name: 'G1',
    
  811.     containerTagName: 'svg',
    
  812.     tagName: 'hkern',
    
  813.     read: getSVGAttribute('g1'),
    
  814.   },
    
  815.   {
    
  816.     name: 'g1',
    
  817.     read: getSVGAttribute('g1'),
    
  818.     containerTagName: 'svg',
    
  819.     tagName: 'hkern',
    
  820.   },
    
  821.   {
    
  822.     name: 'G2',
    
  823.     containerTagName: 'svg',
    
  824.     tagName: 'hkern',
    
  825.     read: getSVGAttribute('g2'),
    
  826.   },
    
  827.   {
    
  828.     name: 'g2',
    
  829.     read: getSVGAttribute('g2'),
    
  830.     containerTagName: 'svg',
    
  831.     tagName: 'hkern',
    
  832.   },
    
  833.   {
    
  834.     name: 'glyph-name',
    
  835.     read: getSVGAttribute('glyph-name'),
    
  836.     containerTagName: 'svg',
    
  837.     tagName: 'glyph',
    
  838.   },
    
  839.   {
    
  840.     name: 'glyph-orientation-horizontal',
    
  841.     containerTagName: 'svg',
    
  842.     tagName: 'text',
    
  843.     read: getSVGAttribute('glyph-orientation-horizontal'),
    
  844.   },
    
  845.   {
    
  846.     name: 'glyph-orientation-vertical',
    
  847.     containerTagName: 'svg',
    
  848.     tagName: 'text',
    
  849.     read: getSVGAttribute('glyph-orientation-vertical'),
    
  850.   },
    
  851.   {
    
  852.     name: 'glyphName',
    
  853.     read: getSVGAttribute('glyph-name'),
    
  854.     containerTagName: 'svg',
    
  855.     tagName: 'glyph',
    
  856.   },
    
  857.   {
    
  858.     name: 'glyphOrientationHorizontal',
    
  859.     containerTagName: 'svg',
    
  860.     tagName: 'text',
    
  861.     read: getSVGAttribute('glyph-orientation-horizontal'),
    
  862.   },
    
  863.   {
    
  864.     name: 'glyphOrientationVertical',
    
  865.     containerTagName: 'svg',
    
  866.     tagName: 'text',
    
  867.     read: getSVGAttribute('glyph-orientation-vertical'),
    
  868.   },
    
  869.   {
    
  870.     name: 'glyphRef',
    
  871.     read: getSVGAttribute('glyph-ref'),
    
  872.     containerTagName: 'svg',
    
  873.     tagName: 'altGlyph',
    
  874.   },
    
  875.   {
    
  876.     name: 'gradientTransform',
    
  877.     read: getSVGProperty('gradientTransform'),
    
  878.     containerTagName: 'svg',
    
  879.     overrideStringValue:
    
  880.       'translate(-10,-20) scale(2) rotate(45) translate(5,10)',
    
  881.     tagName: 'linearGradient',
    
  882.   },
    
  883.   {
    
  884.     name: 'gradientUnits',
    
  885.     read: getSVGProperty('gradientUnits'),
    
  886.     containerTagName: 'svg',
    
  887.     overrideStringValue: 'userSpaceOnUse',
    
  888.     tagName: 'linearGradient',
    
  889.   },
    
  890.   {
    
  891.     name: 'hanging',
    
  892.     read: getSVGAttribute('hanging'),
    
  893.     containerTagName: 'svg',
    
  894.     tagName: 'font-face',
    
  895.   },
    
  896.   // Disabled because it crashes other tests with React 15.
    
  897.   // TODO: re-enable when we no longer compare to 15.
    
  898.   // {name: 'hasOwnProperty', read: getAttribute('hasOwnProperty')},
    
  899.   {name: 'headers', containerTagName: 'tr', tagName: 'td'},
    
  900.   {name: 'height', tagName: 'img'},
    
  901.   {
    
  902.     name: 'height',
    
  903.     containerTagName: 'svg',
    
  904.     tagName: 'rect',
    
  905.     read: getSVGProperty('height'),
    
  906.     overrideStringValue: '100%',
    
  907.   },
    
  908.   {name: 'hidden'},
    
  909.   {name: 'high', tagName: 'meter'},
    
  910.   {
    
  911.     name: 'horiz-adv-x',
    
  912.     read: getSVGAttribute('horiz-adv-x'),
    
  913.     containerTagName: 'svg',
    
  914.     tagName: 'font',
    
  915.   },
    
  916.   {
    
  917.     name: 'horiz-origin-x',
    
  918.     read: getSVGAttribute('horiz-origin-x'),
    
  919.     containerTagName: 'svg',
    
  920.     tagName: 'font',
    
  921.   },
    
  922.   {
    
  923.     name: 'horizAdvX',
    
  924.     read: getSVGAttribute('horiz-adv-x'),
    
  925.     containerTagName: 'svg',
    
  926.     tagName: 'font',
    
  927.   },
    
  928.   {
    
  929.     name: 'horizOriginX',
    
  930.     read: getSVGAttribute('horiz-origin-x'),
    
  931.     containerTagName: 'svg',
    
  932.     tagName: 'font',
    
  933.   },
    
  934.   {name: 'href', tagName: 'a', overrideStringValue: 'https://reactjs.com'},
    
  935.   {name: 'hrefLang', read: getAttribute('hreflang')},
    
  936.   {name: 'htmlFor', tagName: 'label'},
    
  937.   {
    
  938.     name: 'http-equiv',
    
  939.     containerTagName: 'head',
    
  940.     tagName: 'meta',
    
  941.     read: getProperty('httpEquiv'),
    
  942.   },
    
  943.   {name: 'httpEquiv', containerTagName: 'head', tagName: 'meta'},
    
  944.   {name: 'icon', tagName: 'command', read: getAttribute('icon')},
    
  945.   {name: 'id'},
    
  946.   {name: 'ID', read: getProperty('id')},
    
  947.   {
    
  948.     name: 'ideographic',
    
  949.     read: getSVGAttribute('ideographic'),
    
  950.     containerTagName: 'svg',
    
  951.     tagName: 'font-face',
    
  952.   },
    
  953.   {
    
  954.     name: 'image-rendering',
    
  955.     tagName: 'svg',
    
  956.     read: getSVGAttribute('image-rendering'),
    
  957.   },
    
  958.   {
    
  959.     name: 'imageRendering',
    
  960.     tagName: 'svg',
    
  961.     read: getSVGAttribute('image-rendering'),
    
  962.   },
    
  963.   {name: 'imageSizes', tagName: 'link', read: getProperty('imageSizes')},
    
  964.   {name: 'imageSrcSet', tagName: 'link', read: getProperty('imageSrcset')},
    
  965.   {
    
  966.     name: 'in',
    
  967.     read: getSVGAttribute('in'),
    
  968.     containerTagName: 'svg',
    
  969.     tagName: 'feBlend',
    
  970.   },
    
  971.   {
    
  972.     name: 'in2',
    
  973.     read: getSVGProperty('in2'),
    
  974.     containerTagName: 'svg',
    
  975.     tagName: 'feBlend',
    
  976.   },
    
  977.   {name: 'initialChecked', read: getAttribute('initialchecked')},
    
  978.   {name: 'initialValue', read: getAttribute('initialvalue')},
    
  979.   {name: 'inlist', read: getAttribute('inlist')},
    
  980.   {name: 'inputMode', tagName: 'input', read: getAttribute('inputmode')}, // TODO: Should use property but it's not implemented in Chrome
    
  981.   {name: 'integrity', tagName: 'script'},
    
  982.   {
    
  983.     name: 'intercept',
    
  984.     read: getSVGProperty('intercept'),
    
  985.     containerTagName: 'svg',
    
  986.     tagName: 'feFuncA',
    
  987.   },
    
  988.   {
    
  989.     name: 'is',
    
  990.     tagName: 'button',
    
  991.     overrideStringValue: 'x-test-element',
    
  992.     read: getAttribute('is'), // TODO: This could check if this is an extended custom element but this is a controversial spec.
    
  993.   },
    
  994.   {name: 'itemID', read: getAttribute('itemid')},
    
  995.   {name: 'itemProp', read: getAttribute('itemprop')},
    
  996.   {name: 'itemRef', read: getAttribute('itemref')},
    
  997.   {name: 'itemScope', read: getAttribute('itemscope')},
    
  998.   {name: 'itemType', read: getAttribute('itemtype')},
    
  999.   {
    
  1000.     name: 'k',
    
  1001.     read: getSVGAttribute('k'),
    
  1002.     containerTagName: 'svg',
    
  1003.     tagName: 'hkern',
    
  1004.   },
    
  1005.   {
    
  1006.     name: 'K',
    
  1007.     containerTagName: 'svg',
    
  1008.     tagName: 'hkern',
    
  1009.     read: getSVGAttribute('k'),
    
  1010.   },
    
  1011.   {
    
  1012.     name: 'K1',
    
  1013.     containerTagName: 'svg',
    
  1014.     tagName: 'feComposite',
    
  1015.     read: getSVGProperty('k1'),
    
  1016.   },
    
  1017.   {
    
  1018.     name: 'k1',
    
  1019.     read: getSVGProperty('k1'),
    
  1020.     containerTagName: 'svg',
    
  1021.     tagName: 'feComposite',
    
  1022.   },
    
  1023.   {
    
  1024.     name: 'k2',
    
  1025.     read: getSVGProperty('k2'),
    
  1026.     containerTagName: 'svg',
    
  1027.     tagName: 'feComposite',
    
  1028.   },
    
  1029.   {
    
  1030.     name: 'k3',
    
  1031.     read: getSVGProperty('k3'),
    
  1032.     containerTagName: 'svg',
    
  1033.     tagName: 'feComposite',
    
  1034.   },
    
  1035.   {
    
  1036.     name: 'k4',
    
  1037.     read: getSVGProperty('k4'),
    
  1038.     containerTagName: 'svg',
    
  1039.     tagName: 'feComposite',
    
  1040.   },
    
  1041.   {
    
  1042.     name: 'kernelMatrix',
    
  1043.     read: getSVGProperty('kernelMatrix'),
    
  1044.     containerTagName: 'svg',
    
  1045.     tagName: 'feConvolveMatrix',
    
  1046.     overrideStringValue: '1 2 3,4',
    
  1047.   },
    
  1048.   {
    
  1049.     name: 'kernelUnitLength',
    
  1050.     read: getSVGAttribute('kernelUnitLength'),
    
  1051.     containerTagName: 'svg',
    
  1052.     tagName: 'feConvolveMatrix',
    
  1053.   },
    
  1054.   {
    
  1055.     name: 'kerning',
    
  1056.     containerTagName: 'svg',
    
  1057.     tagName: 'text',
    
  1058.     read: getSVGAttribute('kerning'),
    
  1059.   },
    
  1060.   {name: 'keyParams', read: getAttribute('keyParams')},
    
  1061.   {
    
  1062.     name: 'keyPoints',
    
  1063.     read: getSVGAttribute('keyPoints'),
    
  1064.     containerTagName: 'svg',
    
  1065.     tagName: 'animateMotion',
    
  1066.   },
    
  1067.   {
    
  1068.     name: 'keySplines',
    
  1069.     read: getSVGAttribute('keySplines'),
    
  1070.     containerTagName: 'svg',
    
  1071.     tagName: 'animate',
    
  1072.   },
    
  1073.   {
    
  1074.     name: 'keyTimes',
    
  1075.     read: getSVGAttribute('keyTimes'),
    
  1076.     containerTagName: 'svg',
    
  1077.     tagName: 'animate',
    
  1078.   },
    
  1079.   {name: 'keyType', read: getAttribute('keyType')},
    
  1080.   {name: 'kind', tagName: 'track', overrideStringValue: 'captions'},
    
  1081.   {name: 'label', tagName: 'track'},
    
  1082.   {name: 'LANG', read: getProperty('lang')},
    
  1083.   {name: 'lang'},
    
  1084.   {name: 'lang', containerTagName: 'document', tagName: 'html'},
    
  1085.   {name: 'length', read: getAttribute('length')},
    
  1086.   {
    
  1087.     name: 'lengthAdjust',
    
  1088.     read: getSVGProperty('lengthAdjust'),
    
  1089.     containerTagName: 'svg',
    
  1090.     tagName: 'text',
    
  1091.     overrideStringValue: 'spacingAndGlyphs',
    
  1092.   },
    
  1093.   {
    
  1094.     name: 'letter-spacing',
    
  1095.     containerTagName: 'svg',
    
  1096.     tagName: 'text',
    
  1097.     read: getSVGAttribute('letter-spacing'),
    
  1098.   },
    
  1099.   {
    
  1100.     name: 'letterSpacing',
    
  1101.     containerTagName: 'svg',
    
  1102.     tagName: 'text',
    
  1103.     read: getSVGAttribute('letter-spacing'),
    
  1104.   },
    
  1105.   {
    
  1106.     name: 'lighting-color',
    
  1107.     containerTagName: 'svg',
    
  1108.     tagName: 'feDiffuseLighting',
    
  1109.     read: getSVGAttribute('lighting-color'),
    
  1110.   },
    
  1111.   {
    
  1112.     name: 'lightingColor',
    
  1113.     containerTagName: 'svg',
    
  1114.     tagName: 'feDiffuseLighting',
    
  1115.     read: getSVGAttribute('lighting-color'),
    
  1116.   },
    
  1117.   {
    
  1118.     name: 'limitingConeAngle',
    
  1119.     read: getSVGProperty('limitingConeAngle'),
    
  1120.     containerTagName: 'svg',
    
  1121.     tagName: 'feSpotLight',
    
  1122.   },
    
  1123.   {name: 'list', read: getAttribute('list')}, // TODO: This should match the ID of a datalist element and then read property.
    
  1124.   {
    
  1125.     name: 'local',
    
  1126.     read: getSVGAttribute('local'),
    
  1127.     containerTagName: 'svg',
    
  1128.     tagName: 'color-profile',
    
  1129.   },
    
  1130.   {name: 'loop', tagName: 'audio'},
    
  1131.   {name: 'low', tagName: 'meter'},
    
  1132.   {name: 'manifest', read: getAttribute('manifest')},
    
  1133.   {name: 'marginHeight', containerTagName: 'frameset', tagName: 'frame'},
    
  1134.   {name: 'marginWidth', containerTagName: 'frameset', tagName: 'frame'},
    
  1135.   {
    
  1136.     name: 'marker-end',
    
  1137.     containerTagName: 'svg',
    
  1138.     tagName: 'line',
    
  1139.     read: getSVGAttribute('marker-end'),
    
  1140.   },
    
  1141.   {
    
  1142.     name: 'marker-mid',
    
  1143.     containerTagName: 'svg',
    
  1144.     tagName: 'line',
    
  1145.     read: getSVGAttribute('marker-mid'),
    
  1146.   },
    
  1147.   {
    
  1148.     name: 'marker-start',
    
  1149.     containerTagName: 'svg',
    
  1150.     tagName: 'line',
    
  1151.     read: getSVGAttribute('marker-start'),
    
  1152.   },
    
  1153.   {
    
  1154.     name: 'markerEnd',
    
  1155.     containerTagName: 'svg',
    
  1156.     tagName: 'line',
    
  1157.     read: getSVGAttribute('marker-end'),
    
  1158.   },
    
  1159.   {
    
  1160.     name: 'markerHeight',
    
  1161.     read: getSVGProperty('markerHeight'),
    
  1162.     containerTagName: 'svg',
    
  1163.     tagName: 'marker',
    
  1164.   },
    
  1165.   {
    
  1166.     name: 'markerMid',
    
  1167.     containerTagName: 'svg',
    
  1168.     tagName: 'line',
    
  1169.     read: getSVGAttribute('marker-mid'),
    
  1170.   },
    
  1171.   {
    
  1172.     name: 'markerStart',
    
  1173.     containerTagName: 'svg',
    
  1174.     tagName: 'line',
    
  1175.     read: getSVGAttribute('marker-start'),
    
  1176.   },
    
  1177.   {
    
  1178.     name: 'markerUnits',
    
  1179.     read: getSVGProperty('markerUnits'),
    
  1180.     containerTagName: 'svg',
    
  1181.     tagName: 'marker',
    
  1182.   },
    
  1183.   {
    
  1184.     name: 'markerWidth',
    
  1185.     read: getSVGProperty('markerWidth'),
    
  1186.     containerTagName: 'svg',
    
  1187.     tagName: 'marker',
    
  1188.   },
    
  1189.   {
    
  1190.     name: 'mask',
    
  1191.     containerTagName: 'svg',
    
  1192.     tagName: 'path',
    
  1193.     read: getSVGAttribute('mask'),
    
  1194.   },
    
  1195.   {
    
  1196.     name: 'maskContentUnits',
    
  1197.     read: getSVGProperty('maskContentUnits'),
    
  1198.     containerTagName: 'svg',
    
  1199.     tagName: 'mask',
    
  1200.     overrideStringValue: 'objectBoundingBox',
    
  1201.   },
    
  1202.   {
    
  1203.     name: 'maskUnits',
    
  1204.     read: getSVGProperty('maskUnits'),
    
  1205.     containerTagName: 'svg',
    
  1206.     tagName: 'mask',
    
  1207.     overrideStringValue: 'userSpaceOnUse',
    
  1208.   },
    
  1209.   {
    
  1210.     name: 'mathematical',
    
  1211.     read: getSVGAttribute('mathematical'),
    
  1212.     containerTagName: 'svg',
    
  1213.     tagName: 'font-face',
    
  1214.   },
    
  1215.   {name: 'max', tagName: 'input'},
    
  1216.   {name: 'max', tagName: 'meter'},
    
  1217.   {name: 'max', tagName: 'progress'},
    
  1218.   {
    
  1219.     name: 'max',
    
  1220.     containerTagName: 'svg',
    
  1221.     tagName: 'animate',
    
  1222.     read: getSVGAttribute('max'),
    
  1223.   },
    
  1224.   {name: 'maxLength', tagName: 'textarea'},
    
  1225.   {name: 'media', tagName: 'link'},
    
  1226.   {
    
  1227.     name: 'media',
    
  1228.     containerTagName: 'svg',
    
  1229.     tagName: 'style',
    
  1230.     read: getSVGProperty('media'),
    
  1231.   },
    
  1232.   {name: 'mediaGroup', tagName: 'video', read: getAttribute('mediagroup')}, // TODO: Not yet implemented in Chrome.
    
  1233.   {name: 'method', tagName: 'form', overrideStringValue: 'POST'},
    
  1234.   {
    
  1235.     name: 'method',
    
  1236.     containerTagName: 'svg',
    
  1237.     tagName: 'textPath',
    
  1238.     read: getSVGProperty('method'),
    
  1239.     overrideStringValue: 'stretch',
    
  1240.   },
    
  1241.   {name: 'min', tagName: 'input'},
    
  1242.   {name: 'min', tagName: 'meter'},
    
  1243.   {
    
  1244.     name: 'min',
    
  1245.     containerTagName: 'svg',
    
  1246.     tagName: 'animate',
    
  1247.     read: getSVGAttribute('min'),
    
  1248.   },
    
  1249.   {name: 'minLength', tagName: 'input'},
    
  1250.   {
    
  1251.     name: 'mode',
    
  1252.     read: getSVGProperty('mode'),
    
  1253.     containerTagName: 'svg',
    
  1254.     tagName: 'feBlend',
    
  1255.     overrideStringValue: 'multiply',
    
  1256.   },
    
  1257.   {name: 'multiple', tagName: 'select'},
    
  1258.   {name: 'muted', tagName: 'video'},
    
  1259.   {name: 'name', tagName: 'input'},
    
  1260.   {
    
  1261.     name: 'name',
    
  1262.     containerTagName: 'svg',
    
  1263.     tagName: 'color-profile',
    
  1264.     read: getSVGAttribute('color-profile'),
    
  1265.   },
    
  1266.   {name: 'noModule', tagName: 'script'},
    
  1267.   {name: 'nonce', read: getAttribute('nonce')},
    
  1268.   {name: 'noValidate', tagName: 'form'},
    
  1269.   {
    
  1270.     name: 'numOctaves',
    
  1271.     read: getSVGProperty('numOctaves'),
    
  1272.     containerTagName: 'svg',
    
  1273.     tagName: 'feTurbulence',
    
  1274.   },
    
  1275.   {
    
  1276.     name: 'offset',
    
  1277.     read: getSVGProperty('offset'),
    
  1278.     containerTagName: 'svg',
    
  1279.     tagName: 'stop',
    
  1280.   },
    
  1281.   {name: 'on-click'}, // TODO: Check for event subscriptions
    
  1282.   {name: 'on-unknownevent'}, // TODO: Check for event subscriptions
    
  1283.   {name: 'onclick'}, // TODO: Check for event subscriptions
    
  1284.   {name: 'onClick'}, // TODO: Check for event subscriptions
    
  1285.   {name: 'onunknownevent'}, // TODO: Check for event subscriptions
    
  1286.   {name: 'onUnknownEvent'}, // TODO: Check for event subscriptions
    
  1287.   {
    
  1288.     name: 'opacity',
    
  1289.     containerTagName: 'svg',
    
  1290.     tagName: 'path',
    
  1291.     read: getSVGAttribute('opacity'),
    
  1292.   },
    
  1293.   {name: 'open', tagName: 'details'},
    
  1294.   {
    
  1295.     name: 'operator',
    
  1296.     read: getSVGProperty('operator'),
    
  1297.     containerTagName: 'svg',
    
  1298.     tagName: 'feComposite',
    
  1299.     overrideStringValue: 'xor',
    
  1300.   },
    
  1301.   {name: 'optimum', tagName: 'meter'},
    
  1302.   {
    
  1303.     name: 'order',
    
  1304.     read: getSVGAttribute('order'),
    
  1305.     containerTagName: 'svg',
    
  1306.     tagName: 'feConvolveMatrix',
    
  1307.   },
    
  1308.   {
    
  1309.     name: 'orient',
    
  1310.     read: getSVGAttribute('orient'),
    
  1311.     containerTagName: 'svg',
    
  1312.     tagName: 'marker',
    
  1313.   },
    
  1314.   {
    
  1315.     name: 'orientation',
    
  1316.     read: getSVGAttribute('orientation'),
    
  1317.     containerTagName: 'svg',
    
  1318.     tagName: 'glyph',
    
  1319.   },
    
  1320.   {
    
  1321.     name: 'origin',
    
  1322.     read: getSVGAttribute('origin'),
    
  1323.     containerTagName: 'svg',
    
  1324.     tagName: 'animateMotion',
    
  1325.   },
    
  1326.   {
    
  1327.     name: 'overflow',
    
  1328.     containerTagName: 'svg',
    
  1329.     tagName: 'path',
    
  1330.     read: getSVGAttribute('overflow'),
    
  1331.   },
    
  1332.   {
    
  1333.     name: 'overline-position',
    
  1334.     read: getSVGAttribute('overline-position'),
    
  1335.     containerTagName: 'svg',
    
  1336.     tagName: 'font-face',
    
  1337.   },
    
  1338.   {
    
  1339.     name: 'overline-thickness',
    
  1340.     read: getSVGAttribute('overline-thickness'),
    
  1341.     containerTagName: 'svg',
    
  1342.     tagName: 'font-face',
    
  1343.   },
    
  1344.   {
    
  1345.     name: 'overlinePosition',
    
  1346.     read: getSVGAttribute('overline-position'),
    
  1347.     containerTagName: 'svg',
    
  1348.     tagName: 'font-face',
    
  1349.   },
    
  1350.   {
    
  1351.     name: 'overlineThickness',
    
  1352.     read: getSVGAttribute('overline-thickness'),
    
  1353.     containerTagName: 'svg',
    
  1354.     tagName: 'font-face',
    
  1355.   },
    
  1356.   {
    
  1357.     name: 'paint-order',
    
  1358.     containerTagName: 'svg',
    
  1359.     tagName: 'path',
    
  1360.     read: getSVGAttribute('paint-order'),
    
  1361.   },
    
  1362.   {
    
  1363.     name: 'paintOrder',
    
  1364.     containerTagName: 'svg',
    
  1365.     tagName: 'path',
    
  1366.     read: getSVGAttribute('paint-order'),
    
  1367.   },
    
  1368.   {
    
  1369.     name: 'panose-1',
    
  1370.     read: getSVGAttribute('panose-1'),
    
  1371.     containerTagName: 'svg',
    
  1372.     tagName: 'font-face',
    
  1373.   },
    
  1374.   {
    
  1375.     name: 'panose1',
    
  1376.     containerTagName: 'svg',
    
  1377.     tagName: 'font-face',
    
  1378.     read: getSVGAttribute('panose-1'),
    
  1379.   },
    
  1380.   {
    
  1381.     name: 'pathLength',
    
  1382.     read: getSVGProperty('pathLength'),
    
  1383.     containerTagName: 'svg',
    
  1384.     tagName: 'path',
    
  1385.   },
    
  1386.   {name: 'pattern', tagName: 'input'},
    
  1387.   {
    
  1388.     name: 'patternContentUnits',
    
  1389.     read: getSVGProperty('patternContentUnits'),
    
  1390.     containerTagName: 'svg',
    
  1391.     tagName: 'pattern',
    
  1392.     overrideStringValue: 'objectBoundingBox',
    
  1393.   },
    
  1394.   {
    
  1395.     name: 'patternTransform',
    
  1396.     read: getSVGProperty('patternTransform'),
    
  1397.     containerTagName: 'svg',
    
  1398.     tagName: 'pattern',
    
  1399.     overrideStringValue:
    
  1400.       'translate(-10,-20) scale(2) rotate(45) translate(5,10)',
    
  1401.   },
    
  1402.   {
    
  1403.     name: 'patternUnits',
    
  1404.     read: getSVGProperty('patternUnits'),
    
  1405.     containerTagName: 'svg',
    
  1406.     tagName: 'pattern',
    
  1407.     overrideStringValue: 'userSpaceOnUse',
    
  1408.   },
    
  1409.   {name: 'placeholder', tagName: 'input'},
    
  1410.   {name: 'playsInline', read: getAttribute('playsinline')},
    
  1411.   {
    
  1412.     name: 'pointer-events',
    
  1413.     containerTagName: 'svg',
    
  1414.     tagName: 'path',
    
  1415.     read: getSVGAttribute('pointer-events'),
    
  1416.   },
    
  1417.   {
    
  1418.     name: 'pointerEvents',
    
  1419.     containerTagName: 'svg',
    
  1420.     tagName: 'path',
    
  1421.     read: getSVGAttribute('pointer-events'),
    
  1422.   },
    
  1423.   {
    
  1424.     name: 'points',
    
  1425.     read: getSVGProperty('points'),
    
  1426.     containerTagName: 'svg',
    
  1427.     tagName: 'polygon',
    
  1428.     overrideStringValue: '350,75  379,161 469,161',
    
  1429.   },
    
  1430.   {
    
  1431.     name: 'pointsAtX',
    
  1432.     read: getSVGProperty('pointsAtX'),
    
  1433.     containerTagName: 'svg',
    
  1434.     tagName: 'feSpotLight',
    
  1435.   },
    
  1436.   {
    
  1437.     name: 'pointsAtY',
    
  1438.     read: getSVGProperty('pointsAtY'),
    
  1439.     containerTagName: 'svg',
    
  1440.     tagName: 'feSpotLight',
    
  1441.   },
    
  1442.   {
    
  1443.     name: 'pointsAtZ',
    
  1444.     read: getSVGProperty('pointsAtZ'),
    
  1445.     containerTagName: 'svg',
    
  1446.     tagName: 'feSpotLight',
    
  1447.   },
    
  1448.   {
    
  1449.     name: 'poster',
    
  1450.     tagName: 'video',
    
  1451.     overrideStringValue: 'https://reactjs.com',
    
  1452.   },
    
  1453.   {name: 'prefix', read: getAttribute('prefix')},
    
  1454.   {name: 'preload', tagName: 'video', overrideStringValue: 'none'},
    
  1455.   {
    
  1456.     name: 'preserveAlpha',
    
  1457.     read: getSVGProperty('preserveAlpha'),
    
  1458.     containerTagName: 'svg',
    
  1459.     tagName: 'feConvolveMatrix',
    
  1460.   },
    
  1461.   {
    
  1462.     name: 'preserveAspectRatio',
    
  1463.     read: getSVGProperty('preserveAspectRatio'),
    
  1464.     containerTagName: 'svg',
    
  1465.     tagName: 'feImage',
    
  1466.     overrideStringValue: 'xMinYMin slice',
    
  1467.   },
    
  1468.   {
    
  1469.     name: 'primitiveUnits',
    
  1470.     read: getSVGProperty('primitiveUnits'),
    
  1471.     containerTagName: 'svg',
    
  1472.     tagName: 'filter',
    
  1473.     overrideStringValue: 'objectBoundingBox',
    
  1474.   },
    
  1475.   {name: 'profile', read: getAttribute('profile')},
    
  1476.   {name: 'property', read: getAttribute('property')},
    
  1477.   {name: 'props', read: getAttribute('props')},
    
  1478.   {
    
  1479.     name: 'r',
    
  1480.     read: getSVGProperty('r'),
    
  1481.     containerTagName: 'svg',
    
  1482.     tagName: 'circle',
    
  1483.     overrideStringValue: '10pt',
    
  1484.   },
    
  1485.   {name: 'radioGroup', tagName: 'command', read: getAttribute('radiogroup')},
    
  1486.   {
    
  1487.     name: 'radius',
    
  1488.     read: getSVGAttribute('radius'),
    
  1489.     containerTagName: 'svg',
    
  1490.     tagName: 'feMorphology',
    
  1491.   },
    
  1492.   {name: 'readOnly', tagName: 'input'},
    
  1493.   {name: 'referrerPolicy', tagName: 'iframe'},
    
  1494.   {
    
  1495.     name: 'refX',
    
  1496.     read: getSVGProperty('refX'),
    
  1497.     containerTagName: 'svg',
    
  1498.     tagName: 'marker',
    
  1499.     overrideStringValue: '5em',
    
  1500.   },
    
  1501.   {
    
  1502.     name: 'refY',
    
  1503.     read: getSVGProperty('refY'),
    
  1504.     containerTagName: 'svg',
    
  1505.     tagName: 'marker',
    
  1506.     overrideStringValue: '6em',
    
  1507.   },
    
  1508.   {name: 'rel', tagName: 'a'},
    
  1509.   {
    
  1510.     name: 'rendering-intent',
    
  1511.     read: getSVGAttribute('rendering-intent'),
    
  1512.     containerTagName: 'svg',
    
  1513.     tagName: 'color-profile',
    
  1514.   },
    
  1515.   {
    
  1516.     name: 'renderingIntent',
    
  1517.     read: getSVGAttribute('rendering-intent'),
    
  1518.     containerTagName: 'svg',
    
  1519.     tagName: 'color-profile',
    
  1520.   },
    
  1521.   {
    
  1522.     name: 'repeatCount',
    
  1523.     read: getSVGAttribute('repeatcount'),
    
  1524.     containerTagName: 'svg',
    
  1525.     tagName: 'animate',
    
  1526.   },
    
  1527.   {
    
  1528.     name: 'repeatDur',
    
  1529.     read: getSVGAttribute('repeatdur'),
    
  1530.     containerTagName: 'svg',
    
  1531.     tagName: 'animate',
    
  1532.   },
    
  1533.   {name: 'required', tagName: 'input'},
    
  1534.   {
    
  1535.     name: 'requiredExtensions',
    
  1536.     read: getSVGProperty('requiredExtensions'),
    
  1537.     containerTagName: 'svg',
    
  1538.     tagName: 'a',
    
  1539.   },
    
  1540.   {
    
  1541.     name: 'requiredFeatures',
    
  1542.     read: getSVGAttribute('requiredFeatures'),
    
  1543.     containerTagName: 'svg',
    
  1544.     tagName: 'a',
    
  1545.   },
    
  1546.   {name: 'resource', read: getAttribute('resource')},
    
  1547.   {
    
  1548.     name: 'restart',
    
  1549.     read: getSVGAttribute('resource'),
    
  1550.     containerTagName: 'svg',
    
  1551.     tagName: 'animate',
    
  1552.   },
    
  1553.   {
    
  1554.     name: 'result',
    
  1555.     read: getSVGProperty('result'),
    
  1556.     containerTagName: 'svg',
    
  1557.     tagName: 'feBlend',
    
  1558.   },
    
  1559.   {name: 'results', tagName: 'input', read: getAttribute('results')}, // TODO: Should use property but it's not supported in Chrome.
    
  1560.   {name: 'reversed', tagName: 'ol'},
    
  1561.   {name: 'role', read: getAttribute('role')},
    
  1562.   {
    
  1563.     name: 'rotate',
    
  1564.     read: getSVGAttribute('role'),
    
  1565.     containerTagName: 'svg',
    
  1566.     tagName: 'altGlyph',
    
  1567.   },
    
  1568.   {name: 'rows', tagName: 'textarea'},
    
  1569.   {name: 'rowSpan', containerTagName: 'tr', tagName: 'td'},
    
  1570.   {
    
  1571.     name: 'rx',
    
  1572.     read: getSVGProperty('rx'),
    
  1573.     containerTagName: 'svg',
    
  1574.     tagName: 'ellipse',
    
  1575.     overrideStringValue: '1px',
    
  1576.   },
    
  1577.   {
    
  1578.     name: 'ry',
    
  1579.     read: getSVGProperty('ry'),
    
  1580.     containerTagName: 'svg',
    
  1581.     tagName: 'ellipse',
    
  1582.     overrideStringValue: '2px',
    
  1583.   },
    
  1584.   {
    
  1585.     name: 'sandbox',
    
  1586.     tagName: 'iframe',
    
  1587.     overrideStringValue: 'allow-forms  allow-scripts',
    
  1588.   },
    
  1589.   {
    
  1590.     name: 'scale',
    
  1591.     read: getSVGProperty('scale'),
    
  1592.     containerTagName: 'svg',
    
  1593.     tagName: 'feDisplacementMap',
    
  1594.   },
    
  1595.   {
    
  1596.     name: 'scope',
    
  1597.     containerTagName: 'tr',
    
  1598.     tagName: 'th',
    
  1599.     overrideStringValue: 'row',
    
  1600.   },
    
  1601.   {name: 'scoped', tagName: 'style', read: getAttribute('scoped')},
    
  1602.   {name: 'scrolling', tagName: 'iframe', overrideStringValue: 'no'},
    
  1603.   {name: 'seamless', tagName: 'iframe', read: getAttribute('seamless')},
    
  1604.   {name: 'security', tagName: 'iframe', read: getAttribute('security')},
    
  1605.   {
    
  1606.     name: 'seed',
    
  1607.     read: getSVGProperty('seed'),
    
  1608.     containerTagName: 'svg',
    
  1609.     tagName: 'feTurbulence',
    
  1610.   },
    
  1611.   {name: 'selected', tagName: 'option', containerTagName: 'select'},
    
  1612.   {name: 'selectedIndex', tagName: 'select'},
    
  1613.   {name: 'shape', tagName: 'a'},
    
  1614.   {
    
  1615.     name: 'shape-rendering',
    
  1616.     tagName: 'svg',
    
  1617.     read: getSVGAttribute('shape-rendering'),
    
  1618.   },
    
  1619.   {
    
  1620.     name: 'shapeRendering',
    
  1621.     tagName: 'svg',
    
  1622.     read: getSVGAttribute('shape-rendering'),
    
  1623.   },
    
  1624.   {name: 'size', tagName: 'input'},
    
  1625.   {name: 'sizes', tagName: 'link'},
    
  1626.   {
    
  1627.     name: 'slope',
    
  1628.     read: getSVGAttribute('slope'),
    
  1629.     containerTagName: 'svg',
    
  1630.     tagName: 'font-face',
    
  1631.   },
    
  1632.   {
    
  1633.     name: 'spacing',
    
  1634.     read: getSVGProperty('spacing'),
    
  1635.     containerTagName: 'svg',
    
  1636.     tagName: 'textPath',
    
  1637.     overrideStringValue: 'auto',
    
  1638.   },
    
  1639.   {name: 'span', containerTagName: 'colgroup', tagName: 'col'},
    
  1640.   {
    
  1641.     name: 'specularConstant',
    
  1642.     read: getSVGProperty('specularConstant'),
    
  1643.     containerTagName: 'svg',
    
  1644.     tagName: 'feSpecularLighting',
    
  1645.   },
    
  1646.   {
    
  1647.     name: 'specularExponent',
    
  1648.     read: getSVGProperty('specularConstant'),
    
  1649.     containerTagName: 'svg',
    
  1650.     tagName: 'feSpecularLighting',
    
  1651.   },
    
  1652.   {name: 'speed', read: getAttribute('speed')},
    
  1653.   {
    
  1654.     name: 'spellCheck',
    
  1655.     overrideStringValue: 'false',
    
  1656.     tagName: 'input',
    
  1657.     read: getProperty('spellcheck'),
    
  1658.   },
    
  1659.   {
    
  1660.     name: 'spellcheck',
    
  1661.     overrideStringValue: 'false',
    
  1662.     tagName: 'input',
    
  1663.     read: getProperty('spellcheck'),
    
  1664.   },
    
  1665.   {
    
  1666.     name: 'spreadMethod',
    
  1667.     read: getSVGProperty('spreadMethod'),
    
  1668.     containerTagName: 'svg',
    
  1669.     tagName: 'linearGradient',
    
  1670.     overrideStringValue: 'reflect',
    
  1671.   },
    
  1672.   {name: 'src', tagName: 'img', overrideStringValue: 'https://reactjs.com'},
    
  1673.   {
    
  1674.     name: 'srcDoc',
    
  1675.     tagName: 'iframe',
    
  1676.     overrideStringValue: '<p>Hi</p>',
    
  1677.     read: getProperty('srcdoc'),
    
  1678.   },
    
  1679.   {
    
  1680.     name: 'srcdoc',
    
  1681.     tagName: 'iframe',
    
  1682.     overrideStringValue: '<p>Hi</p>',
    
  1683.     read: getProperty('srcdoc'),
    
  1684.   },
    
  1685.   {
    
  1686.     name: 'srcLang',
    
  1687.     containerTagName: 'audio',
    
  1688.     tagName: 'track',
    
  1689.     overrideStringValue: 'en',
    
  1690.     read: getProperty('srclang'),
    
  1691.   },
    
  1692.   {
    
  1693.     name: 'srclang',
    
  1694.     containerTagName: 'audio',
    
  1695.     tagName: 'track',
    
  1696.     overrideStringValue: 'en',
    
  1697.     read: getProperty('srclang'),
    
  1698.   },
    
  1699.   {name: 'srcSet', tagName: 'img'},
    
  1700.   {name: 'srcset', tagName: 'img'},
    
  1701.   {name: 'start', tagName: 'ol'},
    
  1702.   {
    
  1703.     name: 'startOffset',
    
  1704.     read: getSVGProperty('startOffset'),
    
  1705.     containerTagName: 'svg',
    
  1706.     tagName: 'textPath',
    
  1707.   },
    
  1708.   {name: 'state', read: getAttribute('state')},
    
  1709.   {
    
  1710.     name: 'stdDeviation',
    
  1711.     read: getSVGAttribute('stdDeviation'),
    
  1712.     containerTagName: 'svg',
    
  1713.     tagName: 'feGaussianBlur',
    
  1714.   },
    
  1715.   {
    
  1716.     name: 'stemh',
    
  1717.     read: getSVGAttribute('stemh'),
    
  1718.     containerTagName: 'svg',
    
  1719.     tagName: 'font-face',
    
  1720.   },
    
  1721.   {
    
  1722.     name: 'stemv',
    
  1723.     read: getSVGAttribute('stemv'),
    
  1724.     containerTagName: 'svg',
    
  1725.     tagName: 'font-face',
    
  1726.   },
    
  1727.   {name: 'step', read: getAttribute('step')},
    
  1728.   {
    
  1729.     name: 'stitchTiles',
    
  1730.     read: getSVGProperty('stitchTiles'),
    
  1731.     containerTagName: 'svg',
    
  1732.     tagName: 'feTurbulence',
    
  1733.     overrideStringValue: 'stitch',
    
  1734.   },
    
  1735.   {
    
  1736.     name: 'stop-color',
    
  1737.     containerTagName: 'svg',
    
  1738.     tagName: 'stop',
    
  1739.     read: getSVGAttribute('stop-color'),
    
  1740.   },
    
  1741.   {
    
  1742.     name: 'stop-opacity',
    
  1743.     containerTagName: 'svg',
    
  1744.     tagName: 'stop',
    
  1745.     read: getSVGAttribute('stop-opacity'),
    
  1746.   },
    
  1747.   {
    
  1748.     name: 'stopColor',
    
  1749.     containerTagName: 'svg',
    
  1750.     tagName: 'stop',
    
  1751.     read: getSVGAttribute('stop-color'),
    
  1752.   },
    
  1753.   {
    
  1754.     name: 'stopOpacity',
    
  1755.     containerTagName: 'svg',
    
  1756.     tagName: 'stop',
    
  1757.     read: getSVGAttribute('stop-opacity'),
    
  1758.   },
    
  1759.   {
    
  1760.     name: 'strikethrough-position',
    
  1761.     read: getSVGAttribute('strikethrough-position'),
    
  1762.     containerTagName: 'svg',
    
  1763.     tagName: 'font-face',
    
  1764.   },
    
  1765.   {
    
  1766.     name: 'strikethrough-thickness',
    
  1767.     read: getSVGAttribute('strikethrough-thickness'),
    
  1768.     containerTagName: 'svg',
    
  1769.     tagName: 'font-face',
    
  1770.   },
    
  1771.   {
    
  1772.     name: 'strikethroughPosition',
    
  1773.     read: getSVGAttribute('strikethrough-position'),
    
  1774.     containerTagName: 'svg',
    
  1775.     tagName: 'font-face',
    
  1776.   },
    
  1777.   {
    
  1778.     name: 'strikethroughThickness',
    
  1779.     read: getSVGAttribute('strikethrough-thickness'),
    
  1780.     containerTagName: 'svg',
    
  1781.     tagName: 'font-face',
    
  1782.   },
    
  1783.   {
    
  1784.     name: 'string',
    
  1785.     read: getSVGAttribute('string'),
    
  1786.     containerTagName: 'svg',
    
  1787.     tagName: 'font-face-format',
    
  1788.   },
    
  1789.   {
    
  1790.     name: 'stroke',
    
  1791.     containerTagName: 'svg',
    
  1792.     tagName: 'path',
    
  1793.     read: getSVGAttribute('stroke'),
    
  1794.   },
    
  1795.   {
    
  1796.     name: 'stroke-dasharray',
    
  1797.     containerTagName: 'svg',
    
  1798.     tagName: 'path',
    
  1799.     read: getSVGAttribute('stroke-dasharray'),
    
  1800.   },
    
  1801.   {
    
  1802.     name: 'stroke-Dasharray',
    
  1803.     containerTagName: 'svg',
    
  1804.     tagName: 'path',
    
  1805.     read: getSVGAttribute('stroke-dasharray'),
    
  1806.   },
    
  1807.   {
    
  1808.     name: 'stroke-dashoffset',
    
  1809.     containerTagName: 'svg',
    
  1810.     tagName: 'path',
    
  1811.     read: getSVGAttribute('stroke-dashoffset'),
    
  1812.   },
    
  1813.   {
    
  1814.     name: 'stroke-linecap',
    
  1815.     containerTagName: 'svg',
    
  1816.     tagName: 'path',
    
  1817.     read: getSVGAttribute('stroke-linecap'),
    
  1818.   },
    
  1819.   {
    
  1820.     name: 'stroke-linejoin',
    
  1821.     containerTagName: 'svg',
    
  1822.     tagName: 'path',
    
  1823.     read: getSVGAttribute('stroke-linejoin'),
    
  1824.   },
    
  1825.   {
    
  1826.     name: 'stroke-miterlimit',
    
  1827.     containerTagName: 'svg',
    
  1828.     tagName: 'path',
    
  1829.     read: getSVGAttribute('stroke-miterlimit'),
    
  1830.   },
    
  1831.   {
    
  1832.     name: 'stroke-opacity',
    
  1833.     containerTagName: 'svg',
    
  1834.     tagName: 'path',
    
  1835.     read: getSVGAttribute('stroke-opacity'),
    
  1836.   },
    
  1837.   {
    
  1838.     name: 'stroke-width',
    
  1839.     containerTagName: 'svg',
    
  1840.     tagName: 'path',
    
  1841.     read: getSVGAttribute('stroke-width'),
    
  1842.   },
    
  1843.   {
    
  1844.     name: 'strokeDasharray',
    
  1845.     containerTagName: 'svg',
    
  1846.     tagName: 'path',
    
  1847.     read: getSVGAttribute('stroke-dasharray'),
    
  1848.   },
    
  1849.   {
    
  1850.     name: 'strokeDashoffset',
    
  1851.     containerTagName: 'svg',
    
  1852.     tagName: 'path',
    
  1853.     read: getSVGAttribute('stroke-dashoffset'),
    
  1854.   },
    
  1855.   {
    
  1856.     name: 'strokeLinecap',
    
  1857.     containerTagName: 'svg',
    
  1858.     tagName: 'path',
    
  1859.     read: getSVGAttribute('stroke-linecap'),
    
  1860.   },
    
  1861.   {
    
  1862.     name: 'strokeLinejoin',
    
  1863.     containerTagName: 'svg',
    
  1864.     tagName: 'path',
    
  1865.     read: getSVGAttribute('stroke-linejoin'),
    
  1866.   },
    
  1867.   {
    
  1868.     name: 'strokeMiterlimit',
    
  1869.     containerTagName: 'svg',
    
  1870.     tagName: 'path',
    
  1871.     read: getSVGAttribute('stroke-miterlimit'),
    
  1872.   },
    
  1873.   {
    
  1874.     name: 'strokeOpacity',
    
  1875.     containerTagName: 'svg',
    
  1876.     tagName: 'path',
    
  1877.     read: getSVGAttribute('stroke-opacity'),
    
  1878.   },
    
  1879.   {
    
  1880.     name: 'strokeWidth',
    
  1881.     containerTagName: 'svg',
    
  1882.     tagName: 'path',
    
  1883.     read: getSVGAttribute('stroke-width'),
    
  1884.   },
    
  1885.   {name: 'style'},
    
  1886.   {name: 'summary', tagName: 'table'},
    
  1887.   {
    
  1888.     name: 'suppressContentEditableWarning',
    
  1889.     read: getAttribute('suppresscontenteditablewarning'),
    
  1890.   },
    
  1891.   {
    
  1892.     name: 'surfaceScale',
    
  1893.     read: getSVGProperty('surfaceScale'),
    
  1894.     containerTagName: 'svg',
    
  1895.     tagName: 'feDiffuseLighting',
    
  1896.   },
    
  1897.   {
    
  1898.     name: 'systemLanguage',
    
  1899.     overrideStringValue: 'en',
    
  1900.     read: getSVGProperty('systemLanguage'),
    
  1901.     containerTagName: 'svg',
    
  1902.     tagName: 'a',
    
  1903.   },
    
  1904.   {name: 'tabIndex'},
    
  1905.   {
    
  1906.     name: 'tabIndex',
    
  1907.     read: getSVGProperty('tabIndex'),
    
  1908.     tagName: 'svg',
    
  1909.   },
    
  1910.   {
    
  1911.     name: 'tableValues',
    
  1912.     read: getSVGProperty('tableValues'),
    
  1913.     containerTagName: 'svg',
    
  1914.     tagName: 'feFuncA',
    
  1915.     overrideStringValue: '0 1 2 3',
    
  1916.   },
    
  1917.   {
    
  1918.     name: 'target',
    
  1919.     read: getSVGProperty('target'),
    
  1920.     containerTagName: 'svg',
    
  1921.     tagName: 'a',
    
  1922.   },
    
  1923.   {
    
  1924.     name: 'targetX',
    
  1925.     read: getSVGProperty('targetX'),
    
  1926.     containerTagName: 'svg',
    
  1927.     tagName: 'feConvolveMatrix',
    
  1928.   },
    
  1929.   {
    
  1930.     name: 'targetY',
    
  1931.     read: getSVGProperty('targetY'),
    
  1932.     containerTagName: 'svg',
    
  1933.     tagName: 'feConvolveMatrix',
    
  1934.   },
    
  1935.   {
    
  1936.     name: 'text-anchor',
    
  1937.     containerTagName: 'svg',
    
  1938.     tagName: 'text',
    
  1939.     read: getSVGAttribute('text-anchor'),
    
  1940.   },
    
  1941.   {
    
  1942.     name: 'text-decoration',
    
  1943.     containerTagName: 'svg',
    
  1944.     tagName: 'text',
    
  1945.     read: getSVGAttribute('text-decoration'),
    
  1946.   },
    
  1947.   {
    
  1948.     name: 'text-rendering',
    
  1949.     tagName: 'svg',
    
  1950.     read: getSVGAttribute('text-rendering'),
    
  1951.   },
    
  1952.   {
    
  1953.     name: 'textAnchor',
    
  1954.     containerTagName: 'svg',
    
  1955.     tagName: 'text',
    
  1956.     read: getSVGAttribute('text-anchor'),
    
  1957.   },
    
  1958.   {
    
  1959.     name: 'textDecoration',
    
  1960.     containerTagName: 'svg',
    
  1961.     tagName: 'text',
    
  1962.     read: getSVGAttribute('text-decoration'),
    
  1963.   },
    
  1964.   {
    
  1965.     name: 'textLength',
    
  1966.     read: getSVGProperty('textLength'),
    
  1967.     containerTagName: 'svg',
    
  1968.     tagName: 'text',
    
  1969.   },
    
  1970.   {
    
  1971.     name: 'textRendering',
    
  1972.     tagName: 'svg',
    
  1973.     read: getSVGAttribute('text-rendering'),
    
  1974.   },
    
  1975.   {name: 'title'},
    
  1976.   {
    
  1977.     name: 'to',
    
  1978.     read: getSVGAttribute('to'),
    
  1979.     containerTagName: 'svg',
    
  1980.     tagName: 'set',
    
  1981.   },
    
  1982.   {
    
  1983.     name: 'transform',
    
  1984.     read: getSVGProperty('transform'),
    
  1985.     containerTagName: 'svg',
    
  1986.     tagName: 'a',
    
  1987.     overrideStringValue:
    
  1988.       'translate(-10,-20) scale(2) rotate(45) translate(5,10)',
    
  1989.   },
    
  1990.   {
    
  1991.     name: 'transform-origin',
    
  1992.     tagName: 'svg',
    
  1993.     read: getSVGAttribute('transform-origin'),
    
  1994.   },
    
  1995.   {
    
  1996.     name: 'transformOrigin',
    
  1997.     tagName: 'svg',
    
  1998.     read: getSVGAttribute('transform-origin'),
    
  1999.   },
    
  2000.   {name: 'type', tagName: 'button', overrideStringValue: 'reset'},
    
  2001.   {
    
  2002.     name: 'type',
    
  2003.     containerTagName: 'svg',
    
  2004.     tagName: 'feFuncA',
    
  2005.     read: getSVGProperty('type'),
    
  2006.     overrideStringValue: 'discrete',
    
  2007.   },
    
  2008.   {name: 'typeof', read: getAttribute('typeof')},
    
  2009.   {
    
  2010.     name: 'u1',
    
  2011.     read: getSVGAttribute('u1'),
    
  2012.     containerTagName: 'svg',
    
  2013.     tagName: 'hkern',
    
  2014.   },
    
  2015.   {
    
  2016.     name: 'u2',
    
  2017.     read: getSVGAttribute('u2'),
    
  2018.     containerTagName: 'svg',
    
  2019.     tagName: 'hkern',
    
  2020.   },
    
  2021.   {
    
  2022.     name: 'underline-position',
    
  2023.     read: getSVGAttribute('underline-position'),
    
  2024.     containerTagName: 'svg',
    
  2025.     tagName: 'font-face',
    
  2026.   },
    
  2027.   {
    
  2028.     name: 'underline-thickness',
    
  2029.     read: getSVGAttribute('underline-thickness'),
    
  2030.     containerTagName: 'svg',
    
  2031.     tagName: 'font-face',
    
  2032.   },
    
  2033.   {
    
  2034.     name: 'underlinePosition',
    
  2035.     read: getSVGAttribute('underline-position'),
    
  2036.     containerTagName: 'svg',
    
  2037.     tagName: 'font-face',
    
  2038.   },
    
  2039.   {
    
  2040.     name: 'underlineThickness',
    
  2041.     read: getSVGAttribute('underline-thickness'),
    
  2042.     containerTagName: 'svg',
    
  2043.     tagName: 'font-face',
    
  2044.   },
    
  2045.   {
    
  2046.     name: 'unicode',
    
  2047.     read: getSVGAttribute('unicode'),
    
  2048.     containerTagName: 'svg',
    
  2049.     tagName: 'glyph',
    
  2050.   },
    
  2051.   {
    
  2052.     name: 'unicode-bidi',
    
  2053.     containerTagName: 'svg',
    
  2054.     tagName: 'text',
    
  2055.     read: getSVGAttribute('unicode-bidi'),
    
  2056.   },
    
  2057.   {
    
  2058.     name: 'unicode-range',
    
  2059.     read: getSVGAttribute('unicode-range'),
    
  2060.     containerTagName: 'svg',
    
  2061.     tagName: 'font-face',
    
  2062.   },
    
  2063.   {
    
  2064.     name: 'unicodeBidi',
    
  2065.     containerTagName: 'svg',
    
  2066.     tagName: 'text',
    
  2067.     read: getSVGAttribute('unicode-bidi'),
    
  2068.   },
    
  2069.   {
    
  2070.     name: 'unicodeRange',
    
  2071.     read: getSVGAttribute('unicode-range'),
    
  2072.     containerTagName: 'svg',
    
  2073.     tagName: 'font-face',
    
  2074.   },
    
  2075.   {
    
  2076.     name: 'units-per-em',
    
  2077.     read: getSVGAttribute('units-per-em'),
    
  2078.     containerTagName: 'svg',
    
  2079.     tagName: 'font-face',
    
  2080.   },
    
  2081.   {
    
  2082.     name: 'unitsPerEm',
    
  2083.     read: getSVGAttribute('unites-per-em'),
    
  2084.     containerTagName: 'svg',
    
  2085.     tagName: 'font-face',
    
  2086.   },
    
  2087.   {name: 'unknown', read: getAttribute('unknown')},
    
  2088.   {
    
  2089.     name: 'unselectable',
    
  2090.     read: getAttribute('unselectable'),
    
  2091.     tagName: 'span',
    
  2092.     overrideStringValue: 'on',
    
  2093.   },
    
  2094.   {name: 'useMap', tagName: 'img'},
    
  2095.   {
    
  2096.     name: 'v-alphabetic',
    
  2097.     read: getSVGAttribute('v-alphabetic'),
    
  2098.     containerTagName: 'svg',
    
  2099.     tagName: 'font-face',
    
  2100.   },
    
  2101.   {
    
  2102.     name: 'v-hanging',
    
  2103.     read: getSVGAttribute('v-hanging'),
    
  2104.     containerTagName: 'svg',
    
  2105.     tagName: 'font-face',
    
  2106.   },
    
  2107.   {
    
  2108.     name: 'v-ideographic',
    
  2109.     read: getSVGAttribute('v-ideographic'),
    
  2110.     containerTagName: 'svg',
    
  2111.     tagName: 'font-face',
    
  2112.   },
    
  2113.   {
    
  2114.     name: 'v-mathematical',
    
  2115.     read: getSVGAttribute('v-mathematical'),
    
  2116.     containerTagName: 'svg',
    
  2117.     tagName: 'font-face',
    
  2118.   },
    
  2119.   {
    
  2120.     name: 'vAlphabetic',
    
  2121.     read: getSVGAttribute('v-alphabetic'),
    
  2122.     containerTagName: 'svg',
    
  2123.     tagName: 'font-face',
    
  2124.   },
    
  2125.   {name: 'value', tagName: 'input', extraProps: {onChange() {}}},
    
  2126.   {name: 'value', tagName: 'input', type: 'email', extraProps: {onChange() {}}},
    
  2127.   {
    
  2128.     name: 'value',
    
  2129.     tagName: 'input',
    
  2130.     type: 'number',
    
  2131.     extraProps: {onChange() {}},
    
  2132.   },
    
  2133.   {name: 'value', tagName: 'textarea', extraProps: {onChange() {}}},
    
  2134.   {
    
  2135.     name: 'value',
    
  2136.     containerTagName: 'select',
    
  2137.     tagName: 'option',
    
  2138.     extraProps: {onChange() {}},
    
  2139.   },
    
  2140.   {
    
  2141.     name: 'Value',
    
  2142.     containerTagName: 'select',
    
  2143.     tagName: 'option',
    
  2144.     read: getProperty('value'),
    
  2145.   },
    
  2146.   {
    
  2147.     name: 'values',
    
  2148.     read: getSVGProperty('values'),
    
  2149.     containerTagName: 'svg',
    
  2150.     tagName: 'feColorMatrix',
    
  2151.     overrideStringValue: '1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 1 0',
    
  2152.   },
    
  2153.   {
    
  2154.     name: 'vector-effect',
    
  2155.     containerTagName: 'svg',
    
  2156.     tagName: 'line',
    
  2157.     read: getSVGAttribute('vector-effect'),
    
  2158.   },
    
  2159.   {
    
  2160.     name: 'vectorEffect',
    
  2161.     containerTagName: 'svg',
    
  2162.     tagName: 'line',
    
  2163.     read: getSVGAttribute('vector-effect'),
    
  2164.   },
    
  2165.   {name: 'version', containerTagName: 'document', tagName: 'html'},
    
  2166.   {name: 'version', tagName: 'svg', read: getSVGAttribute('version')},
    
  2167.   {
    
  2168.     name: 'vert-adv-y',
    
  2169.     read: getSVGAttribute('vert-origin-y'),
    
  2170.     containerTagName: 'svg',
    
  2171.     tagName: 'font',
    
  2172.   },
    
  2173.   {
    
  2174.     name: 'vert-origin-x',
    
  2175.     read: getSVGAttribute('vert-origin-y'),
    
  2176.     containerTagName: 'svg',
    
  2177.     tagName: 'font',
    
  2178.   },
    
  2179.   {
    
  2180.     name: 'vert-origin-y',
    
  2181.     read: getSVGAttribute('vert-origin-y'),
    
  2182.     containerTagName: 'svg',
    
  2183.     tagName: 'font',
    
  2184.   },
    
  2185.   {
    
  2186.     name: 'vertAdvY',
    
  2187.     read: getSVGAttribute('vert-adv-y'),
    
  2188.     containerTagName: 'svg',
    
  2189.     tagName: 'font',
    
  2190.   },
    
  2191.   {
    
  2192.     name: 'vertOriginX',
    
  2193.     read: getSVGAttribute('vert-origin-x'),
    
  2194.     containerTagName: 'svg',
    
  2195.     tagName: 'font',
    
  2196.   },
    
  2197.   {
    
  2198.     name: 'vertOriginY',
    
  2199.     read: getSVGAttribute('vert-origin-y'),
    
  2200.     containerTagName: 'svg',
    
  2201.     tagName: 'font',
    
  2202.   },
    
  2203.   {
    
  2204.     name: 'vHanging',
    
  2205.     read: getSVGAttribute('v-hanging'),
    
  2206.     containerTagName: 'svg',
    
  2207.     tagName: 'font-face',
    
  2208.   },
    
  2209.   {
    
  2210.     name: 'vIdeographic',
    
  2211.     read: getSVGAttribute('v-ideographic'),
    
  2212.     containerTagName: 'svg',
    
  2213.     tagName: 'font-face',
    
  2214.   },
    
  2215.   {
    
  2216.     name: 'viewBox',
    
  2217.     read: getSVGProperty('viewBox'),
    
  2218.     containerTagName: 'svg',
    
  2219.     tagName: 'marker',
    
  2220.     overrideStringValue: '0 0 1500 1000',
    
  2221.   },
    
  2222.   {
    
  2223.     name: 'viewTarget',
    
  2224.     read: getSVGAttribute('viewTarget'),
    
  2225.     containerTagName: 'svg',
    
  2226.     tagName: 'view',
    
  2227.   },
    
  2228.   {name: 'visibility', read: getAttribute('visibility')},
    
  2229.   {
    
  2230.     name: 'visibility',
    
  2231.     containerTagName: 'svg',
    
  2232.     tagName: 'path',
    
  2233.     read: getSVGAttribute('visibility'),
    
  2234.   },
    
  2235.   {
    
  2236.     name: 'vMathematical',
    
  2237.     read: getSVGAttribute('v-mathematical'),
    
  2238.     containerTagName: 'svg',
    
  2239.     tagName: 'font-face',
    
  2240.   },
    
  2241.   {name: 'vocab', read: getAttribute('vocab')},
    
  2242.   {name: 'width', tagName: 'img'},
    
  2243.   {
    
  2244.     name: 'width',
    
  2245.     containerTagName: 'svg',
    
  2246.     tagName: 'rect',
    
  2247.     read: getSVGProperty('width'),
    
  2248.   },
    
  2249.   {
    
  2250.     name: 'widths',
    
  2251.     read: getSVGAttribute('widths'),
    
  2252.     containerTagName: 'svg',
    
  2253.     tagName: 'font-face',
    
  2254.   },
    
  2255.   {name: 'wmode', read: getAttribute('wmode'), tagName: 'embed'},
    
  2256.   {
    
  2257.     name: 'word-spacing',
    
  2258.     containerTagName: 'svg',
    
  2259.     tagName: 'text',
    
  2260.     read: getSVGAttribute('word-spacing'),
    
  2261.   },
    
  2262.   {
    
  2263.     name: 'wordSpacing',
    
  2264.     containerTagName: 'svg',
    
  2265.     tagName: 'text',
    
  2266.     read: getSVGAttribute('word-spacing'),
    
  2267.   },
    
  2268.   {name: 'wrap', tagName: 'textarea'},
    
  2269.   {
    
  2270.     name: 'writing-mode',
    
  2271.     containerTagName: 'svg',
    
  2272.     tagName: 'text',
    
  2273.     read: getSVGAttribute('writing-mode'),
    
  2274.   },
    
  2275.   {
    
  2276.     name: 'writingMode',
    
  2277.     containerTagName: 'svg',
    
  2278.     tagName: 'text',
    
  2279.     read: getSVGAttribute('writing-mode'),
    
  2280.   },
    
  2281.   {
    
  2282.     name: 'x',
    
  2283.     read: getSVGAttribute('x'),
    
  2284.     containerTagName: 'svg',
    
  2285.     tagName: 'altGlyph',
    
  2286.   },
    
  2287.   {
    
  2288.     name: 'x-height',
    
  2289.     read: getSVGAttribute('x-height'),
    
  2290.     containerTagName: 'svg',
    
  2291.     tagName: 'font-face',
    
  2292.   },
    
  2293.   {
    
  2294.     name: 'x1',
    
  2295.     read: getSVGProperty('x1'),
    
  2296.     containerTagName: 'svg',
    
  2297.     tagName: 'line',
    
  2298.   },
    
  2299.   {
    
  2300.     name: 'x2',
    
  2301.     read: getSVGProperty('x2'),
    
  2302.     containerTagName: 'svg',
    
  2303.     tagName: 'line',
    
  2304.   },
    
  2305.   {
    
  2306.     name: 'xChannelSelector',
    
  2307.     read: getSVGProperty('xChannelSelector'),
    
  2308.     containerTagName: 'svg',
    
  2309.     tagName: 'feDisplacementMap',
    
  2310.     overrideStringValue: 'R',
    
  2311.   },
    
  2312.   {
    
  2313.     name: 'xHeight',
    
  2314.     read: getSVGAttribute('x-height'),
    
  2315.     containerTagName: 'svg',
    
  2316.     tagName: 'font-face',
    
  2317.   },
    
  2318.   {name: 'XLink:Actuate', read: getAttribute('XLink:Actuate')},
    
  2319.   {name: 'xlink:actuate', read: getAttribute('xlink:actuate')},
    
  2320.   {name: 'xlink:arcrole', read: getAttribute('xlink:arcrole')},
    
  2321.   {name: 'xlink:href', read: getAttribute('xlink:href')},
    
  2322.   {name: 'xlink:role', read: getAttribute('xlink:role')},
    
  2323.   {name: 'xlink:show', read: getAttribute('xlink:show')},
    
  2324.   {name: 'xlink:title', read: getAttribute('xlink:title')},
    
  2325.   {name: 'xlink:type', read: getAttribute('xlink:type')},
    
  2326.   {name: 'xlinkActuate', read: getAttribute('xlink:actuate')},
    
  2327.   {name: 'XlinkActuate', read: getAttribute('Xlink:actuate')},
    
  2328.   {name: 'xlinkArcrole', read: getAttribute('xlink:arcrole')},
    
  2329.   {name: 'xlinkHref', read: getAttribute('xlink:href')},
    
  2330.   {name: 'xlinkRole', read: getAttribute('xlink:role')},
    
  2331.   {name: 'xlinkShow', read: getAttribute('xlink:show')},
    
  2332.   {name: 'xlinkTitle', read: getAttribute('xlink:title')},
    
  2333.   {name: 'xlinkType', read: getAttribute('xlink:type')},
    
  2334.   {name: 'xml:base', read: getAttribute('xml:base')},
    
  2335.   {name: 'xml:lang', read: getAttribute('xml:lang')},
    
  2336.   {name: 'xml:space', read: getAttribute('xml:space')},
    
  2337.   {name: 'xmlBase', read: getAttribute('xml:base')},
    
  2338.   {name: 'xmlLang', read: getAttribute('xml:lang')},
    
  2339.   {name: 'xmlns', read: getProperty('namespaceURI'), tagName: 'svg'},
    
  2340.   {name: 'xmlns:xlink', read: getAttribute('xmlns:xlink')},
    
  2341.   {name: 'xmlnsXlink', read: getAttribute('xmlns:xlink')},
    
  2342.   {name: 'xmlSpace', read: getAttribute('xml:space')},
    
  2343.   {
    
  2344.     name: 'y',
    
  2345.     read: getSVGAttribute('y'),
    
  2346.     containerTagName: 'svg',
    
  2347.     tagName: 'altGlyph',
    
  2348.   },
    
  2349.   {
    
  2350.     name: 'y1',
    
  2351.     read: getSVGProperty('y1'),
    
  2352.     containerTagName: 'svg',
    
  2353.     tagName: 'line',
    
  2354.   },
    
  2355.   {
    
  2356.     name: 'y2',
    
  2357.     read: getSVGProperty('y2'),
    
  2358.     containerTagName: 'svg',
    
  2359.     tagName: 'line',
    
  2360.   },
    
  2361.   {
    
  2362.     name: 'yChannelSelector',
    
  2363.     read: getSVGProperty('yChannelSelector'),
    
  2364.     containerTagName: 'svg',
    
  2365.     tagName: 'feDisplacementMap',
    
  2366.     overrideStringValue: 'B',
    
  2367.   },
    
  2368.   {
    
  2369.     name: 'z',
    
  2370.     read: getSVGProperty('z'),
    
  2371.     containerTagName: 'svg',
    
  2372.     tagName: 'fePointLight',
    
  2373.   },
    
  2374.   {name: 'zoomAndPan', read: getSVGProperty('zoomAndPan'), tagName: 'svg'},
    
  2375. ];
    
  2376. 
    
  2377. attributes.forEach(attr => {
    
  2378.   attr.read = attr.read || getProperty(attr.name);
    
  2379. });
    
  2380. 
    
  2381. export default attributes;