text: /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId])
  /******/ 			return installedModules[moduleId].exports;
  
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			exports: {},
  /******/ 			id: moduleId,
  /******/ 			loaded: false
  /******/ 		};
  
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  
  /******/ 		// Flag the module as loaded
  /******/ 		module.loaded = true;
  
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  
  
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "";
  
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(0);
  /******/ })
  /************************************************************************/
  /******/ ([
  /* 0 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(global) {var React = __webpack_require__(1);
  	var ReactDOMServer = __webpack_require__(25);
  	var createReactClass = __webpack_require__(17);
  	var PropTypes = __webpack_require__(19);
  
  	global.React = React;
  	global.ReactDOMServer = ReactDOMServer;
  	global.createReactClass = createReactClass;
  	global.PropTypes = PropTypes;
  
  	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
  
  /***/ }),
  /* 1 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {'use strict';
  
  	if (process.env.NODE_ENV === 'production') {
  	  module.exports = __webpack_require__(3);
  	} else {
  	  module.exports = __webpack_require__(5);
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 2 */
  /***/ (function(module, exports) {
  
  	// shim for using process in browser
  	var process = module.exports = {};
  
  	// cached from whatever global is present so that test runners that stub it
  	// don't break things.  But we need to wrap it in a try catch in case it is
  	// wrapped in strict mode code which doesn't define any globals.  It's inside a
  	// function because try/catches deoptimize in certain engines.
  
  	var cachedSetTimeout;
  	var cachedClearTimeout;
  
  	function defaultSetTimout() {
  	    throw new Error('setTimeout has not been defined');
  	}
  	function defaultClearTimeout () {
  	    throw new Error('clearTimeout has not been defined');
  	}
  	(function () {
  	    try {
  	        if (typeof setTimeout === 'function') {
  	            cachedSetTimeout = setTimeout;
  	        } else {
  	            cachedSetTimeout = defaultSetTimout;
  	        }
  	    } catch (e) {
  	        cachedSetTimeout = defaultSetTimout;
  	    }
  	    try {
  	        if (typeof clearTimeout === 'function') {
  	            cachedClearTimeout = clearTimeout;
  	        } else {
  	            cachedClearTimeout = defaultClearTimeout;
  	        }
  	    } catch (e) {
  	        cachedClearTimeout = defaultClearTimeout;
  	    }
  	} ())
  	function runTimeout(fun) {
  	    if (cachedSetTimeout === setTimeout) {
  	        //normal enviroments in sane situations
  	        return setTimeout(fun, 0);
  	    }
  	    // if setTimeout wasn't available but was latter defined
  	    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
  	        cachedSetTimeout = setTimeout;
  	        return setTimeout(fun, 0);
  	    }
  	    try {
  	        // when when somebody has screwed with setTimeout but no I.E. maddness
  	        return cachedSetTimeout(fun, 0);
  	    } catch(e){
  	        try {
  	            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
  	            return cachedSetTimeout.call(null, fun, 0);
  	        } catch(e){
  	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
  	            return cachedSetTimeout.call(this, fun, 0);
  	        }
  	    }
  
  
  	}
  	function runClearTimeout(marker) {
  	    if (cachedClearTimeout === clearTimeout) {
  	        //normal enviroments in sane situations
  	        return clearTimeout(marker);
  	    }
  	    // if clearTimeout wasn't available but was latter defined
  	    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
  	        cachedClearTimeout = clearTimeout;
  	        return clearTimeout(marker);
  	    }
  	    try {
  	        // when when somebody has screwed with setTimeout but no I.E. maddness
  	        return cachedClearTimeout(marker);
  	    } catch (e){
  	        try {
  	            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
  	            return cachedClearTimeout.call(null, marker);
  	        } catch (e){
  	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
  	            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
  	            return cachedClearTimeout.call(this, marker);
  	        }
  	    }
  
  
  
  	}
  	var queue = [];
  	var draining = false;
  	var currentQueue;
  	var queueIndex = -1;
  
  	function cleanUpNextTick() {
  	    if (!draining || !currentQueue) {
  	        return;
  	    }
  	    draining = false;
  	    if (currentQueue.length) {
  	        queue = currentQueue.concat(queue);
  	    } else {
  	        queueIndex = -1;
  	    }
  	    if (queue.length) {
  	        drainQueue();
  	    }
  	}
  
  	function drainQueue() {
  	    if (draining) {
  	        return;
  	    }
  	    var timeout = runTimeout(cleanUpNextTick);
  	    draining = true;
  
  	    var len = queue.length;
  	    while(len) {
  	        currentQueue = queue;
  	        queue = [];
  	        while (++queueIndex < len) {
  	            if (currentQueue) {
  	                currentQueue[queueIndex].run();
  	            }
  	        }
  	        queueIndex = -1;
  	        len = queue.length;
  	    }
  	    currentQueue = null;
  	    draining = false;
  	    runClearTimeout(timeout);
  	}
  
  	process.nextTick = function (fun) {
  	    var args = new Array(arguments.length - 1);
  	    if (arguments.length > 1) {
  	        for (var i = 1; i < arguments.length; i++) {
  	            args[i - 1] = arguments[i];
  	        }
  	    }
  	    queue.push(new Item(fun, args));
  	    if (queue.length === 1 && !draining) {
  	        runTimeout(drainQueue);
  	    }
  	};
  
  	// v8 likes predictible objects
  	function Item(fun, array) {
  	    this.fun = fun;
  	    this.array = array;
  	}
  	Item.prototype.run = function () {
  	    this.fun.apply(null, this.array);
  	};
  	process.title = 'browser';
  	process.browser = true;
  	process.env = {};
  	process.argv = [];
  	process.version = ''; // empty string to avoid regexp issues
  	process.versions = {};
  
  	function noop() {}
  
  	process.on = noop;
  	process.addListener = noop;
  	process.once = noop;
  	process.off = noop;
  	process.removeListener = noop;
  	process.removeAllListeners = noop;
  	process.emit = noop;
  	process.prependListener = noop;
  	process.prependOnceListener = noop;
  
  	process.listeners = function (name) { return [] }
  
  	process.binding = function (name) {
  	    throw new Error('process.binding is not supported');
  	};
  
  	process.cwd = function () { return '/' };
  	process.chdir = function (dir) {
  	    throw new Error('process.chdir is not supported');
  	};
  	process.umask = function() { return 0; };
  
  
  /***/ }),
  /* 3 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/** @license React v16.14.0
  	 * react.production.min.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';var l=__webpack_require__(4),n="function"===typeof Symbol&&Symbol.for,p=n?Symbol.for("react.element"):60103,q=n?Symbol.for("react.portal"):60106,r=n?Symbol.for("react.fragment"):60107,t=n?Symbol.for("react.strict_mode"):60108,u=n?Symbol.for("react.profiler"):60114,v=n?Symbol.for("react.provider"):60109,w=n?Symbol.for("react.context"):60110,x=n?Symbol.for("react.forward_ref"):60112,y=n?Symbol.for("react.suspense"):60113,z=n?Symbol.for("react.memo"):60115,A=n?Symbol.for("react.lazy"):
  	60116,B="function"===typeof Symbol&&Symbol.iterator;function C(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
  	var D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,"setState")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};
  	function G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};
  	function M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=""+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}
  	function N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return"object"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={"=":"=0",":":"=2"};return"$"+(""+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}
  	function S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}
  	function T(a,b,c,e){var d=typeof a;if("undefined"===d||"boolean"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case "string":case "number":g=!0;break;case "object":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,""===b?"."+U(a,0):b),1;g=0;b=""===b?".":b+":";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||"object"!==typeof a?f=null:(f=B&&a[B]||a["@@iterator"],f="function"===typeof f?f:null),"function"===typeof f)for(a=f.call(a),k=
  	0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if("object"===d)throw c=""+a,Error(C(31,"[object Object]"===c?"object with keys {"+Object.keys(a).join(", ")+"}":c,""));return g}function V(a,b,c){return null==a?0:T(a,"",b,c)}function U(a,b){return"object"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}
  	function aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?"":(""+a.key).replace(P,"$&/")+"/")+c)),e.push(a))}function X(a,b,c,e,d){var g="";null!=c&&(g=(""+c).replace(P,"$&/")+"/");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}
  	var ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};
  	exports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;
  	exports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=""+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,
  	key:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;
  	exports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};
  	exports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version="16.14.0";
  
  
  /***/ }),
  /* 4 */
  /***/ (function(module, exports) {
  
  	/*
  	object-assign
  	(c) Sindre Sorhus
  	@license MIT
  	*/
  
  	'use strict';
  	/* eslint-disable no-unused-vars */
  	var getOwnPropertySymbols = Object.getOwnPropertySymbols;
  	var hasOwnProperty = Object.prototype.hasOwnProperty;
  	var propIsEnumerable = Object.prototype.propertyIsEnumerable;
  
  	function toObject(val) {
  		if (val === null || val === undefined) {
  			throw new TypeError('Object.assign cannot be called with null or undefined');
  		}
  
  		return Object(val);
  	}
  
  	function shouldUseNative() {
  		try {
  			if (!Object.assign) {
  				return false;
  			}
  
  			// Detect buggy property enumeration order in older V8 versions.
  
  			// https://bugs.chromium.org/p/v8/issues/detail?id=4118
  			var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
  			test1[5] = 'de';
  			if (Object.getOwnPropertyNames(test1)[0] === '5') {
  				return false;
  			}
  
  			// https://bugs.chromium.org/p/v8/issues/detail?id=3056
  			var test2 = {};
  			for (var i = 0; i < 10; i++) {
  				test2['_' + String.fromCharCode(i)] = i;
  			}
  			var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
  				return test2[n];
  			});
  			if (order2.join('') !== '0123456789') {
  				return false;
  			}
  
  			// https://bugs.chromium.org/p/v8/issues/detail?id=3056
  			var test3 = {};
  			'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
  				test3[letter] = letter;
  			});
  			if (Object.keys(Object.assign({}, test3)).join('') !==
  					'abcdefghijklmnopqrst') {
  				return false;
  			}
  
  			return true;
  		} catch (err) {
  			// We don't expect any of the above to throw, but better to be safe.
  			return false;
  		}
  	}
  
  	module.exports = shouldUseNative() ? Object.assign : function (target, source) {
  		var from;
  		var to = toObject(target);
  		var symbols;
  
  		for (var s = 1; s < arguments.length; s++) {
  			from = Object(arguments[s]);
  
  			for (var key in from) {
  				if (hasOwnProperty.call(from, key)) {
  					to[key] = from[key];
  				}
  			}
  
  			if (getOwnPropertySymbols) {
  				symbols = getOwnPropertySymbols(from);
  				for (var i = 0; i < symbols.length; i++) {
  					if (propIsEnumerable.call(from, symbols[i])) {
  						to[symbols[i]] = from[symbols[i]];
  					}
  				}
  			}
  		}
  
  		return to;
  	};
  
  
  /***/ }),
  /* 5 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/** @license React v16.14.0
  	 * react.development.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  
  
  	if (process.env.NODE_ENV !== "production") {
  	  (function() {
  	'use strict';
  
  	var _assign = __webpack_require__(4);
  	var checkPropTypes = __webpack_require__(6);
  
  	var ReactVersion = '16.14.0';
  
  	// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  	// nor polyfill, then a plain number is used for performance.
  	var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  	var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
  	var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  	var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  	var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  	var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  	var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  	var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  	var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  	var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  	var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  	var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  	var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  	var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  	var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  	var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  	var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
  	var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
  	var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  	var FAUX_ITERATOR_SYMBOL = '@@iterator';
  	function getIteratorFn(maybeIterable) {
  	  if (maybeIterable === null || typeof maybeIterable !== 'object') {
  	    return null;
  	  }
  
  	  var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
  
  	  if (typeof maybeIterator === 'function') {
  	    return maybeIterator;
  	  }
  
  	  return null;
  	}
  
  	/**
  	 * Keeps track of the current dispatcher.
  	 */
  	var ReactCurrentDispatcher = {
  	  /**
  	   * @internal
  	   * @type {ReactComponent}
  	   */
  	  current: null
  	};
  
  	/**
  	 * Keeps track of the current batch's configuration such as how long an update
  	 * should suspend for if it needs to.
  	 */
  	var ReactCurrentBatchConfig = {
  	  suspense: null
  	};
  
  	/**
  	 * Keeps track of the current owner.
  	 *
  	 * The current owner is the component who should own any components that are
  	 * currently being constructed.
  	 */
  	var ReactCurrentOwner = {
  	  /**
  	   * @internal
  	   * @type {ReactComponent}
  	   */
  	  current: null
  	};
  
  	var BEFORE_SLASH_RE = /^(.*)[\\\/]/;
  	function describeComponentFrame (name, source, ownerName) {
  	  var sourceInfo = '';
  
  	  if (source) {
  	    var path = source.fileName;
  	    var fileName = path.replace(BEFORE_SLASH_RE, '');
  
  	    {
  	      // In DEV, include code for a common special case:
  	      // prefer "folder/index.js" instead of just "index.js".
  	      if (/^index\./.test(fileName)) {
  	        var match = path.match(BEFORE_SLASH_RE);
  
  	        if (match) {
  	          var pathBeforeSlash = match[1];
  
  	          if (pathBeforeSlash) {
  	            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
  	            fileName = folderName + '/' + fileName;
  	          }
  	        }
  	      }
  	    }
  
  	    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';
  	  } else if (ownerName) {
  	    sourceInfo = ' (created by ' + ownerName + ')';
  	  }
  
  	  return '\n    in ' + (name || 'Unknown') + sourceInfo;
  	}
  
  	var Resolved = 1;
  	function refineResolvedLazyComponent(lazyComponent) {
  	  return lazyComponent._status === Resolved ? lazyComponent._result : null;
  	}
  
  	function getWrappedName(outerType, innerType, wrapperName) {
  	  var functionName = innerType.displayName || innerType.name || '';
  	  return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
  	}
  
  	function getComponentName(type) {
  	  if (type == null) {
  	    // Host root, text node or just invalid type.
  	    return null;
  	  }
  
  	  {
  	    if (typeof type.tag === 'number') {
  	      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
  	    }
  	  }
  
  	  if (typeof type === 'function') {
  	    return type.displayName || type.name || null;
  	  }
  
  	  if (typeof type === 'string') {
  	    return type;
  	  }
  
  	  switch (type) {
  	    case REACT_FRAGMENT_TYPE:
  	      return 'Fragment';
  
  	    case REACT_PORTAL_TYPE:
  	      return 'Portal';
  
  	    case REACT_PROFILER_TYPE:
  	      return "Profiler";
  
  	    case REACT_STRICT_MODE_TYPE:
  	      return 'StrictMode';
  
  	    case REACT_SUSPENSE_TYPE:
  	      return 'Suspense';
  
  	    case REACT_SUSPENSE_LIST_TYPE:
  	      return 'SuspenseList';
  	  }
  
  	  if (typeof type === 'object') {
  	    switch (type.$$typeof) {
  	      case REACT_CONTEXT_TYPE:
  	        return 'Context.Consumer';
  
  	      case REACT_PROVIDER_TYPE:
  	        return 'Context.Provider';
  
  	      case REACT_FORWARD_REF_TYPE:
  	        return getWrappedName(type, type.render, 'ForwardRef');
  
  	      case REACT_MEMO_TYPE:
  	        return getComponentName(type.type);
  
  	      case REACT_BLOCK_TYPE:
  	        return getComponentName(type.render);
  
  	      case REACT_LAZY_TYPE:
  	        {
  	          var thenable = type;
  	          var resolvedThenable = refineResolvedLazyComponent(thenable);
  
  	          if (resolvedThenable) {
  	            return getComponentName(resolvedThenable);
  	          }
  
  	          break;
  	        }
  	    }
  	  }
  
  	  return null;
  	}
  
  	var ReactDebugCurrentFrame = {};
  	var currentlyValidatingElement = null;
  	function setCurrentlyValidatingElement(element) {
  	  {
  	    currentlyValidatingElement = element;
  	  }
  	}
  
  	{
  	  // Stack implementation injected by the current renderer.
  	  ReactDebugCurrentFrame.getCurrentStack = null;
  
  	  ReactDebugCurrentFrame.getStackAddendum = function () {
  	    var stack = ''; // Add an extra top frame while an element is being validated
  
  	    if (currentlyValidatingElement) {
  	      var name = getComponentName(currentlyValidatingElement.type);
  	      var owner = currentlyValidatingElement._owner;
  	      stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));
  	    } // Delegate to the injected renderer-specific implementation
  
  
  	    var impl = ReactDebugCurrentFrame.getCurrentStack;
  
  	    if (impl) {
  	      stack += impl() || '';
  	    }
  
  	    return stack;
  	  };
  	}
  
  	/**
  	 * Used by act() to track whether you're inside an act() scope.
  	 */
  	var IsSomeRendererActing = {
  	  current: false
  	};
  
  	var ReactSharedInternals = {
  	  ReactCurrentDispatcher: ReactCurrentDispatcher,
  	  ReactCurrentBatchConfig: ReactCurrentBatchConfig,
  	  ReactCurrentOwner: ReactCurrentOwner,
  	  IsSomeRendererActing: IsSomeRendererActing,
  	  // Used by renderers to avoid bundling object-assign twice in UMD bundles:
  	  assign: _assign
  	};
  
  	{
  	  _assign(ReactSharedInternals, {
  	    // These should not be included in production.
  	    ReactDebugCurrentFrame: ReactDebugCurrentFrame,
  	    // Shim for React DOM 16.0.0 which still destructured (but not used) this.
  	    // TODO: remove in React 17.0.
  	    ReactComponentTreeHook: {}
  	  });
  	}
  
  	// by calls to these methods by a Babel plugin.
  	//
  	// In PROD (or in packages without access to React internals),
  	// they are left as they are instead.
  
  	function warn(format) {
  	  {
  	    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  	      args[_key - 1] = arguments[_key];
  	    }
  
  	    printWarning('warn', format, args);
  	  }
  	}
  	function error(format) {
  	  {
  	    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  	      args[_key2 - 1] = arguments[_key2];
  	    }
  
  	    printWarning('error', format, args);
  	  }
  	}
  
  	function printWarning(level, format, args) {
  	  // When changing this logic, you might want to also
  	  // update consoleWithStackDev.www.js as well.
  	  {
  	    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\n    in') === 0;
  
  	    if (!hasExistingStack) {
  	      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
  	      var stack = ReactDebugCurrentFrame.getStackAddendum();
  
  	      if (stack !== '') {
  	        format += '%s';
  	        args = args.concat([stack]);
  	      }
  	    }
  
  	    var argsWithFormat = args.map(function (item) {
  	      return '' + item;
  	    }); // Careful: RN currently depends on this prefix
  
  	    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
  	    // breaks IE9: https://github.com/facebook/react/issues/13610
  	    // eslint-disable-next-line react-internal/no-production-logging
  
  	    Function.prototype.apply.call(console[level], console, argsWithFormat);
  
  	    try {
  	      // --- Welcome to debugging React ---
  	      // This error was thrown as a convenience so that you can use this stack
  	      // to find the callsite that caused this warning to fire.
  	      var argIndex = 0;
  	      var message = 'Warning: ' + format.replace(/%s/g, function () {
  	        return args[argIndex++];
  	      });
  	      throw new Error(message);
  	    } catch (x) {}
  	  }
  	}
  
  	var didWarnStateUpdateForUnmountedComponent = {};
  
  	function warnNoop(publicInstance, callerName) {
  	  {
  	    var _constructor = publicInstance.constructor;
  	    var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
  	    var warningKey = componentName + "." + callerName;
  
  	    if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
  	      return;
  	    }
  
  	    error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
  
  	    didWarnStateUpdateForUnmountedComponent[warningKey] = true;
  	  }
  	}
  	/**
  	 * This is the abstract API for an update queue.
  	 */
  
  
  	var ReactNoopUpdateQueue = {
  	  /**
  	   * Checks whether or not this composite component is mounted.
  	   * @param {ReactClass} publicInstance The instance we want to test.
  	   * @return {boolean} True if mounted, false otherwise.
  	   * @protected
  	   * @final
  	   */
  	  isMounted: function (publicInstance) {
  	    return false;
  	  },
  
  	  /**
  	   * Forces an update. This should only be invoked when it is known with
  	   * certainty that we are **not** in a DOM transaction.
  	   *
  	   * You may want to call this when you know that some deeper aspect of the
  	   * component's state has changed but `setState` was not called.
  	   *
  	   * This will not invoke `shouldComponentUpdate`, but it will invoke
  	   * `componentWillUpdate` and `componentDidUpdate`.
  	   *
  	   * @param {ReactClass} publicInstance The instance that should rerender.
  	   * @param {?function} callback Called after component is updated.
  	   * @param {?string} callerName name of the calling function in the public API.
  	   * @internal
  	   */
  	  enqueueForceUpdate: function (publicInstance, callback, callerName) {
  	    warnNoop(publicInstance, 'forceUpdate');
  	  },
  
  	  /**
  	   * Replaces all of the state. Always use this or `setState` to mutate state.
  	   * You should treat `this.state` as immutable.
  	   *
  	   * There is no guarantee that `this.state` will be immediately updated, so
  	   * accessing `this.state` after calling this method may return the old value.
  	   *
  	   * @param {ReactClass} publicInstance The instance that should rerender.
  	   * @param {object} completeState Next state.
  	   * @param {?function} callback Called after component is updated.
  	   * @param {?string} callerName name of the calling function in the public API.
  	   * @internal
  	   */
  	  enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
  	    warnNoop(publicInstance, 'replaceState');
  	  },
  
  	  /**
  	   * Sets a subset of the state. This only exists because _pendingState is
  	   * internal. This provides a merging strategy that is not available to deep
  	   * properties which is confusing. TODO: Expose pendingState or don't use it
  	   * during the merge.
  	   *
  	   * @param {ReactClass} publicInstance The instance that should rerender.
  	   * @param {object} partialState Next partial state to be merged with state.
  	   * @param {?function} callback Called after component is updated.
  	   * @param {?string} Name of the calling function in the public API.
  	   * @internal
  	   */
  	  enqueueSetState: function (publicInstance, partialState, callback, callerName) {
  	    warnNoop(publicInstance, 'setState');
  	  }
  	};
  
  	var emptyObject = {};
  
  	{
  	  Object.freeze(emptyObject);
  	}
  	/**
  	 * Base class helpers for the updating state of a component.
  	 */
  
  
  	function Component(props, context, updater) {
  	  this.props = props;
  	  this.context = context; // If a component has string refs, we will assign a different object later.
  
  	  this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
  	  // renderer.
  
  	  this.updater = updater || ReactNoopUpdateQueue;
  	}
  
  	Component.prototype.isReactComponent = {};
  	/**
  	 * Sets a subset of the state. Always use this to mutate
  	 * state. You should treat `this.state` as immutable.
  	 *
  	 * There is no guarantee that `this.state` will be immediately updated, so
  	 * accessing `this.state` after calling this method may return the old value.
  	 *
  	 * There is no guarantee that calls to `setState` will run synchronously,
  	 * as they may eventually be batched together.  You can provide an optional
  	 * callback that will be executed when the call to setState is actually
  	 * completed.
  	 *
  	 * When a function is provided to setState, it will be called at some point in
  	 * the future (not synchronously). It will be called with the up to date
  	 * component arguments (state, props, context). These values can be different
  	 * from this.* because your function may be called after receiveProps but before
  	 * shouldComponentUpdate, and this new state, props, and context will not yet be
  	 * assigned to this.
  	 *
  	 * @param {object|function} partialState Next partial state or function to
  	 *        produce next partial state to be merged with current state.
  	 * @param {?function} callback Called after state is updated.
  	 * @final
  	 * @protected
  	 */
  
  	Component.prototype.setState = function (partialState, callback) {
  	  if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {
  	    {
  	      throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." );
  	    }
  	  }
  
  	  this.updater.enqueueSetState(this, partialState, callback, 'setState');
  	};
  	/**
  	 * Forces an update. This should only be invoked when it is known with
  	 * certainty that we are **not** in a DOM transaction.
  	 *
  	 * You may want to call this when you know that some deeper aspect of the
  	 * component's state has changed but `setState` was not called.
  	 *
  	 * This will not invoke `shouldComponentUpdate`, but it will invoke
  	 * `componentWillUpdate` and `componentDidUpdate`.
  	 *
  	 * @param {?function} callback Called after update is complete.
  	 * @final
  	 * @protected
  	 */
  
  
  	Component.prototype.forceUpdate = function (callback) {
  	  this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
  	};
  	/**
  	 * Deprecated APIs. These APIs used to exist on classic React classes but since
  	 * we would like to deprecate them, we're not going to move them over to this
  	 * modern base class. Instead, we define a getter that warns if it's accessed.
  	 */
  
  
  	{
  	  var deprecatedAPIs = {
  	    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
  	    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
  	  };
  
  	  var defineDeprecationWarning = function (methodName, info) {
  	    Object.defineProperty(Component.prototype, methodName, {
  	      get: function () {
  	        warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
  
  	        return undefined;
  	      }
  	    });
  	  };
  
  	  for (var fnName in deprecatedAPIs) {
  	    if (deprecatedAPIs.hasOwnProperty(fnName)) {
  	      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
  	    }
  	  }
  	}
  
  	function ComponentDummy() {}
  
  	ComponentDummy.prototype = Component.prototype;
  	/**
  	 * Convenience component with default shallow equality check for sCU.
  	 */
  
  	function PureComponent(props, context, updater) {
  	  this.props = props;
  	  this.context = context; // If a component has string refs, we will assign a different object later.
  
  	  this.refs = emptyObject;
  	  this.updater = updater || ReactNoopUpdateQueue;
  	}
  
  	var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
  	pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
  
  	_assign(pureComponentPrototype, Component.prototype);
  
  	pureComponentPrototype.isPureReactComponent = true;
  
  	// an immutable object with a single mutable value
  	function createRef() {
  	  var refObject = {
  	    current: null
  	  };
  
  	  {
  	    Object.seal(refObject);
  	  }
  
  	  return refObject;
  	}
  
  	var hasOwnProperty = Object.prototype.hasOwnProperty;
  	var RESERVED_PROPS = {
  	  key: true,
  	  ref: true,
  	  __self: true,
  	  __source: true
  	};
  	var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
  
  	{
  	  didWarnAboutStringRefs = {};
  	}
  
  	function hasValidRef(config) {
  	  {
  	    if (hasOwnProperty.call(config, 'ref')) {
  	      var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
  
  	      if (getter && getter.isReactWarning) {
  	        return false;
  	      }
  	    }
  	  }
  
  	  return config.ref !== undefined;
  	}
  
  	function hasValidKey(config) {
  	  {
  	    if (hasOwnProperty.call(config, 'key')) {
  	      var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
  
  	      if (getter && getter.isReactWarning) {
  	        return false;
  	      }
  	    }
  	  }
  
  	  return config.key !== undefined;
  	}
  
  	function defineKeyPropWarningGetter(props, displayName) {
  	  var warnAboutAccessingKey = function () {
  	    {
  	      if (!specialPropKeyWarningShown) {
  	        specialPropKeyWarningShown = true;
  
  	        error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
  	      }
  	    }
  	  };
  
  	  warnAboutAccessingKey.isReactWarning = true;
  	  Object.defineProperty(props, 'key', {
  	    get: warnAboutAccessingKey,
  	    configurable: true
  	  });
  	}
  
  	function defineRefPropWarningGetter(props, displayName) {
  	  var warnAboutAccessingRef = function () {
  	    {
  	      if (!specialPropRefWarningShown) {
  	        specialPropRefWarningShown = true;
  
  	        error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);
  	      }
  	    }
  	  };
  
  	  warnAboutAccessingRef.isReactWarning = true;
  	  Object.defineProperty(props, 'ref', {
  	    get: warnAboutAccessingRef,
  	    configurable: true
  	  });
  	}
  
  	function warnIfStringRefCannotBeAutoConverted(config) {
  	  {
  	    if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
  	      var componentName = getComponentName(ReactCurrentOwner.current.type);
  
  	      if (!didWarnAboutStringRefs[componentName]) {
  	        error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);
  
  	        didWarnAboutStringRefs[componentName] = true;
  	      }
  	    }
  	  }
  	}
  	/**
  	 * Factory method to create a new React element. This no longer adheres to
  	 * the class pattern, so do not use new to call it. Also, instanceof check
  	 * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
  	 * if something is a React Element.
  	 *
  	 * @param {*} type
  	 * @param {*} props
  	 * @param {*} key
  	 * @param {string|object} ref
  	 * @param {*} owner
  	 * @param {*} self A *temporary* helper to detect places where `this` is
  	 * different from the `owner` when React.createElement is called, so that we
  	 * can warn. We want to get rid of owner and replace string `ref`s with arrow
  	 * functions, and as long as `this` and owner are the same, there will be no
  	 * change in behavior.
  	 * @param {*} source An annotation object (added by a transpiler or otherwise)
  	 * indicating filename, line number, and/or other information.
  	 * @internal
  	 */
  
  
  	var ReactElement = function (type, key, ref, self, source, owner, props) {
  	  var element = {
  	    // This tag allows us to uniquely identify this as a React Element
  	    $$typeof: REACT_ELEMENT_TYPE,
  	    // Built-in properties that belong on the element
  	    type: type,
  	    key: key,
  	    ref: ref,
  	    props: props,
  	    // Record the component responsible for creating this element.
  	    _owner: owner
  	  };
  
  	  {
  	    // The validation flag is currently mutative. We put it on
  	    // an external backing store so that we can freeze the whole object.
  	    // This can be replaced with a WeakMap once they are implemented in
  	    // commonly used development environments.
  	    element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
  	    // the validation flag non-enumerable (where possible, which should
  	    // include every environment we run tests in), so the test framework
  	    // ignores it.
  
  	    Object.defineProperty(element._store, 'validated', {
  	      configurable: false,
  	      enumerable: false,
  	      writable: true,
  	      value: false
  	    }); // self and source are DEV only properties.
  
  	    Object.defineProperty(element, '_self', {
  	      configurable: false,
  	      enumerable: false,
  	      writable: false,
  	      value: self
  	    }); // Two elements created in two different places should be considered
  	    // equal for testing purposes and therefore we hide it from enumeration.
  
  	    Object.defineProperty(element, '_source', {
  	      configurable: false,
  	      enumerable: false,
  	      writable: false,
  	      value: source
  	    });
  
  	    if (Object.freeze) {
  	      Object.freeze(element.props);
  	      Object.freeze(element);
  	    }
  	  }
  
  	  return element;
  	};
  	/**
  	 * Create and return a new ReactElement of the given type.
  	 * See https://reactjs.org/docs/react-api.html#createelement
  	 */
  
  	function createElement(type, config, children) {
  	  var propName; // Reserved names are extracted
  
  	  var props = {};
  	  var key = null;
  	  var ref = null;
  	  var self = null;
  	  var source = null;
  
  	  if (config != null) {
  	    if (hasValidRef(config)) {
  	      ref = config.ref;
  
  	      {
  	        warnIfStringRefCannotBeAutoConverted(config);
  	      }
  	    }
  
  	    if (hasValidKey(config)) {
  	      key = '' + config.key;
  	    }
  
  	    self = config.__self === undefined ? null : config.__self;
  	    source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
  
  	    for (propName in config) {
  	      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  	        props[propName] = config[propName];
  	      }
  	    }
  	  } // Children can be more than one argument, and those are transferred onto
  	  // the newly allocated props object.
  
  
  	  var childrenLength = arguments.length - 2;
  
  	  if (childrenLength === 1) {
  	    props.children = children;
  	  } else if (childrenLength > 1) {
  	    var childArray = Array(childrenLength);
  
  	    for (var i = 0; i < childrenLength; i++) {
  	      childArray[i] = arguments[i + 2];
  	    }
  
  	    {
  	      if (Object.freeze) {
  	        Object.freeze(childArray);
  	      }
  	    }
  
  	    props.children = childArray;
  	  } // Resolve default props
  
  
  	  if (type && type.defaultProps) {
  	    var defaultProps = type.defaultProps;
  
  	    for (propName in defaultProps) {
  	      if (props[propName] === undefined) {
  	        props[propName] = defaultProps[propName];
  	      }
  	    }
  	  }
  
  	  {
  	    if (key || ref) {
  	      var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
  
  	      if (key) {
  	        defineKeyPropWarningGetter(props, displayName);
  	      }
  
  	      if (ref) {
  	        defineRefPropWarningGetter(props, displayName);
  	      }
  	    }
  	  }
  
  	  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
  	}
  	function cloneAndReplaceKey(oldElement, newKey) {
  	  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
  	  return newElement;
  	}
  	/**
  	 * Clone and return a new ReactElement using element as the starting point.
  	 * See https://reactjs.org/docs/react-api.html#cloneelement
  	 */
  
  	function cloneElement(element, config, children) {
  	  if (!!(element === null || element === undefined)) {
  	    {
  	      throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." );
  	    }
  	  }
  
  	  var propName; // Original props are copied
  
  	  var props = _assign({}, element.props); // Reserved names are extracted
  
  
  	  var key = element.key;
  	  var ref = element.ref; // Self is preserved since the owner is preserved.
  
  	  var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
  	  // transpiler, and the original source is probably a better indicator of the
  	  // true owner.
  
  	  var source = element._source; // Owner will be preserved, unless ref is overridden
  
  	  var owner = element._owner;
  
  	  if (config != null) {
  	    if (hasValidRef(config)) {
  	      // Silently steal the ref from the parent.
  	      ref = config.ref;
  	      owner = ReactCurrentOwner.current;
  	    }
  
  	    if (hasValidKey(config)) {
  	      key = '' + config.key;
  	    } // Remaining properties override existing props
  
  
  	    var defaultProps;
  
  	    if (element.type && element.type.defaultProps) {
  	      defaultProps = element.type.defaultProps;
  	    }
  
  	    for (propName in config) {
  	      if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
  	        if (config[propName] === undefined && defaultProps !== undefined) {
  	          // Resolve default props
  	          props[propName] = defaultProps[propName];
  	        } else {
  	          props[propName] = config[propName];
  	        }
  	      }
  	    }
  	  } // Children can be more than one argument, and those are transferred onto
  	  // the newly allocated props object.
  
  
  	  var childrenLength = arguments.length - 2;
  
  	  if (childrenLength === 1) {
  	    props.children = children;
  	  } else if (childrenLength > 1) {
  	    var childArray = Array(childrenLength);
  
  	    for (var i = 0; i < childrenLength; i++) {
  	      childArray[i] = arguments[i + 2];
  	    }
  
  	    props.children = childArray;
  	  }
  
  	  return ReactElement(element.type, key, ref, self, source, owner, props);
  	}
  	/**
  	 * Verifies the object is a ReactElement.
  	 * See https://reactjs.org/docs/react-api.html#isvalidelement
  	 * @param {?object} object
  	 * @return {boolean} True if `object` is a ReactElement.
  	 * @final
  	 */
  
  	function isValidElement(object) {
  	  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  	}
  
  	var SEPARATOR = '.';
  	var SUBSEPARATOR = ':';
  	/**
  	 * Escape and wrap key so it is safe to use as a reactid
  	 *
  	 * @param {string} key to be escaped.
  	 * @return {string} the escaped key.
  	 */
  
  	function escape(key) {
  	  var escapeRegex = /[=:]/g;
  	  var escaperLookup = {
  	    '=': '=0',
  	    ':': '=2'
  	  };
  	  var escapedString = ('' + key).replace(escapeRegex, function (match) {
  	    return escaperLookup[match];
  	  });
  	  return '$' + escapedString;
  	}
  	/**
  	 * TODO: Test that a single child and an array with one item have the same key
  	 * pattern.
  	 */
  
  
  	var didWarnAboutMaps = false;
  	var userProvidedKeyEscapeRegex = /\/+/g;
  
  	function escapeUserProvidedKey(text) {
  	  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');
  	}
  
  	var POOL_SIZE = 10;
  	var traverseContextPool = [];
  
  	function getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {
  	  if (traverseContextPool.length) {
  	    var traverseContext = traverseContextPool.pop();
  	    traverseContext.result = mapResult;
  	    traverseContext.keyPrefix = keyPrefix;
  	    traverseContext.func = mapFunction;
  	    traverseContext.context = mapContext;
  	    traverseContext.count = 0;
  	    return traverseContext;
  	  } else {
  	    return {
  	      result: mapResult,
  	      keyPrefix: keyPrefix,
  	      func: mapFunction,
  	      context: mapContext,
  	      count: 0
  	    };
  	  }
  	}
  
  	function releaseTraverseContext(traverseContext) {
  	  traverseContext.result = null;
  	  traverseContext.keyPrefix = null;
  	  traverseContext.func = null;
  	  traverseContext.context = null;
  	  traverseContext.count = 0;
  
  	  if (traverseContextPool.length < POOL_SIZE) {
  	    traverseContextPool.push(traverseContext);
  	  }
  	}
  	/**
  	 * @param {?*} children Children tree container.
  	 * @param {!string} nameSoFar Name of the key path so far.
  	 * @param {!function} callback Callback to invoke with each child found.
  	 * @param {?*} traverseContext Used to pass information throughout the traversal
  	 * process.
  	 * @return {!number} The number of children in this subtree.
  	 */
  
  
  	function traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {
  	  var type = typeof children;
  
  	  if (type === 'undefined' || type === 'boolean') {
  	    // All of the above are perceived as null.
  	    children = null;
  	  }
  
  	  var invokeCallback = false;
  
  	  if (children === null) {
  	    invokeCallback = true;
  	  } else {
  	    switch (type) {
  	      case 'string':
  	      case 'number':
  	        invokeCallback = true;
  	        break;
  
  	      case 'object':
  	        switch (children.$$typeof) {
  	          case REACT_ELEMENT_TYPE:
  	          case REACT_PORTAL_TYPE:
  	            invokeCallback = true;
  	        }
  
  	    }
  	  }
  
  	  if (invokeCallback) {
  	    callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array
  	    // so that it's consistent if the number of children grows.
  	    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);
  	    return 1;
  	  }
  
  	  var child;
  	  var nextName;
  	  var subtreeCount = 0; // Count of children found in the current subtree.
  
  	  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
  
  	  if (Array.isArray(children)) {
  	    for (var i = 0; i < children.length; i++) {
  	      child = children[i];
  	      nextName = nextNamePrefix + getComponentKey(child, i);
  	      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  	    }
  	  } else {
  	    var iteratorFn = getIteratorFn(children);
  
  	    if (typeof iteratorFn === 'function') {
  
  	      {
  	        // Warn about using Maps as children
  	        if (iteratorFn === children.entries) {
  	          if (!didWarnAboutMaps) {
  	            warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');
  	          }
  
  	          didWarnAboutMaps = true;
  	        }
  	      }
  
  	      var iterator = iteratorFn.call(children);
  	      var step;
  	      var ii = 0;
  
  	      while (!(step = iterator.next()).done) {
  	        child = step.value;
  	        nextName = nextNamePrefix + getComponentKey(child, ii++);
  	        subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);
  	      }
  	    } else if (type === 'object') {
  	      var addendum = '';
  
  	      {
  	        addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();
  	      }
  
  	      var childrenString = '' + children;
  
  	      {
  	        {
  	          throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + ")." + addendum );
  	        }
  	      }
  	    }
  	  }
  
  	  return subtreeCount;
  	}
  	/**
  	 * Traverses children that are typically specified as `props.children`, but
  	 * might also be specified through attributes:
  	 *
  	 * - `traverseAllChildren(this.props.children, ...)`
  	 * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
  	 *
  	 * The `traverseContext` is an optional argument that is passed through the
  	 * entire traversal. It can be used to store accumulations or anything else that
  	 * the callback might find relevant.
  	 *
  	 * @param {?*} children Children tree object.
  	 * @param {!function} callback To invoke upon traversing each child.
  	 * @param {?*} traverseContext Context for traversal.
  	 * @return {!number} The number of children in this subtree.
  	 */
  
  
  	function traverseAllChildren(children, callback, traverseContext) {
  	  if (children == null) {
  	    return 0;
  	  }
  
  	  return traverseAllChildrenImpl(children, '', callback, traverseContext);
  	}
  	/**
  	 * Generate a key string that identifies a component within a set.
  	 *
  	 * @param {*} component A component that could contain a manual key.
  	 * @param {number} index Index that is used if a manual key is not provided.
  	 * @return {string}
  	 */
  
  
  	function getComponentKey(component, index) {
  	  // Do some typechecking here since we call this blindly. We want to ensure
  	  // that we don't block potential future ES APIs.
  	  if (typeof component === 'object' && component !== null && component.key != null) {
  	    // Explicit key
  	    return escape(component.key);
  	  } // Implicit key determined by the index in the set
  
  
  	  return index.toString(36);
  	}
  
  	function forEachSingleChild(bookKeeping, child, name) {
  	  var func = bookKeeping.func,
  	      context = bookKeeping.context;
  	  func.call(context, child, bookKeeping.count++);
  	}
  	/**
  	 * Iterates through children that are typically specified as `props.children`.
  	 *
  	 * See https://reactjs.org/docs/react-api.html#reactchildrenforeach
  	 *
  	 * The provided forEachFunc(child, index) will be called for each
  	 * leaf child.
  	 *
  	 * @param {?*} children Children tree container.
  	 * @param {function(*, int)} forEachFunc
  	 * @param {*} forEachContext Context for forEachContext.
  	 */
  
  
  	function forEachChildren(children, forEachFunc, forEachContext) {
  	  if (children == null) {
  	    return children;
  	  }
  
  	  var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);
  	  traverseAllChildren(children, forEachSingleChild, traverseContext);
  	  releaseTraverseContext(traverseContext);
  	}
  
  	function mapSingleChildIntoContext(bookKeeping, child, childKey) {
  	  var result = bookKeeping.result,
  	      keyPrefix = bookKeeping.keyPrefix,
  	      func = bookKeeping.func,
  	      context = bookKeeping.context;
  	  var mappedChild = func.call(context, child, bookKeeping.count++);
  
  	  if (Array.isArray(mappedChild)) {
  	    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {
  	      return c;
  	    });
  	  } else if (mappedChild != null) {
  	    if (isValidElement(mappedChild)) {
  	      mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
  	      // traverseAllChildren used to do for objects as children
  	      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);
  	    }
  
  	    result.push(mappedChild);
  	  }
  	}
  
  	function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {
  	  var escapedPrefix = '';
  
  	  if (prefix != null) {
  	    escapedPrefix = escapeUserProvidedKey(prefix) + '/';
  	  }
  
  	  var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);
  	  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
  	  releaseTraverseContext(traverseContext);
  	}
  	/**
  	 * Maps children that are typically specified as `props.children`.
  	 *
  	 * See https://reactjs.org/docs/react-api.html#reactchildrenmap
  	 *
  	 * The provided mapFunction(child, key, index) will be called for each
  	 * leaf child.
  	 *
  	 * @param {?*} children Children tree container.
  	 * @param {function(*, int)} func The map function.
  	 * @param {*} context Context for mapFunction.
  	 * @return {object} Object containing the ordered map of results.
  	 */
  
  
  	function mapChildren(children, func, context) {
  	  if (children == null) {
  	    return children;
  	  }
  
  	  var result = [];
  	  mapIntoWithKeyPrefixInternal(children, result, null, func, context);
  	  return result;
  	}
  	/**
  	 * Count the number of children that are typically specified as
  	 * `props.children`.
  	 *
  	 * See https://reactjs.org/docs/react-api.html#reactchildrencount
  	 *
  	 * @param {?*} children Children tree container.
  	 * @return {number} The number of children.
  	 */
  
  
  	function countChildren(children) {
  	  return traverseAllChildren(children, function () {
  	    return null;
  	  }, null);
  	}
  	/**
  	 * Flatten a children object (typically specified as `props.children`) and
  	 * return an array with appropriately re-keyed children.
  	 *
  	 * See https://reactjs.org/docs/react-api.html#reactchildrentoarray
  	 */
  
  
  	function toArray(children) {
  	  var result = [];
  	  mapIntoWithKeyPrefixInternal(children, result, null, function (child) {
  	    return child;
  	  });
  	  return result;
  	}
  	/**
  	 * Returns the first child in a collection of children and verifies that there
  	 * is only one child in the collection.
  	 *
  	 * See https://reactjs.org/docs/react-api.html#reactchildrenonly
  	 *
  	 * The current implementation of this function assumes that a single child gets
  	 * passed without a wrapper, but the purpose of this helper function is to
  	 * abstract away the particular structure of children.
  	 *
  	 * @param {?object} children Child collection structure.
  	 * @return {ReactElement} The first and only `ReactElement` contained in the
  	 * structure.
  	 */
  
  
  	function onlyChild(children) {
  	  if (!isValidElement(children)) {
  	    {
  	      throw Error( "React.Children.only expected to receive a single React element child." );
  	    }
  	  }
  
  	  return children;
  	}
  
  	function createContext(defaultValue, calculateChangedBits) {
  	  if (calculateChangedBits === undefined) {
  	    calculateChangedBits = null;
  	  } else {
  	    {
  	      if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {
  	        error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);
  	      }
  	    }
  	  }
  
  	  var context = {
  	    $$typeof: REACT_CONTEXT_TYPE,
  	    _calculateChangedBits: calculateChangedBits,
  	    // As a workaround to support multiple concurrent renderers, we categorize
  	    // some renderers as primary and others as secondary. We only expect
  	    // there to be two concurrent renderers at most: React Native (primary) and
  	    // Fabric (secondary); React DOM (primary) and React ART (secondary).
  	    // Secondary renderers store their context values on separate fields.
  	    _currentValue: defaultValue,
  	    _currentValue2: defaultValue,
  	    // Used to track how many concurrent renderers this context currently
  	    // supports within in a single renderer. Such as parallel server rendering.
  	    _threadCount: 0,
  	    // These are circular
  	    Provider: null,
  	    Consumer: null
  	  };
  	  context.Provider = {
  	    $$typeof: REACT_PROVIDER_TYPE,
  	    _context: context
  	  };
  	  var hasWarnedAboutUsingNestedContextConsumers = false;
  	  var hasWarnedAboutUsingConsumerProvider = false;
  
  	  {
  	    // A separate object, but proxies back to the original context object for
  	    // backwards compatibility. It has a different $$typeof, so we can properly
  	    // warn for the incorrect usage of Context as a Consumer.
  	    var Consumer = {
  	      $$typeof: REACT_CONTEXT_TYPE,
  	      _context: context,
  	      _calculateChangedBits: context._calculateChangedBits
  	    }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
  
  	    Object.defineProperties(Consumer, {
  	      Provider: {
  	        get: function () {
  	          if (!hasWarnedAboutUsingConsumerProvider) {
  	            hasWarnedAboutUsingConsumerProvider = true;
  
  	            error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
  	          }
  
  	          return context.Provider;
  	        },
  	        set: function (_Provider) {
  	          context.Provider = _Provider;
  	        }
  	      },
  	      _currentValue: {
  	        get: function () {
  	          return context._currentValue;
  	        },
  	        set: function (_currentValue) {
  	          context._currentValue = _currentValue;
  	        }
  	      },
  	      _currentValue2: {
  	        get: function () {
  	          return context._currentValue2;
  	        },
  	        set: function (_currentValue2) {
  	          context._currentValue2 = _currentValue2;
  	        }
  	      },
  	      _threadCount: {
  	        get: function () {
  	          return context._threadCount;
  	        },
  	        set: function (_threadCount) {
  	          context._threadCount = _threadCount;
  	        }
  	      },
  	      Consumer: {
  	        get: function () {
  	          if (!hasWarnedAboutUsingNestedContextConsumers) {
  	            hasWarnedAboutUsingNestedContextConsumers = true;
  
  	            error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
  	          }
  
  	          return context.Consumer;
  	        }
  	      }
  	    }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
  
  	    context.Consumer = Consumer;
  	  }
  
  	  {
  	    context._currentRenderer = null;
  	    context._currentRenderer2 = null;
  	  }
  
  	  return context;
  	}
  
  	function lazy(ctor) {
  	  var lazyType = {
  	    $$typeof: REACT_LAZY_TYPE,
  	    _ctor: ctor,
  	    // React uses these fields to store the result.
  	    _status: -1,
  	    _result: null
  	  };
  
  	  {
  	    // In production, this would just set it on the object.
  	    var defaultProps;
  	    var propTypes;
  	    Object.defineProperties(lazyType, {
  	      defaultProps: {
  	        configurable: true,
  	        get: function () {
  	          return defaultProps;
  	        },
  	        set: function (newDefaultProps) {
  	          error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
  
  	          defaultProps = newDefaultProps; // Match production behavior more closely:
  
  	          Object.defineProperty(lazyType, 'defaultProps', {
  	            enumerable: true
  	          });
  	        }
  	      },
  	      propTypes: {
  	        configurable: true,
  	        get: function () {
  	          return propTypes;
  	        },
  	        set: function (newPropTypes) {
  	          error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
  
  	          propTypes = newPropTypes; // Match production behavior more closely:
  
  	          Object.defineProperty(lazyType, 'propTypes', {
  	            enumerable: true
  	          });
  	        }
  	      }
  	    });
  	  }
  
  	  return lazyType;
  	}
  
  	function forwardRef(render) {
  	  {
  	    if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
  	      error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
  	    } else if (typeof render !== 'function') {
  	      error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
  	    } else {
  	      if (render.length !== 0 && render.length !== 2) {
  	        error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
  	      }
  	    }
  
  	    if (render != null) {
  	      if (render.defaultProps != null || render.propTypes != null) {
  	        error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
  	      }
  	    }
  	  }
  
  	  return {
  	    $$typeof: REACT_FORWARD_REF_TYPE,
  	    render: render
  	  };
  	}
  
  	function isValidElementType(type) {
  	  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
  	  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
  	}
  
  	function memo(type, compare) {
  	  {
  	    if (!isValidElementType(type)) {
  	      error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
  	    }
  	  }
  
  	  return {
  	    $$typeof: REACT_MEMO_TYPE,
  	    type: type,
  	    compare: compare === undefined ? null : compare
  	  };
  	}
  
  	function resolveDispatcher() {
  	  var dispatcher = ReactCurrentDispatcher.current;
  
  	  if (!(dispatcher !== null)) {
  	    {
  	      throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem." );
  	    }
  	  }
  
  	  return dispatcher;
  	}
  
  	function useContext(Context, unstable_observedBits) {
  	  var dispatcher = resolveDispatcher();
  
  	  {
  	    if (unstable_observedBits !== undefined) {
  	      error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');
  	    } // TODO: add a more generic warning for invalid values.
  
  
  	    if (Context._context !== undefined) {
  	      var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
  	      // and nobody should be using this in existing code.
  
  	      if (realContext.Consumer === Context) {
  	        error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
  	      } else if (realContext.Provider === Context) {
  	        error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
  	      }
  	    }
  	  }
  
  	  return dispatcher.useContext(Context, unstable_observedBits);
  	}
  	function useState(initialState) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useState(initialState);
  	}
  	function useReducer(reducer, initialArg, init) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useReducer(reducer, initialArg, init);
  	}
  	function useRef(initialValue) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useRef(initialValue);
  	}
  	function useEffect(create, deps) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useEffect(create, deps);
  	}
  	function useLayoutEffect(create, deps) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useLayoutEffect(create, deps);
  	}
  	function useCallback(callback, deps) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useCallback(callback, deps);
  	}
  	function useMemo(create, deps) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useMemo(create, deps);
  	}
  	function useImperativeHandle(ref, create, deps) {
  	  var dispatcher = resolveDispatcher();
  	  return dispatcher.useImperativeHandle(ref, create, deps);
  	}
  	function useDebugValue(value, formatterFn) {
  	  {
  	    var dispatcher = resolveDispatcher();
  	    return dispatcher.useDebugValue(value, formatterFn);
  	  }
  	}
  
  	var propTypesMisspellWarningShown;
  
  	{
  	  propTypesMisspellWarningShown = false;
  	}
  
  	function getDeclarationErrorAddendum() {
  	  if (ReactCurrentOwner.current) {
  	    var name = getComponentName(ReactCurrentOwner.current.type);
  
  	    if (name) {
  	      return '\n\nCheck the render method of `' + name + '`.';
  	    }
  	  }
  
  	  return '';
  	}
  
  	function getSourceInfoErrorAddendum(source) {
  	  if (source !== undefined) {
  	    var fileName = source.fileName.replace(/^.*[\\\/]/, '');
  	    var lineNumber = source.lineNumber;
  	    return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
  	  }
  
  	  return '';
  	}
  
  	function getSourceInfoErrorAddendumForProps(elementProps) {
  	  if (elementProps !== null && elementProps !== undefined) {
  	    return getSourceInfoErrorAddendum(elementProps.__source);
  	  }
  
  	  return '';
  	}
  	/**
  	 * Warn if there's no key explicitly set on dynamic arrays of children or
  	 * object keys are not valid. This allows us to keep track of children between
  	 * updates.
  	 */
  
  
  	var ownerHasKeyUseWarning = {};
  
  	function getCurrentComponentErrorInfo(parentType) {
  	  var info = getDeclarationErrorAddendum();
  
  	  if (!info) {
  	    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
  
  	    if (parentName) {
  	      info = "\n\nCheck the top-level render call using <" + parentName + ">.";
  	    }
  	  }
  
  	  return info;
  	}
  	/**
  	 * Warn if the element doesn't have an explicit key assigned to it.
  	 * This element is in an array. The array could grow and shrink or be
  	 * reordered. All children that haven't already been validated are required to
  	 * have a "key" property assigned to it. Error statuses are cached so a warning
  	 * will only be shown once.
  	 *
  	 * @internal
  	 * @param {ReactElement} element Element that requires a key.
  	 * @param {*} parentType element's parent's type.
  	 */
  
  
  	function validateExplicitKey(element, parentType) {
  	  if (!element._store || element._store.validated || element.key != null) {
  	    return;
  	  }
  
  	  element._store.validated = true;
  	  var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
  
  	  if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
  	    return;
  	  }
  
  	  ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
  	  // property, it may be the creator of the child that's responsible for
  	  // assigning it a key.
  
  	  var childOwner = '';
  
  	  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
  	    // Give the component that originally created this child.
  	    childOwner = " It was passed a child from " + getComponentName(element._owner.type) + ".";
  	  }
  
  	  setCurrentlyValidatingElement(element);
  
  	  {
  	    error('Each child in a list should have a unique "key" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);
  	  }
  
  	  setCurrentlyValidatingElement(null);
  	}
  	/**
  	 * Ensure that every element either is passed in a static location, in an
  	 * array with an explicit keys property defined, or in an object literal
  	 * with valid key property.
  	 *
  	 * @internal
  	 * @param {ReactNode} node Statically passed child of any type.
  	 * @param {*} parentType node's parent's type.
  	 */
  
  
  	function validateChildKeys(node, parentType) {
  	  if (typeof node !== 'object') {
  	    return;
  	  }
  
  	  if (Array.isArray(node)) {
  	    for (var i = 0; i < node.length; i++) {
  	      var child = node[i];
  
  	      if (isValidElement(child)) {
  	        validateExplicitKey(child, parentType);
  	      }
  	    }
  	  } else if (isValidElement(node)) {
  	    // This element was passed in a valid location.
  	    if (node._store) {
  	      node._store.validated = true;
  	    }
  	  } else if (node) {
  	    var iteratorFn = getIteratorFn(node);
  
  	    if (typeof iteratorFn === 'function') {
  	      // Entry iterators used to provide implicit keys,
  	      // but now we print a separate warning for them later.
  	      if (iteratorFn !== node.entries) {
  	        var iterator = iteratorFn.call(node);
  	        var step;
  
  	        while (!(step = iterator.next()).done) {
  	          if (isValidElement(step.value)) {
  	            validateExplicitKey(step.value, parentType);
  	          }
  	        }
  	      }
  	    }
  	  }
  	}
  	/**
  	 * Given an element, validate that its props follow the propTypes definition,
  	 * provided by the type.
  	 *
  	 * @param {ReactElement} element
  	 */
  
  
  	function validatePropTypes(element) {
  	  {
  	    var type = element.type;
  
  	    if (type === null || type === undefined || typeof type === 'string') {
  	      return;
  	    }
  
  	    var name = getComponentName(type);
  	    var propTypes;
  
  	    if (typeof type === 'function') {
  	      propTypes = type.propTypes;
  	    } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
  	    // Inner props are checked in the reconciler.
  	    type.$$typeof === REACT_MEMO_TYPE)) {
  	      propTypes = type.propTypes;
  	    } else {
  	      return;
  	    }
  
  	    if (propTypes) {
  	      setCurrentlyValidatingElement(element);
  	      checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);
  	      setCurrentlyValidatingElement(null);
  	    } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
  	      propTypesMisspellWarningShown = true;
  
  	      error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');
  	    }
  
  	    if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
  	      error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
  	    }
  	  }
  	}
  	/**
  	 * Given a fragment, validate that it can only be provided with fragment props
  	 * @param {ReactElement} fragment
  	 */
  
  
  	function validateFragmentProps(fragment) {
  	  {
  	    setCurrentlyValidatingElement(fragment);
  	    var keys = Object.keys(fragment.props);
  
  	    for (var i = 0; i < keys.length; i++) {
  	      var key = keys[i];
  
  	      if (key !== 'children' && key !== 'key') {
  	        error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
  
  	        break;
  	      }
  	    }
  
  	    if (fragment.ref !== null) {
  	      error('Invalid attribute `ref` supplied to `React.Fragment`.');
  	    }
  
  	    setCurrentlyValidatingElement(null);
  	  }
  	}
  	function createElementWithValidation(type, props, children) {
  	  var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
  	  // succeed and there will likely be errors in render.
  
  	  if (!validType) {
  	    var info = '';
  
  	    if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
  	      info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
  	    }
  
  	    var sourceInfo = getSourceInfoErrorAddendumForProps(props);
  
  	    if (sourceInfo) {
  	      info += sourceInfo;
  	    } else {
  	      info += getDeclarationErrorAddendum();
  	    }
  
  	    var typeString;
  
  	    if (type === null) {
  	      typeString = 'null';
  	    } else if (Array.isArray(type)) {
  	      typeString = 'array';
  	    } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
  	      typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />";
  	      info = ' Did you accidentally export a JSX literal instead of a component?';
  	    } else {
  	      typeString = typeof type;
  	    }
  
  	    {
  	      error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
  	    }
  	  }
  
  	  var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
  	  // TODO: Drop this when these are no longer allowed as the type argument.
  
  	  if (element == null) {
  	    return element;
  	  } // Skip key warning if the type isn't valid since our key validation logic
  	  // doesn't expect a non-string/function type and can throw confusing errors.
  	  // We don't want exception behavior to differ between dev and prod.
  	  // (Rendering will throw with a helpful message and as soon as the type is
  	  // fixed, the key warnings will appear.)
  
  
  	  if (validType) {
  	    for (var i = 2; i < arguments.length; i++) {
  	      validateChildKeys(arguments[i], type);
  	    }
  	  }
  
  	  if (type === REACT_FRAGMENT_TYPE) {
  	    validateFragmentProps(element);
  	  } else {
  	    validatePropTypes(element);
  	  }
  
  	  return element;
  	}
  	var didWarnAboutDeprecatedCreateFactory = false;
  	function createFactoryWithValidation(type) {
  	  var validatedFactory = createElementWithValidation.bind(null, type);
  	  validatedFactory.type = type;
  
  	  {
  	    if (!didWarnAboutDeprecatedCreateFactory) {
  	      didWarnAboutDeprecatedCreateFactory = true;
  
  	      warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
  	    } // Legacy hook: remove it
  
  
  	    Object.defineProperty(validatedFactory, 'type', {
  	      enumerable: false,
  	      get: function () {
  	        warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
  
  	        Object.defineProperty(this, 'type', {
  	          value: type
  	        });
  	        return type;
  	      }
  	    });
  	  }
  
  	  return validatedFactory;
  	}
  	function cloneElementWithValidation(element, props, children) {
  	  var newElement = cloneElement.apply(this, arguments);
  
  	  for (var i = 2; i < arguments.length; i++) {
  	    validateChildKeys(arguments[i], newElement.type);
  	  }
  
  	  validatePropTypes(newElement);
  	  return newElement;
  	}
  
  	{
  
  	  try {
  	    var frozenObject = Object.freeze({});
  	    var testMap = new Map([[frozenObject, null]]);
  	    var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.
  	    // https://github.com/rollup/rollup/issues/1771
  	    // TODO: we can remove these if Rollup fixes the bug.
  
  	    testMap.set(0, 0);
  	    testSet.add(0);
  	  } catch (e) {
  	  }
  	}
  
  	var createElement$1 =  createElementWithValidation ;
  	var cloneElement$1 =  cloneElementWithValidation ;
  	var createFactory =  createFactoryWithValidation ;
  	var Children = {
  	  map: mapChildren,
  	  forEach: forEachChildren,
  	  count: countChildren,
  	  toArray: toArray,
  	  only: onlyChild
  	};
  
  	exports.Children = Children;
  	exports.Component = Component;
  	exports.Fragment = REACT_FRAGMENT_TYPE;
  	exports.Profiler = REACT_PROFILER_TYPE;
  	exports.PureComponent = PureComponent;
  	exports.StrictMode = REACT_STRICT_MODE_TYPE;
  	exports.Suspense = REACT_SUSPENSE_TYPE;
  	exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
  	exports.cloneElement = cloneElement$1;
  	exports.createContext = createContext;
  	exports.createElement = createElement$1;
  	exports.createFactory = createFactory;
  	exports.createRef = createRef;
  	exports.forwardRef = forwardRef;
  	exports.isValidElement = isValidElement;
  	exports.lazy = lazy;
  	exports.memo = memo;
  	exports.useCallback = useCallback;
  	exports.useContext = useContext;
  	exports.useDebugValue = useDebugValue;
  	exports.useEffect = useEffect;
  	exports.useImperativeHandle = useImperativeHandle;
  	exports.useLayoutEffect = useLayoutEffect;
  	exports.useMemo = useMemo;
  	exports.useReducer = useReducer;
  	exports.useRef = useRef;
  	exports.useState = useState;
  	exports.version = ReactVersion;
  	  })();
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 6 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  	var printWarning = function() {};
  
  	if (process.env.NODE_ENV !== 'production') {
  	  var ReactPropTypesSecret = __webpack_require__(7);
  	  var loggedTypeFailures = {};
  	  var has = Function.call.bind(Object.prototype.hasOwnProperty);
  
  	  printWarning = function(text) {
  	    var message = 'Warning: ' + text;
  	    if (typeof console !== 'undefined') {
  	      console.error(message);
  	    }
  	    try {
  	      // --- Welcome to debugging React ---
  	      // This error was thrown as a convenience so that you can use this stack
  	      // to find the callsite that caused this warning to fire.
  	      throw new Error(message);
  	    } catch (x) {}
  	  };
  	}
  
  	/**
  	 * Assert that the values match with the type specs.
  	 * Error messages are memorized and will only be shown once.
  	 *
  	 * @param {object} typeSpecs Map of name to a ReactPropType
  	 * @param {object} values Runtime values that need to be type-checked
  	 * @param {string} location e.g. "prop", "context", "child context"
  	 * @param {string} componentName Name of the component for error messages.
  	 * @param {?Function} getStack Returns the component stack.
  	 * @private
  	 */
  	function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
  	  if (process.env.NODE_ENV !== 'production') {
  	    for (var typeSpecName in typeSpecs) {
  	      if (has(typeSpecs, typeSpecName)) {
  	        var error;
  	        // Prop type validation may throw. In case they do, we don't want to
  	        // fail the render phase where it didn't fail before. So we log it.
  	        // After these have been cleaned up, we'll let them throw.
  	        try {
  	          // This is intentionally an invariant that gets caught. It's the same
  	          // behavior as without this statement except with a better message.
  	          if (typeof typeSpecs[typeSpecName] !== 'function') {
  	            var err = Error(
  	              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
  	              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'
  	            );
  	            err.name = 'Invariant Violation';
  	            throw err;
  	          }
  	          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
  	        } catch (ex) {
  	          error = ex;
  	        }
  	        if (error && !(error instanceof Error)) {
  	          printWarning(
  	            (componentName || 'React class') + ': type specification of ' +
  	            location + ' `' + typeSpecName + '` is invalid; the type checker ' +
  	            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
  	            'You may have forgotten to pass an argument to the type checker ' +
  	            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
  	            'shape all require an argument).'
  	          );
  	        }
  	        if (error instanceof Error && !(error.message in loggedTypeFailures)) {
  	          // Only monitor this failure once because there tends to be a lot of the
  	          // same error.
  	          loggedTypeFailures[error.message] = true;
  
  	          var stack = getStack ? getStack() : '';
  
  	          printWarning(
  	            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
  	          );
  	        }
  	      }
  	    }
  	  }
  	}
  
  	/**
  	 * Resets warning cache when testing.
  	 *
  	 * @private
  	 */
  	checkPropTypes.resetWarningCache = function() {
  	  if (process.env.NODE_ENV !== 'production') {
  	    loggedTypeFailures = {};
  	  }
  	}
  
  	module.exports = checkPropTypes;
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 7 */
  /***/ (function(module, exports) {
  
  	/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  	var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
  
  	module.exports = ReactPropTypesSecret;
  
  
  /***/ }),
  /* 8 */,
  /* 9 */,
  /* 10 */,
  /* 11 */,
  /* 12 */,
  /* 13 */,
  /* 14 */,
  /* 15 */,
  /* 16 */,
  /* 17 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 *
  	 */
  
  	'use strict';
  
  	var React = __webpack_require__(1);
  	var factory = __webpack_require__(18);
  
  	if (typeof React === 'undefined') {
  	  throw Error(
  	    'create-react-class could not find the React object. If you are using script tags, ' +
  	      'make sure that React is being loaded before create-react-class.'
  	  );
  	}
  
  	// Hack to grab NoopUpdateQueue from isomorphic React
  	var ReactNoopUpdateQueue = new React.Component().updater;
  
  	module.exports = factory(
  	  React.Component,
  	  React.isValidElement,
  	  ReactNoopUpdateQueue
  	);
  
  
  /***/ }),
  /* 18 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 *
  	 */
  
  	'use strict';
  
  	var _assign = __webpack_require__(4);
  
  	// -- Inlined from fbjs --
  
  	var emptyObject = {};
  
  	if (process.env.NODE_ENV !== 'production') {
  	  Object.freeze(emptyObject);
  	}
  
  	var validateFormat = function validateFormat(format) {};
  
  	if (process.env.NODE_ENV !== 'production') {
  	  validateFormat = function validateFormat(format) {
  	    if (format === undefined) {
  	      throw new Error('invariant requires an error message argument');
  	    }
  	  };
  	}
  
  	function _invariant(condition, format, a, b, c, d, e, f) {
  	  validateFormat(format);
  
  	  if (!condition) {
  	    var error;
  	    if (format === undefined) {
  	      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
  	    } else {
  	      var args = [a, b, c, d, e, f];
  	      var argIndex = 0;
  	      error = new Error(format.replace(/%s/g, function () {
  	        return args[argIndex++];
  	      }));
  	      error.name = 'Invariant Violation';
  	    }
  
  	    error.framesToPop = 1; // we don't care about invariant's own frame
  	    throw error;
  	  }
  	}
  
  	var warning = function(){};
  
  	if (process.env.NODE_ENV !== 'production') {
  	  var printWarning = function printWarning(format) {
  	    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  	      args[_key - 1] = arguments[_key];
  	    }
  
  	    var argIndex = 0;
  	    var message = 'Warning: ' + format.replace(/%s/g, function () {
  	      return args[argIndex++];
  	    });
  	    if (typeof console !== 'undefined') {
  	      console.error(message);
  	    }
  	    try {
  	      // --- Welcome to debugging React ---
  	      // This error was thrown as a convenience so that you can use this stack
  	      // to find the callsite that caused this warning to fire.
  	      throw new Error(message);
  	    } catch (x) {}
  	  };
  
  	  warning = function warning(condition, format) {
  	    if (format === undefined) {
  	      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
  	    }
  
  	    if (format.indexOf('Failed Composite propType: ') === 0) {
  	      return; // Ignore CompositeComponent proptype check.
  	    }
  
  	    if (!condition) {
  	      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
  	        args[_key2 - 2] = arguments[_key2];
  	      }
  
  	      printWarning.apply(undefined, [format].concat(args));
  	    }
  	  };
  	}
  
  	// /-- Inlined from fbjs --
  
  	var MIXINS_KEY = 'mixins';
  
  	// Helper function to allow the creation of anonymous functions which do not
  	// have .name set to the name of the variable being assigned to.
  	function identity(fn) {
  	  return fn;
  	}
  
  	var ReactPropTypeLocationNames;
  	if (process.env.NODE_ENV !== 'production') {
  	  ReactPropTypeLocationNames = {
  	    prop: 'prop',
  	    context: 'context',
  	    childContext: 'child context'
  	  };
  	} else {
  	  ReactPropTypeLocationNames = {};
  	}
  
  	function factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {
  	  /**
  	   * Policies that describe methods in `ReactClassInterface`.
  	   */
  
  	  var injectedMixins = [];
  
  	  /**
  	   * Composite components are higher-level components that compose other composite
  	   * or host components.
  	   *
  	   * To create a new type of `ReactClass`, pass a specification of
  	   * your new class to `React.createClass`. The only requirement of your class
  	   * specification is that you implement a `render` method.
  	   *
  	   *   var MyComponent = React.createClass({
  	   *     render: function() {
  	   *       return <div>Hello World</div>;
  	   *     }
  	   *   });
  	   *
  	   * The class specification supports a specific protocol of methods that have
  	   * special meaning (e.g. `render`). See `ReactClassInterface` for
  	   * more the comprehensive protocol. Any other properties and methods in the
  	   * class specification will be available on the prototype.
  	   *
  	   * @interface ReactClassInterface
  	   * @internal
  	   */
  	  var ReactClassInterface = {
  	    /**
  	     * An array of Mixin objects to include when defining your component.
  	     *
  	     * @type {array}
  	     * @optional
  	     */
  	    mixins: 'DEFINE_MANY',
  
  	    /**
  	     * An object containing properties and methods that should be defined on
  	     * the component's constructor instead of its prototype (static methods).
  	     *
  	     * @type {object}
  	     * @optional
  	     */
  	    statics: 'DEFINE_MANY',
  
  	    /**
  	     * Definition of prop types for this component.
  	     *
  	     * @type {object}
  	     * @optional
  	     */
  	    propTypes: 'DEFINE_MANY',
  
  	    /**
  	     * Definition of context types for this component.
  	     *
  	     * @type {object}
  	     * @optional
  	     */
  	    contextTypes: 'DEFINE_MANY',
  
  	    /**
  	     * Definition of context types this component sets for its children.
  	     *
  	     * @type {object}
  	     * @optional
  	     */
  	    childContextTypes: 'DEFINE_MANY',
  
  	    // ==== Definition methods ====
  
  	    /**
  	     * Invoked when the component is mounted. Values in the mapping will be set on
  	     * `this.props` if that prop is not specified (i.e. using an `in` check).
  	     *
  	     * This method is invoked before `getInitialState` and therefore cannot rely
  	     * on `this.state` or use `this.setState`.
  	     *
  	     * @return {object}
  	     * @optional
  	     */
  	    getDefaultProps: 'DEFINE_MANY_MERGED',
  
  	    /**
  	     * Invoked once before the component is mounted. The return value will be used
  	     * as the initial value of `this.state`.
  	     *
  	     *   getInitialState: function() {
  	     *     return {
  	     *       isOn: false,
  	     *       fooBaz: new BazFoo()
  	     *     }
  	     *   }
  	     *
  	     * @return {object}
  	     * @optional
  	     */
  	    getInitialState: 'DEFINE_MANY_MERGED',
  
  	    /**
  	     * @return {object}
  	     * @optional
  	     */
  	    getChildContext: 'DEFINE_MANY_MERGED',
  
  	    /**
  	     * Uses props from `this.props` and state from `this.state` to render the
  	     * structure of the component.
  	     *
  	     * No guarantees are made about when or how often this method is invoked, so
  	     * it must not have side effects.
  	     *
  	     *   render: function() {
  	     *     var name = this.props.name;
  	     *     return <div>Hello, {name}!</div>;
  	     *   }
  	     *
  	     * @return {ReactComponent}
  	     * @required
  	     */
  	    render: 'DEFINE_ONCE',
  
  	    // ==== Delegate methods ====
  
  	    /**
  	     * Invoked when the component is initially created and about to be mounted.
  	     * This may have side effects, but any external subscriptions or data created
  	     * by this method must be cleaned up in `componentWillUnmount`.
  	     *
  	     * @optional
  	     */
  	    componentWillMount: 'DEFINE_MANY',
  
  	    /**
  	     * Invoked when the component has been mounted and has a DOM representation.
  	     * However, there is no guarantee that the DOM node is in the document.
  	     *
  	     * Use this as an opportunity to operate on the DOM when the component has
  	     * been mounted (initialized and rendered) for the first time.
  	     *
  	     * @param {DOMElement} rootNode DOM element representing the component.
  	     * @optional
  	     */
  	    componentDidMount: 'DEFINE_MANY',
  
  	    /**
  	     * Invoked before the component receives new props.
  	     *
  	     * Use this as an opportunity to react to a prop transition by updating the
  	     * state using `this.setState`. Current props are accessed via `this.props`.
  	     *
  	     *   componentWillReceiveProps: function(nextProps, nextContext) {
  	     *     this.setState({
  	     *       likesIncreasing: nextProps.likeCount > this.props.likeCount
  	     *     });
  	     *   }
  	     *
  	     * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
  	     * transition may cause a state change, but the opposite is not true. If you
  	     * need it, you are probably looking for `componentWillUpdate`.
  	     *
  	     * @param {object} nextProps
  	     * @optional
  	     */
  	    componentWillReceiveProps: 'DEFINE_MANY',
  
  	    /**
  	     * Invoked while deciding if the component should be updated as a result of
  	     * receiving new props, state and/or context.
  	     *
  	     * Use this as an opportunity to `return false` when you're certain that the
  	     * transition to the new props/state/context will not require a component
  	     * update.
  	     *
  	     *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
  	     *     return !equal(nextProps, this.props) ||
  	     *       !equal(nextState, this.state) ||
  	     *       !equal(nextContext, this.context);
  	     *   }
  	     *
  	     * @param {object} nextProps
  	     * @param {?object} nextState
  	     * @param {?object} nextContext
  	     * @return {boolean} True if the component should update.
  	     * @optional
  	     */
  	    shouldComponentUpdate: 'DEFINE_ONCE',
  
  	    /**
  	     * Invoked when the component is about to update due to a transition from
  	     * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
  	     * and `nextContext`.
  	     *
  	     * Use this as an opportunity to perform preparation before an update occurs.
  	     *
  	     * NOTE: You **cannot** use `this.setState()` in this method.
  	     *
  	     * @param {object} nextProps
  	     * @param {?object} nextState
  	     * @param {?object} nextContext
  	     * @param {ReactReconcileTransaction} transaction
  	     * @optional
  	     */
  	    componentWillUpdate: 'DEFINE_MANY',
  
  	    /**
  	     * Invoked when the component's DOM representation has been updated.
  	     *
  	     * Use this as an opportunity to operate on the DOM when the component has
  	     * been updated.
  	     *
  	     * @param {object} prevProps
  	     * @param {?object} prevState
  	     * @param {?object} prevContext
  	     * @param {DOMElement} rootNode DOM element representing the component.
  	     * @optional
  	     */
  	    componentDidUpdate: 'DEFINE_MANY',
  
  	    /**
  	     * Invoked when the component is about to be removed from its parent and have
  	     * its DOM representation destroyed.
  	     *
  	     * Use this as an opportunity to deallocate any external resources.
  	     *
  	     * NOTE: There is no `componentDidUnmount` since your component will have been
  	     * destroyed by that point.
  	     *
  	     * @optional
  	     */
  	    componentWillUnmount: 'DEFINE_MANY',
  
  	    /**
  	     * Replacement for (deprecated) `componentWillMount`.
  	     *
  	     * @optional
  	     */
  	    UNSAFE_componentWillMount: 'DEFINE_MANY',
  
  	    /**
  	     * Replacement for (deprecated) `componentWillReceiveProps`.
  	     *
  	     * @optional
  	     */
  	    UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',
  
  	    /**
  	     * Replacement for (deprecated) `componentWillUpdate`.
  	     *
  	     * @optional
  	     */
  	    UNSAFE_componentWillUpdate: 'DEFINE_MANY',
  
  	    // ==== Advanced methods ====
  
  	    /**
  	     * Updates the component's currently mounted DOM representation.
  	     *
  	     * By default, this implements React's rendering and reconciliation algorithm.
  	     * Sophisticated clients may wish to override this.
  	     *
  	     * @param {ReactReconcileTransaction} transaction
  	     * @internal
  	     * @overridable
  	     */
  	    updateComponent: 'OVERRIDE_BASE'
  	  };
  
  	  /**
  	   * Similar to ReactClassInterface but for static methods.
  	   */
  	  var ReactClassStaticInterface = {
  	    /**
  	     * This method is invoked after a component is instantiated and when it
  	     * receives new props. Return an object to update state in response to
  	     * prop changes. Return null to indicate no change to state.
  	     *
  	     * If an object is returned, its keys will be merged into the existing state.
  	     *
  	     * @return {object || null}
  	     * @optional
  	     */
  	    getDerivedStateFromProps: 'DEFINE_MANY_MERGED'
  	  };
  
  	  /**
  	   * Mapping from class specification keys to special processing functions.
  	   *
  	   * Although these are declared like instance properties in the specification
  	   * when defining classes using `React.createClass`, they are actually static
  	   * and are accessible on the constructor instead of the prototype. Despite
  	   * being static, they must be defined outside of the "statics" key under
  	   * which all other static methods are defined.
  	   */
  	  var RESERVED_SPEC_KEYS = {
  	    displayName: function(Constructor, displayName) {
  	      Constructor.displayName = displayName;
  	    },
  	    mixins: function(Constructor, mixins) {
  	      if (mixins) {
  	        for (var i = 0; i < mixins.length; i++) {
  	          mixSpecIntoComponent(Constructor, mixins[i]);
  	        }
  	      }
  	    },
  	    childContextTypes: function(Constructor, childContextTypes) {
  	      if (process.env.NODE_ENV !== 'production') {
  	        validateTypeDef(Constructor, childContextTypes, 'childContext');
  	      }
  	      Constructor.childContextTypes = _assign(
  	        {},
  	        Constructor.childContextTypes,
  	        childContextTypes
  	      );
  	    },
  	    contextTypes: function(Constructor, contextTypes) {
  	      if (process.env.NODE_ENV !== 'production') {
  	        validateTypeDef(Constructor, contextTypes, 'context');
  	      }
  	      Constructor.contextTypes = _assign(
  	        {},
  	        Constructor.contextTypes,
  	        contextTypes
  	      );
  	    },
  	    /**
  	     * Special case getDefaultProps which should move into statics but requires
  	     * automatic merging.
  	     */
  	    getDefaultProps: function(Constructor, getDefaultProps) {
  	      if (Constructor.getDefaultProps) {
  	        Constructor.getDefaultProps = createMergedResultFunction(
  	          Constructor.getDefaultProps,
  	          getDefaultProps
  	        );
  	      } else {
  	        Constructor.getDefaultProps = getDefaultProps;
  	      }
  	    },
  	    propTypes: function(Constructor, propTypes) {
  	      if (process.env.NODE_ENV !== 'production') {
  	        validateTypeDef(Constructor, propTypes, 'prop');
  	      }
  	      Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);
  	    },
  	    statics: function(Constructor, statics) {
  	      mixStaticSpecIntoComponent(Constructor, statics);
  	    },
  	    autobind: function() {}
  	  };
  
  	  function validateTypeDef(Constructor, typeDef, location) {
  	    for (var propName in typeDef) {
  	      if (typeDef.hasOwnProperty(propName)) {
  	        // use a warning instead of an _invariant so components
  	        // don't show up in prod but only in __DEV__
  	        if (process.env.NODE_ENV !== 'production') {
  	          warning(
  	            typeof typeDef[propName] === 'function',
  	            '%s: %s type `%s` is invalid; it must be a function, usually from ' +
  	              'React.PropTypes.',
  	            Constructor.displayName || 'ReactClass',
  	            ReactPropTypeLocationNames[location],
  	            propName
  	          );
  	        }
  	      }
  	    }
  	  }
  
  	  function validateMethodOverride(isAlreadyDefined, name) {
  	    var specPolicy = ReactClassInterface.hasOwnProperty(name)
  	      ? ReactClassInterface[name]
  	      : null;
  
  	    // Disallow overriding of base class methods unless explicitly allowed.
  	    if (ReactClassMixin.hasOwnProperty(name)) {
  	      _invariant(
  	        specPolicy === 'OVERRIDE_BASE',
  	        'ReactClassInterface: You are attempting to override ' +
  	          '`%s` from your class specification. Ensure that your method names ' +
  	          'do not overlap with React methods.',
  	        name
  	      );
  	    }
  
  	    // Disallow defining methods more than once unless explicitly allowed.
  	    if (isAlreadyDefined) {
  	      _invariant(
  	        specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',
  	        'ReactClassInterface: You are attempting to define ' +
  	          '`%s` on your component more than once. This conflict may be due ' +
  	          'to a mixin.',
  	        name
  	      );
  	    }
  	  }
  
  	  /**
  	   * Mixin helper which handles policy validation and reserved
  	   * specification keys when building React classes.
  	   */
  	  function mixSpecIntoComponent(Constructor, spec) {
  	    if (!spec) {
  	      if (process.env.NODE_ENV !== 'production') {
  	        var typeofSpec = typeof spec;
  	        var isMixinValid = typeofSpec === 'object' && spec !== null;
  
  	        if (process.env.NODE_ENV !== 'production') {
  	          warning(
  	            isMixinValid,
  	            "%s: You're attempting to include a mixin that is either null " +
  	              'or not an object. Check the mixins included by the component, ' +
  	              'as well as any mixins they include themselves. ' +
  	              'Expected object but got %s.',
  	            Constructor.displayName || 'ReactClass',
  	            spec === null ? null : typeofSpec
  	          );
  	        }
  	      }
  
  	      return;
  	    }
  
  	    _invariant(
  	      typeof spec !== 'function',
  	      "ReactClass: You're attempting to " +
  	        'use a component class or function as a mixin. Instead, just use a ' +
  	        'regular object.'
  	    );
  	    _invariant(
  	      !isValidElement(spec),
  	      "ReactClass: You're attempting to " +
  	        'use a component as a mixin. Instead, just use a regular object.'
  	    );
  
  	    var proto = Constructor.prototype;
  	    var autoBindPairs = proto.__reactAutoBindPairs;
  
  	    // By handling mixins before any other properties, we ensure the same
  	    // chaining order is applied to methods with DEFINE_MANY policy, whether
  	    // mixins are listed before or after these methods in the spec.
  	    if (spec.hasOwnProperty(MIXINS_KEY)) {
  	      RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
  	    }
  
  	    for (var name in spec) {
  	      if (!spec.hasOwnProperty(name)) {
  	        continue;
  	      }
  
  	      if (name === MIXINS_KEY) {
  	        // We have already handled mixins in a special case above.
  	        continue;
  	      }
  
  	      var property = spec[name];
  	      var isAlreadyDefined = proto.hasOwnProperty(name);
  	      validateMethodOverride(isAlreadyDefined, name);
  
  	      if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
  	        RESERVED_SPEC_KEYS[name](Constructor, property);
  	      } else {
  	        // Setup methods on prototype:
  	        // The following member methods should not be automatically bound:
  	        // 1. Expected ReactClass methods (in the "interface").
  	        // 2. Overridden methods (that were mixed in).
  	        var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
  	        var isFunction = typeof property === 'function';
  	        var shouldAutoBind =
  	          isFunction &&
  	          !isReactClassMethod &&
  	          !isAlreadyDefined &&
  	          spec.autobind !== false;
  
  	        if (shouldAutoBind) {
  	          autoBindPairs.push(name, property);
  	          proto[name] = property;
  	        } else {
  	          if (isAlreadyDefined) {
  	            var specPolicy = ReactClassInterface[name];
  
  	            // These cases should already be caught by validateMethodOverride.
  	            _invariant(
  	              isReactClassMethod &&
  	                (specPolicy === 'DEFINE_MANY_MERGED' ||
  	                  specPolicy === 'DEFINE_MANY'),
  	              'ReactClass: Unexpected spec policy %s for key %s ' +
  	                'when mixing in component specs.',
  	              specPolicy,
  	              name
  	            );
  
  	            // For methods which are defined more than once, call the existing
  	            // methods before calling the new property, merging if appropriate.
  	            if (specPolicy === 'DEFINE_MANY_MERGED') {
  	              proto[name] = createMergedResultFunction(proto[name], property);
  	            } else if (specPolicy === 'DEFINE_MANY') {
  	              proto[name] = createChainedFunction(proto[name], property);
  	            }
  	          } else {
  	            proto[name] = property;
  	            if (process.env.NODE_ENV !== 'production') {
  	              // Add verbose displayName to the function, which helps when looking
  	              // at profiling tools.
  	              if (typeof property === 'function' && spec.displayName) {
  	                proto[name].displayName = spec.displayName + '_' + name;
  	              }
  	            }
  	          }
  	        }
  	      }
  	    }
  	  }
  
  	  function mixStaticSpecIntoComponent(Constructor, statics) {
  	    if (!statics) {
  	      return;
  	    }
  
  	    for (var name in statics) {
  	      var property = statics[name];
  	      if (!statics.hasOwnProperty(name)) {
  	        continue;
  	      }
  
  	      var isReserved = name in RESERVED_SPEC_KEYS;
  	      _invariant(
  	        !isReserved,
  	        'ReactClass: You are attempting to define a reserved ' +
  	          'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' +
  	          'as an instance property instead; it will still be accessible on the ' +
  	          'constructor.',
  	        name
  	      );
  
  	      var isAlreadyDefined = name in Constructor;
  	      if (isAlreadyDefined) {
  	        var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)
  	          ? ReactClassStaticInterface[name]
  	          : null;
  
  	        _invariant(
  	          specPolicy === 'DEFINE_MANY_MERGED',
  	          'ReactClass: You are attempting to define ' +
  	            '`%s` on your component more than once. This conflict may be ' +
  	            'due to a mixin.',
  	          name
  	        );
  
  	        Constructor[name] = createMergedResultFunction(Constructor[name], property);
  
  	        return;
  	      }
  
  	      Constructor[name] = property;
  	    }
  	  }
  
  	  /**
  	   * Merge two objects, but throw if both contain the same key.
  	   *
  	   * @param {object} one The first object, which is mutated.
  	   * @param {object} two The second object
  	   * @return {object} one after it has been mutated to contain everything in two.
  	   */
  	  function mergeIntoWithNoDuplicateKeys(one, two) {
  	    _invariant(
  	      one && two && typeof one === 'object' && typeof two === 'object',
  	      'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'
  	    );
  
  	    for (var key in two) {
  	      if (two.hasOwnProperty(key)) {
  	        _invariant(
  	          one[key] === undefined,
  	          'mergeIntoWithNoDuplicateKeys(): ' +
  	            'Tried to merge two objects with the same key: `%s`. This conflict ' +
  	            'may be due to a mixin; in particular, this may be caused by two ' +
  	            'getInitialState() or getDefaultProps() methods returning objects ' +
  	            'with clashing keys.',
  	          key
  	        );
  	        one[key] = two[key];
  	      }
  	    }
  	    return one;
  	  }
  
  	  /**
  	   * Creates a function that invokes two functions and merges their return values.
  	   *
  	   * @param {function} one Function to invoke first.
  	   * @param {function} two Function to invoke second.
  	   * @return {function} Function that invokes the two argument functions.
  	   * @private
  	   */
  	  function createMergedResultFunction(one, two) {
  	    return function mergedResult() {
  	      var a = one.apply(this, arguments);
  	      var b = two.apply(this, arguments);
  	      if (a == null) {
  	        return b;
  	      } else if (b == null) {
  	        return a;
  	      }
  	      var c = {};
  	      mergeIntoWithNoDuplicateKeys(c, a);
  	      mergeIntoWithNoDuplicateKeys(c, b);
  	      return c;
  	    };
  	  }
  
  	  /**
  	   * Creates a function that invokes two functions and ignores their return vales.
  	   *
  	   * @param {function} one Function to invoke first.
  	   * @param {function} two Function to invoke second.
  	   * @return {function} Function that invokes the two argument functions.
  	   * @private
  	   */
  	  function createChainedFunction(one, two) {
  	    return function chainedFunction() {
  	      one.apply(this, arguments);
  	      two.apply(this, arguments);
  	    };
  	  }
  
  	  /**
  	   * Binds a method to the component.
  	   *
  	   * @param {object} component Component whose method is going to be bound.
  	   * @param {function} method Method to be bound.
  	   * @return {function} The bound method.
  	   */
  	  function bindAutoBindMethod(component, method) {
  	    var boundMethod = method.bind(component);
  	    if (process.env.NODE_ENV !== 'production') {
  	      boundMethod.__reactBoundContext = component;
  	      boundMethod.__reactBoundMethod = method;
  	      boundMethod.__reactBoundArguments = null;
  	      var componentName = component.constructor.displayName;
  	      var _bind = boundMethod.bind;
  	      boundMethod.bind = function(newThis) {
  	        for (
  	          var _len = arguments.length,
  	            args = Array(_len > 1 ? _len - 1 : 0),
  	            _key = 1;
  	          _key < _len;
  	          _key++
  	        ) {
  	          args[_key - 1] = arguments[_key];
  	        }
  
  	        // User is trying to bind() an autobound method; we effectively will
  	        // ignore the value of "this" that the user is trying to use, so
  	        // let's warn.
  	        if (newThis !== component && newThis !== null) {
  	          if (process.env.NODE_ENV !== 'production') {
  	            warning(
  	              false,
  	              'bind(): React component methods may only be bound to the ' +
  	                'component instance. See %s',
  	              componentName
  	            );
  	          }
  	        } else if (!args.length) {
  	          if (process.env.NODE_ENV !== 'production') {
  	            warning(
  	              false,
  	              'bind(): You are binding a component method to the component. ' +
  	                'React does this for you automatically in a high-performance ' +
  	                'way, so you can safely remove this call. See %s',
  	              componentName
  	            );
  	          }
  	          return boundMethod;
  	        }
  	        var reboundMethod = _bind.apply(boundMethod, arguments);
  	        reboundMethod.__reactBoundContext = component;
  	        reboundMethod.__reactBoundMethod = method;
  	        reboundMethod.__reactBoundArguments = args;
  	        return reboundMethod;
  	      };
  	    }
  	    return boundMethod;
  	  }
  
  	  /**
  	   * Binds all auto-bound methods in a component.
  	   *
  	   * @param {object} component Component whose method is going to be bound.
  	   */
  	  function bindAutoBindMethods(component) {
  	    var pairs = component.__reactAutoBindPairs;
  	    for (var i = 0; i < pairs.length; i += 2) {
  	      var autoBindKey = pairs[i];
  	      var method = pairs[i + 1];
  	      component[autoBindKey] = bindAutoBindMethod(component, method);
  	    }
  	  }
  
  	  var IsMountedPreMixin = {
  	    componentDidMount: function() {
  	      this.__isMounted = true;
  	    }
  	  };
  
  	  var IsMountedPostMixin = {
  	    componentWillUnmount: function() {
  	      this.__isMounted = false;
  	    }
  	  };
  
  	  /**
  	   * Add more to the ReactClass base class. These are all legacy features and
  	   * therefore not already part of the modern ReactComponent.
  	   */
  	  var ReactClassMixin = {
  	    /**
  	     * TODO: This will be deprecated because state should always keep a consistent
  	     * type signature and the only use case for this, is to avoid that.
  	     */
  	    replaceState: function(newState, callback) {
  	      this.updater.enqueueReplaceState(this, newState, callback);
  	    },
  
  	    /**
  	     * Checks whether or not this composite component is mounted.
  	     * @return {boolean} True if mounted, false otherwise.
  	     * @protected
  	     * @final
  	     */
  	    isMounted: function() {
  	      if (process.env.NODE_ENV !== 'production') {
  	        warning(
  	          this.__didWarnIsMounted,
  	          '%s: isMounted is deprecated. Instead, make sure to clean up ' +
  	            'subscriptions and pending requests in componentWillUnmount to ' +
  	            'prevent memory leaks.',
  	          (this.constructor && this.constructor.displayName) ||
  	            this.name ||
  	            'Component'
  	        );
  	        this.__didWarnIsMounted = true;
  	      }
  	      return !!this.__isMounted;
  	    }
  	  };
  
  	  var ReactClassComponent = function() {};
  	  _assign(
  	    ReactClassComponent.prototype,
  	    ReactComponent.prototype,
  	    ReactClassMixin
  	  );
  
  	  /**
  	   * Creates a composite component class given a class specification.
  	   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass
  	   *
  	   * @param {object} spec Class specification (which must define `render`).
  	   * @return {function} Component constructor function.
  	   * @public
  	   */
  	  function createClass(spec) {
  	    // To keep our warnings more understandable, we'll use a little hack here to
  	    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't
  	    // unnecessarily identify a class without displayName as 'Constructor'.
  	    var Constructor = identity(function(props, context, updater) {
  	      // This constructor gets overridden by mocks. The argument is used
  	      // by mocks to assert on what gets mounted.
  
  	      if (process.env.NODE_ENV !== 'production') {
  	        warning(
  	          this instanceof Constructor,
  	          'Something is calling a React component directly. Use a factory or ' +
  	            'JSX instead. See: https://fb.me/react-legacyfactory'
  	        );
  	      }
  
  	      // Wire up auto-binding
  	      if (this.__reactAutoBindPairs.length) {
  	        bindAutoBindMethods(this);
  	      }
  
  	      this.props = props;
  	      this.context = context;
  	      this.refs = emptyObject;
  	      this.updater = updater || ReactNoopUpdateQueue;
  
  	      this.state = null;
  
  	      // ReactClasses doesn't have constructors. Instead, they use the
  	      // getInitialState and componentWillMount methods for initialization.
  
  	      var initialState = this.getInitialState ? this.getInitialState() : null;
  	      if (process.env.NODE_ENV !== 'production') {
  	        // We allow auto-mocks to proceed as if they're returning null.
  	        if (
  	          initialState === undefined &&
  	          this.getInitialState._isMockFunction
  	        ) {
  	          // This is probably bad practice. Consider warning here and
  	          // deprecating this convenience.
  	          initialState = null;
  	        }
  	      }
  	      _invariant(
  	        typeof initialState === 'object' && !Array.isArray(initialState),
  	        '%s.getInitialState(): must return an object or null',
  	        Constructor.displayName || 'ReactCompositeComponent'
  	      );
  
  	      this.state = initialState;
  	    });
  	    Constructor.prototype = new ReactClassComponent();
  	    Constructor.prototype.constructor = Constructor;
  	    Constructor.prototype.__reactAutoBindPairs = [];
  
  	    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));
  
  	    mixSpecIntoComponent(Constructor, IsMountedPreMixin);
  	    mixSpecIntoComponent(Constructor, spec);
  	    mixSpecIntoComponent(Constructor, IsMountedPostMixin);
  
  	    // Initialize the defaultProps property after all mixins have been merged.
  	    if (Constructor.getDefaultProps) {
  	      Constructor.defaultProps = Constructor.getDefaultProps();
  	    }
  
  	    if (process.env.NODE_ENV !== 'production') {
  	      // This is a tag to indicate that the use of these method names is ok,
  	      // since it's used with createClass. If it's not, then it's likely a
  	      // mistake so we'll warn you to use the static property, property
  	      // initializer or constructor respectively.
  	      if (Constructor.getDefaultProps) {
  	        Constructor.getDefaultProps.isReactClassApproved = {};
  	      }
  	      if (Constructor.prototype.getInitialState) {
  	        Constructor.prototype.getInitialState.isReactClassApproved = {};
  	      }
  	    }
  
  	    _invariant(
  	      Constructor.prototype.render,
  	      'createClass(...): Class specification must implement a `render` method.'
  	    );
  
  	    if (process.env.NODE_ENV !== 'production') {
  	      warning(
  	        !Constructor.prototype.componentShouldUpdate,
  	        '%s has a method called ' +
  	          'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +
  	          'The name is phrased as a question because the function is ' +
  	          'expected to return a value.',
  	        spec.displayName || 'A component'
  	      );
  	      warning(
  	        !Constructor.prototype.componentWillRecieveProps,
  	        '%s has a method called ' +
  	          'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',
  	        spec.displayName || 'A component'
  	      );
  	      warning(
  	        !Constructor.prototype.UNSAFE_componentWillRecieveProps,
  	        '%s has a method called UNSAFE_componentWillRecieveProps(). ' +
  	          'Did you mean UNSAFE_componentWillReceiveProps()?',
  	        spec.displayName || 'A component'
  	      );
  	    }
  
  	    // Reduce time spent doing lookups by setting these on the prototype.
  	    for (var methodName in ReactClassInterface) {
  	      if (!Constructor.prototype[methodName]) {
  	        Constructor.prototype[methodName] = null;
  	      }
  	    }
  
  	    return Constructor;
  	  }
  
  	  return createClass;
  	}
  
  	module.exports = factory;
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 19 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	if (process.env.NODE_ENV !== 'production') {
  	  var ReactIs = __webpack_require__(20);
  
  	  // By explicitly using `prop-types` you are opting into new development behavior.
  	  // http://fb.me/prop-types-in-prod
  	  var throwOnDirectAccess = true;
  	  module.exports = __webpack_require__(23)(ReactIs.isElement, throwOnDirectAccess);
  	} else {
  	  // By explicitly using `prop-types` you are opting into new production behavior.
  	  // http://fb.me/prop-types-in-prod
  	  module.exports = __webpack_require__(24)();
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 20 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {'use strict';
  
  	if (process.env.NODE_ENV === 'production') {
  	  module.exports = __webpack_require__(21);
  	} else {
  	  module.exports = __webpack_require__(22);
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 21 */
  /***/ (function(module, exports) {
  
  	/** @license React v16.13.1
  	 * react-is.production.min.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?
  	Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;
  	function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;
  	exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};
  	exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};
  	exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;
  
  
  /***/ }),
  /* 22 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/** @license React v16.13.1
  	 * react-is.development.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  
  
  	if (process.env.NODE_ENV !== "production") {
  	  (function() {
  	'use strict';
  
  	// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  	// nor polyfill, then a plain number is used for performance.
  	var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  	var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
  	var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  	var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  	var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  	var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  	var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  	var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  	// (unstable) APIs that have been removed. Can we remove the symbols?
  
  	var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
  	var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  	var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  	var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  	var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  	var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  	var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  	var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  	var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  	var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
  	var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
  
  	function isValidElementType(type) {
  	  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
  	  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
  	}
  
  	function typeOf(object) {
  	  if (typeof object === 'object' && object !== null) {
  	    var $$typeof = object.$$typeof;
  
  	    switch ($$typeof) {
  	      case REACT_ELEMENT_TYPE:
  	        var type = object.type;
  
  	        switch (type) {
  	          case REACT_ASYNC_MODE_TYPE:
  	          case REACT_CONCURRENT_MODE_TYPE:
  	          case REACT_FRAGMENT_TYPE:
  	          case REACT_PROFILER_TYPE:
  	          case REACT_STRICT_MODE_TYPE:
  	          case REACT_SUSPENSE_TYPE:
  	            return type;
  
  	          default:
  	            var $$typeofType = type && type.$$typeof;
  
  	            switch ($$typeofType) {
  	              case REACT_CONTEXT_TYPE:
  	              case REACT_FORWARD_REF_TYPE:
  	              case REACT_LAZY_TYPE:
  	              case REACT_MEMO_TYPE:
  	              case REACT_PROVIDER_TYPE:
  	                return $$typeofType;
  
  	              default:
  	                return $$typeof;
  	            }
  
  	        }
  
  	      case REACT_PORTAL_TYPE:
  	        return $$typeof;
  	    }
  	  }
  
  	  return undefined;
  	} // AsyncMode is deprecated along with isAsyncMode
  
  	var AsyncMode = REACT_ASYNC_MODE_TYPE;
  	var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
  	var ContextConsumer = REACT_CONTEXT_TYPE;
  	var ContextProvider = REACT_PROVIDER_TYPE;
  	var Element = REACT_ELEMENT_TYPE;
  	var ForwardRef = REACT_FORWARD_REF_TYPE;
  	var Fragment = REACT_FRAGMENT_TYPE;
  	var Lazy = REACT_LAZY_TYPE;
  	var Memo = REACT_MEMO_TYPE;
  	var Portal = REACT_PORTAL_TYPE;
  	var Profiler = REACT_PROFILER_TYPE;
  	var StrictMode = REACT_STRICT_MODE_TYPE;
  	var Suspense = REACT_SUSPENSE_TYPE;
  	var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
  
  	function isAsyncMode(object) {
  	  {
  	    if (!hasWarnedAboutDeprecatedIsAsyncMode) {
  	      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
  
  	      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
  	    }
  	  }
  
  	  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
  	}
  	function isConcurrentMode(object) {
  	  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
  	}
  	function isContextConsumer(object) {
  	  return typeOf(object) === REACT_CONTEXT_TYPE;
  	}
  	function isContextProvider(object) {
  	  return typeOf(object) === REACT_PROVIDER_TYPE;
  	}
  	function isElement(object) {
  	  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
  	}
  	function isForwardRef(object) {
  	  return typeOf(object) === REACT_FORWARD_REF_TYPE;
  	}
  	function isFragment(object) {
  	  return typeOf(object) === REACT_FRAGMENT_TYPE;
  	}
  	function isLazy(object) {
  	  return typeOf(object) === REACT_LAZY_TYPE;
  	}
  	function isMemo(object) {
  	  return typeOf(object) === REACT_MEMO_TYPE;
  	}
  	function isPortal(object) {
  	  return typeOf(object) === REACT_PORTAL_TYPE;
  	}
  	function isProfiler(object) {
  	  return typeOf(object) === REACT_PROFILER_TYPE;
  	}
  	function isStrictMode(object) {
  	  return typeOf(object) === REACT_STRICT_MODE_TYPE;
  	}
  	function isSuspense(object) {
  	  return typeOf(object) === REACT_SUSPENSE_TYPE;
  	}
  
  	exports.AsyncMode = AsyncMode;
  	exports.ConcurrentMode = ConcurrentMode;
  	exports.ContextConsumer = ContextConsumer;
  	exports.ContextProvider = ContextProvider;
  	exports.Element = Element;
  	exports.ForwardRef = ForwardRef;
  	exports.Fragment = Fragment;
  	exports.Lazy = Lazy;
  	exports.Memo = Memo;
  	exports.Portal = Portal;
  	exports.Profiler = Profiler;
  	exports.StrictMode = StrictMode;
  	exports.Suspense = Suspense;
  	exports.isAsyncMode = isAsyncMode;
  	exports.isConcurrentMode = isConcurrentMode;
  	exports.isContextConsumer = isContextConsumer;
  	exports.isContextProvider = isContextProvider;
  	exports.isElement = isElement;
  	exports.isForwardRef = isForwardRef;
  	exports.isFragment = isFragment;
  	exports.isLazy = isLazy;
  	exports.isMemo = isMemo;
  	exports.isPortal = isPortal;
  	exports.isProfiler = isProfiler;
  	exports.isStrictMode = isStrictMode;
  	exports.isSuspense = isSuspense;
  	exports.isValidElementType = isValidElementType;
  	exports.typeOf = typeOf;
  	  })();
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 23 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  	var ReactIs = __webpack_require__(20);
  	var assign = __webpack_require__(4);
  
  	var ReactPropTypesSecret = __webpack_require__(7);
  	var checkPropTypes = __webpack_require__(6);
  
  	var has = Function.call.bind(Object.prototype.hasOwnProperty);
  	var printWarning = function() {};
  
  	if (process.env.NODE_ENV !== 'production') {
  	  printWarning = function(text) {
  	    var message = 'Warning: ' + text;
  	    if (typeof console !== 'undefined') {
  	      console.error(message);
  	    }
  	    try {
  	      // --- Welcome to debugging React ---
  	      // This error was thrown as a convenience so that you can use this stack
  	      // to find the callsite that caused this warning to fire.
  	      throw new Error(message);
  	    } catch (x) {}
  	  };
  	}
  
  	function emptyFunctionThatReturnsNull() {
  	  return null;
  	}
  
  	module.exports = function(isValidElement, throwOnDirectAccess) {
  	  /* global Symbol */
  	  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
  	  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
  
  	  /**
  	   * Returns the iterator method function contained on the iterable object.
  	   *
  	   * Be sure to invoke the function with the iterable as context:
  	   *
  	   *     var iteratorFn = getIteratorFn(myIterable);
  	   *     if (iteratorFn) {
  	   *       var iterator = iteratorFn.call(myIterable);
  	   *       ...
  	   *     }
  	   *
  	   * @param {?object} maybeIterable
  	   * @return {?function}
  	   */
  	  function getIteratorFn(maybeIterable) {
  	    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
  	    if (typeof iteratorFn === 'function') {
  	      return iteratorFn;
  	    }
  	  }
  
  	  /**
  	   * Collection of methods that allow declaration and validation of props that are
  	   * supplied to React components. Example usage:
  	   *
  	   *   var Props = require('ReactPropTypes');
  	   *   var MyArticle = React.createClass({
  	   *     propTypes: {
  	   *       // An optional string prop named "description".
  	   *       description: Props.string,
  	   *
  	   *       // A required enum prop named "category".
  	   *       category: Props.oneOf(['News','Photos']).isRequired,
  	   *
  	   *       // A prop named "dialog" that requires an instance of Dialog.
  	   *       dialog: Props.instanceOf(Dialog).isRequired
  	   *     },
  	   *     render: function() { ... }
  	   *   });
  	   *
  	   * A more formal specification of how these methods are used:
  	   *
  	   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
  	   *   decl := ReactPropTypes.{type}(.isRequired)?
  	   *
  	   * Each and every declaration produces a function with the same signature. This
  	   * allows the creation of custom validation functions. For example:
  	   *
  	   *  var MyLink = React.createClass({
  	   *    propTypes: {
  	   *      // An optional string or URI prop named "href".
  	   *      href: function(props, propName, componentName) {
  	   *        var propValue = props[propName];
  	   *        if (propValue != null && typeof propValue !== 'string' &&
  	   *            !(propValue instanceof URI)) {
  	   *          return new Error(
  	   *            'Expected a string or an URI for ' + propName + ' in ' +
  	   *            componentName
  	   *          );
  	   *        }
  	   *      }
  	   *    },
  	   *    render: function() {...}
  	   *  });
  	   *
  	   * @internal
  	   */
  
  	  var ANONYMOUS = '<<anonymous>>';
  
  	  // Important!
  	  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
  	  var ReactPropTypes = {
  	    array: createPrimitiveTypeChecker('array'),
  	    bool: createPrimitiveTypeChecker('boolean'),
  	    func: createPrimitiveTypeChecker('function'),
  	    number: createPrimitiveTypeChecker('number'),
  	    object: createPrimitiveTypeChecker('object'),
  	    string: createPrimitiveTypeChecker('string'),
  	    symbol: createPrimitiveTypeChecker('symbol'),
  
  	    any: createAnyTypeChecker(),
  	    arrayOf: createArrayOfTypeChecker,
  	    element: createElementTypeChecker(),
  	    elementType: createElementTypeTypeChecker(),
  	    instanceOf: createInstanceTypeChecker,
  	    node: createNodeChecker(),
  	    objectOf: createObjectOfTypeChecker,
  	    oneOf: createEnumTypeChecker,
  	    oneOfType: createUnionTypeChecker,
  	    shape: createShapeTypeChecker,
  	    exact: createStrictShapeTypeChecker,
  	  };
  
  	  /**
  	   * inlined Object.is polyfill to avoid requiring consumers ship their own
  	   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
  	   */
  	  /*eslint-disable no-self-compare*/
  	  function is(x, y) {
  	    // SameValue algorithm
  	    if (x === y) {
  	      // Steps 1-5, 7-10
  	      // Steps 6.b-6.e: +0 != -0
  	      return x !== 0 || 1 / x === 1 / y;
  	    } else {
  	      // Step 6.a: NaN == NaN
  	      return x !== x && y !== y;
  	    }
  	  }
  	  /*eslint-enable no-self-compare*/
  
  	  /**
  	   * We use an Error-like object for backward compatibility as people may call
  	   * PropTypes directly and inspect their output. However, we don't use real
  	   * Errors anymore. We don't inspect their stack anyway, and creating them
  	   * is prohibitively expensive if they are created too often, such as what
  	   * happens in oneOfType() for any type before the one that matched.
  	   */
  	  function PropTypeError(message) {
  	    this.message = message;
  	    this.stack = '';
  	  }
  	  // Make `instanceof Error` still work for returned errors.
  	  PropTypeError.prototype = Error.prototype;
  
  	  function createChainableTypeChecker(validate) {
  	    if (process.env.NODE_ENV !== 'production') {
  	      var manualPropTypeCallCache = {};
  	      var manualPropTypeWarningCount = 0;
  	    }
  	    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
  	      componentName = componentName || ANONYMOUS;
  	      propFullName = propFullName || propName;
  
  	      if (secret !== ReactPropTypesSecret) {
  	        if (throwOnDirectAccess) {
  	          // New behavior only for users of `prop-types` package
  	          var err = new Error(
  	            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
  	            'Use `PropTypes.checkPropTypes()` to call them. ' +
  	            'Read more at http://fb.me/use-check-prop-types'
  	          );
  	          err.name = 'Invariant Violation';
  	          throw err;
  	        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {
  	          // Old behavior for people using React.PropTypes
  	          var cacheKey = componentName + ':' + propName;
  	          if (
  	            !manualPropTypeCallCache[cacheKey] &&
  	            // Avoid spamming the console because they are often not actionable except for lib authors
  	            manualPropTypeWarningCount < 3
  	          ) {
  	            printWarning(
  	              'You are manually calling a React.PropTypes validation ' +
  	              'function for the `' + propFullName + '` prop on `' + componentName  + '`. This is deprecated ' +
  	              'and will throw in the standalone `prop-types` package. ' +
  	              'You may be seeing this warning due to a third-party PropTypes ' +
  	              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
  	            );
  	            manualPropTypeCallCache[cacheKey] = true;
  	            manualPropTypeWarningCount++;
  	          }
  	        }
  	      }
  	      if (props[propName] == null) {
  	        if (isRequired) {
  	          if (props[propName] === null) {
  	            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
  	          }
  	          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
  	        }
  	        return null;
  	      } else {
  	        return validate(props, propName, componentName, location, propFullName);
  	      }
  	    }
  
  	    var chainedCheckType = checkType.bind(null, false);
  	    chainedCheckType.isRequired = checkType.bind(null, true);
  
  	    return chainedCheckType;
  	  }
  
  	  function createPrimitiveTypeChecker(expectedType) {
  	    function validate(props, propName, componentName, location, propFullName, secret) {
  	      var propValue = props[propName];
  	      var propType = getPropType(propValue);
  	      if (propType !== expectedType) {
  	        // `propValue` being instance of, say, date/regexp, pass the 'object'
  	        // check, but we can offer a more precise error message here rather than
  	        // 'of type `object`'.
  	        var preciseType = getPreciseType(propValue);
  
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createAnyTypeChecker() {
  	    return createChainableTypeChecker(emptyFunctionThatReturnsNull);
  	  }
  
  	  function createArrayOfTypeChecker(typeChecker) {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      if (typeof typeChecker !== 'function') {
  	        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
  	      }
  	      var propValue = props[propName];
  	      if (!Array.isArray(propValue)) {
  	        var propType = getPropType(propValue);
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
  	      }
  	      for (var i = 0; i < propValue.length; i++) {
  	        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
  	        if (error instanceof Error) {
  	          return error;
  	        }
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createElementTypeChecker() {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      var propValue = props[propName];
  	      if (!isValidElement(propValue)) {
  	        var propType = getPropType(propValue);
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createElementTypeTypeChecker() {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      var propValue = props[propName];
  	      if (!ReactIs.isValidElementType(propValue)) {
  	        var propType = getPropType(propValue);
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createInstanceTypeChecker(expectedClass) {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      if (!(props[propName] instanceof expectedClass)) {
  	        var expectedClassName = expectedClass.name || ANONYMOUS;
  	        var actualClassName = getClassName(props[propName]);
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createEnumTypeChecker(expectedValues) {
  	    if (!Array.isArray(expectedValues)) {
  	      if (process.env.NODE_ENV !== 'production') {
  	        if (arguments.length > 1) {
  	          printWarning(
  	            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
  	            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
  	          );
  	        } else {
  	          printWarning('Invalid argument supplied to oneOf, expected an array.');
  	        }
  	      }
  	      return emptyFunctionThatReturnsNull;
  	    }
  
  	    function validate(props, propName, componentName, location, propFullName) {
  	      var propValue = props[propName];
  	      for (var i = 0; i < expectedValues.length; i++) {
  	        if (is(propValue, expectedValues[i])) {
  	          return null;
  	        }
  	      }
  
  	      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
  	        var type = getPreciseType(value);
  	        if (type === 'symbol') {
  	          return String(value);
  	        }
  	        return value;
  	      });
  	      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createObjectOfTypeChecker(typeChecker) {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      if (typeof typeChecker !== 'function') {
  	        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
  	      }
  	      var propValue = props[propName];
  	      var propType = getPropType(propValue);
  	      if (propType !== 'object') {
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
  	      }
  	      for (var key in propValue) {
  	        if (has(propValue, key)) {
  	          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  	          if (error instanceof Error) {
  	            return error;
  	          }
  	        }
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createUnionTypeChecker(arrayOfTypeCheckers) {
  	    if (!Array.isArray(arrayOfTypeCheckers)) {
  	      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
  	      return emptyFunctionThatReturnsNull;
  	    }
  
  	    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  	      var checker = arrayOfTypeCheckers[i];
  	      if (typeof checker !== 'function') {
  	        printWarning(
  	          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
  	          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
  	        );
  	        return emptyFunctionThatReturnsNull;
  	      }
  	    }
  
  	    function validate(props, propName, componentName, location, propFullName) {
  	      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
  	        var checker = arrayOfTypeCheckers[i];
  	        if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {
  	          return null;
  	        }
  	      }
  
  	      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createNodeChecker() {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      if (!isNode(props[propName])) {
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createShapeTypeChecker(shapeTypes) {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      var propValue = props[propName];
  	      var propType = getPropType(propValue);
  	      if (propType !== 'object') {
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  	      }
  	      for (var key in shapeTypes) {
  	        var checker = shapeTypes[key];
  	        if (!checker) {
  	          continue;
  	        }
  	        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  	        if (error) {
  	          return error;
  	        }
  	      }
  	      return null;
  	    }
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function createStrictShapeTypeChecker(shapeTypes) {
  	    function validate(props, propName, componentName, location, propFullName) {
  	      var propValue = props[propName];
  	      var propType = getPropType(propValue);
  	      if (propType !== 'object') {
  	        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
  	      }
  	      // We need to check all keys in case some are required but missing from
  	      // props.
  	      var allKeys = assign({}, props[propName], shapeTypes);
  	      for (var key in allKeys) {
  	        var checker = shapeTypes[key];
  	        if (!checker) {
  	          return new PropTypeError(
  	            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
  	            '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
  	            '\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')
  	          );
  	        }
  	        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
  	        if (error) {
  	          return error;
  	        }
  	      }
  	      return null;
  	    }
  
  	    return createChainableTypeChecker(validate);
  	  }
  
  	  function isNode(propValue) {
  	    switch (typeof propValue) {
  	      case 'number':
  	      case 'string':
  	      case 'undefined':
  	        return true;
  	      case 'boolean':
  	        return !propValue;
  	      case 'object':
  	        if (Array.isArray(propValue)) {
  	          return propValue.every(isNode);
  	        }
  	        if (propValue === null || isValidElement(propValue)) {
  	          return true;
  	        }
  
  	        var iteratorFn = getIteratorFn(propValue);
  	        if (iteratorFn) {
  	          var iterator = iteratorFn.call(propValue);
  	          var step;
  	          if (iteratorFn !== propValue.entries) {
  	            while (!(step = iterator.next()).done) {
  	              if (!isNode(step.value)) {
  	                return false;
  	              }
  	            }
  	          } else {
  	            // Iterator will provide entry [k,v] tuples rather than values.
  	            while (!(step = iterator.next()).done) {
  	              var entry = step.value;
  	              if (entry) {
  	                if (!isNode(entry[1])) {
  	                  return false;
  	                }
  	              }
  	            }
  	          }
  	        } else {
  	          return false;
  	        }
  
  	        return true;
  	      default:
  	        return false;
  	    }
  	  }
  
  	  function isSymbol(propType, propValue) {
  	    // Native Symbol.
  	    if (propType === 'symbol') {
  	      return true;
  	    }
  
  	    // falsy value can't be a Symbol
  	    if (!propValue) {
  	      return false;
  	    }
  
  	    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
  	    if (propValue['@@toStringTag'] === 'Symbol') {
  	      return true;
  	    }
  
  	    // Fallback for non-spec compliant Symbols which are polyfilled.
  	    if (typeof Symbol === 'function' && propValue instanceof Symbol) {
  	      return true;
  	    }
  
  	    return false;
  	  }
  
  	  // Equivalent of `typeof` but with special handling for array and regexp.
  	  function getPropType(propValue) {
  	    var propType = typeof propValue;
  	    if (Array.isArray(propValue)) {
  	      return 'array';
  	    }
  	    if (propValue instanceof RegExp) {
  	      // Old webkits (at least until Android 4.0) return 'function' rather than
  	      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
  	      // passes PropTypes.object.
  	      return 'object';
  	    }
  	    if (isSymbol(propType, propValue)) {
  	      return 'symbol';
  	    }
  	    return propType;
  	  }
  
  	  // This handles more types than `getPropType`. Only used for error messages.
  	  // See `createPrimitiveTypeChecker`.
  	  function getPreciseType(propValue) {
  	    if (typeof propValue === 'undefined' || propValue === null) {
  	      return '' + propValue;
  	    }
  	    var propType = getPropType(propValue);
  	    if (propType === 'object') {
  	      if (propValue instanceof Date) {
  	        return 'date';
  	      } else if (propValue instanceof RegExp) {
  	        return 'regexp';
  	      }
  	    }
  	    return propType;
  	  }
  
  	  // Returns a string that is postfixed to a warning about an invalid type.
  	  // For example, "undefined" or "of type array"
  	  function getPostfixForTypeWarning(value) {
  	    var type = getPreciseType(value);
  	    switch (type) {
  	      case 'array':
  	      case 'object':
  	        return 'an ' + type;
  	      case 'boolean':
  	      case 'date':
  	      case 'regexp':
  	        return 'a ' + type;
  	      default:
  	        return type;
  	    }
  	  }
  
  	  // Returns class name of the object, if any.
  	  function getClassName(propValue) {
  	    if (!propValue.constructor || !propValue.constructor.name) {
  	      return ANONYMOUS;
  	    }
  	    return propValue.constructor.name;
  	  }
  
  	  ReactPropTypes.checkPropTypes = checkPropTypes;
  	  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
  	  ReactPropTypes.PropTypes = ReactPropTypes;
  
  	  return ReactPropTypes;
  	};
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 24 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/**
  	 * Copyright (c) 2013-present, Facebook, Inc.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  	var ReactPropTypesSecret = __webpack_require__(7);
  
  	function emptyFunction() {}
  	function emptyFunctionWithReset() {}
  	emptyFunctionWithReset.resetWarningCache = emptyFunction;
  
  	module.exports = function() {
  	  function shim(props, propName, componentName, location, propFullName, secret) {
  	    if (secret === ReactPropTypesSecret) {
  	      // It is still safe when called from React.
  	      return;
  	    }
  	    var err = new Error(
  	      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
  	      'Use PropTypes.checkPropTypes() to call them. ' +
  	      'Read more at http://fb.me/use-check-prop-types'
  	    );
  	    err.name = 'Invariant Violation';
  	    throw err;
  	  };
  	  shim.isRequired = shim;
  	  function getShim() {
  	    return shim;
  	  };
  	  // Important!
  	  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
  	  var ReactPropTypes = {
  	    array: shim,
  	    bool: shim,
  	    func: shim,
  	    number: shim,
  	    object: shim,
  	    string: shim,
  	    symbol: shim,
  
  	    any: shim,
  	    arrayOf: getShim,
  	    element: shim,
  	    elementType: shim,
  	    instanceOf: getShim,
  	    node: shim,
  	    objectOf: getShim,
  	    oneOf: getShim,
  	    oneOfType: getShim,
  	    shape: getShim,
  	    exact: getShim,
  
  	    checkPropTypes: emptyFunctionWithReset,
  	    resetWarningCache: emptyFunction
  	  };
  
  	  ReactPropTypes.PropTypes = ReactPropTypes;
  
  	  return ReactPropTypes;
  	};
  
  
  /***/ }),
  /* 25 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {'use strict';
  
  	if (process.env.NODE_ENV === 'production') {
  	  module.exports = __webpack_require__(26);
  	} else {
  	  module.exports = __webpack_require__(27);
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ }),
  /* 26 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/** @license React v16.14.0
  	 * react-dom-server.browser.production.min.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';var k=__webpack_require__(4),l=__webpack_require__(1);function q(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
  	var t="function"===typeof Symbol&&Symbol.for,aa=t?Symbol.for("react.portal"):60106,u=t?Symbol.for("react.fragment"):60107,ba=t?Symbol.for("react.strict_mode"):60108,ca=t?Symbol.for("react.profiler"):60114,v=t?Symbol.for("react.provider"):60109,da=t?Symbol.for("react.context"):60110,ea=t?Symbol.for("react.concurrent_mode"):60111,fa=t?Symbol.for("react.forward_ref"):60112,B=t?Symbol.for("react.suspense"):60113,ha=t?Symbol.for("react.suspense_list"):60120,ia=t?Symbol.for("react.memo"):60115,ja=t?Symbol.for("react.lazy"):
  	60116,ka=t?Symbol.for("react.block"):60121,la=t?Symbol.for("react.fundamental"):60117,ma=t?Symbol.for("react.scope"):60119;function na(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(c){0===a._status&&(c=c.default,a._status=1,a._result=c)},function(c){0===a._status&&(a._status=2,a._result=c)})}}
  	function C(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case u:return"Fragment";case aa:return"Portal";case ca:return"Profiler";case ba:return"StrictMode";case B:return"Suspense";case ha:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case da:return"Context.Consumer";case v:return"Context.Provider";case fa:var b=a.render;b=b.displayName||b.name||"";return a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");
  	case ia:return C(a.type);case ka:return C(a.render);case ja:if(a=1===a._status?a._result:null)return C(a)}return null}var D=l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;D.hasOwnProperty("ReactCurrentDispatcher")||(D.ReactCurrentDispatcher={current:null});D.hasOwnProperty("ReactCurrentBatchConfig")||(D.ReactCurrentBatchConfig={suspense:null});var oa={};function E(a,b){for(var c=a._threadCount|0;c<=b;c++)a[c]=a._currentValue2,a._threadCount=c+1}
  	function pa(a,b,c,d){if(d&&(d=a.contextType,"object"===typeof d&&null!==d))return E(d,c),d[c];if(a=a.contextTypes){c={};for(var f in a)c[f]=b[f];b=c}else b=oa;return b}for(var F=new Uint16Array(16),H=0;15>H;H++)F[H]=H+1;F[15]=0;
  	var qa=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ra=Object.prototype.hasOwnProperty,sa={},ta={};
  	function ua(a){if(ra.call(ta,a))return!0;if(ra.call(sa,a))return!1;if(qa.test(a))return ta[a]=!0;sa[a]=!0;return!1}function va(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case "function":case "symbol":return!0;case "boolean":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return"data-"!==a&&"aria-"!==a;default:return!1}}
  	function wa(a,b,c,d){if(null===b||"undefined"===typeof b||va(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function J(a,b,c,d,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=g}var K={};
  	"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){K[a]=new J(a,0,!1,a,null,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];K[b]=new J(b,1,!1,a[1],null,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){K[a]=new J(a,2,!1,a.toLowerCase(),null,!1)});
  	["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){K[a]=new J(a,2,!1,a,null,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){K[a]=new J(a,3,!1,a.toLowerCase(),null,!1)});
  	["checked","multiple","muted","selected"].forEach(function(a){K[a]=new J(a,3,!0,a,null,!1)});["capture","download"].forEach(function(a){K[a]=new J(a,4,!1,a,null,!1)});["cols","rows","size","span"].forEach(function(a){K[a]=new J(a,6,!1,a,null,!1)});["rowSpan","start"].forEach(function(a){K[a]=new J(a,5,!1,a.toLowerCase(),null,!1)});var L=/[\-:]([a-z])/g;function M(a){return a[1].toUpperCase()}
  	"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(L,
  	M);K[b]=new J(b,1,!1,a,null,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,"http://www.w3.org/1999/xlink",!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1)});["tabIndex","crossOrigin"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!1)});
  	K.xlinkHref=new J("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0);["src","href","action","formAction"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!0)});var xa=/["'&<>]/;
  	function N(a){if("boolean"===typeof a||"number"===typeof a)return""+a;a=""+a;var b=xa.exec(a);if(b){var c="",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b="&quot;";break;case 38:b="&amp;";break;case 39:b="&#x27;";break;case 60:b="&lt;";break;case 62:b="&gt;";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}
  	function ya(a,b){var c=K.hasOwnProperty(a)?K[a]:null;var d;if(d="style"!==a)d=null!==c?0===c.type:!(2<a.length)||"o"!==a[0]&&"O"!==a[0]||"n"!==a[1]&&"N"!==a[1]?!1:!0;if(d||wa(a,b,c,!1))return"";if(null!==c){a=c.attributeName;d=c.type;if(3===d||4===d&&!0===b)return a+'=""';c.sanitizeURL&&(b=""+b);return a+'="'+(N(b)+'"')}return ua(a)?a+'="'+(N(b)+'"'):""}function za(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}
  	var Aa="function"===typeof Object.is?Object.is:za,O=null,P=null,Q=null,R=!1,S=!1,U=null,V=0;function W(){if(null===O)throw Error(q(321));return O}function Ba(){if(0<V)throw Error(q(312));return{memoizedState:null,queue:null,next:null}}function Ca(){null===Q?null===P?(R=!1,P=Q=Ba()):(R=!0,Q=P):null===Q.next?(R=!1,Q=Q.next=Ba()):(R=!0,Q=Q.next);return Q}function Da(a,b,c,d){for(;S;)S=!1,V+=1,Q=null,c=a(b,d);P=O=null;V=0;Q=U=null;return c}function Ea(a,b){return"function"===typeof b?b(a):b}
  	function Fa(a,b,c){O=W();Q=Ca();if(R){var d=Q.queue;b=d.dispatch;if(null!==U&&(c=U.get(d),void 0!==c)){U.delete(d);d=Q.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);Q.memoizedState=d;return[d,b]}return[Q.memoizedState,b]}a=a===Ea?"function"===typeof b?b():b:void 0!==c?c(b):b;Q.memoizedState=a;a=Q.queue={last:null,dispatch:null};a=a.dispatch=Ga.bind(null,O,a);return[Q.memoizedState,a]}
  	function Ga(a,b,c){if(!(25>V))throw Error(q(301));if(a===O)if(S=!0,a={action:c,next:null},null===U&&(U=new Map),c=U.get(b),void 0===c)U.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function Ha(){}
  	var X=0,Ia={readContext:function(a){var b=X;E(a,b);return a[b]},useContext:function(a){W();var b=X;E(a,b);return a[b]},useMemo:function(a,b){O=W();Q=Ca();b=void 0===b?null:b;if(null!==Q){var c=Q.memoizedState;if(null!==c&&null!==b){a:{var d=c[1];if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!Aa(b[f],d[f])){d=!1;break a}d=!0}}if(d)return c[0]}}a=a();Q.memoizedState=[a,b];return a},useReducer:Fa,useRef:function(a){O=W();Q=Ca();var b=Q.memoizedState;return null===b?(a={current:a},Q.memoizedState=
  	a):b},useState:function(a){return Fa(Ea,a)},useLayoutEffect:function(){},useCallback:function(a){return a},useImperativeHandle:Ha,useEffect:Ha,useDebugValue:Ha,useResponder:function(a,b){return{props:b,responder:a}},useDeferredValue:function(a){W();return a},useTransition:function(){W();return[function(a){a()},!1]}},Ja={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};
  	function Ka(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}
  	var La={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Ma=k({menuitem:!0},La),Y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,
  	gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Na=["Webkit","ms","Moz","O"];Object.keys(Y).forEach(function(a){Na.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Y[b]=Y[a]})});
  	var Oa=/([A-Z])/g,Pa=/^ms-/,Z=l.Children.toArray,Qa=D.ReactCurrentDispatcher,Ra={listing:!0,pre:!0,textarea:!0},Sa=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Ta={},Ua={};function Va(a){if(void 0===a||null===a)return a;var b="";l.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Wa=Object.prototype.hasOwnProperty,Xa={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null,suppressHydrationWarning:null};function Ya(a,b){if(void 0===a)throw Error(q(152,C(b)||"Component"));}
  	function Za(a,b,c){function d(d,g){var e=g.prototype&&g.prototype.isReactComponent,f=pa(g,b,c,e),x=[],h=!1,m={isMounted:function(){return!1},enqueueForceUpdate:function(){if(null===x)return null},enqueueReplaceState:function(a,c){h=!0;x=[c]},enqueueSetState:function(a,c){if(null===x)return null;x.push(c)}};if(e){if(e=new g(d.props,f,m),"function"===typeof g.getDerivedStateFromProps){var w=g.getDerivedStateFromProps.call(null,d.props,e.state);null!=w&&(e.state=k({},e.state,w))}}else if(O={},e=g(d.props,
  	f,m),e=Da(g,d.props,e,f),null==e||null==e.render){a=e;Ya(a,g);return}e.props=d.props;e.context=f;e.updater=m;m=e.state;void 0===m&&(e.state=m=null);if("function"===typeof e.UNSAFE_componentWillMount||"function"===typeof e.componentWillMount)if("function"===typeof e.componentWillMount&&"function"!==typeof g.getDerivedStateFromProps&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&"function"!==typeof g.getDerivedStateFromProps&&e.UNSAFE_componentWillMount(),x.length){m=x;var r=
  	h;x=null;h=!1;if(r&&1===m.length)e.state=m[0];else{w=r?m[0]:e.state;var y=!0;for(r=r?1:0;r<m.length;r++){var p=m[r];p="function"===typeof p?p.call(e,w,d.props,f):p;null!=p&&(y?(y=!1,w=k({},w,p)):k(w,p))}e.state=w}}else x=null;a=e.render();Ya(a,g);if("function"===typeof e.getChildContext&&(d=g.childContextTypes,"object"===typeof d)){var A=e.getChildContext();for(var T in A)if(!(T in d))throw Error(q(108,C(g)||"Unknown",T));}A&&(b=k({},b,A))}for(;l.isValidElement(a);){var f=a,g=f.type;if("function"!==
  	typeof g)break;d(f,g)}return{child:a,context:b}}
  	var $a=function(){function a(a,b){l.isValidElement(a)?a.type!==u?a=[a]:(a=a.props.children,a=l.isValidElement(a)?[a]:Z(a)):a=Z(a);a={type:null,domNamespace:Ja.html,children:a,childIndex:0,context:oa,footer:""};var c=F[0];if(0===c){var g=F;c=g.length;var d=2*c;if(!(65536>=d))throw Error(q(304));var h=new Uint16Array(d);h.set(g);F=h;F[0]=c+1;for(g=c;g<d-1;g++)F[g]=g+1;F[d-1]=0}else F[0]=F[c];this.threadID=c;this.stack=[a];this.exhausted=!1;this.currentSelectValue=null;this.previousWasTextNode=!1;this.makeStaticMarkup=
  	b;this.suspenseDepth=0;this.contextIndex=-1;this.contextStack=[];this.contextValueStack=[]}var b=a.prototype;b.destroy=function(){if(!this.exhausted){this.exhausted=!0;this.clearProviders();var a=this.threadID;F[a]=F[0];F[0]=a}};b.pushProvider=function(a){var c=++this.contextIndex,b=a.type._context,g=this.threadID;E(b,g);var x=b[g];this.contextStack[c]=b;this.contextValueStack[c]=x;b[g]=a.props.value};b.popProvider=function(){var a=this.contextIndex,b=this.contextStack[a],f=this.contextValueStack[a];
  	this.contextStack[a]=null;this.contextValueStack[a]=null;this.contextIndex--;b[this.threadID]=f};b.clearProviders=function(){for(var a=this.contextIndex;0<=a;a--)this.contextStack[a][this.threadID]=this.contextValueStack[a]};b.read=function(a){if(this.exhausted)return null;var b=X;X=this.threadID;var c=Qa.current;Qa.current=Ia;try{for(var g=[""],x=!1;g[0].length<a;){if(0===this.stack.length){this.exhausted=!0;var h=this.threadID;F[h]=F[0];F[0]=h;break}var e=this.stack[this.stack.length-1];if(x||e.childIndex>=
  	e.children.length){var I=e.footer;""!==I&&(this.previousWasTextNode=!1);this.stack.pop();if("select"===e.type)this.currentSelectValue=null;else if(null!=e.type&&null!=e.type.type&&e.type.type.$$typeof===v)this.popProvider(e.type);else if(e.type===B){this.suspenseDepth--;var G=g.pop();if(x){x=!1;var n=e.fallbackFrame;if(!n)throw Error(q(303));this.stack.push(n);g[this.suspenseDepth]+="\x3c!--$!--\x3e";continue}else g[this.suspenseDepth]+=G}g[this.suspenseDepth]+=I}else{var m=e.children[e.childIndex++],
  	w="";try{w+=this.render(m,e.context,e.domNamespace)}catch(r){if(null!=r&&"function"===typeof r.then)throw Error(q(294));throw r;}finally{}g.length<=this.suspenseDepth&&g.push("");g[this.suspenseDepth]+=w}}return g[0]}finally{Qa.current=c,X=b}};b.render=function(a,b,f){if("string"===typeof a||"number"===typeof a){f=""+a;if(""===f)return"";if(this.makeStaticMarkup)return N(f);if(this.previousWasTextNode)return"\x3c!-- --\x3e"+N(f);this.previousWasTextNode=!0;return N(f)}b=Za(a,b,this.threadID);a=b.child;
  	b=b.context;if(null===a||!1===a)return"";if(!l.isValidElement(a)){if(null!=a&&null!=a.$$typeof){f=a.$$typeof;if(f===aa)throw Error(q(257));throw Error(q(258,f.toString()));}a=Z(a);this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""});return""}var c=a.type;if("string"===typeof c)return this.renderDOM(a,b,f);switch(c){case ba:case ea:case ca:case ha:case u:return a=Z(a.props.children),this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""}),
  	"";case B:throw Error(q(294));}if("object"===typeof c&&null!==c)switch(c.$$typeof){case fa:O={};var d=c.render(a.props,a.ref);d=Da(c.render,a.props,d,a.ref);d=Z(d);this.stack.push({type:null,domNamespace:f,children:d,childIndex:0,context:b,footer:""});return"";case ia:return a=[l.createElement(c.type,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""}),"";case v:return c=Z(a.props.children),f={type:a,domNamespace:f,children:c,childIndex:0,
  	context:b,footer:""},this.pushProvider(a),this.stack.push(f),"";case da:c=a.type;d=a.props;var h=this.threadID;E(c,h);c=Z(d.children(c[h]));this.stack.push({type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:""});return"";case la:throw Error(q(338));case ja:switch(c=a.type,na(c),c._status){case 1:return a=[l.createElement(c._result,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""}),"";case 2:throw c._result;default:throw Error(q(295));
  	}case ma:throw Error(q(343));}throw Error(q(130,null==c?c:typeof c,""));};b.renderDOM=function(a,b,f){var c=a.type.toLowerCase();f===Ja.html&&Ka(c);if(!Ta.hasOwnProperty(c)){if(!Sa.test(c))throw Error(q(65,c));Ta[c]=!0}var d=a.props;if("input"===c)d=k({type:void 0},d,{defaultChecked:void 0,defaultValue:void 0,value:null!=d.value?d.value:d.defaultValue,checked:null!=d.checked?d.checked:d.defaultChecked});else if("textarea"===c){var h=d.value;if(null==h){h=d.defaultValue;var e=d.children;if(null!=e){if(null!=
  	h)throw Error(q(92));if(Array.isArray(e)){if(!(1>=e.length))throw Error(q(93));e=e[0]}h=""+e}null==h&&(h="")}d=k({},d,{value:void 0,children:""+h})}else if("select"===c)this.currentSelectValue=null!=d.value?d.value:d.defaultValue,d=k({},d,{value:void 0});else if("option"===c){e=this.currentSelectValue;var I=Va(d.children);if(null!=e){var G=null!=d.value?d.value+"":I;h=!1;if(Array.isArray(e))for(var n=0;n<e.length;n++){if(""+e[n]===G){h=!0;break}}else h=""+e===G;d=k({selected:void 0,children:void 0},
  	d,{selected:h,children:I})}}if(h=d){if(Ma[c]&&(null!=h.children||null!=h.dangerouslySetInnerHTML))throw Error(q(137,c,""));if(null!=h.dangerouslySetInnerHTML){if(null!=h.children)throw Error(q(60));if(!("object"===typeof h.dangerouslySetInnerHTML&&"__html"in h.dangerouslySetInnerHTML))throw Error(q(61));}if(null!=h.style&&"object"!==typeof h.style)throw Error(q(62,""));}h=d;e=this.makeStaticMarkup;I=1===this.stack.length;G="<"+a.type;for(z in h)if(Wa.call(h,z)){var m=h[z];if(null!=m){if("style"===
  	z){n=void 0;var w="",r="";for(n in m)if(m.hasOwnProperty(n)){var y=0===n.indexOf("--"),p=m[n];if(null!=p){if(y)var A=n;else if(A=n,Ua.hasOwnProperty(A))A=Ua[A];else{var T=A.replace(Oa,"-$1").toLowerCase().replace(Pa,"-ms-");A=Ua[A]=T}w+=r+A+":";r=n;y=null==p||"boolean"===typeof p||""===p?"":y||"number"!==typeof p||0===p||Y.hasOwnProperty(r)&&Y[r]?(""+p).trim():p+"px";w+=y;r=";"}}m=w||null}n=null;b:if(y=c,p=h,-1===y.indexOf("-"))y="string"===typeof p.is;else switch(y){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":y=
  	!1;break b;default:y=!0}y?Xa.hasOwnProperty(z)||(n=z,n=ua(n)&&null!=m?n+'="'+(N(m)+'"'):""):n=ya(z,m);n&&(G+=" "+n)}}e||I&&(G+=' data-reactroot=""');var z=G;h="";La.hasOwnProperty(c)?z+="/>":(z+=">",h="</"+a.type+">");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,"string"===typeof e||"number"===typeof e){e=N(e);break a}e=null}null!=e?(d=[],Ra.hasOwnProperty(c)&&"\n"===e.charAt(0)&&(z+="\n"),z+=e):d=Z(d.children);a=a.type;f=null==f||"http://www.w3.org/1999/xhtml"===
  	f?Ka(a):"http://www.w3.org/2000/svg"===f&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":f;this.stack.push({domNamespace:f,type:c,children:d,childIndex:0,context:b,footer:h});this.previousWasTextNode=!1;return z};return a}(),ab={renderToString:function(a){a=new $a(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new $a(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){throw Error(q(207));},renderToStaticNodeStream:function(){throw Error(q(208));
  	},version:"16.14.0"};module.exports=ab.default||ab;
  
  
  /***/ }),
  /* 27 */
  /***/ (function(module, exports, __webpack_require__) {
  
  	/* WEBPACK VAR INJECTION */(function(process) {/** @license React v16.14.0
  	 * react-dom-server.browser.development.js
  	 *
  	 * Copyright (c) Facebook, Inc. and its affiliates.
  	 *
  	 * This source code is licensed under the MIT license found in the
  	 * LICENSE file in the root directory of this source tree.
  	 */
  
  	'use strict';
  
  
  
  	if (process.env.NODE_ENV !== "production") {
  	  (function() {
  	'use strict';
  
  	var React = __webpack_require__(1);
  	var _assign = __webpack_require__(4);
  	var checkPropTypes = __webpack_require__(6);
  
  	// Do not require this module directly! Use normal `invariant` calls with
  	// template literal strings. The messages will be replaced with error codes
  	// during build.
  	function formatProdErrorMessage(code) {
  	  var url = 'https://reactjs.org/docs/error-decoder.html?invariant=' + code;
  
  	  for (var i = 1; i < arguments.length; i++) {
  	    url += '&args[]=' + encodeURIComponent(arguments[i]);
  	  }
  
  	  return "Minified React error #" + code + "; visit " + url + " for the full message or " + 'use the non-minified dev environment for full errors and additional ' + 'helpful warnings.';
  	}
  
  	var ReactVersion = '16.14.0';
  
  	var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.
  	// Current owner and dispatcher used to share the same ref,
  	// but PR #14548 split them out to better support the react-debug-tools package.
  
  	if (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {
  	  ReactSharedInternals.ReactCurrentDispatcher = {
  	    current: null
  	  };
  	}
  
  	if (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {
  	  ReactSharedInternals.ReactCurrentBatchConfig = {
  	    suspense: null
  	  };
  	}
  
  	// by calls to these methods by a Babel plugin.
  	//
  	// In PROD (or in packages without access to React internals),
  	// they are left as they are instead.
  
  	function warn(format) {
  	  {
  	    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  	      args[_key - 1] = arguments[_key];
  	    }
  
  	    printWarning('warn', format, args);
  	  }
  	}
  	function error(format) {
  	  {
  	    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
  	      args[_key2 - 1] = arguments[_key2];
  	    }
  
  	    printWarning('error', format, args);
  	  }
  	}
  
  	function printWarning(level, format, args) {
  	  // When changing this logic, you might want to also
  	  // update consoleWithStackDev.www.js as well.
  	  {
  	    var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\n    in') === 0;
  
  	    if (!hasExistingStack) {
  	      var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
  	      var stack = ReactDebugCurrentFrame.getStackAddendum();
  
  	      if (stack !== '') {
  	        format += '%s';
  	        args = args.concat([stack]);
  	      }
  	    }
  
  	    var argsWithFormat = args.map(function (item) {
  	      return '' + item;
  	    }); // Careful: RN currently depends on this prefix
  
  	    argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
  	    // breaks IE9: https://github.com/facebook/react/issues/13610
  	    // eslint-disable-next-line react-internal/no-production-logging
  
  	    Function.prototype.apply.call(console[level], console, argsWithFormat);
  
  	    try {
  	      // --- Welcome to debugging React ---
  	      // This error was thrown as a convenience so that you can use this stack
  	      // to find the callsite that caused this warning to fire.
  	      var argIndex = 0;
  	      var message = 'Warning: ' + format.replace(/%s/g, function () {
  	        return args[argIndex++];
  	      });
  	      throw new Error(message);
  	    } catch (x) {}
  	  }
  	}
  
  	// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
  	// nor polyfill, then a plain number is used for performance.
  	var hasSymbol = typeof Symbol === 'function' && Symbol.for;
  	var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
  	var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
  	var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
  	var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
  	var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
  	var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
  	var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
  	var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
  	var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
  	var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
  	var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
  	var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
  	var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
  	var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
  	var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
  
  	var Uninitialized = -1;
  	var Pending = 0;
  	var Resolved = 1;
  	var Rejected = 2;
  	function refineResolvedLazyComponent(lazyComponent) {
  	  return lazyComponent._status === Resolved ? lazyComponent._result : null;
  	}
  	function initializeLazyComponentType(lazyComponent) {
  	  if (lazyComponent._status === Uninitialized) {
  	    lazyComponent._status = Pending;
  	    var ctor = lazyComponent._ctor;
  	    var thenable = ctor();
  	    lazyComponent._result = thenable;
  	    thenable.then(function (moduleObject) {
  	      if (lazyComponent._status === Pending) {
  	        var defaultExport = moduleObject.default;
  
  	        {
  	          if (defaultExport === undefined) {
  	            error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\n\nYour code should look like: \n  ' + "const MyComponent = lazy(() => import('./MyComponent'))", moduleObject);
  	          }
  	        }
  
  	        lazyComponent._status = Resolved;
  	        lazyComponent._result = defaultExport;
  	      }
  	    }, function (error) {
  	      if (lazyComponent._status === Pending) {
  	        lazyComponent._status = Rejected;
  	        lazyComponent._result = error;
  	      }
  	    });
  	  }
  	}
  
  	function getWrappedName(outerType, innerType, wrapperName) {
  	  var functionName = innerType.displayName || innerType.name || '';
  	  return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
  	}
  
  	function getComponentName(type) {
  	  if (type == null) {
  	    // Host root, text node or just invalid type.
  	    return null;
  	  }
  
  	  {
  	    if (typeof type.tag === 'number') {
  	      error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');
  	    }
  	  }
  
  	  if (typeof type === 'function') {
  	    return type.displayName || type.name || null;
  	  }
  
  	  if (typeof type === 'string') {
  	    return type;
  	  }
  
  	  switch (type) {
  	    case REACT_FRAGMENT_TYPE:
  	      return 'Fragment';
  
  	    case REACT_PORTAL_TYPE:
  	      return 'Portal';
  
  	    case REACT_PROFILER_TYPE:
  	      return "Profiler";
  
  	    case REACT_STRICT_MODE_TYPE:
  	      return 'StrictMode';
  
  	    case REACT_SUSPENSE_TYPE:
  	      return 'Suspense';
  
  	    case REACT_SUSPENSE_LIST_TYPE:
  	      return 'SuspenseList';
  	  }
  
  	  if (typeof type === 'object') {
  	    switch (type.$$typeof) {
  	      case REACT_CONTEXT_TYPE:
  	        return 'Context.Consumer';
  
  	      case REACT_PROVIDER_TYPE:
  	        return 'Context.Provider';
  
  	      case REACT_FORWARD_REF_TYPE:
  	        return getWrappedName(type, type.render, 'ForwardRef');
  
  	      case REACT_MEMO_TYPE:
  	        return getComponentName(type.type);
  
  	      case REACT_BLOCK_TYPE:
  	        return getComponentName(type.render);
  
  	      case REACT_LAZY_TYPE:
  	        {
  	          var thenable = type;
  	          var resolvedThenable = refineResolvedLazyComponent(thenable);
  
  	          if (resolvedThenable) {
  	            return getComponentName(resolvedThenable);
  	          }
  
  	          break;
  	        }
  	    }
  	  }
  
  	  return null;
  	}
  
  	var BEFORE_SLASH_RE = /^(.*)[\\\/]/;
  	function describeComponentFrame (name, source, ownerName) {
  	  var sourceInfo = '';
  
  	  if (source) {
  	    var path = source.fileName;
  	    var fileName = path.replace(BEFORE_SLASH_RE, '');
  
  	    {
  	      // In DEV, include code for a common special case:
  	      // prefer "folder/index.js" instead of just "index.js".
  	      if (/^index\./.test(fileName)) {
  	        var match = path.match(BEFORE_SLASH_RE);
  
  	        if (match) {
  	          var pathBeforeSlash = match[1];
  
  	          if (pathBeforeSlash) {
  	            var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');
  	            fileName = folderName + '/' + fileName;
  	          }
  	        }
  	      }
  	    }
  
  	    sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';
  	  } else if (ownerName) {
  	    sourceInfo = ' (created by ' + ownerName + ')';
  	  }
  
  	  return '\n    in ' + (name || 'Unknown') + sourceInfo;
  	}
  
  	var enableSuspenseServerRenderer = false;
  
  	var enableDeprecatedFlareAPI = false; // Experimental Host Component support.
  
  	var ReactDebugCurrentFrame;
  	var didWarnAboutInvalidateContextType;
  
  	{
  	  ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
  	  didWarnAboutInvalidateContextType = new Set();
  	}
  
  	var emptyObject = {};
  
  	{
  	  Object.freeze(emptyObject);
  	}
  
  	function maskContext(type, context) {
  	  var contextTypes = type.contextTypes;
  
  	  if (!contextTypes) {
  	    return emptyObject;
  	  }
  
  	  var maskedContext = {};
  
  	  for (var contextName in contextTypes) {
  	    maskedContext[contextName] = context[contextName];
  	  }
  
  	  return maskedContext;
  	}
  
  	function checkContextTypes(typeSpecs, values, location) {
  	  {
  	    checkPropTypes(typeSpecs, values, location, 'Component', ReactDebugCurrentFrame.getCurrentStack);
  	  }
  	}
  
  	function validateContextBounds(context, threadID) {
  	  // If we don't have enough slots in this context to store this threadID,
  	  // fill it in without leaving any holes to ensure that the VM optimizes
  	  // this as non-holey index properties.
  	  // (Note: If `react` package is < 16.6, _threadCount is undefined.)
  	  for (var i = context._threadCount | 0; i <= threadID; i++) {
  	    // We assume that this is the same as the defaultValue which might not be
  	    // true if we're rendering inside a secondary renderer but they are
  	    // secondary because these use cases are very rare.
  	    context[i] = context._currentValue2;
  	    context._threadCount = i + 1;
  	  }
  	}
  	function processContext(type, context, threadID, isClass) {
  	  if (isClass) {
  	    var contextType = type.contextType;
  
  	    {
  	      if ('contextType' in type) {
  	        var isValid = // Allow null for conditional declaration
  	        contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>
  
  	        if (!isValid && !didWarnAboutInvalidateContextType.has(type)) {
  	          didWarnAboutInvalidateContextType.add(type);
  	          var addendum = '';
  
  	          if (contextType === undefined) {
  	            addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';
  	          } else if (typeof contextType !== 'object') {
  	            addendum = ' However, it is set to a ' + typeof contextType + '.';
  	          } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {
  	            addendum = ' Did you accidentally pass the Context.Provider instead?';
  	          } else if (contextType._context !== undefined) {
  	            // <Context.Consumer>
  	            addendum = ' Did you accidentally pass the Context.Consumer instead?';
  	          } else {
  	            addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';
  	          }
  
  	          error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(type) || 'Component', addendum);
  	        }
  	      }
  	    }
  
  	    if (typeof contextType === 'object' && contextType !== null) {
  	      validateContextBounds(contextType, threadID);
  	      return contextType[threadID];
  	    }
  
  	    {
  	      var maskedContext = maskContext(type, context);
  
  	      {
  	        if (type.contextTypes) {
  	          checkContextTypes(type.contextTypes, maskedContext, 'context');
  	        }
  	      }
  
  	      return maskedContext;
  	    }
  	  } else {
  	    {
  	      var _maskedContext = maskContext(type, context);
  
  	      {
  	        if (type.contextTypes) {
  	          checkContextTypes(type.contextTypes, _maskedContext, 'context');
  	        }
  	      }
  
  	      return _maskedContext;
  	    }
  	  }
  	}
  
  	var nextAvailableThreadIDs = new Uint16Array(16);
  
  	for (var i = 0; i < 15; i++) {
  	  nextAvailableThreadIDs[i] = i + 1;
  	}
  
  	nextAvailableThreadIDs[15] = 0;
  
  	function growThreadCountAndReturnNextAvailable() {
  	  var oldArray = nextAvailableThreadIDs;
  	  var oldSize = oldArray.length;
  	  var newSize = oldSize * 2;
  
  	  if (!(newSize <= 0x10000)) {
  	    {
  	      throw Error( "Maximum number of concurrent React renderers exceeded. This can happen if you are not properly destroying the Readable provided by React. Ensure that you call .destroy() on it if you no longer want to read from it, and did not read to the end. If you use .pipe() this should be automatic." );
  	    }
  	  }
  
  	  var newArray = new Uint16Array(newSize);
  	  newArray.set(oldArray);
  	  nextAvailableThreadIDs = newArray;
  	  nextAvailableThreadIDs[0] = oldSize + 1;
  
  	  for (var _i = oldSize; _i < newSize - 1; _i++) {
  	    nextAvailableThreadIDs[_i] = _i + 1;
  	  }
  
  	  nextAvailableThreadIDs[newSize - 1] = 0;
  	  return oldSize;
  	}
  
  	function allocThreadID() {
  	  var nextID = nextAvailableThreadIDs[0];
  
  	  if (nextID === 0) {
  	    return growThreadCountAndReturnNextAvailable();
  	  }
  
  	  nextAvailableThreadIDs[0] = nextAvailableThreadIDs[nextID];
  	  return nextID;
  	}
  	function freeThreadID(id) {
  	  nextAvailableThreadIDs[id] = nextAvailableThreadIDs[0];
  	  nextAvailableThreadIDs[0] = id;
  	}
  
  	// A reserved attribute.
  	// It is handled by React separately and shouldn't be written to the DOM.
  	var RESERVED = 0; // A simple string attribute.
  	// Attributes that aren't in the whitelist are presumed to have this type.
  
  	var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called
  	// "enumerated" attributes with "true" and "false" as possible values.
  	// When true, it should be set to a "true" string.
  	// When false, it should be set to a "false" string.
  
  	var BOOLEANISH_STRING = 2; // A real boolean attribute.
  	// When true, it should be present (set either to an empty string or its name).
  	// When false, it should be omitted.
  
  	var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.
  	// When true, it should be present (set either to an empty string or its name).
  	// When false, it should be omitted.
  	// For any other value, should be present with that value.
  
  	var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.
  	// When falsy, it should be removed.
  
  	var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.
  	// When falsy, it should be removed.
  
  	var POSITIVE_NUMERIC = 6;
  
  	/* eslint-disable max-len */
  	var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
  	/* eslint-enable max-len */
  
  	var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
  	var ROOT_ATTRIBUTE_NAME = 'data-reactroot';
  	var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');
  	var hasOwnProperty = Object.prototype.hasOwnProperty;
  	var illegalAttributeNameCache = {};
  	var validatedAttributeNameCache = {};
  	function isAttributeNameSafe(attributeName) {
  	  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {
  	    return true;
  	  }
  
  	  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {
  	    return false;
  	  }
  
  	  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
  	    validatedAttributeNameCache[attributeName] = true;
  	    return true;
  	  }
  
  	  illegalAttributeNameCache[attributeName] = true;
  
  	  {
  	    error('Invalid attribute name: `%s`', attributeName);
  	  }
  
  	  return false;
  	}
  	function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {
  	  if (propertyInfo !== null) {
  	    return propertyInfo.type === RESERVED;
  	  }
  
  	  if (isCustomComponentTag) {
  	    return false;
  	  }
  
  	  if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
  	    return true;
  	  }
  
  	  return false;
  	}
  	function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {
  	  if (propertyInfo !== null && propertyInfo.type === RESERVED) {
  	    return false;
  	  }
  
  	  switch (typeof value) {
  	    case 'function': // $FlowIssue symbol is perfectly valid here
  
  	    case 'symbol':
  	      // eslint-disable-line
  	      return true;
  
  	    case 'boolean':
  	      {
  	        if (isCustomComponentTag) {
  	          return false;
  	        }
  
  	        if (propertyInfo !== null) {
  	          return !propertyInfo.acceptsBooleans;
  	        } else {
  	          var prefix = name.toLowerCase().slice(0, 5);
  	          return prefix !== 'data-' && prefix !== 'aria-';
  	        }
  	      }
  
  	    default:
  	      return false;
  	  }
  	}
  	function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {
  	  if (value === null || typeof value === 'undefined') {
  	    return true;
  	  }
  
  	  if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {
  	    return true;
  	  }
  
  	  if (isCustomComponentTag) {
  	    return false;
  	  }
  
  	  if (propertyInfo !== null) {
  	    switch (propertyInfo.type) {
  	      case BOOLEAN:
  	        return !value;
  
  	      case OVERLOADED_BOOLEAN:
  	        return value === false;
  
  	      case NUMERIC:
  	        return isNaN(value);
  
  	      case POSITIVE_NUMERIC:
  	        return isNaN(value) || value < 1;
  	    }
  	  }
  
  	  return false;
  	}
  	function getPropertyInfo(name) {
  	  return properties.hasOwnProperty(name) ? properties[name] : null;
  	}
  
  	function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {
  	  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;
  	  this.attributeName = attributeName;
  	  this.attributeNamespace = attributeNamespace;
  	  this.mustUseProperty = mustUseProperty;
  	  this.propertyName = name;
  	  this.type = type;
  	  this.sanitizeURL = sanitizeURL;
  	} // When adding attributes to this list, be sure to also add them to
  	// the `possibleStandardNames` module to ensure casing and incorrect
  	// name warnings.
  
  
  	var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.
  
  	var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular
  	// elements (not just inputs). Now that ReactDOMInput assigns to the
  	// defaultValue property -- do we need this?
  	'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];
  
  	reservedProps.forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty
  	  name, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // A few React string attributes have a different name.
  	// This is a mapping from React prop names to the attribute names.
  
  	[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {
  	  var name = _ref[0],
  	      attributeName = _ref[1];
  	  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
  	  attributeName, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are "enumerated" HTML attributes that accept "true" and "false".
  	// In React, we let users pass `true` and `false` even though technically
  	// these aren't boolean attributes (they are coerced to strings).
  
  	['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
  	  name.toLowerCase(), // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are "enumerated" SVG attributes that accept "true" and "false".
  	// In React, we let users pass `true` and `false` even though technically
  	// these aren't boolean attributes (they are coerced to strings).
  	// Since these are SVG attributes, their attribute names are case-sensitive.
  
  	['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
  	  name, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are HTML boolean attributes.
  
  	['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM
  	// on the client side because the browsers are inconsistent. Instead we call focus().
  	'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata
  	'itemScope'].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty
  	  name.toLowerCase(), // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are the few React props that we set as DOM properties
  	// rather than attributes. These are all booleans.
  
  	['checked', // Note: `option.selected` is not updated if `select.multiple` is
  	// disabled with `removeAttribute`. We have special logic for handling this.
  	'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty
  	  name, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are HTML attributes that are "overloaded booleans": they behave like
  	// booleans, but can also accept a string value.
  
  	['capture', 'download' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty
  	  name, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are HTML attributes that must be positive numbers.
  
  	['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty
  	  name, // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These are HTML attributes that must be numbers.
  
  	['rowSpan', 'start'].forEach(function (name) {
  	  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty
  	  name.toLowerCase(), // attributeName
  	  null, // attributeNamespace
  	  false);
  	});
  	var CAMELIZE = /[\-\:]([a-z])/g;
  
  	var capitalize = function (token) {
  	  return token[1].toUpperCase();
  	}; // This is a list of all SVG attributes that need special casing, namespacing,
  	// or boolean value assignment. Regular attributes that just accept strings
  	// and have the same names are omitted, just like in the HTML whitelist.
  	// Some of these attributes can be hard to find. This list was created by
  	// scraping the MDN documentation.
  
  
  	['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (attributeName) {
  	  var name = attributeName.replace(CAMELIZE, capitalize);
  	  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
  	  attributeName, null, // attributeNamespace
  	  false);
  	}); // String SVG attributes with the xlink namespace.
  
  	['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (attributeName) {
  	  var name = attributeName.replace(CAMELIZE, capitalize);
  	  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
  	  attributeName, 'http://www.w3.org/1999/xlink', false);
  	}); // String SVG attributes with the xml namespace.
  
  	['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,
  	// you'll need to set attributeName to name.toLowerCase()
  	// instead in the assignment below.
  	].forEach(function (attributeName) {
  	  var name = attributeName.replace(CAMELIZE, capitalize);
  	  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
  	  attributeName, 'http://www.w3.org/XML/1998/namespace', false);
  	}); // These attribute exists both in HTML and SVG.
  	// The attribute name is case-sensitive in SVG so we can't just use
  	// the React name like we do for attributes that exist only in HTML.
  
  	['tabIndex', 'crossOrigin'].forEach(function (attributeName) {
  	  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
  	  attributeName.toLowerCase(), // attributeName
  	  null, // attributeNamespace
  	  false);
  	}); // These attributes accept URLs. These must not allow javascript: URLS.
  	// These will also need to accept Trusted Types object in the future.
  
  	var xlinkHref = 'xlinkHref';
  	properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty
  	'xlink:href', 'http://www.w3.org/1999/xlink', true);
  	['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {
  	  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
  	  attributeName.toLowerCase(), // attributeName
  	  null, // attributeNamespace
  	  true);
  	});
  
  	var ReactDebugCurrentFrame$1 = null;
  
  	{
  	  ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
  	} // A javascript: URL can contain leading C0 control or \u0020 SPACE,
  	// and any newline or tab are filtered out as if they're not part of the URL.
  	// https://url.spec.whatwg.org/#url-parsing
  	// Tab or newline are defined as \r\n\t:
  	// https://infra.spec.whatwg.org/#ascii-tab-or-newline
  	// A C0 control is a code point in the range \u0000 NULL to \u001F
  	// INFORMATION SEPARATOR ONE, inclusive:
  	// https://infra.spec.whatwg.org/#c0-control-or-space
  
  	/* eslint-disable max-len */
  
  
  	var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
  	var didWarn = false;
  
  	function sanitizeURL(url) {
  	  {
  	    if (!didWarn && isJavaScriptProtocol.test(url)) {
  	      didWarn = true;
  
  	      error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));
  	    }
  	  }
  	}
  
  	// code copied and modified from escape-html
  
  	/**
  	 * Module variables.
  	 * @private
  	 */
  	var matchHtmlRegExp = /["'&<>]/;
  	/**
  	 * Escapes special characters and HTML entities in a given html string.
  	 *
  	 * @param  {string} string HTML string to escape for later insertion
  	 * @return {string}
  	 * @public
  	 */
  
  	function escapeHtml(string) {
  	  var str = '' + string;
  	  var match = matchHtmlRegExp.exec(str);
  
  	  if (!match) {
  	    return str;
  	  }
  
  	  var escape;
  	  var html = '';
  	  var index;
  	  var lastIndex = 0;
  
  	  for (index = match.index; index < str.length; index++) {
  	    switch (str.charCodeAt(index)) {
  	      case 34:
  	        // "
  	        escape = '&quot;';
  	        break;
  
  	      case 38:
  	        // &
  	        escape = '&amp;';
  	        break;
  
  	      case 39:
  	        // '
  	        escape = '&#x27;'; // modified from escape-html; used to be '&#39'
  
  	        break;
  
  	      case 60:
  	        // <
  	        escape = '&lt;';
  	        break;
  
  	      case 62:
  	        // >
  	        escape = '&gt;';
  	        break;
  
  	      default:
  	        continue;
  	    }
  
  	    if (lastIndex !== index) {
  	      html += str.substring(lastIndex, index);
  	    }
  
  	    lastIndex = index + 1;
  	    html += escape;
  	  }
  
  	  return lastIndex !== index ? html + str.substring(lastIndex, index) : html;
  	} // end code copied and modified from escape-html
  
  	/**
  	 * Escapes text to prevent scripting attacks.
  	 *
  	 * @param {*} text Text value to escape.
  	 * @return {string} An escaped string.
  	 */
  
  
  	function escapeTextForBrowser(text) {
  	  if (typeof text === 'boolean' || typeof text === 'number') {
  	    // this shortcircuit helps perf for types that we know will never have
  	    // special characters, especially given that this function is used often
  	    // for numeric dom ids.
  	    return '' + text;
  	  }
  
  	  return escapeHtml(text);
  	}
  
  	/**
  	 * Escapes attribute value to prevent scripting attacks.
  	 *
  	 * @param {*} value Value to escape.
  	 * @return {string} An escaped string.
  	 */
  
  	function quoteAttributeValueForBrowser(value) {
  	  return '"' + escapeTextForBrowser(value) + '"';
  	}
  
  	function createMarkupForRoot() {
  	  return ROOT_ATTRIBUTE_NAME + '=""';
  	}
  	/**
  	 * Creates markup for a property.
  	 *
  	 * @param {string} name
  	 * @param {*} value
  	 * @return {?string} Markup string, or null if the property was invalid.
  	 */
  
  	function createMarkupForProperty(name, value) {
  	  var propertyInfo = getPropertyInfo(name);
  
  	  if (name !== 'style' && shouldIgnoreAttribute(name, propertyInfo, false)) {
  	    return '';
  	  }
  
  	  if (shouldRemoveAttribute(name, value, propertyInfo, false)) {
  	    return '';
  	  }
  
  	  if (propertyInfo !== null) {
  	    var attributeName = propertyInfo.attributeName;
  	    var type = propertyInfo.type;
  
  	    if (type === BOOLEAN || type === OVERLOADED_BOOLEAN && value === true) {
  	      return attributeName + '=""';
  	    } else {
  	      if (propertyInfo.sanitizeURL) {
  	        value = '' + value;
  	        sanitizeURL(value);
  	      }
  
  	      return attributeName + '=' + quoteAttributeValueForBrowser(value);
  	    }
  	  } else if (isAttributeNameSafe(name)) {
  	    return name + '=' + quoteAttributeValueForBrowser(value);
  	  }
  
  	  return '';
  	}
  	/**
  	 * Creates markup for a custom property.
  	 *
  	 * @param {string} name
  	 * @param {*} value
  	 * @return {string} Markup string, or empty string if the property was invalid.
  	 */
  
  	function createMarkupForCustomAttribute(name, value) {
  	  if (!isAttributeNameSafe(name) || value == null) {
  	    return '';
  	  }
  
  	  return name + '=' + quoteAttributeValueForBrowser(value);
  	}
  
  	/**
  	 * inlined Object.is polyfill to avoid requiring consumers ship their own
  	 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
  	 */
  	function is(x, y) {
  	  return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
  	  ;
  	}
  
  	var objectIs = typeof Object.is === 'function' ? Object.is : is;
  
  	var currentlyRenderingComponent = null;
  	var firstWorkInProgressHook = null;
  	var workInProgressHook = null; // Whether the work-in-progress hook is a re-rendered hook
  
  	var isReRender = false; // Whether an update was scheduled during the currently executing render pass.
  
  	var didScheduleRenderPhaseUpdate = false; // Lazily created map of render-phase updates
  
  	var renderPhaseUpdates = null; // Counter to prevent infinite loops.
  
  	var numberOfReRenders = 0;
  	var RE_RENDER_LIMIT = 25;
  	var isInHookUserCodeInDev = false; // In DEV, this is the name of the currently executing primitive hook
  
  	var currentHookNameInDev;
  
  	function resolveCurrentlyRenderingComponent() {
  	  if (!(currentlyRenderingComponent !== null)) {
  	    {
  	      throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem." );
  	    }
  	  }
  
  	  {
  	    if (isInHookUserCodeInDev) {
  	      error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks');
  	    }
  	  }
  
  	  return currentlyRenderingComponent;
  	}
  
  	function areHookInputsEqual(nextDeps, prevDeps) {
  	  if (prevDeps === null) {
  	    {
  	      error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);
  	    }
  
  	    return false;
  	  }
  
  	  {
  	    // Don't bother comparing lengths in prod because these arrays should be
  	    // passed inline.
  	    if (nextDeps.length !== prevDeps.length) {
  	      error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + nextDeps.join(', ') + "]", "[" + prevDeps.join(', ') + "]");
  	    }
  	  }
  
  	  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {
  	    if (objectIs(nextDeps[i], prevDeps[i])) {
  	      continue;
  	    }
  
  	    return false;
  	  }
  
  	  return true;
  	}
  
  	function createHook() {
  	  if (numberOfReRenders > 0) {
  	    {
  	      {
  	        throw Error( "Rendered more hooks than during the previous render" );
  	      }
  	    }
  	  }
  
  	  return {
  	    memoizedState: null,
  	    queue: null,
  	    next: null
  	  };
  	}
  
  	function createWorkInProgressHook() {
  	  if (workInProgressHook === null) {
  	    // This is the first hook in the list
  	    if (firstWorkInProgressHook === null) {
  	      isReRender = false;
  	      firstWorkInProgressHook = workInProgressHook = createHook();
  	    } else {
  	      // There's already a work-in-progress. Reuse it.
  	      isReRender = true;
  	      workInProgressHook = firstWorkInProgressHook;
  	    }
  	  } else {
  	    if (workInProgressHook.next === null) {
  	      isReRender = false; // Append to the end of the list
  
  	      workInProgressHook = workInProgressHook.next = createHook();
  	    } else {
  	      // There's already a work-in-progress. Reuse it.
  	      isReRender = true;
  	      workInProgressHook = workInProgressHook.next;
  	    }
  	  }
  
  	  return workInProgressHook;
  	}
  
  	function prepareToUseHooks(componentIdentity) {
  	  currentlyRenderingComponent = componentIdentity;
  
  	  {
  	    isInHookUserCodeInDev = false;
  	  } // The following should have already been reset
  	  // didScheduleRenderPhaseUpdate = false;
  	  // firstWorkInProgressHook = null;
  	  // numberOfReRenders = 0;
  	  // renderPhaseUpdates = null;
  	  // workInProgressHook = null;
  
  	}
  	function finishHooks(Component, props, children, refOrContext) {
  	  // This must be called after every function component to prevent hooks from
  	  // being used in classes.
  	  while (didScheduleRenderPhaseUpdate) {
  	    // Updates were scheduled during the render phase. They are stored in
  	    // the `renderPhaseUpdates` map. Call the component again, reusing the
  	    // work-in-progress hooks and applying the additional updates on top. Keep
  	    // restarting until no more updates are scheduled.
  	    didScheduleRenderPhaseUpdate = false;
  	    numberOfReRenders += 1; // Start over from the beginning of the list
  
  	    workInProgressHook = null;
  	    children = Component(props, refOrContext);
  	  }
  
  	  currentlyRenderingComponent = null;
  	  firstWorkInProgressHook = null;
  	  numberOfReRenders = 0;
  	  renderPhaseUpdates = null;
  	  workInProgressHook = null;
  
  	  {
  	    isInHookUserCodeInDev = false;
  	  } // These were reset above
  	  // currentlyRenderingComponent = null;
  	  // didScheduleRenderPhaseUpdate = false;
  	  // firstWorkInProgressHook = null;
  	  // numberOfReRenders = 0;
  	  // renderPhaseUpdates = null;
  	  // workInProgressHook = null;
  
  
  	  return children;
  	}
  
  	function readContext(context, observedBits) {
  	  var threadID = currentThreadID;
  	  validateContextBounds(context, threadID);
  
  	  {
  	    if (isInHookUserCodeInDev) {
  	      error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
  	    }
  	  }
  
  	  return context[threadID];
  	}
  
  	function useContext(context, observedBits) {
  	  {
  	    currentHookNameInDev = 'useContext';
  	  }
  
  	  resolveCurrentlyRenderingComponent();
  	  var threadID = currentThreadID;
  	  validateContextBounds(context, threadID);
  	  return context[threadID];
  	}
  
  	function basicStateReducer(state, action) {
  	  // $FlowFixMe: Flow doesn't like mixed types
  	  return typeof action === 'function' ? action(state) : action;
  	}
  
  	function useState(initialState) {
  	  {
  	    currentHookNameInDev = 'useState';
  	  }
  
  	  return useReducer(basicStateReducer, // useReducer has a special case to support lazy useState initializers
  	  initialState);
  	}
  	function useReducer(reducer, initialArg, init) {
  	  {
  	    if (reducer !== basicStateReducer) {
  	      currentHookNameInDev = 'useReducer';
  	    }
  	  }
  
  	  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
  	  workInProgressHook = createWorkInProgressHook();
  
  	  if (isReRender) {
  	    // This is a re-render. Apply the new render phase updates to the previous
  	    // current hook.
  	    var queue = workInProgressHook.queue;
  	    var dispatch = queue.dispatch;
  
  	    if (renderPhaseUpdates !== null) {
  	      // Render phase updates are stored in a map of queue -> linked list
  	      var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);
  
  	      if (firstRenderPhaseUpdate !== undefined) {
  	        renderPhaseUpdates.delete(queue);
  	        var newState = workInProgressHook.memoizedState;
  	        var update = firstRenderPhaseUpdate;
  
  	        do {
  	          // Process this render phase update. We don't have to check the
  	          // priority because it will always be the same as the current
  	          // render's.
  	          var action = update.action;
  
  	          {
  	            isInHookUserCodeInDev = true;
  	          }
  
  	          newState = reducer(newState, action);
  
  	          {
  	            isInHookUserCodeInDev = false;
  	          }
  
  	          update = update.next;
  	        } while (update !== null);
  
  	        workInProgressHook.memoizedState = newState;
  	        return [newState, dispatch];
  	      }
  	    }
  
  	    return [workInProgressHook.memoizedState, dispatch];
  	  } else {
  	    {
  	      isInHookUserCodeInDev = true;
  	    }
  
  	    var initialState;
  
  	    if (reducer === basicStateReducer) {
  	      // Special case for `useState`.
  	      initialState = typeof initialArg === 'function' ? initialArg() : initialArg;
  	    } else {
  	      initialState = init !== undefined ? init(initialArg) : initialArg;
  	    }
  
  	    {
  	      isInHookUserCodeInDev = false;
  	    }
  
  	    workInProgressHook.memoizedState = initialState;
  
  	    var _queue = workInProgressHook.queue = {
  	      last: null,
  	      dispatch: null
  	    };
  
  	    var _dispatch = _queue.dispatch = dispatchAction.bind(null, currentlyRenderingComponent, _queue);
  
  	    return [workInProgressHook.memoizedState, _dispatch];
  	  }
  	}
  
  	function useMemo(nextCreate, deps) {
  	  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
  	  workInProgressHook = createWorkInProgressHook();
  	  var nextDeps = deps === undefined ? null : deps;
  
  	  if (workInProgressHook !== null) {
  	    var prevState = workInProgressHook.memoizedState;
  
  	    if (prevState !== null) {
  	      if (nextDeps !== null) {
  	        var prevDeps = prevState[1];
  
  	        if (areHookInputsEqual(nextDeps, prevDeps)) {
  	          return prevState[0];
  	        }
  	      }
  	    }
  	  }
  
  	  {
  	    isInHookUserCodeInDev = true;
  	  }
  
  	  var nextValue = nextCreate();
  
  	  {
  	    isInHookUserCodeInDev = false;
  	  }
  
  	  workInProgressHook.memoizedState = [nextValue, nextDeps];
  	  return nextValue;
  	}
  
  	function useRef(initialValue) {
  	  currentlyRenderingComponent = resolveCurrentlyRenderingComponent();
  	  workInProgressHook = createWorkInProgressHook();
  	  var previousRef = workInProgressHook.memoizedState;
  
  	  if (previousRef === null) {
  	    var ref = {
  	      current: initialValue
  	    };
  
  	    {
  	      Object.seal(ref);
  	    }
  
  	    workInProgressHook.memoizedState = ref;
  	    return ref;
  	  } else {
  	    return previousRef;
  	  }
  	}
  
  	function useLayoutEffect(create, inputs) {
  	  {
  	    currentHookNameInDev = 'useLayoutEffect';
  
  	    error('useLayoutEffect does nothing on the server, because its effect cannot ' + "be encoded into the server renderer's output format. This will lead " + 'to a mismatch between the initial, non-hydrated UI and the intended ' + 'UI. To avoid this, useLayoutEffect should only be used in ' + 'components that render exclusively on the client. ' + 'See https://fb.me/react-uselayouteffect-ssr for common fixes.');
  	  }
  	}
  
  	function dispatchAction(componentIdentity, queue, action) {
  	  if (!(numberOfReRenders < RE_RENDER_LIMIT)) {
  	    {
  	      throw Error( "Too many re-renders. React limits the number of renders to prevent an infinite loop." );
  	    }
  	  }
  
  	  if (componentIdentity === currentlyRenderingComponent) {
  	    // This is a render phase update. Stash it in a lazily-created map of
  	    // queue -> linked list of updates. After this render pass, we'll restart
  	    // and apply the stashed updates on top of the work-in-progress hook.
  	    didScheduleRenderPhaseUpdate = true;
  	    var update = {
  	      action: action,
  	      next: null
  	    };
  
  	    if (renderPhaseUpdates === null) {
  	      renderPhaseUpdates = new Map();
  	    }
  
  	    var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue);
  
  	    if (firstRenderPhaseUpdate === undefined) {
  	      renderPhaseUpdates.set(queue, update);
  	    } else {
  	      // Append the update to the end of the list.
  	      var lastRenderPhaseUpdate = firstRenderPhaseUpdate;
  
  	      while (lastRenderPhaseUpdate.next !== null) {
  	        lastRenderPhaseUpdate = lastRenderPhaseUpdate.next;
  	      }
  
  	      lastRenderPhaseUpdate.next = update;
  	    }
  	  }
  	}
  
  	function useCallback(callback, deps) {
  	  // Callbacks are passed as they are in the server environment.
  	  return callback;
  	}
  
  	function useResponder(responder, props) {
  	  return {
  	    props: props,
  	    responder: responder
  	  };
  	}
  
  	function useDeferredValue(value, config) {
  	  resolveCurrentlyRenderingComponent();
  	  return value;
  	}
  
  	function useTransition(config) {
  	  resolveCurrentlyRenderingComponent();
  
  	  var startTransition = function (callback) {
  	    callback();
  	  };
  
  	  return [startTransition, false];
  	}
  
  	function noop() {}
  
  	var currentThreadID = 0;
  	function setCurrentThreadID(threadID) {
  	  currentThreadID = threadID;
  	}
  	var Dispatcher = {
  	  readContext: readContext,
  	  useContext: useContext,
  	  useMemo: useMemo,
  	  useReducer: useReducer,
  	  useRef: useRef,
  	  useState: useState,
  	  useLayoutEffect: useLayoutEffect,
  	  useCallback: useCallback,
  	  // useImperativeHandle is not run in the server environment
  	  useImperativeHandle: noop,
  	  // Effects are not run in the server environment.
  	  useEffect: noop,
  	  // Debugging effect
  	  useDebugValue: noop,
  	  useResponder: useResponder,
  	  useDeferredValue: useDeferredValue,
  	  useTransition: useTransition
  	};
  
  	var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
  	var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
  	var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
  	var Namespaces = {
  	  html: HTML_NAMESPACE,
  	  mathml: MATH_NAMESPACE,
  	  svg: SVG_NAMESPACE
  	}; // Assumes there is no parent namespace.
  
  	function getIntrinsicNamespace(type) {
  	  switch (type) {
  	    case 'svg':
  	      return SVG_NAMESPACE;
  
  	    case 'math':
  	      return MATH_NAMESPACE;
  
  	    default:
  	      return HTML_NAMESPACE;
  	  }
  	}
  	function getChildNamespace(parentNamespace, type) {
  	  if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
  	    // No (or default) parent namespace: potential entry point.
  	    return getIntrinsicNamespace(type);
  	  }
  
  	  if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
  	    // We're leaving SVG.
  	    return HTML_NAMESPACE;
  	  } // By default, pass namespace below.
  
  
  	  return parentNamespace;
  	}
  
  	var ReactDebugCurrentFrame$2 = null;
  	var ReactControlledValuePropTypes = {
  	  checkPropTypes: null
  	};
  
  	{
  	  ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;
  	  var hasReadOnlyValue = {
  	    button: true,
  	    checkbox: true,
  	    image: true,
  	    hidden: true,
  	    radio: true,
  	    reset: true,
  	    submit: true
  	  };
  	  var propTypes = {
  	    value: function (props, propName, componentName) {
  	      if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {
  	        return null;
  	      }
  
  	      return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
  	    },
  	    checked: function (props, propName, componentName) {
  	      if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {
  	        return null;
  	      }
  
  	      return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
  	    }
  	  };
  	  /**
  	   * Provide a linked `value` attribute for controlled forms. You should not use
  	   * this outside of the ReactDOM controlled form components.
  	   */
  
  	  ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {
  	    checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);
  	  };
  	}
  
  	// For HTML, certain tags should omit their close tag. We keep a whitelist for
  	// those special-case tags.
  	var omittedCloseTags = {
  	  area: true,
  	  base: true,
  	  br: true,
  	  col: true,
  	  embed: true,
  	  hr: true,
  	  img: true,
  	  input: true,
  	  keygen: true,
  	  link: true,
  	  meta: true,
  	  param: true,
  	  source: true,
  	  track: true,
  	  wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.
  
  	};
  
  	// `omittedCloseTags` except that `menuitem` should still have its closing tag.
  
  	var voidElementTags = _assign({
  	  menuitem: true
  	}, omittedCloseTags);
  
  	var HTML = '__html';
  	var ReactDebugCurrentFrame$3 = null;
  
  	{
  	  ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;
  	}
  
  	function assertValidProps(tag, props) {
  	  if (!props) {
  	    return;
  	  } // Note the use of `==` which checks for null or undefined.
  
  
  	  if (voidElementTags[tag]) {
  	    if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {
  	      {
  	        throw Error( tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );
  	      }
  	    }
  	  }
  
  	  if (props.dangerouslySetInnerHTML != null) {
  	    if (!(props.children == null)) {
  	      {
  	        throw Error( "Can only set one of `children` or `props.dangerouslySetInnerHTML`." );
  	      }
  	    }
  
  	    if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {
  	      {
  	        throw Error( "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information." );
  	      }
  	    }
  	  }
  
  	  {
  	    if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {
  	      error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');
  	    }
  	  }
  
  	  if (!(props.style == null || typeof props.style === 'object')) {
  	    {
  	      throw Error( "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );
  	    }
  	  }
  	}
  
  	/**
  	 * CSS properties which accept numbers but are not in units of "px".
  	 */
  	var isUnitlessNumber = {
  	  animationIterationCount: true,
  	  borderImageOutset: true,
  	  borderImageSlice: true,
  	  borderImageWidth: true,
  	  boxFlex: true,
  	  boxFlexGroup: true,
  	  boxOrdinalGroup: true,
  	  columnCount: true,
  	  columns: true,
  	  flex: true,
  	  flexGrow: true,
  	  flexPositive: true,
  	  flexShrink: true,
  	  flexNegative: true,
  	  flexOrder: true,
  	  gridArea: true,
  	  gridRow: true,
  	  gridRowEnd: true,
  	  gridRowSpan: true,
  	  gridRowStart: true,
  	  gridColumn: true,
  	  gridColumnEnd: true,
  	  gridColumnSpan: true,
  	  gridColumnStart: true,
  	  fontWeight: true,
  	  lineClamp: true,
  	  lineHeight: true,
  	  opacity: true,
  	  order: true,
  	  orphans: true,
  	  tabSize: true,
  	  widows: true,
  	  zIndex: true,
  	  zoom: true,
  	  // SVG-related properties
  	  fillOpacity: true,
  	  floodOpacity: true,
  	  stopOpacity: true,
  	  strokeDasharray: true,
  	  strokeDashoffset: true,
  	  strokeMiterlimit: true,
  	  strokeOpacity: true,
  	  strokeWidth: true
  	};
  	/**
  	 * @param {string} prefix vendor-specific prefix, eg: Webkit
  	 * @param {string} key style name, eg: transitionDuration
  	 * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
  	 * WebkitTransitionDuration
  	 */
  
  	function prefixKey(prefix, key) {
  	  return prefix + key.charAt(0).toUpperCase() + key.substring(1);
  	}
  	/**
  	 * Support style names that may come passed in prefixed by adding permutations
  	 * of vendor prefixes.
  	 */
  
  
  	var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
  	// infinite loop, because it iterates over the newly added props too.
  
  	Object.keys(isUnitlessNumber).forEach(function (prop) {
  	  prefixes.forEach(function (prefix) {
  	    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
  	  });
  	});
  
  	/**
  	 * Convert a value into the proper css writable value. The style name `name`
  	 * should be logical (no hyphens), as specified
  	 * in `CSSProperty.isUnitlessNumber`.
  	 *
  	 * @param {string} name CSS property name such as `topMargin`.
  	 * @param {*} value CSS property value such as `10px`.
  	 * @return {string} Normalized style value with dimensions applied.
  	 */
  
  	function dangerousStyleValue(name, value, isCustomProperty) {
  	  // Note that we've removed escapeTextForBrowser() calls here since the
  	  // whole string will be escaped when the attribute is injected into
  	  // the markup. If you provide unsafe user data here they can inject
  	  // arbitrary CSS which may be problematic (I couldn't repro this):
  	  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
  	  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
  	  // This is not an XSS hole but instead a potential CSS injection issue
  	  // which has lead to a greater discussion about how we're going to
  	  // trust URLs moving forward. See #2115901
  	  var isEmpty = value == null || typeof value === 'boolean' || value === '';
  
  	  if (isEmpty) {
  	    return '';
  	  }
  
  	  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {
  	    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers
  	  }
  
  	  return ('' + value).trim();
  	}
  
  	var uppercasePattern = /([A-Z])/g;
  	var msPattern = /^ms-/;
  	/**
  	 * Hyphenates a camelcased CSS property name, for example:
  	 *
  	 *   > hyphenateStyleName('backgroundColor')
  	 *   < "background-color"
  	 *   > hyphenateStyleName('MozTransition')
  	 *   < "-moz-transition"
  	 *   > hyphenateStyleName('msTransition')
  	 *   < "-ms-transition"
  	 *
  	 * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
  	 * is converted to `-ms-`.
  	 */
  
  	function hyphenateStyleName(name) {
  	  return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');
  	}
  
  	function isCustomComponent(tagName, props) {
  	  if (tagName.indexOf('-') === -1) {
  	    return typeof props.is === 'string';
  	  }
  
  	  switch (tagName) {
  	    // These are reserved SVG and MathML elements.
  	    // We don't mind this whitelist too much because we expect it to never grow.
  	    // The alternative is to track the namespace in a few places which is convoluted.
  	    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts
  	    case 'annotation-xml':
  	    case 'color-profile':
  	    case 'font-face':
  	    case 'font-face-src':
  	    case 'font-face-uri':
  	    case 'font-face-format':
  	    case 'font-face-name':
  	    case 'missing-glyph':
  	      return false;
  
  	    default:
  	      return true;
  	  }
  	}
  
  	var warnValidStyle = function () {};
  
  	{
  	  // 'msTransform' is correct, but the other prefixes should be capitalized
  	  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
  	  var msPattern$1 = /^-ms-/;
  	  var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon
  
  	  var badStyleValueWithSemicolonPattern = /;\s*$/;
  	  var warnedStyleNames = {};
  	  var warnedStyleValues = {};
  	  var warnedForNaNValue = false;
  	  var warnedForInfinityValue = false;
  
  	  var camelize = function (string) {
  	    return string.replace(hyphenPattern, function (_, character) {
  	      return character.toUpperCase();
  	    });
  	  };
  
  	  var warnHyphenatedStyleName = function (name) {
  	    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
  	      return;
  	    }
  
  	    warnedStyleNames[name] = true;
  
  	    error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests
  	    // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
  	    // is converted to lowercase `ms`.
  	    camelize(name.replace(msPattern$1, 'ms-')));
  	  };
  
  	  var warnBadVendoredStyleName = function (name) {
  	    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
  	      return;
  	    }
  
  	    warnedStyleNames[name] = true;
  
  	    error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));
  	  };
  
  	  var warnStyleValueWithSemicolon = function (name, value) {
  	    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
  	      return;
  	    }
  
  	    warnedStyleValues[value] = true;
  
  	    error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));
  	  };
  
  	  var warnStyleValueIsNaN = function (name, value) {
  	    if (warnedForNaNValue) {
  	      return;
  	    }
  
  	    warnedForNaNValue = true;
  
  	    error('`NaN` is an invalid value for the `%s` css style property.', name);
  	  };
  
  	  var warnStyleValueIsInfinity = function (name, value) {
  	    if (warnedForInfinityValue) {
  	      return;
  	    }
  
  	    warnedForInfinityValue = true;
  
  	    error('`Infinity` is an invalid value for the `%s` css style property.', name);
  	  };
  
  	  warnValidStyle = function (name, value) {
  	    if (name.indexOf('-') > -1) {
  	      warnHyphenatedStyleName(name);
  	    } else if (badVendoredStyleNamePattern.test(name)) {
  	      warnBadVendoredStyleName(name);
  	    } else if (badStyleValueWithSemicolonPattern.test(value)) {
  	      warnStyleValueWithSemicolon(name, value);
  	    }
  
  	    if (typeof value === 'number') {
  	      if (isNaN(value)) {
  	        warnStyleValueIsNaN(name, value);
  	      } else if (!isFinite(value)) {
  	        warnStyleValueIsInfinity(name, value);
  	      }
  	    }
  	  };
  	}
  
  	var warnValidStyle$1 = warnValidStyle;
  
  	var ariaProperties = {
  	  'aria-current': 0,
  	  // state
  	  'aria-details': 0,
  	  'aria-disabled': 0,
  	  // state
  	  'aria-hidden': 0,
  	  // state
  	  'aria-invalid': 0,
  	  // state
  	  'aria-keyshortcuts': 0,
  	  'aria-label': 0,
  	  'aria-roledescription': 0,
  	  // Widget Attributes
  	  'aria-autocomplete': 0,
  	  'aria-checked': 0,
  	  'aria-expanded': 0,
  	  'aria-haspopup': 0,
  	  'aria-level': 0,
  	  'aria-modal': 0,
  	  'aria-multiline': 0,
  	  'aria-multiselectable': 0,
  	  'aria-orientation': 0,
  	  'aria-placeholder': 0,
  	  'aria-pressed': 0,
  	  'aria-readonly': 0,
  	  'aria-required': 0,
  	  'aria-selected': 0,
  	  'aria-sort': 0,
  	  'aria-valuemax': 0,
  	  'aria-valuemin': 0,
  	  'aria-valuenow': 0,
  	  'aria-valuetext': 0,
  	  // Live Region Attributes
  	  'aria-atomic': 0,
  	  'aria-busy': 0,
  	  'aria-live': 0,
  	  'aria-relevant': 0,
  	  // Drag-and-Drop Attributes
  	  'aria-dropeffect': 0,
  	  'aria-grabbed': 0,
  	  // Relationship Attributes
  	  'aria-activedescendant': 0,
  	  'aria-colcount': 0,
  	  'aria-colindex': 0,
  	  'aria-colspan': 0,
  	  'aria-controls': 0,
  	  'aria-describedby': 0,
  	  'aria-errormessage': 0,
  	  'aria-flowto': 0,
  	  'aria-labelledby': 0,
  	  'aria-owns': 0,
  	  'aria-posinset': 0,
  	  'aria-rowcount': 0,
  	  'aria-rowindex': 0,
  	  'aria-rowspan': 0,
  	  'aria-setsize': 0
  	};
  
  	var warnedProperties = {};
  	var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
  	var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
  	var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
  
  	function validateProperty(tagName, name) {
  	  {
  	    if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {
  	      return true;
  	    }
  
  	    if (rARIACamel.test(name)) {
  	      var ariaName = 'aria-' + name.slice(4).toLowerCase();
  	      var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM
  	      // DOM properties, then it is an invalid aria-* attribute.
  
  	      if (correctName == null) {
  	        error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);
  
  	        warnedProperties[name] = true;
  	        return true;
  	      } // aria-* attributes should be lowercase; suggest the lowercase version.
  
  
  	      if (name !== correctName) {
  	        error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);
  
  	        warnedProperties[name] = true;
  	        return true;
  	      }
  	    }
  
  	    if (rARIA.test(name)) {
  	      var lowerCasedName = name.toLowerCase();
  	      var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM
  	      // DOM properties, then it is an invalid aria-* attribute.
  
  	      if (standardName == null) {
  	        warnedProperties[name] = true;
  	        return false;
  	      } // aria-* attributes should be lowercase; suggest the lowercase version.
  
  
  	      if (name !== standardName) {
  	        error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);
  
  	        warnedProperties[name] = true;
  	        return true;
  	      }
  	    }
  	  }
  
  	  return true;
  	}
  
  	function warnInvalidARIAProps(type, props) {
  	  {
  	    var invalidProps = [];
  
  	    for (var key in props) {
  	      var isValid = validateProperty(type, key);
  
  	      if (!isValid) {
  	        invalidProps.push(key);
  	      }
  	    }
  
  	    var unknownPropString = invalidProps.map(function (prop) {
  	      return '`' + prop + '`';
  	    }).join(', ');
  
  	    if (invalidProps.length === 1) {
  	      error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);
  	    } else if (invalidProps.length > 1) {
  	      error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);
  	    }
  	  }
  	}
  
  	function validateProperties(type, props) {
  	  if (isCustomComponent(type, props)) {
  	    return;
  	  }
  
  	  warnInvalidARIAProps(type, props);
  	}
  
  	var didWarnValueNull = false;
  	function validateProperties$1(type, props) {
  	  {
  	    if (type !== 'input' && type !== 'textarea' && type !== 'select') {
  	      return;
  	    }
  
  	    if (props != null && props.value === null && !didWarnValueNull) {
  	      didWarnValueNull = true;
  
  	      if (type === 'select' && props.multiple) {
  	        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);
  	      } else {
  	        error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);
  	      }
  	    }
  	  }
  	}
  
  	/**
  	 * Mapping from registration name to plugin module
  	 */
  
  	var registrationNameModules = {};
  	/**
  	 * Mapping from lowercase registration names to the properly cased version,
  	 * used to warn in the case of missing event handlers. Available
  	 * only in true.
  	 * @type {Object}
  	 */
  
  	var possibleRegistrationNames =  {} ; // Trust the developer to only use possibleRegistrationNames in true
  
  	// When adding attributes to the HTML or SVG whitelist, be sure to
  	// also add them to this module to ensure casing and incorrect name
  	// warnings.
  	var possibleStandardNames = {
  	  // HTML
  	  accept: 'accept',
  	  acceptcharset: 'acceptCharset',
  	  'accept-charset': 'acceptCharset',
  	  accesskey: 'accessKey',
  	  action: 'action',
  	  allowfullscreen: 'allowFullScreen',
  	  alt: 'alt',
  	  as: 'as',
  	  async: 'async',
  	  autocapitalize: 'autoCapitalize',
  	  autocomplete: 'autoComplete',
  	  autocorrect: 'autoCorrect',
  	  autofocus: 'autoFocus',
  	  autoplay: 'autoPlay',
  	  autosave: 'autoSave',
  	  capture: 'capture',
  	  cellpadding: 'cellPadding',
  	  cellspacing: 'cellSpacing',
  	  challenge: 'challenge',
  	  charset: 'charSet',
  	  checked: 'checked',
  	  children: 'children',
  	  cite: 'cite',
  	  class: 'className',
  	  classid: 'classID',
  	  classname: 'className',
  	  cols: 'cols',
  	  colspan: 'colSpan',
  	  content: 'content',
  	  contenteditable: 'contentEditable',
  	  contextmenu: 'contextMenu',
  	  controls: 'controls',
  	  controlslist: 'controlsList',
  	  coords: 'coords',
  	  crossorigin: 'crossOrigin',
  	  dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',
  	  data: 'data',
  	  datetime: 'dateTime',
  	  default: 'default',
  	  defaultchecked: 'defaultChecked',
  	  defaultvalue: 'defaultValue',
  	  defer: 'defer',
  	  dir: 'dir',
  	  disabled: 'disabled',
  	  disablepictureinpicture: 'disablePictureInPicture',
  	  download: 'download',
  	  draggable: 'draggable',
  	  enctype: 'encType',
  	  for: 'htmlFor',
  	  form: 'form',
  	  formmethod: 'formMethod',
  	  formaction: 'formAction',
  	  formenctype: 'formEncType',
  	  formnovalidate: 'formNoValidate',
  	  formtarget: 'formTarget',
  	  frameborder: 'frameBorder',
  	  headers: 'headers',
  	  height: 'height',
  	  hidden: 'hidden',
  	  high: 'high',
  	  href: 'href',
  	  hreflang: 'hrefLang',
  	  htmlfor: 'htmlFor',
  	  httpequiv: 'httpEquiv',
  	  'http-equiv': 'httpEquiv',
  	  icon: 'icon',
  	  id: 'id',
  	  innerhtml: 'innerHTML',
  	  inputmode: 'inputMode',
  	  integrity: 'integrity',
  	  is: 'is',
  	  itemid: 'itemID',
  	  itemprop: 'itemProp',
  	  itemref: 'itemRef',
  	  itemscope: 'itemScope',
  	  itemtype: 'itemType',
  	  keyparams: 'keyParams',
  	  keytype: 'keyType',
  	  kind: 'kind',
  	  label: 'label',
  	  lang: 'lang',
  	  list: 'list',
  	  loop: 'loop',
  	  low: 'low',
  	  manifest: 'manifest',
  	  marginwidth: 'marginWidth',
  	  marginheight: 'marginHeight',
  	  max: 'max',
  	  maxlength: 'maxLength',
  	  media: 'media',
  	  mediagroup: 'mediaGroup',
  	  method: 'method',
  	  min: 'min',
  	  minlength: 'minLength',
  	  multiple: 'multiple',
  	  muted: 'muted',
  	  name: 'name',
  	  nomodule: 'noModule',
  	  nonce: 'nonce',
  	  novalidate: 'noValidate',
  	  open: 'open',
  	  optimum: 'optimum',
  	  pattern: 'pattern',
  	  placeholder: 'placeholder',
  	  playsinline: 'playsInline',
  	  poster: 'poster',
  	  preload: 'preload',
  	  profile: 'profile',
  	  radiogroup: 'radioGroup',
  	  readonly: 'readOnly',
  	  referrerpolicy: 'referrerPolicy',
  	  rel: 'rel',
  	  required: 'required',
  	  reversed: 'reversed',
  	  role: 'role',
  	  rows: 'rows',
  	  rowspan: 'rowSpan',
  	  sandbox: 'sandbox',
  	  scope: 'scope',
  	  scoped: 'scoped',
  	  scrolling: 'scrolling',
  	  seamless: 'seamless',
  	  selected: 'selected',
  	  shape: 'shape',
  	  size: 'size',
  	  sizes: 'sizes',
  	  span: 'span',
  	  spellcheck: 'spellCheck',
  	  src: 'src',
  	  srcdoc: 'srcDoc',
  	  srclang: 'srcLang',
  	  srcset: 'srcSet',
  	  start: 'start',
  	  step: 'step',
  	  style: 'style',
  	  summary: 'summary',
  	  tabindex: 'tabIndex',
  	  target: 'target',
  	  title: 'title',
  	  type: 'type',
  	  usemap: 'useMap',
  	  value: 'value',
  	  width: 'width',
  	  wmode: 'wmode',
  	  wrap: 'wrap',
  	  // SVG
  	  about: 'about',
  	  accentheight: 'accentHeight',
  	  'accent-height': 'accentHeight',
  	  accumulate: 'accumulate',
  	  additive: 'additive',
  	  alignmentbaseline: 'alignmentBaseline',
  	  'alignment-baseline': 'alignmentBaseline',
  	  allowreorder: 'allowReorder',
  	  alphabetic: 'alphabetic',
  	  amplitude: 'amplitude',
  	  arabicform: 'arabicForm',
  	  'arabic-form': 'arabicForm',
  	  ascent: 'ascent',
  	  attributename: 'attributeName',
  	  attributetype: 'attributeType',
  	  autoreverse: 'autoReverse',
  	  azimuth: 'azimuth',
  	  basefrequency: 'baseFrequency',
  	  baselineshift: 'baselineShift',
  	  'baseline-shift': 'baselineShift',
  	  baseprofile: 'baseProfile',
  	  bbox: 'bbox',
  	  begin: 'begin',
  	  bias: 'bias',
  	  by: 'by',
  	  calcmode: 'calcMode',
  	  capheight: 'capHeight',
  	  'cap-height': 'capHeight',
  	  clip: 'clip',
  	  clippath: 'clipPath',
  	  'clip-path': 'clipPath',
  	  clippathunits: 'clipPathUnits',
  	  cliprule: 'clipRule',
  	  'clip-rule': 'clipRule',
  	  color: 'color',
  	  colorinterpolation: 'colorInterpolation',
  	  'color-interpolation': 'colorInterpolation',
  	  colorinterpolationfilters: 'colorInterpolationFilters',
  	  'color-interpolation-filters': 'colorInterpolationFilters',
  	  colorprofile: 'colorProfile',
  	  'color-profile': 'colorProfile',
  	  colorrendering: 'colorRendering',
  	  'color-rendering': 'colorRendering',
  	  contentscripttype: 'contentScriptType',
  	  contentstyletype: 'contentStyleType',
  	  cursor: 'cursor',
  	  cx: 'cx',
  	  cy: 'cy',
  	  d: 'd',
  	  datatype: 'datatype',
  	  decelerate: 'decelerate',
  	  descent: 'descent',
  	  diffuseconstant: 'diffuseConstant',
  	  direction: 'direction',
  	  display: 'display',
  	  divisor: 'divisor',
  	  dominantbaseline: 'dominantBaseline',
  	  'dominant-baseline': 'dominantBaseline',
  	  dur: 'dur',
  	  dx: 'dx',
  	  dy: 'dy',
  	  edgemode: 'edgeMode',
  	  elevation: 'elevation',
  	  enablebackground: 'enableBackground',
  	  'enable-background': 'enableBackground',
  	  end: 'end',
  	  exponent: 'exponent',
  	  externalresourcesrequired: 'externalResourcesRequired',
  	  fill: 'fill',
  	  fillopacity: 'fillOpacity',
  	  'fill-opacity': 'fillOpacity',
  	  fillrule: 'fillRule',
  	  'fill-rule': 'fillRule',
  	  filter: 'filter',
  	  filterres: 'filterRes',
  	  filterunits: 'filterUnits',
  	  floodopacity: 'floodOpacity',
  	  'flood-opacity': 'floodOpacity',
  	  floodcolor: 'floodColor',
  	  'flood-color': 'floodColor',
  	  focusable: 'focusable',
  	  fontfamily: 'fontFamily',
  	  'font-family': 'fontFamily',
  	  fontsize: 'fontSize',
  	  'font-size': 'fontSize',
  	  fontsizeadjust: 'fontSizeAdjust',
  	  'font-size-adjust': 'fontSizeAdjust',
  	  fontstretch: 'fontStretch',
  	  'font-stretch': 'fontStretch',
  	  fontstyle: 'fontStyle',
  	  'font-style': 'fontStyle',
  	  fontvariant: 'fontVariant',
  	  'font-variant': 'fontVariant',
  	  fontweight: 'fontWeight',
  	  'font-weight': 'fontWeight',
  	  format: 'format',
  	  from: 'from',
  	  fx: 'fx',
  	  fy: 'fy',
  	  g1: 'g1',
  	  g2: 'g2',
  	  glyphname: 'glyphName',
  	  'glyph-name': 'glyphName',
  	  glyphorientationhorizontal: 'glyphOrientationHorizontal',
  	  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',
  	  glyphorientationvertical: 'glyphOrientationVertical',
  	  'glyph-orientation-vertical': 'glyphOrientationVertical',
  	  glyphref: 'glyphRef',
  	  gradienttransform: 'gradientTransform',
  	  gradientunits: 'gradientUnits',
  	  hanging: 'hanging',
  	  horizadvx: 'horizAdvX',
  	  'horiz-adv-x': 'horizAdvX',
  	  horizoriginx: 'horizOriginX',
  	  'horiz-origin-x': 'horizOriginX',
  	  ideographic: 'ideographic',
  	  imagerendering: 'imageRendering',
  	  'image-rendering': 'imageRendering',
  	  in2: 'in2',
  	  in: 'in',
  	  inlist: 'inlist',
  	  intercept: 'intercept',
  	  k1: 'k1',
  	  k2: 'k2',
  	  k3: 'k3',
  	  k4: 'k4',
  	  k: 'k',
  	  kernelmatrix: 'kernelMatrix',
  	  kernelunitlength: 'kernelUnitLength',
  	  kerning: 'kerning',
  	  keypoints: 'keyPoints',
  	  keysplines: 'keySplines',
  	  keytimes: 'keyTimes',
  	  lengthadjust: 'lengthAdjust',
  	  letterspacing: 'letterSpacing',
  	  'letter-spacing': 'letterSpacing',
  	  lightingcolor: 'lightingColor',
  	  'lighting-color': 'lightingColor',
  	  limitingconeangle: 'limitingConeAngle',
  	  local: 'local',
  	  markerend: 'markerEnd',
  	  'marker-end': 'markerEnd',
  	  markerheight: 'markerHeight',
  	  markermid: 'markerMid',
  	  'marker-mid': 'markerMid',
  	  markerstart: 'markerStart',
  	  'marker-start': 'markerStart',
  	  markerunits: 'markerUnits',
  	  markerwidth: 'markerWidth',
  	  mask: 'mask',
  	  maskcontentunits: 'maskContentUnits',
  	  maskunits: 'maskUnits',
  	  mathematical: 'mathematical',
  	  mode: 'mode',
  	  numoctaves: 'numOctaves',
  	  offset: 'offset',
  	  opacity: 'opacity',
  	  operator: 'operator',
  	  order: 'order',
  	  orient: 'orient',
  	  orientation: 'orientation',
  	  origin: 'origin',
  	  overflow: 'overflow',
  	  overlineposition: 'overlinePosition',
  	  'overline-position': 'overlinePosition',
  	  overlinethickness: 'overlineThickness',
  	  'overline-thickness': 'overlineThickness',
  	  paintorder: 'paintOrder',
  	  'paint-order': 'paintOrder',
  	  panose1: 'panose1',
  	  'panose-1': 'panose1',
  	  pathlength: 'pathLength',
  	  patterncontentunits: 'patternContentUnits',
  	  patterntransform: 'patternTransform',
  	  patternunits: 'patternUnits',
  	  pointerevents: 'pointerEvents',
  	  'pointer-events': 'pointerEvents',
  	  points: 'points',
  	  pointsatx: 'pointsAtX',
  	  pointsaty: 'pointsAtY',
  	  pointsatz: 'pointsAtZ',
  	  prefix: 'prefix',
  	  preservealpha: 'preserveAlpha',
  	  preserveaspectratio: 'preserveAspectRatio',
  	  primitiveunits: 'primitiveUnits',
  	  property: 'property',
  	  r: 'r',
  	  radius: 'radius',
  	  refx: 'refX',
  	  refy: 'refY',
  	  renderingintent: 'renderingIntent',
  	  'rendering-intent': 'renderingIntent',
  	  repeatcount: 'repeatCount',
  	  repeatdur: 'repeatDur',
  	  requiredextensions: 'requiredExtensions',
  	  requiredfeatures: 'requiredFeatures',
  	  resource: 'resource',
  	  restart: 'restart',
  	  result: 'result',
  	  results: 'results',
  	  rotate: 'rotate',
  	  rx: 'rx',
  	  ry: 'ry',
  	  scale: 'scale',
  	  security: 'security',
  	  seed: 'seed',
  	  shaperendering: 'shapeRendering',
  	  'shape-rendering': 'shapeRendering',
  	  slope: 'slope',
  	  spacing: 'spacing',
  	  specularconstant: 'specularConstant',
  	  specularexponent: 'specularExponent',
  	  speed: 'speed',
  	  spreadmethod: 'spreadMethod',
  	  startoffset: 'startOffset',
  	  stddeviation: 'stdDeviation',
  	  stemh: 'stemh',
  	  stemv: 'stemv',
  	  stitchtiles: 'stitchTiles',
  	  stopcolor: 'stopColor',
  	  'stop-color': 'stopColor',
  	  stopopacity: 'stopOpacity',
  	  'stop-opacity': 'stopOpacity',
  	  strikethroughposition: 'strikethroughPosition',
  	  'strikethrough-position': 'strikethroughPosition',
  	  strikethroughthickness: 'strikethroughThickness',
  	  'strikethrough-thickness': 'strikethroughThickness',
  	  string: 'string',
  	  stroke: 'stroke',
  	  strokedasharray: 'strokeDasharray',
  	  'stroke-dasharray': 'strokeDasharray',
  	  strokedashoffset: 'strokeDashoffset',
  	  'stroke-dashoffset': 'strokeDashoffset',
  	  strokelinecap: 'strokeLinecap',
  	  'stroke-linecap': 'strokeLinecap',
  	  strokelinejoin: 'strokeLinejoin',
  	  'stroke-linejoin': 'strokeLinejoin',
  	  strokemiterlimit: 'strokeMiterlimit',
  	  'stroke-miterlimit': 'strokeMiterlimit',
  	  strokewidth: 'strokeWidth',
  	  'stroke-width': 'strokeWidth',
  	  strokeopacity: 'strokeOpacity',
  	  'stroke-opacity': 'strokeOpacity',
  	  suppresscontenteditablewarning: 'suppressContentEditableWarning',
  	  suppresshydrationwarning: 'suppressHydrationWarning',
  	  surfacescale: 'surfaceScale',
  	  systemlanguage: 'systemLanguage',
  	  tablevalues: 'tableValues',
  	  targetx: 'targetX',
  	  targety: 'targetY',
  	  textanchor: 'textAnchor',
  	  'text-anchor': 'textAnchor',
  	  textdecoration: 'textDecoration',
  	  'text-decoration': 'textDecoration',
  	  textlength: 'textLength',
  	  textrendering: 'textRendering',
  	  'text-rendering': 'textRendering',
  	  to: 'to',
  	  transform: 'transform',
  	  typeof: 'typeof',
  	  u1: 'u1',
  	  u2: 'u2',
  	  underlineposition: 'underlinePosition',
  	  'underline-position': 'underlinePosition',
  	  underlinethickness: 'underlineThickness',
  	  'underline-thickness': 'underlineThickness',
  	  unicode: 'unicode',
  	  unicodebidi: 'unicodeBidi',
  	  'unicode-bidi': 'unicodeBidi',
  	  unicoderange: 'unicodeRange',
  	  'unicode-range': 'unicodeRange',
  	  unitsperem: 'unitsPerEm',
  	  'units-per-em': 'unitsPerEm',
  	  unselectable: 'unselectable',
  	  valphabetic: 'vAlphabetic',
  	  'v-alphabetic': 'vAlphabetic',
  	  values: 'values',
  	  vectoreffect: 'vectorEffect',
  	  'vector-effect': 'vectorEffect',
  	  version: 'version',
  	  vertadvy: 'vertAdvY',
  	  'vert-adv-y': 'vertAdvY',
  	  vertoriginx: 'vertOriginX',
  	  'vert-origin-x': 'vertOriginX',
  	  vertoriginy: 'vertOriginY',
  	  'vert-origin-y': 'vertOriginY',
  	  vhanging: 'vHanging',
  	  'v-hanging': 'vHanging',
  	  videographic: 'vIdeographic',
  	  'v-ideographic': 'vIdeographic',
  	  viewbox: 'viewBox',
  	  viewtarget: 'viewTarget',
  	  visibility: 'visibility',
  	  vmathematical: 'vMathematical',
  	  'v-mathematical': 'vMathematical',
  	  vocab: 'vocab',
  	  widths: 'widths',
  	  wordspacing: 'wordSpacing',
  	  'word-spacing': 'wordSpacing',
  	  writingmode: 'writingMode',
  	  'writing-mode': 'writingMode',
  	  x1: 'x1',
  	  x2: 'x2',
  	  x: 'x',
  	  xchannelselector: 'xChannelSelector',
  	  xheight: 'xHeight',
  	  'x-height': 'xHeight',
  	  xlinkactuate: 'xlinkActuate',
  	  'xlink:actuate': 'xlinkActuate',
  	  xlinkarcrole: 'xlinkArcrole',
  	  'xlink:arcrole': 'xlinkArcrole',
  	  xlinkhref: 'xlinkHref',
  	  'xlink:href': 'xlinkHref',
  	  xlinkrole: 'xlinkRole',
  	  'xlink:role': 'xlinkRole',
  	  xlinkshow: 'xlinkShow',
  	  'xlink:show': 'xlinkShow',
  	  xlinktitle: 'xlinkTitle',
  	  'xlink:title': 'xlinkTitle',
  	  xlinktype: 'xlinkType',
  	  'xlink:type': 'xlinkType',
  	  xmlbase: 'xmlBase',
  	  'xml:base': 'xmlBase',
  	  xmllang: 'xmlLang',
  	  'xml:lang': 'xmlLang',
  	  xmlns: 'xmlns',
  	  'xml:space': 'xmlSpace',
  	  xmlnsxlink: 'xmlnsXlink',
  	  'xmlns:xlink': 'xmlnsXlink',
  	  xmlspace: 'xmlSpace',
  	  y1: 'y1',
  	  y2: 'y2',
  	  y: 'y',
  	  ychannelselector: 'yChannelSelector',
  	  z: 'z',
  	  zoomandpan: 'zoomAndPan'
  	};
  
  	var validateProperty$1 = function () {};
  
  	{
  	  var warnedProperties$1 = {};
  	  var _hasOwnProperty = Object.prototype.hasOwnProperty;
  	  var EVENT_NAME_REGEX = /^on./;
  	  var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;
  	  var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
  	  var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
  
  	  validateProperty$1 = function (tagName, name, value, canUseEventSystem) {
  	    if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {
  	      return true;
  	    }
  
  	    var lowerCasedName = name.toLowerCase();
  
  	    if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
  	      error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    } // We can't rely on the event system being injected on the server.
  
  
  	    if (canUseEventSystem) {
  	      if (registrationNameModules.hasOwnProperty(name)) {
  	        return true;
  	      }
  
  	      var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;
  
  	      if (registrationName != null) {
  	        error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);
  
  	        warnedProperties$1[name] = true;
  	        return true;
  	      }
  
  	      if (EVENT_NAME_REGEX.test(name)) {
  	        error('Unknown event handler property `%s`. It will be ignored.', name);
  
  	        warnedProperties$1[name] = true;
  	        return true;
  	      }
  	    } else if (EVENT_NAME_REGEX.test(name)) {
  	      // If no event plugins have been injected, we are in a server environment.
  	      // So we can't tell if the event name is correct for sure, but we can filter
  	      // out known bad ones like `onclick`. We can't suggest a specific replacement though.
  	      if (INVALID_EVENT_NAME_REGEX.test(name)) {
  	        error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);
  	      }
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    } // Let the ARIA attribute hook validate ARIA attributes
  
  
  	    if (rARIA$1.test(name) || rARIACamel$1.test(name)) {
  	      return true;
  	    }
  
  	    if (lowerCasedName === 'innerhtml') {
  	      error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    if (lowerCasedName === 'aria') {
  	      error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {
  	      error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    if (typeof value === 'number' && isNaN(value)) {
  	      error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    var propertyInfo = getPropertyInfo(name);
  	    var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.
  
  	    if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
  	      var standardName = possibleStandardNames[lowerCasedName];
  
  	      if (standardName !== name) {
  	        error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);
  
  	        warnedProperties$1[name] = true;
  	        return true;
  	      }
  	    } else if (!isReserved && name !== lowerCasedName) {
  	      // Unknown attributes should have lowercase casing since that's how they
  	      // will be cased anyway with server rendering.
  	      error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
  	      if (value) {
  	        error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name);
  	      } else {
  	        error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);
  	      }
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    } // Now that we've validated casing, do not validate
  	    // data types for reserved props
  
  
  	    if (isReserved) {
  	      return true;
  	    } // Warn when a known attribute is a bad type
  
  
  	    if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
  	      warnedProperties$1[name] = true;
  	      return false;
  	    } // Warn when passing the strings 'false' or 'true' into a boolean prop
  
  
  	    if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {
  	      error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value);
  
  	      warnedProperties$1[name] = true;
  	      return true;
  	    }
  
  	    return true;
  	  };
  	}
  
  	var warnUnknownProperties = function (type, props, canUseEventSystem) {
  	  {
  	    var unknownProps = [];
  
  	    for (var key in props) {
  	      var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);
  
  	      if (!isValid) {
  	        unknownProps.push(key);
  	      }
  	    }
  
  	    var unknownPropString = unknownProps.map(function (prop) {
  	      return '`' + prop + '`';
  	    }).join(', ');
  
  	    if (unknownProps.length === 1) {
  	      error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);
  	    } else if (unknownProps.length > 1) {
  	      error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);
  	    }
  	  }
  	};
  
  	function validateProperties$2(type, props, canUseEventSystem) {
  	  if (isCustomComponent(type, props)) {
  	    return;
  	  }
  
  	  warnUnknownProperties(type, props, canUseEventSystem);
  	}
  
  	var toArray = React.Children.toArray; // This is only used in DEV.
  	// Each entry is `this.stack` from a currently executing renderer instance.
  	// (There may be more than one because ReactDOMServer is reentrant).
  	// Each stack is an array of frames which may contain nested stacks of elements.
  
  	var currentDebugStacks = [];
  	var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
  	var ReactDebugCurrentFrame$4;
  	var prevGetCurrentStackImpl = null;
  
  	var getCurrentServerStackImpl = function () {
  	  return '';
  	};
  
  	var describeStackFrame = function (element) {
  	  return '';
  	};
  
  	var validatePropertiesInDevelopment = function (type, props) {};
  
  	var pushCurrentDebugStack = function (stack) {};
  
  	var pushElementToDebugStack = function (element) {};
  
  	var popCurrentDebugStack = function () {};
  
  	var hasWarnedAboutUsingContextAsConsumer = false;
  
  	{
  	  ReactDebugCurrentFrame$4 = ReactSharedInternals.ReactDebugCurrentFrame;
  
  	  validatePropertiesInDevelopment = function (type, props) {
  	    validateProperties(type, props);
  	    validateProperties$1(type, props);
  	    validateProperties$2(type, props,
  	    /* canUseEventSystem */
  	    false);
  	  };
  
  	  describeStackFrame = function (element) {
  	    var source = element._source;
  	    var type = element.type;
  	    var name = getComponentName(type);
  	    var ownerName = null;
  	    return describeComponentFrame(name, source, ownerName);
  	  };
  
  	  pushCurrentDebugStack = function (stack) {
  	    currentDebugStacks.push(stack);
  
  	    if (currentDebugStacks.length === 1) {
  	      // We are entering a server renderer.
  	      // Remember the previous (e.g. client) global stack implementation.
  	      prevGetCurrentStackImpl = ReactDebugCurrentFrame$4.getCurrentStack;
  	      ReactDebugCurrentFrame$4.getCurrentStack = getCurrentServerStackImpl;
  	    }
  	  };
  
  	  pushElementToDebugStack = function (element) {
  	    // For the innermost executing ReactDOMServer call,
  	    var stack = currentDebugStacks[currentDebugStacks.length - 1]; // Take the innermost executing frame (e.g. <Foo>),
  
  	    var frame = stack[stack.length - 1]; // and record that it has one more element associated with it.
  
  	    frame.debugElementStack.push(element); // We only need this because we tail-optimize single-element
  	    // children and directly handle them in an inner loop instead of
  	    // creating separate frames for them.
  	  };
  
  	  popCurrentDebugStack = function () {
  	    currentDebugStacks.pop();
  
  	    if (currentDebugStacks.length === 0) {
  	      // We are exiting the server renderer.
  	      // Restore the previous (e.g. client) global stack implementation.
  	      ReactDebugCurrentFrame$4.getCurrentStack = prevGetCurrentStackImpl;
  	      prevGetCurrentStackImpl = null;
  	    }
  	  };
  
  	  getCurrentServerStackImpl = function () {
  	    if (currentDebugStacks.length === 0) {
  	      // Nothing is currently rendering.
  	      return '';
  	    } // ReactDOMServer is reentrant so there may be multiple calls at the same time.
  	    // Take the frames from the innermost call which is the last in the array.
  
  
  	    var frames = currentDebugStacks[currentDebugStacks.length - 1];
  	    var stack = ''; // Go through every frame in the stack from the innermost one.
  
  	    for (var i = frames.length - 1; i >= 0; i--) {
  	      var frame = frames[i]; // Every frame might have more than one debug element stack entry associated with it.
  	      // This is because single-child nesting doesn't create materialized frames.
  	      // Instead it would push them through `pushElementToDebugStack()`.
  
  	      var debugElementStack = frame.debugElementStack;
  
  	      for (var ii = debugElementStack.length - 1; ii >= 0; ii--) {
  	        stack += describeStackFrame(debugElementStack[ii]);
  	      }
  	    }
  
  	    return stack;
  	  };
  	}
  
  	var didWarnDefaultInputValue = false;
  	var didWarnDefaultChecked = false;
  	var didWarnDefaultSelectValue = false;
  	var didWarnDefaultTextareaValue = false;
  	var didWarnInvalidOptionChildren = false;
  	var didWarnAboutNoopUpdateForComponent = {};
  	var didWarnAboutBadClass = {};
  	var didWarnAboutModulePatternComponent = {};
  	var didWarnAboutDeprecatedWillMount = {};
  	var didWarnAboutUndefinedDerivedState = {};
  	var didWarnAboutUninitializedState = {};
  	var valuePropNames = ['value', 'defaultValue'];
  	var newlineEatingTags = {
  	  listing: true,
  	  pre: true,
  	  textarea: true
  	}; // We accept any tag to be rendered but since this gets injected into arbitrary
  	// HTML, we want to make sure that it's a safe tag.
  	// http://www.w3.org/TR/REC-xml/#NT-Name
  
  	var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
  
  	var validatedTagCache = {};
  
  	function validateDangerousTag(tag) {
  	  if (!validatedTagCache.hasOwnProperty(tag)) {
  	    if (!VALID_TAG_REGEX.test(tag)) {
  	      {
  	        throw Error( "Invalid tag: " + tag );
  	      }
  	    }
  
  	    validatedTagCache[tag] = true;
  	  }
  	}
  
  	var styleNameCache = {};
  
  	var processStyleName = function (styleName) {
  	  if (styleNameCache.hasOwnProperty(styleName)) {
  	    return styleNameCache[styleName];
  	  }
  
  	  var result = hyphenateStyleName(styleName);
  	  styleNameCache[styleName] = result;
  	  return result;
  	};
  
  	function createMarkupForStyles(styles) {
  	  var serialized = '';
  	  var delimiter = '';
  
  	  for (var styleName in styles) {
  	    if (!styles.hasOwnProperty(styleName)) {
  	      continue;
  	    }
  
  	    var isCustomProperty = styleName.indexOf('--') === 0;
  	    var styleValue = styles[styleName];
  
  	    {
  	      if (!isCustomProperty) {
  	        warnValidStyle$1(styleName, styleValue);
  	      }
  	    }
  
  	    if (styleValue != null) {
  	      serialized += delimiter + (isCustomProperty ? styleName : processStyleName(styleName)) + ':';
  	      serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);
  	      delimiter = ';';
  	    }
  	  }
  
  	  return serialized || null;
  	}
  
  	function warnNoop(publicInstance, callerName) {
  	  {
  	    var _constructor = publicInstance.constructor;
  	    var componentName = _constructor && getComponentName(_constructor) || 'ReactClass';
  	    var warningKey = componentName + '.' + callerName;
  
  	    if (didWarnAboutNoopUpdateForComponent[warningKey]) {
  	      return;
  	    }
  
  	    error('%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, componentName);
  
  	    didWarnAboutNoopUpdateForComponent[warningKey] = true;
  	  }
  	}
  
  	function shouldConstruct(Component) {
  	  return Component.prototype && Component.prototype.isReactComponent;
  	}
  
  	function getNonChildrenInnerMarkup(props) {
  	  var innerHTML = props.dangerouslySetInnerHTML;
  
  	  if (innerHTML != null) {
  	    if (innerHTML.__html != null) {
  	      return innerHTML.__html;
  	    }
  	  } else {
  	    var content = props.children;
  
  	    if (typeof content === 'string' || typeof content === 'number') {
  	      return escapeTextForBrowser(content);
  	    }
  	  }
  
  	  return null;
  	}
  
  	function flattenTopLevelChildren(children) {
  	  if (!React.isValidElement(children)) {
  	    return toArray(children);
  	  }
  
  	  var element = children;
  
  	  if (element.type !== REACT_FRAGMENT_TYPE) {
  	    return [element];
  	  }
  
  	  var fragmentChildren = element.props.children;
  
  	  if (!React.isValidElement(fragmentChildren)) {
  	    return toArray(fragmentChildren);
  	  }
  
  	  var fragmentChildElement = fragmentChildren;
  	  return [fragmentChildElement];
  	}
  
  	function flattenOptionChildren(children) {
  	  if (children === undefined || children === null) {
  	    return children;
  	  }
  
  	  var content = ''; // Flatten children and warn if they aren't strings or numbers;
  	  // invalid types are ignored.
  
  	  React.Children.forEach(children, function (child) {
  	    if (child == null) {
  	      return;
  	    }
  
  	    content += child;
  
  	    {
  	      if (!didWarnInvalidOptionChildren && typeof child !== 'string' && typeof child !== 'number') {
  	        didWarnInvalidOptionChildren = true;
  
  	        error('Only strings and numbers are supported as <option> children.');
  	      }
  	    }
  	  });
  	  return content;
  	}
  
  	var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
  	var STYLE = 'style';
  	var RESERVED_PROPS = {
  	  children: null,
  	  dangerouslySetInnerHTML: null,
  	  suppressContentEditableWarning: null,
  	  suppressHydrationWarning: null
  	};
  
  	function createOpenTagMarkup(tagVerbatim, tagLowercase, props, namespace, makeStaticMarkup, isRootElement) {
  	  var ret = '<' + tagVerbatim;
  
  	  for (var propKey in props) {
  	    if (!hasOwnProperty$2.call(props, propKey)) {
  	      continue;
  	    }
  
  	    var propValue = props[propKey];
  
  	    if (propValue == null) {
  	      continue;
  	    }
  
  	    if (propKey === STYLE) {
  	      propValue = createMarkupForStyles(propValue);
  	    }
  
  	    var markup = null;
  
  	    if (isCustomComponent(tagLowercase, props)) {
  	      if (!RESERVED_PROPS.hasOwnProperty(propKey)) {
  	        markup = createMarkupForCustomAttribute(propKey, propValue);
  	      }
  	    } else {
  	      markup = createMarkupForProperty(propKey, propValue);
  	    }
  
  	    if (markup) {
  	      ret += ' ' + markup;
  	    }
  	  } // For static pages, no need to put React ID and checksum. Saves lots of
  	  // bytes.
  
  
  	  if (makeStaticMarkup) {
  	    return ret;
  	  }
  
  	  if (isRootElement) {
  	    ret += ' ' + createMarkupForRoot();
  	  }
  
  	  return ret;
  	}
  
  	function validateRenderResult(child, type) {
  	  if (child === undefined) {
  	    {
  	      {
  	        throw Error( (getComponentName(type) || 'Component') + "(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null." );
  	      }
  	    }
  	  }
  	}
  
  	function resolve(child, context, threadID) {
  	  while (React.isValidElement(child)) {
  	    // Safe because we just checked it's an element.
  	    var element = child;
  	    var Component = element.type;
  
  	    {
  	      pushElementToDebugStack(element);
  	    }
  
  	    if (typeof Component !== 'function') {
  	      break;
  	    }
  
  	    processChild(element, Component);
  	  } // Extra closure so queue and replace can be captured properly
  
  
  	  function processChild(element, Component) {
  	    var isClass = shouldConstruct(Component);
  	    var publicContext = processContext(Component, context, threadID, isClass);
  	    var queue = [];
  	    var replace = false;
  	    var updater = {
  	      isMounted: function (publicInstance) {
  	        return false;
  	      },
  	      enqueueForceUpdate: function (publicInstance) {
  	        if (queue === null) {
  	          warnNoop(publicInstance, 'forceUpdate');
  	          return null;
  	        }
  	      },
  	      enqueueReplaceState: function (publicInstance, completeState) {
  	        replace = true;
  	        queue = [completeState];
  	      },
  	      enqueueSetState: function (publicInstance, currentPartialState) {
  	        if (queue === null) {
  	          warnNoop(publicInstance, 'setState');
  	          return null;
  	        }
  
  	        queue.push(currentPartialState);
  	      }
  	    };
  	    var inst;
  
  	    if (isClass) {
  	      inst = new Component(element.props, publicContext, updater);
  
  	      if (typeof Component.getDerivedStateFromProps === 'function') {
  	        {
  	          if (inst.state === null || inst.state === undefined) {
  	            var componentName = getComponentName(Component) || 'Unknown';
  
  	            if (!didWarnAboutUninitializedState[componentName]) {
  	              error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, inst.state === null ? 'null' : 'undefined', componentName);
  
  	              didWarnAboutUninitializedState[componentName] = true;
  	            }
  	          }
  	        }
  
  	        var partialState = Component.getDerivedStateFromProps.call(null, element.props, inst.state);
  
  	        {
  	          if (partialState === undefined) {
  	            var _componentName = getComponentName(Component) || 'Unknown';
  
  	            if (!didWarnAboutUndefinedDerivedState[_componentName]) {
  	              error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', _componentName);
  
  	              didWarnAboutUndefinedDerivedState[_componentName] = true;
  	            }
  	          }
  	        }
  
  	        if (partialState != null) {
  	          inst.state = _assign({}, inst.state, partialState);
  	        }
  	      }
  	    } else {
  	      {
  	        if (Component.prototype && typeof Component.prototype.render === 'function') {
  	          var _componentName2 = getComponentName(Component) || 'Unknown';
  
  	          if (!didWarnAboutBadClass[_componentName2]) {
  	            error("The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', _componentName2, _componentName2);
  
  	            didWarnAboutBadClass[_componentName2] = true;
  	          }
  	        }
  	      }
  
  	      var componentIdentity = {};
  	      prepareToUseHooks(componentIdentity);
  	      inst = Component(element.props, publicContext, updater);
  	      inst = finishHooks(Component, element.props, inst, publicContext);
  
  	      if (inst == null || inst.render == null) {
  	        child = inst;
  	        validateRenderResult(child, Component);
  	        return;
  	      }
  
  	      {
  	        var _componentName3 = getComponentName(Component) || 'Unknown';
  
  	        if (!didWarnAboutModulePatternComponent[_componentName3]) {
  	          error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName3, _componentName3, _componentName3);
  
  	          didWarnAboutModulePatternComponent[_componentName3] = true;
  	        }
  	      }
  	    }
  
  	    inst.props = element.props;
  	    inst.context = publicContext;
  	    inst.updater = updater;
  	    var initialState = inst.state;
  
  	    if (initialState === undefined) {
  	      inst.state = initialState = null;
  	    }
  
  	    if (typeof inst.UNSAFE_componentWillMount === 'function' || typeof inst.componentWillMount === 'function') {
  	      if (typeof inst.componentWillMount === 'function') {
  	        {
  	          if ( inst.componentWillMount.__suppressDeprecationWarning !== true) {
  	            var _componentName4 = getComponentName(Component) || 'Unknown';
  
  	            if (!didWarnAboutDeprecatedWillMount[_componentName4]) {
  	              warn( // keep this warning in sync with ReactStrictModeWarning.js
  	              'componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\n\n' + '* Move code from componentWillMount to componentDidMount (preferred in most cases) ' + 'or the constructor.\n' + '\nPlease update the following components: %s', _componentName4);
  
  	              didWarnAboutDeprecatedWillMount[_componentName4] = true;
  	            }
  	          }
  	        } // In order to support react-lifecycles-compat polyfilled components,
  	        // Unsafe lifecycles should not be invoked for any component with the new gDSFP.
  
  
  	        if (typeof Component.getDerivedStateFromProps !== 'function') {
  	          inst.componentWillMount();
  	        }
  	      }
  
  	      if (typeof inst.UNSAFE_componentWillMount === 'function' && typeof Component.getDerivedStateFromProps !== 'function') {
  	        // In order to support react-lifecycles-compat polyfilled components,
  	        // Unsafe lifecycles should not be invoked for any component with the new gDSFP.
  	        inst.UNSAFE_componentWillMount();
  	      }
  
  	      if (queue.length) {
  	        var oldQueue = queue;
  	        var oldReplace = replace;
  	        queue = null;
  	        replace = false;
  
  	        if (oldReplace && oldQueue.length === 1) {
  	          inst.state = oldQueue[0];
  	        } else {
  	          var nextState = oldReplace ? oldQueue[0] : inst.state;
  	          var dontMutate = true;
  
  	          for (var i = oldReplace ? 1 : 0; i < oldQueue.length; i++) {
  	            var partial = oldQueue[i];
  
  	            var _partialState = typeof partial === 'function' ? partial.call(inst, nextState, element.props, publicContext) : partial;
  
  	            if (_partialState != null) {
  	              if (dontMutate) {
  	                dontMutate = false;
  	                nextState = _assign({}, nextState, _partialState);
  	              } else {
  	                _assign(nextState, _partialState);
  	              }
  	            }
  	          }
  
  	          inst.state = nextState;
  	        }
  	      } else {
  	        queue = null;
  	      }
  	    }
  
  	    child = inst.render();
  
  	    {
  	      if (child === undefined && inst.render._isMockFunction) {
  	        // This is probably bad practice. Consider warning here and
  	        // deprecating this convenience.
  	        child = null;
  	      }
  	    }
  
  	    validateRenderResult(child, Component);
  	    var childContext;
  
  	    {
  	      if (typeof inst.getChildContext === 'function') {
  	        var _childContextTypes = Component.childContextTypes;
  
  	        if (typeof _childContextTypes === 'object') {
  	          childContext = inst.getChildContext();
  
  	          for (var contextKey in childContext) {
  	            if (!(contextKey in _childContextTypes)) {
  	              {
  	                throw Error( (getComponentName(Component) || 'Unknown') + ".getChildContext(): key \"" + contextKey + "\" is not defined in childContextTypes." );
  	              }
  	            }
  	          }
  	        } else {
  	          {
  	            error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', getComponentName(Component) || 'Unknown');
  	          }
  	        }
  	      }
  
  	      if (childContext) {
  	        context = _assign({}, context, childContext);
  	      }
  	    }
  	  }
  
  	  return {
  	    child: child,
  	    context: context
  	  };
  	}
  
  	var ReactDOMServerRenderer =
  	/*#__PURE__*/
  	function () {
  	  // TODO: type this more strictly:
  	  // DEV-only
  	  function ReactDOMServerRenderer(children, makeStaticMarkup) {
  	    var flatChildren = flattenTopLevelChildren(children);
  	    var topFrame = {
  	      type: null,
  	      // Assume all trees start in the HTML namespace (not totally true, but
  	      // this is what we did historically)
  	      domNamespace: Namespaces.html,
  	      children: flatChildren,
  	      childIndex: 0,
  	      context: emptyObject,
  	      footer: ''
  	    };
  
  	    {
  	      topFrame.debugElementStack = [];
  	    }
  
  	    this.threadID = allocThreadID();
  	    this.stack = [topFrame];
  	    this.exhausted = false;
  	    this.currentSelectValue = null;
  	    this.previousWasTextNode = false;
  	    this.makeStaticMarkup = makeStaticMarkup;
  	    this.suspenseDepth = 0; // Context (new API)
  
  	    this.contextIndex = -1;
  	    this.contextStack = [];
  	    this.contextValueStack = [];
  
  	    {
  	      this.contextProviderStack = [];
  	    }
  	  }
  
  	  var _proto = ReactDOMServerRenderer.prototype;
  
  	  _proto.destroy = function destroy() {
  	    if (!this.exhausted) {
  	      this.exhausted = true;
  	      this.clearProviders();
  	      freeThreadID(this.threadID);
  	    }
  	  }
  	  /**
  	   * Note: We use just two stacks regardless of how many context providers you have.
  	   * Providers are always popped in the reverse order to how they were pushed
  	   * so we always know on the way down which provider you'll encounter next on the way up.
  	   * On the way down, we push the current provider, and its context value *before*
  	   * we mutated it, onto the stacks. Therefore, on the way up, we always know which
  	   * provider needs to be "restored" to which value.
  	   * https://github.com/facebook/react/pull/12985#issuecomment-396301248
  	   */
  	  ;
  
  	  _proto.pushProvider = function pushProvider(provider) {
  	    var index = ++this.contextIndex;
  	    var context = provider.type._context;
  	    var threadID = this.threadID;
  	    validateContextBounds(context, threadID);
  	    var previousValue = context[threadID]; // Remember which value to restore this context to on our way up.
  
  	    this.contextStack[index] = context;
  	    this.contextValueStack[index] = previousValue;
  
  	    {
  	      // Only used for push/pop mismatch warnings.
  	      this.contextProviderStack[index] = provider;
  	    } // Mutate the current value.
  
  
  	    context[threadID] = provider.props.value;
  	  };
  
  	  _proto.popProvider = function popProvider(provider) {
  	    var index = this.contextIndex;
  
  	    {
  	      if (index < 0 || provider !== this.contextProviderStack[index]) {
  	        error('Unexpected pop.');
  	      }
  	    }
  
  	    var context = this.contextStack[index];
  	    var previousValue = this.contextValueStack[index]; // "Hide" these null assignments from Flow by using `any`
  	    // because conceptually they are deletions--as long as we
  	    // promise to never access values beyond `this.contextIndex`.
  
  	    this.contextStack[index] = null;
  	    this.contextValueStack[index] = null;
  
  	    {
  	      this.contextProviderStack[index] = null;
  	    }
  
  	    this.contextIndex--; // Restore to the previous value we stored as we were walking down.
  	    // We've already verified that this context has been expanded to accommodate
  	    // this thread id, so we don't need to do it again.
  
  	    context[this.threadID] = previousValue;
  	  };
  
  	  _proto.clearProviders = function clearProviders() {
  	    // Restore any remaining providers on the stack to previous values
  	    for (var index = this.contextIndex; index >= 0; index--) {
  	      var context = this.contextStack[index];
  	      var previousValue = this.contextValueStack[index];
  	      context[this.threadID] = previousValue;
  	    }
  	  };
  
  	  _proto.read = function read(bytes) {
  	    if (this.exhausted) {
  	      return null;
  	    }
  
  	    var prevThreadID = currentThreadID;
  	    setCurrentThreadID(this.threadID);
  	    var prevDispatcher = ReactCurrentDispatcher.current;
  	    ReactCurrentDispatcher.current = Dispatcher;
  
  	    try {
  	      // Markup generated within <Suspense> ends up buffered until we know
  	      // nothing in that boundary suspended
  	      var out = [''];
  	      var suspended = false;
  
  	      while (out[0].length < bytes) {
  	        if (this.stack.length === 0) {
  	          this.exhausted = true;
  	          freeThreadID(this.threadID);
  	          break;
  	        }
  
  	        var frame = this.stack[this.stack.length - 1];
  
  	        if (suspended || frame.childIndex >= frame.children.length) {
  	          var footer = frame.footer;
  
  	          if (footer !== '') {
  	            this.previousWasTextNode = false;
  	          }
  
  	          this.stack.pop();
  
  	          if (frame.type === 'select') {
  	            this.currentSelectValue = null;
  	          } else if (frame.type != null && frame.type.type != null && frame.type.type.$$typeof === REACT_PROVIDER_TYPE) {
  	            var provider = frame.type;
  	            this.popProvider(provider);
  	          } else if (frame.type === REACT_SUSPENSE_TYPE) {
  	            this.suspenseDepth--;
  	            var buffered = out.pop();
  
  	            if (suspended) {
  	              suspended = false; // If rendering was suspended at this boundary, render the fallbackFrame
  
  	              var fallbackFrame = frame.fallbackFrame;
  
  	              if (!fallbackFrame) {
  	                {
  	                  throw Error(true ? "ReactDOMServer did not find an internal fallback frame for Suspense. This is a bug in React. Please file an issue." : formatProdErrorMessage(303));
  	                }
  	              }
  
  	              this.stack.push(fallbackFrame);
  	              out[this.suspenseDepth] += '<!--$!-->'; // Skip flushing output since we're switching to the fallback
  
  	              continue;
  	            } else {
  	              out[this.suspenseDepth] += buffered;
  	            }
  	          } // Flush output
  
  
  	          out[this.suspenseDepth] += footer;
  	          continue;
  	        }
  
  	        var child = frame.children[frame.childIndex++];
  	        var outBuffer = '';
  
  	        if (true) {
  	          pushCurrentDebugStack(this.stack); // We're starting work on this frame, so reset its inner stack.
  
  	          frame.debugElementStack.length = 0;
  	        }
  
  	        try {
  	          outBuffer += this.render(child, frame.context, frame.domNamespace);
  	        } catch (err) {
  	          if (err != null && typeof err.then === 'function') {
  	            if (enableSuspenseServerRenderer) {
  	              if (!(this.suspenseDepth > 0)) {
  	                {
  	                  throw Error(true ? "A React component suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display." : formatProdErrorMessage(342));
  	                }
  	              }
  
  	              suspended = true;
  	            } else {
  	              if (true) {
  	                {
  	                  throw Error(true ? "ReactDOMServer does not yet support Suspense." : formatProdErrorMessage(294));
  	                }
  	              }
  	            }
  	          } else {
  	            throw err;
  	          }
  	        } finally {
  	          if (true) {
  	            popCurrentDebugStack();
  	          }
  	        }
  
  	        if (out.length <= this.suspenseDepth) {
  	          out.push('');
  	        }
  
  	        out[this.suspenseDepth] += outBuffer;
  	      }
  
  	      return out[0];
  	    } finally {
  	      ReactCurrentDispatcher.current = prevDispatcher;
  	      setCurrentThreadID(prevThreadID);
  	    }
  	  };
  
  	  _proto.render = function render(child, context, parentNamespace) {
  	    if (typeof child === 'string' || typeof child === 'number') {
  	      var text = '' + child;
  
  	      if (text === '') {
  	        return '';
  	      }
  
  	      if (this.makeStaticMarkup) {
  	        return escapeTextForBrowser(text);
  	      }
  
  	      if (this.previousWasTextNode) {
  	        return '<!-- -->' + escapeTextForBrowser(text);
  	      }
  
  	      this.previousWasTextNode = true;
  	      return escapeTextForBrowser(text);
  	    } else {
  	      var nextChild;
  
  	      var _resolve = resolve(child, context, this.threadID);
  
  	      nextChild = _resolve.child;
  	      context = _resolve.context;
  
  	      if (nextChild === null || nextChild === false) {
  	        return '';
  	      } else if (!React.isValidElement(nextChild)) {
  	        if (nextChild != null && nextChild.$$typeof != null) {
  	          // Catch unexpected special types early.
  	          var $$typeof = nextChild.$$typeof;
  
  	          if (!($$typeof !== REACT_PORTAL_TYPE)) {
  	            {
  	              throw Error( "Portals are not currently supported by the server renderer. Render them conditionally so that they only appear on the client render." );
  	            }
  	          } // Catch-all to prevent an infinite loop if React.Children.toArray() supports some new type.
  
  
  	          {
  	            {
  	              throw Error( "Unknown element-like object type: " + $$typeof.toString() + ". This is likely a bug in React. Please file an issue." );
  	            }
  	          }
  	        }
  
  	        var nextChildren = toArray(nextChild);
  	        var frame = {
  	          type: null,
  	          domNamespace: parentNamespace,
  	          children: nextChildren,
  	          childIndex: 0,
  	          context: context,
  	          footer: ''
  	        };
  
  	        {
  	          frame.debugElementStack = [];
  	        }
  
  	        this.stack.push(frame);
  	        return '';
  	      } // Safe because we just checked it's an element.
  
  
  	      var nextElement = nextChild;
  	      var elementType = nextElement.type;
  
  	      if (typeof elementType === 'string') {
  	        return this.renderDOM(nextElement, context, parentNamespace);
  	      }
  
  	      switch (elementType) {
  	        case REACT_STRICT_MODE_TYPE:
  	        case REACT_CONCURRENT_MODE_TYPE:
  	        case REACT_PROFILER_TYPE:
  	        case REACT_SUSPENSE_LIST_TYPE:
  	        case REACT_FRAGMENT_TYPE:
  	          {
  	            var _nextChildren = toArray(nextChild.props.children);
  
  	            var _frame = {
  	              type: null,
  	              domNamespace: parentNamespace,
  	              children: _nextChildren,
  	              childIndex: 0,
  	              context: context,
  	              footer: ''
  	            };
  
  	            {
  	              _frame.debugElementStack = [];
  	            }
  
  	            this.stack.push(_frame);
  	            return '';
  	          }
  
  	        case REACT_SUSPENSE_TYPE:
  	          {
  	            {
  	              {
  	                {
  	                  throw Error( "ReactDOMServer does not yet support Suspense." );
  	                }
  	              }
  	            }
  	          }
  	      }
  
  	      if (typeof elementType === 'object' && elementType !== null) {
  	        switch (elementType.$$typeof) {
  	          case REACT_FORWARD_REF_TYPE:
  	            {
  	              var element = nextChild;
  
  	              var _nextChildren4;
  
  	              var componentIdentity = {};
  	              prepareToUseHooks(componentIdentity);
  	              _nextChildren4 = elementType.render(element.props, element.ref);
  	              _nextChildren4 = finishHooks(elementType.render, element.props, _nextChildren4, element.ref);
  	              _nextChildren4 = toArray(_nextChildren4);
  	              var _frame4 = {
  	                type: null,
  	                domNamespace: parentNamespace,
  	                children: _nextChildren4,
  	                childIndex: 0,
  	                context: context,
  	                footer: ''
  	              };
  
  	              {
  	                _frame4.debugElementStack = [];
  	              }
  
  	              this.stack.push(_frame4);
  	              return '';
  	            }
  
  	          case REACT_MEMO_TYPE:
  	            {
  	              var _element = nextChild;
  	              var _nextChildren5 = [React.createElement(elementType.type, _assign({
  	                ref: _element.ref
  	              }, _element.props))];
  	              var _frame5 = {
  	                type: null,
  	                domNamespace: parentNamespace,
  	                children: _nextChildren5,
  	                childIndex: 0,
  	                context: context,
  	                footer: ''
  	              };
  
  	              {
  	                _frame5.debugElementStack = [];
  	              }
  
  	              this.stack.push(_frame5);
  	              return '';
  	            }
  
  	          case REACT_PROVIDER_TYPE:
  	            {
  	              var provider = nextChild;
  	              var nextProps = provider.props;
  
  	              var _nextChildren6 = toArray(nextProps.children);
  
  	              var _frame6 = {
  	                type: provider,
  	                domNamespace: parentNamespace,
  	                children: _nextChildren6,
  	                childIndex: 0,
  	                context: context,
  	                footer: ''
  	              };
  
  	              {
  	                _frame6.debugElementStack = [];
  	              }
  
  	              this.pushProvider(provider);
  	              this.stack.push(_frame6);
  	              return '';
  	            }
  
  	          case REACT_CONTEXT_TYPE:
  	            {
  	              var reactContext = nextChild.type; // The logic below for Context differs depending on PROD or DEV mode. In
  	              // DEV mode, we create a separate object for Context.Consumer that acts
  	              // like a proxy to Context. This proxy object adds unnecessary code in PROD
  	              // so we use the old behaviour (Context.Consumer references Context) to
  	              // reduce size and overhead. The separate object references context via
  	              // a property called "_context", which also gives us the ability to check
  	              // in DEV mode if this property exists or not and warn if it does not.
  
  	              {
  	                if (reactContext._context === undefined) {
  	                  // This may be because it's a Context (rather than a Consumer).
  	                  // Or it may be because it's older React where they're the same thing.
  	                  // We only want to warn if we're sure it's a new React.
  	                  if (reactContext !== reactContext.Consumer) {
  	                    if (!hasWarnedAboutUsingContextAsConsumer) {
  	                      hasWarnedAboutUsingContextAsConsumer = true;
  
  	                      error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
  	                    }
  	                  }
  	                } else {
  	                  reactContext = reactContext._context;
  	                }
  	              }
  
  	              var _nextProps = nextChild.props;
  	              var threadID = this.threadID;
  	              validateContextBounds(reactContext, threadID);
  	              var nextValue = reactContext[threadID];
  
  	              var _nextChildren7 = toArray(_nextProps.children(nextValue));
  
  	              var _frame7 = {
  	                type: nextChild,
  	                domNamespace: parentNamespace,
  	                children: _nextChildren7,
  	                childIndex: 0,
  	                context: context,
  	                footer: ''
  	              };
  
  	              {
  	                _frame7.debugElementStack = [];
  	              }
  
  	              this.stack.push(_frame7);
  	              return '';
  	            }
  	          // eslint-disable-next-line-no-fallthrough
  
  	          case REACT_FUNDAMENTAL_TYPE:
  	            {
  
  	              {
  	                {
  	                  throw Error( "ReactDOMServer does not yet support the fundamental API." );
  	                }
  	              }
  	            }
  	          // eslint-disable-next-line-no-fallthrough
  
  	          case REACT_LAZY_TYPE:
  	            {
  	              var _element2 = nextChild;
  	              var lazyComponent = nextChild.type; // Attempt to initialize lazy component regardless of whether the
  	              // suspense server-side renderer is enabled so synchronously
  	              // resolved constructors are supported.
  
  	              initializeLazyComponentType(lazyComponent);
  
  	              switch (lazyComponent._status) {
  	                case Resolved:
  	                  {
  	                    var _nextChildren9 = [React.createElement(lazyComponent._result, _assign({
  	                      ref: _element2.ref
  	                    }, _element2.props))];
  	                    var _frame9 = {
  	                      type: null,
  	                      domNamespace: parentNamespace,
  	                      children: _nextChildren9,
  	                      childIndex: 0,
  	                      context: context,
  	                      footer: ''
  	                    };
  
  	                    {
  	                      _frame9.debugElementStack = [];
  	                    }
  
  	                    this.stack.push(_frame9);
  	                    return '';
  	                  }
  
  	                case Rejected:
  	                  throw lazyComponent._result;
  
  	                case Pending:
  	                default:
  	                  {
  	                    {
  	                      throw Error( "ReactDOMServer does not yet support lazy-loaded components." );
  	                    }
  	                  }
  
  	              }
  	            }
  	          // eslint-disable-next-line-no-fallthrough
  
  	          case REACT_SCOPE_TYPE:
  	            {
  
  	              {
  	                {
  	                  throw Error( "ReactDOMServer does not yet support scope components." );
  	                }
  	              }
  	            }
  	        }
  	      }
  
  	      var info = '';
  
  	      {
  	        var owner = nextElement._owner;
  
  	        if (elementType === undefined || typeof elementType === 'object' && elementType !== null && Object.keys(elementType).length === 0) {
  	          info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and " + 'named imports.';
  	        }
  
  	        var ownerName = owner ? getComponentName(owner) : null;
  
  	        if (ownerName) {
  	          info += '\n\nCheck the render method of `' + ownerName + '`.';
  	        }
  	      }
  
  	      {
  	        {
  	          throw Error( "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + (elementType == null ? elementType : typeof elementType) + "." + info );
  	        }
  	      }
  	    }
  	  };
  
  	  _proto.renderDOM = function renderDOM(element, context, parentNamespace) {
  	    var tag = element.type.toLowerCase();
  	    var namespace = parentNamespace;
  
  	    if (parentNamespace === Namespaces.html) {
  	      namespace = getIntrinsicNamespace(tag);
  	    }
  
  	    {
  	      if (namespace === Namespaces.html) {
  	        // Should this check be gated by parent namespace? Not sure we want to
  	        // allow <SVG> or <mATH>.
  	        if (tag !== element.type) {
  	          error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', element.type);
  	        }
  	      }
  	    }
  
  	    validateDangerousTag(tag);
  	    var props = element.props;
  
  	    if (tag === 'input') {
  	      {
  	        ReactControlledValuePropTypes.checkPropTypes('input', props);
  
  	        if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnDefaultChecked) {
  	          error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', 'A component', props.type);
  
  	          didWarnDefaultChecked = true;
  	        }
  
  	        if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultInputValue) {
  	          error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', 'A component', props.type);
  
  	          didWarnDefaultInputValue = true;
  	        }
  	      }
  
  	      props = _assign({
  	        type: undefined
  	      }, props, {
  	        defaultChecked: undefined,
  	        defaultValue: undefined,
  	        value: props.value != null ? props.value : props.defaultValue,
  	        checked: props.checked != null ? props.checked : props.defaultChecked
  	      });
  	    } else if (tag === 'textarea') {
  	      {
  	        ReactControlledValuePropTypes.checkPropTypes('textarea', props);
  
  	        if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultTextareaValue) {
  	          error('Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');
  
  	          didWarnDefaultTextareaValue = true;
  	        }
  	      }
  
  	      var initialValue = props.value;
  
  	      if (initialValue == null) {
  	        var defaultValue = props.defaultValue; // TODO (yungsters): Remove support for children content in <textarea>.
  
  	        var textareaChildren = props.children;
  
  	        if (textareaChildren != null) {
  	          {
  	            error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');
  	          }
  
  	          if (!(defaultValue == null)) {
  	            {
  	              throw Error( "If you supply `defaultValue` on a <textarea>, do not pass children." );
  	            }
  	          }
  
  	          if (Array.isArray(textareaChildren)) {
  	            if (!(textareaChildren.length <= 1)) {
  	              {
  	                throw Error( "<textarea> can only have at most one child." );
  	              }
  	            }
  
  	            textareaChildren = textareaChildren[0];
  	          }
  
  	          defaultValue = '' + textareaChildren;
  	        }
  
  	        if (defaultValue == null) {
  	          defaultValue = '';
  	        }
  
  	        initialValue = defaultValue;
  	      }
  
  	      props = _assign({}, props, {
  	        value: undefined,
  	        children: '' + initialValue
  	      });
  	    } else if (tag === 'select') {
  	      {
  	        ReactControlledValuePropTypes.checkPropTypes('select', props);
  
  	        for (var i = 0; i < valuePropNames.length; i++) {
  	          var propName = valuePropNames[i];
  
  	          if (props[propName] == null) {
  	            continue;
  	          }
  
  	          var isArray = Array.isArray(props[propName]);
  
  	          if (props.multiple && !isArray) {
  	            error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.', propName);
  	          } else if (!props.multiple && isArray) {
  	            error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.', propName);
  	          }
  	        }
  
  	        if (props.value !== undefined && props.defaultValue !== undefined && !didWarnDefaultSelectValue) {
  	          error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');
  
  	          didWarnDefaultSelectValue = true;
  	        }
  	      }
  
  	      this.currentSelectValue = props.value != null ? props.value : props.defaultValue;
  	      props = _assign({}, props, {
  	        value: undefined
  	      });
  	    } else if (tag === 'option') {
  	      var selected = null;
  	      var selectValue = this.currentSelectValue;
  	      var optionChildren = flattenOptionChildren(props.children);
  
  	      if (selectValue != null) {
  	        var value;
  
  	        if (props.value != null) {
  	          value = props.value + '';
  	        } else {
  	          value = optionChildren;
  	        }
  
  	        selected = false;
  
  	        if (Array.isArray(selectValue)) {
  	          // multiple
  	          for (var j = 0; j < selectValue.length; j++) {
  	            if ('' + selectValue[j] === value) {
  	              selected = true;
  	              break;
  	            }
  	          }
  	        } else {
  	          selected = '' + selectValue === value;
  	        }
  
  	        props = _assign({
  	          selected: undefined,
  	          children: undefined
  	        }, props, {
  	          selected: selected,
  	          children: optionChildren
  	        });
  	      }
  	    }
  
  	    {
  	      validatePropertiesInDevelopment(tag, props);
  	    }
  
  	    assertValidProps(tag, props);
  	    var out = createOpenTagMarkup(element.type, tag, props, namespace, this.makeStaticMarkup, this.stack.length === 1);
  	    var footer = '';
  
  	    if (omittedCloseTags.hasOwnProperty(tag)) {
  	      out += '/>';
  	    } else {
  	      out += '>';
  	      footer = '</' + element.type + '>';
  	    }
  
  	    var children;
  	    var innerMarkup = getNonChildrenInnerMarkup(props);
  
  	    if (innerMarkup != null) {
  	      children = [];
  
  	      if (newlineEatingTags.hasOwnProperty(tag) && innerMarkup.charAt(0) === '\n') {
  	        // text/html ignores the first character in these tags if it's a newline
  	        // Prefer to break application/xml over text/html (for now) by adding
  	        // a newline specifically to get eaten by the parser. (Alternately for
  	        // textareas, replacing "^\n" with "\r\n" doesn't get eaten, and the first
  	        // \r is normalized out by HTMLTextAreaElement#value.)
  	        // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>
  	        // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>
  	        // See: <http://www.w3.org/TR/html5/syntax.html#newlines>
  	        // See: Parsing of "textarea" "listing" and "pre" elements
  	        //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>
  	        out += '\n';
  	      }
  
  	      out += innerMarkup;
  	    } else {
  	      children = toArray(props.children);
  	    }
  
  	    var frame = {
  	      domNamespace: getChildNamespace(parentNamespace, element.type),
  	      type: tag,
  	      children: children,
  	      childIndex: 0,
  	      context: context,
  	      footer: footer
  	    };
  
  	    {
  	      frame.debugElementStack = [];
  	    }
  
  	    this.stack.push(frame);
  	    this.previousWasTextNode = false;
  	    return out;
  	  };
  
  	  return ReactDOMServerRenderer;
  	}();
  
  	/**
  	 * Render a ReactElement to its initial HTML. This should only be used on the
  	 * server.
  	 * See https://reactjs.org/docs/react-dom-server.html#rendertostring
  	 */
  
  	function renderToString(element) {
  	  var renderer = new ReactDOMServerRenderer(element, false);
  
  	  try {
  	    var markup = renderer.read(Infinity);
  	    return markup;
  	  } finally {
  	    renderer.destroy();
  	  }
  	}
  	/**
  	 * Similar to renderToString, except this doesn't create extra DOM attributes
  	 * such as data-react-id that React uses internally.
  	 * See https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup
  	 */
  
  	function renderToStaticMarkup(element) {
  	  var renderer = new ReactDOMServerRenderer(element, true);
  
  	  try {
  	    var markup = renderer.read(Infinity);
  	    return markup;
  	  } finally {
  	    renderer.destroy();
  	  }
  	}
  
  	function renderToNodeStream() {
  	  {
  	    {
  	      throw Error( "ReactDOMServer.renderToNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToString() instead." );
  	    }
  	  }
  	}
  
  	function renderToStaticNodeStream() {
  	  {
  	    {
  	      throw Error( "ReactDOMServer.renderToStaticNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToStaticMarkup() instead." );
  	    }
  	  }
  	} // Note: when changing this, also consider https://github.com/facebook/react/issues/11526
  
  
  	var ReactDOMServer = {
  	  renderToString: renderToString,
  	  renderToStaticMarkup: renderToStaticMarkup,
  	  renderToNodeStream: renderToNodeStream,
  	  renderToStaticNodeStream: renderToStaticNodeStream,
  	  version: ReactVersion
  	};
  
  	// TODO: decide on the top-level export form.
  	// This is hacky but makes it work with both Rollup and Jest
  
  
  	var server_browser = ReactDOMServer.default || ReactDOMServer;
  
  	module.exports = server_browser;
  	  })();
  	}
  
  	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))
  
  /***/ })
  /******/ ]);